From 51ef7987505973a60b7ea93adb968e64df711724 Mon Sep 17 00:00:00 2001 From: Jakob Date: Fri, 5 Jun 2026 14:37:43 +0200 Subject: [PATCH] Release v7: complete Z21 LAN protocol, docs, CI/CD and hardware tests --- .github/workflows/Build.yml | 64 +- .github/workflows/BuildAndDeployDoc.yml | 58 +- .github/workflows/MutationTesting.yml | 6 +- .github/workflows/Release.yml | 57 + .gitignore | 7 +- CLAUDE.md | 154 ++ Directory.Build.props | 13 + GitVersion.yaml | 167 -- README.md | 165 +- docfx/articles/getting-started.md | 118 ++ docfx/articles/toc.yml | 2 + docfx/docfx.json | 54 + docfx/index.md | 63 + docfx/toc.yml | 6 + .../CommandStation.Abstractions.csproj | 20 + .../Framing/FrameReceivedEventArgs.cs | 15 + .../Framing/IFrameReader.cs | 20 + .../IAccessoryControl.cs | 24 + .../ICommandStation.cs | 23 + .../IFastClockControl.cs | 22 + .../IFeedbackControl.cs | 17 + .../ILocoControl.cs | 24 + .../IProgrammingControl.cs | 21 + .../ISystemInfoProvider.cs | 24 + .../ITrackPowerControl.cs | 25 + .../Model/AccessoryOutput.cs | 4 +- .../Model/AccessoryState.cs | 5 +- .../Model/Capabilities.cs | 6 +- .../Model/CentralState.cs | 7 +- .../Model/CentralStateEx.cs | 7 +- .../Model/CvProgrammingError.cs | 14 + .../Model/CvValue.cs | 8 + .../Model/DccSpeedMode.cs | 6 +- .../Model/DecoderMode.cs | 8 +- .../Model/DrivingDirection.cs | 4 +- .../Model/ExtAccessoryInfo.cs | 7 + .../Model/FeedbackData.cs | 10 + .../Model/FirmwareVersion.cs | 41 + .../Model/FunctionToggleType.cs | 4 +- .../Model/LocoFunctionData.cs | 4 +- .../Model/LocoInfoData.cs | 6 +- .../Model/ModelTime.cs | 8 + .../Model/SystemState.cs | 21 +- .../Model/TurnoutInfo.cs | 8 + .../Transport/BytesReceivedEventArgs.cs | 15 + .../Transport/ConnectionChangedEventArgs.cs | 14 + .../Transport/ITransport.cs | 33 + ...mmandStation.Transport.Udp.UnitTest.csproj | 29 + .../UdpTransportTest.cs | 284 +++ .../stryker-config.json | 16 + .../CommandStation.Transport.Udp.csproj | 29 + .../UdpTransport.cs | 169 ++ .../UdpTransportOptions.cs | 21 + .../Z21AutofacExtensions.cs | 51 +- src/Z21.Autofac/Z21.Autofac.csproj | 6 +- src/Z21.Autofac/Z21AutofacExtensions.cs | 102 +- .../Core/Codecs/AddressCodecTest.cs | 208 +++ .../LocoSpeedCodecTest.cs} | 36 +- .../Command/Booster/BoosterCommandTest.cs | 58 + .../Core/Command/Can/CanCommandTest.cs | 49 + .../Core/Command/CommandTestFixture.cs | 12 + .../Command/Decoder/DecoderCommandTest.cs | 43 + .../Command/Driving/GetLocoInfoCommandTest.cs | 7 +- .../Command/Driving/PurgeLocoCommandTest.cs | 9 +- .../Driving/SetLocoBinaryStateCommandTest.cs | 28 + .../Driving/SetLocoDriveCommandTest.cs | 9 +- .../Driving/SetLocoEStopCommandTest.cs | 9 +- .../Driving/SetLocoFunctionCommandTest.cs | 20 +- .../SetLocoFunctionGroupCommandTest.cs | 18 + .../Command/FastClock/FastClockCommandTest.cs | 62 + .../Feedback/GetRmBusDataCommandTest.cs | 17 + .../Feedback/ProgramRmBusModuleCommandTest.cs | 17 + .../Command/LocoNet/LocoNetCommandTest.cs | 31 + .../Core/Command/NewCommandNameTest.cs | 62 + .../CvPomAccessoryReadByteCommandTest.cs | 17 + .../CvPomAccessoryWriteBitCommandTest.cs | 18 + .../CvPomAccessoryWriteByteCommandTest.cs | 16 + .../Programming/CvPomReadByteCommandTest.cs | 16 + .../Programming/CvPomWriteBitCommandTest.cs | 18 + .../Programming/CvPomWriteByteCommandTest.cs | 17 + .../Command/Programming/CvReadCommandTest.cs | 17 + .../Command/Programming/CvWriteCommandTest.cs | 16 + .../Programming/DccReadRegisterCommandTest.cs | 16 + .../DccWriteRegisterCommandTest.cs | 16 + .../Programming/MmWriteByteCommandTest.cs | 16 + .../RailCom/GetRailComDataCommandTest.cs | 18 + .../Settings/GetAccessoryModeCommandTest.cs | 7 +- .../Settings/GetLocoModeCommandTest.cs | 7 +- .../Settings/SetAccessoryModeCommandTest.cs | 9 +- .../Settings/SetLocoModeCommandTest.cs | 9 +- .../GetExtAccessoryInfoCommandTest.cs | 11 +- .../Switching/GetTurnoutInfoCommandTest.cs | 9 +- .../Switching/SetExtAccessoryCommandTest.cs | 19 +- .../Switching/SetTurnoutCommandTest.cs | 17 +- .../GetBroadcastFlagsCommandTest.cs | 19 +- .../Command/SystemState/GetCodeCommandTest.cs | 17 +- .../GetFirmwareVersionCommandTest.cs | 22 +- .../SystemState/GetHardwareInfoCommandTest.cs | 17 +- .../SystemState/GetSerialNumberCommandTest.cs | 19 +- .../SystemState/GetStatusCommandTest.cs | 20 +- .../GetSystemStateDataCommandTest.cs | 7 +- .../SystemState/GetVersionCommandTest.cs | 20 +- .../Command/SystemState/LogOffCommandTest.cs | 19 +- .../SetBroadcastFlagsCommandTest.cs | 44 +- .../TrackPower/SetStopCommandTest.cs | 19 +- .../TrackPower/SetTrackPowerOffCommandTest.cs | 20 +- .../TrackPower/SetTrackPowerOnCommandTest.cs | 20 +- .../Core/Command/Z21CommandFactoryTest.cs | 58 + .../ZLink/GetZLinkHardwareInfoCommandTest.cs | 15 + .../LocoSpeedOutOfRangeExceptionTest.cs | 16 +- .../MtuPayloadLengthExceededExceptionTest.cs | 8 +- src/Z21.Client.UnitTest/Core/FakeTransport.cs | 50 + .../Core/Framing/Z21FrameBuilderTest.cs | 99 + .../Core/Framing/Z21FrameReaderTest.cs | 133 ++ .../Core/Helper/AddressHelperTest.cs | 57 - .../Core/Helper/DelayedActionTest.cs | 47 + .../SwitchDecoderPayloadTest.cs | 12 +- .../Core/Model/FirmwareVersionTest.cs | 32 + .../Reflection/Z21ServiceDiscoveryTest.cs | 55 + .../Booster/BoosterResponseHandlerTest.cs | 79 + .../Can/CanResponseHandlerTest.cs | 112 ++ .../DecoderDescriptionResponseHandlerTest.cs | 68 + .../DecoderSystemStateResponseHandlerTest.cs | 101 ++ .../Driving/LocoInfoResponseHandlerTest.cs | 65 +- .../FastClock/FastClockResponseHandlerTest.cs | 101 ++ .../RmBusDataChangedResponseHandlerTest.cs | 46 + .../LocoNet/LocoNetResponseHandlerTest.cs | 101 ++ .../ResponseHandler/NewHandlerContractTest.cs | 95 + .../PreExistingHandlerContractTest.cs | 69 + .../Programming/CvNackResponseHandlerTest.cs | 40 + .../CvNackShortCircuitResponseHandlerTest.cs | 40 + .../CvResultResponseHandlerTest.cs | 47 + .../RailComDataChangedResponseHandlerTest.cs | 48 + .../ExtAccessoryInfoResponseHandlerTest.cs | 5 +- .../TurnoutInfoResponseHandlerTest.cs | 3 +- .../HardwareInfoResponseHandlerTest.cs | 2 + ...stemStateDataChangedResponseHandlerTest.cs | 2 +- .../ZLinkHardwareInfoResponseHandlerTest.cs | 94 + .../ResponseParser/RailComDataParserTest.cs | 31 + .../Core/Z21CommandStationTest.cs | 372 ++++ .../Core/Z21ResponseHandlerTest.cs | 84 + src/Z21.Client.UnitTest/GlobalUsings.cs | 1 + src/Z21.Client.UnitTest/stryker-config.json | 16 + src/Z21.Client/Core/Codecs/AddressCodec.cs | 78 + src/Z21.Client/Core/Codecs/IAddressCodec.cs | 51 + src/Z21.Client/Core/Codecs/ILocoSpeedCodec.cs | 14 + src/Z21.Client/Core/Codecs/LocoSpeedCodec.cs | 58 + .../Booster/GetBoosterDescriptionCommand.cs | 19 + .../Booster/GetBoosterSystemStateCommand.cs | 19 + .../Booster/SetBoosterDescriptionCommand.cs | 33 + .../Command/Booster/SetBoosterPowerCommand.cs | 21 + .../Core/Command/Can/GetCanDetectorCommand.cs | 22 + .../Can/GetCanDeviceDescriptionCommand.cs | 22 + .../Can/SetCanBoosterTrackPowerCommand.cs | 22 + .../Can/SetCanDeviceDescriptionCommand.cs | 40 + .../Decoder/GetDecoderDescriptionCommand.cs | 19 + .../Decoder/GetDecoderSystemStateCommand.cs | 19 + .../Decoder/SetDecoderDescriptionCommand.cs | 33 + .../Command/Driving/GetLocoInfoCommand.cs | 24 +- .../Core/Command/Driving/PurgeLocoCommand.cs | 20 +- .../Driving/SetLocoBinaryStateCommand.cs | 29 + .../Command/Driving/SetLocoDriveCommand.cs | 24 +- .../Command/Driving/SetLocoEStopCommand.cs | 21 +- .../Command/Driving/SetLocoFunctionCommand.cs | 28 +- .../Driving/SetLocoFunctionGroupCommand.cs | 22 + .../FastClock/FastClockControlCommand.cs | 38 + .../FastClock/GetFastClockSettingsCommand.cs | 19 + .../FastClock/SetFastClockSettingsCommand.cs | 20 + .../SetFastClockSettingsWithRateCommand.cs | 20 + ...etFastClockSettingsWithStartTimeCommand.cs | 20 + .../Command/Feedback/GetRmBusDataCommand.cs | 20 + .../Feedback/ProgramRmBusModuleCommand.cs | 20 + .../Core/Command/IZ21CommandFactory.cs | 14 + .../Command/LocoNet/LocoNetDetectorCommand.cs | 22 + .../LocoNet/LocoNetDispatchAddressCommand.cs | 22 + .../Command/LocoNet/LocoNetFromLanCommand.cs | 20 + .../CvPomAccessoryReadByteCommand.cs | 24 + .../CvPomAccessoryWriteBitCommand.cs | 25 + .../CvPomAccessoryWriteByteCommand.cs | 24 + .../Programming/CvPomReadByteCommand.cs | 24 + .../Programming/CvPomWriteBitCommand.cs | 24 + .../Programming/CvPomWriteByteCommand.cs | 23 + .../Core/Command/Programming/CvReadCommand.cs | 21 + .../Command/Programming/CvWriteCommand.cs | 21 + .../Programming/DccReadRegisterCommand.cs | 20 + .../Programming/DccWriteRegisterCommand.cs | 20 + .../Command/Programming/MmWriteByteCommand.cs | 20 + .../Command/RailCom/GetRailComDataCommand.cs | 22 + .../Settings/GetAccessoryModeCommand.cs | 23 +- .../Command/Settings/GetLocoModeCommand.cs | 22 +- .../Settings/SetAccessoryModeCommand.cs | 21 +- .../Command/Settings/SetLocoModeCommand.cs | 21 +- .../Switching/GetExtAccessoryInfoCommand.cs | 20 +- .../Switching/GetTurnoutInfoCommand.cs | 19 +- .../Switching/SetExtAccessoryCommand.cs | 24 +- .../Command/Switching/SetTurnoutCommand.cs | 23 +- .../SystemState/GetBroadcastFlagsCommand.cs | 19 +- .../SystemState/GetFirmwareVersionCommand.cs | 22 +- .../SystemState/GetHardwareInfoCommand.cs | 17 +- .../SystemState/GetSerialNumberCommand.cs | 19 +- .../SystemState/GetSoftwareLockCommand.cs | 17 +- .../Command/SystemState/GetStatusCommand.cs | 20 +- .../SystemState/GetSystemStateDataCommand.cs | 17 +- .../Command/SystemState/GetVersionCommand.cs | 20 +- .../Core/Command/SystemState/LogOffCommand.cs | 21 +- .../SystemState/SetBroadcastFlagsCommand.cs | 22 +- .../SystemState/TrackPower/SetStopCommand.cs | 19 +- .../TrackPower/SetTrackPowerOffCommand.cs | 20 +- .../TrackPower/SetTrackPowerOnCommand.cs | 20 +- .../Core/Command/Z21CommandFactory.cs | 37 + .../ZLink/GetZLinkHardwareInfoCommand.cs | 19 + .../Exception/LocoSpeedOutOfRangeException.cs | 6 +- .../MtuPayloadLengthExceededException.cs | 4 +- .../Core/Exception/NotConnectedException.cs | 11 + .../Core/Framing/IZ21FrameBuilder.cs | 26 + .../Core/Framing/Z21FrameBuilder.cs | 52 + src/Z21.Client/Core/Framing/Z21FrameReader.cs | 60 + src/Z21.Client/Core/Helper/AddressHelper.cs | 35 - src/Z21.Client/Core/Helper/DelayedAction.cs | 10 +- src/Z21.Client/Core/Helper/LocoSpeedHelper.cs | 73 - src/Z21.Client/Core/IZ21Client.cs | 24 - src/Z21.Client/Core/IZ21CommandStation.cs | 23 + .../Core/Model/BoosterSystemState.cs | 21 + src/Z21.Client/Core/Model/CanBoosterState.cs | 28 + .../Core/Model/CanBoosterSystemState.cs | 7 + src/Z21.Client/Core/Model/CanDetectorData.cs | 8 + .../BoosterDescriptionReceivedEventArgs.cs | 10 + .../BoosterSystemStateReceivedEventArgs.cs | 12 + .../CanBoosterSystemStateReceivedEventArgs.cs | 12 + .../EventArgs/CanDetectorReceivedEventArgs.cs | 12 + .../CanDeviceDescriptionReceivedEventArgs.cs | 12 + .../EventArgs/ConnectionChangedEventArgs.cs | 7 - .../EventArgs/CvResultReceivedEventArgs.cs | 12 + .../DecoderDescriptionReceivedEventArgs.cs | 10 + .../FastClockDataReceivedEventArgs.cs | 12 + .../FastClockSettingsReceivedEventArgs.cs | 12 + .../Model/EventArgs/HardwareInfoEventArgs.cs | 7 +- .../LocoNetDetectorReceivedEventArgs.cs | 15 + ...LocoNetDispatchAddressReceivedEventArgs.cs | 13 + .../LocoNetMessageReceivedEventArgs.cs | 11 + .../EventArgs/RailComDataReceivedEventArgs.cs | 10 + .../EventArgs/ResponseReceivedEventArgs.cs | 7 - .../EventArgs/RmBusDataReceivedEventArgs.cs | 13 + ...gnalDecoderSystemStateReceivedEventArgs.cs | 12 + ...itchDecoderSystemStateReceivedEventArgs.cs | 12 + .../ZLinkHardwareInfoReceivedEventArgs.cs | 12 + src/Z21.Client/Core/Model/FastClockAction.cs | 17 + src/Z21.Client/Core/Model/FastClockData.cs | 7 + .../Core/Model/FastClockSettings.cs | 31 + .../Core/Model/FastClockSettingsData.cs | 7 + src/Z21.Client/Core/Model/FirmwareVersion.cs | 39 - .../Core/Model/LocoFunctionGroup.cs | 39 + src/Z21.Client/Core/Model/RailComData.cs | 7 + src/Z21.Client/Core/Model/RailComOptions.cs | 23 + .../Core/Model/SignalDecoderSystemState.cs | 21 + .../Core/Model/SwitchDecoderSystemState.cs | 20 + src/Z21.Client/Core/Model/Z21Configuration.cs | 68 - .../Core/Model/ZLinkHardwareInfo.cs | 7 + .../Core/Reflection/Z21ServiceDiscovery.cs | 30 + .../BoosterDescriptionResponseHandler.cs | 45 + .../BoosterSystemStateResponseHandler.cs | 43 + .../CanBoosterSystemStateResponseHandler.cs | 38 + .../Can/CanDetectorResponseHandler.cs | 39 + .../CanDeviceDescriptionResponseHandler.cs | 40 + .../DecoderDescriptionResponseHandler.cs | 38 + .../DecoderSystemStateResponseHandler.cs | 44 + .../Driving/LocoInfoResponseHandler.cs | 49 +- .../FastClock/FastClockDataResponseHandler.cs | 43 + .../FastClockSettingsResponseHandler.cs | 36 + .../RmBusDataChangedResponseHandler.cs | 37 + .../ResponseHandler/IZ21ResponseHandler.cs | 19 + .../LocoNet/LocoNetDetectorResponseHandler.cs | 35 + .../LocoNetDispatchAddressResponseHandler.cs | 34 + .../LocoNet/LocoNetFromLanResponseHandler.cs | 32 + .../LocoNet/LocoNetReceiveResponseHandler.cs | 32 + .../LocoNet/LocoNetTransmitResponseHandler.cs | 32 + .../Programming/CvNackResponseHandler.cs | 28 + .../CvNackShortCircuitResponseHandler.cs | 28 + .../Programming/CvResultResponseHandler.cs | 32 + .../RailComDataChangedResponseHandler.cs | 37 + .../Settings/AccessoryModeResponseHandler.cs | 15 +- .../Settings/LocoModeResponseHandler.cs | 13 +- .../ExtAccessoryInfoResponseHandler.cs | 24 +- .../Switching/TurnoutInfoResponseHandler.cs | 28 +- .../BroadcastFlagsResponseHandler.cs | 13 +- .../FirmwareVersionResponseHandler.cs | 18 +- .../HardwareInfoResponseHandler.cs | 17 +- .../SerialNumberResponseHandler.cs | 14 +- .../SoftwareLockResponseHandler.cs | 13 +- .../StatusChangedResponseHandler.cs | 17 +- .../SystemStateDataChangedResponseHandler.cs | 12 +- .../ProgrammingModeResponseHandler.cs | 17 +- .../TrackPower/StoppedResponseHandler.cs | 17 +- .../TrackPowerOffResponseHandler.cs | 17 +- .../TrackPower/TrackPowerOnResponseHandler.cs | 17 +- .../TrackPower/TrackShortResponseHandler.cs | 17 +- .../UnknownCommandResponseHandler.cs | 17 +- .../SystemState/VersionResponseHandler.cs | 16 +- .../ZLink/ZLinkHardwareInfoResponseHandler.cs | 34 + .../Core/ResponseParser/RailComDataParser.cs | 30 + .../SignalDecoderSystemStateParser.cs | 36 + .../SwitchDecoderSystemStateParser.cs | 34 + .../ResponseParser/ZLinkHardwareInfoParser.cs | 38 + src/Z21.Client/Core/Z21Client.cs | 88 - src/Z21.Client/Core/Z21CommandStation.cs | 214 +++ src/Z21.Client/Core/Z21Options.cs | 26 + src/Z21.Client/Core/Z21ResponseHandler.cs | 70 +- src/Z21.Client/Core/Z21Watchdog.cs | 54 - src/Z21.Client/GlobalUsings.cs | 1 + src/Z21.Client/Transport/IZ21Transport.cs | 19 - src/Z21.Client/Transport/Z21Transport.cs | 70 - src/Z21.Client/Z21.Client.csproj | 11 +- .../Command/CliGetFirmwareVersionCommand.cs | 2 +- .../Command/CliSetTrackPowerCommand.cs | 4 +- src/Z21.Console/Program.cs | 8 +- .../SpyTransport.cs | 33 + .../Z21DependencyInjectionExtensionTest.cs | 91 + .../Z21.DependencyInjection.csproj | 8 +- .../Z21DependencyInjectionExtension.cs | 90 +- src/Z21.SmokeTest/Z21.SmokeTest.csproj | 29 + src/Z21.SmokeTest/Z21HardwareTests.cs | 403 +++++ src/Z21.sln | 88 +- src/api/z21-lan-protokoll.md | 1589 +++++++++++++++++ src/api/z21-lan-protokoll.pdf | Bin 0 -> 1694853 bytes src/docfx.json | 38 - src/toc.yml | 8 - version.json | 7 + 327 files changed, 10305 insertions(+), 1998 deletions(-) create mode 100644 .github/workflows/Release.yml create mode 100644 CLAUDE.md create mode 100644 Directory.Build.props delete mode 100644 GitVersion.yaml create mode 100644 docfx/articles/getting-started.md create mode 100644 docfx/articles/toc.yml create mode 100644 docfx/docfx.json create mode 100644 docfx/index.md create mode 100644 docfx/toc.yml create mode 100644 src/CommandStation.Abstractions/CommandStation.Abstractions.csproj create mode 100644 src/CommandStation.Abstractions/Framing/FrameReceivedEventArgs.cs create mode 100644 src/CommandStation.Abstractions/Framing/IFrameReader.cs create mode 100644 src/CommandStation.Abstractions/IAccessoryControl.cs create mode 100644 src/CommandStation.Abstractions/ICommandStation.cs create mode 100644 src/CommandStation.Abstractions/IFastClockControl.cs create mode 100644 src/CommandStation.Abstractions/IFeedbackControl.cs create mode 100644 src/CommandStation.Abstractions/ILocoControl.cs create mode 100644 src/CommandStation.Abstractions/IProgrammingControl.cs create mode 100644 src/CommandStation.Abstractions/ISystemInfoProvider.cs create mode 100644 src/CommandStation.Abstractions/ITrackPowerControl.cs rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/AccessoryOutput.cs (75%) rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/AccessoryState.cs (76%) rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/Capabilities.cs (92%) rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/CentralState.cs (90%) rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/CentralStateEx.cs (92%) create mode 100644 src/CommandStation.Abstractions/Model/CvProgrammingError.cs create mode 100644 src/CommandStation.Abstractions/Model/CvValue.cs rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/DccSpeedMode.cs (89%) rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/DecoderMode.cs (87%) rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/DrivingDirection.cs (76%) create mode 100644 src/CommandStation.Abstractions/Model/ExtAccessoryInfo.cs create mode 100644 src/CommandStation.Abstractions/Model/FeedbackData.cs create mode 100644 src/CommandStation.Abstractions/Model/FirmwareVersion.cs rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/FunctionToggleType.cs (77%) rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/LocoFunctionData.cs (94%) rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/LocoInfoData.cs (94%) create mode 100644 src/CommandStation.Abstractions/Model/ModelTime.cs rename src/{Z21.Client/Core => CommandStation.Abstractions}/Model/SystemState.cs (70%) create mode 100644 src/CommandStation.Abstractions/Model/TurnoutInfo.cs create mode 100644 src/CommandStation.Abstractions/Transport/BytesReceivedEventArgs.cs create mode 100644 src/CommandStation.Abstractions/Transport/ConnectionChangedEventArgs.cs create mode 100644 src/CommandStation.Abstractions/Transport/ITransport.cs create mode 100644 src/CommandStation.Transport.Udp.UnitTest/CommandStation.Transport.Udp.UnitTest.csproj create mode 100644 src/CommandStation.Transport.Udp.UnitTest/UdpTransportTest.cs create mode 100644 src/CommandStation.Transport.Udp.UnitTest/stryker-config.json create mode 100644 src/CommandStation.Transport.Udp/CommandStation.Transport.Udp.csproj create mode 100644 src/CommandStation.Transport.Udp/UdpTransport.cs create mode 100644 src/CommandStation.Transport.Udp/UdpTransportOptions.cs create mode 100644 src/Z21.Client.UnitTest/Core/Codecs/AddressCodecTest.cs rename src/Z21.Client.UnitTest/Core/{Helper/LocoSpeedHelperTest.cs => Codecs/LocoSpeedCodecTest.cs} (70%) create mode 100644 src/Z21.Client.UnitTest/Core/Command/Booster/BoosterCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Can/CanCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/CommandTestFixture.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Decoder/DecoderCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoBinaryStateCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoFunctionGroupCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/FastClock/FastClockCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Feedback/GetRmBusDataCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Feedback/ProgramRmBusModuleCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/LocoNet/LocoNetCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/NewCommandNameTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryReadByteCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryWriteBitCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryWriteByteCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/CvPomReadByteCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/CvPomWriteBitCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/CvPomWriteByteCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/CvReadCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/CvWriteCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/DccReadRegisterCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/DccWriteRegisterCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Programming/MmWriteByteCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/RailCom/GetRailComDataCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/Z21CommandFactoryTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Command/ZLink/GetZLinkHardwareInfoCommandTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/FakeTransport.cs create mode 100644 src/Z21.Client.UnitTest/Core/Framing/Z21FrameBuilderTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Framing/Z21FrameReaderTest.cs delete mode 100644 src/Z21.Client.UnitTest/Core/Helper/AddressHelperTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Helper/DelayedActionTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Reflection/Z21ServiceDiscoveryTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/Booster/BoosterResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/Can/CanResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/Decoder/DecoderDescriptionResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/Decoder/DecoderSystemStateResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/FastClock/FastClockResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/Feedback/RmBusDataChangedResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/LocoNet/LocoNetResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/NewHandlerContractTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/PreExistingHandlerContractTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvNackResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvNackShortCircuitResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvResultResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/RailCom/RailComDataChangedResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseHandler/ZLink/ZLinkHardwareInfoResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/ResponseParser/RailComDataParserTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Z21CommandStationTest.cs create mode 100644 src/Z21.Client.UnitTest/Core/Z21ResponseHandlerTest.cs create mode 100644 src/Z21.Client.UnitTest/GlobalUsings.cs create mode 100644 src/Z21.Client.UnitTest/stryker-config.json create mode 100644 src/Z21.Client/Core/Codecs/AddressCodec.cs create mode 100644 src/Z21.Client/Core/Codecs/IAddressCodec.cs create mode 100644 src/Z21.Client/Core/Codecs/ILocoSpeedCodec.cs create mode 100644 src/Z21.Client/Core/Codecs/LocoSpeedCodec.cs create mode 100644 src/Z21.Client/Core/Command/Booster/GetBoosterDescriptionCommand.cs create mode 100644 src/Z21.Client/Core/Command/Booster/GetBoosterSystemStateCommand.cs create mode 100644 src/Z21.Client/Core/Command/Booster/SetBoosterDescriptionCommand.cs create mode 100644 src/Z21.Client/Core/Command/Booster/SetBoosterPowerCommand.cs create mode 100644 src/Z21.Client/Core/Command/Can/GetCanDetectorCommand.cs create mode 100644 src/Z21.Client/Core/Command/Can/GetCanDeviceDescriptionCommand.cs create mode 100644 src/Z21.Client/Core/Command/Can/SetCanBoosterTrackPowerCommand.cs create mode 100644 src/Z21.Client/Core/Command/Can/SetCanDeviceDescriptionCommand.cs create mode 100644 src/Z21.Client/Core/Command/Decoder/GetDecoderDescriptionCommand.cs create mode 100644 src/Z21.Client/Core/Command/Decoder/GetDecoderSystemStateCommand.cs create mode 100644 src/Z21.Client/Core/Command/Decoder/SetDecoderDescriptionCommand.cs create mode 100644 src/Z21.Client/Core/Command/Driving/SetLocoBinaryStateCommand.cs create mode 100644 src/Z21.Client/Core/Command/Driving/SetLocoFunctionGroupCommand.cs create mode 100644 src/Z21.Client/Core/Command/FastClock/FastClockControlCommand.cs create mode 100644 src/Z21.Client/Core/Command/FastClock/GetFastClockSettingsCommand.cs create mode 100644 src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsCommand.cs create mode 100644 src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsWithRateCommand.cs create mode 100644 src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsWithStartTimeCommand.cs create mode 100644 src/Z21.Client/Core/Command/Feedback/GetRmBusDataCommand.cs create mode 100644 src/Z21.Client/Core/Command/Feedback/ProgramRmBusModuleCommand.cs create mode 100644 src/Z21.Client/Core/Command/IZ21CommandFactory.cs create mode 100644 src/Z21.Client/Core/Command/LocoNet/LocoNetDetectorCommand.cs create mode 100644 src/Z21.Client/Core/Command/LocoNet/LocoNetDispatchAddressCommand.cs create mode 100644 src/Z21.Client/Core/Command/LocoNet/LocoNetFromLanCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/CvPomAccessoryReadByteCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/CvPomAccessoryWriteBitCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/CvPomAccessoryWriteByteCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/CvPomReadByteCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/CvPomWriteBitCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/CvPomWriteByteCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/CvReadCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/CvWriteCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/DccReadRegisterCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/DccWriteRegisterCommand.cs create mode 100644 src/Z21.Client/Core/Command/Programming/MmWriteByteCommand.cs create mode 100644 src/Z21.Client/Core/Command/RailCom/GetRailComDataCommand.cs create mode 100644 src/Z21.Client/Core/Command/Z21CommandFactory.cs create mode 100644 src/Z21.Client/Core/Command/ZLink/GetZLinkHardwareInfoCommand.cs create mode 100644 src/Z21.Client/Core/Exception/NotConnectedException.cs create mode 100644 src/Z21.Client/Core/Framing/IZ21FrameBuilder.cs create mode 100644 src/Z21.Client/Core/Framing/Z21FrameBuilder.cs create mode 100644 src/Z21.Client/Core/Framing/Z21FrameReader.cs delete mode 100644 src/Z21.Client/Core/Helper/AddressHelper.cs delete mode 100644 src/Z21.Client/Core/Helper/LocoSpeedHelper.cs delete mode 100644 src/Z21.Client/Core/IZ21Client.cs create mode 100644 src/Z21.Client/Core/IZ21CommandStation.cs create mode 100644 src/Z21.Client/Core/Model/BoosterSystemState.cs create mode 100644 src/Z21.Client/Core/Model/CanBoosterState.cs create mode 100644 src/Z21.Client/Core/Model/CanBoosterSystemState.cs create mode 100644 src/Z21.Client/Core/Model/CanDetectorData.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/BoosterDescriptionReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/BoosterSystemStateReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/CanBoosterSystemStateReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/CanDetectorReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/CanDeviceDescriptionReceivedEventArgs.cs delete mode 100644 src/Z21.Client/Core/Model/EventArgs/ConnectionChangedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/CvResultReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/DecoderDescriptionReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/FastClockDataReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/FastClockSettingsReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/LocoNetDetectorReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/LocoNetDispatchAddressReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/LocoNetMessageReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/RailComDataReceivedEventArgs.cs delete mode 100644 src/Z21.Client/Core/Model/EventArgs/ResponseReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/RmBusDataReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/SignalDecoderSystemStateReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/SwitchDecoderSystemStateReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/EventArgs/ZLinkHardwareInfoReceivedEventArgs.cs create mode 100644 src/Z21.Client/Core/Model/FastClockAction.cs create mode 100644 src/Z21.Client/Core/Model/FastClockData.cs create mode 100644 src/Z21.Client/Core/Model/FastClockSettings.cs create mode 100644 src/Z21.Client/Core/Model/FastClockSettingsData.cs delete mode 100644 src/Z21.Client/Core/Model/FirmwareVersion.cs create mode 100644 src/Z21.Client/Core/Model/LocoFunctionGroup.cs create mode 100644 src/Z21.Client/Core/Model/RailComData.cs create mode 100644 src/Z21.Client/Core/Model/RailComOptions.cs create mode 100644 src/Z21.Client/Core/Model/SignalDecoderSystemState.cs create mode 100644 src/Z21.Client/Core/Model/SwitchDecoderSystemState.cs delete mode 100644 src/Z21.Client/Core/Model/Z21Configuration.cs create mode 100644 src/Z21.Client/Core/Model/ZLinkHardwareInfo.cs create mode 100644 src/Z21.Client/Core/Reflection/Z21ServiceDiscovery.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Booster/BoosterDescriptionResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Booster/BoosterSystemStateResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Can/CanBoosterSystemStateResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Can/CanDetectorResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Can/CanDeviceDescriptionResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Decoder/DecoderDescriptionResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Decoder/DecoderSystemStateResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/FastClock/FastClockDataResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/FastClock/FastClockSettingsResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Feedback/RmBusDataChangedResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetDetectorResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetDispatchAddressResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetFromLanResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetReceiveResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetTransmitResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Programming/CvNackResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Programming/CvNackShortCircuitResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/Programming/CvResultResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/RailCom/RailComDataChangedResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseHandler/ZLink/ZLinkHardwareInfoResponseHandler.cs create mode 100644 src/Z21.Client/Core/ResponseParser/RailComDataParser.cs create mode 100644 src/Z21.Client/Core/ResponseParser/SignalDecoderSystemStateParser.cs create mode 100644 src/Z21.Client/Core/ResponseParser/SwitchDecoderSystemStateParser.cs create mode 100644 src/Z21.Client/Core/ResponseParser/ZLinkHardwareInfoParser.cs delete mode 100644 src/Z21.Client/Core/Z21Client.cs create mode 100644 src/Z21.Client/Core/Z21CommandStation.cs create mode 100644 src/Z21.Client/Core/Z21Options.cs delete mode 100644 src/Z21.Client/Core/Z21Watchdog.cs create mode 100644 src/Z21.Client/GlobalUsings.cs delete mode 100644 src/Z21.Client/Transport/IZ21Transport.cs delete mode 100644 src/Z21.Client/Transport/Z21Transport.cs create mode 100644 src/Z21.DependencyInjection.UnitTest/SpyTransport.cs create mode 100644 src/Z21.SmokeTest/Z21.SmokeTest.csproj create mode 100644 src/Z21.SmokeTest/Z21HardwareTests.cs create mode 100644 src/api/z21-lan-protokoll.md create mode 100644 src/api/z21-lan-protokoll.pdf delete mode 100644 src/docfx.json delete mode 100644 src/toc.yml create mode 100644 version.json diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index d052837..90832fc 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -1,4 +1,5 @@ -# This workflow will build a .NET project +# Continuous integration: build and test on every push and pull request. +# Publishing to NuGet is handled separately by Release.yml (tag-gated). # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net name: Build @@ -16,69 +17,18 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - fetch-depth: 0 # Required for GitVersion to access full commit history + fetch-depth: 0 # Nerdbank.GitVersioning needs full history to compute the version - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - - name: Setup GitVersion - uses: GitTools/actions/gitversion/setup@v0.9.10 - with: - versionSpec: '5.x' - - - name: Run GitVersion - id: gitversion - uses: GitTools/actions/gitversion/execute@v0.9.10 - - name: Restore dependencies run: dotnet restore src/Z21.sln - - - name: Build for testing (Debug) - run: dotnet build src/Z21.sln --no-restore /p:Version=${{ steps.gitversion.outputs.semVer }} - - - name: Test - run: dotnet test src/Z21.sln --no-build --verbosity normal - - name: Build for packaging (Release) - run: dotnet build src/Z21.sln --no-restore --configuration Release /p:Version=${{ steps.gitversion.outputs.semVer }} - - - name: Tag commit with GitVersion - if: github.event_name == 'push' - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git tag v${{ steps.gitversion.outputs.semVer }} - git push origin v${{ steps.gitversion.outputs.semVer }} - - - name: Pack Z21.sln NuGet package - run: | - dotnet pack src/Z21.sln --no-build --configuration Release \ - /p:PackageVersion=${{ steps.gitversion.outputs.semVer }} \ - /p:Version=${{ steps.gitversion.outputs.semVer }} \ - --output ./nupkgs + - name: Build (Release) + run: dotnet build src/Z21.sln --no-restore --configuration Release - - name: Pack Z21.DependencyInjection NuGet package - run: | - dotnet pack src/Z21.DependencyInjection/Z21.DependencyInjection.csproj --no-build --configuration Release \ - /p:PackageVersion=${{ steps.gitversion.outputs.semVer }} \ - /p:Version=${{ steps.gitversion.outputs.semVer }} \ - --output ./nupkgs - - - name: Pack Z21.Autofac NuGet package - run: | - dotnet pack src/Z21.Autofac/Z21.Autofac.csproj --no-build --configuration Release \ - /p:PackageVersion=${{ steps.gitversion.outputs.semVer }} \ - /p:Version=${{ steps.gitversion.outputs.semVer }} \ - --output ./nupkgs - - - name: Push packages to NuGet - if: | - github.ref == 'refs/heads/main' - run: | - for pkg in ./nupkgs/*.nupkg; do - dotnet nuget push "$pkg" \ - --api-key ${{ secrets.NUGET_API_KEY }} \ - --source https://api.nuget.org/v3/index.json - done + - name: Test + run: dotnet test src/Z21.sln --no-build --configuration Release --verbosity normal diff --git a/.github/workflows/BuildAndDeployDoc.yml b/.github/workflows/BuildAndDeployDoc.yml index 53da436..4a73c94 100644 --- a/.github/workflows/BuildAndDeployDoc.yml +++ b/.github/workflows/BuildAndDeployDoc.yml @@ -1,37 +1,67 @@ name: Github Pages +# Builds the API documentation with DocFX (generated from the source XML doc comments) +# and publishes it with GitHub's native Pages deployment. Nothing is committed to the +# repository. Requires Settings -> Pages -> Source = "GitHub Actions". on: push: branches: [ "main" ] + paths: + - 'docfx/**' + - 'src/**' + - '.github/workflows/BuildAndDeployDoc.yml' pull_request: branches: [ "main" ] + paths: + - 'docfx/**' + - 'src/**' + - '.github/workflows/BuildAndDeployDoc.yml' workflow_dispatch: +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment; let an in-progress run finish rather than cancel it. +concurrency: + group: pages + cancel-in-progress: false + jobs: build: runs-on: ubuntu-latest - steps: - name: Checkout - uses: actions/checkout@v3 - - - name: Copy README as index.md - run: cp README.md src/index.md + uses: actions/checkout@v4 + with: + fetch-depth: 0 # DocFX builds the projects; Nerdbank.GitVersioning needs full history - name: Setup .NET - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.x' + dotnet-version: 8.0.x - name: Install DocFX run: dotnet tool install -g docfx - - name: Build Docs - run: docfx src/docfx.json + - name: Build docs (docfx -> docfx/_site) + run: docfx docfx/docfx.json - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 + - name: Upload Pages artifact + uses: actions/upload-pages-artifact@v3 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./src/_site - destination_dir: . + path: docfx/_site + + deploy: + # PRs only build (to validate); deployment happens on main / manual dispatch. + if: github.event_name != 'pull_request' + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/MutationTesting.yml b/.github/workflows/MutationTesting.yml index 2f47a0f..9bab18e 100644 --- a/.github/workflows/MutationTesting.yml +++ b/.github/workflows/MutationTesting.yml @@ -15,10 +15,12 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Nerdbank.GitVersioning needs full history to compute the version - name: Setup .NET - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml new file mode 100644 index 0000000..3edd8d9 --- /dev/null +++ b/.github/workflows/Release.yml @@ -0,0 +1,57 @@ +# Continuous delivery: pack and publish the NuGet packages on every merge to main. +# +# Versions are produced automatically by Nerdbank.GitVersioning (version.json + git +# height), so they increment on every commit — no tags or manual version bumps. A push +# to main (which is what merging a pull request produces) builds, tests, packs the whole +# solution once, and pushes all packages to NuGet.org with --skip-duplicate. + +name: Release + +on: + push: + branches: [ main ] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: release-main + cancel-in-progress: false + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Nerdbank.GitVersioning needs full history to compute the version + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: Restore dependencies + run: dotnet restore src/Z21.sln + + - name: Build (Release) + run: dotnet build src/Z21.sln --no-restore --configuration Release + + - name: Test + run: dotnet test src/Z21.sln --no-build --configuration Release --verbosity normal + + - name: Pack + run: dotnet pack src/Z21.sln --no-build --configuration Release --output ./nupkgs + + - name: Upload packages artifact + uses: actions/upload-artifact@v4 + with: + name: nupkgs + path: ./nupkgs/*.nupkg + + - name: Push to NuGet + if: github.ref == 'refs/heads/main' # never publish from a manually-dispatched non-main branch + run: dotnet nuget push "./nupkgs/*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate diff --git a/.gitignore b/.gitignore index 4fbe19f..22a1650 100644 --- a/.gitignore +++ b/.gitignore @@ -396,4 +396,9 @@ _UpgradeReport_Files/ Thumbs.db Desktop.ini -.DS_Store \ No newline at end of file +.DS_Store + +# DocFX generated output (the site is published by CI via GitHub Pages, never committed) +docfx/_site/ +docfx/api/ +**/*.manifest \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..95315a8 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,154 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Overview + +C# client library implementing the **ROCO/Fleischmann Z21 LAN protocol** (V1.13) over UDP. Platform-independent, event-driven, SOLID. The protocol spec PDFs are linked in `README.md`; the command/response support matrix (✅/❌) also lives there and should be kept in sync when commands or handlers are added. + +## Build, Test, Run + +All commands operate on the solution at `src/Z21.sln`. The library targets `net8.0;net8.0-windows` and only builds for the `x64` platform. + +```bash +dotnet restore src/Z21.sln +dotnet build src/Z21.sln +dotnet test src/Z21.sln # all tests +dotnet test src/Z21.sln --filter "FullyQualifiedName~SetLocoDriveCommandTest" # single test class +dotnet run --project src/Z21.Console # demo console app against a live/simulated Z21 +``` + +Mutation testing (Stryker.NET) is run from inside the test project and gates CI: + +```bash +dotnet tool install -g dotnet-stryker +cd src/Z21.Client.UnitTest +dotnet stryker --reporter html --reporter progress --mutation-level Complete --threshold-high 98 --threshold-low 90 --break-at 85 +``` + +These thresholds (and `coverage-analysis: perTest`) are pinned in `stryker-config.json` in each test +project, so a bare `dotnet stryker` uses them. Target line coverage is ~95%. `Z21.Client` (all protocol +logic) holds **break 85** and currently scores ~85%. `CommandStation.Transport.Udp` uses a lower +**break 60** (reports 90/98): its residual mutants are non-observable socket internals (`UdpClient` is +sealed/non-mockable — resource disposal, `AllowNatTraversal`, `GC.SuppressFinalize`, equivalent logical +ops), so ~66% is the accepted floor for that thin transport shell. + +Tests use **NUnit + Moq**. New protocol logic is expected to be both unit-tested and to survive mutation testing — the bar is high, so assert on exact datagram bytes. + +> **Architecture is mid-refactor to v7** (decoupling transport + protocol so other command +> stations can be added). The layering below is the current state. The neutral root namespace +> `CommandStation` is provisional (brand name TBD). See the plan and the `architecture-refactor-v7` +> memory for context. + +## Projects + +Two orthogonal axes are separated into assemblies: **transport** (how bytes move) and **protocol** +(the Z21 wire format). The abstractions assembly is protocol- and transport-neutral. + +- **CommandStation.Abstractions** (ns `CommandStation`) — neutral contracts, no Z21/UDP specifics: + `ITransport`, `IFrameReader` (+ event args) under `Transport`/`Framing`; the domain API + `ICommandStation` + capability interfaces (`ILocoControl`, `IAccessoryControl`, + `ITrackPowerControl`, `ISystemInfoProvider`, `IProgrammingControl`, `IFeedbackControl`, + `IFastClockControl`); and the domain vocabulary under `Model` + (enums like `DccSpeedMode`/`DrivingDirection`, data like `LocoInfoData`/`SystemState`/`FirmwareVersion`/ + `CvValue`/`FeedbackData`/`ModelTime`). Z21-only protocol features (LocoNet raw tunneling, CAN, RailCom, + zLink booster/decoder/adapter) have **no neutral capability**; reach them via the Z21 escape hatch + (`IZ21CommandStation.Commands` + the Z21 response-handler events). +- **CommandStation.Transport.Udp** — `UdpTransport : ITransport` + `UdpTransportOptions`. A future + serial transport would be a sibling assembly; nothing in `Z21.Client` references it directly. +- **Z21.Client** (NuGet id `Z21`, root ns `Z21`) — the Z21 protocol implementation: commands + + `IZ21CommandFactory`, response handlers/parsers, `Z21FrameReader`/`Z21FrameBuilder`, the + `IAddressCodec`/`ILocoSpeedCodec` codecs, and `Z21CommandStation : IZ21CommandStation`. References + only `CommandStation.Abstractions`. A `global using CommandStation.Model;` makes the domain + vocabulary available without per-file usings. +- **Z21.DependencyInjection** / **Z21.Autofac** — `AddZ21(...)` extensions; reference + `CommandStation.Transport.Udp` to wire the concrete UDP transport. +- **Z21.Console** — runnable demo / manual test harness. +- **\*.UnitTest(s)** — one test project per shippable project. + +## Architecture + +Four layers, bottom → top — transport and protocol are independent: + +- **Transport** (`ITransport`) — a raw byte pipe (`ConnectAsync`/`DisconnectAsync`/`SendAsync`, + `OnBytesReceived`, `OnConnectionChanged`). `UdpTransport` today; serial later. +- **Framing** (`IFrameReader`) — reassembles the byte stream into discrete frames. `Z21FrameReader` + buffers partial frames using the `DataLen` length-prefix, so it is correct for both message + (UDP) and stream (serial) transports. +- **Protocol** — Z21 encode/decode. `IZ21FrameBuilder` (+ `IAddressCodec`/`ILocoSpeedCodec`) builds + command bytes (`BuildXBus`/`BuildLan`); handlers (`IZ21ResponseHandler`, `CanHandle`/`Handle`) and + parsers (`IZ21ResponseParser`) decode frames and raise typed `On...Received` events. Commands and + these services are all **injected**, never static. +- **Domain** (`ICommandStation` + capabilities) — the protocol-agnostic public API. `Z21CommandStation` + implements it (+ a Z21 raw escape hatch `IZ21CommandStation` exposing `Commands` and + `SendCommandsAsync(params IZ21Command[])`). + +Data flow: + +1. `ICommandStation` op (e.g. `DriveAsync`) → `IZ21CommandFactory` builds an `IZ21Command` (bytes via + `IZ21FrameBuilder` + codecs) → `SendCommandsAsync` concatenates command `Data` into **one packet** + (so simultaneous actions like double-traction stay atomic), enforces `MaxUdpPayload` (1472), and + sends via `ITransport`. A `DelayedAction` keep-alive re-sends a firmware query after + `Z21Options.KeepAliveInterval` (default 45s). +2. `ITransport.OnBytesReceived` → `Z21FrameReader.Append` → `OnFrameReceived` per complete frame. +3. The dispatcher `Z21ResponseHandler` (distinct from individual handlers) offers each frame to every + `IZ21ResponseHandler` whose `CanHandle` returns true; handler exceptions are caught and logged. +4. Handlers raise typed events; `Z21CommandStation` re-raises them as neutral capability events + (`LocoInfoReceived`, `SystemStateReceived`, `TrackPowerChanged`, …). + +`Z21CommandStation.ConnectAsync` connects the transport then runs `LogOnAsync` (broadcast flags + +firmware query). There is **no ICMP watchdog** — liveness is the transport connection state plus the +protocol keep-alive (the old `Z21Watchdog` was removed as part of the transport decoupling). + +The dispatcher must be instantiated for inbound handling to work — both DI extensions register it as +an **activated/auto-activated singleton** so it wires up `ITransport.OnBytesReceived` eagerly. + +### DI registration + +Both `Z21DependencyInjectionExtension` and `Z21AutofacExtensions` discover all `IZ21ResponseHandler` / +`IZ21ResponseParser` implementations by reflection and register each concrete type plus all of its +handler/parser interfaces as singletons. **Adding a new handler or parser requires no registration +changes** — implement the interface and it is picked up automatically. `AddZ21(...)` takes optional +`Action` and `Action` configurators. Both containers must stay +behavior-equivalent. + +### Conventions + +- **Coding rules are strict** (see the `coding-rules` memory): no static methods/properties except + `const` fields; no empty catch blocks; a new subtype must require zero edits outside its own file; + TDD test-first with a quotable red run. Committing is allowed, but **never include AI + attribution in anything that touches git or GitHub** — not in commit messages, PR titles or + descriptions, issue/PR comments, tags, or release notes. Concretely: no `Co-Authored-By` + trailer, no "Generated with Claude Code" (or any similar "made/assisted by AI") line, and no + AI tool name anywhere in the history or on GitHub. This applies to every `git` and `gh`/GitHub + API action without exception. +- The library assumes a **little-endian** host (`Z21CommandStation` throws + `PlatformNotSupportedException` otherwise); protocol multi-byte fields are little-endian. +- Command construction goes through `IZ21CommandFactory` (the station exposes it as `Commands`); a new + command is one new file plus an optional factory method. +- Custom exceptions live in `Core/Exception/`; `MtuPayloadLengthExceededException.ThrowIfExceeded` + guards payload size against `Z21CommandStation.MaxUdpPayload`. +- Logging is via `ILogger?` (Microsoft.Extensions.Logging.Abstractions), always optional. + +## Versioning & CI + +- **Versioning — Nerdbank.GitVersioning (nbgv).** `version.json` at the repo root holds + the base version (`"version": "7.0"`) and `publicReleaseRefs` (`^refs/heads/main$`). nbgv + is referenced once in the root `Directory.Build.props` (`PrivateAssets="all"`), so it + stamps the assembly **and** NuGet package versions of every project automatically from + the base version + **git height** — the patch increments on every commit (`7.0.` + on `main`; off-`main` builds get a `-g` prerelease suffix). There is **no** + `-p:Version` in CI and no hand-bumping; bump `"version"` in `version.json` for the next + minor/major. **Consequence:** nbgv fails on shallow clones, so every workflow that builds + (`Build.yml`, `Release.yml`, `MutationTesting.yml`) checks out with `fetch-depth: 0`. +- **CI — `.github/workflows/Build.yml`:** builds (`Release`) and tests on every push and + pull request. It does **not** pack or publish. +- **CD — `.github/workflows/Release.yml`:** publishes on every **push to `main`** (i.e. + when a PR is merged) and on manual `workflow_dispatch`. It builds → tests → packs the + whole solution **once** (`dotnet pack src/Z21.sln`, producing all five packable packages + — `Z21`, `Z21.DependencyInjection`, `Z21.Autofac`, `CommandStation.Abstractions`, + `CommandStation.Transport.Udp`; Console + test projects are `IsPackable=false`) → pushes + with `--skip-duplicate`. The push step is guarded `if: github.ref == 'refs/heads/main'`, + so a manual dispatch from a non-`main` branch is a pack-only dry run. +- The `GeneratePackageOnBuild=true` properties in the five packable csproj are redundant + with the explicit Release pack and may be removed later. diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..2121924 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/GitVersion.yaml b/GitVersion.yaml deleted file mode 100644 index f35971e..0000000 --- a/GitVersion.yaml +++ /dev/null @@ -1,167 +0,0 @@ -assembly-versioning-scheme: MajorMinorPatch -assembly-file-versioning-scheme: MajorMinorPatch -tag-prefix: '[vV]?' -version-in-branch-pattern: (?[vV]?\d+(\.\d+)?(\.\d+)?).* -major-version-bump-message: \+semver:\s?(breaking|major) -minor-version-bump-message: \+semver:\s?(feature|minor) -patch-version-bump-message: \+semver:\s?(fix|patch) -no-bump-message: \+semver:\s?(none|skip) -tag-pre-release-weight: 60000 -commit-date-format: yyyy-MM-dd -merge-message-formats: {} -update-build-number: true -semantic-version-format: Strict -strategies: -- Fallback -- ConfiguredNextVersion -- MergeMessage -- TaggedCommit -- TrackReleaseBranches -- VersionInBranchName -branches: - develop: - mode: ContinuousDeployment - label: alpha - increment: Minor - prevent-increment: - when-current-commit-tagged: false - track-merge-target: true - track-merge-message: true - regex: ^dev(elop)?(ment)?$ - source-branches: - - main - is-source-branch-for: [] - tracks-release-branches: true - is-release-branch: false - is-main-branch: false - pre-release-weight: 0 - main: - label: '' - increment: Patch - prevent-increment: - of-merged-branch: true - track-merge-target: false - track-merge-message: true - regex: ^master$|^main$ - source-branches: [] - is-source-branch-for: [] - tracks-release-branches: false - is-release-branch: false - is-main-branch: true - pre-release-weight: 55000 - release: - mode: ContinuousDeployment - label: beta - increment: Minor - prevent-increment: - of-merged-branch: true - when-current-commit-tagged: false - track-merge-target: false - regex: ^releases?[\/-](?.+) - source-branches: - - main - - support - is-source-branch-for: [] - tracks-release-branches: false - is-release-branch: true - is-main-branch: false - pre-release-weight: 30000 - feature: - mode: ContinuousDeployment - label: '{BranchName}' - increment: Inherit - prevent-increment: - when-current-commit-tagged: false - track-merge-message: true - regex: ^features?[\/-](?.+) - source-branches: - - develop - - main - - release - - support - - hotfix - is-source-branch-for: [] - is-main-branch: false - pre-release-weight: 30000 - pull-request: - mode: ContinuousDeployment - label: PullRequest{Number} - increment: Inherit - prevent-increment: - of-merged-branch: true - when-current-commit-tagged: false - track-merge-message: true - regex: ^(pull-requests|pull|pr)[\/-](?\d*) - source-branches: - - develop - - main - - release - - feature - - support - - hotfix - is-source-branch-for: [] - pre-release-weight: 30000 - hotfix: - mode: ManualDeployment - label: beta - increment: Inherit - prevent-increment: - when-current-commit-tagged: false - regex: ^hotfix(es)?[\/-](?.+) - source-branches: - - main - - support - is-source-branch-for: [] - is-release-branch: true - is-main-branch: false - pre-release-weight: 30000 - support: - label: '' - increment: Patch - prevent-increment: - of-merged-branch: true - track-merge-target: false - regex: ^support[\/-](?.+) - source-branches: - - main - is-source-branch-for: [] - tracks-release-branches: false - is-release-branch: false - is-main-branch: true - pre-release-weight: 55000 - unknown: - mode: ManualDeployment - label: '{BranchName}' - increment: Inherit - prevent-increment: - when-current-commit-tagged: true - regex: (?.+) - source-branches: - - main - - develop - - release - - feature - - pull-request - - hotfix - - support - is-source-branch-for: [] - is-main-branch: false -ignore: - sha: [] - paths: [] -mode: ContinuousDeployment -label: '{BranchName}' -increment: Inherit -prevent-increment: - of-merged-branch: false - when-branch-merged: false - when-current-commit-tagged: true -track-merge-target: false -track-merge-message: true -commit-message-incrementing: Enabled -regex: '' -source-branches: [] -is-source-branch-for: [] -tracks-release-branches: false -is-release-branch: false -is-main-branch: false \ No newline at end of file diff --git a/README.md b/README.md index d272e5a..1bea464 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Z21 [![Build](https://github.com/Jakob-Eichberger/Z21/actions/workflows/Build.yml/badge.svg)](https://github.com/Jakob-Eichberger/Z21/actions/workflows/Build.yml) [![Github Pages](https://github.com/Jakob-Eichberger/Z21/actions/workflows/BuildAndDeployDoc.yml/badge.svg)](https://github.com/Jakob-Eichberger/Z21/actions/workflows/BuildAndDeployDoc.yml) [![Mutation Testing](https://github.com/Jakob-Eichberger/Z21/actions/workflows/MutationTesting.yml/badge.svg)](https://github.com/Jakob-Eichberger/Z21/actions/workflows/MutationTesting.yml) +# Z21 [![Build](https://github.com/jaak0b/Z21/actions/workflows/Build.yml/badge.svg)](https://github.com/jaak0b/Z21/actions/workflows/Build.yml) [![Github Pages](https://github.com/jaak0b/Z21/actions/workflows/BuildAndDeployDoc.yml/badge.svg)](https://github.com/jaak0b/Z21/actions/workflows/BuildAndDeployDoc.yml) [![Mutation Testing](https://github.com/jaak0b/Z21/actions/workflows/MutationTesting.yml/badge.svg)](https://github.com/jaak0b/Z21/actions/workflows/MutationTesting.yml) @@ -25,23 +25,52 @@ The official documentation of the protocol can be downloaded from the ROCO homep - System ✅ - Driving ✅ - Switching ✅ + - CV / POM programming ✅ + - R-BUS feedback ✅ + - RailCom ✅ + - LocoNet gateway ✅ + - CAN (detector & booster) ✅ + - Fast clock (model time) ✅ + - zLink booster / decoder / adapter ✅ +## Documentation + +The API reference, generated from the library's source XML documentation comments, plus a +short getting-started guide, is published at **[jaak0b.github.io/Z21](https://jaak0b.github.io/Z21/)**. +It is built with [DocFX](https://dotnet.github.io/docfx/) from the config in [`docfx/`](docfx); +to preview locally run `dotnet tool install -g docfx` then `docfx docfx/docfx.json --serve`. + ## Getting Started Get started by downloading the provided [Z21](https://www.nuget.org/packages/Z21/) nuget package. -### Commands -All Commands can be found in the Z21.Core.Command namespace. -#### Sending Commands -> [!WARNING] -> When sending multiple commands at once take note of the maximum payload length. If the commands exceeds that length an exception will be thrown. +### Using the command station +The headline API is the protocol-agnostic `ICommandStation` (implemented for Z21 by `Z21CommandStation`). +Resolve it from your container, connect, then drive locomotives, switch turnouts, control track power and +subscribe to status events through its capability interfaces (`ILocoControl`, `IAccessoryControl`, +`ITrackPowerControl`, `ISystemInfoProvider`). -Create a command instance and hand it to the Z21Client.SendCommandsAsync method. -Multiple commands can be send at the same time in the same UDP packet. -This is important if certain actions should happen at the same time (i.e. controlling locos in a double traction where it is critical that both locomotives change speed at the same time) +```csharp + var station = container.Resolve(); // or ICommandStation + await station.ConnectAsync(); + + station.LocoInfoReceived += (_, loco) => Console.WriteLine($"Loco {loco.LocoAddress} @ {loco.LocoSpeed}"); + + await station.DriveAsync(locoAddress: 13, DccSpeedMode.Steps128, DrivingDirection.Forward, speed: 40); + await station.TrackPowerOffAsync(); +``` + +#### Raw commands +For full control you can still build and send raw Z21 commands. Build them via `station.Commands` +(an `IZ21CommandFactory`) and hand them to `SendCommandsAsync`. +Multiple commands are sent in the same UDP packet — important when actions must happen simultaneously +(e.g. a double-traction where both locomotives must change speed at once). + +> [!WARNING] +> When sending multiple commands at once take note of the maximum payload length. If the commands exceed that length an exception will be thrown. ```csharp - await Z21Client.SendCommandsAsync(new GetFirmwareVersionCommand()); // Sends a single command - await Z21Client.SendCommandsAsync(new GetFirmwareVersionCommand(), new GetLocoInfoCommand(locoAddress: 13); // Send multiple commands in a single UDP packet + await station.SendCommandsAsync(station.Commands.Create()); // single command + await station.SendCommandsAsync(station.Commands.Create(), station.Commands.Create((ushort)13)); // one UDP packet ``` ### @@ -53,10 +82,14 @@ This is important if certain actions should happen at the same time (i.e. contro ```csharp var builder = new ContainerBuilder(); - builder.AddZ21(); - var container = builder.Build(); + builder.AddZ21(transport => transport.RemoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.111"), 21105)); + var container = builder.Build(); + var station = container.Resolve(); ``` +`AddZ21` optionally takes an `Action` (transport/endpoint settings) and an +`Action` (protocol settings such as broadcast flags and keep-alive interval). + ### Dependency Injection Dependency Injection is supported natively via [Z21.DependencyInjection](https://www.nuget.org/packages/Z21.DependencyInjection/) and requires the use of hosted services. Z21 registers background components that must run inside the .NET Generic Host lifecycle. @@ -88,11 +121,11 @@ The host is responsible for starting all Z21‑related hosted services and manag | LAN_X_GET_STATUS | ✅ | | | LAN_X_SET_TRACK_POWER_OFF | ✅ | | | LAN_X_SET_TRACK_POWER_ON | ✅ | | -| LAN_X_DCC_READ_REGISTER | ❌ | | +| LAN_X_DCC_READ_REGISTER | ✅ | | | LAN_X_CV_READ | ✅ | | -| LAN_X_DCC_WRITE_REGISTER | ❌ | | -| LAN_X_CV_WRITE | ❌ | | -| LAN_X_MM_WRITE_BYTE | ❌ | | +| LAN_X_DCC_WRITE_REGISTER | ✅ | | +| LAN_X_CV_WRITE | ✅ | | +| LAN_X_MM_WRITE_BYTE | ✅ | | | LAN_X_GET_TURNOUT_INFO | ✅ | | | LAN_X_GET_EXT_ACCESSORY_INFO | ✅ | | | LAN_X_SET_TURNOUT | ✅ | | @@ -103,14 +136,14 @@ The host is responsible for starting all Z21‑related hosted services and manag | LAN_X_GET_LOCO_INFO | ✅ | | | LAN_X_SET_LOCO_DRIVE | ✅ | | | LAN_X_SET_LOCO_FUNCTION | ✅ | | -| LAN_X_SET_LOCO_FUNCTION_GROUP | ❌ | | -| LAN_X_SET_LOCO_BINARY_STATE | ❌ | | -| LAN_X_CV_POM_WRITE_BYTE | ❌ | | -| LAN_X_CV_POM_WRITE_BIT | ❌ | | -| LAN_X_CV_POM_READ_BYTE | ❌ | | -| LAN_X_CV_POM_ACCESSORY_WRITE_BYTE | ❌ | | -| LAN_X_CV_POM_ACCESSORY_WRITE_BIT | ❌ | | -| LAN_X_CV_POM_ACCESSORY_READ_BYTE | ❌ | | +| LAN_X_SET_LOCO_FUNCTION_GROUP | ✅ | | +| LAN_X_SET_LOCO_BINARY_STATE | ✅ | | +| LAN_X_CV_POM_WRITE_BYTE | ✅ | | +| LAN_X_CV_POM_WRITE_BIT | ✅ | | +| LAN_X_CV_POM_READ_BYTE | ✅ | | +| LAN_X_CV_POM_ACCESSORY_WRITE_BYTE | ✅ | | +| LAN_X_CV_POM_ACCESSORY_WRITE_BIT | ✅ | | +| LAN_X_CV_POM_ACCESSORY_READ_BYTE | ✅ | | | LAN_X_GET_FIRMWARE_VERSION | ✅ | | | LAN_SET_BROADCASTFLAGS | ✅ | | | LAN_GET_BROADCASTFLAGS | ✅ | | @@ -118,28 +151,28 @@ The host is responsible for starting all Z21‑related hosted services and manag | LAN_SET_LOCOMODE | ✅ | | | LAN_GET_TURNOUTMODE | ✅ | | | LAN_SET_TURNOUTMODE | ✅ | | -| LAN_RMBUS_GETDATA | ❌ | | -| LAN_RMBUS_PROGRAMMODULE | ❌ | | +| LAN_RMBUS_GETDATA | ✅ | | +| LAN_RMBUS_PROGRAMMODULE | ✅ | | | LAN_SYSTEMSTATE_GETDATA | ✅ | | -| LAN_RAILCOM_GETDATA | ❌ | | -| LAN_LOCONET_FROM_LAN | ❌ | | -| LAN_LOCONET_DISPATCH_ADDR | ❌ | | -| LAN_LOCONET_DETECTOR | ❌ | | -| LAN_CAN_DETECTOR | ❌ | | -| LAN_CAN_DEVICE_GET_DESCRIPTION | ❌ | | -| LAN_CAN_DEVICE_SET_DESCRIPTION | ❌ | | -| LAN_CAN_BOOSTER_SET_TRACKPOWER | ❌ | | -| LAN_FAST_CLOCK_CONTROL | ❌ | | -| LAN_FAST_CLOCK_SETTINGS_GET | ❌ | | -| LAN_FAST_CLOCK_SETTINGS_SET | ❌ | | -| LAN_BOOSTER_SET_POWER |❌ | | -| LAN_BOOSTER_GET_DESCRIPTION | ❌ | | -| LAN_BOOSTER_SET_DESCRIPTION | ❌ | | -| LAN_BOOSTER_SYSTEMSTATE_GETDATA | ❌ | | -| LAN_DECODER_GET_DESCRIPTION | ❌ | | -| LAN_DECODER_SET_DESCRIPTION | ❌ | | -| LAN_DECODER_SYSTEMSTATE_GETDATA | ❌ | | -| LAN_ZLINK_GET_HWINFO| ❌ | | +| LAN_RAILCOM_GETDATA | ✅ | | +| LAN_LOCONET_FROM_LAN | ✅ | | +| LAN_LOCONET_DISPATCH_ADDR | ✅ | | +| LAN_LOCONET_DETECTOR | ✅ | | +| LAN_CAN_DETECTOR | ✅ | | +| LAN_CAN_DEVICE_GET_DESCRIPTION | ✅ | | +| LAN_CAN_DEVICE_SET_DESCRIPTION | ✅ | | +| LAN_CAN_BOOSTER_SET_TRACKPOWER | ✅ | | +| LAN_FAST_CLOCK_CONTROL | ✅ | | +| LAN_FAST_CLOCK_SETTINGS_GET | ✅ | | +| LAN_FAST_CLOCK_SETTINGS_SET | ✅ | | +| LAN_BOOSTER_SET_POWER |✅ | | +| LAN_BOOSTER_GET_DESCRIPTION | ✅ | | +| LAN_BOOSTER_SET_DESCRIPTION | ✅ | | +| LAN_BOOSTER_SYSTEMSTATE_GETDATA | ✅ | | +| LAN_DECODER_GET_DESCRIPTION | ✅ | | +| LAN_DECODER_SET_DESCRIPTION | ✅ | | +| LAN_DECODER_SYSTEMSTATE_GETDATA | ✅ | | +| LAN_ZLINK_GET_HWINFO| ✅ | | ## Z21 Responses @@ -157,36 +190,36 @@ The host is responsible for starting all Z21‑related hosted services and manag | LAN_X_BC_TRACK_POWER_ON | ✅ | | | LAN_X_BC_PROGRAMMING_MODE | ✅ | | | LAN_X_BC_TRACK_SHORT_CIRCUIT | ✅ | | - | LAN_X_CV_NACK_SC | ❌ | | - | LAN_X_CV_NACK | ❌ | | + | LAN_X_CV_NACK_SC | ✅ | | + | LAN_X_CV_NACK | ✅ | | | LAN_X_UNKNOWN_COMMAND | ✅ | | | LAN_X_STATUS_CHANGED | ✅ | | | LAN_X_GET_VERSION | ✅ | | - | LAN_X_CV_RESULT | ❌ | | + | LAN_X_CV_RESULT | ✅ | | | LAN_X_BC_STOPPED | ✅ | | | LAN_X_LOCO_INFO | ✅ | | | LAN_X_GET_FIRMWARE_VERSION | ✅ | | | LAN_GET_BROADCASTFLAGS | ✅ | | | LAN_GET_LOCOMODE | ✅ | | | LAN_GET_TURNOUTMODE | ✅ | | - | LAN_RMBUS_DATACHANGED | ❌ | | + | LAN_RMBUS_DATACHANGED | ✅ | | | LAN_SYSTEMSTATE_DATACHANGED | ✅ | | - | LAN_RAILCOM_DATACHANGED | ❌ | | - | LAN_LOCONET_Z21_RX | ❌ | | - | LAN_LOCONET_Z21_TX | ❌ | | - | LAN_LOCONET_FROM_LAN | ❌ | | - | LAN_LOCONET_DISPATCH_ADDR | ❌ | | - | LAN_LOCONET_DETECTOR | ❌ | | - | LAN_CAN_DETECTOR | ❌ | | - | LAN_CAN_DEVICE_GET_DESCRIPTION | ❌ | | - | LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD | ❌ | | - | LAN_FAST_CLOCK_DATA | ❌ | | - | LAN_FAST_CLOCK_SETTINGS_GET | ❌ | | - | LAN_BOOSTER_GET_DESCRIPTION | ❌ | | - | LAN_BOOSTER_SYSTEMSTATE_DATACHANGED | ❌ | | - | LAN_DECODER_GET_DESCRIPTION | ❌ | | - | LAN_DECODER_SYSTEMSTATE_DATACHANGED | ❌ | | - | LAN_ZLINK_GET_HWINFO | ❌ | | + | LAN_RAILCOM_DATACHANGED | ✅ | | + | LAN_LOCONET_Z21_RX | ✅ | | + | LAN_LOCONET_Z21_TX | ✅ | | + | LAN_LOCONET_FROM_LAN | ✅ | | + | LAN_LOCONET_DISPATCH_ADDR | ✅ | | + | LAN_LOCONET_DETECTOR | ✅ | | + | LAN_CAN_DETECTOR | ✅ | | + | LAN_CAN_DEVICE_GET_DESCRIPTION | ✅ | | + | LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD | ✅ | | + | LAN_FAST_CLOCK_DATA | ✅ | | + | LAN_FAST_CLOCK_SETTINGS_GET | ✅ | | + | LAN_BOOSTER_GET_DESCRIPTION | ✅ | | + | LAN_BOOSTER_SYSTEMSTATE_DATACHANGED | ✅ | | + | LAN_DECODER_GET_DESCRIPTION | ✅ | | + | LAN_DECODER_SYSTEMSTATE_DATACHANGED | ✅ | | + | LAN_ZLINK_GET_HWINFO | ✅ | | ## Contributing diff --git a/docfx/articles/getting-started.md b/docfx/articles/getting-started.md new file mode 100644 index 0000000..eb4c21c --- /dev/null +++ b/docfx/articles/getting-started.md @@ -0,0 +1,118 @@ +# Getting Started + +This guide takes you from an empty project to driving a locomotive and reacting to +status events. + +## Prerequisites + +- **.NET 8 SDK** or later. +- A **Z21** (or compatible command station) reachable on your network, or a simulator. + The factory-default endpoint is `192.168.0.111:21105`. + +## 1. Install the packages + +The core library is the [`Z21`](https://www.nuget.org/packages/Z21/) package. Add one of +the integration packages for dependency injection: + +```bash +dotnet add package Z21 +dotnet add package Z21.DependencyInjection # Microsoft.Extensions.DependencyInjection +# or +dotnet add package Z21.Autofac # Autofac +``` + +`Z21` contains the full protocol implementation; the integration packages only add the +`AddZ21(...)` registration helper, which wires up the concrete UDP transport and +discovers all response handlers automatically. + +## 2. Register and resolve the command station + +# [.NET DI](#tab/net-di) + +```csharp +using System.Net; +using Microsoft.Extensions.DependencyInjection; +using Z21.Core; +using Z21.DependencyInjection; + +var services = new ServiceCollection(); +services.AddZ21(transport => + transport.RemoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.111"), 21105)); + +await using var provider = services.BuildServiceProvider(); +var station = provider.GetRequiredService(); +``` + +# [Autofac](#tab/autofac) + +```csharp +using System.Net; +using Autofac; +using Z21.Autofac; +using Z21.Core; + +var builder = new ContainerBuilder(); +builder.AddZ21(transport => + transport.RemoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.111"), 21105)); + +var container = builder.Build(); +var station = container.Resolve(); +``` + +*** + +Resolving `IZ21CommandStation` activates the inbound message dispatcher — if you never +resolve the station, incoming frames are never processed and no events fire. + +## 3. Connect + +`ConnectAsync` opens the UDP transport and logs on to the Z21 (broadcast flags + +firmware query); a protocol keep-alive then runs automatically. + +```csharp +await station.ConnectAsync(); +``` + +## 4. Subscribe to events and drive + +```csharp +station.LocoInfoReceived += (_, loco) => + Console.WriteLine($"Loco {loco.LocoAddress} @ {loco.LocoSpeed} ({loco.DrivingDirection})"); +station.TrackPowerChanged += (_, on) => + Console.WriteLine($"Track power: {(on ? "ON" : "OFF")}"); + +await station.TrackPowerOnAsync(); +await station.DriveAsync( + locoAddress: 13, + speedMode: DccSpeedMode.Steps128, + direction: DrivingDirection.Forward, + speed: 40); +``` + +## 5. Disconnect + +`Z21CommandStation` is `IDisposable`/`IAsyncDisposable`. Disposing (or +`await DisconnectAsync()`) stops the keep-alive and closes the transport. + +```csharp +await station.DisconnectAsync(); +``` + +## Raw commands and Z21-only features + +Features without a neutral capability (LocoNet, CAN, RailCom, zLink) are reachable through +the Z21 escape hatch on `IZ21CommandStation`: build commands with `station.Commands` +(an `IZ21CommandFactory`) and send them with `SendCommandsAsync`. + +```csharp +await station.SendCommandsAsync( + station.Commands.Create(), + station.Commands.Create((ushort)13)); // one UDP packet +``` + +> [!NOTE] +> `Create(...)` binds constructor arguments by exact type — cast integer +> literals to the parameter type (e.g. `(ushort)13`). + +Browse the full API reference — start at [`IZ21CommandStation`](xref:Z21.Core.IZ21CommandStation) — +for every command, handler, capability, and model. diff --git a/docfx/articles/toc.yml b/docfx/articles/toc.yml new file mode 100644 index 0000000..fc96f54 --- /dev/null +++ b/docfx/articles/toc.yml @@ -0,0 +1,2 @@ +- name: Getting Started + href: getting-started.md diff --git a/docfx/docfx.json b/docfx/docfx.json new file mode 100644 index 0000000..e5a38a4 --- /dev/null +++ b/docfx/docfx.json @@ -0,0 +1,54 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json", + "metadata": [ + { + "src": [ + { + "src": "../src", + "files": [ + "Z21.Client/Z21.Client.csproj", + "Z21.DependencyInjection/Z21.DependencyInjection.csproj", + "Z21.Autofac/Z21.Autofac.csproj", + "CommandStation.Abstractions/CommandStation.Abstractions.csproj", + "CommandStation.Transport.Udp/CommandStation.Transport.Udp.csproj" + ] + } + ], + "dest": "api", + "properties": { + "TargetFramework": "net8.0" + } + } + ], + "build": { + "content": [ + { + "files": [ + "index.md", + "toc.yml" + ] + }, + { + "files": [ + "api/**.{yml,md}" + ] + }, + { + "files": [ + "articles/**.{md,yml}" + ] + } + ], + "globalMetadata": { + "_appName": "Z21", + "_appTitle": "Z21", + "_enableSearch": true, + "_appFooter": "Z21 — ROCO/Fleischmann Z21 LAN protocol client for .NET (GPL-3.0)" + }, + "template": [ + "default", + "modern" + ], + "dest": "_site" + } +} diff --git a/docfx/index.md b/docfx/index.md new file mode 100644 index 0000000..ebfc175 --- /dev/null +++ b/docfx/index.md @@ -0,0 +1,63 @@ +# Z21 Client Library + +A platform-independent, event-driven **C# client for the ROCO/Fleischmann Z21 LAN +protocol (V1.13)** over UDP. This site hosts the **API reference**, generated directly +from the library's source XML documentation comments, plus a short +[Getting Started](articles/getting-started.md) guide. + +## Highlights + +- **Protocol-agnostic public API** — the headline interface is `ICommandStation` with + small, focused capability interfaces (`ILocoControl`, `IAccessoryControl`, + `ITrackPowerControl`, `ISystemInfoProvider`, `IProgrammingControl`, `IFeedbackControl`, + `IFastClockControl`). Transport (UDP) and protocol (Z21) are cleanly decoupled. +- **Event-driven** — subscribe to typed events such as `LocoInfoReceived`, + `SystemStateReceived`, `TrackPowerChanged`. +- **Dependency injection out of the box** — `AddZ21(...)` for both + `Microsoft.Extensions.DependencyInjection` and Autofac. +- **Complete protocol coverage** — System, Driving, Switching, CV/POM programming, R-BUS + feedback, RailCom, LocoNet gateway, CAN, fast clock, and the zLink + booster/decoder/adapter messages. + +## Install + +```bash +dotnet add package Z21 +dotnet add package Z21.DependencyInjection # or Z21.Autofac +``` + +## Quick start + +```csharp +using System.Net; +using CommandStation; +using Microsoft.Extensions.DependencyInjection; +using Z21.Core; +using Z21.DependencyInjection; + +var services = new ServiceCollection(); +services.AddZ21(transport => + transport.RemoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.111"), 21105)); + +await using var provider = services.BuildServiceProvider(); +var station = provider.GetRequiredService(); + +station.LocoInfoReceived += (_, loco) => + Console.WriteLine($"Loco {loco.LocoAddress} @ {loco.LocoSpeed}"); + +await station.ConnectAsync(); +await station.TrackPowerOnAsync(); +await station.DriveAsync(13, DccSpeedMode.Steps128, DrivingDirection.Forward, 40); +``` + +See [Getting Started](articles/getting-started.md) for the full walkthrough, or browse +the API reference starting at [`ICommandStation`](xref:CommandStation.ICommandStation). + +## Protocol specification + +The official Z21 LAN protocol documentation is available from ROCO in +[English](https://www.z21.eu/media/Kwc_Basic_DownloadTag_Component/root-en-main_47-1652-959-downloadTag-download/default/d559b9cf/1628743384/z21-lan-protokoll-en.pdf) +and +[German](https://www.z21.eu/media/Kwc_Basic_DownloadTag_Component/47-1652-959-downloadTag/default/69bad87e/1699290251/z21-lan-protokoll.pdf). + +This project is licensed under **GPL-3.0**. diff --git a/docfx/toc.yml b/docfx/toc.yml new file mode 100644 index 0000000..d19422c --- /dev/null +++ b/docfx/toc.yml @@ -0,0 +1,6 @@ +- name: Home + href: index.md +- name: Getting Started + href: articles/getting-started.md +- name: API Reference + href: api/ diff --git a/src/CommandStation.Abstractions/CommandStation.Abstractions.csproj b/src/CommandStation.Abstractions/CommandStation.Abstractions.csproj new file mode 100644 index 0000000..28101b2 --- /dev/null +++ b/src/CommandStation.Abstractions/CommandStation.Abstractions.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + enable + 12 + disable + true + true + $(NoWarn);CS1591;CS1573 + CommandStation.Abstractions + CommandStation.Abstractions + Jakob Eichberger + Protocol- and transport-agnostic abstractions for model-railway command stations (ICommandStation, ITransport, IFrameReader, domain model). + ModelRailway;CommandStation;DCC;Abstractions + https://github.com/jaak0b/Z21 + GPL-3.0-only + + + diff --git a/src/CommandStation.Abstractions/Framing/FrameReceivedEventArgs.cs b/src/CommandStation.Abstractions/Framing/FrameReceivedEventArgs.cs new file mode 100644 index 0000000..743337a --- /dev/null +++ b/src/CommandStation.Abstractions/Framing/FrameReceivedEventArgs.cs @@ -0,0 +1,15 @@ +using System; + +namespace CommandStation.Framing +{ + public class FrameReceivedEventArgs : EventArgs + { + public FrameReceivedEventArgs(byte[] frame) + { + ArgumentNullException.ThrowIfNull(frame); + Frame = frame; + } + + public byte[] Frame { get; } + } +} diff --git a/src/CommandStation.Abstractions/Framing/IFrameReader.cs b/src/CommandStation.Abstractions/Framing/IFrameReader.cs new file mode 100644 index 0000000..0270900 --- /dev/null +++ b/src/CommandStation.Abstractions/Framing/IFrameReader.cs @@ -0,0 +1,20 @@ +using System; + +namespace CommandStation.Framing +{ + /// + /// Reassembles a stream of transport bytes into discrete protocol frames. Implementations buffer + /// partial frames across calls, so they work over both message-oriented (UDP) and stream-oriented + /// (serial, TCP) transports. + /// + public interface IFrameReader + { + event EventHandler? OnFrameReceived; + + /// + /// Appends freshly received bytes and raises for every complete + /// frame that can now be extracted. + /// + void Append(byte[] data); + } +} diff --git a/src/CommandStation.Abstractions/IAccessoryControl.cs b/src/CommandStation.Abstractions/IAccessoryControl.cs new file mode 100644 index 0000000..c50a261 --- /dev/null +++ b/src/CommandStation.Abstractions/IAccessoryControl.cs @@ -0,0 +1,24 @@ +using System; +using System.Threading.Tasks; +using CommandStation.Model; + +namespace CommandStation +{ + /// + /// Switching turnouts and extended accessory decoders, with their status notifications. + /// + public interface IAccessoryControl + { + Task SetTurnoutAsync(ushort accessoryAddress, AccessoryOutput output, AccessoryState state, bool executeImmediately); + + Task SetExtAccessoryAsync(ushort accessoryAddress, byte payload); + + Task RequestTurnoutInfoAsync(ushort accessoryAddress); + + Task RequestExtAccessoryInfoAsync(ushort accessoryAddress); + + event EventHandler? TurnoutInfoReceived; + + event EventHandler? ExtAccessoryInfoReceived; + } +} diff --git a/src/CommandStation.Abstractions/ICommandStation.cs b/src/CommandStation.Abstractions/ICommandStation.cs new file mode 100644 index 0000000..174e067 --- /dev/null +++ b/src/CommandStation.Abstractions/ICommandStation.cs @@ -0,0 +1,23 @@ +using System; +using System.Threading.Tasks; +using CommandStation.Transport; + +namespace CommandStation +{ + /// + /// A protocol-agnostic connection to a model-railway command station. Feature operations live on + /// the capability interfaces (, , + /// , ); a station implements only + /// the capabilities it supports, so consumers test for them (e.g. station is ILocoControl). + /// + public interface ICommandStation + { + bool IsConnected { get; } + + event EventHandler? ConnectionChanged; + + Task ConnectAsync(); + + Task DisconnectAsync(); + } +} diff --git a/src/CommandStation.Abstractions/IFastClockControl.cs b/src/CommandStation.Abstractions/IFastClockControl.cs new file mode 100644 index 0000000..bd74ff2 --- /dev/null +++ b/src/CommandStation.Abstractions/IFastClockControl.cs @@ -0,0 +1,22 @@ +using System; +using System.Threading.Tasks; +using CommandStation.Model; + +namespace CommandStation +{ + /// + /// Controlling the accelerated model railway clock (model time). + /// + public interface IFastClockControl + { + Task RequestModelTimeAsync(); + + Task SetModelTimeAsync(ModelTime time); + + Task StartModelTimeAsync(); + + Task StopModelTimeAsync(); + + event EventHandler? ModelTimeChanged; + } +} diff --git a/src/CommandStation.Abstractions/IFeedbackControl.cs b/src/CommandStation.Abstractions/IFeedbackControl.cs new file mode 100644 index 0000000..68d0607 --- /dev/null +++ b/src/CommandStation.Abstractions/IFeedbackControl.cs @@ -0,0 +1,17 @@ +using System; +using System.Threading.Tasks; +using CommandStation.Model; + +namespace CommandStation +{ + /// + /// Reading occupancy/feedback modules. Group index 0 covers module addresses 1–10, group index 1 + /// covers 11–20. + /// + public interface IFeedbackControl + { + Task RequestFeedbackAsync(byte groupIndex); + + event EventHandler? FeedbackChanged; + } +} diff --git a/src/CommandStation.Abstractions/ILocoControl.cs b/src/CommandStation.Abstractions/ILocoControl.cs new file mode 100644 index 0000000..09d159c --- /dev/null +++ b/src/CommandStation.Abstractions/ILocoControl.cs @@ -0,0 +1,24 @@ +using System; +using System.Threading.Tasks; +using CommandStation.Model; + +namespace CommandStation +{ + /// + /// Driving a locomotive: speed, direction, functions, and locomotive status notifications. + /// + public interface ILocoControl + { + Task DriveAsync(ushort locoAddress, DccSpeedMode speedMode, DrivingDirection direction, ushort speed); + + Task EmergencyStopAsync(ushort locoAddress); + + Task SetFunctionAsync(ushort locoAddress, ushort functionIndex, FunctionToggleType toggleType); + + Task PurgeAsync(ushort locoAddress); + + Task RequestLocoInfoAsync(ushort locoAddress); + + event EventHandler? LocoInfoReceived; + } +} diff --git a/src/CommandStation.Abstractions/IProgrammingControl.cs b/src/CommandStation.Abstractions/IProgrammingControl.cs new file mode 100644 index 0000000..9b85896 --- /dev/null +++ b/src/CommandStation.Abstractions/IProgrammingControl.cs @@ -0,0 +1,21 @@ +using System; +using System.Threading.Tasks; +using CommandStation.Model; + +namespace CommandStation +{ + /// + /// Reading and writing decoder configuration variables (CVs) in direct mode on the programming track. + /// CV addresses are 0-based (0 = CV1). + /// + public interface IProgrammingControl + { + Task ReadCvAsync(ushort cvAddress); + + Task WriteCvAsync(ushort cvAddress, byte value); + + event EventHandler? CvReadCompleted; + + event EventHandler? CvProgrammingFailed; + } +} diff --git a/src/CommandStation.Abstractions/ISystemInfoProvider.cs b/src/CommandStation.Abstractions/ISystemInfoProvider.cs new file mode 100644 index 0000000..948a9ba --- /dev/null +++ b/src/CommandStation.Abstractions/ISystemInfoProvider.cs @@ -0,0 +1,24 @@ +using System; +using System.Threading.Tasks; +using CommandStation.Model; + +namespace CommandStation +{ + /// + /// Querying command-station system information and receiving status notifications. + /// + public interface ISystemInfoProvider + { + Task RequestSystemStateAsync(); + + Task RequestFirmwareVersionAsync(); + + Task RequestStatusAsync(); + + event EventHandler? SystemStateReceived; + + event EventHandler? FirmwareVersionReceived; + + event EventHandler? StatusChanged; + } +} diff --git a/src/CommandStation.Abstractions/ITrackPowerControl.cs b/src/CommandStation.Abstractions/ITrackPowerControl.cs new file mode 100644 index 0000000..a208745 --- /dev/null +++ b/src/CommandStation.Abstractions/ITrackPowerControl.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading.Tasks; + +namespace CommandStation +{ + /// + /// Track power and global emergency stop. + /// + public interface ITrackPowerControl + { + Task TrackPowerOnAsync(); + + Task TrackPowerOffAsync(); + + /// + /// Stops all locomotives while leaving the track voltage on. + /// + Task EmergencyStopAllAsync(); + + /// + /// Raised when track power is switched on (true) or off (false). + /// + event EventHandler? TrackPowerChanged; + } +} diff --git a/src/Z21.Client/Core/Model/AccessoryOutput.cs b/src/CommandStation.Abstractions/Model/AccessoryOutput.cs similarity index 75% rename from src/Z21.Client/Core/Model/AccessoryOutput.cs rename to src/CommandStation.Abstractions/Model/AccessoryOutput.cs index efd7ced..0574fe6 100644 --- a/src/Z21.Client/Core/Model/AccessoryOutput.cs +++ b/src/CommandStation.Abstractions/Model/AccessoryOutput.cs @@ -1,6 +1,6 @@ using System; -namespace Z21.Core.Model +namespace CommandStation.Model { [Flags] public enum AccessoryOutput @@ -8,4 +8,4 @@ public enum AccessoryOutput Output1 = 0x0, Output2 = 0x1 } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Model/AccessoryState.cs b/src/CommandStation.Abstractions/Model/AccessoryState.cs similarity index 76% rename from src/Z21.Client/Core/Model/AccessoryState.cs rename to src/CommandStation.Abstractions/Model/AccessoryState.cs index e62a38e..bcebfef 100644 --- a/src/Z21.Client/Core/Model/AccessoryState.cs +++ b/src/CommandStation.Abstractions/Model/AccessoryState.cs @@ -1,12 +1,11 @@ using System; -namespace Z21.Core.Model +namespace CommandStation.Model { - [Flags] public enum AccessoryState { Deactivate = 0x0, Activate = 0x8 } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Model/Capabilities.cs b/src/CommandStation.Abstractions/Model/Capabilities.cs similarity index 92% rename from src/Z21.Client/Core/Model/Capabilities.cs rename to src/CommandStation.Abstractions/Model/Capabilities.cs index e3798ed..478b219 100644 --- a/src/Z21.Client/Core/Model/Capabilities.cs +++ b/src/CommandStation.Abstractions/Model/Capabilities.cs @@ -1,7 +1,7 @@ -namespace Z21.Core.Model +namespace CommandStation.Model { /// - /// Represents the supported capabilities of a Z21 device. + /// Represents the supported capabilities of a command station device. /// Each property corresponds to a specific protocol feature. /// public class Capabilities @@ -41,4 +41,4 @@ public class Capabilities /// public bool NeedsUnlockCode { get; init; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Model/CentralState.cs b/src/CommandStation.Abstractions/Model/CentralState.cs similarity index 90% rename from src/Z21.Client/Core/Model/CentralState.cs rename to src/CommandStation.Abstractions/Model/CentralState.cs index a434fc2..1cf6c55 100644 --- a/src/Z21.Client/Core/Model/CentralState.cs +++ b/src/CommandStation.Abstractions/Model/CentralState.cs @@ -1,7 +1,7 @@ -namespace Z21.Core.Model +namespace CommandStation.Model { /// - /// Represents the current operational state of the Z21 central unit. + /// Represents the current operational state of a command station. /// Each property reflects a specific system condition or mode. /// public class CentralState @@ -30,5 +30,4 @@ public class CentralState /// public bool ProgrammingModeActive { get; init; } } - -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Model/CentralStateEx.cs b/src/CommandStation.Abstractions/Model/CentralStateEx.cs similarity index 92% rename from src/Z21.Client/Core/Model/CentralStateEx.cs rename to src/CommandStation.Abstractions/Model/CentralStateEx.cs index 2d6adfc..abe7361 100644 --- a/src/Z21.Client/Core/Model/CentralStateEx.cs +++ b/src/CommandStation.Abstractions/Model/CentralStateEx.cs @@ -1,7 +1,7 @@ -namespace Z21.Core.Model +namespace CommandStation.Model { /// - /// Represents extended diagnostic states reported by the Z21 central unit. + /// Represents extended diagnostic states reported by a command station. /// These flags provide additional system-level status information beyond the basic central state. /// public class CentralStateEx @@ -36,5 +36,4 @@ public class CentralStateEx /// public bool Rcn213 { get; init; } } - -} \ No newline at end of file +} diff --git a/src/CommandStation.Abstractions/Model/CvProgrammingError.cs b/src/CommandStation.Abstractions/Model/CvProgrammingError.cs new file mode 100644 index 0000000..ad9a646 --- /dev/null +++ b/src/CommandStation.Abstractions/Model/CvProgrammingError.cs @@ -0,0 +1,14 @@ +namespace CommandStation.Model +{ + /// + /// Why a CV programming operation failed. + /// + public enum CvProgrammingError + { + /// No decoder acknowledgement was received. + NoAcknowledgement, + + /// Programming failed because of a short circuit on the track. + ShortCircuit + } +} diff --git a/src/CommandStation.Abstractions/Model/CvValue.cs b/src/CommandStation.Abstractions/Model/CvValue.cs new file mode 100644 index 0000000..1c6bb75 --- /dev/null +++ b/src/CommandStation.Abstractions/Model/CvValue.cs @@ -0,0 +1,8 @@ +namespace CommandStation.Model +{ + /// + /// The value of a decoder configuration variable read back from the command station. + /// is 0-based (0 = CV1). + /// + public record CvValue(ushort CvAddress, byte Value); +} diff --git a/src/Z21.Client/Core/Model/DccSpeedMode.cs b/src/CommandStation.Abstractions/Model/DccSpeedMode.cs similarity index 89% rename from src/Z21.Client/Core/Model/DccSpeedMode.cs rename to src/CommandStation.Abstractions/Model/DccSpeedMode.cs index f65309f..d3cbe8e 100644 --- a/src/Z21.Client/Core/Model/DccSpeedMode.cs +++ b/src/CommandStation.Abstractions/Model/DccSpeedMode.cs @@ -1,6 +1,4 @@ -using System; - -namespace Z21.Core.Model +namespace CommandStation.Model { public enum DccSpeedMode { @@ -19,4 +17,4 @@ public enum DccSpeedMode /// Steps128 = 128 } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Model/DecoderMode.cs b/src/CommandStation.Abstractions/Model/DecoderMode.cs similarity index 87% rename from src/Z21.Client/Core/Model/DecoderMode.cs rename to src/CommandStation.Abstractions/Model/DecoderMode.cs index b0a7302..b4e2c12 100644 --- a/src/Z21.Client/Core/Model/DecoderMode.cs +++ b/src/CommandStation.Abstractions/Model/DecoderMode.cs @@ -1,4 +1,4 @@ -namespace Z21.Core.Model +namespace CommandStation.Model { public enum DecoderMode { @@ -6,15 +6,15 @@ public enum DecoderMode /// DCC format /// DCC = 0, - + /// /// MM format /// MM = 1, - + /// /// Unknown format /// Unknown = int.MaxValue } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Model/DrivingDirection.cs b/src/CommandStation.Abstractions/Model/DrivingDirection.cs similarity index 76% rename from src/Z21.Client/Core/Model/DrivingDirection.cs rename to src/CommandStation.Abstractions/Model/DrivingDirection.cs index 7a0828b..86fc670 100644 --- a/src/Z21.Client/Core/Model/DrivingDirection.cs +++ b/src/CommandStation.Abstractions/Model/DrivingDirection.cs @@ -1,6 +1,6 @@ using System; -namespace Z21.Core.Model +namespace CommandStation.Model { [Flags] public enum DrivingDirection @@ -8,4 +8,4 @@ public enum DrivingDirection Backward = 0x0, Forward = 0x80, } -} \ No newline at end of file +} diff --git a/src/CommandStation.Abstractions/Model/ExtAccessoryInfo.cs b/src/CommandStation.Abstractions/Model/ExtAccessoryInfo.cs new file mode 100644 index 0000000..437e362 --- /dev/null +++ b/src/CommandStation.Abstractions/Model/ExtAccessoryInfo.cs @@ -0,0 +1,7 @@ +namespace CommandStation.Model +{ + /// + /// The reported state of an extended accessory decoder. + /// + public record ExtAccessoryInfo(ushort AccessoryAddress, byte EncodedState, bool DataValid); +} diff --git a/src/CommandStation.Abstractions/Model/FeedbackData.cs b/src/CommandStation.Abstractions/Model/FeedbackData.cs new file mode 100644 index 0000000..25b54f2 --- /dev/null +++ b/src/CommandStation.Abstractions/Model/FeedbackData.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace CommandStation.Model +{ + /// + /// A feedback bus status snapshot: the group index and one status byte per feedback module + /// (one bit per input). + /// + public record FeedbackData(byte GroupIndex, IReadOnlyList States); +} diff --git a/src/CommandStation.Abstractions/Model/FirmwareVersion.cs b/src/CommandStation.Abstractions/Model/FirmwareVersion.cs new file mode 100644 index 0000000..3963655 --- /dev/null +++ b/src/CommandStation.Abstractions/Model/FirmwareVersion.cs @@ -0,0 +1,41 @@ +using System; + +namespace CommandStation.Model +{ + public sealed class FirmwareVersion(int major, int minor) : IComparable, IEquatable + { + public int Major { get; } = major; + + public int Minor { get; } = minor; + + public string Firmware { get; } = major + "." + minor; + + override public string ToString() => Firmware; + + public bool Equals(FirmwareVersion? other) => Major == other?.Major && Minor == other.Minor; + + override public bool Equals(object? obj) => obj is FirmwareVersion other && Equals(other); + + override public int GetHashCode() => HashCode.Combine(Major, Minor); + + public int CompareTo(FirmwareVersion? other) + { + if (other is null) + return 1; + int majorCmp = Major.CompareTo(other.Major); + return majorCmp != 0 ? majorCmp : Minor.CompareTo(other.Minor); + } + + public static bool operator <(FirmwareVersion? left, FirmwareVersion? right) => left is null ? right is not null : left.CompareTo(right) < 0; + + public static bool operator >(FirmwareVersion? left, FirmwareVersion? right) => left is not null && left.CompareTo(right) > 0; + + public static bool operator <=(FirmwareVersion? left, FirmwareVersion? right) => left is null || left.CompareTo(right) <= 0; + + public static bool operator >=(FirmwareVersion? left, FirmwareVersion? right) => left is null ? right is null : left.CompareTo(right) >= 0; + + public static bool operator ==(FirmwareVersion? left, FirmwareVersion? right) => Equals(left, right); + + public static bool operator !=(FirmwareVersion? left, FirmwareVersion? right) => !Equals(left, right); + } +} diff --git a/src/Z21.Client/Core/Model/FunctionToggleType.cs b/src/CommandStation.Abstractions/Model/FunctionToggleType.cs similarity index 77% rename from src/Z21.Client/Core/Model/FunctionToggleType.cs rename to src/CommandStation.Abstractions/Model/FunctionToggleType.cs index 32dc7da..b4dfee9 100644 --- a/src/Z21.Client/Core/Model/FunctionToggleType.cs +++ b/src/CommandStation.Abstractions/Model/FunctionToggleType.cs @@ -1,6 +1,6 @@ using System; -namespace Z21.Core.Model +namespace CommandStation.Model { [Flags] public enum FunctionToggleType @@ -9,4 +9,4 @@ public enum FunctionToggleType On = 0x40, Toggle = 0x80 } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Model/LocoFunctionData.cs b/src/CommandStation.Abstractions/Model/LocoFunctionData.cs similarity index 94% rename from src/Z21.Client/Core/Model/LocoFunctionData.cs rename to src/CommandStation.Abstractions/Model/LocoFunctionData.cs index 10ba5eb..822ae40 100644 --- a/src/Z21.Client/Core/Model/LocoFunctionData.cs +++ b/src/CommandStation.Abstractions/Model/LocoFunctionData.cs @@ -1,6 +1,6 @@ using System; -namespace Z21.Core.Model +namespace CommandStation.Model { public class LocoFunctionData(short functionIndex, FunctionToggleType functionToggleType) : IEquatable { @@ -14,4 +14,4 @@ public class LocoFunctionData(short functionIndex, FunctionToggleType functionTo override public int GetHashCode() => HashCode.Combine(FunctionIndex); } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Model/LocoInfoData.cs b/src/CommandStation.Abstractions/Model/LocoInfoData.cs similarity index 94% rename from src/Z21.Client/Core/Model/LocoInfoData.cs rename to src/CommandStation.Abstractions/Model/LocoInfoData.cs index 023b317..13d2ddd 100644 --- a/src/Z21.Client/Core/Model/LocoInfoData.cs +++ b/src/CommandStation.Abstractions/Model/LocoInfoData.cs @@ -1,11 +1,11 @@ using System.Collections.Generic; -namespace Z21.Core.Model +namespace CommandStation.Model { public class LocoInfoData { public required ushort LocoAddress { get; init; } - + public required IReadOnlyCollection LocoFunctionsData { get; init; } public required DccSpeedMode DccSpeedMode { get; init; } @@ -22,4 +22,4 @@ public class LocoInfoData public required bool SmartSearch { get; init; } } -} \ No newline at end of file +} diff --git a/src/CommandStation.Abstractions/Model/ModelTime.cs b/src/CommandStation.Abstractions/Model/ModelTime.cs new file mode 100644 index 0000000..b8bd3f3 --- /dev/null +++ b/src/CommandStation.Abstractions/Model/ModelTime.cs @@ -0,0 +1,8 @@ +namespace CommandStation.Model +{ + /// + /// Accelerated model railway clock time. is 0 (Monday) to 6 (Sunday), + /// is the acceleration factor (0–63; 1 = real time). + /// + public record ModelTime(byte Day, byte Hour, byte Minute, byte Second, byte Rate); +} diff --git a/src/Z21.Client/Core/Model/SystemState.cs b/src/CommandStation.Abstractions/Model/SystemState.cs similarity index 70% rename from src/Z21.Client/Core/Model/SystemState.cs rename to src/CommandStation.Abstractions/Model/SystemState.cs index f2efc09..65637c1 100644 --- a/src/Z21.Client/Core/Model/SystemState.cs +++ b/src/CommandStation.Abstractions/Model/SystemState.cs @@ -1,7 +1,7 @@ -namespace Z21.Core.Model +namespace CommandStation.Model { /// - /// Represents the complete system status of the Z21 central unit, + /// Represents the complete system status of a command station, /// including electrical measurements, temperature, and operational flags. /// public class SystemState @@ -23,40 +23,37 @@ public class SystemState public int FilteredMainCurrent { get; init; } /// - /// The internal temperature of the Z21 unit (in degrees Celsius). + /// The internal temperature of the unit (in degrees Celsius). /// public int Temperature { get; init; } /// - /// The supply voltage (in millivolts) provided to the Z21 unit. + /// The supply voltage (in millivolts) provided to the unit. /// public int SupplyVoltage { get; init; } /// - /// The internal Vcc voltage (in millivolts) used by the Z21 logic circuits. + /// The internal Vcc voltage (in millivolts) used by the logic circuits. /// public int VccVoltage { get; init; } /// - /// The basic operational state of the Z21 central unit, + /// The basic operational state of the central unit, /// including emergency stop, voltage status, and programming mode. /// public required CentralState CentralState { get; init; } /// - /// Extended diagnostic flags from the Z21 central unit, + /// Extended diagnostic flags from the central unit, /// such as temperature warnings, power loss, and short circuit conditions. /// public required CentralStateEx CentralStateEx { get; init; } - // Reserved field for future use or protocol alignment. - // public int? Reserved { get; init; } - /// - /// The set of capabilities supported by the Z21 device, + /// The set of capabilities supported by the device, /// such as RailCom, LocoNet, and accessory command support. /// Will be null on older firmware versions. /// public Capabilities? Capabilities { get; init; } } -} \ No newline at end of file +} diff --git a/src/CommandStation.Abstractions/Model/TurnoutInfo.cs b/src/CommandStation.Abstractions/Model/TurnoutInfo.cs new file mode 100644 index 0000000..0df64e1 --- /dev/null +++ b/src/CommandStation.Abstractions/Model/TurnoutInfo.cs @@ -0,0 +1,8 @@ +namespace CommandStation.Model +{ + /// + /// The reported state of a turnout/accessory. is null when the turnout has + /// not yet been switched or was switched with an invalid combination. + /// + public record TurnoutInfo(ushort AccessoryAddress, AccessoryOutput? Output); +} diff --git a/src/CommandStation.Abstractions/Transport/BytesReceivedEventArgs.cs b/src/CommandStation.Abstractions/Transport/BytesReceivedEventArgs.cs new file mode 100644 index 0000000..4d377b2 --- /dev/null +++ b/src/CommandStation.Abstractions/Transport/BytesReceivedEventArgs.cs @@ -0,0 +1,15 @@ +using System; + +namespace CommandStation.Transport +{ + public class BytesReceivedEventArgs : EventArgs + { + public BytesReceivedEventArgs(byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + Data = data; + } + + public byte[] Data { get; } + } +} diff --git a/src/CommandStation.Abstractions/Transport/ConnectionChangedEventArgs.cs b/src/CommandStation.Abstractions/Transport/ConnectionChangedEventArgs.cs new file mode 100644 index 0000000..81a8ad0 --- /dev/null +++ b/src/CommandStation.Abstractions/Transport/ConnectionChangedEventArgs.cs @@ -0,0 +1,14 @@ +using System; + +namespace CommandStation.Transport +{ + public class ConnectionChangedEventArgs : EventArgs + { + public ConnectionChangedEventArgs(bool isConnected) + { + IsConnected = isConnected; + } + + public bool IsConnected { get; } + } +} diff --git a/src/CommandStation.Abstractions/Transport/ITransport.cs b/src/CommandStation.Abstractions/Transport/ITransport.cs new file mode 100644 index 0000000..0277997 --- /dev/null +++ b/src/CommandStation.Abstractions/Transport/ITransport.cs @@ -0,0 +1,33 @@ +using System; +using System.Threading.Tasks; + +namespace CommandStation.Transport +{ + /// + /// A protocol-agnostic byte pipe to a command station. Implementations may use any medium + /// (UDP, TCP, serial, …) and deliver received bytes in arbitrary chunk sizes. + /// + public interface ITransport + { + bool IsConnected { get; } + + event EventHandler? OnBytesReceived; + + event EventHandler? OnConnectionChanged; + + /// + /// Opens the underlying connection and begins receiving. + /// + Task ConnectAsync(); + + /// + /// Closes the underlying connection. + /// + Task DisconnectAsync(); + + /// + /// Sends the given bytes to the command station. + /// + Task SendAsync(ReadOnlyMemory data); + } +} diff --git a/src/CommandStation.Transport.Udp.UnitTest/CommandStation.Transport.Udp.UnitTest.csproj b/src/CommandStation.Transport.Udp.UnitTest/CommandStation.Transport.Udp.UnitTest.csproj new file mode 100644 index 0000000..0a929a3 --- /dev/null +++ b/src/CommandStation.Transport.Udp.UnitTest/CommandStation.Transport.Udp.UnitTest.csproj @@ -0,0 +1,29 @@ + + + + net8.0 + enable + enable + + false + true + CommandStation.Transport.Udp.UnitTest + + + + + + + + + + + + + + + + + + + diff --git a/src/CommandStation.Transport.Udp.UnitTest/UdpTransportTest.cs b/src/CommandStation.Transport.Udp.UnitTest/UdpTransportTest.cs new file mode 100644 index 0000000..d2f6274 --- /dev/null +++ b/src/CommandStation.Transport.Udp.UnitTest/UdpTransportTest.cs @@ -0,0 +1,284 @@ +using System.Net; +using System.Net.Sockets; +using CommandStation.Transport; + +namespace CommandStation.Transport.Udp.UnitTest +{ + [TestFixture] + public class UdpTransportTest + { + private UdpClient _station = null!; + private IPEndPoint _stationEndPoint = null!; + + [SetUp] + public void SetUp() + { + _station = new UdpClient(new IPEndPoint(IPAddress.Loopback, 0)); + _stationEndPoint = (IPEndPoint)_station.Client.LocalEndPoint!; + } + + [TearDown] + public void TearDown() + { + _station.Dispose(); + } + + [Test] + public async Task ConnectAsync_SetsIsConnected_AndRaisesOnConnectionChanged() + { + await using var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + bool? raised = null; + transport.OnConnectionChanged += (_, args) => raised = args.IsConnected; + + await transport.ConnectAsync(); + + Assert.That(transport.IsConnected, Is.True); + Assert.That(raised, Is.True); + } + + [Test] + public async Task SendAsync_TransmitsBytes_ToRemoteEndpoint() + { + await using var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + await transport.ConnectAsync(); + byte[] payload = [0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00]; + + await transport.SendAsync(payload); + + var received = await _station.ReceiveAsync().WaitAsync(TimeSpan.FromSeconds(2)); + Assert.That(received.Buffer, Is.EqualTo(payload)); + } + + [Test] + public async Task ReceiveLoop_OnSocketError_RaisesDisconnectedExactlyOnce() + { + int deadPort; + using (UdpClient dead = new(new IPEndPoint(IPAddress.Loopback, 0))) + deadPort = ((IPEndPoint)dead.Client.LocalEndPoint!).Port; + + var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = new IPEndPoint(IPAddress.Loopback, deadPort) }); + int disconnectedRaises = 0; + TaskCompletionSource disconnected = new(); + transport.OnConnectionChanged += (_, args) => + { + if (!args.IsConnected) + { + System.Threading.Interlocked.Increment(ref disconnectedRaises); + disconnected.TrySetResult(true); + } + }; + try + { + await transport.ConnectAsync(); + + await transport.SendAsync(new byte[] { 0x01 }); + + Assert.That(await disconnected.Task.WaitAsync(TimeSpan.FromSeconds(5)), Is.True); + Assert.Multiple(() => + { + Assert.That(transport.IsConnected, Is.False); + Assert.That(disconnectedRaises, Is.EqualTo(1), "the lost connection must raise disconnected exactly once"); + }); + } + finally + { + await transport.DisposeAsync(); + } + } + + [Test] + public void Ctor_NullOptions_Throws() + { + Assert.Throws(() => _ = new UdpTransport(null!)); + } + + [Test] + public void SendAsync_WhenNotConnected_ThrowsWithMessage() + { + var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + var exception = Assert.ThrowsAsync(async () => await transport.SendAsync(new byte[] { 0x01 }))!; + Assert.That(exception.Message, Does.Contain("not connected")); + } + + [Test] + public async Task ConnectAsync_WhenAlreadyConnected_IsIdempotent() + { + await using var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + int connectedRaises = 0; + transport.OnConnectionChanged += (_, args) => + { + if (args.IsConnected) + connectedRaises++; + }; + + await transport.ConnectAsync(); + await transport.ConnectAsync(); + + Assert.Multiple(() => + { + Assert.That(transport.IsConnected, Is.True); + Assert.That(connectedRaises, Is.EqualTo(1), "second connect must be a no-op"); + }); + } + + [Test] + public async Task DisconnectAsync_SetsDisconnected_AndRaisesOnce() + { + await using var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + int disconnectedRaises = 0; + transport.OnConnectionChanged += (_, args) => + { + if (!args.IsConnected) + disconnectedRaises++; + }; + await transport.ConnectAsync(); + + await transport.DisconnectAsync(); + await transport.DisconnectAsync(); + + Assert.Multiple(() => + { + Assert.That(transport.IsConnected, Is.False); + Assert.That(disconnectedRaises, Is.EqualTo(1), "second disconnect must be a no-op"); + }); + } + + [Test] + public async Task DisconnectAsync_WhenNeverConnected_DoesNotRaise() + { + await using var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + bool raised = false; + transport.OnConnectionChanged += (_, _) => raised = true; + + await transport.DisconnectAsync(); + + Assert.Multiple(() => + { + Assert.That(raised, Is.False); + Assert.That(transport.IsConnected, Is.False); + }); + } + + [Test] + public async Task DisposeAsync_DisconnectsActiveTransport() + { + var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + bool disconnected = false; + transport.OnConnectionChanged += (_, args) => + { + if (!args.IsConnected) + disconnected = true; + }; + await transport.ConnectAsync(); + + await transport.DisposeAsync(); + + Assert.Multiple(() => + { + Assert.That(transport.IsConnected, Is.False); + Assert.That(disconnected, Is.True); + }); + } + + [Test] + public async Task Dispose_DisconnectsActiveTransport_AndRaisesOnce() + { + var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + int disconnectedRaises = 0; + transport.OnConnectionChanged += (_, args) => + { + if (!args.IsConnected) + disconnectedRaises++; + }; + await transport.ConnectAsync(); + + transport.Dispose(); + + Assert.Multiple(() => + { + Assert.That(transport.IsConnected, Is.False); + Assert.That(disconnectedRaises, Is.EqualTo(1)); + }); + } + + [Test] + public void Dispose_WhenNeverConnected_DoesNotRaise() + { + var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + bool raised = false; + transport.OnConnectionChanged += (_, _) => raised = true; + + transport.Dispose(); + + Assert.Multiple(() => + { + Assert.That(raised, Is.False); + Assert.That(transport.IsConnected, Is.False); + }); + } + + [Test] + public async Task Dispose_CalledTwice_RaisesDisconnectedOnce() + { + var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + int disconnectedRaises = 0; + transport.OnConnectionChanged += (_, args) => + { + if (!args.IsConnected) + disconnectedRaises++; + }; + await transport.ConnectAsync(); + + transport.Dispose(); + transport.Dispose(); + + Assert.That(disconnectedRaises, Is.EqualTo(1), "second dispose must be a no-op"); + } + + [Test] + public async Task IncomingBytes_RaiseOnBytesReceived() + { + await using var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + var tcs = new TaskCompletionSource(); + transport.OnBytesReceived += (_, args) => tcs.TrySetResult(args.Data); + await transport.ConnectAsync(); + + // Provoke the station to learn the transport's source endpoint, then reply to it. + await transport.SendAsync(new byte[] { 0x01 }); + var probe = await _station.ReceiveAsync().WaitAsync(TimeSpan.FromSeconds(2)); + byte[] reply = [0x07, 0x00, 0x40, 0x00, 0x61, 0x01, 0x60]; + await _station.SendAsync(reply, reply.Length, probe.RemoteEndPoint); + + byte[] got = await tcs.Task.WaitAsync(TimeSpan.FromSeconds(2)); + Assert.That(got, Is.EqualTo(reply)); + } + + [Test] + public async Task ReceiveLoop_SubscriberThrows_LoopSurvivesAndKeepsDelivering() + { + await using var transport = new UdpTransport(new UdpTransportOptions { RemoteEndPoint = _stationEndPoint }); + int received = 0; + var secondReceived = new TaskCompletionSource(); + transport.OnBytesReceived += (_, _) => + { + if (System.Threading.Interlocked.Increment(ref received) == 1) + throw new System.InvalidOperationException("boom in subscriber"); + secondReceived.TrySetResult(true); + }; + await transport.ConnectAsync(); + + await transport.SendAsync(new byte[] { 0x01 }); + var probe = await _station.ReceiveAsync().WaitAsync(TimeSpan.FromSeconds(2)); + byte[] reply = [0x07, 0x00, 0x40, 0x00, 0x61, 0x01, 0x60]; + await _station.SendAsync(reply, reply.Length, probe.RemoteEndPoint); + await _station.SendAsync(reply, reply.Length, probe.RemoteEndPoint); + + Assert.Multiple(() => + { + Assert.That(secondReceived.Task.WaitAsync(TimeSpan.FromSeconds(2)).Result, Is.True, + "a throwing OnBytesReceived subscriber must not kill the receive loop"); + Assert.That(transport.IsConnected, Is.True); + }); + } + } +} diff --git a/src/CommandStation.Transport.Udp.UnitTest/stryker-config.json b/src/CommandStation.Transport.Udp.UnitTest/stryker-config.json new file mode 100644 index 0000000..eba8138 --- /dev/null +++ b/src/CommandStation.Transport.Udp.UnitTest/stryker-config.json @@ -0,0 +1,16 @@ +{ + "stryker-config": { + "project": "CommandStation.Transport.Udp.csproj", + "mutation-level": "Complete", + "coverage-analysis": "perTest", + "thresholds": { + "high": 98, + "low": 90, + "break": 60 + }, + "reporters": [ + "html", + "progress" + ] + } +} diff --git a/src/CommandStation.Transport.Udp/CommandStation.Transport.Udp.csproj b/src/CommandStation.Transport.Udp/CommandStation.Transport.Udp.csproj new file mode 100644 index 0000000..876e598 --- /dev/null +++ b/src/CommandStation.Transport.Udp/CommandStation.Transport.Udp.csproj @@ -0,0 +1,29 @@ + + + + net8.0 + enable + 12 + disable + CommandStation.Transport.Udp + true + true + $(NoWarn);CS1591;CS1573 + CommandStation.Transport.Udp + CommandStation.Transport.Udp + Jakob Eichberger + UDP transport (ITransport) for model-railway command stations. + ModelRailway;CommandStation;UDP;Transport + https://github.com/jaak0b/Z21 + GPL-3.0-only + + + + + + + + + + + diff --git a/src/CommandStation.Transport.Udp/UdpTransport.cs b/src/CommandStation.Transport.Udp/UdpTransport.cs new file mode 100644 index 0000000..821d541 --- /dev/null +++ b/src/CommandStation.Transport.Udp/UdpTransport.cs @@ -0,0 +1,169 @@ +using System; +using System.Net.Sockets; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; + +namespace CommandStation.Transport.Udp +{ + public class UdpTransport : ITransport, IDisposable, IAsyncDisposable + { + private readonly UdpTransportOptions _options; + private readonly ILogger? _logger; + private readonly object _sync = new(); + private UdpClient? _udpClient; + private CancellationTokenSource? _receiveCancellation; + + public UdpTransport(UdpTransportOptions options, ILogger? logger = null) + { + ArgumentNullException.ThrowIfNull(options); + _options = options; + _logger = logger; + } + + public bool IsConnected { get; private set; } + + public event EventHandler? OnBytesReceived; + + public event EventHandler? OnConnectionChanged; + + public Task ConnectAsync() + { + UdpClient udpClient; + CancellationToken token; + lock (_sync) + { + if (IsConnected) + return Task.CompletedTask; + + udpClient = new UdpClient(); + if (OperatingSystem.IsWindows()) + udpClient.AllowNatTraversal(_options.AllowNatTraversal); + udpClient.Connect(_options.RemoteEndPoint); + + _udpClient = udpClient; + _receiveCancellation = new CancellationTokenSource(); + token = _receiveCancellation.Token; + IsConnected = true; + } + + _ = ReceiveLoopAsync(udpClient, token); + + OnConnectionChanged?.Invoke(this, new ConnectionChangedEventArgs(true)); + return Task.CompletedTask; + } + + public Task DisconnectAsync() + { + Disconnect(); + return Task.CompletedTask; + } + + private void Disconnect() + { + CancellationTokenSource? cancellation; + UdpClient? udpClient; + lock (_sync) + { + if (!IsConnected) + return; + + IsConnected = false; + cancellation = _receiveCancellation; + _receiveCancellation = null; + udpClient = _udpClient; + _udpClient = null; + } + + cancellation?.Cancel(); + cancellation?.Dispose(); + udpClient?.Dispose(); + + OnConnectionChanged?.Invoke(this, new ConnectionChangedEventArgs(false)); + } + + public async Task SendAsync(ReadOnlyMemory data) + { + UdpClient udpClient; + lock (_sync) + { + if (_udpClient is null || !IsConnected) + throw new InvalidOperationException("UdpTransport is not connected."); + udpClient = _udpClient; + } + + await udpClient.SendAsync(data); + } + + public void Dispose() + { + Disconnect(); + GC.SuppressFinalize(this); + } + + public ValueTask DisposeAsync() + { + Disconnect(); + GC.SuppressFinalize(this); + return ValueTask.CompletedTask; + } + + private async Task ReceiveLoopAsync(UdpClient udpClient, CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + UdpReceiveResult result; + try + { + result = await udpClient.ReceiveAsync(cancellationToken); + } + catch (OperationCanceledException) + { + return; + } + catch (ObjectDisposedException) + { + return; + } + catch (SocketException socketException) + { + _logger?.LogError(socketException, "UdpTransport receive loop terminated due to a socket error."); + SignalConnectionLost(udpClient); + return; + } + + try + { + OnBytesReceived?.Invoke(this, new BytesReceivedEventArgs(result.Buffer)); + } + catch (System.Exception exception) + { + _logger?.LogError(exception, "UdpTransport receive loop swallowed an exception thrown by an OnBytesReceived subscriber."); + } + } + } + + private void SignalConnectionLost(UdpClient faultedClient) + { + CancellationTokenSource? cancellation = null; + bool raise = false; + lock (_sync) + { + if (IsConnected && ReferenceEquals(_udpClient, faultedClient)) + { + IsConnected = false; + cancellation = _receiveCancellation; + _receiveCancellation = null; + _udpClient = null; + raise = true; + } + } + + cancellation?.Dispose(); + faultedClient.Dispose(); + + if (raise) + OnConnectionChanged?.Invoke(this, new ConnectionChangedEventArgs(false)); + } + } +} diff --git a/src/CommandStation.Transport.Udp/UdpTransportOptions.cs b/src/CommandStation.Transport.Udp/UdpTransportOptions.cs new file mode 100644 index 0000000..d460fd1 --- /dev/null +++ b/src/CommandStation.Transport.Udp/UdpTransportOptions.cs @@ -0,0 +1,21 @@ +using System.Net; + +namespace CommandStation.Transport.Udp +{ + public class UdpTransportOptions + { + /// + /// The remote endpoint of the command station. + /// + public IPEndPoint RemoteEndPoint { get; set; } = new(IPAddress.Parse(DefaultAddress), DefaultPort); + + /// + /// Enables or disables NAT traversal on the underlying socket (Windows only). + /// + public bool AllowNatTraversal { get; set; } = true; + + public const string DefaultAddress = "192.168.0.111"; + + public const int DefaultPort = 21105; + } +} diff --git a/src/Z21.Autofac.UnitTests/Z21AutofacExtensions.cs b/src/Z21.Autofac.UnitTests/Z21AutofacExtensions.cs index 03c9b57..d2f20f8 100644 --- a/src/Z21.Autofac.UnitTests/Z21AutofacExtensions.cs +++ b/src/Z21.Autofac.UnitTests/Z21AutofacExtensions.cs @@ -1,10 +1,10 @@ -using System.Net; using Autofac; +using CommandStation; +using CommandStation.Transport; using Z21.Core; -using Z21.Core.Model; +using Z21.Core.ResponseHandler.Settings; using Z21.Core.ResponseHandler.SystemState; using Z21.Core.ResponseParser; -using Z21.Transport; namespace Z21.Autofac.UnitTests { @@ -25,17 +25,26 @@ public void AddZ21ResponseHandler_RegistersTypesCorrectly() var handler = container.Resolve(); Assert.That(handler, Is.InstanceOf()); - + var handlerType = container.Resolve(); Assert.That(handlerType, Is.InstanceOf()); Assert.That(handlerType, Is.EqualTo(handler)); } + [Test] + public void AddZ21ResponseHandler_DiscoversAccessoryModeHandler() + { + using var container = BuildContainer(containerBuilder => containerBuilder.AddZ21()); + + var handler = container.Resolve(); + Assert.That(handler, Is.InstanceOf()); + } + [Test] public void AddZ21ResponseParser_Registers_All_Parser_Types() { using var container = BuildContainer(containerBuilder => containerBuilder.AddZ21()); - + var baseInterface = typeof(IZ21ResponseParser); var parserTypes = baseInterface.Assembly .GetTypes() @@ -60,40 +69,38 @@ public void AddZ21ResponseParser_Registers_All_Parser_Types() } [Test] - public void AddZ21Transport_Registers_Transport_As_Singleton() + public void AddZ21_Registers_Transport_As_Singleton() { using var container = BuildContainer(containerBuilder => containerBuilder.AddZ21()); - - var t1 = container.Resolve(); - var t2 = container.Resolve(); + + var t1 = container.Resolve(); + var t2 = container.Resolve(); Assert.That(t1, Is.Not.Null); - Assert.That(t2, Is.Not.Null); Assert.That(t2, Is.SameAs(t1), "Transport should be singleton"); } [Test] - public void AddZ21Client_Registers_Client_As_Singleton() + public void AddZ21_Registers_CommandStation_As_Singleton() { using var container = BuildContainer(containerBuilder => containerBuilder.AddZ21()); - var c1 = container.Resolve(); - var c2 = container.Resolve(); + var s1 = container.Resolve(); + var s2 = container.Resolve(); - Assert.NotNull(c1); - Assert.NotNull(c2); - Assert.That(c2, Is.SameAs(c1), "Client should be singleton"); + Assert.That(s1, Is.Not.Null); + Assert.That(s2, Is.SameAs(s1), "ICommandStation and IZ21CommandStation should resolve to the same singleton"); } [Test] - public void ConfigureZ21Client_Registers_Configuration_Instance() + public void AddZ21_Registers_Options_Instance() { - using var container = BuildContainer(containerBuilder => containerBuilder.AddZ21(cfg => cfg.ResponseTime = TimeSpan.FromSeconds(5))); + using var container = BuildContainer(containerBuilder => containerBuilder.AddZ21(optionsConfiguration: options => options.KeepAliveInterval = TimeSpan.FromSeconds(5))); - var config = container.Resolve(); + var options = container.Resolve(); - Assert.NotNull(config); - Assert.That(config.ResponseTime, Is.EqualTo(TimeSpan.FromSeconds(5))); + Assert.That(options, Is.Not.Null); + Assert.That(options.KeepAliveInterval, Is.EqualTo(TimeSpan.FromSeconds(5))); } } -} \ No newline at end of file +} diff --git a/src/Z21.Autofac/Z21.Autofac.csproj b/src/Z21.Autofac/Z21.Autofac.csproj index 0dde02b..e8ab2d0 100644 --- a/src/Z21.Autofac/Z21.Autofac.csproj +++ b/src/Z21.Autofac/Z21.Autofac.csproj @@ -3,11 +3,12 @@ net8.0;net8.0-windows true + true + $(NoWarn);CS1591;CS1573 enable enable Jakob Eichberger - https://github.com/Jakob-Eichberger/z21Client - 6.0.0 + https://github.com/jaak0b/Z21 LICENSE true @@ -18,6 +19,7 @@ + diff --git a/src/Z21.Autofac/Z21AutofacExtensions.cs b/src/Z21.Autofac/Z21AutofacExtensions.cs index 0ccf002..7d0a9d9 100644 --- a/src/Z21.Autofac/Z21AutofacExtensions.cs +++ b/src/Z21.Autofac/Z21AutofacExtensions.cs @@ -1,22 +1,37 @@ -using Autofac; +using Autofac; +using CommandStation; +using CommandStation.Framing; +using CommandStation.Transport; +using CommandStation.Transport.Udp; using Z21.Core; -using Z21.Core.Model; +using Z21.Core.Codecs; +using Z21.Core.Command; +using Z21.Core.Framing; +using Z21.Core.Reflection; using Z21.Core.ResponseHandler; using Z21.Core.ResponseParser; -using Z21.Transport; namespace Z21.Autofac { public static class Z21AutofacExtensions { - public static ContainerBuilder AddZ21(this ContainerBuilder builder, Action? configurationAction = null) + public static ContainerBuilder AddZ21(this ContainerBuilder builder, Action? transportConfiguration = null, Action? optionsConfiguration = null) { - builder.RegisterType().As().SingleInstance(); - builder.RegisterType().As().SingleInstance(); - builder.RegisterType().AsSelf().SingleInstance().AutoActivate(); - - builder.ConfigureZ21Client(configurationAction); + UdpTransportOptions transportOptions = new(); + transportConfiguration?.Invoke(transportOptions); + builder.RegisterInstance(transportOptions).AsSelf().SingleInstance(); + + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().As().SingleInstance(); + builder.RegisterType().AsSelf().SingleInstance(); + + builder.ConfigureZ21Options(optionsConfiguration); builder.AddZ21ResponseParser(); builder.AddZ21ResponseHandler(); return builder; @@ -25,64 +40,27 @@ public static ContainerBuilder AddZ21(this ContainerBuilder builder, Action /// Discovers all Z21 response handlers and registers them in the container. /// - private static ContainerBuilder AddZ21ResponseHandler(this ContainerBuilder builder) - { - ArgumentNullException.ThrowIfNull(builder); - - Type baseInterface = typeof(IZ21ResponseHandler); - - IEnumerable handlerTypes = - baseInterface.Assembly - .GetTypes() - .Where(t => t is { IsClass: true, IsAbstract: false } && baseInterface.IsAssignableFrom(t)); - - foreach (Type handlerType in handlerTypes) - { - builder.RegisterType(handlerType) - .AsSelf() - .SingleInstance(); - - List interfacesToRegister = - handlerType.GetInterfaces() - .Where(baseInterface.IsAssignableFrom) - .ToList(); + private static ContainerBuilder AddZ21ResponseHandler(this ContainerBuilder builder) => + builder.AddDiscovered(typeof(IZ21ResponseHandler), includeBaseInterface: true); - foreach (Type serviceType in interfacesToRegister) - { - builder.Register(ctx => ctx.Resolve(handlerType)) - .As(serviceType) - .SingleInstance(); - } - } + private static ContainerBuilder AddZ21ResponseParser(this ContainerBuilder builder) => + builder.AddDiscovered(typeof(IZ21ResponseParser), includeBaseInterface: false); - return builder; - } - - private static ContainerBuilder AddZ21ResponseParser(this ContainerBuilder builder) + private static ContainerBuilder AddDiscovered(this ContainerBuilder builder, Type baseInterface, bool includeBaseInterface) { ArgumentNullException.ThrowIfNull(builder); - Type baseInterface = typeof(IZ21ResponseParser); + Z21ServiceDiscovery discovery = new(); - IEnumerable parserTypes = - baseInterface.Assembly - .GetTypes() - .Where(t => t is { IsClass: true, IsAbstract: false } && baseInterface.IsAssignableFrom(t)); - - foreach (Type parserType in parserTypes) + foreach (Type implementationType in discovery.GetImplementations(baseInterface)) { - builder.RegisterType(parserType) + builder.RegisterType(implementationType) .AsSelf() .SingleInstance(); - List interfacesToRegister = - parserType.GetInterfaces() - .Where(i => baseInterface.IsAssignableFrom(i) && i != baseInterface) - .ToList(); - - foreach (Type serviceType in interfacesToRegister) + foreach (Type serviceType in discovery.GetServiceInterfaces(implementationType, baseInterface, includeBaseInterface)) { - builder.Register(ctx => ctx.Resolve(parserType)) + builder.Register(ctx => ctx.Resolve(implementationType)) .As(serviceType) .SingleInstance(); } @@ -91,18 +69,18 @@ private static ContainerBuilder AddZ21ResponseParser(this ContainerBuilder build return builder; } - private static ContainerBuilder ConfigureZ21Client(this ContainerBuilder builder, Action? configurationAction = null) + private static ContainerBuilder ConfigureZ21Options(this ContainerBuilder builder, Action? optionsConfiguration = null) { ArgumentNullException.ThrowIfNull(builder); - var config = new Z21Configuration(); - configurationAction?.Invoke(config); + Z21Options options = new(); + optionsConfiguration?.Invoke(options); - builder.RegisterInstance(config) - .As() + builder.RegisterInstance(options) + .As() .SingleInstance(); return builder; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Codecs/AddressCodecTest.cs b/src/Z21.Client.UnitTest/Core/Codecs/AddressCodecTest.cs new file mode 100644 index 0000000..5457435 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Codecs/AddressCodecTest.cs @@ -0,0 +1,208 @@ +using Z21.Core.Codecs; + +namespace Z21.UnitTest.Core.Codecs +{ + public class AddressCodecTest + { + private AddressCodec _codec = null!; + + [SetUp] + public void SetUp() => _codec = new AddressCodec(); + + [Test] + [TestCase((ushort)24, 0x00, 0x18)] + [TestCase((ushort)0, 0x00, 0x00)] + [TestCase((ushort)255, 0x00, 0xFF)] + [TestCase((ushort)256, 0x01, 0x00)] + [TestCase((ushort)300, 0x01, 0x2C)] + public void SplitAddressBigEndian_ReturnsMsbThenLsb(ushort input, byte expectedMsb, byte expectedLsb) + { + (byte msb, byte lsb) = _codec.SplitAddressBigEndian(input); + + Assert.Multiple(() => + { + Assert.That(msb, Is.EqualTo(expectedMsb)); + Assert.That(lsb, Is.EqualTo(expectedLsb)); + }); + } + + [Test] + [TestCase((ushort)0, 0x00, 0x00)] + [TestCase((ushort)1, 0x01, 0x00)] + [TestCase((ushort)127, 0x7F, 0x00)] + [TestCase((ushort)128, 0x80, 0x00)] + [TestCase((ushort)255, 0xFF, 0x00)] + [TestCase((ushort)256, 0x00, 0x01)] + [TestCase((ushort)512, 0x00, 0x02)] + [TestCase((ushort)1023, 0xFF, 0x03)] + [TestCase((ushort)1234, 0xD2, 0x04)] + [TestCase((ushort)16383, 0xFF, 0x3F)] + public void SplitLocoAddress_ReturnsCorrectLSBAndMSB(ushort input, byte expectedLsb, byte expectedMsb) + { + (byte lsb, byte msb) = _codec.SplitLocoAddress(input); + + if (input >= 128) + expectedMsb |= 0xC0; + + Assert.Multiple(() => + { + Assert.That(lsb, Is.EqualTo(expectedLsb), "LSB is incorrect"); + Assert.That(msb, Is.EqualTo(expectedMsb), "MSB is incorrect"); + }); + } + + [Test] + public void SplitAccessoryAddress_ReturnsCorrectLSBAndMSB() + { + (byte lsb, byte msb) = _codec.SplitAccessoryAddress(48); + Assert.Multiple(() => + { + Assert.That((msb << 8) + lsb, Is.EqualTo(47)); + Assert.That(msb, Is.EqualTo(0x00)); + Assert.That(lsb, Is.EqualTo(0x2F)); + }); + } + + [Test] + public void SplitAccessoryAddress_LargeAddress_FillsMsb() + { + (byte lsb, byte msb) = _codec.SplitAccessoryAddress(300); + Assert.Multiple(() => + { + Assert.That(msb, Is.EqualTo(0x01), "MSB must carry the high byte of (address - 1)"); + Assert.That(lsb, Is.EqualTo(0x2B)); + }); + } + + [Test] + public void SplitAccessoryAddress_AddressIs1_DoesNotThrow() + { + Assert.DoesNotThrow(() => _codec.SplitAccessoryAddress(1)); + } + + [Test] + public void SplitAccessoryAddress_AddressIs0_ThrowsWithMessage() + { + ArgumentOutOfRangeException exception = Assert.Throws(() => _codec.SplitAccessoryAddress(0))!; + Assert.That(exception.Message, Does.Contain("Smallest address is 1")); + } + + [Test] + public void SplitExtAccessoryAddress_AddressIs0_ThrowsWithMessage() + { + ArgumentOutOfRangeException exception = Assert.Throws(() => _codec.SplitExtAccessoryAddress(0))!; + Assert.That(exception.Message, Does.Contain("Smallest address is 1")); + } + + [Test] + public void CombineAccessoryAddress_ReturnsCorrectAddress() + { + const byte msb = 0x00; + const byte lsb = 0x2f; + ushort address = _codec.CombineAccessoryAddress(lsb, msb); + Assert.That(address, Is.EqualTo(48)); + } + + [Test] + public void CombineAccessoryAddress_WithMsb_ShiftsHighByte() + { + Assert.That(_codec.CombineAccessoryAddress(0x00, 0x01), Is.EqualTo(257)); + } + + [Test] + public void CombineExtAccessoryAddress_WithMsb_ShiftsHighByte() + { + Assert.That(_codec.CombineExtAccessoryAddress(0x00, 0x01), Is.EqualTo(253)); + } + + [Test] + [TestCase((ushort)1, 0x04, 0x00)] + [TestCase((ushort)2, 0x05, 0x00)] + [TestCase((ushort)253, 0x00, 0x01)] + public void SplitExtAccessoryAddress_MapsUserAddressToRawAddress(ushort userAddress, byte expectedLsb, byte expectedMsb) + { + (byte lsb, byte msb) = _codec.SplitExtAccessoryAddress(userAddress); + Assert.Multiple(() => + { + Assert.That(lsb, Is.EqualTo(expectedLsb), "LSB is incorrect"); + Assert.That(msb, Is.EqualTo(expectedMsb), "MSB is incorrect"); + }); + } + + [Test] + public void SplitExtAccessoryAddress_AddressIs0_ThrowsArgumentOutOfRangeException() + { + Assert.Throws(() => _codec.SplitExtAccessoryAddress(0)); + } + + [Test] + public void CombineExtAccessoryAddress_IsInverseOfSplit() + { + (byte lsb, byte msb) = _codec.SplitExtAccessoryAddress(1); + Assert.Multiple(() => + { + Assert.That((msb << 8) + lsb, Is.EqualTo(4), "RawAddress for user address 1 must be 4"); + Assert.That(_codec.CombineExtAccessoryAddress(lsb, msb), Is.EqualTo((ushort)1)); + }); + } + + [Test] + [TestCase((ushort)0, 0x00, 0x00)] + [TestCase((ushort)1, 0x00, 0x01)] + [TestCase((ushort)255, 0x00, 0xFF)] + [TestCase((ushort)256, 0x01, 0x00)] + [TestCase((ushort)1021, 0x03, 0xFD)] + public void SplitCvAddress_ReturnsCorrectMsbAndLsb(ushort cvAddress, byte expectedMsb, byte expectedLsb) + { + (byte msb, byte lsb) = _codec.SplitCvAddress(cvAddress); + Assert.Multiple(() => + { + Assert.That(msb, Is.EqualTo(expectedMsb), "MSB is incorrect"); + Assert.That(lsb, Is.EqualTo(expectedLsb), "LSB is incorrect"); + }); + } + + [Test] + [TestCase((ushort)0)] + [TestCase((ushort)255)] + [TestCase((ushort)1021)] + public void CombineCvAddress_IsInverseOfSplit(ushort cvAddress) + { + (byte msb, byte lsb) = _codec.SplitCvAddress(cvAddress); + Assert.That(_codec.CombineCvAddress(msb, lsb), Is.EqualTo(cvAddress)); + } + + [Test] + public void EncodeAccessoryPomAddress_WholeDecoder_SetsCddNibbleToZero() + { + (byte db1, byte db2) = _codec.EncodeAccessoryPomAddress(1, wholeDecoder: true, output: 0); + Assert.Multiple(() => + { + Assert.That(db1, Is.EqualTo(0x00), "DB1 (aaaaa) is incorrect"); + Assert.That(db2, Is.EqualTo(0x10), "DB2 (AAAACDDD) is incorrect"); + }); + } + + [Test] + public void EncodeAccessoryPomAddress_SingleOutput_SetsCbitAndOutput() + { + (byte db1, byte db2) = _codec.EncodeAccessoryPomAddress(1, wholeDecoder: false, output: 3); + Assert.Multiple(() => + { + Assert.That(db1, Is.EqualTo(0x00), "DB1 (aaaaa) is incorrect"); + Assert.That(db2, Is.EqualTo(0x1B), "DB2 (AAAACDDD) is incorrect"); + }); + } + + [Test] + public void EncodeAccessoryPomAddress_LargeAddress_FillsHighByte() + { + (byte db1, byte db2) = _codec.EncodeAccessoryPomAddress(0x1FF, wholeDecoder: true, output: 0); + Assert.Multiple(() => + { + Assert.That(db1, Is.EqualTo(0x1F), "DB1 (aaaaa) is incorrect"); + Assert.That(db2, Is.EqualTo(0xF0), "DB2 (AAAACDDD) is incorrect"); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Helper/LocoSpeedHelperTest.cs b/src/Z21.Client.UnitTest/Core/Codecs/LocoSpeedCodecTest.cs similarity index 70% rename from src/Z21.Client.UnitTest/Core/Helper/LocoSpeedHelperTest.cs rename to src/Z21.Client.UnitTest/Core/Codecs/LocoSpeedCodecTest.cs index 24d5f0d..ba13508 100644 --- a/src/Z21.Client.UnitTest/Core/Helper/LocoSpeedHelperTest.cs +++ b/src/Z21.Client.UnitTest/Core/Codecs/LocoSpeedCodecTest.cs @@ -1,10 +1,14 @@ -using Z21.Core.Helper; +using Z21.Core.Codecs; using Z21.Core.Model; -namespace Z21.UnitTest.Core.Helper +namespace Z21.UnitTest.Core.Codecs { - public class LocoSpeedHelperTest + public class LocoSpeedCodecTest { + private LocoSpeedCodec _codec = null!; + + [SetUp] + public void SetUp() => _codec = new LocoSpeedCodec(); [Test] [TestCase((ushort)0, (ushort)0)] @@ -13,7 +17,7 @@ public class LocoSpeedHelperTest [TestCase((ushort)13, (ushort)14)] public void CalculateDccSpeed_Dcc14(ushort speedStep, ushort dccSpeed) { - Assert.That(LocoSpeedHelper.CalculateDccSpeed(DccSpeedMode.Steps14, speedStep), Is.EqualTo(dccSpeed)); + Assert.That(_codec.CalculateDccSpeed(DccSpeedMode.Steps14, speedStep), Is.EqualTo(dccSpeed)); } [Test] @@ -23,7 +27,7 @@ public void CalculateDccSpeed_Dcc14(ushort speedStep, ushort dccSpeed) [TestCase((ushort)127, (ushort)128)] public void CalculateDccSpeed_Dcc128(ushort speedStep, ushort dccSpeed) { - Assert.That(LocoSpeedHelper.CalculateDccSpeed(DccSpeedMode.Steps128, speedStep), Is.EqualTo(dccSpeed)); + Assert.That(_codec.CalculateDccSpeed(DccSpeedMode.Steps128, speedStep), Is.EqualTo(dccSpeed)); } [Test] @@ -58,17 +62,16 @@ public void CalculateDccSpeed_Dcc128(ushort speedStep, ushort dccSpeed) [TestCase((ushort)28, (ushort)31)] public void CalculateDccSpeed_Dcc28(ushort speedStep, ushort dccSpeed) { - Assert.That(LocoSpeedHelper.CalculateDccSpeed(DccSpeedMode.Steps28, speedStep), Is.EqualTo(dccSpeed)); + Assert.That(_codec.CalculateDccSpeed(DccSpeedMode.Steps28, speedStep), Is.EqualTo(dccSpeed)); } - [TestCase((ushort)0, (ushort)0)] [TestCase((ushort)1, (ushort)0)] [TestCase((ushort)2, (ushort)1)] [TestCase((ushort)13, (ushort)12)] public void CalculateSpeedStep_Dcc14(ushort dccSpeed, ushort speedStep) { - Assert.That(LocoSpeedHelper.CalculateSpeedStep(DccSpeedMode.Steps14, dccSpeed), Is.EqualTo(speedStep)); + Assert.That(_codec.CalculateSpeedStep(DccSpeedMode.Steps14, dccSpeed), Is.EqualTo(speedStep)); } [TestCase((ushort)0, (ushort)0)] @@ -77,10 +80,9 @@ public void CalculateSpeedStep_Dcc14(ushort dccSpeed, ushort speedStep) [TestCase((ushort)129, (ushort)128)] public void CalculateSpeedStep_Dcc128(ushort dccSpeed, ushort speedStep) { - Assert.That(LocoSpeedHelper.CalculateSpeedStep(DccSpeedMode.Steps128, dccSpeed), Is.EqualTo(speedStep)); + Assert.That(_codec.CalculateSpeedStep(DccSpeedMode.Steps128, dccSpeed), Is.EqualTo(speedStep)); } - [Test] [TestCase(0, 0)] [TestCase(16, 0)] @@ -116,7 +118,17 @@ public void CalculateSpeedStep_Dcc128(ushort dccSpeed, ushort speedStep) [TestCase(31, 28)] public void CalculateSpeedStep_Dcc28(short dccSpeed, short speedStep) { - Assert.That(LocoSpeedHelper.CalculateSpeedStep(DccSpeedMode.Steps28, (ushort)dccSpeed), Is.EqualTo((ushort)speedStep), $"Dcc Speed: {dccSpeed}. Expected speed step: {speedStep}"); + Assert.That(_codec.CalculateSpeedStep(DccSpeedMode.Steps28, (ushort)dccSpeed), Is.EqualTo((ushort)speedStep), $"Dcc Speed: {dccSpeed}. Expected speed step: {speedStep}"); + } + + [Test] + [TestCase((ushort)32)] + [TestCase((ushort)37)] + [TestCase((ushort)127)] + public void CalculateSpeedStep_Dcc28_OutOfRangeValue_ReturnsZeroAndDoesNotThrow(ushort dccSpeed) + { + Assert.That(() => _codec.CalculateSpeedStep(DccSpeedMode.Steps28, dccSpeed), Throws.Nothing); + Assert.That(_codec.CalculateSpeedStep(DccSpeedMode.Steps28, dccSpeed), Is.EqualTo((ushort)0)); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Booster/BoosterCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Booster/BoosterCommandTest.cs new file mode 100644 index 0000000..75a66fa --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Booster/BoosterCommandTest.cs @@ -0,0 +1,58 @@ +using System; +using Z21.Core.Command.Booster; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Booster +{ + public class BoosterCommandTest : CommandTestFixture + { + [Test] + public void GetDescription_BuildsRequest() + { + GetBoosterDescriptionCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0xB8, 0x00 })); + } + + [Test] + public void SetDescription_PadsNameToThirtyTwoBytes() + { + SetBoosterDescriptionCommand command = Factory.Create("AB"); + byte[] expected = new byte[36]; + expected[0] = 0x24; + expected[2] = 0xB9; + expected[4] = 0x41; + expected[5] = 0x42; + Assert.That(command.Data, Is.EqualTo(expected)); + } + + [Test] + [TestCase("a\"b")] + [TestCase("a\\b")] + public void SetDescription_RejectsForbiddenCharacters(string name) + { + ArgumentException exception = Assert.Throws(() => Factory.Create(name))!; + Assert.That(exception.Message, Does.Contain("not allowed")); + } + + [Test] + public void SetDescription_LongName_IsTruncatedToThirtyTwoBytes() + { + SetBoosterDescriptionCommand command = Factory.Create(new string('X', 40)); + Assert.That(command.Data, Has.Length.EqualTo(36), "frame stays 4 header + 32 name bytes even for an over-long name"); + } + + [Test] + public void SetPower_WritesPortAndState() + { + SetBoosterPowerCommand command = Factory.Create((byte)0x03, (byte)0x01); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x06, 0x00, 0xB2, 0x00, 0x03, 0x01 })); + } + + [Test] + public void GetSystemState_BuildsRequest() + { + GetBoosterSystemStateCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0xBB, 0x00 })); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Can/CanCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Can/CanCommandTest.cs new file mode 100644 index 0000000..ad9c683 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Can/CanCommandTest.cs @@ -0,0 +1,49 @@ +using System; +using Z21.Core.Command.Can; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Can +{ + public class CanCommandTest : CommandTestFixture + { + [Test] + public void GetCanDetector_MatchesSpecExample() + { + GetCanDetectorCommand command = Factory.Create((ushort)0xD000); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0xC4, 0x00, 0x00, 0x00, 0xD0 })); + } + + [Test] + public void GetCanDeviceDescription_WritesLittleEndianNetworkId() + { + GetCanDeviceDescriptionCommand command = Factory.Create((ushort)0xC101); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x06, 0x00, 0xC8, 0x00, 0x01, 0xC1 })); + } + + [Test] + public void SetCanDeviceDescription_PadsNameToSixteenBytes() + { + SetCanDeviceDescriptionCommand command = Factory.Create((ushort)0xC101, "AB"); + Assert.That(command.Data, Is.EqualTo(new byte[] + { + 0x16, 0x00, 0xC9, 0x00, 0x01, 0xC1, + 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + })); + } + + [Test] + [TestCase("a\"b")] + [TestCase("a\\b")] + public void SetCanDeviceDescription_RejectsForbiddenCharacters(string name) + { + Assert.Throws(() => Factory.Create((ushort)0xC101, name)); + } + + [Test] + public void SetCanBoosterTrackPower_WritesNetworkIdAndPower() + { + SetCanBoosterTrackPowerCommand command = Factory.Create((ushort)0xC101, (byte)0xFF); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0xCB, 0x00, 0x01, 0xC1, 0xFF })); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/CommandTestFixture.cs b/src/Z21.Client.UnitTest/Core/Command/CommandTestFixture.cs new file mode 100644 index 0000000..5623eae --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/CommandTestFixture.cs @@ -0,0 +1,12 @@ +using Z21.Core.Codecs; +using Z21.Core.Command; +using Z21.Core.Framing; + +namespace Z21.UnitTest.Core.Command +{ + public abstract class CommandTestFixture + { + protected IZ21CommandFactory Factory { get; } = + new Z21CommandFactory(new Z21FrameBuilder(), new AddressCodec(), new LocoSpeedCodec()); + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Decoder/DecoderCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Decoder/DecoderCommandTest.cs new file mode 100644 index 0000000..a353a64 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Decoder/DecoderCommandTest.cs @@ -0,0 +1,43 @@ +using System; +using Z21.Core.Command.Decoder; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Decoder +{ + public class DecoderCommandTest : CommandTestFixture + { + [Test] + public void GetDescription_BuildsRequest() + { + GetDecoderDescriptionCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0xD8, 0x00 })); + } + + [Test] + public void SetDescription_PadsNameToThirtyTwoBytes() + { + SetDecoderDescriptionCommand command = Factory.Create("AB"); + byte[] expected = new byte[36]; + expected[0] = 0x24; + expected[2] = 0xD9; + expected[4] = 0x41; + expected[5] = 0x42; + Assert.That(command.Data, Is.EqualTo(expected)); + } + + [Test] + [TestCase("a\"b")] + [TestCase("a\\b")] + public void SetDescription_RejectsForbiddenCharacters(string name) + { + Assert.Throws(() => Factory.Create(name)); + } + + [Test] + public void GetSystemState_BuildsRequest() + { + GetDecoderSystemStateCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0xDB, 0x00 })); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Driving/GetLocoInfoCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Driving/GetLocoInfoCommandTest.cs index 7dfad7c..5d28d3b 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Driving/GetLocoInfoCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Driving/GetLocoInfoCommandTest.cs @@ -1,13 +1,14 @@ using Z21.Core.Command.Driving; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Driving { - public class GetLocoInfoCommandTest + public class GetLocoInfoCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetLocoInfoCommand command = new(3); + GetLocoInfoCommand command = Factory.Create((ushort)3); Assert.That(command.Data, Is.EqualTo(new byte[] { @@ -21,4 +22,4 @@ public void Ctor_SetsCorrectDataBits() })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Driving/PurgeLocoCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Driving/PurgeLocoCommandTest.cs index 7d46fb0..3170d9a 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Driving/PurgeLocoCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Driving/PurgeLocoCommandTest.cs @@ -1,18 +1,19 @@ using Z21.Core.Command.Driving; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Driving { - public class PurgeLocoCommandTest + public class PurgeLocoCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - PurgeLocoCommand getSerialNumberCommand = new(3); - Assert.That(getSerialNumberCommand.Data, + PurgeLocoCommand command = Factory.Create((ushort)3); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x09, 0x00, 0x40, 0x00, 0xE3, 0x44, 0x00, 0x03, 0xA4, })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoBinaryStateCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoBinaryStateCommandTest.cs new file mode 100644 index 0000000..f9d10d8 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoBinaryStateCommandTest.cs @@ -0,0 +1,28 @@ +using System; +using Z21.Core.Command.Driving; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Driving +{ + public class SetLocoBinaryStateCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)3, (ushort)29, true, new byte[] { 0x0B, 0x00, 0x40, 0x00, 0xE5, 0x5F, 0x00, 0x03, 0x9D, 0x00, 0x24 })] + [TestCase((ushort)1000, (ushort)32767, false, new byte[] { 0x0B, 0x00, 0x40, 0x00, 0xE5, 0x5F, 0xC3, 0xE8, 0x7F, 0xFF, 0x11 })] + public void Ctor_SetsCorrectDataBits(ushort locoAddress, ushort binaryStateAddress, bool enabled, byte[] expected) + { + SetLocoBinaryStateCommand command = Factory.Create(locoAddress, binaryStateAddress, enabled); + Assert.That(command.Data, Is.EqualTo(expected)); + } + + [Test] + [TestCase((ushort)28)] + [TestCase((ushort)0)] + [TestCase((ushort)32768)] + public void Ctor_BinaryStateAddressOutOfRange_ThrowsWithMessage(ushort binaryStateAddress) + { + ArgumentOutOfRangeException exception = Assert.Throws(() => Factory.Create((ushort)3, binaryStateAddress, true))!; + Assert.That(exception.Message, Does.Contain("between 29 and 32767")); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoDriveCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoDriveCommandTest.cs index 1e281ed..ac6b244 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoDriveCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoDriveCommandTest.cs @@ -1,10 +1,11 @@ using Z21.Core.Command.Driving; using Z21.Core.Exception; using Z21.Core.Model; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Driving { - public class SetLocoDriveCommandTest + public class SetLocoDriveCommandTest : CommandTestFixture { [Test] [TestCase(DccSpeedMode.Steps14, (ushort)15)] @@ -12,7 +13,7 @@ public class SetLocoDriveCommandTest [TestCase(DccSpeedMode.Steps128, (ushort)127)] public void Ctor_SpeedOutOfRange_ThrowsLocoSpeedOutOfRangeException(DccSpeedMode dccSpeedMode, ushort locoSpeed) { - Assert.Throws(() => _ = new SetLocoDriveCommand(dccSpeedMode, 0, DrivingDirection.Forward, locoSpeed)); + Assert.Throws(() => _ = Factory.Create(dccSpeedMode, (ushort)0, DrivingDirection.Forward, locoSpeed)); } [Test] @@ -22,8 +23,8 @@ public void Ctor_SpeedOutOfRange_ThrowsLocoSpeedOutOfRangeException(DccSpeedMode [TestCase(DccSpeedMode.Steps14, (ushort)130, DrivingDirection.Backward, (ushort)1, new byte[] { 0x0A, 0x00, 0x40, 0x00, 0xE4, 0x10, 0xC0, 0x82, 0x2, 0xB4 })] public void Ctor_SetsCorrectDataBits(DccSpeedMode dccSpeedMode, ushort locoAddress, DrivingDirection drivingDirection, ushort locoSpeed, byte[] data) { - SetLocoDriveCommand command = new(dccSpeedMode, locoAddress, drivingDirection, locoSpeed); + SetLocoDriveCommand command = Factory.Create(dccSpeedMode, locoAddress, drivingDirection, locoSpeed); Assert.That(command.Data, Is.EqualTo(data)); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoEStopCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoEStopCommandTest.cs index 42ce1dc..21fdb56 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoEStopCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoEStopCommandTest.cs @@ -1,18 +1,19 @@ using Z21.Core.Command.Driving; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Driving { - public class SetLocoEStopCommandTest + public class SetLocoEStopCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - SetLocoEStopCommand getSerialNumberCommand = new(3); - Assert.That(getSerialNumberCommand.Data, + SetLocoEStopCommand command = Factory.Create((ushort)3); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x08, 0x00, 0x40, 0x00, 0x92, 0x00, 0x03, 0x91 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoFunctionCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoFunctionCommandTest.cs index 60d475b..247e747 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoFunctionCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoFunctionCommandTest.cs @@ -1,9 +1,12 @@ +using Z21.Core.Codecs; using Z21.Core.Command.Driving; +using Z21.Core.Framing; using Z21.Core.Model; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Driving { - public class SetLocoFunctionCommandTest + public class SetLocoFunctionCommandTest : CommandTestFixture { [Test] [TestCase((ushort)20, (ushort)0, FunctionToggleType.Off, new byte[] { 0x0A, 0x00, 0x40, 0x00, 0xE4, 0xF8, 0x00, 0x14, 0x00, 0x08 })] @@ -11,8 +14,19 @@ public class SetLocoFunctionCommandTest [TestCase((ushort)16, (ushort)5, FunctionToggleType.Toggle, new byte[] { 0x0A, 0x00, 0x40, 0x00, 0xE4, 0xF8, 0x00, 0x10, 0x85, 0x89 })] public void Ctor_SetsCorrectDataBits(ushort locoAddress, ushort functionIndex, FunctionToggleType toggleType, byte[] data) { - SetLocoFunctionCommand command = new(locoAddress, functionIndex, toggleType); + SetLocoFunctionCommand command = Factory.Create(locoAddress, functionIndex, toggleType); Assert.That(command.Data, Is.EqualTo(data)); } + + [Test] + [TestCase((ushort)64)] + [TestCase((ushort)255)] + public void Ctor_FunctionIndexAboveSixBitField_ThrowsArgumentOutOfRange(ushort functionIndex) + { + // Spec §4.3.1: DB3 is TTNNNNNN, so the index occupies only the low 6 bits (0..63). + // A larger value would overflow into the TT toggle-type bits and must be rejected. + Assert.Throws( + () => new SetLocoFunctionCommand(new Z21FrameBuilder(), new AddressCodec(), 3, functionIndex, FunctionToggleType.Off)); + } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoFunctionGroupCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoFunctionGroupCommandTest.cs new file mode 100644 index 0000000..ace36c5 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Driving/SetLocoFunctionGroupCommandTest.cs @@ -0,0 +1,18 @@ +using Z21.Core.Command.Driving; +using Z21.Core.Model; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Driving +{ + public class SetLocoFunctionGroupCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)3, LocoFunctionGroup.Group1, (byte)0x10, new byte[] { 0x0A, 0x00, 0x40, 0x00, 0xE4, 0x20, 0x00, 0x03, 0x10, 0xD7 })] + [TestCase((ushort)200, LocoFunctionGroup.Group4, (byte)0x05, new byte[] { 0x0A, 0x00, 0x40, 0x00, 0xE4, 0x23, 0xC0, 0xC8, 0x05, 0xCA })] + public void Ctor_SetsCorrectDataBits(ushort locoAddress, LocoFunctionGroup group, byte functions, byte[] expected) + { + SetLocoFunctionGroupCommand command = Factory.Create(locoAddress, group, functions); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/FastClock/FastClockCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/FastClock/FastClockCommandTest.cs new file mode 100644 index 0000000..b9a1bc1 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/FastClock/FastClockCommandTest.cs @@ -0,0 +1,62 @@ +using CommandStation.Model; +using Z21.Core.Command.FastClock; +using Z21.Core.Model; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.FastClock +{ + public class FastClockCommandTest : CommandTestFixture + { + [Test] + [TestCase(FastClockAction.Read, new byte[] { 0x07, 0x00, 0xCC, 0x00, 0x21, 0x2A, 0x0B })] + [TestCase(FastClockAction.Start, new byte[] { 0x07, 0x00, 0xCC, 0x00, 0x21, 0x2C, 0x0D })] + [TestCase(FastClockAction.Stop, new byte[] { 0x07, 0x00, 0xCC, 0x00, 0x21, 0x2D, 0x0C })] + public void Control_Action_BuildsChecksummedFrame(FastClockAction action, byte[] expected) + { + FastClockControlCommand command = Factory.Create(action); + Assert.That(command.Data, Is.EqualTo(expected)); + } + + [Test] + public void Control_SetModelTime_EncodesDayHourMinuteRate() + { + FastClockControlCommand command = Factory.Create(new ModelTime(0, 12, 30, 0, 8)); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x0A, 0x00, 0xCC, 0x00, 0x24, 0x2B, 0x0C, 0x1E, 0x08, 0x15 })); + } + + [Test] + public void Control_SetModelTime_EncodesDayInHighBits() + { + FastClockControlCommand command = Factory.Create(new ModelTime(2, 12, 30, 0, 8)); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x0A, 0x00, 0xCC, 0x00, 0x24, 0x2B, 0x4C, 0x1E, 0x08, 0x55 })); + } + + [Test] + public void GetSettings_BuildsRequest() + { + GetFastClockSettingsCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x05, 0x00, 0xCE, 0x00, 0x04 })); + } + + [Test] + public void SetSettings_SettingsOnly() + { + SetFastClockSettingsCommand command = Factory.Create((byte)0x4F); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x05, 0x00, 0xCF, 0x00, 0x4F })); + } + + [Test] + public void SetSettings_SettingsAndRate() + { + SetFastClockSettingsWithRateCommand command = Factory.Create((byte)0x4F, (byte)0x01); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x06, 0x00, 0xCF, 0x00, 0x4F, 0x01 })); + } + + [Test] + public void SetSettings_SettingsRateAndStart() + { + SetFastClockSettingsWithStartTimeCommand command = Factory.Create((byte)0x4F, (byte)0x01, (byte)0x0C, (byte)0x1E); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x08, 0x00, 0xCF, 0x00, 0x4F, 0x01, 0x0C, 0x1E })); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Feedback/GetRmBusDataCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Feedback/GetRmBusDataCommandTest.cs new file mode 100644 index 0000000..c1683f6 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Feedback/GetRmBusDataCommandTest.cs @@ -0,0 +1,17 @@ +using Z21.Core.Command.Feedback; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Feedback +{ + public class GetRmBusDataCommandTest : CommandTestFixture + { + [Test] + [TestCase((byte)0, new byte[] { 0x05, 0x00, 0x81, 0x00, 0x00 })] + [TestCase((byte)1, new byte[] { 0x05, 0x00, 0x81, 0x00, 0x01 })] + public void Ctor_SetsCorrectDataBits(byte groupIndex, byte[] expected) + { + GetRmBusDataCommand command = Factory.Create(groupIndex); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Feedback/ProgramRmBusModuleCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Feedback/ProgramRmBusModuleCommandTest.cs new file mode 100644 index 0000000..21208e0 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Feedback/ProgramRmBusModuleCommandTest.cs @@ -0,0 +1,17 @@ +using Z21.Core.Command.Feedback; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Feedback +{ + public class ProgramRmBusModuleCommandTest : CommandTestFixture + { + [Test] + [TestCase((byte)5, new byte[] { 0x05, 0x00, 0x82, 0x00, 0x05 })] + [TestCase((byte)0, new byte[] { 0x05, 0x00, 0x82, 0x00, 0x00 })] + public void Ctor_SetsCorrectDataBits(byte address, byte[] expected) + { + ProgramRmBusModuleCommand command = Factory.Create(address); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/LocoNet/LocoNetCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/LocoNet/LocoNetCommandTest.cs new file mode 100644 index 0000000..357d73d --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/LocoNet/LocoNetCommandTest.cs @@ -0,0 +1,31 @@ +using Z21.Core.Command.LocoNet; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.LocoNet +{ + public class LocoNetCommandTest : CommandTestFixture + { + [Test] + public void LocoNetFromLan_WrapsRawMessage() + { + LocoNetFromLanCommand command = Factory.Create(new byte[] { 0xB0, 0x01, 0x02, 0x03 }); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x08, 0x00, 0xA2, 0x00, 0xB0, 0x01, 0x02, 0x03 })); + } + + [Test] + [TestCase((ushort)3, new byte[] { 0x06, 0x00, 0xA3, 0x00, 0x03, 0x00 })] + [TestCase((ushort)1000, new byte[] { 0x06, 0x00, 0xA3, 0x00, 0xE8, 0x03 })] + public void LocoNetDispatchAddress_WritesLittleEndianAddress(ushort locoAddress, byte[] expected) + { + LocoNetDispatchAddressCommand command = Factory.Create(locoAddress); + Assert.That(command.Data, Is.EqualTo(expected)); + } + + [Test] + public void LocoNetDetector_MatchesSpecExample() + { + LocoNetDetectorCommand command = Factory.Create((byte)0x81, (ushort)1016); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0xA4, 0x00, 0x81, 0xF8, 0x03 })); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/NewCommandNameTest.cs b/src/Z21.Client.UnitTest/Core/Command/NewCommandNameTest.cs new file mode 100644 index 0000000..3178ce9 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/NewCommandNameTest.cs @@ -0,0 +1,62 @@ +using CommandStation.Model; +using Z21.Core.Command.Booster; +using Z21.Core.Command.Can; +using Z21.Core.Command.Decoder; +using Z21.Core.Command.Driving; +using Z21.Core.Command.FastClock; +using Z21.Core.Command.Feedback; +using Z21.Core.Command.LocoNet; +using Z21.Core.Command.Programming; +using Z21.Core.Command.RailCom; +using Z21.Core.Command.ZLink; +using Z21.Core.Model; + +namespace Z21.UnitTest.Core.Command +{ + public class NewCommandNameTest : CommandTestFixture + { + [Test] + public void Commands_ExposeTheirProtocolName() + { + Assert.Multiple(() => + { + Assert.That(Factory.Create((ushort)3, LocoFunctionGroup.Group1, (byte)0x10).Name, Is.EqualTo("LAN_X_SET_LOCO_FUNCTION_GROUP")); + Assert.That(Factory.Create((ushort)3, (ushort)29, true).Name, Is.EqualTo("LAN_X_SET_LOCO_BINARY_STATE")); + Assert.That(Factory.Create((ushort)0).Name, Is.EqualTo("LAN_X_CV_READ")); + Assert.That(Factory.Create((ushort)0, (byte)0).Name, Is.EqualTo("LAN_X_CV_WRITE")); + Assert.That(Factory.Create((byte)1).Name, Is.EqualTo("LAN_X_DCC_READ_REGISTER")); + Assert.That(Factory.Create((byte)1, (byte)1).Name, Is.EqualTo("LAN_X_DCC_WRITE_REGISTER")); + Assert.That(Factory.Create((byte)0, (byte)0).Name, Is.EqualTo("LAN_X_MM_WRITE_BYTE")); + Assert.That(Factory.Create((ushort)3, (ushort)0, (byte)0).Name, Is.EqualTo("LAN_X_CV_POM_WRITE_BYTE")); + Assert.That(Factory.Create((ushort)3, (ushort)0, (byte)0, true).Name, Is.EqualTo("LAN_X_CV_POM_WRITE_BIT")); + Assert.That(Factory.Create((ushort)3, (ushort)0).Name, Is.EqualTo("LAN_X_CV_POM_READ_BYTE")); + Assert.That(Factory.Create((ushort)1, true, (byte)0, (ushort)0, (byte)0).Name, Is.EqualTo("LAN_X_CV_POM_ACCESSORY_WRITE_BYTE")); + Assert.That(Factory.Create((ushort)1, true, (byte)0, (ushort)0, (byte)0, true).Name, Is.EqualTo("LAN_X_CV_POM_ACCESSORY_WRITE_BIT")); + Assert.That(Factory.Create((ushort)1, true, (byte)0, (ushort)0).Name, Is.EqualTo("LAN_X_CV_POM_ACCESSORY_READ_BYTE")); + Assert.That(Factory.Create((byte)0).Name, Is.EqualTo("LAN_RMBUS_GETDATA")); + Assert.That(Factory.Create((byte)0).Name, Is.EqualTo("LAN_RMBUS_PROGRAMMODULE")); + Assert.That(Factory.Create((ushort)3).Name, Is.EqualTo("LAN_RAILCOM_GETDATA")); + Assert.That(Factory.Create(new byte[] { 0xB0 }).Name, Is.EqualTo("LAN_LOCONET_FROM_LAN")); + Assert.That(Factory.Create((ushort)3).Name, Is.EqualTo("LAN_LOCONET_DISPATCH_ADDR")); + Assert.That(Factory.Create((byte)0x81, (ushort)1016).Name, Is.EqualTo("LAN_LOCONET_DETECTOR")); + Assert.That(Factory.Create((ushort)0xD000).Name, Is.EqualTo("LAN_CAN_DETECTOR")); + Assert.That(Factory.Create((ushort)0xC101).Name, Is.EqualTo("LAN_CAN_DEVICE_GET_DESCRIPTION")); + Assert.That(Factory.Create((ushort)0xC101, "AB").Name, Is.EqualTo("LAN_CAN_DEVICE_SET_DESCRIPTION")); + Assert.That(Factory.Create((ushort)0xC101, (byte)0xFF).Name, Is.EqualTo("LAN_CAN_BOOSTER_SET_TRACKPOWER")); + Assert.That(Factory.Create(FastClockAction.Read).Name, Is.EqualTo("LAN_FAST_CLOCK_CONTROL")); + Assert.That(Factory.Create().Name, Is.EqualTo("LAN_FAST_CLOCK_SETTINGS_GET")); + Assert.That(Factory.Create((byte)0x4F).Name, Is.EqualTo("LAN_FAST_CLOCK_SETTINGS_SET")); + Assert.That(Factory.Create((byte)0x4F, (byte)1).Name, Is.EqualTo("LAN_FAST_CLOCK_SETTINGS_SET")); + Assert.That(Factory.Create((byte)0x4F, (byte)1, (byte)0, (byte)0).Name, Is.EqualTo("LAN_FAST_CLOCK_SETTINGS_SET")); + Assert.That(Factory.Create().Name, Is.EqualTo("LAN_BOOSTER_GET_DESCRIPTION")); + Assert.That(Factory.Create("AB").Name, Is.EqualTo("LAN_BOOSTER_SET_DESCRIPTION")); + Assert.That(Factory.Create((byte)0x03, (byte)0x01).Name, Is.EqualTo("LAN_BOOSTER_SET_POWER")); + Assert.That(Factory.Create().Name, Is.EqualTo("LAN_BOOSTER_SYSTEMSTATE_GETDATA")); + Assert.That(Factory.Create().Name, Is.EqualTo("LAN_DECODER_GET_DESCRIPTION")); + Assert.That(Factory.Create("AB").Name, Is.EqualTo("LAN_DECODER_SET_DESCRIPTION")); + Assert.That(Factory.Create().Name, Is.EqualTo("LAN_DECODER_SYSTEMSTATE_GETDATA")); + Assert.That(Factory.Create().Name, Is.EqualTo("LAN_ZLINK_GET_HWINFO")); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryReadByteCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryReadByteCommandTest.cs new file mode 100644 index 0000000..2d22fc6 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryReadByteCommandTest.cs @@ -0,0 +1,17 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class CvPomAccessoryReadByteCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)1, true, (byte)0, (ushort)0, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x31, 0x00, 0x10, 0xE4, 0x00, 0x00, 0x23 })] + [TestCase((ushort)1, true, (byte)0, (ushort)256, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x31, 0x00, 0x10, 0xE5, 0x00, 0x00, 0x22 })] + public void Ctor_SetsCorrectDataBits(ushort decoderAddress, bool wholeDecoder, byte output, ushort cvAddress, byte[] expected) + { + CvPomAccessoryReadByteCommand command = Factory.Create(decoderAddress, wholeDecoder, output, cvAddress); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryWriteBitCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryWriteBitCommandTest.cs new file mode 100644 index 0000000..71d6572 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryWriteBitCommandTest.cs @@ -0,0 +1,18 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class CvPomAccessoryWriteBitCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)1, true, (byte)0, (ushort)0, (byte)2, true, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x31, 0x00, 0x10, 0xE8, 0x00, 0x0A, 0x25 })] + [TestCase((ushort)1, true, (byte)0, (ushort)0, (byte)2, false, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x31, 0x00, 0x10, 0xE8, 0x00, 0x02, 0x2D })] + [TestCase((ushort)1, true, (byte)0, (ushort)256, (byte)2, true, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x31, 0x00, 0x10, 0xE9, 0x00, 0x0A, 0x24 })] + public void Ctor_SetsCorrectDataBits(ushort decoderAddress, bool wholeDecoder, byte output, ushort cvAddress, byte bitPosition, bool bitValue, byte[] expected) + { + CvPomAccessoryWriteBitCommand command = Factory.Create(decoderAddress, wholeDecoder, output, cvAddress, bitPosition, bitValue); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryWriteByteCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryWriteByteCommandTest.cs new file mode 100644 index 0000000..7bdbbff --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomAccessoryWriteByteCommandTest.cs @@ -0,0 +1,16 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class CvPomAccessoryWriteByteCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)1, true, (byte)0, (ushort)0, (byte)0x05, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x31, 0x00, 0x10, 0xEC, 0x00, 0x05, 0x2E })] + public void Ctor_SetsCorrectDataBits(ushort decoderAddress, bool wholeDecoder, byte output, ushort cvAddress, byte value, byte[] expected) + { + CvPomAccessoryWriteByteCommand command = Factory.Create(decoderAddress, wholeDecoder, output, cvAddress, value); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomReadByteCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomReadByteCommandTest.cs new file mode 100644 index 0000000..962a072 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomReadByteCommandTest.cs @@ -0,0 +1,16 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class CvPomReadByteCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)3, (ushort)0, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x30, 0x00, 0x03, 0xE4, 0x00, 0x00, 0x31 })] + public void Ctor_SetsCorrectDataBits(ushort locoAddress, ushort cvAddress, byte[] expected) + { + CvPomReadByteCommand command = Factory.Create(locoAddress, cvAddress); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomWriteBitCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomWriteBitCommandTest.cs new file mode 100644 index 0000000..50a5e4f --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomWriteBitCommandTest.cs @@ -0,0 +1,18 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class CvPomWriteBitCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)3, (ushort)0, (byte)2, true, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x30, 0x00, 0x03, 0xE8, 0x00, 0x0A, 0x37 })] + [TestCase((ushort)3, (ushort)0, (byte)2, false, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x30, 0x00, 0x03, 0xE8, 0x00, 0x02, 0x3F })] + [TestCase((ushort)3, (ushort)256, (byte)2, true, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x30, 0x00, 0x03, 0xE9, 0x00, 0x0A, 0x36 })] + public void Ctor_SetsCorrectDataBits(ushort locoAddress, ushort cvAddress, byte bitPosition, bool bitValue, byte[] expected) + { + CvPomWriteBitCommand command = Factory.Create(locoAddress, cvAddress, bitPosition, bitValue); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomWriteByteCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomWriteByteCommandTest.cs new file mode 100644 index 0000000..4f70f41 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/CvPomWriteByteCommandTest.cs @@ -0,0 +1,17 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class CvPomWriteByteCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)3, (ushort)0, (byte)0x05, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x30, 0x00, 0x03, 0xEC, 0x00, 0x05, 0x3C })] + [TestCase((ushort)3, (ushort)256, (byte)0x05, new byte[] { 0x0C, 0x00, 0x40, 0x00, 0xE6, 0x30, 0x00, 0x03, 0xED, 0x00, 0x05, 0x3D })] + public void Ctor_SetsCorrectDataBits(ushort locoAddress, ushort cvAddress, byte value, byte[] expected) + { + CvPomWriteByteCommand command = Factory.Create(locoAddress, cvAddress, value); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/CvReadCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/CvReadCommandTest.cs new file mode 100644 index 0000000..ad0464a --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/CvReadCommandTest.cs @@ -0,0 +1,17 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class CvReadCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)0, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x23, 0x11, 0x00, 0x00, 0x32 })] + [TestCase((ushort)28, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x23, 0x11, 0x00, 0x1C, 0x2E })] + public void Ctor_SetsCorrectDataBits(ushort cvAddress, byte[] expected) + { + CvReadCommand command = Factory.Create(cvAddress); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/CvWriteCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/CvWriteCommandTest.cs new file mode 100644 index 0000000..cc5d7fb --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/CvWriteCommandTest.cs @@ -0,0 +1,16 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class CvWriteCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)0, (byte)0x03, new byte[] { 0x0A, 0x00, 0x40, 0x00, 0x24, 0x12, 0x00, 0x00, 0x03, 0x35 })] + public void Ctor_SetsCorrectDataBits(ushort cvAddress, byte value, byte[] expected) + { + CvWriteCommand command = Factory.Create(cvAddress, value); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/DccReadRegisterCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/DccReadRegisterCommandTest.cs new file mode 100644 index 0000000..18f2407 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/DccReadRegisterCommandTest.cs @@ -0,0 +1,16 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class DccReadRegisterCommandTest : CommandTestFixture + { + [Test] + [TestCase((byte)0x01, new byte[] { 0x08, 0x00, 0x40, 0x00, 0x22, 0x11, 0x01, 0x32 })] + public void Ctor_SetsCorrectDataBits(byte register, byte[] expected) + { + DccReadRegisterCommand command = Factory.Create(register); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/DccWriteRegisterCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/DccWriteRegisterCommandTest.cs new file mode 100644 index 0000000..80a4c18 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/DccWriteRegisterCommandTest.cs @@ -0,0 +1,16 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class DccWriteRegisterCommandTest : CommandTestFixture + { + [Test] + [TestCase((byte)0x01, (byte)0x05, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x23, 0x12, 0x01, 0x05, 0x35 })] + public void Ctor_SetsCorrectDataBits(byte register, byte value, byte[] expected) + { + DccWriteRegisterCommand command = Factory.Create(register, value); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Programming/MmWriteByteCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Programming/MmWriteByteCommandTest.cs new file mode 100644 index 0000000..753716f --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Programming/MmWriteByteCommandTest.cs @@ -0,0 +1,16 @@ +using Z21.Core.Command.Programming; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.Programming +{ + public class MmWriteByteCommandTest : CommandTestFixture + { + [Test] + [TestCase((byte)0x00, (byte)0x05, new byte[] { 0x0A, 0x00, 0x40, 0x00, 0x24, 0xFF, 0x00, 0x00, 0x05, 0xDE })] + public void Ctor_MatchesSpecExample(byte register, byte value, byte[] expected) + { + MmWriteByteCommand command = Factory.Create(register, value); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/RailCom/GetRailComDataCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/RailCom/GetRailComDataCommandTest.cs new file mode 100644 index 0000000..c626be8 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/RailCom/GetRailComDataCommandTest.cs @@ -0,0 +1,18 @@ +using Z21.Core.Command.RailCom; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.RailCom +{ + public class GetRailComDataCommandTest : CommandTestFixture + { + [Test] + [TestCase((ushort)3, new byte[] { 0x07, 0x00, 0x89, 0x00, 0x01, 0x03, 0x00 })] + [TestCase((ushort)1000, new byte[] { 0x07, 0x00, 0x89, 0x00, 0x01, 0xE8, 0x03 })] + [TestCase((ushort)0, new byte[] { 0x07, 0x00, 0x89, 0x00, 0x01, 0x00, 0x00 })] + public void Ctor_SetsCorrectDataBits(ushort locoAddress, byte[] expected) + { + GetRailComDataCommand command = Factory.Create(locoAddress); + Assert.That(command.Data, Is.EqualTo(expected)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Settings/GetAccessoryModeCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Settings/GetAccessoryModeCommandTest.cs index 86bddfd..245cafb 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Settings/GetAccessoryModeCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Settings/GetAccessoryModeCommandTest.cs @@ -1,13 +1,14 @@ using Z21.Core.Command.Settings; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Settings { - public class GetAccessoryModeCommandTest + public class GetAccessoryModeCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetAccessoryModeCommand command = new(24); + GetAccessoryModeCommand command = Factory.Create((short)24); Assert.That(command.Data, Is.EqualTo(new byte[] { @@ -20,4 +21,4 @@ public void Ctor_SetsCorrectDataBits() })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Settings/GetLocoModeCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Settings/GetLocoModeCommandTest.cs index bb78b7a..9c51d9d 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Settings/GetLocoModeCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Settings/GetLocoModeCommandTest.cs @@ -1,13 +1,14 @@ using Z21.Core.Command.Settings; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Settings { - public class GetLocoModeCommandTest + public class GetLocoModeCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetLocoModeCommand command = new(24); + GetLocoModeCommand command = Factory.Create((short)24); Assert.That( command.Data, Is.EqualTo( new byte[] @@ -21,4 +22,4 @@ public void Ctor_SetsCorrectDataBits() })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Settings/SetAccessoryModeCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Settings/SetAccessoryModeCommandTest.cs index 9ec317a..ed6f6d3 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Settings/SetAccessoryModeCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Settings/SetAccessoryModeCommandTest.cs @@ -1,14 +1,15 @@ using Z21.Core.Command.Settings; using Z21.Core.Model; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Settings { - public class SetAccessoryModeCommandTest + public class SetAccessoryModeCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits([Values(DecoderMode.DCC, DecoderMode.MM)] DecoderMode decoderMode) { - SetAccessoryModeCommand command = new(12, decoderMode); + SetAccessoryModeCommand command = Factory.Create((short)12, decoderMode); Assert.That(command.Data, Is.EqualTo(new byte[] { @@ -25,9 +26,9 @@ public void Ctor_SetsCorrectDataBits([Values(DecoderMode.DCC, DecoderMode.MM)] D [Test] public void Ctor_LocoModeUnknown_ThrowsArgumentException() { - ArgumentException? exception = Assert.Throws(() => _ = new SetAccessoryModeCommand(12, DecoderMode.Unknown)); + ArgumentException? exception = Assert.Throws(() => _ = Factory.Create((short)12, DecoderMode.Unknown)); Assert.That(exception, Is.Not.Null); Assert.That(exception.Message, Is.EqualTo($"{DecoderMode.Unknown} is not a valid DecoderMode. (Parameter 'decoderMode')")); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Settings/SetLocoModeCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Settings/SetLocoModeCommandTest.cs index 9a1a967..04e7d4d 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Settings/SetLocoModeCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Settings/SetLocoModeCommandTest.cs @@ -1,14 +1,15 @@ using Z21.Core.Command.Settings; using Z21.Core.Model; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Settings { - public class SetLocoModeCommandTest + public class SetLocoModeCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits([Values(DecoderMode.DCC, DecoderMode.MM)] DecoderMode decoderMode) { - SetLocoModeCommand command = new(12, decoderMode); + SetLocoModeCommand command = Factory.Create((short)12, decoderMode); Assert.That(command.Data, Is.EqualTo(new byte[] { @@ -25,9 +26,9 @@ public void Ctor_SetsCorrectDataBits([Values(DecoderMode.DCC, DecoderMode.MM)] D [Test] public void Ctor_LocoModeUnknown_ThrowsArgumentException() { - ArgumentException? exception = Assert.Throws(() => _ = new SetLocoModeCommand(12, DecoderMode.Unknown)); + ArgumentException? exception = Assert.Throws(() => _ = Factory.Create((short)12, DecoderMode.Unknown)); Assert.That(exception, Is.Not.Null); Assert.That(exception.Message, Is.EqualTo($"{DecoderMode.Unknown} is not a valid DecoderMode. (Parameter 'decoderMode')")); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Switching/GetExtAccessoryInfoCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Switching/GetExtAccessoryInfoCommandTest.cs index 87f80cc..88cbdb3 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Switching/GetExtAccessoryInfoCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Switching/GetExtAccessoryInfoCommandTest.cs @@ -1,13 +1,14 @@ using Z21.Core.Command.Switching; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Switching { - public class GetExtAccessoryInfoCommandTest + public class GetExtAccessoryInfoCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetExtAccessoryInfoCommand command = new(15); + GetExtAccessoryInfoCommand command = Factory.Create((ushort)1); Assert.That(command.Data, Is.EqualTo(new byte[] { @@ -15,10 +16,10 @@ public void Ctor_SetsCorrectDataBits() 0x40, 0x0, 0x44, 0x0, - 0xE, + 0x4, 0x0, - 0x4A + 0x40 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Switching/GetTurnoutInfoCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Switching/GetTurnoutInfoCommandTest.cs index 7e72dc7..804a4bd 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Switching/GetTurnoutInfoCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Switching/GetTurnoutInfoCommandTest.cs @@ -1,13 +1,14 @@ using Z21.Core.Command.Switching; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Switching { - public class GetTurnoutInfoCommandTest + public class GetTurnoutInfoCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetTurnoutInfoCommand command = new(15); + GetTurnoutInfoCommand command = Factory.Create((ushort)15); Assert.That(command.Data, Is.EqualTo(new byte[] { @@ -18,7 +19,7 @@ public void Ctor_SetsCorrectDataBits() [Test] public void Ctor_AccessoryAddressIs0_ThrowsArgumentOutOfRangeException() { - Assert.Throws(() => _ = new GetTurnoutInfoCommand(0)); + Assert.Throws(() => _ = Factory.Create((ushort)0)); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Switching/SetExtAccessoryCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Switching/SetExtAccessoryCommandTest.cs index 6c478f2..4eb03ac 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Switching/SetExtAccessoryCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Switching/SetExtAccessoryCommandTest.cs @@ -1,9 +1,10 @@ using Z21.Core.Command.Switching; using Z21.Core.Model.ExcAccessoryPayload; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Switching { - public class SetExtAccessoryCommandTest + public class SetExtAccessoryCommandTest : CommandTestFixture { public class ExcAccessoryPayloadDummy(byte payload) : IExcAccessoryPayload { @@ -13,7 +14,7 @@ public class ExcAccessoryPayloadDummy(byte payload) : IExcAccessoryPayload [Test] public void Ctor_WithPayload_SetsCorrectDataBits() { - SetExtAccessoryCommand command = new(15, new ExcAccessoryPayloadDummy(0x52)); + SetExtAccessoryCommand command = Factory.Create((ushort)1, new ExcAccessoryPayloadDummy(0x52)); Assert.That(command.Data, Is.EqualTo(new byte[] { @@ -21,17 +22,17 @@ public void Ctor_WithPayload_SetsCorrectDataBits() 0x40, 0x0, 0x54, 0x0, - 0xE, + 0x4, 0x52, 0x0, - 0x8 + 0x2 })); } [Test] public void Ctor_SetsCorrectDataBits() { - SetExtAccessoryCommand command = new(15, 0x62); + SetExtAccessoryCommand command = Factory.Create((ushort)1, (byte)0x05); Assert.That(command.Data, Is.EqualTo(new byte[] { @@ -39,11 +40,11 @@ public void Ctor_SetsCorrectDataBits() 0x40, 0x0, 0x54, 0x0, - 0xE, - 0x62, + 0x4, + 0x5, 0x0, - 0x38 + 0x55 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Switching/SetTurnoutCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/Switching/SetTurnoutCommandTest.cs index 2d6c3af..86c5238 100644 --- a/src/Z21.Client.UnitTest/Core/Command/Switching/SetTurnoutCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/Switching/SetTurnoutCommandTest.cs @@ -1,25 +1,26 @@ using Z21.Core.Command.Switching; using Z21.Core.Model; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.Switching { - public class SetTurnoutCommandTest + public class SetTurnoutCommandTest : CommandTestFixture { [Test] - [TestCase((ushort)16, AccessoryOutput.Output1, AccessoryState.Activate, true, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x53, 0x00, 0x0F, 0xA8, 0xF4 })] - [TestCase((ushort)8, AccessoryOutput.Output2, AccessoryState.Activate, true, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x53, 0x00, 0x07, 0xA9, 0xFD })] - [TestCase((ushort)8, AccessoryOutput.Output2, AccessoryState.Deactivate, true, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x53, 0x00, 0x07, 0xA1, 0xF5 })] - [TestCase((ushort)8, AccessoryOutput.Output2, AccessoryState.Deactivate, false, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x53, 0x00, 0x07, 0x81, 0xD5 })] + [TestCase((ushort)16, AccessoryOutput.Output1, AccessoryState.Activate, true, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x53, 0x00, 0x0F, 0x88, 0xD4 })] + [TestCase((ushort)8, AccessoryOutput.Output2, AccessoryState.Activate, true, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x53, 0x00, 0x07, 0x89, 0xDD })] + [TestCase((ushort)8, AccessoryOutput.Output2, AccessoryState.Deactivate, true, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x53, 0x00, 0x07, 0x81, 0xD5 })] + [TestCase((ushort)8, AccessoryOutput.Output2, AccessoryState.Deactivate, false, new byte[] { 0x09, 0x00, 0x40, 0x00, 0x53, 0x00, 0x07, 0xA1, 0xF5 })] public void Ctor_SetsCorrectDataBits(ushort accessoryAddress, AccessoryOutput accessoryOutput, AccessoryState accessoryState, bool executeImmediately, byte[] data) { - SetTurnoutCommand command = new(accessoryAddress, accessoryOutput, accessoryState, executeImmediately); + SetTurnoutCommand command = Factory.Create(accessoryAddress, accessoryOutput, accessoryState, executeImmediately); Assert.That(command.Data, Is.EqualTo(data)); } [Test] public void Ctor_AccessoryAddressIs0_ThrowsArgumentOutOfRangeException() { - Assert.Throws(() => _ = new SetTurnoutCommand(0, AccessoryOutput.Output1, AccessoryState.Activate, false)); + Assert.Throws(() => _ = Factory.Create((ushort)0, AccessoryOutput.Output1, AccessoryState.Activate, false)); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetBroadcastFlagsCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetBroadcastFlagsCommandTest.cs index 844f84b..c588106 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetBroadcastFlagsCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetBroadcastFlagsCommandTest.cs @@ -1,22 +1,15 @@ -using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class GetBroadcastFlagsCommandTest + public class GetBroadcastFlagsCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetBroadcastFlagsCommand getSerialNumberCommand = new(); - Assert.That( - getSerialNumberCommand.Data, Is.EqualTo( - new byte[] - { - 0x04, - 0x00, - 0x51, - 0x00 - })); + GetBroadcastFlagsCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0x51, 0x00 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetCodeCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetCodeCommandTest.cs index bf96598..fe62383 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetCodeCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetCodeCommandTest.cs @@ -1,22 +1,15 @@ using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class GetSoftwareLockCommandTest + public class GetSoftwareLockCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetSoftwareLockCommand command = new(); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x04, - 0x00, - 0x18, - 0x00 - })); + GetSoftwareLockCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0x18, 0x00 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetFirmwareVersionCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetFirmwareVersionCommandTest.cs index 0021cc3..3550e35 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetFirmwareVersionCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetFirmwareVersionCommandTest.cs @@ -1,25 +1,15 @@ -using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class GetFirmwareVersionCommandTest + public class GetFirmwareVersionCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetFirmwareVersionCommand getSerialNumberCommand = new(); - Assert.That( - getSerialNumberCommand.Data, Is.EqualTo( - new byte[] - { - 0x07, - 0x00, - 0x40, - 0x00, - 0xF1, - 0x0A, - 0xFB - })); + GetFirmwareVersionCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0xF1, 0x0A, 0xFB })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetHardwareInfoCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetHardwareInfoCommandTest.cs index 639e781..efb9e23 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetHardwareInfoCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetHardwareInfoCommandTest.cs @@ -1,22 +1,15 @@ using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class GetHardwareInfoCommandTest + public class GetHardwareInfoCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetHardwareInfoCommand command = new(); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x04, - 0x00, - 0x1A, - 0x00 - })); + GetHardwareInfoCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0x1A, 0x00 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetSerialNumberCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetSerialNumberCommandTest.cs index e72f9f1..9c5d0f9 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetSerialNumberCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetSerialNumberCommandTest.cs @@ -1,22 +1,15 @@ -using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class GetSerialNumberCommandTest + public class GetSerialNumberCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetSerialNumberCommand getSerialNumberCommand = new(); - Assert.That( - getSerialNumberCommand.Data, Is.EqualTo( - new byte[] - { - 0x04, - 0x00, - 0x10, - 0x00 - })); + GetSerialNumberCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0x10, 0x00 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetStatusCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetStatusCommandTest.cs index 68dfdb6..4da8612 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetStatusCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetStatusCommandTest.cs @@ -1,23 +1,15 @@ -using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class GetStatusCommandTest + public class GetStatusCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - GetStatusCommand command = new(); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x07, 0x00, - 0x40, 0x00, - 0x21, - 0x24, - 0x05 - })); + GetStatusCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x21, 0x24, 0x05 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetSystemStateDataCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetSystemStateDataCommandTest.cs index a9e4679..53d668e 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetSystemStateDataCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetSystemStateDataCommandTest.cs @@ -1,14 +1,15 @@ using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class GetSystemStateDataCommandTest + public class GetSystemStateDataCommandTest : CommandTestFixture { [Test] public void Ctor_SetsDataCorrectly() { - GetSystemStateDataCommand command = new(); + GetSystemStateDataCommand command = Factory.Create(); Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0x85, 0x00 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetVersionCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetVersionCommandTest.cs index c229eb0..f2bb773 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/GetVersionCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/GetVersionCommandTest.cs @@ -1,23 +1,15 @@ -using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class GetVersionCommandTest + public class GetVersionCommandTest : CommandTestFixture { [Test] public void Ctor_SetsDataCorrectly() { - GetVersionCommand command = new(); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x07, 0x00, - 0x40, 0x00, - 0x21, - 0x21, - 0x00 - })); + GetVersionCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/LogOffCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/LogOffCommandTest.cs index 089af1c..d72b1b9 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/LogOffCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/LogOffCommandTest.cs @@ -1,22 +1,15 @@ -using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class LogOffCommandTest + public class LogOffCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - LogOffCommand command = new(); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x04, - 0x00, - 0x30, - 0x00 - })); + LogOffCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x04, 0x00, 0x30, 0x00 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/SetBroadcastFlagsCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/SetBroadcastFlagsCommandTest.cs index 5eecfa8..09ecd6c 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/SetBroadcastFlagsCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/SetBroadcastFlagsCommandTest.cs @@ -1,29 +1,35 @@ -using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState; using Z21.Core.Model; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState { - public class SetBroadcastFlagsCommandTest + public class SetBroadcastFlagsCommandTest : CommandTestFixture { [Test] public void Ctor_SetsCorrectDataBits() { - SetBroadcastFlagsCommand command = new( - Z21BroadcastFlags.DriveAndSwitchingMessages, - Z21BroadcastFlags.RailComDataChangedMessages); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x08, - 0x0, - 0x50, - 0x0, - 0x5, - 0x0, - 0x0, - 0x0 - })); + SetBroadcastFlagsCommand command = Factory.Create( + new[] + { + Z21BroadcastFlags.DriveAndSwitchingMessages, + Z21BroadcastFlags.RailComDataChangedMessages + }); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x08, 0x0, 0x50, 0x0, 0x5, 0x0, 0x0, 0x0 })); + } + + [Test] + public void Ctor_NoFlags_EncodesZero() + { + SetBroadcastFlagsCommand command = Factory.Create(new uint[0]); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x08, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00 })); + } + + [Test] + public void Name_IsLanSetBroadcastFlags() + { + SetBroadcastFlagsCommand command = Factory.Create(new[] { Z21BroadcastFlags.DriveAndSwitchingMessages }); + Assert.That(command.Name, Is.EqualTo("LAN_SET_BROADCASTFLAGS")); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetStopCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetStopCommandTest.cs index 88cbd22..9acd5b1 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetStopCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetStopCommandTest.cs @@ -1,22 +1,15 @@ -using Z21.Core.Command.SystemState.TrackPower; +using Z21.Core.Command.SystemState.TrackPower; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState.TrackPower { - public class SetStopCommandTest + public class SetStopCommandTest : CommandTestFixture { [Test] public void Ctor_SetsDataCorrectly() { - SetStopCommand command = new(); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x06, 0x00, - 0x40, 0x00, - 0x80, - (0 ^ 0x80) - })); + SetStopCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x06, 0x00, 0x40, 0x00, 0x80, 0x80 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetTrackPowerOffCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetTrackPowerOffCommandTest.cs index 270d62a..f850d18 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetTrackPowerOffCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetTrackPowerOffCommandTest.cs @@ -1,23 +1,15 @@ -using Z21.Core.Command.SystemState.TrackPower; +using Z21.Core.Command.SystemState.TrackPower; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState.TrackPower { - public class SetTrackPowerOffCommandTest + public class SetTrackPowerOffCommandTest : CommandTestFixture { [Test] public void Ctor_SetsDataCorrectly() { - SetTrackPowerOffCommand command = new(); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x07, 0x00, - 0x40, 0x00, - 0x21, - 0x80, - 0xa1 - })); + SetTrackPowerOffCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x21, 0x80, 0xa1 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetTrackPowerOnCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetTrackPowerOnCommandTest.cs index 8e0bf50..0c0ce4d 100644 --- a/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetTrackPowerOnCommandTest.cs +++ b/src/Z21.Client.UnitTest/Core/Command/SystemState/TrackPower/SetTrackPowerOnCommandTest.cs @@ -1,23 +1,15 @@ -using Z21.Core.Command.SystemState.TrackPower; +using Z21.Core.Command.SystemState.TrackPower; +using Z21.UnitTest.Core.Command; namespace Z21.UnitTest.Core.Command.SystemState.TrackPower { - public class SetTrackPowerOnCommandTest + public class SetTrackPowerOnCommandTest : CommandTestFixture { [Test] public void Ctor_SetDataCorrectly() { - SetTrackPowerOnCommand command = new(); - Assert.That( - command.Data, Is.EqualTo( - new byte[] - { - 0x07, 0x00, - 0x40, 0x00, - 0x21, - 0x81, - 0xa0 - })); + SetTrackPowerOnCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x21, 0x81, 0xa0 })); } } -} \ No newline at end of file +} diff --git a/src/Z21.Client.UnitTest/Core/Command/Z21CommandFactoryTest.cs b/src/Z21.Client.UnitTest/Core/Command/Z21CommandFactoryTest.cs new file mode 100644 index 0000000..f6b3ccd --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/Z21CommandFactoryTest.cs @@ -0,0 +1,58 @@ +using Z21.Core.Command; +using Z21.Core.Command.SystemState; +using Z21.Core.Framing; + +namespace Z21.UnitTest.Core.Command +{ + public class Z21CommandFactoryTest : CommandTestFixture + { + /// + /// A command defined entirely outside the factory: proves a new command needs zero factory edits (open/closed). + /// + private sealed class CustomTestCommand : IZ21Command + { + public CustomTestCommand(IZ21FrameBuilder frameBuilder, byte header, byte payload) + { + Data = frameBuilder.BuildXBus(header, payload); + } + + public string Name => "CUSTOM_TEST_COMMAND"; + + public byte[] Data { get; } + } + + [Test] + public void Create_BuildsCommandDefinedOutsideTheFactory() + { + CustomTestCommand command = Factory.Create((byte)0x21, (byte)0x80); + + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x21, 0x80, 0xA1 })); + } + + [Test] + public void Create_ResolvesEncodingServicesForParameterlessCommand() + { + GetFirmwareVersionCommand command = Factory.Create(); + + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0xF1, 0x0A, 0xFB })); + } + + [Test] + public void Ctor_NullFrameBuilder_Throws() + { + Assert.Throws(() => new Z21CommandFactory(null!, new Z21.Core.Codecs.AddressCodec(), new Z21.Core.Codecs.LocoSpeedCodec())); + } + + [Test] + public void Ctor_NullAddressCodec_Throws() + { + Assert.Throws(() => new Z21CommandFactory(new Z21.Core.Framing.Z21FrameBuilder(), null!, new Z21.Core.Codecs.LocoSpeedCodec())); + } + + [Test] + public void Ctor_NullLocoSpeedCodec_Throws() + { + Assert.Throws(() => new Z21CommandFactory(new Z21.Core.Framing.Z21FrameBuilder(), new Z21.Core.Codecs.AddressCodec(), null!)); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Command/ZLink/GetZLinkHardwareInfoCommandTest.cs b/src/Z21.Client.UnitTest/Core/Command/ZLink/GetZLinkHardwareInfoCommandTest.cs new file mode 100644 index 0000000..3a39b5d --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Command/ZLink/GetZLinkHardwareInfoCommandTest.cs @@ -0,0 +1,15 @@ +using Z21.Core.Command.ZLink; +using Z21.UnitTest.Core.Command; + +namespace Z21.UnitTest.Core.Command.ZLink +{ + public class GetZLinkHardwareInfoCommandTest : CommandTestFixture + { + [Test] + public void Ctor_BuildsRequest() + { + GetZLinkHardwareInfoCommand command = Factory.Create(); + Assert.That(command.Data, Is.EqualTo(new byte[] { 0x05, 0x00, 0xE8, 0x00, 0x06 })); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Exception/LocoSpeedOutOfRangeExceptionTest.cs b/src/Z21.Client.UnitTest/Core/Exception/LocoSpeedOutOfRangeExceptionTest.cs index d9ecc84..95312e0 100644 --- a/src/Z21.Client.UnitTest/Core/Exception/LocoSpeedOutOfRangeExceptionTest.cs +++ b/src/Z21.Client.UnitTest/Core/Exception/LocoSpeedOutOfRangeExceptionTest.cs @@ -15,12 +15,18 @@ public void ThrowIfOutOfRange_ValuesInRange_DoesNothing(DccSpeedMode dccSpeedMod } [Test] - [TestCase(DccSpeedMode.Steps14, (ushort)15)] - [TestCase(DccSpeedMode.Steps28, (ushort)29)] - [TestCase(DccSpeedMode.Steps128, (ushort)127)] - public void ThrowIfOutOfRange_ValuesOutOfRange_ThrowsLocoSpeedOutOfRangeException(DccSpeedMode dccSpeedMode, ushort locoSpeed) + [TestCase(DccSpeedMode.Steps14, (ushort)15, "Steps14", "14")] + [TestCase(DccSpeedMode.Steps28, (ushort)29, "Steps28", "28")] + [TestCase(DccSpeedMode.Steps128, (ushort)127, "Steps128", "126")] + public void ThrowIfOutOfRange_ValuesOutOfRange_ThrowsWithDescriptiveMessage(DccSpeedMode dccSpeedMode, ushort locoSpeed, string expectedFragment, string expectedMax) { - Assert.Throws(() => LocoSpeedOutOfRangeException.ThrowIfOutOfRange(dccSpeedMode, locoSpeed)); + LocoSpeedOutOfRangeException exception = Assert.Throws(() => LocoSpeedOutOfRangeException.ThrowIfOutOfRange(dccSpeedMode, locoSpeed))!; + Assert.Multiple(() => + { + Assert.That(exception.Message, Does.Contain(expectedFragment)); + Assert.That(exception.Message, Does.Contain($"maximum speed of {expectedMax} steps"), + "the message must state the actual maximum that the guard enforces"); + }); } } } \ No newline at end of file diff --git a/src/Z21.Client.UnitTest/Core/Exception/MtuPayloadLengthExceededExceptionTest.cs b/src/Z21.Client.UnitTest/Core/Exception/MtuPayloadLengthExceededExceptionTest.cs index 4d6a0c9..e62af8a 100644 --- a/src/Z21.Client.UnitTest/Core/Exception/MtuPayloadLengthExceededExceptionTest.cs +++ b/src/Z21.Client.UnitTest/Core/Exception/MtuPayloadLengthExceededExceptionTest.cs @@ -8,23 +8,23 @@ public class MtuPayloadLengthExceededExceptionTest [Test] public void ThrowIfExceeded_DatagramSmallerThenMaxUdpPayload_DoNothing() { - byte[] datagram = new byte [Z21Client.MaxUdpPayload - 1]; + byte[] datagram = new byte [Z21CommandStation.MaxUdpPayload - 1]; Assert.DoesNotThrow(() => MtuPayloadLengthExceededException.ThrowIfExceeded(datagram)); } [Test] public void ThrowIfExceeded_DatagramEqualMaxUdpPayload_DoNothing() { - byte[] datagram = new byte [Z21Client.MaxUdpPayload]; + byte[] datagram = new byte [Z21CommandStation.MaxUdpPayload]; Assert.DoesNotThrow(() => MtuPayloadLengthExceededException.ThrowIfExceeded(datagram)); } [Test] public void ThrowIfExceeded_DatagramBiggerThenMaxUdpPayload_ThrowMtuPayloadLengthExceededException() { - byte[] datagram = new byte [Z21Client.MaxUdpPayload + 1]; + byte[] datagram = new byte [Z21CommandStation.MaxUdpPayload + 1]; MtuPayloadLengthExceededException exception = Assert.Throws(() => MtuPayloadLengthExceededException.ThrowIfExceeded(datagram)); - Assert.That(exception.Message, Is.EqualTo($"Combined UDP payload length '{datagram.Length}' exceeds MTU size '{Z21Client.MaxUdpPayload}'.")); + Assert.That(exception.Message, Is.EqualTo($"Combined UDP payload length '{datagram.Length}' exceeds MTU size '{Z21CommandStation.MaxUdpPayload}'.")); } } } \ No newline at end of file diff --git a/src/Z21.Client.UnitTest/Core/FakeTransport.cs b/src/Z21.Client.UnitTest/Core/FakeTransport.cs new file mode 100644 index 0000000..cff3664 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/FakeTransport.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using CommandStation.Transport; + +namespace Z21.UnitTest.Core +{ + public class FakeTransport : ITransport + { + public List Sent { get; } = []; + + public bool IsConnected { get; private set; } + + public event EventHandler? OnBytesReceived; + + public event EventHandler? OnConnectionChanged; + + public Task ConnectAsync() + { + IsConnected = true; + OnConnectionChanged?.Invoke(this, new ConnectionChangedEventArgs(true)); + return Task.CompletedTask; + } + + public Task DisconnectAsync() + { + IsConnected = false; + OnConnectionChanged?.Invoke(this, new ConnectionChangedEventArgs(false)); + return Task.CompletedTask; + } + + public Task SendAsync(ReadOnlyMemory data) + { + Sent.Add(data.ToArray()); + return Task.CompletedTask; + } + + public void RaiseBytes(byte[] data) => OnBytesReceived?.Invoke(this, new BytesReceivedEventArgs(data)); + + /// Simulates a transport-level connection loss (e.g. socket error), independent of . + public void RaiseConnectionLost() + { + IsConnected = false; + OnConnectionChanged?.Invoke(this, new ConnectionChangedEventArgs(false)); + } + + /// Forces the connected flag without raising events, to model the transport reconnecting on its own. + public void SetConnected(bool value) => IsConnected = value; + } +} diff --git a/src/Z21.Client.UnitTest/Core/Framing/Z21FrameBuilderTest.cs b/src/Z21.Client.UnitTest/Core/Framing/Z21FrameBuilderTest.cs new file mode 100644 index 0000000..954ba8e --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Framing/Z21FrameBuilderTest.cs @@ -0,0 +1,99 @@ +using Z21.Core.Framing; + +namespace Z21.UnitTest.Core.Framing +{ + public class Z21FrameBuilderTest + { + private Z21FrameBuilder _builder = null!; + + [SetUp] + public void SetUp() => _builder = new Z21FrameBuilder(); + + [Test] + public void BuildLan_NoPayload_WritesLengthAndHeaderOnly() + { + Assert.That(_builder.BuildLan(0x0010), Is.EqualTo(new byte[] { 0x04, 0x00, 0x10, 0x00 })); + } + + [Test] + public void BuildLan_WithPayload_AppendsPayloadAndSetsLength() + { + Assert.That(_builder.BuildLan(0x0050, 0x01, 0x02, 0x03, 0x04), + Is.EqualTo(new byte[] { 0x08, 0x00, 0x50, 0x00, 0x01, 0x02, 0x03, 0x04 })); + } + + [Test] + public void BuildLan_LowHeaderByteVaries_IsWrittenLittleEndian() + { + Assert.That(_builder.BuildLan(0x0061, 0xAA, 0xBB, 0x02), + Is.EqualTo(new byte[] { 0x07, 0x00, 0x61, 0x00, 0xAA, 0xBB, 0x02 })); + } + + [Test] + public void BuildXBus_AppendsXorOverXHeaderAndData() + { + Assert.That(_builder.BuildXBus(0xF1, 0x0A), + Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0xF1, 0x0A, 0xFB })); + } + + [Test] + public void BuildXBus_NoData_XorIsXHeaderItself() + { + Assert.That(_builder.BuildXBus(0x80), + Is.EqualTo(new byte[] { 0x06, 0x00, 0x40, 0x00, 0x80, 0x80 })); + } + + [Test] + public void BuildXBus_MatchesSetLocoDriveFrame() + { + Assert.That(_builder.BuildXBus(0xE4, 0x13, 0x00, 0x14, 0x82), + Is.EqualTo(new byte[] { 0x0A, 0x00, 0x40, 0x00, 0xE4, 0x13, 0x00, 0x14, 0x82, 0x61 })); + } + + [Test] + public void BuildLanChecksummed_AppendsXorOverDataBytes() + { + Assert.That(_builder.BuildLanChecksummed(0x00CC, 0x21, 0x2A), + Is.EqualTo(new byte[] { 0x07, 0x00, 0xCC, 0x00, 0x21, 0x2A, 0x0B })); + } + + [Test] + public void BuildLanChecksummed_NoData_AppendsZeroChecksum() + { + Assert.That(_builder.BuildLanChecksummed(0x00CC), + Is.EqualTo(new byte[] { 0x05, 0x00, 0xCC, 0x00, 0x00 })); + } + + [Test] + public void BuildLan_NullPayload_Throws() + { + Assert.Throws(() => _builder.BuildLan(0x0010, (byte[])null!)); + } + + [Test] + public void BuildXBus_NullData_Throws() + { + Assert.Throws(() => _builder.BuildXBus(0x80, (byte[])null!)); + } + + [Test] + public void BuildLanChecksummed_NullData_Throws() + { + Assert.Throws(() => _builder.BuildLanChecksummed(0x00CC, (byte[])null!)); + } + + [Test] + public void BuildLan_PayloadOver255_WritesHighLengthByte() + { + byte[] payload = new byte[252]; // total length = 4 + 252 = 256 = 0x0100 + byte[] frame = _builder.BuildLan(0x0010, payload); + + Assert.Multiple(() => + { + Assert.That(frame, Has.Length.EqualTo(256)); + Assert.That(frame[0], Is.EqualTo(0x00), "low length byte"); + Assert.That(frame[1], Is.EqualTo(0x01), "high length byte must be set"); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Framing/Z21FrameReaderTest.cs b/src/Z21.Client.UnitTest/Core/Framing/Z21FrameReaderTest.cs new file mode 100644 index 0000000..264cfdc --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Framing/Z21FrameReaderTest.cs @@ -0,0 +1,133 @@ +using System.Collections.Generic; +using CommandStation.Framing; +using Z21.Core.Framing; + +namespace Z21.UnitTest.Core.Framing +{ + [TestFixture] + public class Z21FrameReaderTest + { + private Z21FrameReader _reader = null!; + private List _frames = null!; + + [SetUp] + public void SetUp() + { + _reader = new Z21FrameReader(); + _frames = []; + _reader.OnFrameReceived += (_, args) => _frames.Add(args.Frame); + } + + [Test] + public void Append_SingleCompleteFrame_EmitsThatFrame() + { + byte[] frame = [0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00]; + + _reader.Append(frame); + + Assert.That(_frames, Has.Count.EqualTo(1)); + Assert.That(_frames[0], Is.EqualTo(frame)); + } + + [Test] + public void Append_TwoFramesInOneChunk_EmitsBothInOrder() + { + byte[] first = [0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00]; + byte[] second = [0x04, 0x00, 0x12, 0x34]; + byte[] combined = [.. first, .. second]; + + _reader.Append(combined); + + Assert.That(_frames, Has.Count.EqualTo(2)); + Assert.That(_frames[0], Is.EqualTo(first)); + Assert.That(_frames[1], Is.EqualTo(second)); + } + + [Test] + public void Append_FrameSplitAcrossChunks_EmitsOnceComplete() + { + _reader.Append(new byte[] { 0x07, 0x00, 0x40, 0x00 }); + Assert.That(_frames, Is.Empty); + + _reader.Append(new byte[] { 0x21, 0x21, 0x00 }); + + Assert.That(_frames, Has.Count.EqualTo(1)); + Assert.That(_frames[0], Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00 })); + } + + [Test] + public void Append_LengthPrefixSplitAcrossChunks_StillReassembles() + { + _reader.Append(new byte[] { 0x07 }); + Assert.That(_frames, Is.Empty); + + _reader.Append(new byte[] { 0x00, 0x40, 0x00, 0x21, 0x21, 0x00 }); + + Assert.That(_frames, Has.Count.EqualTo(1)); + Assert.That(_frames[0], Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00 })); + } + + [Test] + public void Append_Null_ThrowsArgumentNullException() + { + Assert.Throws(() => _reader.Append(null!)); + } + + [Test] + public void Append_ZeroLengthFrame_DiscardsBufferAndEmitsNothing() + { + _reader.Append(new byte[] { 0x00, 0x00, 0xAA, 0xBB }); + + Assert.That(_frames, Is.Empty); + + // A subsequent valid frame is processed (buffer was cleared, not stuck). + _reader.Append(new byte[] { 0x04, 0x00, 0x12, 0x34 }); + Assert.That(_frames, Has.Count.EqualTo(1)); + Assert.That(_frames[0], Is.EqualTo(new byte[] { 0x04, 0x00, 0x12, 0x34 })); + } + + [Test] + public void Append_LengthPrefixExceedsMaxFrame_DiscardsAndResyncs() + { + // DataLen = 0x2000 (8192) is far beyond the 1472-byte IPv4 payload limit: a corrupt prefix + // must not make the reader buffer indefinitely waiting for bytes that will never arrive. + _reader.Append(new byte[] { 0x00, 0x20, 0xAA, 0xBB }); + Assert.That(_frames, Is.Empty); + + // A subsequent valid frame is still processed (buffer was cleared, not stuck). + _reader.Append(new byte[] { 0x04, 0x00, 0x12, 0x34 }); + Assert.That(_frames, Has.Count.EqualTo(1)); + Assert.That(_frames[0], Is.EqualTo(new byte[] { 0x04, 0x00, 0x12, 0x34 })); + } + + [Test] + public void Append_FrameWithHighByteLength_UsesBothLengthBytes() + { + byte[] frame = new byte[256]; + frame[0] = 0x00; // low byte of length + frame[1] = 0x01; // high byte of length => 0x0100 = 256 + frame[2] = 0x40; + + _reader.Append(frame); + + Assert.That(_frames, Has.Count.EqualTo(1)); + Assert.That(_frames[0], Has.Length.EqualTo(256)); + } + + [Test] + public void Append_TrailingPartialFrame_RetainedUntilCompleted() + { + byte[] complete = [0x04, 0x00, 0x12, 0x34]; + byte[] partial = [0x05, 0x00, 0xAA]; + _reader.Append([.. complete, .. partial]); + + Assert.That(_frames, Has.Count.EqualTo(1)); + Assert.That(_frames[0], Is.EqualTo(complete)); + + _reader.Append(new byte[] { 0xBB, 0xCC }); + + Assert.That(_frames, Has.Count.EqualTo(2)); + Assert.That(_frames[1], Is.EqualTo(new byte[] { 0x05, 0x00, 0xAA, 0xBB, 0xCC })); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Helper/AddressHelperTest.cs b/src/Z21.Client.UnitTest/Core/Helper/AddressHelperTest.cs deleted file mode 100644 index 0fa495e..0000000 --- a/src/Z21.Client.UnitTest/Core/Helper/AddressHelperTest.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Z21.Core.Helper; - -namespace Z21.UnitTest.Core.Helper -{ - public class AddressHelperTest - { - [Test] - [TestCase((ushort)0, 0x00, 0x00)] - [TestCase((ushort)1, 0x01, 0x00)] - [TestCase((ushort)255, 0xFF, 0x00)] - [TestCase((ushort)256, 0x00, 0x01)] - [TestCase((ushort)512, 0x00, 0x02)] - [TestCase((ushort)1023, 0xFF, 0x03)] - [TestCase((ushort)1234, 0xD2, 0x04)] - [TestCase((ushort)16383, 0xFF, 0x3F)] - public void SplitLocoAddress_ReturnsCorrectLSBAndMSB(ushort input, byte expectedLsb, byte expectedMsb) - { - (byte lsb, byte msb) = AddressHelper.SplitLocoAddress(input); - - if (input >= 128) - expectedMsb |= 0xC0; - - Assert.Multiple(() => - { - Assert.That(lsb, Is.EqualTo(expectedLsb), "LSB is incorrect"); - Assert.That(msb, Is.EqualTo(expectedMsb), "MSB is incorrect"); - }); - } - - [Test] - public void SplitAccessoryAddress_ReturnsCorrectLSBAndMSB() - { - (byte lsb, byte msb) = AddressHelper.SplitAccessoryAddress(48); - Assert.Multiple(() => - { - Assert.That((msb << 8) + lsb, Is.EqualTo(47)); - Assert.That(msb, Is.EqualTo(0x00)); - Assert.That(lsb, Is.EqualTo(0x2F)); - }); - } - - [Test] - public void SplitAccessoryAddress_AddressIs0_ThrowsArgumentOutOfRangeException() - { - Assert.Throws(() => AddressHelper.SplitAccessoryAddress(0)); - } - - [Test] - public void CombineAccessoryAddress_ReturnsCorrectAddress() - { - const byte msb = 0x00; - const byte lsb = 0x2f; - ushort address = AddressHelper.CombineAccessoryAddress(lsb, msb); - Assert.That(address, Is.EqualTo(48)); - } - } -} \ No newline at end of file diff --git a/src/Z21.Client.UnitTest/Core/Helper/DelayedActionTest.cs b/src/Z21.Client.UnitTest/Core/Helper/DelayedActionTest.cs new file mode 100644 index 0000000..de807b0 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Helper/DelayedActionTest.cs @@ -0,0 +1,47 @@ +using System.Threading; +using Z21.Core.Helper; + +namespace Z21.UnitTest.Core.Helper +{ + public class DelayedActionTest + { + [Test] + public async Task Delay_FiresActionAfterInterval() + { + int count = 0; + using DelayedAction action = new(TimeSpan.FromMilliseconds(40), () => + { + Interlocked.Increment(ref count); + return Task.CompletedTask; + }); + + action.Delay(); + await Task.Delay(150); + + Assert.That(Volatile.Read(ref count), Is.GreaterThanOrEqualTo(1)); + } + + [Test] + public async Task Stop_PreventsFurtherFiring() + { + int count = 0; + using DelayedAction action = new(TimeSpan.FromMilliseconds(40), () => + { + Interlocked.Increment(ref count); + return Task.CompletedTask; + }); + + action.Delay(); + await Task.Delay(150); + action.Stop(); + int snapshot = Volatile.Read(ref count); + await Task.Delay(150); + + Assert.Multiple(() => + { + Assert.That(snapshot, Is.GreaterThanOrEqualTo(1), "timer should fire while running"); + Assert.That(Volatile.Read(ref count), Is.EqualTo(snapshot), "no further firing after Stop"); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Model/ExcAccessoryPayload/SwitchDecoderPayloadTest.cs b/src/Z21.Client.UnitTest/Core/Model/ExcAccessoryPayload/SwitchDecoderPayloadTest.cs index c688c55..d86d6ef 100644 --- a/src/Z21.Client.UnitTest/Core/Model/ExcAccessoryPayload/SwitchDecoderPayloadTest.cs +++ b/src/Z21.Client.UnitTest/Core/Model/ExcAccessoryPayload/SwitchDecoderPayloadTest.cs @@ -13,9 +13,17 @@ public void Ctor_CalculatesPayloadCorrectly() } [Test] - public void Ctor_SwitchTimeBiggerThen127_ThrowsArgumentOutOfRangeException() + public void Ctor_SwitchTime127_IsPermanentlyOn() { - Assert.Throws(() => _ = new SwitchDecoderPayload(AccessoryOutput.Output1, 128)); + SwitchDecoderPayload payload = new(AccessoryOutput.Output2, 127); + Assert.That(payload.Payload, Is.EqualTo(0x7F | (int)AccessoryOutput.Output2)); + } + + [Test] + public void Ctor_SwitchTimeBiggerThen127_ThrowsWithMessage() + { + ArgumentOutOfRangeException exception = Assert.Throws(() => _ = new SwitchDecoderPayload(AccessoryOutput.Output1, 128))!; + Assert.That(exception.Message, Does.Contain("Maximum switch time is 127")); } } } \ No newline at end of file diff --git a/src/Z21.Client.UnitTest/Core/Model/FirmwareVersionTest.cs b/src/Z21.Client.UnitTest/Core/Model/FirmwareVersionTest.cs index f9307f2..fff452e 100644 --- a/src/Z21.Client.UnitTest/Core/Model/FirmwareVersionTest.cs +++ b/src/Z21.Client.UnitTest/Core/Model/FirmwareVersionTest.cs @@ -78,5 +78,37 @@ public void Equals_Null_ReturnsFalse() FirmwareVersion version = new(3, 6); Assert.That(version, Is.Not.EqualTo(null)); } + + [Test] + public void EqualityOperators_WithNull_DoNotThrowAndCompareByReference() + { + FirmwareVersion version = new(3, 6); + FirmwareVersion? @null = null; + + Assert.Multiple(() => + { + Assert.That(@null == null, Is.True, "null == null"); + Assert.That(version == @null, Is.False, "version == null"); + Assert.That(@null == version, Is.False, "null == version"); + Assert.That(version != @null, Is.True, "version != null"); + }); + } + + [Test] + public void RelationalOperators_WithNull_TreatNullAsLowest() + { + FirmwareVersion version = new(1, 0); + FirmwareVersion? @null = null; + FirmwareVersion? otherNull = null; + + Assert.Multiple(() => + { + Assert.That(@null < version, Is.True, "null < version"); + Assert.That(version > @null, Is.True, "version > null"); + Assert.That(version < @null, Is.False, "version < null"); + Assert.That(@null <= otherNull, Is.True, "null <= null"); + Assert.That(version >= @null, Is.True, "version >= null"); + }); + } } } \ No newline at end of file diff --git a/src/Z21.Client.UnitTest/Core/Reflection/Z21ServiceDiscoveryTest.cs b/src/Z21.Client.UnitTest/Core/Reflection/Z21ServiceDiscoveryTest.cs new file mode 100644 index 0000000..aef210b --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Reflection/Z21ServiceDiscoveryTest.cs @@ -0,0 +1,55 @@ +using System; +using System.Linq; +using Z21.Core.Reflection; +using Z21.Core.ResponseHandler; +using Z21.Core.ResponseHandler.Driving; +using Z21.Core.ResponseParser; + +namespace Z21.UnitTest.Core.Reflection +{ + public class Z21ServiceDiscoveryTest + { + private Z21ServiceDiscovery _discovery = null!; + + [SetUp] + public void SetUp() => _discovery = new Z21ServiceDiscovery(); + + [Test] + public void GetImplementations_ReturnsConcreteHandlersOnly() + { + Type[] implementations = _discovery.GetImplementations(typeof(IZ21ResponseHandler)).ToArray(); + + Assert.Multiple(() => + { + Assert.That(implementations, Has.Member(typeof(LocoInfoResponseHandler)), "concrete handler must be discovered"); + Assert.That(implementations, Has.None.Matches(t => t.IsAbstract), "abstract types must be excluded"); + Assert.That(implementations, Has.None.Matches(t => t.IsInterface), "interfaces must be excluded"); + Assert.That(implementations, Has.None.Matches(t => !typeof(IZ21ResponseHandler).IsAssignableFrom(t)), "all must implement the base interface"); + }); + } + + [Test] + public void GetServiceInterfaces_IncludeBaseTrue_ContainsBaseInterface() + { + Type[] interfaces = _discovery.GetServiceInterfaces(typeof(LocoInfoResponseHandler), typeof(IZ21ResponseHandler), includeBaseInterface: true).ToArray(); + + Assert.Multiple(() => + { + Assert.That(interfaces, Has.Member(typeof(IZ21ResponseHandler)), "base interface included when flag is true"); + Assert.That(interfaces, Has.Member(typeof(ILocoInfoResponseHandler)), "specific interface always included"); + }); + } + + [Test] + public void GetServiceInterfaces_IncludeBaseFalse_ExcludesBaseInterface() + { + Type[] interfaces = _discovery.GetServiceInterfaces(typeof(SystemStateResponseParser), typeof(IZ21ResponseParser), includeBaseInterface: false).ToArray(); + + Assert.Multiple(() => + { + Assert.That(interfaces, Has.None.EqualTo(typeof(IZ21ResponseParser)), "base interface excluded when flag is false"); + Assert.That(interfaces, Has.Member(typeof(ISystemStateResponseParser)), "specific interface still included"); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Booster/BoosterResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Booster/BoosterResponseHandlerTest.cs new file mode 100644 index 0000000..4a54626 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Booster/BoosterResponseHandlerTest.cs @@ -0,0 +1,79 @@ +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.Booster; + +namespace Z21.UnitTest.Core.ResponseHandler.Booster +{ + public class BoosterResponseHandlerTest + { + [Test] + public void Description_DecodesName() + { + BoosterDescriptionResponseHandler handler = new(); + byte[] response = new byte[36]; + response[0] = 0x24; + response[2] = 0xB8; + response[4] = 0x41; + response[5] = 0x42; + + Assert.That(handler.CanHandle(response), Is.True); + + BoosterDescriptionReceivedEventArgs? received = null; + handler.OnBoosterDescriptionReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received!.Name, Is.EqualTo("AB")); + } + + [Test] + public void Description_NeverSet_IsEmptyString() + { + BoosterDescriptionResponseHandler handler = new(); + byte[] response = new byte[36]; + response[0] = 0x24; + response[2] = 0xB8; + response[4] = 0xFF; + + BoosterDescriptionReceivedEventArgs? received = null; + handler.OnBoosterDescriptionReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received!.Name, Is.EqualTo(string.Empty)); + } + + [Test] + public void SystemState_DecodesAllFields() + { + BoosterSystemStateResponseHandler handler = new(); + byte[] response = + [ + 0x1C, 0x00, 0xBA, 0x00, + 0x64, 0x00, 0xFF, 0xFF, 0xC8, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x98, 0x3A, 0x88, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; + + Assert.That(handler.CanHandle(response), Is.True); + + BoosterSystemStateReceivedEventArgs? received = null; + handler.OnBoosterSystemStateReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.Multiple(() => + { + Assert.That(received!.State.Booster1MainCurrent, Is.EqualTo(100)); + Assert.That(received.State.Booster2MainCurrent, Is.EqualTo(-1)); + Assert.That(received.State.Booster1FilteredMainCurrent, Is.EqualTo(200)); + Assert.That(received.State.Booster1Temperature, Is.EqualTo(25)); + Assert.That(received.State.SupplyVoltage, Is.EqualTo(15000)); + Assert.That(received.State.Booster1VccVoltage, Is.EqualTo(5000)); + Assert.That(received.State.CentralState, Is.EqualTo(0x02)); + }); + } + + [Test] + public void SystemState_RejectsOtherHeaders() + { + BoosterSystemStateResponseHandler handler = new(); + Assert.That(handler.CanHandle([0x00]), Is.False); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Can/CanResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Can/CanResponseHandlerTest.cs new file mode 100644 index 0000000..d610f45 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Can/CanResponseHandlerTest.cs @@ -0,0 +1,112 @@ +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.Can; + +namespace Z21.UnitTest.Core.ResponseHandler.Can +{ + public class CanResponseHandlerTest + { + [Test] + public void Detector_DecodesAllFields() + { + CanDetectorResponseHandler handler = new(); + byte[] response = [0x0E, 0x00, 0xC4, 0x00, 0x01, 0xC1, 0x05, 0x00, 0x03, 0x01, 0x00, 0x11, 0x00, 0x00]; + + Assert.That(handler.CanHandle(response), Is.True); + + CanDetectorReceivedEventArgs? received = null; + handler.OnCanDetectorReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.Data.NetworkId, Is.EqualTo(0xC101)); + Assert.That(received.Data.ModuleAddress, Is.EqualTo(5)); + Assert.That(received.Data.Port, Is.EqualTo(3)); + Assert.That(received.Data.Type, Is.EqualTo(0x01)); + Assert.That(received.Data.Value1, Is.EqualTo(0x1100)); + Assert.That(received.Data.Value2, Is.EqualTo(0)); + }); + } + + [Test] + public void Detector_RejectsOtherHeaders() + { + CanDetectorResponseHandler handler = new(); + Assert.That(handler.CanHandle([0x0E, 0x00, 0xC8, 0x00, 0x01, 0xC1, 0x05, 0x00, 0x03, 0x01, 0x00, 0x11, 0x00, 0x00]), Is.False); + Assert.That(handler.CanHandle([0x00]), Is.False); + } + + [Test] + public void DeviceDescription_DecodesNetworkIdAndName() + { + CanDeviceDescriptionResponseHandler handler = new(); + byte[] response = [0x16, 0x00, 0xC8, 0x00, 0x01, 0xC1, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; + + Assert.That(handler.CanHandle(response), Is.True); + + CanDeviceDescriptionReceivedEventArgs? received = null; + handler.OnCanDeviceDescriptionReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.Multiple(() => + { + Assert.That(received!.NetworkId, Is.EqualTo(0xC101)); + Assert.That(received.Name, Is.EqualTo("AB")); + }); + } + + [Test] + public void DeviceDescription_NameWithoutTerminator_KeepsFullLength() + { + CanDeviceDescriptionResponseHandler handler = new(); + byte[] response = new byte[22]; + response[2] = 0xC8; + for (int i = 6; i < 22; i++) + response[i] = (byte)'X'; + + CanDeviceDescriptionReceivedEventArgs? received = null; + handler.OnCanDeviceDescriptionReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received!.Name, Has.Length.EqualTo(16)); + } + + [Test] + public void DeviceDescription_NameStartingWithTerminator_IsEmpty() + { + CanDeviceDescriptionResponseHandler handler = new(); + byte[] response = new byte[22]; + response[2] = 0xC8; + + CanDeviceDescriptionReceivedEventArgs? received = null; + handler.OnCanDeviceDescriptionReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received!.Name, Is.Empty); + } + + [Test] + public void BoosterSystemState_DecodesAllFields() + { + CanBoosterSystemStateResponseHandler handler = new(); + byte[] response = [0x0E, 0x00, 0xCA, 0x00, 0x01, 0xC1, 0x01, 0x00, 0x80, 0x00, 0x10, 0x27, 0xE8, 0x03]; + + Assert.That(handler.CanHandle(response), Is.True); + + CanBoosterSystemStateReceivedEventArgs? received = null; + handler.OnCanBoosterSystemStateReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.Multiple(() => + { + Assert.That(received!.State.NetworkId, Is.EqualTo(0xC101)); + Assert.That(received.State.OutputPort, Is.EqualTo(1)); + Assert.That(received.State.State, Is.EqualTo(CanBoosterState.TrackVoltageOff)); + Assert.That(received.State.VccVoltage, Is.EqualTo(10000)); + Assert.That(received.State.Current, Is.EqualTo(1000)); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Decoder/DecoderDescriptionResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Decoder/DecoderDescriptionResponseHandlerTest.cs new file mode 100644 index 0000000..238ef4d --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Decoder/DecoderDescriptionResponseHandlerTest.cs @@ -0,0 +1,68 @@ +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.Decoder; + +namespace Z21.UnitTest.Core.ResponseHandler.Decoder +{ + public class DecoderDescriptionResponseHandlerTest + { + private DecoderDescriptionResponseHandler _handler = null!; + + [SetUp] + public void Setup() => _handler = new(); + + [Test] + public void Handle_DecodesName() + { + byte[] response = new byte[36]; + response[0] = 0x24; + response[2] = 0xD8; + response[4] = 0x41; + response[5] = 0x42; + + Assert.That(_handler.CanHandle(response), Is.True); + + DecoderDescriptionReceivedEventArgs? received = null; + _handler.OnDecoderDescriptionReceived += (_, args) => received = args; + _handler.Handle(response); + + Assert.That(received!.Name, Is.EqualTo("AB")); + } + + [Test] + public void Handle_NameWithoutTerminator_KeepsFullLength() + { + byte[] response = new byte[36]; + response[2] = 0xD8; + for (int i = 4; i < 36; i++) + response[i] = (byte)'X'; + + DecoderDescriptionReceivedEventArgs? received = null; + _handler.OnDecoderDescriptionReceived += (_, args) => received = args; + _handler.Handle(response); + + Assert.That(received!.Name, Has.Length.EqualTo(32)); + } + + [Test] + public void Handle_NameStartingWithTerminator_IsEmpty() + { + byte[] response = new byte[36]; + response[2] = 0xD8; + + DecoderDescriptionReceivedEventArgs? received = null; + _handler.OnDecoderDescriptionReceived += (_, args) => received = args; + _handler.Handle(response); + + Assert.That(received!.Name, Is.Empty); + } + + [Test] + public void CanHandle_RejectsOtherHeaders() + { + Assert.That(_handler.CanHandle([0x00]), Is.False); + byte[] wrong = new byte[36]; + wrong[2] = 0xDA; + Assert.That(_handler.CanHandle(wrong), Is.False); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Decoder/DecoderSystemStateResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Decoder/DecoderSystemStateResponseHandlerTest.cs new file mode 100644 index 0000000..ea9ed7a --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Decoder/DecoderSystemStateResponseHandlerTest.cs @@ -0,0 +1,101 @@ +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.Decoder; +using Z21.Core.ResponseParser; + +namespace Z21.UnitTest.Core.ResponseHandler.Decoder +{ + public class DecoderSystemStateResponseHandlerTest + { + private DecoderSystemStateResponseHandler _handler = null!; + + [SetUp] + public void Setup() => _handler = new(new SwitchDecoderSystemStateParser(), new SignalDecoderSystemStateParser()); + + private static byte[] SwitchFrame() + { + byte[] frame = new byte[48]; + frame[0] = 0x30; + frame[2] = 0xDA; + // payload begins at index 4 + frame[4] = 0x64; // Current = 100 + frame[8] = 0xE4; frame[9] = 0x0C; // Voltage = 3300 + frame[10] = 0x02; // CentralState + frame[11] = 0x20; // CentralStateEx + frame[12] = 0x11; // OutputStates[0] + frame[36] = 0x01; // Address = 1 + frame[38] = 0x02; // Address2 = 2 + frame[46] = 0x03; // Dimmed + return frame; + } + + private static byte[] SignalFrame() + { + byte[] frame = new byte[46]; + frame[0] = 0x2E; + frame[2] = 0xDA; + frame[8] = 0xE0; frame[9] = 0x2E; // Voltage = 12000 + frame[10] = 0x01; // CentralState + frame[12] = 0xAB; // OutputStates[0] + frame[16] = 0x10; // SignalDccExt[0] + frame[27] = 0x02; // SignalCount + frame[28] = 0x05; // SignalConfig[0] + frame[36] = 0x10; // Address = 16 + return frame; + } + + [Test] + public void Handle_SwitchDecoderFrame_RaisesSwitchState() + { + byte[] frame = SwitchFrame(); + Assert.That(_handler.CanHandle(frame), Is.True); + + SwitchDecoderSystemStateReceivedEventArgs? received = null; + _handler.OnSwitchDecoderSystemStateReceived += (_, args) => received = args; + _handler.Handle(frame); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.State.Current, Is.EqualTo(100)); + Assert.That(received.State.Voltage, Is.EqualTo(3300)); + Assert.That(received.State.CentralState, Is.EqualTo(0x02)); + Assert.That(received.State.OutputStates[0], Is.EqualTo(0x11)); + Assert.That(received.State.Address, Is.EqualTo(1)); + Assert.That(received.State.Address2, Is.EqualTo(2)); + Assert.That(received.State.Dimmed, Is.EqualTo(0x03)); + }); + } + + [Test] + public void Handle_SignalDecoderFrame_RaisesSignalState() + { + byte[] frame = SignalFrame(); + Assert.That(_handler.CanHandle(frame), Is.True); + + SignalDecoderSystemStateReceivedEventArgs? received = null; + _handler.OnSignalDecoderSystemStateReceived += (_, args) => received = args; + _handler.Handle(frame); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.State.Voltage, Is.EqualTo(12000)); + Assert.That(received.State.CentralState, Is.EqualTo(0x01)); + Assert.That(received.State.OutputStates[0], Is.EqualTo(0xAB)); + Assert.That(received.State.SignalDccExt[0], Is.EqualTo(0x10)); + Assert.That(received.State.SignalCount, Is.EqualTo(2)); + Assert.That(received.State.SignalConfig[0], Is.EqualTo(0x05)); + Assert.That(received.State.Address, Is.EqualTo(16)); + }); + } + + [Test] + public void CanHandle_RejectsOtherHeaders() + { + Assert.That(_handler.CanHandle([0x00]), Is.False); + byte[] wrongHeader = new byte[48]; + wrongHeader[2] = 0xDB; + Assert.That(_handler.CanHandle(wrongHeader), Is.False); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Driving/LocoInfoResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Driving/LocoInfoResponseHandlerTest.cs index 1b99441..a5f1691 100644 --- a/src/Z21.Client.UnitTest/Core/ResponseHandler/Driving/LocoInfoResponseHandlerTest.cs +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Driving/LocoInfoResponseHandlerTest.cs @@ -1,3 +1,4 @@ +using Z21.Core.Codecs; using Z21.Core.Model; using Z21.Core.Model.EventArgs; using Z21.Core.ResponseHandler.Driving; @@ -11,7 +12,7 @@ public class LocoInfoResponseHandlerTest [SetUp] public void Setup() { - _handler = new(); + _handler = new(new LocoSpeedCodec()); } [Test] @@ -34,7 +35,6 @@ public void CanHandle_InvalidResponse_ReturnsFalse(byte[] response) Assert.That(result, Is.False); } - //TODO add even more tests. [Test] [TestCase(3, DccSpeedMode.Steps28, @@ -45,6 +45,31 @@ public void CanHandle_InvalidResponse_ReturnsFalse(byte[] response) false, false, new byte[] { 0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x02, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69 })] + [TestCase(3, + DccSpeedMode.Steps14, + DecoderMode.DCC, + DrivingDirection.Forward, + (ushort)6, + false, + false, + false, + new byte[] { 0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69 }, + TestName = "14 speed steps (KKK=000)")] + [TestCase(3, DccSpeedMode.Steps14, DecoderMode.MM, DrivingDirection.Forward, (ushort)0, false, false, false, + new byte[] { 0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69 }, + TestName = "MM decoder (M bit set)")] + [TestCase(3, DccSpeedMode.Steps14, DecoderMode.DCC, DrivingDirection.Forward, (ushort)0, true, false, false, + new byte[] { 0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69 }, + TestName = "Busy (B bit set)")] + [TestCase(3, DccSpeedMode.Steps128, DecoderMode.DCC, DrivingDirection.Forward, (ushort)4, false, false, false, + new byte[] { 0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x04, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69 }, + TestName = "128 speed steps (KKK=100)")] + [TestCase(3, DccSpeedMode.Steps28, DecoderMode.DCC, DrivingDirection.Backward, (ushort)0, false, false, false, + new byte[] { 0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69 }, + TestName = "Backward (R bit clear)")] + [TestCase(3, DccSpeedMode.Steps28, DecoderMode.DCC, DrivingDirection.Forward, (ushort)11, false, true, true, + new byte[] { 0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x02, 0x87, 0x60, 0x00, 0x00, 0x00, 0x00, 0x69 }, + TestName = "Double traction + smart search")] public void Handle_ValidResponse_RaisesEventWithCorrectArgs(short locoAddress, DccSpeedMode dccSpeedMode, DecoderMode decoderMode, DrivingDirection drivingDirection, ushort locoSpeed, bool locoIsBusy, bool locoContainedInDoubleTraction, bool smartSearch, byte[] response) { @@ -73,9 +98,41 @@ public void Handle_ValidResponse_RaisesEventWithCorrectArgs(short locoAddress, D Assert.That(receivedArgs.Data.LocoFunctionsData.All(data => data.FunctionToggleType == FunctionToggleType.Off), Is.True); List index = receivedArgs.Data.LocoFunctionsData.Select(data => data.FunctionIndex).Distinct().ToList(); - Assert.That(index, Has.Count.EqualTo(29)); + Assert.That(index, Has.Count.EqualTo(37)); Assert.That(index.Min(), Is.EqualTo(0)); - Assert.That(index.Max(), Is.EqualTo(28)); + Assert.That(index.Max(), Is.EqualTo(36)); + } + + [Test] + public void Handle_Db8FunctionBitsSet_ReportsF29ToF31On() + { + // 15-byte frame (DataLen 0x0F): DB8 (the byte immediately before the XOR) = 0x07 => F29, F30, F31 on. + byte[] response = [0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x02, 0x87, 0x00, 0x00, 0x00, 0x00, 0x07, 0x69]; + + LocoInfoReceivedEventArgs? receivedArgs = null; + _handler.OnLocoInfoReceived += (_, args) => receivedArgs = args; + + _handler.Handle(response); + + Assert.That(receivedArgs, Is.Not.Null); + var on = receivedArgs!.Data.LocoFunctionsData.Where(d => d.FunctionToggleType == FunctionToggleType.On).Select(d => (int)d.FunctionIndex).ToList(); + Assert.That(on, Is.EquivalentTo(new[] { 29, 30, 31 })); + } + + [Test] + public void Handle_FunctionBitsSet_ReportsThoseFunctionsOn() + { + // db4 = 0x1F => F0(L), F4, F3, F2, F1 all on; db5 = 0x01 => F5 on. + byte[] response = [0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x02, 0x87, 0x1F, 0x01, 0x00, 0x00, 0x00, 0x69]; + + LocoInfoReceivedEventArgs? receivedArgs = null; + _handler.OnLocoInfoReceived += (_, args) => receivedArgs = args; + + _handler.Handle(response); + + Assert.That(receivedArgs, Is.Not.Null); + var on = receivedArgs!.Data.LocoFunctionsData.Where(d => d.FunctionToggleType == FunctionToggleType.On).Select(d => (int)d.FunctionIndex).ToList(); + Assert.That(on, Is.EquivalentTo(new[] { 0, 1, 2, 3, 4, 5 })); } } } \ No newline at end of file diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/FastClock/FastClockResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/FastClock/FastClockResponseHandlerTest.cs new file mode 100644 index 0000000..d88fece --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/FastClock/FastClockResponseHandlerTest.cs @@ -0,0 +1,101 @@ +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.FastClock; + +namespace Z21.UnitTest.Core.ResponseHandler.FastClock +{ + public class FastClockResponseHandlerTest + { + [Test] + public void Data_DecodesTimeAndFlags() + { + FastClockDataResponseHandler handler = new(); + // day=0, hour=12 (0x0C), minute=30 (0x1E), second=45 (0x2D), rate=8, settings=0x80 + byte[] response = [0x0C, 0x00, 0xCD, 0x00, 0x66, 0x25, 0x0C, 0x1E, 0x2D, 0x08, 0x80, 0x00]; + + Assert.That(handler.CanHandle(response), Is.True); + + FastClockDataReceivedEventArgs? received = null; + handler.OnFastClockDataReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.Data.Day, Is.EqualTo(0)); + Assert.That(received.Data.Hour, Is.EqualTo(12)); + Assert.That(received.Data.Minute, Is.EqualTo(30)); + Assert.That(received.Data.Second, Is.EqualTo(45)); + Assert.That(received.Data.Rate, Is.EqualTo(8)); + Assert.That(received.Data.IsStopped, Is.False); + Assert.That(received.Data.IsHalted, Is.False); + Assert.That(received.Data.Settings, Is.EqualTo(FastClockSettings.Enabled)); + }); + } + + [Test] + public void Data_DayInHighBits_IsDecoded() + { + FastClockDataResponseHandler handler = new(); + // dayHour = 0x4C => day 2, hour 12 + byte[] response = [0x0C, 0x00, 0xCD, 0x00, 0x66, 0x25, 0x4C, 0x1E, 0x2D, 0x08, 0x80, 0x00]; + + FastClockDataReceivedEventArgs? received = null; + handler.OnFastClockDataReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.Multiple(() => + { + Assert.That(received!.Data.Day, Is.EqualTo(2)); + Assert.That(received.Data.Hour, Is.EqualTo(12)); + }); + } + + [Test] + public void Data_StopAndHaltFlags_AreDecoded() + { + FastClockDataResponseHandler handler = new(); + byte[] response = [0x0C, 0x00, 0xCD, 0x00, 0x66, 0x25, 0x0C, 0x1E, 0xC5, 0x08, 0x80, 0x00]; + + FastClockDataReceivedEventArgs? received = null; + handler.OnFastClockDataReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.Multiple(() => + { + Assert.That(received!.Data.Second, Is.EqualTo(5)); + Assert.That(received.Data.IsStopped, Is.True); + Assert.That(received.Data.IsHalted, Is.True); + }); + } + + [Test] + public void Data_RejectsOtherHeaders() + { + FastClockDataResponseHandler handler = new(); + Assert.That(handler.CanHandle([0x0C, 0x00, 0xCE, 0x00, 0x66, 0x25, 0x0C, 0x1E, 0x2D, 0x08, 0x80, 0x00]), Is.False); + Assert.That(handler.CanHandle([0x00]), Is.False); + } + + [Test] + public void Settings_DecodesFields() + { + FastClockSettingsResponseHandler handler = new(); + byte[] response = [0x08, 0x00, 0xCE, 0x00, 0x4F, 0x01, 0x0C, 0x1E]; + + Assert.That(handler.CanHandle(response), Is.True); + + FastClockSettingsReceivedEventArgs? received = null; + handler.OnFastClockSettingsReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.Multiple(() => + { + Assert.That(received!.Settings.Settings, Is.EqualTo((FastClockSettings)0x4F)); + Assert.That(received.Settings.Rate, Is.EqualTo(1)); + Assert.That(received.Settings.StartDayHour, Is.EqualTo(0x0C)); + Assert.That(received.Settings.StartMinute, Is.EqualTo(0x1E)); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Feedback/RmBusDataChangedResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Feedback/RmBusDataChangedResponseHandlerTest.cs new file mode 100644 index 0000000..66dc538 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Feedback/RmBusDataChangedResponseHandlerTest.cs @@ -0,0 +1,46 @@ +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.Feedback; + +namespace Z21.UnitTest.Core.ResponseHandler.Feedback +{ + public class RmBusDataChangedResponseHandlerTest + { + private RmBusDataChangedResponseHandler _handler = null!; + + [SetUp] + public void Setup() => _handler = new(); + + [Test] + public void CanHandle_ValidResponse_ReturnsTrue() + { + byte[] validResponse = [0x0F, 0x00, 0x80, 0x00, 0x01, 0x01, 0x00, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; + Assert.That(_handler.CanHandle(validResponse), Is.True); + } + + [Test] + [TestCase(new byte[] { 0x0F, 0x00, 0x81, 0x00, 0x01, 0x01, 0x00, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, TestName = "Wrong header")] + [TestCase(new byte[] { 0x00 }, TestName = "Response too small")] + public void CanHandle_InvalidResponse_ReturnsFalse(byte[] response) + { + Assert.That(_handler.CanHandle(response), Is.False); + } + + [Test] + public void Handle_ValidResponse_RaisesGroupIndexAndStates() + { + byte[] response = [0x0F, 0x00, 0x80, 0x00, 0x01, 0x01, 0x00, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; + + RmBusDataReceivedEventArgs? received = null; + _handler.OnRmBusDataReceived += (_, args) => received = args; + + _handler.Handle(response); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.GroupIndex, Is.EqualTo(1)); + Assert.That(received.FeedbackStates, Is.EqualTo(new byte[] { 0x01, 0x00, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/LocoNet/LocoNetResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/LocoNet/LocoNetResponseHandlerTest.cs new file mode 100644 index 0000000..85ee440 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/LocoNet/LocoNetResponseHandlerTest.cs @@ -0,0 +1,101 @@ +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.LocoNet; + +namespace Z21.UnitTest.Core.ResponseHandler.LocoNet +{ + public class LocoNetResponseHandlerTest + { + [Test] + public void Receive_CanHandleAndExtractsMessage() + { + LocoNetReceiveResponseHandler handler = new(); + byte[] response = [0x07, 0x00, 0xA0, 0x00, 0xB0, 0x01, 0x60]; + + Assert.That(handler.CanHandle(response), Is.True); + + LocoNetMessageReceivedEventArgs? received = null; + handler.OnLocoNetMessageReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received, Is.Not.Null); + Assert.That(received!.Message, Is.EqualTo(new byte[] { 0xB0, 0x01, 0x60 })); + } + + [Test] + public void Receive_RejectsOtherHeaders() + { + LocoNetReceiveResponseHandler handler = new(); + Assert.That(handler.CanHandle([0x07, 0x00, 0xA1, 0x00, 0xB0, 0x01, 0x60]), Is.False); + Assert.That(handler.CanHandle([0x00]), Is.False); + } + + [Test] + public void Transmit_CanHandleAndExtractsMessage() + { + LocoNetTransmitResponseHandler handler = new(); + byte[] response = [0x07, 0x00, 0xA1, 0x00, 0xB0, 0x01, 0x60]; + + Assert.That(handler.CanHandle(response), Is.True); + + LocoNetMessageReceivedEventArgs? received = null; + handler.OnLocoNetMessageReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received!.Message, Is.EqualTo(new byte[] { 0xB0, 0x01, 0x60 })); + } + + [Test] + public void FromLan_CanHandleAndExtractsMessage() + { + LocoNetFromLanResponseHandler handler = new(); + byte[] response = [0x07, 0x00, 0xA2, 0x00, 0xB0, 0x01, 0x60]; + + Assert.That(handler.CanHandle(response), Is.True); + + LocoNetMessageReceivedEventArgs? received = null; + handler.OnLocoNetMessageReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.That(received!.Message, Is.EqualTo(new byte[] { 0xB0, 0x01, 0x60 })); + } + + [Test] + public void DispatchAddress_DecodesAddressAndSlot() + { + LocoNetDispatchAddressResponseHandler handler = new(); + byte[] response = [0x07, 0x00, 0xA3, 0x00, 0x03, 0x00, 0x0B]; + + Assert.That(handler.CanHandle(response), Is.True); + + LocoNetDispatchAddressReceivedEventArgs? received = null; + handler.OnLocoNetDispatchAddressReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.Multiple(() => + { + Assert.That(received!.LocoAddress, Is.EqualTo(3)); + Assert.That(received.Slot, Is.EqualTo(11)); + }); + } + + [Test] + public void Detector_DecodesTypeAddressAndInfo() + { + LocoNetDetectorResponseHandler handler = new(); + byte[] response = [0x08, 0x00, 0xA4, 0x00, 0x01, 0xF8, 0x03, 0x01]; + + Assert.That(handler.CanHandle(response), Is.True); + + LocoNetDetectorReceivedEventArgs? received = null; + handler.OnLocoNetDetectorReceived += (_, args) => received = args; + handler.Handle(response); + + Assert.Multiple(() => + { + Assert.That(received!.Type, Is.EqualTo(0x01)); + Assert.That(received.ReportAddress, Is.EqualTo(1016)); + Assert.That(received.Info, Is.EqualTo(new byte[] { 0x01 })); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/NewHandlerContractTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/NewHandlerContractTest.cs new file mode 100644 index 0000000..38eb3bf --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/NewHandlerContractTest.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using Z21.Core.Codecs; +using Z21.Core.ResponseHandler; +using Z21.Core.ResponseHandler.Booster; +using Z21.Core.ResponseHandler.Can; +using Z21.Core.ResponseHandler.Decoder; +using Z21.Core.ResponseHandler.FastClock; +using Z21.Core.ResponseHandler.Feedback; +using Z21.Core.ResponseHandler.LocoNet; +using Z21.Core.ResponseHandler.Programming; +using Z21.Core.ResponseHandler.RailCom; +using Z21.Core.ResponseHandler.ZLink; +using Z21.Core.ResponseParser; + +namespace Z21.UnitTest.Core.ResponseHandler +{ + public class NewHandlerContractTest + { + private static byte[] Frame(int length, byte header) + { + byte[] frame = new byte[length]; + frame[2] = header; + frame[3] = 0x00; + return frame; + } + + private static IEnumerable Handlers() + { + TestCaseData Case(string name, IZ21ResponseHandler handler, byte[] valid) => new TestCaseData(handler, valid).SetName(name); + + yield return Case("CvResult", new CvResultResponseHandler(new AddressCodec()), Set(Frame(6, 0x40), (4, 0x64), (5, 0x14))); + yield return Case("CvNack", new CvNackResponseHandler(), Set(Frame(6, 0x40), (4, 0x61), (5, 0x13))); + yield return Case("CvNackSc", new CvNackShortCircuitResponseHandler(), Set(Frame(6, 0x40), (4, 0x61), (5, 0x12))); + yield return Case("RmBus", new RmBusDataChangedResponseHandler(), Frame(15, 0x80)); + yield return Case("RailCom", new RailComDataChangedResponseHandler(new RailComDataParser()), Frame(17, 0x88)); + yield return Case("LocoNetRx", new LocoNetReceiveResponseHandler(), Frame(4, 0xA0)); + yield return Case("LocoNetTx", new LocoNetTransmitResponseHandler(), Frame(4, 0xA1)); + yield return Case("LocoNetFromLan", new LocoNetFromLanResponseHandler(), Frame(4, 0xA2)); + yield return Case("LocoNetDispatch", new LocoNetDispatchAddressResponseHandler(), Frame(7, 0xA3)); + yield return Case("LocoNetDetector", new LocoNetDetectorResponseHandler(), Frame(7, 0xA4)); + yield return Case("CanDetector", new CanDetectorResponseHandler(), Frame(14, 0xC4)); + yield return Case("CanDeviceDescription", new CanDeviceDescriptionResponseHandler(), Frame(22, 0xC8)); + yield return Case("CanBoosterState", new CanBoosterSystemStateResponseHandler(), Frame(14, 0xCA)); + yield return Case("FastClockData", new FastClockDataResponseHandler(), Frame(12, 0xCD)); + yield return Case("FastClockSettings", new FastClockSettingsResponseHandler(), Frame(8, 0xCE)); + yield return Case("BoosterDescription", new BoosterDescriptionResponseHandler(), Frame(36, 0xB8)); + yield return Case("BoosterState", new BoosterSystemStateResponseHandler(), Frame(28, 0xBA)); + yield return Case("DecoderDescription", new DecoderDescriptionResponseHandler(), Frame(36, 0xD8)); + yield return Case("DecoderState", new DecoderSystemStateResponseHandler(new SwitchDecoderSystemStateParser(), new SignalDecoderSystemStateParser()), Frame(48, 0xDA)); + yield return Case("ZLinkHwInfo", new ZLinkHardwareInfoResponseHandler(new ZLinkHardwareInfoParser()), Set(Frame(63, 0xE8), (4, 0x06))); + } + + private static byte[] Set(byte[] frame, params (int index, byte value)[] overrides) + { + foreach ((int index, byte value) in overrides) + frame[index] = value; + return frame; + } + + [TestCaseSource(nameof(Handlers))] + public void Handler_NameIsNotEmpty(IZ21ResponseHandler handler, byte[] valid) + { + Assert.That(handler.Name, Is.Not.Empty); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_ValidMinLengthFrame_ReturnsTrue(IZ21ResponseHandler handler, byte[] valid) + { + Assert.That(handler.CanHandle(valid), Is.True); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_TooShortFrame_ReturnsFalse(IZ21ResponseHandler handler, byte[] valid) + { + Assert.That(handler.CanHandle([0x00, 0x00]), Is.False); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_WrongHeaderByte_ReturnsFalse(IZ21ResponseHandler handler, byte[] valid) + { + byte[] wrong = (byte[])valid.Clone(); + wrong[2] ^= 0xFF; + Assert.That(handler.CanHandle(wrong), Is.False); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_WrongHeaderHighByte_ReturnsFalse(IZ21ResponseHandler handler, byte[] valid) + { + byte[] wrong = (byte[])valid.Clone(); + wrong[3] = 0x01; + Assert.That(handler.CanHandle(wrong), Is.False); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/PreExistingHandlerContractTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/PreExistingHandlerContractTest.cs new file mode 100644 index 0000000..a2436c6 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/PreExistingHandlerContractTest.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using Z21.Core.ResponseParser; +using Z21.Core.ResponseHandler; +using Z21.Core.ResponseHandler.SystemState; +using Z21.Core.ResponseHandler.SystemState.TrackPower; + +namespace Z21.UnitTest.Core.ResponseHandler +{ + public class PreExistingHandlerContractTest + { + private static IEnumerable Handlers() + { + TestCaseData Case(string name, IZ21ResponseHandler handler, byte[] valid, int xHeaderIndex) => + new TestCaseData(handler, valid, xHeaderIndex).SetName(name); + + yield return Case("TrackShort", new TrackShortResponseHandler(), new byte[] { 0x00, 0x00, 0x40, 0x00, 0x61, 0x08 }, 4); + yield return Case("TrackPowerOn", new TrackPowerOnResponseHandler(), new byte[] { 0x00, 0x00, 0x40, 0x00, 0x61, 0x01 }, 4); + yield return Case("TrackPowerOff", new TrackPowerOffResponseHandler(), new byte[] { 0x00, 0x00, 0x40, 0x00, 0x61, 0x00 }, 4); + yield return Case("ProgrammingMode", new ProgrammingModeResponseHandler(), new byte[] { 0x00, 0x00, 0x40, 0x00, 0x61, 0x02 }, 4); + yield return Case("Stopped", new StoppedResponseHandler(), new byte[] { 0x00, 0x00, 0x40, 0x00, 0x81, 0x00 }, 4); + yield return Case("UnknownCommand", new UnknownCommandResponseHandler(), new byte[] { 0x00, 0x00, 0x40, 0x00, 0x61, 0x82 }, 4); + yield return Case("Version", new VersionResponseHandler(), new byte[] { 0x00, 0x00, 0x40, 0x00, 0x63, 0x21 }, 4); + yield return Case("Firmware", new FirmwareVersionResponseHandler(), new byte[] { 0x00, 0x00, 0x40, 0x00, 0xF3, 0x0A, 0x00, 0x00, 0xF9 }, 4); + yield return Case("StatusChanged", new StatusChangedResponseHandler(new CentralStateResponseParser()), new byte[] { 0x00, 0x00, 0x40, 0x00, 0x62, 0x22, 0x00, 0x40 }, 4); + } + + [TestCaseSource(nameof(Handlers))] + public void Handler_NameIsNotEmpty(IZ21ResponseHandler handler, byte[] valid, int xHeaderIndex) + { + Assert.That(handler.Name, Is.Not.Empty); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_ValidFrame_ReturnsTrue(IZ21ResponseHandler handler, byte[] valid, int xHeaderIndex) + { + Assert.That(handler.CanHandle(valid), Is.True); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_TooShortFrame_ReturnsFalse(IZ21ResponseHandler handler, byte[] valid, int xHeaderIndex) + { + Assert.That(handler.CanHandle([0x00, 0x00]), Is.False); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_WrongLanHeader_ReturnsFalse(IZ21ResponseHandler handler, byte[] valid, int xHeaderIndex) + { + byte[] wrong = (byte[])valid.Clone(); + wrong[2] = 0x41; + Assert.That(handler.CanHandle(wrong), Is.False); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_WrongXHeader_ReturnsFalse(IZ21ResponseHandler handler, byte[] valid, int xHeaderIndex) + { + byte[] wrong = (byte[])valid.Clone(); + wrong[xHeaderIndex] ^= 0xFF; + Assert.That(handler.CanHandle(wrong), Is.False); + } + + [TestCaseSource(nameof(Handlers))] + public void CanHandle_WrongDb0_ReturnsFalse(IZ21ResponseHandler handler, byte[] valid, int xHeaderIndex) + { + byte[] wrong = (byte[])valid.Clone(); + wrong[xHeaderIndex + 1] ^= 0xFF; + Assert.That(handler.CanHandle(wrong), Is.False); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvNackResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvNackResponseHandlerTest.cs new file mode 100644 index 0000000..45a14c1 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvNackResponseHandlerTest.cs @@ -0,0 +1,40 @@ +using Z21.Core.ResponseHandler.Programming; + +namespace Z21.UnitTest.Core.ResponseHandler.Programming +{ + public class CvNackResponseHandlerTest + { + private CvNackResponseHandler _handler = null!; + + [SetUp] + public void Setup() => _handler = new(); + + [Test] + public void CanHandle_ValidResponse_ReturnsTrue() + { + byte[] validResponse = [0x07, 0x00, 0x40, 0x00, 0x61, 0x13, 0x72]; + Assert.That(_handler.CanHandle(validResponse), Is.True); + } + + [Test] + [TestCase(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x61, 0x12, 0x73 }, TestName = "Short circuit nack")] + [TestCase(new byte[] { 0x00 }, TestName = "Response too small")] + public void CanHandle_InvalidResponse_ReturnsFalse(byte[] response) + { + Assert.That(_handler.CanHandle(response), Is.False); + } + + [Test] + public void Handle_ValidResponse_RaisesEvent() + { + byte[] response = [0x07, 0x00, 0x40, 0x00, 0x61, 0x13, 0x72]; + + bool raised = false; + _handler.OnCvNackReceived += (_, _) => raised = true; + + _handler.Handle(response); + + Assert.That(raised, Is.True); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvNackShortCircuitResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvNackShortCircuitResponseHandlerTest.cs new file mode 100644 index 0000000..fdf6f17 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvNackShortCircuitResponseHandlerTest.cs @@ -0,0 +1,40 @@ +using Z21.Core.ResponseHandler.Programming; + +namespace Z21.UnitTest.Core.ResponseHandler.Programming +{ + public class CvNackShortCircuitResponseHandlerTest + { + private CvNackShortCircuitResponseHandler _handler = null!; + + [SetUp] + public void Setup() => _handler = new(); + + [Test] + public void CanHandle_ValidResponse_ReturnsTrue() + { + byte[] validResponse = [0x07, 0x00, 0x40, 0x00, 0x61, 0x12, 0x73]; + Assert.That(_handler.CanHandle(validResponse), Is.True); + } + + [Test] + [TestCase(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x61, 0x13, 0x72 }, TestName = "Plain nack")] + [TestCase(new byte[] { 0x00 }, TestName = "Response too small")] + public void CanHandle_InvalidResponse_ReturnsFalse(byte[] response) + { + Assert.That(_handler.CanHandle(response), Is.False); + } + + [Test] + public void Handle_ValidResponse_RaisesEvent() + { + byte[] response = [0x07, 0x00, 0x40, 0x00, 0x61, 0x12, 0x73]; + + bool raised = false; + _handler.OnCvNackShortCircuitReceived += (_, _) => raised = true; + + _handler.Handle(response); + + Assert.That(raised, Is.True); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvResultResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvResultResponseHandlerTest.cs new file mode 100644 index 0000000..c04bede --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Programming/CvResultResponseHandlerTest.cs @@ -0,0 +1,47 @@ +using Z21.Core.Codecs; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.Programming; + +namespace Z21.UnitTest.Core.ResponseHandler.Programming +{ + public class CvResultResponseHandlerTest + { + private CvResultResponseHandler _handler = null!; + + [SetUp] + public void Setup() => _handler = new(new AddressCodec()); + + [Test] + public void CanHandle_ValidResponse_ReturnsTrue() + { + byte[] validResponse = [0x0A, 0x00, 0x40, 0x00, 0x64, 0x14, 0x00, 0x1C, 0x05, 0x00]; + Assert.That(_handler.CanHandle(validResponse), Is.True); + } + + [Test] + [TestCase(new byte[] { 0x0A, 0x00, 0x40, 0x00, 0x64, 0x13, 0x00, 0x1C, 0x05, 0x00 }, TestName = "Wrong DB0")] + [TestCase(new byte[] { 0x00 }, TestName = "Response too small")] + public void CanHandle_InvalidResponse_ReturnsFalse(byte[] response) + { + Assert.That(_handler.CanHandle(response), Is.False); + } + + [Test] + public void Handle_ValidResponse_RaisesEventWithCvAndValue() + { + byte[] response = [0x0A, 0x00, 0x40, 0x00, 0x64, 0x14, 0x00, 0x1C, 0x05, 0x00]; + + CvResultReceivedEventArgs? received = null; + _handler.OnCvResultReceived += (_, args) => received = args; + + _handler.Handle(response); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.CvAddress, Is.EqualTo(28)); + Assert.That(received.Value, Is.EqualTo(5)); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/RailCom/RailComDataChangedResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/RailCom/RailComDataChangedResponseHandlerTest.cs new file mode 100644 index 0000000..959f334 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/RailCom/RailComDataChangedResponseHandlerTest.cs @@ -0,0 +1,48 @@ +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.RailCom; +using Z21.Core.ResponseParser; + +namespace Z21.UnitTest.Core.ResponseHandler.RailCom +{ + public class RailComDataChangedResponseHandlerTest + { + private RailComDataChangedResponseHandler _handler = null!; + + [SetUp] + public void Setup() => _handler = new(new RailComDataParser()); + + [Test] + public void CanHandle_ValidResponse_ReturnsTrue() + { + byte[] valid = [0x11, 0x00, 0x88, 0x00, 0x03, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x50, 0x0A, 0x00]; + Assert.That(_handler.CanHandle(valid), Is.True); + } + + [Test] + [TestCase(new byte[] { 0x11, 0x00, 0x80, 0x00, 0x03, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x50, 0x0A, 0x00 }, TestName = "Wrong header")] + [TestCase(new byte[] { 0x00 }, TestName = "Response too small")] + public void CanHandle_InvalidResponse_ReturnsFalse(byte[] response) + { + Assert.That(_handler.CanHandle(response), Is.False); + } + + [Test] + public void Handle_ValidResponse_RaisesParsedData() + { + byte[] response = [0x11, 0x00, 0x88, 0x00, 0x03, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x50, 0x0A, 0x00]; + + RailComDataReceivedEventArgs? received = null; + _handler.OnRailComDataReceived += (_, args) => received = args; + + _handler.Handle(response); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.Data.LocoAddress, Is.EqualTo(3)); + Assert.That(received.Data.Speed, Is.EqualTo(80)); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Switching/ExtAccessoryInfoResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Switching/ExtAccessoryInfoResponseHandlerTest.cs index b22fdb6..5ab8470 100644 --- a/src/Z21.Client.UnitTest/Core/ResponseHandler/Switching/ExtAccessoryInfoResponseHandlerTest.cs +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Switching/ExtAccessoryInfoResponseHandlerTest.cs @@ -1,3 +1,4 @@ +using Z21.Core.Codecs; using Z21.Core.Model; using Z21.Core.Model.EventArgs; using Z21.Core.ResponseHandler.Switching; @@ -11,7 +12,7 @@ public class ExtAccessoryInfoResponseHandlerTest [SetUp] public void Setup() { - _handler = new(); + _handler = new(new AddressCodec()); } [Test] @@ -53,7 +54,7 @@ public void Handle_ValidResponse_RaisesEventWithCorrectArgs(byte db2, byte db3, Assert.That(handler, Is.EqualTo(_handler)); Assert.That(receivedArgs, Is.Not.Null); - Assert.That(receivedArgs.AccessoryAddress, Is.EqualTo(48)); + Assert.That(receivedArgs.AccessoryAddress, Is.EqualTo(44)); Assert.That(receivedArgs.EncodedState, Is.EqualTo(db2)); Assert.That(receivedArgs.DataValid, Is.EqualTo(validData)); } diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/Switching/TurnoutInfoResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/Switching/TurnoutInfoResponseHandlerTest.cs index 547d5c4..83c0f45 100644 --- a/src/Z21.Client.UnitTest/Core/ResponseHandler/Switching/TurnoutInfoResponseHandlerTest.cs +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/Switching/TurnoutInfoResponseHandlerTest.cs @@ -1,3 +1,4 @@ +using Z21.Core.Codecs; using Z21.Core.Model; using Z21.Core.Model.EventArgs; using Z21.Core.ResponseHandler.Switching; @@ -11,7 +12,7 @@ public class TurnoutInfoResponseHandlerTest [SetUp] public void Setup() { - _handler = new(); + _handler = new(new AddressCodec()); } [Test] diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/SystemState/HardwareInfoResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/SystemState/HardwareInfoResponseHandlerTest.cs index 0593acf..8f9e852 100644 --- a/src/Z21.Client.UnitTest/Core/ResponseHandler/SystemState/HardwareInfoResponseHandlerTest.cs +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/SystemState/HardwareInfoResponseHandlerTest.cs @@ -55,6 +55,8 @@ public void Handle_ValidResponse_RaisesEventWithCorrectArgs() Assert.That(handler, Is.EqualTo(_handler)); Assert.That(receivedArgs, Is.Not.Null); Assert.That(receivedArgs.Z21HardwareType, Is.EqualTo(Z21HardwareType.z21Start)); + // FW Version bytes 43 01 00 00 => 0x0143 (BCD "1.43") per spec §2.20. + Assert.That(receivedArgs.FirmwareVersion, Is.EqualTo(0x0143)); } } } \ No newline at end of file diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/SystemState/SystemStateDataChangedResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/SystemState/SystemStateDataChangedResponseHandlerTest.cs index 7a11c21..9fabe99 100644 --- a/src/Z21.Client.UnitTest/Core/ResponseHandler/SystemState/SystemStateDataChangedResponseHandlerTest.cs +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/SystemState/SystemStateDataChangedResponseHandlerTest.cs @@ -51,7 +51,7 @@ public void Handle_ValidResponse_RaisesEventWithCorrectArgs() handler = sender as SystemStateDataChangedResponseHandler; }; - Z21.Core.Model.SystemState systemState = new() { CentralState = null!, CentralStateEx = null! }; + CommandStation.Model.SystemState systemState = new() { CentralState = null!, CentralStateEx = null! }; _systemStateResponseParserMock.Setup(parser => parser.Parse(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x83, 0x45, 0x83, 0x45, 0x00, 0x00, 0x00, 0x7B })) .Returns(systemState) diff --git a/src/Z21.Client.UnitTest/Core/ResponseHandler/ZLink/ZLinkHardwareInfoResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/ResponseHandler/ZLink/ZLinkHardwareInfoResponseHandlerTest.cs new file mode 100644 index 0000000..18420b4 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseHandler/ZLink/ZLinkHardwareInfoResponseHandlerTest.cs @@ -0,0 +1,94 @@ +using System.Text; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.ZLink; +using Z21.Core.ResponseParser; + +namespace Z21.UnitTest.Core.ResponseHandler.ZLink +{ + public class ZLinkHardwareInfoResponseHandlerTest + { + private ZLinkHardwareInfoResponseHandler _handler = null!; + + [SetUp] + public void Setup() => _handler = new(new ZLinkHardwareInfoParser()); + + private static byte[] BuildFrame() + { + byte[] frame = new byte[63]; + frame[0] = 0x3F; + frame[2] = 0xE8; + frame[4] = 0x06; + frame[5] = 0x91; frame[6] = 0x01; // HwID 401 + frame[7] = 0x01; // major + frame[8] = 0x01; // minor + frame[9] = 0x91; frame[10] = 0x0C; // build 3217 + Encoding.Latin1.GetBytes("EC FA BC", 0, 8, frame, 11); // MAC + Encoding.Latin1.GetBytes("device", 0, 6, frame, 29); // Name + return frame; + } + + [Test] + public void CanHandle_ValidResponse_ReturnsTrue() + { + Assert.That(_handler.CanHandle(BuildFrame()), Is.True); + } + + [Test] + public void CanHandle_RejectsOtherFrames() + { + Assert.That(_handler.CanHandle([0x00]), Is.False); + byte[] wrong = new byte[63]; + wrong[2] = 0xE8; + wrong[4] = 0x07; + Assert.That(_handler.CanHandle(wrong), Is.False); + } + + [Test] + public void Handle_NameWithoutTerminator_KeepsFullLength() + { + byte[] frame = BuildFrame(); + for (int i = 29; i < 62; i++) + frame[i] = (byte)'X'; + + ZLinkHardwareInfoReceivedEventArgs? received = null; + _handler.OnZLinkHardwareInfoReceived += (_, args) => received = args; + _handler.Handle(frame); + + Assert.That(received!.Info.Name, Has.Length.EqualTo(33)); + } + + [Test] + public void Handle_NameStartingWithTerminator_IsEmpty() + { + byte[] frame = BuildFrame(); + for (int i = 29; i < 62; i++) + frame[i] = 0x00; + + ZLinkHardwareInfoReceivedEventArgs? received = null; + _handler.OnZLinkHardwareInfoReceived += (_, args) => received = args; + _handler.Handle(frame); + + Assert.That(received!.Info.Name, Is.Empty); + } + + [Test] + public void Handle_DecodesAllFields() + { + ZLinkHardwareInfoReceivedEventArgs? received = null; + _handler.OnZLinkHardwareInfoReceived += (_, args) => received = args; + + _handler.Handle(BuildFrame()); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.Info.HardwareId, Is.EqualTo(401)); + Assert.That(received.Info.FirmwareMajor, Is.EqualTo(1)); + Assert.That(received.Info.FirmwareMinor, Is.EqualTo(1)); + Assert.That(received.Info.FirmwareBuild, Is.EqualTo(3217)); + Assert.That(received.Info.MacAddress, Is.EqualTo("EC FA BC")); + Assert.That(received.Info.Name, Is.EqualTo("device")); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/ResponseParser/RailComDataParserTest.cs b/src/Z21.Client.UnitTest/Core/ResponseParser/RailComDataParserTest.cs new file mode 100644 index 0000000..a568fdc --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/ResponseParser/RailComDataParserTest.cs @@ -0,0 +1,31 @@ +using Z21.Core.Model; +using Z21.Core.ResponseParser; + +namespace Z21.UnitTest.Core.ResponseParser +{ + public class RailComDataParserTest + { + private RailComDataParser _parser = null!; + + [SetUp] + public void SetUp() => _parser = new(); + + [Test] + public void Parse_ReadsAllFields() + { + byte[] data = [0x03, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x50, 0x0A, 0x00]; + + RailComData result = _parser.Parse(data); + + Assert.Multiple(() => + { + Assert.That(result.LocoAddress, Is.EqualTo(3)); + Assert.That(result.ReceiveCounter, Is.EqualTo(255u)); + Assert.That(result.ErrorCounter, Is.EqualTo(2)); + Assert.That(result.Options, Is.EqualTo(RailComOptions.Speed1 | RailComOptions.QoS)); + Assert.That(result.Speed, Is.EqualTo(80)); + Assert.That(result.QualityOfService, Is.EqualTo(10)); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Z21CommandStationTest.cs b/src/Z21.Client.UnitTest/Core/Z21CommandStationTest.cs new file mode 100644 index 0000000..e1f2f30 --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Z21CommandStationTest.cs @@ -0,0 +1,372 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using CommandStation.Model; +using Moq; +using Z21.Core; +using Z21.Core.Codecs; +using Z21.Core.Command; +using Z21.Core.Command.Driving; +using Z21.Core.Command.FastClock; +using Z21.Core.Command.Feedback; +using Z21.Core.Command.Programming; +using Z21.Core.Command.Switching; +using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState.TrackPower; +using Z21.Core.Exception; +using Z21.Core.Framing; +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler; +using Z21.Core.ResponseHandler.Driving; +using Z21.Core.ResponseHandler.FastClock; +using Z21.Core.ResponseHandler.Feedback; +using Z21.Core.ResponseHandler.Programming; +using Z21.Core.ResponseHandler.Switching; +using Z21.Core.ResponseHandler.SystemState; +using Z21.Core.ResponseHandler.SystemState.TrackPower; +using FastClockActionEnum = Z21.Core.Model.FastClockAction; + +namespace Z21.UnitTest.Core +{ + public class Z21CommandStationTest + { + private FakeTransport _transport = null!; + private IZ21CommandFactory _factory = null!; + private Mock _locoInfo = null!; + private Mock _turnoutInfo = null!; + private Mock _extAccessory = null!; + private Mock _systemState = null!; + private Mock _firmware = null!; + private Mock _statusChanged = null!; + private Mock _trackPowerOn = null!; + private Mock _trackPowerOff = null!; + private Mock _cvResult = null!; + private Mock _cvNack = null!; + private Mock _cvNackSc = null!; + private Mock _rmBus = null!; + private Mock _fastClock = null!; + private Z21CommandStation _station = null!; + + [SetUp] + public void SetUp() + { + _transport = new FakeTransport(); + _factory = new Z21CommandFactory(new Z21FrameBuilder(), new AddressCodec(), new LocoSpeedCodec()); + _locoInfo = new Mock(); + _turnoutInfo = new Mock(); + _extAccessory = new Mock(); + _systemState = new Mock(); + _firmware = new Mock(); + _statusChanged = new Mock(); + _trackPowerOn = new Mock(); + _trackPowerOff = new Mock(); + _cvResult = new Mock(); + _cvNack = new Mock(); + _cvNackSc = new Mock(); + _rmBus = new Mock(); + _fastClock = new Mock(); + + Z21ResponseHandler dispatcher = new(_transport, new Z21FrameReader(), new List()); + + _station = new Z21CommandStation( + _transport, + dispatcher, + _factory, + new Z21Options(), + _locoInfo.Object, + _turnoutInfo.Object, + _extAccessory.Object, + _systemState.Object, + _firmware.Object, + _statusChanged.Object, + _trackPowerOn.Object, + _trackPowerOff.Object, + _cvResult.Object, + _cvNack.Object, + _cvNackSc.Object, + _rmBus.Object, + _fastClock.Object); + } + + [TearDown] + public void TearDown() => _station.Dispose(); + + private static IEnumerable SendCases() + { + TestCaseData Case(string name, Func invoke, Func expected) => + new TestCaseData(invoke, expected).SetName(name); + + yield return Case("Drive", s => s.DriveAsync(3, DccSpeedMode.Steps128, DrivingDirection.Forward, 1), + f => f.Create(DccSpeedMode.Steps128, (ushort)3, DrivingDirection.Forward, (ushort)1)); + yield return Case("EmergencyStop", s => s.EmergencyStopAsync(3), f => f.Create((ushort)3)); + yield return Case("SetFunction", s => s.SetFunctionAsync(3, 1, FunctionToggleType.On), + f => f.Create((ushort)3, (ushort)1, FunctionToggleType.On)); + yield return Case("Purge", s => s.PurgeAsync(3), f => f.Create((ushort)3)); + yield return Case("RequestLocoInfo", s => s.RequestLocoInfoAsync(3), f => f.Create((ushort)3)); + yield return Case("SetTurnout", s => s.SetTurnoutAsync(3, AccessoryOutput.Output1, AccessoryState.Activate, true), + f => f.Create((ushort)3, AccessoryOutput.Output1, AccessoryState.Activate, true)); + yield return Case("SetExtAccessory", s => s.SetExtAccessoryAsync(1, 5), f => f.Create((ushort)1, (byte)5)); + yield return Case("RequestTurnoutInfo", s => s.RequestTurnoutInfoAsync(3), f => f.Create((ushort)3)); + yield return Case("RequestExtAccessoryInfo", s => s.RequestExtAccessoryInfoAsync(1), f => f.Create((ushort)1)); + yield return Case("TrackPowerOn", s => s.TrackPowerOnAsync(), f => f.Create()); + yield return Case("TrackPowerOff", s => s.TrackPowerOffAsync(), f => f.Create()); + yield return Case("EmergencyStopAll", s => s.EmergencyStopAllAsync(), f => f.Create()); + yield return Case("RequestSystemState", s => s.RequestSystemStateAsync(), f => f.Create()); + yield return Case("RequestFirmwareVersion", s => s.RequestFirmwareVersionAsync(), f => f.Create()); + yield return Case("RequestStatus", s => s.RequestStatusAsync(), f => f.Create()); + yield return Case("ReadCv", s => s.ReadCvAsync(28), f => f.Create((ushort)28)); + yield return Case("WriteCv", s => s.WriteCvAsync(28, 5), f => f.Create((ushort)28, (byte)5)); + yield return Case("RequestFeedback", s => s.RequestFeedbackAsync(1), f => f.Create((byte)1)); + yield return Case("RequestModelTime", s => s.RequestModelTimeAsync(), f => f.Create(FastClockActionEnum.Read)); + yield return Case("SetModelTime", s => s.SetModelTimeAsync(new ModelTime(0, 12, 30, 0, 8)), + f => f.Create(new ModelTime(0, 12, 30, 0, 8))); + yield return Case("StartModelTime", s => s.StartModelTimeAsync(), f => f.Create(FastClockActionEnum.Start)); + yield return Case("StopModelTime", s => s.StopModelTimeAsync(), f => f.Create(FastClockActionEnum.Stop)); + } + + [TestCaseSource(nameof(SendCases))] + public async Task SendMethods_SendExpectedDatagram(Func invoke, Func expected) + { + await _station.ConnectAsync(); + _transport.Sent.Clear(); + + await invoke(_station); + + Assert.That(_transport.Sent.Single(), Is.EqualTo(expected(_factory).Data)); + } + + [Test] + public void SendCommandsAsync_WhenNotConnected_ThrowsNotConnectedException() + { + Assert.ThrowsAsync(() => _station.DriveAsync(3, DccSpeedMode.Steps128, DrivingDirection.Forward, 1)); + Assert.That(_transport.IsConnected, Is.False, "send must not implicitly connect"); + } + + [Test] + public async Task ConnectionLost_StopsKeepAlive_NoSpuriousSends() + { + // Build a station with a fast keep-alive so the timer would fire well within the test window. + Z21ResponseHandler dispatcher = new(_transport, new Z21FrameReader(), new List()); + using Z21CommandStation station = new( + _transport, + dispatcher, + _factory, + new Z21Options { KeepAliveInterval = TimeSpan.FromMilliseconds(100) }, + _locoInfo.Object, _turnoutInfo.Object, _extAccessory.Object, _systemState.Object, + _firmware.Object, _statusChanged.Object, _trackPowerOn.Object, _trackPowerOff.Object, + _cvResult.Object, _cvNack.Object, _cvNackSc.Object, _rmBus.Object, _fastClock.Object); + + await station.ConnectAsync(); // arms the keep-alive timer + _transport.RaiseConnectionLost(); // socket-level loss must stop the keep-alive + _transport.SetConnected(true); // transport reconnects on its own; the station did not re-arm anything + _transport.Sent.Clear(); + + await Task.Delay(TimeSpan.FromMilliseconds(500)); // > 4 keep-alive intervals + + Assert.That(_transport.Sent, Is.Empty, "a lost connection must stop the keep-alive timer (no spurious keep-alive sends)"); + } + + [Test] + public async Task SendAfterDisconnect_ThrowsAndDoesNotReconnect() + { + await _station.ConnectAsync(); + await _station.DisconnectAsync(); + + Assert.ThrowsAsync(() => _station.TrackPowerOnAsync()); + Assert.That(_transport.IsConnected, Is.False, "disconnect must be authoritative"); + } + + [Test] + public async Task ConnectAsync_SendsLogonAndSetsConnected() + { + await _station.ConnectAsync(); + + Assert.That(_station.IsConnected, Is.True); + byte[] expected = _factory.Create(new Z21Options().BroadcastFlags).Data + .Concat(_factory.Create().Data).ToArray(); + Assert.That(_transport.Sent.Single(), Is.EqualTo(expected), "logon should send broadcast flags + firmware query in one packet"); + } + + [Test] + public void LocoInfoReceived_FromHandler_IsReRaisedWithSameData() + { + LocoInfoData data = new() + { + LocoAddress = 3, + LocoFunctionsData = new List(), + DccSpeedMode = DccSpeedMode.Steps128, + DecoderMode = DecoderMode.DCC, + DrivingDirection = DrivingDirection.Forward, + LocoSpeed = 1, + LocoIsBusy = false, + LocoContainedInDoubleTraction = false, + SmartSearch = false + }; + LocoInfoData? received = null; + _station.LocoInfoReceived += (_, d) => received = d; + + _locoInfo.Raise(handler => handler.OnLocoInfoReceived += null, new LocoInfoReceivedEventArgs(data)); + + Assert.That(received, Is.SameAs(data)); + } + + [Test] + public void TurnoutInfoReceived_FromHandler_IsReRaised() + { + TurnoutInfo? received = null; + _station.TurnoutInfoReceived += (_, info) => received = info; + + _turnoutInfo.Raise(h => h.OnTurnoutInfoReceived += null, new TurnoutInfoReceivedEventArgs(65, AccessoryOutput.Output1)); + + Assert.That(received, Is.EqualTo(new TurnoutInfo(65, AccessoryOutput.Output1))); + } + + [Test] + public void ExtAccessoryInfoReceived_FromHandler_IsReRaised() + { + ExtAccessoryInfo? received = null; + _station.ExtAccessoryInfoReceived += (_, info) => received = info; + + _extAccessory.Raise(h => h.OnExtAccessoryInfoReceived += null, new ExtAccessoryInfoReceivedEventArgs(1, 5, true)); + + Assert.That(received, Is.EqualTo(new ExtAccessoryInfo(1, 5, true))); + } + + [Test] + public void SystemStateReceived_FromHandler_IsReRaised() + { + SystemState state = new() { CentralState = new CentralState(), CentralStateEx = new CentralStateEx() }; + SystemState? received = null; + _station.SystemStateReceived += (_, s) => received = s; + + _systemState.Raise(h => h.OnSystemStateDataChangedReceived += null, _systemState.Object, new SystemStatusChangedReceivedEventArgs(state)); + + Assert.That(received, Is.SameAs(state)); + } + + [Test] + public void FirmwareVersionReceived_FromHandler_IsReRaised() + { + FirmwareVersion version = new(1, 42); + FirmwareVersion? received = null; + _station.FirmwareVersionReceived += (_, v) => received = v; + + _firmware.Raise(h => h.OnFirmwareVersionReceived += null, _firmware.Object, new FirmwareVersionReceivedEventArgs(version)); + + Assert.That(received, Is.SameAs(version)); + } + + [Test] + public void StatusChanged_FromHandler_IsReRaised() + { + CentralState? received = null; + _station.StatusChanged += (_, s) => received = s; + + _statusChanged.Raise(h => h.OnStatusChangedReceived += null, _statusChanged.Object, new StatusChangedReceivedEventArgs(new CentralState())); + + Assert.That(received, Is.Not.Null); + } + + [Test] + public void TrackPowerChanged_OnTrackPowerOn_RaisesTrue() + { + bool? state = null; + _station.TrackPowerChanged += (_, on) => state = on; + + _trackPowerOn.Raise(handler => handler.OnTrackPowerOnReceived += null, System.EventArgs.Empty); + + Assert.That(state, Is.True); + } + + [Test] + public void TrackPowerChanged_OnTrackPowerOff_RaisesFalse() + { + bool? state = null; + _station.TrackPowerChanged += (_, on) => state = on; + + _trackPowerOff.Raise(handler => handler.OnTrackPowerOffReceived += null, System.EventArgs.Empty); + + Assert.That(state, Is.False); + } + + [Test] + public async Task ReadCvAsync_SendsCvReadDatagram() + { + await _station.ConnectAsync(); + _transport.Sent.Clear(); + + await ((CommandStation.IProgrammingControl)_station).ReadCvAsync(28); + + byte[] expected = _factory.Create((ushort)28).Data; + Assert.That(_transport.Sent.Single(), Is.EqualTo(expected)); + } + + [Test] + public void CvReadCompleted_FromHandler_IsReRaisedAsCvValue() + { + CvValue? received = null; + ((CommandStation.IProgrammingControl)_station).CvReadCompleted += (_, value) => received = value; + + _cvResult.Raise(handler => handler.OnCvResultReceived += null, new CvResultReceivedEventArgs(28, 5)); + + Assert.That(received, Is.EqualTo(new CvValue(28, 5))); + } + + [Test] + public void CvProgrammingFailed_OnNack_RaisesNoAcknowledgement() + { + CvProgrammingError? error = null; + ((CommandStation.IProgrammingControl)_station).CvProgrammingFailed += (_, e) => error = e; + + _cvNack.Raise(handler => handler.OnCvNackReceived += null, System.EventArgs.Empty); + + Assert.That(error, Is.EqualTo(CvProgrammingError.NoAcknowledgement)); + } + + [Test] + public void CvProgrammingFailed_OnShortCircuit_RaisesShortCircuitError() + { + CvProgrammingError? error = null; + ((CommandStation.IProgrammingControl)_station).CvProgrammingFailed += (_, e) => error = e; + + _cvNackSc.Raise(handler => handler.OnCvNackShortCircuitReceived += null, System.EventArgs.Empty); + + Assert.That(error, Is.EqualTo(CvProgrammingError.ShortCircuit)); + } + + [Test] + public void FeedbackChanged_FromHandler_IsReRaised() + { + FeedbackData? received = null; + ((CommandStation.IFeedbackControl)_station).FeedbackChanged += (_, data) => received = data; + + _rmBus.Raise(h => h.OnRmBusDataReceived += null, new RmBusDataReceivedEventArgs(1, new byte[] { 0x05 })); + + Assert.Multiple(() => + { + Assert.That(received!.GroupIndex, Is.EqualTo(1)); + Assert.That(received.States, Is.EqualTo(new byte[] { 0x05 })); + }); + } + + [Test] + public void ModelTimeChanged_FromHandler_IsReRaised() + { + ModelTime? received = null; + ((CommandStation.IFastClockControl)_station).ModelTimeChanged += (_, time) => received = time; + + FastClockData data = new(0, 12, 30, 45, 8, false, false, FastClockSettings.Enabled); + _fastClock.Raise(h => h.OnFastClockDataReceived += null, new FastClockDataReceivedEventArgs(data)); + + Assert.Multiple(() => + { + Assert.That(received!.Hour, Is.EqualTo(12)); + Assert.That(received.Minute, Is.EqualTo(30)); + Assert.That(received.Second, Is.EqualTo(45)); + Assert.That(received.Rate, Is.EqualTo(8)); + }); + } + } +} diff --git a/src/Z21.Client.UnitTest/Core/Z21ResponseHandlerTest.cs b/src/Z21.Client.UnitTest/Core/Z21ResponseHandlerTest.cs new file mode 100644 index 0000000..4ebf40f --- /dev/null +++ b/src/Z21.Client.UnitTest/Core/Z21ResponseHandlerTest.cs @@ -0,0 +1,84 @@ +using System.Collections.Generic; +using Z21.Core; +using Z21.Core.Framing; +using Z21.Core.ResponseHandler; + +namespace Z21.UnitTest.Core +{ + public class Z21ResponseHandlerTest + { + private sealed class RecordingHandler : IZ21ResponseHandler + { + private readonly bool _canHandle; + private readonly bool _throwOnHandle; + private readonly bool _throwOnCanHandle; + + public RecordingHandler(bool canHandle, bool throwOnHandle = false, bool throwOnCanHandle = false) + { + _canHandle = canHandle; + _throwOnHandle = throwOnHandle; + _throwOnCanHandle = throwOnCanHandle; + } + + public List Handled { get; } = []; + + public string Name => "RECORDING"; + + public bool CanHandle(byte[] response) + { + if (_throwOnCanHandle) + throw new System.InvalidOperationException("boom in CanHandle"); + return _canHandle; + } + + public void Handle(byte[] response) + { + Handled.Add(response); + if (_throwOnHandle) + throw new System.InvalidOperationException("boom"); + } + } + + [Test] + public void IncomingBytes_AreFramedAndDispatchedToCapableHandlers() + { + FakeTransport transport = new(); + RecordingHandler capable = new(canHandle: true); + RecordingHandler incapable = new(canHandle: false); + _ = new Z21ResponseHandler(transport, new Z21FrameReader(), new List { capable, incapable }); + + transport.RaiseBytes([0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00]); + + Assert.Multiple(() => + { + Assert.That(capable.Handled, Has.Count.EqualTo(1), "capable handler must receive the frame"); + Assert.That(capable.Handled[0], Is.EqualTo(new byte[] { 0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00 })); + Assert.That(incapable.Handled, Is.Empty, "incapable handler must be skipped"); + }); + } + + [Test] + public void HandlerThrowing_DoesNotPropagateAndOtherHandlersStillRun() + { + FakeTransport transport = new(); + RecordingHandler throwing = new(canHandle: true, throwOnHandle: true); + RecordingHandler second = new(canHandle: true); + _ = new Z21ResponseHandler(transport, new Z21FrameReader(), new List { throwing, second }); + + Assert.DoesNotThrow(() => transport.RaiseBytes([0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00])); + Assert.That(second.Handled, Has.Count.EqualTo(1), "a throwing handler must not stop the others"); + } + + [Test] + public void CanHandleThrowing_DoesNotPropagateAndOtherHandlersStillRun() + { + FakeTransport transport = new(); + RecordingHandler throwing = new(canHandle: true, throwOnCanHandle: true); + RecordingHandler second = new(canHandle: true); + _ = new Z21ResponseHandler(transport, new Z21FrameReader(), new List { throwing, second }); + + Assert.DoesNotThrow(() => transport.RaiseBytes([0x07, 0x00, 0x40, 0x00, 0x21, 0x21, 0x00])); + Assert.That(second.Handled, Has.Count.EqualTo(1), "a handler whose CanHandle throws must not stop the others"); + } + } +} diff --git a/src/Z21.Client.UnitTest/GlobalUsings.cs b/src/Z21.Client.UnitTest/GlobalUsings.cs new file mode 100644 index 0000000..bffbd65 --- /dev/null +++ b/src/Z21.Client.UnitTest/GlobalUsings.cs @@ -0,0 +1 @@ +global using CommandStation.Model; diff --git a/src/Z21.Client.UnitTest/stryker-config.json b/src/Z21.Client.UnitTest/stryker-config.json new file mode 100644 index 0000000..ab726e9 --- /dev/null +++ b/src/Z21.Client.UnitTest/stryker-config.json @@ -0,0 +1,16 @@ +{ + "stryker-config": { + "project": "Z21.Client.csproj", + "mutation-level": "Complete", + "coverage-analysis": "perTest", + "thresholds": { + "high": 98, + "low": 90, + "break": 85 + }, + "reporters": [ + "html", + "progress" + ] + } +} diff --git a/src/Z21.Client/Core/Codecs/AddressCodec.cs b/src/Z21.Client/Core/Codecs/AddressCodec.cs new file mode 100644 index 0000000..f9e6524 --- /dev/null +++ b/src/Z21.Client/Core/Codecs/AddressCodec.cs @@ -0,0 +1,78 @@ +using System; + +namespace Z21.Core.Codecs +{ + public class AddressCodec : IAddressCodec + { + public (byte lsb, byte msb) SplitLocoAddress(ushort address) + { + byte lsb = (byte)(address & 0xFF); + byte msb = (byte)((address >> 8) & 0xFF); + + if (address >= 128) + msb |= 0xC0; + + return (lsb, msb); + } + + public (byte msb, byte lsb) SplitAddressBigEndian(ushort address) + { + byte msb = (byte)((address >> 8) & 0xFF); + byte lsb = (byte)(address & 0xFF); + return (msb, lsb); + } + + public (byte lsb, byte msb) SplitAccessoryAddress(ushort address) + { + if (address < 1) + throw new ArgumentOutOfRangeException(nameof(address), address, "Smallest address is 1"); + + ushort dccAddress = (ushort)(address - 1); + byte msb = (byte)((dccAddress >> 8) & 0xFF); + byte lsb = (byte)(dccAddress & 0xFF); + return (lsb, msb); + } + + public ushort CombineAccessoryAddress(byte lsb, byte msb) + { + return (ushort)((msb << 8) + lsb + 1); + } + + public (byte lsb, byte msb) SplitExtAccessoryAddress(ushort address) + { + if (address < 1) + throw new ArgumentOutOfRangeException(nameof(address), address, "Smallest address is 1"); + + ushort rawAddress = (ushort)(address + 3); + byte msb = (byte)((rawAddress >> 8) & 0xFF); + byte lsb = (byte)(rawAddress & 0xFF); + return (lsb, msb); + } + + public ushort CombineExtAccessoryAddress(byte lsb, byte msb) + { + return (ushort)((msb << 8) + lsb - 3); + } + + public (byte msb, byte lsb) SplitCvAddress(ushort cvAddress) + { + byte msb = (byte)((cvAddress >> 8) & 0xFF); + byte lsb = (byte)(cvAddress & 0xFF); + return (msb, lsb); + } + + public ushort CombineCvAddress(byte msb, byte lsb) + { + return (ushort)((msb << 8) + lsb); + } + + public (byte db1, byte db2) EncodeAccessoryPomAddress(ushort decoderAddress, bool wholeDecoder, byte output) + { + int cddd = wholeDecoder ? 0x00 : (0x08 | (output & 0x07)); + int value = ((decoderAddress & 0x1FF) << 4) | cddd; + byte db1 = (byte)((value >> 8) & 0xFF); + byte db2 = (byte)(value & 0xFF); + return (db1, db2); + } + } +} diff --git a/src/Z21.Client/Core/Codecs/IAddressCodec.cs b/src/Z21.Client/Core/Codecs/IAddressCodec.cs new file mode 100644 index 0000000..35918d7 --- /dev/null +++ b/src/Z21.Client/Core/Codecs/IAddressCodec.cs @@ -0,0 +1,51 @@ +using System; + +namespace Z21.Core.Codecs +{ + /// + /// Encodes and decodes locomotive and accessory addresses in the Z21 wire representation. + /// + public interface IAddressCodec + { + (byte lsb, byte msb) SplitLocoAddress(ushort address); + + /// + /// Splits an address into its big-endian wire bytes (most-significant byte first), as used by the + /// LAN_GET/SET_LOCOMODE and LAN_GET/SET_TURNOUTMODE settings commands. + /// + (byte msb, byte lsb) SplitAddressBigEndian(ushort address); + + /// Thrown when is smaller than 1. + (byte lsb, byte msb) SplitAccessoryAddress(ushort address); + + ushort CombineAccessoryAddress(byte lsb, byte msb); + + /// + /// Maps a user-facing extended accessory address (1-based) to its RCN-213 RawAddress wire bytes (user address 1 = RawAddress 4). + /// + /// Thrown when is smaller than 1. + (byte lsb, byte msb) SplitExtAccessoryAddress(ushort address); + + /// + /// Maps the RCN-213 RawAddress wire bytes of an extended accessory decoder back to the user-facing address (RawAddress 4 = user address 1). + /// + ushort CombineExtAccessoryAddress(byte lsb, byte msb); + + /// + /// Splits a CV address (0 = CV1) into its high and low wire bytes (no offset applied). + /// + (byte msb, byte lsb) SplitCvAddress(ushort cvAddress); + + /// + /// Combines the high and low wire bytes of a CV address back into a CV address (0 = CV1). + /// + ushort CombineCvAddress(byte msb, byte lsb); + + /// + /// Encodes an accessory decoder address for POM commands into the two wire bytes + /// aaaaa / AAAACDDD. When is true the CV refers to the + /// whole decoder (CDDD = 0000); otherwise C = 1 and DDD = . + /// + (byte db1, byte db2) EncodeAccessoryPomAddress(ushort decoderAddress, bool wholeDecoder, byte output); + } +} diff --git a/src/Z21.Client/Core/Codecs/ILocoSpeedCodec.cs b/src/Z21.Client/Core/Codecs/ILocoSpeedCodec.cs new file mode 100644 index 0000000..a2d2f26 --- /dev/null +++ b/src/Z21.Client/Core/Codecs/ILocoSpeedCodec.cs @@ -0,0 +1,14 @@ +using Z21.Core.Model; + +namespace Z21.Core.Codecs +{ + /// + /// Converts between user-facing DCC speed steps and the speed bytes used on the Z21 wire. + /// + public interface ILocoSpeedCodec + { + ushort CalculateDccSpeed(DccSpeedMode dccSpeedMode, ushort speedStep); + + ushort CalculateSpeedStep(DccSpeedMode dccSpeedMode, ushort dccSpeed); + } +} diff --git a/src/Z21.Client/Core/Codecs/LocoSpeedCodec.cs b/src/Z21.Client/Core/Codecs/LocoSpeedCodec.cs new file mode 100644 index 0000000..f4828c8 --- /dev/null +++ b/src/Z21.Client/Core/Codecs/LocoSpeedCodec.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using Z21.Core.Model; + +namespace Z21.Core.Codecs +{ + public class LocoSpeedCodec : ILocoSpeedCodec + { + private readonly Dictionary _dcc28SpeedStepLookup = new() + { + { 0, 0 }, { 16, 0 }, + { 1, 0 }, { 17, 0 }, + { 2, 1 }, { 18, 2 }, + { 3, 3 }, { 19, 4 }, + { 4, 5 }, { 20, 6 }, + { 5, 7 }, { 21, 8 }, + { 6, 9 }, { 22, 10 }, + { 7, 11 }, { 23, 12 }, + { 8, 13 }, { 24, 14 }, + { 9, 15 }, { 25, 16 }, + { 10, 17 }, { 26, 18 }, + { 11, 19 }, { 27, 20 }, + { 12, 21 }, { 28, 22 }, + { 13, 23 }, { 29, 24 }, + { 14, 25 }, { 30, 26 }, + { 15, 27 }, { 31, 28 } + }; + + public ushort CalculateDccSpeed(DccSpeedMode dccSpeedMode, ushort speedStep) => dccSpeedMode switch + { + DccSpeedMode.Steps14 when speedStep > 0 => (ushort)(speedStep + 1), + DccSpeedMode.Steps28 when speedStep > 0 => CalculateDcc28DccSpeed(speedStep + 3), + DccSpeedMode.Steps128 when speedStep > 0 => (ushort)(speedStep + 1), + _ => speedStep + }; + + public ushort CalculateSpeedStep(DccSpeedMode dccSpeedMode, ushort dccSpeed) => dccSpeedMode switch + { + DccSpeedMode.Steps14 when dccSpeed > 1 => (ushort)(dccSpeed - 1), + DccSpeedMode.Steps28 when dccSpeed > 0 => DecodeDcc28SpeedStep(dccSpeed), + DccSpeedMode.Steps128 when dccSpeed > 1 => (ushort)(dccSpeed - 1), + _ => 0 + }; + + private ushort DecodeDcc28SpeedStep(ushort dccSpeed) => + _dcc28SpeedStepLookup.TryGetValue(dccSpeed, out ushort speedStep) ? speedStep : (ushort)0; + + private ushort CalculateDcc28DccSpeed(int speedStep) + { + double dcc14Speed = speedStep / 2.0; + int dccSpeed = (int)Math.Floor(dcc14Speed); + + if (dcc14Speed % 1 != 0) + dccSpeed |= 0x10; + return (ushort)dccSpeed; + } + } +} diff --git a/src/Z21.Client/Core/Command/Booster/GetBoosterDescriptionCommand.cs b/src/Z21.Client/Core/Command/Booster/GetBoosterDescriptionCommand.cs new file mode 100644 index 0000000..9a4d3cf --- /dev/null +++ b/src/Z21.Client/Core/Command/Booster/GetBoosterDescriptionCommand.cs @@ -0,0 +1,19 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Booster +{ + /// + /// Reads the description of a zLink booster (LAN_BOOSTER_GET_DESCRIPTION, protocol §11.2.1). + /// + public class GetBoosterDescriptionCommand : IZ21Command + { + public GetBoosterDescriptionCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x00B8); + } + + public string Name => "LAN_BOOSTER_GET_DESCRIPTION"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Booster/GetBoosterSystemStateCommand.cs b/src/Z21.Client/Core/Command/Booster/GetBoosterSystemStateCommand.cs new file mode 100644 index 0000000..ecdb043 --- /dev/null +++ b/src/Z21.Client/Core/Command/Booster/GetBoosterSystemStateCommand.cs @@ -0,0 +1,19 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Booster +{ + /// + /// Requests the system state of a zLink booster (LAN_BOOSTER_SYSTEMSTATE_GETDATA, protocol §11.2.3). + /// + public class GetBoosterSystemStateCommand : IZ21Command + { + public GetBoosterSystemStateCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x00BB); + } + + public string Name => "LAN_BOOSTER_SYSTEMSTATE_GETDATA"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Booster/SetBoosterDescriptionCommand.cs b/src/Z21.Client/Core/Command/Booster/SetBoosterDescriptionCommand.cs new file mode 100644 index 0000000..1909696 --- /dev/null +++ b/src/Z21.Client/Core/Command/Booster/SetBoosterDescriptionCommand.cs @@ -0,0 +1,33 @@ +using System; +using System.Text; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Booster +{ + /// + /// Overwrites the description of a zLink booster (LAN_BOOSTER_SET_DESCRIPTION, protocol §11.2.2). + /// The name is ISO 8859-1, truncated/padded to 32 bytes; the characters " and \ are not allowed. + /// + public class SetBoosterDescriptionCommand : IZ21Command + { + private const int NameLength = 32; + + /// Thrown when contains a forbidden character. + public SetBoosterDescriptionCommand(IZ21FrameBuilder frameBuilder, string name) + { + ArgumentNullException.ThrowIfNull(name); + if (name.Contains('"') || name.Contains('\\')) + throw new ArgumentException("The characters '\"' and '\\' are not allowed in a booster description.", nameof(name)); + + byte[] nameBuffer = new byte[NameLength]; + byte[] encoded = Encoding.Latin1.GetBytes(name); + Array.Copy(encoded, 0, nameBuffer, 0, Math.Min(encoded.Length, NameLength)); + + Data = frameBuilder.BuildLan(0x00B9, nameBuffer); + } + + public string Name => "LAN_BOOSTER_SET_DESCRIPTION"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Booster/SetBoosterPowerCommand.cs b/src/Z21.Client/Core/Command/Booster/SetBoosterPowerCommand.cs new file mode 100644 index 0000000..c987ed8 --- /dev/null +++ b/src/Z21.Client/Core/Command/Booster/SetBoosterPowerCommand.cs @@ -0,0 +1,21 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Booster +{ + /// + /// From booster FW V1.11, disables/re-enables a zLink booster output (LAN_BOOSTER_SET_POWER, + /// protocol §11.2.5). Port 0x01 = first output, 0x02 = second (dual only), 0x03 = all; state 0x00 = off, + /// 0x01 = on. + /// + public class SetBoosterPowerCommand : IZ21Command + { + public SetBoosterPowerCommand(IZ21FrameBuilder frameBuilder, byte port, byte state) + { + Data = frameBuilder.BuildLan(0x00B2, port, state); + } + + public string Name => "LAN_BOOSTER_SET_POWER"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Can/GetCanDetectorCommand.cs b/src/Z21.Client/Core/Command/Can/GetCanDetectorCommand.cs new file mode 100644 index 0000000..63ce29e --- /dev/null +++ b/src/Z21.Client/Core/Command/Can/GetCanDetectorCommand.cs @@ -0,0 +1,22 @@ +using System; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Can +{ + /// + /// From Z21 FW version 1.30, queries a CAN occupancy detector by its CAN network id + /// (LAN_CAN_DETECTOR, protocol §10.1). Network id 0xD000 queries all CAN detectors. + /// + public class GetCanDetectorCommand : IZ21Command + { + public GetCanDetectorCommand(IZ21FrameBuilder frameBuilder, ushort networkId) + { + byte[] nid = BitConverter.GetBytes(networkId); + Data = frameBuilder.BuildLan(0x00C4, 0x00, nid[0], nid[1]); + } + + public string Name => "LAN_CAN_DETECTOR"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Can/GetCanDeviceDescriptionCommand.cs b/src/Z21.Client/Core/Command/Can/GetCanDeviceDescriptionCommand.cs new file mode 100644 index 0000000..a536d95 --- /dev/null +++ b/src/Z21.Client/Core/Command/Can/GetCanDeviceDescriptionCommand.cs @@ -0,0 +1,22 @@ +using System; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Can +{ + /// + /// From Z21 FW version 1.41, reads the free-text description of a CAN booster + /// (LAN_CAN_DEVICE_GET_DESCRIPTION, protocol §10.2.1). + /// + public class GetCanDeviceDescriptionCommand : IZ21Command + { + public GetCanDeviceDescriptionCommand(IZ21FrameBuilder frameBuilder, ushort networkId) + { + byte[] nid = BitConverter.GetBytes(networkId); + Data = frameBuilder.BuildLan(0x00C8, nid[0], nid[1]); + } + + public string Name => "LAN_CAN_DEVICE_GET_DESCRIPTION"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Can/SetCanBoosterTrackPowerCommand.cs b/src/Z21.Client/Core/Command/Can/SetCanBoosterTrackPowerCommand.cs new file mode 100644 index 0000000..7d187dc --- /dev/null +++ b/src/Z21.Client/Core/Command/Can/SetCanBoosterTrackPowerCommand.cs @@ -0,0 +1,22 @@ +using System; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Can +{ + /// + /// From Z21 FW version 1.41, disables/re-enables the track outputs of a CAN booster + /// (LAN_CAN_BOOSTER_SET_TRACKPOWER, protocol §10.2.4). 0x00 disables all outputs, 0xFF re-enables. + /// + public class SetCanBoosterTrackPowerCommand : IZ21Command + { + public SetCanBoosterTrackPowerCommand(IZ21FrameBuilder frameBuilder, ushort networkId, byte power) + { + byte[] nid = BitConverter.GetBytes(networkId); + Data = frameBuilder.BuildLan(0x00CB, nid[0], nid[1], power); + } + + public string Name => "LAN_CAN_BOOSTER_SET_TRACKPOWER"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Can/SetCanDeviceDescriptionCommand.cs b/src/Z21.Client/Core/Command/Can/SetCanDeviceDescriptionCommand.cs new file mode 100644 index 0000000..7a50c54 --- /dev/null +++ b/src/Z21.Client/Core/Command/Can/SetCanDeviceDescriptionCommand.cs @@ -0,0 +1,40 @@ +using System; +using System.Text; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Can +{ + /// + /// From Z21 FW version 1.41, overwrites the free-text description of a CAN booster + /// (LAN_CAN_DEVICE_SET_DESCRIPTION, protocol §10.2.2). The name is ISO 8859-1, truncated to and + /// padded to 16 bytes; the characters " and \ are not allowed. + /// + public class SetCanDeviceDescriptionCommand : IZ21Command + { + private const int NameLength = 16; + + /// Thrown when contains a forbidden character. + public SetCanDeviceDescriptionCommand(IZ21FrameBuilder frameBuilder, ushort networkId, string name) + { + ArgumentNullException.ThrowIfNull(name); + if (name.Contains('"') || name.Contains('\\')) + throw new ArgumentException("The characters '\"' and '\\' are not allowed in a device description.", nameof(name)); + + byte[] nameBuffer = new byte[NameLength]; + byte[] encoded = Encoding.Latin1.GetBytes(name); + Array.Copy(encoded, 0, nameBuffer, 0, Math.Min(encoded.Length, NameLength)); + + byte[] nid = BitConverter.GetBytes(networkId); + byte[] payload = new byte[2 + NameLength]; + payload[0] = nid[0]; + payload[1] = nid[1]; + Array.Copy(nameBuffer, 0, payload, 2, NameLength); + + Data = frameBuilder.BuildLan(0x00C9, payload); + } + + public string Name => "LAN_CAN_DEVICE_SET_DESCRIPTION"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Decoder/GetDecoderDescriptionCommand.cs b/src/Z21.Client/Core/Command/Decoder/GetDecoderDescriptionCommand.cs new file mode 100644 index 0000000..9265695 --- /dev/null +++ b/src/Z21.Client/Core/Command/Decoder/GetDecoderDescriptionCommand.cs @@ -0,0 +1,19 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Decoder +{ + /// + /// Reads the description of a zLink decoder (LAN_DECODER_GET_DESCRIPTION, protocol §11.3.1). + /// + public class GetDecoderDescriptionCommand : IZ21Command + { + public GetDecoderDescriptionCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x00D8); + } + + public string Name => "LAN_DECODER_GET_DESCRIPTION"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Decoder/GetDecoderSystemStateCommand.cs b/src/Z21.Client/Core/Command/Decoder/GetDecoderSystemStateCommand.cs new file mode 100644 index 0000000..81a71bd --- /dev/null +++ b/src/Z21.Client/Core/Command/Decoder/GetDecoderSystemStateCommand.cs @@ -0,0 +1,19 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Decoder +{ + /// + /// Requests the system state of a zLink decoder (LAN_DECODER_SYSTEMSTATE_GETDATA, protocol §11.3.3). + /// + public class GetDecoderSystemStateCommand : IZ21Command + { + public GetDecoderSystemStateCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x00DB); + } + + public string Name => "LAN_DECODER_SYSTEMSTATE_GETDATA"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Decoder/SetDecoderDescriptionCommand.cs b/src/Z21.Client/Core/Command/Decoder/SetDecoderDescriptionCommand.cs new file mode 100644 index 0000000..1fa1e91 --- /dev/null +++ b/src/Z21.Client/Core/Command/Decoder/SetDecoderDescriptionCommand.cs @@ -0,0 +1,33 @@ +using System; +using System.Text; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Decoder +{ + /// + /// Overwrites the description of a zLink decoder (LAN_DECODER_SET_DESCRIPTION, protocol §11.3.2). + /// The name is ISO 8859-1, truncated/padded to 32 bytes; the characters " and \ are not allowed. + /// + public class SetDecoderDescriptionCommand : IZ21Command + { + private const int NameLength = 32; + + /// Thrown when contains a forbidden character. + public SetDecoderDescriptionCommand(IZ21FrameBuilder frameBuilder, string name) + { + ArgumentNullException.ThrowIfNull(name); + if (name.Contains('"') || name.Contains('\\')) + throw new ArgumentException("The characters '\"' and '\\' are not allowed in a decoder description.", nameof(name)); + + byte[] nameBuffer = new byte[NameLength]; + byte[] encoded = Encoding.Latin1.GetBytes(name); + Array.Copy(encoded, 0, nameBuffer, 0, Math.Min(encoded.Length, NameLength)); + + Data = frameBuilder.BuildLan(0x00D9, nameBuffer); + } + + public string Name => "LAN_DECODER_SET_DESCRIPTION"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Driving/GetLocoInfoCommand.cs b/src/Z21.Client/Core/Command/Driving/GetLocoInfoCommand.cs index e5ad71c..f328b02 100644 --- a/src/Z21.Client/Core/Command/Driving/GetLocoInfoCommand.cs +++ b/src/Z21.Client/Core/Command/Driving/GetLocoInfoCommand.cs @@ -1,5 +1,6 @@ +using Z21.Core.Codecs; using Z21.Core.Command.SystemState; -using Z21.Core.Helper; +using Z21.Core.Framing; using Z21.Core.Model; namespace Z21.Core.Command.Driving @@ -9,27 +10,14 @@ namespace Z21.Core.Command.Driving /// public class GetLocoInfoCommand : IZ21Command { - public GetLocoInfoCommand(ushort locoAddress) + public GetLocoInfoCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress) { - const byte xHeader = 0xE3; - const byte db0 = 0xF0; - - (byte lsb, byte msb) = AddressHelper.SplitLocoAddress(locoAddress); - byte xor = (byte)(xHeader ^ db0 ^ lsb ^ msb); - Data = - [ - 0x09, 0x00, - 0x40, 0x00, - xHeader, - db0, - msb, - lsb, - xor - ]; + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + Data = frameBuilder.BuildXBus(0xE3, 0xF0, msb, lsb); } public string Name => "LAN_X_GET_LOCO_INFO"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Driving/PurgeLocoCommand.cs b/src/Z21.Client/Core/Command/Driving/PurgeLocoCommand.cs index 4e3a28f..f3dcd6a 100644 --- a/src/Z21.Client/Core/Command/Driving/PurgeLocoCommand.cs +++ b/src/Z21.Client/Core/Command/Driving/PurgeLocoCommand.cs @@ -1,4 +1,5 @@ -using Z21.Core.Helper; +using Z21.Core.Codecs; +using Z21.Core.Framing; namespace Z21.Core.Command.Driving { @@ -9,23 +10,14 @@ namespace Z21.Core.Command.Driving /// public class PurgeLocoCommand : IZ21Command { - public PurgeLocoCommand(ushort locoAddress) + public PurgeLocoCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress) { - (byte lsb, byte msb) = AddressHelper.SplitLocoAddress(locoAddress); - Data = - [ - 0x09, 0x00, - 0x40, 0x00, - 0xE3, - 0x44, - msb, - lsb, - (byte)(0xE3 ^ 0x44 ^ msb ^ lsb) - ]; + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + Data = frameBuilder.BuildXBus(0xE3, 0x44, msb, lsb); } public string Name => "LAN_X_PURGE_LOCO"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Driving/SetLocoBinaryStateCommand.cs b/src/Z21.Client/Core/Command/Driving/SetLocoBinaryStateCommand.cs new file mode 100644 index 0000000..d3c170e --- /dev/null +++ b/src/Z21.Client/Core/Command/Driving/SetLocoBinaryStateCommand.cs @@ -0,0 +1,29 @@ +using System; +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Driving +{ + /// + /// From Z21 FW version 1.42, sends a DCC "binary state" command to a locomotive decoder (protocol §4.3.3). + /// Allowed binary state addresses are 29 to 32767. + /// + public class SetLocoBinaryStateCommand : IZ21Command + { + /// Thrown when is outside 29..32767. + public SetLocoBinaryStateCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress, ushort binaryStateAddress, bool enabled) + { + if (binaryStateAddress is < 29 or > 32767) + throw new ArgumentOutOfRangeException(nameof(binaryStateAddress), binaryStateAddress, "Binary state address must be between 29 and 32767."); + + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + byte db3 = (byte)((enabled ? 0x80 : 0x00) | (binaryStateAddress & 0x7F)); + byte db4 = (byte)((binaryStateAddress >> 7) & 0xFF); + Data = frameBuilder.BuildXBus(0xE5, 0x5F, msb, lsb, db3, db4); + } + + public string Name => "LAN_X_SET_LOCO_BINARY_STATE"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Driving/SetLocoDriveCommand.cs b/src/Z21.Client/Core/Command/Driving/SetLocoDriveCommand.cs index fbb9dc8..d2062c9 100644 --- a/src/Z21.Client/Core/Command/Driving/SetLocoDriveCommand.cs +++ b/src/Z21.Client/Core/Command/Driving/SetLocoDriveCommand.cs @@ -1,6 +1,7 @@ using System; +using Z21.Core.Codecs; using Z21.Core.Exception; -using Z21.Core.Helper; +using Z21.Core.Framing; using Z21.Core.Model; namespace Z21.Core.Command.Driving @@ -10,26 +11,15 @@ namespace Z21.Core.Command.Driving /// public class SetLocoDriveCommand : IZ21Command { - public SetLocoDriveCommand(DccSpeedMode dccSpeedMode, ushort locoAddress, DrivingDirection drivingDirection, ushort locoSpeed) + public SetLocoDriveCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ILocoSpeedCodec locoSpeedCodec, DccSpeedMode dccSpeedMode, ushort locoAddress, DrivingDirection drivingDirection, ushort locoSpeed) { LocoSpeedOutOfRangeException.ThrowIfOutOfRange(dccSpeedMode, locoSpeed); - ushort dccSpeed = LocoSpeedHelper.CalculateDccSpeed(dccSpeedMode, locoSpeed); + ushort dccSpeed = locoSpeedCodec.CalculateDccSpeed(dccSpeedMode, locoSpeed); - const byte xHeader = 0xE4; byte db0 = (byte)(0x10 | GetByte(dccSpeedMode)); - (byte lsb, byte msb) = AddressHelper.SplitLocoAddress(locoAddress); + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); byte db3 = (byte)((byte)drivingDirection | dccSpeed); - Data = - [ - 0x0A, 0x00, - 0x40, 0x00, - xHeader, - db0, - msb, - lsb, - db3, - (byte)(xHeader ^ db0 ^ msb ^ lsb ^ db3) - ]; + Data = frameBuilder.BuildXBus(0xE4, db0, msb, lsb, db3); } public string Name => "LAN_X_SET_LOCO_DRIVE"; @@ -44,4 +34,4 @@ public SetLocoDriveCommand(DccSpeedMode dccSpeedMode, ushort locoAddress, Drivin _ => throw new ArgumentOutOfRangeException(nameof(dccSpeedMode), dccSpeedMode, null) }; } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Driving/SetLocoEStopCommand.cs b/src/Z21.Client/Core/Command/Driving/SetLocoEStopCommand.cs index 933ddb2..4c95ecc 100644 --- a/src/Z21.Client/Core/Command/Driving/SetLocoEStopCommand.cs +++ b/src/Z21.Client/Core/Command/Driving/SetLocoEStopCommand.cs @@ -1,4 +1,5 @@ -using Z21.Core.Helper; +using Z21.Core.Codecs; +using Z21.Core.Framing; namespace Z21.Core.Command.Driving { @@ -9,24 +10,14 @@ namespace Z21.Core.Command.Driving /// public class SetLocoEStopCommand : IZ21Command { - public SetLocoEStopCommand(ushort locoAddress) + public SetLocoEStopCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress) { - (byte lsb, byte msb) = AddressHelper.SplitLocoAddress(locoAddress); - Data = - [ - 0x08, - 0x00, - 0x40, - 0x00, - 0x92, - msb, - lsb, - (byte)(0x92 ^ msb ^ lsb) - ]; + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + Data = frameBuilder.BuildXBus(0x92, msb, lsb); } public string Name => "LAN_X_SET_LOCO_E_STOP"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Driving/SetLocoFunctionCommand.cs b/src/Z21.Client/Core/Command/Driving/SetLocoFunctionCommand.cs index c9fc1cc..5552c83 100644 --- a/src/Z21.Client/Core/Command/Driving/SetLocoFunctionCommand.cs +++ b/src/Z21.Client/Core/Command/Driving/SetLocoFunctionCommand.cs @@ -1,4 +1,6 @@ -using Z21.Core.Helper; +using System; +using Z21.Core.Codecs; +using Z21.Core.Framing; using Z21.Core.Model; namespace Z21.Core.Command.Driving @@ -8,27 +10,19 @@ namespace Z21.Core.Command.Driving /// public class SetLocoFunctionCommand : IZ21Command { - public SetLocoFunctionCommand(ushort locoAddress, ushort functionIndex, FunctionToggleType toggleType) + /// Thrown when exceeds the 6-bit field (0..63). + public SetLocoFunctionCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress, ushort functionIndex, FunctionToggleType toggleType) { - const byte xHeader = 0xE4; - const byte db0 = 0xF8; + if (functionIndex > 0x3F) + throw new ArgumentOutOfRangeException(nameof(functionIndex), functionIndex, "Function index must be between 0 and 63 (the 6-bit NNNNNN field of LAN_X_SET_LOCO_FUNCTION)."); + byte db3 = (byte)((byte)toggleType | functionIndex); - (byte lsb, byte msb) = AddressHelper.SplitLocoAddress(locoAddress); - Data = - [ - 0x0A, 0x00, - 0x40, 0x00, - xHeader, - db0, - msb, - lsb, - db3, - (byte)(xHeader ^ db0 ^ msb ^ lsb ^ db3) - ]; + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + Data = frameBuilder.BuildXBus(0xE4, 0xF8, msb, lsb, db3); } public string Name => "LAN_X_SET_LOCO_FUNCTION"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Driving/SetLocoFunctionGroupCommand.cs b/src/Z21.Client/Core/Command/Driving/SetLocoFunctionGroupCommand.cs new file mode 100644 index 0000000..4745bea --- /dev/null +++ b/src/Z21.Client/Core/Command/Driving/SetLocoFunctionGroupCommand.cs @@ -0,0 +1,22 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; +using Z21.Core.Model; + +namespace Z21.Core.Command.Driving +{ + /// + /// Switches a whole locomotive function group (up to 8 functions) with a single command (protocol §4.3.2). + /// + public class SetLocoFunctionGroupCommand : IZ21Command + { + public SetLocoFunctionGroupCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress, LocoFunctionGroup group, byte functions) + { + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + Data = frameBuilder.BuildXBus(0xE4, (byte)group, msb, lsb, functions); + } + + public string Name => "LAN_X_SET_LOCO_FUNCTION_GROUP"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/FastClock/FastClockControlCommand.cs b/src/Z21.Client/Core/Command/FastClock/FastClockControlCommand.cs new file mode 100644 index 0000000..e59d856 --- /dev/null +++ b/src/Z21.Client/Core/Command/FastClock/FastClockControlCommand.cs @@ -0,0 +1,38 @@ +using System; +using CommandStation.Model; +using Z21.Core.Framing; +using Z21.Core.Model; + +namespace Z21.Core.Command.FastClock +{ + /// + /// From Z21 FW version 1.43, reads, sets, starts or stops the model time + /// (LAN_FAST_CLOCK_CONTROL, protocol §12.1). + /// + public class FastClockControlCommand : IZ21Command + { + public FastClockControlCommand(IZ21FrameBuilder frameBuilder, FastClockAction action) + { + byte selector = action switch + { + FastClockAction.Start => 0x2C, + FastClockAction.Stop => 0x2D, + _ => 0x2A + }; + Data = frameBuilder.BuildLanChecksummed(0x00CC, 0x21, selector); + } + + public FastClockControlCommand(IZ21FrameBuilder frameBuilder, ModelTime time) + { + ArgumentNullException.ThrowIfNull(time); + byte dayHour = (byte)(((time.Day & 0x07) << 5) | (time.Hour & 0x1F)); + byte minute = (byte)(time.Minute & 0x3F); + byte rate = (byte)(time.Rate & 0x3F); + Data = frameBuilder.BuildLanChecksummed(0x00CC, 0x24, 0x2B, dayHour, minute, rate); + } + + public string Name => "LAN_FAST_CLOCK_CONTROL"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/FastClock/GetFastClockSettingsCommand.cs b/src/Z21.Client/Core/Command/FastClock/GetFastClockSettingsCommand.cs new file mode 100644 index 0000000..b5ad488 --- /dev/null +++ b/src/Z21.Client/Core/Command/FastClock/GetFastClockSettingsCommand.cs @@ -0,0 +1,19 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.FastClock +{ + /// + /// Reads the persistent fast-clock settings (LAN_FAST_CLOCK_SETTINGS_GET, protocol §12.3). + /// + public class GetFastClockSettingsCommand : IZ21Command + { + public GetFastClockSettingsCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x00CE, 0x04); + } + + public string Name => "LAN_FAST_CLOCK_SETTINGS_GET"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsCommand.cs b/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsCommand.cs new file mode 100644 index 0000000..a7aa561 --- /dev/null +++ b/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.FastClock +{ + /// + /// Overwrites only the persistent fast-clock setting flags + /// (LAN_FAST_CLOCK_SETTINGS_SET, protocol §12.4). + /// + public class SetFastClockSettingsCommand : IZ21Command + { + public SetFastClockSettingsCommand(IZ21FrameBuilder frameBuilder, byte settings) + { + Data = frameBuilder.BuildLan(0x00CF, settings); + } + + public string Name => "LAN_FAST_CLOCK_SETTINGS_SET"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsWithRateCommand.cs b/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsWithRateCommand.cs new file mode 100644 index 0000000..d7d7db1 --- /dev/null +++ b/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsWithRateCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.FastClock +{ + /// + /// Overwrites the persistent fast-clock setting flags and the rate + /// (LAN_FAST_CLOCK_SETTINGS_SET, protocol §12.4). + /// + public class SetFastClockSettingsWithRateCommand : IZ21Command + { + public SetFastClockSettingsWithRateCommand(IZ21FrameBuilder frameBuilder, byte settings, byte rate) + { + Data = frameBuilder.BuildLan(0x00CF, settings, rate); + } + + public string Name => "LAN_FAST_CLOCK_SETTINGS_SET"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsWithStartTimeCommand.cs b/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsWithStartTimeCommand.cs new file mode 100644 index 0000000..1071aeb --- /dev/null +++ b/src/Z21.Client/Core/Command/FastClock/SetFastClockSettingsWithStartTimeCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.FastClock +{ + /// + /// Overwrites the persistent fast-clock setting flags, the rate and the default start time + /// (LAN_FAST_CLOCK_SETTINGS_SET, protocol §12.4). + /// + public class SetFastClockSettingsWithStartTimeCommand : IZ21Command + { + public SetFastClockSettingsWithStartTimeCommand(IZ21FrameBuilder frameBuilder, byte settings, byte rate, byte startDayHour, byte startMinute) + { + Data = frameBuilder.BuildLan(0x00CF, settings, rate, startDayHour, startMinute); + } + + public string Name => "LAN_FAST_CLOCK_SETTINGS_SET"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Feedback/GetRmBusDataCommand.cs b/src/Z21.Client/Core/Command/Feedback/GetRmBusDataCommand.cs new file mode 100644 index 0000000..fd6fc9f --- /dev/null +++ b/src/Z21.Client/Core/Command/Feedback/GetRmBusDataCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Feedback +{ + /// + /// Requests the current status of the R-BUS feedback modules (protocol §7.2). Group index 0 covers + /// modules with addresses 1–10, group index 1 covers addresses 11–20. + /// + public class GetRmBusDataCommand : IZ21Command + { + public GetRmBusDataCommand(IZ21FrameBuilder frameBuilder, byte groupIndex) + { + Data = frameBuilder.BuildLan(0x0081, groupIndex); + } + + public string Name => "LAN_RMBUS_GETDATA"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Feedback/ProgramRmBusModuleCommand.cs b/src/Z21.Client/Core/Command/Feedback/ProgramRmBusModuleCommand.cs new file mode 100644 index 0000000..57a3920 --- /dev/null +++ b/src/Z21.Client/Core/Command/Feedback/ProgramRmBusModuleCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Feedback +{ + /// + /// Programs the address of an R-BUS feedback module (protocol §7.3). The programming command is issued + /// on the R-BUS until it is sent again with address 0. Range: 0 and 1–20. + /// + public class ProgramRmBusModuleCommand : IZ21Command + { + public ProgramRmBusModuleCommand(IZ21FrameBuilder frameBuilder, byte address) + { + Data = frameBuilder.BuildLan(0x0082, address); + } + + public string Name => "LAN_RMBUS_PROGRAMMODULE"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/IZ21CommandFactory.cs b/src/Z21.Client/Core/Command/IZ21CommandFactory.cs new file mode 100644 index 0000000..8d0dc0f --- /dev/null +++ b/src/Z21.Client/Core/Command/IZ21CommandFactory.cs @@ -0,0 +1,14 @@ +namespace Z21.Core.Command +{ + /// + /// Constructs instances, supplying their required encoding services and + /// binding any remaining constructor arguments. Adding a new command requires no change here. + /// + public interface IZ21CommandFactory + { + /// + /// Creates a command of type ; encoding services are supplied automatically and fills the remaining constructor parameters. + /// + TCommand Create(params object[] args) where TCommand : IZ21Command; + } +} diff --git a/src/Z21.Client/Core/Command/LocoNet/LocoNetDetectorCommand.cs b/src/Z21.Client/Core/Command/LocoNet/LocoNetDetectorCommand.cs new file mode 100644 index 0000000..332ff3c --- /dev/null +++ b/src/Z21.Client/Core/Command/LocoNet/LocoNetDetectorCommand.cs @@ -0,0 +1,22 @@ +using System; +using Z21.Core.Framing; + +namespace Z21.Core.Command.LocoNet +{ + /// + /// From Z21 FW version 1.22, queries the occupancy status of LocoNet track occupancy detectors + /// (LAN_LOCONET_DETECTOR, protocol §9.5). + /// + public class LocoNetDetectorCommand : IZ21Command + { + public LocoNetDetectorCommand(IZ21FrameBuilder frameBuilder, byte type, ushort reportAddress) + { + byte[] address = BitConverter.GetBytes(reportAddress); + Data = frameBuilder.BuildLan(0x00A4, type, address[0], address[1]); + } + + public string Name => "LAN_LOCONET_DETECTOR"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/LocoNet/LocoNetDispatchAddressCommand.cs b/src/Z21.Client/Core/Command/LocoNet/LocoNetDispatchAddressCommand.cs new file mode 100644 index 0000000..cd98623 --- /dev/null +++ b/src/Z21.Client/Core/Command/LocoNet/LocoNetDispatchAddressCommand.cs @@ -0,0 +1,22 @@ +using System; +using Z21.Core.Framing; + +namespace Z21.Core.Command.LocoNet +{ + /// + /// From Z21 FW version 1.20, prepares a locomotive address for LocoNet dispatch ("DISPATCH_PUT", + /// LAN_LOCONET_DISPATCH_ADDR, protocol §9.4). + /// + public class LocoNetDispatchAddressCommand : IZ21Command + { + public LocoNetDispatchAddressCommand(IZ21FrameBuilder frameBuilder, ushort locoAddress) + { + byte[] address = BitConverter.GetBytes(locoAddress); + Data = frameBuilder.BuildLan(0x00A3, address[0], address[1]); + } + + public string Name => "LAN_LOCONET_DISPATCH_ADDR"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/LocoNet/LocoNetFromLanCommand.cs b/src/Z21.Client/Core/Command/LocoNet/LocoNetFromLanCommand.cs new file mode 100644 index 0000000..4bfe304 --- /dev/null +++ b/src/Z21.Client/Core/Command/LocoNet/LocoNetFromLanCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.LocoNet +{ + /// + /// From Z21 FW version 1.20, writes a raw LocoNet message (including its checksum) onto the LocoNet bus + /// (LAN_LOCONET_FROM_LAN, protocol §9.3). + /// + public class LocoNetFromLanCommand : IZ21Command + { + public LocoNetFromLanCommand(IZ21FrameBuilder frameBuilder, byte[] message) + { + Data = frameBuilder.BuildLan(0x00A2, message); + } + + public string Name => "LAN_LOCONET_FROM_LAN"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/CvPomAccessoryReadByteCommand.cs b/src/Z21.Client/Core/Command/Programming/CvPomAccessoryReadByteCommand.cs new file mode 100644 index 0000000..ab480de --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/CvPomAccessoryReadByteCommand.cs @@ -0,0 +1,24 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// From Z21 FW version 1.22, reads a CV of an accessory decoder on the main track (POM, protocol §6.11). + /// Requires RailCom enabled. + /// + public class CvPomAccessoryReadByteCommand : IZ21Command + { + public CvPomAccessoryReadByteCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort decoderAddress, bool wholeDecoder, byte output, ushort cvAddress) + { + (byte db1, byte db2) = addressCodec.EncodeAccessoryPomAddress(decoderAddress, wholeDecoder, output); + byte db3 = (byte)(0xE4 | ((cvAddress >> 8) & 0x03)); + byte cvLsb = (byte)(cvAddress & 0xFF); + Data = frameBuilder.BuildXBus(0xE6, 0x31, db1, db2, db3, cvLsb, 0x00); + } + + public string Name => "LAN_X_CV_POM_ACCESSORY_READ_BYTE"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/CvPomAccessoryWriteBitCommand.cs b/src/Z21.Client/Core/Command/Programming/CvPomAccessoryWriteBitCommand.cs new file mode 100644 index 0000000..f264d30 --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/CvPomAccessoryWriteBitCommand.cs @@ -0,0 +1,25 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// From Z21 FW version 1.22, writes a single bit of a CV of an accessory decoder on the main track + /// (POM, protocol §6.10). + /// + public class CvPomAccessoryWriteBitCommand : IZ21Command + { + public CvPomAccessoryWriteBitCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort decoderAddress, bool wholeDecoder, byte output, ushort cvAddress, byte bitPosition, bool bitValue) + { + (byte db1, byte db2) = addressCodec.EncodeAccessoryPomAddress(decoderAddress, wholeDecoder, output); + byte db3 = (byte)(0xE8 | ((cvAddress >> 8) & 0x03)); + byte cvLsb = (byte)(cvAddress & 0xFF); + byte db5 = (byte)((bitValue ? 0x08 : 0x00) | (bitPosition & 0x07)); + Data = frameBuilder.BuildXBus(0xE6, 0x31, db1, db2, db3, cvLsb, db5); + } + + public string Name => "LAN_X_CV_POM_ACCESSORY_WRITE_BIT"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/CvPomAccessoryWriteByteCommand.cs b/src/Z21.Client/Core/Command/Programming/CvPomAccessoryWriteByteCommand.cs new file mode 100644 index 0000000..276d6e7 --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/CvPomAccessoryWriteByteCommand.cs @@ -0,0 +1,24 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// From Z21 FW version 1.22, writes a CV of an accessory decoder on the main track (POM, protocol §6.9). + /// When wholeDecoder is true the CV refers to the whole decoder; otherwise to a single output. + /// + public class CvPomAccessoryWriteByteCommand : IZ21Command + { + public CvPomAccessoryWriteByteCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort decoderAddress, bool wholeDecoder, byte output, ushort cvAddress, byte value) + { + (byte db1, byte db2) = addressCodec.EncodeAccessoryPomAddress(decoderAddress, wholeDecoder, output); + byte db3 = (byte)(0xEC | ((cvAddress >> 8) & 0x03)); + byte cvLsb = (byte)(cvAddress & 0xFF); + Data = frameBuilder.BuildXBus(0xE6, 0x31, db1, db2, db3, cvLsb, value); + } + + public string Name => "LAN_X_CV_POM_ACCESSORY_WRITE_BYTE"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/CvPomReadByteCommand.cs b/src/Z21.Client/Core/Command/Programming/CvPomReadByteCommand.cs new file mode 100644 index 0000000..e079118 --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/CvPomReadByteCommand.cs @@ -0,0 +1,24 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// From Z21 FW version 1.22, reads a CV of a locomotive decoder on the main track (POM, protocol §6.8). + /// Requires RailCom enabled. CV address 0 = CV1. + /// + public class CvPomReadByteCommand : IZ21Command + { + public CvPomReadByteCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress, ushort cvAddress) + { + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + byte db3 = (byte)(0xE4 | ((cvAddress >> 8) & 0x03)); + byte cvLsb = (byte)(cvAddress & 0xFF); + Data = frameBuilder.BuildXBus(0xE6, 0x30, msb, lsb, db3, cvLsb, 0x00); + } + + public string Name => "LAN_X_CV_POM_READ_BYTE"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/CvPomWriteBitCommand.cs b/src/Z21.Client/Core/Command/Programming/CvPomWriteBitCommand.cs new file mode 100644 index 0000000..9f4848b --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/CvPomWriteBitCommand.cs @@ -0,0 +1,24 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// Writes a single bit of a CV of a locomotive decoder on the main track (POM, protocol §6.7). + /// + public class CvPomWriteBitCommand : IZ21Command + { + public CvPomWriteBitCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress, ushort cvAddress, byte bitPosition, bool bitValue) + { + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + byte db3 = (byte)(0xE8 | ((cvAddress >> 8) & 0x03)); + byte cvLsb = (byte)(cvAddress & 0xFF); + byte db5 = (byte)((bitValue ? 0x08 : 0x00) | (bitPosition & 0x07)); + Data = frameBuilder.BuildXBus(0xE6, 0x30, msb, lsb, db3, cvLsb, db5); + } + + public string Name => "LAN_X_CV_POM_WRITE_BIT"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/CvPomWriteByteCommand.cs b/src/Z21.Client/Core/Command/Programming/CvPomWriteByteCommand.cs new file mode 100644 index 0000000..ad18223 --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/CvPomWriteByteCommand.cs @@ -0,0 +1,23 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// Writes a CV of a locomotive decoder on the main track (POM, protocol §6.6). CV address 0 = CV1. + /// + public class CvPomWriteByteCommand : IZ21Command + { + public CvPomWriteByteCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort locoAddress, ushort cvAddress, byte value) + { + (byte lsb, byte msb) = addressCodec.SplitLocoAddress(locoAddress); + byte db3 = (byte)(0xEC | ((cvAddress >> 8) & 0x03)); + byte cvLsb = (byte)(cvAddress & 0xFF); + Data = frameBuilder.BuildXBus(0xE6, 0x30, msb, lsb, db3, cvLsb, value); + } + + public string Name => "LAN_X_CV_POM_WRITE_BYTE"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/CvReadCommand.cs b/src/Z21.Client/Core/Command/Programming/CvReadCommand.cs new file mode 100644 index 0000000..96aff35 --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/CvReadCommand.cs @@ -0,0 +1,21 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// Reads a CV in direct mode on the programming track (protocol §6.1). CV address 0 = CV1. + /// + public class CvReadCommand : IZ21Command + { + public CvReadCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort cvAddress) + { + (byte msb, byte lsb) = addressCodec.SplitCvAddress(cvAddress); + Data = frameBuilder.BuildXBus(0x23, 0x11, msb, lsb); + } + + public string Name => "LAN_X_CV_READ"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/CvWriteCommand.cs b/src/Z21.Client/Core/Command/Programming/CvWriteCommand.cs new file mode 100644 index 0000000..b28f97e --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/CvWriteCommand.cs @@ -0,0 +1,21 @@ +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// Overwrites a CV in direct mode on the programming track (protocol §6.2). CV address 0 = CV1. + /// + public class CvWriteCommand : IZ21Command + { + public CvWriteCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort cvAddress, byte value) + { + (byte msb, byte lsb) = addressCodec.SplitCvAddress(cvAddress); + Data = frameBuilder.BuildXBus(0x24, 0x12, msb, lsb, value); + } + + public string Name => "LAN_X_CV_WRITE"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/DccReadRegisterCommand.cs b/src/Z21.Client/Core/Command/Programming/DccReadRegisterCommand.cs new file mode 100644 index 0000000..c83b180 --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/DccReadRegisterCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// From Z21 FW version 1.25, reads a register of a DCC decoder in register mode on the programming + /// track (protocol §6.13). Register range 0x01–0x08. + /// + public class DccReadRegisterCommand : IZ21Command + { + public DccReadRegisterCommand(IZ21FrameBuilder frameBuilder, byte register) + { + Data = frameBuilder.BuildXBus(0x22, 0x11, register); + } + + public string Name => "LAN_X_DCC_READ_REGISTER"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/DccWriteRegisterCommand.cs b/src/Z21.Client/Core/Command/Programming/DccWriteRegisterCommand.cs new file mode 100644 index 0000000..27748c3 --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/DccWriteRegisterCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// From Z21 FW version 1.25, overwrites a register of a DCC decoder in register mode on the + /// programming track (protocol §6.14). Register range 0x01–0x08. + /// + public class DccWriteRegisterCommand : IZ21Command + { + public DccWriteRegisterCommand(IZ21FrameBuilder frameBuilder, byte register, byte value) + { + Data = frameBuilder.BuildXBus(0x23, 0x12, register, value); + } + + public string Name => "LAN_X_DCC_WRITE_REGISTER"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Programming/MmWriteByteCommand.cs b/src/Z21.Client/Core/Command/Programming/MmWriteByteCommand.cs new file mode 100644 index 0000000..bbfe90f --- /dev/null +++ b/src/Z21.Client/Core/Command/Programming/MmWriteByteCommand.cs @@ -0,0 +1,20 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.Programming +{ + /// + /// From Z21 FW version 1.23, overwrites a register of a Motorola decoder on the programming track + /// (protocol §6.12). Register range 0–78. + /// + public class MmWriteByteCommand : IZ21Command + { + public MmWriteByteCommand(IZ21FrameBuilder frameBuilder, byte register, byte value) + { + Data = frameBuilder.BuildXBus(0x24, 0xFF, 0x00, register, value); + } + + public string Name => "LAN_X_MM_WRITE_BYTE"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/RailCom/GetRailComDataCommand.cs b/src/Z21.Client/Core/Command/RailCom/GetRailComDataCommand.cs new file mode 100644 index 0000000..f5f5429 --- /dev/null +++ b/src/Z21.Client/Core/Command/RailCom/GetRailComDataCommand.cs @@ -0,0 +1,22 @@ +using System; +using Z21.Core.Framing; + +namespace Z21.Core.Command.RailCom +{ + /// + /// From Z21 FW version 1.29, requests RailCom data for a given locomotive address (protocol §8.2). + /// Locomotive address 0 returns the next locomotive in the ring buffer. + /// + public class GetRailComDataCommand : IZ21Command + { + public GetRailComDataCommand(IZ21FrameBuilder frameBuilder, ushort locoAddress) + { + byte[] address = BitConverter.GetBytes(locoAddress); + Data = frameBuilder.BuildLan(0x0089, 0x01, address[0], address[1]); + } + + public string Name => "LAN_RAILCOM_GETDATA"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Command/Settings/GetAccessoryModeCommand.cs b/src/Z21.Client/Core/Command/Settings/GetAccessoryModeCommand.cs index c0a47eb..5d40744 100644 --- a/src/Z21.Client/Core/Command/Settings/GetAccessoryModeCommand.cs +++ b/src/Z21.Client/Core/Command/Settings/GetAccessoryModeCommand.cs @@ -1,9 +1,10 @@ -using System; +using Z21.Core.Codecs; +using Z21.Core.Framing; namespace Z21.Core.Command.Settings { /// - /// Read the settings for a given accessory decoder address ("Accessory Decoder" RP-9.2.1). + /// Read the settings for a given accessory decoder address ("Accessory Decoder" RP-9.2.1). /// /// /// In the Z21, the output format (DCC, MM) is persistently stored for each accessory decoder address. @@ -11,24 +12,14 @@ namespace Z21.Core.Command.Settings /// public class GetAccessoryModeCommand : IZ21Command { - public GetAccessoryModeCommand(short locoAddress) + public GetAccessoryModeCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, short accessoryAddress) { - byte[] addressBytes = BitConverter.GetBytes(locoAddress); - Array.Reverse(addressBytes); - - Data = - [ - 0x06, - 0x00, - 0x70, - 0x00, - addressBytes[0], - addressBytes[1] - ]; + (byte msb, byte lsb) = addressCodec.SplitAddressBigEndian((ushort)accessoryAddress); + Data = frameBuilder.BuildLan(0x0070, msb, lsb); } public string Name => "LAN_GET_TURNOUTMODE"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Settings/GetLocoModeCommand.cs b/src/Z21.Client/Core/Command/Settings/GetLocoModeCommand.cs index 790b5b1..85a2cd3 100644 --- a/src/Z21.Client/Core/Command/Settings/GetLocoModeCommand.cs +++ b/src/Z21.Client/Core/Command/Settings/GetLocoModeCommand.cs @@ -1,4 +1,5 @@ -using System; +using Z21.Core.Codecs; +using Z21.Core.Framing; namespace Z21.Core.Command.Settings { @@ -10,25 +11,14 @@ namespace Z21.Core.Command.Settings /// public class GetLocoModeCommand : IZ21Command { - - public GetLocoModeCommand(short locoAddress) + public GetLocoModeCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, short locoAddress) { - byte[] addressBytes = BitConverter.GetBytes(locoAddress); - Array.Reverse(addressBytes); - - Data = - [ - 0x06, - 0x00, - 0x60, - 0x00, - addressBytes[0], - addressBytes[1] - ]; + (byte msb, byte lsb) = addressCodec.SplitAddressBigEndian((ushort)locoAddress); + Data = frameBuilder.BuildLan(0x0060, msb, lsb); } public string Name => "LAN_GET_LOCOMODE"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Settings/SetAccessoryModeCommand.cs b/src/Z21.Client/Core/Command/Settings/SetAccessoryModeCommand.cs index 5288edd..d1c5dcc 100644 --- a/src/Z21.Client/Core/Command/Settings/SetAccessoryModeCommand.cs +++ b/src/Z21.Client/Core/Command/Settings/SetAccessoryModeCommand.cs @@ -1,4 +1,6 @@ using System; +using Z21.Core.Codecs; +using Z21.Core.Framing; using Z21.Core.Model; namespace Z21.Core.Command.Settings @@ -9,28 +11,17 @@ namespace Z21.Core.Command.Settings public class SetAccessoryModeCommand : IZ21Command { /// Is thrown when is - public SetAccessoryModeCommand(short accessoryAddress, DecoderMode decoderMode) + public SetAccessoryModeCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, short accessoryAddress, DecoderMode decoderMode) { if (decoderMode is DecoderMode.Unknown) throw new ArgumentException($"{DecoderMode.Unknown} is not a valid DecoderMode.", nameof(decoderMode)); - byte[] addressBytes = BitConverter.GetBytes(accessoryAddress); - Array.Reverse(addressBytes); - - Data = - [ - 0x07, - 0x00, - 0x71, - 0x00, - addressBytes[0], - addressBytes[1], - (byte)decoderMode - ]; + (byte msb, byte lsb) = addressCodec.SplitAddressBigEndian((ushort)accessoryAddress); + Data = frameBuilder.BuildLan(0x0071, msb, lsb, (byte)decoderMode); } public string Name => "LAN_SET_TURNOUTMODE"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Settings/SetLocoModeCommand.cs b/src/Z21.Client/Core/Command/Settings/SetLocoModeCommand.cs index 3a8de9c..c29d77e 100644 --- a/src/Z21.Client/Core/Command/Settings/SetLocoModeCommand.cs +++ b/src/Z21.Client/Core/Command/Settings/SetLocoModeCommand.cs @@ -1,4 +1,6 @@ using System; +using Z21.Core.Codecs; +using Z21.Core.Framing; using Z21.Core.Model; namespace Z21.Core.Command.Settings @@ -9,28 +11,17 @@ namespace Z21.Core.Command.Settings public class SetLocoModeCommand : IZ21Command { /// Is thrown when is - public SetLocoModeCommand(short locoAddress, DecoderMode decoderMode) + public SetLocoModeCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, short locoAddress, DecoderMode decoderMode) { if (decoderMode is DecoderMode.Unknown) throw new ArgumentException($"{DecoderMode.Unknown} is not a valid DecoderMode.", nameof(decoderMode)); - byte[] addressBytes = BitConverter.GetBytes(locoAddress); - Array.Reverse(addressBytes); - - Data = - [ - 0x07, - 0x00, - 0x61, - 0x00, - addressBytes[0], - addressBytes[1], - (byte)decoderMode - ]; + (byte msb, byte lsb) = addressCodec.SplitAddressBigEndian((ushort)locoAddress); + Data = frameBuilder.BuildLan(0x0061, msb, lsb, (byte)decoderMode); } public string Name => "LAN_SET_LOCOMODE"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Switching/GetExtAccessoryInfoCommand.cs b/src/Z21.Client/Core/Command/Switching/GetExtAccessoryInfoCommand.cs index 19ff68f..c16b2e6 100644 --- a/src/Z21.Client/Core/Command/Switching/GetExtAccessoryInfoCommand.cs +++ b/src/Z21.Client/Core/Command/Switching/GetExtAccessoryInfoCommand.cs @@ -1,4 +1,5 @@ -using Z21.Core.Helper; +using Z21.Core.Codecs; +using Z21.Core.Framing; namespace Z21.Core.Command.Switching { @@ -7,23 +8,14 @@ namespace Z21.Core.Command.Switching /// public class GetExtAccessoryInfoCommand : IZ21Command { - public GetExtAccessoryInfoCommand(ushort accessoryAddress) + public GetExtAccessoryInfoCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort accessoryAddress) { - (byte lsb, byte msb) = AddressHelper.SplitAccessoryAddress(accessoryAddress); - Data = - [ - 0x09, 0x00, - 0x40, 0x00, - 0x44, - msb, - lsb, - 0x00, - (byte)(0x44 ^ msb ^ lsb ^ 0x00) - ]; + (byte lsb, byte msb) = addressCodec.SplitExtAccessoryAddress(accessoryAddress); + Data = frameBuilder.BuildXBus(0x44, msb, lsb, 0x00); } public string Name => "LAN_X_GET_EXT_ACCESSORY_INFO"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Switching/GetTurnoutInfoCommand.cs b/src/Z21.Client/Core/Command/Switching/GetTurnoutInfoCommand.cs index ef7b061..b3734de 100644 --- a/src/Z21.Client/Core/Command/Switching/GetTurnoutInfoCommand.cs +++ b/src/Z21.Client/Core/Command/Switching/GetTurnoutInfoCommand.cs @@ -1,5 +1,6 @@ using System; -using Z21.Core.Helper; +using Z21.Core.Codecs; +using Z21.Core.Framing; namespace Z21.Core.Command.Switching { @@ -9,22 +10,14 @@ namespace Z21.Core.Command.Switching public class GetTurnoutInfoCommand : IZ21Command { /// Thrown when is smaller than 1. - public GetTurnoutInfoCommand(ushort accessoryAddress) + public GetTurnoutInfoCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort accessoryAddress) { - (byte lsb, byte msb) = AddressHelper.SplitAccessoryAddress(accessoryAddress); - Data = - [ - 0x08, 0x00, - 0x40, 0x00, - 0x43, - msb, - lsb, - (byte)(0x43 ^ msb ^ lsb) - ]; + (byte lsb, byte msb) = addressCodec.SplitAccessoryAddress(accessoryAddress); + Data = frameBuilder.BuildXBus(0x43, msb, lsb); } public string Name => "LAN_X_GET_TURNOUT_INFO"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Switching/SetExtAccessoryCommand.cs b/src/Z21.Client/Core/Command/Switching/SetExtAccessoryCommand.cs index 32121d4..b6e11d8 100644 --- a/src/Z21.Client/Core/Command/Switching/SetExtAccessoryCommand.cs +++ b/src/Z21.Client/Core/Command/Switching/SetExtAccessoryCommand.cs @@ -1,4 +1,5 @@ -using Z21.Core.Helper; +using Z21.Core.Codecs; +using Z21.Core.Framing; using Z21.Core.Model.ExcAccessoryPayload; namespace Z21.Core.Command.Switching @@ -13,7 +14,7 @@ public class SetExtAccessoryCommand : IZ21Command /// /// The 10837 Z21 signaldecoder interprets as one of 256 theoretically possible signal aspects. The actual value range depends to a large extent on the signal type set in the signal decoder. See for all possible values. /// The 10836 Z21 switch DECODER interprets the payload as "switch decoder with reception of switching time". Use to generate payload. - public SetExtAccessoryCommand(ushort accessoryAddress, IExcAccessoryPayload payload) : this(accessoryAddress, (byte)payload.Payload) + public SetExtAccessoryCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort accessoryAddress, IExcAccessoryPayload payload) : this(frameBuilder, addressCodec, accessoryAddress, (byte)payload.Payload) { } @@ -22,25 +23,14 @@ public SetExtAccessoryCommand(ushort accessoryAddress, IExcAccessoryPayload payl /// /// The 10837 Z21 signaldecoder interprets as one of 256 theoretically possible signal aspects. The actual value range depends to a large extent on the signal type set in the signal decoder. See for all possible values. /// The 10836 Z21 switch DECODER interprets the payload as "switch decoder with reception of switching time". Use to generate payload. - public SetExtAccessoryCommand(ushort accessoryAddress, byte payload) + public SetExtAccessoryCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort accessoryAddress, byte payload) { - (byte lsb, byte msb) = AddressHelper.SplitAccessoryAddress(accessoryAddress); - - Data = - [ - 0x0A, 0x00, - 0x40, 0x00, - 0x54, - msb, - lsb, - payload, - 0x00, - (byte)(0x54 ^ msb ^ lsb ^ payload ^ 0x00) - ]; + (byte lsb, byte msb) = addressCodec.SplitExtAccessoryAddress(accessoryAddress); + Data = frameBuilder.BuildXBus(0x54, msb, lsb, payload, 0x00); } public string Name => "LAN_X_SET_EXT_ACCESSORY"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Switching/SetTurnoutCommand.cs b/src/Z21.Client/Core/Command/Switching/SetTurnoutCommand.cs index c9c8de2..95862da 100644 --- a/src/Z21.Client/Core/Command/Switching/SetTurnoutCommand.cs +++ b/src/Z21.Client/Core/Command/Switching/SetTurnoutCommand.cs @@ -1,5 +1,6 @@ using System; -using Z21.Core.Helper; +using Z21.Core.Codecs; +using Z21.Core.Framing; using Z21.Core.Model; namespace Z21.Core.Command.Switching @@ -16,25 +17,15 @@ namespace Z21.Core.Command.Switching public class SetTurnoutCommand : IZ21Command { /// Thrown when is smaller than 1. - public SetTurnoutCommand(ushort accessoryAddress, AccessoryOutput accessoryOutput, AccessoryState accessoryState, bool executeImmediately) + public SetTurnoutCommand(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ushort accessoryAddress, AccessoryOutput accessoryOutput, AccessoryState accessoryState, bool executeImmediately) { - (byte lsb, byte msb) = AddressHelper.SplitAccessoryAddress(accessoryAddress); - byte db2 = (byte)(0x80 | (int)accessoryOutput | (int)accessoryState | (executeImmediately ? 0x20 : 0x00)); - - Data = - [ - 0x09, 0x00, - 0x40, 0x00, - 0x53, - msb, - lsb, - db2, - (byte)(0x53 ^ msb ^ lsb ^ db2) - ]; + (byte lsb, byte msb) = addressCodec.SplitAccessoryAddress(accessoryAddress); + byte db2 = (byte)(0x80 | (int)accessoryOutput | (int)accessoryState | (executeImmediately ? 0x00 : 0x20)); + Data = frameBuilder.BuildXBus(0x53, msb, lsb, db2); } public string Name => "LAN_X_SET_TURNOUT"; public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/GetBroadcastFlagsCommand.cs b/src/Z21.Client/Core/Command/SystemState/GetBroadcastFlagsCommand.cs index a1ee498..02179e8 100644 --- a/src/Z21.Client/Core/Command/SystemState/GetBroadcastFlagsCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/GetBroadcastFlagsCommand.cs @@ -1,18 +1,19 @@ -namespace Z21.Core.Command.SystemState +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState { /// /// Reading the broadcast flags in the Z21. /// public class GetBroadcastFlagsCommand : IZ21Command { + public GetBroadcastFlagsCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x0051); + } + public string Name => "LAN_GET_BROADCASTFLAGS"; - public byte[] Data { get; } = - [ - 0x04, - 0x00, - 0x51, - 0x00 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/GetFirmwareVersionCommand.cs b/src/Z21.Client/Core/Command/SystemState/GetFirmwareVersionCommand.cs index 09ceeb4..b09a642 100644 --- a/src/Z21.Client/Core/Command/SystemState/GetFirmwareVersionCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/GetFirmwareVersionCommand.cs @@ -1,21 +1,19 @@ -namespace Z21.Core.Command.SystemState +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState { /// /// The firmware version of the Z21 can be read with this command. /// public class GetFirmwareVersionCommand : IZ21Command { + public GetFirmwareVersionCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildXBus(0xF1, 0x0A); + } + public string Name => "LAN_X_GET_FIRMWARE_VERSION"; - public byte[] Data { get; } = - [ - 0x07, - 0x00, - 0x40, - 0x00, - 0xF1, - 0x0A, - 0xF1 ^ 0x0A - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/GetHardwareInfoCommand.cs b/src/Z21.Client/Core/Command/SystemState/GetHardwareInfoCommand.cs index d6c92cf..b576fad 100644 --- a/src/Z21.Client/Core/Command/SystemState/GetHardwareInfoCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/GetHardwareInfoCommand.cs @@ -1,3 +1,5 @@ +using Z21.Core.Framing; + namespace Z21.Core.Command.SystemState { /// @@ -5,14 +7,13 @@ namespace Z21.Core.Command.SystemState /// public class GetHardwareInfoCommand : IZ21Command { + public GetHardwareInfoCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x001A); + } + public string Name => "LAN_GET_HWINFO"; - public byte[] Data { get; } = - [ - 0x04, - 0x00, - 0x1A, - 0x00 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/GetSerialNumberCommand.cs b/src/Z21.Client/Core/Command/SystemState/GetSerialNumberCommand.cs index 81dc090..64bf2fe 100644 --- a/src/Z21.Client/Core/Command/SystemState/GetSerialNumberCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/GetSerialNumberCommand.cs @@ -1,18 +1,19 @@ -namespace Z21.Core.Command.SystemState +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState { /// /// Reading the serial number of the Z21. /// public class GetSerialNumberCommand : IZ21Command { + public GetSerialNumberCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x0010); + } + public string Name => "LAN_GET_SERIAL_NUMBER"; - public byte[] Data { get; } = - [ - 0x04, - 0x00, - 0x10, - 0x00 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/GetSoftwareLockCommand.cs b/src/Z21.Client/Core/Command/SystemState/GetSoftwareLockCommand.cs index 8fb141c..3f280e4 100644 --- a/src/Z21.Client/Core/Command/SystemState/GetSoftwareLockCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/GetSoftwareLockCommand.cs @@ -1,3 +1,5 @@ +using Z21.Core.Framing; + namespace Z21.Core.Command.SystemState { /// @@ -6,14 +8,13 @@ namespace Z21.Core.Command.SystemState /// This command is of particular interest for the hardware variant "z21 start", in order to be able to check whether driving and switching via LAN is blocked or permitted. public class GetSoftwareLockCommand : IZ21Command { + public GetSoftwareLockCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x0018); + } + public string Name => "LAN_GET_CODE"; - public byte[] Data { get; } = - [ - 0x04, - 0x00, - 0x18, - 0x00 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/GetStatusCommand.cs b/src/Z21.Client/Core/Command/SystemState/GetStatusCommand.cs index 629960d..a6cadec 100644 --- a/src/Z21.Client/Core/Command/SystemState/GetStatusCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/GetStatusCommand.cs @@ -1,19 +1,19 @@ -namespace Z21.Core.Command.SystemState +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState { /// /// This command can be used to request the Z21 status. /// public class GetStatusCommand : IZ21Command { + public GetStatusCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildXBus(0x21, 0x24); + } + public string Name => "LAN_X_GET_STATUS"; - public byte[] Data { get; } = - [ - 0x07, 0x00, //DataLen - 0x40, 0x00, //Header - 0x21, // X-Header - 0x24, // DB0 - 0x21 ^ 0x24 // XOR-Byte - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/GetSystemStateDataCommand.cs b/src/Z21.Client/Core/Command/SystemState/GetSystemStateDataCommand.cs index 76ec424..59c270d 100644 --- a/src/Z21.Client/Core/Command/SystemState/GetSystemStateDataCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/GetSystemStateDataCommand.cs @@ -1,3 +1,5 @@ +using Z21.Core.Framing; + namespace Z21.Core.Command.SystemState { /// @@ -5,14 +7,13 @@ namespace Z21.Core.Command.SystemState /// public class GetSystemStateDataCommand : IZ21Command { + public GetSystemStateDataCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x0085); + } + public string Name => "LAN_SYSTEMSTATE_GETDATA"; - public byte[] Data { get; } = - [ - 0x04, - 0x00, - 0x85, - 0x00 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/GetVersionCommand.cs b/src/Z21.Client/Core/Command/SystemState/GetVersionCommand.cs index 336a770..f9eef0d 100644 --- a/src/Z21.Client/Core/Command/SystemState/GetVersionCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/GetVersionCommand.cs @@ -1,19 +1,19 @@ -namespace Z21.Core.Command.SystemState +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState { /// /// The X-Bus version of the Z21 can be read out with the following command. /// public class GetVersionCommand : IZ21Command { + public GetVersionCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildXBus(0x21, 0x21); + } + public string Name => "LAN_X_GET_VERSION"; - public byte[] Data { get; } = - [ - 0x07, 0x00, - 0x40, 0x00, - 0x21, - 0x21, - 0x21 ^ 0x21 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/LogOffCommand.cs b/src/Z21.Client/Core/Command/SystemState/LogOffCommand.cs index 6046c8d..26c3b38 100644 --- a/src/Z21.Client/Core/Command/SystemState/LogOffCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/LogOffCommand.cs @@ -1,18 +1,19 @@ -namespace Z21.Core.Command.SystemState +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState { /// - /// Logging off the client from the Z21. + /// Logging off the client from the Z21. /// public class LogOffCommand : IZ21Command { + public LogOffCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x0030); + } + public string Name => "LAN_LOGOFF"; - public byte[] Data { get; } = - [ - 0x04, - 0x00, - 0x30, - 0x00 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/SetBroadcastFlagsCommand.cs b/src/Z21.Client/Core/Command/SystemState/SetBroadcastFlagsCommand.cs index 3e17ecd..4045a4d 100644 --- a/src/Z21.Client/Core/Command/SystemState/SetBroadcastFlagsCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/SetBroadcastFlagsCommand.cs @@ -1,5 +1,6 @@ -using System; +using System; using System.Linq; +using Z21.Core.Framing; using Z21.Core.Model; namespace Z21.Core.Command.SystemState @@ -9,24 +10,15 @@ namespace Z21.Core.Command.SystemState /// public class SetBroadcastFlagsCommand : IZ21Command { - public string Name => "LAN_SET_BROADCASTFLAGS"; - - public SetBroadcastFlagsCommand(params uint[] flags) + public SetBroadcastFlagsCommand(IZ21FrameBuilder frameBuilder, params uint[] flags) { uint flag = flags.Length > 0 ? flags.Aggregate((u, u1) => u | u1) : 0; - byte[] broadcastFlags = BitConverter.GetBytes(flag); - Data = - [ - 0x08, 0x00, - 0x50, 0x00, - broadcastFlags[0], - broadcastFlags[1], - broadcastFlags[2], - broadcastFlags[3], - ]; + Data = frameBuilder.BuildLan(0x0050, broadcastFlags[0], broadcastFlags[1], broadcastFlags[2], broadcastFlags[3]); } + public string Name => "LAN_SET_BROADCASTFLAGS"; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/TrackPower/SetStopCommand.cs b/src/Z21.Client/Core/Command/SystemState/TrackPower/SetStopCommand.cs index e0e8b2c..c4e26b9 100644 --- a/src/Z21.Client/Core/Command/SystemState/TrackPower/SetStopCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/TrackPower/SetStopCommand.cs @@ -1,18 +1,19 @@ -namespace Z21.Core.Command.SystemState.TrackPower +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState.TrackPower { /// /// With this command the emergency stop is activated, i.e. the locomotives are stopped but the track voltage remains switched on. /// public class SetStopCommand : IZ21Command { + public SetStopCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildXBus(0x80); + } + public string Name => "LAN_X_SET_STOP"; - public byte[] Data { get; } = - [ - 0x06, 0x00, - 0x40, 0x00, - 0x80, - 0x0 ^ 0x80 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/TrackPower/SetTrackPowerOffCommand.cs b/src/Z21.Client/Core/Command/SystemState/TrackPower/SetTrackPowerOffCommand.cs index a6616a2..4b3e06a 100644 --- a/src/Z21.Client/Core/Command/SystemState/TrackPower/SetTrackPowerOffCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/TrackPower/SetTrackPowerOffCommand.cs @@ -1,19 +1,19 @@ -namespace Z21.Core.Command.SystemState.TrackPower +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState.TrackPower { /// /// This command switches off the track voltage. /// public class SetTrackPowerOffCommand : IZ21Command { + public SetTrackPowerOffCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildXBus(0x21, 0x80); + } + public string Name => "LAN_X_SET_TRACK_POWER_OFF"; - public byte[] Data { get; } = - [ - 0x07, 0x00, - 0x40, 0x00, - 0x21, - 0x80, - 0x21 ^ 0x80 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/SystemState/TrackPower/SetTrackPowerOnCommand.cs b/src/Z21.Client/Core/Command/SystemState/TrackPower/SetTrackPowerOnCommand.cs index 5334cd8..3359afd 100644 --- a/src/Z21.Client/Core/Command/SystemState/TrackPower/SetTrackPowerOnCommand.cs +++ b/src/Z21.Client/Core/Command/SystemState/TrackPower/SetTrackPowerOnCommand.cs @@ -1,19 +1,19 @@ -namespace Z21.Core.Command.SystemState.TrackPower +using Z21.Core.Framing; + +namespace Z21.Core.Command.SystemState.TrackPower { /// /// This command switches on the track voltage, or terminates either the emergency stop or the programming mode. /// public class SetTrackPowerOnCommand : IZ21Command { + public SetTrackPowerOnCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildXBus(0x21, 0x81); + } + public string Name => "LAN_X_SET_TRACK_POWER_ON"; - public byte[] Data { get; } = - [ - 0x07, 0x00, - 0x40, 0x00, - 0x21, - 0x81, - 0x21 ^ 0x81 - ]; + public byte[] Data { get; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Command/Z21CommandFactory.cs b/src/Z21.Client/Core/Command/Z21CommandFactory.cs new file mode 100644 index 0000000..ecdc3c3 --- /dev/null +++ b/src/Z21.Client/Core/Command/Z21CommandFactory.cs @@ -0,0 +1,37 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Z21.Core.Codecs; +using Z21.Core.Framing; + +namespace Z21.Core.Command +{ + public class Z21CommandFactory : IZ21CommandFactory + { + private readonly IServiceProvider _encodingServices; + + public Z21CommandFactory(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ILocoSpeedCodec locoSpeedCodec) + { + ArgumentNullException.ThrowIfNull(frameBuilder); + ArgumentNullException.ThrowIfNull(addressCodec); + ArgumentNullException.ThrowIfNull(locoSpeedCodec); + _encodingServices = new EncodingServiceProvider(frameBuilder, addressCodec, locoSpeedCodec); + } + + public TCommand Create(params object[] args) where TCommand : IZ21Command => + (TCommand)ActivatorUtilities.CreateInstance(_encodingServices, typeof(TCommand), args); + + private sealed class EncodingServiceProvider(IZ21FrameBuilder frameBuilder, IAddressCodec addressCodec, ILocoSpeedCodec locoSpeedCodec) : IServiceProvider + { + public object? GetService(Type serviceType) + { + if (serviceType == typeof(IZ21FrameBuilder)) + return frameBuilder; + if (serviceType == typeof(IAddressCodec)) + return addressCodec; + if (serviceType == typeof(ILocoSpeedCodec)) + return locoSpeedCodec; + return null; + } + } + } +} diff --git a/src/Z21.Client/Core/Command/ZLink/GetZLinkHardwareInfoCommand.cs b/src/Z21.Client/Core/Command/ZLink/GetZLinkHardwareInfoCommand.cs new file mode 100644 index 0000000..2451a9e --- /dev/null +++ b/src/Z21.Client/Core/Command/ZLink/GetZLinkHardwareInfoCommand.cs @@ -0,0 +1,19 @@ +using Z21.Core.Framing; + +namespace Z21.Core.Command.ZLink +{ + /// + /// Queries the properties of a 10838 Z21 pro LINK adapter (LAN_ZLINK_GET_HWINFO, protocol §11.1.1.1). + /// + public class GetZLinkHardwareInfoCommand : IZ21Command + { + public GetZLinkHardwareInfoCommand(IZ21FrameBuilder frameBuilder) + { + Data = frameBuilder.BuildLan(0x00E8, 0x06); + } + + public string Name => "LAN_ZLINK_GET_HWINFO"; + + public byte[] Data { get; } + } +} diff --git a/src/Z21.Client/Core/Exception/LocoSpeedOutOfRangeException.cs b/src/Z21.Client/Core/Exception/LocoSpeedOutOfRangeException.cs index 1ed550b..c067028 100644 --- a/src/Z21.Client/Core/Exception/LocoSpeedOutOfRangeException.cs +++ b/src/Z21.Client/Core/Exception/LocoSpeedOutOfRangeException.cs @@ -10,11 +10,11 @@ public static void ThrowIfOutOfRange(DccSpeedMode dccSpeedMode, ushort locoSpeed switch (dccSpeedMode) { case DccSpeedMode.Steps14 when locoSpeed > 14: - throw new LocoSpeedOutOfRangeException($"{nameof(DccSpeedMode.Steps14)} allows for a maximum speed of 13 steps.", nameof(locoSpeed)); + throw new LocoSpeedOutOfRangeException($"{nameof(DccSpeedMode.Steps14)} allows for a maximum speed of 14 steps.", nameof(locoSpeed)); case DccSpeedMode.Steps28 when locoSpeed > 28: - throw new LocoSpeedOutOfRangeException($"{nameof(DccSpeedMode.Steps28)} allows for a maximum speed of 25 steps.", nameof(locoSpeed)); + throw new LocoSpeedOutOfRangeException($"{nameof(DccSpeedMode.Steps28)} allows for a maximum speed of 28 steps.", nameof(locoSpeed)); case DccSpeedMode.Steps128 when locoSpeed > 126: - throw new LocoSpeedOutOfRangeException($"{nameof(DccSpeedMode.Steps128)} allows for a maximum speed of 125 steps.", nameof(locoSpeed)); + throw new LocoSpeedOutOfRangeException($"{nameof(DccSpeedMode.Steps128)} allows for a maximum speed of 126 steps.", nameof(locoSpeed)); default: return; } diff --git a/src/Z21.Client/Core/Exception/MtuPayloadLengthExceededException.cs b/src/Z21.Client/Core/Exception/MtuPayloadLengthExceededException.cs index d3c7e03..70b1f9c 100644 --- a/src/Z21.Client/Core/Exception/MtuPayloadLengthExceededException.cs +++ b/src/Z21.Client/Core/Exception/MtuPayloadLengthExceededException.cs @@ -6,8 +6,8 @@ public class MtuPayloadLengthExceededException(string message) : InvalidOperatio { public static void ThrowIfExceeded(byte[] datagram) { - if (datagram.Length > Z21Client.MaxUdpPayload) - throw new MtuPayloadLengthExceededException($"Combined UDP payload length '{datagram.Length}' exceeds MTU size '{Z21Client.MaxUdpPayload}'."); + if (datagram.Length > Z21CommandStation.MaxUdpPayload) + throw new MtuPayloadLengthExceededException($"Combined UDP payload length '{datagram.Length}' exceeds MTU size '{Z21CommandStation.MaxUdpPayload}'."); } } } \ No newline at end of file diff --git a/src/Z21.Client/Core/Exception/NotConnectedException.cs b/src/Z21.Client/Core/Exception/NotConnectedException.cs new file mode 100644 index 0000000..f6c4528 --- /dev/null +++ b/src/Z21.Client/Core/Exception/NotConnectedException.cs @@ -0,0 +1,11 @@ +using System; + +namespace Z21.Core.Exception +{ + /// + /// Thrown when a command is sent before the command station has been connected. + /// + public class NotConnectedException(string message) : InvalidOperationException(message) + { + } +} diff --git a/src/Z21.Client/Core/Framing/IZ21FrameBuilder.cs b/src/Z21.Client/Core/Framing/IZ21FrameBuilder.cs new file mode 100644 index 0000000..24c751e --- /dev/null +++ b/src/Z21.Client/Core/Framing/IZ21FrameBuilder.cs @@ -0,0 +1,26 @@ +namespace Z21.Core.Framing +{ + /// + /// Assembles outbound Z21 LAN frames, prepending the little-endian DataLen prefix and (for X-Bus + /// frames) appending the trailing XOR checksum. + /// + public interface IZ21FrameBuilder + { + /// + /// Builds a plain LAN frame: [DataLen][header][payload], with no checksum. + /// + byte[] BuildLan(ushort header, params byte[] payload); + + /// + /// Builds an X-Bus frame under LAN header 0x40 0x00: [DataLen][0x40 0x00][xHeader][data][XOR], + /// where the XOR runs over the X-header and data bytes. + /// + byte[] BuildXBus(byte xHeader, params byte[] data); + + /// + /// Builds a LAN frame that carries a trailing XOR checksum over its data bytes (used by non X-Bus + /// LAN messages such as LAN_FAST_CLOCK_CONTROL): [DataLen][header][data][XOR]. + /// + byte[] BuildLanChecksummed(ushort header, params byte[] data); + } +} diff --git a/src/Z21.Client/Core/Framing/Z21FrameBuilder.cs b/src/Z21.Client/Core/Framing/Z21FrameBuilder.cs new file mode 100644 index 0000000..172dfd2 --- /dev/null +++ b/src/Z21.Client/Core/Framing/Z21FrameBuilder.cs @@ -0,0 +1,52 @@ +using System; + +namespace Z21.Core.Framing +{ + public class Z21FrameBuilder : IZ21FrameBuilder + { + public byte[] BuildLan(ushort header, params byte[] payload) + { + ArgumentNullException.ThrowIfNull(payload); + + ushort length = (ushort)(4 + payload.Length); + byte[] frame = new byte[length]; + frame[0] = (byte)(length & 0xFF); + frame[1] = (byte)(length >> 8); + frame[2] = (byte)(header & 0xFF); + frame[3] = (byte)(header >> 8); + Array.Copy(payload, 0, frame, 4, payload.Length); + return frame; + } + + public byte[] BuildXBus(byte xHeader, params byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + + byte[] xBusPayload = new byte[data.Length + 2]; + xBusPayload[0] = xHeader; + Array.Copy(data, 0, xBusPayload, 1, data.Length); + + byte xor = xHeader; + foreach (byte value in data) + xor ^= value; + xBusPayload[^1] = xor; + + return BuildLan(0x0040, xBusPayload); + } + + public byte[] BuildLanChecksummed(ushort header, params byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + + byte[] payload = new byte[data.Length + 1]; + Array.Copy(data, 0, payload, 0, data.Length); + + byte xor = 0; + foreach (byte value in data) + xor ^= value; + payload[^1] = xor; + + return BuildLan(header, payload); + } + } +} diff --git a/src/Z21.Client/Core/Framing/Z21FrameReader.cs b/src/Z21.Client/Core/Framing/Z21FrameReader.cs new file mode 100644 index 0000000..2e5a911 --- /dev/null +++ b/src/Z21.Client/Core/Framing/Z21FrameReader.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using CommandStation.Framing; +using Microsoft.Extensions.Logging; + +namespace Z21.Core.Framing +{ + /// + /// Splits the Z21 byte stream into frames using the leading little-endian DataLen prefix, + /// buffering any partial trailing frame until the rest of its bytes arrive. + /// + public class Z21FrameReader : IFrameReader + { + /// + /// Upper bound for a single frame length. Equals the IPv4-safe UDP payload limit; any declared + /// DataLen above this is treated as a corrupt prefix and the buffer is resynchronised. + /// + private const int MaxFrameLength = 1472; + + private readonly ILogger? _logger; + private readonly List _buffer = []; + + public Z21FrameReader(ILogger? logger = null) + { + _logger = logger; + } + + public event EventHandler? OnFrameReceived; + + public void Append(byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + _buffer.AddRange(data); + + int offset = 0; + while (offset + 2 <= _buffer.Count) + { + ushort dataLen = (ushort)(_buffer[offset] | (_buffer[offset + 1] << 8)); + + if (dataLen == 0 || dataLen > MaxFrameLength) + { + _logger?.LogError("Z21FrameReader read an out-of-range frame length {dataLen}; discarding buffered bytes.", dataLen); + _buffer.Clear(); + return; + } + + if (offset + dataLen > _buffer.Count) + break; + + byte[] frame = new byte[dataLen]; + _buffer.CopyTo(offset, frame, 0, dataLen); + offset += dataLen; + OnFrameReceived?.Invoke(this, new FrameReceivedEventArgs(frame)); + } + + if (offset > 0) + _buffer.RemoveRange(0, offset); + } + } +} diff --git a/src/Z21.Client/Core/Helper/AddressHelper.cs b/src/Z21.Client/Core/Helper/AddressHelper.cs deleted file mode 100644 index 9875864..0000000 --- a/src/Z21.Client/Core/Helper/AddressHelper.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; - -namespace Z21.Core.Helper -{ - public static class AddressHelper - { - public static (byte lsb, byte msb) SplitLocoAddress(ushort address) - { - byte lsb = (byte)(address & 0xFF); - byte msb = (byte)((address >> 8) & 0xFF); - - if (address >= 128) - msb |= 0xC0; - - return (lsb, msb); - } - - /// Thrown when > is smaller than 1. - public static (byte lsb, byte msb) SplitAccessoryAddress(ushort address) - { - if (address < 1) - throw new ArgumentOutOfRangeException(nameof(address), address, "Smallest address is 1"); - - ushort dccAddress = (ushort)(address - 1); - byte msb = (byte)((dccAddress >> 8) & 0xFF); - byte lsb = (byte)(dccAddress & 0xFF); - return (lsb, msb); - } - - public static ushort CombineAccessoryAddress(byte lsb, byte msb) - { - return (ushort)((msb << 8) + lsb + 1); - } - } -} \ No newline at end of file diff --git a/src/Z21.Client/Core/Helper/DelayedAction.cs b/src/Z21.Client/Core/Helper/DelayedAction.cs index 39af772..72f1167 100644 --- a/src/Z21.Client/Core/Helper/DelayedAction.cs +++ b/src/Z21.Client/Core/Helper/DelayedAction.cs @@ -4,7 +4,7 @@ namespace Z21.Core.Helper { - public class DelayedAction + public class DelayedAction : IDisposable { private readonly Timer _connectionKeepAlive; @@ -24,5 +24,13 @@ public void Delay() _connectionKeepAlive.Stop(); _connectionKeepAlive.Start(); } + + public void Stop() => _connectionKeepAlive.Stop(); + + public void Dispose() + { + _connectionKeepAlive.Dispose(); + GC.SuppressFinalize(this); + } } } \ No newline at end of file diff --git a/src/Z21.Client/Core/Helper/LocoSpeedHelper.cs b/src/Z21.Client/Core/Helper/LocoSpeedHelper.cs deleted file mode 100644 index 0ed5559..0000000 --- a/src/Z21.Client/Core/Helper/LocoSpeedHelper.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using Z21.Core.Model; - -namespace Z21.Core.Helper -{ - public class LocoSpeedHelper - { - /// - /// Calculates the dcc step that should send to the Z21. - /// - /// - /// - /// - public static ushort CalculateDccSpeed(DccSpeedMode dccSpeedMode, ushort speedStep) => dccSpeedMode switch - { - DccSpeedMode.Steps14 when speedStep > 0 => (ushort)(speedStep + 1), - DccSpeedMode.Steps28 when speedStep > 0 => CalculateDcc28DccSpeed(speedStep + 3), - DccSpeedMode.Steps128 when speedStep > 0 => (ushort)(speedStep + 1), - _ => speedStep - }; - - private static ushort CalculateDcc28DccSpeed(int speedStep) - { - double dcc14Speed = speedStep / 2.0; - int dccSpeed = (int)Math.Floor(dcc14Speed); - - if (dcc14Speed % 1 != 0) - dccSpeed |= 0x10; - return (ushort)dccSpeed; - } - - /// - /// Calculates the dcc speed step that will be sent to event subscribers. - /// - /// - /// - /// - public static ushort CalculateSpeedStep(DccSpeedMode dccSpeedMode, ushort dccSpeed) => dccSpeedMode switch - { - DccSpeedMode.Steps14 when dccSpeed > 1 => (ushort)(dccSpeed - 1), - DccSpeedMode.Steps28 when dccSpeed > 0 => CalculateDcc28SpeedStep(dccSpeed), - DccSpeedMode.Steps128 when dccSpeed > 1 => (ushort)(dccSpeed - 1), - _ => 0 - }; - - private readonly static Dictionary CalculateDcc28SpeedStepLookup = new() - { - { 0, 0 }, { 16, 0 }, - { 1, 0 }, { 17, 0 }, - { 2, 1 }, { 18, 2 }, - { 3, 3 }, { 19, 4 }, - { 4, 5 }, { 20, 6 }, - { 5, 7 }, { 21, 8 }, - { 6, 9 }, { 22, 10 }, - { 7, 11 }, { 23, 12 }, - { 8, 13 }, { 24, 14 }, - { 9, 15 }, { 25, 16 }, - { 10, 17 }, { 26, 18 }, - { 11, 19 }, { 27, 20 }, - { 12, 21 }, { 28, 22 }, - { 13, 23 }, { 29, 24 }, - { 14, 25 }, { 30, 26 }, - { 15, 27 }, { 31, 28 } - }; - - - private static ushort CalculateDcc28SpeedStep(ushort dccSpeed) - { - return CalculateDcc28SpeedStepLookup[dccSpeed]; - } - } -} \ No newline at end of file diff --git a/src/Z21.Client/Core/IZ21Client.cs b/src/Z21.Client/Core/IZ21Client.cs deleted file mode 100644 index ae7e66a..0000000 --- a/src/Z21.Client/Core/IZ21Client.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Threading.Tasks; -using Z21.Core.Command; -using Z21.Core.Exception; -using Z21.Core.Model.EventArgs; - -namespace Z21.Core -{ - public interface IZ21Client - { - event EventHandler? OnConnectionChanged; - - /// - /// Sends to the Z21. - /// - /// Thrown if command length exceeds max udp payload length. - /// Thrown when has not yet been called. - Task SendCommandsAsync(params IZ21Command[] z21Commands); - - Task ConnectAsync(); - - bool IsConnected { get; } - } -} \ No newline at end of file diff --git a/src/Z21.Client/Core/IZ21CommandStation.cs b/src/Z21.Client/Core/IZ21CommandStation.cs new file mode 100644 index 0000000..8ff7e9b --- /dev/null +++ b/src/Z21.Client/Core/IZ21CommandStation.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using CommandStation; +using Z21.Core.Command; + +namespace Z21.Core +{ + /// + /// The Z21 command station: the protocol-agnostic capabilities plus a Z21-specific raw escape hatch + /// for sending hand-built commands. + /// + public interface IZ21CommandStation : ICommandStation, ILocoControl, IAccessoryControl, ITrackPowerControl, ISystemInfoProvider + { + /// + /// Factory for building raw Z21 commands to pass to . + /// + IZ21CommandFactory Commands { get; } + + /// + /// Sends one or more raw commands in a single UDP packet. + /// + Task SendCommandsAsync(params IZ21Command[] commands); + } +} diff --git a/src/Z21.Client/Core/Model/BoosterSystemState.cs b/src/Z21.Client/Core/Model/BoosterSystemState.cs new file mode 100644 index 0000000..51cae2c --- /dev/null +++ b/src/Z21.Client/Core/Model/BoosterSystemState.cs @@ -0,0 +1,21 @@ +namespace Z21.Core.Model +{ + /// + /// zLink booster system state (LAN_BOOSTER_SYSTEMSTATE_DATACHANGED, protocol §11.2.4). Currents + /// are in mA, temperatures in °C, voltages in mV. The four central-state bytes are raw bit masks. + /// + public record BoosterSystemState( + short Booster1MainCurrent, + short Booster2MainCurrent, + short Booster1FilteredMainCurrent, + short Booster2FilteredMainCurrent, + short Booster1Temperature, + short Booster2Temperature, + ushort SupplyVoltage, + ushort Booster1VccVoltage, + ushort Booster2VccVoltage, + byte CentralState, + byte CentralStateEx, + byte CentralStateEx2, + byte CentralStateEx3); +} diff --git a/src/Z21.Client/Core/Model/CanBoosterState.cs b/src/Z21.Client/Core/Model/CanBoosterState.cs new file mode 100644 index 0000000..99f0d5c --- /dev/null +++ b/src/Z21.Client/Core/Model/CanBoosterState.cs @@ -0,0 +1,28 @@ +using System; + +namespace Z21.Core.Model +{ + /// + /// CAN booster state bit mask (LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD Booster_State, protocol §10.2.3). + /// + [Flags] + public enum CanBoosterState : ushort + { + None = 0x0000, + + /// Brake generator active (ZCAN SSP). + BrakeGeneratorActive = 0x0001, + + /// Short circuit at the output stage (ZCAN UES). + ShortCircuit = 0x0020, + + /// Track voltage is switched off. + TrackVoltageOff = 0x0080, + + /// Booster output disabled by the user (from booster FW V1.11). + OutputDisabled = 0x0100, + + /// RailCom cutout active. + RailComActive = 0x0800 + } +} diff --git a/src/Z21.Client/Core/Model/CanBoosterSystemState.cs b/src/Z21.Client/Core/Model/CanBoosterSystemState.cs new file mode 100644 index 0000000..0421537 --- /dev/null +++ b/src/Z21.Client/Core/Model/CanBoosterSystemState.cs @@ -0,0 +1,7 @@ +namespace Z21.Core.Model +{ + /// + /// CAN booster system state (LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD, protocol §10.2.3). + /// + public record CanBoosterSystemState(ushort NetworkId, ushort OutputPort, CanBoosterState State, ushort VccVoltage, ushort Current); +} diff --git a/src/Z21.Client/Core/Model/CanDetectorData.cs b/src/Z21.Client/Core/Model/CanDetectorData.cs new file mode 100644 index 0000000..4d37200 --- /dev/null +++ b/src/Z21.Client/Core/Model/CanDetectorData.cs @@ -0,0 +1,8 @@ +namespace Z21.Core.Model +{ + /// + /// A CAN occupancy detector report (LAN_CAN_DETECTOR, protocol §10.1). The meaning of + /// / depends on . + /// + public record CanDetectorData(ushort NetworkId, ushort ModuleAddress, byte Port, byte Type, ushort Value1, ushort Value2); +} diff --git a/src/Z21.Client/Core/Model/EventArgs/BoosterDescriptionReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/BoosterDescriptionReceivedEventArgs.cs new file mode 100644 index 0000000..5a1875e --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/BoosterDescriptionReceivedEventArgs.cs @@ -0,0 +1,10 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries the description of a zLink booster (LAN_BOOSTER_GET_DESCRIPTION reply). + /// + public class BoosterDescriptionReceivedEventArgs(string name) : System.EventArgs + { + public string Name { get; } = name; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/BoosterSystemStateReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/BoosterSystemStateReceivedEventArgs.cs new file mode 100644 index 0000000..98f3ab8 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/BoosterSystemStateReceivedEventArgs.cs @@ -0,0 +1,12 @@ +using Z21.Core.Model; + +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries a zLink booster system state (LAN_BOOSTER_SYSTEMSTATE_DATACHANGED). + /// + public class BoosterSystemStateReceivedEventArgs(BoosterSystemState state) : System.EventArgs + { + public BoosterSystemState State { get; } = state; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/CanBoosterSystemStateReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/CanBoosterSystemStateReceivedEventArgs.cs new file mode 100644 index 0000000..7c64374 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/CanBoosterSystemStateReceivedEventArgs.cs @@ -0,0 +1,12 @@ +using Z21.Core.Model; + +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries a CAN booster system state (LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD). + /// + public class CanBoosterSystemStateReceivedEventArgs(CanBoosterSystemState state) : System.EventArgs + { + public CanBoosterSystemState State { get; } = state; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/CanDetectorReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/CanDetectorReceivedEventArgs.cs new file mode 100644 index 0000000..3a11f36 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/CanDetectorReceivedEventArgs.cs @@ -0,0 +1,12 @@ +using Z21.Core.Model; + +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries a CAN occupancy detector report (LAN_CAN_DETECTOR). + /// + public class CanDetectorReceivedEventArgs(CanDetectorData data) : System.EventArgs + { + public CanDetectorData Data { get; } = data; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/CanDeviceDescriptionReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/CanDeviceDescriptionReceivedEventArgs.cs new file mode 100644 index 0000000..218e215 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/CanDeviceDescriptionReceivedEventArgs.cs @@ -0,0 +1,12 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries the description of a CAN booster (LAN_CAN_DEVICE_GET_DESCRIPTION reply). + /// + public class CanDeviceDescriptionReceivedEventArgs(ushort networkId, string name) : System.EventArgs + { + public ushort NetworkId { get; } = networkId; + + public string Name { get; } = name; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/ConnectionChangedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/ConnectionChangedEventArgs.cs deleted file mode 100644 index 2052747..0000000 --- a/src/Z21.Client/Core/Model/EventArgs/ConnectionChangedEventArgs.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Z21.Core.Model.EventArgs -{ - public class ConnectionChangedEventArgs(bool isConnected) : System.EventArgs - { - public bool IsConnected { get; } = isConnected; - } -} \ No newline at end of file diff --git a/src/Z21.Client/Core/Model/EventArgs/CvResultReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/CvResultReceivedEventArgs.cs new file mode 100644 index 0000000..8ca713d --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/CvResultReceivedEventArgs.cs @@ -0,0 +1,12 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries a positive CV programming result (LAN_X_CV_RESULT): the CV address (0 = CV1) and its value. + /// + public class CvResultReceivedEventArgs(ushort cvAddress, byte value) : System.EventArgs + { + public ushort CvAddress { get; } = cvAddress; + + public byte Value { get; } = value; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/DecoderDescriptionReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/DecoderDescriptionReceivedEventArgs.cs new file mode 100644 index 0000000..373ccc2 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/DecoderDescriptionReceivedEventArgs.cs @@ -0,0 +1,10 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries the description of a zLink decoder (LAN_DECODER_GET_DESCRIPTION reply). + /// + public class DecoderDescriptionReceivedEventArgs(string name) : System.EventArgs + { + public string Name { get; } = name; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/FastClockDataReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/FastClockDataReceivedEventArgs.cs new file mode 100644 index 0000000..3f37c0b --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/FastClockDataReceivedEventArgs.cs @@ -0,0 +1,12 @@ +using Z21.Core.Model; + +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries the current model time (LAN_FAST_CLOCK_DATA). + /// + public class FastClockDataReceivedEventArgs(FastClockData data) : System.EventArgs + { + public FastClockData Data { get; } = data; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/FastClockSettingsReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/FastClockSettingsReceivedEventArgs.cs new file mode 100644 index 0000000..12415e2 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/FastClockSettingsReceivedEventArgs.cs @@ -0,0 +1,12 @@ +using Z21.Core.Model; + +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries the persistent fast-clock settings (LAN_FAST_CLOCK_SETTINGS_GET reply). + /// + public class FastClockSettingsReceivedEventArgs(FastClockSettingsData settings) : System.EventArgs + { + public FastClockSettingsData Settings { get; } = settings; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/HardwareInfoEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/HardwareInfoEventArgs.cs index 6bd93e6..84da762 100644 --- a/src/Z21.Client/Core/Model/EventArgs/HardwareInfoEventArgs.cs +++ b/src/Z21.Client/Core/Model/EventArgs/HardwareInfoEventArgs.cs @@ -1,7 +1,12 @@ namespace Z21.Core.Model.EventArgs { - public class HardwareInfoEventArgs(int z21HardwareType) : System.EventArgs + public class HardwareInfoEventArgs(int z21HardwareType, int firmwareVersion) : System.EventArgs { public int Z21HardwareType { get; init; } = z21HardwareType; + + /// + /// Raw 32-bit firmware version from the HWINFO reply (BCD; e.g. 0x0143 means firmware 1.43). + /// + public int FirmwareVersion { get; init; } = firmwareVersion; } } \ No newline at end of file diff --git a/src/Z21.Client/Core/Model/EventArgs/LocoNetDetectorReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/LocoNetDetectorReceivedEventArgs.cs new file mode 100644 index 0000000..ee24bad --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/LocoNetDetectorReceivedEventArgs.cs @@ -0,0 +1,15 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries a LocoNet occupancy detector report (LAN_LOCONET_DETECTOR). The meaning of + /// depends on (see protocol §9.5). + /// + public class LocoNetDetectorReceivedEventArgs(byte type, ushort reportAddress, byte[] info) : System.EventArgs + { + public byte Type { get; } = type; + + public ushort ReportAddress { get; } = reportAddress; + + public byte[] Info { get; } = info; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/LocoNetDispatchAddressReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/LocoNetDispatchAddressReceivedEventArgs.cs new file mode 100644 index 0000000..5d8655f --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/LocoNetDispatchAddressReceivedEventArgs.cs @@ -0,0 +1,13 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries the result of a LocoNet dispatch request (LAN_LOCONET_DISPATCH_ADDR). + /// 0 indicates the dispatch failed; a positive value is the assigned LocoNet slot. + /// + public class LocoNetDispatchAddressReceivedEventArgs(ushort locoAddress, byte slot) : System.EventArgs + { + public ushort LocoAddress { get; } = locoAddress; + + public byte Slot { get; } = slot; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/LocoNetMessageReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/LocoNetMessageReceivedEventArgs.cs new file mode 100644 index 0000000..590b502 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/LocoNetMessageReceivedEventArgs.cs @@ -0,0 +1,11 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries a raw LocoNet message (including its checksum) tunneled through the Z21 + /// (LAN_LOCONET_Z21_RX/_TX/_FROM_LAN). + /// + public class LocoNetMessageReceivedEventArgs(byte[] message) : System.EventArgs + { + public byte[] Message { get; } = message; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/RailComDataReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/RailComDataReceivedEventArgs.cs new file mode 100644 index 0000000..155b1ca --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/RailComDataReceivedEventArgs.cs @@ -0,0 +1,10 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries parsed RailCom data (LAN_RAILCOM_DATACHANGED). + /// + public class RailComDataReceivedEventArgs(RailComData data) : System.EventArgs + { + public RailComData Data { get; } = data; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/ResponseReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/ResponseReceivedEventArgs.cs deleted file mode 100644 index 00ac865..0000000 --- a/src/Z21.Client/Core/Model/EventArgs/ResponseReceivedEventArgs.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Z21.Core.Model.EventArgs -{ - public class ResponseReceivedEventArgs(byte[] response) : System.EventArgs - { - public byte[] Response { get; } = response; - } -} \ No newline at end of file diff --git a/src/Z21.Client/Core/Model/EventArgs/RmBusDataReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/RmBusDataReceivedEventArgs.cs new file mode 100644 index 0000000..502f20d --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/RmBusDataReceivedEventArgs.cs @@ -0,0 +1,13 @@ +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries an R-BUS feedback status change (LAN_RMBUS_DATACHANGED): the group index and the ten + /// status bytes (one byte per feedback module, one bit per input). + /// + public class RmBusDataReceivedEventArgs(byte groupIndex, byte[] feedbackStates) : System.EventArgs + { + public byte GroupIndex { get; } = groupIndex; + + public byte[] FeedbackStates { get; } = feedbackStates; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/SignalDecoderSystemStateReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/SignalDecoderSystemStateReceivedEventArgs.cs new file mode 100644 index 0000000..9bf12b8 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/SignalDecoderSystemStateReceivedEventArgs.cs @@ -0,0 +1,12 @@ +using Z21.Core.Model; + +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries a 10837 signal decoder system state (LAN_DECODER_SYSTEMSTATE_DATACHANGED). + /// + public class SignalDecoderSystemStateReceivedEventArgs(SignalDecoderSystemState state) : System.EventArgs + { + public SignalDecoderSystemState State { get; } = state; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/SwitchDecoderSystemStateReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/SwitchDecoderSystemStateReceivedEventArgs.cs new file mode 100644 index 0000000..bc1fb82 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/SwitchDecoderSystemStateReceivedEventArgs.cs @@ -0,0 +1,12 @@ +using Z21.Core.Model; + +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries a 10836 switch decoder system state (LAN_DECODER_SYSTEMSTATE_DATACHANGED). + /// + public class SwitchDecoderSystemStateReceivedEventArgs(SwitchDecoderSystemState state) : System.EventArgs + { + public SwitchDecoderSystemState State { get; } = state; + } +} diff --git a/src/Z21.Client/Core/Model/EventArgs/ZLinkHardwareInfoReceivedEventArgs.cs b/src/Z21.Client/Core/Model/EventArgs/ZLinkHardwareInfoReceivedEventArgs.cs new file mode 100644 index 0000000..af8e842 --- /dev/null +++ b/src/Z21.Client/Core/Model/EventArgs/ZLinkHardwareInfoReceivedEventArgs.cs @@ -0,0 +1,12 @@ +using Z21.Core.Model; + +namespace Z21.Core.Model.EventArgs +{ + /// + /// Carries the hardware information of a Z21 pro LINK (LAN_ZLINK_GET_HWINFO reply). + /// + public class ZLinkHardwareInfoReceivedEventArgs(ZLinkHardwareInfo info) : System.EventArgs + { + public ZLinkHardwareInfo Info { get; } = info; + } +} diff --git a/src/Z21.Client/Core/Model/FastClockAction.cs b/src/Z21.Client/Core/Model/FastClockAction.cs new file mode 100644 index 0000000..f74cb27 --- /dev/null +++ b/src/Z21.Client/Core/Model/FastClockAction.cs @@ -0,0 +1,17 @@ +namespace Z21.Core.Model +{ + /// + /// A parameterless fast-clock control action for LAN_FAST_CLOCK_CONTROL (protocol §12.1). + /// + public enum FastClockAction + { + /// Read the current model time. + Read, + + /// Start (resume) the model clock. + Start, + + /// Stop (pause) the model clock. + Stop + } +} diff --git a/src/Z21.Client/Core/Model/FastClockData.cs b/src/Z21.Client/Core/Model/FastClockData.cs new file mode 100644 index 0000000..f2a90f6 --- /dev/null +++ b/src/Z21.Client/Core/Model/FastClockData.cs @@ -0,0 +1,7 @@ +namespace Z21.Core.Model +{ + /// + /// The current model time reported by the Z21 (LAN_FAST_CLOCK_DATA, protocol §12.2). + /// + public record FastClockData(byte Day, byte Hour, byte Minute, byte Second, byte Rate, bool IsStopped, bool IsHalted, FastClockSettings Settings); +} diff --git a/src/Z21.Client/Core/Model/FastClockSettings.cs b/src/Z21.Client/Core/Model/FastClockSettings.cs new file mode 100644 index 0000000..f891fce --- /dev/null +++ b/src/Z21.Client/Core/Model/FastClockSettings.cs @@ -0,0 +1,31 @@ +using System; + +namespace Z21.Core.Model +{ + /// + /// Persistent fast-clock setting flags (FcSettings, protocol §12.3). + /// + [Flags] + public enum FastClockSettings : byte + { + None = 0x00, + + /// Enable polled output on the LocoNet. + LocoNetEnabled = 0x01, + + /// Enable the broadcast on the X-BUS. + XBusEnabled = 0x02, + + /// Enable the DCC broadcast on the track. + DccEnabled = 0x08, + + /// Enable the multicast to MRclock clients. + MRclockEnabled = 0x10, + + /// Automatically halt the model time on emergency stop. + EmergencyHaltEnabled = 0x40, + + /// The fast clock is enabled. + Enabled = 0x80 + } +} diff --git a/src/Z21.Client/Core/Model/FastClockSettingsData.cs b/src/Z21.Client/Core/Model/FastClockSettingsData.cs new file mode 100644 index 0000000..98efed4 --- /dev/null +++ b/src/Z21.Client/Core/Model/FastClockSettingsData.cs @@ -0,0 +1,7 @@ +namespace Z21.Core.Model +{ + /// + /// The persistent fast-clock settings (LAN_FAST_CLOCK_SETTINGS_GET reply, protocol §12.3). + /// + public record FastClockSettingsData(FastClockSettings Settings, byte Rate, byte StartDayHour, byte StartMinute); +} diff --git a/src/Z21.Client/Core/Model/FirmwareVersion.cs b/src/Z21.Client/Core/Model/FirmwareVersion.cs deleted file mode 100644 index a6c4fba..0000000 --- a/src/Z21.Client/Core/Model/FirmwareVersion.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; - -namespace Z21.Core.Model -{ - public sealed class FirmwareVersion(int major, int minor) : IComparable, IEquatable - { - public int Major { get; } = major; - - public int Minor { get; } = minor; - - public string Firmware { get; } = major + "." + minor; - - override public string ToString() => Firmware; - - public bool Equals(FirmwareVersion? other) => Major == other?.Major && Minor == other.Minor; - - override public bool Equals(object? obj) => obj is FirmwareVersion other && Equals(other); - - override public int GetHashCode() => HashCode.Combine(Major, Minor); - - public int CompareTo(FirmwareVersion? other) - { - int majorCmp = Major.CompareTo(other?.Major); - return majorCmp != 0 ? majorCmp : Minor.CompareTo(other?.Minor); - } - - public static bool operator <(FirmwareVersion left, FirmwareVersion right) => left.CompareTo(right) < 0; - - public static bool operator >(FirmwareVersion left, FirmwareVersion right) => left.CompareTo(right) > 0; - - public static bool operator <=(FirmwareVersion left, FirmwareVersion right) => left.CompareTo(right) <= 0; - - public static bool operator >=(FirmwareVersion left, FirmwareVersion right) => left.CompareTo(right) >= 0; - - public static bool operator ==(FirmwareVersion left, FirmwareVersion right) => left.Equals(right); - - public static bool operator !=(FirmwareVersion left, FirmwareVersion right) => !left.Equals(right); - } -} \ No newline at end of file diff --git a/src/Z21.Client/Core/Model/LocoFunctionGroup.cs b/src/Z21.Client/Core/Model/LocoFunctionGroup.cs new file mode 100644 index 0000000..53ae0a5 --- /dev/null +++ b/src/Z21.Client/Core/Model/LocoFunctionGroup.cs @@ -0,0 +1,39 @@ +namespace Z21.Core.Model +{ + /// + /// Identifies a locomotive function group for LAN_X_SET_LOCO_FUNCTION_GROUP. The enum value is + /// the wire "Group" byte; each group carries up to 8 functions in a single command (see protocol §4.3.2). + /// + public enum LocoFunctionGroup : byte + { + /// F0, F4, F3, F2, F1. + Group1 = 0x20, + + /// F5–F8. + Group2 = 0x21, + + /// F9–F12. + Group3 = 0x22, + + /// F13–F20. + Group4 = 0x23, + + /// F21–F28. + Group5 = 0x28, + + /// F29–F36. + Group6 = 0x29, + + /// F37–F44. + Group7 = 0x2A, + + /// F45–F52. + Group8 = 0x2B, + + /// F53–F60. + Group9 = 0x50, + + /// F61–F68. + Group10 = 0x51 + } +} diff --git a/src/Z21.Client/Core/Model/RailComData.cs b/src/Z21.Client/Core/Model/RailComData.cs new file mode 100644 index 0000000..8a6c9a8 --- /dev/null +++ b/src/Z21.Client/Core/Model/RailComData.cs @@ -0,0 +1,7 @@ +namespace Z21.Core.Model +{ + /// + /// RailCom data reported by the Z21 for a decoder (LAN_RAILCOM_DATACHANGED, protocol §8.1). + /// + public record RailComData(ushort LocoAddress, uint ReceiveCounter, ushort ErrorCounter, RailComOptions Options, byte Speed, byte QualityOfService); +} diff --git a/src/Z21.Client/Core/Model/RailComOptions.cs b/src/Z21.Client/Core/Model/RailComOptions.cs new file mode 100644 index 0000000..7e63fae --- /dev/null +++ b/src/Z21.Client/Core/Model/RailComOptions.cs @@ -0,0 +1,23 @@ +using System; + +namespace Z21.Core.Model +{ + /// + /// RailCom data option flags (LAN_RAILCOM_DATACHANGED DB Options) indicating which optional + /// fields the decoder reported. + /// + [Flags] + public enum RailComOptions : byte + { + None = 0x00, + + /// CH7 subindex 0 speed is present. + Speed1 = 0x01, + + /// CH7 subindex 1 speed is present. + Speed2 = 0x02, + + /// CH7 subindex 7 quality of service is present. + QoS = 0x04 + } +} diff --git a/src/Z21.Client/Core/Model/SignalDecoderSystemState.cs b/src/Z21.Client/Core/Model/SignalDecoderSystemState.cs new file mode 100644 index 0000000..b0c5180 --- /dev/null +++ b/src/Z21.Client/Core/Model/SignalDecoderSystemState.cs @@ -0,0 +1,21 @@ +namespace Z21.Core.Model +{ + /// + /// System state of a 10837 signal decoder (LAN_DECODER_SYSTEMSTATE_DATACHANGED, protocol §11.3.4.2). + /// Voltage is in mV. carries the current DCCext signal aspect per signal. + /// + public record SignalDecoderSystemState( + short Current, + short FilteredCurrent, + ushort Voltage, + byte CentralState, + byte CentralStateEx, + byte[] OutputStates, + byte[] BlinkStates, + byte[] SignalDccExt, + byte[] SignalCurrentAspect, + byte SignalCount, + byte[] SignalConfig, + byte[] SignalInitAspect, + ushort Address); +} diff --git a/src/Z21.Client/Core/Model/SwitchDecoderSystemState.cs b/src/Z21.Client/Core/Model/SwitchDecoderSystemState.cs new file mode 100644 index 0000000..750bf89 --- /dev/null +++ b/src/Z21.Client/Core/Model/SwitchDecoderSystemState.cs @@ -0,0 +1,20 @@ +namespace Z21.Core.Model +{ + /// + /// System state of a 10836 switch decoder (LAN_DECODER_SYSTEMSTATE_DATACHANGED, protocol §11.3.4.1). + /// Currents are in mA, voltage in mV. , and + /// each have one entry per output (8 outputs). + /// + public record SwitchDecoderSystemState( + short Current, + short FilteredCurrent, + ushort Voltage, + byte CentralState, + byte CentralStateEx, + byte[] OutputStates, + byte[] OutputConfig, + byte[] OutputDimm, + ushort Address, + ushort Address2, + byte Dimmed); +} diff --git a/src/Z21.Client/Core/Model/Z21Configuration.cs b/src/Z21.Client/Core/Model/Z21Configuration.cs deleted file mode 100644 index c9e254d..0000000 --- a/src/Z21.Client/Core/Model/Z21Configuration.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Net; - -// ReSharper disable InconsistentNaming - -namespace Z21.Core.Model -{ - public class Z21Configuration - { - private IPEndPoint _clientIpEndPoint = Defaults.IpEndPoint; - private bool _allowNatTraversal = true; - - /// - /// IPEndPoint of the Z21. - /// - public IPEndPoint ClientIPEndPoint - { - get => _clientIpEndPoint; - set - { - ArgumentNullException.ThrowIfNull(value); - if (_clientIpEndPoint.Equals(value)) - return; - - _clientIpEndPoint = value; - ConfigurationUpdated?.Invoke(this, System.EventArgs.Empty); - } - } - - /// - /// Enables or disables Network Address Translation (NAT) traversal on a UdpClient instance. - /// - public bool AllowNatTraversal - { - get => _allowNatTraversal; - set - { - if (_allowNatTraversal.Equals(value)) - return; - _allowNatTraversal = value; - ConfigurationUpdated?.Invoke(this, System.EventArgs.Empty); - } - } - - /// - /// Time it takes between a command being sent and a response being received. This Setting should not need changing! - /// - public TimeSpan ResponseTime { get; set; } = TimeSpan.FromSeconds(2); - - /// - /// Configures the default broadcast flags that should be sent to the Z21 - /// - public uint[] BroadcastFlags { get; set; } = Defaults.BroadcastFlags; - - public event EventHandler? ConfigurationUpdated; - - public static class Defaults - { - public readonly static IPEndPoint IpEndPoint = new(IPAddress.Parse("192.168.0.111"), 21105); - - public readonly static uint[] BroadcastFlags = - [ - Z21BroadcastFlags.DriveAndSwitchingMessages, - Z21BroadcastFlags.LocoInfoChangedMessages - ]; - } - } -} \ No newline at end of file diff --git a/src/Z21.Client/Core/Model/ZLinkHardwareInfo.cs b/src/Z21.Client/Core/Model/ZLinkHardwareInfo.cs new file mode 100644 index 0000000..57d1c14 --- /dev/null +++ b/src/Z21.Client/Core/Model/ZLinkHardwareInfo.cs @@ -0,0 +1,7 @@ +namespace Z21.Core.Model +{ + /// + /// Hardware information of a 10838 Z21 pro LINK adapter (LAN_ZLINK_GET_HWINFO reply, protocol §11.1.1.1). + /// + public record ZLinkHardwareInfo(ushort HardwareId, byte FirmwareMajor, byte FirmwareMinor, ushort FirmwareBuild, string MacAddress, string Name); +} diff --git a/src/Z21.Client/Core/Reflection/Z21ServiceDiscovery.cs b/src/Z21.Client/Core/Reflection/Z21ServiceDiscovery.cs new file mode 100644 index 0000000..d799a0d --- /dev/null +++ b/src/Z21.Client/Core/Reflection/Z21ServiceDiscovery.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Z21.Core.Reflection +{ + /// + /// Discovers concrete implementations of a Z21 service contract (response handlers, parsers) for + /// container registration, so both DI containers register an identical set. + /// + public sealed class Z21ServiceDiscovery + { + /// + /// Returns every concrete, non-abstract class in the Z21 assembly that implements . + /// + public IEnumerable GetImplementations(Type baseInterface) => + baseInterface.Assembly + .GetTypes() + .Where(type => type is { IsClass: true, IsAbstract: false } && baseInterface.IsAssignableFrom(type)); + + /// + /// Returns the contract interfaces an implementation should be registered against. The base contract + /// itself is included only when is true (handlers are resolved + /// as IEnumerable<base> by the dispatcher; parsers are not). + /// + public IEnumerable GetServiceInterfaces(Type implementationType, Type baseInterface, bool includeBaseInterface) => + implementationType.GetInterfaces() + .Where(serviceInterface => baseInterface.IsAssignableFrom(serviceInterface) && (includeBaseInterface || serviceInterface != baseInterface)); + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Booster/BoosterDescriptionResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Booster/BoosterDescriptionResponseHandler.cs new file mode 100644 index 0000000..79f46f4 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Booster/BoosterDescriptionResponseHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Text; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.Booster +{ + public interface IBoosterDescriptionResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnBoosterDescriptionReceived; + } + + /// + /// Reports the description of a zLink booster (LAN_BOOSTER_GET_DESCRIPTION reply, protocol §11.2.1). + /// A leading 0xFF means no description has ever been stored and is reported as an empty string. + /// + public class BoosterDescriptionResponseHandler : IBoosterDescriptionResponseHandler + { + private const int NameLength = 32; + + public event EventHandler? OnBoosterDescriptionReceived; + + public string Name => "LAN_BOOSTER_GET_DESCRIPTION"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 4 + NameLength && response[2] == 0xB8 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + string name; + if (response[4] == 0xFF) + name = string.Empty; + else + { + name = Encoding.Latin1.GetString(response, 4, NameLength); + int terminator = name.IndexOf('\0'); + if (terminator >= 0) + name = name[..terminator]; + } + OnBoosterDescriptionReceived?.Invoke(this, new(name)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Booster/BoosterSystemStateResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Booster/BoosterSystemStateResponseHandler.cs new file mode 100644 index 0000000..558d53e --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Booster/BoosterSystemStateResponseHandler.cs @@ -0,0 +1,43 @@ +using System; +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.Booster +{ + public interface IBoosterSystemStateResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnBoosterSystemStateReceived; + } + + /// + /// Reports a zLink booster system state (LAN_BOOSTER_SYSTEMSTATE_DATACHANGED, protocol §11.2.4). + /// + public class BoosterSystemStateResponseHandler : IBoosterSystemStateResponseHandler + { + public event EventHandler? OnBoosterSystemStateReceived; + + public string Name => "LAN_BOOSTER_SYSTEMSTATE_DATACHANGED"; + + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 28, (2, 0xBA), (3, 0x00)); + + public void Handle(byte[] response) + { + BoosterSystemState state = new( + BitConverter.ToInt16(response, 4), + BitConverter.ToInt16(response, 6), + BitConverter.ToInt16(response, 8), + BitConverter.ToInt16(response, 10), + BitConverter.ToInt16(response, 12), + BitConverter.ToInt16(response, 14), + BitConverter.ToUInt16(response, 16), + BitConverter.ToUInt16(response, 18), + BitConverter.ToUInt16(response, 20), + response[22], + response[23], + response[24], + response[26]); + OnBoosterSystemStateReceived?.Invoke(this, new(state)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Can/CanBoosterSystemStateResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Can/CanBoosterSystemStateResponseHandler.cs new file mode 100644 index 0000000..5d82f67 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Can/CanBoosterSystemStateResponseHandler.cs @@ -0,0 +1,38 @@ +using System; +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.Can +{ + public interface ICanBoosterSystemStateResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnCanBoosterSystemStateReceived; + } + + /// + /// From Z21 FW version 1.41, reports a CAN booster system state + /// (LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD, protocol §10.2.3). + /// + public class CanBoosterSystemStateResponseHandler : ICanBoosterSystemStateResponseHandler + { + public event EventHandler? OnCanBoosterSystemStateReceived; + + public string Name => "LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 14 && response[2] == 0xCA && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + ushort networkId = BitConverter.ToUInt16(response, 4); + ushort outputPort = BitConverter.ToUInt16(response, 6); + CanBoosterState state = (CanBoosterState)BitConverter.ToUInt16(response, 8); + ushort vccVoltage = BitConverter.ToUInt16(response, 10); + ushort current = BitConverter.ToUInt16(response, 12); + OnCanBoosterSystemStateReceived?.Invoke(this, new(new CanBoosterSystemState(networkId, outputPort, state, vccVoltage, current))); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Can/CanDetectorResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Can/CanDetectorResponseHandler.cs new file mode 100644 index 0000000..e79c64d --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Can/CanDetectorResponseHandler.cs @@ -0,0 +1,39 @@ +using System; +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.Can +{ + public interface ICanDetectorResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnCanDetectorReceived; + } + + /// + /// From Z21 FW version 1.30, reports a CAN occupancy detector status (LAN_CAN_DETECTOR, + /// protocol §10.1). + /// + public class CanDetectorResponseHandler : ICanDetectorResponseHandler + { + public event EventHandler? OnCanDetectorReceived; + + public string Name => "LAN_CAN_DETECTOR"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 14 && response[2] == 0xC4 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + ushort networkId = BitConverter.ToUInt16(response, 4); + ushort moduleAddress = BitConverter.ToUInt16(response, 6); + byte port = response[8]; + byte type = response[9]; + ushort value1 = BitConverter.ToUInt16(response, 10); + ushort value2 = BitConverter.ToUInt16(response, 12); + OnCanDetectorReceived?.Invoke(this, new(new CanDetectorData(networkId, moduleAddress, port, type, value1, value2))); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Can/CanDeviceDescriptionResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Can/CanDeviceDescriptionResponseHandler.cs new file mode 100644 index 0000000..66a52aa --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Can/CanDeviceDescriptionResponseHandler.cs @@ -0,0 +1,40 @@ +using System; +using System.Text; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.Can +{ + public interface ICanDeviceDescriptionResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnCanDeviceDescriptionReceived; + } + + /// + /// From Z21 FW version 1.41, reports the description of a CAN booster + /// (LAN_CAN_DEVICE_GET_DESCRIPTION reply, protocol §10.2.1). + /// + public class CanDeviceDescriptionResponseHandler : ICanDeviceDescriptionResponseHandler + { + private const int NameLength = 16; + + public event EventHandler? OnCanDeviceDescriptionReceived; + + public string Name => "LAN_CAN_DEVICE_GET_DESCRIPTION"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 6 + NameLength && response[2] == 0xC8 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + ushort networkId = BitConverter.ToUInt16(response, 4); + string name = Encoding.Latin1.GetString(response, 6, NameLength); + int terminator = name.IndexOf('\0'); + if (terminator >= 0) + name = name[..terminator]; + OnCanDeviceDescriptionReceived?.Invoke(this, new(networkId, name)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Decoder/DecoderDescriptionResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Decoder/DecoderDescriptionResponseHandler.cs new file mode 100644 index 0000000..0b43dc6 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Decoder/DecoderDescriptionResponseHandler.cs @@ -0,0 +1,38 @@ +using System; +using System.Text; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.Decoder +{ + public interface IDecoderDescriptionResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnDecoderDescriptionReceived; + } + + /// + /// Reports the description of a zLink decoder (LAN_DECODER_GET_DESCRIPTION reply, protocol §11.3.1). + /// + public class DecoderDescriptionResponseHandler : IDecoderDescriptionResponseHandler + { + private const int NameLength = 32; + + public event EventHandler? OnDecoderDescriptionReceived; + + public string Name => "LAN_DECODER_GET_DESCRIPTION"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 4 + NameLength && response[2] == 0xD8 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + string name = Encoding.Latin1.GetString(response, 4, NameLength); + int terminator = name.IndexOf('\0'); + if (terminator >= 0) + name = name[..terminator]; + OnDecoderDescriptionReceived?.Invoke(this, new(name)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Decoder/DecoderSystemStateResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Decoder/DecoderSystemStateResponseHandler.cs new file mode 100644 index 0000000..8acbb1d --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Decoder/DecoderSystemStateResponseHandler.cs @@ -0,0 +1,44 @@ +using System; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseParser; + +namespace Z21.Core.ResponseHandler.Decoder +{ + public interface IDecoderSystemStateResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnSwitchDecoderSystemStateReceived; + + event EventHandler? OnSignalDecoderSystemStateReceived; + } + + /// + /// Reports a zLink decoder system state (LAN_DECODER_SYSTEMSTATE_DATACHANGED, protocol §11.3.4). + /// The switch decoder (10836) and signal decoder (10837) layouts are distinguished by the frame length. + /// + public class DecoderSystemStateResponseHandler(ISwitchDecoderSystemStateParser switchParser, ISignalDecoderSystemStateParser signalParser) : IDecoderSystemStateResponseHandler + { + private const int SwitchFrameLength = 48; + private const int SignalFrameLength = 46; + + public event EventHandler? OnSwitchDecoderSystemStateReceived; + + public event EventHandler? OnSignalDecoderSystemStateReceived; + + public string Name => "LAN_DECODER_SYSTEMSTATE_DATACHANGED"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return (response.Length == SwitchFrameLength || response.Length == SignalFrameLength) && response[2] == 0xDA && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + byte[] payload = response[4..]; + if (response.Length == SwitchFrameLength) + OnSwitchDecoderSystemStateReceived?.Invoke(this, new(switchParser.Parse(payload))); + else + OnSignalDecoderSystemStateReceived?.Invoke(this, new(signalParser.Parse(payload))); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Driving/LocoInfoResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Driving/LocoInfoResponseHandler.cs index 90004c1..8d2ff1d 100644 --- a/src/Z21.Client/Core/ResponseHandler/Driving/LocoInfoResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/Driving/LocoInfoResponseHandler.cs @@ -1,10 +1,10 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Linq; +using Microsoft.Extensions.Logging; +using Z21.Core.Codecs; using Z21.Core.Command.Driving; using Z21.Core.Command.SystemState; -using Z21.Core.Helper; using Z21.Core.Model; using Z21.Core.Model.EventArgs; @@ -21,21 +21,21 @@ public interface ILocoInfoResponseHandler : IZ21ResponseHandler /// public class LocoInfoResponseHandler : ILocoInfoResponseHandler { + private readonly ILocoSpeedCodec _locoSpeedCodec; + private readonly ILogger? _logger; + + public LocoInfoResponseHandler(ILocoSpeedCodec locoSpeedCodec, ILogger? logger = null) + { + _locoSpeedCodec = locoSpeedCodec; + _logger = logger; + } + public string Name => "LAN_X_LOCO_INFO"; public event EventHandler? OnLocoInfoReceived; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 && response[3] == 0x00 && response[4] == 0xEF; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 5, (2, 0x40), (3, 0x00), (4, 0xEF)); public void Handle(byte[] response) { @@ -45,17 +45,16 @@ public void Handle(byte[] response) DecoderMode decoderMode = (db2 & 0x10) == 0x10 ? DecoderMode.MM : DecoderMode.DCC; bool locoIsBusy = (db2 & 0x8) == 0x8; - DccSpeedMode speedMode = (DccSpeedMode)999; - if ((db2 & 0x1) == 0x1) - speedMode = DccSpeedMode.Steps14; - if ((db2 & 0x2) == 0x2) - speedMode = DccSpeedMode.Steps28; - if ((db2 & 0x4) == 0x4) - speedMode = DccSpeedMode.Steps128; + DccSpeedMode speedMode = (db2 & 0x07) switch + { + 0x02 => DccSpeedMode.Steps28, + 0x04 => DccSpeedMode.Steps128, + _ => DccSpeedMode.Steps14 + }; byte db3 = response[8]; DrivingDirection drivingDirection = (db3 & 0x80) == 0x80 ? DrivingDirection.Forward : DrivingDirection.Backward; - ushort stepSpeed = LocoSpeedHelper.CalculateSpeedStep(speedMode, (ushort)(db3 & 0x7F)); + ushort stepSpeed = _locoSpeedCodec.CalculateSpeedStep(speedMode, (ushort)(db3 & 0x7F)); byte db4 = response[9]; bool locoContainedInDoubleTraction = (db4 & 0x40) == 0x40; @@ -71,7 +70,7 @@ public void Handle(byte[] response) ]; int functionAddressCount = 5; - for (int index = 10; index < response.Length - 2; index++) + for (int index = 10; index < response.Length - 1; index++) { BitArray functionBits = new(new[] { response[index] }); for (int temp = 0; temp < 8; temp++) @@ -80,8 +79,8 @@ public void Handle(byte[] response) } } - string function = string.Join(", ", infodata.Select(functionData => $"F{functionData.FunctionIndex}: {functionData.FunctionToggleType}")); - Console.WriteLine($"Address: {address}, DecoderMode: {decoderMode}, Busy: {locoIsBusy}, DccSpeedMode: {speedMode}, Direction: {drivingDirection}, Speed: {stepSpeed}, Double Traction: {locoContainedInDoubleTraction}, smartSearch: {smartSearch}\n{function}"); + _logger?.LogDebug("{name} address {address}, decoderMode {decoderMode}, busy {busy}, speedMode {speedMode}, direction {direction}, speed {speed}, doubleTraction {doubleTraction}, smartSearch {smartSearch}.", + Name, address, decoderMode, locoIsBusy, speedMode, drivingDirection, stepSpeed, locoContainedInDoubleTraction, smartSearch); OnLocoInfoReceived?.Invoke(this, new(new() @@ -98,6 +97,6 @@ public void Handle(byte[] response) })); } - private static FunctionToggleType GetFunctionToggleType(bool value) => value ? FunctionToggleType.On : FunctionToggleType.Off; + private FunctionToggleType GetFunctionToggleType(bool value) => value ? FunctionToggleType.On : FunctionToggleType.Off; } } \ No newline at end of file diff --git a/src/Z21.Client/Core/ResponseHandler/FastClock/FastClockDataResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/FastClock/FastClockDataResponseHandler.cs new file mode 100644 index 0000000..13454b8 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/FastClock/FastClockDataResponseHandler.cs @@ -0,0 +1,43 @@ +using System; +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.FastClock +{ + public interface IFastClockDataResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnFastClockDataReceived; + } + + /// + /// From Z21 FW version 1.43, reports the current model time (LAN_FAST_CLOCK_DATA, protocol §12.2). + /// + public class FastClockDataResponseHandler : IFastClockDataResponseHandler + { + public event EventHandler? OnFastClockDataReceived; + + public string Name => "LAN_FAST_CLOCK_DATA"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 12 && response[2] == 0xCD && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + byte dayHour = response[6]; + byte day = (byte)((dayHour >> 5) & 0x07); + byte hour = (byte)(dayHour & 0x1F); + byte minute = (byte)(response[7] & 0x3F); + byte secondsByte = response[8]; + byte second = (byte)(secondsByte & 0x3F); + bool isStopped = (secondsByte & 0x80) == 0x80; + bool isHalted = (secondsByte & 0x40) == 0x40; + byte rate = (byte)(response[9] & 0x3F); + FastClockSettings settings = (FastClockSettings)response[10]; + + OnFastClockDataReceived?.Invoke(this, new(new FastClockData(day, hour, minute, second, rate, isStopped, isHalted, settings))); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/FastClock/FastClockSettingsResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/FastClock/FastClockSettingsResponseHandler.cs new file mode 100644 index 0000000..36bdaa5 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/FastClock/FastClockSettingsResponseHandler.cs @@ -0,0 +1,36 @@ +using System; +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.FastClock +{ + public interface IFastClockSettingsResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnFastClockSettingsReceived; + } + + /// + /// Reports the persistent fast-clock settings (LAN_FAST_CLOCK_SETTINGS_GET reply, protocol §12.3). + /// + public class FastClockSettingsResponseHandler : IFastClockSettingsResponseHandler + { + public event EventHandler? OnFastClockSettingsReceived; + + public string Name => "LAN_FAST_CLOCK_SETTINGS_GET"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 8 && response[2] == 0xCE && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + FastClockSettings settings = (FastClockSettings)response[4]; + byte rate = response[5]; + byte startDayHour = response[6]; + byte startMinute = response[7]; + OnFastClockSettingsReceived?.Invoke(this, new(new FastClockSettingsData(settings, rate, startDayHour, startMinute))); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Feedback/RmBusDataChangedResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Feedback/RmBusDataChangedResponseHandler.cs new file mode 100644 index 0000000..50fe26b --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Feedback/RmBusDataChangedResponseHandler.cs @@ -0,0 +1,37 @@ +using System; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.Feedback +{ + public interface IRmBusDataChangedResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnRmBusDataReceived; + } + + /// + /// Reports a change on the R-BUS feedback bus (LAN_RMBUS_DATACHANGED, protocol §7.1), either + /// automatically when the corresponding broadcast is set or in response to LAN_RMBUS_GETDATA. + /// + public class RmBusDataChangedResponseHandler : IRmBusDataChangedResponseHandler + { + private const int FeedbackStateCount = 10; + + public event EventHandler? OnRmBusDataReceived; + + public string Name => "LAN_RMBUS_DATACHANGED"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 5 + FeedbackStateCount && response[2] == 0x80 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + byte groupIndex = response[4]; + byte[] feedbackStates = new byte[FeedbackStateCount]; + Buffer.BlockCopy(response, 5, feedbackStates, 0, FeedbackStateCount); + OnRmBusDataReceived?.Invoke(this, new(groupIndex, feedbackStates)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/IZ21ResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/IZ21ResponseHandler.cs index 62662f5..73d7a58 100644 --- a/src/Z21.Client/Core/ResponseHandler/IZ21ResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/IZ21ResponseHandler.cs @@ -17,5 +17,24 @@ public interface IZ21ResponseHandler public bool CanHandle(byte[] response); public void Handle(byte[] response); + + /// + /// Length-safe frame matcher shared by every response handler. Returns true only when + /// is non-null, at least bytes long, + /// and every (index, value) pair in matches. It never throws + /// on a short or null datagram, replacing the per-handler try/catch (IndexOutOfRangeException) + /// guard and the duplicated response.Length >= n checks. + /// + public bool MatchesFrame(byte[] response, int minimumLength, params (int Index, byte Value)[] expected) + { + if (response is null || response.Length < minimumLength) + return false; + + foreach ((int index, byte value) in expected) + if ((uint)index >= (uint)response.Length || response[index] != value) + return false; + + return true; + } } } \ No newline at end of file diff --git a/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetDetectorResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetDetectorResponseHandler.cs new file mode 100644 index 0000000..1e8ff28 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetDetectorResponseHandler.cs @@ -0,0 +1,35 @@ +using System; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.LocoNet +{ + public interface ILocoNetDetectorResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnLocoNetDetectorReceived; + } + + /// + /// From Z21 FW version 1.22, reports the occupancy status of LocoNet track occupancy detectors + /// (LAN_LOCONET_DETECTOR, protocol §9.5). + /// + public class LocoNetDetectorResponseHandler : ILocoNetDetectorResponseHandler + { + public event EventHandler? OnLocoNetDetectorReceived; + + public string Name => "LAN_LOCONET_DETECTOR"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 7 && response[2] == 0xA4 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + byte type = response[4]; + ushort reportAddress = BitConverter.ToUInt16(response, 5); + byte[] info = response[7..]; + OnLocoNetDetectorReceived?.Invoke(this, new(type, reportAddress, info)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetDispatchAddressResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetDispatchAddressResponseHandler.cs new file mode 100644 index 0000000..23554e3 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetDispatchAddressResponseHandler.cs @@ -0,0 +1,34 @@ +using System; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.LocoNet +{ + public interface ILocoNetDispatchAddressResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnLocoNetDispatchAddressReceived; + } + + /// + /// From Z21 FW version 1.22, reports the result of a LocoNet dispatch request + /// (LAN_LOCONET_DISPATCH_ADDR, protocol §9.4). + /// + public class LocoNetDispatchAddressResponseHandler : ILocoNetDispatchAddressResponseHandler + { + public event EventHandler? OnLocoNetDispatchAddressReceived; + + public string Name => "LAN_LOCONET_DISPATCH_ADDR"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 7 && response[2] == 0xA3 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + ushort locoAddress = BitConverter.ToUInt16(response, 4); + byte slot = response[6]; + OnLocoNetDispatchAddressReceived?.Invoke(this, new(locoAddress, slot)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetFromLanResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetFromLanResponseHandler.cs new file mode 100644 index 0000000..79fa6bb --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetFromLanResponseHandler.cs @@ -0,0 +1,32 @@ +using System; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.LocoNet +{ + public interface ILocoNetFromLanResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnLocoNetMessageReceived; + } + + /// + /// From Z21 FW version 1.20, reports a LocoNet message another client wrote onto the bus + /// (LAN_LOCONET_FROM_LAN, protocol §9.3). + /// + public class LocoNetFromLanResponseHandler : ILocoNetFromLanResponseHandler + { + public event EventHandler? OnLocoNetMessageReceived; + + public string Name => "LAN_LOCONET_FROM_LAN"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 4 && response[2] == 0xA2 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + OnLocoNetMessageReceived?.Invoke(this, new(response[4..])); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetReceiveResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetReceiveResponseHandler.cs new file mode 100644 index 0000000..ee31a15 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetReceiveResponseHandler.cs @@ -0,0 +1,32 @@ +using System; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.LocoNet +{ + public interface ILocoNetReceiveResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnLocoNetMessageReceived; + } + + /// + /// From Z21 FW version 1.20, reports a LocoNet message received on the bus (LAN_LOCONET_Z21_RX, + /// protocol §9.1). + /// + public class LocoNetReceiveResponseHandler : ILocoNetReceiveResponseHandler + { + public event EventHandler? OnLocoNetMessageReceived; + + public string Name => "LAN_LOCONET_Z21_RX"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 4 && response[2] == 0xA0 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + OnLocoNetMessageReceived?.Invoke(this, new(response[4..])); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetTransmitResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetTransmitResponseHandler.cs new file mode 100644 index 0000000..5872544 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/LocoNet/LocoNetTransmitResponseHandler.cs @@ -0,0 +1,32 @@ +using System; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.LocoNet +{ + public interface ILocoNetTransmitResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnLocoNetMessageReceived; + } + + /// + /// From Z21 FW version 1.20, reports a LocoNet message the Z21 itself wrote onto the bus + /// (LAN_LOCONET_Z21_TX, protocol §9.2). + /// + public class LocoNetTransmitResponseHandler : ILocoNetTransmitResponseHandler + { + public event EventHandler? OnLocoNetMessageReceived; + + public string Name => "LAN_LOCONET_Z21_TX"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 4 && response[2] == 0xA1 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + OnLocoNetMessageReceived?.Invoke(this, new(response[4..])); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Programming/CvNackResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Programming/CvNackResponseHandler.cs new file mode 100644 index 0000000..c2dff12 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Programming/CvNackResponseHandler.cs @@ -0,0 +1,28 @@ +using System; + +namespace Z21.Core.ResponseHandler.Programming +{ + public interface ICvNackResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnCvNackReceived; + } + + /// + /// Sent when the decoder acknowledgement is missing during CV programming (LAN_X_CV_NACK, + /// protocol §6.4). + /// + public class CvNackResponseHandler : ICvNackResponseHandler + { + public event EventHandler? OnCvNackReceived; + + public string Name => "LAN_X_CV_NACK"; + + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x61), (5, 0x13)); + + public void Handle(byte[] response) + { + OnCvNackReceived?.Invoke(this, EventArgs.Empty); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Programming/CvNackShortCircuitResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Programming/CvNackShortCircuitResponseHandler.cs new file mode 100644 index 0000000..c021f76 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Programming/CvNackShortCircuitResponseHandler.cs @@ -0,0 +1,28 @@ +using System; + +namespace Z21.Core.ResponseHandler.Programming +{ + public interface ICvNackShortCircuitResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnCvNackShortCircuitReceived; + } + + /// + /// Sent when CV programming fails because of a short circuit on the track (LAN_X_CV_NACK_SC, + /// protocol §6.3). + /// + public class CvNackShortCircuitResponseHandler : ICvNackShortCircuitResponseHandler + { + public event EventHandler? OnCvNackShortCircuitReceived; + + public string Name => "LAN_X_CV_NACK_SC"; + + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x61), (5, 0x12)); + + public void Handle(byte[] response) + { + OnCvNackShortCircuitReceived?.Invoke(this, EventArgs.Empty); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Programming/CvResultResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Programming/CvResultResponseHandler.cs new file mode 100644 index 0000000..2ae7a91 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/Programming/CvResultResponseHandler.cs @@ -0,0 +1,32 @@ +using System; +using Z21.Core.Codecs; +using Z21.Core.Model.EventArgs; + +namespace Z21.Core.ResponseHandler.Programming +{ + public interface ICvResultResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnCvResultReceived; + } + + /// + /// Positive acknowledgement of a CV read/write (LAN_X_CV_RESULT, protocol §6.5), sent to the + /// triggering client. + /// + public class CvResultResponseHandler(IAddressCodec addressCodec) : ICvResultResponseHandler + { + public event EventHandler? OnCvResultReceived; + + public string Name => "LAN_X_CV_RESULT"; + + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x64), (5, 0x14)); + + public void Handle(byte[] response) + { + ushort cvAddress = addressCodec.CombineCvAddress(response[6], response[7]); + byte value = response[8]; + OnCvResultReceived?.Invoke(this, new(cvAddress, value)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/RailCom/RailComDataChangedResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/RailCom/RailComDataChangedResponseHandler.cs new file mode 100644 index 0000000..32ed958 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/RailCom/RailComDataChangedResponseHandler.cs @@ -0,0 +1,37 @@ +using System; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseParser; + +namespace Z21.Core.ResponseHandler.RailCom +{ + public interface IRailComDataChangedResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnRailComDataReceived; + } + + /// + /// From Z21 FW version 1.29, reports RailCom data (LAN_RAILCOM_DATACHANGED, protocol §8.1), + /// either in response to LAN_RAILCOM_GETDATA or unsolicited when the broadcast is active. + /// + public class RailComDataChangedResponseHandler(IRailComDataParser railComDataParser) : IRailComDataChangedResponseHandler + { + private const int PayloadLength = 13; + + public event EventHandler? OnRailComDataReceived; + + public string Name => "LAN_RAILCOM_DATACHANGED"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= 4 + PayloadLength && response[2] == 0x88 && response[3] == 0x00; + } + + public void Handle(byte[] response) + { + byte[] data = new byte[PayloadLength]; + Buffer.BlockCopy(response, 4, data, 0, PayloadLength); + OnRailComDataReceived?.Invoke(this, new(railComDataParser.Parse(data))); + } + } +} diff --git a/src/Z21.Client/Core/ResponseHandler/Settings/AccessoryModeResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Settings/AccessoryModeResponseHandler.cs index 1bd4d6a..561f1c4 100644 --- a/src/Z21.Client/Core/ResponseHandler/Settings/AccessoryModeResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/Settings/AccessoryModeResponseHandler.cs @@ -5,7 +5,7 @@ namespace Z21.Core.ResponseHandler.Settings { - public interface IAccessoryModeResponseHandler + public interface IAccessoryModeResponseHandler : IZ21ResponseHandler { event EventHandler? OnAccessoryModeReceived; } @@ -23,17 +23,8 @@ public class AccessoryModeResponseHandler : IAccessoryModeResponseHandler public string Name => "LAN_GET_TURNOUTMODE"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x70 && response[3] == 0x00; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 4, (2, 0x70), (3, 0x00)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/Settings/LocoModeResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Settings/LocoModeResponseHandler.cs index 79bb9c8..527b1c9 100644 --- a/src/Z21.Client/Core/ResponseHandler/Settings/LocoModeResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/Settings/LocoModeResponseHandler.cs @@ -22,17 +22,8 @@ public class LocoModeResponseHandler : ILocoModeResponseHandler public string Name => "LAN_GET_LOCOMODE"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x60 && response[3] == 0x00; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 4, (2, 0x60), (3, 0x00)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/Switching/ExtAccessoryInfoResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Switching/ExtAccessoryInfoResponseHandler.cs index a2e1ced..dbcaf3a 100644 --- a/src/Z21.Client/Core/ResponseHandler/Switching/ExtAccessoryInfoResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/Switching/ExtAccessoryInfoResponseHandler.cs @@ -1,7 +1,7 @@ using System; +using Z21.Core.Codecs; using Z21.Core.Command.Switching; using Z21.Core.Command.SystemState; -using Z21.Core.Helper; using Z21.Core.Model; using Z21.Core.Model.EventArgs; @@ -17,27 +17,25 @@ public interface IExtAccessoryInfoResponseHandler : IZ21ResponseHandler /// public class ExtAccessoryInfoResponseHandler : IExtAccessoryInfoResponseHandler { + private readonly IAddressCodec _addressCodec; + + public ExtAccessoryInfoResponseHandler(IAddressCodec addressCodec) + { + _addressCodec = addressCodec; + } + public event EventHandler? OnExtAccessoryInfoReceived; public string Name => "LAN_X_EXT_ACCESSORY_INFO"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 && response[3] == 0x00 && response[4] == 0x44; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 5, (2, 0x40), (3, 0x00), (4, 0x44)); public void Handle(byte[] response) { byte msb = response[5]; byte lsb = response[6]; - ushort address = AddressHelper.CombineAccessoryAddress(lsb, msb); + ushort address = _addressCodec.CombineExtAccessoryAddress(lsb, msb); byte db2 = response[7]; byte status = response[8]; diff --git a/src/Z21.Client/Core/ResponseHandler/Switching/TurnoutInfoResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/Switching/TurnoutInfoResponseHandler.cs index bde875a..5c5a5cb 100644 --- a/src/Z21.Client/Core/ResponseHandler/Switching/TurnoutInfoResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/Switching/TurnoutInfoResponseHandler.cs @@ -1,7 +1,8 @@ using System; +using Microsoft.Extensions.Logging; +using Z21.Core.Codecs; using Z21.Core.Command.Switching; using Z21.Core.Command.SystemState; -using Z21.Core.Helper; using Z21.Core.Model; using Z21.Core.Model.EventArgs; @@ -18,28 +19,27 @@ public interface ITurnoutInfoResponseHandler : IZ21ResponseHandler /// public class TurnoutInfoResponseHandler : ITurnoutInfoResponseHandler { + private readonly IAddressCodec _addressCodec; + private readonly ILogger? _logger; + + public TurnoutInfoResponseHandler(IAddressCodec addressCodec, ILogger? logger = null) + { + _addressCodec = addressCodec; + _logger = logger; + } public event EventHandler? OnTurnoutInfoReceived; public string Name => "LAN_X_TURNOUT_INFO"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 && response[3] == 0x00 && response[4] == 0x43; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 5, (2, 0x40), (3, 0x00), (4, 0x43)); public void Handle(byte[] response) { byte msb = response[5]; byte lsb = response[6]; - ushort address = AddressHelper.CombineAccessoryAddress(lsb, msb); + ushort address = _addressCodec.CombineAccessoryAddress(lsb, msb); byte db2 = response[7]; AccessoryOutput? accessoryOutput = null; @@ -48,7 +48,7 @@ public void Handle(byte[] response) if (db2 == 0x02) accessoryOutput = AccessoryOutput.Output2; - Console.WriteLine($"Turnout: {address}, State: {accessoryOutput}"); + _logger?.LogDebug("{name} address {address}, output {accessoryOutput}.", Name, address, accessoryOutput); OnTurnoutInfoReceived?.Invoke(this, new(address, accessoryOutput)); } } diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/BroadcastFlagsResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/BroadcastFlagsResponseHandler.cs index 16e69c8..8f78014 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/BroadcastFlagsResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/BroadcastFlagsResponseHandler.cs @@ -17,17 +17,8 @@ public class BroadcastFlagsResponseHandler : IBroadcastFlagsResponseHandler public string Name => "LAN_GET_BROADCASTFLAGS"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x51 - && response[3] == 0x00; - } catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 4, (2, 0x51), (3, 0x00)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/FirmwareVersionResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/FirmwareVersionResponseHandler.cs index df1158e..0df4a70 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/FirmwareVersionResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/FirmwareVersionResponseHandler.cs @@ -18,21 +18,9 @@ public class FirmwareVersionResponseHandler : IFirmwareVersionResponseHandler public string Name => "LAN_X_GET_FIRMWARE_VERSION"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 - && response[3] == 0x00 - && response[4] == 0xF3 - && response[5] == 0x0A - && (response[4] ^ response[5] ^ response[6] ^ response[7]) == response[8]; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 9, (2, 0x40), (3, 0x00), (4, 0xF3), (5, 0x0A)) + && (response[4] ^ response[5] ^ response[6] ^ response[7]) == response[8]; public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/HardwareInfoResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/HardwareInfoResponseHandler.cs index a12287c..bee9443 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/HardwareInfoResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/HardwareInfoResponseHandler.cs @@ -18,23 +18,14 @@ public class HardwareInfoResponseHandler : IHardwareInfoResponseHandler public event EventHandler? OnHardwareInfoReceived; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x1A && response[3] == 0x00; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 4, (2, 0x1A), (3, 0x00)); public void Handle(byte[] response) { - // TODO: calculate FW version and add to HardwareInfoEventArgs int hwType = BitConverter.ToInt32(response, 4); - OnHardwareInfoReceived?.Invoke(this, new(hwType)); + int firmwareVersion = BitConverter.ToInt32(response, 8); + OnHardwareInfoReceived?.Invoke(this, new(hwType, firmwareVersion)); } } diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/SerialNumberResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/SerialNumberResponseHandler.cs index 6172121..084dccf 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/SerialNumberResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/SerialNumberResponseHandler.cs @@ -18,18 +18,8 @@ public class SerialNumberResponseHandler : ISerialNumberResponseHandler public string Name => "LAN_GET_SERIAL_NUMBER"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x10 - && response[3] == 0x00; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 4, (2, 0x10), (3, 0x00)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/SoftwareLockResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/SoftwareLockResponseHandler.cs index 459a378..96719ba 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/SoftwareLockResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/SoftwareLockResponseHandler.cs @@ -18,17 +18,8 @@ public class SoftwareLockResponseHandler : ISoftwareLockResponseHandler public event EventHandler? OnSoftwareLockReceived; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x18 && response[3] == 0x00; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 4, (2, 0x18), (3, 0x00)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/StatusChangedResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/StatusChangedResponseHandler.cs index 95e6773..4088d73 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/StatusChangedResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/StatusChangedResponseHandler.cs @@ -21,20 +21,9 @@ public class StatusChangedResponseHandler(ICentralStateResponseParser centralSta public string Name => "LAN_X_STATUS_CHANGED"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 - && response[3] == 0x00 - && response[4] == 0x62 - && response[5] == 0x22 - && (response[4] ^ response[5] ^ response[6]) == response[7]; - } catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 8, (2, 0x40), (3, 0x00), (4, 0x62), (5, 0x22)) + && (response[4] ^ response[5] ^ response[6]) == response[7]; public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/SystemStateDataChangedResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/SystemStateDataChangedResponseHandler.cs index bc64320..c074ad4 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/SystemStateDataChangedResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/SystemStateDataChangedResponseHandler.cs @@ -20,16 +20,8 @@ public class SystemStateDataChangedResponseHandler(ISystemStateResponseParser sy public event EventHandler? OnSystemStateDataChangedReceived; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x84 && response[3] == 0x00; - } catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 4, (2, 0x84), (3, 0x00)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/ProgrammingModeResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/ProgrammingModeResponseHandler.cs index 00dd29e..4860d68 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/ProgrammingModeResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/ProgrammingModeResponseHandler.cs @@ -16,21 +16,8 @@ public class ProgrammingModeResponseHandler : IProgrammingModeResponseHandler public string Name => "LAN_X_BC_PROGRAMMING_MODE"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 - && response[3] == 0x00 - && response[4] == 0x61 - && response[5] == 0x02 - && (response[4] ^ response[5]) == 0x63; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x61), (5, 0x02)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/StoppedResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/StoppedResponseHandler.cs index 3d4e233..02facf6 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/StoppedResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/StoppedResponseHandler.cs @@ -19,21 +19,8 @@ public class StoppedResponseHandler : IStoppedResponseHandler public string Name => "LAN_X_BC_STOPPED"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 - && response[3] == 0x00 - && response[4] == 0x81 - && response[5] == 0x00 - && (response[4] ^ response[5]) == 0x81; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x81), (5, 0x00)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackPowerOffResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackPowerOffResponseHandler.cs index 4055a94..c901e5d 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackPowerOffResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackPowerOffResponseHandler.cs @@ -19,21 +19,8 @@ public class TrackPowerOffResponseHandler : ITrackPowerOffResponseHandler public string Name => "LAN_X_BC_TRACK_POWER_OFF"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 - && response[3] == 0x00 - && response[4] == 0x61 - && response[5] == 0x00 - && (response[4] ^ response[5]) == 0x61; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x61), (5, 0x00)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackPowerOnResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackPowerOnResponseHandler.cs index 3f62470..f421377 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackPowerOnResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackPowerOnResponseHandler.cs @@ -19,21 +19,8 @@ public class TrackPowerOnResponseHandler : ITrackPowerOnResponseHandler public string Name => "LAN_X_BC_TRACK_POWER_ON"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 - && response[3] == 0x00 - && response[4] == 0x61 - && response[5] == 0x01 - && (response[4] ^ response[5]) == 0x60; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x61), (5, 0x01)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackShortResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackShortResponseHandler.cs index db54b4f..724544f 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackShortResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/TrackPower/TrackShortResponseHandler.cs @@ -18,21 +18,8 @@ public class TrackShortResponseHandler : ITrackShortResponseHandler public string Name => "LAN_X_BC_TRACK_SHORT_CIRCUIT"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 - && response[3] == 0x00 - && response[4] == 0x61 - && response[5] == 0x08 - && (response[4] ^ response[5]) == 0x69; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x61), (5, 0x08)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/UnknownCommandResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/UnknownCommandResponseHandler.cs index a5a5c33..adfd2b1 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/UnknownCommandResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/UnknownCommandResponseHandler.cs @@ -17,21 +17,8 @@ public class UnknownCommandResponseHandler : IUnknownCommandResponseHandler public string Name => "LAN_X_UNKNOWN_COMMAND"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 - && response[3] == 0x00 - && response[4] == 0x61 - && response[5] == 0x82 - && (response[4] ^ response[5]) == 0xE3; - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (3, 0x00), (4, 0x61), (5, 0x82)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/SystemState/VersionResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/SystemState/VersionResponseHandler.cs index e90ce9a..4bf40bd 100644 --- a/src/Z21.Client/Core/ResponseHandler/SystemState/VersionResponseHandler.cs +++ b/src/Z21.Client/Core/ResponseHandler/SystemState/VersionResponseHandler.cs @@ -18,20 +18,8 @@ public class VersionResponseHandler : IVersionResponseHandler public string Name => "LAN_X_GET_VERSION"; - public bool CanHandle(byte[] response) - { - try - { - return response[2] == 0x40 && - response[4] == 0x63 && - response[5] == 0x21; - // TODO handle XOR-Byte - } - catch (IndexOutOfRangeException) - { - return false; - } - } + public bool CanHandle(byte[] response) => + ((IZ21ResponseHandler)this).MatchesFrame(response, 6, (2, 0x40), (4, 0x63), (5, 0x21)); public void Handle(byte[] response) { diff --git a/src/Z21.Client/Core/ResponseHandler/ZLink/ZLinkHardwareInfoResponseHandler.cs b/src/Z21.Client/Core/ResponseHandler/ZLink/ZLinkHardwareInfoResponseHandler.cs new file mode 100644 index 0000000..f811006 --- /dev/null +++ b/src/Z21.Client/Core/ResponseHandler/ZLink/ZLinkHardwareInfoResponseHandler.cs @@ -0,0 +1,34 @@ +using System; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseParser; + +namespace Z21.Core.ResponseHandler.ZLink +{ + public interface IZLinkHardwareInfoResponseHandler : IZ21ResponseHandler + { + event EventHandler? OnZLinkHardwareInfoReceived; + } + + /// + /// Reports the hardware information of a Z21 pro LINK (LAN_ZLINK_GET_HWINFO reply, protocol §11.1.1.1). + /// + public class ZLinkHardwareInfoResponseHandler(IZLinkHardwareInfoParser parser) : IZLinkHardwareInfoResponseHandler + { + private const int FrameLength = 63; + + public event EventHandler? OnZLinkHardwareInfoReceived; + + public string Name => "LAN_ZLINK_GET_HWINFO"; + + public bool CanHandle(byte[] response) + { + ArgumentNullException.ThrowIfNull(response); + return response.Length >= FrameLength && response[2] == 0xE8 && response[3] == 0x00 && response[4] == 0x06; + } + + public void Handle(byte[] response) + { + OnZLinkHardwareInfoReceived?.Invoke(this, new(parser.Parse(response[5..]))); + } + } +} diff --git a/src/Z21.Client/Core/ResponseParser/RailComDataParser.cs b/src/Z21.Client/Core/ResponseParser/RailComDataParser.cs new file mode 100644 index 0000000..87963ab --- /dev/null +++ b/src/Z21.Client/Core/ResponseParser/RailComDataParser.cs @@ -0,0 +1,30 @@ +using System; +using Z21.Core.Model; + +namespace Z21.Core.ResponseParser +{ + public interface IRailComDataParser : IZ21ResponseParser + { + RailComData Parse(byte[] data); + } + + /// + /// Parses the RailCom data payload (the bytes following the LAN_RAILCOM_DATACHANGED header). + /// + public class RailComDataParser : IRailComDataParser + { + public RailComData Parse(byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + + ushort locoAddress = BitConverter.ToUInt16(data, 0); + uint receiveCounter = BitConverter.ToUInt32(data, 2); + ushort errorCounter = BitConverter.ToUInt16(data, 6); + RailComOptions options = (RailComOptions)data[9]; + byte speed = data[10]; + byte qos = data[11]; + + return new RailComData(locoAddress, receiveCounter, errorCounter, options, speed, qos); + } + } +} diff --git a/src/Z21.Client/Core/ResponseParser/SignalDecoderSystemStateParser.cs b/src/Z21.Client/Core/ResponseParser/SignalDecoderSystemStateParser.cs new file mode 100644 index 0000000..2573510 --- /dev/null +++ b/src/Z21.Client/Core/ResponseParser/SignalDecoderSystemStateParser.cs @@ -0,0 +1,36 @@ +using System; +using Z21.Core.Model; + +namespace Z21.Core.ResponseParser +{ + public interface ISignalDecoderSystemStateParser : IZ21ResponseParser + { + SignalDecoderSystemState Parse(byte[] data); + } + + /// + /// Parses the 42-byte signal decoder system state payload (protocol §11.3.4.2). + /// + public class SignalDecoderSystemStateParser : ISignalDecoderSystemStateParser + { + public SignalDecoderSystemState Parse(byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + + return new SignalDecoderSystemState( + BitConverter.ToInt16(data, 0), + BitConverter.ToInt16(data, 2), + BitConverter.ToUInt16(data, 4), + data[6], + data[7], + data[8..10], + data[10..12], + data[12..16], + data[16..20], + data[23], + data[24..28], + data[28..32], + BitConverter.ToUInt16(data, 32)); + } + } +} diff --git a/src/Z21.Client/Core/ResponseParser/SwitchDecoderSystemStateParser.cs b/src/Z21.Client/Core/ResponseParser/SwitchDecoderSystemStateParser.cs new file mode 100644 index 0000000..c818f7e --- /dev/null +++ b/src/Z21.Client/Core/ResponseParser/SwitchDecoderSystemStateParser.cs @@ -0,0 +1,34 @@ +using System; +using Z21.Core.Model; + +namespace Z21.Core.ResponseParser +{ + public interface ISwitchDecoderSystemStateParser : IZ21ResponseParser + { + SwitchDecoderSystemState Parse(byte[] data); + } + + /// + /// Parses the 44-byte switch decoder system state payload (protocol §11.3.4.1). + /// + public class SwitchDecoderSystemStateParser : ISwitchDecoderSystemStateParser + { + public SwitchDecoderSystemState Parse(byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + + return new SwitchDecoderSystemState( + BitConverter.ToInt16(data, 0), + BitConverter.ToInt16(data, 2), + BitConverter.ToUInt16(data, 4), + data[6], + data[7], + data[8..16], + data[16..24], + data[24..32], + BitConverter.ToUInt16(data, 32), + BitConverter.ToUInt16(data, 34), + data[42]); + } + } +} diff --git a/src/Z21.Client/Core/ResponseParser/ZLinkHardwareInfoParser.cs b/src/Z21.Client/Core/ResponseParser/ZLinkHardwareInfoParser.cs new file mode 100644 index 0000000..06e798a --- /dev/null +++ b/src/Z21.Client/Core/ResponseParser/ZLinkHardwareInfoParser.cs @@ -0,0 +1,38 @@ +using System; +using System.Text; +using Z21.Core.Model; + +namespace Z21.Core.ResponseParser +{ + public interface IZLinkHardwareInfoParser : IZ21ResponseParser + { + ZLinkHardwareInfo Parse(byte[] data); + } + + /// + /// Parses the 58-byte Z_Hw_Info payload of a Z21 pro LINK (protocol §11.1.1.1). + /// + public class ZLinkHardwareInfoParser : IZLinkHardwareInfoParser + { + public ZLinkHardwareInfo Parse(byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + + ushort hardwareId = BitConverter.ToUInt16(data, 0); + byte major = data[2]; + byte minor = data[3]; + ushort build = BitConverter.ToUInt16(data, 4); + string mac = ReadString(data, 6, 18); + string name = ReadString(data, 24, 33); + + return new ZLinkHardwareInfo(hardwareId, major, minor, build, mac, name); + } + + private string ReadString(byte[] data, int offset, int length) + { + string value = Encoding.Latin1.GetString(data, offset, length); + int terminator = value.IndexOf('\0'); + return terminator >= 0 ? value[..terminator] : value; + } + } +} diff --git a/src/Z21.Client/Core/Z21Client.cs b/src/Z21.Client/Core/Z21Client.cs deleted file mode 100644 index 34f27c3..0000000 --- a/src/Z21.Client/Core/Z21Client.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Z21.Core.Command; -using Z21.Core.Command.SystemState; -using Z21.Core.Exception; -using Z21.Core.Helper; -using Z21.Core.Model; -using Z21.Core.Model.EventArgs; -using Z21.Transport; -// ReSharper disable ClassWithVirtualMembersNeverInherited.Global - -namespace Z21.Core -{ - - public class Z21Client : IZ21Client - { - private readonly ILogger? _logger; - private readonly Z21Configuration _z21Configuration; - private readonly IZ21Transport _transport; - private readonly DelayedAction _delayedKeepAliveAction; - private readonly Z21Watchdog _z21Watchdog; - - /// - /// IPv4 safe MTU for payload according to specification. - /// - public const int MaxUdpPayload = 1472; - - /// Thrown when system architecture is not little-endian. - public Z21Client(Z21Configuration z21Configuration, IZ21Transport z21Transport, ILogger? logger = null) - { - ArgumentNullException.ThrowIfNull(z21Configuration); - ArgumentNullException.ThrowIfNull(z21Transport); - - if (!BitConverter.IsLittleEndian) - throw new PlatformNotSupportedException("Z21Client requires little-endian architecture."); - - _z21Configuration = z21Configuration; - _transport = z21Transport; - _logger = logger; - _z21Watchdog = new (z21Configuration); - _z21Watchdog.OnReachabilityChanged += async (_, args ) => await Watchdog_OnOnReachabilityChanged(args); - _delayedKeepAliveAction = new (TimeSpan.FromSeconds(45), async () => await SendCommandsAsync(new GetFirmwareVersionCommand())); - } - - public event EventHandler? OnConnectionChanged; - - public bool IsConnected { get; private set; } - - public async Task ConnectAsync() - { - _logger?.LogInformation("Z21Client trying to connect with {ClientIPEndPoint}.", _transport.Z21Configuration.ClientIPEndPoint); - _transport.Connect(); - await LogOnAsync(); - } - - public async Task SendCommandsAsync(params IZ21Command[] z21Commands) - { - ArgumentNullException.ThrowIfNull(z21Commands); - - if (!_transport.IsConnected) - await ConnectAsync(); - - foreach (var z21Command in z21Commands) - _logger?.LogDebug("{commandName} sending {datagram} to Z21.", z21Command.Name, BitConverter.ToString(z21Command.Data)); - - var combinedPayload = z21Commands.SelectMany(z21Command => z21Command.Data).ToArray(); - MtuPayloadLengthExceededException.ThrowIfExceeded(combinedPayload); - - await _transport.SendAsync(combinedPayload); - _delayedKeepAliveAction.Delay(); - } - - protected async virtual Task LogOnAsync() - { - await SendCommandsAsync(new SetBroadcastFlagsCommand(_z21Configuration.BroadcastFlags), new GetFirmwareVersionCommand()); - } - - private async Task Watchdog_OnOnReachabilityChanged(ConnectionChangedEventArgs args) - { - if (args.IsConnected) - await LogOnAsync(); - IsConnected = args.IsConnected; - OnConnectionChanged?.Invoke(this, args); - } - } -} \ No newline at end of file diff --git a/src/Z21.Client/Core/Z21CommandStation.cs b/src/Z21.Client/Core/Z21CommandStation.cs new file mode 100644 index 0000000..4cc2b18 --- /dev/null +++ b/src/Z21.Client/Core/Z21CommandStation.cs @@ -0,0 +1,214 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using CommandStation; +using CommandStation.Transport; +using Microsoft.Extensions.Logging; +using Z21.Core.Command; +using Z21.Core.Command.Driving; +using Z21.Core.Command.FastClock; +using Z21.Core.Command.Feedback; +using Z21.Core.Command.Programming; +using Z21.Core.Command.Switching; +using Z21.Core.Command.SystemState; +using Z21.Core.Command.SystemState.TrackPower; +using Z21.Core.Exception; +using Z21.Core.Helper; +using Z21.Core.Model; +using Z21.Core.ResponseHandler.Driving; +using Z21.Core.ResponseHandler.FastClock; +using Z21.Core.ResponseHandler.Feedback; +using Z21.Core.ResponseHandler.Programming; +using Z21.Core.ResponseHandler.Switching; +using Z21.Core.ResponseHandler.SystemState; +using Z21.Core.ResponseHandler.SystemState.TrackPower; + +namespace Z21.Core +{ + public class Z21CommandStation : IZ21CommandStation, IProgrammingControl, IFeedbackControl, IFastClockControl, IDisposable + { + private readonly ITransport _transport; + private readonly Z21ResponseHandler _dispatcher; + private readonly Z21Options _options; + private readonly DelayedAction _delayedKeepAliveAction; + private readonly ILogger? _logger; + + /// + /// IPv4 safe MTU for payload according to specification. + /// + public const int MaxUdpPayload = 1472; + + /// Thrown when system architecture is not little-endian. + public Z21CommandStation(ITransport transport, + Z21ResponseHandler dispatcher, + IZ21CommandFactory commands, + Z21Options options, + ILocoInfoResponseHandler locoInfoResponseHandler, + ITurnoutInfoResponseHandler turnoutInfoResponseHandler, + IExtAccessoryInfoResponseHandler extAccessoryInfoResponseHandler, + ISystemStateDataChangedResponseHandler systemStateResponseHandler, + IFirmwareVersionResponseHandler firmwareVersionResponseHandler, + IStatusChangedResponseHandler statusChangedResponseHandler, + ITrackPowerOnResponseHandler trackPowerOnResponseHandler, + ITrackPowerOffResponseHandler trackPowerOffResponseHandler, + ICvResultResponseHandler cvResultResponseHandler, + ICvNackResponseHandler cvNackResponseHandler, + ICvNackShortCircuitResponseHandler cvNackShortCircuitResponseHandler, + IRmBusDataChangedResponseHandler rmBusDataChangedResponseHandler, + IFastClockDataResponseHandler fastClockDataResponseHandler, + ILogger? logger = null) + { + ArgumentNullException.ThrowIfNull(transport); + ArgumentNullException.ThrowIfNull(dispatcher); + ArgumentNullException.ThrowIfNull(commands); + ArgumentNullException.ThrowIfNull(options); + + if (!BitConverter.IsLittleEndian) + throw new PlatformNotSupportedException("Z21CommandStation requires little-endian architecture."); + + _transport = transport; + _dispatcher = dispatcher; + Commands = commands; + _options = options; + _logger = logger; + _delayedKeepAliveAction = new(options.KeepAliveInterval, KeepAliveAsync); + + _transport.OnConnectionChanged += (_, args) => + { + if (!args.IsConnected) + _delayedKeepAliveAction.Stop(); + ConnectionChanged?.Invoke(this, args); + }; + + locoInfoResponseHandler.OnLocoInfoReceived += (_, args) => LocoInfoReceived?.Invoke(this, args.Data); + turnoutInfoResponseHandler.OnTurnoutInfoReceived += (_, args) => TurnoutInfoReceived?.Invoke(this, new TurnoutInfo(args.AccessoryAddress, args.AccessoryOutput)); + extAccessoryInfoResponseHandler.OnExtAccessoryInfoReceived += (_, args) => ExtAccessoryInfoReceived?.Invoke(this, new ExtAccessoryInfo(args.AccessoryAddress, args.EncodedState, args.DataValid)); + systemStateResponseHandler.OnSystemStateDataChangedReceived += (_, args) => SystemStateReceived?.Invoke(this, args.SystemState); + firmwareVersionResponseHandler.OnFirmwareVersionReceived += (_, args) => FirmwareVersionReceived?.Invoke(this, args.FirmwareVersion); + statusChangedResponseHandler.OnStatusChangedReceived += (_, args) => StatusChanged?.Invoke(this, args.CentralState); + trackPowerOnResponseHandler.OnTrackPowerOnReceived += (_, _) => TrackPowerChanged?.Invoke(this, true); + trackPowerOffResponseHandler.OnTrackPowerOffReceived += (_, _) => TrackPowerChanged?.Invoke(this, false); + cvResultResponseHandler.OnCvResultReceived += (_, args) => CvReadCompleted?.Invoke(this, new CvValue(args.CvAddress, args.Value)); + cvNackResponseHandler.OnCvNackReceived += (_, _) => CvProgrammingFailed?.Invoke(this, CvProgrammingError.NoAcknowledgement); + cvNackShortCircuitResponseHandler.OnCvNackShortCircuitReceived += (_, _) => CvProgrammingFailed?.Invoke(this, CvProgrammingError.ShortCircuit); + rmBusDataChangedResponseHandler.OnRmBusDataReceived += (_, args) => FeedbackChanged?.Invoke(this, new FeedbackData(args.GroupIndex, args.FeedbackStates)); + fastClockDataResponseHandler.OnFastClockDataReceived += (_, args) => ModelTimeChanged?.Invoke(this, new ModelTime(args.Data.Day, args.Data.Hour, args.Data.Minute, args.Data.Second, args.Data.Rate)); + } + + public IZ21CommandFactory Commands { get; } + + public bool IsConnected => _transport.IsConnected; + + public event EventHandler? ConnectionChanged; + public event EventHandler? LocoInfoReceived; + public event EventHandler? TurnoutInfoReceived; + public event EventHandler? ExtAccessoryInfoReceived; + public event EventHandler? SystemStateReceived; + public event EventHandler? FirmwareVersionReceived; + public event EventHandler? StatusChanged; + public event EventHandler? TrackPowerChanged; + public event EventHandler? CvReadCompleted; + public event EventHandler? CvProgrammingFailed; + public event EventHandler? FeedbackChanged; + public event EventHandler? ModelTimeChanged; + + public async Task ConnectAsync() + { + _logger?.LogInformation("Z21CommandStation connecting."); + await _transport.ConnectAsync(); + await LogOnAsync(); + } + + public Task DisconnectAsync() + { + _delayedKeepAliveAction.Stop(); + return _transport.DisconnectAsync(); + } + + public async Task SendCommandsAsync(params IZ21Command[] commands) + { + ArgumentNullException.ThrowIfNull(commands); + + if (!_transport.IsConnected) + throw new NotConnectedException("Cannot send commands before ConnectAsync has completed."); + + foreach (var command in commands) + _logger?.LogDebug("{commandName} sending {datagram} to Z21.", command.Name, BitConverter.ToString(command.Data)); + + byte[] combinedPayload = commands.SelectMany(command => command.Data).ToArray(); + MtuPayloadLengthExceededException.ThrowIfExceeded(combinedPayload); + + await _transport.SendAsync(combinedPayload); + _delayedKeepAliveAction.Delay(); + } + + public Task DriveAsync(ushort locoAddress, DccSpeedMode speedMode, DrivingDirection direction, ushort speed) => + SendCommandsAsync(Commands.Create(speedMode, locoAddress, direction, speed)); + + public Task EmergencyStopAsync(ushort locoAddress) => SendCommandsAsync(Commands.Create(locoAddress)); + + public Task SetFunctionAsync(ushort locoAddress, ushort functionIndex, FunctionToggleType toggleType) => + SendCommandsAsync(Commands.Create(locoAddress, functionIndex, toggleType)); + + public Task PurgeAsync(ushort locoAddress) => SendCommandsAsync(Commands.Create(locoAddress)); + + public Task RequestLocoInfoAsync(ushort locoAddress) => SendCommandsAsync(Commands.Create(locoAddress)); + + public Task SetTurnoutAsync(ushort accessoryAddress, AccessoryOutput output, AccessoryState state, bool executeImmediately) => + SendCommandsAsync(Commands.Create(accessoryAddress, output, state, executeImmediately)); + + public Task SetExtAccessoryAsync(ushort accessoryAddress, byte payload) => + SendCommandsAsync(Commands.Create(accessoryAddress, payload)); + + public Task RequestTurnoutInfoAsync(ushort accessoryAddress) => SendCommandsAsync(Commands.Create(accessoryAddress)); + + public Task RequestExtAccessoryInfoAsync(ushort accessoryAddress) => SendCommandsAsync(Commands.Create(accessoryAddress)); + + public Task TrackPowerOnAsync() => SendCommandsAsync(Commands.Create()); + + public Task TrackPowerOffAsync() => SendCommandsAsync(Commands.Create()); + + public Task EmergencyStopAllAsync() => SendCommandsAsync(Commands.Create()); + + public Task RequestSystemStateAsync() => SendCommandsAsync(Commands.Create()); + + public Task RequestFirmwareVersionAsync() => SendCommandsAsync(Commands.Create()); + + public Task RequestStatusAsync() => SendCommandsAsync(Commands.Create()); + + public Task ReadCvAsync(ushort cvAddress) => SendCommandsAsync(Commands.Create(cvAddress)); + + public Task WriteCvAsync(ushort cvAddress, byte value) => SendCommandsAsync(Commands.Create(cvAddress, value)); + + public Task RequestFeedbackAsync(byte groupIndex) => SendCommandsAsync(Commands.Create(groupIndex)); + + public Task RequestModelTimeAsync() => SendCommandsAsync(Commands.Create(FastClockAction.Read)); + + public Task SetModelTimeAsync(ModelTime time) => SendCommandsAsync(Commands.Create(time)); + + public Task StartModelTimeAsync() => SendCommandsAsync(Commands.Create(FastClockAction.Start)); + + public Task StopModelTimeAsync() => SendCommandsAsync(Commands.Create(FastClockAction.Stop)); + + protected async virtual Task LogOnAsync() => + await SendCommandsAsync(Commands.Create(_options.BroadcastFlags), Commands.Create()); + + private async Task KeepAliveAsync() + { + try + { + await SendCommandsAsync(Commands.Create()); + } + catch (NotConnectedException exception) + { + _logger?.LogDebug(exception, "Keep-alive skipped because the station is not connected."); + } + } + + public void Dispose() + { + _delayedKeepAliveAction.Dispose(); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/Z21.Client/Core/Z21Options.cs b/src/Z21.Client/Core/Z21Options.cs new file mode 100644 index 0000000..a83b083 --- /dev/null +++ b/src/Z21.Client/Core/Z21Options.cs @@ -0,0 +1,26 @@ +using System; +using Z21.Core.Model; + +namespace Z21.Core +{ + /// + /// Protocol-level options for the Z21 command station (transport options are configured separately + /// on the transport itself). + /// + public class Z21Options + { + /// + /// Broadcast flags requested from the Z21 on (re)connect. + /// + public uint[] BroadcastFlags { get; set; } = + [ + Z21BroadcastFlags.DriveAndSwitchingMessages, + Z21BroadcastFlags.LocoInfoChangedMessages + ]; + + /// + /// Interval after the last command before an automatic keep-alive request is sent. + /// + public TimeSpan KeepAliveInterval { get; set; } = TimeSpan.FromSeconds(45); + } +} diff --git a/src/Z21.Client/Core/Z21ResponseHandler.cs b/src/Z21.Client/Core/Z21ResponseHandler.cs index cd9bf82..467c706 100644 --- a/src/Z21.Client/Core/Z21ResponseHandler.cs +++ b/src/Z21.Client/Core/Z21ResponseHandler.cs @@ -1,84 +1,56 @@ using System; using System.Collections.Generic; -using System.Linq; +using CommandStation.Framing; +using CommandStation.Transport; using Microsoft.Extensions.Logging; -using Z21.Core.Model.EventArgs; using Z21.Core.ResponseHandler; -using Z21.Transport; namespace Z21.Core { public class Z21ResponseHandler { - private readonly IZ21Transport _transport; + private readonly ITransport _transport; + private readonly IFrameReader _frameReader; private readonly IEnumerable _z21ResponseHandlers; private readonly ILogger? _logger; - public Z21ResponseHandler(IZ21Transport z21Transport, IEnumerable z21ResponseHandlers, ILogger? logger = null) + public Z21ResponseHandler(ITransport transport, IFrameReader frameReader, IEnumerable z21ResponseHandlers, ILogger? logger = null) { - _transport = z21Transport; + _transport = transport; + _frameReader = frameReader; _z21ResponseHandlers = z21ResponseHandlers; _logger = logger; - _transport.OnResponseReceived += Transport_OnResponseReceived; + _frameReader.OnFrameReceived += FrameReader_OnFrameReceived; + _transport.OnBytesReceived += Transport_OnBytesReceived; } - protected virtual void Transport_OnResponseReceived(object? sender, ResponseReceivedEventArgs bytes) + protected virtual void Transport_OnBytesReceived(object? sender, BytesReceivedEventArgs args) { - CutDatagram(bytes.Response).ForEach(HandleDatagram); + _frameReader.Append(args.Data); } - protected virtual void HandleDatagram(byte[] data) + protected virtual void FrameReader_OnFrameReceived(object? sender, FrameReceivedEventArgs args) { - foreach (IZ21ResponseHandler handler in _z21ResponseHandlers.Where(handler => handler.CanHandle(data))) - { - try - { - _logger?.LogDebug("{handlerName} handling datagram {cutDatagram}.", handler.Name, BitConverter.ToString(data)); - handler.Handle(data); - } - catch (System.Exception exception) - { - _logger?.LogError(exception, "{handlerName} failed to handle datagram {cutDatagram}.", handler.Name, BitConverter.ToString(data)); - } - } + HandleDatagram(args.Frame); } - protected virtual List CutDatagram(byte[] datagram) + protected virtual void HandleDatagram(byte[] data) { - List cutDatagrams = []; - int offset = 0; - while (offset < datagram.Length) + foreach (IZ21ResponseHandler handler in _z21ResponseHandlers) { try { - if (offset + 2 > datagram.Length) - { - _logger?.LogError("Incomplete DataLen field — discarding remainder. Data: {datagram}", BitConverter.ToString(datagram)); - return cutDatagrams; - } - - ushort dataLen = (ushort)(datagram[offset] | (datagram[offset + 1] << 8)); - - if (offset + dataLen > datagram.Length) - { - _logger?.LogError("Incomplete packet — discarding remainder. Data: {datagram}", BitConverter.ToString(datagram)); - return cutDatagrams; - } + if (!handler.CanHandle(data)) + continue; - byte[] cutDatagram = new byte[dataLen]; - Buffer.BlockCopy(datagram, offset, cutDatagram, 0, dataLen); - _logger?.LogDebug("Received cut datagram: {cutDatagram}", BitConverter.ToString(cutDatagram)); - offset += dataLen; - cutDatagrams.Add(cutDatagram); + _logger?.LogDebug("{handlerName} handling datagram {cutDatagram}.", handler.Name, BitConverter.ToString(data)); + handler.Handle(data); } catch (System.Exception exception) { - _logger?.LogError(exception, "Failed to cut datagram — discarding remainder. Data: {datagram}", BitConverter.ToString(datagram)); - return cutDatagrams; + _logger?.LogError(exception, "{handlerName} failed to handle datagram {cutDatagram}.", handler.Name, BitConverter.ToString(data)); } } - - return cutDatagrams; } } -} \ No newline at end of file +} diff --git a/src/Z21.Client/Core/Z21Watchdog.cs b/src/Z21.Client/Core/Z21Watchdog.cs deleted file mode 100644 index 1b61689..0000000 --- a/src/Z21.Client/Core/Z21Watchdog.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Net.NetworkInformation; -using System.Timers; -using Z21.Core.Model; -using Z21.Core.Model.EventArgs; - -namespace Z21.Core -{ - public sealed class Z21Watchdog - { - private readonly Z21Configuration _configuration; - private readonly Timer _timer; - private bool? _lastReachable; - - public event EventHandler? OnReachabilityChanged; - - public Z21Watchdog(Z21Configuration configuration) - { - _configuration = configuration; - - _timer = new(TimeSpan.FromSeconds(1)) - { - AutoReset = true, - Enabled = true - }; - _timer.Elapsed += (_, _) => CheckState(); - } - - private void CheckState() - { - var reachable = IsReachable(); - - if (_lastReachable == reachable) - return; - - _lastReachable = reachable; - OnReachabilityChanged?.Invoke(this, new (reachable)); - } - - private bool IsReachable() - { - try - { - using var ping = new Ping(); - var reply = ping.Send(_configuration.ClientIPEndPoint.Address, 1000); - return reply.Status == IPStatus.Success; - } - catch - { - return false; - } - } - } -} \ No newline at end of file diff --git a/src/Z21.Client/GlobalUsings.cs b/src/Z21.Client/GlobalUsings.cs new file mode 100644 index 0000000..bffbd65 --- /dev/null +++ b/src/Z21.Client/GlobalUsings.cs @@ -0,0 +1 @@ +global using CommandStation.Model; diff --git a/src/Z21.Client/Transport/IZ21Transport.cs b/src/Z21.Client/Transport/IZ21Transport.cs deleted file mode 100644 index e12ffb7..0000000 --- a/src/Z21.Client/Transport/IZ21Transport.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Threading.Tasks; -using Z21.Core.Model; -using Z21.Core.Model.EventArgs; - -namespace Z21.Transport -{ - public interface IZ21Transport - { - bool IsConnected { get; } - event EventHandler? OnResponseReceived; - - public Z21Configuration Z21Configuration { get; } - - void Connect(); - - Task SendAsync(byte[] datagram); - } -} \ No newline at end of file diff --git a/src/Z21.Client/Transport/Z21Transport.cs b/src/Z21.Client/Transport/Z21Transport.cs deleted file mode 100644 index fca0f0d..0000000 --- a/src/Z21.Client/Transport/Z21Transport.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Net; -using System.Net.Sockets; -using System.Threading.Tasks; -using Z21.Core.Model; -using Z21.Core.Model.EventArgs; - -namespace Z21.Transport -{ - public class Z21Transport : IZ21Transport, IDisposable - { - private Lazy _udpClient; - - public Z21Transport(Z21Configuration z21Configuration) - { - ArgumentNullException.ThrowIfNull(z21Configuration); - Z21Configuration = z21Configuration; - Z21Configuration.ConfigurationUpdated += (_, _) => _udpClient = new(UdpClientFactory()); - _udpClient = new(UdpClientFactory()); - } - - private UdpClient UdpClientFactory() - { - if (_udpClient?.IsValueCreated == true) - _udpClient.Value.Dispose(); - - var udpClient = new UdpClient(Z21Configuration.ClientIPEndPoint.Port); - - if (OperatingSystem.IsWindows()) - udpClient.AllowNatTraversal(Z21Configuration.AllowNatTraversal); - return udpClient; - } - - public event EventHandler? OnResponseReceived; - - public bool IsConnected { get; private set; } = false; - - public Z21Configuration Z21Configuration { get; } - - public void Connect() - { - _udpClient.Value.Connect(Z21Configuration.ClientIPEndPoint); - _udpClient.Value.BeginReceive(Receiving, null); - IsConnected = true; - } - - private void Receiving(IAsyncResult res) - { - IPEndPoint? remoteIpEndPoint = null!; - byte[] received = _udpClient.Value.EndReceive(res, ref remoteIpEndPoint); - _udpClient.Value.BeginReceive(Receiving, null); - - if (remoteIpEndPoint is not null - && remoteIpEndPoint.Equals(Z21Configuration.ClientIPEndPoint)) - OnResponseReceived?.Invoke(this, new(received)); - } - - public async Task SendAsync(byte[] datagram) - { - ArgumentNullException.ThrowIfNull(datagram); - await _udpClient.Value.SendAsync(datagram, datagram.GetLength(0)); - } - - public void Dispose() - { - if (_udpClient.IsValueCreated) - _udpClient.Value.Dispose(); - } - } -} \ No newline at end of file diff --git a/src/Z21.Client/Z21.Client.csproj b/src/Z21.Client/Z21.Client.csproj index 42b901f..47b9df8 100644 --- a/src/Z21.Client/Z21.Client.csproj +++ b/src/Z21.Client/Z21.Client.csproj @@ -4,17 +4,17 @@ enable 12 True + true + $(NoWarn);CS1591;CS1573 Z21 Jakob Eichberger Z21Client partially implements the z21 lan protocoll for the digital command center z21/Z21 from Roco/Fleischmann. - https://github.com/Jakob-Eichberger/z21Client + https://github.com/jaak0b/Z21 Z21;Roco;Fleischman Debug - 4.0.0 x64 enable net8.0;net8.0-windows - 6.0.0 true LICENSE Z21 @@ -26,6 +26,11 @@ + + + + + diff --git a/src/Z21.Console/Command/CliGetFirmwareVersionCommand.cs b/src/Z21.Console/Command/CliGetFirmwareVersionCommand.cs index e183c7d..121f7b0 100644 --- a/src/Z21.Console/Command/CliGetFirmwareVersionCommand.cs +++ b/src/Z21.Console/Command/CliGetFirmwareVersionCommand.cs @@ -14,7 +14,7 @@ public class CliGetFirmwareVersionCommand : Command { override public int Execute([NotNull] CommandContext context, [NotNull] GetFirmwareVersionSettings settings) { - Program.Z21Client.SendCommandsAsync(new GetFirmwareVersionCommand()); + Program.Station.RequestFirmwareVersionAsync(); return 0; } } diff --git a/src/Z21.Console/Command/CliSetTrackPowerCommand.cs b/src/Z21.Console/Command/CliSetTrackPowerCommand.cs index 398a575..96a8dff 100644 --- a/src/Z21.Console/Command/CliSetTrackPowerCommand.cs +++ b/src/Z21.Console/Command/CliSetTrackPowerCommand.cs @@ -33,13 +33,13 @@ override public int Execute([NotNull] CommandContext context, [NotNull] SetTrack { if (settings.On) { - Program.Z21Client.SendCommandsAsync(new SetTrackPowerOnCommand()); + Program.Station.TrackPowerOnAsync(); return 0; } if (settings.Off) { - Program.Z21Client.SendCommandsAsync(new SetTrackPowerOffCommand()); + Program.Station.TrackPowerOffAsync(); return 0; } diff --git a/src/Z21.Console/Program.cs b/src/Z21.Console/Program.cs index b7e5a78..1b54261 100644 --- a/src/Z21.Console/Program.cs +++ b/src/Z21.Console/Program.cs @@ -12,7 +12,7 @@ namespace Z21.Console { abstract internal class Program { - internal static IZ21Client Z21Client = null!; + internal static IZ21CommandStation Station = null!; public static void Main(string[] args) { @@ -26,9 +26,9 @@ public static void Main(string[] args) builder.RegisterSerilog(log); var container = builder.Build(); - Z21Client = container.Resolve(); - - Z21Client.ConnectAsync(); + Station = container.Resolve(); + + Station.ConnectAsync(); CommandApp app = new(); diff --git a/src/Z21.DependencyInjection.UnitTest/SpyTransport.cs b/src/Z21.DependencyInjection.UnitTest/SpyTransport.cs new file mode 100644 index 0000000..b1d1812 --- /dev/null +++ b/src/Z21.DependencyInjection.UnitTest/SpyTransport.cs @@ -0,0 +1,33 @@ +using System; +using System.Threading.Tasks; +using CommandStation.Transport; + +namespace Z21.DependencyInjection.UnitTest +{ + public class SpyTransport : ITransport + { + public bool IsConnected { get; private set; } + + public event EventHandler? OnBytesReceived; + + public event EventHandler? OnConnectionChanged; + + public Task ConnectAsync() + { + IsConnected = true; + OnConnectionChanged?.Invoke(this, new ConnectionChangedEventArgs(true)); + return Task.CompletedTask; + } + + public Task DisconnectAsync() + { + IsConnected = false; + OnConnectionChanged?.Invoke(this, new ConnectionChangedEventArgs(false)); + return Task.CompletedTask; + } + + public Task SendAsync(ReadOnlyMemory data) => Task.CompletedTask; + + public void RaiseBytes(byte[] data) => OnBytesReceived?.Invoke(this, new BytesReceivedEventArgs(data)); + } +} diff --git a/src/Z21.DependencyInjection.UnitTest/Z21DependencyInjectionExtensionTest.cs b/src/Z21.DependencyInjection.UnitTest/Z21DependencyInjectionExtensionTest.cs index d94bc47..c124184 100644 --- a/src/Z21.DependencyInjection.UnitTest/Z21DependencyInjectionExtensionTest.cs +++ b/src/Z21.DependencyInjection.UnitTest/Z21DependencyInjectionExtensionTest.cs @@ -1,11 +1,76 @@ +using CommandStation; +using CommandStation.Model; +using CommandStation.Transport; using Microsoft.Extensions.DependencyInjection; +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; using Z21.Core.ResponseHandler; +using Z21.Core.ResponseHandler.Settings; using Z21.Core.ResponseHandler.SystemState; namespace Z21.DependencyInjection.UnitTest { public class Z21DependencyInjectionExtensionTest { + [Test] + public void AddZ21_WithoutHost_ResolvingCommandStation_WiresInboundHandling() + { + ServiceCollection services = new(); + services.AddZ21(); + SpyTransport transport = new(); + services.AddSingleton(transport); + ServiceProvider serviceProvider = services.BuildServiceProvider(); + + ILocoControl station = serviceProvider.GetRequiredService() as ILocoControl + ?? throw new InvalidOperationException("Station does not support loco control."); + LocoInfoData? received = null; + station.LocoInfoReceived += (_, data) => received = data; + + transport.RaiseBytes([0x0F, 0x00, 0x40, 0x00, 0xEF, 0x00, 0x03, 0x02, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69]); + + Assert.That(received, Is.Not.Null); + Assert.That(received!.LocoAddress, Is.EqualTo(3)); + } + + [Test] + public void AddZ21_WithoutHost_NewHandler_IsDiscoveredAndFlowsThroughCapability() + { + ServiceCollection services = new(); + services.AddZ21(); + SpyTransport transport = new(); + services.AddSingleton(transport); + ServiceProvider serviceProvider = services.BuildServiceProvider(); + + IFastClockControl station = serviceProvider.GetRequiredService() as IFastClockControl + ?? throw new InvalidOperationException("Station does not support fast clock control."); + ModelTime? received = null; + station.ModelTimeChanged += (_, time) => received = time; + + // LAN_FAST_CLOCK_DATA: day=0, hour=12, minute=30, second=45, rate=8 + transport.RaiseBytes([0x0C, 0x00, 0xCD, 0x00, 0x66, 0x25, 0x0C, 0x1E, 0x2D, 0x08, 0x80, 0x00]); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.Hour, Is.EqualTo(12)); + Assert.That(received.Minute, Is.EqualTo(30)); + Assert.That(received.Rate, Is.EqualTo(8)); + }); + } + + [Test] + public void AddZ21_ProviderDisposedSynchronously_DoesNotThrow() + { + ServiceCollection services = new(); + services.AddZ21(); + ServiceProvider serviceProvider = services.BuildServiceProvider(); + + // Resolving the station instantiates the singleton UdpTransport, so the provider tracks it for disposal. + _ = serviceProvider.GetRequiredService(); + + Assert.DoesNotThrow(() => serviceProvider.Dispose()); + } + [Test] public void AddZ21_WithZ21ResponseHandlers_SameInstanceIsRegisteredForAllInterfaces() { @@ -29,5 +94,31 @@ public void AddZ21_WithZ21ResponseHandlers_SameInstanceIsRegisteredForAllInterfa Assert.That(implementationSpecificInterface, Is.SameAs(baseInterface)); }); } + + [Test] + public void AddZ21_WithoutHost_AccessoryModeFrame_IsDiscoveredAndDispatched() + { + ServiceCollection services = new(); + services.AddZ21(); + SpyTransport transport = new(); + services.AddSingleton(transport); + ServiceProvider serviceProvider = services.BuildServiceProvider(); + + // Resolving the station wires the dispatcher to the transport. + _ = serviceProvider.GetRequiredService(); + IAccessoryModeResponseHandler handler = serviceProvider.GetRequiredService(); + DecoderModeReceivedEventArgs? received = null; + handler.OnAccessoryModeReceived += (_, args) => received = args; + + // LAN_GET_TURNOUTMODE: address=12 (0x000C), mode=DCC (0x00) + transport.RaiseBytes([0x07, 0x00, 0x70, 0x00, 0x00, 0x0C, 0x00]); + + Assert.That(received, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(received!.LocoAddress, Is.EqualTo(12)); + Assert.That(received.Mode, Is.EqualTo(DecoderMode.DCC)); + }); + } } } \ No newline at end of file diff --git a/src/Z21.DependencyInjection/Z21.DependencyInjection.csproj b/src/Z21.DependencyInjection/Z21.DependencyInjection.csproj index 74e3789..bcfc4a2 100644 --- a/src/Z21.DependencyInjection/Z21.DependencyInjection.csproj +++ b/src/Z21.DependencyInjection/Z21.DependencyInjection.csproj @@ -5,9 +5,10 @@ enable enable true + true + $(NoWarn);CS1591;CS1573 Jakob Eichberger - https://github.com/Jakob-Eichberger/z21Client - 6.0.0 + https://github.com/jaak0b/Z21 LICENSE true @@ -15,8 +16,6 @@ - - @@ -25,6 +24,7 @@ + diff --git a/src/Z21.DependencyInjection/Z21DependencyInjectionExtension.cs b/src/Z21.DependencyInjection/Z21DependencyInjectionExtension.cs index 43661cc..a6fb7c6 100644 --- a/src/Z21.DependencyInjection/Z21DependencyInjectionExtension.cs +++ b/src/Z21.DependencyInjection/Z21DependencyInjectionExtension.cs @@ -1,22 +1,40 @@ -using Microsoft.Extensions.DependencyInjection; +using CommandStation; +using CommandStation.Framing; +using CommandStation.Transport; +using CommandStation.Transport.Udp; +using Microsoft.Extensions.DependencyInjection; using Z21.Core; -using Z21.Core.Model; +using Z21.Core.Codecs; +using Z21.Core.Command; +using Z21.Core.Framing; +using Z21.Core.Reflection; using Z21.Core.ResponseHandler; using Z21.Core.ResponseParser; -using Z21.Transport; namespace Z21.DependencyInjection { - + public static class Z21DependencyInjectionExtension { - public static IServiceCollection AddZ21(this IServiceCollection services, Action? configurationAction = null) + public static IServiceCollection AddZ21(this IServiceCollection services, Action? transportConfiguration = null, Action? optionsConfiguration = null) { - services.AddSingleton(); - services.AddSingleton(); - services.AddActivatedSingleton(); - - services.ConfigureZ21Client(configurationAction); + services.AddSingleton(_ => + { + UdpTransportOptions options = new(); + transportConfiguration?.Invoke(options); + return options; + }); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(provider => provider.GetRequiredService()); + services.AddSingleton(); + + services.ConfigureZ21Options(optionsConfiguration); services.AddZ21ResponseParser(); services.AddZ21ResponseHandler(); return services; @@ -25,59 +43,37 @@ public static IServiceCollection AddZ21(this IServiceCollection services, Action /// /// Discovers all Z21 response handlers and registers them in the collection. /// - private static IServiceCollection AddZ21ResponseHandler(this IServiceCollection services) - { - ArgumentNullException.ThrowIfNull(services); - - Type baseInterface = typeof(IZ21ResponseHandler); - - IEnumerable handlerTypes = baseInterface.Assembly.GetTypes().Where(type => type is { IsClass: true, IsAbstract: false } && baseInterface.IsAssignableFrom(type)); + private static IServiceCollection AddZ21ResponseHandler(this IServiceCollection services) => + services.AddDiscovered(typeof(IZ21ResponseHandler), includeBaseInterface: true); - foreach (Type handlerType in handlerTypes) - { - // Get all interfaces this class implements that are in the chain to IZ21ResponseHandler - List interfacesToRegister = handlerType.GetInterfaces().Where(baseInterface.IsAssignableFrom).ToList(); - services.AddSingleton(handlerType); - foreach (Type serviceType in interfacesToRegister) - { - services.AddSingleton(serviceType, provider => provider.GetRequiredService(handlerType)); - } - } - - return services; - } + private static IServiceCollection AddZ21ResponseParser(this IServiceCollection services) => + services.AddDiscovered(typeof(IZ21ResponseParser), includeBaseInterface: false); - private static IServiceCollection AddZ21ResponseParser(this IServiceCollection services) + private static IServiceCollection AddDiscovered(this IServiceCollection services, Type baseInterface, bool includeBaseInterface) { ArgumentNullException.ThrowIfNull(services); - Type baseInterface = typeof(IZ21ResponseParser); - - IEnumerable handlerTypes = baseInterface.Assembly.GetTypes().Where(type => type is { IsClass: true, IsAbstract: false } && baseInterface.IsAssignableFrom(type)); + Z21ServiceDiscovery discovery = new(); - foreach (Type handlerType in handlerTypes) + foreach (Type implementationType in discovery.GetImplementations(baseInterface)) { - // Get all interfaces this class implements that are in the chain up to IZ21ResponseParser - List interfacesToRegister = handlerType.GetInterfaces().Where(type => baseInterface.IsAssignableFrom(type) && type != baseInterface).ToList(); - services.AddSingleton(handlerType); - foreach (Type serviceType in interfacesToRegister) - { - services.AddSingleton(serviceType, provider => provider.GetRequiredService(handlerType)); - } + services.AddSingleton(implementationType); + foreach (Type serviceType in discovery.GetServiceInterfaces(implementationType, baseInterface, includeBaseInterface)) + services.AddSingleton(serviceType, provider => provider.GetRequiredService(implementationType)); } return services; } - private static IServiceCollection ConfigureZ21Client(this IServiceCollection services, Action? configurationAction = null) // TODO: Test + private static IServiceCollection ConfigureZ21Options(this IServiceCollection services, Action? optionsConfiguration) { ArgumentNullException.ThrowIfNull(services); - Z21Configuration configuration = new(); - configurationAction?.Invoke(configuration); - services.AddSingleton(configuration); + Z21Options options = new(); + optionsConfiguration?.Invoke(options); + services.AddSingleton(options); return services; } } -} \ No newline at end of file +} diff --git a/src/Z21.SmokeTest/Z21.SmokeTest.csproj b/src/Z21.SmokeTest/Z21.SmokeTest.csproj new file mode 100644 index 0000000..269f5c8 --- /dev/null +++ b/src/Z21.SmokeTest/Z21.SmokeTest.csproj @@ -0,0 +1,29 @@ + + + + net8.0 + enable + enable + false + true + Z21.SmokeTest + + + + + + + + + + + + + + + + + + + + diff --git a/src/Z21.SmokeTest/Z21HardwareTests.cs b/src/Z21.SmokeTest/Z21HardwareTests.cs new file mode 100644 index 0000000..8cbebbf --- /dev/null +++ b/src/Z21.SmokeTest/Z21HardwareTests.cs @@ -0,0 +1,403 @@ +using System; +using System.Linq; +using System.Net; +using System.Threading; +using System.Threading.Tasks; +using CommandStation.Model; +using Microsoft.Extensions.DependencyInjection; +using Z21.Core; +using Z21.Core.Command.SystemState; +using Z21.Core.Model; +using Z21.Core.Model.EventArgs; +using Z21.Core.ResponseHandler.SystemState; +using Z21.DependencyInjection; + +namespace Z21.SmokeTest +{ + /// + /// End-to-end smoke tests that exercise the library against a real Z21 on the network. These are + /// and tagged Hardware, so the normal dotnet test / + /// CI sweep discovers but never runs them. Run them on demand with a live command station: + /// + /// $env:Z21_ENDPOINT="192.168.0.111:21105"; $env:Z21_LOCO="3" + /// dotnet test src/Z21.SmokeTest --filter "TestCategory=Hardware" + /// + /// Set Z21_READONLY=1 to skip the destructive (track power / driving / turnout) tests. + /// + [TestFixture] + [Category("Hardware")] + [Explicit("Requires a live Z21 on the network; set Z21_ENDPOINT to run.")] + public class Z21HardwareTests + { + private readonly TimeSpan _eventTimeout = TimeSpan.FromSeconds(5); + private readonly TimeSpan _settleDelay = TimeSpan.FromMilliseconds(300); + + private ServiceProvider _provider = null!; + private IZ21CommandStation _station = null!; + private ushort _locoAddress; + private bool _readOnly; + + [OneTimeSetUp] + public async Task ConnectToZ21() + { + string? endpoint = Environment.GetEnvironmentVariable("Z21_ENDPOINT"); + if (string.IsNullOrWhiteSpace(endpoint)) + Assert.Ignore("Set Z21_ENDPOINT (e.g. 192.168.0.111:21105) to run the Z21 hardware tests."); + + string[] hostPort = endpoint!.Split(':'); + IPAddress ip = IPAddress.Parse(hostPort[0]); + int port = hostPort.Length > 1 ? int.Parse(hostPort[1]) : 21105; + _locoAddress = ushort.TryParse(Environment.GetEnvironmentVariable("Z21_LOCO"), out ushort loco) ? loco : (ushort)3; + _readOnly = IsTruthy(Environment.GetEnvironmentVariable("Z21_READONLY")); + + var services = new ServiceCollection(); + services.AddZ21( + t => t.RemoteEndPoint = new IPEndPoint(ip, port), + o => o.BroadcastFlags = + [ + Z21BroadcastFlags.DriveAndSwitchingMessages, + Z21BroadcastFlags.LocoInfoChangedMessages, + Z21BroadcastFlags.SystemStateDataChangedMessages, + ]); + + _provider = services.BuildServiceProvider(); + _station = _provider.GetRequiredService(); + + await _station.ConnectAsync(); + + Task firmware = NextEventAsync( + h => _station.FirmwareVersionReceived += h, + h => _station.FirmwareVersionReceived -= h, + _eventTimeout); + await _station.RequestFirmwareVersionAsync(); + await firmware; + + Assert.That(_station.IsConnected, Is.True, "Station did not connect to the Z21."); + } + + [OneTimeTearDown] + public async Task DisconnectFromZ21() + { + if (_station is not null && _station.IsConnected) + { + if (!_readOnly) + { + await _station.DriveAsync(_locoAddress, DccSpeedMode.Steps128, DrivingDirection.Forward, 0); + await _station.TrackPowerOffAsync(); + } + await _station.DisconnectAsync(); + } + + if (_provider is not null) + await _provider.DisposeAsync(); + } + + [Test] + [Order(1)] + public void Connects_AndReportsConnected() + => Assert.That(_station.IsConnected, Is.True); + + [Test] + [Order(2)] + public async Task SerialNumber_IsReported() + { + ISerialNumberResponseHandler handler = _provider.GetRequiredService(); + Task serial = NextEventAsync( + h => handler.OnSerialNumberReceived += h, + h => handler.OnSerialNumberReceived -= h, + _eventTimeout); + + await _station.SendCommandsAsync(_station.Commands.Create()); + + SerialNumberReceivedEventArgs args = await serial; + Assert.That(args.SerialNumber, Is.GreaterThan(0u)); + } + + [Test] + [Order(3)] + public async Task HardwareInfo_IsReported() + { + IHardwareInfoResponseHandler handler = _provider.GetRequiredService(); + Task hardware = NextEventAsync( + h => handler.OnHardwareInfoReceived += h, + h => handler.OnHardwareInfoReceived -= h, + _eventTimeout); + + await _station.SendCommandsAsync(_station.Commands.Create()); + + HardwareInfoEventArgs args = await hardware; + Assert.Multiple(() => + { + Assert.That(args.Z21HardwareType, Is.GreaterThan(0)); + Assert.That(args.FirmwareVersion, Is.GreaterThan(0)); + }); + } + + [Test] + [Order(4)] + public async Task FirmwareVersion_IsReported() + { + Task firmware = NextEventAsync( + h => _station.FirmwareVersionReceived += h, + h => _station.FirmwareVersionReceived -= h, + _eventTimeout); + + await _station.RequestFirmwareVersionAsync(); + + FirmwareVersion version = await firmware; + Assert.That(version.Major, Is.GreaterThan(0)); + } + + [Test] + [Order(5)] + public async Task XBusVersion_IsReported() + { + IVersionResponseHandler handler = _provider.GetRequiredService(); + Task version = NextEventAsync( + h => handler.OnVersionReceived += h, + h => handler.OnVersionReceived -= h, + _eventTimeout); + + await _station.SendCommandsAsync(_station.Commands.Create()); + + VersionReceivedEventArgs args = await version; + Assert.That(args.CommandStationId, Is.GreaterThan(0)); + } + + [Test] + [Order(6)] + public async Task BroadcastFlags_AreReported() + { + IBroadcastFlagsResponseHandler handler = _provider.GetRequiredService(); + Task flags = NextEventAsync( + h => handler.OnBroadcastFlagsReceived += h, + h => handler.OnBroadcastFlagsReceived -= h, + _eventTimeout); + + await _station.SendCommandsAsync(_station.Commands.Create()); + + BroadcastFlagsReceivedEventArgs args = await flags; + Assert.That(args.BroadCastFlag, Is.Not.Zero); + } + + [Test] + [Order(7)] + public async Task SystemState_IsReported() + { + Task state = NextEventAsync( + h => _station.SystemStateReceived += h, + h => _station.SystemStateReceived -= h, + _eventTimeout); + + await _station.RequestSystemStateAsync(); + + SystemState systemState = await state; + Assert.Multiple(() => + { + Assert.That(systemState.CentralState, Is.Not.Null); + Assert.That(systemState.SupplyVoltage, Is.GreaterThan(0)); + }); + } + + [Test] + [Order(8)] + public async Task Status_IsReported() + { + Task status = NextEventAsync( + h => _station.StatusChanged += h, + h => _station.StatusChanged -= h, + _eventTimeout); + + await _station.RequestStatusAsync(); + + CentralState centralState = await status; + Assert.That(centralState, Is.Not.Null); + } + + [Test] + [Order(10)] + public async Task TrackPower_OnOffOn_RaisesTrackPowerChanged() + { + SkipIfReadOnly(); + + await _station.TrackPowerOffAsync(); + await Task.Delay(_settleDelay); + + Assert.That(await ExpectPowerChangeAsync(true), Is.True); + Assert.That(await ExpectPowerChangeAsync(false), Is.False); + Assert.That(await ExpectPowerChangeAsync(true), Is.True); + } + + [Test] + [Order(11)] + public async Task Drive_RampForward_ReportsSpeedAndDirection() + { + SkipIfReadOnly(); + await EnsurePowerOnAsync(); + + await _station.DriveAsync(_locoAddress, DccSpeedMode.Steps128, DrivingDirection.Forward, 10); + await _station.DriveAsync(_locoAddress, DccSpeedMode.Steps128, DrivingDirection.Forward, 40); + await _station.DriveAsync(_locoAddress, DccSpeedMode.Steps128, DrivingDirection.Forward, 80); + + LocoInfoData info = await RequestLocoInfoAsync(); + Assert.Multiple(() => + { + Assert.That(info.LocoAddress, Is.EqualTo(_locoAddress)); + Assert.That(info.DrivingDirection, Is.EqualTo(DrivingDirection.Forward)); + Assert.That(info.LocoSpeed, Is.GreaterThan(0)); + }); + } + + [Test] + [Order(12)] + public async Task Functions_F0F1_Toggle() + { + SkipIfReadOnly(); + await EnsurePowerOnAsync(); + + await _station.SetFunctionAsync(_locoAddress, 0, FunctionToggleType.On); + LocoInfoData onInfo = await RequestLocoInfoAsync(); + Assert.That( + onInfo.LocoFunctionsData.Any(f => f.FunctionIndex == 0 && f.FunctionToggleType == FunctionToggleType.On), + Is.True, + "F0 (lights) should be reported as On."); + + await _station.SetFunctionAsync(_locoAddress, 1, FunctionToggleType.On); + await _station.SetFunctionAsync(_locoAddress, 1, FunctionToggleType.Off); + LocoInfoData offInfo = await RequestLocoInfoAsync(); + Assert.That( + offInfo.LocoFunctionsData.Any(f => f.FunctionIndex == 1 && f.FunctionToggleType == FunctionToggleType.Off), + Is.True, + "F1 should be reported as Off after toggling on then off."); + } + + [Test] + [Order(13)] + public async Task Drive_Reverse_ReportsBackward() + { + SkipIfReadOnly(); + await EnsurePowerOnAsync(); + + await _station.DriveAsync(_locoAddress, DccSpeedMode.Steps128, DrivingDirection.Backward, 30); + + LocoInfoData info = await RequestLocoInfoAsync(); + Assert.That(info.DrivingDirection, Is.EqualTo(DrivingDirection.Backward)); + } + + [Test] + [Order(14)] + public async Task EmergencyStop_StopsLoco() + { + SkipIfReadOnly(); + await EnsurePowerOnAsync(); + + await _station.DriveAsync(_locoAddress, DccSpeedMode.Steps128, DrivingDirection.Forward, 50); + await _station.EmergencyStopAsync(_locoAddress); + + LocoInfoData info = await RequestLocoInfoAsync(); + Assert.That(info.LocoSpeed, Is.Zero); + } + + [Test] + [Order(15)] + public async Task Turnout_ActivateDeactivateRead_RaisesTurnoutInfo() + { + SkipIfReadOnly(); + await EnsurePowerOnAsync(); + + await _station.SetTurnoutAsync(1, AccessoryOutput.Output1, AccessoryState.Activate, true); + await _station.SetTurnoutAsync(1, AccessoryOutput.Output1, AccessoryState.Deactivate, true); + + Task turnout = NextEventAsync( + h => _station.TurnoutInfoReceived += h, + h => _station.TurnoutInfoReceived -= h, + _eventTimeout, + t => t.AccessoryAddress == 1); + await _station.RequestTurnoutInfoAsync(1); + + TurnoutInfo info = await turnout; + Assert.That(info.AccessoryAddress, Is.EqualTo((ushort)1)); + } + + private void SkipIfReadOnly() + { + if (_readOnly) + Assert.Ignore("Z21_READONLY is set; skipping track power, driving and turnout tests."); + } + + private bool IsTruthy(string? value) => + value is not null && (value == "1" + || string.Equals(value, "true", StringComparison.OrdinalIgnoreCase) + || string.Equals(value, "yes", StringComparison.OrdinalIgnoreCase)); + + private async Task EnsurePowerOnAsync() + { + await _station.TrackPowerOnAsync(); + await Task.Delay(_settleDelay); + } + + private async Task ExpectPowerChangeAsync(bool on) + { + Task change = NextEventAsync( + h => _station.TrackPowerChanged += h, + h => _station.TrackPowerChanged -= h, + _eventTimeout, + state => state == on); + + if (on) + await _station.TrackPowerOnAsync(); + else + await _station.TrackPowerOffAsync(); + + return await change; + } + + private async Task RequestLocoInfoAsync() + { + Task info = NextEventAsync( + h => _station.LocoInfoReceived += h, + h => _station.LocoInfoReceived -= h, + _eventTimeout, + data => data.LocoAddress == _locoAddress); + + await _station.RequestLocoInfoAsync(_locoAddress); + + return await info; + } + + private async Task NextEventAsync( + Action> subscribe, + Action> unsubscribe, + TimeSpan timeout, + Func? predicate = null) + { + var completion = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + EventHandler handler = (_, args) => + { + if (predicate is null || predicate(args)) + completion.TrySetResult(args); + }; + + subscribe(handler); + try + { + using var cancellation = new CancellationTokenSource(timeout); + await using (cancellation.Token.Register(() => completion.TrySetCanceled(cancellation.Token))) + { + try + { + return await completion.Task; + } + catch (OperationCanceledException) + { + throw new TimeoutException($"No matching {typeof(TArgs).Name} event was received within {timeout.TotalSeconds:0.#}s."); + } + } + } + finally + { + unsubscribe(handler); + } + } + } +} diff --git a/src/Z21.sln b/src/Z21.sln index aad54d0..9990883 100644 --- a/src/Z21.sln +++ b/src/Z21.sln @@ -17,70 +17,156 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z21.Autofac", "Z21.Autofac\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z21.Autofac.UnitTests", "Z21.Autofac.UnitTests\Z21.Autofac.UnitTests.csproj", "{2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandStation.Abstractions", "CommandStation.Abstractions\CommandStation.Abstractions.csproj", "{FD91D131-D6CF-438C-8AE7-7C39AB743081}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandStation.Transport.Udp", "CommandStation.Transport.Udp\CommandStation.Transport.Udp.csproj", "{94F51955-BE73-449F-9C92-2BA271B99E70}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandStation.Transport.Udp.UnitTest", "CommandStation.Transport.Udp.UnitTest\CommandStation.Transport.Udp.UnitTest.csproj", "{E4149B7B-47F2-4697-9405-0B770B2AB106}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z21.SmokeTest", "Z21.SmokeTest\Z21.SmokeTest.csproj", "{1480FB67-F911-4279-BEE7-0F94DFE4D6BC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Debug|Any CPU.ActiveCfg = Debug|x64 + {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Debug|Any CPU.Build.0 = Debug|x64 {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Debug|x64.ActiveCfg = Debug|x64 {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Debug|x64.Build.0 = Debug|x64 + {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Debug|x86.ActiveCfg = Debug|Any CPU + {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Debug|x86.Build.0 = Debug|Any CPU {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Release|Any CPU.ActiveCfg = Debug|x64 {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Release|Any CPU.Build.0 = Debug|x64 {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Release|x64.ActiveCfg = Debug|x64 {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Release|x64.Build.0 = Debug|x64 - {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Debug|Any CPU.Build.0 = Debug|x64 + {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Release|x86.ActiveCfg = Release|Any CPU + {A6BAE63F-5DBE-4AE7-B2C5-5CB89C25BA15}.Release|x86.Build.0 = Release|Any CPU {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Debug|Any CPU.Build.0 = Debug|Any CPU {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Debug|x64.ActiveCfg = Debug|Any CPU {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Debug|x64.Build.0 = Debug|Any CPU + {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Debug|x86.ActiveCfg = Debug|Any CPU + {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Debug|x86.Build.0 = Debug|Any CPU {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Release|Any CPU.Build.0 = Release|Any CPU {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Release|x64.ActiveCfg = Release|Any CPU {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Release|x64.Build.0 = Release|Any CPU + {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Release|x86.ActiveCfg = Release|Any CPU + {A3246DA8-ACBE-435D-B050-CA7595512C1A}.Release|x86.Build.0 = Release|Any CPU {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Debug|x64.ActiveCfg = Debug|Any CPU {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Debug|x64.Build.0 = Debug|Any CPU + {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Debug|x86.ActiveCfg = Debug|Any CPU + {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Debug|x86.Build.0 = Debug|Any CPU {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Release|Any CPU.Build.0 = Release|Any CPU {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Release|x64.ActiveCfg = Release|Any CPU {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Release|x64.Build.0 = Release|Any CPU + {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Release|x86.ActiveCfg = Release|Any CPU + {6B823598-684E-4EAC-BFD5-93BFD43531D8}.Release|x86.Build.0 = Release|Any CPU {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Debug|Any CPU.Build.0 = Debug|Any CPU {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Debug|x64.ActiveCfg = Debug|Any CPU {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Debug|x64.Build.0 = Debug|Any CPU + {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Debug|x86.ActiveCfg = Debug|Any CPU + {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Debug|x86.Build.0 = Debug|Any CPU {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Release|Any CPU.Build.0 = Release|Any CPU {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Release|x64.ActiveCfg = Release|Any CPU {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Release|x64.Build.0 = Release|Any CPU + {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Release|x86.ActiveCfg = Release|Any CPU + {4355685F-8F0B-451A-93AA-68C5752AD2B8}.Release|x86.Build.0 = Release|Any CPU {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Debug|Any CPU.Build.0 = Debug|Any CPU {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Debug|x64.ActiveCfg = Debug|Any CPU {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Debug|x64.Build.0 = Debug|Any CPU + {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Debug|x86.ActiveCfg = Debug|Any CPU + {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Debug|x86.Build.0 = Debug|Any CPU {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Release|Any CPU.ActiveCfg = Release|Any CPU {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Release|Any CPU.Build.0 = Release|Any CPU {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Release|x64.ActiveCfg = Release|Any CPU {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Release|x64.Build.0 = Release|Any CPU + {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Release|x86.ActiveCfg = Release|Any CPU + {B1276BFA-A2F1-4A4A-8081-BA1191833D39}.Release|x86.Build.0 = Release|Any CPU {0D027593-0A9B-4F30-8501-FCA46245A260}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0D027593-0A9B-4F30-8501-FCA46245A260}.Debug|Any CPU.Build.0 = Debug|Any CPU {0D027593-0A9B-4F30-8501-FCA46245A260}.Debug|x64.ActiveCfg = Debug|Any CPU {0D027593-0A9B-4F30-8501-FCA46245A260}.Debug|x64.Build.0 = Debug|Any CPU + {0D027593-0A9B-4F30-8501-FCA46245A260}.Debug|x86.ActiveCfg = Debug|Any CPU + {0D027593-0A9B-4F30-8501-FCA46245A260}.Debug|x86.Build.0 = Debug|Any CPU {0D027593-0A9B-4F30-8501-FCA46245A260}.Release|Any CPU.ActiveCfg = Release|Any CPU {0D027593-0A9B-4F30-8501-FCA46245A260}.Release|Any CPU.Build.0 = Release|Any CPU {0D027593-0A9B-4F30-8501-FCA46245A260}.Release|x64.ActiveCfg = Release|Any CPU {0D027593-0A9B-4F30-8501-FCA46245A260}.Release|x64.Build.0 = Release|Any CPU + {0D027593-0A9B-4F30-8501-FCA46245A260}.Release|x86.ActiveCfg = Release|Any CPU + {0D027593-0A9B-4F30-8501-FCA46245A260}.Release|x86.Build.0 = Release|Any CPU {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Debug|Any CPU.Build.0 = Debug|Any CPU {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Debug|x64.ActiveCfg = Debug|Any CPU {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Debug|x64.Build.0 = Debug|Any CPU + {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Debug|x86.ActiveCfg = Debug|Any CPU + {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Debug|x86.Build.0 = Debug|Any CPU {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Release|Any CPU.ActiveCfg = Release|Any CPU {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Release|Any CPU.Build.0 = Release|Any CPU {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Release|x64.ActiveCfg = Release|Any CPU {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Release|x64.Build.0 = Release|Any CPU + {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Release|x86.ActiveCfg = Release|Any CPU + {2088EA8E-4AC5-4CB3-B273-C93A0A3988EF}.Release|x86.Build.0 = Release|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Debug|x64.ActiveCfg = Debug|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Debug|x64.Build.0 = Debug|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Debug|x86.ActiveCfg = Debug|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Debug|x86.Build.0 = Debug|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Release|Any CPU.Build.0 = Release|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Release|x64.ActiveCfg = Release|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Release|x64.Build.0 = Release|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Release|x86.ActiveCfg = Release|Any CPU + {FD91D131-D6CF-438C-8AE7-7C39AB743081}.Release|x86.Build.0 = Release|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Debug|x64.ActiveCfg = Debug|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Debug|x64.Build.0 = Debug|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Debug|x86.ActiveCfg = Debug|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Debug|x86.Build.0 = Debug|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Release|Any CPU.Build.0 = Release|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Release|x64.ActiveCfg = Release|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Release|x64.Build.0 = Release|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Release|x86.ActiveCfg = Release|Any CPU + {94F51955-BE73-449F-9C92-2BA271B99E70}.Release|x86.Build.0 = Release|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Debug|x64.ActiveCfg = Debug|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Debug|x64.Build.0 = Debug|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Debug|x86.ActiveCfg = Debug|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Debug|x86.Build.0 = Debug|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Release|Any CPU.Build.0 = Release|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Release|x64.ActiveCfg = Release|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Release|x64.Build.0 = Release|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Release|x86.ActiveCfg = Release|Any CPU + {E4149B7B-47F2-4697-9405-0B770B2AB106}.Release|x86.Build.0 = Release|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Debug|x64.Build.0 = Debug|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Debug|x86.Build.0 = Debug|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Release|Any CPU.Build.0 = Release|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Release|x64.ActiveCfg = Release|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Release|x64.Build.0 = Release|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Release|x86.ActiveCfg = Release|Any CPU + {1480FB67-F911-4279-BEE7-0F94DFE4D6BC}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/api/z21-lan-protokoll.md b/src/api/z21-lan-protokoll.md new file mode 100644 index 0000000..6d19c60 --- /dev/null +++ b/src/api/z21-lan-protokoll.md @@ -0,0 +1,1589 @@ +# Z21 LAN Protokoll Spezifikation + +**Dokumentenversion 1.13 — 06.11.2023** + +--- + +## Rechtliches, Haftungsausschluss + +Die Firma Modelleisenbahn GmbH erklärt ausdrücklich, in keinem Fall für den Inhalt in diesem Dokument oder für in diesem Dokument angegebene weiterführende Informationen rechtlich haftbar zu sein. + +Die Rechtsverantwortung liegt ausschließlich beim Verwender der angegebenen Daten oder beim Herausgeber der jeweiligen weiterführenden Information. + +Für sämtliche Schäden die durch die Verwendung der angegebenen Informationen oder durch die Nicht-Verwendung der angegebenen Informationen entstehen übernimmt die Modelleisenbahn GmbH, Plainbachstraße 4, A-5101 Bergheim, Austria, ausdrücklich keinerlei Haftung. + +Die Modelleisenbahn GmbH, Plainbachstraße 4, A-5101 Bergheim, Austria, übernimmt keinerlei Gewähr für die Aktualität, Korrektheit, Vollständigkeit oder Qualität der bereitgestellten Informationen. Haftungsansprüche, welche sich auf Schäden materieller, immaterieller oder ideeller Art beziehen, die durch die Nutzung oder Nichtnutzung der dargebotenen Informationen verursacht wurden, sind grundsätzlich ausgeschlossen. + +Die Modelleisenbahn GmbH behält es sich vor, die bereitgestellten Informationen ohne gesonderte Ankündigung zu verändern, zu ergänzen oder zu löschen. + +Alle innerhalb des Dokuments genannten und gegebenenfalls durch Dritte geschützten Marken- und Warenzeichen unterliegen uneingeschränkt den Bestimmungen des jeweils gültigen Kennzeichenrechts und den Besitzrechten der jeweiligen eingetragenen Eigentümer. + +Das Copyright für veröffentlichte, von der Modelleisenbahn GmbH erstellte Informationen, bleibt in jedem Fall allein bei der Modelleisenbahn GmbH. + +Eine Vervielfältigung oder Verwendung der bereitgestellten Informationen in anderen elektronischen oder gedruckten Publikationen ist ohne ausdrückliche Zustimmung nicht gestattet. + +Sollten Teile oder einzelne Formulierungen des Haftungsausschlusses der geltenden Rechtslage nicht, nicht mehr oder nicht vollständig entsprechen, bleiben die übrigen Teile des Haftungsausschlusses in ihrem Inhalt und ihrer Gültigkeit davon unberührt. + +### Impressum + +- Apple, iPad, iPhone, iOS are trademarks of Apple Inc., registered in the U.S. and other countries. +- App Store is a service mark of Apple Inc. +- Android is a trademark of Google Inc. +- Google Play is a service mark of Google Inc. +- RailCom und XpressNet sind eingetragene Warenzeichen der Firma Lenz Elektronik GmbH. +- Motorola is a registered trademark of Motorola Inc., Tempe-Phoenix, USA. +- LocoNet is a registered trademark of Digitrax, Inc. + +Alle Rechte, Änderungen, Irrtümer und Liefermöglichkeiten vorbehalten. Spezifikationen und Abbildungen ohne Gewähr. Änderung vorbehalten. + +*Herausgeber: Modelleisenbahn GmbH, Plainbachstraße 4, A-5101 Bergheim, Austria* + +--- + +## Änderungshistorie + +| Datum | Version | Änderung | +|---|---|---| +| 06.02.2013 | 1.00 | Beschreibung der LAN Schnittstelle für Z21 FW Version 1.10, 1.11 und SmartRail FW Version 1.12 | +| 20.03.2013 | 1.01 | Z21 FW Version 1.20 — `LAN_SET_BROADCASTFLAGS`: neue Flags; `LAN_GET_HWINFO`: neuer Befehl; `LAN_SET_TURNOUTMODE`: MM-Format; LocoNet: Gateway-Funktionalität. SmartRail FW 1.13 — `LAN_GET_HWINFO`: neuer Befehl | +| 29.10.2013 | 1.02 | Z21 FW Version 1.22: Decoder CV Lesen und Schreiben; POM Lesen und Accessory Decoder: neue Befehle; LocoNet Dispatch und Gleisbesetztmelder; `LAN_LOCONET_DISPATCH_ADDR`: neue Antwort; `LAN_SET_BROADCASTFLAGS`: neues Flag; `LAN_LOCONET_DETECTOR`: neuer Befehl | +| 12.02.2014 | 1.03 | Z21 FW Version 1.23 — Korrektur lange Fahrzeugadresse in Kapitel 4; `LAN_X_MM_WRITE_BYTE`; `LAN_LOCONET_DETECTOR`: Erweiterung für LISSY | +| 25.03.2014 | 1.04 | Z21 FW Version 1.24 — `LAN_SET_BROADCASTFLAGS`: Flag 0x00010000; Kapitel 5: Weichenadressierung; `LAN_X_GET_TURNOUT_INFO`: Erweiterung Queue-Bit; `LAN_X_DCC_WRITE_REGISTER` | +| 21.01.2015 | 1.05 | Z21 FW Version 1.25 und 1.26 — Kapitel 4: Fahrstufen und Format; `LAN_X_DCC_READ_REGISTER`; `LAN_X_DCC_WRITE_REGISTER`; `LAN_LOCONET_Z21_TX` Binary State Control Instruction | +| 05.04.2016 | 1.06 | Z21 FW Version 1.28 — Kapitel 2 System Status Versionen: z21start; `LAN_GET_HW_INFO`; `LAN_GET_CODE` | +| 19.04.2017 | 1.07 | Z21 FW Version 1.29 und 1.30 — Kapitel 8 RailCom; Kapitel 10 CAN: Belegtmelder | +| 15.01.2018 | 1.08 | Kapitel 9 LocoNet: Lissy Beispiele | +| 23.05.2019 | 1.09 | Kapitel 4: Codierung der Geschwindigkeitsstufen; Kapitel 7 R-BUS: 10808 und 10819 hinzugefügt; Kapitel 9.3.1: Korrektur Binary State Control Instruction | +| 28.01.2021 | 1.10 | Z21 FW Version 1.40 — Kapitel 2 `LAN_GET_HWINFO`: weitere HW-Typen; Kapitel 5: Erweiterte Zubehördecoder DCCext; Kapitel 11 zLink | +| 11.08.2021 | 1.11 | Z21 FW Version 1.41 — Kapitel 10 CAN: Booster | +| 28.02.2022 | 1.12 | Z21 FW Version 1.42 — Kapitel 2.18 SystemState: cseRCN213, Capabilities; Kapitel 4: DCC Funktionen ≥ F29, Binary States; Kapitel 6: Tippfehler POM Read „111001MM" 0xE4 ausgebessert; Kapitel 10.2 und 11.2: Booster Management | +| 20.06.2023 | 1.13 | Z21 FW Version 1.43 — Kapitel 4: Motorola-Bit in `LAN_X_LOCO_INFO`; Kapitel 4: neue Befehle für Purge und E-STOP; Kapitel 12 Modellzeit | + +--- + +## Inhaltsverzeichnis + +1. **Grundlagen** + - 1.1 Kommunikation + - 1.2 Z21 Datensatz (Aufbau, X-BUS Protokoll Tunnelung, LocoNet Tunnelung) + - 1.3 Kombinieren von Datensätzen in einem UDP-Paket +2. **System, Status, Versionen** (2.1–2.21) +3. **Einstellungen** (3.1–3.4) +4. **Fahren** (4.1–4.6) +5. **Schalten** (5.1–5.6) +6. **Decoder CV Lesen und Schreiben** (6.1–6.14) +7. **Rückmelder – R-BUS** (7.1–7.3) +8. **RailCom** (8.1–8.2) +9. **LocoNet** (9.1–9.5) +10. **CAN** (10.1–10.2) +11. **zLink** (11.1–11.3) +12. **Modellzeit** (12.1–12.4) +- Anhang A – Befehlsübersicht + +--- + +## 1 Grundlagen + +### 1.1 Kommunikation + +Die Kommunikation mit der Z21 erfolgt per UDP über die Ports **21105** oder **21106**. Steuerungsanwendungen am Client (PC, App, ...) sollten in erster Linie den Port 21105 verwenden. + +Die Kommunikation erfolgt immer asynchron, d.h. zwischen einer Anforderung und der entsprechenden Antwort können z.B. Broadcast-Meldungen auftreten. *(Abbildung 1: Beispiel Sequenz Kommunikation)* + +Es wird erwartet, dass jeder Client einmal pro Minute mit der Z21 kommuniziert, da er sonst aus der Liste der aktiven Teilnehmer entfernt wird. Wenn möglich sollte sich ein Client beim Beenden mit dem Befehl `LAN_LOGOFF` bei der Zentrale abmelden. + +### 1.2 Z21 Datensatz + +#### 1.2.1 Aufbau + +Ein Z21-Datensatz (eine Anforderung oder Antwort) ist folgendermaßen aufgebaut: + +| DataLen (2 Byte) | Header (2 Byte) | Data (n Bytes) | +|---|---|---| + +- **DataLen** (little endian): Gesamtlänge über den ganzen Datensatz inklusive DataLen, Header und Data, d.h. `DataLen = 2 + 2 + n`. +- **Header** (little endian): Beschreibt das Kommando bzw. die Protokollgruppe. +- **Data**: Aufbau und Anzahl hängen vom Kommando ab. + +Falls nicht anders angegeben, ist die Byte-Reihenfolge **Little-Endian** (zuerst low byte, danach high byte). + +#### 1.2.2 X-BUS Protokoll Tunnelung + +Mit dem Z21-LAN-Header `0x40` (`LAN_X_xxx`) werden Anforderungen und Antworten übertragen, welche an das X-BUS-Protokoll angelehnt sind. Gemeint ist dabei nur das Protokoll — diese Befehle haben nichts mit dem physikalischen X-BUS der Z21 zu tun, sondern sind ausschließlich an die LAN-Clients bzw. die Z21 gerichtet. + +Der eigentliche X-BUS-Befehl liegt im Feld **Data**. Das letzte Byte ist eine Prüfsumme und wird als XOR über den X-BUS-Befehl berechnet. Beispiel: + +| DataLen | Header | X-Header | DB0 | DB1 | XOR-Byte | +|---|---|---|---|---|---| +| 0x08 0x00 | 0x40 0x00 | h | x | y | h XOR x XOR y | + +#### 1.2.3 LocoNet Tunnelung + +*Ab Z21 FW Version 1.20.* + +Mit den Z21-LAN-Headern `0xA0` und `0xA1` (`LAN_LOCONET_Z21_RX`, `LAN_LOCONET_Z21_TX`) werden Meldungen, die von der Z21 am LocoNet-Bus empfangen bzw. gesendet werden, an den LAN-Client weitergeleitet. Der LAN-Client muss dazu die LocoNet-Meldungen mittels [2.16 LAN_SET_BROADCASTFLAGS](#216-lan_set_broadcastflags) abonniert haben. + +Über den Z21-LAN-Header `0xA2` (`LAN_LOCONET_FROM_LAN`) kann der LAN-Client Meldungen auf den LocoNet-Bus schreiben. + +Damit kann die Z21 als **Ethernet/LocoNet Gateway** verwendet werden, wobei die Z21 gleichzeitig der LocoNet-Master ist, welcher die Refresh-Slots verwaltet und die DCC-Pakete generiert. Die eigentliche LocoNet-Meldung liegt im Feld **Data**. + +Beispiel: LocoNet-Meldung `OPC_MOVE_SLOTS <0><0>` („DISPATCH_GET") von Z21 empfangen: + +| DataLen | Header | OPC | ARG1 | ARG2 | CKSUM | +|---|---|---|---|---|---| +| 0x08 0x00 | 0xA0 0x00 | 0xBA | 0x00 | 0x00 | 0x45 | + +### 1.3 Kombinieren von Datensätzen in einem UDP-Paket + +In den Nutzdaten eines UDP-Pakets können auch mehrere, voneinander unabhängige Z21-Datensätze gemeinsam an einen Empfänger gesendet werden. Jeder Empfänger muss diese kombinierten UDP-Pakete interpretieren können. + +Beispiel: ein kombiniertes UDP-Paket mit drei Datensätzen (`LAN_X_GET_TURNOUT_INFO #4`, `LAN_X_GET_TURNOUT_INFO #5`, `LAN_RMBUS_GETDATA #0`) ist gleichwertig mit den drei einzeln nacheinander gesendeten UDP-Paketen. + +Das UDP-Paket muss in eine Ethernet MTU passen, d.h. abzüglich IPv4- und UDP-Header stehen maximal `1500 - 20 - 8 = 1472` Bytes Nutzdaten zur Verfügung. + +--- + +## 2 System, Status, Versionen + +### 2.1 LAN_GET_SERIAL_NUMBER + +Auslesen der Seriennummer der Z21. + +**Anforderung an Z21:** `DataLen=0x04 0x00`, `Header=0x10 0x00`, kein Data. + +**Antwort von Z21:** `DataLen=0x08 0x00`, `Header=0x10 0x00`, `Data=` Seriennummer 32 Bit (little endian). + +### 2.2 LAN_LOGOFF + +Abmelden des Clients von der Z21. + +**Anforderung an Z21:** `DataLen=0x04 0x00`, `Header=0x30 0x00`, kein Data. **Antwort:** keine. + +Verwenden Sie beim Abmelden die gleiche Portnummer wie beim Anmelden. *Anmerkung:* das Anmelden erfolgt implizit mit dem ersten Befehl des Clients (z.B. `LAN_SYSTEMSTATE_GETDATA`). + +### 2.3 LAN_X_GET_VERSION + +Auslesen der X-Bus Version der Z21. + +**Anforderung an Z21:** + +| DataLen | Header | X-Header | DB0 | XOR-Byte | +|---|---|---|---|---| +| 0x07 0x00 | 0x40 0x00 | 0x21 | 0x21 | 0x00 | + +**Antwort von Z21:** + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | XOR-Byte | +|---|---|---|---|---|---|---| +| 0x09 0x00 | 0x40 0x00 | 0x63 | 0x21 | XBUS_VER | CMDST_ID | 0x60 | + +- **XBUS_VER**: X-Bus Protokoll Version (0x30 = V3.0, 0x36 = V3.6, 0x40 = V4.0, …) +- **CMDST_ID**: Command station ID (0x12 = Z21 Gerätefamilie) + +### 2.4 LAN_X_GET_STATUS + +Anfordern des Zentralenstatus. + +**Anforderung an Z21:** `Header=0x40 0x00`, X-Header `0x21`, DB0 `0x24`, XOR `0x05`. + +**Antwort:** siehe [2.12 LAN_X_STATUS_CHANGED](#212-lan_x_status_changed). Dieser Zentralenstatus ist identisch mit dem CentralState im SystemStatus, siehe [2.18](#218-lan_systemstate_datachanged). + +### 2.5 LAN_X_SET_TRACK_POWER_OFF + +Abschalten der Gleisspannung. + +**Anforderung an Z21:** X-Header `0x21`, DB0 `0x80`, XOR `0xA1`. **Antwort:** siehe [2.7](#27-lan_x_bc_track_power_off). + +### 2.6 LAN_X_SET_TRACK_POWER_ON + +Einschalten der Gleisspannung bzw. Beenden von Notstop oder Programmiermodus. + +**Anforderung an Z21:** X-Header `0x21`, DB0 `0x81`, XOR `0xA0`. **Antwort:** siehe [2.8](#28-lan_x_bc_track_power_on). + +### 2.7 LAN_X_BC_TRACK_POWER_OFF + +Wird von der Z21 an die registrierten Clients versendet, wenn ein Client `LAN_X_SET_TRACK_POWER_OFF` gesendet hat, ein anderes Eingabegerät (multiMaus) die Gleisspannung abgeschaltet hat, und der Client den Broadcast (Flag 0x00000001) aktiviert hat. + +**Z21 an Client:** X-Header `0x61`, DB0 `0x00`, XOR `0x61`. + +### 2.8 LAN_X_BC_TRACK_POWER_ON + +Analog zu 2.7, beim Einschalten der Gleisspannung. **Z21 an Client:** X-Header `0x61`, DB0 `0x01`, XOR `0x60`. + +### 2.9 LAN_X_BC_PROGRAMMING_MODE + +Wird versendet, wenn die Z21 durch `LAN_X_CV_READ` oder `LAN_X_CV_WRITE` in den CV-Programmiermodus versetzt wurde (Broadcast-Flag 0x00000001). **Z21 an Client:** X-Header `0x61`, DB0 `0x02`, XOR `0x63`. + +### 2.10 LAN_X_BC_TRACK_SHORT_CIRCUIT + +Wird bei einem Kurzschluss versendet (Broadcast-Flag 0x00000001). **Z21 an Client:** X-Header `0x61`, DB0 `0x08`, XOR `0x69`. + +### 2.11 LAN_X_UNKNOWN_COMMAND + +Antwort auf eine ungültige Anforderung. **Z21 an Client:** X-Header `0x61`, DB0 `0x82`, XOR `0xE3`. + +### 2.12 LAN_X_STATUS_CHANGED + +Wird versendet, wenn der Client den Status explizit mit [2.4](#24-lan_x_get_status) angefordert hat. + +**Z21 an Client:** `Header=0x40 0x00`, X-Header `0x62`, DB0 `0x22`, DB1 = Status, dann XOR-Byte. + +Bitmasken für Zentralenstatus: + +```c +#define csEmergencyStop 0x01 // Der Nothalt ist eingeschaltet +#define csTrackVoltageOff 0x02 // Die Gleisspannung ist abgeschaltet +#define csShortCircuit 0x04 // Kurzschluss +#define csProgrammingModeActive 0x20 // Der Programmiermodus ist aktiv +``` + +Identisch mit `SystemState.CentralState`, siehe [2.18](#218-lan_systemstate_datachanged). + +### 2.13 LAN_X_SET_STOP + +Aktiviert den Notstop: die Loks werden angehalten, aber die Gleisspannung bleibt eingeschaltet. + +**Anforderung an Z21:** `DataLen=0x06 0x00`, `Header=0x40 0x00`, X-Header `0x80`, XOR `0x80`. **Antwort:** siehe [2.14](#214-lan_x_bc_stopped). + +### 2.14 LAN_X_BC_STOPPED + +Wird versendet, wenn der Notstop ausgelöst wurde (Broadcast-Flag 0x00000001). **Z21 an Client:** X-Header `0x81`, DB0 `0x00`, XOR `0x81`. + +### 2.15 LAN_X_GET_FIRMWARE_VERSION + +Auslesen der Firmware-Version der Z21. + +**Anforderung an Z21:** X-Header `0xF1`, DB0 `0x0A`, XOR `0xFB`. + +**Antwort von Z21:** X-Header `0xF3`, DB0 `0x0A`, DB1 = V_MSB, DB2 = V_LSB, dann XOR. +- DB1: Höherwertiges Byte der Firmware Version +- DB2: Niederwertiges Byte der Firmware Version +- Version im BCD-Format. Beispiel: `... 0xf3 0x0a 0x01 0x23 0xdb` → „Firmware Version 1.23". + +### 2.16 LAN_SET_BROADCASTFLAGS + +Setzen der Broadcast-Flags in der Z21. Diese Flags werden pro Client (IP + Portnummer) eingestellt und müssen beim nächsten Anmelden neu gesetzt werden. + +**Anforderung an Z21:** `Header=0x50 0x00`, `Data=` Broadcast-Flags 32 Bit (little endian). Broadcast-Flags sind eine OR-Verknüpfung folgender Werte: + +| Flag | Bedeutung | +|---|---| +| `0x00000001` | Automatisch generierte Broadcasts/Meldungen zu Fahren und Schalten. Abonniert: 2.7 PowerOff, 2.8 PowerOn, 2.9 ProgrammingMode, 2.10 ShortCircuit, 2.14 Stopped, 4.4 LOCO_INFO (Lok-Adresse muss abonniert sein), 5.3 TURNOUT_INFO | +| `0x00000002` | Änderungen der Rückmelder am R-Bus → 7.1 `LAN_RMBUS_DATACHANGED` | +| `0x00000004` | Änderungen bei RailCom-Daten der abonnierten Loks → 8.1 `LAN_RAILCOM_DATACHANGED` | +| `0x00000100` | Änderungen des Z21-Systemzustands → 2.18 `LAN_SYSTEMSTATE_DATACHANGED` | +| `0x00010000` | *(ab FW 1.20)* Ergänzt Flag 0x00000001; Client bekommt `LAN_X_LOCO_INFO` ohne vorheriges Abonnieren der Lok-Adressen (alle Loks!). Nur für vollwertige PC-Steuerungen, nicht für mobile Handregler. Ab FW V1.20–V1.23: für **alle** Loks; ab FW V1.24: für **alle geänderten** Loks | +| `0x01000000` | Meldungen vom LocoNet-Bus an LAN Client weiterleiten (ohne Loks und Weichen) | +| `0x02000000` | Lok-spezifische LocoNet-Meldungen: OPC_LOCO_SPD, OPC_LOCO_DIRF, OPC_LOCO_SND, OPC_LOCO_F912, OPC_EXP_CMD | +| `0x04000000` | Weichen-spezifische LocoNet-Meldungen: OPC_SW_REQ, OPC_SW_REP, OPC_SW_ACK, OPC_SW_STATE | +| `0x08000000` | *(ab FW 1.22)* Status-Meldungen von Gleisbesetztmeldern am LocoNet-Bus → 9.5 `LAN_LOCONET_DETECTOR` | +| `0x00040000` | *(ab FW 1.29)* RailCom-Daten automatisch, ohne vorheriges Abonnieren (alle Loks). Nur für vollwertige PC-Steuerungen → 8.1 `LAN_RAILCOM_DATACHANGED` | +| `0x00080000` | *(ab FW 1.30)* Status-Meldungen von Gleisbesetztmeldern am CAN-Bus → 10.1 `LAN_CAN_DETECTOR` | +| `0x00020000` | *(ab FW 1.41)* CAN-Bus Booster Status-Meldungen → 10.2.3 `LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD` | +| `0x00000010` | *(ab FW 1.43)* Fastclock Modellzeit Meldungen → 12.2 `LAN_FAST_CLOCK_DATA` | + +**Antwort:** keine. + +Berücksichtigen Sie die Auswirkungen auf die Netzwerkauslastung — besonders bei den Flags `0x00010000`, `0x00040000`, `0x02000000` und `0x04000000`. IP-Pakete dürfen vom Router bei Überlast gelöscht werden, und UDP bietet keine Erkennungsmechanismen. Bei Flag 0x00000100 (Systemzustand) ist abzuwägen, ob nicht 0x00000001 mit den entsprechenden `LAN_X_BC_xxx`-Broadcasts die sinnvollere Alternative ist. + +### 2.17 LAN_GET_BROADCASTFLAGS + +Auslesen der Broadcast-Flags. **Anforderung:** `Header=0x51 0x00`, kein Data. **Antwort:** `Header=0x51 0x00`, Broadcast-Flags 32 Bit (little endian). + +### 2.18 LAN_SYSTEMSTATE_DATACHANGED + +Änderung des Systemzustandes melden. Wird asynchron gemeldet, wenn der Client den Broadcast (Flag 0x00000100) aktiviert hat oder den Systemzustand explizit mit [2.19](#219-lan_systemstate_getdata) angefordert hat. + +**Z21 an Client:** `DataLen=0x14 0x00`, `Header=0x84 0x00`, `Data=` SystemState (16 Bytes). + +SystemState (16-bit Werte little endian): + +| Offset | Typ | Name | Einheit | Bedeutung | +|---|---|---|---|---| +| 0 | INT16 | MainCurrent | mA | Strom am Hauptgleis | +| 2 | INT16 | ProgCurrent | mA | Strom am Programmiergleis | +| 4 | INT16 | FilteredMainCurrent | mA | geglätteter Strom am Hauptgleis | +| 6 | INT16 | Temperature | °C | interne Temperatur in der Zentrale | +| 8 | UINT16 | SupplyVoltage | mV | Versorgungsspannung | +| 10 | UINT16 | VCCVoltage | mV | interne Spannung, identisch mit Gleisspannung | +| 12 | UINT8 | CentralState | bitmask | siehe unten | +| 13 | UINT8 | CentralStateEx | bitmask | siehe unten | +| 14 | UINT8 | reserved | | | +| 15 | UINT8 | Capabilities | bitmask | siehe unten, ab Z21 V1.42 | + +```c +// CentralState +#define csEmergencyStop 0x01 // Der Nothalt ist eingeschaltet +#define csTrackVoltageOff 0x02 // Die Gleisspannung ist abgeschaltet +#define csShortCircuit 0x04 // Kurzschluss +#define csProgrammingModeActive 0x20 // Der Programmiermodus ist aktiv + +// CentralStateEx +#define cseHighTemperature 0x01 // zu hohe Temperatur +#define csePowerLost 0x02 // zu geringe Eingangsspannung +#define cseShortCircuitExternal 0x04 // am externen Booster-Ausgang +#define cseShortCircuitInternal 0x08 // am Hauptgleis oder Programmiergleis +#define cseRCN213 0x20 // Weichenadressierung gem. RCN213 (ab FW 1.42) + +// Capabilities (ab FW 1.42) +#define capDCC 0x01 // beherrscht DCC +#define capMM 0x02 // beherrscht MM +//#define capReserved 0x04 // reserviert +#define capRailCom 0x08 // RailCom ist aktiviert +#define capLocoCmds 0x10 // akzeptiert LAN-Befehle für Lokdecoder +#define capAccessoryCmds 0x20 // akzeptiert LAN-Befehle für Zubehördecoder +#define capDetectorCmds 0x40 // akzeptiert LAN-Befehle für Belegtmelder +#define capNeedsUnlockCode 0x80 // benötigt Freischaltcode (z21start) +``` + +`SystemState.Capabilities` verschafft dem Client einen Überblick über den Feature-Umfang. Ist `Capabilities == 0`, handelt es sich vermutlich um eine ältere Firmware — bei älteren Versionen sollte Capabilities nicht ausgewertet werden. + +### 2.19 LAN_SYSTEMSTATE_GETDATA + +Anfordern des aktuellen Systemzustandes. **Anforderung:** `Header=0x85 0x00`, kein Data. **Antwort:** siehe [2.18](#218-lan_systemstate_datachanged). + +### 2.20 LAN_GET_HWINFO + +*Ab Z21 FW Version 1.20 und SmartRail FW Version V1.13.* Auslesen von Hardware-Typ und Firmware-Version. + +**Anforderung:** `Header=0x1A 0x00`, kein Data. + +**Antwort:** `DataLen=0x0C 0x00`, `Header=0x1A 0x00`, `Data=` HwType 32 Bit + FW Version 32 Bit (beide little endian). + +```c +#define D_HWT_Z21_OLD 0x00000200 // "schwarze Z21" (ab 2012) +#define D_HWT_Z21_NEW 0x00000201 // "schwarze Z21" (ab 2013) +#define D_HWT_SMARTRAIL 0x00000202 // SmartRail (ab 2012) +#define D_HWT_z21_SMALL 0x00000203 // "weiße z21" Starterset (ab 2013) +#define D_HWT_z21_START 0x00000204 // "z21 start" Starterset (ab 2016) +#define D_HWT_SINGLE_BOOSTER 0x00000205 // 10806 "Z21 Single Booster" (zLink) +#define D_HWT_DUAL_BOOSTER 0x00000206 // 10807 "Z21 Dual Booster" (zLink) +#define D_HWT_Z21_XL 0x00000211 // 10870 "Z21 XL Series" (ab 2020) +#define D_HWT_XL_BOOSTER 0x00000212 // 10869 "Z21 XL Booster" (ab 2021, zLink) +#define D_HWT_Z21_SWITCH_DECODER 0x00000301 // 10836 "Z21 SwitchDecoder" (zLink) +#define D_HWT_Z21_SIGNAL_DECODER 0x00000302 // 10836 "Z21 SignalDecoder" (zLink) +``` + +FW Version im BCD-Format. Beispiel: `... 0x00 0x02 0x00 0x00 0x20 0x01 0x00 0x00` → „Hardware Typ 0x200, Firmware Version 1.20". Für ältere Firmware ggf. [2.15](#215-lan_x_get_firmware_version) verwenden (V1.10/V1.11 = Z21 ab 2012, V1.12 = SmartRail ab 2012). + +### 2.21 LAN_GET_CODE + +Prüfen und Auslesen des SW Feature-Umfangs. Besonders bei „z21 start" interessant, um zu prüfen, ob Fahren und Schalten per LAN gesperrt oder erlaubt ist. + +**Anforderung:** `Header=0x18 0x00`, kein Data. **Antwort:** `Header=0x18 0x00`, Code (8 Bit). + +```c +#define Z21_NO_LOCK 0x00 // keine Features gesperrt +#define z21_START_LOCKED 0x01 // "z21 start": Fahren und Schalten per LAN gesperrt +#define z21_START_UNLOCKED 0x02 // "z21 start": alle Feature-Sperren aufgehoben +``` + +--- + +## 3 Einstellungen + +Die hier beschriebenen Einstellungen werden in der Z21 persistent gespeichert. Sie können vom Anwender auf Werkseinstellung zurückgesetzt werden, indem die STOP-Taste gedrückt gehalten wird, bis die LEDs violett blinken. + +### 3.1 LAN_GET_LOCOMODE + +Lesen des Ausgabeformats (DCC, MM) für eine Lok-Adresse. Es können max. 256 verschiedene Lok-Adressen abgelegt werden; jede Adresse ≥ 256 ist automatisch DCC. + +**Anforderung:** `Header=0x60 0x00`, `Data=` Lok-Adresse 16 bit (**big endian**). + +**Antwort:** `Header=0x60 0x00`, Lok-Adresse 16 Bit (big endian) + Modus 8 bit. +- Lok-Adresse: 2 Byte, big endian (zuerst high byte). +- Modus: `0` = DCC, `1` = MM. + +### 3.2 LAN_SET_LOCOMODE + +Setzen des Ausgabeformats (persistent). **Anforderung:** `Header=0x61 0x00`, Lok-Adresse 16 Bit (big endian) + Modus 8 bit. **Antwort:** keine. + +*Anmerkungen:* Jede Lok-Adresse ≥ 256 bleibt automatisch DCC. Die Fahrstufen (14, 28, 128) werden ebenfalls persistent gespeichert (automatisch beim Fahrbefehl, siehe [4.2](#42-lan_x_set_loco_drive)). + +### 3.3 LAN_GET_TURNOUTMODE + +Lesen der Einstellungen für eine Funktionsdecoder-Adresse („Accessory Decoder" RP-9.2.1). Max. 256 Adressen; jede ≥ 256 ist automatisch DCC. + +**Anforderung:** `Header=0x70 0x00`, Funktionsdecoder-Adresse 16 bit (big endian). +**Antwort:** `Header=0x70 0x00`, Funktionsdecoder-Adresse 16 Bit (big endian) + Modus 8 bit (`0`=DCC, `1`=MM). + +An der LAN-Schnittstelle und in der Z21 werden Funktionsdecoder-Adressen ab 0 adressiert, in der Visualisierung der Apps/multiMaus jedoch ab 1. Beispiel: multiMaus Weichenadresse #3 entspricht in der Z21 der Adresse 2. + +### 3.4 LAN_SET_TURNOUTMODE + +Setzen des Ausgabeformats für eine Funktionsdecoder-Adresse (persistent). **Anforderung:** `Header=0x71 0x00`, Funktionsdecoder-Adresse 16 Bit (big endian) + Modus 8 bit. **Antwort:** keine. + +MM-Funktionsdecoder werden ab Z21 FW 1.20 unterstützt; SmartRail unterstützt sie nicht. Jede Adresse ≥ 256 bleibt automatisch DCC. + +--- + +## 4 Fahren + +Ein Client kann Lok-Infos mit [4.1 LAN_X_GET_LOCO_INFO](#41-lan_x_get_loco_info) abonnieren, um über Änderungen (durch andere Clients/Handregler) informiert zu werden. Zusätzlich muss der Broadcast (Flag 0x00000001) aktiviert sein. *(Abbildung 2: Beispiel Sequenz Lok-Steuerung.)* + +Maximal **16 Lok-Adressen pro Client** können abonniert werden (FIFO). Weiteres Pollen ist möglich, sollte aber mit Rücksicht auf die Netzwerkauslastung erfolgen. + +### 4.1 LAN_X_GET_LOCO_INFO + +Anfordern des Status einer Lok (und Abonnieren, nur mit Flag 0x00000001). + +**Anforderung an Z21:** + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | XOR-Byte | +|---|---|---|---|---|---|---| +| 0x09 0x00 | 0x40 0x00 | 0xE3 | 0xF0 | Adr_MSB | Adr_LSB | XOR | + +`Lok-Adresse = (Adr_MSB & 0x3F) << 8 + Adr_LSB`. Bei Lok-Adressen ≥ 128 müssen die beiden höchsten Bits in DB1 auf 1 gesetzt sein: `DB1 = (0xC0 | Adr_MSB)`. + +**Antwort:** siehe [4.4 LAN_X_LOCO_INFO](#44-lan_x_loco_info). + +### 4.2 LAN_X_SET_LOCO_DRIVE + +Verändern der Fahrstufe eines Lok-Decoders. + +**Anforderung an Z21:** + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0xE4 | 0x1S | Adr_MSB | Adr_LSB | RVVVVVVV | XOR | + +`Lok-Adresse = (Adr_MSB & 0x3F) << 8 + Adr_LSB` (≥ 128: `DB1 = 0xC0 | Adr_MSB`). + +`0x1S` = Anzahl der Fahrstufen je nach Schienenformat: +- `S=0`: DCC 14 Fahrstufen bzw. MMI mit 14 Fahrstufen und F0 +- `S=2`: DCC 28 Fahrstufen bzw. MMII mit 14 realen Fahrstufen und F0-F4 +- `S=3`: DCC 128 Fahrstufen (alias „126" ohne Stops) bzw. MMII mit 28 realen Fahrstufen und F0-F4 + +`RVVVVVVV`: R = Richtung (1 = vorwärts), V = Geschwindigkeit (Codierung abhängig von S). Bei MM erfolgt die Umrechnung von DCC- in MM-Fahrstufe automatisch in der Z21. + +**Fahrstufen-Codierung „DCC 14"** (`R000 VVVV`): + +| Code | Speed | Code | Speed | Code | Speed | +|---|---|---|---|---|---| +| R000 0000 | Stop | R000 0110 | Step 5 | R000 1100 | Step 11 | +| R000 0001 | E-Stop | R000 0111 | Step 6 | R000 1101 | Step 12 | +| R000 0010 | Step 1 | R000 1000 | Step 7 | R000 1110 | Step 13 | +| R000 0011 | Step 2 | R000 1001 | Step 8 | R000 1111 | Step 14 (max) | +| R000 0100 | Step 3 | R000 1010 | Step 9 | | | +| R000 0101 | Step 4 | R000 1011 | Step 10 | | | + +**Fahrstufen-Codierung „DCC 28"** (`R00V5 VVVV`, Zwischenschritt im Bit V5): + +| Code | Speed | Code | Speed | +|---|---|---|---| +| R000 0000 | Stop | R000 1000 | Step 13 | +| R001 0000 | Stop¹ | R001 1000 | Step 14 | +| R000 0001 | E-Stop | R000 1001 | Step 15 | +| R001 0001 | E-Stop¹ | … | … | +| R000 0010 | Step 1 | R001 1111 | Step 28 (max) | +| R001 0010 | Step 2 | | | + +¹ Verwendung nicht empfohlen. + +**Fahrstufen-Codierung „DCC 128"** (`RVVV VVVV`): `R000 0000`=Stop, `R000 0001`=E-Stop, `R000 0010`=Step 1, … `R111 1111`=Step 126 (max). + +**Antwort:** keine Standardantwort, [4.4 LAN_X_LOCO_INFO](#44-lan_x_loco_info) an Clients mit Abo. Eine Änderung der Fahrstufenzahl (14/28/128) wird automatisch persistent gespeichert. + +### 4.3 Funktionen für Fahrzeugdecoder + +Funktionsbefehle F0–F12 werden am Gleis (wie Fahrstufe/Richtung) regelmäßig prioritätsgesteuert wiederholt. Befehle ab F13 werden nach einer Änderung dreimal ausgegeben und danach (gem. RCN-212, aus Rücksicht auf die Bandbreite) nicht mehr regelmäßig wiederholt. + +#### 4.3.1 LAN_X_SET_LOCO_FUNCTION + +Schalten einer Einzelfunktion. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0xE4 | 0xF8 | Adr_MSB | Adr_LSB | TTNN NNNN | XOR | + +`Lok-Adresse = (Adr_MSB & 0x3F) << 8 + Adr_LSB` (≥ 128: `DB1 = 0xC0 | Adr_MSB`). +- `TT` Umschalttyp: `00`=aus, `01`=ein, `10`=umschalten, `11`=nicht erlaubt. +- `NNNNNN` Funktionsindex: `0x00`=F0 (Licht), `0x01`=F1 usw. + +Bei MMI nur F0, bei MMII F0–F4. Bei DCC F0–F28, ab FW 1.42 erweitert F0–F31. **Antwort:** keine Standardantwort, 4.4 LOCO_INFO an Clients mit Abo. + +#### 4.3.2 LAN_X_SET_LOCO_FUNCTION_GROUP + +Schaltet eine ganze Funktionsgruppe (bis zu 8 Funktionen) mit einem Befehl. Ab FW 1.42 bis F31, mit Einschränkungen bis F68. Der Client sollte den aktuellen Zustand aller Funktionen mitverfolgen (Befehl eher für PC-Steuerungen geeignet). + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0xE4 | Group | Adr_MSB | Adr_LSB | Functions | XOR | + +Group und Functions: + +| Nr | Group | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | Anm. | +|---|---|---|---|---|---|---|---|---|---|---| +| 1 | 0x20 | 0 | 0 | 0 | F0 | F4 | F3 | F2 | F1 | (A) | +| 2 | 0x21 | 0 | 0 | 0 | 0 | F8 | F7 | F6 | F5 | | +| 3 | 0x22 | 0 | 0 | 0 | 0 | F12 | F11 | F10 | F9 | | +| 4 | 0x23 | F20 | F19 | F18 | F17 | F16 | F15 | F14 | F13 | (B) | +| 5 | 0x28 | F28 | F27 | F26 | F25 | F24 | F23 | F22 | F21 | (B) | +| 6 | 0x29 | F36 | F35 | F34 | F33 | F32 | F31 | F30 | F29 | (C)(D)(E) | +| 7 | 0x2A | F44 | F43 | F42 | F41 | F40 | F39 | F38 | F37 | (D)(E) | +| 8 | 0x2B | F52 | F51 | F50 | F49 | F48 | F47 | F46 | F45 | (D)(E) | +| 9 | 0x50 | F60 | F59 | F58 | F57 | F56 | F55 | F54 | F53 | (D)(E) | +| 10 | 0x51 | F68 | F67 | F66 | F65 | F64 | F63 | F62 | F61 | (D)(E) | + +- (A) MMI nur F0, MMII bis max. F4. +- (B) DCC F13–F28 mit diesem Befehl erst ab FW V1.24. +- (C) DCC F29–F31 ab FW V1.42, inkl. Rückmeldung an die LAN-Clients. +- (D) DCC F32–F68 ab FW V1.42, **ohne** Rückmeldung; Befehle nur am Gleis ausgegeben. +- (E) Es kann nicht gewährleistet werden, dass DCC-Funktionsbefehle ≥ F29 von allen Decodern verstanden werden (2022: nur sehr wenige Typen, getestet F29–F31 mit „Loksound 5"). + +**Antwort:** keine Standardantwort; für F0–F31 erfolgt Rückmeldung 4.4 LOCO_INFO an Clients mit Abo. + +#### 4.3.3 LAN_X_SET_LOCO_BINARY_STATE + +*Ab Z21 FW Version 1.42.* Sendet ein DCC „Binary State" Kommando an einen Lok-Decoder. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | DB4 | XOR | +|---|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0xE5 | 0x5F | AH | AL | FLLL LLLL | HHHH HHHH | XOR | + +`Lok-Adresse = (AH & 0x3F) << 8 + AL` (≥ 128: `DB1 = 0xC0 | AH`). +- `F`: oberstes Bit legt fest, ob der Binärzustand ein- oder ausgeschaltet ist. +- `LLLLLLL`: niederwertige 7 Bits der Binärzustandsadresse. +- `HHHHHHHH`: höherwertige 8 Bits der Binärzustandsadresse. +- `15-Bit Binärzustandsadresse = (HHHHHHHH << 7) + (LLLLLLL & 0x7F)`. + +Erlaubt: Binärzustandsadressen **29 bis 32767**. Adressen 1–28 sind reserviert, Adresse 0 ist Broadcast. Adressen < 128 (HHHHHHHH == 0) werden gem. RCN-212 als „kurze Form" ausgegeben, ≥ 128 als „lange Form". Befehle werden dreimal am Gleis ausgegeben und danach nicht mehr wiederholt. **Antwort:** keine (auch keine Benachrichtigung an andere Clients). + +### 4.4 LAN_X_LOCO_INFO + +Wird als Antwort auf [4.1](#41-lan_x_get_loco_info) gesendet, aber auch ungefragt, wenn der Lok-Status verändert wurde, der Broadcast (Flag 0x00000001) aktiviert ist und die Lok-Adresse abonniert wurde. + +**Z21 an Client:** `DataLen = 7 + n`, `Header=0x40 0x00`, X-Header `0xEF`, Lok-Information, XOR-Byte. Paketlänge variiert mit `7 ≤ n ≤ 14`. Ab FW 1.42 ist `DataLen ≥ 15 (n ≥ 8)` zur Übertragung von F29–F31. + +| Position | Daten | Bedeutung | +|---|---|---| +| DB0 | Adr_MSB | beide höchsten Bits ignorieren | +| DB1 | Adr_LSB | `Lok-Adresse = (Adr_MSB & 0x3F) << 8 + Adr_LSB` | +| DB2 | `000MBKKK` | M=1: MM-Lok (ab FW 1.43); B=1: Lok von anderem X-BUS Handregler gesteuert („besetzt"); KKK = Fahrstufeninfo (0=14, 2=28, 4=128) | +| DB3 | `RVVVVVVV` | R = Richtung (1=vorwärts), V = Geschwindigkeit (Codierung abh. von KKK) | +| DB4 | `0DSLFGHJ` | D = Doppeltraktion; S = Smartsearch; L = F0 (Licht); F = F4; G = F3; H = F2; J = F1 | +| DB5 | F5–F12 | F5 ist Bit0 (LSB) | +| DB6 | F13–F20 | F13 ist Bit0 (LSB) | +| DB7 | F21–F28 | F21 ist Bit0 (LSB) | +| DB8 | F29–F31 | ab FW 1.42 (falls DataLen ≥ 15); F29 ist Bit0 (LSB) | +| DBn | optional | für zukünftige Erweiterungen | + +### 4.5 LAN_X_SET_LOCO_E_STOP + +*Ab Z21 FW Version 1.43.* Hält eine Lok an. Bei DCC wird die Fahrstufe „E-STOP" (RCN-212) ausgegeben; bei MM die Fahrstufe 0 („Stop"). + +| DataLen | Header | X-Header | DB0 | DB2 | XOR | +|---|---|---|---|---|---| +| 0x08 0x00 | 0x40 0x00 | 0x92 | Adr_MSB | Adr_LSB | XOR | + +`Lok-Adresse = (Adr_MSB & 0x3F) << 8 + Adr_LSB` (≥ 128: `DB1 = 0xC0 | Adr_MSB`). **Antwort:** keine Standardantwort, 4.4 LOCO_INFO an Clients mit Abo. + +### 4.6 LAN_X_PURGE_LOCO + +*Ab Z21 FW Version 1.43.* Nimmt eine Lok aus der Z21 heraus; die Fahrbefehle für diese Lok am Gleis werden beendet (bis ein neuer Fahr-/Funktionsbefehl an dieselbe Adresse kommt). Damit kann z.B. eine PC-Steuerung die Anzahl der Loks und den Datendurchsatz am Gleis beeinflussen. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | XOR | +|---|---|---|---|---|---|---| +| 0x09 0x00 | 0x40 0x00 | 0xE3 | 0x44 | Adr_MSB | Adr_LSB | XOR | + +`Lok-Adresse = (Adr_MSB & 0x3F) << 8 + Adr_LSB` (≥ 128: `DB1 = 0xC0 | Adr_MSB`). Keine Antwort an Aufrufer/andere Clients. + +--- + +## 5 Schalten + +Meldungen zum Schalten von Funktionsdecodern („Accessory Decoder" RP-9.2.1, z.B. Weichendecoder). + +Die Visualisierung der Weichennummer ist bei vielen DCC-Systemen unterschiedlich gelöst. Gemäß DCC gibt es pro Accessorydecoder-Adresse vier Ports mit je zwei Ausgängen. Übliche Visualisierungen: +1. Nummerierung ab 1, DCC-Adresse ab 1, je 4 Ports (ESU, Uhlenbrock): Weiche #1 = Addr 1/Port 0; #5 = Addr 2/Port 0; #6 = Addr 2/Port 1. +2. Nummerierung ab 1, DCC-Adresse ab 0, je 4 Ports (Roco, Lenz): Weiche #1 = Addr 0/Port 0; #5 = Addr 1/Port 0; #6 = Addr 1/Port 1. +3. Virtuelle Weichennummer mit frei konfigurierbarer DCC-Adresse/Port (Twin-Center). +4. Darstellung DCC-Adresse / Port (Zimo). + +Umsetzung der Input-Parameter (FAdr_MSB, FAdr_LSB, A, P) in den DCC Accessory Befehl. DCC Basic Accessory Decoder Packet Format: `{preamble} 0 10AAAAAA 0 1aaaCDDd 0 EEEEEEEE 1` + +```c +UINT16 FAdr = (FAdr_MSB << 8) + FAdr_LSB; +UINT16 Dcc_Addr = FAdr >> 2; +aaaAAAAAA = (~Dcc_Addr & 0x1C0) | (Dcc_Addr & 0x003F); // DCC Adresse +C = A; // Ausgang aktivieren oder deaktivieren +DD = FAdr & 0x03; // Port +d = P; // Weiche nach links oder rechts +``` + +Beispiel: FAdr=0 → DCC-Addr 0/Port 0; FAdr=3 → DCC-Addr 0/Port 3; FAdr=4 → DCC-Addr 1/Port 0. Bei MM gilt: FAdr=0 → MM-Addr 1; FAdr=1 → MM-Addr 2; … + +Ein Client kann Funktions-Infos abonnieren (Broadcast-Flag 0x00000001). Die tatsächliche Stellung der Weiche hängt von Verkabelung/Konfiguration ab; daher wird auf „gerade"/„abzweigend" bewusst verzichtet. + +### 5.1 LAN_X_GET_TURNOUT_INFO + +Anfordern des Status einer Weiche/Schaltfunktion. + +| DataLen | Header | X-Header | DB0 | DB1 | XOR | +|---|---|---|---|---|---| +| 0x08 0x00 | 0x40 0x00 | 0x43 | FAdr_MSB | FAdr_LSB | XOR | + +`Funktions-Adresse = (FAdr_MSB << 8) + FAdr_LSB`. **Antwort:** siehe [5.3](#53-lan_x_turnout_info). + +### 5.2 LAN_X_SET_TURNOUT + +Schalten einer Weiche. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | XOR | +|---|---|---|---|---|---|---| +| 0x09 0x00 | 0x40 0x00 | 0x53 | FAdr_MSB | FAdr_LSB | 10Q0A00P | XOR | + +`Funktions-Adresse = (FAdr_MSB << 8) + FAdr_LSB`. `1000A00P`: +- `A=0` Weichenausgang deaktivieren / `A=1` aktivieren +- `P=0` Ausgang 1 wählen / `P=1` Ausgang 2 wählen +- `Q=0` Kommando sofort ausführen +- `Q=1` (ab FW V1.24) Weichenbefehl in Z21-Queue einfügen und zum nächstmöglichen Zeitpunkt am Gleis ausgeben + +**Antwort:** keine Standardantwort, [5.3](#53-lan_x_turnout_info) an Clients mit Abo. Das Q-Flag wurde ab FW V1.24 eingeführt. + +#### 5.2.1 LAN_X_SET_TURNOUT mit Q=0 + +Bei `Q=0` verhält sich die Z21 kompatibel zu früheren Versionen: der Befehl wird sofort ausgegeben. Das Activate (A=1) wird ausgegeben, bis das entsprechende Deactivate gesendet wird. Es darf zu einem Zeitpunkt nur ein Weichenstellbefehl aktiv sein. Die korrekte Reihenfolge (Activate → Deactivate) und das Timing der Schaltdauer liegen in der Verantwortung des LAN-Clients. + +- **Falsch:** mehrere Weichen gleichzeitig aktivieren, dann gemeinsam deaktivieren. +- **Richtig:** je Weiche: aktivieren → ~100 ms warten → deaktivieren → ~50 ms warten, dann nächste. + +*(Abbildung 3: DCC Sniff am Gleis bei Q=0.)* + +#### 5.2.2 LAN_X_SET_TURNOUT mit Q=1 + +Bei `Q=1` wird der Befehl in einer internen FIFO-Queue eingereiht und beim Generieren des Gleissignals viermal am Gleis ausgegeben. Das befreit den Client von der Serialisierung — Schaltbefehle dürfen gemischt gesendet werden (Fahrstraßen!). Der Client kümmert sich nur noch um das Timing des Deactivate; bei manchen DCC-Decodern kann es entfallen, bei MM jedoch nicht (z.B. k83 ohne Endabschaltung). + +**Vermischen Sie keinesfalls Schaltbefehle mit Q=0 und Q=1.** *(Abbildung 4: DCC Sniff am Gleis bei Q=1.)* + +### 5.3 LAN_X_TURNOUT_INFO + +Antwort auf [5.1](#51-lan_x_get_turnout_info), aber auch ungefragt bei Statusänderung (Broadcast-Flag 0x00000001). + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | XOR | +|---|---|---|---|---|---|---| +| 0x09 0x00 | 0x40 0x00 | 0x43 | FAdr_MSB | FAdr_LSB | 000000ZZ | XOR | + +`Funktions-Adresse = (FAdr_MSB << 8) + FAdr_LSB`. `000000ZZ`: +- `ZZ=00` Weiche noch nicht geschaltet +- `ZZ=01` Weiche steht gemäß „P=0" +- `ZZ=10` Weiche steht gemäß „P=1" +- `ZZ=11` ungültige Kombination + +*(Abbildung 5: Beispiel Sequenz Weiche schalten.)* + +### 5.4 LAN_X_SET_EXT_ACCESSORY + +*Ab Z21 FW V1.40.* Sendet einen DCC-Befehl im „erweiterten Zubehördecoder Paketformat" (DCCext) an einen Erweiterten Zubehördecoder (siehe RCN-213 Abschnitt 2.3). + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0x54 | Adr_MSB | Adr_LSB | DDDDDDDD | 0x00 | XOR | + +`RawAddress = (Adr_MSB << 8) + Adr_LSB`. +- **RawAddress**: Die RawAddress für den ersten erweiterten Zubehördecoder ist gem. RCN-213 die Adresse 4 (in Anwenderdialogen als „Adresse 1" dargestellt). Adressierung strikt nach RCN-213, ohne abweichende Verschiebung. +- **DDDDDDDD**: über Bits 0–7 werden die 256 möglichen Zustände übertragen, im Erweiterten Zubehördecoder-Paketformat gem. RCN-213. + +Hinweis: Der **10836 Z21 switch DECODER** interpretiert DDDDDDDD als `RZZZZZZZ`: +- `ZZZZZZZ` = Einschaltzeit (Auflösung 100 ms). 0 = Ausgang aus; 127 = dauerhaft eingeschaltet (bis zum nächsten Befehl). +- Bit 7 `R` wählt den Ausgang: R=1 „grün" (gerade), R=0 „rot" (abzweigend). + +Der **10837 Z21 signal DECODER** interpretiert DDDDDDDD als einen von 256 Signalbegriffen (Wertebereich abhängig vom Signaltyp). Beispiele: `0`=absoluter Haltebegriff, `4`=Fahrt 40 km/h, `16`=freie Fahrt, `65 (0x41)`=Rangieren erlaubt, `66 (0x42)`=Dunkelschaltung, `69 (0x45)`=Ersatzsignal. Konkrete Werte siehe `https://www.z21.eu/de/produkte/z21-signal-decoder/signaltypen` unter „DCCext". + +**Antwort:** keine Standardantwort, oder [5.6](#56-lan_x_ext_accessory_info) an Clients mit Abo. + +Beispiel: `0x0A 0x00 0x40 0x00 0x54 0x00 0x04 0x05 0x00 0x55` → an Decoder RawAddress=4 (Anwender-Adresse 1) Wert DDDDDDDD=5. Beim 10836 switch DECODER: Ausgang 1 „rot" (Klemme 1A) ein, nach 5×100 ms automatisch aus. + +„Notaus-Befehl für Erweiterte Zubehördecoder" (RCN-213, 2.4) = Wert 0 für RawAddress=2047: `0x0A 0x00 0x40 0x00 0x54 0x07 0xFF 0x00 0x00 0xAC`. + +### 5.5 LAN_X_GET_EXT_ACCESSORY_INFO + +*Ab Z21 FW V1.40.* Abfragen des letzten an einen Erweiterten Zubehördecoder übertragenen Befehls. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | XOR | +|---|---|---|---|---|---|---| +| 0x09 0x00 | 0x40 0x00 | 0x44 | Adr_MSB | Adr_LSB | 0x00 | XOR | + +`RawAddress = (Adr_MSB << 8) + Adr_LSB`. DB2 reserviert (mit 0 initialisieren). **Antwort:** siehe [5.6](#56-lan_x_ext_accessory_info). + +### 5.6 LAN_X_EXT_ACCESSORY_INFO + +Antwort auf [5.5](#55-lan_x_get_ext_accessory_info), aber auch ungefragt, wenn jemand anderes ein Kommando an einen Erweiterten Zubehördecoder sendet (Broadcast-Flag 0x00000001). + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0x44 | Adr_MSB | Adr_LSB | DDDDDDDD | Status | XOR | + +`RawAddress = (Adr_MSB << 8) + Adr_LSB`. DDDDDDDD = Zustand (Erweitertes Zubehördecoder-Paketformat). Status: `0x00` = Data Valid, `0xFF` = Data Unknown. + +--- + +## 6 Decoder CV Lesen und Schreiben + +Meldungen zum Lesen/Schreiben von Decoder-CVs (Configuration Variable, RP-9.2.2, RP-9.2.3). Ob bit- oder byteweiser Zugriff erfolgt, hängt von den Z21-Einstellungen ab. + +### 6.1 LAN_X_CV_READ + +CV im Direct-Mode auslesen. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | XOR | +|---|---|---|---|---|---|---| +| 0x09 0x00 | 0x40 0x00 | 0x23 | 0x11 | CVAdr_MSB | CVAdr_LSB | XOR | + +`CV-Adresse = (CVAdr_MSB << 8) + CVAdr_LSB`, mit 0=CV1, 1=CV2, 255=CV256, usw. **Antwort:** 2.9 ProgrammingMode an Clients mit Abo, sowie Ergebnis [6.3](#63-lan_x_cv_nack_sc)/[6.4](#64-lan_x_cv_nack)/[6.5](#65-lan_x_cv_result). + +### 6.2 LAN_X_CV_WRITE + +CV im Direct-Mode überschreiben. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0x24 | 0x12 | CVAdr_MSB | CVAdr_LSB | Value | XOR | + +`CV-Adresse = (CVAdr_MSB << 8) + CVAdr_LSB`. **Antwort:** wie 6.1. + +### 6.3 LAN_X_CV_NACK_SC + +Wird bei fehlerhafter Programmierung wegen Kurzschluss am Gleis automatisch an den auslösenden Client geschickt. **Z21 an Client:** X-Header `0x61`, DB0 `0x12`, XOR `0x73`. + +### 6.4 LAN_X_CV_NACK + +Wird gesendet, wenn das ACK vom Decoder ausbleibt. Bei byteweisem Zugriff kann das Lesen lange dauern. **Z21 an Client:** X-Header `0x61`, DB0 `0x13`, XOR `0x72`. + +### 6.5 LAN_X_CV_RESULT + +„Positives ACK", an den auslösenden Client. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0x64 | 0x14 | CVAdr_MSB | CVAdr_LSB | Value | XOR | + +`CV-Adresse = (CVAdr_MSB << 8) + CVAdr_LSB`. *(Abbildung 6: Beispiel Sequenz CV Lesen.)* + +### 6.6 LAN_X_CV_POM_WRITE_BYTE + +Schreibt eine CV eines Lokdecoders (NMRA S-9.2.1 Abschnitt C) auf dem Hauptgleis (POM „Programming on the Main"). Normaler Betriebsmodus (Gleisspannung ein, Programmiermodus aus). Keine Rückmeldung. + +| DataLen | Header | X-Header | DB0 | DB1..DB5 | XOR | +|---|---|---|---|---|---| +| 0x0C 0x00 | 0x40 0x00 | 0xE6 | 0x30 | POM-Parameter | XOR | + +POM-Parameter: + +| Pos | Daten | Bedeutung | +|---|---|---| +| DB1 | Adr_MSB | | +| DB2 | Adr_LSB | `Lok-Adresse = (Adr_MSB & 0x3F) << 8 + Adr_LSB` | +| DB3 | `111011MM` | Option `0xEC`; MM = CVAdr_MSB | +| DB4 | CVAdr_LSB | `CV-Adresse = (MM << 8) + CVAdr_LSB` (0=CV1, …) | +| DB5 | Value | neuer CV-Wert | + +**Antwort:** keine. + +### 6.7 LAN_X_CV_POM_WRITE_BIT + +Wie 6.6, aber schreibt ein Bit einer CV (POM). DB3 = `111010MM` (Option `0xE8`), DB5 = `0000VPPP` (PPP = Bit-Position, V = neuer Bit-Wert). **Antwort:** keine. + +### 6.8 LAN_X_CV_POM_READ_BYTE + +*Ab Z21 FW Version 1.22.* Liest eine CV eines Lokdecoders auf dem Hauptgleis (POM). RailCom muss in der Z21 aktiviert, der Decoder RailCom-fähig sein (CV28 Bit 0/1 und CV29 Bit 3 = 1, Zimo). + +POM-Parameter: DB3 = `111001MM` (Option `0xE4`), DB5 = `0`. **Antwort:** [6.4](#64-lan_x_cv_nack) oder [6.5](#65-lan_x_cv_result). + +### 6.9 LAN_X_CV_POM_ACCESSORY_WRITE_BYTE + +*Ab Z21 FW Version 1.22.* Schreibt eine CV eines Accessory Decoders (NMRA S-9.2.1 Abschnitt D) auf dem Hauptgleis (POM). Keine Rückmeldung. `Header X-Header=0xE6`, DB0 `0x31`. + +POM-Parameter: + +| Pos | Daten | Bedeutung | +|---|---|---| +| DB1 | aaaaa | Decoder_Adresse MSB | +| DB2 | AAAACDDD | `aaaaaAAAACDDD = ((Decoder_Addresse & 0x1FF) << 4) \| CDDD`. CDDD=0000 → CV bezieht sich auf ganzen Decoder; C=1 → DDD = Ausgangsnummer | +| DB3 | `111011MM` | Option `0xEC`; MM = CVAdr_MSB | +| DB4 | CVAdr_LSB | `CV-Adresse = (MM << 8) + CVAdr_LSB` | +| DB5 | Value | neuer CV-Wert | + +**Antwort:** keine. + +### 6.10 LAN_X_CV_POM_ACCESSORY_WRITE_BIT + +*Ab Z21 FW Version 1.22.* Wie 6.9, aber Bit-Schreiben. DB3 = `111010MM` (Option `0xE8`), DB5 = `0000VPPP`. **Antwort:** keine. + +### 6.11 LAN_X_CV_POM_ACCESSORY_READ_BYTE + +*Ab Z21 FW Version 1.22.* Liest eine CV eines Accessory Decoders (POM). RailCom muss aktiviert sein, der Decoder RailCom-fähig. DB3 = `111001MM` (Option `0xE4`), DB5 = `0`. **Antwort:** [6.4](#64-lan_x_cv_nack) oder [6.5](#65-lan_x_cv_result). + +### 6.12 LAN_X_MM_WRITE_BYTE + +*Ab Z21 FW Version 1.23.* Überschreibt ein Register eines Motorola-Decoders auf dem Programmiergleis. + +| DataLen | Header | X-Header | DB0 | DB1 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---|---| +| 0x0A 0x00 | 0x40 0x00 | 0x24 | 0xFF | 0 | RegAdr | Value | XOR | + +`RegAdr`: 0=Register1, …, 78=Register79. `0 ≤ Value ≤ 255` (manche Decoder nur 0–80). **Antwort:** 2.9 ProgrammingMode an Clients mit Abo, sowie [6.3](#63-lan_x_cv_nack_sc) oder [6.5](#65-lan_x_cv_result). + +*Anmerkung:* Die Z21 verwendet den „6021-Programmiermodus" für MM-Decoder (nur Schreiben, kein Lesen, keine Erfolgsprüfung außer Kurzschlusserkennung). Funktioniert für viele Decoder von ESU, Zimo, Märklin — nicht zwingend für alle MM-Decoder (z.B. nicht mit DIP-Schaltern). `LAN_X_CV_RESULT` bedeutet hier nur „Programmiervorgang beendet", nicht „erfolgreich". Beispiel: `0x0A 0x00 0x40 0x00 0x24 0xFF 0x00 0x00 0x05 0xDE` → „Ändere Lokdecoder-Adresse (Register1) auf 5". + +### 6.13 LAN_X_DCC_READ_REGISTER + +*Ab Z21 FW Version 1.25.* Liest ein Register eines DCC-Decoders im Registermodus (S-9.2.3) auf dem Programmiergleis. + +| DataLen | Header | X-Header | DB0 | DB1 | XOR | +|---|---|---|---|---|---| +| 0x08 0x00 | 0x40 0x00 | 0x22 | 0x11 | REG | XOR | + +`REG`: 0x01=Register1, …, 0x08=Register8. `0 ≤ Value ≤ 255`. **Antwort:** 2.9 ProgrammingMode an Clients mit Abo, sowie [6.3](#63-lan_x_cv_nack_sc) oder [6.5](#65-lan_x_cv_result). *Registermodus nur für sehr alte DCC-Decoder; Direct CV bevorzugen.* + +### 6.14 LAN_X_DCC_WRITE_REGISTER + +*Ab Z21 FW Version 1.25.* Überschreibt ein Register eines DCC-Decoders im Registermodus (S-9.2.3). + +| DataLen | Header | X-Header | DB0 | DB2 | DB3 | XOR | +|---|---|---|---|---|---|---| +| 0x09 0x00 | 0x40 0x00 | 0x23 | 0x12 | REG | Value | XOR | + +`REG`: 0x01–0x08. `0 ≤ Value ≤ 255`. **Antwort:** wie 6.13. *Direct CV bevorzugen.* + +--- + +## 7 Rückmelder – R-BUS + +Die Rückmeldemodule (Bestellnummer 10787, 10808 und 10819) am R-BUS können mit folgenden Kommandos ausgelesen und konfiguriert werden. + +### 7.1 LAN_RMBUS_DATACHANGED + +Änderung am Rückmeldebus melden. Asynchron, wenn der Broadcast (Flag 0x00000002) aktiviert ist oder der Status explizit angefordert wurde. + +| DataLen | Header | Gruppenindex (1 Byte) | Rückmelder-Status (10 Byte) | +|---|---|---|---| +| 0x0F 0x00 | 0x80 0x00 | … | … | + +- **Gruppenindex:** `0` = Module mit Adressen 1–10, `1` = Module mit Adressen 11–20. +- **Rückmelder-Status:** 1 Byte pro Rückmelder, 1 Bit pro Eingang. Zuordnung statisch aufsteigend. + +Beispiel: GruppenIndex=1, Status `0x01 0x00 0xC5 0x00 ...` → „Rückmelder 11 Kontakt auf Eingang 1; Rückmelder 13 Kontakt auf Eingang 8,7,3 und 1". + +### 7.2 LAN_RMBUS_GETDATA + +Anfordern des aktuellen Status. **Anforderung:** `Header=0x81 0x00`, Gruppenindex (1 Byte). **Antwort:** siehe 7.1. + +### 7.3 LAN_RMBUS_PROGRAMMODULE + +Ändern der Rückmelder-Adresse. **Anforderung:** `Header=0x82 0x00`, Adresse (1 Byte). **Antwort:** keine. + +Adresse = neue Adresse (Wertebereich 0 und 1…20). Der Programmierbefehl wird am R-BUS ausgegeben, bis dieser Befehl erneut mit Adresse=0 gesendet wird. Während der Programmierung darf sich kein anderes Modul am R-BUS befinden. *(Abbildung 7: Beispiel Sequenz Rückmeldemodul programmieren.)* + +--- + +## 8 RailCom + +Die Z21 unterstützt RailCom durch: +- Erzeugung der RailCom-Lücke am Gleissignal. +- Globaler Empfänger in der Z21. +- Lokale Empfänger, z.B. in den Belegtmeldern 10808 (Lokerkennung; Kanal-2-Daten über CAN ab FW V1.29). +- POM-Lesen (siehe [6.8](#68-lan_x_cv_pom_read_byte) ab FW V1.22). +- Lokadressen-Erkennung bei Belegtmeldern (siehe [9.5](#95-lan_loconet_detector) ab V1.22 und [10.1](#101-lan_can_detector) ab V1.30). +- Decoder-Geschwindigkeit und Decoder-QoS ab FW V1.29. + +Voraussetzung: Decoder RailCom-fähig, CV28/CV29 korrekt konfiguriert, Option „RailCom" in der Z21 aktiviert. + +### 8.1 LAN_RAILCOM_DATACHANGED + +Ab FW V1.29. Antwort auf [8.2](#82-lan_railcom_getdata); auch ungefragt, wenn sich RailCom-Daten ändern und der Client den Broadcast (Flag 0x00000004) mit abonnierter Lok-Adresse oder den Broadcast 0x00040000 (alle Loks) aktiviert hat. + +**Z21 an Client:** `DataLen=0x11 0x00`, `Header=0x88 0x00`, RailComDaten. + +| Offset | Typ | Name | Bedeutung | +|---|---|---|---| +| 0 | UINT16 | LocoAddress | Adresse des erkannten Decoders | +| 2 | UINT32 | ReceiveCounter | Empfangszähler in Z21 | +| 6 | UINT16 | ErrorCounter | Empfangsfehlerzähler in Z21 | +| 8 | UINT8 | reserved | | +| 9 | UINT8 | Options | Flags-Bitmaske (siehe unten) | +| 10 | UINT8 | Speed | Geschwindigkeit 1 oder 2 (falls unterstützt) | +| 11 | UINT8 | QoS | Quality of Service (falls unterstützt) | +| 12 | UINT8 | reserved | | + +```c +#define rcoSpeed1 0x01 // CH7 subindex 0 +#define rcoSpeed2 0x02 // CH7 subindex 1 +#define rcoQoS 0x04 // CH7 subindex 7 +``` + +Die Struktur kann in Zukunft vergrößert werden — bei der Auswertung unbedingt DataLen berücksichtigen. + +### 8.2 LAN_RAILCOM_GETDATA + +RailCom-Daten anfordern (ab FW V1.29). **Anforderung:** `Header=0x89 0x00`, Typ 8 bit + LocoAddress 16 bit (little endian). +- Typ `0x01` = RailCom-Daten für gegebene Lokadresse anfordern. +- LocoAddress: Lokadresse; `0` = nächste Lok im Ringbuffer. + +**Antwort:** siehe [8.1](#81-lan_railcom_datachanged). + +--- + +## 9 LocoNet + +*Ab Z21 FW Version 1.20.* Die Z21 kann als Ethernet/LocoNet Gateway verwendet werden, wobei sie gleichzeitig der LocoNet-Master ist. + +Damit der Client Meldungen vom LocoNet bekommt, muss er die entsprechenden Meldungen mittels [2.16](#216-lan_set_broadcastflags) abonniert haben. +- Empfangene Meldungen → Header `LAN_LOCONET_Z21_RX`. +- Selbst gesendete Meldungen → Header `LAN_LOCONET_Z21_TX`. +- Mit `LAN_LOCONET_FROM_LAN` kann der Client selbst Meldungen auf den Bus schreiben (andere Clients mit Abo werden ebenfalls per `LAN_LOCONET_FROM_LAN` benachrichtigt; nur der Absender nicht). + +*(Abbildung 8: Beispiel Sequenz Ethernet/LocoNet Gateway.)* Selbst triviale Vorgänge am Bus können erheblichen Netzwerkverkehr erzeugen. Diese Funktionalität ist primär für PC-Steuerungen gedacht. Wägen Sie die Flags 0x02000000 (Loks) und 0x04000000 (Weichen) genau ab — verwenden Sie zum konventionellen Fahren/Schalten möglichst die Befehle aus den Kapiteln 4, 5 und 6. Das LocoNet-Protokoll selbst wird hier nicht beschrieben (siehe Digitrax bzw. Hardware-Hersteller). + +### 9.1 LAN_LOCONET_Z21_RX + +*Ab FW 1.20.* Asynchron, wenn der Broadcast (Flags 0x01000000/0x02000000/0x04000000) aktiviert ist und eine Meldung am LocoNet-Bus empfangen wurde. + +| DataLen | Header | Data | +|---|---|---| +| 0x04+n 0x00 | 0xA0 0x00 | LocoNet Meldung inkl. CKSUM (n Bytes) | + +### 9.2 LAN_LOCONET_Z21_TX + +*Ab FW 1.20.* Analog zu 9.1, wenn die Z21 eine Meldung auf den Bus geschrieben hat. `Header=0xA1 0x00`, LocoNet Meldung inkl. CKSUM (n Bytes). + +### 9.3 LAN_LOCONET_FROM_LAN + +*Ab FW 1.20.* Ein Client schreibt eine Meldung auf den LocoNet-Bus. Wird auch asynchron an andere Clients gemeldet (Flags 0x01000000/0x02000000/0x04000000), wenn ein anderer Client geschrieben hat. + +| DataLen | Header | Data | +|---|---|---| +| 0x04+n 0x00 | 0xA2 0x00 | LocoNet Meldung inkl. CKSUM (n Bytes) | + +#### 9.3.1 DCC Binary State Control Instruction per LocoNet OPC_IMM_PACKET + +Ab FW V1.42 wird zum Schalten von Binary States das neue Kommando [4.3.3 LAN_X_SET_LOCO_BINARY_STATE](#433-lan_x_set_loco_binary_state) empfohlen. Der folgende (etwas veraltete) Absatz bleibt zur Vollständigkeit: + +Ab FW V1.25 können mittels `LAN_LOCONET_FROM_LAN` und dem LocoNet-Befehl `OPC_IMM_PACKET` beliebige DCC-Pakete am Gleisausgang generiert werden, darunter die Binary State Control Instruction („F29…F32767"). Das gilt auch für die weiße z21 (virtueller LocoNet-Stack). Zum Aufbau siehe LocoNet Spec bzw. NMRA S-9.2.1 (Feature Expansion Instruction). + +### 9.4 LAN_LOCONET_DISPATCH_ADDR + +*Ab FW 1.20.* Eine Lok-Adresse zum LocoNet-Dispatch vorbereiten („DISPATCH_PUT"). + +**Anforderung:** `Header=0xA3 0x00`, Lok-Adresse 16 bit (little endian). + +**Antwort:** +- FW < 1.22: keine. +- FW ≥ 1.22: `Header=0xA3 0x00`, Lok-Adresse 16 bit (little endian) + Ergebnis 8 bit. + - `0` = „DISPATCH_PUT" fehlgeschlagen (z.B. Z21 als Slave, Master hat abgelehnt, Adresse bereits zugeteilt). + - `>0` = erfolgreich; Wert = aktuelle LocoNet Slot-Nummer für die Lok-Adresse. + +*(Abbildung 9: Beispiel Sequenz LocoNet Dispatch per LAN-Client.)* + +### 9.5 LAN_LOCONET_DETECTOR + +*Ab FW 1.22.* Abfragen/Benachrichtigung über Belegtstatus von LocoNet-Gleisbesetztmeldern, ohne das LocoNet-Protokoll selbst verarbeiten zu müssen. + +*Unterschied:* Roco 10787 (R-BUS) basiert auf mechanischen Schaltkontakten; LocoNet-Gleisbesetztmelder basieren üblicherweise auf Strommessung bzw. Transponder/Infrarot/RailCom (im Idealfall nur eine Meldung bei Statusänderung). + +**Anforderung (Status abfragen):** + +| DataLen | Header | Typ 8 bit | Reportadresse 16 bit (little endian) | +|---|---|---|---| +| 0x07 0x00 | 0xA4 0x00 | … | … | + +- `0x80`: „Stationary Interrogate Request" (SIC) gem. Digitrax (auch Blücher-Elektronik). Reportadresse hier 0 (don't care). +- `0x81`: Reportadresse für Uhlenbrock-Besetztmelder (z.B. UB63320 über LNCV 17; Default 1017). Nur zum Abfragen, nicht mit Rückmelderadresse zu verwechseln. Am LocoNet-Bus über Weichenstellbefehle implementiert → Wert um 1 dekrementiert übergeben. Beispiel: `0x07 0x00 0xA4 0x00 0x81 0xF8 0x03` → Status aller Besetztmelder mit Reportadresse 1017 (`= 0x03F8 + 1 = 1016 + 1`). +- `0x82`: Statusabfrage für LISSY (ab FW 1.23). Bei Uhlenbrock LISSY entspricht die Reportadresse der Rückmelderadresse; Rückmeldung abhängig vom LISSY-Betriebsmodus. + +Bei einer Anfrage können mehrere Besetztmelder gleichzeitig angesprochen werden → mehrere Antworten, ggf. mehrfach pro Eingang. + +**Antwort:** + +| DataLen | Header | Typ 8 bit | Rückmelderadresse 16 bit (little endian) | Info[n] | +|---|---|---|---|---| +| 0x07+n 0x00 | 0xA4 0x00 | … | … | … | + +Asynchron, wenn der Broadcast (Flag 0x08000000) aktiviert ist und eine Meldung empfangen wurde (Statusänderung oder explizite Abfrage). **Rückmelderadresse:** jedem Eingang zugeordnet, vom Anwender konfigurierbar (z.B. via LNCV). + +| Typ | Bedeutung | n | Info | +|---|---|---|---| +| `0x01` | Besetzt/Frei (z.B. Uhlenbrock 63320, Blücher GBM16XL; LocoNet OPC_INPUT_REP, X=1) | 1 | Info[0]=0 → frei (LO), =1 → belegt (HI) | +| `0x02` | Transponder Enters Block (z.B. Blücher GBM16XN, OPC_MULTI_SENSE) | 2 | Transponderadresse 16 Bit LE: Info[0]=Low, Info[1]=High | +| `0x03` | Transponder Exits Block | 2 | wie 0x02 | +| `0x10` | LISSY Lokadresse (ab FW 1.23; Uhlenbrock-Übergabeformat, LNCV 15=1) | 3 | Info[0/1]=Lokadresse 16 Bit LE; Info[2]=`0 DIR1 DIR0 0 K3 K2 K1 K0` | +| `0x11` | LISSY Belegtzustand (ab FW 1.23) | 1 | Info[0]=0 → Block frei, =1 → belegt | +| `0x12` | LISSY Geschwindigkeit (ab FW 1.23) | 2 | Info[0/1]=Geschwindigkeit 16 Bit LE | + +Hinweise zu Typ 0x02/0x03 (GBM16XN): Transponderadresse identifiziert das Fahrzeug (Lok-Adresse via RailCom). Zur Rückmelderadresse +1 addieren, um die im GBM16XN konfigurierte Adresse zu erhalten. Das Bit unter Maske 0x1000 (Fahrtrichtung) kollidiert mit dem Adressraum langer Lok-Adressen — diese Konfiguration wird nicht empfohlen. + +Hinweise zu Typ 0x10 (LISSY): Loks 1…9999, Wagen 10000…16382. `DIR1=0` → DIR0 ignorieren; `DIR1=1` → DIR0=0 vorwärts, DIR0=1 rückwärts; K3..K0 = 4-Bit Klasseninformation. *Beispielkonfigurationen für Lissy-Empfänger 68610 (LNCV-Tabellen) siehe Original.* Typ wird künftig um weitere IDs erweitert. + +--- + +## 10 CAN + +### 10.1 LAN_CAN_DETECTOR + +*Ab Z21 FW Version 1.30.* Der Roco CAN-Belegtmelder 10808 wird ab FW 1.30 unterstützt. Vier Verwendungsweisen: +1. **R-BUS-Emulation**: Belegtmelder als R-BUS-Melder (siehe Kapitel 7). +2. **LocoNet-Emulation**: als LocoNet-Melder (siehe 9.5; Typ 0x01 belegt/frei, Typ 0x02/0x03 Transponder). +3. **LISSY-Emulation**: durch LISSY/Marco-Meldungen (siehe 9.5; Typ 0x10 Lokadresse, Typ 0x11 Belegtzustand). +4. **Direkter Zugriff** durch `LAN_CAN_DETECTOR` (siehe unten). + +Emulation konfigurierbar über das Z21 Maintenance Tool. Werkseinstellung: R-BUS=ein, LocoNet=ein, LISSY=aus. Der direkte Zugriff (`0xC4`) ist am schnellsten und ressourcenschonendsten — empfohlen bei vielen CAN-Belegtmeldern. + +**Anforderung:** + +| DataLen | Header | Typ 8 bit | CAN-NetworkID 16 bit (little endian) | +|---|---|---|---| +| 0x07 0x00 | 0xC4 0x00 | 0x00 | … | + +- Typ `0x00`: Abfrage des Belegtmelders mit gegebener CAN-NetworkID. `0xD000` = „alle CAN-Belegtmelder". Beispiel: `0x07 0x00 0xC4 0x00 0x00 0x00 0xD0`. + +**Antwort:** + +| DataLen | Header | NId 16 | Addr 16 | Port 8 | Typ 8 | Value1 16 | Value2 16 | +|---|---|---|---|---|---|---|---| +| 0x0E 0x00 | 0xC4 0x00 | … | … | … | … | … | … | + +Asynchron, wenn der Broadcast (Flag 0x00080000) aktiviert ist und eine Meldung empfangen wurde. Alle 16-bit Werte little endian. +- **NId**: unveränderbare CAN-NetworkID. +- **Addr**: konfigurierbare Moduladresse. +- **Port**: Eingang (0–7). +- **Typ**: `0x01` Belegtstatus; `0x11`–`0x1F` erkannte Lokadressen (0x11 = 1./2., 0x12 = 3./4., …, 0x1F = 29./30.). + +Falls Typ = `0x01` (Belegtstatus), Value1: + +| Wert | Bedeutung | +|---|---| +| 0x0000 | Frei, ohne Spannung | +| 0x0100 | Frei, mit Spannung | +| 0x1000 | Besetzt, ohne Spannung | +| 0x1100 | Besetzt, mit Spannung | +| 0x1201 | Besetzt, Überlast 1 | +| 0x1202 | Besetzt, Überlast 2 | +| 0x1203 | Besetzt, Überlast 3 | + +Falls Typ = `0x11`–`0x1F` (RailCom Lokadressen): Value1/Value2 = erste/zweite erkannte Lokadresse inkl. Richtung. `0` = keine Adresse erkannt bzw. Listenende. In den obersten 2 Bits: `0x` keine Richtung, `10` vorwärts, `11` rückwärts; in den untersten 14 Bits die Lokadresse. + +### 10.2 CAN Booster + +*Ab Z21 FW Version 1.41.* LAN-Befehle für CAN-Booster-Management (Roco 10806, 10807, 10869). Funktionieren nur, wenn die Booster über CAN-Bus (nicht B-BUS) mit der Z21 verbunden sind. + +#### 10.2.1 LAN_CAN_DEVICE_GET_DESCRIPTION + +Bezeichnung (Freitext) aus CAN-Booster auslesen. **Anforderung:** `Header=0xC8 0x00`, NId 16 bit. **Antwort:** `DataLen=0x16 0x00`, `Header=0xC8 0x00`, NId 16 bit + `UINT8 Name[16]`. + +NId = CAN-NetworkID (0xC101–0xC1FF). Name = nullterminierter String, ISO 8859-1 (Latin-1). *Hinweis:* nicht zwei Requests schnell hintereinander senden; zuerst Antwort abwarten. Die NetworkIDs aller Booster liefert [10.2.3](#1023-lan_can_booster_systemstate_chgd). + +#### 10.2.2 LAN_CAN_DEVICE_SET_DESCRIPTION + +Bezeichnung überschreiben. **Anforderung:** `Header=0xC9 0x00`, NId 16 bit + `UINT8 Name[16]`. **Antwort:** keine. Rest von Data mit 0x00 auffüllen; nach 16 Zeichen wird abgeschnitten. Nicht erlaubt: `"` (0x22) und `\` (0x5C). + +#### 10.2.3 LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD + +Systemzustand des CAN-Boosters melden (ca. einmal pro Sekunde, pro Booster und Ausgang). Asynchron, wenn der Broadcast (Flag 0x00020000) aktiviert ist und mind. ein Booster über CAN verbunden ist. + +**Z21 an Client:** `DataLen=0x0E 0x00`, `Header=0xCA 0x00`, CANBoosterSystemState (10 Bytes). + +| Offset | Typ | Name | Wert | +|---|---|---|---| +| 0 | UINT16 | NId | 0xC101…0xC1FF (CAN-NetworkID) | +| 2 | UINT16 | Booster_OutputPort | 1 = erste Endstufe, 2 = zweite (nur 10807) | +| 4 | UINT16 | Booster_State | bitmask (siehe unten) | +| 6 | UINT16 | Booster_VCCVoltage | mV (Spannung an der Endstufe) | +| 8 | UINT16 | Booster_Current | mA (Strom an der Endstufe) | + +```c +#define bsBgActive 0x0001 // Bremsgenerator aktiv (ZCAN SSP) +#define bsShortCircuit 0x0020 // Kurzschluss an Endstufe (ZCAN UES) +#define bsTrackVoltageOff 0x0080 // Gleisspannung ist abgeschaltet (OFF) +#define bsRailComActive 0x0800 // RailCom-Cutout aktiv +#define bsOutputDisabled 0x0100 // Booster Ausgang deaktiviert (by user) — ab Booster FW V1.11 +``` + +#### 10.2.4 LAN_CAN_BOOSTER_SET_TRACKPOWER + +Booster Management: Gleisausgänge deaktivieren/reaktivieren. **Anforderung:** `Header=0xCB 0x00`, NId 16 bit + Power 8 bit. + +- `0x00` alle Ausgänge deaktivieren / `0xFF` reaktivieren +- *(ab FW V1.42 + Booster FW V1.11)* `0x10`/`0x11` erster Ausgang aus/ein, `0x20`/`0x22` zweiter Ausgang aus/ein (Z21 dual BOOSTER) + +Ausgänge können nur eingeschaltet werden, wenn die Zentrale eingeschaltet ist und ein gültiges Gleissignal sendet. Einstellungen nicht persistent. **Antwort:** bei Änderung [10.2.3](#1023-lan_can_booster_systemstate_chgd) an Clients mit Abo. + +--- + +## 11 zLink + +Die zLink-Schnittstelle erlaubt es, Endgeräte mit kleinerem Microcontroller ohne eigenes LAN/WLAN ins Netzwerk zu integrieren. Endgeräte (Stand 06/2021): 10806 single BOOSTER, 10807 dual BOOSTER, 10869 XL BOOSTER, 10836 switch DECODER, 10837 signal DECODER. + +### 11.1 Adapter + +An die zLink-Schnittstelle kann ein Adapter angeschlossen werden — z.B. der **10838 Z21 pro LINK**. + +#### 11.1.1 10838 Z21 pro LINK + +Verbindet als Gateway die zLink-Schnittstelle mit dem WLAN, für: +1. Konfiguration des Endgeräts (Tasten/Display, Z21 App, Maintenance Tool). +2. Firmware Update (Z21 Updater App, Maintenance Tool). +3. Steuerung durch WLAN-Clients über das Z21 LAN Protokoll. + +Im jeweiligen Endgerät ist ein zugeschnittener Z21-Protokoll-Stack implementiert; Kommandos werden wie an eine Zentrale per UDP geschickt (z.B. Boosterausgänge schalten, Systemstatus abfragen, Weichen/Signale direkt schalten, Decoder per CV-Schreibbefehl konfigurieren — sogar ohne Verbindung zum Hauptgleis). Zu beachten: +- Eingeschränkte Bandbreite: effektive Transferrate deutlich unter 1024 Bytes/s halten. +- Zwischen zwei Befehlen mind. 50 ms Pause. +- Z21 pro LINK vorzugsweise im Client Mode verwenden. +- Möglichst nur ein WLAN-Client verbinden, maximal 4 Clients. + +UDP-Broadcasts möglich, aber nur zum Auffinden der Geräte empfohlen. Danach Zuordnung über Hardware-Typ (`LAN_GET_HWINFO`), Seriennummer (`LAN_GET_SERIAL_NUMBER`), IP-Adresse und konfigurierbaren Namen. Ein Befehl, den der Z21 pro LINK selbst beantwortet (nicht durchreicht), ist `LAN_ZLINK_GET_HWINFO`. + +##### 11.1.1.1 LAN_ZLINK_GET_HWINFO + +Abfragen der Eigenschaften des Z21 pro LINK. Als UDP-Broadcast gesendet, lassen sich die im WLAN angemeldeten Z21 pro LINK auffinden. + +**Anforderung an Z21 pro LINK:** `DataLen=0x05 0x00`, `Header=0xE8 0x00`, Data[0]=`0x06` (ZLINK_MSG_TYPE_HW_INFO). + +**Antwort:** `DataLen=0x3F 0x00`, `Header=0xE8 0x00`, Data[0]=`0x06` + Z_Hw_Info (58 Bytes). + +| Offset | Typ | Name | Beispiel | +|---|---|---|---| +| 0 | UINT16 | HwID | 401 (0x191) | +| 2 | UINT8 | FW_Version_Major | 1 | +| 3 | UINT8 | FW_Version_Minor | 1 | +| 4 | UINT16 | FW_Version_Build | 3217 (0xC91) | +| 6 | UINT8[18] | MAC_Address (string) | „EC FA BC 4F 04 C6" | +| 24 | UINT8[33] | Name (string) | „this_is_a_quite_long_device_name" | +| 57 | UINT8 | Reserved | 0x00 | + +- **HwID**: 401 (0x191) = Adapter 10838 Z21 pro LINK. +- **MAC_Address**: nullterminierte Zeichenkette, 8-bit ASCII. +- **Name**: vom Anwender konfigurierbar, max. 32 Zeichen + 0x00, ISO 8859-1 (Latin-1). Alle Zeichen nach dem ersten 0x00 ignorieren. + +### 11.2 Booster 10806, 10807 und 10869 + +Unterstützte Befehle siehe Anhang A. Zusätzlich gibt es boosterspezifische Befehle: + +#### 11.2.1 LAN_BOOSTER_GET_DESCRIPTION + +Bezeichnung auslesen. **Anforderung:** `Header=0xB8 0x00`. **Antwort:** `DataLen=0x24 0x00`, `Header=0xB8 0x00`, `UINT8 Name[32]`. String ISO 8859-1, aus CAN-Kompatibilität ≤ 16 Zeichen. *Sonderfall:* `Name[0]==0xFF` → noch nie eine Bezeichnung abgelegt (als Leerstring interpretieren). + +#### 11.2.2 LAN_BOOSTER_SET_DESCRIPTION + +Bezeichnung überschreiben. **Anforderung:** `Header=0xB9 0x00`, `UINT8 Name[32]`. Rest mit 0x00 auffüllen; nicht erlaubt `"` (0x22) und `\` (0x5C). **Antwort:** keine. + +#### 11.2.3 LAN_BOOSTER_SYSTEMSTATE_GETDATA + +Anfordern des Systemzustandes. **Anforderung:** `Header=0xBB 0x00`. **Antwort:** siehe [11.2.4](#1124-lan_booster_systemstate_datachanged). + +#### 11.2.4 LAN_BOOSTER_SYSTEMSTATE_DATACHANGED + +Asynchron vom Booster, wenn der Broadcast (Flag 0x00000100) aktiviert ist oder der Status explizit angefordert wurde. + +**Booster an Client:** `DataLen=0x1C 0x00`, `Header=0xBA 0x00`, BoosterSystemState (24 Bytes). + +| Offset | Typ | Name | | +|---|---|---|---| +| 0 | INT16 | Booster_1_MainCurrent | mA | +| 2 | INT16 | Booster_2_MainCurrent | mA | +| 4 | INT16 | Booster_1_FilteredMainCurrent | mA | +| 6 | INT16 | Booster_2_FilteredMainCurrent | mA | +| 8 | INT16 | Booster_1_Temperature | °C | +| 10 | INT16 | Booster_2_Temperature | °C | +| 12 | UINT16 | SupplyVoltage | mV | +| 14 | UINT16 | Booster_1_VCCVoltage | mV | +| 16 | UINT16 | Booster_2_VCCVoltage | mV | +| 18 | UINT8 | CentralState | bitmask | +| 19 | UINT8 | CentralStateEx | bitmask | +| 20 | UINT8 | CentralStateEx2 | bitmask | +| 21 | UINT8 | Reserved1 | | +| 22 | UINT8 | CentralStateEx3 | bitmask | +| 23 | UINT8 | Reserved2 | | + +```c +// CentralState +#define csTrackVoltageOff 0x02 // Die Gleisspannung ist abgeschaltet +#define csConfigMode 0x10 // Konfigurationsmodus aktiv +#define csCanConnected 0x20 // CAN Verbindung mit Zentrale Ok + +// CentralStateEx +#define cseHighTemperature 0x01 // zu hohe Temperatur +#define csePowerLost 0x02 // zu geringe Eingangsspannung +#define cseBooster_1_ShortCircuit 0x04 // Kurzschluss an 1. Endstufe +#define cseBooster_2_ShortCircuit 0x08 // Kurzschluss an 2. Endstufe +#define cseRevPol 0x10 // Fehler Versorgungsspannung +#define cseNoDCCInput 0x80 // kein DCC-Eingangssignal vorhanden + +// CentralStateEx2 +#define cse2Booster_1_RailComActive 0x01 // RailCom aktiv 1. Endstufe +#define cse2Booster_2_RailComActive 0x02 // RailCom aktiv 2. Endstufe +#define cse2Booster_1_MasterSettings 0x04 // CAN Autosettings Ok 1. Endstufe +#define cse2Booster_2_MasterSettings 0x08 // CAN Autosettings Ok 2. Endstufe +#define cse2Booster_1_BgActive 0x10 // Bremsgenerator aktiv 1. Endstufe +#define cse2Booster_2_BgActive 0x20 // Bremsgenerator aktiv 2. Endstufe +#define cse2Booster_1_RailComFwd 0x40 // RailCom Forwarding aktiv 1. Endstufe +#define cse2Booster_2_RailComFwd 0x80 // RailCom Forwarding aktiv 2. Endstufe + +// CentralStateEx3 +#define cse3Booster_1_OutputInverted 0x01 // 1. Endstufe invertiert (Autoinvert) +#define cse3Booster_2_OutputInverted 0x02 // 2. Endstufe invertiert (Autoinvert) +#define cse3Booster_1_OutputDisabled 0x10 // 1. Endstufe deaktiviert (by user) — ab Booster FW V1.11 +#define cse3Booster_2_OutputDisabled 0x20 // 2. Endstufe deaktiviert (by user) — ab Booster FW V1.11 +``` + +#### 11.2.5 LAN_BOOSTER_SET_POWER + +*Ab Booster FW V1.11.* Booster Management durch Anwender. Werden alle Ausgänge deaktiviert/reaktiviert, entspricht das `LAN_X_SET_TRACK_POWER_OFF`/`_ON` am Booster. Beim 10807 dual BOOSTER kann auch ein einzelner Ausgang geschaltet werden. + +**Anforderung:** `Header=0xB2 0x00`, BoosterPort 8 bit + BoosterPortState 8 bit. +- BoosterPort: `0x01` erster Ausgang, `0x02` zweiter Ausgang (nur dual), `0x03` alle. +- BoosterPortState: `0x00` deaktivieren, `0x01` reaktivieren. + +Einstellungen nicht persistent. **Antwort:** bei Änderung [11.2.4](#1124-lan_booster_systemstate_datachanged) an Clients mit Abo. + +### 11.3 Decoder 10836 und 10837 + +Unterstützte Befehle siehe Anhang A; einige decoderspezifische Befehle: + +#### 11.3.1 LAN_DECODER_GET_DESCRIPTION + +Bezeichnung auslesen. **Anforderung:** `Header=0xD8 0x00`. **Antwort:** `DataLen=0x24 0x00`, `Header=0xD8 0x00`, `UINT8 Name[32]` (Codierung wie 11.2.1). + +#### 11.3.2 LAN_DECODER_SET_DESCRIPTION + +Bezeichnung überschreiben. **Anforderung:** `Header=0xD9 0x00`, `UINT8 Name[32]` (Codierung wie 11.2.2). **Antwort:** keine. + +#### 11.3.3 LAN_DECODER_SYSTEMSTATE_GETDATA + +Anfordern des Systemzustandes. **Anforderung:** `Header=0xDB 0x00`. **Antwort:** siehe [11.3.4](#1134-lan_decoder_systemstate_datachanged). + +#### 11.3.4 LAN_DECODER_SYSTEMSTATE_DATACHANGED + +Asynchron vom Decoder, wenn der Broadcast (Flag 0x00000100) aktiviert ist oder der Status explizit angefordert wurde. (Meldet sich der Signaldecoder nach 4 s nicht, kann gepollt werden.) Die Antworten von 10836 und 10837 unterscheiden sich in Aufbau/Inhalt und sind anhand von **DataLen** zu unterscheiden. + +##### 11.3.4.1 SwitchDecoderSystemState (10836) + +**An Client:** `DataLen=0x30 0x00`, `Header=0xDA 0x00`, SwitchDecoderSystemState (44 Bytes). + +| Offset | Typ | Name | | +|---|---|---|---| +| 0 | INT16 | Current | mA (Strom) | +| 2 | INT16 | FilteredCurrent | mA (geglättet) | +| 4 | UINT16 | Voltage | mV (interne Spannung 3.3V) | +| 6 | UINT8 | CentralState | bitmask | +| 7 | UINT8 | CentralStateEx | bitmask | +| 8 | UINT8[8] | OutputStates[0..7] | Status pro Ausgang | +| 16 | UINT8[8] | OutputConfig[0..7] | Betriebsmodus pro Ausgang | +| 24 | UINT8[4] | OutputDimm[0..7] | Dimmwert pro Ausgang | +| 32 | UINT16 | Address | Erste Decoderadresse | +| 34 | UINT16 | Address2 | Zweite Decoderadresse | +| 36 | UINT8[6] | Reserved1 | | +| 42 | UINT8 | Dimmed | 1 Bit pro Ausgang | +| 43 | UINT8 | Reserved2 | | + +```c +// CentralState +#define csEmergencyStop 0x01 // Not-Aus für Decoder +#define csTrackVoltageOff 0x02 // Die Gleisspannung ist abgeschaltet +#define csShortCircuit 0x04 // Kurzschluss erkannt +#define csConfigMode 0x10 // Konfigurationsmodus aktiv +// CentralStateEx +#define csePowerLost 0x02 // zu geringe Eingangsspannung +#define cseRCN213 0x20 // Adressierung gem. RCN213 +#define cseNoDCCInput 0x80 // kein DCC-Eingangssignal vorhanden + +// OutputState — Zustand des Ausgangs +#define oUnknown 0x00 +#define oRedActive 0x11 +#define oRedInactive 0x01 +#define oGreenActive 0x12 +#define oGreenInactive 0x02 + +// OutputConfig — Betriebsmodus +#define ocfgNormal 0 // Impulsbetrieb (default) +#define ocfgBlinker 1 // Wechselblinker +#define ocfgBlinkSm 2 // Wechselblinker mit Ein-/Ausblenden +#define ocfg10775 3 // Momentbetrieb wie 10775 +#define ocfgK84 4 // Dauerbetrieb (z.B. Beleuchtung) +#define ocfgK84Sm 5 // Dauerbetrieb mit Ein-/Ausblenden +``` + +- **FilteredCurrent**: Summe interner Stromverbrauch + Verbrauch an den Klemmen. +- **OutputDimm**: 0 = Dimmung deaktiviert (volle Leistung); 1–100 = min. bis max. Leistung. +- **Address**: einer Decoderadresse entsprechen 4 Weichennummern (Addr 1 → #1–4, Addr 2 → #5–8, …). +- **Address2**: =0 → automatisch „Erste Decoderadresse + 1"; sonst analog Address. +- **Dimmed**: 1 Bit pro Ausgangspaar (0 = nicht gedimmt, 1 = gedimmt/Auf-/Abblenden). LSB = Paar 1, MSB = Paar 8. + +##### 11.3.4.2 SignalDecoderSystemState (10837) + +**An Client:** `DataLen=0x2E 0x00`, `Header=0xDA 0x00`, SignalDecoderSystemState (42 Bytes). + +| Offset | Typ | Name | | +|---|---|---|---| +| 0 | INT16 | Current | mA (0 / reserviert) | +| 2 | INT16 | FilteredCurrent | mA (0 / reserviert) | +| 4 | UINT16 | Voltage | mV (Spannung an den Klemmen) | +| 6 | UINT8 | CentralState | bitmask | +| 7 | UINT8 | CentralStateEx | bitmask | +| 8 | UINT8[2] | OutputStates[0..1] | Ein/Aus-Status Ausgänge A1…B8 | +| 10 | UINT8[2] | BlinkStates[0..1] | Blink-Status A1…B8 | +| 12 | UINT8[4] | SignalDccExt[0..3] | DCCext aktueller Signalbegriff 1.–4. Signal | +| 16 | UINT8[4] | SignalCurrAsp[0..3] | Index aktueller Signalbegriff | +| 20 | UINT8[3] | Reserved1 | | +| 23 | UINT8 | SignalCount | Anzahl verwendeter Signale (2/3/4) | +| 24 | UINT8[4] | SignalConfig[0..3] | Signal-ID Konfiguration 1.–4. Signal | +| 28 | UINT8[4] | SignalInitAsp[0..3] | Index Initialisierung | +| 32 | UINT16 | Address | Erste Decoderadresse | +| 34 | UINT16[4] | Reserved2 | | + +```c +// CentralState +#define csEmergencyStop 0x01 // Not-Aus für Decoder +#define csTrackVoltageOff 0x02 // Die Gleisspannung ist abgeschaltet +#define csShortCircuit 0x04 // Kurzschluss erkannt +#define csConfigMode 0x10 // Konfigurationsmodus aktiv +// CentralStateEx +#define csePowerLost 0x02 // zu geringe Eingangsspannung +#define cseEEPromError 0x10 // EEPROM Schreib/Lesefehler +#define cseRCN213 0x20 // Adressierung gem. RCN213 +#define cseNoDCCInput 0x80 // kein DCC-Eingangssignal vorhanden +``` + +- **OutputStates/BlinkStates**: [0] LSB=A1 … MSB=A8; [1] LSB=B1 … MSB=B8. +- **SignalConfig** = Signal-ID (Signaltyp); **SignalDccExt** = DCCext-Wert (aktueller Signalbegriff). Werte siehe `https://www.z21.eu/de/produkte/z21-signal-decoder/signaltypen`. +- **Address**: einer Decoderadresse entsprechen 4 Signaladressen; der Decoder belegt 4 Decoderadressen = 16 Signaladressen (Addr 1 → Signaladressen 1–16, usw.). + +--- + +## 12 Modellzeit + +*Ab Z21 FW Version 1.43.* Die beschleunigte Modellzeit der Z21 steht nun auch Teilnehmern am Gleis, X-BUS und LAN zur Verfügung (Beschleunigungsfaktor ≤ 63). Die Z21 hat keine Echtzeituhr — die Modellzeit beginnt immer bei der einstellbaren Startzeit. + +- DCC-Zeitmeldungen am Gleis: siehe RCN-211. +- LocoNet: Clock Slot `0x7B` ca. alle 70–100 s pollen. +- X-BUS: Zeitmeldung gem. XpressNet™ V4.0 einmal pro Modellminute. +- LAN: optional per „MRclock" Multicast an `239.50.50.20`, Port `2000` (einmal pro Modellminute, mind. dreimal pro echter Minute). + +### 12.1 LAN_FAST_CLOCK_CONTROL + +#### 12.1.1 Modellzeit lesen + +**Anforderung:** `DataLen=0x07 0x00`, `Header=0xCC 0x00`, Data `0x21 0x2A 0x0B`. **Antwort:** siehe [12.2](#122-lan_fast_clock_data). + +#### 12.1.2 Modellzeit setzen + +Setzt Rate und aktuelle Modellzeit. + +| DataLen | Header | Data | +|---|---|---| +| 0x0A 0x00 | 0xCC 0x00 | `0x24 0x2B DDDhhhhh 00mmmmmm 00rrrrrr` XOR-Byte | + +- `DDD`: Wochentag (3 Bits), 0=Montag … 6=Sonntag. +- `hhhhh`: Stunde (5 Bits), 0–23. +- `mmmmmm`: Minute (6 Bits), 0–59. +- `rrrrrr`: Rate (6 Bits), 0–63. 0 = Modellzeit bleibt stehen (nicht empfohlen, besser [12.1.4](#1214-modellzeit-anhalten)); 1 = Echtzeit; 2 = doppelt so schnell; usw. *Die Rate wird persistent gespeichert.* +- `XOR-Byte`: XOR-Prüfsumme über Data. + +**Antwort:** [12.2](#122-lan_fast_clock_data) an Clients mit Abo. + +#### 12.1.3 Modellzeit starten + +Startet (setzt fort) die Modellzeituhr. **Anforderung:** `Header=0xCC 0x00`, Data `0x21 0x2C 0x0D`. **Antwort:** [12.2](#122-lan_fast_clock_data) an Clients mit Abo. *Der Zustand „fcFastClockEnabled" wird persistent gespeichert.* + +#### 12.1.4 Modellzeit anhalten + +Hält die Modellzeituhr an. **Anforderung:** `Header=0xCC 0x00`, Data `0x21 0x2D 0x0C`. **Antwort:** [12.2](#122-lan_fast_clock_data) an Clients mit Abo. *Der Zustand „not fcFastClockEnabled" wird persistent gespeichert.* + +### 12.2 LAN_FAST_CLOCK_DATA + +Aktuelle Modellzeit melden. Asynchron, wenn der Broadcast (Flag 0x00000010) aktiviert ist oder die Modellzeit explizit gelesen wurde. Bei laufender Uhr ca. einmal pro Modellminute, auch bei Start/Stop/Setzen. Übersprungene Zeitmeldungen müssen Clients tolerieren (ggf. anhand des Beschleunigungsfaktors selbst weiterrechnen). + +**Z21 an Client:** `DataLen=0x0C 0x00`, `Header=0xCD 0x00`, FastClockTime (8 Bytes). + +| Offset | Typ | Name | Wert | +|---|---|---|---| +| 0 | UINT8 | — | 0x66 | +| 1 | UINT8 | — | 0x25 | +| 2 | UINT8 | DDDh hhhh | Wochentag und Stunde | +| 3 | UINT8 | 00mm mmmm | Minute | +| 4 | UINT8 | SHss ssss | Sekunde, mit STOP-/HALT-Flag | +| 5 | UINT8 | 00rr rrrr | Rate | +| 6 | UINT8 | FcSettings | Einstellungen-Flags | +| 7 | UINT8 | XOR-Byte | XOR-Prüfsumme über Data | + +- `DDD` Wochentag (0=Montag…6=Sonntag); `hhhhh` Stunde 0–23; `mmmmmm` Minute 0–59; `ssssss` Sekunde 0–59; `rrrrrr` Rate 0–63. +- `S` STOP-Flag: Modellzeit läuft nicht (Fastclock nicht enabled oder Rate=0). +- `H` HALT-Flag: vorübergehend angehalten (Nothalt oder Kurzschluss am Gleis). +- `FcSettings`: persistente Einstellungen, siehe [12.3](#123-lan_fast_clock_settings_get). + +### 12.3 LAN_FAST_CLOCK_SETTINGS_GET + +Auslesen der persistenten Modellzeit-Einstellungen. **Anforderung:** `DataLen=0x05 0x00`, `Header=0xCE 0x00`, Data `0x04`. + +**Antwort:** `DataLen=0x08 0x00`, `Header=0xCE 0x00`, `FcSettings | Rate | StartDDDhhhhh | StartMMMMMM` (je 8 bit). +- **Rate**: 0–63 (0 = kann nicht laufen; 1 = Echtzeit; 2 = doppelt; usw.). +- **StartDDDhhhhh**: Default-Startzeit Wochentag (3 Bits, 0=Montag…6=Sonntag) und Stunde (5 Bits, 0–23). +- **StartMMMMMM**: Default-Startzeit Minute (6 Bits, 0–59). + +```c +#define fcFastClockLocoNetEn 0x01 // Ausgabe am LocoNet (polled) aktivieren +#define fcFastClockXBUSEn 0x02 // Broadcast am XBUS aktivieren +// 0x04 // reserved +#define fcFastClockDCCEn 0x08 // DCC Broadcast am Gleis aktivieren +#define fcFastClockMRclockEn 0x10 // Multicast an MRclock clients aktivieren +// 0x20 // reserved +#define fcFastClockEmergenyHaltEn 0x40 // Modellzeit beim Nothalt autom. anhalten +#define fcFastClockEnabled 0x80 // Fastclock ist aktiviert +``` + +`fcFastClockEmergenyHaltEn` pausiert die Modellzeit bei Nothalt/Kurzschluss. `fcFastClockEnabled` ist das Enable-Flag (wird auch indirekt über `LAN_FAST_CLOCK_CONTROL` durch Start/Stop geändert). **Werkseinstellung:** FcSettings=0x4F, Rate=1, StartDDDhhhhh=0, StartMMMMMM=0. + +### 12.4 LAN_FAST_CLOCK_SETTINGS_SET + +Überschreiben der persistenten Einstellungen (Parameter je 8 bit), `Header=0xCF 0x00`: + +| DataLen | Data | Wirkung | +|---|---|---| +| 0x05 0x00 | FcSettings | nur FcSettings | +| 0x06 0x00 | FcSettings, Rate | FcSettings + Rate | +| 0x08 0x00 | FcSettings, Rate, StartDDDhhhhh, StartMMMMMM | FcSettings + Rate + Default-Startzeit | + +Feldbeschreibung siehe [12.3](#123-lan_fast_clock_settings_get). **Antwort:** keine. + +--- + +## Anhang A – Befehlsübersicht + +### Client an Z21 + +Diese Meldungen können von einem Client an eine Z21 oder an ein zLink-Gerät gesendet werden. Spalten: **Z21/Z21 XL**, **z21/z21start**, **Booster (10806/10807/10869)**, **Decoder (10836/10837)**. + +| Header / X-Hdr / DB0 | Name | Z21/XL | z21/start | Booster | Decoder | +|---|---|---|---|---|---| +| 0x10 | LAN_GET_SERIAL_NUMBER | ✓ | ✓ | ✓ | ✓ | +| 0x18 | LAN_GET_CODE | ✓ | ✓ | | | +| 0x1A | LAN_GET_HWINFO | ✓ | ✓ | ✓ | ✓ | +| 0x30 | LAN_LOGOFF | ✓ | ✓ | ✓ | ✓ | +| 0x40 / 0x21 / 0x21 | LAN_X_GET_VERSION | ✓ | ✓ | ✓ | ✓ | +| 0x40 / 0x21 / 0x24 | LAN_X_GET_STATUS | ✓ | ✓ | ✓ | ✓ | +| 0x40 / 0x21 / 0x80 | LAN_X_SET_TRACK_POWER_OFF | ✓ | ✓ | ✓ | ✓ | +| 0x40 / 0x21 / 0x81 | LAN_X_SET_TRACK_POWER_ON | ✓ | ✓ | ✓ | ✓ (4) | +| 0x40 / 0x22 / 0x11 | LAN_X_DCC_READ_REGISTER | ✓ | ✓ | | | +| 0x40 / 0x23 / 0x11 | LAN_X_CV_READ | ✓ | ✓ | | ✓ | +| 0x40 / 0x23 / 0x12 | LAN_X_DCC_WRITE_REGISTER | ✓ | ✓ | | | +| 0x40 / 0x24 / 0x12 | LAN_X_CV_WRITE | ✓ | ✓ | | ✓ | +| 0x40 / 0x24 / 0xFF | LAN_X_MM_WRITE_BYTE | ✓ | ✓ | | | +| 0x40 / 0x43 | LAN_X_GET_TURNOUT_INFO | ✓ | ✓ | | ✓ | +| 0x40 / 0x44 | LAN_X_GET_EXT_ACCESSORY_INFO | ✓ | ✓ | | ✓ (3) | +| 0x40 / 0x53 | LAN_X_SET_TURNOUT | ✓ | ✓ (1) | | ✓ | +| 0x40 / 0x54 | LAN_X_SET_EXT_ACCESSORY | ✓ | ✓ (1) | | ✓ | +| 0x40 / 0x80 | LAN_X_SET_STOP | ✓ | ✓ | | ✓ (5) | +| 0x40 / 0x92 | LAN_X_SET_LOCO_E_STOP | ✓ | ✓ | | | +| 0x40 / 0xE3 / 0x44 | LAN_X_PURGE_LOCO | ✓ | ✓ | | | +| 0x40 / 0xE3 / 0xF0 | LAN_X_GET_LOCO_INFO | ✓ | ✓ | | | +| 0x40 / 0xE4 / 0x1s | LAN_X_SET_LOCO_DRIVE | ✓ | ✓ (1) | | | +| 0x40 / 0xE4 / 0xF8 | LAN_X_SET_LOCO_FUNCTION | ✓ | ✓ (1) | | | +| 0x40 / 0xE4 / Group | LAN_X_SET_LOCO_FUNCTION_GROUP | ✓ | ✓ (1) | | | +| 0x40 / 0xE5 / 0x5F | LAN_X_SET_LOCO_BINARY_STATE | ✓ | ✓ | | | +| 0x40 / 0xE6 / 0x30 (0xEC) | LAN_X_CV_POM_WRITE_BYTE | ✓ | ✓ | | ✓ | +| 0x40 / 0xE6 / 0x30 (0xE8) | LAN_X_CV_POM_WRITE_BIT | ✓ | ✓ | | | +| 0x40 / 0xE6 / 0x30 (0xE4) | LAN_X_CV_POM_READ_BYTE | ✓ | ✓ | | ✓ | +| 0x40 / 0xE6 / 0x31 (0xEC) | LAN_X_CV_POM_ACCESSORY_WRITE_BYTE | ✓ | ✓ | | ✓ | +| 0x40 / 0xE6 / 0x31 (0xE8) | LAN_X_CV_POM_ACCESSORY_WRITE_BIT | ✓ | ✓ | | | +| 0x40 / 0xE6 / 0x31 (0xE4) | LAN_X_CV_POM_ACCESSORY_READ_BYTE | ✓ | ✓ | | ✓ | +| 0x40 / 0xF1 / 0x0A | LAN_X_GET_FIRMWARE_VERSION | ✓ | ✓ | ✓ | ✓ | +| 0x50 | LAN_SET_BROADCASTFLAGS | ✓ | ✓ | ✓ | ✓ | +| 0x51 | LAN_GET_BROADCASTFLAGS | ✓ | ✓ | ✓ | ✓ | +| 0x60 | LAN_GET_LOCOMODE | ✓ | ✓ | | | +| 0x61 | LAN_SET_LOCOMODE | ✓ | ✓ | | | +| 0x70 | LAN_GET_TURNOUTMODE | ✓ | ✓ | | | +| 0x71 | LAN_SET_TURNOUTMODE | ✓ | ✓ | | | +| 0x81 | LAN_RMBUS_GETDATA | ✓ | ✓ | | | +| 0x82 | LAN_RMBUS_PROGRAMMODULE | ✓ | ✓ | | | +| 0x85 | LAN_SYSTEMSTATE_GETDATA | ✓ | ✓ | | | +| 0x89 | LAN_RAILCOM_GETDATA | ✓ | ✓ | ✓ | | +| 0xA2 | LAN_LOCONET_FROM_LAN | ✓ | ✓ (1)(2) | | | +| 0xA3 | LAN_LOCONET_DISPATCH_ADDR | ✓ | | | | +| 0xA4 | LAN_LOCONET_DETECTOR | ✓ | ✓ (2) | | | +| 0xC4 | LAN_CAN_DETECTOR | ✓ | | | | +| 0xC8 | LAN_CAN_DEVICE_GET_DESCRIPTION | ✓ | | | | +| 0xC9 | LAN_CAN_DEVICE_SET_DESCRIPTION | ✓ | | | | +| 0xCB | LAN_CAN_BOOSTER_SET_TRACKPOWER | ✓ | | | | +| 0xCC | LAN_FAST_CLOCK_CONTROL | ✓ | ✓ | | | +| 0xCE | LAN_FAST_CLOCK_SETTINGS_GET | ✓ | ✓ | | | +| 0xCF | LAN_FAST_CLOCK_SETTINGS_SET | ✓ | ✓ | | | +| 0xB2 | LAN_BOOSTER_SET_POWER | | | ✓ | | +| 0xB8 | LAN_BOOSTER_GET_DESCRIPTION | | | ✓ | | +| 0xB9 | LAN_BOOSTER_SET_DESCRIPTION | | | ✓ | | +| 0xBB | LAN_BOOSTER_SYSTEMSTATE_GETDATA | | | ✓ | | +| 0xD8 | LAN_DECODER_GET_DESCRIPTION | | | | ✓ | +| 0xD9 | LAN_DECODER_SET_DESCRIPTION | | | | ✓ | +| 0xDB | LAN_DECODER_SYSTEMSTATE_GETDATA | | | | ✓ | +| 0xE8 / 0x06 | LAN_ZLINK_GET_HWINFO | | | ✓ (6) | ✓ (6) | + +**Fußnoten:** +1. z21start: nur mit Freischaltcode (Artikelnummer 10814 oder 10818). +2. z21, z21start: virtueller LocoNet-Stack (z.B. bei GBM16XN mit XPN-Interface). +3. ab Decoder FW V1.11. +4. Decoder: Signallampen wieder einschalten (nur 10837). +5. Decoder: zeigt Haltebegriff, wenn in CV38 das zweite Bit (0x02) gesetzt ist (nur 10837). +6. Wird vom 10838 Z21 pro LINK beantwortet, nicht vom Endgerät (Booster oder Decoder). + +### Z21 an Client + +Diese Meldungen können von einer Z21 oder einem zLink-Gerät an einen Client gesendet werden. + +| Header / X-Hdr / DB0 | Name | Z21/XL | z21/start | Booster | Decoder | +|---|---|---|---|---|---| +| 0x10 | Antwort auf LAN_GET_SERIAL_NUMBER | ✓ | ✓ | ✓ | ✓ | +| 0x18 | Antwort auf LAN_GET_CODE | ✓ | ✓ | | | +| 0x1A | Antwort auf LAN_GET_HWINFO | ✓ | ✓ | ✓ | ✓ | +| 0x40 / 0x43 | LAN_X_TURNOUT_INFO | ✓ | ✓ (1) | | ✓ | +| 0x40 / 0x44 | LAN_X_EXT_ACCESSORY_INFO | ✓ | ✓ (1) | | ✓ (3) | +| 0x40 / 0x61 / 0x00 | LAN_X_BC_TRACK_POWER_OFF | ✓ | ✓ | ✓ | | +| 0x40 / 0x61 / 0x01 | LAN_X_BC_TRACK_POWER_ON | ✓ | ✓ | ✓ | | +| 0x40 / 0x61 / 0x02 | LAN_X_BC_PROGRAMMING_MODE | ✓ | ✓ | | | +| 0x40 / 0x61 / 0x08 | LAN_X_BC_TRACK_SHORT_CIRCUIT | ✓ | ✓ | (4) | (4) | +| 0x40 / 0x61 / 0x12 | LAN_X_CV_NACK_SC | ✓ | ✓ | | | +| 0x40 / 0x61 / 0x13 | LAN_X_CV_NACK | ✓ | ✓ | | ✓ | +| 0x40 / 0x61 / 0x82 | LAN_X_UNKNOWN_COMMAND | ✓ | ✓ | ✓ | ✓ | +| 0x40 / 0x62 / 0x22 | LAN_X_STATUS_CHANGED | ✓ | ✓ | ✓ | ✓ | +| 0x40 / 0x63 / 0x21 | Antwort auf LAN_X_GET_VERSION | ✓ | ✓ | ✓ | ✓ | +| 0x40 / 0x64 / 0x14 | LAN_X_CV_RESULT | ✓ | ✓ | | ✓ | +| 0x40 / 0x81 | LAN_X_BC_STOPPED | ✓ | ✓ | | | +| 0x40 / 0xEF | LAN_X_LOCO_INFO | ✓ | ✓ (1) | | | +| 0x40 / 0xF3 / 0x0A | Antwort auf LAN_X_GET_FIRMWARE_VERSION | ✓ | ✓ | ✓ | ✓ | +| 0x51 | Antwort auf LAN_GET_BROADCASTFLAGS | ✓ | ✓ | ✓ | ✓ | +| 0x60 | Antwort auf LAN_GET_LOCOMODE | ✓ | ✓ | | | +| 0x70 | Antwort auf LAN_GET_TURNOUTMODE | ✓ | ✓ | | | +| 0x80 | LAN_RMBUS_DATACHANGED | ✓ | ✓ | | | +| 0x84 | LAN_SYSTEMSTATE_DATACHANGED | ✓ | ✓ | | | +| 0x88 | LAN_RAILCOM_DATACHANGED | ✓ | ✓ | ✓ | | +| 0xA0 | LAN_LOCONET_Z21_RX | ✓ | | | | +| 0xA1 | LAN_LOCONET_Z21_TX | ✓ | ✓ (2) | | | +| 0xA2 | LAN_LOCONET_FROM_LAN | ✓ | ✓ (2) | | | +| 0xA3 | LAN_LOCONET_DISPATCH_ADDR | ✓ | | | | +| 0xA4 | LAN_LOCONET_DETECTOR | ✓ | ✓ (2) | | | +| 0xC4 | LAN_CAN_DETECTOR | ✓ | | | | +| 0xC8 | Antwort LAN_CAN_DEVICE_GET_DESCRIPTION | ✓ | | | | +| 0xCA | LAN_CAN_BOOSTER_SYSTEMSTATE_CHGD | ✓ | | | | +| 0xCD | LAN_FAST_CLOCK_DATA | ✓ | ✓ | | | +| 0xCE | LAN_FAST_CLOCK_SETTINGS_GET | ✓ | ✓ | | | +| 0xB8 | Antwort auf LAN_BOOSTER_GET_DESCRIPTION | | | ✓ | | +| 0xBA | LAN_BOOSTER_SYSTEMSTATE_DATACHANGED | | | ✓ | | +| 0xD8 | Antwort auf LAN_DECODER_GET_DESCRIPTION | | | | ✓ | +| 0xDA | LAN_DECODER_SYSTEMSTATE_DATACHANGED | | | | ✓ | +| 0xE8 / 0x06 | Antwort auf LAN_ZLINK_GET_HWINFO | | | ✓ (5) | ✓ (5) | + +**Fußnoten:** +1. z21start: vollfunktionsfähig nur mit Freischaltcode (Artikelnummer 10814 oder 10818). +2. z21, z21start: virtueller LocoNet-Stack (z.B. bei GBM16XN mit XPN-Interface). +3. ab Decoder FW V1.11. +4. Kurzschluss wird im entsprechenden Booster-/Decoder-SystemState gemeldet. +5. Wird vom 10838 Z21 pro LINK beantwortet, nicht vom Endgerät (Booster oder Decoder). + +--- + +## Abbildungs- und Tabellenverzeichnis + +**Abbildungen:** 1 Sequenz Kommunikation · 2 Sequenz Lok-Steuerung · 3 DCC Sniff bei Q=0 · 4 DCC Sniff bei Q=1 · 5 Sequenz Weiche schalten · 6 Sequenz CV Lesen · 7 Sequenz Rückmeldemodul programmieren · 8 Sequenz Ethernet/LocoNet Gateway · 9 Sequenz LocoNet Dispatch per LAN-Client. + +**Tabellen:** 1 Meldungen vom Client an Z21 · 2 Meldungen von Z21 an Clients. + +--- + +*Konvertiert aus „Z21 LAN Protokoll Spezifikation", Dokumentenversion 1.13 (06.11.2023), Herausgeber Modelleisenbahn GmbH. Diagramm-Abbildungen des Originals sind hier nicht enthalten und im Text als „(Abbildung …)" referenziert.* diff --git a/src/api/z21-lan-protokoll.pdf b/src/api/z21-lan-protokoll.pdf new file mode 100644 index 0000000000000000000000000000000000000000..235cd09878b9ea6dc567aa13238e90d147c00c70 GIT binary patch literal 1694853 zcmce;WmsIz(k>h?&HEVU(-L+b(YgHFFg^Zvu9V0y(3L-@n_zwk<5x@Yj)H6jvHy~7VqgHsg%xt)c)Bn#KrX-E zP!7NZslo&iV0uy;z{CP6gUB&G=?7qXQU$;SL1BiVFhfw7At=lc6v)d1m?0?45ENzz z3Nr+S8G-_WpnxDKAP5Qwf&zl*0)n7`ASfUR3J8J%f}pTKP*@-+ED#hH2nq`Xg$07b z0zqMcps+wtSRg2@5ENDj3M&MK6@tPFL1BfUutHE+At;Qj5P3#6h$JH$M3j*YBFo4I z5oUypGk_5?rT|9vKlRxEl(YZA9dXe}<9?GKiXhf1Yi>q5fsIf!6?dhT8pE1agM9mi9K_`3j!o zLQZxf@^-p*hTz{K@+^R-{sRAE1w3^bc;X9NTG)XLg&6@)+5?4|01*AbWh&BoriS{z zi^a^rtBeEi)Un_K85>J|c|$vOAb6Dm6%3v1AQku_7Xipc?6>CNg=Ju(%WvtV4py82 zz{0^o4}L9n5Fe+&;Kvp}X7i<9x|J-4}f&c0-VG}buLmQy58Ms3P4fQPz z41tn{7RGiT0qksSzlCh=Yz%eHQ4pPy8sjWK&5NRUEhC*1Z)Pcsm>T~AMtMe7HpWzD z&RC6%;57+e#&<*vD<0Ll-6kp)`%o@*MU=}mJFv2R@`1_wBOpMkQSa5BC@5|zT`o6XrGy^;Jynt zK8_&KbbrC)t~Gq?=6vC5ixPX0G5;kW&;2OjRf*lN@(cTgM8yw_OQ2Ru z@9Z1W!b+mm5-7{(+$h6zB z_NCFAoxb6zCnF{A^~m;`zCI) zO#K=oNpI}Yo!wHP=~Wn4-(ID$1{&;}xY4v9uiak)aEsyPnrG>!L;NaGBfQhA{4L(* zwzX@rOYb1}=E!{NjuLCs6XW?{OQ|Ss5;m0+S$x!B{zI^FxBk&JKpZ#IE;!MTFU5WX zJ^wnwWwKF^UodYzyHI2FQp)B9j^|fKvpZvk9;4JGadLa)TMl-s(zRlW?@bkE2E7#C zhM{6D=O9y+i~`!o^<0YgciZ~p%g&j^nbbgYOdkbSktCbX25@<|GKE_Jy34N?q^0{__`hm)NP^hE`R}p<@ch>hrr5G#n@lojlq=O#24wHi=84(8h zSJrCH)8{sf^rY5m-P02}p>M;-)tai==_#z$`lsiZ3q%kk)^AQ9gOZSta($4s^$z=Q zsnLgwk5=`TFBYX7)%(^iw{DO9pnqgmtBmr>q1~Kmp4nH-Eg+{Nxs^)`oxmukqhg4( zbQg*Qs^R@|Ne?!zV=e z!Q1seul3(H?SB*!;QPDKZ?pF|q2Cq}C~vQ4_uI=*0J{fI?SIfUHw0TrAiu7y;ZqGh z8xvhKDFvXA1=x_7SQrD9O)U5@*HphnMN?_@y>ikc}pAIYy_}vx&ylpc4 zZsza%+V7p^Z*TZ#@A;2`c-ny=odjTH1p)uG%mG&3(#+CE-bz>B@E=sgq zz|!2x(&G0!vjfGzTaAsC#x4FAK zfC?~`q#U>OHC*osQM(!z6`fA^vLojFpDyD&N!MP>e%}%j5?G@K1_s^=Z4SgoGDqF( z)@l^Dr59>7x~#VOjM@9ksH(ov^n3 z^!o9Et7H4Ib!#~F3$M0_h={9eL-)G#!);ad>@!guEG#c9^P2f+G}NkQ=QD6a%mD!b zwWR2RA|lGl%4}?Gu8mso?`L1JySETtL#v{opxj*@Y1iBB1QRgJ$;s*I>rdtovRM!r zV!9|5YXltbw)>&sgd!WWWBc>6W3{!n52wD9o{Nl$i5bt4Ha0L|kj$vtTkj70-rk<0 zxZ0!L^f@3XNPmWwaKMPUPUTS85NX$Esqaq+fJ-+s_%GaS^%^Bwu>5Is=~i(>v$j2%KFyxM`| z9jCj?qSIE#qou)WSu-&SiMx`GFJHbSJ)i8e7ZXFEXOOfn)@-7qXOO4149nqnop{>0lU-!5i4}%F=5bGkz<7B$~-TJjC7 z_R(JPrlDm8<4@1d&el2|D~>EJ(E~^+7?OEEUo#YUMMPkB_?Kukk`ar3-5VQ|)4&4H z-N8gQ=WhL;#Rf+VLrx;p4i&Io3|qKDO1_Zi#k}b+G(=80bUW!H17i$w<_RVwt`?m>*?1oUaM9vD>`<%p2Cd z?$Geb)YRc%uF9}KCNMB?w!&EYUhMZ0)6*N1#>B*2TL&+jS78>=GT^sQkpHpwlFcFw zNu%0~K+oNeB#tJP+u5eo6OMp@pp@T^Gnq9J<;y2pED|0UK{X$pX$CYt?d&3@Pa|KH zemFngbG$_$Mtwogp!`D%Xu?6J*`7mAK>?>poJ3V?jnOhumYWMt9L;7_K_D9?It>R0 zx4j#cnq`QjVTk_DAi!Wag~z|%yDqzqoDB#JdsKv>@vx`m%wb63arLE^3f_BxMv`X9 zFZ$tw@PyC${%l2UIGM+XwtOPlfC-kK5X(Xq9fkg+sl)eAD)89SFDe{s5QgRGqQ$@x9&MxTxOti)!=v zkt`f+Z1|z1i%Cgu4O3)gW&Mq#w)sjB+uPdq z9b8pa2@1WCt-Uw}re%PGK4>QZ7_5QXrE z^Ggr#l}c?;V(|sL?_0z&dKW3(tcv^l`>POxeFOHu2It(@(!e0I8kpK$S6o;)!N82_ zGF?2$pm19-VUYdA#c;tjXjZfA(3AM6eRx~V^ zeyHxPbd1zCxm?g>NVw@3&P`5cnIC}LVl$u1w71e5DQ?sP-cqnKygIx2tQPx-2F7ul z2EA-zVPR35egJ}RS2&rOu|{9Lb8&?u7-Bgb^qBLsHLp^`cz{}Y?UC0oC4>gGrDkbd zNC?~DD>S9e*|L5D%lXx|@$-!hO3^C%z8V!a4h|gW`!hT@UqFXuiCUF-y^@!m`CDqu zmusl%aG9T?zwU`eQl5xXAn&MAj8&C|7iWE95uNVx9IGOI43&WbKV6wacW2K3YFC80 zGp8a`Kh)Q^_DvjrtV+CvWw2<)<$b*pLM^Y&Mo)%N&?CcJumMK4OZ)NT^P0c!*u`=g z+(h$#>iRx?e*euE`tLkarvJkurQ^3WGx)!7OCdpu|CL_~iQxRRU-~5cFRK2Rj_F^z z{hPc~HjaPxPQi}r?|%B@owEIp-YMJPyi;&6?Z5F(pW=3Zd(YoNzW*m-7oadRfbl6B z0uFEd{}_OQ1gZW_5tzSyl|3Q<)p`H5%MAjtv;W=Y{;45hxgd<$gf!y5y*|L7F=NJy z$Mm4z`C=h=EddhPOGL?pEX_8K?ZJ(?J$00g4dvYD+9Yh_Ga+}DqmZ{KmV zJKN%v-rOF4t+-ijWnAdssV4-6p3KcIqoOr&aO;$8e3u5L1Dn`6it^8mzDdpcMeeN~ zc1P}|9+gL4?R<{UnJn*-E@q8HL`^o{0ns+!M>Mj#z7Z27v*BnEIVFv7oPBxoIqXX( zDp{D2$B`h0Ixz|CX{`3IyUXL1-Q#CdzO=UM>}vxo#Rr{Lua6TdI>h)Lc)VEpE*OW% zro}$rOuV*(b~b|B*b4MRBWHd5rs;0)bi7N5x0tx_s_xQJ6)9_bop?$|z=zxU%bD)E z*OerFNR<9Cf*#CIH1eUP(6H~LJ2S5u_1E=>M2>zA+kAd2EM%C7Ltne@N~wf+x559$ z4y!I~ef|9y_Xpvc^=H3YZWl+RHGUBj4e@$m$DDQ`OSb@jh$XbJXRF)JbGvE;QZt_1 zYv8zfCLQ^250l3V>Kr}vUYy$Vt<^%wp{HOyACUGww-kM?#}?7k+ewpbjKD=37i|dZ zVXW}h0U0f9wH9P-r0LCv&gJ&ewY%`Pw#DAtGO~(leLN^5KQNj@u#rAc+>iQG5O&$R z?_Cf#ZKmI`$jkYLlz_QJH9q|;nO!Iwf;OuNfU`(VfPLGwh%?nICfcHp#c}uH-Dy%>VozQAg0P<#v~71}v!;JR z%7qY8USFAP!G41Yn-hQ66rWZL#WkxeSDCcbd*t2MekWlf*pC@AoF>DL{KJ>5Q;fdJ z8jD#RuyOsdc*X-f&WW40tO-WlIn(;{q^~1_{2Q0m1@N>NptVWPHh#KM>2vSu?W+?Q z{umwPzg^mOc=P?}_G41;j5B8e>&<5#RFNIw6!j8I+?qs|`*Mr+GH&d+>pfC-%NZ1V z!>Gr_9~D7BMrv(cGR;USYTS(cfqN$gwJd$8vdJ^y*p<+rHyU#r z;@zv%>Y?O_T~6GoJ+yMyRXwEXnTgBK@YSR?+J{!3ef0@j*;##qW=Ii+FhQ7_0-}3m zxiTAP*vir}igK?HCC%$;Y{eaiHUEm`3wIpUPaI7jT5(GcsOWhyH={6$`(qJ#$zyEK za4LFqkqsoLuRq=pl3Hd+eNv0;oq~5&dQG!A>!!uTMx!w&j z-2+LgqSCKUAWi5<^UYy~|KW^o5-(dPA>MX zq4LQmD0&bZzKU#AWE4{ut`Hdv%V_pooNbIvQmV(q4)cgYp`2z&%_%cii&A{5Ky;HH zOK`j-xQZ*{tFGK%;M_;nKn=+9SS1PVcs2FSyO){RlHsj36BRDyuS+`9Bb5EsjJCx) zZ>{f=XS*bdY1D?#yb3n=W5jt^mN#{}-@@T6rH!Tqk+DFbc@(cGPu!pqC!_&Ay=W_& z+%wGk3LZwkP!0;DL}hbEyUT$xKWinn6CEXe{r1xwNI}3OLHi{R=R$yT4yyS18N1uI z;N7I}88VO5dW-sx$Wh7Bf~fuF>#Hxm*J^nCYR8Wb7A^6nPUG%1y*{!!dF4W9_?NlSxdXBOlCoO_MEOeQ#Z8+;ix3-bRM<%X_{+NcPP_H?EMH@;>1k#ogDr^j3oge;h7`- zB_2B&Z>^O}QDy1u))a_M(3L;hzNgJ4DP`y5vkSedD)*ygzI~q3Aoix*bS_#rew^=4(+zZ_G3+rF3L9Kr4Y6IrMVCl_qhF0mj>b zJr+QHr?z8$kFT?-18h}_>p&$_k7*({>vuU3+H)CtZZ9svAy;VrVSRYWqlqbqGy zxysbOsv^AXZ;WyKKB2H%v%tqsaY&W1ljRUr^a(m-MS5?s5TBrsWaa&BoYscHsCE@XubX_jnzG7zo;Kd< zAZtY>ewoPtWV^vOUx#w=xNAU1`8iq~a6Ml|e(WqIgy5q?oZ)P-aokhs&C8Rmo2c!v z#i@1vw#&?}IYnn6B$@iUna^agfEYQ;KC;4VEO$d3jvRSHQeA7EF)F~#(=~__eR8(e z(-{`p_mrjy+h-=0@1@0p+y`ayu;ezX%^*yD@BIBdZaM`TTq$>>(62^C{WvtfN;GtS zD)HntE@t|9Qc@p>s9VA_%TGy_v#|E?Ri0h{q%0$1L|%I-Jh6o~k=yP?d{I4|`)c2T zD9lZr%|j{nbl=ge_Q*Ru;EwmuY$m1h)eBAdGBo{m)~tt~BTxJs`xL8!pjiBE1YlH< z0^0$l0H^*e@^6F)>T!z%ZD5aXk2N#nh!CaLB zlWe32Y!*hgPH{VVTxI1C7m6b#ksC+qCpEG+H{U}`B~YvahNh2UL5e@qW9Q!(Y5}ba zUUAKY!u~+gkEmi>(pMLx(J!)Uu68oNNK4odK@1cr8p^)7xo_uG>h4pLx_qc0x`qpfq=s^88z*71q%gvXRnp!XARtQY3iZ(eSYk#ay(ycq=MKrk>fF^CkeSi$_ZTcm~|GF@@j>=%kzl zcj5x2eS4Ur1iW(79>tp4o)>H|tc5>A5kw!#U>hy+Q(mEPR&6!#;W6AGu_~e@p-w8W zgfp`$7WvKKYe_R$jh486YW_?mTbLRbw~LkGOU#2A;AEj`Ju^#=;i~y@eX>@O!2<2Y zmwaZ)#f&(fiA54POLdlS{AlD=3sTGRkpT(6zANF3&$xx4+w?b&!B>s8RtIiz2{f4$ zOho3bV%xdDdRde;Uj;N1E^*jId~xbU=6Ti8u%|t4GmiYV#&-RxO7u-krB-LrRf#+` zc3mz=cxxUeSvolJ`^pTOmF7$`bJ>sVLUf#QADD~;rTXYNMVMfn+7IDz-m~4Pe#x!q zd~5z&jI8_EzQ^QNR}I0M=JxS>^?UZ&iUG&nN@a}g7z!ZXJ_pMS1=PHiPx(wGtS&>0 zv}~Zs`e=teP|E1a2Urf8k60vTYGRk#xhIBk0g_B6M#<_hBY~qaSefEy=FE+WHNvb{ zIVCJJ@ob)biJW{wC}HVIVesh(Wz#ceqas{dhGR2$`6U|7DjvUPnkI5|Pm6}(3lq!y zUL1s4FF1cvIYwP}f#0J+XI-PZumx!p<;d_+%3tq4OYsQ6Zccv46Cbm$F8rcetxm#| z8Pur4Njh}l1IHxzn3@&;5`Hp~XUpzHI>??dIUHe5H-udqUz z(D#`}k;zX={ zEoy&zUH-mq-u-)=t+V06VCz(kKI_z$b}bc=g~ol<0}===J=rcHSMR7iKgBcF&t}ik z_Vl&Kd0)%7FI9FtZ?v)M7F#2dp`hn~c+=k&y!*71E@==V@hgQa$3#3w|8V`H+zlp~ zH!XnwHkf2L`Y@p;=upMF?AN2rws%`4jV1*Zn&`4_>*@Cgn@UOgFC|+R4xHSUGuz}f z?njD3Hf*}yhnwZOhFrAnb?|#!l2t_wdZcVhmsD`u{EnLNdm6hLPx#g8dLF3I@v~gy z?i329o1$w^q1rl>U(pg&3wFSitar}V2=N5T^f>uPf5hiqR#HT8bd(dl;8dnmtje@Z z;?Bx6p7_+6P}nx}u2o1x;ZW%G5-Y~LJyyRVmPa8Z@y;TwBtQi~mDF<}Q7k{}OLu1t z+;Iu8Gk*5Dz0Av(_>N~M%#Fs(za^yj(@JIbuQ=flc=LANF1k^JW|%70F)c{(5e?_!k9|7VO6aw`3Q6QzVC zF8vp$=SL4gjA}bNuT$I^)0OK>XVym4C%2|B)&N6b1oUpYj|2O)*P8 z3kyp-aMmOwV-B1r_P@*`1NY7EG|+!f8X42y=FmT5MiX5H}8yguN+yvM!R&9kx>xy zE#rHE^n7=i)-R(f*Zb}3PTHpWde?jZ!eWwloSs08{9FoaT9f5pnX`@4m%^LxI_V8Tlw=>P&R@nY-1h!7svHT@7O3#fdE58nyp?x9wi%MsfQKgLml> zQLYvjZK?moapHZ16C7*N?Jhmra1=a-J$;INPU(wK9L2MnmHOvPS5CFmn%xZ<8<^=C zLW9bM1>SCvfWh75XB>~W?VXd=>O2jahC9!Naqg zPB+|{JD`Z?J+o^)d_+LBxqHKvpSD3i!Zp&87HH|nFH0LO6}bPlg`q(Oa5L)Nx<<4} z!NZc3WsHoC)g-NmALuVsmu#*^L%5^xZw0UF=%np^h+I& zi%pZ5IzP=7=Nrz^F_~9ppT8l09>u}g80f<{F$;chrP65hTg+C|UVNy`o1S*Os!1)b zDB*~zN~0%|6cqI{3J>kBf72;PWJhm|i&T5Kw)ex+a>8B~!LRVpTff>=h0hd9_~TJ{ z|IuT+bdHlIar3^b=1%BTveUbPn%!*lx9d~JnEI#zJ{$~Vrd#rP#$FzTf<_T>ymU_=^O5T19*ej7TVvUB&Sc z$#V#ngGKrvd-0jwZ$~LOwAADii{yNA>5q+E^Ul-;l%1(x-hS!?pcS2DgifoV#We~^ zxi%zm+z={rr`B5EoT_vFqV*k$j`i7X-83on3C&+Dy1jO*Q0BxigsoocO1>Bcg^wsh z2s4ARYpDbkej&H}h$wTI!Zf<%3WFJZk=nV=qtR&&2!(fst!fwV$Y)k;vqa9%vZ2l2 zk$#O=t!pl!Dt1FT+<&Lk-bC; zJoY@3;N$TAO)BgJ7_`pMJNbNS;?79K%F8x=m zQ{>0AO|+kG467@QK>voRtL=L=XnN_2G%CKJ zYr%K@XiXUI+#X6zi!vF!E>)yINAN#C+-iY<%3EA#NFW>A3R1yG%H}JQ$E)Th>)0`A zjA!KLva_(^cwIfJAif>^%@^W=-G;!_W-W7g&0n*kTB=kbpbw@(W5c>+TcxFjZbAr@e72xt^40_Cp$0>O)^NOAqVYMgVESYt*ge_BTxlkv8$GwrX zC}T=*kOo5wud=-K)5>WAk7OMEcyR?XbkV+Yz+`9Zd2Y?adY`a` zsV}Z~eH=b8fW8#HQeHrzE}D2Z1*d!t$Sz8wYfJy8E8MH1N|A|B#uTVLDipUixJA+R znfdMfq?Us;A>Q06pCl~ZE0i2_zmZ%;xB2d6m62P%1?j?9NvJCR`3I>y2H91~&nI^2 zUo$IDQ014c1bWpv~UaTdehq`VqXyVs%E7e_fw* zowUySf&yVP7^v1#?*$0IYz;R%pXv#m*EG$1wI1vJNtAh$=1wEKtf3*cvw47DFqctg z|CZ8a5RLOBKYRN}hTF+cjt#oi>5>kSlFs20K83MzH@8bTQI$Rm`jI94>CGRd@0VV_ zd?|UHxWJEF?AC1^rf0B^h`afX(VVZjb7<@AsIvj(@-;WN*SjHUUD%-%b7~yH2O`{Z zZl1x1Vn_Z&R@|7d@-W|N>KuC=k_9Pb;a$hb$)Rz@AutWR-I?IGB3*v7>IUDe#C;QH#(uT0 zGo~w~$rXp(djEjT&Tk*yn`w3H$i$u&`?JoyTVrUthokHHdK)RmvM(O)#mf7PwYK@a z`=GO5H8?PiCcxpUV!+uha@O9~kWBsA-4_`dUPr$%zvoHmc2a8yS$Bk^#FP9nVb3wp zh^^mE2cyD*=fd}!SDN#4?l9sWad*6&W(8A{xIWp$^l)wO4@ zgsHwmWSPS@S1J579_r!MV~5z6TR$(ycQ=N0DDwq-amf(MId!W{rqLQC;wS|CUpAeM zQ`KQ>xBFSPhADL-OQ_V)cZCqKceo6+z>Uf0amRajbz1BBHNnm%C3`a5evTAZ+1U+E z4xmPkhsij&qoTpcVpgXdv^P$IX7F@lv^-!wAU&t|GV7WV*FL|&`^3<0D8zw_kqc^-S7HUN2l3f7X4_FmHL0)Xesrs^><{5PJ4@y|a;s7(JFiXVoS^c~j1` z3=jQNJtNsc^QF=c@isc@=B7s--y31-HVKJ`t1-NsUBE9-S3>eH%CDVXrO?!z z$A8Q^;Y2!aoec=TB0vrdwn+MQEt#89;!~N4=z?$*bU$tZuVuU2qtTMJR!T!VrU1-P zsW;_`H^t|WxKNrm{UYQ9VJ>Tw42752n1;dzDkqqO{8)wNI{Q&~^dP>y6GRgL)2cZw zejK1J-(s`aPP=WZa7(|qMUaq5B03|!v*(DIJ{_=MCe^&LnJqlnTg$EWHP!7pK50F`AroEy zJjZ?w*UaYvTQ0#QWP{pOVCT6qDxdaPaQ=B>D}MQ_uxNz(Oz1a*7ISUtUZv;Q5%o@x{C$qwalKk|dFruXGFHkHe;FPWab@%k8Ck|7s)O+)jg z=v>xOY^^AlDB(m=!IZ{b$T02AqAQ(q?-k%GUHfn=Vcp|>n)*t)L&a0ZXPwi-^fye5=M!NbVqvLQhykoCT(r0|Ged=&=$ehgaOYz_kjh+ zo`q=Ew583aSEulluH983#q#zpmg7D^>gXO4*hBcTQntB8?tF;}C0x4bSevs~xjO>Y zlb?unA`b?-XsK%gOD`|O*I_`ElBbCc%r`N5n$iZ5hpfuG@Xc#Pb+`E@Z zx2^tn2Jhl5Z`GK~Mvmy|URQlumEQMWIwK~6PL%3|PG855;bz4#toS?xvSqx=!0qYW zq>S!M;+JIC$LW2qIXdT(*eD{%?iK<^&D0->s4ljS(B4%a7e8xa%CU^W6{#kTj*!*f ztM$d^@L}b3;%fp<*|vSx`S7^|Xo{xd6?+d?yac+b=}Fk{H4Wd7v<=-g5mK{G)-=Yo}%y5UFEmR}%?2(nx@QOC*Te}C%YlO18v8)<2)-`2ZOJ;Whj|87Kz&RmH= z5QFV7-3) zD8C%cHkX+TJxb{=Uw@@`N|P|r|7AP&u5Qx_AoDE~A;hRtf;o)Uy2@}m3X63>zMxA( ztQx#jPqOpPDV>{ptp&2Us>7e>d-21A=&7T8^S<-jN+vp%ql^0ZFvu9FP@^bz`!LX4 zy2V1cd|+qDJoc57`DN#r1zJ}_^6_Q(g^`}FAX+?pg@!iBD|)yx!t154MB&4Z z{pscfRX71+B`zYG?qg)Tz_px*&)Z$jfHeOiVcWC?_CTtz$puiwm`CNdG#MV}y;q%8 zN^M-|>-Bf|Z`@PieeNl^T)j@AbBhD~vb!CMBX(8doZF!vVWfN@OuMut^L+S19{oyx)y{hA7u1>nCHG8E5Tmc7 zx^V#eZa;hui>;2G+;@gSN&Gu6&M9gjkiWr>RZEYOPbadoTukPh=Nd|8syQa$8b%7* zTc4HsoFI4=HN5HYHt&kwcOrg7)EJe~uA(u5${(@B$b#)RLgL0{UjLeW$~Ky6yLl?7>VVK zA6~Cz)=2;|MCe-n;Wb>%MQa%0+*GSVy>S zmS~qR4&nzFH3A`wzC2wY^0+U|P%5nHZsS-b9JK&TY<(BK*<}zRRSPq7~m2 zrIo!ve@w^D9NE)4q0WS14zm)Tt_xGL4de@GvwMDprJG6YFXQQuCL9!qHSMt|2c9)b zfHfX7I7(y+w-qUx?I?7VHst14~jguSqDot+{9o#$R`N zcbGv3`HM_>NU8SwmTC}&NqVuda(g-w2IaB$jR~@|?^U3Ss2;yK3S(Wt2(`TvqWK_i z7Y*0#yemkCN|$94WR)p#!sG3id~q4zuSnir&MZh^V5-x-(ZIF`vevQ8@Xc6|0^4T{WA}2a4X=;TM zTyK80anRK@?}~qODk$bI3g-8wKvU4X7zE#8E2i!CEk_+T#xyXOt+^F*kiahl-~a~~ zer?%w&&wQ2^RSw)APZZnr^7!pH)&l9Wff~5C4CmW9{fPHmW%(a%ewnngq0oov-Mi9 zXC~}4h+nN2NSp~n5n*OF95(7ZoG}1zB%EPZ(y3BHS%@^g(#(9-ZEJlF$2O{<> zLaT+Ru`u?f$+QZ3NOCG3Y7)NDUK*E8B;sof2AMOE12nY;A7$nw&Nu}$<$X2LWFAKF@08A4Ea z9p4eu8boW>8VTGem)LqK!CHj3G}^v6mh+%-)`NxS{AFl6(bMAlE+qw?78muDV@b73 zy#at$#XpH7s18Fx0R>{~|4?>gex#wLI)%CzM zDR9Ew+nT|LeesCNU6(kHk!yHn{0{fL5j&%E-(L8>)&>&=P%K`-5mq;q%N3{K{7(l5 zRneL|SBIkZ)mqDe72b4fn*H(^SBZ5{KnZAQIxrxH8q?BbVI;T&^g;ecVjcRoeeAuu z3z7Y}aI;{wfOXClV*PPJgc&Ua=>)xkSs^YWx@3X8bgN}vi2*cZ@QcV5bwRe{wIo(k zioP&$ThwzCvH@mMZ3A8u5s^5Iq0EtBm!QFjul5GGtG?tFh(l3zFE({_xV|=*=@{Tz zzY7@93!oF6{5H#DU<9g#26YZX#lz8DJcPiJSNPvOT%FZV<$=0_JGaNFk;8uS%MgD; z4#}#5r?q02LzW=%;(t4TP)<__`i#{taBb2521nH06%~64FCqS$cnWebfwL*i8;kBv zVSd=1iB`& z#fRTLklToW1u>18->N;2H!FQWbP^^7~L0@Ix z!yB`be1LAVR*MZ_pR4CSzsBDiBdZCpkH?vqz$L1;o%0l8;6qYs@6?oVNkQZm(2J9%E9=H%?a-F>_#p=ecl6I^l?Q9z-HQvPdq@Fm&NDTd< z&+atgLsue_QCaW%o})=&C!#FD4si$S_Ud~@QdYA&dWdqfvbQ-VH1)pkGZlJox6j8l zoGB%gCAg`Ly39jU$f^ewaTR%dek}2692$i=an3DeIG^Ho&bjtl`e2!G7*(3oh^8lMG#XKI3 zfp_Ca=d0KA7%~nxnMg_KG7h5{Mp%oP*_*Rshq0JLr}^fQ6s}ikxxOl2Q{L^fmWJ3@ zR%Mec+Esr=GLmm5Dz@d*xG#Ro^>{bHgX_j#cER58Q62FLaW+bF_E>EwX)9*Yrg zgCc_6WLrFKCK)HTvE2MRQ7U}wGL$@32z$9(f+)!^r2j3(sy~lg7 zm>dw#)z>j2(@FRKpkhIhd05hx9JSP#w`w)jLNy;-mI(Nvh`hUtMQiHIkQ zI50jwAkdpn7$ZF|!&}6JMp3{??cFXAf7dyJSF4{U7sItfV^MuRSUUGpK}+8^d{r?j zM^%)qcR$mu!2L2u3)#@g`DU$c&ik{N==sABO91&eE?uVUu1(TmSuwPSrX-TGM|I+X zU_kx>jTF2OiB1}6In;{*z?82%v?NN_s4NfgA&=(!eRdK-U98{p0k(lP>Y)6XUU}z` z!w)6+MmBCUhcQEfds6foLku00TJcJ{LDTI7met8?2^}@^3)AA-8DwHVxH|oeK67=l zM7!rWK|cEJ4|IV4@zt-%!Ja-^=wz}PuSBmiUz@xpl}0o)uS7jAPS{h)G4*M8h=fvi z*NnO?n8r`SYXYI4BXeu0NsuVIw1a&WW!mJcOFPSRJ1SZ%YXdp#b#}BniB6A9YF`8@ zAsmeb-#tp1sV&R5QP`aeBCmz8FcjrLMk+DTy_ws*F#0iEaQHO^4G0scw=a<>gcz@G zA~H;ZcQUDs28datV8<*RIs|87dUl8VGe25os1&Wf*VQAFc-W3*_<2?4ix=X_V^ajj$hU~lnRXtT)uvmChC1>M@q%(qe=6ccpFbjW{Q+7+{YA7&b{pb! zZTZD;o%>sYT;G?^Mz;f6$z6^u7Ty#HN=CbNCfiyZNIhS>Y?Wu+aIHYrI4U0=4sCa1 z3cg2?OdS1i^P|*7g5CE43AS5To7ZfflM93R-JR@;h*^*H&rH%jVV=q<=D;ROA@<8; z^@@HhTJ-bP=?IRs^q2^ap)FOh?A%mi()cU8oOMpL+bwj@xeuYUiei|$LJ_N(-3vib zSdS#$$!I*gg_+@%LhMYmXK4aD%8l=tyvEgh)3;W}y#%?gh->p|+X#(uS2wkS@PUS< zuA$^ewL_~mtrf8^##%j`^(*?+l>^*K4C#m>%R|fiZ1<#9^ZidM3ZmuQT@gWx*1I3Z za!k!B+xPvBi1UIHRK9+&1YXPmrd#&gyEjG+@UNyHRqX89g)FXO`t0AlR<^_@;qQn_ zxaI&B6vvCKvIGRQNt^h7tSX3>h2!?lw8wT6XAU%x=R{1_r>SLElD&|vtdHK^{UJIt1jJ{Cz!RFS-J}qB+OBo7 zDHP1-fHL_njS6TJ!?UpQ{w?=|fGFb-5N8|$B8@{ptZ@j4HVy&t#vvf$I0VEThk&T# z5D<490wRw?K-6#uh#L+8k;5S%b~pq?4~KyG;Sdl(90Fp912|&v_5pFkAs~`C#7~wu z$d0ji&xgP}Y=8|8vQI3uULcQ(fLtm<0JQ5rurEBd-a6SAKS)cnu&04*?eE&xqJvs= zT8oZs!D;bI|FpDq-rf+|A>VAB65M&ae>frfyxo` zf5-*;M#%3WA%BO&`?)``FZ}MlPWB}T^5FfnFPyFauk1^Z35oaV0L>Oa6NO(kD_Rqt zV-O(Z1YQXSG{7tWfR=Ef!xZ_a+XWJ05?!AjQ(*Ul1tGt*Rj+#xvbdg?$a}G+_b)Z_ zA|daOguFiz^8QG?_g}lUBk|kGI$1jqY{0~i3n~7txi1m=f+kip@jtWZHMU42@%!w$ z2@t*?;r7nIE5HS*@k%cd`2?c&gDDXo@^3*8!&WMW+{%1;A+z%J&VHU4n ztha)oh#Cn+)JQ0zMnVxa5{jq+LP$Uc0An>2Q6uqJK!ES@kuwsCtdS58GZNxqMnXKy zNGNlGgd%Ss2ZVdSKTt6K2(VtO4h>&*xQFFc!C_+h7LFeC6EsABP$v)~GsMyAUv2zUh&pkxQrU+b+bD2<1N zPDDs3k%xp%Mo8#ngv6hW{$L&9(}e4_j`(3AEqJW?50tl{vh`L1bj(CT$4n%2%tS7b z!b8VRBy`*a$Xr1uiGq%uC@3R}f{vdk==h0(j-M##_=$qZM&tpZV7= zbQC^$uwFukAKJkL!rvA8PXWUn;=-C+3{C#x-i3k^&L}9sf`SsxD14&j50rt=)U1;- zfN2m*gLg1n@OPE57#+aQM9VD02sOYD<*2$5r@i>cu@^I@D%>kKH*oyd% zas&&)UMEp59A{Arb9DYRk%+<RNUWP1j_}Ff3gVvuVTix zx}czJBnrw#qVUMpfouON|U3Y zG&u@NlcS(CISNXXqo6c73ZEwb1FK)xG&d3ji*CTJ{qI`+60I$#p9M{>(^B{umqXPD z6u$cKC*oe$U=j^qB!9oc{5u&hNf4~Nxbf|ND11@p55$eH3aytoLK_iN2-79)_6!q*1>k{H2geBHzd52F942gF4e@cRH|HNyqU zGbntC=FcSlb037NhA60Nh=QtyD5z?Pf~tlnsGkxAT>(Jh`zrsyldNkM5$O6@nluCt z!++P4tT9Z1S3H*H-v3(R7X{TCQBbWBg|9XKfokwY%k^4T{IF#Oo_qfT)hxfj77ni~ zF023JDuT+n09h+o&P7AzTr^b9MMLFWG*r$-L*-mFRL(_1>xN#I-K2+C@uPb~HN{(pg3K1H*LWG8{5TT(` z4jNy|VM60u(18yH7yTdT3x8*6o%98?hQPMMzuzOiL|+TK`L9YlXnZYVy+nzCoBrQF zjV}@9qQNgLf_2`c&`_NQ4K>@Np?VD(U$6NC`^6W2)=lVe`~Ca%-(`fpPNH7paS)hg zxQ-4Rg@oNw0Q;iiXsG`l zjnA<$p&y+)2t&fGMiv8QWHC@i z76WBuF;GSp17&0}P(~I5Wn?k+CNYQKJmL=s=&hP9bh2-AE;t+tNt0duHwWnKt3Dy z=Z_nL*O=wNjiOt>v@}Wp?y7z{aKk4Iy4#uZ{cEh?(s_ciCZ;w{7EbQmM{sm;#sHy- zp^X#n9UPhPCnsKYTMZivV_OqbfWivuY=*hYpVeYrCj1%eI1@;12dW_Jt4P zU;-%j%q<+99NgK(Ol*xzfgh+j+u2!}S_2ZpaqKO5C*0>Oywgwoi$MN0I1zaAWhW-` zEk7?20X(ds-4Rm@^OH`vL593yF6LSmCQc`DS$IrS(k;eCd5Eb9sk&v`9^^j06n{sIvLs`WE-W=6W!P@E{EL{4x$Iq~a*12nyDSOz zMQ}7s#t)1iO6VPM@N_7+d-}{rvuF{)L-lhNWojl;`X!>N>`@I0)()%%a-rpyU$l6* zj=s`*VdQE)|DxR_W{-=jq)Ta8!DfT)`7?#{cCSRgf6nT?>Nz%UA~UY_;U(R-k@(pL zOXrUxk7xG0$eMleY1a08!Ti1JAFk``>2vdFYBkl(O$~kE5}4}!F?eyNrTC@U(XHDO zh_kHr=FhuLreY0D9`}5RdGY1Nh3G37p<@2BzFx$5^!T}R#bv18-VHCy&80MsMNp^P z9yNPZr54fQe%!2}xIbl*cgGd(Pda5Ubz(~GKj`_+G-=jksqoKn$Dge%b3{)n$;9i9 z7HpH_I{rF~_r`r3Le9Ll z56)N?>Z!<6$_?unsa~EMk)w5L?lBk=8L}GhNO3hDn)jKnJNfp9=eEF6PYJ5r9(vnZ z`iVx*24`>k4i9IsoMR-k$#iW$p6~B5RvK;GYMy)N$;+V@sW9i8k4T5O*{{UxZ!2;b zipLriU?0`bO}-0la=*&RgW8TgA91p#@pFHSmR*nY==pp_EQ+g8||2byzd&>wR$> zi3nTV=ZL%eA8QWZOnoFTdzMc4fywu_FSMlpG=IE5S(E+T(>|}HS=zJt%l-lcMm*aw z`BGot$kq6!@s4Bl@!{fPiOOcJXZ1F-l61?K(~pdXit_gRxW6JY7W{?|JU{SZCi?q_ zmg}Ke+vu-OhSO!lXSLss3*wXQY8ei+8QY7>k8zOzEbtRls4oP{ z7Q}t}1`@fGl=;uHD*Im%G8~^NeZcBrSs+*!jwGF#I$?ji@i-Y_&P=e)+y-tYIXYlk zKpbbP0*{7eW+C5h`QVJqS%wCk%yi67)~c_{A`R@(q)w8-{i+SktX%?3O4|B7rCf|1 zzNsyjhrZpWLN`mNCKeem`tB=vJKIwAQbHyrKk2E*N5ky#CvR*Wta;*9I!;8`X{kJM zC+NIW&zfUc%FC@H7pIqAEBU5+n7`=A8xpfaoiufIsfI$Tfxvrh;nZkWXAavqD52Qz zOWtl-a=*)6gGQ*>TPI9deNaAL$jA?4)fu;uhm^R$J+`z#rs}C~)#DHMri==rJHpSl znP2Za9?KSK=tvM|yg_3-QMeFBL$1CjeOSH2=Bqr9W|wI%AL<9YM!S*FZu0gtAtwJ8 zDGFKT15?v`gZU|9X{kcJ1)|QM`ts?VhUpf$DOojAR!IWdC<;f>w)n}GO^9L{n@7$^ zeTgQ6mV}mqCS57&TB3#o(Hd;1%R(`_JPR0u=u<_&{{fA}#GqbNL z?-|z@?>t>ES4a+Q{nn9}CBa4ws& z31!|$-%L$eOL@OMkv+Jo>A~Kf&*ub%XK(21@?Us9#7QsHeBZjV@}Eup{zvsM^rsEo zLZv?~6L~#27HfCN-`Bug)Y<=)`Gqa5o^J)+O^fVi9KssrD0jL#3kaT^dhP z+7|08SR7tztrZ@s*F_a=p)yKjL9d(3#G74-4AqdfF?icU*69*fsC@gvneJW+Hpxvl zVoCP}`T77lVtyLgO-1x=`0SCqXOS$IUpU0yE~VXyiHv;a#qL=X8Q9Ux=s`{yyF0Au zvg~6IRy_CMMi2w#agc9(xSQavXboS`Z=qIu({T$za$D=pXY zQzhjFGSoZb1K!GV$17iac4CL4;0Ak1K3?`l;?vJfJjlr(?Y|RESBs>NuO1n{{buyp z?E`Hi=(~y*^?4?Vn+PcgYN z&(!pOQ>$)~^2wn<+dje~k-sN`IJAn+#3*+!?s25FB=`*8Up@M!;f9m`bcC$Trnplb zImX)B#?AMXFSEHZj#XFhPVT*SJLQd)-knJoltDP-09jqR{YeiV^nt^5Qdg?=uEYeD za*Jo?m#SuDsHV1n79SlG{~&}^ji6|7tC}{MjzU9_jbdJSYamBg5R-no53Smxio*kS zqOr(rn{`y0ML!#IW+Tkv4>yEn+`fG#Hg30=fGzD6vts9Mk-mHS&w94go}aOLlX^7i z2lgq)gT!Km(mPJRtj#r2SBdBxs{>lBBX)L)+a6Vjc1cN9;?caBo+KxzL`{2($TElV z7N5b8dumA=XIBug)^2Jv9#+ee zI5jLws0klNofUWzCzvCSmOddjc~c_@cp4v}a)Q|DEILVdp%-VIK7C;jL8i7^acD?f z3{UG$lhMf(I(;KGGgamWJI`rJXG5XWC;IM8DN{0r2sZ4+S)Ajgl!4%Ik*S~;I#-1o zh)JJ(v{rB&U|+vrC2#%^OeAfcR2#W%>2Q8Jy&G3jW-FCIgU`$1mve!9kKt+B3bNy zZhO@3^rv~>s}LT$<@%L=7)Kq{zEHODQ%%Yi^U_P(PE|FP6dX2uRLy$qNe@lLtHU~> z?dlfT?NrECcp!XNxwUtGOD~%R#1_ zt2PrxLy-h1pv9TO@YE}zwhvtyhu2^yKgV6RoC$J%JCr{xv2pb0paF zRQe$E;9by7tk~&`C&+lye_= ze{OFd8MB~w_WSY|>>n`ilU*mSijqx+@TB4awf8%Dv@;!XkPvp8^ik`BTv?)PWw!?sGw3ITUSZ7>;^8nh1{<2^s z3F(=1uQMcNoh^4$)7rLRV^w#lblmoo)bk*2?wE5|6m!%qXX*SlW(aIp=ch6hbTSK7 zOJ#X9rB8~o%K%R`d{`u%W#5Q}e0@;7B)6*>@LA2Iea&+1&YlC;*-UDugG?V~18Vde zZpo%F6rpA?sD3InQ~09pAZJc~dAv+5VO({>%Y)1(ZQjMp?7NxSdypB>)(B;MhEa8g za!yGdHJvZUt}fvTrOYN^BKh-|cQ$MBPt|_qJ!#4>)Nq!JL}#?ii`S&(gYqqnwgP>H zdhW6&h0vK72QK;-iy>QP74L-)zTY`_R#0%Vj#{SJbdTu$6y8TS9}7=BwS8(%t#FLY z>GF+^C)a(#Xi)q|r_7T5RYF1$4+tE6 zjC{Ly3+&o;+T{nW6X%Q9RQ!(v(r%XuyI*|lc*wVQhd@tzE^yRIwChE8kBUt5&bnU5 zOa>0udC}N-GIC0*K2tuk6J6YLDS(;Q8HnxJPh3xFSHG_?emc2C8KE3MrtMwYQ_XBt z79V1StlUOZh}&jkMc*g+XG?6;n)ji(97ba}X;ru-{+%cPc7-dwt<{v(XYafip+7XR zW2>f7`#B-2L;>g8Emyh^AzD>CC|M91F#xPvFXSE;5-Lk32Jj2uMg;KlBY1!;6b8-512psT3-a;sV}U&3vI7I~U7J4# z2H=`DftSJt2EZDXz>4_-f}h!spUE9{2WM08r%Hy_rU2vrVlqlxLQ+afic7-K%EHLO zf>+80$T9&b7+x(48!;P4i=W@)azl&B6efISo>$t!!O=q)xxV_xcF}{9pZ>f zS>RhRU@41VnyTP$zL=@`7r5UiY_J$UD1GJxBvF8GmLzO|?|vq1Fvukd8w3`O`dz|C z4M=WjGGUP5YsAHE-E^6_aoKv@2LMk8G+P263up%S1V6Jh_-+%}BQK@6SlK{OSimHH z8VG1EYcmjjoc{l9Ah2c=uytb12ExB+AnF#@rjAOcuBx`yhBnG-+~T%YCQFl-s~HNu z&uMu>K>~tZv=n@E4oqx6^P0d+jh|M%XoicHvI5HATa17pVu{5d_?K7=KNh=aF+h*> zk`x~XBe2wBus|ME8%hk~tWLqy5VwGs&`4mp;*1CQ2hKVcj0ac`K#GqapW*{P<~Y;R zCkA^g7Syz|p&-ypJqc(wYcmuSt~2W2h5{=YfZZLxL4d{kGCt%|Qw8y?5dp5D{ND&* z_h-Pqk_7}mwZ4)s!>(wme_*Bf7M2y<889Vcsg*)a-HVxL@RxtVy9O&=H3$7W0~JIq zF;KoGE)B_#Krb~=;2Ov(2FeFBP@riGGEkr;mtPR|F9TiL(Y=g;;>`mi2;1sFV_DHW zaPO%4bE{i!HV&)?54IOAh7!0-1M4F8f< ziU9$w2mx2@{=EJa!)Jh<8( zKI*}MfYt_qAJ>lXiy~mXNML8qsu0jP(Jw*(0j&)JW;tgC@5=|9f>wusvxT1!@PO6; z0XL%vBy9Xe46x`AY)D!i0}Aljix@yeD`Ef(O}|}~2v~dp_Cl==flqL$7(hU4gMh)^ zU;0G~u$>ER{8<$ON&vG|3Lv1hK>!P{zd(R(U0~DF>Ja#mOQe7Yv?2tsWcqtWz}zF) zFSR-Z6tIo|v<0B^1^~1+2pC*B`QK82H~oWGKUarAE(K!CYNu%l^J z2mtpn4^Ux;d=o%)x@IYWvmkzf0BZ^Wo2gcZ0PGdO6+Q?89?*(Xz{k?R^Uz3`djy-p zR)>H_FOdSkj1B-=8w7q_ztS&KfVCy!r>w1x0SN>Qi(&u~t%L!8Gx4`e0!|2qpYXOS z281AR{942SB3c`UWkUvdvp;^i-0B#xKxF?D10K=ZFo0A&zvu$yAn}v!R>yz=G82m! zKtwBI0HfjG>jLH>@l*9y$AH8xl>>-qMGW{36KGk0mkNH71I$I@C;F|90SFY9$N@yO zA_kCA=C^Wyk8iO803RR*^n!Z;6bK+%5yQU%>1D!L6wFEDr^zi~Sh;xwxSI@y z8%vr;j-NWpAVV{Iq1N;DMTvcJxvs@gVSXFBO|0!s)Enop8;#`|vl8*%FYEg8dG@yR zsk=dA8QtxCUtF|q^c(I@aQvYD?9KP|%!=9gZdY3#gI>*x*Y>E-clB9j-n9AQsflh> zzlkckq>&}n+wj&buVT7JtE1y{XJ4eFTE(pK8F_Wv;$oKp32~m6jD0-;U+&FVo_SX` zmh-lL{!N8&;;qWQ?#hY^kLh=V&eIOI=Vk{+D`q@J4}8|wyLZ;r+5P+YH_Hz{hD2=# zGSWhuo`uHS-pkm{xZ7<@njTB${3bX0{`j}S^WXEo-RW}3caVPeNaI6s@p;c1Lmw(_ zZGo;CZ|nQ{H?6Ox)3x7`aoject$w`sh2;5yaDT+eHseELqo zJG1Y?r(IOX-jg8C4D9K9|334@G&hDiNiv63`c>TSN2k+_?JCFK(_Jj>ZaMc7G2nT- z^2*gS-$kq1LPhVBe)vIZTTME_?on^BQF!cAidK6<>IBbQzDL^_s|oDxYT6tud31mJ z+O` zE(cn=w$3h9PvaYo2^N;A92w+q+fv?jcfb2mA}Mn3-o1)Qb|j02F4m=^zUGvu#OoI_ zZ*42uilW%xey@9EBV2a(c=+Q))zgQ`KEHj*C&pt_uQDr4PV{Yaa}^)8fx%4hX+hJ_ zxP*-!EjtOtE{@o0Ke5${sF~5-_|(X5D)L^WGZ$aUgKxL;X!yLOxMzomoHQ=c=loE% zd8#5Ms)#kKdKkc<^flg=%=+SPMQ&nhzq{A{kKN8i`_pUl9 zDsU(}uEIP<%Qox9ySni?k5R+zM)p^yqzfJDh=_OSRTOZ=T#O4lc#_jo^u_DP1RG1d z4-a6=wr}qYxk-$bw${EbI=DrYN2y#OnE&7zaYZEof}}a^dtM5$QvHV>XBRxOAU11_ zyGzN6RFm##jH*}o?y6HPh_ciVmlS7sz;`pu$(dzyIYoh~Y7g&@0ImH&XMJ`W9vh-L zWy-D9H2;>z&M@ehdJbzyGj$=8U5yH9`Dv1)yfrbSAD>Cw+M9Tw-Sv~WSe@&E$A?99 zV}nT+PYLqk6k!jZW1)Rr%lgm3?e&!N6>jO!$$&(5cxED49- z1QZ$-xMc6mIl@w4Aw@U7BS#?c?mLw&2vya+J#0GnnRX7(}Mfm9N{!pXN7Ya9*;#$6HLRWGxDV1F*7JfU?ZAyVy} zolB;qS=Y-pH#t`1DP1S+ZG1x;_rF5~JA(uN^Y$%g+D*RGboyIg#&qQTBNgq|8JMqyUrzb}@_I>%t{llZe z&6&J<>U7OnGu6qG&yJDwEo!Q#wy<{MlE4~cV_7^;-r>X+cX#+(MY1uY69m3B4uz&6~vabdiax=lt^ftS` z%N3q9Z{HRwH9Ho?`^1{F%s;BNr?VzVjXQX29-ByA=xb^}QiExvGPAm;z>)i2If_FE zuvlf2OGGA(ckFyGv#9MN7L+glH8AHuB!}GSt7N#ID4c4)+0k577@& z>ECJAF{dcpEHRElca!BkX+|iM zT69wknw%w|vSUQ=-Z!v6iu75#bkqYm`VC>5>GK9v!y*FY)ybO)D=bUSzY7$uO$4k- ziVV@$JH8v$t`tRQ*1a`fL-CX&6cSc-BC6f&&76k%<7JmJ=fg1nmo2D>;c1NAOk&mZL69_BP7X;It! zJ~gi;_Gk$KC-`(lSQ!hd7P}pK(s62z{wgYTZ49UzPnG>t2wG$Je-7VYlJeC^TbsVK zHK5qUq=!suOSF{|DyfO7={uDjjZR&po!aN>(yo$0?HOIVV+pqkPn|L;C%ZJLnjJx8 zqkf=yTt5$aVLM;Xeb91ag)V-0BwtVyX1A+UvxcF0FM}ghXtJCi7mc`;RGz-ySmNVr zRYNIJHodl6)X;44H2iu^lYE4FTJjMA@qBT*H|YUuNW*`@8r9uUHYOj`Pg17MPEu}0 zQ0D<_gZ<9NI#*Ax$(zHLsn!K4--uj14^NZ;U;6tMynWNYKmJzX4>7Wcn-cjJ}&GqG2>BCdRn3EwV-d?zH3W5j57u^h9%oX2 z5R46Qf2m@W#-yoz(?mm^mHP8z1C3NnTov~-9&dz=oMUrPeD-iyd~29j4_kRkpM4mmmVYL5iJh0$HWAwt?^0h7Yyw4o;Anc}b9*fH^5l@ehwkAvB zi;vkG)p$js)ZwT~_DK<+WA~%dLW~HnG>P1G)I5+3vtv&fEAZz( zQI{IXLOzfl7)#LkL}I)@tdk{(`a*_b*@rVR$J0-fy&0f0Oc){=I=w;sxfy#(%9f#t zd#--Z?OuNOI7aHLJT}EVRTOBwzpsYA&%MIRthmEGb)|-_UR_yQ>>` zU-LklDJP{#F5?f1lIR~p`AC}1t=IjO+<3J)c^JB_+oBO6?{znK^z3WmD6nNLtfYM) zH=`@02G}|ElZQV}XeyKz=kXK>*cy*~nRI!O+`ZfELixRyOF7P@^IOa8DZ3LEC)Hp~+Bs!uX-*4slrGSheB>zVnI(|68W zxg0JjFTbiz%a(NBQJY(9!}Z?au8%D9$`c0&14PEUY!1XUXdZqjL1H~PeWz2Dm1N&d z#pkK72Ws6ems~*Wf1}P#pLQkHL%Fz*m8c@^Z|-*{Hru53dB0No-3%?=P49IA6R>)t zBM&I{Hy}pCCj;Ib=-FAlFE~e%Z}ZDQgGYy%KKn8-jM$|;@8qnja4xE!Pb@CXv+G)JthA2ahbnn{UB!LA&l= zV0Q=%EaVYuNqo)xP=oTOOx9-gh@5#kv5~ix(*1n1LN7$W3jZkUIrqcsT-#=X?)zb{ z2%Z~P2TID8aA2*-Np}KPneCgH&ZntUY*#;EmK|Gbn61(iO7PYfQ!8fos_?WulMAsW zQ5(nR3W4XjE~k$$pkoA>>h%V_s>nkK+&Q_)5}uM7n2leui%c5_0?JX`7q$<;7xNGK z+K7gy+A+$!GU*u=45kc?`!-GPqOIi#Hv6$BN7F@j*#;Q|cyVzd)38j@4qq|DB7saK z|3bC{iv}{0{Ailf{0d>!|G)_6s%Z;056NKj)5OYJ^jRhN3=E!{5amTUvvSh79qe(kE>(A zNq-Roh-hsXP|H;*;8Rf%;0?~zG2o=Xhyg^jB8JtgW+-?z6udpUDh7O ze}e(v;sKEHELj(LL~Fx?!bX5!}0U&<(S=GiPS{nwCkpXxqtiu)!_md!V z>gpI^_JBvUB8JuD2MpX#f~>8pV}RKMFdpc4_ON>V04K^vfQ+%LV}RKM3PiM`9AFrL z2FqXl0|xFVLAKi8V8Ht*VBqZ%djQ7Mu2~M?p!a{<1Dpp50W#&TjsfU5S?v75BU(`o zussWif0vO1+)u*BO|R%5fR?}|l}sdvXhjUG?^zglJPDhcyfOx$!DF$qjYqT+20Y8+ zZ>y>BsRIbu@ZOa%0DY>96UjiggzL%}VD^AVv?7Mp_bfO^5&~o@{>{3;?-vM|Js?0tYs0YY`GOzrCqb6v)iJ>A z0gq^H7(lvg;H9wrf*&4Ff(*^8VgStnxp3x1{N5g5y1;dj{}M;RIh24$T1))Ek86BE zEnvVST2T(GcRKLH<4KU2dO;4q=`sK&R^wXXmv$Lg<0vZTY^vtH_oQyrcYIlTSmp5L zp4uG7(E~*m^ig{E{)C2?Niw2ao0CzMM0j(f#<%&HnqF zXG3)c*DpWhz4g+wq*VWGNrm9G`I#@&45#mv&sn>FX~EVtSiM!$wvgBV!4`|X?{Vzl zq^AMZOX|&35!&jPvTv?5uk|oayA9Evk`KcOV9#RKf zEc>oCQGL0YV_xg3VOQlOWpkx1U-@q8A%oC5*TBtbq5V$zrNTsh)w+) zme$tb;yKDQ$&%b!K5qbmiqo~BlOH1(6(3kmCGXs0f9UiZgTAnf!>?VU=}BS|IK0J5 zTWlYFO*9^v6Fk(~HxfZVd#H0jbfS`>rDFbi|HP+C3jb|$VXgz@Zq)aN)2d1`D^Ew# z7xW*J+*(uqfuiq(62hVkHF}`=i<6`5Godl<3|~Ty*r)yutp+cBD0R!Hr7t`_q+e-p z*T_ZJ#9rc*_txyeEpu*!4`-ct@&lFMg>XcEKW|#`;LRo3=p9|s=Y&d+=h%o2QcaJI zjlI2=oG-}1r5WeUW?no;k|gapa_F5BVy|-6o|vH&OQ!-Ivq~S50dgZV+c|RD`d7zY zvgRV`P~SG|c@L<1oEhS6pJt6Ocu&!fHl}bpcWN$xP^1i5Cg>?&#nr4g7kZC6doZ@N z^=n(b0NII0exAoS-U@lIBrh7p<)r?qQX%HF#Cb&*$DWrS#+?@?bt9|9R2;qMOLE>k z)_kEzT6ezwES>HJjtisLb8Wp&@Z2;nNIrO|@}9fF`O8=t(dLKWRf6ujw+gES*FT@2 z72rR#on^KZi|{KK``Z2KWd8FVNjyJ9%rg$rlFw}-r83H6j7=nF5qse)a2EVpbxzW*@&Q#Yo0QckN)CbaRT21-;< zrF71mJb30X1sj^1)cbUqkM(Wj-Q zFCP5#h4yK)sXc=Jdj_uVn2)$lTa}R3U6Fl~UF{^X>zM5Q$A*ds>y*yZH}+>-2`3;( zJs4+sGD4N7{LQ%XoLrw9U|kcD-u7l+L$HS42yi+3Nuz+VN69lT z-rXmWV%&~Kdjn4>B+2S<1pd=4*3|JXA@Z1;C)><}jH&qi=84+aQNGdG%l3|EIZH0t zW6|m%G1+u_*-^edACwZ)*)vlR-Ktb04vH$73bD1d;yjL$x0@;RE=^+dJNAdjmC#bO z%kf-5u#QP*4-ZzkB&Ihwy_JgolyF1Zv3}|??|_7sXdrL-T_J*Mo%8RueKq!wVcsF> zARlsxMy*}wzSm^EE`-JFdEV8|Ezb$a_ zGAKH%KQH;g=C1w;PVXCpSIWKbDpQ>#aiwUA7r4z>lHw(CX8RFGw=)z$e&NHHq7Qz2 zKg^ewv|q?FS7z^U<%tNUsro&ge8nbk?NUvGKW9*S z>7mjTA7qeslIk5Jn{CRH%}+ZhEMf_!%M7o*de!uWxco^2u$j4fmh4??S)b*S^!_*2Y`6MoMO??2}se1~8qzo1QOK zy{G#2$Wa>EN1U`poh&W(8+K)Tdpm63u3fV+HQUcLRphWrge|t_&MW=e4*{o5s}Jm_ zv34Kw7Dx)h#PeL~=uXG(eIBAyQ0Kkh?iO>WmHmlR!@}`OFaIGur&&W$_#E|Eaeq{I z3oV6pxV0AXITh+Y_du^3mo{FjN$`p;2Od(MZd3L!Ia&1JrH1=;a)Nboc{?~c1Kyr& zzC-2j-eVUf7hBu@i4RoMtEAhv(fR&2RFf5RwhbLtI})PJ^uRl5Uy=Tp4VbGECU+E22H(O%Ebbn%6hjFz9Fwj6)!+4dpH^C_W;SO502Th#?g zX(zJM3^SM|jj5Uw1uoxe`sC*s`Qpq;!+pY`nBwgttTgZ5k7RC_Q=xQ}nQ4)I4G;kd z6JrVH?(8ejP~p^0eE*gzq}8YOeBAf)EJlv`y72q7??W-0RynGHAx*goB#J?w3=byOJw>y;Ajem-@OXCzgI-jZ<~6 zb(k}gD*`MPf_4OJa z`LtP;g~Yu(+uc#6jOoq|2;j6T>msI#c<|n`nV)Wl^NSlO$qSM-`vdBME9IdKTsibR zH`3_z5(T*Fyqr`dqbyc$6^em49*X0`outI~=290rli zrATjd&|W#;om+Q}DaaHV5EL(O93*2wF@OIu?Y1BNq|SygCZ z#gviLFD-@8>eKpd-bt4H@#BCKV-=z+ zCw>WUm5}T_*lrk9pWt(_$)-N2vsfrjXY3oz+fTFKG{v#z5($?dGf*{?b`_R;N!^_; zj7TwfDSkjLgSNJZW!j<7tcyOEq;%$vL)N&!w@^>kw>IbIWGYZoX+NShsM7~?2ivF| zq*|u+>oI)lihG{{*6go$CWToQd7Qjox*>7=nVdA+lpTMq;J0Sr0z6ZfZ6A{8Kvzzh zGsEm@TB9rH5rZSwns-j@-(cbQ_GPYk`z7gSz4;r61M1usWTYDMbl;PcnZqs+*~!zz zeisfWvZoVq1ibqJ>q^YYT+?T+5<=PEup|**-yGcXAWFu&?T(Iw*Vtjn(^J;E$A1WL zsLlItnorlsouM3OlqdDr>bR9ADS70ZN2dj`wFgmvTy&Cm=M!a(o}(STDk>2gG6cn} zT+L$v+1qy`P6U6?HO2A3T)212MdZ<(bc=gsztCQ6Bz3+J4WWF8M~-QrKo?b4<5Lgr z?b19<9DW<(6(2gFr<>LM0x?zmvD>g!$Dg@UbXJb<8RauLe(Ul8wZ}J_3oolKb}%xK zR?g2AX3*T<%0Xo@^xQDB=qSHvS%b~7fVvI)EIq#_c3hYzzEFAmtlO3&K~LG-iWnvx zoHiE?4?Leao7mS^ZCxGuD%0zT!M%hF^oY~^xze<>c6>j+Ic)sk;Ys4jJdh#B|4>z8 z9}P*X6w?0WC?Dd6trN6bh{KTLzS=Iaj zGG)hOF+jARt0Y^d(;xjH&ynU?^_x|GDRXdu(i{EK>f z$N}8e;?S?KTHD0DWu%F!dPoLY zk>zoJ$*++{l#XX<-V@i~0e0iUq|uftWe)Bu?mF4&wQ4fPCDcc?Hz^>Gl`tq8^GD!) zb^SdnCQ?t=O8x9PLM;laGgv*!A|+{Rl~dPthkTap+8eg}oS*u^ef2S}FP^@hQ2(Cm z@k}H39_1+!Rq=vCEW7epV_)LoBGNN88#}V!jco}DxpMc)5pKj@C2V=rZPSidCp8L! zWAXv25AjQyqaTr zW9-D=KOQi-_TWk5L(lB-_ia?6MU~I4CmgLAd5$>9OC6`n`>6j*lb?}ejIp8cV9^2A z_GheD!x%cLoH{NXdv_~YK{IZbAfIyM&O5yOlS7IxJUAjxAM{T63DL)U9pxXZ64H-Y z)DU}`J$v?nukT2DkDa!WAAd^1xM`QT7TXK=MxmXtTSA(`&F?1gD(MPk z62CL|EN5s*x^DSI)4PdhgtR|X_UlZQjn~{v!7;fT8MV<{j!w(c6Sz0;V#GdUk%^){ z_{9EXdM3%$P3)Y^_ug81pgsJ*=}ktlI#1i7zvgmn}a zY5M{N$sb<~ihHN>^(*gJ+pT2L`9!-53N~{xZ+&AKj%M%?>a#l{?&Ixf)DkJUFNc19 z^Sv!qlgl?rfTg;HM9GTDyFY1?z>lR_NTgzLcl&=yTEP>_;LNhsG2lv$YiyE$MyUL* z;KUDa4uDO!Ur`SHup;R1nU2I9t8g!w)Zd z!RDQ>EC)1T-0oJGiQ1Se_F5uH95wP*lD`UU{7ioWDz$01_1H9O?Trn66FM5IW z$*bxD1GG&o$^io+S`owQ#U3m?nTy8##_AZ5K+$Va4j`hnVL;;+9`I6FVjTA9LdWfNy##l-@j1jEYMsp!~2cE4;F(H zf8)zyOX*_pF9X$~%Y;}MLbgavg8$Kiy5QX33vd<$`2SA;j)2@OoX!crh4*|Q1vvh> z;Lm{T23WxO|HT20|D=Vt`bizL92E;lf4(4s-_ryM@?nFw4lYNWb6xh-@0M*{#M3-a|nxl8ozZ>@TCbb6)b}RzIB6)W2?&n=MWY#fQVL<1H2Zz ztgD7^-LTniE6M>Fmc3LCAfgp9z-oWXZrxb;)(sm_wlW5s^nc0$k7#We(72I9|F#DK z_|^>@zqK+3m_49CL@Q!gz5XZwufxIyR;`Qy7ceZ!;rI3c?_XN3Hvm2$0s))Ov?2y1 z%pL&Z7XZ07hS-&ZrJdml`+8V0gq^H7{IBEzhHoG-2e^Z8hjMMuCZiY zAb)QUtB14#@U0s*pJo|3K)pi%tJBI@&rr7@Il*EPzsOPBLmvhEAryzh%@gO!!qGqXtlw;XWFeGK1T6f&Y|7 zFySR4z3i}{Uk3!i2M7TT>HrxF^p@I3jVw)#aqlW?4WJWb0w44LHf#$64QdByC~@x& za7%&@3H%K@HbA{=o@j#?wv2XrjVQi`@ zBMyL8H#BktUa~a8c4R^cz?}tbXv{K;1Zv^|TCf)l6mKdk87M%txw>({cQA0G%-=PR zWyY<+4PjYBK`UvF)5`ZsKaE8zSN)L;(qkb;j zb&~R07Z%vyx^A)*ghwObtlR&UEdMhJ;&U78!$7hIV7336NF0uZowTJ;b18i;^xy;e8; zgzzg-_5V5`TzzCApou>i+Po-mFaQDs4sG&alQK>LV4w>84H_!&H@M3GL?QSy@p>r) zeoO$TbN^;V;*U!Jzui)|0Itt9u1J1dP7ru4+%3R;{%X9~cn~;BeIRIu$Q1FA)(8T% z9KYzl9OT-lu>rDK1i*$0fxtsr5d?mQ`p?Aka+xJT`1<&j9edr^$Kvj{X5R$F%zrH= z21}B_G6Bnif8wX0tB>omEYN)a(gSYIt-37Wo%MLrSlJlh2c+e$NeaSK83MT9SOD>N zHmXIvE}gaeGqC)719rjcCr<5OF9|A;H|-#l>a5-_ZX1z}s17VUM#>vv=|1H$CCwH*2h1M<3qGpBaBN*A(1fbLhi( z(0emi^KIv3>qolhnxf~&18=#w&Xtx$UM&%=sHB>je)fHHXkEv51G8r@%4Xlprd|J> z=IIePR#|$t^r`{3&4eyyS10X+0|lw7u7`_2R{ZEx7TUFDt&bhVtgejDKi) z-);4n_F}U#@?=W{>>x_G$0)uk(qXh&X{+(fhAnTtDHj`{n-T`3>chmBYJ%@tZ&1CeRg7 zJ(9!(%#=#F`3qd->b_pmRXw?zm#6XB6(Qd9F^MMnaSG2GXRy4rW*@GG&$eCE!WIY# z-+O$doliQMfUDbARR6y77XkC({pg#G&a!789yy!9;gHIalrx-G^Sy3xjzvj@cl-mb zdpW?=8_nY3#xDF>rUk{kNnGt^`j{1v}AZzopA1Orp zO*dTN6*I|9cQlNY92ulyQI)*O6{+=Vq(0r=YmYP$bxn=wjTX{f1BfP>H<965w43xr zhIPUuM%k}F-ygL7(&6CkY5O<0SEo(tW2Zm!3VyXBa`1UV6M3&Uk>quky_#~@{b}k= z4%hV*UKu5fi6?|xX?$b9$EMgD?i6`59DV)F@E4N}%Bt<9*=htDW%8T|x*>EIB232x64N#})^o;uCD4#|j4&EuR&`_&I=PY2>O^m~yLpg02_e>nn|8(( zL%^FnR30^xFtB~T>~mWS)*uMNvn8jPy3^N=3Lg2Ja-DIF*h&Bou;d0 zj5)DCh;2uW!u~=cu_$);=QoIMWftULF7?o%^C}=VxXp6IffBtj=$a<_z)7aogRBe* z^JLNg#9S1tHaP3PQB+~z)8iA7TA~*;zWdYC4sR_)_aFX_3_HMmBgtowXzE$lNVFVz zw96woHghh5V9DWub3P%#Jm2VYxQ{2^z2lVB+2;Q$mDI?WNlrc6{dRu#iSfz+o;zGG zbRxD$)H<40Q`iR@_xf#{dsX20Bh;n$Wrdmiy&qhh9C}++tK&VZ0>`k8G6uJsyiCfB zg2RQJ$)yy7geKqJv^hasMxJzVFz#T|jRg8zXUZZ~J4*Qt?FshZ)>F`BlHSSZ`%1b( z@sZ};Pnb*eDMoVX(-=EpotkzV3&mS$MR8X;Pm=rOs5qx?E|}^2vg6YY9Sf^;$q&T0 z{39*Js`Roft-q0rB}g$v9=vI_!+FbXUI|X7C!wLi7q96tur|NWDH|M0e`w#4H}CE+ ze1!Pk5KA_;P3`OJ!Gq#jAs!BVsT$%M4n2yA6r=x-xVH|dV*3JxNrMI{MLMJ#4j>^d zp>#@1NOv~~Qc8VP}n?r2e=tu|y&4Ov2!?f=(SrR`|vq1~}Cg^RN88B&tX(@t-LFoP} z#!%kyK($zs&=$>IU1#$gVyIzw`}uDXHVFWj1xi+qZVuO$o9^mLthC!{htQK* zUh^I{&VGl`Pm|4!)I3wMcabDu!VoqGa2dATr5M8{@_DmMmV1&{2F`x5f zMxJvK`1DMC+JhfbrWB56jGx3o}5B@hiXhb`87&f>GLG06#=H_o=pwAzt2Lma1n5C^9e#AGVExif0JVL+L6X5 z{U{7FB;w z3gPXes5qC2ES_ENmm{4x%J(FPg1(ni?R7t!3ZX5Ml4-~zb7Z9e-)7d>XWkje?WWSx zEe0Pd@{nN(Rwi0i zoUhR@9aLte`774m-^92*CpDaK89(NYvmGJD@Udf>^ZeHL(+2#>8l$P;{A!8p((8$G&^o8U{>K_nZthVs>Q`ePKcJ~`{ z>o%qAP(xqigA^-(x8??ZwPYFDVa>;vG1w_5yIB~J<1~tj!1)xZQyv#}YE%bH&*Z`6 zhW#{Hn z-j^dQ49*1zHm3JZOeHwgEG@TBo=X9+php$e>s-d8*(m*0VOJPGeFVGJ>1oOvN`Ec) zwB*!$v_Y+Jo6H&b;e+O==e8&*wU@tmnnt5}{Hk;& zHTmd=cZM~5o)F^KYnq`<>7`{pbqQ|p5RpWrmv!Cw9Ezz^E>lF=an1~4W6pM)DV{~J4SUr>~u;RYCShX8Ci>X z4Xn!+uW<42VfPy3OQsG2-a&!kK&446M{gkGUSbjB{s@R7gWzMe< z-jT)+kh9(}JgaeTE*BpcLUu!iJuV14aO??-zNoT6cA09mRF|rJIayEZ8D_O z7(EW5xY~e%=#HHPn3{8lKU0Y4AQJV zln*Mc7JG%>cDdzK`E{V&G_(V)YASQ{L*L-jj}%2o5@wP*kCK>N#S@UsVBDGY>@Ay{ zLn9fvgy!~VZ|SG7O#>bs;L8@Nws)UrHMh!-Esso}z*&a&)s9hqN)>r~C(CW>z+CMX zX*8A6Fg*B>&^otEImE8|Ar;ejwqG=xiCud%k$U}{TUjm#S|n#)#q820_9?R1H+Fh9 zZdoYODa8%Jqc~iA%7gn}-r7@zp5Rf#I+10pZldTb;@u_1=ZY*f1msA%BR+A%%x7N9_@QAY z@z%PxE5|>Dn%9nfBC@T~ZmxS1H$)32+K9qMotnIOM>#mHc68~|S0t(?DHddU+lIC$ zg4dUglC=4X7~_}aU(w#p*GDE478dNm>6*n0s)Fw}H@_JvgRWv9q6NrGX&OhgKZ&9e zojwyQv*=15y1qPW%vZ4&V|?+@_0)KUC#Fw*xpQAVSO#MHu#?;C@KM)50Aj#v0Kh+oODT#9CON^eKu>f zoC>xbC`*hOG{g{7b;kWFxQ728?C~gZ@;^} z_wtfB8=sq_*Fv66dp-B(DF`k8Za{$M&al+=vFAFqtCDwUf@EX4aHXh&WaClX=B$0g z+8wtzpIjZhzt9-GSooO0Bly0bsc`X!#r?a&9+lZLJi9EJD04?w>MMMIUPEPjx5^Xu&v*`N)_{<=dM@97+uQ!UE=8|T#jfv56!M^T^&(ZDTrlAH^Uu(Xbo zMAv`gruv;RQ_!;GRBq@$>(zErMDfja4RVP7V(-g8Aq3aY8cXt?P9ylcZfz${dZOI1D*YxeE!$}??LX^IcU;Z$ z9rKPGH2->AMK)-+xxeOzpzqY_MgK8m@ZT)@4}SUYtNxu!{@t3hNc?BPPiSWNF`tA5 zIZv7-{|o+jymKXJk@>q2-oeY}(2AFSyFU4G3KPJ*)EHs1VM zhh`9=JdGfKlYs$)g7e4Sflpxihfr|*ytnD;JdnR@-v@&NG;jQ2E}$^|8j6!t%)hDu z1dYK?&&B`C9E|U@@{5S)_bAx!)*ql5@_;U&S?b3}DB6G{G#Chuu<#c&Yx&RQxUQ_-lG$2Lbu-^a910e~2So$NUxCdrFjp#%-r@-w_eW>OXRnStPz=@HZa++YuGU zxKDDt$)J5ekJE>sNxJ_EF;AGm??TK|>K!}lvHJaOF@A!WCwa?U$4y|rqXZN|evJ}; zUwH#M>HUb9?5xL+e1qb@L5aVV^uK%Up-HR9YYk&c$HEM{_E4D&u0xj;9AP*D%^3ps zpCn0xBh)AYGyG4rL1@PDZxi;XH{oYz{ZSA5367iyIPkGQu#FRp`G+|2(@Hte1K~7| z{3DeE$b}zDVNPKBhfr`Ho2200Ke5n1(aS$lIe=CBLov(=O#cuH_Mh2gY^VFFv$G!K z(KmYe^@?zu>f;TC>DN&F1C`@+OLcbE|6b+z&Zd80=|4{Z{m$usH#PIXR19eL&@q+5 zs2S=t`Zt^$mc90yI63Dj1(5ykT85k$>RjwUZaWTACjqtmL!99H+5V}ZGsS5t{Tmen z1_j%X8%>|U^h+qf!v3IQ{IpUF^rkok#c|^FAN29x$dm8r_G6ycZ&oJ$Df@>x8-EvK zoo0E^`Txdj{+r4CPTb!n@IUaZ{E=4-^{f3Wx`m4A-(^al-lCrUpS5=3uBC=0_R-|8S9i&da~C{ol>WPdtxgTu}ekzrg^g7xcI3SEo1U z2YZ_Tz^#5F&0!5AxPcqvkAmwHeE2obgo>@0XeH7e#TC-t0WgN2qU0a(IEsvAy z$MSbj(*Do!@aN8ylTECRtPG(X2D(T0ADsIqa{+^b6Bx?h=K>1TKb(u>T=SpI#c6v4 zn7`lU$FHGa|FHy~6AII>p*Z0oFqaPJu}<;7D{@-n1?AM=q4>^&6 zCIxk&0nLgRW*70o>>^%hWd|AeiI)K!|E*mF^E&?~!Faln13M_|`o2ED#uB#U-QvFm zi8!G+^AE9v<56cKPlv;n|9zWN(*iQv$*iSY8 z`EPLb2fX~z>-bGp{D*4TH_d??Y6&X>JUqc)Zq^h0<%Zg0$JbBrmm8{!{|ouT4RwJ0 zHu=JRTDJeQrbwU#+z)tqf-k?ukW=#I7Z`FXn!|poEz*CEA>TF1@A&aE-SS7T;BV$~ z+)yh7V8w|61LpD{s`K2?&Wpbd8&2=c#{LgmLvj9Cwt9jazs3eA8T<{uIBh4MY7X`P z12+8jwT2P|SZgR}_!nypRsVnATK|di|He-QlMSaN6j0NEr1(t|!jKHwwdnXh*m$tQSZ-KhEH|t$miweI zmW=zPun!zz zbD!iSfFn#io@`_X&SCQci)nMiV%pp%F>NyLlh7MD!r+6&_PAlOJ*a#5czjrF4+N5d z;&prun?LBzJjdrSbrHH53phUswSXgR{$Or-ZkSu18|Iehh8EEu-wzuP=9Y(MrX0WL z#4Z1Ci28&f{wB2(a@sigyIyW5M9qFm;p6xlg%A4S--w#~Snd8_qW%+W`5WaI2E{3* z;smB&vKCmK{9i`B*-sm-r~0}5H>~9cwe!1D@!#=~6CW|aIT&rioX*@Zr!)77(;567 zhO5v_wPPHG;r@xIg6z1i8%iT5t`2Yx8xNYf0q%#HUfeL#iyLNoal=e6C=LMJhrmoP zkkSPm4|1ZZg6k*aL13yd1f~i@V5%?#rV2w&RAF%c349QkQUp0sipU@*@(&zgnJYHaMQ}A_&y@0@qKrhx!+^c@kUuP0l>92f-;f+CS{=$9bx!9h63X zO%+h)^^G=vy4NZj`{@Y#sqTLN4OM(61un7^Hu{@|DFh}&Auu5dw(&ke1eg$oz=S9S zCPX1HAqs&BQ3yI z#&P6lLyd30wwFB8L1#gA+FiJ~xAcX~06YBi5e_!p8;8v5D8~E9-Bhgtvjpn)IkC^Hby%FeSm(Hqf!`C(4`;0%AwcNwY^+r)0+lc&0 za?M>*pU`S{T?}T9XYZZwjYyy* z8Z#re4~yKSXKmue>T~5cT@&QH33DFwVym%Hn_?!(WraRff88Y6x7PeLJDirCMx`Sy z{mt}nlUYzz<l<<$B!MSf>VBnpZIk&@Wbd#p*S~{AWlDl4MoQKRPV z?O>katjeA1cSt9Vu$9KRlK+)h{$uIjCT8O;^lN2tli7Cq6c5Hbz1*v?= zdzrN;$#>D1b!N0Zx>hmBoNmY_(O5k+kH*AHnj4l;3^15zFc8c{xs?dilMdvnsC z$%it{g^WJ?BQ6mJeAraN6|8!_Ya+a?!>G2##+&|Z(>%(B+;-25+-7eAZ9X*`ElgCX z@`78HvQOr!-N;*|9WSp0ObrRbkrZul-}_m7{bz&O_&qrjKBh6yq%ffNW=vHi7u)Wi zYe;tbqL)=1D-P$byY#`glif-rzhSXn%LiUCo;U6`nY;Zq#{p}Zv9j-r&}J{xQPD`& zOAyuqI0V$|&b7}}HeVs~%s*u2@eyd4>APv(^<2@*R9An$y{q0Yr`v7K^u6*V9ibmH zj@NTztVw@w0t+;jHEMTM8HuQ??C+kWn&KOz_|L`qxyZpW>xzus+`xyZvR}Xwe_7P(OG%ZxEvq08oh$z3|pqM|&!aO2HrS-bEr4#i26%dWDvjnfv1Oig>_ z($28A%@S@_jP771>N1929cq<*I><<$rBRApC!iBu%|$jGZ9!g9kf46P(4Q!YpYZ~N zxiWIIm>@%}ApQv7;OL!*E3~VzO4)h5XP(kHlWmfVWiHRB8AO&-9h6OH&nZ+F!Cfxb zegI!W&ggs5-3jp$DF*yr1+nV0t@^?42YQ#U&SOSRFlDz;w&?TBuI!=34Iz;FPha;% zt652CV&gE`;H#y4k5RmV!_HC~|8>Jpa5p=jIb6gq^Zj=4$CmE-+6i6(&6X)FYb86* zsTh9(OAHyzLCShrr3+E>f$pp{;cWn2zE=k$bTFqUsJaz}BI zX8_aY@akNshb!iUR7UQ{RlJ>xlOm~Ci66txj8n-P4PV}G8dC~g{$o;^}48w+`j()fy37|k%(y}@Lk zC+L2gUYd19(>ASw3ms5zfA&$UMjuw9xaC81mAkQay9;RtLh@N>S4bs^c26Uh7Ss=6hvz8~drApzhk?`2^GlO;-aLSrKb)F79&da@O{@ zlhfMxJj2GxNv~Ohm z7I#&wFzt9Aw>}H1*V$gk%^q-i&wR)OT7B%iAH5+=7w-|Rz|)5&URu4 zQfyEjpKwqH)yQEhUkKyF^Xc#d0e*^)OO)Trh)WJ{5z_DCD&9^U%nG_kakM;cjN|0U zh&F^s5`e=HfHGs)C+?a%Zl^QnT(5v9QssNwqRy`red5X6TOk7yK23^3#OtQG1=XzN zJZ{VRDmo0BCmirBki7to$(ml%i&E`LgfvQi*?lE@aZ=7G zbvi7)#}gAO*lI5X0!Yrd2RB^dV(mjdo9Wb9o*wQ_!;iYUAGCLaggz9FK-j=ZVV$_& zot9Rk_zKn#rW`%o1zcoO%s#DKFI7YF_22V34>6CrKjJJaY9Tad5`FN}=xl5cy}zFf zskq))oI?J`AVJi-GX(Go5qY<<{TT?Z5n(d4U;TP?_GO*poxu#UWZxTMwq9eh$mS$h zT(r8|v{`bBF{!R`SL}|xJ6n|hAlN?zRV$+C%XC7KmM6w^FJBuK(amA|a+Ff2ddmiD~^?-->{gnOBy>OHt#6r9Yhmorwt8!m4F~A~5ZKZ2&trx)@0b#vQ zkU5H@i^x1n19JW>W!}sF?dP#d+=ZUowusfEeyX%pL8HvgJHh?kLWe}>g^teSZ=v$c zdOuyk4TrJtBWfZ0l`5@2@qI6;p3&~YS3Gd{kOP$7%H*5gpHU}bmxSQH zzcitD@E%KbU0=Oc{^=0u4HSyOo%o^+HnHI0 zXqqT-^XKi2C$1{1p|RBWuTVdmf*;1$iLL0E^-q4!dAITcwJ=B8Q<`9plB@olX)1}c zyxdDATLNYAw;0TYF5L~2ci%I;6VJEzly0wz6rF|awfw~-uk@Dkibgb>_DlHpuAo<4 zc_t7qcD-h0Z~6}1ApF+~n%+jz$xQO{7P+c(7ENc*x>ckwJKulC{iu+)EHkp~!92z- z*7FuGi096A=A}2YfF`Lp;kndzH#!blZ%!)js81&ikKV(-E|oc~V}G`wGPv-|WPI8A z*AtYY0&6DHk)kh|-f9Tu+z#4WVf8lEJ9K(V#aJHoX$H8@o%I&f=Kg_MbKE&hPVrgez^|F0t^G`^+pVz40l~ z$E~#DFEFy9s1wMuTNY|r;f zs3_X?29H@TC%O5!D!;=-&%wYc^-uRN>qBh17Td*fRkr!k*-V2Axg@up9y3E0BIk1_ zzx3Xyatj+ak|rgY8SSD+nY&8iPDG*H?={hXR-Otzv2C;?P|P=$`jVI@u{h1aC)*mn z)f?>1j??6M{ys)`$v<%`_6A+SbpOyoY21YxBP?M-lw%5MTuBK-v^v~;c5i;*X-CIw zeh&*W>1033W*u?%gc`9jjEb9>yi>9FbU zBwwjIbp@LT`zw_5`CE>~u^ejK(mM3#EBnvQ=%=Llq~2{|=xG|wy-!}W6ZQD6gGl@v z472HCy}J8%bEbFBM$qpBstmMz@v$0c>D5J|pbWEfQ}36zqakDQ3Jm^g;G&~T?{mNO zJ@1Ou5Sm!wLK_9YIB|0*`dHOl9ECKJM??tPZ`0FEI7*Nw| zxb`U+$FrijGR$!4Hc7a%n?8z`C2IN7d-iCesgYYCLInJ%Jw@-|3b3@AFX9PiTj-Iv zq;HR+d3Jd$Y7E7VHgevMTQjV# zsTVho-@l_&JWa9oOwzL~vacjCoLe7_Dq8U9&SJJ*8UKi;p`%k-d1S5)qUWSlh`Tka zP4DfeYPBgQV$!qo%yFN73clkYfn9>+`wk)_Z6uJ!Snn z9XyH-si`OuwSXqiO z^R1ffZJ&I7%ItkH6*Bu&Xd77_!5^D+mjn+T-9q=87Ru9|7XLEK&y3oEm>8oyxeuv4 z8-rdsJ?0jeS-~8pvr8o9EvwJf@k+i*^xR9{v95-8Z2TxR9G!fS$8^=N@@=XS2hqq( zAOkkRrGphZYU~j$CYh9Bb_3I^*hx*#`cZvv;Vj-D|tiPuKA&HekU? z;YA0QjkbyNy{+@_%v~*0j5BUb*X2)A3bh$zKNxQr27rMTwE1+e5iO zgLOpZ9QielsJ?0=F>#$BB$$w$-Le`#{{h&(9y@06Q>yBsJZwRF}UOLxN5NmyJy!I-N1gY;5 zg;4G|^D2V#c8_`yinBetgW7W^$9_Mo&1jm1T`N2%0pz)M$2WV~+CsI?aB$wU_Mst5 zd7JYG-utOT_$%uJSxtP&_z~SMd!%9?BKv<@KF$t}!+dk*K>cl}n;Y3V8bPn#)VDMO zp(vK0G!~L_(6=zXeM6Z=-0HTqp{bP#i<+sGu$8^(ALoDS62yKI^kI=OwX=5+y`yhO z#=*`as}K9l&czM}Fm$+MPsRrBgt`z<`=5^8s{aG>Uw8ib1IC~B|6yWdXA!o)ecXoN z|EL2H8!s2@|3wENE)Yb5b^v1I04{Lg4b&z({lUln@>3rS+lc;;9#qg?1t+rx+~ce) z*H1bTaj=07M%EVAc1kw-w~fAc24E2}b+DH=vJ#5AiNhT-9^iUEhVZ*nZE4(AO#A5Q`PaxY2DMNI zj%YE#sOgZ`ueajGjH7l4qr+bx67Jn(*S#P#>|96{)h;U$MYY5FSPG<8NVOOyza9*G zO!fGB6xG(&yV2Ptj}?L0F?;JRhxc0vvs2*-?#tCHYYi(~p5t4K3GQ9BhB$El=l@c+ zwR}thmKnD5-X<3rD9$yA6w|L?seFX{EF7hL@uP?+GKuzQZ1jMHuajSc@}GNfDu3u{ zCh3uHyGTkB-iGp8@?YLS2GMQs;H~t;a}<4nS~Em>35Azo0aNa}#N|fkgT=w3)^Jia z6_wbB4?$y>*IiwiD}1wjF|n~3`Mmu6`FVMr1)R>}2l{~o0Sh13uSPA8RZ}ivVqlO6 zdZ_E@Fek4qFE5XeYcJ;Q?`6B^*a&Zi!kv2^G)0nRLeQ75=k48CUF~XTw>md>ousg! zpuewA_Qs7F^Fcc5%cP`7hkGl6^^^_g5xeg)PYe&6T3Ez1mW&M!ZmrIAMk^g09MG%C zdmLn&7>bCdUPm^5WqZE6?wq2k9@Cfk-mJ8=v;mWh`1C==in0c($m`0=%GVKSc9P0v z=jRp{7NVkX+TjQY2%?YN?`CkDTUs9MtXu{#;fR53z1=-@3`9rmEUO@Idn+ z=X1A&kBgE5lm_s;r~rPPBv)_U+1G>GgM)*e&T1{%iveH1+Rmeznwd@y4-ZdH>emaK zn9P3ql*uS_Rthq#s^gg$g+~TKUinyDTPPUs%ebaO+kcM4othU1Zc?E!4W{IfDg(_s;6f?#ANklHuOx_4TsL zXEXAt7_Rl4p9qR}IM>aAVy21}ELQhfljVA{X7{_8n3y5esC+mtT0H_%5)u%LJ=$tK zD))49cHY{0?=2@s*oGnxTJnD637EZz%*AlW%uI3chUq(pBHhND!{s_}6Qlg{;bv2O zwD-SEihABqM&W(9GZijWQCZoWOmY0)q2n1b!R^ccFkEU99UVQu)!W-USfnclp1xyY zF*Z8dsV-H5u$?Nez5nS=e691!h~UQJAd3`XgV%xC9-{_)$W8F|TVMFoQjC#nYirTb z(OGmG_<49D5~S@aIyySGR^DfU?+JVG00SL8$6dg%y1cxVDMU?%WwOLZ{eFYsI9Yw`= zV`Fu7bqNg_8`Ox1h&^}8^7HdcOO+s1N~GwRm~n}AIoBG#+#qzB9d35h)z;P~_}r$X zR-|)7S0fuG{+TY)HR#BX-)}i4owEtQll?p`RN!f91cx9$2{H}CGl2!Vl>LTs{)cA} z6K@g3ADMQmAK8x*AkeJnc1pCb-0Hk-+FbG+4T{xGO-(H=Eh!?~Dv(~j|KO^rt{!0=);h%-hxNGy zZL=0p_FBy2?k|E1%gaegNrJq*ku!iF9V!JBDi=q^=-JwSWuzuNH04dxYrOg#2}~2( z3gyMNe9Wz_Ed~aLjhA8+3gDlP&f)gg+x3bQJqrtFDk>^6GBT^)?^Aj=0g3hZ_fu0- zyN#7;KbAFTK9IL04Q)<$v$wYg@9DY2X@t93azD=5aN}TatE;Q)Iu*rC-{4@Q>sreU zvFSp2ly3Wj>GFbtg82COioGb0&pm09iroxqg@D5^47ypkj&gH8oGgYzf&**xa__oC zO=M&w7Pl#;Q`Kzf7!F^t1j5&;tQ;Gc&_$^9u`49zELL{+i}RPZFM| ziyt#GqFGM1a-DRChRK>WZz&PQwjITAtgqAE-F<%4WUS>jx^|mFb!!KNlXFf>2H&9g z(Ne>c`1lRuWI<0wY8Pv%Q8U8M{YwbV4`?}b71n!3Mn;B)hL%PvsRbgC%M~9Mm^AnM zJaQnZDjk_HTJNqBoHYvPk|huB?ah({jLRrxOUG5aYNC9pA^+@l)cI_aQcG8sl_sQ5 zgIKgqV4*|u!UqNi7Z(=#>^iD4dC?^_EOjIDpWj9=$jr=KSX{h9Lo-qDURho~Q@=_# zyOubSvSd75;nCteS^4s%C`&w^8Y5hD5G_aYq;t5cs;Z`(YUp*Ur}&qMh&H5L7_wf_ z<}KBu8T#g^mJ2v_}ZOG}^|_vpj!ZDtQg z4-XF@QQWtdJ@+=>c*?xI4Sx>qDVj;&`}ab8e7kG2-P7~f?}vue!9u%959Fav-es(; zsL0*8>93$VTDy;yT9^?>@95w#4Pp4AE}93#>(0*3^nAqlyLTT27$R0P*!mlE8a#5k zpQqP385KIWw)N@xcD-)vFsDJIwx(TVP!k2H(jTrAwotqVBvw;U9Rr@bVs};swWBAIHYD zRE4~=uU-%bxJ1Ixy9N4MQ84K$D12S$XE?B^U|Kn3?mAlyILb2$NL#JNT7B5)%JQ;K zy_*VCUtizcMpUab^QB-hpvt6K&q~qpCelmZSS08DGG6O!sT*%^2@lu&V2mt$H3{!^ zcek^%b7vD!lQv{8QBqR61>S%0;zdOT_X_nDoM4mgq@2NVFpmJnUSUC(u)_q6D>}Pj9E|0Dl4rm zEV5_7pMhF3V)cphc9srpVKv_yF~DOs6Ns>G24J*4o$j+@UNgxJh>gWt+>UoR^yH#wj@8B3FH79}WPjHf)lbN_LB?{MYv z`$p@%rj8Ejji$~xmaNxYFMbgFN8fk4>mWQI=FSbhCyzA*Fue7Ofs5I&ZCjSi!=%xN_Ad9C>3^CXU%PL5P<>VT5UF|M7(j7v_a1*4Nj8PTB5PR?*NW zudJdne-$NzbJ1J5TRj>m6P_7Q9g>rr88RxCIh>;KrjeJ9Ws>jgS3$8X^$*+<&dh2= z#tA}7Eg#Fvxfb)R#%s#!>MXS7clY)-#siL=JKS&J1m8`%ucU}g*IIFEkQbj0j>ytm z5q5kCm}mDnx{~RpygKj@06`||XJ=E zl@!<3n%6$w3rjRab``FD99}Dl?LyMMbL+OR2izA#N(`TmB7#6t9qul&tO8WFadDY* zxOLfwpWY!K(dSA6103A3kiPwDNG8+8nPj~<^(Kt8$ie}(z~e=_=9Do_$1 zRkW@Z0fVdA3Rn|GMJ)KCz*ZR;7@)xkzKlZ0z;Jao#AqyyR0RPJiD=Nv!P!|(PA)ki zp>4INN8u>P0`==uljatrD$I25Lz6pKE1Re(8juD+yXb+pp@#*G^T8?CLaK<$e) zA;8C<29lTh{{8za?;GWkDpE7KA5QItgoLcFt^#9e5odb1ydc6&M5`|z=1Q2E8FuT^|YMd}>)5)+B* z>nbbb4mDZu?7d?nZXcyr=0D%8zl&cCw|$?MgVZxUzn}oj(s+aCEeU-Mc?R&JMy~^U zR3K@i@~;)dyficAWO>|cd|Pv zkb+A<2*)vN^YQcZSJEez0&ci?-Wxkutgor7>j9&+wY8eEa(bl?TJHe7b`fCDeT^9E zM(%~rGYsg8LL}1M!hr;~=|)*Ub905d><&Cs6;9Z_K7&ZWq63UrkFIh)Ibgs7l}gC_ zFvjTOZfi@6o4fl)seph0FfsY9GxGK=8Br%|ZlE$7Kfjifw7_LT!iXtn*P-EI zU~OfnezMW_m1)j*2UeiJMW&TZLVUauvL-~{zafS)UMg{e#1f#D?Ujw4+lp_Wk#~g1 zoLln^Gn9>^{3&o9{{qN6VswknIjO9yV7akhMF?YZxfXXW4!51537> zV6P4TyxQ+FD_yn>aRgA^lFP%}(EaWb<(D*X^=q)w-Dz{JI}8CTof~N+QF_Fb->pik zoEiJ=>$Bzr14Q|JSFgs!#jPn?_{#{y}&+;4hzz+ES`t&-O`9pV8ze zQOgpI7LUbK?~L4Cyije^w56i@2$!=xJq4fS9vYzCWl!9|BmWP}Q?21kOG~?{oN*qv z+aO6Ej$?JMYd}Rbn}MqGu^z?QZ>HUI>gu#ABCWZHbqZt~(WMLGR-Q|SleFu1#xkfG zo0zDCUnVBbso&omwFb+yOzl!VD>EV9VWf8b#g{J@0J2}a%ldsoY!TxY4*SF!H4P2Tbp3Xp^o!?PDkN-lcOF$wpMhF- z&UV|4#l@+l()KxPi0!?%_g(mt_VGQ+jmEDKYcQ;ug5KP6Jz&{ zc`u29kQ*1Lz+Rk7SdCN_qRY&et&SPlExo;K zDNje#*3jpcMap0)1D=kfudb`(pV~v`Fd)}`gp2!x3j)}{l@9sOihO z8((d5(`GGMmLg=~L_J>KDH+FB)PnoaC~}t1hGu>iW&Plsq@?7rEuVS65ilyCAFszM zS5yiIn-3PwFG0Au`*v$;YSwkJ5~SZIEbmAsP4K;{Mu3}ToY4|a%|lE823crB1eq&e zADHT+-3^(* ^8p5>_<)PS&W-@d)@t}3qDz+?G(Rf)#kn`68!ijOu^TA9 zEu|!-HPhOgv@$Xh@6J^017;O@yJ)JpKBobBBf#Lh?4J<9npSO6rn&Ize7=VX*vSHo zbQKx?YN(X3Xh1bOqQ79r9b4OCz{TH|^IXUgy2pPJ8`bqydP-{3k?=X3W9vJBAH3?> zq&Ll(GeE<5B?7R8*5aG#-$qG;9KZx<NaYh{J zA=5%dE7}jHeTs|i(%BTO6Cr4ueD2%N9!cn;ODWQo$Rkg4!&j-iQ0VB;nyikfb!AC&WB zV*uN7)QCV5WlCRMS+O=VEAd2u^SS(aWrd&yC15rNFFkCKP7UMo<;%dU0i)rD|y5d`lWJb|-uB10xlvFql&2qo3GLqm52`gK)RAC?@vdUf{@ z`-S`Q3svOgy8HTK7_XDg%b<$`w`>EEg3c`sjrkpI1UNm>Z(>_(ZUHx`vp?{dv`daj zd!WBR!T4Jd(x-^ceulSZiB<8W)2KElz^Q~CY)hN6wAb+9Pc7r_NuCIE| zV8*E$DZa&`=s_5^4RI_@BoS`-NddIjsT8=jJGPZ>>j#1FLG2K<8tcpcR5G`-o1muuBoY6 zax{Sy@>_!{M8Fh*`Y{vVhwv1J zWg^zEWnih&Y53NmdeS2ThG!+8UbXpBn+m7+K^L8<ynI8Ll z#X2Gm$7!xO9F$s~2R_A;vA#Y|R@M*7Ds+E{Rrt26=2p)d8g7D>-4h$jK>JGfCZo`% z;s)M3U3M-m6xq#s1;mI!KwlFuZ{j${`2tK*JxAWOXf8b5(wljdE zOLe~f(%$P~Y;Ug=1;6nHES{FyhX?9#t8JS#u(vfd2yQg?Vk;`@e^Vww8mQ{AZ~D9= zmF9g3Nl2KlW{^m?kNJZ)U5kh(;C<%7Zl7tiN zO}+$PyqaJf=AeLmAbI7#x{y*FOHA6d=H}+Y!a|Y3kFx29msbtNpyD(zWb4TPM9%_l z^<#OAP844H@q!T?mI#ojaB#RZ$jESTC_qz(gA0%n_N8bpC;d?rL!Iq^C8hxs^69`l zI}y{mK(llBCZ>NK16U?OK5^j#-`^kq|1Q0N)GAUPmu}9y}do4=N7By15yXB zw#e&-w?x{ASg+4XL(MF3$M`r9uf12UTq*HzaOm^SeH$yHf0rNM#~yq<%e1Gmrly%^ zRb!*BhDHu4@DqHu-DBSw0R0BI+5uN-KeD`*wFCwMSNa=mb+xn{G#|?@V*J_H-nT0f zKI-BsnTofn4%Y>*VB8R~r2za^ZEbD9#jvXc{C4bZNeKxcqS@Wmg@K8gxAD%PzP`T1 z3vdoo(`#`{z^@5`K%%pb#Ba`!S1?2uYP6K22DinJLlo2COqMWdW01$olxTYS&0Or=UOu^__tk=OCv2&_oVaT)v)( zi6qO)(o%+XvMo_K7up}g^hg>21K7gi^XAfM6iJ((CS4~1Bk;TeRonM!-jcS&QP`rr z&Zhdyw@-CWKn^B|iT=MmS0mucs82Lk|jA%v& zZ4U(v4O4*}W{SulO%N08yE0jjaArBbVvBwEX!|Q=qlRzmB?Pz#ksoC3c1B~Pw}Zp_ zY9MG8P=!pqYGXn#va?*N zg|v8Z?#BS1Zt@Ceib;9B68XYI_?$3hQ+<8%Z$O~w9{bkv`^rhD5#a`f;g3BI&XY~Z ztMFv)EOb6cLF_MyNl0|yzEp}xQeoKu6lb<6gyU)6!hJ_%;Xdr4KqFk{z~Cf% zz1@It92jG%2WBbOO%Gk@kWi!Y98p6NbZYGz-8sJ;orQl}6@3XjiH|n9lN|g9J;1>| z5BVO80zCO!SStLl<63_cb*pm6J)x|NKfLMM*N-EZ-@@n5Lw!>r@;?ct z{qTnW_Gk0r5xlAer{XVCihkVt=a=F>^Yr$<@Y)^?NFllB=bGwZ)GKOj3p*DaO>nmFYT2nmJAkGSs(n zI3B{Dj2+f$R@qv`%JeuX2AZV=tpGihv;(~j3c@Y$4737On+!T((2FORzJd5hR@EP% ze495>DY4`C9_L`OvwY9b0+*GoC8fk}=-aS-1C~WhjSMs&04YCGVoI*|4n~$zR>s!g z>qWU(l zoF`B%%p&Y$0?i;h-hGMXhQ7~#=}M9h`;q*YRUSmw!MVY%{hIF@Iq)`~z zwx^9Q^h`7!;#-m|5eo{%_B78*x--_elsUr*8E93uv>;a;e5sUlKRUR>vU^it_t}}< z&C!=>OHK!ew;f69dHHL1){|eB3JI#*6DnX~hAb}4y!rHHeR&*TaJNA-S*W>ON>UBB*s9&e$ubjw<`Xh%&^ih_XuA+qnjar4vY1Ah<4vgAUquuV+DTL13br%;3^NCMVgs=5WV~_RcEmlf>lZc?KVe9!2-(EF4|guG+mIF{$YJ z6~56&ZJV+jX%qFJ_r{$kyh@_Vik#j|sO}%$sZV2`Rr~a8BJ1UiD94hp3&H37S|5kK zQ>5JqBy(NY@x6R#Q{Rx?F*kn$H=Rh)E~@w`qKgZBa^B2kWKt2jP@Xp;-RkleuSBb- zlS{2FWKG2{ZGL*9s?cp^RZ$*-G9ab!N{ajQbT1J#`MZAYISrQHNA@@yH6uc_s_~Y1 zT7GtgaCAd&R>;WmMn7cdW~5&e@<%$O;8CjJrx|L2fA$J|=3@%q07<1YsJyilJPGXQ z)rDUK5bW}Xqe{G>e*C265jC&q3FBT&K4Nd6D|`9n z4uV6(1&j^S&hp*P&<}6_|8^tUT zvFi`^3*UGlPJnui!1-;)85O$63BJ*Dk5$TVPPtlzASO@;E85=tQr+1bkokGyuE-uW z&m}n@)A2iJCws)S@R3Hoc4uL?X)ev2|6;Ih7P?GQx4ZF4+ElrrCZucmdBpJZd)rwx zH7~8dyg}YSFG$D#W{Ms2HNq>LkDbhx&98T|9haZVFiNYb#;}n}Na$!S&*oVog>2O+ zhS{PQJssq)OMO|Yj*EM7P1Wy0VVHf%;FY&BXdZVVdNT5dm;*Ov9!NipR~RKa5Ulf$ zkm|l$*xf&;S~;2FtPn9Z+N0ba$9bNVUFu_ug0>Es2&KV8C7UCiH%$!ME*%8eoE*c~ zX4(~O49hiR18%N6Oi(z!2)^7Tp)C2B9Wy1_dR7CGS&y37MQUShiIHd0Cz`HG7ilc+ zi_JPC!jU0QuI{JFngOXyL5gkFf@n`x+oyXAn{^{T2N#H!I{QB%*3~H_kNXMRSNh6t ziz9nOdd3Bx2uV}tR@^~B&g3!bK)?X zBL3&mpD38w70tDtBPnA|?3}TT+FLLax>bMgdAB6m>$3zU1NK?5e)B7vRwM`R(zK0=Cnr*C>M7lzv68> zLSt)v^n>w0%66f>#r^!us>&ZFJ|y$EL9HRZf{~J4a@s8-cwJ5?46?(|R&FlrUw<$; zI25-{Z`187ts|3>0R}K=XdKr9@ON{8!<6{+ku}{91S80D5%wXxAx)5joI9cG1XG+P z$q!@op|9HpO1tut%@4$BO1lZ7+5gn|hJ_K|9GreCZZg+f0pGPmiNdlB8bjgPqOsQi zfrWxYl390_Oxbpp7<%(9ill0%QV(c*CCj-`GqYo%ln4?j1kov*=f&Hbhv+SpzCBNF zXk^M%y&G%1^6O;|4FCn!g0zAn{mFA0qQN*D0&<31`OPg7!taLkW#ki!bzu41!_MZ~ zU(FR@P~v0xV$@2g!xe|8>U`y7PmY(|2BrY^ZykSIJ@M*5+%Sb$2fjj()UN{Uqv%73 zW<>@-%`IQ;RiiK3LGhgXbRnf8XVGu}95w9BW7~F<8^3VED2(;_T`_Lq3R4a4wMjG+ z%rs&p9vD2Wh3zOT*aOy0%1>E>vax29cMvrA-71Jgm)6tpb9Gg09-RwvNbBW-`ei-4 z6uFc_;8FikRjFNY+PO9MW5H)iIZ@a!&v}Ha zQ`ojV0#)>_gOF+|oEDVRzN(wRE+y$2f?Jd=I8I+CXZ2X@I@}1NcWOQt`VA1BN9&yMPux9aw%J zS$#RBES#Se*Dki4nJMM7k9ElaR2>IrJqT3c2v}wQkFl1FjH~7vH>bk}Zohw-NMJBQ zHn9m^O8~0reXaPTF-V0^+_7TM$XbA=NPx1DX3m(@p1jn>%DZWj!VAQulnisIrxX3U z>fO8p8N1v{ow^!;8#tx9Wn9UgI3xsu(;12azCt}Q_QZlEOLABgp_N>FY3q~Pg};8a zhBRy@l@|abq9)lsVl|+ws6RK}&mP4D0^u{GyaUT%?8E0xH}3C{$VPpS!?~KjX)$Kl zsahU$Zv(ikvi{*!=)rC#k9tS&$fin}vls}8cG~j^$B{LjiNtQLbK8e1YM?<&E%H{7 zcaGz=SYpl?M1N55EMoFSv!E<>niaa_CX%ctWx*7R;AJEsVIevAdnAii@%pBi1LBtu zjoO&Cw1|_240O|+bZ%^~P#H4LcTbNwba5aRXY%XnMrtdI&Q)kBshnqN>37C^QjAt+ zHbOML>`-~Z`Z3UsLLG-ZMQ#^ieyBmYhCIn1IA_6_tPwr&tCVvkO z__i)trCR8`#sD`6==?<6EQStn+i9`loz9E@KjCvCY zFyxbI*-GfJY1n*4&xMJDNJ%@PF=!K0?Zsw)Wy@o?=y2nwvhYShGI@bmRT+o^#)V}m zaK=7N={ah76S&KKu493{-{OE5uW->l$_KQ+$_DF`B8Xr;CJj-mT8-!slQQQUP#$>T z|3GDv2Tlck_qaGczS#d_cNsC&>?<>5VumQ`FTj_ePc44qiE5h0*}OxTk4zG97L~Ze zMIlVEci(z}u3|qoyX7Uo?*z8uF-HGvScoA8ZjXEuTVl+$HDsSf3Aslw;3jb4{St|;u(<5Izez%^_H1V-z1IYPs351Rl4-|$X$3ro@*lD4ypas5W5q$ z8Dv(6{mlDStl))rKj8A&yGIhlL0*CT4FGwCwkcvbpFL{ACL<>ZJsT_*qZtk~88(4v zIzTTC-mv%!13-TdJ5p6;WgA+nIpJ#{SGy0vwI{+uxkzP(ib_RhmmgC=m&mnAMA&}DFm z;|i0SCT3Cf5kDG7GR#`>A}81LlG#!j?kPL<`Hs8%Xu)mCrAtOi!XtOdk*jM(s7#?~ z+S9XZXVP7qSb-+zgrL%7(3K{_wJ6p05#GcM4f?ZC^+n^{vj2|~V}VE$))1!B!iWGd zMhz&iI92nkCTU#|1QxuJLbJm;X|$=55vEtC5qie8?4tj`u$(3n~dxv|T{2bb#Q&}(%m;id+WvkUbqn5_nh zm~2c^5@)+~ARR`jeL?r+=p@n(Y8eZN>_#FP0@&Vp3R4oXQD?hk0nc@hv%Is%MxWgy z#VObXS$x+Z4b`2UPj#Dt=RxYK#w-&Tpe!XQ67>-3d5?a9{B|8&uI9v~*z4J3$Jq8I1*a`9b#W==*~}#j8@rxd=o;9qPF!20y8i zcih67++7bs&az~#xP(4+vr2T?dLH3f-U|L=62PL8kRDO(5u|5yftyr}AY<13-7>Y5 zsJuV&qX*XE9paTo&`LNQ9%*&4zTQzky~;q@HM!luTzg|T&m-s1ygnb92LZ6pu6V6n zd)F&;>5!*~A|^==Io0uR8mu7GxmmIpGvuA0as6S&C(q z@|idc_gTFAMh?Z|&A4B6M9DeHae{&M5Gj(;v1P@rFl-0OuBI7J_QCVuVOfEhz!YCE zAvm@p1tx+OScm|Y^skzK7!kDghtU}<|??(H2c+DHH zR5Y#G4nZ-K7MP|7jozM(;}`f_F%NzuWb}Ih`QT>_UjP@+6Lyav!Lt1ho!eU$BHT-E zNNQV}oJSiMGOA1=3IS3ogIcUG)QVsxl16_b>+W8Jh|)YG-XqH|A0hPA3t6`XS|hHdB%{N}=&fDEY(b6;YMFv>U1AI#k~< zRVJTac#jV(#3b+|-UqTQW!n>OUb_-2bBJ;_~ZQIG8UZviXj#^qA z0m8b~{`Czwn48ZF5>|Y}fJS;t8R)J}gmI>+EDu1Kpzjbkc`0_^JA5Jw>MekU7nE9? ztAlhy6z?4ml%$2*fcbD2enHXB6 zmc5+s8^fs|4t70h-;jL1cd9DVQ0^AMRpdro5y zh>~qQ{eiLtmWfdlV6oh%{v$wx78#u;r8Em+ATacC`-TB`#5XpA&4l}8`pfz==0_U? zV0%TV+Ee!cC{X4iG*e*Wtk6~IxJfGK*z0ZbUKC&#FrHb|0p zm)`lbI?v+B+S;cf{wu5L9iC8$lFh`+fLOO8$N2ri{DF48LIuOTnqEe<-k>IHp>oJRe{0-%DEit)4x;l1MUe))^-E+vK6z4$pDA)mXIa5g%K=&`VXR;Wb z0JIVEC+a(!0t% zK&}CU1M=o(;E#md@X1ja_%4FX7q^&_<|XW>dao2pzNk*W0F(m#HkaN$NjvMDS6)gv zWpI=@!nog69w9+y!Zyzz2uU{GHTxCf!FK6jQ&Xb`WUt`=q#MTcUEtsISgt*(H04Aa zs;N2VX_Sq0tcSW;gg)l1c2pOY-QG*wLRt~d7DSH$Ne7beilzWTK$_P1)r`2lLOwy@ zemGS}?uz4&X?wTwyR0GK_roR74icr<^Nv$7qLIrGrf1PqZBBLC3%y3#RVb_GMTwQQ z?-SSpdNliu?oOV?GShgGiS%y^g_V}2=>r`ofs#MD+X!s~r@J`eRd!?Je zDh^TYa0g9i2o-~zCt5I>`X6#LBCMNN(ukpIc11$p*RhMTzvC&F@lX1Mu->Pz@DqA> z*?%z&Bu`T4Sa&L)F_jBWVf#a+LsJkRqZ95C+tu@qUWqv)x%ixv?q_uHwg*d6>iEF* zW%Wa@$=J(OaX>UTw44p)^(G_Mq!Tni z9i~g!OH&wP?klH=H9=GxwErD>XB0fl_c;z7&NKB{(Os~!A0P|Vqxn-L#|=mhcY7N- zm{!Dm4#+Qx;tFWpfD;8Gy{_>|x_QI2Az|~;mU)+C)Bv}vgLRj{@a`rN-DTyrLE{qb zY4^sL^^cR%k36^azMW7_&v}ni8u!q>vxvLhz2mF=lyZp)y}a@Fn#|5w{Ji^@trD{Q zn#L;L$q*z4b9s3ESEYN7r@MVi{WiX#H%Q0cPvjQHzyNV`s($j8;*bQ39+dl7^trvT z{~(Pm=nB!keqT93i%oBu*hh0H=K$M{F&wvMjS0d@-Vc9PflA|6{48fDpZ6rcKPba! zY6jyXihmR0NH_SCO14Na@W0~}Rk`n?+kxDJT!(7D!J6Q6ok zd*5POMnkn5@LWD3i*(KH>2o1Sa1MOEq{$vgCXkpYVMo`p2sJMiw?2?c&DZ3a`l_SJ zUkE*d(U2gL$rS`SH&|-AGZ~`+@l7cSUtQ?CV6XtXq%m5e_SSwLrI#m^#%3gLXG&(1rPXk{oV-6SiQ`bvnULS zu=rbydC@$t0j?#-@OBIuv!wNr-|4AYmLT!Nc2CaKTdJZYRI@lQJq!Jkr?Njuaer*yjCY ztjA=z7j_0&6>BgCRh7xzrHA$=Sw14IjC;z;{W!^#7#Ny`z}Tk+!rWP;DTj2}d^Hnb z@(!XPkw?yBr96P%L{xCMy%ZP`;5Wb1b*gwhidzPJ4(ZAugI2>77g1nl0tMUyt~#pW zMlvwKhCzn(SP@i~Om3=yK@%`zeH&DkgE){TtH&45XhGM}9P9K#u8p~`c~w?SdMHLp zkP9SEQK~@}S@ju8OJNh8ALjHrw>E`-ZFajI_F3j}0LI4xOsf=1J*ZwH?Y6iQn9&-c zXlbWl6hkBht#0ZE70)Y0fg3jr%e4ZRXNXwfdi!F$0`G6>`(#IBVz4VkrfP!z4p_gc zCgml!w$DiFKRZtVYOK z4onNq?2>F3tFU!FMoRC+JW^TdMPkWQ1*RqGlxU`TW6+i@@MgbY(W%?(T&>OKHheih z*qH1SAgAWDlPCv@)Hvktbip*Mru_JN0baA1W+A+8^09r)(g>QUxfu0RLfGCi^)OMk ziYa#XLZX^7_d+6FM`r|3I*w6$X1R(f`gTKVB47<9p|(mZ1m}%(Ku99F#>g69L^pVo zNh0Pr$5Dgo&nE-%(~dM`p2MXCC_hMkz+s~qoVG;1^AeHI{+i6WU`%c z)cj+x999mgh}*Hw!(bWgD_b+b9Zy*d_uiqY|EG9k=Qmk8$Wu|bX+T`LrkO`XafvTtnr2~4m+f-F#@qG^~A(Z02n2)>!b35&3^W2^hIIWh7cbe#!qRt z3D#TZ2~mwBV59Zbiq4oewU!F}F|}B@8ruVrs+8*N`c6ysuo%_01SQq{Iwx0$F2>@B=U0b}s@_{Ow(D%|L>yM;28FDdBqUu}ZIDb;t=E$&z27J?z;1?gP4LCHaY-rupKI*@!kz!S%=qtG zv9yJ))n8fG$XV+zQ~4ij`+t0W{<2g#{`yM(6)>6qx+t>#mn!?ev1b2WW&h7@F_`|N zEyllC>;FvJo2dK0KE!|OK*sbRT>}0Eng8!XU}pK})&FM<|7M5w{~p7Cgqr^g zaR2Wy{MW)W3lqz~IJ*D4@NDx}cuxGL<^L%N@W!A~tvS}}qkcxMCn9sDb!fJNa0_n$ zA6*efUBUD?QgF=Lx!AGKdmd7`E9o-J6mcxAfPxo7ta?L^QW-I9$n<%>G;sQuy8kM5 z{~lT$;fsr_ETp7*tusxL4>?z+aG#e{b?tUn$HDtr#fyBpn_q9UQ+9ZGdksfn8xt#g zg+B<@L~6@?PUFMI`+9mUcL&hPd*b)|epqk%ZTj{-bl&Oi%nj>vaccSA^XWFN4|#UB4>Vkq8HLJs@wO$jF4C^RPuE)wo2A=4nL4Yq zor_oTHp#iqkDJ%i$vfC+k*I2;^=}zK?A05|FYlqq+RO9(do*mK=sJB7rIegt-L6jM zImfVDw$!k;sQts6kt4S;F*@3({G`3-f|y3tpwms96?;JtX5C)DuGa{>agvBX_lhmR z_nRP8y?h)tsI#(%`z{WSlWY5czTWH{C{Z6WwyNp+C5OmVFK>I6@SGqoaY;%b>1A8{ z2N4TD2d`BlSm-}wpAYA5$%8b^pM_YrWMA;<{SsEVIw!{&Oz;X~ci!cYV7tZ?nLm8( zwE|vpVN&-ll~hzE2*7k!D&w;Lev9}rcewmBx?41MsyYt7dd3)`irLE5`^a2&cQ^Vo zBCZIO%c+esJVqKm*_Dz6PK~JAdAU1wtS@elh)=)2zDo598(|ciO;qH-JbdAB1!-}e zWkeKM*@CDe9L0LVp-ni`7PGyc39HT?DTnc=d$zL3u^Tuym7aCC<<_gpby7dGHeM2 z(WZ{nGhhKzKs%X=`A!;i>DBUH|BQtivefY>mVGN!-x`E0@YCMPxH?~c6S1uYVVAE3 zZa`9u;k;{BEXguAC(8B)GpL$xW{7yprUV z5$(}LqifAorUbBCX;OiadH4ZnD^IU}|-HVi(y*zXtH&XX%{;XUa-)$}K zVA94)u&Ee-oT_sbVn{+H24>}IbZpQe8WFVEgmJvD(3NBI{9A2#uTu2(0aoMfc7$RK zrqQivx%f50Y-dwS9gJM<5jd0(OTm=}#0}PS1`Xb5ZEGJ{b`UUKn955 zD>wt|aIm=cF|p`PgOJZ{WT850$kP~Y5^el+s|?A&>0a;tgT+1nsj0i=L1V{QuZ8|) zhXt7RktSqr4o=PV&6y0r|CyW4#LqqNhv5uVLk<7FXX&L%V>v2~4ljlHO0~HjC#~QTqIL z8!pX9#=*9`w(Nvc6CvBEbG$dPO_1!Rd+r(Btz{ln=}+#GseoUkQ9LAwjD5lH`$eG8 z+-M9FZ}qbf*O&nEG5*KqGotxRDAh2sc3``8I8pZzDN^$GPbj65{#oL|H`bSX3$_j#;&~JQ)Wdy+7ye7e?R1LSaZpV{-6PU(JgoYXKaE#};pZKl>3Y zeFG7lKjE85NXXh3DY|vercqX?9M06F7Dj&kC9rCo_F|;_V=#^m0Rcgqq-pNwtgBq% z5gm}VKwLlWh=+en6CQ%;$jqu;C9-~+Y8tst%aZ37fw+Tf%R_o8Lo0CCmrST2!~dY% zNS!;w{X{2XmPR#2`M&1hIBX5%Iy~yDKpqXP@jyG4DOWw6EoUXXCZZGMNY26ln;`A! z$T*whq9-QlpP=R6kR~uqM%(Rsj+8q!@}!dh0?9k`HE~%Utx|vS*G$$5J`J0LsnoFi zw0Fd|ZVIHka)r}Cg1}}xD8R|AwsW^W*Cw>q7NE`UY=fu%u$CGK6?<#_thX8- ze_tM9Zq5vW^5Uw7eA?^P>7I^S4s1&uMtAtYw~pwy?DRh3Z z>u&TBw^vo3<4mf`Jf@sbV<@%K#P*I+y<(fDFBzjx!68P?X0fqL*T=RAG*MJAg2Za> z#-`%+&>1j&!2a&*C$H|eIhA^aNn)1rsb;H*$Qt|G_Ep_x{`|$eXKRCyD~@poitq{r z=Vn;_nPxHdz80|mCNwxN_ooZ^yXKEgY0mJ1>Ep50-|!6+|M2YKuy_=fbvvKneq(I} zJkI=`F;F93V7MpV-y9TH?glOobC(`}-d|a9@k@17Cs6cE8EriPHPNP3@O~7-2h2Fz zfTSj?m3aa-(3Xum@hUZ>K&OdbWhDpVS1G$};4)BkVQ_i=Ag^HQVabEKVw;h~F$b+w zUdi=}s{E6M18$+|668+l8`&f`Y@j6xY73J5qMD(pKmb)q{942l#3_NZ0q}L{lfgRT zAHeTtuIoaU-+vi?pjz6h?)@^iDTnyN%lf4D{x`*XbV0#NBZt$KNGl@C)^a1omA;7S z_#w+o`>WD3`n8E=31dKvvLWA1p!4;K2|?nS4ip=T6kvK2jkRA)xWtds?ae~TiF+K; z9<^3d^^3t2YQfEj?f50jPKid7B7@0F3?}#Z-DASqA7Mjg-q^sq_awv(p_@nZJG|6! z!d+2L`4}ylSMcC#lFeJ~L6wGG#G{O%vY9r3$wte-ANGZy zuP=qHZeR3mXX&ebzaIRI&fm>)yuP17zP%$l&hi5Ie{P9doN%)mwI3mNtJMr(9FQtIf&{MR$~53e&Hx;*G{u;^4@nSVBA{voFhe14-s*Fn(Pp z_c_U;ii}a<0$`LBX;O%sW!oekpOX!EtRjgz8~hbmqs2~yh`OAL8>O21YbiW96f=V% z%0elwq{RZtN_bG*M~d*ClR%Vxm3x^I(op!+-&IIAH~0C9t~&upb?-{O)^D>kTjz{% z@@Vch2%1KKhsVlO}loL2Fn!qchv7Ds$ zmPrJ&2g6h{NP*ICQs6${UG#P^o!C1_A&|en2EFTPAxL63xaY!dsw3Sj|_y$O48~>o8EqQ<}~+dZDE0rtSKobFgZ#D zD{VcMdLW?^#sg3KW9nK9r@9QHgy4eq`IQYlH(bJ613DshRAR2X@|m&RP8^$~RFNY$ z#-4}dwKf~iKz1V6sZ>L8A{SrD*k~3G)|gtKvf)Hd{=Ei;wy@N7`ygVp(mVkck=?vH8aAjAJzs@oa$#!z%KUeEHdfgB%ZiP|q^+4;DK-O0(?q+vLkT;*n zN)O4)vU@o!v(1BC5-KWX^$0ZG4^Wr4lU+mU4JmF;rnAO^(Z(2Hrh#K#x}3AqcR7v( zFWLRr2Hxl8^-MD&&HCgn`_DApQTNE@U0Do%T6;jFr3q{O@xe)M0k+wl8@7RG9rA3V zrlEi)tdfbchG4mff#`ROVyDJkCaIQg+K*RYDhCV^V?+)Q_X{4=QrGEeUbOSw?^bDE9Z}R!!uR*<8`F!+-MPC5xwizWGIA}gz&4i=Xm!^P2C$Wr*@JOc=ns7i4 zx@F-?W7sDLA-hsJh2*_pjDCr98Cu^2bqP#4SW)Fh>ZG=m`PVMoW{epf{{ zy*6(l?cqiO3(O9`Mur)r9P4Z*Kdn2VP2nIQA;dqr!JQ80mR%4wc!68!85ohb&-$mN z=t1arNfRKQTZ~dIT(s}cLWwbmsZYtqMR_wux?FYN&$A^NYBC|$4zz{GAY6EQjq|;B zVrw%3{`F*49eDOrvw3o}RA&AAAWk)fqaN~|4Wx1-i0j3RF~C_LUa0av;++iQjOZHd zTjmsmxCJ+)rwGw&=5hS3TBa4QVt?XPL>pg3w4GWivSeqClE>= zXf%{x31m)`DyfXh5igOHJ_?*s#Ij$>i)&Te6oM{rs_zGecik2^6oN2}h%#A{IZ|?x zS)|&Q@?w(ANbWGkGGE=-cv-tSox;iqf`(y+;?wf37Ve9?E|*2N-Z$^X3LL4?r`!@s ztH1gEOyEl<;BN8 zDapzduTvyClP0Fd+YpK*3a}PJX!P~N(k61pV`Q~uGkK9pGbWDArZwE+PRpHUbmcHg zeCU%+l}ffxl|!USfUbuht16z@?kt&PSMXmuj$+%^>?ew)nF}Gp-U4m0r?hMV1HJz3 zdCWrxA!8sxLTv>L{1fkO#}7C$GxvK4yjCZ+f+xgajv;mE1tupnWpGAf zgyOAz!J-H`NV9I6R=kRhD%eT~saZEoXbOTvgJ#{^nAcaE2gY4QYq@cegD6M>YZ&P0 z1+$nOZSybyzH}+2Cv9idi}w`RGIYTw^j%(wJFQLT^h-rkIFkdF6T#>bHs$+Mp*2wL zax$<*1u{`Ik|ls>me;T^BZc5VD#S)$W>{>(GJs5rM+tP$z(hFtsz1~~Vb zhzs#TQOLrRPR@f@TA)3}t^cvqmzBmwc9RJXh;l9f->-qf5#AdzSw&O;gL-HvLWA0rh2f;K>U;s z#Y%6(LKjBrqCfdPUA+hV=X>e@vIPCV@0|X%Df~Z5c5Ixm*5Dq}XIY<+3Cm(ahqqm682Clv#UuI(~n4 zPTTV3!Uq&$88+XJ(m#Y_>_OL+MYWwt8rt)b;ac zt$a42u8QhTiL}x>DtSM|-L>Pw=+!g1=rgPP@$|gEY_WA_{)4@dZ=Q1gZc2zru3QeM z_w)F5PQxcJiQKX0v5r5!Q>Xsy=%ZRkyW;qy(#mUO{S@!JvS< zFr-qs$k6UrJu4aFu~N%hEA_?K+^4Qn_51_axBZFbxhLy$E8zEw?~Ja3px$;`t*yf3 zSlUG)YQno50?D2c?FkQTb%lQWV6X7Fv+;M7A`y75nhB{^!7&?*q8T4W`~%txTU!=u zm*;pQa}hO%rTRJsz1{AMCA--~S3Px>wrT}Ss&gz=l=gUXVZz1Y(U9$neH@*F9xwOh zI|-!*kw_9+%I0_#7>m&O^2yR)KHv;Tq-UQ-9!u4gZIUaja|it3$k`w zlWii9Q-&IMi|CbOQjXq_V^c`W@$w>?nuf#oy{T7L&9>bPt!|xC9chcD@Q{$r?ZgP; z_y|+&c!^ql;Uh$=b<+M&5Jd(5T`G(mo^F+^i2Fya-%m1j!X2oo4zNR8$B$E~YRkn| z%)8V2%v9J+hNXQ>f!}v=|IzvH&gv!4Z;1}MESDC0r-LLx@uU1AMPl4W?twY;c>=9v zmzgqw(4Gt(jmJXRM}0O%J4#@$GxEFs3YO~8%=fSJqxa}K+FnVR$>eqNX8WIBuUu?R zaCMG^XI?2-GN^O}`1aMgo|}G*!0=(F@CEOW{e6=5KR3M#wl{8dk9ujdD~3-tmV51* ziRt1tmgDj$Vmdlik{!MStgnZOV<}a}y)lf#`@DXDJVNr8MSdHn`by8Z)%p+VIze6C z9^IS$eQos!@6f<6FUK$IUQa)phrZls9yIh796%b0cEjy+2t>flf+0r^D&!kLIBn?le{(djr7k8Wr_VaTRT8B3Vwc;qlyzgXzjq$!IpsA8XsCa52dqQOt~Qwus(i zm4b7&3uC`a0`G!sn%c6z#MZhmX1dunn{I01w$s`RD=NANt*6+|XI>V}EbWs4dlghV z%#)YN4-6Qs)MrW>i@OhfG^PDM@(3h}Y+b))c5X|ptd=PSK5mu~d-nv=owcHzwW5*D z%bp6Ab7i|a*8_?i9vlxkKceIfF!jMtg_V3w7&L|&ZRW9h1Rkj<_|GjPP;_<}Tk89b zS(qE{1Et%xpcRypiQV%wEWC3{ooY4?oXRdk>SZc$=7(HHL{gkg??e=+*l^}m{FjQT zwq5AdqH3ta>`*%}rx7|4!)ptP1-NR`LNQek0I;XWvI%l#?JCu0&Pgbj^~#qB)%wph z2j7(r8|VFyC6PCe7>KvH4aJx6js6q>K+%qA?+W25Y(7R?_VDB&Iw)B3rI?y@t;)M> zagk7#(AP$rsI=8=cC%A%%8BN6<~`fAT?Fhs3}OhiS|G=yl$Ome%tdJp1gNHZ9AvS+ zT(v+`DV=DUY!pDkuDB4*PGn+;}^l1I*byuZ4OZA zG*OnvLTZH*x+BQ8oD(Wz)pG6+cvr=3>`U-g<#jICs!3s8lT8!E?4fAay@>2YDWdc> z5E`PG$E)D$a@*-DOkb_53J$IgGVqv$bheHd#~Fk|?W}ab2lTqoI3SR!P4O=-q~l)b zg-$rXO+u5bmsDZdq=U8KL60G-D@=#qMmq$S4(4&>G{cLXV>?=tU3oEnO;QEoMiM9t zRXh5?kx;+l0;6%kU?Q@>pw_w>s(BzBoXGDtld8%@EUuf3g;el4*hQe0yNQYfw=Fdh ze&HK|3zsEBmQ&lhTLFcN##` zz7Pd%p&1bcao67v9)X8|PE}%bTB};$(yJq33Co`VgVA^k+rtw*nOAPW!NzW&qhKEf z^nlVxm^TGHY6?5w%4;LxXcyMl#@+yjL%iS5)T{wLiaz`*yKRo7zy^()opYfAea zi4>*<2?iUh?>n;*h`8Zvp%6RmZE-Fb^J%3|0YMIeadzQtiCPBF_z8Yf!&5wxgG3?V zMh^YnX9Ea)5J-ug`b@=Epijp{VuOkEn_={~6}X|PjiLWFeGzMj`Y2f%nK8_-kax(x zR2i!n>n1Y7Xv-u#7*x}=WbV3wY7dT`=s8T8x!)eLUvv5yIm!bEatWB{#5r9%vBi(& zjoUa>uUN%yTd-C}#kXW-i+kftgL@g%RjBpn^t{vG=c`VZR*KR~n~uf` z%13e7hKY!ku=ye`1D&vMmXlp% zx79@0V`K!`^U_$% zlB9&3gKkEBu@hlN@OgCyf=vKP(qi@oMHH(V^rtQ5Y+8=h5ZtA-L7bcFn8Io~j?$E`upQf_+LQH$ooBp7c-otC8abOGzj$X`NAIH00 zs2HN1ZQ;akNnqXa?6zE82|rCd)cJ*=N7Q4unce2z>-EQR?XStQxAXz~Kf>kJ%Nz2u zDQE3v8^$Wqsosa~aU0!!+k<=6o0p<_Xi?mQ1V;+9_U-qxa*LAVudNIgn!yV)WD|~j zGMhdOtTI#$p3~?Yf)<(-Sp`$3B^Gc&EEbx;F0z>`gJQ)N42p53=U>cMK2}v_L-`Y5}=9X;Is|i`p|XqiK>vq5&pOh?9jDSIi2_t$FBj-o@t?gaH7kJX_xDC(gTC`Rh}3N1*D zIL81l@5xIsm?r`2)m@OATYw5w~QvoAIi<2>8b1buva!p|=b+1xHXTV#CQnlRH~ zUIIp)haH@x3Tci{x+)JsUq!a07hvrat%_@1CIX_GJw8zerH>QaUgUX9YrVQcjaPCi zGB{^&He<>Et}%~(J?O4loE7KwYRT>}z;d*`9ItRVVdNxSqxvq5=(HAIkkw!2vH9S_ z>ZZsm`M+yax8^PLIa6fUgnc~O=08fre`bIvSnb$v_%@YPTlUDc?|4hYZaShz`>xrN zeek|X<3lC1)rhT6bg7`)=rY17-g^O*+!qJe$uKZYI3PI{Ryy%|ok=(>7n4OBm{7Jj zwX`wQb^Tct2^^xKU1x|MEFWz!3ym0 zjt=h%@ZIjia#+^t6jz(}p-48->fHLFJdLcTBZn-l^A#jew2$BZGZ#V7W+)i!OmPSA zgMcGWhW#8=Vx*7Atvqw_>r38w9ao5`0`>dAZTA>Io9(BJdL z1Zg3;o;Zi-KL_nE#83r7jZ7w-*Ekb^vB)#eI7&+n2Tv1QKo;sg_l;@}x9^7(mv`q$ zKfj1o?OR%00;~xhcl6;0qx-`k1a_K!KzaT3e7tH(!_f4GG*do3fZTWMYLK3ROv}e& z`0hoq>nAvDKND818$bIPeYe5XF>#xj+`AgU?m5Tk-nP~W>v$52;da9z6(N+0?;?Nn z&h(aoIf>Dn=qwX^rKofquAa|i{6cR9#3H8;vfqb~*x5nwzG&VwsVvc;Old_F zlR+NvEzGvLkrR3XQh9v?OSfSJTo0Vc=tR+?hX&uk&^zRP_4Y1~3ea&ZGqY;39(Px0 z`+Qi4-gt}rqZ6rSRkhaZ>Vpnh`7?QsLEv&D?E5}Sx8K_iy_IW(wEw~^Mq)WW3*Wi1QujWLW4U+Y=%SH#r}4{b_!7cn&g~f;e)C! z(O3ffGp#N#_xL__YDSJIZdiC^-n;jnf&Aj`sdYFBtRAqgKcHpk7Cd^>=143yOMncE zkO+q9DY>H0?p!+KLpxzxgG6=FY`$&|h(hJIncK_A{E9!GFAE`b2a&}ZCg%l_4&F{1 zNZ;J0@1YYInw6bi@H(k@bX^I3iq)M%8=yM19{KywOmQ5k8FR51(|q}BLbygI!&4<{ zoJ$o*4d&x7`M(vZ3E|{h!~l+ACcBnx=-hcHrZW`6RVJNbDi`J74|lHi`0QX3>I3|H z%~LV)owRO5WVCH>rIub-J0UVxfL%#kl8O0KJgrd!Rn9^gQ1i)rD*5K8>(N2;n(S0T z`3hNmA?-2#h6uoHle8h4pqZX>zlPy0B;#;4pvFQlEuv#C>+d_0m6(RFvEmYdt{QYv z?c#Je-Zj8i_(kf`tnJb~&Sq4m{0+duH2sow#0#Quy}ZSLyaXnb4eQ|_EZv2Rlt*j!DAZMH1f~|^T88(rEcWD z2PM~b&(&xoM^7z8g~d*NAP}YQ-f)0CMXbm>4sG<3OBEIYqDS^IflP8%rev9cO{yF{ zYc3h1z74IS?@^=?)BSjR|92!!W1EW9+%}h0B^$-OT|DB4mzYNHu=r2we~ru0y-w4p9WBx4vcTjx z?1);o=%vm9CIm}3nr}Wcr9?3s%&^M~-%8b(P;Gs1mm`9+>(;%;OInhJFVPV3l+%xf z;_%MRZ^Ft3`sOJsIr<9wLHc8qU+XTBOl&YqtnMt=R;#|^urig7%ifV@xD}W{?TN&A zg;O|iqb{KSpq)}bfOG`zMg3ur&*vHXv;Ncj+@KWu9F_xYU?M51FcDd4Q;WW)FJ569 z5rMAtcaf@{CVKy4EPHujMTeWv!fdHAaQt4jTq9xh)TxNi6PCn3M$64ank!gh&It0v zS&liMao1u1+0x0GWZK64okO_J=%sIl1=$(-Djc!GV7~mQXvnFRWAaili>v88I&w zl_O3rta3C=ppUxFw4}e+jYe0+B=K72XqqPVQ?VhH6sM$*X+*LMPb&+x7ClmdroO%u zvdj2Kg_J-AH*FC$8Eui9F{a@RGhb93O0h|9+%ypp)p=k2LJAll;qY2`uo+fONX#Gd zR}Z{S(i==rvUljj2CGqGa4dG25FVjt0wDQ(UmLiw7kebwlC5+_(2f~`_R4aNyOh(_ zaOFGB5>$0uk4w>oZu~ImzJNKKfK<`J0jq>`O9*BCIPKynexrhL3~dc9X*7auNhT3O ztVOPfm`NZfZ3ES?-WWDXjkQ!Y*y&n(1fl=tQy}TNTnn*7qTX)k*}2(W*&PxKMvq*# z9e~zvWGYv$VVe?fSuik4rPd;Az@z%nhg}53e%lzo!oH=u$KAFXA4xfJH@u4u;w-M|6_Vvmyg-1y$Q zff|6nFkVvfE-SqQx8#A<&Rb(bu{=si8NtoMBDJan5i%sQdPL3VZ}XIkD#(<7r^GIk z2PqO2^! z!3MZo`3Grr(JwGIySP_b?LU|>hPiZinRr+2L2j+_$P;}?hy2n*lvPb1f@zr#)wVwrt9gn(XB&QpH)q+=chx@u z2m4rqeS`kpU)`7MrA;_U@fIIz>jZ%gtJ`EZF0jo(R>b{?C5wm$`*vDVEN@X~P`c4W zf`08fr`16zdkQ}u@U}&{DyCJh^ocK_LZFZW?9*$f94eZT2;yR?CA57Rmyf>c9SCeg z8fofGBv30Sh@gIpmB8T{-CQ=3tV^{8v0HVF28gVSfEJCVfRg^l)XQvAY*Ps9=)IK& zIF>D6>zZO;S=P@YDEP17umrCvWnwH_Le#N?9l(Y$*CLJ=t&tSxnb4$4+SOtFn?0M1 z82D|Hn$P8Oc|~9t4of{~>(hoMItUPyAC);0IN5Dgwx_)SogW7+=--Ajq@KdHIvr?hTjQGp4WuPdD|S}B z0Xs_>+xm#@UZ(M%9Joh(Z9mlkJqovEar=_Sb_2s|@;$7I0$P`c6Gg9cLS99979rP@ zc_S8M0;)W8ZrYf*!+8Ma;Z#tBKP5{Y@ld7oCdz+sKaawv z06M}igwVS8+~n(j%fqV#Lr$ZUKeqFJb}Ow-U~_&30+&brLuq5aDv^qk$MCgU4uSM$ zeqp;d@+Mw$6U}8vgsOGgh`gPmcV4=wP)8>CL9|U65cw zls0@8rXZJMvp4D1tyvqprHM_@;Bh;W-uzTHLpJWDiar?iP7Iz?OObXm-8%9SmQ&b1 zC{>(`+k4g9#rwu4i|6Ue;`(AIk7j6E=B>(5QR~d~ZkcLvi6n$U?isMnmdgdX$ee zu5>F0Lwd0vyHFI-OAv>CUMW&~Q;l8_L`Ty_M`zoXnrZ65BpRD{zSb?HejtOwU41OBx!YG)hyy9vFz5@u*uFPz&6nq2(wX zrsLBlg~0QFSs1dQWRy=E8;Dc-N${LyO=t4X-<8$)9;o<8NZ+cCu}SV2mkvzc(0)hs zeLQ`L$dVxg!O;LgJ7$0T9by48`NDx?T1%bHLX9dQy$Ik_E=#w-4n`d7jJ$jL@{-nK z9jAR7OR+{F9mS<)4;{I1>CBlCcPOlp=%}Sq1NcidlDdwC-mr9kEi3c%{$-7~U6gm_ z?0yX$ts>4f!!%)SC_F=(C~PcgQO!0i{wwO8m%F`|E&lz=AvMJTGNQldBLdC0m4U-z zrP^Kr{vK#p>8o==x>>g&Qws;Q&e3FO8opFm4TY2asV!rPPD@z2H-N>67BeheSw5CB zIQ*y*o%guD-rf{6V{ahFK;+PQjh(`dC4dj zQ{^+|@nL7H1U3Fju4#+pI352QPp9t9&dddU?CELWSdUKa5?}h;*)_?%4Y4t~CH}F$ zG(Eat75GB9VEf^fZYFy8=&?^_czxySr1U`vh^(Blufy%xzUXI`#Dvp63dGTCK;B=)qyOL@8_p)~IGuXX)MXaJ*{NO$p97|vaZlOgFDl4q3{jv`A%dt}~)-;Y5 zrzzI*FDEIi!ZPX}Ok#0zVkO%fZM)-iCgDs89hV+lQ~l!_p!bA&pNi>Id5bsO=!q3& zP}6x%CgAU4p4kWanUOFm4JdK57VQR4{Q^_JxTq~{OS;!lna3ipe1^2%+QN@(7ps+k z#T+GE0%lndON8M#Nj3TAba0BB4TS?5ZcAwm#_k;^YPc!WZywKOvH=}zGFUu*;QI7= zgawSpg4IQ)qKaq+a+D>$-|h@2W}kD6P0`166oV_1I>?|@A>ebOg%GJT{@ulnPRAHJ zmU%am>f$Z}5R#%eq=vkZfM?NZiyb+ba)&uEQMP)VJ|xF&_*Ti=tOm?fm=xAXq!Tut z?0uwxITu!F1cgV4({vqT#rPajF;3*}d-JM|C8N@ZFD@PVXBRwHIxI=dsWrYG>f`#h z&osd9;8If{cr|hu2O&Bd_nMGuMV!EFZVZpTx+qCN!s`L!OtE^X_L>wBQBacpEA+3i z@Ew~Kv@j)^hYNx^mN}47F(0D@6+!W8<*gcBALa}smZ0=Xg!=z?Lo2=973 zGhYj1e_C@a9W0`N{BWwAPW_=Mcmte;xA)8>a!Y!1Tnqc5OtO^jE>H!pc}3(N@bzh3 zw=3%8S|mQ0{-rFuC?ACf4#iQ6rk3iUAaJFCGa(3ab$K-uI1P{Mj#W2}tS3sGt`C7R z2<>Sc_ztBt%35={qma*c{n2vIF-Ns2Eo6+z@5fau5NQ3l<~XLUo{`BwcSFfYC&sws z#HKPHOf#D*;zRytM_Jfh&MUlm3^kmjEnqfyme*FM+r~JhyDQZooEmyi z<8WSK>2WX2Oe5o@{N=~_-K;I%za@aKB) z^iVd10n~wESca-7)w)50H?Jc)Qst*p9g~Fj*QpYePYr{TDE<&sCD(;N)hPm&c+cbB z1x)lunnHEMK*};Jx^N_zI4L^c5DDr5E=z%ujG%f8h>q(??R*4Cncq8v#>hnbFjcFY zcc8KrWDGxv!oT9xY=O=h&LVQD7|G;gITwpz(a~gR9vhVdnS9RB^--qoziTM9^JUJn zdi8_xz%rj~`<=(ZGpNVhi!XT?doZrIvMx=*MrSuIX> z4yhcqT{}07v;|9l!ut9l%Iv!;P&AC{BPHl{$n z$$>;gJPL%O#hVjqVX#c9(p+=j`l&Q1YZF3AzDA_3dQI$=-YZ#`FC^(7dSf26PN%ax ztwfJ3YRUyg<-RQ)Yg0aVK0&@cZ)#yllSt*v6m z<(_O-F#=9)a!;4q%vB+sOKHN?*QcFf2-?XJ+B7;FL;c+*AzT}r98un2;UmI|1icF4 z`?Z#`4*gh!D$48g@g3*uLy4BJ*Cb_U*`cvQA`sRrw)@iOp=9jmEUzf|VKAPqnt_j8 z6G;bPDiBK&Rd+w$P$Dkt4vP^f7$ASM*ft%|N>*{Jw|hwfr%c;lZF zdZ>oI+b@`=j~XjYDTivG3&>>3i-CWzywp!7ydKw8%7FC^Z~+ zIjMI&yAo#-sTh3TAri3;x_v|o5zf~hK#Gomony&yc7|Qv;&s25_Xx2*g*yGD*D_dl zcxUqJvq^i1PtNO{aF`!W3GG&kS=#-N;T9#FG4AwHWu{lyeHtv5&DTgmb>*f1HfR(xYY7 z{|+CxOdQZ&QVDI)9*;$Ctx!+rV24M`dNqt`&6UD1)Syo~7%Nd}vMCC){#|Hy#*h7t zff60QjQl{0DE7p_j&^7+2qsqh6A$uGLvNTag*Dh>5o&m^PZz9TtTvQ6$B<*9;PP6- zS0BKSf^OaJUQuHZ$kreMA2*H|BvA*ZlC#e+!P03nyObbVfHrcD!G`%FFZn$bn8m1l z^2#ojdWi-!)~XB4T!^UIFxM$r<4Q8Q_<|%(n>u1ubeaT{4F0E|fITm&Y@9X{OZ=`I zLuzh1v3Yxd2~j0k7ID+p!6IR>*Ii|i>8;?tWRK++qEHVlgNbnpw*VKsaU`58L3%r( zL*Kzv#2>wC*3Dmn2}lBnW8puk8VMEGpd}z`fl-j^iV6iNI1E7|2_cBg1t?rk*C5Iu z2_Z3X5!FL0m_aUY1x%9iaSvw{(B<@Mggd+jDGrwb0_@dfM9Klx5Bk`4{^_bsojto;i+v-6R#eoo6H_ z5M>;+K5H8lH`?dBl{X$~+_p95r$=l?|I;|eyoI67UWBSq7D&Kijg-+!(SH27b5yqw z#WB93!4PG%gN?_Oa;u;rOP0}%JeV)sIhh;^i^UAMon`m%8?)lu1t@-DI!Z@ko>|&N z8qD`2`Y2{WEkf4d*f?NL6eYF)Io$f%}Y-@7dVKETI&Ft*wso`q>!E-pcwbEmoSjZRb-3A);IBCdyH? zxv(N?>5u>+s;LE%ZSq`?e)B zaleP|68d#1z7wBUc4p4^Z=K7jrq6D}`1vtHzQ}>o``^&G!$SG1Rf#N`m4Co4shA1> z%1~ZSG4m@1kxC>~dka%-QdU zxs$S$Gk4s!m&Jf5lR9k^9w*xm2$$0+*`mdzBLS`=dxn9h!eUrS)nCPXtaIz=@=--e z8%Z@2I8HqV1)MW)i1mtkFW{w2VH{xa2#Zz`^sI`^@2FzWC#FP36zL1gcW4Zx_D|wo zEnWcnplOa^i=$wrdp+W9;P{f-eS*Jv_hD!R5b??!^lZ9ObZ)fSaz7Ik#`sg}6UWAB zu6K2Lu_b3X9-f-ZF^b{Cr5f~^O7sJF!P*(dja2ku+(bE5L#Obo-uI~vB>Ju4QJ@v? zXU?|+x->0357(9-k@CzSsUl;v8q2!1bY(H&*FF+XI>$IwVUi>-@3|>UgTd3I$CyWS za?EvT8S>0KCg4?}M3bY4k}Z>kjJCVBBULLnB`kH|BP5h=0p_Nc%al>f9J<*&D zc}`QQP5LEqP-#oBwZ#dX-Ap3bGGvm2`&_|lN$}PDc|Ef0(YD2}h;IgvYV2HiIl-Z? zs^R^uTs7FV0Y7p(#zh0}zB+JP&4*C5=8q>F3WRW)(4+#@e3yAxSYS3%u}1K= zB^A0KcW@Z1N~e6E5Q$Evx$f;$BJo3}#J1tk>6m=~wIyEtwH*joPQ3 z`7MYcjgb5it$k4fYpnVj^n}PhrgEW>T&a+#Ksp>Eu6f_$)F@G1K6F1yE_7hABBL5u z?)bv8;G3GnrZbA*L@N^t!Fgi;+7-d$GMGTmisV6!a9EhY3YHezz9iF^*(uR>UB~67 zJZlq;T`TevufS28oB}bh);5Jt={V-Y<;MO1>;HzpMo;DOh;^4Fi&Fa5h6!-MxWkz8 z3QG!g2d&q6IiVncvF%yxUI@W5&WgZl1B?*1`(YU)LA=iCM-7^?m|`LeWA z-mgRoik(TIpR;Xie5E*_Bf(fIBZZ($gZ+-{m|C0#{gx0JPC+rLqo*|(Vu>F+h0>u* z@7fZd)WrK~M75e%$L~LI!H*}U?R+q8W_1B=$2G$2`!=l+!f;^sA;EvcI3PLDU;{>@ zFeSG(Mtn}vWM{h4C1mPc7(d2|9C;nG=Ty{%d(CFox_IOx7!lJY``jLfA0n26tm{XR znRt4p%SPkRxotp2wO@3>vnC%!Mk$@KUyT+6m_u3g%(1 z=&*p~lSYrUBtz^yGmed0+m64l#cp2kHOckEEL2>P8pt`=aU@g(-;Cpc9Hg=H)ywsV zi^bVjt$V1hW17vqZoBr+lP+G-C~%*tS+3CscEawdu;Hkq?a#QCK<;TVDfk~QOq&!S z@PYfTCTcXYWXyfO=AC@1XY4nuKC@e2R2hH*3b;I?>^J;&VYi*k8g7(C?47&uKItl<*io#gmdwNN z##<*Y&h>9TOa7mMGylZWh?A9$nVE%^{n!~uw8;iO|GWaVV0V`Tq3Cm$wGz^Btn z|8VkQV*o_6{IB33W{%(DTUdVu`TXMp?SCSIk&&H_mE#{GetG!(lJx(s;`jI>*8dqI z^G{U#>F&hJ0x&k>_=md_D=WbAiR14|!Td)+(LYM@&)uC^eoyUT{gnyyFG}&3yVGAP znAlnAI5`Rb11f&^m}31E{`9X@{Mi-1(xd=RSAd)zI(C*n;-voG=?aiH^*`F;Z))+o z#}q63zgEG>$VA7$NcfiuCU&;}goNKcrT|^{e<=hbJ0~4G<39?)$jL~@#Q1kj@p~ay z*%|)H`e6CpWs3FJlKK~y?11ea5TcvCOrT?Yk@4c=#m>B+OrvKh{ zn$tP40fa2Q*>+w`@)rO?mhRgS{5~XlXxh?^*EFONt_L#K^v5E78Xn%^NIO`A;H1%g z7DLx$);ZgxsqPn1?x~VM4;OWsTPQ*}ce361ta}k#XFCz+z0r|Gs+l_UK1WPlntxnc zKN$BN)gp=9dFAE7>rvYN>-+jq9EPg>-PRj#jP_cGGcZ4LbD~;zMXcvd(#yl!!&}>K z%;)ENi0A8(8Hkp({kyw+CRbOtFE1w@a`bOEC-=86V{7wgn^s_1r1HiuuGfvbx^d*Ps)e#~tsUM~u~||t8yDvr?qA;V zZ)NXjtX9NGu$CL^V4yBFNOYFxhWc<0^G@}MW67jjl)f*|S&(+PB3!DA1t*CQU3J8U zcdT_h911z6!Zt>KR%y_J_vBWFBdhI>#6ukw~OeQJRY2C_n}fIeE+7)5w6^s3wLNi zRVP&yI%ja^htzQ8w>Mc|mLV%B`{&!A`<5%D2(~DRHY%!7*lPB`k&Tzm&FLujMCGMy zv{vU>Mt5IS6VXYFEW3UlojNtPct+bQM%&st|3vSbAIg=jTRz+E`E*1yoEN=Xx1L~; znOA(#I6!_jHD)t%E_kC2Y*@|S;p@M;UXv#^1P$`@13sqq)mfy&?6OICybf5hsSH?G zG#LoGgAtsx{6(PPrVU z=Fo|-+k_$SGu4RWkO<~yl)ajOSKB&@u4iNRO0#4~;M0>VGQLg}ui3=TV075n=vO`6 zzaI6FaQ_5^t0v%D+seJYZ6~|4TNsls^UOnJ>G}y)!7oU6x-#mwxh~VBsv$UhDzrWe z*8L&JYi^&yCLykeKa{8Fb-UT3&fkr6G`I9r7JgvgK^cvo{V!|Dsz4G*DOdR5DhT3GN0pE*^`Ho8V~1iHn$ z(iOU~HFs#%jK+(_3m_?zBi+fN)OJIJj|Cn{IX~N)LEYEAJ}AqzC&jGoW1y*@6O!p~ zB#SN;!W9k|HQrzEAm@JDW!JFD6S%Rr>X7#u76oR)`AO?MsxrurmYkY&YG;y=hz1TZ zb*~mVfS0^~54{ibR&02c@thZHzz?;1y*lHRtjq0rs+gKlSCvGJVOQZ3H6%&9mXQ9k z2El-AO|{a3kRAKlf=gsV(?XB@I70pyH=Dpe9a<^7~}q= zT}EG5ZqX4&rFQkWUh_8CY-!gJxeq70P~ugLASv$ z0f>4bQQ|8vkmqj@Re?Xx}_*oti_Hfl;rkbHE-*m~d< zN53rXdW$s!H%|~<<+bON&1>;iTR(Ghdn1Q zY;pE%+u~?fDgzY0{yc?n+O3s=0evdKg|%st3i77VCYbq}C)EVa8a(iY`D{KkF#Nj& z&hhn@PuWau*Cw0(62G1#&cfEA)%}?k-7q-2y}PFU&qRK?;u&aGt~W1qVtwml%4NFd z#GO_H??DYU$J89=Q4c$`rPM8D9e4bE#2#`YwTP_NunG+Rr!6}E<(@^W>Y@|SZELio z4H6u*5$$fFcK-tHG?3LiT~PF9-E*qx=3{xM_chY%9scOe8+XJR5cK6DTeX7`h{0KfWl|(=4lGJLSlJEgQX$g9e-m zq-(UR#>|>tB8X9));LLD!O&l)(VLl2D>%5%I5tZ;hivnjFI#l;nnz&&al7r^u3ZS+ z^D~8@LK*!ec%@r3k>~XDMys#2u*pL)oJiK>5=O(f81n_gWsag7R^-Sqa6H(#pS{|q zOVX8k7vHN4Zd%vjSIW?N;#v@4^&A~w@Gq}flSjm!`tZDA_1KOFH`R4E@GsW!7sNZ3 zw0+Ok=oB**pUj%#cJ3!r_=K+MH0Jws&@&G>PKhGEnS!aE2`W$d@%DA>O{gN-J1$7@ zS3P-3f^njn^INOb7x47#HTmE1s?b17fL=yRz;j}ZDatBD?~u(G>4LT3=HiggF`ZYEA`(*dyg~)qZB6rIS{a#!9KCL=l&c< z)j%~uI7H>&SH)LrR=0%1J8xsOzg+ne(2fXU3Lj!K7aznm;W6>z1?)c##uKw%Z1(L^ zdzSA+F=qMP8=b#$+>=|jz{#^it$m9tBfg>A0(5&&J@FI2C?AB0PCSO71Jn5cPxI|;Fw65RB>>DCxjJ! z?Om-Z8XJo-4F53X?uUyQ4Hn>7j)VFO)20;o6CAuYdSLgO zHDrH4U!Vh=r>`}w0$gZ+zL!E8DDzY&n0#Vl#oK_K)2;i?_U*$oScnJJ2kAoWcfPna z2NHc47FiamB^%dLopyE__rtslzUFyeSJ(`BTv^f=e_qY8>AX7GhxRu7!2PSUZ*-s^^r@YiU zP^=E%aufqNY3MWrnbYW%?hE<$fIl-}AmG15cOTLU4?A!@`5qEBBmj$snibY^D{d^npb{stox()Gd0R)MXt1G|Rb z5B<>mF4aZM%8h~Rt7kv4K8I6wp+st-5?zKRL!3|$;+q9Dv|C{bqtT~CPGjg)3(MI) zID^b;V?#geL%X|DLYwaR0$%5Rb0l+};pC)qx3Hf7j!3!_^MxsuxvGxY?D8|+VQDsnJl_57&MwjSq|4aa=4 zeCJua~YIjGRIReUzO%&sLTL>)2;+8fqX%NgK z^=S%H2E1w}d3EhFaVy?rnH7F~xBAxoj1O8HoT_nYd4cn_+SvIHh@Ojn5h-y}g@p+U zPW`^+fJ7Mlj+eaxMuKb2tm(AfaPzgR&!MS0k2HtUBb*7y&#LdZm%WjCV_wtHB0l^! zma!NAo_&qQeL_?JCF3f6@uB}K`lFK>FZs041?Lsn^NbYIQn^s%ZH@!r-ypHcu~J*m zm2x5LMI!aDXG>Dg7k$Q^*}^X&iz6zGp-lb6PBx69&lg|f-_GS_dU8S|*kbVe>YA~k z7_(Yknf=+`;IWj2xs5vz90ql#Lp1GJ(QCCW4#jX)Fes~Ngd)POGL7@pjfb5MdH73@+?Sd9;XV%RbZRdg-w}I?&k5t^9(xD5=x2iC$RT=h*%N<@{S2?CMuYX7;_HK{X z?VY3wi%x4q#uF#vBvMZ?2)t&w&T3UGPKsjRY_--ojp>o8nA*kLZQ0hhV42%B`QkXn zr)|lF2d-aYV3lg2Pw3Zubac~m_*RT7ga(lSEJuur`^ZB&E2xSa0nOp7;Be&Xs1?dN z^$nt#3+_(-HQw2p3K}6l7l+FyE5s@FGU`~WH9C+7cy8>#t~QY8T)ncY;zg+#d3A!JsUSil(6;ON*bvRRc7`^dY4;RT*YGH%K`RasQKP00NKw9l z7%Mw(#*!#Hd^e|BlYI3{j+qGOYIVb~uA{*_!Sq#AMmFP>4|9|64*JUqp+13yb{`qh z7@Rk!)k=Z&73aM4)SeyVK@Gm6h(>`%BdX;9Y}8TWTCbEV8(Mp&78_AB`sQi7{|F+M zn75KG-gF~TwTKO}3)++=EI%hM{v#Rg%{fir>tf;zn}rT;^&Z1ooLgghv)qX_C;ar` zk5jX^HSjQ8k790Fcz^qo#hLctXs2<(9Zh#r0<2?K4upu%Dm!9*VyROx!_D18FU8xCn9F$kh!-N9Fe`kw#UYHYu9+s-z!eYwx(nQ(q9bR-CeK4> z8XjM72$VYw5nj?wth<=rPG$D3~#>`uXN}(wLy4p>K*GEs)C^pvoPS>_*D)(N)fK@W%t|jFko)y-X4cOps(^5yCJV z^F+bLaM?XQXQc=^*VtGtw_T?DKgurs+JA7um2bb9RH2~eA~qS2l&8?bV}Hh%bw(K0 zuy#w~P?e*+wT2C(E*grt6S1J~H&ou&;aJ}62I9(tio(gH@3z=Ho({g@)^^>@=Lyci zQp3lf9UeBil&I&C^*!Sc_)Z+b86SG!Lp1url&o$0FxZOn=#5>j;8%$u_n|&1Fu6Fl zagYN={(CMFYM%&)ovD$?{s-dhZ4v?Zu?V`%S{D-ZZ16ICLRR#=13*K=d~5Of z$RmKtlMWfeLkmhw=whWNZUo#dvUb^IVY*fGMw$Xs+{M8skt))&Q==21$@gvgQh165 z2hlI676>n*@X!a51sHEKrzsTyvTH3E!Mt1`84)t(b}@&yFvaqr3tlo_fL1I-VCtiq zYjnh-aQWt&LNz*cajQNGFmbx~p@6=uKz%Qr43b4Ofe9gCW242qFWzr(87#rSI8p%? z6fHCcG3T68Ovr(-)Rc(0r6f>4EC>=PZw9dei4M%qi34E@IW1#Vez3>p^ja`Hfa+Gb zV)5`3;KikQML;Ek(DC8(Q#Kb_6JrJF$-zhHNV?Q~l_n0p>3Bz@yu!)hhnx}xP4^9z z>~h}eSXLzKB93<<0fC8=OWxs60gVO+#IqrIyWb-4+H}FI_7H|gLFDjAXBNYkA-#>8 zYRpF|gwJ95y|-G0g1apZb2w>yHOyf#@t9A|Wh|(%Hv@ucz6M7`g?)uNV>Wc+{KNy? ztPq}|L22E$7^uAl*MhheRM;2GnM7H57&vHjT!7(+7HzBFmLx3d#*eYw0WKfhz@XnY{@2}Di+6u8EWnkZ&#n*)74J2e8-@G2S| zs-GVOR!oou7&=fQhYpLnw}l0=*N_4PB`QZK1A7SZR7YC$loymemZ&@w3AdfhjUzqC z+y|x-2L?lnov1zrb}RIg#_&mN%?n-OYeqS7{>Z4~wo4nvxUlgsdyV0q4Jm%^ultz@ z-E^mL?-;kr?zDHaPp6|XOkftjzZox8+3l0RE!vm@zB1bh%{GAD7CQMr|_`@tf-D4q(?8!K~WzMII@*h1;{(DwOEU;!t1kGggC zHhtrY6T%-O+k9ZEseB{Zr8ax?P-pU8w-k58)b(^M%ltLvybK|dVx*Q_Ivu5|bRllK zt({1hp%;;KNGb3`K0g!_v9#!z@gA%Rn$ut>KehD6=WHFjd- z78G~m-I?ol_lmUGSQ<=ZJ|XgLvyiLU$kaiE^V{r;yEe)FvlP)oeD~Q*Zv?&imUt;o zxY;d!KX+J){jAhW?rx>8P}bn`I25$~tn7=Blsh@MjhsS1Hi%04WsNDhi?r9EOL;YM1nuHKHQV{*YyJUNx5zSvI&T|6EdfCNc zk|zfq%b!=EM2YqOj5l~hM;${MaiC*p!R}vbcYmm9 zrG39>SmA-F5_%y_K~B@@UDC?IRQA=$s3U_xqf^gYbMN@WtHe>Am(vQ}Fm@A;c0MHm z#3YJkP!m013>#(Wp)ep-MQWFE6TKOgM)**5bKL~85btDjL8dEzRaFSo$%O$H3>f5~ zyYX1qOl|h4B>u9hMpb(btqQb5bvNd}^L)r{(pjbJBZ~lR>_9Y z8BdVO??d~w9|6dXFUD;i)gChDi?;A1qz-Fb$-CA(oLy79d7pk zCPVSfOuQr2EyjJ^ug}2#XzP$MAS=-;GiVZP@zM@4{T@eUH_{^9#}$<+*U|z80otRW zUQi;_vY#+g3Q!o(^7fNd{GehC9Dq?}4PjB5d7^Lq_ti2Wk_q7b=SC4AkNHLs&@($< zeE^Y!r5Q^65nPhFUfnOfHK^ z+|7gbnFiZK!897gj7`FL9u$~rJhggZ_RzsLT-;C=5!iiE+LE^4R3H@>op5`583Cb4 zmT&^bm#r(`Tge=SK~YbiGY^fKpY(<-1a}0T^avS_W*||JP>ust7KNP9oZ?G2V85ON zNO0zW$h4O%AOx8OH>?l}8?oLK61yKd0PspOy6@ng!XykFBAlF&B?Pyux5ym1OkboQ zw!oYNRYsA;r7Hv#4g%OJEQmDG0Q$4rD}^Ws@ljob;qa6`t^e>8p*_u7Os-T!K9FM| zV{8zJBC90G5-A<1G6@_cW=6i?uEsE#4sUvaLFkg44N|^$gbtE9(x)4C-q#bVJ_TyF z)dgbDgxrf<19MV`DMTf4bxiO%#+rDGf+~hvUG)GoY#j*6k{mZXVq+?hkFuKbY?i}k z870p+sn_ckfV0A~DW&`uXA(`MR>aG4SJ-ntKA8(!?(qdcwmsvb#Yo(PL|EKzZLqpW znDHqCja(E(HGp4|8#PWVT&$R>S3D~`&>R~+aE=A;s|K)a4<-Yj`JzGkvH$JPJ~b7Ygm8usGa~~FTGv}N8u4*T_a7<;&;#`qpyipz zZm>JVl5oar8zG;*iYF+iZdHoUZxX{9!;wc4D>b=PBBv72P&-`B6*L?-m{daRA=pyC zoG{pZ9#SPZ3jNv4EXDC~ z`IL45jJfW#Dm|sksl@+m-NyVU1cBLA<{#bI;O(iSkH~AHvZN zPG5iR+M2Zi{L0(e<|<#=;F*mW6MwKTnn4-=Eeh*j75Y^OQo4%4Su)7;1Z|rO;S=QYWFN zeu=NzJfN6jvB;pOUZCbMSGcrqYYyxEvXgzeII2fT7q`DXsH)hpl zBG%rDW|gXI;gkFV9YgnoMbL>&bZfpDBmBHnswTbRlG_HBJ|Er`p3DyU!ly-|0?lSg zdU-g-hDrk#&SEm4E*%JnJt!24ZXs53O1}-rZI;Qqm=aGB#43}eN1+Ep$yKY$BT4W} zSi~8kjO>%D7l{e%0iwgD&@6tS1mlJskN0b~n^I!%7pDfJZn2}(sIHNSME`Rl=fwM| zE-D-SFm$0@)QvN9+F93tEYL?or&7WW2PcSM+UZPzLvBWm@Ci%uJ7Z<#%Ie*olIo&5 zg(5F$&i8-St$aCA(c$W|%_q7!9_V%wK$tJc{{hMm3-nkcK1eBmmV zD*p`ah*MKr0;1@+gu3KO1FCGI47rH^>)V3q+4#C_4ZWYq$!#PILvf25Bq)kFX2akj z0WVBkW~B}l@Rh`iUI63wORxoL@;Q#;;5oV$Rr)ZF#jsngqOy7FIp9GOtkIV0n;(t^ zz@6c{GLHcdVfKOJBR*|f_e%9wB+FiSdx`!iU3&i_JP4EhnrwLeP!nax{A&JHEtXW2 zGm>%gBw0M@vXR35>VVo3MtzUTYJcj28uMKw{JL_{yeJMTfW(P!OJLSl6oCJ@J9gjI zZ)l=id0qIq^y6um<8HzQgk|Ay;b7h|Z5pyG%3^Os5ljfC-U8?Y!^zpDlbbij=VJa6 zmVh?$RTTnJ_JFn`TdJmq#X=!>`6g0s@@4GHTFR!`a9&2p&_(G5D(vm-)LUQ<8E;+< zQKM`iaOyN{pup~Yg`^0yZJk}o6|^qE+-;LVtbDjaGmyQt zb6J}GfT7KfPFHUuWDa;gl5Fo`ox06^bic@$l}LK${ey{yE!RH>kl6m`Vb*^_-7s?g zfmW~qNEbGCLMBEIIz~o7&>8^3`FjHC7dP@>1QILLKO>M>{>bApu`&Jwt6*aLHy9KX zBO4tvC*fZzm^lF04aB^y79kr8BjC3uWMl4C;?0wtoeiurmLGvHlXl%m84)nEnGQSbyiB06BX94V(OZTd*>4(6It?=KgF8 zRwjmjL1Quf))vgaa`gTen8x}$2gUYpIHiQ)zZAjvi`?Y+hYF@&h#ugp{~x7b`30)|?*;Pv++_c^a}#hS09@Xm z7lfGskjVHSQStlSWdApF^RKP|z^j0+_$!x_nVI2VbjAN^f&4x<0R-f~ydZy(o6LWz z_$!z5|6K*!?{ky=-^|TFOTh@Zn*yNQze>UQYoRdz9k2L*DFxf_V-rAP{$EP*mx{ki z@gGp}``BdvpJVgyc|}$R_CGGc5E$LtFvO7b(yb)KZ65}CQQFw+zK&;FD{r%w=i|oE909>`9Q(~npMAS# zc_Mj|JiqOx{Ko9firdebAnkTLAS>zj}5Ipi6d6Wl3JzGF= z{E9zcUV8jTdO!}-jy1_Z$t8pC&-xNTAHzsgwGxKr@NO0F>4~5wro)ES%9u>9hd??v z8hKhXNX6f!E8DqwTwDvd@L(HZDv}zM!gM1vKmyUPx8}xHmgJw9n?+(oGnsq|J2GN+ z=cX95GVrICMC~1922Uejzj!)mkE*3DmVfihXBp7Y>(e+I^h?DhI!hQWC_@hhX7o7+j3G>*3J1*&f#6+f~ z)jzMHLNHKUpUtTGbzGiaEp6-=C@Z&JtAcF}6=07MC{Z_ky89&M2Fc|fR&f_r=o*#F zH!D71_g$pLzGy)8nKo*>) z*eU$bj){a2*gyQ@)-@B_ugj!B#Yn2tM>2IJi#b{S=J5Yx?VH0Z+p>L=N-DN1b}C6l zJ7&eUDzYN+qP}ntd}~cyKkTOx^KVt-S^*K7;}xe*829Id;BndQxlJmKd zRU6pBBO4R5Gc~?Ny@?CPSh_~4P=LQyl#n75K=Jx5eCwN76Ek7Ml|rrS+WbJlkEtgL zfw=vBi@_gS%Owv&t`3?#aGlp^?`3!dxnk?R@WgwvYFe$M9x`6LVBVg)ju7XwV7*ir zF4tI~vp!lE_48OLBCli7sh73H7#UL_9UL^WvRYPGM07=dFlTG7#5?+*o>^Sr9e~-2 zb}StRx#i1O5#5=B8(#I@vk4^V z8?Piilh-@wJ!p&Q_^rTYgr%O$nZQl&Uz3(e5Q)c(d4-3s&j-cZ-bx~>x0qR-XOtb6 zFzp~Us$3%EoO--zF|n|}U=gTg%AP1?F%_jvFe8wTYbxjai&XMU!hrJO91WLK^TtI? zU4|{K%&&?QG zH*dXzeFQAp7hl3&X{ZVvOHAS#EjtIDm-=}YR4G^O*^VOFqqfs6LbV_tSL}xD>E4!B zjmhc5VdFz7`Yji8)5Ov^1V3R0g+@)nh?OE(F;o>a6wO5KnAAxjNS(YE8&khXXeEB> zzSblC3lYC#pFj@lkr4{z`H?)e5iym1(W`*}T#i@0c__*kN&@q&`a&{+DfSMU#rgd3Liy_?dX#bqO3a9pCab7&Sq2h!=hI)Vw$4i*OBO;e5@C zj^UU*isT$4u1xx30j5_GX)ayrOK^bzVt&e3ZZ9HJW)9U_K6zQ`N|k<79#)|ukA;Uf zUvc_PUpiz++R z?i?CbTY~b{(BzU5+Ms7AeOQM`pjhSlXMSGtASl4mledH#YztV|XoCiL9f}W9*;PY32H+kY|&bBG6_Nw9@v|NZwna(cBj-!b? zy;^6sjtfD{{1*I`(ic%)4~IU`G`j|GQ+y}GKRZ7w-bS6GTYZ+FR*6MNi{@Qg>~0w^ zWFJPkIKbAB-3loVN{?*ubY4{5-@H7p@#i<6YMa{0_}6Y;EN4}rmE$UydU_M}K}X9R zXlIyq3j84`KTDs4ee>vel4@8_`bqNwpwEq{fNr1xIr(zZTGQhcjJr>#_*hoj=g3B4 z#wmvm5}|jT%ifB%x~BDM{)#ayJUJ!rO-*B&b6)jXduJy6(6a(LB=b{B_w=>mY79G` zRY5jWp4Ki(3F)xBhPvyC6@&HjpK|WxjB%AEeBq24sJWzv}n(mAw7 zC3S7QuOkmKzWSsp{VMWWBiqzeX4~OD>Uq@rnOBr~82QsoCfRjZL<OH+7!~K>DBjS575c>{p6);nl9_7tEAbb^ z)A#68*i5dD_r!^Enuy`0xaSenQ^;RVcH%Y);Vy3ZvSb~sZI3GN(qkIK9eor0G+&9m z1(CrFc>6TuR+Y$~zujuptXs0->vD`W=pBo5MP#_Z8CYz6qF4iwo!Cj(Ab4efTxgiO z+BH+huu>f-afda8GoI_69(oixOM*FQ{Cq@4Tb*i`v>@p2VkfBtS@)8WJyGgS<&JDj zshV+&@+=e0?DsBKJ$5j3F*S2k#K2^*_3fv(BM+rgiL!rGo#L*zx&<)#lMnywVbdd^ z@atGreZ=#0sdwc(zifKRxq#Id9OeGA(flpg+{mjXxt+d~2-;V!R`3~+pkGBN^~{h~ zkCl<*9UmRC6>yyDw9=resBYAqC@zZ-WF0OMBEV>s&I5ROQV`60wGt;QTce7GPHmD> zmYjZ~az?ZXL+0bQQQ7}QbTb&A{mf|at2~DYvGMbuH|T->0)m3v7X_gXj{@(yLW0>Y zd!Zj!F2jJuXId91=pY08ERRWOm=3p)w@_BuA~(T{#1KRfG$w^w0S^fT_Xd@Xa{`3i zV_qWUrX=w7F#_=*4ZOI7&#SCg9G3p(R6;7SL-qzd4!c3;5AVS72jmrzo6fjvOH5d$ zq=ghYueE!;q{uBlpsK{VXVIm}eWjC&(B%t;YRS9LLbCFBQC13|wt9Y0f zX)BLR@R2CPEhRxvs3hE~(H4sFRyq`kOQP}ZHrW~^!>Pl-P^Kvs{s^ z6Ux4TjWoD1C41iJgO>R}?bZ)PM2!<=3I}CB9nUP91;^$m%DTKy0T5(!eWO&wi&n?k z&(>kS$!0G)|3n~b#|DiEft02|t2*n%)yQQKDC(IdE0iHC{jTMcQ#3`87sEf16P#P2 zh&jz5{=lQ$nozBSUAY>dGfACsmqGD!O%gD33iIKK+tl7MC$$$FY$XM#dmPwj_x-^(p%(gria%)p~0EeTlUPyX|?oao}H zCN7G5y+gP zEBE^e89nT$7>ppyWY{6)64f4Um>4j;C`KhrWD?tr@*)w{6<|>Wc^#TC9HvAOh#Dsu z=-u6tnl5KDi)I}Z#i!9xD2Duk47fL4qAf&6&IFRE!6^lh!5L|yV^s^HqUuGzrNeCX z$WV}kCVnf$G(##b#CN7$T#^Fu=@Ier^84Wv#~Kg78%?`=Hhj7!4q019j2bcBa1i2~ z)@QUd*JCJJC|6vb6BC<0&{SoTcve(PA*FUmW-uXRm#`{SJ+dt_SEaG=2UAsz7H!70 zumDHJ&(s#1=ZtfhK2k+O%kP{S3Y_hcKY<4qSFVrm1ZumsD3fo_y)y=P8 z!MKBa0V2C>YYAa3a}CR!}Mp0=6q_>1Un_8740MouZ}a7r?g6Z%ny91UU-+U z1s}6lRqn#X=0|&vj0+|DmNDj(tLFW!sc_LoEJ9$|%OFigvBI16<5f-O^ShW7(AXi% z!t#ESDDMoJXK7OoW%jqyWp%yj$LK4M?x&CqTDkBObpvUgoV7a-n{|e(bU3hC0!KAk zsG2P12@sfXwKh~Gb-8dW-E(v@eWM4u3OsdYG3PhfY>mWu0U6bLCC4@8=;ypzta0+0 zuvYSG7lR}k{p18RClUTtgqgE>yTIMMclnEW)O%w=o=rcen^<{cf#ne5gHs}ADTteO zL_r>p-Fb)$$J)%W`6*OI3h1Yas@#~|@5@)cM=WF@pQP|Nq8mRw0mCSYu>#rjK95t^ z?T0!RkzIZRV+ggS+dQ51B-PqvkU#gD$yy?uOefW{vNtO4+B;tT*bj7{)&rjT;RpqZ zkwcYe8`@0Fnt6p6>QY!L2j>u?mde08Y|ITrg3qIbb%8V*s7= zm*6e>k|Q@NzGHq!s`#g5+zexUZpT@686+1peZ;S-T~hrGy*Bd7=NASJ zNS5O4Z*u)qMg+ql*T5xoLMrwGOn`!pwRy)7{j^n%cGpBD1(tqang}GU{bw#fBsOsz z>{o{Xi~uNPWJBkhf!<+m5K({5d1`Y~MQJSVPZr3PKyHDdL_=l$v{h^a7(b;``o06h zebX^xSsF0YvD4v>n=3eyO^KxK9g>Y7vJVw?I`Via@czy!GJaxjQ?=Zh(y>7tG7zNU zGAcy?s8dBBmeR9E@h(yymVW$M)mnjP$&F^OCnBwwpL?z9Y0nj8gY%gwWA{rejp{*6 z$sk;Ali(=7+JvS1)57tafxG4}D|8p!iP=GV+MJz2Rdn%GPS%08o!arK&Zu$g?H{Cc z2aONZb>r57JGS8=Y){W_dIjJANNN(@YN{ z)LavUmpZVzwB9n?Ttg5(kmmM_p(=F^V^mt93IyJRYyET}$sce@T~BYBX8iSiM%T=7 z*q6Xls{?iC7-iN{zgT?iRy7JofiyM;Fi9A}#9OHHipjzpVL4y&a`(E$LyfCZVR14u zNSYoa8%77hT0JsxgKfepk=kb&Wgm~u>s;=3BF^pxLiUoFlC&q2`u>p!+Z#bRjeppw z6~F{y?n`?)GAp-^i<^CbIW7FyW$6NZ$x6WhY2>SZ%_G&bgcgZR3l0}i<+IMWCz5gh z@2T$wEgG-gx@tE&n?VUyz?Yr{H-687uBSx8@xiNL1#m1TZkbc7W!32=D~hvM{y*Cz zVnUHXwPoLL2{2!EkU3MVqxMtx=`sza@o~$vht#tA#JNfD$32Q zjmFg{SFo=))XtL)G8WPM{tE#)*)0i`5^<))@|4pf<#~^aN(fO93#$^M3#}{=^ghmIU4JqU{IB^gmDHub>9YKZ6?b&Q|&~f|eF`G=GOTWBYduzrL-mjj@%Tr42rS? zd^*5~(EsFTn*6+_$bSx}1eA-sR`o@MvcKA$m^fWvUhJPf7&qPa0Bcbi|=LRza z!yi}u@#l#QAIFsb76f3VrIEAKH&^_K_~RU2UP~v{kD&p8KgP#r0(>C4biZryzi-n= z(OMty$Hf1DF8@05|A4&w4f9|EP_xqgz0gnpfkiR=dr9rX>RMweP&_K@g@~t1lA$=6p#m}!( zZ}ncaggBA zx{>;;vAw-X-O}>hVnWl^wau@heW|p9=>Z-O4P6SCGElJ=m6FT&QLyJn-$JpQ#%mpm zvGde$v)Rh_nh$aj*WCF=2Pcd3)h6h3zKf#0`baR;*-BsDC#U}4_S2N@YuH*On#R`?pO}J#=9wX@mq|fo)7eQ!`gtv0zn@M|CnIw- zuiVr!yWt7de36>vN>{J9rRtn)Wj{913k*Zc+~x5uq$YZgEmBfYNtKjsL*rUrt->%r zTnRJ_3}v;`?@Bf#^WO2EHOn*#-#Y>-n14a%SmofhPQh=+yho{gDoA@eGPg))mE)V$ z<-nup231oJzMt?pQB}G)vJz>Qyw@jT^xo7b3TZ|c?J$n4e^l^F^?0#xYdZ=da}~MXx?|eXd5I3D++>y^9tJcqPR*_S z!xejpohtULW1+nMh27f2VeB!Lcb!3i7T^W0i$edmEA|9D8TVR%OL1#>@QHi9x`UQR z0_+55jztUkxMr*7Mz_Yz+Ky!g%G}e<-I;w=^KvR@Gsjq4N^LPRPQ)ESFM5ruxy8i$ zL7$iF9g8N+s{rrMI6~!mS&+px0A4fg{j?t@@5u<-(a}iUb=c$a)I-HP9M^Qo>Ld(* z0?{N5&~?#tK*Ex?ehJm!wKr`DNv%JkN z;2G;>b!D!fH4lX{EJnS+V@gW4DO#@N$P;3-T=xS`Vg>s*Z>uD)+PL3OCN>TZaVAk*X1GONgUh!%W~vX>^bV-ncztO z4f~yR#*=Bf_1@tc)`fc%Dt3Xc)@@S;dc7-y3hvuete@)@B*9-~WP+Y_d&Q?l37ed=h;+Pv*dacka;IDP}_{`xvSDIr%%f z@hr6^5*e%KPB@WpgJ?hw=@`J{y05-`*su>bHkfynjL?A-N4D=Dcq z4i1kK9iUYdyt=pv8_)ybzZ2r zm~~_)R2Ux(8rFH0K$jaxR(C%0I5vFMw59oEpr8pTt)WMR6oV|O1GBvx4lboV3XFW- zo?2nmm%R&?YFPxO+y7t@6XJ`6ZtCtgLc%4tFU~7wd9=16G{jgvH|te58i|f$gJhd@ zb;3$1`p#y2>pumuol2;~_E3%!4I>^!+Xo@D_6}d}gl$egsHsJe5~THk ze1u|?E7dzAJevA$lv|ab*A7)Uy!^hE&-A=nOnIYLrr+-fsTDPNbU`^M5s`i2PpaYu z*TC21_f3_DXzV;&vCLOQK6+@llYkr!+ko3Iq4mW>A@lS# zDHBtX0$^AmJ66>uTeD_0q-+F8E2~J$gl~;Z##}a?_%kw8K+tC?9~8(exBQ;-nV!>! ztE0})#}BDkzTmLyZs!##F|&A%-5s{UK;*b7kOhRI8?3osR z@j(^wL0Qb6B=85mToGlo%v<{mICMZ?V)%tH;wn+zka&5=J zR}ceRX8M#f_&6Ynummlp2gI5r9bywkDFK~Yv|r)NqXAxXVd(|5i^>+XbM*dRGV3dV zMM>^f;!i2WQM|07XJ7FVz;RFz`b>Oh6L>Y0yAX$+j$UM->hf?Bc*FgWi9a4#@(vhs z&$8Ov`|j8rU@@5-)u;RUQxi%Vxr_WO&HE&oWJ=@CAnP{Ed6&i^wMbzGRm>{RfDG%` zTwSAd%DaWpR<1reC%46mw6KqDtg2$4@V!Tu*(!eJ!_T0?Ti+JXhTqeRwgj=|yn}*L zDulVmTK*?zNxVRqP6q)mluq*}(1y=*5 z8OnP=V7KsFSZN)=>w_-Jxe%8Eit4jpXipr(Yj9$ko>vthmw{VoMGq<ah|+St*5W9rWn%-)%Ia z`A~_+>xjF2K@xRA3=?N64ZO$1?5ayhD)!V#LWm?wI=s0G4P3311|tRC4L3;NVPA$o zkgfm`F`MCQ(f0dv(J#z>9*pL>h*}gbZlqIfDExIP$CH$S?#Yh3(G`x{Ys`QbnO&1q z*t@x%^}Nh!Zt|IOP|ig@UEKRP{hR%OzDScR-|QX+bLAUo6zP&J+KXfbC7%2Mi5Ya7 zjjpVw`xYBYm|GHOs?VI&?DkD0;LDpeS$mJSH_Es0D-40Kc7^TWooM$vXEu z_=3&d9aLAxEG`ar##}tjV=H1TIQU;H@}6XnZfvrJ%m<84v;ko^);_Cxa&c?zDgG=L zy-A?3!}ojSLZDyLM~RvMZ9n;=isDW+mv%*VlXh@vf(C?^B{rL!N`IuN>+p34{RAC3 zC3kg-PGQs_|CKYw0+D#Bl^~h~s`906ICWhvGr}~9Cp@ougN%c71b1=yc$XLN=)7UZ z!9LC7fqDEG+miX7%_SPjr!t9jQY=PD?zM1~G6uVv4tOD>b8{N)2=&|7O3@Qz-g^uY z=&G70`rszXqsu3CDWyqe?Bo^~w`+IU5v<2~v>hgwc{Vjzdq8I_ljH?~h)>mA+5RD& zZ*B@q*eTsB?`+;7h%0xul=*>)?JrNuFJk~=_>4@S zNX!^c`T$dVj5AefN(1YtVy)z0#SnGq96G?AfM=r{7VID||z?%|H_gJ3!)pLUXQinj7#fY#8^Rm|I# zI#1jD#+XT(_Jt+Mi0!-I>2>L&zu@g6w4ACBXH84l8{x|d!nS-G+2n;n+&p^9nK4)( z8Bg~b#!p-k8jsb(s|BN=eGx%aPSn9GtsogLhPRt-VlPc1TLdTB6ozZ@45^vq*lmDN z0@0s!B~D{_Q89#apDg%BDuHkh{w6~9Vi9s$)XM9OR8|3KmG_1b9){a{$G?~-SuvRK z^&N>FM}ItZw@BOD6jYYtnJF?CbqG9)J<2z*U{>JhoVhwBg+DsZx!D;7kax;Wx{JBT zBo9Gl2fLBpM$di5VtROj4G-@kNsKT-dcRA*wL4@ugw5fp#j)XRZ2HweH9O!@x_QHn z{|G@k>`;jHgyY)aKQ(*yz9awAzXZ$J)wq7xx^8xEzZCHE>q{mpeI1@1s!zo7%mU7E zdJ}xO)}C!$4f;Eo3!0lcUEur80Ab6J=8xgZD35;LvJy0W*IX&br3rcyYSI0Oja>do zh5I=rXg%Vv3#RmSy^VI0!3Ss&vGX&^kvGA$=H1D z^M-1q6COAFVI?Tq^>JxFUZ+^%n$-xl_m9B0R@QZNeqg6bYUUHi>l>Eter^Y4&aRAB zWvyHDXjFr^UigW=gFiF27&lGXwcffwi4G;kP+*&7s8gwSV%BWRZ=LhMdp>jm@8k~- z+=p!YtZ&^;jjLi*I^U&a9v-lSLaV*ZW_u^{XP9an%O*&qGA8YCQ1>PSYE7c7wRK(( zSlkHWTjZhg`^FJT)7t=!8tR@#@3(ySeQU`*ToI^^yB^m{)`YV{eM44zk1+3(q3*Dh zuL9l}*e8L)6rx*K?I&dJQNPZ?is6SlBafoIToBE*G|}B>&$o%bKo;F_T^l06sXNpc zs{t=x$=#cDSnT(J%M|m&&O`60n zLTM;H*?uQdLey1j=q>GoA?ZcKfPTFkah0kfR9wVU&-$#a)(N;M3Gg6>z5WI1FadXmK(pw+ z#aOZGk2dLHF-g)4L^jvhV|E0_*vudjt;-P-4r0akGZ1=P`L(De-Ex%7p$z7LEp96* zZYODoVYp=wT>E#`-CeTGXP47{JvRtx0F8!Dw?rg*c?g zZc2nRM*IG93;_}i@4}#1e8QDrOc`?91Ykoh!5Z-c%(9gj&)|i#B~t@&wwxX@iq#o@ zsE5h0zT+d}F$uWL*|<79T#Y6&XB8yThuJtFNu|6EVqvU72;)xfbkvKgj@lw6NHCjR zC-^auS?=`VzFIRV16;g7gW(5!BcrEupDDXHTu`bk_lc~=d{21q6va*`D z$W(|BX@3Eya--o+HEZ^E`!NEr)iH$<&DjK6Wu;hsC?Y3B!U33Uz@(_yh;)jIa_>>G zE`d_Xj&HZtk$t?%w?VqJ7HMpr1s|^_egnr;XMLyv4tu_B3a-=V&3uN>bHR0iR728f zgu53JWzz3lec|MEJk`1|a0|oI`h-p<-1H2raZ%zYxcfU^-rg(v&Ey6Bq!LeUAWcR2 zYM&#}Qtg`ZxtlBbpqfd@2n8jtx`{!(k`}I5RTdyEd&WM`1!Cz1_lK=>`y?#m8yg5_ z)~U%5S^Xf)rDKO1)$%8~Q^;Wdm2C~L)LJ-$9sliEZ`T#-Ln=S2E@2GaLBuF1 zq&G-wyTdJBM8jY#KHJNRP_q@;(msK${28$62OGD>+Wk5oTYp(LzKF?nQGbdiw&+vU zS)(7yqbK&92sUEt72ee_%2Sa|>|>DUFe=lab0%JE+AV2VNXU+}HruNeabd?Nw<~#& zobABY{2@+J#Jt4R;znqC#uw?gT?^##vjq?YDyhZ$RyUH;Dv4A=B521(sRLw%?Tm>7 zmCWJ%YnKNlC5*POEsBhs$+k!tt{Cb3_!fF0&?_ZAHtgv;5l{U2Qzm<9dI{xu_QKMB z?gi~3UdCU$*_N=Ms`Df{$$Buq?8`Z@ZsT87Q}a??1%ExMK7HGEQchq!zZ!0K;*=lj z#=*3^e9BqP423KkX+1xp0E`{aEm(EZ`p0v<+>_xP6v?^1=eN7-y}#Xly$JOuUJm~p zkn3l}!ASi5`xqR>t*ZVT!PP`mJYf-)sBa{`=lu#^XZb4^yTMF=KZ6U0K>|@^!lZDgW6T-?l zqwzG8-aX?LWSryam}`21t!#_Sr5rn;jcJw5pLAnYlIAkKFArLc#6WB^JqgGnXa+(P>OmJ7~!n+xwr?xYcB!Zg^O&Ekk# z=FW=0o=j?h3TM!zZRvbiw~R?3azJQlFB7@BdkOn)?|5vjtzI{$n82Jddp+X1$2(( z42Z#DmYAFyO;d{|= z9BB;|ud?DvuZ6Py^7jpn%2Baa>>$YE-6SoO7J@)wCv^?e8^BbkM+LZ2bx-bQ7Mv4h z8As)(W~Vdw`KN_R$PnoB$?*#-=l=Nx2_)>@IePMlEy32gVr9$2xDA$+ZJonBxv6bO zJhnQ?IPa`74O~K~3~pyCqg%H{PbT<;R##N-Z-AZ44Mq>=G{hG<73xE-<=RO|4z8zL zb?LL|?~*z3=S`U;UUi(3*S>RGg#n^2@fA*F zl{;-D2SR{ubAw?anrF|TD%22z;%jf(n3jsew<0oB-sJM$$`wO z@r>PUICUW&5iTrx8NZDCGYX{@H6JE5l#VWB9nc{jwyyKdK}y^j33fxr2D|pHy8+I- zZc9~rwynG2o2%#}8ZTxtC2PnACVLV}N1xJZcl0jF&ln6`=3{>?f^yhG6W+Eq~^t^DvnhjVe+fGS7g(=I&3xmqm^M@gzNtYeXt48khR zzQ{-!30=zAK69+>oaDp&)kn-?VfmR!6yv=qd5hFh-|Ya$9otp!0;AunA&%mpE_Mrk z6?x>HMA*a+{rhSml1vF1IGj)HDw7q`+<{+>wgi_NL+Q{qi60|fxVm3H0~$1oXks)B z?O|x9wFIP*liG|1y-xk2%%^Q@iBR2qD^Xn;dIEh>z~(48Icp_3Fe<#+vZ=}FQecl5 zl$j28OOT`q6{b}zfR)wrUYYL5$w^P{x;2-di5x`IdRkr|3)&1y4$MqIW5P_}Ml4Bh z;bu_)u}^STJT;hKRC-2Riz%NR#(#hT2f~0ixm#;P4=e^Y6`DW`%Sqr%vMo}&`Dt49 z$YSl5qBhe^DtTRPmj&LH>F85fq(54qZGNX)@lqrA?FgtG8l*#BY%etKSiFrRvMS=6&nqqlcJ@55U_1qbmNlbC+I!#)yf z?J*7O(<_v?g-W11qI2DNvCAei(5iOtx$|5*uAO%@f+}_s2BCA54_6^)(57dye#Y!; z2pvhz(TQVgQP(%q?cu((gLv#6;;lJ0gMyIqaS>oIk=R};?;H*OilvvCx(`}Kei=C6 zL!eJ`2dh`CUjR;6i8o&o zOtERf>O*M_EKUn|e2i8(lBFi48tNP^@;Iv0N+u^euP5I^6c2|+hNBrPCg7#F`b1>3 zW6QySXx;+}J{Oqc5ZpgTCa_~*k_qXDy-1$9Y`r5^M{ny~mJ;67N-q%bIV+FBe*+I= z09EaMttM0iA-OZP6@)-SL>~|7`&(6rqc^&pmjQ_XIz(Qr{{S{785mX-ci;}L6VHUe zVb!{BW2rYLFdy8YS!LzdSl@abF5ijgiD4(_I~;jZpJ+Su#9vkzMiugl?%Vnj%ZSvc zpr_$VVd@dYb!hZEQFJcvpTNfODmiKSs?vv@jUTW9HES%Lk@lQe)TjG|%ScgGS+IH; zXN~5rK*@DsZVa>ExFB+E$#z=s(Tl}AxN9Zxu@0;lNKDlssQNC;Wtbg+zpFd(J_NIt zQ*=w?hN8#n(Q1BWcV^J4bRZ=a_jWTaGd2uibsGS+v z{;@>B`P<6dzCdnf%}w#U)%nOzS;aX8z?2O+B#x zE_Yves}dvzWStYr=Gp3>T!h!TPem=6SL05=;*bOV!}2`D@Hiu^yyA3Vgt}~hG|%CN z^L|}l2#MDc2X|W9=cQB=^?QjV@01B6ZL`k9S~X#Pmg<>C!LvXfd#S9=>0A6paJlH!>mhd|Fx5TP^`#t(X440gGk~W%NLe|(knzNR@)xk@Q)1VVu}-QbGPGg=u-~qALTlU(yTH!? z*%Te@FyC#B=;!3TS>!1?pmGgTJ#& zBt(SF(h;D5*zav_1o{nA^m^6&JS0$};om3N%@^ZVoXu$RP-t!3@ODHnV;9nFO#`p; zb+3R~n<46)$7$sc@NOF}_t>&ge9RQGvfec36n_>T?kmcB?r>4+8Mxn4hWBt(AQ}51 z>()o{psuQL8uZ?dq;S{h?$keLxSrB+G5}BV%3qvu2p=rYCA+b3nP<$)DwoeWg*7AkTA>3-c$>?`eS^c8^P8GR{DY$&&#I1p07>LpSM z+cy2J&N6PJr6GefLe-APIVuKRgKjR5RlP0DrK77+9JA8?ib4U+%@frU5bkRW-@- zAGk;W039_eBmUpApr`x8gW&%|7JpSuvit`!(uXYgce4+M4@$>}wwmF?eSjJNPto_k zeIS1le3X<`J{%M9|IMxVtJs|NpUFu7>VeQQP=7cCFfjhn>Ed@on2$Cjf2Q<5%HprQ ztPkSMf4vs};1>N`N)+HPlqjM9jS@x0YiXwU|H6x6{Zp9!uX#})grR@pMg1X2|0^%* zkLbU@(*MZ)-|(XTU9SHRpzpDK6q3AnjFQ#`WJE(^ZyMw>SHccALHXQf2g;a z=>HFL)E`Rt|84gF%uD+37(vW`y!`*g2pUsAvcVFHexHD7P;x1 zsv9*Od0Q1thLH(@tBp9xow<8;bC&Z+cdJWT(~QM!$T&${{c{14lswam=45!7{o&s5 zrsZVn#rgL25&wCiCXHBhyZ1dIm_KO{g;WtRTo(xaWvqX~!Tnu~!MVQXVJ#`hf{Swn zacZn4P5m)4^4!>!Wx%lF*R|OJ-h@Lo`hCfRNoL2py`={iURwu_rohGhcmdw8Cdc=S zh@Cd(oRpR!BX{Ps(=<-C@vXdzft-@7Q%jGKbUa+8Kym$`z;=As;7gI)v^V!JZ=B0R zda++{43+JEnGGy<*xg;gPdJRHpLH%;>4~Hp5{jw}+`q1V!VW473}ImF@TXh;P>v2q zH%{KGhA=SQr@44`kQ+NO2m1dC9sl)icF@NP*G#{vo4zKjVp70m83_hme427_u>re2 zOeVV&oI0|&OEq`_M);F)bqwr@2sT z>y2rZ5zV#%!xaPb6|X-7X8iQ=d-urBcP+H@Q>=wYuvb64Y9Xz}mI%p4>lG@0F18Q zNq?}z)`+ds8ty@$8&uekZkkQSM~^akkx~XSW7CU*gPAASpBwH1I1&Xn&%ruaxx+ie zc|IJeDsWlg@T(;nhf2eWvoBXx%y{Dax(;v@d7sUE(p0`#D{ITkbpmP#y#`k{ACufkchqXTNQ%_^l{&%Ds%kyRtSUtB zc_>@rZsyhdxQx_M%EW?y_zteZ63E_T@e(U;n_?Z|eoy`6aDi7e$A%QNGiu|YRkR~- zQ($@XGPO&JsTSt=FcGlYAYuUi;Y+W3IYokTNU?l`lu1** z)D|CQ*5JXp=!c4D^ZmXad@ew-S9wHu1GdzH82p6{-7u4=t#b4TTcgp*{W&=WCW)Yx(c z8XXY{)XH96hdXxW_@P=Y@9enksCOUr;BT@VlT^BCoo;yQVU#sK$Vcf5ih+o!ZItd` z=p$;FqStfce?e|Ond2LS(XV;8V(~`KRl~xuLL_ntGSiNHRTXmVv7-$t-}Jls_7nOU zrbR}y7{=}%t$OjZS&_b(N&Tq8m_}?RHjO{#8I;lbH;11jY5vMw@Y@U6M!CPG`7#dG3 zJy=$lZN729V*0lkmEWKG9L+nOW_e$*xHHE0W5Dt6-`ycpE-QMrEQX~->}B+nQ{_ba z9eYNtC$Ze?%`>D_BGDK6$lT$KA4-gHXul`7L8u%w0AMGU78D>_JzHa1zG;82OiA?n zHXr&3<-GCs!=?U`trKqt^7Qf02Bza&D`P`Q%l+wwGj&qcQI3rW1=rMyO#FPQ$*EX( zt(~3=h>V-H8}aJ%7d99}k;cSL1YE+_3sH;jzd*{noNxWoKvaT8YLPiwY+BI`qSw6h z%2YHGnNH!nE8r*}^NqoYsv@Y7eJx6`~emWU6EtBVfhVct@?c_x`LED||ty$&C)i(#c} zGml3e=0B&Wu+G|wgwo@DB%sBN-5$o6CF-n+k{nrR`G=ekjiM6S|lD@SQ$^v1I)3n8)V?ePh7D1+#dQp~j zO0s!XD5$^`L)-~BH1i*^I*>AwmGT0mW7{zzW>5M7bJ0{Kb3xJb$|Xft5UYs)AisVrDK;iXAJQYo#B2{msfp^R>{r6gUt<1}*0hmzs7wn@02 zm|)@kbIy2_xfj67GJ2*KCEVrK3#&$W$5*Ev1YX?OIs`?jLhly)RN2wU_0_&pB4FBC z4FVnqVz4cDIM-TmYBD$#on;2EP~TB(R6gg*e1=sIXjtc{r6YCj7E1h<=+@+wP0xRR zbKV`aLK*dE!fr#|b*amS2BtBeQk|W5uey<=bxY0h z&p@bq=n-ZrSM%Djl8ms`M64fpqR=@rN5k3rBIJxBAj}8 ze7>~8v`a^3dsJ_{&!6A`5fs`3#r`^VvQa{?#?%H z^5Y#J$HfHYbKhy<$uM4DxQPwS594fVR_h8cPx5CM%gK!pNsZAZ72?mYp>p(i9wQQ& z0HnP(QZMyIETKjVb{C(CIhpVhwsL+A(xHrL8PE zA}jEICu}D z@+V7wdK60b`Esd? zB*6AG2)`*z!RGC0vF`@Q)oLoB-<;9$OwdEC{Y(O<8UW!1Zt{wDAASFwPQR&ot-)Eb_ zOEcMO8x`t;Q$TbzAUX@V@)NuE_gqm5tLRDNh66v%9hoouJ#v-Q6!1bi2{hW{TuDnS zw5V1nZ!^?8r669|Uo^Nrg?Yhjl6tL?mQfLFo5qM+*ei-oQ*Od5f$V=;I-t3qfOdl2 z~Jvq}TQv zFZyJKuu!VN3$A;0emm_lLRd7PUT$6I0QZTUz0&fP7DwL78sKr@z#+rguYu5wl;wQ_ zpCs9d?*Xse*HZElFen4h`LLeP%zZi5Vt_bhGB%IO_#Mm-57xq_=xLlr$Q-eeqRqzQ z2HX7LXoau}ycpnP?aCqVlR)+ea6eA`UI!3JQL`0Ws$k^Z4FBmiNb?MdcgXJY&TJXO zeRL|iFI|6XteU{LsBF8g4@HM$exOc_^VJO6Wi_6cl9`x1t8%5(I``fw?W2E;jC8Wb z*@}1+JPK8R*Y z5SvS+ODTAFSLb!@w&iTB22`H2m|hPwS-p0!9uGAYN*NFqV)u_06GMJl># zDiZ&rUBqM+sr9AF#xjWWGnAXHjYd(%`vL8Ms6bkxsG=6wbcPnMv(G`nwsX~F_N&@r z$DQ}yV80(?Gw;QI3(c2`JK1L<;<{pi3h65rZU@(^>)k_p@MRE^ThSbRJ)Ip_8~i+@ zPb9+9o!#r97{F|TSPpwk+RSb`*6gBPkC@UGPkS0+=sV3ly%%9%VkMVlU;X_X3nP9+ z=DcCCSJw~vfhTcJf^S!cS(0qks*gQ})aLr(RZzU+Yn`m~4T3cPP@7$RtiFG2S{}@q z-jMC*zQlT{Yr{s~_|mc~o; zj9#bDTITQg5{Cl;W2$L}^zrgs(0_iTNVbrTjlLFRd*&Tr1dzJbW`3~NwrHp;9 zZ3D91Cp)<(8@YexW%-ncxaWQj+|1Z|wIlA&?-2&~{?4V=Yww-ir+fD}^+qOC#+qTUP zI<{^5t=?zfcTT@|_C9Bfd;iH8!C0AVR@JOp_08WmpH*^%DRX3L-9|?88)>PFdKtkP zTZaUN9AR-Bf{bxQAVz=}HI?Fo`Ys2I@263U*wboGM4=I+r8zEdnkwR+w=q5wYv{t? z2ajNY-dnye++ScmbOn^^t#(tJ0jnD^JGyIRT(b8|(%h-;7w^ki&Rt-|vz#0#g?%oe z1>;Qc5DS4E2!o8%?J$%zt=T>?P62bXBUex!nN|~UQlhx+(pxP~y+W^a+!L3C>Rf;v zz8mp(3=zTt6E_>0l$saTg7e*BYu%&Blb^J&L5E2Ob6cTM2%%R=)O(Gok9Qqjqmmv5 zt;b{(uKOyj#VCvurmdk~dQ}AkT&7IzF^E==xL6Tj2Q$D4hJcn2qCU_j^S%5_2bzen z_9+DOeXS;#2z2N}0;O|*7o_R>LSIokI!myt?fCd^(%w6H@^a00B{wt3m_&uX0g#{4 zM35*^0>iE_g$g~{SxaK%He=k69WBB6SAsDPnO8mCPZ^TPUYg2b-~t-tm@g8bDr1GC z4GA62-8Q9)OBj(u^ovB!i4qqBgyM7=n#fvP7Iv_;?)tOL5z9q>1s!7Ud@`JOmzPE6 z(Zq6(D;k)};UvJBSsq{x(Mlu9({Oy~${oV_9+z0xQoG@ZNS_}G#c?8zWj5TX9^Lbr zQocx{bo%AcbB7QLkgs=I7EiOFG!4?WO)T-?aZs71kn2cBr(3=?d{F4)z5ZcL1!RA=fgM{$ z7I}+t?iV};6;U6?lz>l0Rm0BtplxvMj75Ipmn~L)a^;yTq;jqu1Gi)<+TPi9vXa8& zP$i*tgaYl5!~(7Y#|o_8HU0(DY(HII9OA^k6oCoFzS;G&L|?e6)oDcP*-C854|IaQ z-0G6A<9K{Js)2`}YwJd52>sAbCnM3?NJmxJ&GXfw?Q66GCaJzK2G~4#M$oP%4rD+7 zyy_i=IX;AcP{sTR6ZqYhO4b+3b*sz4Y788hZGoOA+r}!(fhkjJ z${mfewIrm3lL0hwXetK;5~pj`yKW&Hqa&{L7ibsPcq4VY&KSj}XMV~`7{48M%IdYv3Safq@ zh2qAzAC1sIzyumyWmwD%-bTtD$ z9j1H==kA%uIG-97-3bypyxjxhs3HcN;5XnOpJ!Vl+4s>@_0x}zjmkhgJRz8eTq+|I z{J2zw7NzdzY~(lX+dIw^AHL~sO0B>{!*>d~CeT&ydW%b}PK#_s`YrcH59PPBs7yo6 zrhpuk(71WIFhS*fa$(kxiq4=IX{A^}kbYj326BA6IKoxg>bx;+C;5on^XhaEa0w2k zwNFvmim)axG!k{FkZn}m@Su1X)f{6XIQm8RG~PO8vC~`~wBUDDv2l`8km|?VM<+nV zZJbcZ3t_amM9ys}$0>?!fyc^yFZEa_5DJF^(mA7)=;Ouoe2blv5JvgdQb_I`F2xLE zZNZ6&;JsrM)1{uD4u|{cgl3BEKK(Ezal>$2)JP_5j)JV3AivTTSzz0xdY?@&3;?^A z<5}}av}{Ym6sJmRoPv%%(FXR@$?qMl3nGAgzqPdgNr~8ag(+f6g>hGhxKGFDc<*z-dbyJ11!t(rnODA@kvH&2N>IF)tsY zo-aHE3!x;_6J#%l^bs7xlsIw)USCfvq&-S%@iMylY**!>(tuc{t7KJ1dgf{ZC_NSp zVLD9o)1`zQS~R35jPGFtv|+;P`O5_vg`6x-Mi5nZVhF&0Gn2hPwL< z{2aM)DNTbrN<8Vp=T7qnuf3YAF;gppK;rbGMxhBeCl0wfcQEbK?2Q1P3~M8hy1XztvFlo(gIX0b%>aU1y*R4H6cW2eC{(1wB=^Y%p|D2YY;}4{DRtWFJXM+S2aouO1im*~ zI{rJe)R`K-Y#vlwU}N~$Q0)d*+!``!$Rm#)}GqvHePb9o!Qau33SCtEAo7@U~x(5a>M0Odw4OhAXo9XzG*=LH8X@`B?d`y zmY-7G3V7lqxy0h55y)uQU|bF+_^v^O?^`J$tGy5*9%F0DYGJT}nbI@Iv!*>Nu(8Ef zYGzWNqFkOqp1A^_+8~(QCWPtzPp$oKzM#gz0c+(8f(~UPxgujB@OEA$P@(WZPS;%Z zomH}a`(@;ooB$<&`Bx|_!Wxa`|kW?^Mea$XHZJ0BrGNo z#m#zDILI*!i)jdR+(Ka!xJf^9*?06CxkUL9=7p2d$``TU#7zxZwcmG%DNZ1r&+2%i zlr@(IwbZdo+s@aaj16E*uma zixRt@l2oiFg`iN_#ak!mu|Iv~o2@s%nHE8N+{2?bFABeRZ*cIRaMI6Y~9-ZPJe zPU#&@h`zOky=PJI$vYOZl!#)z+E7=tC;=P|*{=?pB&5SV1bM87+0XB(L}Y4kG5Dzj zBSX!M1B`l|b`Qv1)-A)pf)WSEdqp#B5gH|Q{aZ4c7w@*8$m$~vOe;S+IQuz}8xm&S ze(*Z$E)6yGtYVJ=p7vDQBsZ$XZQ})Djm=dNE8ynTCpAGxX27As z!TNNUnCq@j#F0tf}>Do^T%O7M@Ypz1ro38i8d%Gmm#ydl5_I)9Sj?(h_b6#X+8=ru22V z>%_T~i)<{b>26!lZhC0R^Bj#%qWD!rUlyHD~%;ea#?ZPuBA3Gq*Yo*oQJcYVN2C7L&v_jhO% zP2=1!wM#d$MzH0r?fD`KAt+f7>j@sfd$~q1T?{slmh${d==plHw3x*4EKJ|+z4yc< zvkh=X(k5(h45KPa1iOI-4#zA}cv9M-EWnO+c3AxCiY*aUB1E^pRNb*96v>_1k}GIF zV|lA$ddaBZljW9f?X^$67D#U48p5-=AK-k|-1r%|9yvnUF@Ttd`i5FYH?Hwh&(qv3 zWwwS6PQ>C+s`pHcQO;|nHWhE`b>QqwF4FvIqlSbp88a>DzWWE3cNt^&D%|rc06Gi%&F+5|50@i;Axj|Dz5k9uW5t=6EV7h1FmN z?}Ce~JY@44O|OeQbIjABztA9h5du8e)B6%cu)2@eVIyk!vY{_Fr{Q;_Ek;o?`Hc5taE_7@g09whtR9j%lhNnn&B37+m$ zzi%#qR9p@%U}<{M$1f435N&uiD*Z|7yE@>a_&Kt6XY!SUxSpCzu^tjNfkChef?l{F z87E*g**B@IC{dXdkSBzKK4>Op$pX$Td`gL-pT>FtA7*8>uxm5}M&CXL5TZu|6SI8o zC5EC!b;1)^gk$=0BI3`=!*XX6u-A4;rLIUra!r0 z{^cJ6qxcJ|r_}$;d z@eBC>*iimvUN8X$=AT^rf$6{Ff*Ifm`TwUBu>bDw;`k4qCWb$`_y>w#J^2BV8vy^> ze?2?@0>y9sE++c_WNP|zUN8c@O#m)fnE<_d@LB%A^xtv82*_6WH(dPY?_#3=S5wo! z8xd9pT0oyAKx)n}6ik55SAd|D{{s}i8N8T&joN=RF95L>zvjiCT>OFQuekW#arf`t zhwQ%@yZ|93{{h9HT>JwC;~#SMCo}&m6u))eVxs>qwUZt&F#lX5e_;A66wLocD<}5f zv=b1`@gKPObB+811tXyS7$6*n<$sUjH|=BsWQF`U^MV=BSn6N&;tx!J$;BT{!|49j ze#ritb~4fbciQFlfGjKyd?p5ZT0j~L zGaLKgs21yQu2j}vQBMHc6dfI$3?1e49e%YrW8nBrJDC8!yT2WgUw`l?1ZKb#0T_D! z4c2l+aQrTufY`CWCxU_b zmpPgFA1Igsmf>Fx)&D(;--Q#fN&h_xfF%|Xc*exe`b))`Spbs)pyC{W)U?0k;=d6K zj^Bk7aESU_6bt}IE;}PWBNH1fpnn}J;2U;)!0tr*mpNsBgpU35u=j5_GLGM6li@$f zCScQGVEq#VBfu~Wu=D=!G5ju?4F4*cf9*46VPXIO_)Pn?t-ma@$Gx3VzC)a_nOjJI z{Lr0TTwZ=96_?6G7N7pr_MEgfF^*>GvOlSYG2>*faqYZG_R;PDTtc2OEoZ#IwuF>q z88K5dcgog`86jGwe|+|&263=bwvX@bUJwa9`;{&!o3+P?bW$=e7M77j<;%P@(oqK-CEaaYtmyOVmxn0EB+3 zXAhD$!aHOV(I9#bgQ+goTv!6uvKBg#C**_^H^^xx-itJTVSeb6#4~2sePDNjzaaETKqj%}#JQ z%?w48>CcUK`ggmliHUcn7tVKZt)^=4rXId7vX{73;F+JEPTkVAaY-T= zBG-x{O(3+;j#nOb>cG$Kd|GtcrZxD?Az8|ZSV+c8M{J-HefeMGf5ACZHei?xSc>*Y3DnFG*G3jR!$xL&e&Ro`zC%M#xx;1N|)rT6S=gIif z+sIxynzINqyKd;*QbQ*Y%Aa2y3UI2UaI}Iej{qxFh0|r>U!!uB;Fyz7x=(gxg(bt3 z7G;bi0sXRR&7nvb5mJ~ zH`)2V#8b2d5Eg{s10uMS)NorVz&Hh4JZ6j${QFN+LFRaLY2hAiW^{{FW#IVxcWhPD z?+iR4-SYH$9kroOKNieG$_sP8M|Rqy5WivAQr_!Fg(7fFZN$39&X1@B10GlXng#0Z zy(3m@Z_wF)Lm|RaQIiCY*10?M^094`9u%E4@LSk3_jq(ebuQl7AS8>P*fW`17eXNe#D1`QhV1PQTHWnSH|;TS z-aTg}Zz$bKwJ*Fs`*HXEu3(!11RJFs=!5%U;0t(S_fuhI zjLpku${yey%reYYjb9_|@;PpMeL2cS4v7FctTL18c!m`^-m~g#eBVIPDeO47->A_w zZuT{1J_Er6xqw@SK5g|v;np<&V85I}SFz4qjyAdKdAr-e9vh;2Ap^AB)_J*k9YHX4 zQogfVp}Q5aLMK>-+7JJ9Q)HgNp4jm*HWxX8lzm)}?>sMDsDFk)9y%lPAVY>HaVX zB6GxU6QUj2iycJ?s)K#0+C~V^k*^~mkK$VvcY^?0pfjxCja_uZ)>n|jC?8zBiPU}^qo2V zDH?Hc2sANWdFgVdl)+U8-+4?ar6U`n=!D6j2AP)YTn5{lOzATmRY{~O%9JN`?_TTZ|7LV$A<*{ z&df5=pSB`iY>}7j9l2x3MN+Pe$8m9G9`+aWE*?h3h>BZYH4{+DU_-$1C!$`xe5Sd6A#uKjUUjfI*mO&DcGEuZJ|pbGAHjzpstZjV z$*0iVL-kCn8q(PF^Ds!CboFjWF_J0h9c3&?tEAE!C>5V2{6bcn1YfSvPnyg_z}J2} z#AoVsFJ+$1aZ&hl{=^OD#|)!s|EbSv13k`pd_snRW4H8xoV;y%^3s%ReDY%V$Cr0L z3@$zzBt9+ZP$s^mD$4n&vMfBCvNAoo>{}JOC`}a%s#7imGnJzNry!ZAwCrm|Mh)_< zV0WlH$2~@|WIb#A9vz*YA786OGruvD4%;6tvI|%~r@daGH%)CQK5;P6UE`4;bm*%? zh~B^Ko^wJ+6hOL;XU_ImxC7Hxp0xs=U6tEdg6=5A-pFJt~o3J_d3 zAPzXb-XAn%ChQ0p1njSD6?q=*!aCUrw;buH#5lp`rZb$l<7p?8d{c1=6|mLk;Zd!$ zGs)ISF)3y>kWEfhb~IyM*@8G$dl^E^ zjT|ZRRRGV8;E7dr_{@dZ>Qu`NpjuMdeP8)W=G@FGkc4c9)lbVBw@K?f^;O-5?Z$8Q zahR}lOq}#y-7_k{eDG-SQn40qyWn$nzswQG?2xJood-m`C)D!o3=ex{G9FCT3ETV$ z1>t-^AihaT-NS~}1K`o;72pi4%L!DpE{2Y#A=`)AQr4?!3XwkS&>{3KFj2U%1<3)s zoZWsKR!j|8D!WU9Qj|7&gSo);+tX8&B}27M%`U$Ai)iD1wxPGJ%6@D?JMBI2DAiGY zwoz_J3wk~E!J~yp27l_VS9V(Cv<;C0f4=nWVO)m!z z-n|_ZL^NFN6CJOFINbtRKrS~Qww&HkN!>w8>{2rBHpw_+@Sh38?Z1y0B=--m^zT#0f1q#Jf`^62A;6jblnQnkxEpvs# z-c87U=xh&1u5fR+lgfPU|)DC(iE zLQCnw%U;b>6z63>kxS1e{#LV3mk?)%`FV^9oev~>JxYFF{7Z7@&iX(HL-*>vv$Ng= zpZ;hEVWq6@{(9*gnCeTiL=ANatO(-!qs1pMjOL+SEerAC#b%TfoKFwB$uI5DW%*JP z!<1KvO?HoPZ(JWSOF*IY*g;U={ny4sR*^xl%&YE$Lwji9H`Kidf{bh18c7{vBov~R zW>Me6Sy+?#`^2okFK2@=5%tFw(TOGDG;U3o4CP4~8axYl(2S81WRdK?T0=>>_UXzp zgn4ldoaT>2%IRmtp&_B4*x4iY6JsY~pnSy&?c^u@(vH$T2^{^@&F#HKX9uZRQ~`KQ z*}%G*cdcpR^{BNqDg?(xJNNrQ5xUH)c&|6Sq7F7eQU9n#xYIqc5}3=R>hK}R=LVV) zKco;5?b?1D$%qVI5UT#5$qO5UeP!bj4N*N<#;El6F0JP~vbQeCUuyUf5ERIjk2y#6VB zg{eWN3C0^A*dRoV0$l7z!CrncG2)} zH*pJie$)q@Er)B{3d{l;4`K(lb_vgbU)U^1o?r&+JWD;)DY?#fd|mh`kIC)q7xGv( z&2Vy6kj=q6`~rN}Si32LFJtLn$G@J;$A>m3@EN(6_JvclFw=($2Q zO|C$>km0K8`W&3fK$s1_@*c%dQ&F#Ow=SExc2SJ5^H~e~c)0p5m|=~QM`u@)2gzQ= zd*p^~<>?lNAAK7fq%mT#C9}qwQkN(k0&16EZqS955!#XN zp?oz-7B1sS$@Ed0(HPPxP&~@8(*0n|c9RyaT?E{+P#4)PeGtj&Y`y_pz2V-ryn4rJ z=(nEThII>_Z@{>{Q-{Myd+#ewf+klec~-5!nF+A~cO5-P|j_`{( zyMk;NH9cj&-0?X_I^Kl!HXav~?OJV*#c6m?wPfB=;f7dG$0Bqa}x=63&c!|4#f$s#KCv^h!=%KSUxbv5RiQ03UVVRqEc1F)RX=a zRgG@+d`d__fZ0x-ovI?gy}KmaeCyVLZjP^Ku#z6g;}Z#J{tRo0UlA!y;=8QKjl$ko zL-;|`MMxrKFe=;na?xh#0fwhf2x)67JT59-g@naxc1k1H*Q_F)*OztK zOCT>9LFv;aQnuD_CFD-4u#chu(?PB`P{rIovMWUSMw#|#7_k_N^niJGJZ z)ma>d)7BtnSUUg4r-zG>aUf`IgUmqWN!q{&moKAoCRIOrIY*t5)6}gsnPK51rxfv4 z5b59^jZf9@=FLd&+44sRF34hEu36>yIpq%W(X+67lzK9vcQ*S3G+DZgga*~#t9 z$iNEQ(WtuH`&m#qRTbIl0m;@U>9ukPPn;y?!jrEcYZIa@tH126w!De^T^yYw)j3uO zf+PQHl5Fe(o8Ogb3zWq}c>M?(>0 z^Oz|jkx*oMNquFtXrA^yH6B=gvr~Lw8yw1OhA)RGKfIJJL5YZxC>M)~*RW*mDi$#{ zlq2EHn6ZF8N>LT!8_FZl#qy_oEV;B;ul1e(L>ym$s1SYhX_x8yRFi2f=fF0bM!&21 z7JJfZ*08YL)^e748F>7%czWc;!jF^LY0X2O`~Hr@H8a(Nd6B^h$I4rLrDyJD$@}m1 z2y@`sBZ%wipR=Zm*U0?z0fDQxMM}0%>twT1u(#rYi;}k$`wLXFSf|j1oD_=~GLOyR z#X2sYaT9I4NR4A{@M`5FYMj7s#yX+d-)AKo7%OMl+)Z?dj>ZbmNw}CQS6iEcb=FX! zZ}BUM2sriR*^qNC3>0ThAD!VS5<{^R$b>y{51%Ns*GwL>I0=q!fm`vEFXtndHaBLY zk8W05#FRZ8U?jo_Gp=$LHZ^0gt&>XNINrL>O*j_8H@<{0 z&c?=pA4%9Lv(|w%a$y}^%%yhFstn@{Pgao7w5WT5n9(9yB?EEF{ zO6Hl{vQT6-$CFDyVriz(cVMBfWxUFnK-~LV)XttET0um%RGX7?m8Ef!s^N{>!o<%# zqP(w&I*E%OppBFu@-|o_iijWt3vahe;5I^_C1jv#(^2X2mnPf2HP^T2gw(Skw~k>V z;l)h12ITrt%`ZZn*9kbX#br@g)2V@4eEFmM$ApDrc+RnkCDB(DtB<`lekHq9rgNtp za{%U`GKjx=^tkcYu+%y`v{;JoQjus&t8I;x7qw zRxCd`_!RwA3wW+Vmzg7>ru6^?iIOEXkjI>9;o4{ zEs0ksJNEwk0wOkvwhqGGlOAsn0jeQ>(80W}uBKh5qw{k$?*VJQ^^S^b|8%u`yQ5EH z@tmSIyx<+g8yD%}-#Q|g09Vg{e?<-`+py!a{;I06;WN?$>RAlve zKNl^2uVevU`|nWzDg#U${{w@WfsK|40P6n$#_y#pK&|fYVf=#(KnV)~n1O?V7LeV} z3Mi!fH5q_rDF2ZR0IUBRnZpDq4*fj}KvfY?24(#R45nXXu>POG_`RIP_^;)xzb+bZ z0LpW};QzBZMZfm412$Wnr)t1kHtSvBx2iBOl%oa)E+iC^#qY7qI*JX3G_vd(MzJS| zt?4sXOL3hRd^L^3=}6P6EY7H! zF7n~=QPvRBJ-k~eBq*ymDeFv^855tIHJsq_J#ES^zFg+U)BPwtd3w7fiqq!vx&iGF zE+UT%)TDO5EgXz~JHE_4;i!Bv`T(d0$jYde4);rYr?&IB);2v44yQ-EybiO)A0K+u zq|xq??IWD4T$ENm4I6j9jOx}D{+M7FR%8Vm_7Zu(+zdaF(%~C_OXIOHn^U5;O|!at zkniVXxV=8z7Tb@;6IiY?7FlK`rYf^`e+mL=!&gssak|@sUK(0XjxD3Oin`Qj<*a=$C`9k6;vAL6cx%Th5*&Elj{>Aur7dkmh}n6r+Qwy6&0az=q^%qHWV$~{=RK2oG>zob+XOt5K`?hlb4!)r^O0*zVMV z%_E*15Zo2HP#69T<2;VetP{Id#?$s!7y+`by4K|vxEnnvYBMqhX@`J=E&0l@AEr@c z6(@!c6tqYR92z|U74GCXdSLerIc5$VUH6cU*)|leqUe!+50sRCnBrZ_M>~HCOZ%#L zMZ;A2Mzpq~7M>yvavBmwVCewO59QnCqJ|qXUInO=tqsMx6AH@mVxKLUv8%LUbP*%l z;_&0D5q!hm?Be{7nysB(Bd-h`?K@eSb?m_gQaD>-DNk$qVG+Wi*~MMLDqY7h9XaCM zfmxqb`=`mY>Ooqij~dBrNl6_%Tkb?|j!#efUlxd7*;Hk!IKK8;%Q)S9^L7I(IpS^* z&Z7`;N+EIcM{Wn|eZ~%WdR(M9Tk1Ri(ZLzm+4hDUK`j12-C$QobDbuPi#@thU_P%U zzZ01(kiJ71Kcd{IE#q|F|9&;~O}8iJel+-zWnuKBX1`NdFt4FvD)kdPf)$}Bs8N9K zEfejq?ZxFLu8E$9| z$0c#B9+v8IS>%f*WY+Trf|TBs0E*#vrXLeI*K9owCWpI?2OYlB0?{A!QQJ?A)py61 z?l4-yZS*HLh0}X~Ox+Wc;Mr(^!#7IUR@b?enqS@FH<#2o%+?R%Tv}1qiJU~bb#rw? zFPUaF>TWvY6rAjWR3uqWDt6}J1WRCh3uz~ER6{$ZN+)0lMDlii;Bf`{qW0jMOBLrg zGcZj$ft|pXIP%QM={$VZz+`C4u>4>HHxls1%*NHxV&bHu?*1rtU}zJU;QQ@lK~hP7 z5o6w*B{Tjd6BoLy=J+A4evHdNo4$5if!s-pw#Zafw=5Y(lEkR}TMpY1Z=`J46fK<~ z#E-n4qfe4iQax9G)|uyZg5%0yWtTX^Z(1nQ&*+tQ(kO6cqXV5?MbZrqir-PbZW#K0 zyvAgyN*S9<0omSU*OMz>zS#ay=mfo5^;5X-i3Y&!d>O}okho>lSz4)fjbKVp3_MmkWff! zGcvVAAD=3O64H7WIYACpi)||bM$ek+Oc=UUR-vW~m99!Iq<^dQ#)UV^gz1FgdBS-5 zI5*tr9bLI)sdQ-)yAklRh=E?z7i}pv34<68qlM=Qh2?YY!yCC-M>WoCI?CwpNlwtz z(HY`RtWF=i)c*!_9GQM|@B-AYQ0@n5l{`i<6OTB^ zx&l{yu*eevVtK6qS``rr;WF%j5^-#?>qXaW>MY-&3!M<~Y&vReUG z>9u;+?m6C}viA?1=Q38Bb|A|3-8r?*$m)sem_AzibjD5ft)e9u>$m2~`do;6lpW~V zq#Q&IcSMnBFKJ9e>BGJV`O4H?9&O{!#@X_Ho0m^eZi!+-})-#SfF9B5GitY zFbJls-krqDC{cB*9zoO48!U^DO~otu`WL7meKuVn)nl269A&SpL(?fwrx+&la6}@;=W$^hWg3mutbQl(%H|j)_!1`>1$hj2 zm?q0+xy;DbP6V{ClF^iYoZ38(PttAQH*~k>9L8R>2MsqdFEW=Pk6uf&?r>?tF?#&3$+;oo&+A07EXLiNoUIXW7oxLtd85yhEb8@>`J z6J+i?C3NQmg|(RUrUQn$A;@!P`;!u8g+45oZDvvfQASKlo0Xo}T{(N=mQd-B9y_Jn z^xBoyK~8XY=|C~L{D+pYy;g*hFhIl*b>6QGql@$=0*F*LO;w&(s zRt_KQ2CH~ULhr@=xEx5;rh1hCyJlZvP7C=U85E#*oS9K^&H-n&JQcG@W3)mlf~+-) zD5Z!Rw7B_t+8J)Vowq0PAigf3HAbftKh+kJez>S$O*;Ti7XP0 z$n}CTn&58XA2CHu=Sv{rQc){Nht>6M<0v=G;%W++^_H42SrY6UEGChd^(^4*f>sCR zf?5i6)hKe|q_OsOW{q`J;K226vc8$sEd3l%cl_ZZpBqPiSCE(+(ZQ4N^Gykd*~>#hy=Tte1rWHSIGj~)?x&{B zzB8rS*fZo{zdUMVWgc-r9;71;r=rDB+l8HTtUNG?x-F5TOANG}+w=3R)N*Xa4V~`^ z{Vb*kHUxp{v%wB%LOfr{nrT}v0a11oEwE~2eesm+77?^foKH!}&5;#EQgeHe<_7(; z{5y#C6~yZ{#K@nOBTiomw-16VjhFfBf*bR3@q!IzjX_?)!@<-))wcLVg2BB-n(S{V zdsPmNE`6vP_0#y#Tq*>8UTwKp?rzoo?D2#YZSZt*u4-rF1t$8UlbLADNWPI{;GSGZ4KQ@GNxYnS4j2|HXs@d7S6ij$@4>P!wJ8jDgBYwl{)ddJ58fR zV>{rys{5q4or^U}iEu5ME=7&*sru^H6%x2te)R!}sI6NxypnC^d+4%<^ygr#Ki9Ng1Ibmwho6v3vX?9ObD3q5(6pco8qkZyVo zh*c+E)GI8Kd+;m6+s5GYa>a$G#I^{C4N>F6ElRc!k-RFeg5@?o12nd2fTh)N9pu){Ll!8Ji)V!a& z@27lXa!QnFgpHdbWhGu$lw{CoLiiHD}fyHhFM7G34lPq0mBHd&U zyW#0xL`6y4H~Dyv*EvWnUzZ?z7lhH>rw#_JVlHu5e5Wkuy92;Y_+5%A>;7kcWgUe^ zqQ|$qiKGG!Np^{&y8{*D51?9~ifdP6P!y7rf11}Ui)TEMn^Z(5V3SJC@PCM=g`tJl zBK_LNmflTJ(S&`BnLJiL($aUDoI!;{jOI@qMC$Q%Tr1S@sVR{fW$<=v0x-2w2PRzR_@6Tse?P+t8_ULP|U2 zd%8)KdHACBC0ZQqNdlG@s zGvSN4w$As0VXxKF(Q>_pw~ik7?@!9-d8Waka*cLiZH>>O+svTmSwXdxnV0yE7ZJ*& zH$&w{-$1LTeXeIg&$oL94UUtw;SDV5@VO>6_?^b(x&*A| z6Bk0uOTXh7j4sipEG$iP0GC`LY0jMnc^ySq!$uG{a7IKgNY>%!+P2R1=*CAcoQ<@5 zzHZJ}(wyAUiw_XM@#L>xvV!OJ#K;)71`Qrt<-O7i3oPBI0Ts;>YkV?qZ0-WQVyyE_ z2!9M+$}yKF^M-y%g5F+3RMXwZa@?d?2B`@C6;lsl-Br`jr56t%<;Snh_Oy!C#ZP#z z{WFH+jIs=5;Xh$R=*a&e$4@J3oIavd3RKH1p1|EVGZb z_+0Dad~Du3fyc#BmziuFQI%&!wbkfP^cDEpQJlP6UcVTfg2aNS*7-e^1->%~Mzf9t z=$!vzypcrL1lvHdCu5`AvgdOX$CoQ48vw0M09s#Vbb3xpj4ym1pzZ;*+EMwI1-Juf zwF_6k?Kw>nj|%(-?%V^2QskV};ddTy@yW2WRWcx1nQ(K4a@m&TTvF+3aQ6n#fP7Z4 ztWNf%SPEF8n{#??0j>6cj+6J%w{dv3(mFlm!><{U5x4<8pSa1Z!;vMA5&X*7^Rl&V z-XHYkHjFIpvD~|{u}lXh?lzXUEmU@h%n7tOPxf3a|CPh^wyi0h@*6}?6K0`)CV zL*i24N{&|+dZy@6;u3dsXd8jo44z!UDs9uh_Q{=!iWgF$DeL}_x}P1>)Mnh-)>UhA zqNS}&E&kR0b5#dK<*tG2tItQcOvg67wSp$BGl}nfMY2y)?74l0D0sQhXBtG!z*L6> zsx=|;TFoWu&k!CvBkH47k+*TBPAs$zERaS-s#w$PLy6S8q^h`~Kh>DOYhj52E&9#@ zmsnzYSB#62I6Lf?m?mq@b~m#|(xA~~QPMS+NMBx#lpBw?azNJ5*m<1^f+Lo5vL|O% z2WC84ULn&+pPg@vt@Vh)18*(cr-)84R9|KKBa*x?nu-UE6!%`+Vro{X0krBZR|4MT z;4`-z1YW-~V=2_YlqSUw0m7l36i-gs*dQL#I+|E&z(3q&kYR?|Wytu^$lAF~zDdln zl&hIITihFOsIeTyl1EF&F>N$2q%69XkmK!Qzjrm{eaZ;R3+@g)(ca|_;Z+A=q{lzr zG4wP0>IrUc*6#eHLj%miKB>Q0KYiKsMbS%9LDwY{1C5b~s6v3_0N74iE&~v}G_Ox7 zF0q6%njMn<#b>rJvjgc~MBz=%CAn$0;LD@R+V!xlQhch`g44F(zGYhVP!gT7`P^Ew zG_jcBOYvUY5H(mBXM2@SPbgcS+JJ&u6!*OH66%sI5`kAN+r!lGs!;e2Axw?jj62KlH9Fn?qgo;F2E_{F}E)uZN z;mV3kGsL@SknzIe8X7~|m<)*%KpHy9+fH2f0p>^TVHpC*W9bz#f%KIxr24^xfEkM4 zm=s7_paqZl1=KQveV`u8&g==3S{Q!7kHd*QT|h$ZXfyLL*nUrd8W9#|Xes*yE>D3K zG>mNOp_KqKfs-po6lv>#y;Z^>@zx1uBreB!h*g99f=q24BSmfipY+=3 zl$@FL_14JU)%&DBVb7MiWa#v405&LuM<@`O&>B3@8f3sD>Be+Yu8{t}-qKHWW7|J> zCpfr}nnED?JHR`F0)dLEIp;qA(gcuDa06&><$&xO9KO zY)%>IM_OVp%sdpnRv0>~?B#Q$UCe0;!uJ<%mYd*^_4zx0%DKrh57CE+4c2Ex`F=mm zAdblE>3;vALL-Q$#2bO%KTe>C4kG}Z#D6lz z2(eMvf|}iC6&AL`qyRV%>uK<2slIk7ZT5<=_p43kG4Y1+&bGcz+YGcz+YGuyFaW{x># zW@d_+nVFd#+cE5$ue*1)XQ#L4oY_A{UcZqJyD34LM0$-@q z;*h%f@%K{m%LP_S@Hx8)+If`4sZ_gUr$*XJKz4Cm8GXOgeG*3DqE@T4QNb}y4?Zo! z4(buLU>L0}rw@h7^Xsc=Ea(; zEkx3r_bexHz-ckgr!<+PbRE5L0J;JenU%+wH?%sU@JM_-C<qD}|IKX!L4yYpf~GCBZ)$9sde?6(=gc}Awy1hTr)qYyW)7)IQNOks>`6QztfU>& zPDhf?6KcF|Bnsc|dUECN0cCZ6&PDZ>V6etvD@`T0kk%w9Y5Ako3JQ8kSLbETv z=1%Z72A#d82Cnk15xvu*G647Y8T8o!(ShPRF+b^l|RRC#UG zsc>$|5r*&C6IYSUH65W)!c43Ve$+>PEmRH{(cyD_;Etmj-k#vf&EcMNj+)r8%Z{A} zR0mra)vQ;Gc2f<)31^$#Ga)+`HND2oR}9pd?5Pr z_^51vz9FvWW}HyY%_=VjttvY8;E_AGiI#jv&hgnUP8>ApEz=kiv$uzeMhsoFRh5qH+kkBZaB z$xMIuWd@3&UvT1Abx;``@a(ht^jxu~gxK=!0|^ImiEySU!wsXamqZ;}8xO1AYlU2d zH*A}g7`A`)F1yL{Ca^cwzk~{H&i>EV~_n@CnH=k6UU^3sk-yW?c&;dKR;`ih8RI?0T~#-1B)Q6>e?(ygiY7e=l?zi*!Kr z;8`T=qm7z~OLm}C4IDYowJGD|TonnWsN2PP_!-il%fA6?C23OS$31OZRq%~er;_ckqv>wm7RrrM3?>m* zZiN`L3540p3&jLGtcO0F+`CHz4lmcS#Zg?i>87M{^boq5>Nr0!Tjm*w zod%78u#aJwft%ojFI@|rDCETphgJ%I9HuiLWZr%H6ED{zfXfm`OlySgeLGxlSYB{U zw?!q-+a0vmnE$?>GPIwGFOi4}PoX6%_ew7HR2y;6HRl%u{+ySqzwvOta)lz!RKuqV z^KM12Ym8hl8X1?FfHf0y#=|IyiHCAF@u#*y{X0pv*9%c@m|$Uv@=A>fIiT~k zi(Y2&bjyULl@NXSZB8g*<#mlNQV=A zKmiSI)OjTz?dl_+vRK9W27|=aqMTC(G4PAy-PtR^3FRFD#HkvScDRA`II{1ijx8~I z0D1^fd4&ozpGsHJRAr?`e{g9T?6EWyOUK~ed9tK8!JUXLwjLJnNYk5fOcaAIc1Uc5 z&E(7-r2htUV_%hS!XSY4h(s$L?<|d#A{PZ8^qZ>TSbK)RXUE}Wf)$%ZHQwR(Z~vF5 zUACZv-|(G8gqo3}XV)%$GF6x`(?yrwNJlQfu$i=%L>x*E5OdF{E1=>CewK~yI>V_Yv);a;Lv=x&`Gnx=Qm6=)d`FZm7 z+$=F%58lbCjx$qls5@Wyh}Rlm+@)cSS=Q-p6p2VG_bhV@~0z4Ych-T45CZSt)W{q&p2H&~H`=E85Z2mSAvxbO5;kL?vT|q4yn~<`3M_2OmOz;&=S;?y~LNr!t0X z<*Pm19TvHXNY!|jbDcMHl0@d|Al0lYo#>JC?w-z1d;gAB&w!yxJ6CW65&B4SL1OS8 zz=_>tcA1U{Foz43fL3Gc@FRWL>#>J=X_>KxeBhKavE ztK5o?iur;Q8^}PT9h4MoQ??n%rB>v|lE4z@$Z$FGe|Pgw_CTqmqW+e$&J9D){{cls z@I9^m%;N3XMe>`rocav{TQ@1L07p?^DV5y!hEY7-Zr&$1JW#{ML%S+a|NI3Em{Wah z&$r~<)IO4C>=}lY>O;PVOK{)ruN%1u5l^ARM^uyN))@FnFP_;|p5(5D;_P|NmZ^!q z=ns>cX<{ZxVk|dTBqZT}Z0wlNt5#Og1zF&1vK?C#1ZGh+bI}gyHhAY$O zbt)_*h`wlAzP*bzron{&#D^!vo!vf1x6Q88_-4qMO~~(KqwMbRZh5S)kd=?c&Lm?g zS0^$@@PTF#rnE1_W@Ot{SW8nLvtNPwfLJ>~Y}mrmxtWD$16SkUR8|m{YO}B?d&w$A zP4!pPYVm!#siApZ{RRUh;_gnIDbY2RM-n%Y4#0Qh?Bj42AZDo)C1_h`byk4EnTbwC z(`*QCFNR^zlzdZljO07%BPl>}KEu&TUO7ui)*ki+ck|!p0v~c`-k%W}DCYME<9!pp zR(Im6`}j6MO+c(9lcQ=Ej^ZBm@eZUjNs$OiX?uQ(r2%Eei25Z!r8jv=z>Oq976n%W zxAiE2nSF@)j_c+HaK1l)BJ|3l;QfBlKlyrs`{TE0m5FbOnmPn&HPg;3)(1mUGJ?Ag zR`d;=hK4|h0MU6g1KM&|lhpP*g1cC06F)yn`H%H=h1tt7?>Uex=#C|nR~)Iwi)E=d zb!6cLA(&_DLI+;VFg$ z^zb&EO%;`1(?#s|Lz)PMPf6HV>8>(`x+0aWxeJf)61~70(5dBji{CS&aO(Ks4&&!Og>iMX1d)1kfh$1ay2sKVuV@|Q zp95R0sh9ca>6@bxwPL<$90-AyOw&GSsP{G9`!use6CwALticvFP~ao7`{%5d0(p6` zhWZ)E!wIiiYZ{+?!?SG(J>#lG@Mp`&mo>MD5;ko45hf$7LvkJ&OUY%U%65suPe_n2 z6Ab^gOz-(9s>yU05BQ=(T9bNg`NYTPy?)}XZn{qL6-lHGVY(L0?hxG zD!@z+fTjFBia(?awm&k#|8W%mOch}MH&g)@fLIb>D#s4sHUR(+ES!w=0CWL60FcA_ zFCkJae;@(>!4+Tu$RYnT@Pe7~pSc16dcyxxCCCCGYyd2${vHJz3+rDh!T)&_|4bHO z{_l|mI9OT#FS3A+18z&AKgZ7JOs`iuSGacP6B!hoWU4RMxy+LCMdc-^k!=hb(cFjx z_Hb;#^+&Yd3iXp2J!!}4Sw5}kt!3!EL7gV8zZ$Lk^_3pOw7?`kebW0eV$$bE&oFW- z^YbWY68CJ8e32x~;Jh;F^8N2$TW>5{8$B(*pCu_QIDTE<9$b8M;k_YasM*Z7GTI5e z-+y#{b_XzUeUrIv7VLSe?`YAT;{RY0klVV%H}L!Tb#=R)d)(18H8q9NaQL!l{Oe>q zjI8_7l%FTtK)^Hpf`At+T=yuN!T{dad`IgJvzj3>fb5rZ!hv>?SB~yhPswhI^+$JW z!1c)o-$mvr7ENRp#l(8cy9toz&m?BLhJ$C6r!TK*H>4I;Wq|pkRO{yh4rqlOIgh*1 zEmb*v(s{foik|-Q^V8TYUAi){-NX{(UUH=bfY%AcJ&PsdQ=v;47aQ%v}FZdtm|17**RZM+a+S13YDWl1I93_ z0W}qP`{La$gGe#E+2I4D1c_3d>m`IhtC|6Q_QftW)AZNLz3o?<$@?$`MC9h*w#}R} z4azxY+mt>p)}b4qk2FYc#6)+YS!EoKruFvMoyQ5L_UpnWui> z?U3C>^n>!dpSABuW5P4wev>h-|Fw4jHBkHs91wEb&(s8`>oUN&$&3qf;NqI(RC~`n z$xOhmiAMVxcJQOr?G%*HD_UDXG=*Tl0yJ4zXhE7bWQKW?v#H3dxcrAB)koQwA@!46 zA6aTNwYqx7;AlPd*&xxh(aU2$9lxHM7D9Diu3W!KLRNmrq{B^|=@W(a+8r!&(hGP7 z&JolR%~C|twS#AhMwTmA&o_?leHrIhhHtVVPmjexxp}4~ROT-?DgrL4PsS zqOLakx^CR1C6K1eU9GDXd$rK)X*Lnht$0xO5NxmWmIjXfro}uEfIh0z7jUJapwrU0Z7e~upz81A@?Mhh0>eujJqidD&`@}mN!8=+;4umwp5tP zxd+(!WG~}Q8akm)wm7F)@3y|C4#C6?y^`HnSD=Y>G`cbBF~KEw7u9K` zj!9vl+I_RAG+Sd2-G3@(Fqm@FVO2wM4=OUNg}e}eDq)9&v6gj-FM^q)W2ob>>UQ~~ zz0E9^(yqZCk}s{uP@w#jfsaw6p%cln>G9NM0eu-uouSJlcVmqCy@yS&fhmCex;!HhOT8 zYQQw??bapxk#S|}hSjeF+}HX2CU=x0v5i{gG(M!eHk`@?!&I_cDXQZ-q0YF;!{lI? zmk&L9!fE4!P@$EX(1%|0&N!>yeE}W0jVifFDr;3zgFrA%JT5B!MXD}^R8LJRrAT`( zVj(#J6*yn%LabG^0!rf=lgli!5wS0&jK1E?yP0E>oFRI@|I${^!Ga^R(xzkLK&`~k zut$rDJGoE!HA zOl}||h&_41zJy(V5E->0<)q~iABoiWc4Zee-3Gc|ZTQ_uEN58qWiK~S;fIG8-Y;XN7ViFaMKmlu1|&A^;#HejaqG7pu0r*29y1s8 zs&g$MjijlhU^t-2tBB!91@P58AoXR`){U;}zT$ z>;lOXJ5>zkXIbgWT~U)|jd<#DX*$4c!G^1;zipyP5XVA9`O&|ZQ|skeRdw45>3^1n ztS+BFc1{ga*w4XE8`k=k$~w{bvF(>_8P3a%n&^1RNQ_afs`}cLIi~?6tkSt!5f<1k2i^&~;iHp&QsZ;m*eEkyxJA2F*|VbV zU@u}zGpP}VL@Z$dUP3*VGNy}`)jgKFo+nHhB0mv)R)yY0hq)BxT^qU(#eQSQR5(EC zoxxp6yiJR(cW!b7w#p7`pyd!x>W4;+U!@jOkdrvOPK>S>z6G+VQ;?3l$fT}xoxB86 zDNTZ_K0Ci)gm!42ZvA_*SiWhPI=SXMr(|Nc@*=*&7e|Nz3~)rGX@g2`bH(K-H8rh5 zGKZGEN%Ti`E)k2QH7hl_HRHt?b~UBGHMO&M&x$W^tGcCh>YJ9T*B8HZ%V!-Ht(&@f zW=pp+4fM)avwFlT#1$3;y(`p~`G2KWxHnrBTCG1|RF>!FMaCRd}6CIY4S?B(FJkp%t;|>twB#Q4{1Lwy7(qm1(GKmCpgO2I!p<$}Ns7 z@i3e96#K6C5G|kSwb`k8rOoKzAfFp;tHgsuq_o-U}cvV|X zd~8V_?Q65SeL@v@wPGsp@Wm$l^m%$N?*WFEArSeEZRF-Di&)H3^Qy`l z(5Vd{ZEgr@J2RF{hS2Qx$B5^aXvM!T>+k}&GhDxT)Sj}|gCt?{7G zYaKqz0cG8~Wqg=^ZFBmyv8ty?Y>TjZJk(tlH%)Ot5W3|aMO%r!=Scn%5Dgd$xd4r8 z6}NHqtnk#5#g+~yT)f$d4*(TFKzwP1BoauTl$T-mLMn9n10Lxp$ zGtC*#`={;TW06IKe(1Nu$wfAgxo+b+fNMotW$z0&=<2J6^tiYf2(VJBH0Y&7a)o*& z$7AQV$A`o<@I)a3mUx0{$Z@-L<7rr>u9Zt!NPD=Y(35YH$!Eu2BA2*lKdQCQ*KLAS zh45r#N{!hjIEIUDd6W$yWyoNO+$1~!2B#3O!rWz94`T^?q-mX=)821()l`i2aBY$R zmxK6LrhcgxvO#>obk(aQkqvXZigqcG+uj^tL$TKTrl-wz<8IaDIbMHkPm!IiZ8JYx z(NrXwYNOshTUs|q-`d2E=V(JOmui!G(GENgGZi2agQmL-f8ed%R*#v^fF+)Memr<1 z5`#5(>-m`{K3HFsWUSClY*s!s?pquX4NWt-qgg8uC$iR^E5HqX6$m}cIl3D#4GKZ} z6VX;AKOk#LAUkg3q|SS~98yTr@cv-uU^H_-sU;}4)7M=vTAPyNYy{@b4j0&@!UYoH zH~Up*dkiUzuVgAHwEs5}7@RN&*wO}rg;yF;n=a9Ov zNTzJ2;u{YF{p-G-=bX@OP*3>o>`}-<>qO7>X=YtH#uCd#(gxLSjCavx;0%j|D4u*B_#PG@ zIw0Bb%DuLASt!$>YMA0U^!;I?jP$sxAxg%U2}Y?M9)8Y=)QRiw&ys2hMIpheN^zja zo_pKC7LsU8=#4JMSXWPbH*&aF=6zy&_UH(X93ti6yN&E%Q=tXL_U0vPLs(MKzNiV_ z-)TeDReri<*`M`^J&v1F>I8oxlw#=^Eu9ONQPe@{v@RKcX;y^qbl`;LvWXXA6`I1f zo>UmT-4)sVNp;=`p@7zvVAra9M9yua)m6~L9ylORHCqcW*Y$R`t_C6x_D z5`lK%fWv`tp_iEcrLU9();XC8d%ZYP()x1p75w1=i%GEz{<1ER_!bGaWS8hbwot#V zz@t*XZQ02?kw@aF+N$9`>VPj4;U|-87jeiK3W=lAGtdw)^S4%mL=#~CU$D*j&zplR z=(;JS9|&I|IIAoYid#dlts-?eFHs3zOl`JNs2TCfQS!S1DVJ0ZK!)-Hm5J0Uf-BarFT$S&?Z&0nK1|j)9FaI6 zSXFU$Vv<67y{Uv4{}jO9~1cS50C`C_{7Sp=DRDuJ<3`D|k54sy?xX@T!JYDy=JaY`Vt6pWJ8KlSMub2n4lYS|B?(Ksr zGYw=3@0x@l^gTNXhbcbu%AYt&G#|s_f$WlmBILn@V{m_ycDylj7wYQxaXklhu?fyE z39L3Fs)tPqnGWnWQany1PbofgweBj^^IN9V}@5Obr1aT5{#DXNw*=t(CxXW+Tp{%D35-E)*Wj{osWF{vM)Ou)v5Dp`<`w z`2NEXP_KM(CX{}4rk3%we1f{9*t-snTFjxFcfzALc@Mw z(;(=xOB$7Dv*26KUuxk3vLRJn9UHC4Mg7b_4c|DKWEgoLht%A-$uV<$_aoPjHnd#T zl^t}})cwZ*M-e_NkU;ir^)TaL_94e#8>9#I7<%5l)2Liyz!4aI zO2aD)`1O(C6n@6P)8IRON~501Q?rOwH`B00I5CHR>T)WXxWUq?SK0%!t(!_X-<~9;67!9dPl2J3LpyqfyE&z8zKtDSXl2@&0C2;qLfWB$u z;MEvDUrA=r?r9uGx^bPMuXD9SiMP96*lWa9fTl? z=OB5_mk;muBsu%38u2ZcsasB4D60Aiq9IAhLt$n_hsK2N{Gb}S8il0$KNHU6zvuDT zyg2V}XPV)Hpf{Ks%rL!RV=WCq>z^F<4AC{ae|kKUP` zG%+9BWq+T{OqIMGn70>D233s zcS{9qhkMrw-YQyttgL#wO4iOzUJM3xf) z4eZ&S1xo@Uxa()d#D;vi2U3;|-RQkdS7%t-+z}o;-Unms1*HThG(0R0nu;Fvu*4?c z%IIzr{Z7lP&Tj4tC=}D}?kZ%ZpJVe%KrM;C79S%{PtC6%dAb1&UP12qY)gm)7nW}t z^>xz=E@0!&4;n=5KF2x7g5*8Wgx^W*CW%1tlZ=b1c1INszCdU|8IjCNL<=gjTnREO zQPP{VPek-9I8KHIC z(>%~qu?{#;A;B}OO|)7SIFeTozoXRbp`e+7Uj53P;$+qzuq^g^$;@SU@ujNK5r@hv zno4H>d-GsKJf8@p1L$PtO?tNtcJ~fYr#Jy2#itMOm$$j+kQX+|KJeB+i3cmzhI$?4 zR^53xwcA68?f2O95C+QKjW@X*9VD@cx8+2eTNM!VUl{$F2~5oX*$nctm^2(*chG?d z%X#CfTJ^RETvMZHfwJ-EJdC~(I5r48Syk)X#s_v-xD&{T1}-?w!lL&q!LnO=gJ#rp zUH0+ADtCRV!dyHZjIj#`=llsK<+vVIn+TVPxVqk(<}kl3f7>oKWuc+|@}PMi$C5SD z@*L9X6@`tD-vf&i=?6%h8_3}1wF}=x2&Fm|Y^I-1?nkjzcV~XWHoRuP#Ukt;FfkvC zd}khh-aD98x!(8JMfGde(@`%?OFDx+&-0H$eHh-d0cUM})-O>T8}@(K5)l--phT?I|aZdj++ zf*N@iX(ij%xk)o2oQ0LtHUPM19Bi96yKk7_CS_F@tF2+zd1Z0Tl}19a{(3O0<76nH z-?)F#JUSHv@%1pW@fSFPG)tJ~mpu@37HPyyaUOA1=4-8fdUb;(+g>-Pg_&1{e* zUzk+!=~dVb(-yIOi(SD~$004rhxHd;kH^tUPU*3+hQuVrhe~0<3|A+Z{3q7yw?kY% zQRd$>OVLoF`%_F`#0@M-$Ee9kSnRhCNLS%59kIWw^@L1^Cv({Q4yCHz>JG8bWDM`< z;0No1neMIXJ+O_}(oTbT3-n<<{B&$sgB6!TSwOJH;m-(gjybKA7L9jdGEyGS4A0bp z^bRYASlp?W?-~9HYFsE#8hme z)8y1N#p@@LDR`K(6KYHJ9|{Ti?6= z47z4eEx;=~jda35j`JjD_CsLPfnWPyq}~4=orn2v32(+f$z?(&RyKNohYUM_2*dTS zQ_cV0Qh=H9pXofz|BlYX%1RHY!~VA@{zw4;3GDw5QT#KU=Pz@ie@GBiy&TOL#2xHi z8UEo7^QVN7LDB5m8AoF&YsEH)ks|XL&OZMHM+!1~GdR2U9D13kE4ufQf{a zs~4RlgQ%H{iJ85rk-h7m9bE_k@&A>KS9MUcw*pi*BV=M`0hovY67+vKH-M^t1@X6P zfBmaN2=Li^RL;ope@D(B zszJ!a$jHb5*r?*=;%a6mWpC~Ph~#gwia&?>(=ul(M^^`DK=I$8On`j=jroH)`sc>{ zwbws_Rd6;na|ZMh}9{~BmUuV_$TSZpDHqF29 z#LUJBFcvYhQwQwvR~=zt2TvWqp#fTxKgS0MC;;LOCKiAk<4>0YI7nsys|Y|J{<$aq zQy=~tT?jkC@`UX#BP~F0158l>M+KNpaMJ(lTlKGt>K~Rce+}FJr3zvCPo4j7R3QL# z6eqx7;*XmbAP8oF_XGf8^*;~dpUF`y|2;9|S*C|-sSPGAN+WJEnsP`^A@IigxI011kS{vrY*wueDo^Utx_vR> zc(lHom^8om`egoUJ~`DbU=e^%;50;nAP})5&60g8DU~`zJVvT>I4sfQJBB_ikyKO7 znkj%w0L?DI&)t{wjkd7L(b~*`pO61_`u2+tgouLm4~FjVS=Gz)91izbK3r}3Tc7-G zAJ=~TFHYP&da}zc+t88cc(Fht-6H zi4#ud&`mr7t7lY=?QJ{)Jv@Tljf)A-4D3Emu9gNHAWwQtbTjCV?mn*mx9^6b5?XKt z=2C^bBY6GOGI;v2E6*P8@0Yi;4K_Sh4y}HsK58<(52vx#CyL;ZHQSxI@6@@aWD!|o zk|khw;|Ydo`zS2jc*6x4w!XwaPb8jOv2#mjo$<8M@m#5$yY;fUcmuM_jTdOKE~?MtS6kG(N6q2DDQZK`iYRn z0&6c^HBTuo>_clAJI|}^B)ORNcxv0G&v1Q${OH@JyG%yCLaK&+TgW#WMP?fA`GC20 zu7xWlmA`ekpXA!8dECcRnhYe_NB_|emR=K75L8$!NWchcLak3vsDweKBig4X$e}_V zeq$-9DS2JK<0uF%D%}^N@G34|_G8Br#6B7fqBfk=_efL2>_&

M%LFd?zWkA=j-d9VzRLJ|aIs#EgF41U!Ze5UTE0*0ndx4`F7 z(Cz4f?k{vMoLDvf#6nLM_sDxwvZ)3%w*Qa_L?oCLNZ_ord)~tV6_9qP<@{ zp=2LCt)ZzN&!_g-Sxc6NN}G{(hn0i0oX*CzD=6&H+slkFT3o;wSz}NIOgwHlsRiVg zivs<>S&H7l8Mo`fD0%-;afhXeujZO19P&NI zNfBa&MxrZQ0)st~=$K{QXZRvCN?n~z?u&PGT2?yp7AoH6}% zLs2940f7UWr$^V2@$OY0o+;Oq&k)7=MLPTzE}v|~4$r+V${+JKbozK%wU~C zz`0tjGfKXcrORnt6m(gkZt$tmFFI*>%x;Z;5VTu-^{>nD9qO-9H;OTWBEvp!UEW=; zQZ@>U`u=XKeT($u3sap|(6Z}bDl{ZT%JfKnJAwhJ*|hE>{k{?hc@kzCj~?ztkS_#G zVM+xaHa^C2a@^9#gQ{HUX%Pi9L`P<`)2PXPjdRW|%bixTZ~D+5ikEq;MvA^JuTFD- zWfO{9T!%lwBt*qS?P!Vlz{b8NE9EFm;hwZghJ(fTh!E!H8d#pVCYGu3?5Z?>P`kjY z{w{Yx-!x&gsGMKH6vNYj&M{6L{mou& zj&>~5`i&LKggdC~$Y6}7Zn8-8#B5^FXl39hf z6iO3QQG=s$tQ=oIsmED{wWwMdLaV_$EU8-DK_#Y!wHWv7=x4;MS2UeAu7PifCKOl& zNFk{*I3PZ@pEwZ{8$oa_=EMVag&9hlhMsfb4_e(SnB8ven_*MM4v>)_Gy@G)+viLh zWza$E8Yhcjc37Co2vgf#+i^jZRceJNFKr~wIMq3pLo#WlUePJ97Tjd;HR9zT`f?0= zohz3W?2ciio}t17c@S4Mmk@OR=l*P9Wbo>Mr2rpb#U6|{)pp`flCmAiGU8DyN?uFS~`N|GdQZYvvJpJS1 zFuuNV5jg&lhqMTHk4fFZZEM!g2D(=u{7GIWK-IWov>ScgxI?7qCki{kV>)et>=Da% z7Y@j+r{erpl1_+SDWhER)nRQlJ<9#`e3JFdjZ*kB{ovWPwCMaIKOc*qfB#ENuM@Eqbk{B)MjHZc3X$7za*@4*~8`9f+!s5X*prx{P3tfZO4kWWg4 z872||5pZsV`$))|O^LfHM1c(=?=OzOjjCDFA_)%o;ekGENk{N(&i4t_!C9h=$DbctxLZGhuvwMTnW5EOD-9WhHBm<=G-JgLx&K)h3FvGaTI`Q;937QZbQOpv@8@jeMVneW+0c z3bOUf)=99gcBi@44kvlO*Asptra1Er6r(8p4J3&a@WS3-R)b#>@nWT0c$^j^a$-2s z+i?C=e0AhoP8vob<}2J1;c18G_?bJ&o)ub=zsG>)vtr~epTHc9N}Oq~t5Uq99iv1Y zT2BLJnul#UpJ)Sj{(}_9HFJP8$|XXzT$T8J zlgqaSh$99aLo-?TEA^~OdRFk`Q?V@h?VX#;8;7w4$?9H5xpFwT;X-QY;llEt8au5b!(3I`BV0Ay0;uAy z!x}LfD18w6bgH{tt5rJXE>=lkCvTikOwDUmyd< z2x%BD(NB&C;tdb%vRIj|Fk<8S$~y9cS<5HrCgq`gnH^1j(<4=$%2Fu$yYM)EUeG7+ zJQZ={DPCw$>32QvE*>HtZ`a+01?>2qWFEP*#XFgIK*+&+7ILXlHfM13yqltB!ui%I z!WxK#UwqRXo=e3Z{>f^d(>0ANe~=q-YVw>V-JZ$*@(T45tt^px?k)q zIbG8(T-8^S%d^A1Jv)1SD6z>L%GE>V^4;+P*P)UvVh?GmMO35C5WG@mQUn$wwNU`S zFj>ethb64S_TOdExZ(S1FyIwE%<7N-8}oZ@knGHj?A5w*;+>`U>{bJ%wRq-*~8ct24VBR(Imo>e4Uyv=xO9 zj^G!|n@RN6 zTL5nHf2?8n*N9=jC-`6XtN-z#*rm7Wg2Ry*ppo(s=2h5S`6Uqeh$O`&#cs8&@PM=9 zNx$0Gp@=dn->q4aL2h{TWA}F>Vwk;Qs0c_5uvE0lp(eV}8@6CU$1FkbV8P<+mHVrG zHlP0o>F?uH=yA=dhX68*kTKPQJ7LqN122;L#fyi7kJ}BWleUjHMo-Uo5uv4#k+&B#{b^9s^#rb;#J{O{%0$(v(lylF z1HAJe6zbo94bLZ~l~6FU<6>2uM_NSVuJ3DL?_f=5bW$~Fv@nYEbw^vEjpLO0*p2C) zDqI2k+go|Ej81(dbiJNF9GueNy0UKY+d)dvJT5Hr6!rz7zXD7aw`BFBK+8xIY!WIm z1pQfdR~J{k*t}c;-`5rv$5{&gvjWvqQ&FSN*%_$%H@Yy9$!6ZI$_m`zzjiNlttRfx z?`~yx2`~jRI~Vpp!FqDuVa<2t1016WdKI3@y1=Kb?-#|aGr*Ts78F?t#`=Ld(=irX zf^Dc*u5TTc>gCzERKgX*J5|$dVd%Dz3dgpr;-d(zOYXIj^ynK%2Nb2_qf@d)j@jPy z9gb;VP^s09>t(x)rOdL7y@*s2(H9ir(#{|6a@3WkQ^(y(@)P0fOI_64gFAJtp@}FA zlxw_6T!rlfyut*vr4UUJPFNmAo^K$*= zPRPrb!LB*7NS8QZl@z#)s_UI+5Yc&ric9mze1wbn{aE;OLa-+CAef$&W|>rjjG)mL z+gVCU>}JdoDj_Qq)naY0K-@b4zZ%HtnxKr|jq&S#<=H{6@KKRuSAJFdD80Ua2EE`i zZ@}HY*${noag-N(TY9#Dw_B=qrm8nm6DD?W9DPn8eFF5Rt~a#Fn8b=x$9xzhaYTaW zu$=;deu0A6!*fnhke2Tfj2caAoFn^l{rBmqF_KF^0wQ75*Oe^q9k7;grMA|}OkKE~ z4nJ44{W&!?ugf_%uac%o+K!O>>pPO~cHR+1`o>iO_7e)Dh=m#Fl+KA2g!(583#c2v zc`%*4qm-7s#EkNFh&n>s#8|HI-mc%z5RyOPir=}p_=3<3eUZTE%xj;cE~q9#R__J( zu&c(f?!K+Q&Diq8D1^6<47QlSD5Y^RP`1{reHXy!ednaxIqJQP-}RTYKf$PJ;xs6y$p||ty0%hXC_7SVOSI-#+JI5ul#SykxfJK_zMJhayZrr0z z-oecU&9L;e$$XEi{fVDKA{C@l4(yI%g`dzM`lkr8`uRbLy4F3fJI~8PEv^Q9TG2Fv z=>p@}rWVBd4%O76*D8!j{6I*;z=?CVh|e3euU6( zECy_SMd}Zq?qtzYx~Z%ik02uD?G&vYW9_ALxZB5<`VgORpfY2kG*;_R@-k41f;sP{zPSi>wcuxBsl!%@Z^ znciK_67^AwUL%$Lc?ExRI>Fj6s*PtCY_hF8dWuG|5QB0CaFr~zghJYcA|L^}H3>I0 z9(D_F5O&|sI~vBI;3gX_*VeC1H9VI(-{7*%ds>dC4kb3XM$my~`9LC9fe2<;gVLq! z8T)~OFU&qCL^Y$Wb)%FRbe*8I%s}d~GidGT)wWt4Y|>C)ob>$=-K)|{No(WSp!pnQ zLi0jj&7Hw{0J-R%cc8c5sAB5IzVtGjW6!$*9p1n^`%=y`F#E4y)Y1pX42CCZ+QLwL zH$R_)8anNjYnbXJ%AH#1RUlu3&XrD;<8k)p+?tqf*o_V|uhLdYc3K!p%a2sv*KJg> zTgKJTwg-AjPC=U})1Wh!GjOX@MlJ)isp|o@mrdUvQ#8*S(or4ppXL@|f5iY*!a(gH zCpqyo$OpO~Xw4)$W#1?) z$%%+kY93tN5)=vJ>j7r@ZNz#AO{*#V2IPOS_Kq>S27kBaZriqP+qSvewr$(CZQI(7 z-L{|BZrh&zzcVLqPG;tu`7j?Vm8#U8JE>It)>UhH1`i*I*QS1L8nb_Oj1S1Lo|h!G z)p%NK8+$D+d0Y&z)?EMz%4jY_Ym&&waZ1YDrB{2)%I4M;?zW>?ID6(?Jx5{iRYYMg zqNu){A`BFb+@J=&`NXK=3Jv%2O*JWC0%`A4{ewm~iP6-qWcE2|Z z8AqR`0e0RD&eRK`?j0i~iT|Z>B(@~ktT53?lXp*f@c^T9s?YX7yGbgBVl3ltlMdv7 zf+J+O4&L1|!b)`sNMmHGkms#uIp5S5TGRM$kgPL6JFxikb}E-oJZ&Ox7jOV?t4BZ# zy8Xf1;aCxWB(7Q&xGlfu_u_u%gq(N&`gqWnNeg%|=^0)3eY;OEaQONE-*a2P_v#kM zwY?3c!UOVA4>PdMv*B8^`4V^?zy^iYlt5>^GQ}FOnrS|by&kDcLSm4EA|A|9wT{Tj z0r*%HXRx2Sy&&v$bC0;q1l+sFxS{Ceg(r)lnU%Q4F#>xVhLpePP>Nf-^&Y!so5BgF zzhL6eg->UvY94#Asd5Gf@rHTNkNC9nCcv8aU3Zq2bX-c-Xakl2VwoC;Gq`fUPLJwS zB!0QFF{Ufzk*-p9^`e4$Y|T@O?b{frKWIk;>#X{0;mS#7)#(l~j@fT(oyurf2?5*3 zMY2!8lY->H>BD^Kj@Yzj7B`Q+?&{;`d|yD{DGSo2Y8%P> zX$9UbsQ{7r>AuqWz2<|!!L_cBGGqtJ@T@e=hq&!lo79Cs7`ShsGT9=jCOEGs5pQvA zqC?ghI>6F*NkDFKBur_^mT9nXINoE*&Sd4NB=B799V5~+$yAHgGktDPVeO^iuTWlk zIhFn)eFLHOMeOcTLh3;hf#5Twquaq6W_IHB>DWK!T+uS z^*{CFRTl_~-8CgCSB4I799cVoByQjq2)(H$>-(p!fFpn^lr)g|gIG6s2XHwmn@ZgV z4|L5y4>!UF5-0zow!zny9*oh_YZy@09#~<_M@AnwT~Y=YH~b&mDR+mqrA-2|Xhkkn zFF#(-osD~=YqBK??zX`nOS|xuAErC{jP}HVCaOb>7g~}LrP(Rq>z6*f4E`D9=9 zQL8aG68A6(2ek^(&Wag}vsySTqgR^vgL_F;>qRc-e_g!sU{yqNQ(zmn(!x)S5ccAh z%G`tB?K3;_aYTPe44{?XweGQrJKgVLKW=f)*&hVTuY_JY)+wvF?K>d8F14&mHbmKt zIY!$Iw^$CtVD%P7VHOtHOxaouCc(WLv6tEBu~R$8uEs247_&tVS;4j*5lR0*7PVpI zrIXqEghQR>+J?nm*HtHI*>VjUt3PAI;u;3YvH$xw5VerjzTXqrTSR+1yk&JTxt{ z*umA@G=v&&%eP~SPhKBU4^yMGF6NueA77-7ndOk!XVkUo)EZXcXjz}-MR(Kw(Vc-- z=;QonjI1DJTjb^o2}%oH5of2f7sL+SUuHF5tKl*us7%jTjOz?l;!4IKyDiVF?ihz@L>uPFnw8;Z!w zD=@b-{9wehv4CTI3buaqMszHmkVJG1&SZ^fPt=PG0jv%!2W^z!>I#%6+e6|g7jlgG zWMPXS65vdI8{$z>hX0hX$&`1MZ5v}A!B-(^i%KSX=X~UfYX%Rh6s1 zXl2Y`&t_G-Rad<-$ycDpqhKa9!6|v|{6>jrwWz$<8W|Bx+4GN_8eUm({xYL4Y@bjW zjmItX@k*maoELItOh~6=k27L0Iw~0TQ4p7OX;lz6B!`MykSRtSg7PVgsyePK6$@Sw zHKmncakT(?x6pSgdNOBxP_M#;*PtG&xehoQ0}UY|CaWo9CTt%F|A`pyAslGkBLIdK z6@e3RW(4F(D^*4mDB~5PPz1+Sf&bCL1p8G2HbRnbr#%31mon@CCw#iS_QBB* zrqkcJ3AvJi5LbHyx;W_s?7DQ?1&!|ts{&@E5(S4( zBO=WDlPIfYcDdCP zqhWlkq8b+p{RO0{4;;(FxR6t__CmU=Iso9FAkhICCqkVUP1;hZBlpFMK`bzEwp`o* z^5qE8onJ~~LGrXlEoTTXa-h(J$fiSnPP~11eGAXS_POzWves^dYQ z5{}ErcYGbMZ+%@`2i%KzrTuM5&*L-KUm&&dd~|^WstIC!g|?$32G;ub1+cYRb4l`f zIo}gTqYa@oLgO~&I9f+uTWuLzR_XeA-#Umz z$TMIJDIJDU%`O*}I1BUD2LDwpDLos2G9dz9OFy1$M zxB`t|=#-eZhbQ1spM+Tmt9Jvft9lUM;2Vq3_bk^o(k{sSdq_9&*rY9!UaKlY%>>KKWFbENJN*>Y~?!g}tqEo&u2?mKY2E>}&%gFu& zYanlP{T1(>)ZV|B#}CWZ3X_AYi0@2AXy}fB-xxVu5?aCA}!XgEd7H?!3nz2d7sRagbK+q+jp zF+Un#JdGuTNkbJTA}a_x0aJKybE-S+T&G4-GhMak=foh|kMu40kYI}npy#+qNK zZBSfxTh9D6vRTe7YRWM_!K~s&QR~cPZto*@pxHKTC{v9R+%8wG3XP{sEz0szuUe;1 zJ&R?kQmrC&4l}02nrtRFquaOY5^b-U4XmGyW-J;p+lR~L?}*;PLqdHstj2wDEi{6;1M#H ziph~OD7J2A%c`uF>r(Asha+XF%orwLI4f26DoHdiLU_H}w&-T(R_u61@TF4x+r#-% zRd2e&2^-tnBI!zLYIdyUbw#RW{trLYJUYh>^EPcYqhANoInvY-m_I#{DhX&HWb)xf zS;!RbGvmnR!GR4U6JXHkoOn@Y(m6UU!7@2UkcBciI>KSnIq;(_Wb%1|e^NQ|ICoc! zPlpzMh7xBYm;17J%7wQFIFiYup{2&3*;I^7lORK=##X4O-8{p3im}8QUM0s+D54gDs{)Hc z`o~IlQ>Gttj4vw`>MX8r&8m9Nba5QL5!PkdDaf)_ZDc=hx2rDbm}6Mgg$o_GH+*KY zko>YU41pO!N@_JA>=Yi%=RX^^DwjF}<%mHckrsGy_!2uLY-Q`a2Pi}s_;M>$T-Bl= zZ;*_LgKjpV4#lDeD22O&3)c!b{mCL^`yHN9m190D@>zgti`7;LF;QlA6#LtBNOy%j z`FZ_|@FlaSl6tK71Xv3LN11|C9ijfp==pMSk9Fs5qsX|RB_x>QG zlhbC3cABDV4X||=`0dMR?-vE7zB;q#ze~0YqR4bwO#EplqIL@WsqaMyMI}eC?4?xt z=&%RWg+;NQOat}rk$xvGpWQdJ5SY_FWkQAC^C*Aj5Gx&Vi*lRjG#R?uW^aMyIc^;k zEH>8MrNX2=XZXr^z}?*Sw<&zhBUp@LN53`Z-5uvEMd7k zf2gzFkyaXm^|)5I`-zPh59BvQHdVCQp|hE{w# zxePVb3&>TUIbo0KjK8xCf}$`y;99Y4Yip0?XubK=+rzAHK_ck4@$NYS#`-2yIs)@c zXa!p?!VQnk3Bh^0c}6+hF-W#;+c@AMpwI38@wZ3c2T4hzzYR-nt1J)4>-0hi2gR(3 zIpA#r@2U;+cg>>toJf$;LFPZIzo4+YJ;2|UJO+C%Yp@P_wxt0I^^ft+ITEUfFQsyR ztbPsB`M9-&zeoO5Psm|=xafHX$kGw#F$-jioN%t6;1(JE9?!OMVfh32Nh_E4>xMa2 zd~KB(bn|_Nv}4v2HVWr)I8>PP@`~SlJ5`Ee7>KIX1s-^zcKn;aTbggxyR{=!p08)C zEv&fSUX_cN{6(lN(*YR7+r=B-@}^r_>}JB|-06!RuH*ar9+-VoS77BaEJZ+3C zhBVbFuTXqmCe=U#wbnT^g>TXlRb*Gr?XqBWV;-;6%c`h30&VL&#LucTaBY;nJl_4% zV7Rltx!&e>{#=A%q?4`WVwdtmlb=^j*a9R|?UOloW+zTj>tk{yy z_MmzU7IoX5*6$)C*X>3fYqPfV=r|1n)+=3=4e{Asaq z(laytAbY|pyu1t=|KTJV#0gpd!!Nr0Fr)t`W~!;BP51+3a{NaN`M=YB|FiSdPw3@; z>m~n#8I`rPv;M&|jen+O{-Fwg@;U#nRj@L%(6jvivWoxNdFsCw{yzZE|AlJ9&i-Ej z?|-W{qq;wyPaI8t7zN*gfSwriO!RtRtry4!GM?;#nTauJ;1Mm_u@%jgv8?&YV$KPK z-Ev;q>hY^nOT8}htXhsioy0?l ztCTYVB`LJkoSpjk1fMS$P2Bw4pLeaqtNC&9n4SFmS;HbR*(+-uBW>5;PCgIM2PAho z?!Fs8p>j@dF3nm!?+rb~_VNs??%$lfAD?!fZ6*o(Eya5fg#D@5nV+snx-8N3(c zk6`01HTAfZj<;YS6#8{{x1GJN@F7SYJWe*NiuEJd7#|)@^kneyB{tiSPvkVNx4*5v zCwFGla#Ttg2AL*>OKO#ePd%1|1N^u$X=1tR%?K1wzk+WU*RA=!cwRhSA^r}r6a29pwut92I3Q6BP$Kavf zgor!+$ZQ6SnPIB)EiY7mcNmPGl{!WEAHAlg3XoJ3We_@#$lEzsj=7AkZ&6Zyx(6EJ z{VmzLD#R7nOqmSgoO#6i7`1X1mebewyGC%ehx_|1Xl^k*dYLU#m+n}BK|$F%Ss0<{ z(AW58eiV65E%ej~z#!hC!SGpO`Y4#rOyex@u=czZT&BNB%s9uva*2JrzG(mTN_O&a zTv?b|LKyZrm;UQ>cIvv-FS+@;@3lYKlmGn-`Qei0lSidF`tZS_5JQ(V@8#F#ouxj7 zbaT-v=hHkHc_|G;b&NX*3eWZ8)FHV}B~BWUg|!@Ad)m@+)6>_4vjG=li+Vob8g3(F zOl?J8I%nZoi$k{;+`hKu^SE#L2y^pNc3V4N zAQDv9Fu?;WtTQ+~Aty@&#u*-{l^GwD%-=zLK>X`DM45i}U+5PV+c9;if7+Y5ANy>6 zM*dmkYYg<~HCE~I9qnU?MZQ)TWlnEEs#n0{E7{|cB%R&e_!1=_+1&@Mc~Jf|&CA5a zte07VlqdO~#(U!aP2+0?tMi*|#%l=I5?+?s(g)px@!HdeY%7rFB2$ZUs%2{_2tPq9 zavoHrshE-l-$^8@G?AbxFA%-pj1(OsD?c2dKeIRZ8RffOv@ziN{O!vf5$LeU(_F=y z7Wz~1JE!I7SW;?F3qEbw3$*MY(vZdwOVq*-`2ch1yiO?qo_3s5>nJo>Qv|YZ(x5c? zowkOWMO_rVBeKHu;yC#bpSpHH1P+$V(;<*0???^OE+Cb-yjA(mNAP1tB0VdOo=lg* zGM%eWJF)r@J!K_E`|sP{uBP!RMav==hzK-E08C3fE7y&2U{Mn9viJirT*HG5IB7WoxFsJ$6yllgTS)L2 z6#PO-XGEKwrtyx2Yg;GRgsm5Z22AX}`-Gh0XV(0H?8QmT!OtoZpZ3fj!QyF+riOoT)bGYO@|Z!6kWjQ&0}MbH~iAn2g)^ z4XTXwp^ke8o_iAe=;26xm3G6^BIx}pa-dByTTR2q=e0~=?PcX#<7>g8_`t=L)dm}E zG4&4h&sV#gAN;=Kp_fi zPq1Qg5vLxyD8%oMd@WzGsPaPW9nCb>6KR^p4Ww-Kt}2dWk2etmp<2TC)23gqEs^C&S+Z+C1=mo5X{#ga0P39>7%mg zoLbJ@wnD%xpWrq9YV%#I*$YntFG5rLTmrS`M|7Z2?#~e}q`NK`=-s59jHyQ4`t{73 zzruI4gu#s`sKG?1+wu^KC5T$HQy(igq)KyVFYcWcN0=6dy!`euDJe)6RC|Jxx)nC=J3xFxCu; z<~{g31fy+|@~TC=F*l4nR7ZlLMy_^`JKb_|ZVrWI5DBCTYF=G9!VrOu<6(;NX%!ke zbQc_Xk7dji95S6zIs)Nj+7!zQ@l>8kJNV^)Pvx?D_+ zT^F^3$f6t!vnw>h&FFZ6y)n6SQP?sb_RdO0V;BYuwPkM_+kftq$Q=xgFe}wFMv{c4&xQB9-@cC>Y+eReqtC!DEVUBju^#Ze8#v z)JZ!G%tTK{eMlBLdw~VM|0>l(!&X67hOT%+-FANZk@p#?cME%Zfvh=1PXBIEeiR9A z0|2Xy3nc~)veBLcTdL=r8OZEk-HfgS98_5bWTZK|tQ>PZ&|%IIp`DChkPK73KpRS^ zsBc8>1$4)ImvY(z%A5OrnXZeL2L__#;E?h2j2R_vhJJZ?aR>7j>^ztIJ#sKARJ;2Z zS2LZC#!<$MM0l5Y8xg5@LjW@<46{xr-#aBi9kbNB^piO{TRke80Xn$LZ&d@zRB3{b5_w89sBsvZLD?d9PsP{BYrUFNL=Tqx}HWDDCCyU0%o;A0&4Z1Tnn520t#9x-3 z^fj$jJaT`B?1XA?w#F>88gjL+-4^He3F36WZyeg-gooF$hij&ZF4@_VN5Ge?Q1F$` zP0elPt=cOyD}ky>Ky{l^CPwG);~OCV46UezP^R%07+& z?fIbF9$?nU{Ydj{kaBP(>T+JeppTxP&prr>G`6$g!ldVcteJ6o9W>Ia3kIC=rW4dL z%(^0$OuM`yJx{u5y^z=L8xG`^;ltB%uh(5-Ix|S7gS`XWDoJ}8+kR=iZ!VZdCwgR^ z4wBy-=o0A%kiwPsz>l;_)gx^wRhx(mto(X*kWf%Ta97P8(fBmUeLdTQN0J^yC@SH2 zMN3c&PS!7CkmU&Ik$kfrDQa8PS6rfC*e7?biA2*Yn_!3f*XZ8fJ5r;yInR#vubK5g zclq90`*AH%PD6==X{RcWqPbviY3=FV!H#yNtgOtEg^&k)9i?@e#Z_-iHw^BQ9&!B4`%`#5M3b53t2al$mQ_K#T>j^l3k=i=GA1<*!Om4g17LK#$(WQ!6=zGyfVmX z#woNKk0mvK*(|D#z)q|5$e=WSNU)$$e~PGIOk~N8w1LBv(foI3N-xy{Nr`oMTm# zC*TdE<<&d*JX|g+g*^5!0THU6AS%T?)V^VFRl*9z@xAY#PedIZi2ZCr-%v|>gY5>{ z=kl9qKM}$s5uQqR8L8cj6>3*dkVL6|EajN&%;YqE+{j;+u5hcHauJiAbC?YB`Cr~8 z=^HJKaz#iFwhT=1#Nu(W{(r_Bp~s$(;{*OcS$*)^fH7oK=7=|ybd!4W#bqJM(hNfq z?UL=N^wx!y^7j426F$8~Hj=l>F?f5DNJ=dd!Y;0rHl=&EG1e8UaU_bo(6EzE>F*IO z!x4*A(cy9h02v2cZHP)NTYz!}Na1kClWepkieRp{M6o!*)>@*7;jBzr*M_q%lSwx? zwE8QH$p6MduChi~)9!Y1VIr>@jR+-rxqi8LSCq- zeKF~p5&$yTvt|wvYNYe}nxfP8N~gNpn&P+$a{63~+X@IwtwL!Xqm3`7KLB=4xY1Qk zTPy!!uHQsd%I+_(Ppj7i>3@u4lM2Fm*+;9+gbOrBq1*8y+}PY+pwSl0i%v%t3MXcR zWY+lCXF>ErbBj!zL=9E)ZjJP_%C@J8TeoOb(}P=Y!EisUd><2fT7Zf**&1PZM}_R8 zme24(q}plmAu1`EpC~0)UK|p)207)~m>i*TzItW*=}0pBc)?}|Wt<^6fs|93 zZYfo$Fh>$}OQM}=pM2!!aF~u@UTqR}*6)$egZPIOt(CM?5!-!XBOf6p)s6UolTtMo zNtThPgrxmwWat|44Q17hTobyGt(k@HAW2YhpZq%{Pp7h^FArYTFVQ>`Kf<{3?rZLt ziYqIPrHBR!;Tyj!brY02#dz zi{jD)IZ;UxPz~=()6boAV@8B-sdG?>d4=N^xp27;xRL$JJKz91?5|Xc51~tk0(;+sfO+VCxP%OO34FFAHvO&`dFiys7T`(5{Z7mp}ac z2a_XJ^J*UD*Jfv#ISHHAgrfC2m=-EJgx_!i_~Qj55xo|ESg1M%BWc))s+-&eZ0{vY zRp6Bq%@r6KcWkLsVp}RVOsjBiZFw!rpW?rC{Wk1PiEE$NNzsn**xI(Kop1_A zXM1=2SA=V&mBaOFqCesI_EYa*n~(q!wZ@l6s0Ka0*u8Q+a=EOZT$z%@uf^X*GCwpx=gGFQwQ4kD9fW+^0~(EjV%(Bzc)1n&1I@q4sqef z1cA{74V^b|_hm|oILa8m+Av)CAi9l8FWb57(U|{0IE16Kcjw6>LCr&zx2NnP@IY6n zOIOt>X{hsYk=$NcR zMQC&AnQSq3k+v%5bs*Lqz0^)Tan2b1Q~&o&xG@5~WA5EnED(0RVayX%#LP+%bTVlk z+!7PdJ%)pEv46>tHg*0-zH?C<+FU-tz_O4=rL#IO=6m3=C^OWKW3=F13EQh09z_H+ zXL&7`9D|QYnb)S-7f@v54H2b+I*Fj~Mh6YX#NK~}mWeycycb>9-LRmQG{RSiLL14+U9Q#m+?Q|3!3v`_I8h_dZ_xQV zj6N73NqQE%LWQHK^OPj~Q2rMz^kw<&3w>r=qwV!w07q`2>)tc!ui*@@NG72~Afg2o}1{5kJ7$YJ`M|ar&2v6R$G%9r$|3^_Dkp+O>FMh=YNA_Sb-t zzq%JBu9NOvi$pl+9~MaO1=hRvk*`byo^I@VE9jiYowRck-xA=M1(FZPzP$x{hv zbq!vWbyZEQ7M=IW3NmBKq;^H6dF$Oawe@r|NOeu+Tqt2MC6ql`P37%hY|CL3p!jt2%5Yk*R5A zQYzwh<*{5TyJw^L`tI1L0_SmA%uYP97g8^Ib!V@pX}V|s)r`Ee)p(4&1JPc-H$i9B z6t8>qy-DzIk&}~KEbEWK#SI&WNJ~^v(?OAVhrX*`9&w0cw_x#%DvlkZZM9c`x#+Ep~f^ ztD)cui*;lb$cR;&Nok8#9(Udl!B=T|08BRF$mlIPjP?d4JN-R+(O~ER1yP}%78;`o zeZ-*@1xAH3UJXWtKY1xrkoe+ZbR?V}(7mRhgFhzfU~OFl| zJrvw@>10BuAU9MV8##qqCRSR{_F@^yYQg#b8fTAWl!KvAldJ(p-DtQ-hV>JRY_Ojg z4q%f{2Fwe!ZalD5+M<~+(CKu<0MO~j#@p0V5{oTr*+2Jk^3?S>tTuXWdnh4F+`3px z*EZ1$sTjDstHHPM*ai(bIw~eg$+!}VJf?KHOXjNNy31jQR=T|>{Ve4TYm%;87Mh^0 zES-eH8?IY$)&*U}+}U3&sLSN)hsRo+!pqDXI%hhP3?S|B2L!Zqz1#JMcLnyLW~P%$ z1aR~tWV;vWBR!0cgLgOaqO}}3OAn38Fi75jj)1g>J*~EQ+p`K(p}`2s-Cgv=bKDfb zj%~hu@kd+GjyY?2=X1OEb?z2bO4)BKqPYjb#T+`E2$VSjR&aalE|*5Ob39UpRj_mM2A3aY{^rapb(b#9Q3w_dSw#hTcr%+W-#eZ#{ga@5NvF;-}#~ z5a9z#C6e@tqouNYy)#(ZoaIo={(}oP7PVdx7Zq|gp577^P>W5(m#a1C*nd* zu0ZHMu!ggD&GpmZ3n!_|yDdfFhs>iwnCov?ii!M6I7AniYCMcF|NIc2>AAs$PeEB) zI}k3Ac7&9%yKqz*7{i&(=7yGfTPpeGJ|pBMTuDo*CjCwOIQwCfC%`1IjB<~Kmg3~b zj`3zMKYe_Y*;Y(RGh6bNtadZM-V-7*J9RN~j?s8(Qr`TgWW z(FI2pBc2F_vKq@&7?tVrKa-Me4tmrCwbv`z^_&|0qiXzFH|}I;i*i z^EZ$QCe?pf?i$m)+vl$W6`hnIw5y!bWiIWE{da!yM7DP46#Uj=B$HejgG)vWV8^M| zOmCxmh!18yhez-JIo%mz;r8;v`)zMW22sXb^lOSvf|9coCJ9xEWlR_(USEBz>Ibb~ z&3rwZlXtwebdv;CZ|5@kNJ*|@Asv<`MScd*U5`gV) z9!~)X2IYx^M@|@}g1WcyjP+0Nt~a-Ho44^!aGq$T7ezsl*4vBS(E*~MS{b8*-7+V| zm->W3q|hw3`B|fdjrm(ZA8JCw?@A5N^?+>wH}|~$VR`qk_q4X!l2NylMY;t8;ndHY z?eOQ~{KNk|2~xqzN)hxEKps5Z;l#qbI-RdJu%{h4iS_MV!>OM4nUIT8Bwk7)Hl0Dh z*c2)U_^spMM03rEw|j&87ktm3{C)Z+>B;pERO)CX(AkH$f$leHAJ9AN<31?Ug60v$ z61x{kcL2$OSG)6Y&;ow%<%*PJkbcke7Qvl4o4$-Rx+0Yt zrlfOy*xY%9=;boYcb*AfN~&~y*XzigMd$1WPhARDVqo466#N(CqN1&|P*4B}0$iOp zUrYQ_vkh`xD!{T#67j=A-GInkqj6X(QLqFRS71@WBm)|nKI)P+3>duuveXxEu#OSFl8T!2-#iu=6NY%T-rxf;rVqBwZYq8p>_pH>cTv!2}A~OEXiAZ z>VSMr;GHvbQ0xBgWwe=aLm>BWUC=x$0YTs90lysbW~6G{~oe30e(YC#K?I&pRY&ea@5IJu52BKr@;CS1a(abwegiaGK~m)m(c-g_X6pAUj~?p zn<;za?>s^Ocq5@NsL-TtJ~c>)?-uh((3zBY4(|zz$m^r_r_%SA=2ZQ$g*fDj!RB8x zh3TE2cb7Yy_;S~m>E<^_G;ZtCld$llMKqAuI)rMg$w|->WG7Wq6d%DfwL2xM!%Nsi z4rcai5F%njKS}5Y4f!+F$_3%b4)WXIU65sbo&gA2mUGeswZ)Tmm{!u4dp0@CrzS)2 zHO-2qssi;G7#9JJ&@4`1M^mG*+e;tk?5)4Uwni`p@h&tBWMs_Eo6m^a3#hW+`2K~< z2us!Nn!iFQ`X8%IHQa@oY6+*w+B}u}+G}Ag)TLcm_wr^Yk;742>A3DXTU%!yy&RB?Nd6B9sdY6*e+ZB9#|J{CsFuhClXD z6v}9PTZ~u~C+HR)Pfn^B8Pu`-lG~LjW=HxRAQg@PVg~bY!M27L@YG2NI{uq4PVw@8-l1P0`+qPs=m5>h01;kLeMpKhwT4WM+a(! z;KvSuXFOAY1{xhf{)PJ_&gK;m0r1fx0q0;JlNf^-FTUR}F}oTTew{smT0N8V6wC<* zwY7CB#qa)td3oGTSLPZ6Z+Gj6s*ssMt3wi_VM4yl0qasHpb8$>kTqJl=msjv#fx0f zju#Y+T)#vlZ8CpBgb~2KJh%Ym#^s98`vW_jo2$Oebvyy>^omb22-0A8rz-}17()W% z@oL|bH(-}z&NYq)yLx8(`v0-8w)|bd^3;KCss+9Ft4Ad89_4Q|9ri~q9&fUta3Bv^ zn6JRuxK?^k24+u+KAfq=tzG;Rl4C~&W%b`g~&7geiU!4VEd-J8|p;%@69^Xpd~-dUceXB(X2Ob=U2S`6I%uGE98a?3SEDLF%B9z zD7%fCTL-2uh99TqgJ(# zlfd{y4WM)P1#U>}wCfGIFdut4a3T1=^gxw=^MVeC4iGFOYX(vicvA@Ig*t~2IDY#D z6{I8#4&Kf@7ptBAAAQp-d`t8PsUk#F;{BDh$06$C}5-4~K~d4eBQV(vBcs5Zk#)ew!D93j_y8<*p2b;SFgx(Ga2qMN^%9P^rTS|7g3{@Vi!GM;*S^K2ksNeO%QQ}>V4lFY2-Eb$=TTp0 zfm#$B&|o+QREE{z0%h?)D)@UgUoAqov4M%%@XkAv#y|XNR?ROoqMCKuaBF`ff{`h{ z4Yif25D`^p57Qh%u0~V7&Yv~dUwfJy{^`%C59RNIs3OHx*V2PcYCF?uNS;Cg^!0q!) zl@ir@cYJg<0^{Ti(e(9M^!$owfPWq=n(Li~Gn7*M2%v71er65tA9FHdjnuP;IG#KGUMIMrqBY|O?tGap9woA+@x zmhdYY?pA?65Nq6AKS@Czvl&I(&HGAJAHIz8m*>Xs9$?pl#|wO4hXWn@2OT~^0}62| z*0{MH5QG(N0{;Tu=OocosffxDjh5G(cjP3m#M~q@BSA$q5gn=vdJ5%*GRpu3Pxxcb z3H~dG<-cb7yuXkzgoBk`6IBvcgoOV@yc_b80F?BpruNXy@W!!jW9?%pX-*>aS(WsEGX8t>E zDkpRpdOtbzWjt%03PrBbB0Ed*1oz8HLKe_Rux*@Ss=(9A;W!}8b2y??Cvg@7v&Uz#j6>(4zfg($L$G7w-191PK+uF*Y6G8XF80zf0idT zprQcixIoo4n8LpeKUiDtbn0M{2kkN*W3C$Bpa;ucr@v0Zv(DY-lPYr6r`_cir~O7p z`PhX4$O&_qsfL{B7?warK>F|VjE)ICsfS(cuMF*M8{0CBSHSx@)O~ZLCiw^cor^^f zn37U#BIf26^eF^hB>_5)QKSDGp4(dFCI4$y2Y&c5R_3PT<4heb&2!4|g~^EvA#XGN zWj;!|#iKyY)~!_|#C-R5GmKO{g>d{kKw_^dND|H47eY+_rq&;4NE=MqvOM&lb+sH8 zD zna+1kIxOsrzC?TSQFdz8AnYRD?6jDOEulaRac_b4y;RdnknGS68hR<)XyO+&87D^u z2Foa1li^*Wj9oz!L>JmogV-J+?wIkV|LLTrqef)|ZT#3FLljcDmgo=~8H!zX%1YBq zs@qj5Aiu%?Sn*)0GrJ14pNl%o^b?lxCEe5BT;@TA?s_Vj6HtGGR$hVg#uHj6=_hL* zPtFLz=#O*A9^WD>$dG^qrtyMeNKZjY8k~}7b7IMBr&ZnkJ7J=4HF?o zB)-ogpabn%3&~mi-2}4Xnu8dCQ#AaGY@J#5g7gg=oRYWU4-5uX%@SmKQ`aI~e@9QU z8juKWVQbnPgf)LgQSOCZ!aYz`k6FAsKPHk$A}Da&Zo0t{me|t_S1kk!=~|r^F6L(u zsILQ4*`miDyBnr|V|?wc-?n*H^#J^ zz7~P`KSNB^`XzfJO~eB9M#|A}Jvy2Z4A4jOnXtJn)IgW?@@OJD<+(01y;1Cten&K*v7x z*_GCT3|va8T3#ID%jW2Od~GNFT#VIaO(%`ASP}rkhnA(V%tQa%>0nKZaf>qnFjs3$ zONX;^*3TF@=o$&Y<-nYjr80B_BVw@o{)mjqVZ<#&n0SD600Lro)trJ8Lv%w;^UtOCRgFrtm3S5lY|u_HGB$ zd|aT?4IE{lO)D@GMFP1!fjJv8k?=u9KsMs-W`A3&%LDkky}E9E^v)R8j=Z7|)BFt@ z!pPIO(j$BKoKW0vF`0ij?dHj3xID=!@m!@CH4#mUiWR?`kMbESTGPkSdaCm-@+;EH z@-n5P=h47}Ay(foy@lG!qnyNCibC*PlCZBU2Jy06rOu!%QdwwbJb_k+qWH*{@;YWj zR?IymLnAl9fE*}AgEaB!o4lV}r<5)SBfD(bb0kd$JS^T-IQi&S8~L>3V8xcUYQ#%7)$H`z)lND( zp+p_Dbjn2`Y5L+Xw^^^Zma&tuso|8Ay}p3Uk;1n?4Wd`Hxqto(Qlpb_SZp4D)W#nq z*Q(VJJ~tX{#L=(^h-Rc>nD#hi4!onBIgG%EsE9~*;1>@x-_z}{P|YtXZSHBo0o^AQ z&6$dG8dN|Tf;*QE@mlaX_=LAh{{m$H>rFtfa!qTUx4SvKA0a%dZ~n7UKy z=dUNIIEvE65H!cFm(usW2Oek5IFjMrE8^Ey7nH3HphqaKoJH=~u31Dj06Ob?_a2lg z9Dv=ieCh`AvkWNi=X}&{t@HP0u5MeOSTuMU95122n$6BnYJ1ID`c5 zKFxOH2wrF$T20|9Dz)^jJyYJLO~R~hjk>yfdaREa+`%TwAM_w#mBJ!ax7 zG+k=Y;Fil^rXszmfsBYewX!+Mq}7sFk6{C!nou@8TNZ6Qj%wm}CoC=`R2GtcmtFQn z=nbgtvwoXSZu=9dxw}@m3u;bfYk8JQqZ?D7rVfzn^EFmt`{Y&<*3hJ`w9KbppJ8Sr zqj)4m*6Afxxn^&*JS?%52v~IicUhR`Rng8nPgsHHmSrk+QJ^^ZG>l6DEA zTCZ2qY6Q%2sH(LBb6#e%ekigHooMP*uSW{;^yD;Zs`bhxcD`1pW}FL1`<#0Is_o;q&{QMG+kD-)UY4G*2ZaT9tD3hD7M$OeKD|?Z}ol9Cy^djz}HvtS}z29;x>L)GY zfr>rbSiCCR7Qu@4D>N_9w#uLO|6uN|!>a7s?NKm5K}8XjR*_CYI!$B&3y^M*?(PO( zM3j(4gOt)K-Jv2WA>E*qba(ykWxntC`@X&Rbrh8TUQLxW}B2d1R8D zxA{W`Id5X(EGqsJwT7o-U0*+Rzdf{8lsJMXk$iYzp3*4?0o&MB8*l0ai#|8R4_B}{ zv+;@pk^CfLPMPCHDU+l!5$52>p{a*iN@>a;hh`D}T4o!G)U3sksT^6^N}o)VQ&lO= zES)IZ3$aXt=#fbIkweanfJB|FJJE;JQS7ts41|G->Krri6r8qceV1**<yd9BxlKaWide_zNkdaO!Ce*x92P}sk&Re*PrWB zo_3yg<-AZrGQ#y~lJV9!9m7t2)w??9?Y9w^5=rw|Xp-2w3>51Nr=QhI!rM1`2V3`< z$-+iY(++m^?|^s26mz$aafXRMCSCH-cUK!Oo)@;CoxP5AMN$2utxXcQWmZ+`f8$AaLFsqzzfe zV{qq9FEDrX81lc@)`Y8d@*KTu6+?A5mzc%H@$92U0Zyu7 z%SSh~nlyUacr@ouOd3xM9-V$RX>4?>+O4Jyi`za|M7uIWg5%-=vj$aHULSTu_NbW8 z8nJi=L!Myw$BcA}lJeJC%rtP`?v{V_?Cb^o*@zE?4*3Orec~_*?r|iMJkxyZYbLLfwcVSx{d%gE^@ck*4 zs`2Tj0f}&*Fy`@FCJ0J~IQ?jLIs4$T$-qI|-3rQcvO2U+#EfPs%|b8tlAW5MmHT@A zd<8fChTr4xI}BudT+J)Eb&gDnH`6<9oK9Wbo85n?xICSbG`hRZQQ>-c%-mxow0IN0 z%@R=_SbFc0WVhw*qpKK>u4Dh9PJupS{a2mh-|WL-<@xdKbq+Y>o9h}IoW~Ela{im= z(0@OZ{nuIFu$}1N?FRbivHa}lBi;XtRrnll_0A75_YzA9g+c zm#tvsfM*k+9|yqA%nC=1bKgYolj4MD1aQJb7XHJ|s2@kz|Cc+X*#3F$Is1Qe?l~*h zj}iINid$^3F^l7WqZR)=_?-Rk2cLgG`d(2|%Luk+vHY4O2-C;ZC%(PW@o6aEB){;%UweoYbjl;d*-GV=4Ri|zh^<1+2~qXn43Jd z(Y>bk*u)y1gJ5U^FR{SE`8K-ub=*|@lF{>vt;`C&^DQp4S`mA7As zXB_y*DMmV`5uDdoNZTyQDoRxwd{3~c%fHe*hR@IC{^=^o)LqVr>5VTr?%6uEC+^=p z#ny1*bmiE&@@Ictqwu;xt#kkK<;HW58=hXcK^>uaih{!50k6mOk&N1gyzOAOoT=P>^B*Yd>`2Nx5Q`TRCPKAUgtp2x8#jwFQ+)+OC{JEx|S zNADfSz_@+Rac6asCeFobcYVeO?`oCfny~0dr85^R>-GK_pQ~=POS=NM;TjVs8uDg@a{I!#EGbUA`$I%NN;?kHZJtZsoQ4_R?-Nc%a;VDNzrr z4jSk2%66>Av!M3`{Eu{vk_>!1aiTZs7+mgJ0pB`V1_G;@Y!_Z#mgOfu+8z&d%%+3i zygbaGz!Ve!&I<#D9UUF}`}^tX=|Mq3 zwQ?!^Prba3$uv$)O?`gzP-YJ4f7A2fCi0A#iHT~J3l9Mf;>*VuS9*JTHreLy*ItvJ zQZS0zHb}<3a+n`tZepWWwQorqq9OIteno3zK)JTh$a+m9ko;gPG1(0dvub6%Q$s@| zCnJM|oP1T6}p= z&Zm%xDs<<6R#HQU*wM3c7-(+y3m#_Rkw_P<_9koq=IXj~^a*{7_o9vdDW z9v3IX%9^{@`HhunBGIhK-~jE~#tjqU`QGqXiSMWSM2orRZXZ7~B} zgp8f0TT^;-j<}kOi;7++C0##A3adgzVWDS_q>$^uc9MEwm6VD~Mx5;hSjjyM2KD#L zpN0)5UwM2iaK4(5AXhQ7yqvH55ue{>k+AACSe4TCW&ePHDETawZ}oRBO3Tb^?=fN( z7Z(o>4r)}pRTg{l1!7vX)pxD0P6jTG9(`KPT3A@z+&o&{-Kg$Md?x6}$^Gc^tDtLZ z{0HmKPEJpKeEg|$73XVxFDA>);dXa-FO62)lTxP9Z3Z6@JTV`ws&v^|&DU@1V72pM z#aP@4oe^+ohgqC3sbW5Qc(qYEPGIl7;DhzYHJHA6;Vc?WBCz`1w*}5`f9O20Fg49e zPd9?OsI9H-?Cfk~Q&3Xkpr=?$c2tmOr4~t{=T!3! zf!y2MbKl6&aNU^wCA!rJ{$u{P5&;cv7E}&HlEf z(#xYl{ks&siS|MT`)5BtoEa`)-^BXX0jFn+I&m@iS6)vcZICsZRU*~ZTE;{mVLZ{D zpT8F|xi;OlCqTM=?bP05dCk{j7wniI)+I6q_p8YttqC-ZR5;2=ORvs$Gjy_9Jzv^; zT=eHneqHP;(lVWq(g$bg|Lxy80|j>*99+}vhUvKOO%ji8eK2|VJIE5H8OkRnkGk!d zepTCf7(f~s5wUD6vV2l#K~3v-JKz!w(w(r_qPfhYaG=dhlU07$ZeLO=#l#8t-)B$a zU-S+Mioz1&aNU^gPPpfzUga{AN4iJ&ub;A=HnT8TEVMU&tGT!}PAJZS^U}Y4)5EK- zI`+u45cEvu*L4$4dB%PL2NiHwhi> zuLXG1Ah`f9G>YrqJC+lSV=P+dmx&)0NlF~OsX)O&W)ZqdG*3ukLqW4YK-qk+8ytLORM&{uTA-Ph0Cj-!+9%QbL@};3p3|} zF5Rn>$XP~)m%_h4IqZGm8-!XkPT~bj-0c_8z_9U0o5j@!Ooe=lfmelETcjHJW7V*J z{mJfdf2T`tY^o(X&UI6%%mi-c>>I(w(j@f*)_I+*>SPdjDma{9^O-=g-Zn4>*xGj=h@P{`kdX34J>} zB)W0#hmP#T!`d`#&f&~zqRkE%Tvq!*#6SLCN~8<81C73#!&$ca0@tq{EJKSUhR!Hn z<3@h~yy4&gwyVZTiYb_yn({bL5k-baW8$8`hCXNFdNUs^DTwIhcs=U6MaFgSy0+CV zP0z7w&{vb1Ap%b8shOFK{*4oW)3`Y}LbFFOyh-7crM@?fP`7$-c&THLW}BsYA7%dZ zuHJ-Z%`wlrFfz@Bv@hz%A^*-CT&9^}B0ZOrlarDwStFf&lJPuy?X|H&QolTiE1BOe ziqs0&{~S6Z=%jyq%^z1KJ@>umg+nlvD6y}mqN3W_*+D~0%kihVjuhcb%4R{?Z{IF|ioDepCnV`2_Vkggtj*4hN_;^Kr16)k~?fLo4=67>FJv~v;(MhJX1V+ZjDr#zSXX^6u)bI@HB#SP#{6IRFNW4tm z1)Xc4I5966e|WwvhOf83zrUkH%Sc*5LEl9rCR*Uj*N-o96-}I-Rl*?kQj`yINoGZ5 zrWO|~tln-Wr(6gDMezm8dJ~Og?EKtZFsZb9lhpLolti4MX_ExgG-a-JqZpOp=X@DN zhfW71EM2BmD>t{Q*RQ`G9_$4OFif?SbO^LQ#wmX%@t*T}ZZ0cgJC5J+tKKp%LJ3k_ zkv-zTfIXeiPgl2`yhA$HgodvikICHBbdqM`ux9#{&V^%kSEXE@F)%PdcU`9RbvoEB z%x!FMe@PlLZ1cLgt&OWHL^i9Wq|bG&QZ{(Kaghl@e>dS}5hG%zrp6=9ODAx6cz9Q= zoF{i))r!+KBk7{dG%7|kZ?-RAYs8KX6-CdfRL3bOXqL{>KLb#D_>4Nu&e7JWdk&MB zbZ=J|B`!?e&dyHdgv781Ju4PbLz~}(yBYmjn&mWZJIKOMTduO3$GIPSm$%2bYki96JwORH5TWSYx4pT zJHT@$%GzQDWMqpN#T6X$Vooi5#df>9i02Y;`|@?oEzFNTit6fzUq9k1DXOYwrl#KH zh>VFbH8!@Mzt6?RMH4eIJzZQ-Fa)GzWxT%b+_37+8Nod^-;Y{h0wUQCdz%Xk3fTrM zxHveBeC%O^ExyCc>vubMKHRs1VKt>m>guwJmFYV>lqoCV5MyYy93GhtPt zZY{N*p5SK2onS8_L$9ll@CND2fgz|OVS8H+PC2K7%{z|Fp)EZRT zG+DIcAcBqqna-bvEZS>%Z?;@kQNcehrX8T5qM{-#{aWoHBh{q$o^n(0!u@*5h6B&G z3*VQ7=GJviF0N>N9y(SIC1vIGoE!z4*KgmxjUTO^S2IfgY%O+>)!i-E|0+c?jyMBx zS*JopBR@Cyk(yc-6T?)knS;|~B+`H8oEgIR;lqc+>n1v{ipiE_Ite(H9+?qWv~H(Z zbT$J#lb4q#mXT?0vJ*&5;_sKR+5hVd+qnNLBlI|ZF*M)vn3Nm_{Ij}hHEwH@$4E7x zcC(IJKtSN$y?bVEHdn4(A>kW(G!ir6mKxAad7P1s4&fr!q@t`$&hHQ(e&);>%Ggd4 z5|Ylv3i&qQ$z{LdJB|0x;^C2u`hV1-k$7b>kDf|T3D+q&Y=V-WVQh zVYid*VN{RX+d9vkJJ*yrTyEdCjqUoUp^5CCR9`gYFR#l*zGbb4;P{_W9$ z9y5d5cDYdE-vU&lT}bSTK<6dyeZ6k zh91ITeZTN|5o!9gnRidH)u>Z3JU(%2CM73RujHuh#uXv4hk}AGg!^dngox2cgoi6g zOH&|TxQ!Q05;FQk&0j|B(v-feV)7Lbu`+O(3heR|egmU4aAS)qrF*p_X1Kb6VT#g{ z0l$q_^l8t?2sw_o4%Y1K>^jX2o=p=j^E70DnqywMr!e2c^gbi5C*h2;ZgjMLwwv=x zrmZZhCGnC$jNh){E6V>|z1*#wUQbTg28xG20L?%%P(%tzpn;*UWxquWnQ7DOgq;4? zNekcYP7JT7FFrh$*1X}YKwuHZ+Ax7ZcZ)g|7Z;bW)IKqP?^sDzR#rej!29>_wd(^6 zHH2R|oR+7=Kka>2Iwc|D-F6J4wY4>5n1PFG7?Miraab5NZeO?FalV)rA-6fI*Jn-|qWqoSKQ8JH`w~ui*o2zh2 z1PpJzne008-hSR3osBh@y0~sn%7)NYVYISxaLBcfHl>~ZYpHJ(!~MdO8ugM=1|j>` z;s+-!9tM)j9o>QGIk1g=P;34Si_PQU?D7@XQ;Bs4Z(du`G<9iU^bQXT@bHx8?{&!> zaHay~Ll}&&Y_|$k&ncCk1@0pyt&}CPD1OcB*T3GDPRq+<3vXj-iJ_Ho$9z=*kG1yx zAth8FZsZJJHyTl+MpJ@xrJFO4Ogk9$2OJRuz%@udHH(=Q~!Y$=Kc z7MSmB6X6?LX*qFLe-#t%!=v{Z+e!4Vdz3$6W^&EMHG@8y-+!dWzVkuw^iKprca!H7 z@g|~11MmySYjMxUJMC{Jj~(*96?^p9$w`@B9Eprn2I3tdO4?gkRpka?9)&_dvp@LY z8Ea&il0NlqwqM{Bl~Gi5nEFIC&P6_}LkJWLIANG45jK(UeaKN0!xr3(&1i~wi^g|6 zgq)h1+V9fHFFi$ip_~|LZO{v8bCa8=ZkKKzD{5uMk|@IRy}rJ_+BtQA4?ROejHdSz zfT$17&ZcYK3=3Uw5)p&UWB_rt(A;xcB&9|`>lE>^%gf=~)YgkbrLC>4VPThLGRn$$ z$FFdd`A)vL!cwONkI67q0x9MBywxawp;6xJkrDOA<4n#k3uKBGU$9iQGXRFjgXM1} z;z)NdCOVqWb+>?yukaOw5h|9@#0PB>RES^%=rLi14b1?}0O0OzE%9w;MsR%`Sm=`z zd(72`=o4n;p6JF-{C6aEA+R2j$Z+BT#xZZe{z(!@1$p`R zU*0l`;BV}17;9%FBwXjAB@rX-4ULO4ccDvDwzSOMn{rO0o(UdSLCOAg_qwSPs>9P0 zQ|4qNd3kyHM!21|R)6V)$*#N@O>!$0U#LzuI=rRzn$dZ8$>uh)6+ySkxHd`vUe8px zS*6S6(0EjRbm$D9QwG6H$-vk+IySZkN0&)CK~1;$y-g_1ps#^}fugc91;@#}bLbg{ zI71&0U0GQP0XXlxzcA9>J^ToSOAvzmsf<9i0boABbMNAkv`izvZjzIPLI0E3s2+ej zhdXYzwsJxIH=|hzzVEk`ZBiMTkFWa9O0smZ(7#Pwbgb7KVN^&An^)>g zYR!7q%cX-z`slUw85wPkMlV16Ib%*v&h(6oLfs#i&rC~W z9e&3|xAN^-&*pBkyvALGM!1@>mjq{Iw9|9^;iMtqP)D0h$vy zmHDCg1+S;Kc08)*&7Pq6=~vV@(1@CuQ2Qbe1?aYAJXQB8F3iZ3UlLJ9;HPR#%%~aB zGe9z)ou3D!EuH!1Vc;y6H6rhGUmxx9PP3<|S4K`wWoc=KFa_%kCGh#KUcDO5E?(`a z#+#O&j#3pvkbzw!Kb{h_ZI)+@>Bd06Di}o&i4F*>Tiv>`ak_^g`wXPpyiLi*p}~!@B{KbnGQPhn`PK|wi z5fc)UvHX^$>fyEo9FW*0V)^@fdueu3DuzZzVt?e@*fGQ+O+G6>KO@IvlFrzViidsw zP>W{Q#q7SC#2z3B?od)&P=h=KL1Oj-#Ta+e8H@(u=e2sex>Tg+n!P5Jb2O?sIf;mg zXJ=+CJAKVuTwL_@gjK@!O`)ujivT5|fbEi~ozwR6Zi=G-o#pb#7Zu*Go-j`uc8v|^w%lwUsFq04Dzi8L{S#?ikIFWKYo1v97iU&zh6nf z+0ya6s)k0m;M(dcH4V)cH)o~S_{k(^aU_~oGt5oS=D!H|c>_cuj~DWuOVP@L)($L` z{PB4mv5+0FE`sk!kU>SO-Ru=gfRmm58w=d!Ms&hDHLA{li>h>}4cS#ib;mN(wC!k=UcGK(Pfq6JL=QW^WW8>c5UZgiP0QCBSyhMxS z=>GAQ5|cO0zq_cyuK$F44hP4`TGC6VM^m^zp)C3atX}=dHlUz8`7(<6+T9AtMMz4v zfuIxZ9}^k*`C<_a5uy2P?v4JSl}#7_kZ(#dSkj$CAl~_8ZR4O(n-lbyV_0S{y6V5k<5f)Sgr=kfeOZx6rFJv?)8{5~CTo?k7gTY}WArVC$ZiE0r ziTBBdyxVHom*iW?Wm|K$OP>u2Dk@Z+ja>EhQ|Jmo8!$3A$Me1mdBoP%7IjE8YHMP~ zMOco!i7atCKAfYr+6USW0Rch7QxT5(3wj>fUQy`YS-fzs{YMrx3A@aO@ zBd(7;AeV^$PJ?Q0FkhuPNtP0Vj!6ND>>P>7r-)l8j)OezDPSco>ic&>BtkTbRcQZn zf}$xMHF;ooXlUuqn!uyKF{Rs0_|-JM_R(PCbD>KpZ!U=038;b)6P|7C+3iQSz)84^vOa=bYy_n4EW+xEno;+o$|BOh z`sk=Aac$1nF*yZ^qBYI0Krw$3>66zv00=G2&Z4{x*qz4f&dLPu?(R-b>efs6QDQ>8 zd+|}LK7cHEo@z3;8>mmLo+^BFdU{6~sLhvBbjYIl0_rWHm8DdM6lCg9A+QyJ zHNm!Y=7e@$3t9a*_i?)&6`YJPxxelvfP&-geX>&pG+tbv56X9GkDB!h^7392RvRkg z>o=BM3J48e;P>F}_$?1qr6m7rg5W?nC4Z~cF*cs-N|QlF2|6rmvS?e2FTAR8sojIPN@~s!9LZHBo09zd8oyT2BsCUffJ&7|Fh^%9;(jxi za?-34>*)ZUls9kQz~~R06;1QcDk|c%9OUBUTxVdSdU0#`I(cBdZYA^YjwK_i*3F|K zv7PVBjTts3OioGJC>%U!8Sd-(P6lKa(RT+?2hF?#-a#ozqs(UJ37+81k(0r7mzY>s zfY6e#kcH^deKvc_#yK-H15mh-2+4DW<)tzt(S(GAFByAfxj8wLM=vqQ;QdV* z?H{t_54iPmwZR|E2pcC<*mk~t{aVYrTKd$fer##n8BhFETs z`ld!Z^4p{{9*plJU1~J!SW~HzzGGlr$0de5eqOP%P=_0i?(WrY;r{Bh2ob2Uk6(8) zHEr2GL60b)XJ7y|SB7w~b&;;Nu1>hIzCh(Ur2w#b5JFLf-!cGk5Ca|3L5zfkD6aAz z>|g}^m=tt@L$p9U1GQ%dbo=$q&6il*cf`0P`CkS?c}sF`8Ej3y)ntS|3yM7bt;e6; zAj80*6LXeMN9^xqrlzGK_^)Oh4fluGgGR)ioczy(GHYcrpu$%1lTegY<>z;X3m{#Bw;IFSoFARR63%dD41b_Y4x*`j1z;~Gjz zLA52Cz5V(6{>XxJ{=@Y2DLsx9+NHyg8%_}iqNH_l+Juhy$H??DtsVY?Kt*k_msV8)@B@WUhw^95(L8f!b79c9H#;;eOw>C)oxXE|8^XSy)BA3fsIGy@ zVK7caPT*c)&dko{J%`_S<9Be6Oc?2G{bwCdpAyxaX5KK4!tno)j3k#Sw}Sf#L9>fmm1bN1A=w!(@p9VVBHZ|k zf%9fs;nvpHXr;5gGaAqX2y^yf5yV$V$Nt=lHyWRTuBDaRm#ba> zb;Y4cyK_+Q8b=m-Db|;il_|@~B{6}LNH1~p=LQQ4#V+oY3=Rx*-8iusaDxoZBLhE4 zkrMwK>C9>K>*{u1RTZ=A)Z`>mLSoU<#OY)`uBeOzvXGFGmiBFCW_U&$^RExryXIZk z424mt$B)0ffA969=Z=E_rEB)D3FAAX5I+Lbh(ru8RoV==3#18Ev^FPalw|z>Go^rO z-qFgOYiMT18S^3-UnUqz41k3m&`{ei4h7BIfV~I`3gw2hg}J(H9Kcr~336Qm2Obn{ zjGIyKBhB;z>&Nr_nWM{zU>;r~iC7)by$IBw?$$`2PY6KB+h%#>z#yQ~x`D40 zhQFXks~sF08w(;V*UadrPkym)hhZ2TWCF<=1N@4ojT7&;MX|k%I(O!bh_ER=DI7Z@ z{AM7}q+xma?aHtsqutlq(|@Or&}OFqrfP12D_1feo>D}O8pEn#Rx4ZI-?6T)M-9Vr zhF0v)(CkQljTuIZs4Y@;)Bq(43kw5;?t&8KCmE0Wl#-WcWoh|nm>z0XF!iKgj~2yw zcF6|h0}V!v8E#!fJQoxY7zWItk|_5Q)?fO&ckck{I4X3QBWBn2FTi5_J?S4(T-X^Z z^m%BzART!A?F~d)VlreL$~(ijKiFpwQJ6hG8owMOB#!RAoxz?09cetU9VCYOz^f!; zz&eqEVugt@H@dO)cms`iwrkJYsJ_PrGXx5-7 z9N|g$X}Re5Ascn-z!PhpAMmBQc?1KaPjX+d59`X$AP(X2D6o<*;F-z6RqjKo$d-m- z#YSR8reBa>L$C6%juN6rR7W?{*tLJDDKzx4{{i)la8^`dwn$G&URdZxXego59K(Ti zQu$_JAtfS@qEWPC>CL$PD`&ka9{psA>ByOb-5dI?{B72;YoFF4*CKCCi(h$>pZwqp zIqSEdO4Jo^W27g}?eC1ib8Y;bYrGaZ4*?~4g(ie)kaKN3$q#}CZ#~|0>ZgwgEGxRe)GQDOBe5-dNi`iEsH~=; zp;vpt_Zcq(elE;b($H91T4E_R$HvB9ai~a0NPr|yfYZ2ocvw|f1J>1t!ost2b4j-; z@pEnaa?8qu0&Xk^x`_4_@I&}kk&(G|^Cp;2=lbpyg1Q4zs38;K87Lx8ae{Jjt@63> z8#A0MgWMKhAV1!oe54-=f-xZ(8F&M$vP2t&l8z2mR#5Q=Q?}Zz`rvg*CvHAI2CB&fosV$39;ilkO2fI(C@HJ9Ea|i^ zupmjcQU*6JE}GeHkwPX6^!Fz^tH&03pW-pYHAl4lTlF$?ktGb&!{?b+&dz*rvtARn ze0+R8^pIFlJ|%{=1yK73k0Ya4c7#NV*dmaV(r&6XmzA&Hxs13)$MPN^sMX}{=L5%2 zg$!9|KzRS~;oe%pgny4dkQ0UaC?F>gywkq{If)Z;=L~~ZfW^hcwFt<`74*f!{Q&Va zg-~ROQwM`DDBSx#1#Am2%jo$0Ik&KIvhP_ar6#1XNb%&Pqz8H7s6FubggHl9+S_yC z`w})o^0pN1$t}}%Cw&+{5j#yKr?U^^XF3PfFfF7F)HM9V)7lG9Krn)z^&A})4X`hH zi(Y} zTD-bB-#bMU+xkQ9fZGZCS$`p$slDE5B9Scv15pcUEE-i%*}8E(q%@noyXG1w0XtjUNIWQgwL~X;qDP?#i9ziYlq>S{Wu!Y{ zuEnL82b_+jw0f?`LeC+<#D8q{rumt$iWvv~5xDMu%SWxgPR_(*f7QHN$ zw!N70!tC)YyN%rp0p0;mIWXK+UC5v z5~3z$U9h@1ISsTpkAWR1l9brqI=qJ~NFs%*xiIThTpZUDPIw(?zFBQBT?dQJ%QF}I zuGU|m4T-v3I0G5<*1ItAs_bm$V!sMzQ1u5YZ0Ewt*1iJbpK_JM-|or(s#iRWo?c_` zgIwuua<}_yNf0Au3XOXwau_xAa^e#zWFB;64Usg;q=h(!`#?pESv zW78EjY-(n9?(Ern-#@(nd(rh5}yqjkDC_0Sa&cT8E{HX?Yk=zOa z9)a?A8ciiLN1K~Ply#oBAYS#*3qR@6gQa22A8zZKpnKah?R5=A)*>E+G>$5pWFRi+ zZ9Nt5#EeN5h@j0|&+c&P)u2L-RV}Z_&uoukx|lC_5ZB8I8{vdpINeu$xcefJAe>RE z=A-;d*Mkk8C)7}-KSO)Nk)`7}Mm%cU_3cTi6RqgY9k&@&A!*deeK3`3Cp}G%fuVq{ zz!%T>GX5Bb#U=D)etv6*GPQ*voC`IRqac&y_6HsfOD?M7ruGz6v#Q-Dg_i=89 zr;J#P*-Cn3_>Ld@?hAP5X%_Ll2=o1)p{sBHF%)27mpzvFC452k0&DnB#X?H>l;Tfw z0W|w(sRgt$2$$c#ei|8~#vqJfU>JZTUG@(;gY%y+bmrXuG}8f&|CM#oG9BCBWICch zSNj*4uKmQ7ujqcgn3&xDPjAKl!<72ZE<}&~Z@(^9$WJx&N3#9ni6IF*@OW0dyn?@=f*XsI|luDep%o<&f z6L2$Qz|cczb-2%32(;-YA(XdgW@kYM%?l0pHsNG&OwQ_oB%fS(Vq1CUBe;3l9b8=axwy6l&8sKvI=GFE7^^{Ig!EXMf7|d+ zpCq<-J-<%@R>QhH#v!0N%5J*4Nm3sHxxLZ4ckctltV~ISu+gihYAPz$^P$nWNVxG& zt5c4{oz?oGJsYSd(d>wFra><)S9apiiY^y}sbYDJDwm);H_MoCSEULwZm0dZS}p6` zEycEbhda}8sD#NZTFK!mSCz|@*V!*y!PYXMhaFC~PGOg-9ag@=c%%5Qgv!On#xRC* zK^Ql;*H^ySV)#mgR1>T>#?LSCE&=XMKgDYM5&?v?3V>o zhESjM@$t!fo1d@EFuv_w1zT8|ca%FJv-*7a5*Zl@+zixQEt$^F{7;+JM+Zxl&RfC{ zA9j1MWw%AY7&vhZbL~?)V^>!fw>+kJ(GoEMw*lIx@6oJ4y9g%3ERAo`)o*o>eQrCG zS5&eT8L9irM$Y@oYCCGB;;ijF{}rxW<}g9 zMygLg&fmV?qbe)isd+P%882euiORiuPyT9yCX(S=x1%>0V20;N4JCEXK&f|JWkw-K zeYniFS^iMyXeV&O5Vi>QD8r=aH|Z(Ud{#dW)huD-wziO-jJmoyCit%}q1p zCRJBdm=b|P!6eWM8QCy$dAV~0Y6>TYM!izEIk7NyY3%gw#L(W_xTR01B5;h`aZ z0QJMKzuFf+KagYonBU>!z|VY@IS~)wTNr3qStqO9j|AD+q%|~HPErItGu0u@xH20U z+I6t}<=%+?WE#W~5X>5$X6{)zIP`UNSXo(V87uWPIL+kmT}KHvQ$rCK%r|!S_GElH z5GU54>U;Z|#iO%f9yiFOgwa`GZdF^#H6n~r%f@CMocKlbuy%S}23HiTi;H1PmyX)n ze1CpR3(__VsF5BU(T!?eUf$<%mZcwY>8MF6!HHd4``3h3ioWA8NFZPUZCRJbzf1HS zghe_!JgNf_tkD`<^DOh;4aYP}D?K|SXL;q|-fyt=u1H@uQ%_INgy{&jsG>yRI8f?P zQS?@|330YaNGoNKpUhstx04+^`dySsGs>&^>=eB_{HBY(@$$L}=F7?oL;xmYEH3Xggd zw3nIa_)fEZGqb`4tUg7k&jvQy+BeK^IC5}tT?H0^XRUD|@_G**9m*ek4)nwYg__Q% zFfg*YA3R5iQv;1-#`V4bep9z>f8pD=zJUQNlUh;fJXi?g)SWOeE-v$mf~4nCr0K^0 zO58Kk&}2m{ShZO!E-ngFT*&u%Ze1PF{bDw-lx-=$G%anrxB5`G68~Csi=fN4)aPej z^UpqczI%6Pa2JMKv2&@h5uu$UWppO%1) zx$I^2suP;(*&&;HySs^^gHJl9()u;mdzWBfxL@MMM{M?Wck2pHDyu|y`W45 z{sk%&r3|WT9SVz!&LDj9a&T;ny*u7`T=&kfDM=0}uRR1UPT^6?9PI41r%pK{{hN(%Mf#0rnYy~V&e#l;^stAD@`Tk>-S`Q!#Nr0y zDZSq&-Oj6%*9AS{&6|6lpZQaUp<=3>x0p%KO&>(5Bc(G{ip|o>O|4tCJ{xpZtPR@$ zdQg|3ON&|{w?BN9uO2zRt|aVVG^w#~v5k2ZeD>dGv0yRIpmJbC}|0 zaZ=Lc`uyrs6HeozxUG=P#L1~8tOhUMVwSMxxc6fsDYuP&fMPYbGgHG~L7)f0dLzY0 zN2!O9>z-1EpT9qplFMg`CLZXuqW7OvzDR!w-80yBH8S$kWMVShA-|+?R9u`SC4ODr zJQ^l!^ovtl?`@ifcMor+w3|wym`AGJN1ZP77B51AX_Jf-jO5b4L?5Q$>RK7;+?;ZH zjgy_h(I2+M%%|rpiM8P|-;Hk_ZO({p}0> z!er%@KiQ!bm|ZP1O78NLhno>@5j8%g+-Y=vko2DC1)``E$l@T!q8>_?KDuRdeZ66k z@TAW5?`&~)d08qpbVvoowKkEcZ5w_78%SUJNgPhO$_uiHNTilfA)UI1hW0lXRJh7b zZm@WYV~y`^P3x~-7NZV^J%2W98Mv!Bt)D(MG>AM24i26&S64d~eq`qlHJ+bXc?T6W z1zVq*56rsusRw!*OG|m`&FZyS=aAwl`n`DrZp<7kh^JIbKoiSgUsfVwN*BYi9Ciwl zawV7{>#hfhzAIHeMi0WXIE`Y%M_f2tq!(qOTJjsSzgFc3N9z)E zDlI0YE{l-)I1+QhH=%h@HqU`MSy{E@oG5Q zvyX-!@qQL{SQt|MAP1r|D~2p5)Y6E6#$be^M^u6DHqb1K2dPg4qFY2gp@5_k3d6bO z|4fmwsI1ILEx)P?>|`2Nqo6SYFMypf;A^2JKusPTxEgzcXFbr*4{Tjxo`6s0-fG+0 zf;B;Y1E)Hd@|{8POr71-A_Vzb|p5>CB^Ff;~el^5VUHU{Y5%k32%(s|s2WM2XF=BfRjh85>$+(&dI z?b5%eHez&YGplUpQCZ`&S870xnQDAfiL+Ysb{koxl}Uu7Ll`zJzs&XKz@F(cw}Y|` z<_O#&IDFuHp6j@y6vk24BGp3=_zmQBvj8oq+UZ#t47I2!kKX5v31jRnf_C6qoDRaiyqzAHxkY`}pfsVB{4KTOPsco8?`yy!zygYHgj9ibZ~%^6ohxL zot2P~5QNPs?dM`+U0otT6D?vcBoz`RP$7>R&x9fn?6$79(q4WaEPZcrEB|#?7SonX z=1yh)LIeQRX$J!ED8XqbdD%*;ss#tC>CII{l87yQ-}`_jRz7Ti)uw3P43tv?16sl} zuw@uL8_^ne<(cZKLPaOyL6*FPhR@@f(Ap z`sY)0Yk%7~+OD8e#2Ab58C3i+^)V6bkPCv$n1@XQ2Jrip7ih-|^CjN6duXodA(niY z{#ir{%0#hyLeZdqdAyjMqAz*!?|n z!Dcpq=%#Yu8_YV|A7z%*u7mi;&7IRq|L30R3kPWESKc}yf-6?C~72BE0FuFmg$q&Rhu zNGb_S5kH8!%n#&C|KFxGoTTIjre&q2I}rC=XdT~dC?TpRyK|H4QCk2E=y%PH-)*+r zc`4xcLPd^55>&vg^>tch=7gUOfCl|!fm$vuL-I-Bx&h3Ydw~H_1Dj6SBE`kTUg)q; zZGoeKX^VXv0zM@^YuJY`Z@-3QYX2;sbrlpK#V!#Y{ib>shk@#i>(bjWd0O^#DFUf8 zg$hst8NrXzU5`(XTC-_|lp{vfm=QJUVc`e$I?p;^fj zX+u}=bCk+#{V(J+5BvWQYI>#9@{rHZV5l>EVpU1I}fBj-F`I8@^PbqA>VrdX^@K-TBm!on6Vx&~h zgT4E>jsATs)^E;5pBm%bNnNSqn2)NMRK(HILG!i@eRX+R(keh6qRfH61SC(H*7+v+ zXrNgkCt|UpilL?XyIoTr7!-aR4W^W0Rb<2B;)V$!qJGUxRA_O6!4#>-IWxdDoGmX7)M zR^^|(=FkZ8+Gi)=y}{W62LxiEUsao?rKbmt+N9BPcz%w1$j7Y8%F*l9+tE=u4W~NL z0kE=SBEfKhVpLLB@jZl5D$ZS}SKKCnHmZ=kkCpe}*4&|9ibazsp9^%Ep$o2l52y1p&DPm<=2rmaQq<;eNinxDX@#yCJV6cm}tCugFFo z83bkkm@Uvx1?1-epFNbKn`Fp5ySS(|rwqgf&ozY;NYZbk zZT63Wh{xNTKL`~dDKtKk$s$rvgwq!l2Ry~I6@$v3R z0q;M@0|OFyR@Fo5 z(=~Kik-zIlLE$|104Hkn5PSjx-2N&XAYrh$0cDqt*A2P#e+T<1Eh&yWHBO%F7uS49 zAn%vRJp>G7SWr@9adHGWftI)Lc0>{?_a1mV;eHiSC{(nfbKM1G;Hrw68Y9~E(C#&G zCvfIzM6qt>(v%OqAR%8L;CPSH z!W-n4gUmIN{==H;G#mPy{Yyj$pDfTT6!f%H{ZIe}(iFovw69O;{lI|aq4O=EdR**H zR~>JUlAaO1lhe_$ejJJYp$vp~>gC`Pn=DC__i6y$UL!#_>;>7ZJHXn)R{_>GN#1YK z3IXvBTa+sx6d%9yv#f%GLf2>6a_wejZ=4Br?J+Q)R2$}*HFp&}zMv3@CF^%Nbo7j)^2&L;&P8czUto>Ix&qJaSw5J)VmuK-5|Qc_azj&Oe{GZ)Ry|gB@92?{=2(j4Ma{vJPpV*);fQ^l9Xb)t7@!$djK~IkI@zY$B zUk}F;yU!YbR&Ax=FCE2FEOPx)^;dQUp{ki#Z?nYjKc0_BD4{A<{w^wr>sOZ>6$&ok z{TNq7n3eTW5p`7K0*6;I7>g!Lu(Tk!=P6n*JSok2$*L;JnSFVf#MorZb1TVtdG;!4 zHc5;X%)QF!O=B6JhdXKHqb09*Fir6j1NmH&3i%%@D=P~N3qk#&5)D|9TfQ>7I59vY zrT>d_3v^Ps@?u)MK)6JQ9R^|(v!{zoB4=(xm%W;#vK#PQ0$r5Y?t1RWD&Ug^Fgi+u zn0zq>aLIdPPUXjr%F4>X?zh0MYp@zQ4x?mbQ}UqSmBq5KZ9!Ui`_K|S4A}o$kun>0 z4Gvsdj!a>ov*P#qk+<>E2sr3azgr|t8Kg!~2Y}2vM=(R9Ldg{u413LsJ2wUw1NubtZxEl7^xKjIWX z^>5Zp&bb9B*g7BPS5`9c;ZB5|dq*KLT|6KqJ5bz{sQ4Z<>DhUC=`a9NeqjKhx1*!w z*;)9K-(u*AfI@iEVU6nbw~I#+pE0U=sqNw^}-9p5eggrwXZR361=9R@3@6gaGua z%?`7IhgSF63FzpOW|o!?cX#cuz(BJ)P1@9JONAP%5D2M_fJ=tSGt|}$WH7h{1X`M! z_oo|SEU?1VS=EkQVZv`;U3hdh@TL9ng1r8mEN#Af)leX$1eYDW!1iQ)7f1_+aUk7H zKE+E{lCW9h(7zGkf-rsQwN_&o37(|Oe!w+ZMl!;Q{wWxPCQMEbs1ZQA5R>e6ef)v{ z7Z_}`c-+_lX+;cLl5Eg{{LzG>9kp@ z(U!*Z;Eole^~4QmNF4u2Z`Ox?6VC3`$pU7kz&_DTNQRseq`_p^b>UtfBLhj_io+PE$GW{V`B!6=;VIs2u!gIEGFx(i#w#H0`dzIcA0x&%7PyE2>EP=F0=HFfHrOqFURcRoNJhl!5$ zgMB{304&W)x2RktT={Vv3zFMkSVem+Zv*=W1tU)BN^6_qKDB2-^Zs2v8J+F-c@?&;3GDS&#I!80#CtySll1NCpGLelI&;7|CJKH+n*zz05BA{ER0M$Q@ohdCmie*CxxP86|*T`fo%<}*rl^fp+#b2$W6vz9!Bb>A8J+1NJ30s8elF)>&q z8{JSxCq2h}$Qe3JgEifPdUI>5RHI|PT#`oouj}e{QLkO}{9J#Er-8!*qUJx*;+Pf= zgH#FqF@&Phi_PwJ=I*U;2RfY6)_Dgc34w4KRfCf_wsVq-Amc6)oZ0@Rz*B zAhypW{{2$O8TyHBi!eQae3E1i2v~lEr5HN*n%)w($O8 zZ&-cKI@QKo1)sy17_sKQUz_Wy`Z%7A1JZa!2h^%Q(Tkx7?sMO~_EmH=dRVCyT9;=N z?XBPm%mU;mWCREwdr@gSA={mAByTwt7A6rk;U89Wct7#Mj7`?=@teF4JnV1Gf-6b_YyixN)vQQ3WWp z0Om6CHDumF;HaqQ`rd|pou7=SOm|cZCQP-p05|rwwq{@ytO3(*kg`6J{ZU!%>kIuj zIX_P`4vcz1Vy-e|#RJo@Y0W!O>^3$v4Zq$B(0k@-#F7AbgBjFZU;tG17J%_X-f+0D zOV>F;X*I+N#HuuL;x(Osg8OVC2vS-v|Hj72$q9gB09KZ^25i+{(f^&(s{Z_w(@?`H zD`3nc7O2vP!5^aZz74w_2Xz8%;=)xhcTf&sCfReO13Z3EHyvgqtW)BD5l7f`|j&G?Z}3tVDw|6+o1eH|YC3-j=4w$paqw z78Vi|wRLqsqoyg$=ly6&DUm#?{O=TYL0kD(qME*GYo+_^(_e2`vz4eT0}24hPJo5D z>9z;1Iq+c;C*COc5ZSO(d(}$2JUXh^Ns4hgW(_U#MY@tYD)~KdcuWlJASc$usYSg- z7Kq^m*KdwteCLNJ%Qvl$RTN^t7OEbfknmZFW&Z40U;P_9aYgKHe!=BW`EiUV>;g_Z zelTl|6L;N`a95um!4B(eo9_c%6GFfj#~V|=^eg%!Bn>`_Ee)xpWacp{){(7Xi7$Nc ziRJQzsmcwD{hUn< z0U1h9@59y`15iv!qm(waT7*eqBEa<8X|aGu)_Pf(K8}Hoj&m85g}`2J?BDxP0k}D& z=}J(5>%FQa!j}L_G{;?@s@|k9@peGrS8v0;d`@X86*(!KGMU9}Bgdlxnc6&m2PNaG zm@$xm`gD@`+yj)Hoy6*Xvd3(lx!%#ganB>81Dnow`89adhk(~b7U1=PU1AY@uzrrI z58yeEfyUfVRV5%;fbFdo*4zjnU0`A@R<^Ds7D8TLosNp8%EJi43b<|gk`xB~EoQfh zlU()<3n2P9es?)u?~U#36b|`7otl#3et%uL4EsHmkZ)jUNZleqo+}7_NgQeVKWok7 zyvmvQ^WdqR10IMQ)jMaC>8lRlhq=PuwZ6U%Ttn zVPfJNO%n(=Ao2hQ48RaAFCTua)Bt4(PZ@kz9SkONR;zh033*cZ$G25jRf#$e0P?E} zm%gtuFBT+mExc+d88YwRs4^U#`UR#4lZDG~QkLY+5Y<2N&$kcTDZL~q>@kvS#tWlSl<^$knT|Ev{KqUXu zkNov$_!B^lwEg=P2ve)S)9L>ufvx_5Mb23I_uKx-MlcZ(dU#H%&zV)AxiSF~+5h25j<6ubP#^*>YOj)^tE*ZoIuj@7&BdO| zRw`g>EH^oqZ_WV914V3u)4?226zYR;{q*=S-_Z69*ztMJ&CXIGlEsRtwE1>Uf?(Lj zKRHoh?pg;X2sJeqfXxVQqVKCB&}T<{{R-k&D*{l`k`;lBNYQsasd+qV2ZYnFEhp;0$l6G;=d)tU^zQF0)GqjY8PD|Upiuj z;zK|0nq3b*etv#$59)+|0Ngve_~rzH8ImeipMS}8%`@Ef+>`+)JSG+v13F+nR6T2{ z`v6$KcJ=K(!H6B8X!`yV6cU+Yqe>tPg0v3by9bz_X~LlIC9@ta{0%r1K=^AVB~hjd zyq_baTwvy`iw}4d3CX4-dNOK0vr!Eli9^_9&wweH)BY#a2&^Z9@KJTrU z3UXOO8OG0;dMhg{b!)L9P9C0;f>~w`j(0(CJZ@Hgjm-Yt*uqPNmc{gM0CxtXw<&|q zyb-0G)>dy56Uqv7O0hNoO@(&q1EIAcH(Pf+C`$8jL1!M*o5KcNB{1_1p~K+1FlM0G zM785Eqc4Hcn)9Id`F1qRC@^lU=A&q}fG?@en>q(q8+d};znA?{Qv>P_Zk@S)#ZpaG z9IxXIKSUvue?5(?RE^?1guuHhCIn1cfGkQS8sK*Gy)nk##fsGOCK3|;zy(E3KkVb% z-J7yAUvG`S!qjp9vbkza$y>ay0Q3Vu+Tg_$m?(mc7bnoCa}(aTQT5hKttC6VBUF@P zJr@M47is!REB$adfkSzJ7jUMhd({75X0@C=Mzl1k=fd%PSbvfm{q<0J@h7}Bt|Ll& zO=0m|dEhCLg`NOH;Xh59-eQKLh9wB&OJ(jhHo7`yRBEYv5vSSNq-y2HCv7fJ8Y@JA z5oxYn^IM0F^V?V8u*J#Q9HWrWs>_y6;sm0}* zP708#4I9dmz*Am#^fsX{AwE9!2qbbqxirK6tHdkXwDfM;1qqV-S=9!vcT>0reWj}8 z?u4shEDKKD7eLCa@nPBIc0Qb8*XynGKf`RqgMLeo1TIZCP8(||!IZc-81zwl8{NLm z{^DEYg!O-u*Pwp`8S5FmVvH#{`tvry)92>o4FIA}a-!;I_zN8G@!Y0O>6go~3R3ThK55Ug*92c&oZ2MQkO}GOK5ixnhInA&_8k$?&+GuJ``=ll7YzYiMxr z*{l-OK)|XK3`I+8B&gDa;H}98v_@xrVC64tLUJ&*mzGV0spC$+OV@cjJ0ZgX8jLUW z@BgKw_Se#C)}vx10mpb2L9N7`j5447x}TZrq`#;X0ia(?TUA`ebf6^@)<6V?2`c$s z)|OuOKhGZWAYr7DpuPgNTD`90VEI1@jT0iHGU^*tW`Tt{9w2iFmLLD3hJ#=YeR{l$ z%)!K={j=r~HZkei*-<_QA^3X|g;8qq8R;^m&_k`=%mP`GQ}a&=71~>AHHhb)22fwe zXFOv7>;)ke0x&ADr!_reUSL6t7y=Lrludc&=^(j5up$Fc6BH|Q=VCwtAb>%9Cl69? zavPr+c>%aqsM{59ZGqRR|z(FJFOXA0qXyOjS<&cPjlmwE=O~FVI6m z2-q9^llLJq8kqh`^AIBo|4xqoHHZG{M8xc40N@7ai%8JX!hn7~~_3WMx zV`F9phd2D!RXiW!_dlG-$Hc@;&j?Ne{CgG5Oic7_Z2xbpg7yEr3eNwsivRv>IHvdP zjDIcP-oegD?=v!jOX^QgjYtCan9U}LhoG|`1<7gRb|tj$VZUwyp39(}q==r~vtmGQbO;$FDFzmDcu z;PG;RA%Zuv+Z)Ipy4%zt z;wMbMU%lO2Jh{``s_;9uby^XwgB9K2Zg9?*xJJ_u= zB8t4=Y+vu1n=2J6=r~eu@U|^yAT4X-(?6XZ54Q4po!_uGj?LO=oKgtyDUCZ6U)6lQxOyrc9L8Tjbi`1e9M%-nEd1(g zfx1|TT^+w>IbPbAyYl{GX+3Qz9DYrwTkisI&lB;_kP*{^Q@4V28WlTD|1D-e1r?EJ}p}vMzf7pMZ40ZtW~>BLfmY9EoM=x$IVc# zr=53uDQgZcw$3xTcv_UbzK-=@eu-W;%WriYO3gSLOkTQQ&6K?_D=yAkRQR!df4+aX zx_ZdVE8P6E$=ya_!YaMm2v*+N z{5|HFn3{{lRwXZxbmhb@?2*rk7MjPt;`Nbo7CDtWa7!5`>{1CL83#rk9J2TqOom1l z?ZiH;;xS&WCKqXm(mC=5**fdaDmO1Qi5@uEyPWQJ?`b4jw75NXh6z2a_wUW8bad{m zO`0rg9`dFj6`^NKPLhx%2sA|0sXRRv$(Du0OSE}0F}qFv_`N#?aXzDLKoq#SYX%`z zxFeu=K95+#7K4-iaM<+ZLpSDJuDf}osa9aUGQI41bJt(|_~+(mwQjk2MuT3huHqZA z6NKdk<>I}LcO`e(92ydGfClPAhVRq)&0(8e$?ppLIt+1AXW8Un=4nSZvV={NhU99z zB(GHJo$mImm3jtxe&e;oa|*+ z;UDRJw!dE1c6n!x^|AM*VB6fSi;HWi`}V=Z zF!5MN5W9HlVjYg1slXPz*-!=Af$uxwm53wVEhogqoU7LY;a_pg`RlF(6$=`?vU2LV zx*Jtu;=F9{3C%sP@EWJjFAfKn&V|^b(C?AKFMirPuz=uSI+Et9t+~aTUAkkq4I&G>$QB4zUiw~48+n8C4a8kRQVzGZw?9feK>mya%c#pfwDV)j~B+a~x z_}I9!WM?(UV71Bo&TEyxWsW5Aw1xwXnE%5_YL*)nwmvymz6-9So9Iev;*97}J{(7xRk9R?jbDn!79>&J6i2 z;AN#DOKAX2&+Kr3?v7tMpQzD!FVC#Rr$D zLG`A1(h8{o&dRDDNYkxUl_kqC`Gqp9r6=0=1lSB0CU?K2s?7at{Kct$ij@ZM zVQ8y_@XeAFjFNL2jnaOiYdeV^CvRGj)skmf5gbqGgI^yCr2o)Sl`C2R^I1f$_l7T9 z=+Z}xZRCqX@zc`nVhl1K-itK#`_BrPnGU%73-B_9W<@%%MLKo}VfCKm_!~XDNm@Rq zjz-YhrnHi!YTL$6{cd+Tn*(XE^YhNjjVJ!Iye*Dkptf*36ic1-9s$qMuREhq}Z#@)3Q+__I!y<@)0&(E!Pa z`JXMxZVLVc)LIgFaV}E=)@(Dsq_iwd{8(sSlvW(lhb9li_*=43N;S6Lk4s6Ks&x=1 zkLyWIn}QYw?js80J^I2pM2X*-)AT4Jk+p)W zjj$?jbY`>z?pUMQMv9$`tvib%gs=}N3JZC`hM7!d-HEtBZDq=wL~mLfv_60+$;A*T zMd^JE-8^q9F8u6_?5A!2C#VX~u6{p|3o?!rZc$$uTc3PN`=0PVPv?%HQ!wqEsbZfE z7qO%m`3(WA`z7ii9pN}dUMBYIn=u&FD>f|aF;&Jeb6=cn6h~%FX*FB#aotqa-&^r= zjOleN+6c^%;A@#_9cQKHO}e{EJX4z{Vfz(}Re}wi$0fPesFLt(&HO7zHn#j>Pi6Ee z+tQ3;)V)AsxW|LQ8E|dtvnJnsis2CgP`lJ;d&%9#h!OYGQJx zE2-KMZHqn4TIfO@F{FeYwS4hYwLv_^ZNQ*?VLeI4ZfVYCvBf{O;@CtR@~TLmz_dQ3Y9H_6 zN5iyY_-Gz$;P$}qYx&pYE3)nPMVAF?{q-$=IzIy4yccfmGX1*UA-Gw-owfapABTU- z_Fi7Mqb<+G9McQcdu&M%{o&TB@<<@jY;i|uT+3004z2T?~z z^rvyN5A}1d<#&?YNJR!!PoBwN%OnjvLgFT$wLYbNZLjAc3)i50C1rfUHDySTI%}wW z8tMa)zhT1yT@{2huHUx zgy)9|mMi{VI1smkj{@0C7#{xA$Zr>{y&H5tz(nfTwNF*2sO7>ed*(Ws^4b4-5ihvg z&?R)~Jh<;3VZMehIQJw^Vu_OnG4?b=)T@bq|I$&Orc3WQO4;PbN%V8b=;+V;{@nLd z>AyrS6&}`HWHP zd=J;y+!J;JdTin+ekQ?khyU4d`iDB>(mQpAfry}1!9AkYuTY-c4=!#OI|ok+{9dR! zKPQR!6ICiu0s}u^2ww)JU-UQ}T`dx73s6PTI&|%!?sl`oUFUKvn9^#^oUFEfXeL70 z)ba7Y>s2cgtt;J(cRmdD(W=Jdd7r;UWf$RXn{HTe;ZAQc!xCQ8i`K$7W_`|M8yKLt z*e)zbB1L$spSzO4H{V%6JQVZo&E$rS0P0z^|dS}m4RXE=w ze%^O@UtQkp?j91UmKa$xfQRmN1?lD1#y#DnGko+B?yhYe4VhkN=nhtzy=OcYa+W#m zs=)^(uP1Q_wa;NGAF9!*2yayfYjqF>(vv8tD4v98X_JMS+vU^Uu#hJV>?tX6h&sRA zF;kS{5Q%?|PUHv!xlSvLeHM{?SDhvbL;JN>YfU7N>G%t4c;Arur=4}>^v}n__tW$y&7p`1QxpWlu$T7j%gyI(mWil??2Q_>Zs(;a;h?4~KVSZY6WFh(}MxQD|{U zHOGfJMx<`_DeI&=2fr*uk8KtnYO3-uAa)Hb_}rd~l5r}hZ4lMBE-RW=JNKZx=qA-g zkZ`Q^O0yFv+#2leMEIK=pB~+w5;D{e?!-`*S3D#ZFJ^knij0mJOK)>N<1JE_U*^|v zyU5H5JzOF+VXa}joEkph;^%}u7=g4tQaMKY`2g|rK~wiTJk9;(bpGXZq^a+R zE~tl3L(P^Hyl1WlMM>G0$EWJ8QXB;rzYj;u9Nm z3l(@S)*-sZBq!;q$JADn(ub2M!OJbg&wSyKW37Cz5q~tvqP-P+;m<5%OjwS!jhdW2 z|FkM8ry^CrJ9JEM25pkb#Up74wbj-o~Tv>s|N=Uvh4C4q-Wy1?S|fm82_r4q-Nvlq{ZsYALxb(JF;+K{=b` zgO_jm30ywjAx&vWX$*E3I6%Xp=Ru&4*I?%une&pn%1-k`4ag$b(jKt8l5; zwxL$t@b}u|Y!^4S!q(Nq&x-}ELHR1s_jfnrLl3t*lLcN@ZfBjk2-|o-dv|o{-~T>S z?lhr)F~77jFsR9+V3F#;X+q9}FYv2Ky6|FKUy!EJnl~3&?o;*C-UDxY?Drq&`iCgR zd}v;K+t{PsGD8(lXo4&&naS$vs&vD{Hda*@P*?%HZHL??(nnlh*nS7U*YWHO%f8zlix%~^{-Ecw_cw4p63OO!Erd|x{VCe4$e+J#E2Yrd z2^C>>${<&9vi$qhTaNFf!Rp zhqdF<8>mQXeP1$BS&-Jh6HB#|(LHCtcv-gZ=!n-C&LRQK5Vm1}2J9#Oe zdFn44j|1B>d@lW3y)3pRJ(JsitS}tWABcU_RkMEVUmpqIdz4n=$bepL;3X-)c-2+c z+IToY`Sw6AejNT2#?Mdg8HN+kMnge|(inSd&@I<-B>Cyf&9#(Fkykdg@(-uR&U>>3 zshRH=ybmqZ6Yo68aD3I+FXzW`$5BTVT&NwN5@pQ!r~E~(XOW`i&l2DC?DIP3iwAi5 zIs|;)R`V=CoZ9EF?`Y|U4!`wY>ImVkL403%XFRQ1zOVPwqVyst0nMeb*~Pmw4{dE? zvMk;&LcOfN)iawxd%>e(&PbYac`pTxcgf!;{K;J8;pA~}5!J{3%%;K?>FevKvc>MJ z?xQQ658GR`eguZ>CDvEYlStx3P`qdDX|3FCEK`1FHH)Gm`A$2fNGs`|@9P%7AaHS? zjiT7Fa>F$7TTQpu6h~@nuKV9pgPU#bVRI%Q5MBzq~`RtfFIKQ*UeM0y8an&Yv&-eM?qWg(`cazv|9*+_-2p zT9gQWShhvp&p=zLdJ$8SU93l_*zVGIbBjAyC{n2QL#_mlL*L|Fz z<$V6J!QJVOlC|)@Dj{*^Wb zvOviJo+CSrC`{34(w2 z2?pL_#*`Qnzk81;=_@<=qWcUBUsSdh$$JhITL zVKmiC=HmTjYT^&)g9(LWMajluw_Og=2x5m=DmJUr&sc~Of&z(!Bg!XHBwWEgbxM+q z4-w*prGNBNv`9svk8u-`G_ZzoMja{05wi!pSR@sqdY9MQKEbCU+n?n1)r>a(yG__A4 zo;S7~#S1=GF|STs5$a#W_(j));pLARVtihsYr|CL+qP4uUgA4vY#99Ey-L3FV@^Qi z91V7nrP&0sZJK+>Ryds`1XoL3LE}=*AKGRjOE-6OBMH7l2ZbQvKn@FI-9Zy`Dsal4 zQ?VuUguoizSj}-%A@{~;Wwx@B!;fu26dUiZ&?QK}M3UQm7BnqyY_!k&$ZQ_w)47&K zd)<6AytMZ(DI-hvW0jBbR~Jo)n{F(9EfOBe7MskHp)UM9SE*{`Y<@4h@pKL@>Z&6mG#5G%04prmL20wo?(OU=?$Ru$)>zoG{X#3UD(yj=4 zPL98m`OOoB3-Gl_AlHP8ljX)bf+cvvkd2T(oPpq%@21{ThGp|Q<;Pz2d4-l}ll3M= z8mp4N9&e2;+fGfA7tW3;#17QRuV~y7coLG5!|5b#4$TP(00qi4X4c?>~+ z?IM}2{Y$ZQH|xz^2eyoC2n1TbM&Pd4olmH)2ro{F-jvdOot5A@S~iJV9Y5bC564Rr zwf33q?BK!hthaoLkm19cHrE#qUmte%#{b-{RyEb14P#ZVOya-0WA(}*Kt?@mv-QTd z5Z&FD6p=fBDchl8NW}yvJSBLype8hu^7w+?&}2=M#H{+C}4L%zAZ3WH}5dboTcHA;Ks?CPpf_@vfMBrobjBci4q}CiMh7uWK)<0s>*GzNA4pg)I z>V!gWmr%%=2}FHqmaFW?_DqUi&JP=MIgJ(~d>Rxh$0&F^^*eQ}P~9-;D%$OsHoJg~ zDZk5-f8&)sIb(ccO8YkqdvYjM{h?w?sR68ZVy3z;YAS>2Z#gsK6D20;1O`YnyS{so zMK0upg`(Mi<$H9GS;#S6&VKA=Gy8jYcHwKT;Nztwy!_ z{QmWe{@xpQ*j18HU`Y-MAqJ{F1&4uoT7=Y9Q5szttB3C`6{z3@8*?xb8?0zeiy;jz zZjWwRj=6&4n7iD!t_^fQF%oxXxcY7TL^Zv|GiP(A^)H;%?#B9!;TmYGR$WXH#`~jb zz&ehLiLG)azD{q~!MorUTod@t*F(x{dL zw$OJG^6#Vic0=i9_MA`2^nLw|*+cJajrVcWI&Wkp=MzawizO-JrG^^D9O?HI8MA48 z-mm@X`4GA`^A2syaqJ8t(Quu1tC!=nXV`W|ZpVp3Ze!k7(9;?YJ}DyYs83YdA->az zR>}WBiJ8ECPZ6dgWT%tUpMri7hd8Fdy4Q zIU6Pcwp9SF>Q}OyN2(N%rxCb~{lA%h8YnsoVQ`~jxpvbTj94C> z)qTO(VE&Zw?GM3O!k^D8bCA$PRE-P9hzbrx-AxqIqe--Kp+klt@(!xv-?GA9uGPn= zVhfFu$fst7ecJb^cojl$AsDtclkohiFu4=$*EkOG(b=p|q4aMfNbU92M%s1fDMUuo z<~RgL8%D7*xApxnyDR00W3pI!S%pQtB03_(>pDWHmm@HC-MK&YIP80<@JWrz0TBuL zcx9cm5-}B5Q81fuey#aplt}_rq#^jwp=G$b-HF1Zac!!hRAG!YgsQOoE-uzKy` z_@--D8^HUwoP~ zDxk;cj&fpJ#LB#h4+_m$jQoTNx^h1%<>W1z>nlZv3kq= z`-8c`c?#q_)2q~9F%w#Wuq?Jnj@@Ir;P)*WnKEK@%R0*;qYSq2DCQj2A_-O>3@^V8 zP0m^z7asi*sWAC<{(PFhbQldn`aC2GV!ffAOnh5UhH1w_n6S@1*xs#_`r=B9CYSHa z8;ynz5=pUIH>XJX7z&ARF|2A?-^k+8bIC}5aag^J@05)R#>^)pMd!Y<{HQO=Hu{I7 zmg@Ocxex*xBk~COnA&$SG2y{$J;kcn=e#quA#ySK?;~VmtQ>^j_0AA?+FG*qnDiU( zT;wc&-B0^i{J}ExY6NENoPu?_<0cO+)TX9*?p^k|$bzuv->c_WCwdYSI zl|aeXq~$7bR5zokX%!PII+i#Y=1h-!AeGAE5vY=>8x#wab@7#Q_sh%J6KG(qD@Vy5 zwfE~fh8KNPst7;-luI(rF+k1x!z;HG<$L2SX|jo$zNuAUQGRSPeU&O(ZV{VAIc0uV z*jp4|_Eurf&5T&x{^XtkT3Ni3RW&v#KENpiiXzY?HTjTeUtEDoWe$xA1bp6}MW+bF(q z8xy+i?|hWq^&^3}p!uEeUF_HTn9)TYK7I6ofBBG4z=+=rkDf=s(O-|V;OQ=3Mer$` zJ^F`m@gtFDs{N>EUqm840$s`Pjl~TY2Hz6Uu89JA!3+?%#Yj< z@20Mr{G7PDcDf6+WfYHw8F%har6;9_*^On1^ir1}k*cF^Iv<*X`ZxdRIajLZ&UqF< zF11VFKCFHfe8`__WJeu=uFD9#lVFm(-OZ%ztX_;3Ie4Q1X~tFPM@+I@oP1RF@gV0` z`;e~>>ciT6VIkC+4DtQo`wYVOl>Pl#Tp3}eZR(}!sT?NA5=T#iy%S5Lry-*TgXm{uQdF<D-iDx-oijk+L zjk`_NkBrOAK6CGUzf0!(E%&APa{bG%uLQ5Detns|Lnsa`ZN%d!+B%6l8)s;tn6U9f zN^?&BSX2F|{L7d@1y)Ch^MH|L2gAz#_FVGSRE`?Ao90)vGR?2W{FQUF{4#PfHpG|N z9ewJp8R?Th^b8DVnf-Md$F__qlbH;irsVS3lhY;$eg)%4;|xiT?AW*)!KBfD=}a6? zwPL0e#=rfgRI{C@+9kjq;@D$0E%h3WX;kLzD?2WVmy5cw{<%W+;6#x9xLg#@IL@dl zLTaYt(hFEz9t*mFOtpro(w?_s^>p0QthR*1m`AFaV3KYr->|x=pzDm# z@M7y)h!2^?>wcUOiG~QYmO-DskN(H#RnRxL37pQN;bjXk8ba=qScXyU77w_)}UmA@<@^-A0e zGrEL$qbRtAw7w)_0EeO`Et&7r`ZY`(v9s;O)A}(b+)gvj+V+MCoXC4uS$Us(cwp17 zeW{2FXk;aPli!YoFSCZjl{@fa_ zBBS+4)P`#zU+vAvAH$dUD>0YUlmJPd((^>t`moSR(cfJmhe<$-<3)wd@b zQaJQwtC=yWo(k(~m5_`xBLk#mtDZ^~N&E*V=zi^!7p9Xf25|137{7iJMH`eSa@;-y z*JFQ#TE@vrz9M~3^<{J5{U}C`Gpm~7pMz;;gHE4L4p}~Wth+)a7<$17$Zu_XB>3N2 z<|>R4Td+v-d$l@r8e?dU7~9D!e2RN)La%u@hT4b4oFnL#uHF$-iuDDh8j@-8j6x`qT}jhIo#qind(oGeAv6 z&RiVrz-o=%X5UJD#kKb`G>y{2m-Vi&aB80?rtaLPZa3p%B$CEDh-FAQc~zSO!uE%J z`uwPPPE)1Gx1&Jxljb+#ij4#?wH}5eIMVq0CRs11hZP$S-m1WKWDHl;OB08_)V70? z>Fb4~>&7G8hhD8!Ls;=b8;ddHgeM@@*dNNY)f>+3srSys-RcV3(l ziQmG=r^n9PO7a5?c9PID$^$HR8srm=RLXL*l8t@+1NTj*zm?XsNy%C@HuKEwa;>Gh!twg&Oq5QtaUO zv6X0YoWHWArO|k?M*b&Rx$N~eWnWFHCC3`QINo%@Z~-QMvj{$nuyt^(F4BB+(wct{ zp6qa~_L9MzrPlm!j1^n882VzVDYp9;DzrJyBi*&Vjp7&3JBTzG&<~2?WhpvdP?xG*I_%xFmD7Vv68nz!8shto zXNim~L+L|bq^bQdJr{W>PWHEPs7?j~1VUKO-j1k^P-4ZpY<`ZiuTwmBv{(6-ptl*F z@jHo=e4BQtnO>nhWq2;pYw@17aeI0&`>$%A!Z}jc_^nNFGLmCk;LIov6%-s%S_cXZ zUT4JXMkH?Cx12WbI53?Z4dQ#9Shd0rwmzZkw<|dA!$hc2%yT<1SrCm?)bCSmTHm_9 z=Xn*vq^vv!&H8_^_Rc|;J?*|{mu=g&ZQHhO8(m#Cx@=c<*|u%lW|wjI?|o_Zbo$<-c=bQOmllHOXSpsB?%YRvZQn`O7@9K=q)Sk`1O*7|hjM!MO zAEDcHhU2hn&Ksq1m^wVpR%2-YT-x2>Kd> z4V{rvkN`B2pEOje-*9f|))c!)ccj*_2IY`F8pn)<%VRh+@SA_`4+_cg)0wr^$FmcS z*tsZ|UO^P8g9sYRs4oou+Q`G0%(2jKsak@pkWSSj}bCWSoq98zYA>jfz*!x1<3LZ%T z>P^f{i;6PRO2~`5-l813P=Wps_T|M>pUpbv^VFVCVHTxL61RIh%v8QaJ@Rk>1?)96!8`ol9M?r2OtHYq~oCz?`)B^&bdGBSV*%! z9S*0AJ2LR0Mf!a_$ryk`?dTHvfg6UGVjqU0){RH8`0O4Zf42GxXflss|JSJh9&jK! zJ(aE>_|0~444c5V`+B{;G==qG)qT=Y$h)IePx?t-@vN&`oR!I9X1VOgEJEX+n=ECB zNBQvPY(I@E9Ymk(Sh?VzEX?{?6f%3iMP;_SoS&$+a0}c!JwYirJ%vSVBgyc-G?hN( zoqm4=VA_kCDcSK<^HRDBbfp2XOyB%=mM~zJZ%l44*(cXtH4z@UP6(VX6*iH3o+^sB zs%8R-G4Z9cl@I)1=?nJPQua-L=lfy@0wpaF?X{W$((Fd&XG9BvxTIu6@+10*Y&tK) zWt-u2Isn>sqIqRTww-)F;RYP?YqGV}^ZnwuHY;}6vw|CCp zDRjYiFHUka0OY(Lt*f(VIen7FR6^Q`weFs>98gjwYRCsaUXcI_floszxmjmr(Zx$i zD-pg!ZW+y<;PsiuD_AoXqY#9SF3rRUfKk2H$Qo5cBNU|H(hxm=TmMb5&VQlJwd-GK zbM5{&@B02h8l@d);qMq_exYKu1950+V0CVcA%kSQ zMpx@>@?%@Cc8G7ek;^RVS=5VexoJu->R})azsebFMR&j_>|eKs4_;#$h#H@S<_|gL zq-mlbR7Xi)^0KS%mvu~|i?v@6?{kjG)57HZsI^0JSplRd_N!e0HLyDBpBgBhPTUeF z8@hT`D2c@Ra*FG&IY;R}IBT{FgfbQ+(w9GIPcS#M>K}X9i_fb@;rt#>Z+;baF?e<- zH;T(|1830XTveD zz+D?HF&!p4n5L;k6($_Ix0|P_06gMYdpj4`%ZAH~H7T26#OcX6?1#vPOKixgnRm*u zn)kzU_9c$PVjNLV+n2Q6eRCO?|z{$+&74~6p zK!`ubBsUEhlRd{K&r_HXBiATDjWaYPE}arddjpWG^xG+bY<+h1JPT(Mi3E;IP9g1$ zvPFdfz)#d?yoX^ls1f%))V|*5S?-A%jj6;kS}T!fK%dD8wqvSJgBK`%<9MAW2XWNa zVwHwGHovh@8&O;NPBCF(8vrA(^?q?uK(Lp@2@3Sg>adzVRiw)@^F6>LLafnl_7J~n zQXUJCMY2lSwF-Ef#*mN7>yjxI@Q}>K(dM;a6=Ecva=3}_E-_&N8A-PyKt?jw6@5TO zf-EN?X%;S-$+IRv4qobrlveDn9GZki@*DWf{{S2>Jvwn$&!|~|V2er0~{irMi2_$2a zVH;7r27+@BV#Jur4RbRq!H=8AwybcQ}$mxE9K z3+s4E4nx2PqT4Z+)c428`HCE2q7`D^on@bdQbe2pNCf6;n9z!&5KBb6HP*U*&c4Jr zBN>xU(^Y2PT1>v{ZEF}=#O-yICFgguoX(8rwBktBLAotlZn-77n8;Q;oiiLI0<0ef zF3dQfnWJwdPo@BUqj$EWM49AdOcZB5AENvz&Hyffmr(8q74=cSF9UJ}u9m1ZS(9y>D1gbH8g_eukMzQb`~ge3rHLa0qo z!^be_5*oVC4LvdJWh6ahNTsZQfj^#&k!HBy&4~IQJ`O5KfaIaS3l+p)u;~>9WsWO$ z=0$W&NBvXW0Z9T6jv%WD+~ifbqBXXy-br0jRF^8>aaN=$ApvrW!UQsCn?yW}?wY4J z>QHYp&a__iQxbrmxR7GN4w8|12!Hm_O9CR*wM3*OFAuwzH17j~;{K#As4Mz`M5HvY z3t3~S$aONo7`oV70`dMNFT5-INrwHF7|nQ`tMx%R!B|XnH~|&Aq!TWV8ZqGB=}#mH zxd*j{^H+`q<1Ggv0Eq;d8INZtMd3Z6jM%m&@oZJ6lsev@v?9Fexip~^0uF@&szg;a zMN&%&L4G0lo9RMd1S;BXd(tp6n}h6S*^8xy{6t?Q0rs@>E+gY<1GO)2#~iG|eQh?j z99i+AUTVqCJ$ZQA9WvF0*Gsx<5RHoFjPFi#hD&Y$IMij%>mT_c*j zQT@8WJ9M$e(hnU2T*--Phg0$iNZWdi@?Bgplgar*tf$Bb6HMpWu6?LLSgsZQyAZ)p z-hW|<>w0fCI)G@p2%Dyfdld)u?3wP(+_J$pQfxT_laNfuq^Lj2mKe}2S`K$hd}R3T zgb25lvmvxMfn62Y(fGRu_u@@7yN#rnJBnlt!;3boyg_q(eIj3hD?^#qtZUMwTwWV< z#C^CPGZ8NV*Q{&wP*X|U*rS<}xQ;}@$_Y0Bd%{@qscbOTq6t|i(JuuCZ$~pZwa=-p zkux?n#!M(K#}0>dEj69i?qVHN>Pe0Mz_K17njDXAjsBBlMGYrilVg^vPx{X*PSU07 z|74Y9Vm7t$gBcu^!cFq)oT$IF>7!nKy*>m86M=T>C3atCm~y@#u`_A8|B^s9+bmZq z8vs^20t3{??*Lfs2moMJFP;E9`V4>-`6mEYj{sP)d;?(h`oCcHb0?JE29zbV(Gl;> zq!7Ji6Apu<+Jq;%*ofl%AcNgc#VOyyyBH!YJwG%}F7q9aLf zOLi?Ktj_ykqycUP%q{cu+(tA&f5uI>r+vM4DN^|z5Kbb0rY_AmC`&9(EZPxNU@T5G zU=tMk?~~h^fD2yL$Mfb|`jsRGa>yeZHM`@fV=Dnm3hXTR@2Zgd3-KuYY#kb){yKy) z75#XQB`hZ7laeYEEE|(A1B2t@-Zs$xi?LGS9kA2nZS7Ii@_j_&?Br3HP&*vHy~U_i z;K3pL`*aJAmdx9Ogm^M~r?dgH1(|s0#$J>(2XC2}ET;_yAkpE206Ok8Vq`g9=;j=R zWgR%pl=s)-qFL!6!PEP^OHCb=;#*ssO-_f`p*VU89XS6qmzrnujG(;u4X#a6*W|17 z$lXdRqP>3)6OX9crDokC36)l;$jb0`vCfJx3$a0}tNp6*Xp;?6Dz0d=`_tz@P2H-3 z6_@JP6B6h#?&Q@e<jClv__he8(L8STN>rV`PhgHiMqZ zw>DW}`1EsQ3z9?hzMX|&?iW_V-If<#s;J6nQ)FPMIUM?{(-hy@(`ilbAF8$hSlo5K zGos^Q)`uz_uEem%OY~88qD#saUaIJpYoHJ1<@EdpSd8fDQLY~KOklrMa~_pBV6f*g z;*lz1h}9yN#ZEYFN&BLmrEu})_3nDpuF#~1p<}npUy%& z6xuZkAaIY%5U%yP%1`4;Ko%4EMobN*QJ>YsP==arB(?-r;8HY23|=bIcqabmW&vCb zlG*&h+)3zLlt5oM>bIi0xP$axg_kh-+i5UHQDp0tRYhbod>G6MC2m(K5A?Udap?jg;MqF2yrk~n=C{x8!zX;+a*vLBJvp@~=;Dg1tYA4jyh5K)D zdS?nX_$xNQ8hN;iH%8q45;SZ@;aia7;rdNHwua)UeyZ`^@LHyg6<5~yG~8yI&CQGO zvnjOsdehWWLoEE9hv8CRkbPm2cv+ATe_|p{J5LR=Us7>yRjQktYVAF;&eJCEdV*x5 z&3W^+;|~LRvRfAS6w=n97S%VKp`vr|uUa-xs6{l;wK-+5z8Yfuwt3+A7TbNql0oJ~ zBO4ARt$Uvpk3&*Ko*UGFlOj+Wr;KTa(S!3T`So(^Q?#|DU@)^beZ7AzF;9;sJsYRS zQbIP$qie5bR3;zE`t~GIEOU0Lu=Caq3^t42@9Use_beMi6QEmKSgmxQ|4~9UkRTlc zN*-3obIb(`syC>e?<3cWa*@A8S!5qzk({D>><>&MPt8)?LKg2hT?r=y4sYXZI9!oJ zl;&qs_(a%VqrrG_koRs}uqD%E*n3T+>-o1C+u@L^$5krc-Zr%q(q%r20f3LInL z>ytFWSy{?=@Qx@%piYjDqOCZptT-P)1xKZ5F!u8=3gI0XbT8VT1X7= zibgHCKtUg)F+^6y)Kd4nwU-g+3~8rt+Izg~dfGYo)-k!t9K7}0{8lb7@k4WHkrHz2 zO4Jjc#m6XdQ7vLNl|zh9<3s49QQ4!~l!&vh3Uj&Z&FJIhKN7~|FuNoKlNs715XJ?` z6|IN@^Pz*mjz(FQ#=<;Ovgh~7X-y5W()!8{lBr@5jkeJosu&$7P}qeY@~r0DUg9ZE z%iRb#kPXE3hLQg5s!e%1>V&>CFx zTt0)6n;X;CF*DA*m=T!}0@c=`niRYPc%B2*(D*1Z#8`8Fg$|dbwcOxZ``%75ZV~g6 z;ZmqeeLlp6i3q~-P%!ND05c~dRW#BRvn7R=xL!`(`lF8+2j!~4mNJtvg0+` zD-4&e$3U&0@AjuQ@1N_q0Y~4@y0@powfqso)ija} zDXJdV6g>pVc!gN3O-7zBa{1Ig8193O6Fn}KSD70X<4gXdk~i>PU3V$gRZu7M#~$z3 z_K&;#3Uf;@4DTbE3YkX@9_)P>biG7vH8l=BpSQSr6g^g_X6{*flC#hQEIrHJyxe3q z_XG$!+H(K7I|du$e=uWEaWi)Hax`O*wX(NiP&PAh)gfeJXQO8)WM*fg=OAR_02o7X z5;Aiz(sTV+t`sc)m^=L2m4b;K;HSX_xc~p#mICnV!T(@O!N&9-V)(BOA=nw&nEtu$ zfB8Xl>22BLa@2QYE2H7L#(s zzv&#=28>L`F~ZbrpFUVCJBrO|1fvrM_cUnHqtu3soxTmVbPeSBQRnt93Qu!8cxa88 z03GfuDZDe?5oOWzeJA>YBU_J?n}CSp4xaa&?6cEzcaJa$jSe24TQYiE8`~_SjftMi z>km5*3U9Oa?V3RS&Q$@*$g!}v2CGN=Z{NEkg7=f2fb^>XfwuM>g~*E`-|x%ofRE+CGRg}l>Aryt0}mctl#lx9xVvNc}FHV>&dfj!h#o*a?G-{I5W z?Hv#2xDZ=d*F<(YQZld?4RrH{!o{x#uVEgAxkDu7qzNoY7twGKD*cq%r)M@t;YVV@tGg`t${a1GC!k!Dv@PCs-fbv?r9DFiq3ODIqy^dED|1 znicUyY}X25Q3aZtvpS1+#!9L>s=w4f2*EI2o2gATEaX5l zl&!bY0%%UdRGh!ltfILf8RLGvP8u4Z^+C|ZP+AnJf)O;1yEscbMeUYv5rx2ai#VFo z@>>_Z@9mM6`Fu;ptn`7#vP=boz@SkOKSsA-k*^E9Gp7&eKfIkDnhicFP&`yxvSwf5 zWyOiyke6eLlCKZ%7Dge+q)Nv0w927#!aVHbFP|A}iJD_bO553Xrt;B?e|X*g9aOWY zyjxfZk~7w1cfuUjpwRb_L0g*S1(bV@F?@wwxUUs|>R~~sYG_^cd zOC#ZluE}*(ZXi70GDi9BbR2k=OtL+36LZ|H9sYRta%=K;?(psob`x7zKy`mdmJ}_E z09s~U3Q#nx)ux`1Q}5-Wxn8y1(Km!UqWylu(H3ri8=Bk{gT(|8u$$E+85frzR45Gv z!A}wzIPECG;np+M$#f#{>>|V&lDs&fuSw4dM>cTq$PSq-gy^Zz9WGDw%&nljlT@Vm zz7!%$gC7$0e(;0glOM;aOdm|VV#6)Rq+-u|d(j#bRIRr@YQqPl#k-EnrF&Y|lblkq zclQ^}!UPtP>x7k2-QNJy_P5ncg(QD5OAsyCgLH`!y;^EPT`zlV5 zOWlu%vxLGmkaGLzz66FrHXO3*DL1`sd;%BXUru@oK?QATEO_qT^U9a!_v_O0TNjK;{5m2<- z!Sb6)nnTsP>np4Ar?|&|3o*77d_8OE{ftfW&07x#hQj8QpA3s(B@gDCw>l&e4uuP; zi*B5|Ii6OhtR9g{=XAo^^g1|IKnc<9b+>)sG~Z=j-SUrTY(ioV4mV&r0wp;LWzvn& z^aN(ca&hKnoOjm4vPO~}`9QG*x;?nI*XxHtwzkVRp=Ts_6&N^uM6JrYtxjPyP~;Nh zSWn|X()8R3Y6iDvs$)Z4GI?-;rvEri4jIG*hUaRBM5s`4RsGC+ zw)|xRib~PuTJ0DGeRYQkO*&>9KuRPG$37(1f$vP|DD_A73)pg``IPIgNx?l{Q%StQ zN$Dq;N!Z86uEn3Uvq#keEqiiq1;1Fh`_1;kK9dKoGCAbeV+9k^&xy%yH*g3@Z{}Tw zAbkHMM9UQKJ;DQdsR;cMhC&9B5KXrO(1WK&P5lGow+2WD3Q}xa)9>9Czv{}{GgT|# zi_}A(;MSJC2YVJtg2L8V>g(xH8sVFB$KeEy+ji(yES)?OxY7J=BLGSz3n*V9bhZB^~JbhT?T%?n(y!rmRKzIdBx;A>OO?(~C|Tn}3#K zKLnRf`vEgCdSJsw7)NeZDWmJlJp3{a9EE5hE{5sc2udb}V)*6Jzcx3v)a~adYaWY- z5v~jrkFRT7i@f>7neC67#FJJq&$Bf7tbBd?ZJ}vcvEX!if8<+U<9ndS(UIFx^9V~R z!Wmmq!HtK@U7Q}%;h!b75S*!IPQr2z$5fwa_^V{oErJq-zDicF`o8 z?i10JrzX2QZgq0!4XY4+ zF%45EjOFt`1M3QE$~K&4YGM;7G?h%rK~ww5hBZnNryJ)=447V;IzJ*a7lsCZW!lc>)uWo4piUA8{e%88NZS z)b35oi@3&=JI!HD;#`-vE^0&=+cdjEP*Pb%jt2_Dn(@5JM%5G#zr{frID z;4~m7ReT4F#9`^ELG*a5&M?75zfWOB7jg-UPI@{MpciKrUe>h&f@lfzPPHDs=sPH9 za<^s+#y&ymdydGV>KK_ufBhhcfw2!PisX$nNGh?XM!|dz>-{X(qp@r;`dh{~F zVTpvBJrK;}1@ry1@xnU@ZGuXPm%)+jX$CY{DRhk$W`h-%@NSg!s%j6)Sml#ySdBhM zwi?L395szw;k)UfSS9`)6UMa*yFY`%D=~C|Z#l6Js{C@qTQN^@@266~dmYmb7rg(a&2QHZ${2boLy6<1I4#C7xqSQQl>zMl3ys8fd|_t*mXy z>P)b}4I?B|G~kUVciE8Ei2T>r4yd{;ytByN34-QTd!fJMN0PBwq{I{}p&|mgtzV7; znpqnc#ou>o!09LI$lHh--*WObJl}SXGl*N4gCG;l(1_MY>Qj?|Z}hU4MdbYir*eSv zRe&3>Ii3f`P2`2_B0>zPTaBF(RRQx;K#Aa{==k>YCZrCfhrP()j$MvLR)2?u#D~$F z&VEo!-QB~`{MbiV6A(QQ%P4_Ep0moxOUtTLR(3AB--70_hC1eWR2J3f>(qm}5kk!{*)JthzH-1ZC{&KCk zT`W~DV4H*rJ#5DTbatd=!XV!}p^vGqy=f1si_%_4Frv9pWP0gNQdQeMSdq&*bD`&E zbHr(Cfo#Q0YN>?7yVe^MX}b$qj!j6EY1jNLn;@cNXl;IIX7kq$UC@Y*$3R4*D7-y; zMo~Y4(g-drkZD2pS36?pC-@UeWvapH&)-p+UUT7O5Z;+W>DkC~(q*_C%s5%=9@;+E zqb5d*Q6&?mpo00w!F<@0EyYqm7KI2Ik;((AEDp5yzuWR?&*1f%(tqe37YK}_`>+T9 zx#T!XPpnScCW!`(?hBKR=yJax4K&*KoXC>2mIo|AOIxmNux~&HJ^`{RV#%6`HWJ?$ zyH=^cs!f*z|JKv5Vpnf9N|NA?fMV$?*V}qavYvQrFi_z-JyJhVI7dH-BQIEb)WP_b z;`CR=F8ECls^M3X;@@2h21+msFHqDoFVA#&Je|Kp3Koua$%HkTVTq=S0d1nG-01v3 zz|5K0-lUE93d->1PDjt8;1zXx!sXB+cx8EQN0fJtG}=ATxA(QxirzpcxRt`sY2;%? z*=N#{lmR_$#TEtki5>AwV@Da(Qe8kLSI9o9iuEvfq$AYY>!lU`yK4wqMUD{#E4pOE z1q(JW>ll(C!kO617Sc`}DiI-t?O{}YVp}jbf?!j05>oHH5$OlHW+$`rvr%a=q5{?%Jw`8nZW21s~7rCT>sR`GG|9kql zbD8{&=uo(Yu&kPj$c!wReMvM=2Xm|Pw|^U-f~vVB1hJ)gN(dr&Dt6Z|kvoEOmPHVi z0UNk2x*C5)s&-ZXKLa~Vzd0}RR4G*oSe&|b#+busviv~ZNRrFMY_ewA>#EJ@pe=EK z%d)zwfWz6sQ0<<9Q*W*=Mn#qK7>jmE4cjhu=BLhcHONIrf%E1C|AzZioinsGZU)O) z+#sdG2C1~)t@*3I+)lGrXo4VQs7|@PoW#Pf&gunRUz=Ok*i`AfQrV8|hEAEYd%e7w zq%z)&mewbgO_^fm)Xo37-CCu?MyAwiT?Xmsq9Fft_4XhZC{td7lMF1wL1~r%u!)Jb zSB#vg0BRVav9ZfCWNoIh=q!)PoET<5B2}~FWwIOjDq-I+g217;3&Ueyvf7w~-BPi+ z6uhruM1G&LHL2M}HAv9^G`TI(yJF+zK0HPh#ZtKU>B(g4rWz>|(Ws*TldIx6((pAd z#L%moZz~X}CJ$0gK70~re;+ALcs8$5iK12bX?Q*!+Z6!!s;h|f9q&p)5N78}u!3-) zQ+`duo6FHU*36z-onNV*S{-3iYVm}x7-Pogh}Mwqfv}slu}q75WM@|&O)b1!T%#Um z74`Jj;_vj##oEXxV+>Tr`!N-3Y=65{)x$i&$jA81!1$i8$=5~Dx!m}~KK##joh=7i zv&|b0`*B>g@H`O>IFE$c_e!MgzB?aS-LsdaUCZ1XC(7lM%D&!|fgL-b&Duaki>miW z2XDs|pb6~G>iH0WMijjoNw>~-VR*GYUy(`fFxG7S^gF|+Lb&PA&z8mc zlqjTncZc$}QtFT)ZciCCjhJm^Db>Q3#myuXc0hL(V_HQ@wMz(`sB!pDQ3*Ny3`i!c z1dgO~1vqQ$gi$a0)E*@EFq>td)5*O(r)y_$s1qEv;ieS}yA_mWyr3EgcA2wxt<(dy z{$8^EA$PKkiV$1XgY$3f6)zO+r4pp7`j*N%w$os7&Xp3Z>9q>@Y9RyGd^J1lIcgFx zou<=d=xMI&3&-l1pEip;N4wa6<^O$|4vm4MI)VyEklSmk;B z>QYl>hz{?_h1I|&{sC?j$r2TmzZ2{^uk%jY-u>`$65P(N-KBwepF?s9^)f%Qbii`$ z>!;1ZQjSno`Sk)g<&WZG2>uT`2ckSiJ-jo43g{o~deZmxQcwt)|`XZmrI4wsi$T*Rjqew|86E z&M!+2nALtJyuB4Te9fo10x=btmGQBXv&Uo$0Oe zDjyQsLanvedK_*FTN{Sy55F=&i^>j0bz&qPo>BG&Sn{TJrIg31wc*~7AFaGrGRO1J z75&*;PzQ*n{l7niJKZ;Sfr^l6af_&yWp@qsjz`Z+3AmH63y>8C%;OCo6F7HZ`7CZ@ z71bf|1U<~wc{+(2NjGV|u}K%0{}O$A{(MSSgG;LO8!w~uM{sC!aSgKu^$kk-;xz`( z@cVhwRds&H&(gyV9T;Ge%kG9&kZZKZ4{y-7^$LH^RmE4Or9R|DCUi3MQjyAKInuP^ zRIqm6@Y>wRDo6i@)^vww@_>83-ZWk7@Jdbu-N{O8Ftw|VlMJ%c`}|i9|VDr3R)k6h4SpGhQq=MrPx#}-+${+ z-7CY=3FZ-qHSMfCy1Q)UVmn=)?_-u8C&XZIlJ(kW)THo8luk)M~mGP$h_B73ybF2wg}vv++(|p zoqG0NG9IfZ&iS4G8TRyBy@e3$J_+NFqZ5UNx4=_i^o7{u(sw;HRLuyEAsoVYuVLJ8 zf(!zSLHyjgR^ef6$Ua#bAaM3}x2nd5RiT57y8(4izhyjI*u)mRUWA}WJt}7QLWeQ_ zZr}pxCddl>3Wt_F{yTQ+{a3g0?I%IeQM{D8L^FM}frFo;{Y{03SV$0)czw3`TURgr+Nf}3RNq*;>ZWj^!|4%gaKj9;S+X+gpd%$~x#C-{x&O2Q@1=>V@mJ}Lj%5z2v2r?a147aY>Z6ag4iX*b?5 zzdPPnxPh7Gqsi`Z!p@ABHb4Om__K1SHig8(g<{VFD$kh#HiRCkA?zO%6jS&?T+L6vbT`n zI~`fHrF}6xlyjEqI@twW_&1vjwXp$pb{1ag==-J`Z=0#0xW#tJE!*cxc#yD8ITs|1 zBN`3oyqCR=i+IX<7(Nt0WHBe65qa_pXMLPlU0!j(;4L_I^|v}{NB32^NgN{%Jc#^? zzUqRLjCL00KZwk}e^}mVY z-(|tf#!k=te-{NaI|n_-|4B)(F#hi`u>ChN{JSLn9mD@s5dY^f{7cI*vp4;>K|0%i zbZP&uH6SK7MozZ>hX~}SlZ3|+d)z_%LEvn_USX~$k#4GwmlHcXgvC%mz+)NhxLo;HO_lT->eQ@l5#?L^I&4AfhX3Q~%(wa`U~_k}!!|Va9*3_s zG$j#7zne;JRL161V`cEUArbdABM}!lgL*Nd|Bo-YfBlZZ*Q2+O-pB3B`xe9Z-zb$ALIHb*nih|M7m>TiR~E8@Bt0!Og2os1D2AvRv;d_K ziMuisv6aQlYMO1o$1f2`ECwvTOsde)9oKELttymbKonWZBJ;l6TY`y;C-MDh8R35Wd zfsswo^LMIZ<|e;Bd597p>%^Si&f$3bHu^YP^RWKt>5XgY2}0X0`@WU_hIq;RB5MMj z_IapmX>&tQVV(;-<6Zd$<@8tF9f89B)UfMesP3uVd^I`dH{no;U8Hxsb-;pf`#uHP z;T^^ey+gCeov(%|miPkXVqGMR;r77Hk~4jMX06qm+}3eU-5(!a6?@Zc6}Ed{@Ai!w zkDFVP^CA0|X9?A2p>cne<~_pPn?-n~+^v(GzxmscLDGILd_AW#_RkxaJY|T|gyc_8 z8mojY9&5$axxl@pAswT7C#Qi1N51&woB z>**Xngs^=KgMnOwqh+;5XBCb!tJk}S%fuxlumqn)=^bm7kF(58VY4;cb)p6mLKrDi zP02xE4f-vzfxl_`&Py?+S79-b`H2iWSsoVe`)FC?9W97++qNkiJN1F9h1A%YLsU(GbVgy0~71l!e#ag~%{N|*EbXw>;_ zONKE)#QtD0kvp!(`D&d{4QjsNKB$8eEj?$SR`2R^SCyAgk*IXEYNB@=xkfyy?Z>~h zD<#oWtPwMQQZ+jW!hC`xacr8dNE}(o{gNkmnRH;((5X^*N^3ah0I`n2a5UetNorlQ zltV67smSCpLp~Dd@qD2PkfbFd^)F-7N2uavL$vY+eymvK1~Jv>wX4%>IUB*w%35ad z5U_yoaZ; z{pwAj$1lpzg*hSjPSME7wCl@*-v!%?qwGfoNa6ghoL$do>}UyPQakv)TOQ;Xb3|h} zj5AeIg0aNyJM|;*k@dnSu#25c-CDe0G0ioPJ^DR*CgrV+1$F}!<74gtNqojC@7J>= z1$4;YC?9uk%2VOfGM7;C1aU24_PR+Q5`pDDg!_4#{wV}u%uCjy#|CcqdmD-zf8vtG_oIo*fKh#v2OO%f6LuTKRc4NtdvAc~^a5)`Xz2kV-wu0?z!# zOp_{;CACdkhn)CcUmGkcQIGEWAgm6sf2B(s?<>THT%HP5HvENfX4XQ$iFkWN!*wBt z^dxeN)+#40(5DG2n{ZbtP}jg|uWuE~AcSOn_r4Pf>snJ&;@hcq-7mj-|nKl*z3Q`9|B(YQM0%&&p{02_O615nvrQ$^U@%s zd!uWHVUabTNO&si;`D(p#2s6tv(1&yX(+{I*p0E!x{RnN_M)U^zd6kNRoc%me0Qm{ z>-Sl|{2xl?8XZ(6d}OL+UJfm*yUVJdi&OgX0Xh{G_&;)5vDfcpm4@wSX&QG%@lkRE zYTe)<>4>kfe{ZMAeW|Z{RK{XozKhtuDe$eV8b3avSl6uV4%&rHaGAx2wBjJkGbX6sivey~PxzQL)##f%5T8r7Jk5;$J z{Dam<0e$P8?ylu~7l-fSMKoa3)VW$X+&^mzCSe*Qpdji7GUbK&9ca`Qd`v6gZOlQ# zUmSj*7zB@?mp_{5vM4gL*m;6gHOLvf@~(=jRmlU_f!)#d8W@e1*jS~s7c5!ZUU0vv zS3&>@A`FUJ{Vy}?nL+bYW5EZf=(HWXylj6#vrNIoP@g8LLXFcFv{{q5GQ)$(kLOWr zy&{lY+b5Ie^9{M5Qt$GGwHrRS zhaEmD6|==Ge#gfGk9oF~OlFhpuoBlen$jFC@(Gu15RXi7W%!6MnR0SgM)oZy{IM0z z3+h>XbRDKzB4mH_(VLUE#9h-`w`{_uGyG&RX6`9Ej2HNJ!#lv?U3^WP_#|kOe-@7) zf}StGhE@3I3wOPI>)G8@^Y)w9#Z|C0jqN|vbR8Wc*lX7%l*xaghX-|PP)4TWEN-~L z-QPD&P+r=FUTR3QEr*xofpmOK*~iQx(C{Yjw1w9?7^AJwa0(9VVZIUtIsa${o-_JY zPyUEvyx-q`Of6EqXDm=4{M9_9Z7pGr#i@R3uTJO6p~qMAwOw8Ld;P1OJY#XIdp*6X z)cVKDXg5CgC^^zAyDZ!R__kg%5#Gi zE#8C;olpy5r_&f+!F(EtoCK(_&a(BV(MHIk%b;}fY+8%d7!4m_X%egfCLe4azR^D> zN-g!wvS;Rp9Mp!u7H=+geHE&fc!;0GuT~AlyWX;{r-Aymo=eeBPtm0+_fTAk>FDM4rXt=2V zI^hYH<87712|=Y_melT|_yj>A*8fH8EDG`Ko`maYhbV_S_YjRETn-N{jFxA$Pe$xw zPzvg%sKmTzXgZIThM0$X&zsjm*g3rKxG;->&bwSnu(ZGEtd=Jx*FOcR=okd1ma9{l z2*`q;IUGyt6x597TVJB&7aglMmnFwiqtzLWo=vTN-jnQb=i_RpV_E`6V`dHqix#My zCXKIGU2BQ$o;kCR_V8I2x9elB2S?aX^&w*Eq>?Q|AYLgXFaE9v0=sw6VIs_wa@R?oXpUz8!wqJ7Mv_Nx@eJm&9;1} zPNw_;$Ak3I2ny|ZF(s2EX;9OF5%HOtvxUn9yzL>T6h=f^Dt#uv>!|5W=F zdovO0;*o6T5lawRoV?O4X$h_!@P0Vh)7m!a%Am}N^28jfzE%3VQL}`|*`Nqc6c=$D zt8C&fP?VwsEjJ1uI<;xvPEe#rhYw{U_r?ZRp{nC1DFxdX%Uj{O800S7nLqDB8faC( z&I?Vez6r^Du4ChJspDP5Djz6{3;yM5DzhjU4?1U~fiduqrXuJZg z32SA`x9|7oe2I|6Z9IMv*PRB}==}+ygJ_*>9W+n~9BEf5hzuPx%>^4OqZAd$b_73O3=eY46SrSSpwRwrf!vh8r3_mWq#L@#S6%2(Zb zZnq-r8>h#akY>PvWhmj|+Tnm<48_o?8HV~Zun)S7p#*$l${FOA3nGNIXp&_T&+0x* zh0T$gLmq73Ayr_R^-7h&L~dk=N{Y|7rKnPj8?1(`fp`UJN&Q_tT|bitmM4z#r3GB9 zbsHpzo9f~df)-XZRNCC{Oa@A^P-oFC$y@p0j-YmDsLEsBi*lQ)k2^bKDU0q)g zArlHmh`KGSfnLv9D*fun!>}cM3VpO{uX>Kv!Ub!F)Z(JfGI@YDy$x)=gJWn{isM1AHyNGaBwl3=(66F+H@GAa)0{%aTlO!;Czcxd_M zK>Y05NDy3#pQgO&laPz^+K3PZ@w;R#_pZa(<$w!u1A=mSVejt*KTY+2eLro!$&36- zfK=oiOqnPWCC2O{p~gilS@awlEPvy~1QD$IbrbgU&XFkg7K=AaO;QOPj{t0DhoSc`OZ(k`Lu59KD>|U z_WW`#-4UAc-!h*~RRET|-7!G84>@ms@%Tg>+L=Z_L%b@g-V1ds z3!a)yPFFLhnKIjBl$p3a0&hjZ4L3L{gfkA8e9QeBqgu!&HTbyF?bs-dr}nM*ULQbF z__ldfQIQM~S_GD$V%FVUFj$N#gh{stD?KJ`#|c;S_^FLmntGr+!i%r|r}1q9yT3%y z`D@9b-=rT&O5rgoonj*3H7VTfBReb&IQRF_><7_14Z$0 z4;SP6K*i{bx@W&yfFxn^O>6xc6Y zJDoR8g2VOvRWx7c__sGH%Cj9e)J9=k=$$`kNI~u9FS0%ID9!Hl@V#m;uZYKu&s@e| z^T{RqPXQV)%(39n1AE!SPnJv8cL|jH`$XNpEi(JBR7&q~eM!{?dN9BRxrsHBz%w-w zcCZkS)A1ktw)WTg@J%@YE93<&0M;cJ^{dm~NBRX!Gqo9=3!SPiFCS+r&#VdlM2Z5H zbuG^u4Lu>Vs&KpoS*~-Ij@{QB@iv}bzKq;<8Oo>M(Eo$AZ;X`IV8ePsBMH&(3{zY-&)#|NTg-wT@#zLHu+r zHXuGkU&nw^^G9gsH4(0S^v*lG98+H3n31N0gBa$4ce`__e{!%89y0Mf04h%v!#E`eClgeAR@o9syg_gSFc;|RQ~91(v%fV=kNuJZ+Vn44(M{<>?Hiv7tO7V>Wae2j^=0^1%H9F_UJWFiN9?lNI%y?t=@M^!t@KjcT2LpJ`T-GI7|UH| zefC0z^c8~$!^Bl)U6TV|B6dZE)NL0x#@%uq&OltBw8q8_CqQ-MAWULj z{x$58#b8d5Sn{6?$V9WujZ0vKm28O7)@ji83lGk_B6#bqj)w<6iOR;`LdoK|BYIy> z60Lt`+cux!h9$6Tdd8PRe=63nM{ar}y^HS%Plou{VP@8g>bA+U>N3=2i`9W7g}K5E zOsgPYHOnW2*DbxtNVs)Z^8C&YvEnl7fKj(FvI_RV=C&(R_bC$4__X)=-7Mu|=j(^U zo=K-%L`9R^QKFE)V1OZAN9uk(+wlrYpk-ZpC%dTjt>l0tWsIOKva|vWd|hJgii*&_ ziH+R4nTCXo#t+v*ZBK=b+>JUe>QBCm$0uwz(_=;I)pRJjPbs8Fe|^z;x^x4r0}DMRM#}nLZBe z#u78pFo)T=;gl7*rGGpc42Kr-&@wR!?CA7^1Uqatxzt}~%q+Jj?XT9G@dR_HTdfR; zjPKB`sd%69O5yK5loF)+bMb@xcez64_cs$6usCwjxAm;OIPIH@>|T4)%Y`?a zvX#R1)g^EjvMFr+Elx_rfOX|cX%%tvss3J-%dxp(S*bY~`$o>(Vn`>cI@W$%9rbay zk#Zv{zf8lzet|&QRHu0MX3299y>q;#2%a#B+sK<+RJ z9e^;#Zdvo{G?Ggk;`Ro7?LzcUQ4NA=iXrAK=0jw9+GM?cs_x2e+lVkTTt3I>K|k^p z;|>|xB(4_61B^s0FG9P>25d&m=ae&|(i5Qc5KKr0Ijk9EEB8fKt?Std3*ap%E7PK5s0H@^Nr)C6T2W)GB(N3?%^R>K@ED4q zb!=pidNR+q!wkuzR#Y4f?nTlDf|f$=gaM)E;h^~5-x!K+yGYgYp{&%m^^nRW>DURj z+=VQGp~CFmd@*#m*r9S}sfWkG)gkh3p{d+PzB&J6%pMD+CIoi-{0?wn_y(v0oS%?i-g^Kqr$u~M-LewVEK%`r7#-1MA zq>_Qk%QQHX)iJ}BlW}Ts&bn9|J8F;bAG7mIi0wO5iMPQB&g70eOT*J!R9Nc9ogS|h zZ~lPNg{Nqkh9YykIuZ;#a^^(2T1G`Vt0j$f6GNA>?bWGY=7~QWN3NkvteJ2*MMNv%kN` zTX>)I1#;CX=ry&*QJ{$yp@sZ`laDrzDHw0;$6}^k<1l1&@CZzk0D22Yi4T|u>^G%P z7zb5aWQ*l5R2Qv*>1ml^572NlWcU^!0Kf%B*Atkr!A*>cOd1!w*)d)O}MS%K1p3 zLQ8pkKaQMd?ePYZ`N)wtShQHY#he{xW|@qEI7g7HKa@c(SD?UgcnAOSpWQ$bWgdz* zS!iS;0U93d=vmr8!WFaE31d?jeXMy+nUXvbSHp|$&Ps~^o5+i-p}6r<_S&*cG6XN| z6o#nR%y}ll{BcUisZy%hAx?`XE;9$PGe>K|q;s$N!_c$oRE?D)D<^lX2zg_tS51wC zStn`1WMtX)n+d})vhDejS8!+b9N(&>Qnn2lrU{poWdmS^lbqqmk0dS6MCfgpHB1Zs z=WL=PsN5`jK3qP&S#H)m8(<;yAOim_<2JQ)&BRjQ7B1v3x zuzhl4h-mp4W-jY&`H?cUj&{0aF4+6`Eh-d~WiyKSkZUzE7&WGh(gMD@5!z%D>^ELL zN{b2F@n1%{%vcak4Ue83Mry{J6wx{`oTk+Tknq#&(6|6W&q?a}7Ui1_0Z+wVC%elW zI1EYv!}(kTwV$vsu})9L4qsb{=IqwP4u`vx<11Hf1{49UUbnMc7Bmb-@dMXe9?VhF zb+oLo+y@l%Nl(-p;&hZm#Jn4auF)YtDi|Od9O)pQ9O1^2GwF#aWAYbT z+Q2Hen$g9#blguU!2*rodzbyPyc<(wf^Q~u-ry*%<>^Uol8h692j#LlZlEAQCBT9P zRK}Z8UO15Spm*g|C<%iH^*KoR#mj}x4SO6q!DIjrk0+n$AKi`RG;`c3-SaNzLc)(; z1oHeX>h~K7|4%kFsPdel{`jui0q+wMyc^x#TK$kLUN00hk`z+Suix(roJhZ4y zrVONn@{Q-!9IJjr3$+XqS{3msE8HgRE#c^hNCk%mwL>oPBrJY*PfFQ2HrEa1R@uz9 za0zG^?5*I0WZ2ljKmcAb+Jh!XEO2%7z??z$u;3LQ zx8rP35(CcogtaB)sg8%sTR%xi=>mC$;M=L-Gf z`XYWdrVLMJOlv1e@N#AGAicPi~s31=~?9~=~=gQhRn(x87nOFB;iXuhHTKt zJSxJWK`MYG-1MkR{*raZcO)V(6QRa2BXenjgILiPw@rfP*!s~8*<9Z7QS68tj-_0) zliDITG*cx9cE)!->em2@U&|2R!4{|y9D$gr1y%+cPDaKOks zC(=zUD$<2HY0Miz%H&UQkrRvj(njYqE7*+eVvNyg9mw&1;6|00Fs>bD=+t2vSk~$m z#_Yo>-q_wW7*`1wVv2ZH>;Pz!)Rt6%B1wb}j19ik{AiZNREwdDAv3OR9@RwAY)}E> zP$nT%M0WXGAfIDwPw{h>I|!`Daia{#oCN5;g*LJAY}ln{f=3m%Rl+*Wic3vwa6GQP zRE9@hBT2yqvmNbR_Tn15Gmk94g^$RC1bjQ`63^}$<`|Dkyf_V`Qv9;A^f8V6v}@CV z%UEW6;%iH$g0H^C?K$l;uS2RBe|(E9PBh$V)DW-r&5F|FgHWIkV5{C$n$)`aRE$-qn!wKlS*B@vi1;v`Rf8f)$WH3Oq*?~?p zhT$0ZrfAt>Ay%*m*uRHK{($GC2-k%X0Y1Sf3<@oLfhk6(QVW(12Be&tEL+Y*3l>=^ z4BAnwShrk=7ti_sHLg8o2K$w%o&#! zZ$fH#NgTf(Si2~YG(-y~1^;3Wy!0%xCBxN_0XI31VqADBD5t?MnE_Iwq+GV2&o!3Q zoF#jNP#L|Q6yL9;Zwsm9yPo{Z`7bw2r&&iRy0wv!WgWWJ+ve5aIa3+{EyFahd@mE~ za|AuwWl_4vt^*wokV!gZ2d6vOWE+#=kYuJ;In-xUMwz1BFS8J$sizU0gzO8Q@$JqS z-*ewYYV_?n#%^}~eAaHvsVSp0(H4xETjqz|&=+s+?!;OXzyLV|{%-n+EcbIVeinhJ z4kyfyuXjDlJ>fGKa?AijlQMdArg_F;_SRPKhL15am|x5pg@yUUlkq0Z5hR=S{Tl&z zkZfQQ*hv z^K~KyHP|%(JF)OEtoeBcF06pnCe+txjF+_LGhc`i9j4ie;cLJ;Ci>uEc>I*{?T!+X z=BF+=ETG{BxAjSipF`Rl3y84=C5p(#HuHwKadM_mLa4{YX2dpgvjm!=OjTYIn0K?l zyu)i9P6*%q(TK(g^G`hSNj|}a+Sb6&Pi>Ti>OFMcgM72}T8O!n+<+#?lMg0){H zOsU1H(*yRl)au0BovBsc#5QNNjUV;8v&kkj8bLV}KaNFdG;;liyr;gllh-CpiagoW z4UC**((2+?6w>Q15x?~-!szszS|!u#dhlbG0Jr17oJlIB`IR9rt&w;+L@Z}}5oM#- zdt<#`oubECSyM3v|n?Fpa)sShv1$Epl`$LC%(oiQ`K#NbaGznYm8EYm<1BP5n zJv`%%nasA56u?4dcdLde($=uDXN)qx2r|q!CL~BPsEn#nr{S)eY^ouur56h{xkI!b zn}GHjH2sY8JU?CMzJ8h(zUfR)`E>rbk%&t){grkYH++X0D|Q)&I2Vod{rr$vz);{ zBU~PL#Q-A`3{SSKK3rD`2Pf6xcqsrQT^@U300Z{964gLO#5CY6?hmFc=&M2b>C*I{!4e=zpRV8G|&|}T05Lb&0=A1{L0JuxpOh2Dh zEH8P=is1r#v`&+?V~IaEg9EWkD*z_8ee1+JY)?K+wGasKGyqI$Ay#Rz`}xr+4L|(= zm>XU*4#vp+_!sHtAJ*YR1Kiy5P_b(k%(bzyWZ39~DO_`@5&tBktBErLbSfjH&y#Ss z!jBd^^srQ}og}~|%i{a0m*jRl52F#ZL$@%MwoKd$bphX&EPm0{p5o!TY9cJ+{;3-(Gose`o8mQQriLYpk3)o`Asp12`9{C0T zu*YgT&RW>>@~b!M2S8aVx?Glx4sdoaLq}Je2S|k@O+L*E?}*@j0Gz71otyXuUPJvX zJPOHeJFqCc9NnHF*A^MN(IGx;m=pdHzzcw1ZW{0{)Th|v)n+*-6c?c5kw@Lu)8Oll zhibTLn2N!T3TDA5lZF8Z7xXmv<|VWBA_8y}v+;^y8U{D5lsP~kVssRLY;V4Yk?Jg2 zTp9_z9--P{Pw;Eh0dFEWTLfLZgyAIQlHfvaT1>SO^4RQeT5Jbiqflf+Y_2-X2VIAU z0&PO$_Z8R4hg_rLtgEWC2m)-gFs8q2pb~NyCVs;z+2S@y(Hv))Ub0TeyFBs{v4NT@ zG&sv4x?!6tI5rV>pNR%u19YF$y5)b4gRjG*AU3W3Ee`^(IfGvOQwBO;f`A}5oygbF zsL1Cg0oE)&(%6?DQDd{5QYL3h%ZP+LVk{7w)r%VLlW)Mo@qi~z=p*L))CQ9{0q|6z zB|jI+!td+H_DRZM!-BhD%_s-*m@$Aj=2I+z+y?ay^*CqZZs*}oK;s0yJ3BH4Og(Rl zv||T2C*%acIsqP0@Vmq%%Yg4!^8ib0gCW00G;7A)i(%k99?Wk5?1NucX`}tXya3dT z|3Q5k9%W{uS+OI1kT$Ydfra)vau=W*-~x05yA1Bh2F$H#qqLF5axC<}dAGb|v~hhq z4fNLeEwitb8`B5>P%_c~YTwAx(Z=Nswz0=niW4}K$wdp-0$2jqFU#yfVR=qv$an(_ z)@D$>9s+dumMJ9}pxzn%GZo$zV5&FIP9wb}oml=wX>4?GE`a2^e*o|wK`wy*!r}qq z>GW&$?WnxOtnoR1ln$D}MItpk9svEp(NT#ZwlA+nT~Is#`oVDk^lup?xDoLH=-+k5z`HY+ z%D+!~%O9`%!lC_PGx$eJtX@#Kib*OSUd0F<1`abfqAKz60@IHatC)G$9y;R!6O9XT zl9@0OfQbpZNU-?x3v})GavBd74?lvvHTY&JOg8d>a8XN$#7~{{nR%}llz3q)XDL9+ zjLiv0xv;iyrjw*z>_()VT3TAUM?5b5#EVKgwUV^r&!S)M&PYe6it@~Q@W3wO(Nin) z;FiuRCn|lYaAidXyVTqS&I6-8P#b_BDloSMV!cZZf$gz@Dcy=okv2QDVR9;Er1gzb zPD~0?lYSm9OO`lEI66bf-+@>>60YpsqT5!yM6kGP^AN~ixA>j#cXx<@<9?jI8zgm$ zNCru1KlwTd)eHq`B+C`Hbp9x^=nD9YS9yvwLSY3qh9$hiA9JHuQQ!!@%M&c~F=&RHeWmPSt~xlbiqI;K$`70)F3iEyze@a;{%nSk{fZ=g&F8_Qbx+d#WtRReou=VT{z8)_MEgeMp6A_X(4Bb9D_Fsx7O=p=Y(B8+Ehm zvjNywQ>}UMw9WFGCBLaxy6j8|FG>s^AE~=n^nvm|5Rb01dOD#hqht=qJ*b4H!MPCN zpU}UmKs+gMxy`U!=b;X*aE-!_;rvu05=GD(EiAEC5jjV7U#COU^x!@~0Q1iwh+G;i zhurW3dP*XpaAK+)?Y-`owXJgb21F)@gfqVAk1rt_{;eVkvhz=e7-sY5Z_@Q}9^PaUVW{TO-7ktdl35 zQ90biqhR$czD5 zDZL&S)x5+#kYx1QlsIGPnmu&?@k&WpKbgni+V#vWRW2!?%A=n`m{G6(9jKOT zdIQ#d-i8ahmI;zRUA={-oUK3b8+^0tM8WRE-FGG#hF8{lS=ElW;A3M2uX$R9LhZVM z*+iF)J?-%MB6)d((??Vz>!&@b+N@Qf(4|j?OfOZ2I_$);`+f8E@(;Vf+Mkw1I(`Md zHSR_04n{YF2r$d=%G>UU%Zwg(SxnI~|NMQP+I2vOS=qUJd)B+E`+r%sl|6xdd#B=Q zBsYb5$cA9?!2{brtruR3A0Y?fX;@tarDdj+crtg}6Z8l2NXund1&rC7PA)Dfur`5x z)V39ZC4JY}0?`cBq~sIHey-Q@pS6?IPUo?~a|`GNOsLiBDv6TrcHyHf>z9QnHv{{= zo!K;7smgt$^C+oz@sKT8*gPviM*fP1MSX1?jA3B=<bnu5n}BKDP4`A%m{x8?6Foh8E61Ys$PgB|+6 z2bE>Ww?p7Z(*d4ox$g6VOQqt@guUB!O;YOAi`e+4p-sUUm?R`K43*oeOgdRAXZWwZ zwH!7N)wc<~J}=#IQg!rt*e2I{ynC0kjGy2I@*YkQ+_$cnO}*WEz^t~e^J1orAgB;G z9lcxLZj9F3UvgDv2;pv7f6Y`bU6>cH0*=#3U${E^nq^WIrcX7M&Gd6Oe;#pIve%J( zM8-$nx?vmcYoFvKa8~YXn)ZvUrYrw8cV;LZc?N zyamso@=IL_9&CY00~n2&%l0H+U{KrdM)5D&5$uWZO-N3h9JB*<*x1jWGgmN?TGSg= zk+ZBAC$?u;SqI!b*)<(6w3znpN%TBb$&a{ZKpb7Fts>_QLG$5c`#|n7-VZgN^`#t=40av z_y$_FF{)5rfcZ`Cq0kVf!Ig&Z{nDka+=d+v(QH}{yHHd2xn6bOgnJOO z1B9(N-L(7o(Fb(&ce9The<$%2jly_z;+z9{0eMtj@%N3yJG>pIZ3^pgqk27)26sxf z+$$p>`M=Wjz`1NaH-||69a}MVQ<>&Q67a1pjI?ZXHlCN8eAWLF`DFG-!`(+Tr}IDxTK?UA=YO~&_FW7(_-U7H zW;>!_c8fIZ!2yAV^#H@<{^O@U<;AS(pvzfHbZAwv{ z%kuQ~JxkH*y$)zHzQt8f77H5P59@ut`3Ovc991TnZzOKd&>sT7vOev*1YBd&7H);) z;m(2WjLlc^9=C^k)6s}EM43au0I5}O0_OvB5m2Xra|CCVdKK}ti(gK8h(JyP11)Ps zi;dod7aR=-5i&OuG@|Jux|da}PWQz>XGqdFYk{L!%_@w!+Ztvvu6P31rtKb=nrc$de8%xR_Z# zqN$5EU?2|);&&FnH2NHl=Ra7#u*l8Bes4f{+M3f67~d`F_H@n|c%ho@beZP~2(oNo zM}Yg1Fq&UpQ+C)=!^wpuTWiB>a6;1fQHFxprQd14AaY@LFd*9AK4IAB`n!0%du+(U z-vrR4+=BToLTX7#M|?#2CYvq>DH%bChn7UDhy~-Kfsh8U2)N#At8`708Cj8#Cc5cT#BdE&yy@*yRNeV zLwY`LRDBjGL6q>P+q~^=z3YI)E``7$Z_TqAe0lOYk#bhmN*9BSh8o7e_RHqYcgT0l z*ee_(&|4!!K6fP_Cvjw_xo3*!O*FbDQa1~WlAc+B z3rYW&F5uj#-D!BzS)T6)TN$n%0kH{?!V=UaFfmNUS7w%Xh)DGvj1=&`KPde%8dSWE z@=I>I*hd$peA4Nq`Kk*E_{|?pm#Y6sABnSuly;P9g+&vu#w`V_TF>EVxPrUt%*%|Y zB6nGzL+Zy?m*N9|Kl^^#12kqSxR{Z1yIeVU@r@Wa{s=&6|S2 zkZ!<3YTaMoS*$^62MBg$4e0efU|Uz#73vV2bp%yeFh#)=hRlrSAB4zG?!jMG1R@HjH(nB~8x5Oe-t*1*C}&j^_J--}>l0Th*G`v0*C*8jeWe~QokE1#H`m*GDr5wo+f z|0@amzY59D>gl)~jWzmfq<(`wI!8&{Sp8_xSqw95x1*X!=a-!~Ho3g|acccxo}1(EmG8)rc9Qs9Nm&MY3=TLzb-%?4e$xg>t~sMzupUyJ`IPMd?h8gv%=9^ zU9S=#Abfw`6M8|!^KSz2c{xA2_U83<=IN2wE9lb&e0)w;8~A7C`m*Hi(Ux6hpBx^a z{29gm`}}U}&86e_Vdd=Y4}lm)&79an@s_jSe9Yq6C;Od)i^@zDBOguN$-~QdpKR~n z&&TWOdcsa5GgrCJ`qAP#?U#s*hU zF}b*xtP#M^>-ic*&WCwRWa1+=9rSX7Z`Dx%!|(fY`f|+k9;6D9D3h7R9Qfr;oP;4U zK6-qSnCF{{i}!=+9l~E153hRCc~&k;k$9C^bSjB}96(&hYa4PQ6u*?^a?OAAU*jP&C zT&G5i+IS|dT2^w4{HJS|Zhg9k5z32ir>=u6>Ncrbrgz+E{Ib2{#&X)(Xw*reiLpQ6B^|Jaq7KGxVu`Df_4yPx=^KYeoI}|eo|5-VpuC; zlVLj|F=#vk>oSTzXV~R00hOQJ%u-LZ((ZmL~Q|$>{=e7?w7Dyq|}>lk)nq z7*D3oTs;0Cmp`|&P#GhYUuOp;(km{q=;HpKoj@*;@wo!44E{m|IU0q(0Ka3xYggmj zC!QYI@){h!RVBdg7|?=(3nt<6`dCE>7$&@kNVoLK3ySj&3-~@5U6&YtKfbp4xcdfo3qa@De1tB=^Gk@by7z;r7O29;vp~_v2N9^a-FGCjJoO;6l96ai zauwG-3?yW1;#o1Mk2r!l>1k@P2%{4g7{6ah}-JunWx3lhJ226VTyM;f! z*~+L91oWHlMJbYD(6`swfFx$BL&!BTYBfWdyE5sy`MI$m8w5|_L{m$zJk!n0?-ZY| zFsbJKG5)Ytu|h(11&#jwUu=f-;$` z2+Us$9hsKpyFu}+r73p3gMly0b}+#1K(-^Ju&Kxa1w5BH;+kp*s`&dkb)AD6O&24Bm&v*yO3eX zxWU;+_@%V_wn1yp$N^^pRUp$!;2n4-Q(@$22N6C9GTyW?xtGCwn^a6jB@lC~7|0hD zlZm|ZkU11@=gdwQ%vfO^C&*60BbZF@ETL^^4c&}51~?RN7rH87MA&{77(Q11QkP%w2)M;Ro># zs9{8AZf8L@I{k2^K?JXvx^yOZb_S{!R`c8{7x4+(DZv>Mbyww_-nR8FyAQ1p^Wn1~OT^?yNHs zUN8NWB?#>(6Yv`_VJQn+C-^aEECx;G`DaDaiq>dmr-s{ZbfOcMdH0oi$pa>g83(SJ zDpGqUz6<%HnNe3LK*+~ywnNmx*-I=JuD>sJQi)rr|HQ+nz-NiV?GVEsU zhSjpXaCk(D8>PC2o{l@abQCujnyQ611P_L{>l3OLu|)C1&85IBa!8t&G9Akx@lrAz zpb-}|yA;rrI-?|GQcpGPfo7M!08ynf57YvyhIXzh9v-NF*4(YEQWppQ0D_NNY%r@L zEU9kORb_6G)dS_5F3B>hNW`Rs*CAj04dWavOER`{0mC{tH=R)uwptj#$spDGp6t`WI|aku}OW==X56k>$7qj*QT#mNvc1x?7o zAwxGMSXs#3Lx~g-5n!suuS|$lP2sk)g|`i|O^~ffkbOo$GFO+A9Qd)GT;CXVtm6?T zZkR=@017jF78@TzoB*_T!H}Yu_kx3s=BxvOa#mfW1X9lygS4W~ucfAmj5UX`J#W`m zm^(guj&5@g>;^OGZ~Mo|q0j5{k6~YDnNayBB4cC^ApE~@-C$hRiBNA>Y?%EWL1e)4 z_DSdvxcb~z{Ak(XRB5socwc^M*P`R%dhBTD-sKKSIz=^jQwZXN!AcUuV#sxQU-5lLA?0OS>PLnKlYkW&rgQ0XCj1Z>ij8Ma{5I zJJddpjC%8zv%{`US7A8y@k3xnqACxF{;Tvb2VqMjcJ69K?k@sW9ODNE>dU96@6j0e z?y-ZRc=eEy>y{bJXm!S$xm!POE3F!GPmO{X-ZIhYQv$5k@5AF1!g;GXB9>a6_#*;> zxndDSR$+3AgoYTADJUZ52LZj{fAC?kFzo52gWT=%OCnxs4sx>x#mMNuiz;0IdZ=JL zV0Sn~(HByx0{8VUMgA;S+lYA%C|*>m#pLtpV;_Y51Hl7;~T@`T^rxYcm2C~oyD z-@&BSaLf>=`kkOLcJ(6(-d$2+sqhGk2QqS3Dq@ypND7jNG{^Ovuvm(FCH`EJ+m+8W z`{7QW+m+XZf^R3;_1t@c9nd?}_1w^!B$)IwPt*U*CBVGy?#T{M&*PL{bYSjGFO%=n zNy6OW$yb5jgr|hzT|rL}*{n;<-OD*@m9Sudj3*ngfIBzeD1{nus(Mm+!wNNGB8+9leAF(x836 z%PHxcNPj`7@Zox(z!&?xDj96(r}?|70$?Q|-(M7G=h4JTbfpJ%1^$H)wbwg7K~ zb4|=!Qv1Dz-#$x|@fik1(hJ5r*)-+Y4ucf_0n^cZvbVwYzCxc=V4qCZl+??GSXH}| ztAFKt^1Ju$z?k`*z36(ElrE z=7+8I4Y3}eqRTxT{mF}t?nvv+ADKV4S+BxZ?Io}rdeaz_T#ujv=xq5nRn5M zOcG(TLmd;|&?LoU6Y)Wz#nJgoo~(Kq=p9LFeigmdzyFb*A+tFc6xh9<$CPVa05&nN zYnPAxIC66hLt>1zt)(}%ZY@^gaU0ZKbM3Ri zmFFe2?nqW3pSVkz*e}lLjOZsoxI#D0@0z2bGEoh|&Fv4T(`U#^oA@3}Q;Sl+{U0Iy zSC#|>etK@WynyW4K4I3-vZf7oN%};V%Y(wJ7ntcV;OGeVl5A7iyGKLF=c?vGH}uO3 zhNx)3B{(?1qE@|`GaDlJQQ#}ba3QxhLH_;hsOLLLEJhK39vkn&62FYRlxNIpbWNCh zPn0I0c_@W&l70Bj;)|kkH}|lTW8%;j+B_RaOc+Ywxh4d#Jm13={NJIz?BKtW6(eN? z@r-Vj7qL?GOV4ofZ{Bz(zCx!k4y>IOHSCGXyU*#I;YvYq>bK;$Hkf|om<}NPQM|0D z@Wh!#-WAaBdL+h0&>02VtgV;DZ}WDc7%3nx@l;RFozOypY>)Y_8_OOMK;IwGr79=D zTef3R=vW5F$0D|moWK0+_kIU2?vVW{^d1`M6B8znYS^+QX#Jr-4I!sg#RHS5BpJy-gwIX&gfx_TkKs*;Si- zO0O^ZxJ?Sakl$Rs!V=@s5B3oUm|cp~hiq2#Zd8Pl$q_$~ditu~JJV)8ew_{kAtURM&A#^cM{saI?zrKb#=v7yTJp`-cb5C z$I@L-9`&-Fp_0{0dm^jJsjk@SOX&JRm@Vn_Xk zhhk5-)|jdWXfk0=i1u65wh`H(e|Zahr(krB;j=%GB>p}ne(1kzD{AlMmQ=ELIF~&F zSG=|IN<8nn2_)?3U$0~6c`kpChju)pepg9wYOE66JZ58fN2S4|qc``qxAHTV zE>uAQesR~SzR)^(oIh#k7Y{xuGAIdH}; zi#sG=PZz<(yVr`7-+ZtJ|0JT`aDgFS&fNskY*6(#_tR*lt-wDraq1}}z++q(KZPHk zyuwXZe~b~_=loLq^l#&`>Y)%=(FesbFjzaF;!L@vtlGTHbt`M+_Z-!q(=z~l+KQWf z5S$WlK@>m9_NrNyuYLJtWx>kQ6Y(r*zL9Cb%5qKkr=M;3!Hc+xcC{0dO2$5Js;iAB zm=4Kv|D;HH39;Dbb$eOa`daw|igvVUdxoQPS=^N}S|Ul5D$L5yc}9PQ>W`}^6@l3L zfY4(mu*ot>HKmI>@wl*hI`Vf<-p%>Sw4TEVdb?D-`sD#6FS)%70&M3tBrkz)6yj(y zlI0h#>J~dANM!RYsc|UGQpDFEu(NrB8^x&I;ar zxk1o?Nbs6^c79QJQeNWU#G}-w6EI7n@PvP%LDe@u%U-2m`RIK?hT=&}0|-PZ!xmHe zJQAAj;)!t~PEr`%2QD8CeZ=zm@5>NT5xE?GcmSZ4XKJYyI(dbNxop^ps7_Mm0TKUl{LiLa9qe5{_2*Wu2*SM~hLX@i*TH zOCfg3j@{&cTLaZbUZhfK%|skB_HThJ01huOEXRTZ9Y9g_K*y_15| z(g;$V1Lb6dl^Ee|l3lIqh(0V%Q!Z}s`u+=_Aa<7_pp z&oyp2!a!0Sw)jG!jqq!4q(6OQmR{SscXJqXn{|wRK_eW>z64A8e#bCSw<@SOL`{$r zY)_fvHxOCjzrtu)w_YYSF}--=w}G(4=h5^Rjvx2l4{WPvYOug~U$T0H=81qq%+Y_` zpdx^bZVbcJdlcSxEQQ7Fj~{PzO^SKP8Ig^qIq_orv}T!4O6ni#O}>Pmy(QgL*=V9< z%w6tw{N?JjGv@;Hs(98}l};Xq?t;e}6iF$9u|UXq>@aO*(gvv9e3It#5jVA75k}-E zNWYPKbLuL`R_iH9P?)D@v^Jd!Mph(9;AC3VGo)Aed2^^=*HG%oB-NK=4?=(c{lJjV z=E3v&b;8eq?*Bm{%Ztr^( zKAPdfnQLcj9jVFVtMyEipi2wHU=X0pDW*;{X!-+mWMMLu1^}1%TE~fX)A>V#)>RP_v-m1GxKk2aC2lmT9 zY)-L7@7Z#!6k+m;&XLvRa>GsBSZ)N=Dr!4d*vh-M@i+FIty^nqBo|uGUrU>8YZcAC z(1U(6%EpyRvRM6?M$LW$_RK>lI{f>p6iDx`4gJHK-sG;X$M2{wN+zTJVp1U!Dgq{? zj{xHz5monwo54z5L(-jZKHG*A?}@h}3$?_L?r*!Iw(D6q2vXUn2Rz^7m#1*ZqDrg* z&`2W&TW0dzFwS#v+R`&uUTL8{yMx?*0H9l--R3k>(ny8 z(`<-}mrmb`MlcH4gO`E5JQ|)c#Onk_o(%k%x)p#)$94JN`;FND*Vcdk*;~TJ!Tv8_ z&wqJKM)kDfaXFIwF$(@Bd^T0&Ih7}w=IO@+;o0l7nflPq&I~;YQdU+YXkMUgNtxqG~37 zyc^8ID4D5goCI6gO+Ln1Y|rlU1bm9PyZxT)WysUme2?h%&~*3zJ;&r5>9mTC)4uU~ zjo@+j^?sXs?XvmOi+|ocf6KRVv*tk0UcNc)!%(;P_s_5B|H0Zj2Gzz4#em_zo>;+WXckn&y5QatulfS(0)Lnp^ z>Way3%SLziYt_55#gF%^EuOjS?ZAe;@u*f?P4)Pn-Y>!++4a>^UEJP|5I>U-rZiVj zJvAovySVEPDXxLObOAR`DR`fJ-nYwJJb8WnLJ~t;rMB_S+Ks(A@enA~hv5v{-MXLs z=E_pUZM=2bAg@PJrV4SfSSjbA9}Kv{Up{-Zmp9d(-xUgj4cvE5PRftp!wY3z{sQZGKHPfq0hq?sHIWXL zQ_Is=Ut)6G?>#&5m``YFs@dwVRG8DAVQHXsP^u&zrzjxSxp!T-H%D-H^lm>AQ?C(< zWnr}NjgPI~g-~j6RG9bBIL}Hgxn~s}xVg4$kO~NKrF}#AmggJ=y{fk9Xp`qD&3Apl=VAUnNiv(}*b2{P!Xf4^J*#jVETxkLr zgc_cALa-glI!O>0F?`R9L(rUmwn$RcB?cU`<=!0c znCm>xvDo&>yPiKj-(XB;nj{qP%}095E~@TrTsyh^ZuTi#SS=3;wehioqv=b}IydnI zGGsI)03-eS57qjX!*rSIkS;pMwpU^LoeFpsPFd{3f(Et4mctr|y`GOdhQvKyZ&wSB zJzfuVQ281Py~gHTmxpcw7y39zm`LT61Cv970!1VriVG{8bzDC#~kYw1;XI$duQ;|pUYgQ*nRoFaGj9rV`Xb|_58*7#5yKrI4`gQ<9@reI#c$# zfs|A73~FO>F*VS9HuGMaz5)0qI={juXMn5eEA&~Hb_plegP6fBdZZaih0Fx zqQ)tYmosZ;mTwJm%QhlylQh7kR#h}3PGh8NAJ9+XoD|mcOUIk|*%&VbH^?DA&S5)> zCYMi~#u*HEdc3Ip-_UKwCC+N#QehL3A}6e*u#Ioc3TWk zMr@E;W_z<0?ap!>CvOEuu|F?51~vp_zatmgB${vW@4izJ%Jg_IiT$^^C`y zCi>gWwqD%pK?u|?*!hJtUedXQ??d@jfCX@$Yz_M`M+kkmIz5|{xmTFXe5h2(H7G_^ zZwNGLyY8;G3^hDzDY0IC5*q1cqIK7GM|JO_>Yb(4aS3lZl;NOoj_2x65%^1Aqf_4y zx(*SPg`*e_pg7FEe>QG!J*+QKS%`3KaNMklg<%t2*3x`PSqFn=;lpp(SHtV)?Z8m*NMf5q!)z~b4RbwhS*&$$ZP09e@9$^(M$u^*A2H6`AU*l155`0XNu zR8DzV!`RKu4GH(j`Pc;3HZVqL7QI8&i;*h{4AXjd?6w6jV3Ui^;JcYm^oAd#&Q-e9 zqNy2ZqI|Qyms<6RG<8aOl5*j^F)%_4w-7_E1c|{b%6TM$&j$g9@?{YA9{NeJ7@*5M zoFD$|z)25**b6NkALK3W%$k=Nj9Xm_2)npQo+8z+{?52d*`>;X^`9QTA6Cx56jCwK zX%t9|^zKDSNE8l96GWtd>T{?&<@QV6Lp4HB=sV-zse|ta$rxxa>{~AIU(p&pGo`lP z>NWa&$?v!CrhY$HZ|86xuDPf{jPZk8C~n41Mi(4F{2vbefQ8RJ!Bh|rYmj#t-4KDZ zS(Il&R9HW$h!552um-qIew=Pv8v;DvB1}SO!_&cYL2ATyf>CN-C?w5dy3xUh4Pk$O zy!^Z~Y_kA|`BgkrnriJUStZ0M5l^yWC3(2uqzx}Wh+xjvzGpXY9}-nxGIZUlT%s=S zsF>HwYvrPP%xDL$UjYE{MIC-$V0cnca&ks1w4EZW-%=h0O>Gxk*DcbAW1giA{y63? z#~P)~Io#oY8c_Ba(N&EiW{@J6sE@-4kMx78aApef?Rg^9@V&bUFZbA1{c)el4@7*9 zjLa0t9>=gZEqhDOiW7mbMzlOTHl<Xni_#P@!j|-VbXlVJ(L8D~?-&W_Mi8#AucbQhG>6nzBM!%Gx$i5fI$q!4hdxvlrSA0c1XKYE{e2zGD zwR>`Iv5+^lwR-ajQLm5n>D!b2c*4ErS_kd`Ele$fC^m3OZYWwwo|)uLSE)RO4Uhu3 zUe#n-n3Y2hDIB_}`7o>B{p3sBbN)W6gd!)p17`W#o;k%#xx}JTnSNQj_V>isx zo)LP3aFTfvDKq00DAkC>=?5!NY%Tf{j~mGVzD$V4%#~m1{ak{+m1)3GYz}thQHmw%G zgnZI7mIttxhI3dBZ7md(CRojhNNJ~U4ly)i2nr5|NyQX}oTn7`GfVjDbaOY{doYNi zu^Y?LXH+5){NNR`*G)*qKA>0xOySQ=hd!2m07NVUfk7-Fu!xW4W^|XN|F9cxjLJt# z&t7PV$;`x*<@|J_X5pf)bnTibc&KEAXDx%nyFWGuu3z%}J&00!Mo5YEn@g2s>=4sd zVtiDOLlz-!-c4G10~$$?WgLmg-t4&0P4=oC9I(hn@<$0E%;qE;y#PHayhv`xL5Eg? z3I;`pwS>ZCuWeT3=Gk&7NTbEKkIzJBLgKAWT?Cn2JvDWl3J|UU{&$ULa#J>{+vR$# zhT8ol$jE=cJJXDLYY+v2eDwXekeDap_KrO{#&$=TOBX4qDEXfW2Z_3rlE~fZLV(%nS>*YO<_TX9jg{D zh$&WszeB-=nNnn9eY7pCqkkwD!mp`BEs+k9sT77VI8>Na)!Sxn&Tpp1n%cE|Vyy)d z>P8Lzcw>NBl&xFu)R;TT8&fiqB1L+rfl;&I7}7YHY3~B2>`xD0ZHFCb;$*P6!*L7r z*uh&6$`T~y?+-PO@?x8&ad543D|6tqtT#RvL0Ddwq{NDa!Mo(MWlyLyIlB}7bo0<% zP7#czXksNBjz`M&2Xa{yTS<-wD~6IwyQx>65U&@i3BibV6y zC7JT{US*R8Dq(<6LB`04{B;X84$YzsiAF5y^BtJ`k)j+5ue4MrT9+^Sc##5-Rwmaqoc8F;zcl|(J zNvdLzWbcJYar7otza|{2(bd!6D3xLTG5e0FM-L_bzW*d{Lr88Eamj!}9nQ0fl2cbV z1I=;!<9HZO_NV-CZ9JLcdbWdz&`gm3p4b~ybYbZq90noH_n6J!oF3D zc>^CkOIQEXN&IcencGKJQHQ7GuO9Yb_Cup3%6&lqE2Ug-E(8VF8bGq`F2?R~wZt1+ zl@U>nM1yn-kYDlYg}tfyPClStq+fLZ$ohi)1Q+a>m9T%Zm$bGEpX$es?Wfm?&G>x$ z%Yw6;Q2^0w&9{c|Z%87(<;Y9uH%9Ps7Uc;qCV_m5B3Ks|U~E=H zyX%(JN5~hWtQE|Y9%}xdDC$LB13X{HzId)P ze|hFRmQS*_bY3nv%26F+QyLocmhe#8-@;pp>U(djDO2us-WsXUXmz}CHLtK}Y;&K< za^)jErxhOoYiTxaq-5oV2$dd-;sOX z3M`a26GnTUubVw#eraE`hf^ZMJhuX-12|DsAj9&X>5Vz|$k8h?xldEi`JvgZzD;-D0aFU4$fGfnbt~cIh2IZ7w z6`hIxidb~B3k)8wMb~^}x0x>Y;{^EfWp{Sxd2Qx&(%=8!+*~e?Y;mHVbpmVkGQ`|pKNf{uT2ynRdcL1$;nJWFep=+0z>D* zBI5Jd5|B3H*-A@gH3a!IM?c*WH2FZQO0i!aLdWA)FOX&q&O9dLzfbO6?}mZUc_?P^ zTVAn9)s!sftc;q%+RRAxBIa+XC^p?sEI ze&jvLMq4rHhyj`e3$+bHrHm&zVPJNk%u%gN^Ep=ZP*R7L8d{&v&n230#r-MzqwX-Z zHu4Rvcv9|-c@`=5jglnTqx!!7GjBDEZb>_B5P65D<4jNZd>~}uK;`8QMAXW(3UP=B z>YVHNGQ|Bwaspbrw(yirLofCYOePYVlIxM+%#|;pE7drr?vEhiCT0neuHLe(rSx4Y zj2sH(mp8xMmB6K*#HmH_T1F`TodVR8pO?!)jq*p8>Z{3%zhx*Z~;7ZzG=%Ydw-8S7X$ zU|uL@(_4k;P5nz)I<+yMTQh2s$5b9LIrChpy`u~@gRa)h90V740whKB`%x1O$2s{) zCq&EG>Z_2-3fnW=+J)#>o>^wa+FU|g$J3D`;-)}`*LjmZtF`qj?0xaC+3dXy!T|`55k3K z#S;m3kZNzV^)a^g&r(cyOYap1-0|Mr|U1pgt?;mespb;18V*ScgC~)@7-!03hf&cr)KP=;# zOhr5%?3m>v3ey54S&k+!p zRjoi#bUG3#y#T)F6AI1733*`P8WPRxw~i(t1@_@%#ILq zjf=un3m{Gn1xncwzdZQLs`+%-WR|4Qf0{vc`a8nOL);3d5_LB?8k4+Fa)uH=+Zn0A z{qD7}sKs$BZEnxevx1U5E5f1QQPnO#rT6A6N4M5LzrYa@-zA5};7(<)ENdXt0eduW z(_sx6y+6R~v`G?;Z;VuZhQ%Ltj#}W@yw{1Utof(Es zzOyx%gQ&DF-z8_h*PXjl*L_N`pxgDxF#W1sCuArZ1ot);JP;9SU_+$E)B9B6)Wkgm z;eg6vd+jIE-Xp!#JV{JYg4;{tjJ$*Luk>hukjcpCtAb+sE;Fe?WYYKh-_BdCQ-!>} zI9qaozeQ1=q(|JO(ds$j7k5zc6hg*sX}f7?w_^c1r!oVm$ZwUA8mHb~Ou`0ix3Inj z96f%h=x@Fp`UQ3E^02=Dx8qQ-zMnP)sX3;Qam4@$mPb@URdb;RgH`$ldvi285f-N% zVc1FE`(YB88Kf!@eRX?-+`)Y-a9N9;I;AV>C|r1HUKf=XgfKpt7*Jp|915IOUayzO zRRap~P@v;0b>1qLf+In`Dx77l@jM(hwp&5@#|meCEM^i+zR3jRK@=3yjJx=Kg)-lPygO1uQ^XO4G7&G*s zsES3DGhKbILgx-YgHGgp~ecX%U>8e3v#M?_DAKfcBr>1J2xQZf|@Xrx= zgCbt73%=2UTNBMWzg(cA)Vxo*y-n!Geb3KG)%7vqasUPoBp~S14&JM}`GI@CEE%}& z@3QlpPD&5ch;18=*eq07cS}9N?IgM4&&7UaLZ6jIh{DUKH9?256s}d>jyKpwd}E5W zv^$B?jw*Y{0mm10g0;vv*mAR7Y~Sf^(gRtkSlEF}YqB1@^o+mpS}!8TH6hE2RA$oP z7Gy`k?_+o$bacIyz5cX^b81C@x3&fBrp;5{e2EVKB3=`u-95)$Uhuc&18()1>vSaH zTTfN@NRA-ajd;g;Q`=%h3j5z-S9m8ZsY3&_5)XW#e)=bCMx%%w;5%E<&C-gwrah!~ z4H0naN+&K+k6IRZha~~*w8@!a5bAhkl`xz(p+iEoZ3yW|6&Ty>eT|U6mTYsfn)JiF zhjB-mF8E0lONt9`3ithFR*X*eqez}DvEo^ECTD>kEFmlxrPBfeQ}ck5Uh)E;nn7w z3T7XN2EcCK{s0-%T#V z=l0Fz@=4Vp6y2J{UE|??8LCZ4I0y;gaeh zEl6#*5Ex|5l3Pi>(Ojh?6TpI$7gnAj0y=(zbmqzPJ;PEI##r^afhCq+^B#D zwY&bh0iywuGZWX_;~qj~f56#%@C$x85m6KLm=Myo`q^u&xjwlbQ#2(+;dT}rn(o99 zB<}RmQ?8I1bu?mIm+Sf!6Z`t*B8D8{*}xEsQ1l=h@YI8thkyRi6!y%?hP0&Y0$ibz zT8Ej|)dWBOvLsP@=y{O2DMDux%a0OgeI^Lt83-kmJ3l*e_`3z6e8;Hq+CL{q$nP0c z*04YjZmD2Ls^Or!MvAA64@0D=(iQ-aXg#bv#}$jVxPcr@!I@8onPt!k$p`#`=q(%zYf zqZx01&vg9bF2L%Yl)v~(wRM`SRi~tpO^q={j_tOz(bJ2m!lp7(AZ2D%F7FXT-t?mD zwxrRrwo0}+@MI|82OhO27d>HPIx^@1M}5P1-E~e$^$a_=9_v|D_xgKzcP` zvF!h-(`i6#OAu$FkdN^H`lu5$FBp#t4jksf0vA1@1zT&zEf01_v%$r?c~^5R9K@Z6AES6mW^8HL z178+Gwl*~mIU5>T{pZhY)Djb(rf}HVVDa$XGt~06d@}X>1__B0=4psZ&f!~xIdKw| zVkK6DdrlNOM2D53(G0;pT|NZ_)nE`i(7oB;x^Q#3n-8IEH#@6!;Q>w|v*!vbafRC{ zn`?$a8FIcEpuc#782w}a_=td5x2=ba+*A^6bL&bYqkFbUdBG$>r4{vgh9cwX^AEpI z#M{DOXB1vw`rkk3yxcCd)x+s46|}8|H+yN%tlKF^rojMTwp`~G^Gipe`%EB=f8~E% zocv%pRxru(k6{_#Z!o8QjhvK`oPerbF`=+p7KdO?14)r1jQ4CW@&@@tZbM1EV~Z0% zTNmv_pgm2Fseq;T7>uQF&+qI|Ckwm^M?kmh3Myi@SdcLVor6>kZvkgjCEqHjf*h*5 z(M_fD^$C0X{rYQRG1+GQ4|DZVz%euSLLQ+Az*b7rbY@q0Mgmh?Pq@Hvta-po$$k9m&aTT7)cO>}JfZTGEiD8_9lRs-Y|Jr=V7$!v1{gap7QFZx-b|-EpH&_tusgzh zDdlO+MewcJx?fe-n_n?FssY?(u`kx6;S*?IUJPiKJ>#}tHxSdNIY5o--CbNxqikU8K?%sPGEz7SFRtAY6Hhu%EFC_OKs7uy72@AK^ZF?Kk)8hi~i$R3;VywR82;_CLi$N|) z{B#y|Gx0(qkA;ALZ}rW@n~Asq%oQVhF@HDDP+~~19yI5F8dW4%w^n862A=)bsYV)h z{d=l`H6}xU9azHlB$YhaNvagmTaG-VNk$#U%A=){g=qw=qX(X46XMXOqZHpThLR6c zsK;A=?)9Fc=#+r16(@<+3^LY^_n``=ICJMtoq51Wuu_8<1h9VGRW<*1qH|b95}}fS zk-MJ1c~D%lWy%3pA-5U*VeSBjkmG=AvS^Gu&CzJ&(z|eA{ZQAf0Bdzv7W#%Sm){l- z8@NjQFm&NNVyEVQ1c=GN**=J3^wqL|JYIbCe*N|e#?s$Y?CUv&ughudrrhIp1`a%E zarnhYEZYzB=NAgCERLIYV*M0DNvs1E^{< z%~eeB1x_P^@Q~YFJLhi9Pqi*7L(1EjRYj(?Q7OIyx^2hoebE!&8NRW@DQkGa7?y$X4dnk2E8H^R&Q09Ul9&1kgA3L{;gvkGJ%<{x*p z@EukM?N(AyR8pbbEdwJsT8=9)J!{PwYwk1TFh4_?!|D34d$u{=1|n8gchmE44WI1a zKNjlwbVja@oLrT3Av)xvr37 zuSx})yzbYaljjPGg#Gr^Mwt3>rUj%4^IVS`WCJY?`ToLQC7UxAVJb{tU@ERp1OJQ$ z^R`x8G~Q8woMsjz1W^{PaGJa!g!{OjM$d-$jdtJ*ZfZgm*Ha_q)G{SU5dxoRS|!&o z(g+AyMI%?$uK577!UnXy@PhCF^Ou~eohR=TT1xZxG8@R3wA(TF_FX4>s4{3rU63EV zzsq+>x&df-$#(ksu9I`g2xM+Qjm{EC0265zr*UjGODADa_nt3U*rVqj(DGX)v8ObY z14cjBkh{srUT|qi2I#8m!6e!_q2;+VgY>}3+Qr(HkMWLgL1>A79jpY3!Cq@o!h2zC zlI*+8J0heuL+M~V2N9zU7>j*#XCm9`@+DoHpsVI(kM!J#S3y-ZLJZbGKmV7qOgmsk!^9~Cy3bEZvLn<(cbC;9*o$X$frWF~T&AT6@AdI_cbH@`{ zYgf#{|2V#fI#W!(T@38pLS4{M|NCKF6Ttnu>6i z-IQFzpj;uny{8W0$fDlG7@lPQY9<@^w|%{N+~<-Q>%79rpv;N!X;t)eorwtxr^Tn) zk+F>|*m~faQe;N>@Y1E?03_s=%m_)XsZZ$iuUX*+UT*{CI?3750jQc^BFhxH(SQ^} ztl*PrCtRQCt#{$qj0+uWHS|PEje~8BNy;NS2<}5RmE|7^Yn&dRo1+CmJ4~FS zBcX#MM`TS>sx{Ubpb|Z3Uf)KX94J3v4jos=XIJvaGhzP__|&n?hN8P}x1&$|tPX0~ zHk$mS@|iv8W3d`+cQ-Z2bUqhVSQSCBc^r$}D(w7H0*W}o`V{|^NR&>3&;iv%Vs_J~ ze6X7&0eNDiwHqzL9_tl7lkQW!z@9hB>~5(MU0zPzK4ht~H(!Llw-jnUQhZ`XN9*dS zoIz+qIyYix-PTUf=rJVJo$(tjTs6)@X2_OUL~9`+vO3d4&P0J>R8(E=gS@dWYdZsp zJ>lKXhrH2@+mghaUt?+U-!^9IGiX}?9xNFudw9kSDht{^Hu&TJG}lP&-o=uAXh5Xe9G+ zx_h5^;+R+`z$GtcbFnDXb$sTS&jniEJ** zb#FfQKfr@ruF`#65;)+3cv~D~6}GFlSNR&w7+j8Wajwhn16d3sJJ+}{&Z0^ax%4Z zA!KIZ_$P}1_WyxB&&fv5!tx&?n3=v2@SOh}BK{dY&;CE5=UJHkO$95{cjpP2*uFIp zva>ON$K_vHHn997w*NO094y~7_5XJy{+T?_{y&lD*;we=zB~W#B3Qni8;lD`=7ADqjrwT%LX0Cr^1q;h}5WZXgrs-eC;{Qihu>LcBp8dbl=l?qu zER6J=T>qhhm5rUAjrD&+1@k}W=Ko;i@txrG99)FV>>Tu5Y=q2Qtn^IZEsk$@54L|9 zi+?y`{117-`p;G#-@l~)&kr`9jfYd0m&3ylLDFMz5dg!Sy5r+vH-an;F;;$8CMIj;cl&TFhQE)) zg8^b}qIu^90OE9S2q3X>bvLwp&g<#@W_CYips@4tHg*2cb#(OT)zPzEtuXgz+kQ{s zZ-aJjon7A-x97)0WEiDrLc<};;0aV78H3AT-dAU*Zvl$TbWw-L0||=)Qt$6$kP_yI zv4%FBjn%ZUsV0ZN@%t8l=CqVc)N;E!0+`Nk$!Mt>n-e=%sTESb4k30Ktg*N06A${x z?Y};DPuFm8A1vB^*AWs^FDe+ki-AQ#ziwv2+oJPc_$o*fWO6GL1^v1VC#DXPjBigh z>GjFRC}QY(0Rr3jc@ZOKI9aIVn$%okljQumwG=r)@2@YSmeWaAx3`*me;L1Q981Uk z!hU!@;!F>=eC>h=1mxYwctPW)9amlaW_2ztD=)O@t%HKxHKC3g8c+kTe!g`mdg4|q z$@nfy1?ZABB76CZ#1p^f3(5C&XzABh9-fg$GQ*W{QfW>=yXX(@JUYo2DikQ2Qs4i^ zjqV()phaUQw;Z@XyEW_D+MJhIx}P!Iz*Sm+pqgZz+7ja5I>i&F|6}ajlSp+!dOmah zQmk9uR&~lld4e4ur1uw(eSF#0MRiMADL>B;GOWgXrU}Wb3Ha9gUXv%43G&vBcDfuFgg;T@xK?s&^l8j1i0g|pN%7hC4M>Qh_ zSY2Tr5-k9mfNc@*;sDa>{a3POIl&RvTuB`An0dz2CU*URoQv<>v?HwPc!OexSFRC| zHuY%Q$Z3$n>*b95&Pw$_D9z6bL7-P%YTd&BI<>}kR%y|R`8yi;ETtlISRK)Y3c&m< zqM%oX&)OpkYn*S7vCg_5Em61q2}Qox#lq>Cdxm!o|M9vtwK_)ex<6t4a?$nMgsFzI zDv0nx%Z4>~B3a2|VQjPsW)@Un9ZQx?{>ECdxHlSs9)=NpUmBx<-7};G>o-dyEgb|M z5P=@?p#G>-=Ut<8$Az!w1Ag+zA;oOsiMAz5G=ZS+`?b`^Bho-Kbh!d<5L8VS^*mu! zXe*N8p8SS_&r1hbt;emq+iWCv6=Ek+el?0n+U>WeNB+Foyw(6n;cj7-ef2aT%8;Zp zR7O`fTMQCOLJ16vZtja?h=|F6`SUaFe=(>V3B298c z&4s!@mZ(D0kCz@@r+GlbBGz9V;)2W^XmTJ0M;7M4^P&);h7>C5YC|E#2V+CdnH z4r@KU$KHFOKw}xjt<}jtR;G|U%+ca>gNbYP+>$A(WTDcJ_WA4hZVsSezoQq~3L%aB za^KQ}%@yar%jm%QqyI!^)8*F?%^O)Hh$M)o<n7jRS<>QaAM2QRM!^AsQ^geMYFqa-M~kmW+v zt0qmCf8lIzuM}0=wGg7J<5g33zf?gD`As2QhfNtKTAo>)Ax`kgfM+1-+?jGXh z8NabpHS;7rHNW_$7eLJ614@tehK@ifw7#46;ef1)UcUFX#~)PXo;B+rqgo7JVej`B z49~P~f9JO>Vo2?DFH#YI4h)ffD-WeDr-K>xbqpst zH9twjKDm3O%^L(^e;D3-`f%1nDOv2c1@b+gor89=EzEgl`GCA{pwN`VJ8S6-&!uU! z@H zZHPIT3Hcm$Z;os>UV?MQwO#nER+bSKlOBZo>c&+t5JsKftJl}ci`zSF+Zh%3HKmGc zHy_oMoDlq{Gv#Cv^g;X}()E;kbynzWA#iU5n~b{)Y{YXc zzU6odI~lmxQpAQ2m$ivbL%(AV# zi_OL$Ez)saWOyj;wg`?hr1uBvYrAvjeGHUO3`j3<8IZ0=J;*!FVzn%$44Qo|rNF`> zN+ODy0`m4^@sI|m{r2C%yw|@pLRW23(xVK<)wBa~q}d=CFwPHR3TeTvf^6uC%adL@CK#a3{Mt(^yd!bVadEnQPtG`Yz@zb>|yvd(`369 zn}G5lHwKmzS_Y_sDbR(+Hi{CYd1g2)7?^bxQVyCc)H5g}U#%6b%8*2c1Y&?nsCnX4 z1ahtk2y#s97h29hJ!xXhz(3`Ms5GGBk9TqoBd>U*v{p8uE0oX@9Cnj(3Y69bU?dI5 z#4}~b1&TOrn|^w5?l@NHSY`Wa8nZX_a25u^jPg;{Jx2e4iv$AXGk?1VGS&!@0o%4`d6K)0v2S`9}vlMI^1;D`;xFnIb1a zV)Eazv?=zA4pUgH7Dp9@=Q2x1S**K={NnUHGec;Z(c|^q6|$n#^ADVYTq3^BG?u|o zfyYJ#RpMN3G7AdldE6I#Sa8nPcb8}?l#=J0%qp-_5%|0RaFsO3lQvc=GuiHKRPl-c z;pU>657F_(s68^8D&^y8`X`i)V9pVjsirZx%-{N^qVFds9&;T$&thkXY40`dEsQOb zGNu@<0D)ZI)}5Yf{fb`;($qYtxYxIiO5S{Xa(_52;yN8?$`j!($|VqIXi0?RF1MxM z2m}l7TSXCdoqyxpd#9dx%PsC6ma)Bi7f-lCnkNt*14eNn%b43kGqi_tsEx3Ltj!w7 z=PQlm_lo-B6fL;fQ<4!&ZSX^Bnpn<3t<``NrQQrj;|2^v<*c5dVaA|gleFWWLZlF)SanHnzXG;~$rqe>1?C|19Kc^~w2d-v zkxoxop}UP(rcUqcM2yjAJe`KK!2_=p9q3LiK^2`tvQu~5Lcw1#vMfPbP{MY?R}s8C z=Bp^dk_YM1Tnef!!6GNjtt|syQM8;h&#j#w7i)yHvH%iXfu%kbB_VLm3Z-|unAi5K zBQzCInhzi};noCObjkn04G+>93QlMn4J5chXyW4%CWuMEDq1Ead3P~qIbr{UcipmV zrvJP=3rtWsH9 z)cvdj%lm_azj9D+DlnEnC)Zgs6k%TDHt5gb79#&XH6~9>hWOJ3_;a`-zX&sJ}SX?^!Yg70(!~tjGMU`x;y|R|ujm z*T^#0gN!97CnNIJA^spQM=LPF0AZ2DBe34vLw=6v(0j6|JuM(yOTFT>&I6V7<1xl9 z?0{S3Bs_SSQOp%uCDQZy>$So&(~SHDcezRJ4j(hXGU*2Rs!~qN@3HG^f%j^dVbz{X zDGhYNrs;yz7CZN_!qE2jE0xqY`$#zGX}PNPO`%z2$5kcKVia) z|8SnC-$j^MGeY5U9M&WR$nkaOWz9eg*dBXp@9Mn#@N@XEx?~g4ew+Od@75n&AH_uo z7M~6Z@Jjkj%lfwD<4^8hRSv9yMCZ+l-J`d%cRP>kE1ezNcV+&yes2RGFWcVDL)T#q zH}@MrtDhOhr%}>V=O;a29M_#Z3zT1YgF}4CZk?yprF&F$lfAF_~pc|aUm1rCbBA`(IT#C5) zp=rcN=H58Qi_qp?zPgcQPYeT86@#%_aCTI5;B$M9cZWw$_G{u5yInU;`sH}}ew75O z?2kg3_JwKWDx^pf7O>RDK?cm!GV>QcS@W8fmtn!z&(M4Ye(|x8`tRzqVnhkNeCx^0 z;kh|@%Oq;VUMamVN^bqx8|l%3A=&b*Q)=iZj637@h5K@=h!G z!?QoyMLjjVdBgaf#&QI1y;f}Wi*_ZMzw6hS7?&N5Nrrk#?E7tB zbH*chY4)^4c+Hfp1H9HT&GjaAuk3rrF^^%dx&nudyN;)fq6gbwAgdq&;ry~xnC|^7 zYJrY{$J9Uv#4~E|BVyd5YZw@=wNVW8i+u(SX}gUXHM7w?EcdA%j`4zu89vXJ=+cD9t2|pLl7McI>8yTz=>L>gw@=??@!ooG-pVvpX$wtlGQKZNJGrh#cki{kr&9X6 zyN-4?(0QKJvTH?}Ccb%i4i=$lksk80RXKZn(M&($qjCQVPEtc@IwqJ=YK#_O=0v-! zl-lKzxB$iK2tYDqy?KvMzUZ=2X&^GS?RMVITvgV-CO4;asGCuZ2*hR#_pB7`MZZX< ziys2rTV3fxPMDnd@6hEt=PrR?%bPVk-ZLLficDa`=XI@oc=d{2Q{xjZWY9h=!R{9PzNcVZn`jz=^{?!NRbkOikwc4$N;*3&=*d=C-@lJ2u|B7*#qZgMx{?6V#2Jd zO0li`6)oB&i8q^hh83-yCq^GxERG4LL;nRm0G(w650`Vv3j{d;lo&%?i$c$7yh)xC zq`t|5CLMR3n#K?0&*?5!cUKG}SxK`J0qVPg&~;{f*Oo?Xv}i-;#PM2L$^xd!054$!|8oUTw&e_ey_i zaUbh|((IDZ(<<$YXgTMX4;tyqcGW8bJ&AFUT4iZ*iUGJb)?&9LL+Vx?{jx9O?)YPp zL_=zMFoItN!P$*rsg*g6Q?qKzhQ2xP1DS8!VCU^`+{iS0+AqweE`d1?Du`tvbPYwA zcDh%X_e`D^XlOKCQOI74v~1g2!G{2ZBytep(xgSi-yPvM?aUPWsqt05i5?CK2jX^6 z0o`L-0)0_vae<}yxAki_d)mm&_U|)r_|9=ih}1b(l+veThpE_qmEAm8f5;ujH-!u8 z*h!!wDJR<-BTja+{|J_urCJ2c(9o!YLzpDBKsDZI{)x3zwofXJ+!n@kU+=e4+S0cv z&GRF1z*xdV!&KX}9}W!?LUb`bS#7R7Y1=86e*?HJlYXxCrQ}cyDHir!H zg-vEN(%df^#Zj{rPdK_1e?V)eUT$QMB4IM53=@T538mn(Kyiq8UP`n#RIJ7hp~m-GC6oTFV(T2VzDxa!}eR?)*0wr(gCG_&1H@J^w5Tr0#d_sR5b@S z0N1aNMGmACJka<{$~g=6_B!U^&l}HiuMTccDbXaL$x)%M`hZ?ccuPeZ21j%Im0F9C zcb|)3-&;PK?#`uV>j3v7_}p9LM!RKMh1C){ePx>kdHVYbTQjuq1ahOwLRr4VK3hCL zQkfJA*W6wmQ)_LYESfwt%gbbWJLv`sgx~GMPRw8<-;6S`a+nbR+m$KWv4zS!DBr_V=8v58qSvA* zF&Txa6|MEuw8cgkP~8RGX>nEuE!|}Y{bMcyyX?%OPj*sIe(aMF@o8jZ$V>a$FW;91 zUkpCr7G~`3Jigp0&}VVw3}IWxYHB9%3eh2B2R+^|Hgan7(hv4PtF=`Iw_P*_X^z+gbcxQuAI(qBt7SH(5tl)koCYlP1#GEgj8xJe0K=WxJfAnt;9IojeF%8=~!b2Ex(Vlz4M*DySx>-rD4(7;nz&ad2fKvi|k$`!7(OD~T##ZY%0Le(N-8a!JN=7D$9qItGj z+_lBmwar@4_{&@3}4dEe7ur8 zqph9K=e7kYI;X7S(@L8Kfh%mW6}G6!Ts0_O)G8)wm(K#ym2fA5G{3N;4K= zbuyW^yXwC*QtX_mGOAp%q7PH;WO@hFG@X|r?&EitAOK;Xx~5&aFCCL^9g_YQ`g$4h zh=nhz56Qf^%GB+LA5{Fx&@Da23QT$u(Wxcl9>N~wr$&1mfdA*>$AU|nEh_d>`cUO|GAMjBO~sK=gEw`ndkjF z=R!vYO2T)6+?IXH;(jtJj#$VK0xOv@EtUn!F8xTThY;!{R8xnGWzy zdJ4~wbY|Fpak@C^g@9Z6q}>%AYVfR3kO}-4itvuPKT~cYI8%25xcmYezns zbMzTkO!F`3`5Kx~wvX8p#IK&x;E!zUs^t3T8DAdKl4jQmyarfjB<^MaST~ z6+b)WwftSLHa;`z#=u}PorQTwRZ9*#8-(b4(njTPAwN22_H)2EYR>Gf9di8EwgFd4 zBxkeaF0rW#j$e-A_qZ?udbMgLgTe~oGZ2bj@;hvXWY(lf@i=VeuIy3VqBZ%sNdx7U zt{+eUgPQUEqF8<$qW^3OSSFFj%^VqL#)izfnC>R zo|n}^Y%$-#mb$YIwA6$X2#6pV287u^yq?<$4cdmBeY_Uw>VWFCjg9fP=D{rpbQCja9R2KN6wGUq?=i5c0y-D-9MR>p6e z`n&Dm+bR7vty!7AjarWX%%NrZXBObUa%kE9#V7u*ark#{^gmL;`8~G4`fn zo_IXaI(m>_)(Y)Nl5nD$PRtWE899u-ozLvgln6@4%5Du~)d|MusK?l~G72)jCCv>> z8m>=fcN2GgYngbRJjP$I#*xg~_HX29+E}L0i48ZXA@TP@bN##T=+;RXd6 z_%hvxVl5yKt?@71rGX}A1_x$kKX&aA_FRf3S_Q#K6BikDC?<9gNsP?Ujh}|x8K_`fSxiU<7{tKY(Kr0* zXLfzOGO=Dzu@lL;igXzjf10`HvyfW2jh6(Tdh_9hiZ0$bbJ>ZYt`VqYUpI1(7L*+# zwzuT!J_wP27cGpK_>o`99FcNDB+r9{=#%673#KqTD!&y%`ELV3fUELksf%5zH%p94 z{x*S+Cpej_>_^tt5rsEX0f`R7bj za$OX_Qc*>NMl*xtGqr^vZCSf#CEQMTQER`A*{Y>J(irB6G5;c2Mai!GrdETFZwwx4 zG(9zxJ_d8=!+`;-?i+kv^IIrMAxpy(p}WEfjHMG4NHw14tL_SN*e9Okv845J?@e$= zymA;>2vt+Bpy267apVCOuzD1T zg%vc_PSBbbO*j-hxCL*@anPHSLLjUkyqyBNvh${itLYM=R~Dr_W+@wqmWv zvq%Mo_2TALt?#CxO;-EJYGl`5MUVpw6x90;$==LG0(T42ek`!;ikedhdzuK7ltET& z*!-PoSwkF#jW7;Zy5~MghS8ovc{{>-cL$C|s7^_YqB<6zy{>w+;Gd4cKv8}^jt=ep z0BKqzoMiBwb2isYZV11t?KLt2<1MrJ11S0RY^!0_9GixP$0x1<9%XK0>I-<6zq+J& z>sj<#|14SP!dv*{Ki(|-i=@wfQ-j{Na9-z4XxVh?Uh=Gr6@7VQEJ` zH1bqBBa`mmwTDM+wQ5&7M9n~w!?P7HMtAy$u+_IL`%&7?f&i^`6tel{}WLM(vocs0Yewt zRFzGxP=U|y^uoPyvWfk_Pwvkr^Zzs;kUz!J8F<74e^~1Qe+l|Fm9B2dp7R>VHTuvez#Qrm9<)MB<{rKBz5uW}c)!wcDmq1(b_poO zaxz;lxk)nAY`m_)(G>>YWt`dfYIAEfj(M}czG1eO$o!B=A&+#U#zyabgj34?S245a zcJbX{5G0`+qxryfem3d&?C z>50vck~HK1@I%fR8z|P^7$!MvR(;3lWX4$x|B+ZE|28^W0TQme2MD)buhIEft;v7m z+J1{WcxN*un%izlGNJZ(bZj^JhTJOUgZ_Oq242C1A1qu4a4dTa8_a&o>k3DQJb`|~ zYHh{mh=P4i=281gl&AqvxiC;9sTu^xcQjBjc8f~NhI7g;r0N_zu-C{B;2y6tj92UY zgR5;~9%B=xWIi=lbrSm4dha(^fk{$N|_FAVXWR%LQed-;)m${Br?%g@vQdJ=|4l8a*ljksTL^wC9O+ zeElzu){y2$(x#gc6p^=ofY&|Lm6Le%R~+A}9KhoNMF`)Jd%8sOQ}?b9hH(lO5=vkRt}juXUP3BVZ%1{P(H> z?M87WRgfM1pYJhGjqwuizy_h}utfqA0rhKs{*3TIzD}YGjRTV^z zmGs-~OE@$m@71>}y56lR@t5)xCho3rz+0DgbUG>t^{uBWbo>tAJJe0P{Wj~G1M1NE z48Wx@r>UUc^X$8?kx*E@2M@Aq=g?wLJokcQhgp!Lf0z!sTSV0=d;H8!cFYwsXWWnIbNkJdC7jS}n<3NW^1{L(xZj6lTw!)RsuzMSR9 zN?Fom!Q4+hH&)2#!l0TME%-XMrWgN`i(Ph#meeRQPs0*5E+|W9qe7TS)T(+P*oZ$G zV08!rp3|2kOn0$i<7pzEE&_J5lV92MyLMxIw&^Q#y4Y+Hsg7$PPKF-~vF3F$xb4;` zCa>xZV)3RN5j*b|AarkJ?y`22W?IbqeZPFR&{h7s!HxlqMvSf%QeLRK2{QOB0-rVj zj*b9fJT_!rbWRE*-f%e;KZ$Q0Yq1w-)wjwwA!8KLsOn>)b#Kt)7rb^U!2VQD%z%}$ zp=^q(t?|qVh;~^fsL`|tT884~OfoHmJjoA%@$L$HtHjhhcgI^8|Jf3&_SO#2jBPi{ znLEiGRp|c4H*Sv=gK5~56#B|B{)%#u%`jew9L9)81V&=)HgpEC*Zs|F-=6_lE zH$gWo-mk{9j_}2--PS{<%`Ro{27FF<>nj7<$8#XaA4(`kE17RcL1-B-cz?HFoscmHCagRS*2P);0P= zrAl#_d6JDqs>$TB)&kio1$j6kv{||8>|BNtfRkRY3EE>cuBu{>l=lk*_ZATafSSPDm03KTZbka&tR=2xZw(8;A++m<0<5F66@tGgM_u6LCFlWYdtiV}K{0$< zN(BN4cq3|XHlfoHR4P%hT#RHa4J-14n*|k12cVxq5o1WeRAJ8&#M4%?4lH}`?skCd zO6~}>JAnd(_-9mXNsL8?u z*m#TjSI^06ELz^%mOR2A4XY9E_Rz#97PgJIiQk zq_Bm1;bUyk$K1)U#HMuTRe|KiV~~ zwqt@u>PoM+WmSDdAidG~$Rc^Iw!i;Xv0w6u4=9JMMS6zyt^!P~_di~$U@An@YAG7w zUOwA|dRcUw)e6%7R=aZO+P*V#=LlP@&9R{a|AetAr4LOsmASN-u+!KjzIQ5K2RK6#o{;ItYQ5 z$Edl1=StWW1WHRFCtO>D&VfI@E2Xzf6xface6s8~t0%s6Az;Rb-_L~Pt4pUnIFq@h zYiOfCDj5P-J7vq?m!LiQE9|zm)K!BVSX^bpq#6>=aqBI^0~ z7?i*JN><~ngZ-O|&(YfBM)o88Fg@Y(arfJ=XgJ9(l8lv}Ji-9F(>LhU0@Jj`ovbUK zu{89Ewx78wXAT$v=`Mi9s&=R#D%I~Yy|d&Ri;N~QsPQ5PF0E}vswXv8e$bu4C*?QZ zconYmymJUbFc1DPX+aI(uUdR#rD57x1V$A-3?J&fVqYusvnA4t%Rih-sa>@Y!_aA1 z?+5TtzFX`M?Pb5_oTY*dy%U>Vw2NHZb5dm>i8OLP`)I(cS%g+tz*j1YtdygXX-y^y zw}Bh5wHMi_h0!^>tF_K&)vQw8A#ezKY+v0^Ghq*dKDG<9#3e#{xlVxcrCN+VY zi3sqjdy;a>NJHWhW_?#oi^CpwLQT5c48Y>;>yuMISZi)o%kHAKEw7ji-2W28pP{*g za7N01#FXCh;UN)r=WIBCIG0-Cm3o37<;;>L9On?2WaG_bWezm*v)&Q56A6d>E6Khj z9JSJC@p%Jwl;#}+tQ!U-tbUsFF}jYDjWzpT{ZK?-Vr8QI^LHel@@`PGU+Fy~H&bv} z%IuiI6fG!pYh*D5+O}XL_Jz+0v7gYT<=*;za_m(Y2Kr1nfKLv=aC*+ikvA}4-r}%g zpq2dCYoON!a@h3k;YSE{(^gayWeZ&QA5hF^&f2BO_H}fvsH|$D3yM6PxQjWpxd3bH zlimyb6XD8eb5#toMT{na{`km0AP4X zQ}xZp=dDWBGqlRBQ4x7-XtZDF1!za?NB5wsF9m3E10(dN|5oH9;Ny*T-J`YQhRD`? z9h3J9io^(gfX{o3uMS=)s@}ZpH@;s<#l%_`}hm*lm)`_fLR7NtYC$x({ zLl1R;1!aAIvCG27+{5%2!!+Yo<{_6$)oR_5S zPzk5=TBl#N9}j0PJsfeH-wA@gCX?d2`cz{Q*t{l7SCN@A^lN}iyl!W|2#BCAxtKY8 zTZYb{Ic#0vJx9@as4>UloR+v|GZiQITQV*)+(rBdCy}>A8km~7nX?V82c}@-L7Lxh zB)UrvqW21jq2$Z!?0LIsqR`&1zbA&jtV&HwB4wn@lA!m>z6((Zq^|MF#ymJ#iqZKN zL$7ZoG-z4rL(6G~Qs+@A!;6Z?urV~yIp&ZqbPd>lq~fhU{jBJD37<z7BURW9YND-rK{kn?IE|6@x z=a+L|(4Utg6J8bJUy~3NI>NYYHt98!tFxRZ-1rO=$76E!003#H8+4aAv7)t(56dlT ze#v^}JLL4Rkq$nefzIVBydhc#;*c2xp9enK#}O-KDUnWLN|0DdXFh-Ka`D2c82BmC zWQW8ORCKZ$v9^Z#QDx;hbp1JPPjPH8ygdTQ4;eTA_t& zsQ8X8a>5U92_%u?dl_TYG>hK9XGE9z+MB`l+6$LBPzpHrY(c#?U6z8-E^LS00Zx+EJ)8!b$x<@r%f?S{Hj)Psq5`Fo7KVq z)4Zvy%Pw%iO?m9J@|x@Pp{hgLyr`v!m5W@xB7r^1w(7u!2`;LLZeoNP1+6pr+qkuG z717Rgyr~uGnUrOTzw8YW?J0cnviyh89;OiCx{CIt@*6*>%nHbA&XV|wU@FBI@bvG? z*;Mf`x;=^zHrPcCc?3?DbtVlQZU- zmHdC!!$s8?Ze&N-Lp5(<>C-fC0k?kbX5nD!4RNo;v3;L{M*Z^~-!`SH2YI2uprO_IT~`8! zm><8EQ}#4VD|fk;C%F>*2M&9!zm+URcLse7O7sS(Agbq-lhbSxx-q?;A^Ow}DvHCf zx~mC1Yp?bcg<5;iJB|6oWV^9wtA4+skPb;DLC6x+ghHZ|_|=9?-_DBYR}9|O01txM zMWc1`IxB9ka+$+rOS+LQ@yF>5ns&7-<%Vf*IP!g<9?4>D1P%pBhkvjd4@4Nk}Ayj0XYIXTf#x2g`&i58@Qzy6Nwc_RdoI32Y4d0PywR*ZQ^VxyhqdFE#&R-Kmq z?ND%v*r^!0+J+5@xAx|W)V%^A`&JgaT9OAKuY8JSH}3ftKTd556}g(@>JW|3quj9R zyzIatrlm$tLTR)78L=t-luc%)d|jMEb=5#Ax>P#?OHCB2qEBv>(Pspo*x|}q!s+SH zT`?cLsy$K79El^GKZcIG=hpTT%>_|cFQM#oiOfG%_OtjANX&{!_nEnVorHxFLL&(&4EmHgu%V<2Nt^RynH6&OI%|3S zKPE*Z33$sb?R3r#8ma@Ai^U|sFAg(=G96M6IVZG`G#Klm{lXlT&%=-tdu#r_mD4oo zj-z(v4A2LUEk#!6!OR?M!_#r<4vUO?lt~rXljmFpRmdr@=bW5$AHjkmB(a`&>4XS9tRJpC}yj8SUw=raBJ)bz9KYsazhNt zX-oqG_YX__ier#Nh!8xE@=SX;eL~+{beKuNr$`DP+CE$?{T#lO6~Tf%!`PAEo}I(} zv_)Cy6U1yicf|7d1)*ObE7eOD1=3W+c?1q3om$c`p`a8tWdVjCPuf=BJy0I?G!t#Q8>RYg zuCWrM&6Z&hlSznf`Ee4FlcyW@FqEpyyy&ed*o@TM#(w4-@@L8O~2w7($*z>JSP7O`@0o9n_W6QH1! zkk04#bD%>beKeUd%pWMyq&(;RJMA}ne=CMNWH|yj@#d+V6rF@CZl}|5 zB=axg&*SRr*3zOr=@NLwCHme2>hD^*&w3Qp$8=BU4O+WtH(++Zt-e_7Y+n1@1W%@1 z?f4t%H-uS4gSF>z8ZGlvnq?Y+ABOuHf3^XO)BRVqR@D4>zdGB&s20QCb5hxM=@h-WPEhJz`Z4fin2pa!#WU(gEeK8 zukK?Z>J@a%o!I8~73?2cx^nXBkL2 zI+7dn_PaVcM~T-_>)MvWq9~UbJzRA=QhHd*O*%Qc>(yzSYpBclBK7w zjt95## zxFCgDfUPHloK{4t)|KKxwMfqnqC&Ndk|2Ze@)Pn5qGfEmzRl)e?4}70Emkldpg^{1;ojqSF9EyiYdza z6w>Ss97de-wIV=-3K{%NNsNU6`3k);OGIJ)l)H9$kOTBff7plf_mX={$oK~e@pHw> zFq1}z7R4TgmfHixlt}aa)TT7(ehNJ|ITuMY1wq1;af-iApnMDYroz<-#CJBOYs#5C z>Ll`Eg(1&WDi093=mB1=S&1h!sQD5eKeY@MY%)g`hm8`@wR5s*RV#*~{lY!l)GO0T zsn!WJ;!WFlM=@Yb2%it=nir+A70*Pw%HZK6$GlZUTXK`A1n@83nK4H#vG7!yQ2A!H zYJ2q~Fq}+Eo5sj2oRI}4`H&^NSq^L6izf01D8DOS_*$RE^yV80_*!Yy45gtc7$nPH zGyB?q6(FQjs?c?6qWR2r(sU6Gkp@U~3DusglSmZv@a;&%?hP<9JpGL?FC{MEkkt@@ zDCU{6untc@B;(|IVaXcMyt}-!(qLREYcQrWMVSnu@ogPRT0=~ zph?b}u85>#J7bxQWGZsq18l7MXI3Ui#a-?ZKf9?VD+Y4XC}Uiog7cAnL3q}-etVcZ zO4o99fCVCda+ecGz3D_4`BKZY%u2w3vr9?0=m?ph9Q*t{5AhTbZSP znJnQ8rDCR5^SBL_$H8al(cQz62+cSur+08lmsWrsFY$OtjiqiGjS{OXon7xcLBq$H z!P0I2v>{DIg8>U9&kYn}6xP?4r{K>d7a7uTltkWN=y7dYyeAXiVJA*~(7#huSmz<< z$5_#oR{QQ5siER-VuwsIHu>dUN~_T}B+4;O2&zZ1vQAzc zQ{0?6p57)>sxUW2cqALujFIj^vJ{EPKLg7uTfDmsO6TSZZb)ED2&g0M&!>^2WCW{~ zrnmiAe>p$vBKb z9vv)xo#@nX6?g!1rdu(LM#@k%Ei8Ux?RAOGRHbc$jqy?L7<+wrPA>07#Z{|{9O@$_Jj&itI3uY&1I_$t^M=ytz}pG9jq|*Vr*@}sqN`C zb7V?R8NPC41UH{GwdmTeX~@aRJrlc&;pOnh6!IbiLv}&trhaH$-{NQ(0uAaVY#=Qr zF7Qq7qoM?OrV^(XaK3YvaevZuYMW4SMlgi%9aKi_WRg-Ndtu=r5?VZ z=QPtW2L{?Tp5OO-XO%#1?Cta>^pww8?(6Rona8CRxZhu3MvNz@Y z&N4HI&vpf|JCa`%vb`yq0{N-=dF@DTQQH_mW){eR26B=mCtH~r7kMsaU|#^qK_Woi zk7f@GBvVdunqzVTiP?eZ~A)I%PGQXzy^1wJSXv9`wX=cKBlYd9qOw>1;6vX}cb!Iq7A2 zWFa<$rLMX8fz*1r^)?*F;`1DfYG$>4^;JNPc#RvOOCfnjU_KM*mK5gf%q7EjZA%+8 z)I2ojOBy9+)(T(9atqo50$n`%iF)0^1@QKYeOEnvaUdq)CT%!hmJM|&sSC85M|!9G zdO6cvIvui~U0eKCib6y4)J*m%Q&4p}@cVrm9Q{YkgkxaAMMBFz~{Sd_Z+aY=~_V7cHl9rJ|A?8@( z`m$tqW=tc+!M6RZ013z!uy+UDB*yDBRn(QE(s9r<$vE4)T9Y^a2j^W|* zE%xz5_ajGZ``Ibz$Y&elbrSn?-N{AG8Dwy-^wWRHhLFob4zb(>uq-Qu9IJ*I$>7kB zv}t_JfRpC@&wr&;!oK75WF?h|738+sF;A=pO#haF#MfY(w;m5 zRMOtze!&8^pFOj(f^i`+-wKf-+P7Q;+hu|MB;OF{>;viTlkMRWI|MnQa*IWcR_l99 zE1DtM9mN+2spff*TZG`}tpSjDA7h-{$}OX$s;bVL%tr|C_FkYPVH#N@3vXdR@Ddb2OOz2&wL;%> zUYr@L{3TxY`in0r!+Ud`zpu7^q$FVAFXhe3N0Y%w#Y;oH?vNM}7MKuxVR0z~7g5rH zA_NhaG0sxtoWFtirvDoX`gg}oqz(cUV_8%wL$?Q;En{IWYW))T^hZ1%?T{u~sNF0} zD>&09DR`|S7e(~d=x^q1?l?ATF6!Bvc3UN%U)w;$RQl=F1B*LEGqY>vYG!+5)t1Sn zJ9Rwqmdz@&UhkHIWaCK_wnv;QcG{uXbh2@VYU#r+r5*}}((3RoogjjIw!yhFUw?=E zwQrM>u=~^D9{5CcLMrvwnf%2bEKU z^5*hVgF;1U6kuTKhV3RPv=#|V$QTenJXK;544j8?6_LEV_-{EsW0{&eIMQgNbAYMt zk>Ux1iBcBNS$P+Kib{QF642TRh8L5?K~p#}Bb1Mp67Yf@(n4JbhVn<7m_tpM{A2}e zNAzwlwi(iA3o|){@vz4R-+;{2v2F0wR?Mzb!LXIlhS}zWlQ>ntmC~=B4O{CpYURzX z@b=NMwqOGvx1OAhU#qp0ziiklUl~<)Sh6v>+L>S${W#;nD$=O61*{@hjG$W@jasZb zr@}eL3u=i1(dI51c~RL?TZ=F0msV68@~vh<(;da@6D)NnCzM(ljF+0b(B?#=Q^=1S zYhtquE2g+f4rq<7tSJ#37CzL5G7#lH8}F7%ok1N{?iI9F{w0c7Ut~!**2%wK`M!Z( zJcYkU8nRD9cY9sDdKhpH=TEg4&?gT^g;mTG1CB^qkWF)seDb_U3!Ax9zDM~5_6Ltl z!j9z_-8^0qV^jF-@vKQD*c|b(b`kC29ozQ!8ZjEaoG!u1L9ud_j>XNEZTBs(c z(eSi+_FA`&^@Pn-@(Z&587g6kmN;A!J5YO48L3#u`zjA&SjB4IVx{jlh;;vAXFRT9 zg-%Ig%RxB=oCR)GZK7i!ocdPiiFzyZ1L2Rub^&jXBlD2O{x(7M0xKd7< z;N_R9w3Cgq!YQ^yhN#oBcmpUB7xdX(2+Fle1s3B2Egd;4<+v*HLOGC)egrG2>+mjB z`^li-Zaz@*3h;SyFnfk*Z{aD&CAy*i# z1P>1ww1{^@GHLAo3*EGxiUa#(?5s9}uV!1j{L3#;b9WgIR}{F3DtH|e530GW2;b6Z zaJ|uigfO~S=mS$S=#`NNzR4mqlS|CCBYcBx#tpTsqhz{Oq0Ku3D@e6p^qvEnybE{$ z=&UtJOKE*ESdrPZxMohj9%j%f&DOpn_=JvL|W*sKwjOd zq`omA8MmFt=0{6 zy3qm<@a+R}Fqa7jGTZbAGNbTwa4_Heuan`t5E$%G#B>W3vGbMjHpducK~s3oirl)l zT<14h(*16nn1y_oRX|V4>vscd<(V7KDZkQ(?Lr+|>Iit1lRo;%GwUPUk^1*x-Zk3C zS-tFO1K;5H5C4S~8xqLBPQ^P7DMX|6A|*)BuQqD!_EMvmqPl1br=BdKKQv`%th3mz4m;-$z18eZ zhJUnTEjbTNjg#j*{6Ln!YjaKtg=4L-zesYn%2)`B)}ovQOx+W&?3h0L4y;OiwwV$~ zv#wZ^WLg!bS^ZjAr}w>7owc}YUz6EFEhr_UCFM}c>UStVYE2%5RV2YPn;|YUH7@*Z zsVOm#!WL`EHL|D)o)jYp>FNdpf2g8#8JnZbUVPo7DMaf%x7g2qMce&_=i5Ep0XEE# z_RN$lJI3+gxM}G~2GwbO!g$Zbq$og7TR3+=FH|p6tVe(97pdziIb4>yuN(OzRR|Ty zZX4>vAbwCXLkL{UuR$YX4g+j@ccf(eo(LXwLv`% zC3AMPW4o@n8NkaEr*?$&wG62mwPRF$=+~jyBB_4b89T#&5Lu=sY?JL}!!T28e~^J? zQiow~{U8%DF6<4ejT6g2v?-i|>T4krxyT#GeSE*jlbuOu$sIy<&LE-R!DSdSr&xH^ zpyZG=;LY`pVkyZVAUl@IG$;J}gyqvw6-d>LGnS#zWk&syC0Kp4k8kVV5ObhsqreS| zho99HY3)JUIYRB{U3``fR*QwfP%=BwBjMjXqP1Y3%_H@1 zXu~E^i%pT;$gw%AlYa*q;vG{8gWOm-%{^Vb8NVRVv;jM@$l3+&a7*$^A(XYi=K6S>oY-)-yb98pI(CE@^3y*nc0k~Cvrv~HT> zxwWF|$x_@K_6L+bHl2}i8z4Pnzdw%ACl+*WPk7^)-GRi?-^5?%AvbQ0K`k0LsC;ic zEylLiAIzlQL4RgrT;cfxGxZ3`Uj`cCKT%Kw3Hoa-!h2R>VurVc+Iu!yP1)zpDPHTw zYNNuaL31w*#c)|f_-VzHb&TizgF^j!31l528Mvw)$NPS2wSpq-an4I!%TD+AO_FOo zX7ckIpV<|E4qsTtn{>{GFAI@t?uMN*ON{XOdH&&_)1Y{c;a`b`&gaA5Cw_K$xv!Pa zfq8yS`zyIfYm$P5%xyCP2nM1Pdt_AZ_QDUrE*HXq7i$5Dc!U8~d>c>B3-6>EXxjk! zNz7e-By%L>860{vY4br2aJ13R-+3GiE9JerIG82>j(b;zGX#P9Pwx($rh+%+^^|H z-A=Lr^+$=3EL_6)6WBg0u0HGk6}2{Z$U4m1BYdWHT&&+<$sAa;Y@?gg5m2$**CNL! zfZ`3&M=q^f#Srd|{&fH|RMgB`9bLX~X7oN)4?7*mA23V6t;htCAj@s#Z}5qjIAwQ5k7(n9vCsV^OZ=N+y%Acms_cZos4;xV+*KCZ|M_6hr5lNgiw920zg zB8>rC{l^_=3TbGF_*lP;@pNrjPOPV6PTT%l56Ocg$196rbD!A7aCH0LH-B zuo~M2;HIJp66v}ce1zjGz#{qyVvN`O&r)h*z+WNPYu6ixavG$*L?h)Jpj8J5e7l-* zYUvndGXS`vN&B>E%R0bUbsL-~`m3BcWR*CeS6*TyEaVW8hyA`3aZ$|k(?PY54K&j~ zXPaz2%qY|8%_7|N^c~wnt*;sE!nUW^uH;y(#5AYRP)_Z}WrBjO)7J64sz@`Yr54|l zms=dlM}4VZ?@U-8RXPkCc3Gw05j4@e3_VloUL$~H0oxgrDX&UDH80SY{_ zXP>_O&EswgISc0wb1>8n-dW-g201m}8*lXlT<9bwhICe3y3{(SC?_K%#@pU}p~pA6X&4!V2; zZdrL9YP;cq7^@rj$JZs>kTy9%f@%({RyaC&Ix&=DUe1vl!#O`sesF;P0$1T+2J%bLhGg>WROa^* zhnYHub}9khY?q_%zG}gl5mLuIi>(KiLH&cL4Fj^ex0*PCdkFt4l%P;=FDGE%Y$T~f zvmM-X-nhBjJOaJZ_Ur_ECd4psipI&Y#l`hLAF75CzhND=m|vgFpiKnUXB~#fn)3xo zjc&55a)B-tCefjdiQ6=8R&rK@)8e46`Q3~njZ9nA&px-{s&k@xP@rw7yQ(WZ@}A3g zjY=CBLToT$qi%Po{TY5{9@OcaDGB;d*_t!j7iK^j7mHn&$A^;>ewgEA24!ROMfx(@ z$!k$05vW$FtW@$=)^`LV^5J={wDs@-P ziGtttnGO@~v{bzI>y9e8SDV1MZI*5qnTWASp+E++UkkYAkx?Ow-hgQ)nzbsWf@{|1 zT>%`f;;zgCK>g~2E2X&W^-Eo@pZ(Yw8yGRjd-k)H<&lGiF}8I13+nRIRdyU9Nq> z@33eF&i@xG{xu+({l5rEW@P^-yPSZDgX13$`g>(qSP7UJ80eV(Qv~?Gvl9OrkNh12 z{qL^te~18o?*Q}v(!l(^9UT7;B>Yc~*TmM?&d?GLnwjH&XQBUd{+E%R;s4}+HMQ&( zBv5^0lfD?{yH_hrd7dWvi5@^`AXNp332i2X)7vdX5}lQt);=D*ra7Rx-0MSPfJw>+ z>ppyrC);LFJ0>hW*|61&uMYWMI(CeL6u`e=%@k2CS(5`ehRQIEH6Fd}{7CP7Yur6c z#}3MO_KoMS;I0Yj&N>FB=r+9`t$Lo?cZg$mmxlhyVm53k7u&zPO~OSR7&`1Qe4a7U z=){&OzEfb;nT#AjAV<@EEx^r6nGla1-R|QPP`AJ$&jIO#x{l%reuBBpyssosrM9F^ zd+@^MD|>i~^u4Ox5nc;0p5&Z>iX3ld2m4K)>3#->m7NzwfWJG)bcWWsgj2qoiq$Wt ziW|d}&_g_M{IR`nfY{Euxw83%;Q0iW&#(D0Je`o;r@W;=p1mpi@#{NLf-1_ z9p36K_M`f8!0-b~t`S=W{+@{+mvO?tQ{6I7?^yP00Z@}4-}*cvKevBYt5hyzGvOf? z=8B;lk`A^28IEBJM3^k1iVzr%5V zS!&%aZ0DDwH@HW5)~hRLpe9R8oKi5m1@ov21j(<3E>`?SLnDgdqQ3K=I8sUD34jLv z&A9p^4jXsK#7VVTW|XUj>CcEte}q_i9yev-2;Dl#2+hNbjY>1OlsvYZO9G$+Pvtw& z62yz`V+5U$;KXJq0pVkwtRQNeMV4L@t)gn19e+DX2tn<$$s#nq4UlsJN7Iv@|6Z9v z`yCoeXFO>z&MGN*8dO%IhluJ0I7)bWai>XE`llQ`MAc5rDRL5ST8NGT9v8Mcf*_P8 zSmgoUDClQ+dJOp|8uIAW9hR}R!7OqB-QH$!aQ1EUYt8{^d^BBkZ{Eo97$|07HW|pf zmM4RIujs6%xt_BXr?!$;3%oasCp}}FVKJ`JI1fFe&S!vwDn^HTAtY0PR9-eb8HUJNl9~9si(iCaiXUD`M3TUp?+OnXv!nI>;x7;&nKQwtS=5HN7pK|ur z4R*;atnoxcr$++7M_5O4a)7J|eKl{mgOm1e?R|Nnt$FjJ88m1wgEHJwE>0Ghs7&J% z;HvJKD)|UhTE|pUp+j^h?Nc#8`~R-UP!O*PpRB$Hc?o*GG-obN4c1_l41|&}rxb z9`2VYj+4SM^VrhQTu-bpt*8=PRPj?#Gd||qX$LDd-YHw-*97^?&B(vgy-r=*n2M=NWaIfOCjalhN1<%l-#@ z=M~oUqHX)7pnxL1i1Z@8NRbu zv0q_x8`5xwmR$AzziFNc{(gHy-P6&GOIz94+RVh2>({rioSl&c5K~&2x?0lk3Ebn7 zHM6p?bfw`J;^UHVuyt@&b2KtB0KqM8<9I|vJbszK+PaKo>C9-SfIj`hNQMSe>!bkR*l;UK94-Afv?`!FZDkUj1 z32tp^L@(c`&o6LZa-QP4HA_dva?jr!{~W5cs)NI&-%I}tykaJ=cx1a{r-)N##(;G76M zmSVpfK#G>{u@*PQrTEBVFb+Q?caI6C!df%;Wd0tVYD<_t1I55lB``${dbUlkW-J$R zo7HT(Kg*`*C_>pQK^;Eqj;VJjAJ$1`8K-Hi4w2MlZWhqROS4XKb#WX6Lh?SxZrmJ7VLOacu%zzR;r8QH>f>>$T*;D%L>+aw&S z$B}LO{bR5Q;@Y{>TjY43-yyWqU~{h553SZ#-mX!Y@;TovWc>l<>!BSx%5RE8!IYmU zla~j;Xbftp;{{j`(=8V4&AlL`OEtBAz9~br)5_i>m@Vn9Pl+_;b9qvAihQTYv=tHw zspoRWulh1v{fdVb0MU)-!o2;WUCQhm@Dhph_X@ue5xgRy&FDr<)#B2&EhJx8#Bhz| z@-gbIzj*(D|3eUe0k$_>(Z}@yS&GD~_3W&^pE0!2tu%B7?bMiE0*T#yIP$fK;8PBL z6A@lrEZK%IkXsCJciBybOebiZy>(iK9rA|yq zi_tU#+kzr!B0K3mhsNGls=g^IV3L09Qw4qzX)d`kxE_P3ylhBR^TC`{tbrw~0T_cG zo<}02PW@PS1csB=jO%uzyQUwZm9E+GbT+6g>Paaa4{Vx~CCF{VHdz55sNuT#^9_f> z_23aZPbKXnbyaxgGB}*++$YH_-Tfj)vAgEpN|CbD>NlTKderJbChwH2wJNXFq;S;5 zb%OSib(^W>3J6K7WtQ_@CpW`iE5SLObI@9lE?sLiCv9Vcex0tcZ+@e1;ZGjq?d9WC zF$OBjTVyhK-JKAL89T@y2J3+0e&`=Ud7_ArA3yFFLIuB`^O3{#ff5dTai_Z zZZnH&7_y9-WeATV5YhvMQm^ADd!d0S;cMYM5&HP|!_|7-Brp<~!0c<^J5OY9& zJ9;pxY0X=-dm!nB4BV|7;jRxppv6wwLA?Cf^`Y5(rUmH`a1oh9$h&M<3ttY==-Y1c{J&|b3 zqqZb2S{2UDpvE~u$K;HGd>WCncOB#7hfvg;H8$Z#nreno$UT~NQi>xo;E>mN@t%%o zzE+=Zc4}zh;<6|J{$dI6uCBRteW6#X-?#_Gm`_|R$Fa>`X}}r7QQBSBDdQ1LY`gzD zzMPPWQc&c|napEKy0eCy@aHFT7}7>rnXL6myGNvHer2vgTaTe59Gfz9Z$=O15zJ zb?w-zSh62^=s!T$j3tLf3-1!A)j_}UzaS&&+${;JBUpe7HZguH3MmvUQ!~z>!NuQ5 zy@L>3JlgyW=^-Ykd)Mtib0)08!R$6a_SUw={E!uF-a^pJyaw`o{bH;Eh6#3&a32$@ zh4(Q?6yry0SVwu;e}&e}@qZFCv$NV3bo24}0!+BM5P=Hd*RS)b&eL%0ou?5^@GfsX zyN*KHXAy)`ags?!b6<;hidJiE@&qTs%oF)ne3y?-vj1uJpDyE!-2mad?TEsyccp4* z_0EfGvCnaN7yJIs6)S!P<65##x{8|8HwSBo3Jk5gO5^mI1qB-LG5yNx?ydxOUA?46 z34Gkn6|^QIZY^Y4uy3PRZ9<1d9wm{fcK6DH{T3zLT8H0`mAlMciIy^3o~6ps+#+1e z^tpGm%>d@h?9+jDxPec6nh>(5YC&~cTc%ag{r(NC`_+aYccl;Fk-nTK zBlavM8U|TctV%K&aqJM)Z7fF zowXwgZTfiXw1><0UgmicLv>r99ch43SD>AP7L`5aejACl^Q^i6EoDjgBU*)o+LsZl=cXYgpYLB;+*uv# zwC!G}qZAa}bl4G=JPB4Nzj7Fh6ILfLrxD1zvdblcX0zlx{qCexZ!%Kyk2`d4zk>6& zuU(OFM7+ly1zsY+{=|sGV0wz#o>^Fj<_Xpjm61D$&#d|N`0qXsm`u}EeWJ&ZBdN{A zJyN>YCHN~=u+k=THKC+(%qvs&rg4RkSVhhMd@-fwvzU@11~Og@%gT+Zj2S}9ufeSN9MxiLkrP~S&0(pMQnKxj*UM%|*i zfZtq;;X!k-qkKlk2WQLSLoLW;nMSIEbcsUBu9%w-R1E`4DX1IRvusGM=S8ez($)!e z!>|va3{o*~2{IDKoi?r3kTtF7L-fe0hd<{_x%+W4%sg7}sjkY&-q@&rUQG5ne(&I5 zuDU&^fj>w%nBQV4^qxZUZNz94cbf2QSTA_h&abS|HtkIZHr&FBA?Kkh-Q4V|iv1{J z`*}+SkDGI(THXPcYp>{SA5Q|NJH1Q!;CW%DGtn9S%rm&eRNldvrF`CvYgJcEGJ~T( zx6UHlzvo?tX1`abF!DA$3vLI-)I7_k48!O7^0UzS7@D=HF#1N9pfbrM1x14|WnRns zFYingeS1cK(l#MR3e_{~&=KgHAo3Ku7^CEn<$evfd5e)ITadqD5JQ))`9XeJQ(e)N zo>_k9_kImJAxSuIxTSkZuz2kuI|6@}-RVcgLhsR=gL!?OSo1A~(=yw@mXp^JPTq2E zE%=^dvJ!0H;otZpbgWvEypF8+1VY0Yuz0Sv{t+U#D!JFM+ob^$Rw76!l7iIE3FU$C zXW!8)Pg9gCf^^2ySM;Cw#*wzJh8*vIgcZAt4LwGx9pG&-iQ1vh8d~_QGUvyso3-d< z-qXD+V&H7R2U|&Oo6{-nYh5>G9r<9FcIcTj@`+MPIt@y}bm$zH7-I5hYwm5V;?Ysi zTg|mMZNWk-=Ic_TV2z&GL&zy@esmkIGL75qx`C=2Vg=0qEW$BqPuyBY+1I|}R-YPI zBi3X#Cmb9sq6I3mc3$XaS`aS$FkBvR&nW1+E3d-5P?lE}L0ldE)}S<9EV5vWA0n(e zN^VAhptHV{lerRz!>*jFojN!&ALLzhXxyR;hzxTDT3|YE$byGpx=ySHxT`e`2dm3V zHMH!GQW(#zCN~V8VrZL*h{{@tzxPik@dVayywG-Tur1kp`E2K9r01KNl3pC zo+9Y|&`8f~&169B3Eyx)cJG|)y_ibtXo+3?tgP{+NzW6NoK0*+nAfgVBepbD`{t5V z%8e;Wh;9gBN%>W1iteqG;x|pxm@~)IiIwrog1FNC(wW!pUaGblf}9ltMHCDz@` zH8#cvu0;0$#dho8RczzX6)sZoE*`<&!R&|@M|PBC8~=AD+wNV6=Z{VODy~U zD7OD7w*M`Pt!oJxrZv$+WjJ^0TRi9#LNw#BCewBwJqR_vCW5?P&VR1~d?l}UfUhK} zG!y4K{?%_Tm{8%fJFl2({Zf1a4n)9EPyaHLwA`P%O0T^YgxhGjCrr+f*1=XwiJ0bdtlqp8{%H4s!Pds1NW{U_ zo4&w|)j-6{JF-9uXFw({0g~fyVVC2L)VKajvW*&G&R=JFNlEGkQ2*TA?%D}|*&Poq z@e65oH>E?pG78s${$^`jXn9NUSS{D<8TgmlM*z=GDd>3WV%X27qnt^s08M#! z)SBCDC*n(XIWc4WffEJyc6+-H8>Qe0ySbXR7tCctwr>*@HsN=8xAHe3_Dr(?yDQ82 zmU-4%gB%8q^7He@>Orr>wyfxBe0%*agu0{om$LwiryK@g@3?fx&68-%_mK6mwmhNe zn{N$dxotYXb9GBGoPY^E__f`;#*F z1g1@|pR!^eB8Tpnp77m)LTx;*@8pp?t$>e~+uo~#icvG(#Z*uZOXubEpU8bCSH zoH&)DCxr&Cje#wTJLIpBV2zvdFd=tl@?xFpkXW+fmwfWaV5)2y0Vk#xePdrK-NBB_ ze63NolBV%@X4A+^sT~ow)|GYil10D<)K47tU7sSRJ2|upMe~}GIsPfB9)(W1yc3$_ zC2TQiGm?ULADe3nm9Cz!fi_22y9C}1XLTN>SBfIxXh<9ij(W@8qR4_TA^F^M=EzF4 zin<61X5QKQdoTTjA({yoS+L^QHNEF1QXs`a@AyVff4$qJ8`O>_rKlL@b=})(g?Wv#80QUp=I23 zd%|o(15Hd#ofYLwo;R48AF%Hb9ni-ZxagfrxyVI9WSgR=5%szm9e07B)EarP>m?q( zp=J98A3C>@eiK>1GoPQbqz7uz0^ZAWY}Kx?NNv3c2t*XW3P67Z9Xz zA~=(~b`|Ef*+-U4-Fb-ZzVUaTR4LkxMbObJi$%nG3$-aUetdJV{Z)?9=d@lW527;H zkm|;}Pe+}TyV&ae`3!GRb}oo1N*H^}`bj{#Cehz{W@o~)b_tM0j0q_B#MmDF!A3v}ReYR?Hs_jm#+dJ7+&{ThMVRWI8RR-ixP^ol_2EIu zv|J~L{N9<}E;!r$Sf&+yKYMIdLik?m^^s4pia%s61==OHB4$lf4k-3Pf>ALv?PXnR zBo?F^zTqrrfk-q~19kNh?w-5W@3zQ;>dGOm;}Pj|91m}-yo=>bdr;jxNEftBza%bu z(vPKy(eL?nJ?alSxCWiFZ?kHjY=Vn%pjbP~)E+!m$R#y^KtU=dPA|87qO1E^`Cu6I z8?qOZ?I7hoM+wfg$-H42CWeN?cqldRi7`so5#AqQ`R75WG~3E?5P9=- zEe)q*-)8*v!G2j^t83J2eJx=;GySti=M52~v1QytGvZ+6${R;C^>i>;9y(BnT3lw~gM z%k_R#gQw5QT3-&lM8(mASLSN5ZrAa^^EMx*sU>tjCV<{$`S9!U-+dnHf(189yQ^VP z{FAKH0L*#m)Q+mN0Iu3_=F#S|%sRDixTDhd>N60~Jr(U~5#r`==*Jp8#5oXoMWR{S zX_y*4DTV5AoVId|V0!TmILeLp9kLy0P<5Vr`})j#NO%_p#Fr4P(Z^wlbXMTP_i zk{t5Fhl%C7o#;|yn0fOlbRlQ)lpc1(3n@LTz2>LN2I&+1|KwsAj{E5uHPgnCZ5zGr z@)t~UASM`IbG3IR(4eR3G?!x+e5W%@@|uJQ`CxxVq;TJ5l>^plvE<%d@he3&>{iCJ_B@9h#rwH_=`5_oC?nT* znupgr!SlumerqA3;5-AtAPZuck=+_I;&?nypr+-pmUi^uZPPwm`FBj@_I`K3geDna zH~kQh`W|^PMgw8OZW^$|q;l@juE`GiUWHu!NZt=1>kCzqcN5*Y4 zR2)SW?9qi3C{EW9rJ~H$LRy2FIwz{W94WLsV%a7XhN_g#lHYNAzlON8mWP{Y-f^B! zgWl=vq@$O65%!ShxiJAK`axNOi$)GO_T`*Sw1J~%*D@IWaIqy;5QC!+thv7+oH#^1 zC&lx5`pm~RXO&{#t$%|ESPm{slp!5z&<(b`8f4BSEMb~h%8B}&YmP|uEn6F z5PsVf3+R(1xoV2JtZ8i(Z_h=B*y=N*_Zp!0&c zvt5{Fo=Y$RQJd!)YmrHSgQ+Fy+CsO9O;tE7qJK}COs4Qvaudr^9WieLg01KLNzkPgB6o%@aYWtgC&&M_ z31*rh^FqCSW)pj}!*_2kbnDutF)s(LegkSY;UwBDGvZJKiQkiB?cF$1CCFR2s}N;a zW+5u@leDsO7xthM>t_)`Q(JiAqs#3dO+6_7tS4JsFdCLH-H>1Kd?H&D4axrgBg)7< z$gJuR zyrkE!Uci_?tGoq_dfL5?F19_)ZvJ2FHbd46(lc?*cO`Ex$% zZ+}j(x&g}Du*Y7^;N_74*j0(rora#0@wG~u>v^(vySlJ&95uAt--V6mZYj3;uN#=B}71cZH)78#@8>t zXUY5-Uw4EHCOtyRKSZk0NXMNr#HTX!&b98cjx=3x{g{nmtWm}+aLeaEoAUkb%Z*^=CON-K2@Fbsr zYcq^6Ral9KfgE2a>pEiL`WlA5z5lV=U;<;L+ECEY=mSdaLJybr_`L4rt&OEgMy52I z)a8zffu_}v%mqPwuv{FOCJqPaybY(SJY=WS5@JL2W5(bjg9(L!OiZ??h(!9JJHG2CW zh>wiu#Q5=13XR)~w)u7XkonAJmeQ@79 zFRW}hrBa?Dh}kV0f6bo%F>vMeuE2}byAfx5`nuFa6RB)Az3fmpGNBVMiMo$Ff(wo# zM7M!qW!VTK9&O@gyCvkJEEYa*9v#i_NScQ1A$KsWB~7;-k*k&?SGQf(!ud(W!j0*L zx9hB2s(*qNQ{J%)tbHYNn=Z+~>0Gp24H9uIyzG91`ZBOz$&aKAh>yv|778Vj&U=}o zP#Bu+a;l0D355s`!xW{+%R70+xYWoi-nF#!Mb0o7Mr^A(u`^eTxW>pCp5N=wrBoN< zwixgD($WlPea16UDE9Kc>fsbtCXU3XWUZ+j;(*`#HouG(B#viF7UfZGg<*$4#VO|5 z@!A^uwseK-6P3^(w#6>VJn3M^>6tvb0UK#;y}91GI>V=*xc(Af{1|}vI`FKbL(MKG zEX$0J1=~RPUa9%C*QIcSOmYm2k}SL#yH)qh;ZVewAEKo7fiKzy`U2$=E#-maiNo>= z-%GD!~?d9uE8UgCrxiZ6i^ye%vgBdjH)|Y%nY@N-1u15^7cr!5|2R4 z?Zvy$)!*f~d_?Etjj{vnlm->3D`=b7_dls`Sl?a=_>DNX@O_^L}H_IeY#5(a!mcBpT8WO7Ww_mTE3SA;FR-=XJav5;&Pe+mt_FJCj9!LrZXDt(4Ue z?;d($Xxj(iB?_?3bbILOcs1~Y;xem9)I!{xOWaFCxf|@i9{=6v!I7>Dv{vGfV~Fl+ zD%_4IN+N^d-dh`9Um+U(;pBe2r4&n^VdQ(TpQsq0>W#auRIp| zTN)n?1x=KN7JkDc^MRsm4Z*D+!Fd;O%p~~RwVZe)5~8H7CR*!>W*OHd9h1o`XS%Qe zi-s&F{8hfH|Co#a9vWvw?J0|mLTod9rG5q2)!DVG5OZw<7P|-gu8y&U-S@$6^P|=# z5UF05RLmTPHf*+_1emWG#uL59Lvy~*r8?(oLkj|K|Kwt5xld|-bHX$W^uC?FLj#`I z3y_3>VB|2#0ZiEv9fF%(mL!O4+1DB!y1zX5#A>xnMQdkQAU`+Xd;inBSWB0LYRsP| z7TFA3qKkR0;X8@8UdKFETSwHh1Zn3Rl1!@LE}Xe?7#r>@c2+f}eZjJj^oLAq{ym9I zP8qbYu4U6gm+1}OE~({oVWR4gjmYfMT$LKOi|{l>@$B>J7wbuj5P4L_K9~Nf13TR; z?W(V2v5ox-(vlOa7pGNFRm5FeAr8^dKcM$H2deyj>olZ5pswiT)MctdqY1E^PL-nf zO)fepMmb;u4GUYoFcmBc4a)HI|@Jf zQjfBLntdpDK>@gzCW_l&bHqh*pDK0Zokm^X-65$y1Qf2HCIy16g0nMjjm{^fC&I%= zADhlDH9N&{$#}vANr()ogj+L)Pd3q2gJ|_T z^EUfJ{?=JB465qv#W|fE<(f|!g`%II?m{}#nIoqE>pu}itOrSbio$%ZmVmiufF znyD}0cpFui_W2}ZxqfTaHM3lxP0(4YpARfIbc<3uP4Hu>m%tAF{nRH`OEptTiUvvP z95esem@X%d9fBd2O7ru=j^R0O43r*yVl)5ts&>%@Tk*_n29!;rS-mgsLC`0hLWg@ z5ir6p;sDJW2emxl7xR8fv*K38tec0M{KZj<2+Ppa7Rr+sLTMx96b*HNTB;Xt_QiPO zm_Yfd$<}MTPk2)uSwQmBFw-+q4W@3!r$<($mH~gU8)cad3GGK*7UB&veivdE18tM~ ztV2&VN5H8-4;TG_TFUJ*9b%%qeIe8>23HI{t`GLkHOL%VRn$-iKet}!DyT{(MBt4C z5S8Fz9Ja6rY)WOmu0Lnj5|?LwY3A%x7ZhMDd-`|Po0ps6Z`_x9@V1b5cC^r-=q~hN zbD;75b%W>?zS;4o1a*%a$3~-==GuHi-BdReQgfznr#wZnR!;YWgM(j)NLIO6&rZKt zsoxlp(z1OOCW`bsSWz!~)1TxLR7{&PmnWD+t04QXbYs@&hBKi%onYs!ai;}zz$nIU zm6p_mKUzmTI=+%PI(ZgXmeo4bzdN-HQN~DM`#$D8w_Nh<#7p>7Yw*II9N`_iGVafG zOG4n6Y6ND1@e=J_$YQjjf@yEwWP_3XbNI?mity%2O%G3)=K0aLk-U~WYW911AV;=U z!IwM|qS$?&cuYG5;&h*3UE$yiYxK-v_TXz4e4%4k`(8{}EPSWZkLPoXj4ChJ%yM>F zx--@zS1P1n`0}Tf9=6p_YY_)AcDR|(VZMWIW-j|cfnMlZ1|bWRMUeAoS3HI!NjyB( zD^<5q`AzIz?P7bZU{4g-!i{H0XltKrfo@ls@`hpKzKoi#2J?cMye7|DXkS`J4D#(|wtqE2WyS?l};5dLh z%u4ceiW1R{E{oQ18jIj}$Onmo7>xo8ZOMG0hRa1}ypr?Hu3<9@xe^gA$B*vlZh;%i zojT+ty2kpH-yw8N8RVkyWv{C!8Z#B=3_2Gs16{!n-WohR?9PCJ zAxvsLfp$9`-R=ENYs@^`KV}456W>*-Q``*U!iAak4vArxSz~B`fqtC}*S1q`NLok5 z3a(MOI@IGTydJM`UgN+@>hJvisUnH*=2k(_%{9`UPCKy|=TI+DXjKmfjI^KbLCR`s zc1I3j>cK&->~1ptpeDiqw^7fdqAm*WP#cBP3~$k^NtYk0|~Ct2qs25 zYtp5r+FDzd1`qOMN~=9%PWPwlw$9xXHK1BgnP;*XqWI@2N5Z$J5}l;}sR${Wi56@7 zCLGi%8Tk@YB0>c8Jj#Q+osj-$ELg?*De0@Y3|~jF&Bk^Lx=4&X*0!u%~VhVHj&TSTr%Zcej7Iv)>Ol6=E_! zD7olwd_iVD>oHrXK)YZDNS71}#QQw&ZAX+|Og5xWA5V%=n%)ntNW&RyZkw~YU`LhR z!7m5g^<3sClH{=(%=w=Oon+eBi}O!kCxD8mH*%iyz3?5tHC88y_qEw+ueNM|BTX_R_R>Fe&4`&tGYzoc~f#KRM}TwRsr4ur&TROhxvYDd)F%*P|{ z+xM;^f9^t&J z^Wf|O<=AY4OSl^BuzcjTLG%v_raG2jp8B@8W($VHenXm0)nuKVc7x~ryN62u>|zX1 zej(q2UE@vXs4_)uXLZ7YE!z`Q%C&Sv|cx zRRqHI*7_pDNNN^W-GzxI(d4ll#VZf`SaEHTq{Q; zS-h++zKros#v9ibN@k^_N*a15(iB$wr&CEkC1C2Z>x&5*V(CqtQ2@YJP=;tSjTc#+)GT13}b#&5c|y7jmg8nPx@ z^njT@$HFb^%RT28%&cc1L}Z>vPN}o)kDstcTx(1W0`n}bPzUOk`Li+s%@zddp`eD8 z^8Dy-&QL6K1h9BnQ$-G!6k2&OYj{f9c z0^z44TZ`>J#?ARx_sn*Jzhn=7lu=!23P`7S(_(ZyknVWf&yV1}GP@zP0DcNJvrnlp zM}Sjn*7D#wC=w0}AmJQjaClK99Fk~2t0C=MDOJ>iq?(ojpl>bs8L-yaK4@|_i{&b( zpb*DpVS&P>iaj1Yo`kOG@^V+nz!DS*Hwch$V^~(dNVsI$)BlcyLpF37;veU6pIg`L zKV_U&&pvhegXjfUhBdVbs=c;RzWcON%IkEQwxYqKEixMY_@cc=l-|<%kL|VV-M`vv ztT2STC3y^c{pFrHl9L~LEa5j<8c2Za(%xdKj0!s*dKjB zs4ZRPIoq~)q3T|@hA(h}mF7pEnefvk2}J~{-7u?+FG>jaokM>TI(=fwms2`?VW}wr zmfB3)X8FiaGX!X_iJBD~K0wttwBGZ~)_;J3oLDc~Yir&;Eb6-eI>7PqX&3}R2MTG< zeghY|^5ScUtEuxVHucyRQ(O$tCv>5%nyJO4S~%Ix-m`S!?c z$uvUk@yS(TGink59cU)+U6N$-`mMdjT>W4KsBz#F)!14Uw{)6rP29bxaaaR2j&2}H z&>^e7OcF+bB;m<)rqA6|pvLjEK*jvk&mt#%J?smgpjfUAW6s!eD69>*JfX?(jqi*m+(>3PfP9Aw!?b- z11o;OQX4hj1T3{hz)~~(l_XG(9&v+ik+~=!!_12cK~=2QUl;>JDJ3 zwcnk|So^8!#=*t0S(fAFZWrTirG>Zn$EjdrqJw9iAX^Jk#8nkY5;k*DH4g8t2xss3jq_OT zW)9V`^pVI?8%&(~PnKdx+JSV@bhx<4937cJAXDx@qu z)oEtwPE@cnp-s{3_#lgu>^)y6{wWz2J$;b>?xM?)E@k;au+HO&bBkj9&EZY%ViiTQ zQYrh{>(F`%<+WQl#7*1(ix2Ud+>(+nOD(b zRjJxZHB%PcL8_pYR47Xqzgw#kJw zhjGX53paUm2Ssx|O90P!n^t=h()ntUloOOES#4zXVlQO`_EIM^552V&lh042G}C#8 zi_%b8D4RM^MElkS6O6woqCu(`iE^I-{o4fXd(xkQ{;gKj`ET&k9soZD7IvZfw}e0u zErBs~%=Z0lE=nG0Go}?g|FTX1e#*yQvOxUFe2$cR0nF!{VppDKI5YGLtQa>G=-30~HB=~Y@q7~5U_%WPXm&w2gy+CV_9R~; za6^~;A{1yGSq4G@RS9)r7ko1TJ?7cejhJ8>lb?I(^+SREwluyJU@x`f^#JzLAHZH( z^eYsIuseMX3k*YK8A|i&l*)$CJcznMlWq!Rp&>s*0eesO7(k#&x{F*QpE?kN@d`CDX3sR-s#i8mYvyKqvqQLIIBfR2C{~(b=I7gaV|Op}-Ol3iSSqP{2DS%V*ag z=-(m{YhIfG^SMqpv6#?wq0k^;wZT3ou&uX7rk4_~&1246q-R&_eXPWMsYV+|za`18 zIYvQE8@gwR=PHe^f}|djn?0~#t5V}E-fzfIGK;nX`nS>IBn~FNbe&H+=CC@#mDUd_ zJ(`8mWpR^gn5NG&e=?uksJ0|q{iwAe_2@2Z@ljl>sOg_`Ogx3%y^$$K&Cb}R!~Gr& z$D_KkCN(xNiH7ek3nkFMwKnKiFA)X$w_kw%?O6HBVkM5ElRPgVtoW65{zXsdMM^f$qtYK~(?N&7re#pA5FmW#3IiaaB-Un2oS`1bQ9|vd zi^NU=JQsUumzl~^`TaCq+Thab?{OmP@ef^xkY*e|kZsdl7dhYo3Wg@)G>k4kwXRRp!0|?=ssHHl|Hoq6MaRLRp<>DC)rK zDnK1*1y&4Hi2?x!RQ+3KY=QHK$u~PPoq34{43(`Fg^`#0RpKY54 zKatNt0QuY_U|M5a0!a7kHUT^mKatPwm&+3yDCD#20{P79*5U2@jzT_B&&O}N{6phD zfP5a=GWkygHFWEm9Tb+;qL5FG`~np6d0#S%m-I2DBtX3DkTVIB=O=Yw7v<|xv?^C} zm~}S7?{5KBlo6}WJZif{K9{}?Mh;uGyw*E1L`C%D@Zzf+dyP08j> zj}mQvjy>BrsHr3$ADCt679o%&=r~E+=uvOGbdpLKqZU*80QT=qXOhm@>*@_~=Le2g z2^UIwc>N@_CquBp&h~|?3iftC0)nlz$Vm2Fg7F^wy8IXmaHT`GYz(*PkD?PMF2gXc z=K?7R)M6S&)Vy%Hm?G?kRw(ikwli8;_%t{zUPSi}5Fh4>W)znu;Uoa(S8f)e&aa>} zTMMqu+bU+%`4x*yLD3cF%kwLDfO|V>q{#jP^=1!kNfXJ!H^yymIGpJPCW$Re9yZ$v zFKnxP4T#4poH@g)ddkk^xI5f6o1-+@iEq?4Pw1soU=o=*7=BYsX1Ne0?_Nv5?VK&H zwoJHm!BFQ{`29MaVS;|6T52WFG}m+pJ(RE~A}GwS2IbWHvgBTBbuS*jXg%Pzfg=P! zrnH_G=tuafr}Lxw9Q|(g`h5;-W;CYkFyQ>k(kpC>yDz!u3dqka5QM$rfWfvxD9X+! zam4huVS+;@G#G}Y+tV^R8+g7^tJnZnJYM*N8QoBFK(q2Y*~@ zMqaIlZ!I3DP7?|pI&Cf9*le!wF%q-rZ@Q~TvBkr(O=k6Znh5hf&;0kdcCy7HA!=j< z;+$=}Fkuw29)Yot@rzj30w0w~%q)|aZhZam0k5Sfo{z@ebJ=Mbx)ms5c2yxrAX1;q zN3*+sTqyZ+^IX9(bGaIuG~*$drIM|8cq8ew6RV1(@vznM>_;3@DanG*4OwmZe>cQD zbMI!C(|9@G>>!@~9U}O`8o%@PJ|#hDo}D3nkm@Lpxq`A4&9$lcM@{c@O~2TEC{OA{ zi;1T_WhecG5vY$sibQA#)Dyt-g2atnZ`AgTdiH6YVx%6Yeljh(taKQ1E=65+FpuMk zSv!CaeEYdEqBhX`>e{m;KlK~+`~OM5IeQ%+XjMPk1EDa2oePX$sgGMCwifwejg2X^ zk6Z7VJepj?5}VF~QP%D-_&O3dIK2!QjW+(MqaC^0dZ?ov*01C(I5SqwZw9397>MBK zxZt7MY#pD}yv&r7I{}BS9Det1b3;7n79-`6PAblg9%~oj@?8_i9iI6FXncoh4;{;k z9}iidd&juZd9nT^2|mqzlqJzmBOKqNp(Zun`r@G5T4pu5;a0qJG0Fr-zqKG!b=7V; zj-yjSP5+-nTr%_%Mm7F}akw{+uWmAS{nN2=NF`HSd3!6c3TzZq)hDWln! zLoLAWuc5Zp35lD@^FB{+5VnstKIw;M8UQJ2(`8D!acfmE6T&Yq#zS}KPEOoPAQnKg z=a(W-RJL5JVh5h=+@fQ z5gxl95o;md8q|+#kSu#5Wx9ip8W3G-b2 zmcYp9fXk`2Nq$+()iJ#qGY#&kr=>XTZCnIL6?3bpfnx5|Ttgc=P|OvI8_@xZ zxjcL)STo9~V(veHtyo=%D`+$=YsS&=`S9U!?D~K((2keW6As z=k1y49^%PJhvPbE*ZXjVa=~dc)mh$NNFxiLirIfB%%uJlW~o0cf|>>dEGOPB8PP@= zvROS`-|nC3Kb^ki*@m8g<3NSrIm%Cie|F)ECGR#!P3{cq5wa88bF#$Zo5Is=xeWE`K?g2!6keDLjs+V6Wfnh_b3B+vTr#=r}M}-F(AIqNs z;XyxMe3!oDa3{$Pp@q*Lbl?RV6eRW9DQEB3YO1Cn9}&#ven(OGM~NUMQO3Z$tL;kj zDxYZw$0=)4Ylf66`jVgeABPMpl6&gx7ig$cyGbrH4`hQ z3&=So9&)GhkI}wDW!ZNoE3rgQS|A=wBQr0%C+B=;kQbnLvdS?iqkf8O+`s?e+LY zi9QqV3Jxy{aV=Uh;%Lj7`m?e7*@GNJ2&cs9jSK@CyBYcdicfPeE#KuY*ao<_N$sU+ zm%`b3fXj(Osx8xYtIDXxu81GvW9tJX+J@i);Swz&(AZ7yAF{$khOzy#l@g@*RP|Qe zCp8o$8ar2bAnBZ|WE*jab3OB}?59Bw>&8~#a-wKfJ#aa(AT-%}kf~C#Kma-uH46Ey zu^Shv6}j-OutjS(T9K9kx{RK8C0T^|&&I9}+>Bw0A{}V#qT&OfvAcfJ*yRHnyCPgX zsLP34A6l4t#Zl>jn2w8Cd0kccqTxF7h|GKN2z5Dey#R3_3Z$nfA=sk=FGVxwk2Z7dy|TjP!JEu6CnA#S6aSqGKGoxd5TT^rtL<^o|}fojwk=| z!xOS$US?6!f(}5UIi5b3qCOTY?81vJ0S*&YUA38WK6!Uk3LLPZ`{N5;p-Q&K;fv?B z2yE8za$t{Vh#vf7pwQHP1R*0?Ls^8;>4|pp$_2iR>>$QWK(drNByw)=@91$K#M2BIe22MB7)yZ5o zzVb8ZP&LA_v1m!>j=+>CI=s0WB^^EbAC2Ns^hw|Oom;{-Pjlo!1M zlsQ>RRt{g(i_JC~6LpQtef3J~zuZ^7q6Awrn8EtRzv?4giLSDK0=#Xct&o#`>(!se z8p^1;Mtt!(VKaR24?)Ay z>$k0whTrz$V;h%Vb3DlMW0?LCpTF~=_ut!D(_ZxnVWRrG=40?L#Y~;^z;U+G{+Jk( z={DH)Se#RKFh+o7nb2QZgZ#hF8g70(_%2W|JHofQFFbtc;2GN?ooZ)0YX~lYU;ku( z6<3Vs;L?YwUO&pGuK+-3TKDKCAWn5|{bULHd7!N#cGZ+cx55sFx>R%^ydB1_BsPXN z@rr7cr|rMmb&rW=EnfAGfLhy{;rz#ss5rS^hRQAg%)IEoVCI2?MS0XGd!gr@c76V+ zCNJq>T{+(czyQ?Y6nshmdekeJV7BdWM57vYvB*dt1$Ez8O3*KOXLvCQb+M=s9d)tjyXNuHw?eJx*&$S{`j^DZ)LjqKdaiXA zdvUQSrBfekiVh|6Tt4Zm2{;`*2fR7A2n_|#o>`(~)~`7yW|TQ1hMZ;L0k*o_^>jj(+etTXPFbVoVoAisDK>ACw-<>+D=n`E zr)hn2%Y~E!iXaEKTtvzQ1YZTP^Pnoe|5yY0rQL@5%j+@;CL-yj&o-Tn&8`NeH&V#2 z<-4p?lHECbxy5u3DOsWPv_zi?Jh?Z}pATTAFcelgYz2Y>&r103mOkzcsJZ`QpZr3%HklZkSCz14cQ?oVQ?d7kdqM;QZd80?BXionRdv6&P_1eCF zE1-ZuNvF~s(jXy9cMKf@(hWmMgCIE|jf6IvL{{Ppy zpS7O#{Pvr@<`r-D<@LSJpYAUV0l9%<4;uJhbza0&LOQqjMZiVkd%xoo*& z!Vevvvg+mF}(DgSjwuM?}7Kd`(8~)58@AZfA-RoZ%S0~e7!C`KeSeLa*!3O!s$@!uS-|Un>-9wI=PMT)1_kp;I@LrxcP=$ZuS5 zS(#WebYw+kIA(J2m-7>JrqPz;E@tLt^>l5@l2YKg_1={1;F>ihVNK5M^2M%4oH_I4 zAtu3DG>_1ZUO!qyJ(aItejHc5CI3)+kzMHEQzYXKQaBaEfakX!ZpLqiVtv$tU4^Ft zjUPR20)?=Ygk;gh_txhUJ-?Mr8_LfNr{7+w{w5}F^iG>`ke8oGmRqepJnK?BGd(5B zGKOZ+JSvcsL-`W7WlYi&4=s@;H^=9X+WXaI`oxhp};PTlLyK znap9728rs`3_FYJ%rpw+OS~J8UF+mNav0CwFMWJ}I!>(B;FGyxU2X(wr@Z2Teh_N=DKc22g+Fk zvW6zr$P~CK(B1rklz8cn_LwO@y(y{=b&pVh6*4D_7N%Kk*;o+b4YkC2IwtSfR6le^DCXtMkB1n}$0`M4q=sR1 zp2&F2inN&|z&;Bmi8xOSD(CQNOYYvISZf%V_bIDQcdXJ+?*K#^=D&Kir$LUbZa-^58*%x1CZM-Ha{*&eL=S0MmiG}dH90NvN z>w0RFFFqyrrAO$dGi&Q?<=|-jjF;ZIUvrVZ%nSY>YZYO1qXIkO`9+QJ zmpgd2+!eKtZpYx_s+_!M#K>3nFu!AE&>@xoitkCnIG(fw=~PeRw0Bk}ueq+Z&c-7w zKjQ`EZoGPNoQf3Hz`)LErx$CFo;jE2O7v(}ZCeO7&~KhrIBTY8$(5znOr zzK3ol&CP)qB{{UyuKREa=m@Il_4HpJG(ZiPq-kuII=Llq$fWb}m1Yz{^|DTCgy$W3q4brPxP_0;MI@0CuMVqEzw{nL39({DFcd1vf#)2+^8JKmX&n#S^P zlS(qxY!Dzmkr}QQhv`TZY+@N?_qea1^E>C~`Q;JBJDp{(45SF1chr%mwZ2p6LoP#A zdE8Gu#-e8+Q*?hzGcE+^A6&xtO1Xu2{>Ht4-UI;(0dmdgOU?um@A9(oX{qQ zEXQ1|Sw})NKzW7H%$vZ{|Lpn`CYD04frK8tHbmr*lc*%s&PlRYdc0+A-&d~9sI9|~WZAlN4Q!)rfcdAIwf z*aD9Rt0+ZH4H(Cb=ikr*QWZGU7m%#(L=%d&o7w*Ai`nHFG=vf{^$V-J!jo+8-v zYovR)hTm~)ei?8uiyaQKaI@DiIfrC160j}0h3>yM>s@^wJ>r#XGlmx1wCtm(eOf|r zM;<3}W@QFA;&OQpF@w38t96x-bEOF){4{hKKjnbGtBgMz56LQ{*U$b8hyEsZNi&*# zKacMhn-&|XZ)Iajbjj(BLgWl7yGDlF0KOjTVjI4aMnxUxY1GaIgt0Tjf`t$rqr&~k z6Ui9A0)H@+RdUUOo&vA0=f3ShSC)ibs*Ej(l0;{WHi6H^GIya@AM>h987b}QY3@sJ zN0Zn#>cJr zB9ckhCJJ&N8D0KyRM`h>?8(CEj?tE?-;gpBpm%Gu31L(2Zc$|ZSV*KSW3dSXBP~VL ze6vYhp<|k(2VZ+?q-Z`Ge(dyn(S@^q!{~@o`du3KP}ja4Xa-4ahPPeIP?lcp*h(C{ zp39Zyo&cF#+m7Crc&toI!>QpO^7nJiUN(6Q z4K0lHsO|`tHBZr&tmCOGRXquoW%mr{@5!UUEkab1qmQe)@tS&dm$WSAOAt1Ayn@&H z%k2yOZ(AQFI)X~MPdyu41@cuIUVow78Q@Ez`NV4dwl|V4vkfS#vY3;VL>nTUmP^PS z#5|oIO&k2cOY}kDzW_>eTgvMmvv4EOM)+?$vk%C@Kf7 zTc|j|<`)A8S}3YmVD!fhLjBnK4xeR=@|nRI;+AjkdR?}~k*1!vEWd7_Nj0By!IM_@ zyGug$!Cd)yg__cvaNE;d7ym3t8mCQ{1fcz8Tl7sFk@sx%lo4I?+J|B?&IgaZIX>zTOW7XO zQj;iVy+Yp59JpVy$Ayyi%!gUIUs9Uno}UK`Q!W03ljfn+9)&dP`?o5jRd08DxU?-| zP4L%f)2HBQtZlIbbdn~%6k5^Zp`zGa3!itjNw1A{6Eh?T})|PkcLI;CJbm)Pj!tGw8V5>W$E(<8U#t;#- zt`U8Wkg<5}&aDQ3`S66b+qD0klJkW}zK&WEcL-(z9-(9ALnE>4)wjQW-e<7uvrqzO z*%_+YFREB{%@Y->_0up|MLPh9^M}d)L2>n-&vr>#=-S3 z8%oy``|TI_P@XSedbw^kt7Z}-28a>z%UP!c6tIb*V648(d;IM%eA~6w)7rt%{ylqa zUq=hRVJKVMzy4=e?G=fFuFvIg2EpcY)4P&-0Fon@>Vq{LXAQxgiWDi^t^QJ97!F1L zhCR%w?M8M;tmlQR45+e%!YCJ9W;ae!Pg-O;dVipRBUN+kz+rqg*{N|Hoy$ta-)KTR zI7jqF4akEoacac~W^5AS=D9Y7+N*Sc0lRp35`MI1&$>jWCUFSQ0o%J0ozEMZhfB7_ zTa}_YV2V+Z0hOQwzm1f6ImKTft=x;8~kdu7if^fhFdhlksV7Sozr!YA^&~sfyIrTJ^%2?t3R}iOC z=pa4gRg3rv7t1lb}lJBBQEj5^;Rla%5do} zYLahdVuil)a>T7Wk|bb3+MA$HWat^M9`+G*Ex$DA#+1+c^Y?Ggfnn%z9<82vyr;k{ z`H>dUUCiij8X0Y?r+6t=qn@>M%w5@E50p{S1YK2GYYqI$b(kl6@n?Yj1AThox$vzH z8H|7!F1hOY(RrK=$WurRwaQ(nryPIHAhY^uV-^Tp9GWPNS&jlP7G^OTB&ubcTxYcJ zvzg>?)aWE7pCo&JiRq<-)^;|32X?i2M9wDN%Ux!JtpmT5>EO}8{mGm=Y6%(w2xcY3 z!I?5Jt|Q_#0p13Q2B+NJ&uJ={yWwn5@3t}(c0Jj74r9mD0aJHCUU6LrxcDr}NO%>`mHk$7iLAFWpXq*tP2Yk2hEkD^B9(+j+9%OD;EpScmu8H231$ zo;#IE1Zm`MfBqD+iO-I+n=N@Lk&`YelbA_5U?Kg549{S`lio5>N#>cx{t24%ivk^~Gq8{u>KO{EO3_0VfLXWuBOm20r$H{u)h8c?ALTw9 zMyC3}b~x|D0T-GKkCS9VdFMKQ{Qmb#0e(?<;VequA1tELM)I;SeB`?$5Hh6haXDAI zFz32Ar?npq@EQ>vHtXZXw5><9G%m{|!^>LH|q@t?zR>DU-JNqH*=NDQ+K zE;wMMsE%cUW~D>VT&++~=6zYGC?>Uw)Nk3Cz_`>Nf;IS7gMr@TD+3wQ++v_T@Vk?i(lO`c0}{uQ=aaWfK2J;-Q=)>{ z#GkzT@%!Jt5b(pWRFvkPtADcZ7cygG#rPcKt|H&=37Sn~8yMPNJAO|HzRr!q7t4tw z>IE4US1|kJ3QnD>Q){jVB{dRe`-L)Nim|H&I8Q}~w$1}jhc9{5IaNZaK7`Olu5Pus z>VQK>f$>`!@OFhMsK6r|okDopi9A#VGoju+A*MHQUO}Y_ zc%^iv)`Un+DlD&`MWqwU|49ULwKr=Jx#>?ZTL%`)VCcp#bD$sOQ$TQDis0V8wQ z?9E#zP3n3j!c6#X-%yHWbDRl;ex+9VzGR!her8;yTRy~K_ZN5BqM~jk%^O18Hv(;* z)!cpYvQpXbQ*(@iBi{@80Q%Znb5ARieL}tv&SF38qj%t`23Nwy54>LtRyZo8>)LDi zKSnK34F8h$JVdsT5r7KQTx^*ZS(}>lVOELm71pv`q&}(iZy*-Dxy|eyF*(le8i3nM ze6*t9Hr`Uj?7=$TyG6f^eN-aFf53I2Rp9>+md7QR_@ugkGr01L8WX=--UoKJI>C}{ zv6ZO$5s2w>Fqp8F@~i9~UX(lIoX!o3>SV&SdoO`Y>GFnIk!k3xEgEb0iZqoo4zTRn z2R1?0#1@w0e664Lp;Gb(PFR}hq^Y7ELIQC^*}*J@Rwhcs7kk6Nw{!P0tils@lNStg zm1Hdz+>q>AFbk5tDu1g`w>0vjF2nqQ2#_g$HlAJ^%`eC&i_+z0hqjRi11ZaCr%;hB zet=dqZ=Pso9&hCJOOk{nFBN+|gHl4jm3fnu zn!U%B?3{KasYN8Zx2CRHtGHzKz^;g^IlP#R3-rN{q=#}$ zJP0%=!|m!{6a(+0APYi$+EQ|f-Ie`rDq)o#fER2tEgC1cystw$(DyB^EitNykFiid z77x3tnl{;oNz>3`8rF>Rr7{_X0^qmAl46|6KIal19SoS8N3JA$>v+2N%AvZSa>aVC zyQcbX>$4qNn5T2lxn;#^WTxI$lvedtXVtxDlCmF+=?Whk&L#9!s;+ggM=b#wh z5b(cl45@G0E@~&EjSZ$s+4#78u`-z*RH`T&vY=~x z2^U+TG+Af`dyUkSTb}s?VYQ%3Rf|UwCt%PZb)U5bXpU(Q(A7IkzakS_ByU-Rd9qMc z&OH7p4J^hc>Ga^dm69yP1+M|V)AJ22B0=);%3yqM#tPy+yAi(TybaarVbt&<@Z$xPA+!>)hInGH%*1KP-rKxUgE< z(8%aYg;d~}jg|G;>JIm3Kz&H&cI&K&;a98{DNd_Ws|`8{A8MmMSHtB?-bGY^t?CT5 z>ZqXH@@nO-5Zz$>gZJ*cdD}OL95{;_fYlc7h?~84 zg!hKha)f9u`4X97#Z8b|u5n#Ln_2hjL1zCESXE!y%~3u)1-hnegijXZWOrEAHZ)Kd z9R5%bu#^5E6fNc@U>JZZEM-Q$0pHMVK%~!4mBprf_3S5L5e)Un#Bwj77gfTVhX{We zxF@J1}!iJmeh-UDW+-*C& z@9-U3qJI4Tot9vDLEjlin58FQg>o^{CW2Igk;z{4Z41{jAL22Q*Rw^j9w19Wt1r%u zdZ1{K&NB$oowYE6ufG&G5W%op7i!%x%c{(RNDceXL7n?E2VZ&M1@G-v=WH)6q8c@Z))Htu}Fim+!z(K3Ok&ArWKzz+ zY86N;Qwvc-9pSl1W=(ArL&hn*cbK;pbg|7=-cD)QT`{J|G-+ngt_CofX*T0UR^&@D zMls7a+F{64Ji$%x;;}DOZDhh=0-Wtl9CMLu7(4=Cd`|5|uE1dD)o9=q%<38qJK}1o zz9Hts&l$_F&8wD;cmT{9(0WJ;gc4Mt6ky8T+{u3&P@3nOSZIZg!eym}%(+Tc380Po zLb#8@Bvm%H(5V#jwh$n9##FXBNwOj$3cFX!m1?ChrXTfxauiaj0 zD{0FrP!1)oDA;>xLzBw6im4fWHs~Pf0X~`=ccN~cmDiI+rt1|RKd6EYOA5x)50{D6 ziDQTp_jkS%*tZU8RTVQ8A-c(@(2B&LAuuleX+C|>ueb(p`Ac2G6whMIzQ%we8pMi! zy|4(7FkMHOJXA7fhIYzbCi~IDop9R(xBicVZZ{lPdk30@J!q=dc$V?bwtCznZ!yU$ z@s%4c%s!{kN|camgFQ*jkpt%RBH*aThDaQK#m0(@mZ)q)p9RQ?*v8-A64H=+C4!TL zQx!B^9zOW#WaCV}lViz`X8O$hNkf}<55v|V0l{zo5s)IC*(si^B46T5o;~vr5Ya;M z>c4T}UGJ#-xuVk~DtXZIG#3e(On@O?m#t}>InLVTo-M=_wp`Rc1ZVG+V!={G*^}FA z+rdtg4=1G_fc>q6vPq`Q@bb@J42l8N+j=qsHId*OGUGnNK)SKkPPm_zD>sv87>&>) zHqp~A1M8WQ4KM8cf$%&pQ+8#)kYLt9{L9dpcvlXQDXH*&hM*zZGr36X06aLsSu`#(Iv+igTCMAQm5OhPmTqM0bsfcL! zq=He#@vQ&&}Cy~ba2izv^U?9iP34CPdR z5JhUNU&hxXdW^Ogn67rD`4uPoAR->)Iq|7{iF*R9Ah%G-G4<#`2M7b|PWzLepD~-) z@E(Jk=f($tPfKb-1_;K|I4cg41w(ImK!aG7L`^St%vAX(!VV>J)u{wMZBK7%RLZAt zR}#tkZc_JlS63@Mp$w1QbdDSAGp=UQIJqVCsr;^x1+nA_oW7@h539w{oCGG_~Gg zn7054cn>!adD7`NvxtSCviFm`?%8$lRF(x4(N`8a@)YFSVTIF4StceR5`x9V_35Ju zRfa{(1FyRUZqCRM1w}qYtCE<+m1$fAha;rx>(-)gg+vqEVJ1C*z~aF?WUtYbzd5f( zd8VCyV+?v^Q;zGKQ8dnDwXtddc0d zC$m!$=zKGD-N`)g@!S4);ew!dQo(`^7$ybmHRiGr~9x;Av=Rj*mZEL9eX(Ks?X zB{W~$w~DePOA$MJ*ZRjn_tM@sDr%~rYvmXRunL(`PZT;$oAWMD8&AC#g%E=+v?AWf zp59vqkjO$v#vTcNgSIKcuh>OJMMl8c!I#u13}R!%Gx=EM_X@X6Zdn^RZp;G&xYTjp)%kf)R%<-2 z8kCfFE_#fI&U_pB`=tDZ?D==~Fz?ecTs_o%A>YmjR}cGtsE6`Z1~DZ+CS@J1dDA#E z#QkkjQBzDB<+4BSKf|@?Aixfp=#mcb(p)kDfU~7|eN~OTALr*_T54!k&_RYv+0tY& ze={YcS%5U})?w&FetHlZ=xo?A-~`c?B(AVfABX%g(UTiJOlL=bM#vt6?cx2XSJT90 zIDvfo+{5|$@_YTI8SI!=0=6E{NuIg;>uYeZ>C;<|03NRF&o!fLa(qHFLb5w}ic~48 z_X}p?=K@uG*K-f`7%Lu&JQzp$;zLh8_GqJDx08e{ncB~)sD4NFtKz5Eok1)a+>_25 zx(#sUaB-)JK?f)NgmLq#H3P03Ez$}B4Ob1*>f0|XY-8 z4TywJ8juMZ+&tQM5v{grl=%_G5s=A#%T0i(cGow#%x2*Sb9dfzPF`9{^bdp1qMHRm8zPq;IV)2Nrm(FM^Nm{>0uolfO-- z^~`KQ0BhA0bI>?9U~e32ul<&OjX30!Zpodg-T|vZVU<$g5Dx4{d4Hy4oOK;arDWw; zA-a_Fi8xAI25eR4>$`HiIr`=GRGVXe&(|}9+BvZa1KxMdFIf19&d9fK1n`OD`w<(UJ zU!H?f4xX&Xz>9g3TxK~(kE5$S#ZEk^q9?~XDjp8J{E;}z_k$O8qI(-~3rfnr?dcbyYk7jn5Q(_ATuQF@w-wh_7qc?&|p-PJ1>!;u_$ z^fT#y48!HlrkdS80jUr)_}PmSq_;A0iE+7erk+XSMs!&)BJy?*K$I=}o@9iu9M}C( z6A%YT-8M?YHHG4_(+U}%SEa{NHn@KF;XV333X5Ki!lZA09fjvkPdE8uoos-}sR4ks z=Z1jEGDZGIJn}Nyvz+n{`aN{RM%^<;A6Tya?Arg2^+|_@mlZ6{qoL5e>Dg_>AuFq)ygQzits*~3+(wn z&a_bB$;a>Lzy^JM4#xv)wQ8I4q+J_!n?7&#>@+*YR$G3lVD;+Tjd|&``IbjVwTQc?7+_2`IU5%;N9Cg)hodpwpiEN;K`D` z6D310(XVbvRTDoZHXy&{DR1KeN6ZX{Nrp~75t&fcxi^MBdzJm>UAq}Opoa@3Df8qv z=HZkcFTIa@cRlSb@H|I&BKP1`L&}h+`Ozq3WqS#H2lKDI^`_^n((remed3L|D!9`0I!gAv4o8%|USohZQyc`YFWNoMRlPY}T z@1C)+7smI&w_xc#eDHncBS2CLAAH59e+<5}!GN~EJYy?Rx=z;pp>{XyRM8}v{y&sJ zP=PYFYKIs0JLmrMJSsC)K!f=8O{L{#{_RUyJRRzHj~Z%__q`96O^O*w7p^U3%1Ck>{D023XF@@ zn`e?+eiX z3sw($ZST8bM&J0TSE5>-`&t5g)MRYCIDt3UFu!uLCGkWXZi#?}5-)#eiO^vR4qT6H z4Lt(|XTFrANj#V7Ylbk-(MzxYY=m@u&EYWTy}n7RZlz@gr@ZH%&PuPn)7zdbrwMV3 z`Q&2D#>3Oz4m=+Bxp?>;K+)_GC`!uPMR4OYhB0A;*KOR>_8URTzVWIFCodFWGg!WH zvoXtRZJbcNT81bm{E${8gy&saCjBFwyrd%{t!$b6$V=MC-_lOiqzCfB-r?VGs)M1a zR5LbY(l@Jov~ZH|B&Q61Rn5_D8OAuRTb)&E-hDctW|hSC%1PZ~NE3e34+6ft!`Dk0 zbD`Mlz*{p9*UFWU3A#2w^!&cRPI2krrtmBLfnQAFpl{!**VM;r`$_yrRSO<~0FHxV z8%TPAU(yy*-b=44x8jXfu)o9Y_0QmKDd81estvOnIKFvl7Fi!ie_Up6daE7#yWV&C zd%e%n?L4NkGpv(DMb7myQ}GCKvN*nNdUr@LTnR(AsZ(jfZ0W2 zNf9*<#YFJq(|8#@Gm~y|Ymh-~47xb55qdNBD$Do;eqeb1%rXl7%Yk_Z z&oZ+7l4aag;;QY34)pYrAD#_+P=60Bg{;(H2bM1Xh?Fe;=fF}3VknYj9Na~c!eP6_ zFTHOnBh9%x%pqr}TFC-xQ!BrdIG*R`dN!e(Lf?FpQx;O)&Y2Z^0B}b-21k-5zX0Y? z=79^PZYW8yo5^2>{ux+W4E-CMtp;DClk1njk`S+FXlctYSw?#?c-$$5Fg!^M7RIK` z=9K^p_v6!SDbrYeR9k^`ZuboTTZDC?TE1^(DKL=%W0;Y|QIt>E3TQTvnaI*)HNaG{ z7BY}rM;KI-mQ?&a*P6v=br-nN@n>ME{&#_;%O;Ysf4AADC0?NZ_X10ne*~8B{<7Kp zcmJZU;z`A)EqKe#m2X=fl@b{@T!ofk8%aa6TGa8yTG?i0jo_-eC1r_3upD4Ppn z=OurgTKf5jU6{k<9`M(J`4Gus|BcWWGbqd03DA0|2|j{-+O^^vZxsPQeETd0-LgLm zGkLIfjvghx4SD|jJ0VcP!5rEP*lm1|27sGy4wgU6H^7pu(_b>o2eI0PiaSPFnuapr zaW|v{hnYL;ihmILL^xL5uR18HRYBTB3ZcsPSMUFUAN2DBKdgG;;C=^E`)Yp%Qv1xA zkRk4ptwLvz%@u#}O}FfmZ2HqTXK+eCBq_{3KFk%Tez>F`bZQ6F^`!cVL0G>A zu*ItHEYbA%L5DZBn3m6=-Oy5rxMz-53thZ?Equ6QfuEIr2UCU;M5L{fK@|nanY+wz%j3Dqq!obi?e_0-cSy&?_IR(GpuXICe1!MB4g;$Xf8 zukbS2i$yIgH%v}g)9&z_pSJBdq3!pXZAqE5Y>yne2Bg=V+)hUS45@V&{4{BbHFneb zaK#Qd?-INjz3DWaSPq%=Na$OEUxVZR)8Cma-fKd2`cFbtXApGZeI4&~sI2bepdbLn=xywImDjF_-~YJD9vVr`iJrgz zcShC0=4VE=^e@dCYJqK&T4X**RN!G~V(`+#U>@{^#;eG&zZVC<87$eR7NfeN=29J; za;=4PuVid?i>I{7P>GVg2rL~X&@IoF*r1vV%bX;dv5eZe&hu_nV2RPlY&`>dCT1+s_ffWDh5+@vN)|P2WDMhlBg%+3Cbt>AI~pj+VfA zPi;t?p5$MFCNj5cCcD4T_gIpB)~WndwTt(XYxjV0U{OH_8q8riZo*TvYC5pdfVTZg zFAPy|qiL1R%FrTrt}*~E*>46$Da8-S`m# zk2R(L5^IWrcOgjsitwBK&s_-I|G5jH?&mIqgX=DY_djAyr@xCeu}t{X{`>d=LW=z_ z#+t;w$C|umna0!|Ppi}tXVrLqih9EA_G)95^OhF0+^Me9?^kc(rvE(!e?9^IIR&5p1L&GOAZ*oI$s6AjvzQ)xhp+M7+?%%0 zDRU47fD9tH0hu@_I8%jl+1H@heZE}&-TrJgWyyYI{JC|=kn#a5Xi*O|}k(JO;5r0Scg6@S#+R(4U=YwW}%QsS3x98(&t@`^^0u?>ePbAjKv z2ASV;4Y7xF#N%p%cQccY#9RkG4mU*;p&W!SKf_u6^3O2Z09cONwiXG|WEEN5=As(b zUm2(NAO4=_-}rk3y?J~IK>p%q?o)B|-tyJOt}@Uu_#kkFH#~CTL;V6TZKjgXN$UXz zm##;iFf3Mv&o!LkUWnne$!sqq>Vc5Q;`3hJ^5moVZP2OvwYL|ul-~J_5C!Zqhegcv z?ko#o!{u^iFVR=kXFUBIU&!%Vo_b z@RE@FUrIuHuh3ST?`W&q;k)liCziC!;OnH*^7kxC?0-%=G5*Kczoii9L!IhrqnYxO(3M@wisqt4dq*T6Ik+%F>7aR8l)Mylq8- z^&wb=y;iB_AF7<*G5BY#42p6)ux*7XihHZ9Iycc{=lKz8rh!L%Wuv zpde}=k{PFPQgQCE>=ikf^9&|GMIFxy^zd+|mXI^5Uh(9{&Iu@_o<4A)PyK#;rR`kcx|QgcBlZ{Sul{dMA%sEwk)32e5wCc6bA5%;0D{G$iDE#x z!{EG!F9^v(4=JulQZ48}6)T@w53(Dd3LJgtEBS#wsJ?6d3aFJGtw2UftSER*xE~3n zkA`Q6*aUPDXpdE@X-}JeG=*5Jlua&BMa8Rg+FJ>;$#LdzKfM0qZeriQ_<%0~>feL$ zLWe&i|3Z1?7?d8vZDvs>m9=8qxF=w^xHZo0L@hS*oqRpi#M{tT1f<8mbO)IEd-_-A z9noC}sb0&i_PX!=34po5sS3B?Azkv#D+mH)2$I#x#^<%vf*D-LKw;%q^eg!$zb3Rd zgXavE2Yc8`osEqAl@#Qxx~;784lWi7`0{**{<)QZ5B)FJ@&p_V?}^aS)J4GQuUfbM zB`(lyf*p8U2$MZur#{~*;7qk$jC->^)9pB>=V*gRz%ORAJ_jq+Y0GpPA=NPLqE~Jh((s@|x{p%I|*_59gFR9Jn zl#l`V>dZcg6QR`*%yE&UklS0A#|67$6#zjRUWWuLp_qT9 z$-lak{#QwpKb(z9on?6G-q&AB_tw9c?sZ)`8&{19Nq;&U@OuBB8xxLX;LZl#FV4oR ztI|EI>(af8Rlx^Ind^@R&PDh1wnrCVbYK3_thMt~&j%U#(_lHQ?38S(mk&>EGP<;jt%tgT5A4XvzBfsqY+V$CAVyU2oBRAnuASV3cPer<5y?n zTEF=pO7|Z9=h8jVpG)`Ru1fa~URGuU)FC~YThr*75-ki7*FwD=Fi{1zZ}#Q>xNj*U7JL= zD!I7GX{SpiK*NVDbmYEeH6H0MEnFOGMJe&EU3}hx{6SM_Adgr2){S8I4(cy86cgGe)Z5iL&$3 z(}9!{bhq9|bc&S1O4QNaEoskDrf>G1V|b&5<8{G$R$M#ebl-oJKXpsm4s5Phw>65F zl+B=&E(=uZz>PYuO{vo_J+Eyx!Fx05IW_%Y-O0-)P!H>|g)HcSx!Z2f#gx~<;h6Hu ziS4bug^t;6dtOLgV(8cE=C0#*J#?1KGalYEeIS1_D0c98eQR#^982iL`Z1wAuDJO6 z!aDZD{EynjEJ$Pzo|yD~@am{DaZ`P40es0+Jw45Cn;CLQc5ujiaA<4E@%TNZD(fZ* zw1etK(%o1wvui9)PaOx;W*u9BQ;z!V=H_nJoTMX4_o?hQzRQDn56Y!c1 z$q@b3s5@q#6>f2}6iwfs>J(RkiORiviG{vX?el^K?TwSI`v>Hru||c!Ms(XxJow;7 zcY*}$)aMzQ;nA;Ls_>~Nkq@DbUv4b1lDPA*?vb_kA>*-Lgdc4$uq64@O;n{4xrpi^ z;P6O%Eb0{*WV|J#xSD=kLOyXLo5HA`RNGu}y1Lo%qa!t_>JbuE`WS06eX$La!BTZH(Y%#C`TafXlRvysoAhi{~G zFG;iqc&xC9)mLd_Q+YM3h@4!u?Kqz4?e6Ry6U+y&h?Qz_;mf~ik3&wa4f20V`IzY0 z%MbU%DQg0Hsaga=w3gd#wC92S%m`oJpP1prD|1QkOl-EgA_LRXDV?4j4jUm8=6u}0 zw>NoXfQFaH({Z0YOHnOOsIKv_NH;z1WE<;ze%PVRs;GDS#L;vhBang#LEcY1bio?n zz5BW1b{R8dNDdYp#Syu0(DW5sdw7BUmhe4-vq%G08H#pv+B>CM_vGsoq(HNGGKUNg z_=A!Cn7{af;3+xoF)cc$w-aA!aqBQc?a8yg;>(4|;0GluSXZBgwtQ4%W4%*5#-`n~ zbrES$#L_tEbjwM{ts@JjiJ*vKH2u)XGIW%{>Un?t?8X_X&Ex}EDVrz8RI{OQs{2c) zw^}5^)-ih41-FR4TE>a;M;LQI_q|yuNX{>-n>5Jz?!H$IO7>n5=-%PLK0@nzDI+yX zGoj|iVfLz_*V(qOf>t9x-O#5OoEbh|J9zqaQvEUA)91479cVYQADUqcRzW3G3*JRM zUChWcYGGz|*8NI$KvkK@`pytuLaP$1Rovgq*}F~Ot0R%X&V)MYPG30{CG_)1!Ootd86QUi6PhKOV<;{Kd7Vip( zsV9j-U@qKV36Br(QdeG20>Juoo07K-|ATo2YoJ!7|^vaDZqALolSNer+Em zHBVbn=W_{a#y5Fm(oxr4%2W8b!3>k+me!WvIo4oXi9zavukI-Lm9j^$*EUJ za9d96>#On)rV7u#tMn>lKNv5soqk$1k`g8ST1(NfqL3HwlHo0{^O5O~&tvizwVP?( z^J~jiks@EHPKh5jDk*BD=ns+DstoJ77xQ&sk_N9Z?P#$Pe|17%;M(YcM%T^i*(HmT z$K;_p(uMb3=GiT1sryo)%}W#`ocj=Bn~hngK_namvPhP(X(cYnn8>iWebN-l^=M5X0pR>87f(q zeTwVOD2()gY|$N9Se3BxJ6k=W=az}gOPI!ovA_I})zsrjj!jFl0}k7WAYCl6ZLE!r7tU<2vk-&MX|2RHl6E`8 zZ1 zVI=b#kXI?TNcuy^AcX=vc~@R+UVgxYoi|~meyRWFPXyQKwrB$^gedFeb~P?u2=pNQ zc@9;yj{uEmt7`V@1F|o;f;;j9%t)v-cl5;yj>0F52_*dfJ+~U-;1v!gw28OP%cL@S z8lPu2h-hA<4IR{z)0t zVNP@{P6;18-%GIK5rqGc8!0KB-?Dd^%G>2G%_&wSx_$@G(Boc0F~^%Kww}3yVd%P? z(u0>xdP|?pJ@of8GAxAHu4TT_PttZ~z2|q7F8Gw*o27Wus5<+NYMblFBf_>uP)Qv=@XT?%^x2RuXi!O1&Z+kBrA=xDQXc zVL3G!7Z4Wy(05B#!e4u*F+=#uO&VsKK3se3tx*K+bH{oe!TT5B@1dVhGU)i6@5JA# zVT$L?j=E@0;>JK%_dZr%=T5wm{XfLzH{ux#nv#Z#scxL!9ti`dDnt>9gt z+^n0l7eA*h#aj7J)H~ReSxdn=f~RiNJ~00{YK}p2M8h)IE&EBl_Fe4=PHB6M*w1ei z-;N5CcX2hViJ3|5PIn6X+0!#6{M;}$$rCzQ=(G|h0j z6}$y5iDZ)~+kQ)b-NgZ1>L&~bP7Gqy{Z%sO`wvYM?$Ix>AkEG(m2UV&r@D5fzIday z#C=U|XP^Md5FbnaB;H+L?nJh$!nBx!kko+*HG^aX+2DCb9oJE%{RI$|Yi zzI3??cSKY&#bhZehl@p|+c#ce)u%Xgm!xU4T$G`-xgizv+^uRT)LqKNb^PSjO!;ym zw|iGv!&pNKj>&hLehGEig{K`O7J)BIlBKYo?jZ#k-wY3ARU~8n|fF z33_A99_T)Ofc3CHkVI>peX_(6?$c;bqDGLu!{-^RuAomJocg@f;F$hrtbou*KXVsz zEa!@i#E$RVom+m-o(JQt%2a(Lf4+7A8_5ryZxtrfquvaS9G~MH*TKAMGt4`y^mfEb zh(k1qG6>hPb%6TEMu@K?gM$>W3u?yF?8@~Lw zfc~JI)73%hc0f4~6AAep%=z(~qNJ(c25w*~m0B!arX1~hkpJYuce+B^c#oym=bm72 z#XAvV_J-GKTzLBEMB}FDHJ78y&%|lpQk`>&l33+#>&tqc--i{9@sRp}+J~`QH3(y| zv5m^dF6Kyd&dk7b#`|mG#8S`G1;deU`JYh}-3z`w>rbX`do$jRpHfOhYjjGrnm^N59DDbcJZt<=Eg$ z)oB!iYz^aEvT(Y=ezU!!=eh1_@F>76o(jwz>*w1en2lY`^`puDR zOm)RMLZoeI8s(LjBqo|JI7!Eobbou98R^x>Ikzi2mE6Lh-hiOUoVXi#fr!8Nt_WL+ zYlWNhW)M{%){qd#QSkN6L+r5i_*9{~x`b!yc&uU+MP%H_tLfgj8cbu*gA-f>7xLbJ zLuhdQh0suR)OT>TF=CZAwK8W_Ffwq^q~zvh;pU>`=HX)D=Aq=}VPWH92hZ`au=8kB zvOZK46l7JUWD^!<6{F;2eQab8Uct!?uBgDOrmg}0kdlW3JOqEL=wRn);P6z>&dADv z62irYW=D*y46XIeu3h2aMZe_qpWu4`!U$e277mUxBOn~?EL@QP3r27QyZ>qg&wn<8 z9lS5v3Ql%#^OWpdz$Qv=E(q|;zw-nK`+w~TZuY+$!TVnr!NtMC#d~H12O9?qJ8;GS z-U`Uyt>F95R&emKv+(dyaD#ma->`!7?^d7}@jt}onJ?HtSp4aWQ_uXbd~y0MLx1cLzQ2Aq z>A%<^XTJDl#hEYu_g0*K)9Ig9{ExnliH{BP=hrc@|G)VQK>_u`vvX8< z4=;B=@I5cv<0o+$&-a-WUe%LJFDdW(Cx8F^3Y+e>@2ln~Ke2E%dwav|mllz>*{gex zE;}wI^Y8Rl&M67?=Ve!yUc~t4A9?(+CVD!$x|72t&!gRy!D8_fR3pX7dTjl%k*BB7 z@Ow-Q49Y{DdN1TxB3(`%p0Rpw)JU~6WUes~7nfWx9KPKnClc*kOhyT=ohpsj>4$|o zTI0$=9#%buJULpUWk9Z!k3qfrs69$-}%)4(0^I(0`-;#hM#^ zV@os)$m1G&`rGDCez*Ce=MBLEhLXBToktA&hBC zH*HZ)rElMRF}t2#CW9zI6h7hBvQUyR8a!Y0d4A9TIxzz=!+79duMij#6>@9+Q31}Y zm#w$s`6)@RyniGnDRyNa+p!=aB?a-L>fy-K3B1LO47qb8hHyi;Pm04{)!y2eZk5Br zrx)iB4i5VI`V0&VR+ZOyU;6rME-b#-!bvZ0|tF;kYA zm358RSZ*8YFIxst*ei~fO*%wCye(HYEA3N=2xf?GO(zL!7Z-I~>Y8~Xb(xq@Lc|Q= z#HK5bIXOAt!qn8%ckbNTw6n5eAq*a=b>~seaq7Jh)-*gk+*9)8Dk3CEI)(K1?F!ee z+1auj)dFrVu9YIYjw+w0Y!jpln|7))9he8Y8LT?T1?5&qL`R3t!N3S|OgTRL>n;AlGMT(wEFaRSO&ybhkLBggHa6c+@@X(&xV(}>M3r_kt!rL;)v2keQn4(9 zOHsE{Yia~pSy@FyP@nyR6X=ejEw#L{kc!zYKLVwmjk5f zT)dXdO!;`ZcItb#Pmu1kM5PMfeSHOU)C>$P^d|7Y9kYWwR#sMqQPF9Ya@ij3TJp78 zTUmXZ+9)h6TpB3Qyr`k6Nkl|sq;VbDA2D+CxVJaT-8h>~kb_RrQ{iBLBMn|kMn=Z) z^G3ZRCSBVhU-uoJll7HyRL54{n>Welv0mrKGMdv;Uxd)*)yjG+G<$9rBI(H#cnc)O-Cp^x_kgIc0P-njgK_;$maxh-rvTOP&%jEYGY%=wkbOg zd&y=^R4iUGb%4H4qayTHv%Z+y>d!gnHLsO}{#j#dlR0nKqg`DONaOv-2|Ha$I~d`9 z-9t-cPOq(*Sd^*hf~KYM z+XbKEwy;e~Imp*yKNw4QR zmX?wYO+6W9WIA$QjWdK};gTPNgl$mxcFG?&T!pmvTR+~DuFLAFiK z1Cuu<8Uu|Uo~R;}Edm{TzPm$02FP!yHhGN&Jysk=S(Tn>C#; z!b)staFCCav!oQsIU7kYXUueUn)13CNN2>46tNyZy6XUm>kT;6Efd?Tc3zW|lmrE2 z>g^?nkDtch5?>>SLX)ffk_SUL=HILfk042o@Y)?T*)%Bhy8QiI%@a=yvp;GIN1{V6VDkg7fBi>1V;) z_)w{NQc_af6)ZkRT9MosYEWWkUR!u~>cLhJS0rT1#HHUFENKvJk{rNhl6^-yY0b0SZD~}cEP=XhH-^rbmkDf|9 z0vC9Yf727h0Z5C$^h&y>JzTaMo_Mdawa7p9#hTeX!8A@qU#vJybEIc`wj;r32I#ctXNw*WSn zJ)xVvPVRQ8=R5iZ9bKNA(=ADs`=#asXqclEh{h5>H&;ihYu)!Q)n~TU-mf3K0G=DU zO+qr%;VP@{^z0dBzy_$@lmn!~9{VTABLN)`GqcxY)}Y*f3PopYJD ztg3BugI~%D9J78nJ=1%F`Cc^TLMmgX*xsj4pIRd66%~}l#l`cJbi}T=W+Bf%e1Z0+ z?3-2Ax_v6;0q+xF2#EIPwm<%FHDt9Zj3PEBCW9^T7{pd)Muvj&ooDZU4vJ9TKYjDg z`I9LM)Z3x8!TO_B0T5PQF#<z{`q?iU0_>)sKCfR(u!t z^36k<8_Ja&RRaS9kL2l}UAG$ZGeuvKy$XPzzyCOCnOr}0zP`ix^+*B4q^KHtDbSA^ zPcSpygVp~!e`!1rd0zSvxZl@Z*FNEbSa}KVjv(!h55+Dn+cjVhqZki{$TGz<67)NV zSYdem5c$N3Uhdl?7{}`lyk{@?{pQbjL_|_nZh%KO9`y9|xbH5<#m7sk6}@{$dH&a8 zCi2>*0>qJ*$E*ik-92|JpCj<}7G|2~bu=^>nV2Gj)b8)@u4tN{eEaq-j>F^%4i5P8 zo9!)xh_z*A8liGVb#?WJ4-&1M+}t3`XUA=>E-x>G3PVCd0;%H?eYrkBe0oQW;$nM! zIjXF>b@%Z>hE~njDxBTh-96c#3WL~!LX@4&$kj7S=jZ3gV?FxwrxSnzP~AKT5sOxM z9Bj$hio>V9H3F=+KYG1GLsmC8H)C0KTfYG8qhI)zOSkB03nN*;ilu_Kc5Pwd`wXL0 zIQ$EvK@#i5RK`Eoimi%5*yG2KAJ1zo%*={bty>WY=h*UcsE$rDk~znNrR0vN$ZrQU z%v)Jnj%*r~IqBP13qGBP8LgbPuzH_2NBWQ1yFOJrGdoOgSpU1lXVahk{8q%!4WSHen zla3eGh-h45V$`SQYbWzvX+EDdRa8^}rZZCKBXM$YxX;RJ?z?e+S@n_REWKtB6`zk| zDz?qg?h_0@;Q3)^nfCVW+i*c$AzuNPby(K!&Q6x~)pQRz zxiGrhhz2h%xS>~3^eY#^(a}-z^+#Z{$NOcBA-tQZ8XFt!?q633`fAIXY54qTZw znPixutpeLLAmAcI;cdv)H;j-}zUPO?<3J7g`}dzur0lU(m6Vma*w~(pbP}_@)FzDd zS5z@e_f6(fBQ^y=btG^&Gh?)LYbnM%VPDy*BdR0z))V|P-Hv!Csfyk4uTI~uaY|*m z)0UmX($&(ksK2SEV`XX5(A{Ksa(Gw;uRx@T4BXmHjLSY~QK9N3xNZn%BSzx;$a4zN z)~BGJ1`E1ve@IKC)}xIX98}Mu5fQ1+%UkJ85|B$4EL6Qct=~Kjjco*LY;p}ob^Y2k z?FyR*wI%uM&L0tb=J@sNxpB#e^Ceq3>OEH21FP!o#YxWJuleS3K3fm{R;V*t=cy_D z4uBBd8W(xp9|bR?+U3gdaKt^{hMZvE^U!^ExjqRtJ13I+goawVyzs(UG3c;IDr~2| z1mWB5$6$M2#eCFvYxw8Sty_fwMMEM8bc!^mPz03kIjO zSJ%{Bsvy#YOn~Nql52QySf;)&8P*};{IMne!0YpH{hCvapx3dBvU0Q#_0As~Dxg-Y zsxrlSIuOzDh8y$NH{ZL0BA1Z}?;k`9OG|gi$**sku8!4@ZKU0ezZ2>k82|AtjTbE~ z?P|H9m!{@000YZ7RfusJY3UE{A9gG!iIb6?bfzC7B5od4r=_Kdhmu0oiZezyHCO1f zNFft+)hRZmI|xlOwtbL5ptA)Tv`rs7TSu!LrAW}rylcH8gmcsv4g=w#ug4mz0`Ug` z9g!?#E;K6R_fIB9oVNvxNVr^ab+zWAlJj1(0_;eg$R>l8I+{Sc&Z9CXr>*!>OD;&f zD|;qfTwKs+izjr@^o-0*O$`l@X3FqNgQ_=MTA(d;xtd++u*F3)Xdz8tM0`_I6Rl=K zT->SgPJ_JIbM!wA_j*!Df#oh)r|pXvbW?8Uc3^rsZFHfvCF;ur$d#ODdyK}y68?HR z6&3*i6OW!wtI32|0>%}C&o|s_=DklEHwNFld2{iYbLKJ&@iQGA9Vj$tnz5hxM>4z1 z%lKtNXg@tecq#KL2@QP-`4IJ*WJ_{#^5&-9j=u-gNSVJXdY)eXr{;vP_q`x>6B848 z`G^uxPtV$&=V|_2N2SA^Bu&;{MI)l}CXcx^$!J`l!ZX&GJ6r4koq<*%T+|6Ux zr{kS;05A4Z5y=p$Lco*oE0yz|;SuMqj1iq86fNJm)DSBkh=Qoz{nIBN?`t1vr^;Xi z6k?!(k&P{?HID+=WO?ph$i?3{X81H{&;5o(E2myQ14~X*R;;3WsM8n!Gmcur`2!>U z!a_b|b8mpr;o4f7I2aM|v06DfIjI+b+iIc$o$zNSc@gB2LAUe2@;Ua zngCtE?zy$G`g(_jZh(ZQ^FZK<-#P5dH7(cX4y`@DUiAXP$H(wu@Xm2pnmDFkd2ViQ zNm*HI5hxIV%xG(Ci+?6~wog)X3kpqvemE=DK9PLbYWO>DcD| zB?-nWUdOLj-rcdNER&a(mX=6H0VGIIP-B?w>FJp;4F883X<>E}-5nBAGWv$2RN?9R-g7=#y;rh)8M0tJGRZD;fKNF3~u(!k?kHWN4 z0m77#V&UiIoxev3HL$iW*y%2i5oC&0>KHQ1`XXORlMYLx%LR4eu+)9%fmrsSVUVSr zUAMdrto!xrD>*($=K68k6>l{DjnT?aPk%zk&(9AMMW3{KaQuSm4}0TmH2!#QVWFj_ z_5-=$OC9<<5a~RL7yg1rJ*C<_uabDdo zIs&j@RrP7QIyz;tg;odULAo>j(t{pQc}~3}bQJiTd~V|08~F^#kq1tkg4RXu!a@~ zSb1@o4>3;+2?e{BZC$T=5FUN$>Sz~lf7@`mbsLrg@^A;_z{Rt;)W7?uLGh4o&|`9Q zb8E0B#K-5}(L5`$VR}|ps{ql0SPgG1m!3Dcd^u zH#Z06!%XAX`-4Yhd-_szg2KY&aAN`Y>V@(l#UkQ`>)h%bW2`Pmdn2K-V6zuwXBU~k zlLL@u5-rDuOoh*dZymjPK|*T#vtk(MDY`FPXqEufCD_g@1I;ZZ?eaWjf0SLkM$kd8 z5LlU7^Ijo01DyPRbW~Ku80^5((sFNgqRmH!vDH;o z0Cu-$7Zr6^iAZhwXJpV}OOK4vWc6-uJ4i_ZqNY_PmD^TT7^J$vSVyKRCD58NGsH}@ zDQxZUR~VXeaB!eg3TPAPCyxCSmc0%m4RX$3VkH3ZJ*Vj&^dyUX>SIX>9O8r~Feks_ z$mk*Bvf@)LXt6alC0H1V7e;H{cU&37Nin?k>o76~ky{cYARms5F=~wI3WUNyUdIee zu)7d@m5r6P0ECPk!4jbb;HrN~>&Lxj%PVE986L)5hHZf>n@ZGHHgw9(27 z^ZmO6tMS~n)&WPy?`ezyiv&`0_c_4J_ouzV>t7zQ5-=yNKWK3}|0L;VpM_)iIPF1H z{lzO~WFlT#r3YDxnYnZ@>?JcyL_;!%BA3XZBwkq=EkFvOvBAI~zOnAX0Dgz7Os8Yo zj^4%yfBGV9J^xa_3p61?Wymec<)_2WdW`>@u90X zF~d7H!qYN`nLH2ysT%pc1ppt=%elwN{?{kqc%!h1Rlo&={5G$uSPuMGiX zrDNC748Sj@;WF7CqS)=9=!ySaRxx~*si-gBs$)IH7=Q*D0b`)w^&OPx>Ob)Z`v3m4 z7O)pqCD>;-19%OdUzzR~BXc4ILc+XbkpKT4NdT7X8(SWkWxH@Vae3_x45s;$UV5 zl*wQ8Me7EhF&uktiF)A6tm=E=XL6elc(}P=I{4gse_dGS_X^xyiH!dUSWb|34XFr& zYdw$p>zdcsZGctblJ_GcBSE?~a|6iG#)fTz3QRMLq6{)<(g_F%J`W^JggBTBK*9K~ zXtb|98t$~3QQ^L4Wo>QUpo|q)5T=Enpc`-qzEx7dY58j~(LcL_ZW+*UI&~iEbZ%~L z`C65eYJhLhv$bW{qjiFnw0CxfhK7RA;krj2w#LhCuFk=spofqsFR@exU9E6+MNN&C zwsw+D--B8Dke{sF^;dQwe0(QxsoI=+nY-o5pZ z2OS7eu|=W;-Nwc9PHz(u%&n|s86R>4@b7a@{BA1zOXLm%n4zGAr0o=CWwlh*w`e?u z5Id&Gf3h6=@nav*%(T?C&TFIB_3cf>UnWwQGBGo+tgbqxeBCk6$u)s{6&@(x7Nm|A z5nWtb%3Bh8$S)f86bqL!4~-1KVtMJ6mzD9`F~?1*8S3eQ0m%c!pvE_McxV{NDA3pf z7DUz*GZE4oVGagtV1!nM117Ih_#Fs@yUNUfild`r|C@st5PR|Q@%}meUzVFV=C(sR z3LbiXasrh-8o@t!nWNpyAogY4=ksis=nMefH92qyfKAYBws`0AL744(4_J<<0CESs z)q~Ih5F#pGVCqY7bdAev6Kp1)Ats3UthulA4^J^b+8rGq*e}f#n;>YIw(gUHVf4_@ zvWX9VS>O2hJDSB%3_3dW`s3wm;1^TWC-#t?Mh)50=F#HVjZN3+m>9{~W57u+O1*S& zIFE6IFd6DQO}~1Sg>~stFH&arNk0I-;*xJoK|l0^;%;eSp}ey4&SD=EQeibyL`GJ& zm2~OSaXWx1*#NF(J=d-C82tHD5CWN0RfFxewn`%00|bX9VN_XKc7l%8;f5!G^JZpd z?$*avt@Z2JZsQvPi}C@NcRah}Zsi9n#Wz|aC<@V&#I3wC&7IDsLYw|+xtIidb3R; zwb5V8>;)Gc@z%dq{ii)Yd%pbjiEv35Z=tl|H`TQm0l#Js59!B?lhNaZ-!-k`0!rH* zJ$CqAX}{Z|H1g@e6Tf~wg#wxpov-urfS5+q30*q=EH`H@-><32|Dfdmz0&<@-9Jx8 z{zMy~y+8eNO60kOHpSMG89Xiu{==#08H*D&Kq$X354hGDrGV|2(u*Y`B*c6%BO`+} z7_9%rg2#z`_QqCLox&zwUUjv#LV6ZfUgjl;!dL_X!OFrS?7aFD^xvQM(+!=SolQ-% z?gMI@u7^UztJflTESrq|$TH1S1OIKEv1fa-*YSop;>R!Q8xViNuU~`yGbT2cD|(+m zM^iJBJ2nmstTW|OV)PH6g%B)uCDHu?MDb7epq}f0@Ad2J>c~IB@>Xini;H`N=fL1n z8#Jx9;n+P7k2GNkEh>p3-lJ}+_$WXHgXDO0bOaFM<4Gh@sAb9hUWoYbcB^9y(z%a{nhdNv<3D}PN2~N1p4^r z{f=Iu9;}QkHobPMrcg5XjmZF$Bv`Ak`>wPMP(#GT5XQ~V&%aGhR^gaQQ{q5g2}U06 zNhN4*ffn|die2l2xN|%j9Rq6X;Rrp~XWd%2oz0mxNLNpfJxFFvRDfp%!x~T_A}^Ra zIf1dm_V@RXVClg5nKEU$BY_9G zc%Ox(3F`Vj&jTY9zt&@xI&U_zm#_(RXYUJhm_Ew|P$v4sN~% z`xt*wc!8*f2Jnz?`rANfwsb;geiNEV=S@@myYtSA|M(G%Lc2#tlY1F#)BN2W&Py<% z_o44LbV)p9IKnaM|iu( z$2BIF$s1DLGbbMbe`024=9>!&2|XgQhl5Qf0NbD}QOI3oNLM#=D#7`v4Xp(*F+oUh z1(cWF$pjn0>!#hj%@<6J$BjU0z-amj%=Go^1BXbH`C29?^<7;nk%yvjF?@`rA6dHx z26zMoNokJaNHc`oVmH@Gc2vIW6%as^ zKi8R5TuuN|q+oO~pwU!MVizm|r#d(g5f06sYrCI5`2cWH_lo8&ER43j4&;dCuy6nc zKV)aSf#MhH7iE!`l?Clv2O&K>YYdG!Zk3|a1}M|DI$Xf3N5(V5H zh!uDY3e`Z0JT6!z9f(Q+E+v?%@^6_}W$m*&Tn z{f(*YWH825m-7Z4Gv0MX!$bY=DM3$MHcZd?96XE)KIep%4wO9-p1X_Q=izXk!QaK$2Y=v{ch~$0cy}N&`9%<%y&?fk5UBm} zXdYkmF5%gg=?*VEeRc7|wIiAvDv!&9gfVaFV?JmU#`Y)ZvP_l3_{+;&hH#$p3ZEGW zI`I87(}AL54d?8Fzb(R`&p+*b%PY#!y>I2O-uLVk+-Lyv?{0k?``v%fV;dzz@BZeO zjWg4Mu49bo4^w}eB&&6bSgdTV(TK(FH)1)vS+vXk-L3z(JvM2|D*89SOr8I|*g#!U z$9lE|fD}0WNvyC!gVLXqqi7Okn(!Bi@<(`pJ@?-WmjB?fFFk;<_={f343-@rJinVwzXNvS zHRcVK5Z?bPbgU(Aa+0RJ_^AJd-S*3QpJ$W%SKry#{HuS_pU1d>PYl?)fS1J_zhe<# zVJ)C?HpKeZW>rLD{=YU0txBx4I*0M;JTZe$!{?j0Pb(0le-9UoaI!N${PNamq@23Y z;B@x@Y7C1y^lV!dgX{vE(NFzVNC*>Z+9uy;vvMQn; z$WhD6%Xiw)nxK>8!yR)W@zFe>9O->FhC&dN0SpXO#%8HiRT^}4UdY2XR4Y9BG1Xn# z*w|P^&)YTo{^DZL1AqSf8B|9g;;yR`9$eqbMM@(JaN4pF#R?Zl4G3?jXyHCSdEGPx zCT52-NdnIKy7j`Gobb8kY5--ARu2(;yU>^S)#IdVTsHKdJrf0j;MIi%K64>3#s*gh zH1eFOw3EafqP^Wi0HB0TvO7!LoJJlq6x_U@#byYX1C_=@Bsed6L!zWUvx6n}A-LzbIsGPfSJz z1c`;x5>~s*gB)=#>*Ft!Trw`lNlDcCrnK|H8R*-UEny`Ri~0pJM_G!n1@XncIjB}u#-maT77 zw$S{<9Gg6OnfYTgAQA?^$SkA8$;CyDqy~uCSBAK>c?pA&z}*CAabMr<0Vya#$!u;r1$8X0s|!A{G->Ruj*=4GoP$TO zQIc~|0dZ~n%r@ez8G8iW_`(eeLiB!O4Xg1u*aRX9NZ0UibxDbXo!g8|hSB8i%J61B zBVo|v!~w>ntXP(3Dpr-(7t|Aa0EbwhUF~Fd=nx%m6Cn-7Q#$HzDFf$KmSO=Xa(F;j zU)DkeAq)OGxl!RYaIjLDJ5Xr>iHoW!1g%Yeey8+e?_ivpY1WsL`ueev5%hXj${XV# zdQr(8yX_J^UaQHhHx0GeG0+HsU2x`Riz~qFvZT6WZDU|in0>%cy(vv1SI0xWlhdKz z9hsvx*m5KrqtH&`^Fp+<~s(b_%q48wT$%=R9DCkIbpC7_iAI8!KdD@u0s zv8N{zT)x9-$AozyXRiEPGAq)|p5*rJ@Gnq0tI?V)a&tVud}3i?nej(UYFFBQRcPGZ zb>bv(ER)PI3T@p^v;;aJPUj(jbLZng6XoviZgvQ|PB$-g^|;X+CbY@KS-P|=ptB<; zB?ZFYG^3t&!sINJP{K-FL;)IEneHb`~Qsq1*t2PHcJ$>Jn%;CX1Aa^e-;~wEQt*I*PKLEVUdm7U`miq^J zRfT$1l|fL$*O5I-M@6 zH~Guz)zy3tL)hB|G-|aGg&Ph_zyTvs%Kfix}w@L`;@%*_k zh^rkrMO`)CxL~4d)|M$R#@$B_30{~O7nJh@FJp*Y95|1O@!~6&0vbVG*+Xk(C{^zx zh9V=*-6Q?k0#0;A?CwdlNMPQ&9_r%LFi2cP*Esgg<1(~0oW*Cev z^1{L=Gi^lRgCXOj=>W6gs1Oe|I5y^oiU3aSh#*qX8&FEa3=1nRf>v4C>FG1z1YY(> zX$kYbV-eJ`y}tg#4)5)G`62r^<2d3DC^evid3YZ~#E-TJuu<8-4FH$8IXe$jHlynX zdz?}#GYd<8ZtjN#u${89vPyy zlh(Hv&`IB9^mcumEYJ~vjJnB0r#=IenepHb>TIW8N^kG((&1rqDGKv)ZGG8)yxj(< z5ywdzyP@+yy}wI$k>U&y?i1gS*ct!q2PpEE$AaX}o(3%501}j!m-nbl(p0KI;u2F* z>g{G;(}>sqa8VOebk6fH-S!j91sX0qQMg|0Z2Y}OA)OLKMBqQQ|QUf>-837K3gPQ5|bg1i# z-w+?;_-ah^Yq2z73#72JQe9hnMPnLJ5Vf_nrcAa#AQa9I$kmvb7zhLFLQXCZUXX*6 zQ)fp9dLB0TQhGJD-A=5kv~&lYHV|-LsK!gAnl+1F$Q*UTu$Q)_D+pTB?W{ zPBu}{L@{>R8p{SfS*AY0drqbsAeicCNrsEN{(9<$_f=mo3ojKy z?6G1J12{FIRqZ50@S&gpwY?A-A9E55>9%7yUY~e`6j0qX&F;BonhCD}lx-Uv%6B@x z0y3_TbLkVWtT05*o0wdVw+T^CR_z8`?qDY4D(}7lZ%YtWiehS|X z%>iuM1+ee{{=nWXt{rmJV7Q!wC`rr7Vo&M7PBvt&mqz~oxogXK!g%X2PmZ*R}*0`AVU@g=7kOhH+#TfR0@;>r-Z zPErFEn=9Q)OJ0d9189~hb^WQSpXgONE~(@vgu4^#uwKNVY;Kl_sNY^&_p7;u5k3IU zoP8DcTBcGrzjGy!gB1yGKR*HgF}hlQo_1xT_OWT+!KAYR(LS+!^|a%CxkSRyW%-LE z!B}r}9TjhV^}E9juh&9#Vn2B1nh|uCKBkkvzyd(MxkS+Y6@qhvi8*vet6)wJjxB{$gBP=A8hhuGF z;o#s91x{~Jff?{3s;#XW^k+e0X$nE@C;+vVqj_62VZqr8Q&R?8&Z&X}^F!c{H^x7o zAHe^)xi>y8TGen6R;Z8_b--E(j{rpQeP(7P7|tdlBc|<6ojj0mqxlT6h%1ZQpgoC{D{B)(5$q@>0YO%_lH_bQU!!CRP)L-Z zrX}*^3uxn{Pd1t;X0vzD8ef1~dX3Z$n8;Eg(%PFK1`et6zVlU@r$O##(bWo| zNClMIFRsK1i0M0}O+l3gwW{92)U*r1b6^B7dL`YYU+5y3Kj!G=&axvA8%^_c^BXuK zR8_@~L{^w|#7Ig5%3@?>1W46qHD^isG{6BH)}YDhX?UgCoP(lbWL3z0;)2|U9V;3< zTd$F|R+rMN!3(iPwZQ!`D_^nEyUja1VrZdPVqt#X1}R4xmo~cDmLw~ySocTcmBV*9 zJQsQ@U2X}V?k~jRUajii1h@DVO4{%aP zDA>$?$%8+BfRM<{0F6$;9OxlDk%xWCLAollszGS-<`Nc`wg}NX*Zi(ZLa53P(H>~D z93Cnw_km+QpjB#j2CM0aOxCo`&_A5n*kB(3pEGdz8bm>$hGItKX;wd24?;p8VL!c098emSMYggvaZ=jVhK zJg`;`F?^m;QI~=w;0BnN_|UKVvmBj)fq{#Ap-K(vN=izKiqs4rR@GXtmlhX$!-%qa zl_Ku10&l{ap~%C~@1VXmPc8<&O%`%DMo1tTZ2>a08!;Yd9Iq4`(7+4wx2Oh+Yw24l zb_C&3YR3HDUSkJVg5<2=G}bvl)$sFhgNn(Hv~zMQ3r{I+a-MpHbuTgLE}-pKPQbRB zOOqDyGpt<1lC{@?l2>{mtKf%~R!_d)9H9eJtGk3gHTD2&P@JHCf_4lXB+K*ivNtq* zEV2=Wl-%qBAkyO=_;d2JW&|X_6!7U06DT$ZFk1ugAEZv8%mD+gWRcdWB+1PP57J}Z zBkBK-%?jXY|KBo?f8)>5bTFC|4B^G_@pvG11q0)$&ocBGRYdqXfEV+h0L>1h;PKU~ zS9A08`RBlR(b3s?_|8@^Q9T#`9B-RARRkEJ0>TlX`m4jNwBll7;2?|9AUFpZcXGIs zV`P9-Surc7A1I1>IcQ#1KG*|z1fk(FK*n@+$tx%*fTKx(2r4f($@)^TJ~8oryRsdO zs8^SkBK3EHBE#pQF(UR?Z35LrJD8J`la!3iNUf#CbhLYHY%S3qaF(F>T)kr;cdmmk z-bN{7yZuk z-GAzL+V9wd_FvA``Ty|t z7C?0^U-uvu971q+NN{&2xF%?@0Ko~tA;I0C<%g-g~XJ*Kv@cZE9&L&5MYLuv)Aq!vMuVkeKLjY=qMA86717)mj#_bip0&PBzp_I0G!Nh{$0;h<5Y1CDe2F1Hub&a6A(C1Hvs^V0`=5j%)|tS zS>lioFK;8j?LgpQ@Y7K$n9P+;xWkWt0^YuVWh^hJmq`Bw5*h?pf`NW1prUXXk;ogCN(Ji@tj;r44VPOx5F0qa{chnEq+o(2^~;5se=qiV-}QKs z;rnLinyf6*rIN3;<&}Rh!viO2!e@SeQZJdUnHqOT*~r)KO(K$#0d!?CJf-5bwYB&J z1PpQYpf6A=dK@Gnlhe}!T~7Er12v!*Tun*oL;Ui>LX0s`XE;r7&ACfA4!J$0q5z(c zQPrB??+2PUi^SZH>QB=E)uXw$Dw{YTZu+Y_aRk+g($z+_-3^FiTx8jLQEo{fZImWJ z0u?~~@!pKChlAiBr_arGP>7`=Y(C{!%Yt1DcJ*5p1A));R79!qU!V?!GOaD##33@wG&#RiF zHB8#JB;AR;-oF5W-?^o~;g3onSD+MBe|#RIv~e<1)6+oH*%)l}U>IZg5dgb|{!f~Z zX|=y~0?Nwk*Y%Ne|L6p&fKK2gdJqAZazLqEzr_q^=Af03=h7#4y>=Q?*=4O zKB{b^f*YJE)lq&1^ov4nH-}fc|py+VY*Y-f#pSJ_& z-Z-&3sFZ)Uxb3A>RabA^Bq>)J-`?%)fWmiIijv%8DrPGlG4eM%H8UP4>Vv@&EW4k^0!dHwXnHaXA0=~vOVslsm~Y))BOCZ+uf02;RFAW(-a-7#hd~&C{EW2=HuAX_%X%1Y@wL-p~MuXOv_B+) zB)_mtYHCyh`F8yWh$md|X&-}m0Hw^GwW014^GIJI{2meF%B!zM4$z-DVb30b-_l9| zKpH{nAFWSM2q5GAcnFA&uqOcW57E9l2S-|rYxDH}{~(yRSN@A2eGZB|{2uzJH$p&M zdxt*RHa!tGB;T;r;3C8@d*#C#J{|j*XH&F`2D5(FO1Q4Wr|NLSgn*S%f zlbU|HfP7+M|63Q(#l!vIy!ITPxBuUCt#At|#ghck@`(U~Agw#$rKsT&jFOV_0{u2K zPyMb*>g2Gnu%OW{)$XZ7s;OzBc6g&sVw=$9T8dIhO^uVA`-`=8r2cL02B-=_wN9_4 zs!BDX+v;BPB&pN+bg>|@U7f3c@%7--#TgKzj@E)MHUL3`Iw&?i9`sZn9vo=U9@Dvg z`SQw*kqwBxZf|aK5}R52DE?HCm}{ZcMMWRKe5nV5p&F^zuRB33^^Z$Q*<$z)bnxa- zBJU3lXi2U0WJv^Y!21G~-JA10uscBB7?rTx;wDQS1EMEy`(O@>JKI6`K1!8JV(l>X z&KaogePHfhXN1Ujg14rq_&cw@6UaB}9U0wAFP)TrEE=B_TqMu^qnZ^T>1;#g6 z*Z`0p-*$Glv8m9Ng<>qrzI{pdM{RKBMGyHO_#X)YfgQs*NZp&8Q)@w>h>Y&vxVyWH zqf@7pj8nDtz!ClnR|CVq3X=eGcf$`L*Jx~2F#kw!IQovBQ<@=lh{w1QQ5V}3OJ~fescE3MY z-)5U^U&VU^5~ClclTIEPa)X3%n%p>mUj}scFeNSMO|@stAs!P{qyV{5OWa$47s{$_ zX*_@)FR;m+RHuJFfG*qq6rCcM>yupf;Kdem*<^w1%@pImlDI1L!MaBoP^1}FnQJ;~ zx)rz@8$XH6Kv6$pb#RY}B&`jwfK<1*h<}bLc>Gp3rOm7-Ymipf)J-*`zN+JB)TB{M zMFoYz?c|gYDRlDdck|yCmzO_3_^Qyx6_%7Nfwulb37OjI@$oG4Cj*dApW+Pr%f3^N z0|YfK0x9Vr0a?vF9!61sj%7UcN>5&4eo&Hld{_a-E%ykrTWF=K9C4GM!BkxCL;iu$J(!7eWz-25UY`U268KZgdP)2+7!>;F!zl^f_xe# zZ2o0K1SUKQh!{XC1cDeV(9g;J>rW;Kt_c6R>cas9U5mj#v{oz39bmc2{~dZ*oi0{a zR#vvTVA`Jd{0-*)BT!1dx`+I4A=Ce}5c{Jt`#Tc-#k94H{n4j%L1RAQGW&m&Yk!r! z|BE8#e-@~qvGd=8p#RT~{YP;FsKNi%pFKg7iGS&qNOgg1@hKes<%p>Dx6%MYnAwk- zqQ*+<|6DI707e5?Fcp6L7AQszGE8D{4wwFjU2US4b+Qv_#ge7~eU<<-$(_5=agmhn zkBW){eGnS8g@rPCz@TzhefBAvx&ooH_4DQBB{1^>UScw`vVhM92ge=l3()!m#3=w8 zQEJK0?^V45<{No=J(b)i>Zaje+IVan{WB1T14q49PC1SMrjJH21$eppS6Hza3^p@`y%rmz{3iK>7i=_ zY7!gD7-`CwAu;3Ver{GaX-Ydo>S#k&1L~NEU$?b&qnkHBTSw-mM;e-31Rwg`z%Z9) z+*0jQZygTp9)ZmL>Z$*XMLMoQTOprH71YZEUBIQQa;|tJ7DvH^xc>c%+f3j0K`lS7 zio<&}2^m4Y8TxF62?19d8X6kN6=H+zc@M6-wI2W-2ja)~xLL}NfK3GaTpBPf=urH5 z0`5MhfB)d%Ua86>`Z@_sS14Aoaidt9v^geL%TnKraiydge%%X0h_fhP#*X6_5wK8 zq%Jcu`&CGa6hICEhW2}@$>edSEE}k7_!soH9-YX6@dB$*@h#Tr!T}F2FYO*HH}~wq z!p8@?AJt&-yJ%6%DKX@*NJ_C!uUUh%`vX0MN6_+0^cX+_&53JkYLZTqhm9{qN1ma}XEmwW^gClv|-SXn1 z1!~<99W_(H{TS*ud3kw2)jB5@?H(S2OmBQ$iY+PhcCq@u=A(m}bzATXg|VMFyq?OA zP!TjQ$>l0R#&Juf#lGQXV~dfZdxt1C(U`Hr-ZaC`?)UC96X($Yu$xb0=7Lnd8oIAtS}67j6&+L! zLHW8e$asVD(g0E)Bk3|{I~d?O-Rm~DN1{Ly-`F|qJ^=7l@O_9oVZb~HBl7I-@Vg>N zM=KXdphIF03ZNnvBjdxdxm5$q=;3!-vn@)U{RjgUw__>J6Z}l&$-j%ft)B zw)nV@0hIBAfP2celiXo=v?nFUpv=y- zJo-`PoP~)={+TLS$itMw869=mPV3`Ckx-ZH!=x1=NOnMSF$M)H>8ExcvmFl_3WkIZ zP@Zn_s<+N3Dn-%L27xEB#k4oDZ+wKz@V#>MFAo~x9JEu^WKFVvY%z0x<5+wP0K3zR z9zaeXoJOO%6X);N4;8%ZmyJIDQ1K3=qA)6_S{`0}5Rd#(!N5^Rpk3x+*J%%O6LgIZ z)kL2-#@gHRrUC-a+3ybE9T<|QjJ);3P9aGF=z>(2@%NKcQ@JShK$g~U6C;-h&6(4V zE>lz9_4YD(Ln<`ndqXS(D#Xe+Zgj2pZKFV|D6`~?PG{`_G@JSoN_ zlK4TB%1IHOZZbdS{S7)sa={^)YpH;1LkSJx8?$W_3XzpLNy41@Ivpa|$^@R^XN<5R z_r+7Uxm3>6u7W^K-L}cGuvrAy3JW%bSj0N9;;TGQyRWmr@#xRK%j6IeTArFR8tpf( zVl@Ur9_2!6EK4990p|t~EfyE=gUTv=(5vzO!X#=N} z=Kl3vQI&-oPd6rghs6H zHi2Y!f>L zkzi>rUiP18mtwxt*5-G+v8Rnge6>FF_Jo|*vJgvPappmB>}gI(ExsrgfJ4&WP!aXjlwC+j7gURERNO$=DUANObOI==<2BMuvt`K!m5x$>Dh>_}liN5KMskuXoD8`_Y|J$>=u)&^-a| z@&%(ZIP&q^_K6o}XRSZ403laWl1%PXTb#3zQTI?;aWO#rle5uVGd9(OIzi3}T6zf+ zkeEl(g{<6bMmKHqqQTiafu3xFbf6~vjzehCg<5H+8q~xfYEFU;^0)`4zfg35n;4*! zRlr=_lOjN@kn$W@V(*=SFtcA}t3n;~!_IC9PYwXkfV#?q#t7b72UXYgBqigQc`(0OuHm3huRF_C6=#oi`J&$WYWfE0Me zBrO5AEC6x#nPJeAzX=~3n2CHGrJmzA=zP6VG2>2)YloW8Vn!r9#jQ&Y3h_CHen20VYtzRfK!TaA37b*JhTVN8g@shBK*e^JYA z2>?Z0Bw^ELpm`s&!o30ATEJES5Kn+x1fIY3Oam&_GU3op*Wpuc2d5uG)+N9(UjYH} z3iY4QLU^v}{r$3M`RXDZY2iNy`_m!xr=#}YoBVI%(&Z5}PKzqfZy!RSA-HL!o;=`R zF`$Fc10fS4hPZOIA_WTp{}P?XbKOUgU-;5kj=R z6(N6uD$Sw*eGKtNlTrzy7w+$+0ZB;Wx(4}Ata~yl`8&`B`!Iz66-FR3xc`|12#Ejj zWl{_7OUS^&?8@$IlKnoxSO4?FTzLN9J)M??g_--$V@K@lZH@Flp&))q8FtgMTa<`C zY$87+vHsb(ok+Ut4@J!%9x3M3!`D)ht1~JyZ_VCK-EB}=@QG7?q4ivBD8$1j{jNMt zLzt_P4haQagJ>OI`FqB(k*d*Vb7gosgL=Yt)n(ECwK`Mfqti`JU+{P9$GEIF)ND2V zaYM8WCz{5C*Ap+7A8EAs-N4zVPTf@Rb|YqpqnJ+E9^iYXxZa5+=<<-CulR7k6SJS| za(;~eYeF$1y+p0*l4Q$dZee|fi{$b4>YRyWyLWknkrAhAYIAt)YHDc*(fz#cdf%eu zZog{(x*rKnKaN4nG2)1-17}Wm>DK7NY7T>r?W4WrC&&Av?W>1oxGNLG8Al;2B8-BN5>Nh!RUckwp4b?;*rY=Vi%ideF|yv=No$# z&XipnT9*g5&N^(6U{J^I8`F+~OKkNS7r8*v1Wl2_+< z>WO}`mjQNn(5?X_wpx0c*Aa~MX7L^JZ;8OOYv~uE^X-hD!>Mb{{_b3b?dMhA_7j1j zIvqD`R8wdn3mpE*7rD+sFhk#@?L%L&E1x9joMoa9~IU2v8$wtmMOktF?@%rWe%Xj_1sxdppZIb zDn-XzW(UHcJS1IMcqC!}+o3cDbn`O=>RhSx_IdYSiknubc-Yb%Ju(I|JSbQmL zz>C;t9p^@ED=x4dD_5&W8v;5+yYV;DSW&dw*g%CX)+X(R$X;VOBTXT^ezX4@f1THX z9U86`QN*X6G-#J+QmHd-(rp zPP0wQ@)zg38bwrWmvLV;ioKq3wK*dxBbHVt%9r(Qo$YLn4-Y z@X6c&`k>xOS8yE`+j4<>O6K|LM@M#z4Oah)P9fp^ha<$67JKxo^D`+0cfFUHDh+{l zv1*7WH=9E5t0?%~;4EJXd~vU)Z7Cmp|J@op#BpLj#qx-K_0g)$@NVS(y~0CCGQL>~ zgHh6FWif1NSdB>viV*TT7Xjj6#%|IkquA2QLj8}==-d!{Y%U~%_wDMc%})dpiynCd zXnVgF!O)2EC4}VVWP3ZbTT1gD+K!kSBF=`<>bIc;w_nd9e|d()Ojh;Ly{Tbnj~3Pg zLAFWMgOab+Mn$`wiE)cTz~pGj0oMO;dFeB*U}K9vNz@kG)it$9SMES=&<}pNH`aNx z>+fVT7I`pDUS--5;Tcb(^rd|N(*7KETFdaZIh7yoEpUSF6e1~|t&mL)`E_&he9HSR z<}ws4w<~fUH8Wk@AnsPa__3%*kAO_w4|$>`_Cc4r!C^ypo|<9*bS8B>Ci|a@sUt#d zJ&$fqoF31E?~R+USqev5C`<4wr{{(tE0!xeHMVCYR*i)|NSQjIF1lBJPYW9)Lt7+G znK7X_3dc*MvouCSKWOOlymm;TZNmy}Yff&vOZzSyvetcPqE|lEMB^ch7%dS%P{n~J z8hAWOJrV=ZxI*+JOCu@k4EJJKEJT??*j^q%8*d~O+ed$?};-0(f54i5C-0m2Bxe~%CcDH?#e==2pAxY z3bLhO-9gCm{VAGveD(2!Hc06U8j`Y;UTU>}{-n7_a4Pv=4wWnd?I%>14_;;iRMc#o z)E7jS5g`^^C`VjMcTSJEGX9f7aWj^V7y_{7mJxN~gY`7bh=Py<#kMhI^etrrMsXtk zN~IC)EBTKm%Q0y`_pcVt`#!PFRyvMa3BFu`LG&tTvr;wu>Hp?MY7GYs2gk>kRamp~ zRZKx>H?Q8UBAdT>y`(|s+~CWKJ9m6k+vY=e#(LnyuASeQq@77CwOjLA<();XN2b^d zjRFzhuI=Jn{}gt99lsx8W4CxgAF0%oLf_Hvgsu%#!@M$Tx5>fzIGVls0pW*Sxjp~0 zL#x|<^0HmBA}l&_d@*VJ>FLQc%VJ3JE*j->7x7W*n1uiw@6Ic&C8 zv$b6Q4#Pb5_^c!ryYL)7HPsvIM65|=8{XWXk<$SG2Kv1mlEyDU_ zO>8RHY-1_$ofIFId;5{%!r~k%$Bi&w^e<=ztUb8M;P;zG=6-h+tAUX!O}7@wI1a6d zyKd^SSXx*rvnX^D{3xh|$_dFbC|wA$OA@Q^*58qKLBiFD**%yTw+(F6X24=&lSgzE zWU|M11O*}mz`Z00MoIHJXpZQY^X>QlPIrigiQd@qsgym@S`pO5@7sPBZUajN78ES72@{_VjUtFrJllzLnl?`EoSic`@H%r{%B=NX>C% zCyj`v(lHO>N=`!I=d(=D+p-fO7YEF*D)(;!6_VFxHoJSEd;-fTzQLg1glXPLcjT2g zT4+9s=xpb3E^h`oM~E*-_PqD09YiMxIVNf64THuwRDN5|JkN`c{M=8n?YluY(zjcP zgxgdoJiZT{;q=)lVxdtSLqB{-Lw~LGx}N-m>qH@&QFuQ`l#$$P+ZP_m%Bg$XAE>A< zi^!t0;IJ|JnuZf`7SC1H-VRywtLB5#?ACE$3+*6s+ip) zm045uX5hF@pyRI=K-c6m<+E%rX5u}A5rz*y#)B$oRzx2(n%}In46VH<6>EYmQNz3Db6)|{Ll}%#%fF%miDr^INzS=^!*5>x#^6nuPt4oNu`2?&Ek4ry?cVKHW@yy&->*}x(S85>7Y5$i|-i-8P!bIf=zj^`zmnk z$0?4WP!M_#;0ExWxw~~&bjDGiRp5eE{0VvfacK^xN#D90$8WbK^P@&&>-)GgwBpqmWQ@0IROyV> zVF(DbbZHmZVA4blTI1h{CWl$fue|LUwXZ72@+TUAHZy7IJ+?m1WJp z<}_sHfmv{zBlmR%TVKLDlv_Uv zLKuxoeNnrj*=~}q07>~wmco|xZr^KJV4T)V}(5OITNy03pu*@cctLO{)5-Y!KzTihL@G4I+6q4zc| zl8xALmFs?^*f;bm{q@hv2#G-j#q!)_z2Xtc|%k_wFxhjt_otNYu zFNwMAPQAY+H@Hg<4evWif`>@_3T#MnW154px?LJd`)m&td~a#I%*QDb@6Kg+AO0RUhS^+dT~4K3n=YST zra*W8(iYctJ4sj$UIj>F@6MnvWHNzgIEGVEy{!EP)L1C+6+HT` z`vC+h*igJ$ei^zI6g>HozEWEEp`SbD*45w2_)SYVyGKR;Uxu zer=$Cg{A)WJnUr+eE0@)0Qt)mRnI!AM@h}sn5JQM-)!t&1*v4^Aw(W!)c>yTu|yR~ z`a+~&9*v!Xg_#o|we3OAwt>5>2b5SsEMgVTAiX{4viuCuMS3WK?ymjuV3_E^ z8jh2hOH_IbTQashK)iqaL zQ*{jT$~r4EO$dJ}bZV7vm?c?qWOn8#qZ!9KP>{QuHFk9t%_T4hAkWBt(X+ zj+4+wzPzwS+;1iJE-lC6xcx3$KSNJwSbIo%MBxIhqj78hmbnY2ZU`4SX&<#z zOROQW*+jk3T7$KFh~y1BWjSY@i&6lzyxu3;{CBj$Lb;w9o;Q>qnNS9VHja{!#bPWl zQ1gq5&-rIHH2A(E)4ZOIitR$D{xDJfaBfS;Mu%7}dP|1;GvWc(^J0MV;Ya+2sq!p( zu0%eK@Yht{(uPZS`ov;+J{yl!e@pzce5KQl9c_#{+&NW#$1dcz9vwy(pN#IWe$06% zHFWYV&+(DS>e-1zb})U5>)Cij9e2!LzJ_yjk-RDMl6xeU7 za(dQC%*UeWYISIxM$Q9~P4JGGC8j zcG~$Tl_KO|s3f<&j@JEVX3A(A_#=+0o`!6ED>#kQ+yPdr$BGzX=;Oe-fX+;-VzMa= z3@NAO;(X*$M6(yy&+9MURz$aJ5fhZD!(`rBG{nbsI;&U4IJiVG9HS(h1(cJ##Clj- ztM9S;*<7F11_{9^Q4B!m*z5+0bri;-^%sOPVecpG2^aUHnc|{3TBfXbTdE|x_2OVr zUOOJwxnAPk>NG0Jyc*|$SZ>ph&4$lu<;7FE;nUGf4;LEPcqgqKGAJZRVM_x~=`X8M z;L@EcL2m4DOM7W!3FEh0i`ZUd)o$eQ;nsH3O2%tG2x}{-9^nmnN9{T?K03l+bpua; zXfzZm1)S{8`=S(duQ*q`UQ|TDX_e-GDHse`))&zya?4z~Yi?yFP%?X%#_64!t3$)Z z{k(}T^3`9^A-3(R0>QhepU1VqY|y@x#a8g7P>WTDVr6X|8vc18oR<+gsZNH7zl!yXy@eClQskn5Lq)Ma9u3efYO~5K>|HH9pl?%u;AJIJsGHeZ)2ayQT!;Oy}MF zZ&a0t3?Ylq3)e++MxG7sQyE&b7h=MEYb~b}kyj6MlqN|?JJQW7rmTjBmz=|P@!|{N zFfu=ZYaO&?K6~MrUi#Z! zCbqOka>r(5__K_QzALNV8(gybb8ja&q8P*Z-UW#?esYoHY7cHhcS@nULho6W>;**# zjaOICqk4iv(E6{>VRP)t!9#;BOV`vKuwSqFk@^ft$O{C|wpoyeoLoZF7U_%9Lr5YdNLf z!BzTm8E%6r=?Lk^i_B;#s+?D^a|XpRWFd^qsY&L%Qgzgn?i#zsFdI`8K65AF95(jY zzV$gJc^H*T8b@R_r4pAY(v&cUqfs%)u)c?oEk!nG`ta!e(?2Cc_u|J+AsXHxYtF^g z?7S|Nw2wG8smgKEcMRvb7$NI><<}^{@sB31Kzu+K1 zOHN;*A5`$m9HLxOvIx#%nn&v?3iq==>$6fs8r_5(pStTfXq>u=QNa9mrcnif$v(U3 zO4}1a_{XjsoO46H1FfT0SV>Cc+?1YVj#?U<2IfV(n&xB52@z|8W;l)%%u)a9;Nr_CBHB=r7T2 zZ~R|8LP|jjYM$%?Sl`9fCm8l;xmonnXA&p)+q7jwBCPx3_A3NqpJxS)n;c@0Vjv~@ zqRMkYo38Er6o;umL_UULry7F?_XmMcT+YyN>L!UsrGz>5q7>D1F4!OY?wf@ExBTbl z_JW)UlK!>k=0V$E@-l;%D{j{+qZ?2qZyj@5CCJTwZJ?36jnj@-NnHNCc|C1(t7SPg zKM5Dbw&eVipd>g}n?2`~(_)pe(X`^w%;;wegv%nji+&Xczg5@|$on!88fl1@NDomah*8sX5|(D(R9n)PPsDTCtuigJN=?_zI;&r4@h^ai>&cmQs5xzC$xNl=wVcS8g!u zxOtC>vt^Ce4=t91_!?ev469||8671P%`R|d^Op(Eb1xBd346sI6cn#xLgG-rHmFMU zt^hZ9da;gs$A%8W=5=*GqJ^D6WM4e<6AZ&xr0+YwAWmtJLWKgP4tk~xrm))_vnaF$yDKKV<&**`r;?G9y~2g$uEOW{)v57!-R(Bes{wqLyrk3B;2Md z{wDwK+LC)#tVCM&T$9TK$#4{3h7*xqvq{& zFvbrBVWZK^`7H(sA7@Wb##&~k9cSNkeqKFuBz!siLYI;jKEqNTO)fTPKaZ!H2-V&q zAD!HRA!97{eP6Bpd4$cT(xinNu3ENnOe^VYHQ0{$fZ4~mFsmM8&SiPVtw9@;#Xd~E zAPMV7e^;)}%Uk;4f;-|o`Z3zYy5JmC1DeXfJ=N_W8n?pDn$(5mrsw9u%B;=!q?xry zRtSVThV33SR2vV_Z2JL23{mLdFcpi_o(R%j7H`xi9OKe~Po~d=K@i zBq)r2D+7i$-&4(iY`m#|vRHO?Y`IY~KUU`$R|NvnJ(@OwRcv0#2FLDUz*73K z;)2e{dA;J{b!v&u z>k}Exx#`69Y%>?`o$WLA28o`!T6tp}I}_|<1NC#VZuj_9{LenL+XhTeM{hgP*D;O*#CVXA$A_XfpwaJ6l^FC>5 z(FX&a%?e4Yu{U8>dHT!5IpbBlZ(`M{0RbMOe@ffuAK%_X=csDgBjCeLWN0}^ec?Sk z5wPc%uOiE7-y;+4aM#2^h8)#zo*)^%;MUnTnd7Lg^K@42(n@lVv5BxVw`xQxBKbx$rrGvweK3FepCRY$RWwBasJ8}zNxQ1GDviDQpvF-du zMUHB@No{@Ty$-0MDz7EXfpK#qy+e9Nx08>dnTBT`m_raOc~&ev90rX8Wu}{>uv(+fD@b&gD6|deVf`KznxQpVsfOQGV<>yqtfABIVF<2w zOJic9{5#%3}#kd<;_vi zErGh!K6zwzv)cLOdf&$&as**M19DiGY^~XW{Ka!79;5A+_nvPaY?k_rr_$KZEq-0q zZFa&KiE+fM!};h`Psx6sNLA)!MiIY-_BAYx$Ry(Qh%Ldy6`!qJqr|C9Aq)MDs2G- z2}?;a*K&3Z1eZXcmuT5>G$lJ9r)G$Uc*W$qsE4eP4l3RL?3}B0j?Mj~tjflj(k!dS zJAxWHQ2Gv;N9)4I5o%_6=O$7jkh0F){ga>eH8F-El3yFOHMCt1`#jPQ z(3RuTUJwYB!bAyB#u4r=J4`koHHsL@uBNy|D`+ruhI6^$68Sw}iFsDr1zNRikYsfi zg?EtEzT8%HQmBir92RBg^c7rq*Z+tR;xU1Xz4tJ%%|PM$OF~H*9v`8k`=V5+Arr&l zhc~;%<_2;gK~+&-?S2KxwX$@yf6LCU;_vP10WxU?bZ4)bucVYBnlM!+WaEy6tuIuy zewj8;o;4z!U8U1xKCz0#U)zk={6Hz?go~viQ ztEFdeJX(rs`<;Mu@Oil;-sVG$dO_|Z>~$eEzn|Aj^s1W z@oeiPla-c`{Y+uGyik|Hql_cow~UguG@jY{vhbz9 z?9=D?F5##P^9YRKz=@%HILRG1k{OVT-WcA5xxS6Yk z6U`R&bAcsUlUUStIbJ-kY?Wsm`~tTmHZ zNT(ys>rP`yF=DrW*f#Fklxp71YU50*F9_GIg286kDYXb!v|D!`b2+!_ET6uD{XkiqAYcBdBtzcAclW+12T>Uzqb~bY7CRm zAhhk+&Y!^!L&uAtOfO>hhr>RZbr_B>D#6R{7%a&LxwpPkiEA0~uQBA_d8{|~4??Qg z8cx8|X6gn7zTvUB;YNQ>sSjI-O5y8<@Er#IXph92>#@`Aw)53=mXs%VKv2}txCqq# zM@i45yCY=ZAz0=*pL`^Uht2+V z`10dGKM$VK${bWYxl4Pv=KA#+{4N&nb6h4zi^g|L-h%z5$u4DHx>Y7rDpBMbP`%zpL^3;O3!@coBoVi16vJ2 zXOI(0e;l8LCIVCXZRL$DjCEgDId?s#*+HcW)I1p)zKXdA*3@Ws)sP#W288@bc*i;g zB|^3z9?CmWMANoJhv3!t-L_7KJ+Dsr%El2#d+PaBe>x)CHby0rGD@>F}}$b=_N zNjr&4=s19tmr3DCLp>w#k=(Q368p@e29C%gDB+0Mnn#vEXJoQbk>?Ey#6r$2*H0}) zwjaLG?=c0Mj00ukI42+_>fnFzb{p^8!Amcea66Y{w0uIr5bcaO=p@c+-`Nb7SpU_n z0D*sI)VJDf4!wee>}P^TouXg6WeAikh7ZKvuelO~6Pd`=4CmjxxMY>`I^QJXwbRgK z#%Fh}F*+CyT&a6s=El`zk}su-X6i;L-U3;0Qqwis^IlU9#;YRew}A;AqyUwQicowS zRa$JzIgP#Lc(DZZK~&DYUus&R=im!s*-@$Fq^#Zm0`xv1^b-F-;;;+L4pjBQRJU=j z_2p+Rd$3{tKjyUL28XIll=*nj%#TznM?5Vd$S;p1a;neQ=5c5oPkII z?A{*VC*De?ugU1C7hmgg-e1qZc6104h$hFpCvmUG|4JdgB9Zwreo&(+jlmGr3UN=@)8+zAB}` zZ8qBZuSv}@C*eNO7knCZMYZuCS5rsO`5)gs9 z!pfK6&2<-v{K&I<)bQ|Ys=jf*m}AS=*l`pJ?Yc7VPH$%FA5Cq43X5t{zhy_?C=P=> zT_{G^l9gOJtcXN)tGH}?Zg86!*_0jHajIBqXRKmxt7u*QX69s#U|G2N-f3T+II~0r z(>l!1H&T&RHyRFml)TA`?Qp-wK*pfi#uw2sTXhFtMisSY)_Oo$OrlQJ(~)zX#9X7j zhA1jCykw3#*t49%7A8F1YDJ>))n!XB9qm;@6}Gi0S5NWjG?XIRNb$;A0xI*TU@tDa z07h(cy2WOkyGiaB#zXGrJ!y30p0dAwH{&D3Gmz9;vJ>0)1Hh7misM8W5=IunQ? z`>x6-@z&zkonxhAvi5+F^v6#hO-)~Txo~+QJn+3{3q-4r7g#5BNsRZbdS@lk8TLtw zq%A2+jElDvMm9v|$oVXlh^#g?@pnc5ZJPWbj14sO!(MxRtwYwzuk6DrmaY9&POZ({ zP~ixHV(~Ur-h|D_sBpncV&TqHar+!xi&M@3p#u2!T9DU_`7O<&hj)s(u8mIjh2W)C zZ1^+XuFMHkZxPDFFi!D&Mb)M}Jb$^3hEQIG_>0$m_&4tDDNX=B7bVpoFD#dj*Uysj z_h~xfQZMP`?Q^PB395cuus;kX?c)hN8frlkjhSk|{w}3u8oY|3tUNi!cFsv8`(4kP zcwp)p?C>FzZf~CQ+O^v~R8+(222~S-)jH{-+#rUO`yH+q4kN1xhb-IRRSE)R9p`V< zHM+i<5>`V&$4v&JTd}AGmE4nJk1#V4=2NRumbFFVH-5(Y2$;!iFDQJe-dMEoQVTv8 z{1{lYl24hubWM$drqBR8_sC}~T2`K{Ob0LMMKdsuiRI#+ce061IVY`c*|+dIG(PQH zS!xVQJC;h|z6^=EmN=%1MJp;4s-m~}%F*H!Pw8F&o#~}Ds?UQ#QnU8YTi1u&)=Jck zM_Z23pXIlO3R_bZ-JktyDBy~=1n&+x;+fw&kr~w1Xz#N`X$rp{c_m35=sWpk=0211 znHanZmd|Ux75u!1IuB|)lMwP(tFx6MEiT6nv;rc+FK3+&uNwoAtM`UvGOv(mTy>~< z-niGSFXCb)t3A-ZT3y5?5b?RX+WBN>R;8@{?%1cH8>`SQsY*S?i>tuM;_QxtZhEGV z(A11BsFXG6qUbluMi-2|gcsoh!w`#$g@lYQaibLl!^qY?8BM{l@vp#Y+Y^kaQy40u z7SF_#tBN{H44#iZ1#50>{OixXVjs{}^=BIzxC15jIMJ`_eTz0WHaclPn!`G*bL*W> zZw4ey@mYW~j9~dao#t(VH&ZeXBR- zh=&PQ62obt7YKIf_$qoAMg&F%5jY>~-|*Ll2A^s`q`u*5g zau=4>PE(JUr9+2iJh!oT>}!_LGOxACzP`9}U*cv(s=v%8t4bW3`FU%P&DX}hqLUw# zUfBl8IjB&z% z&DU$cgx*t`8W=JdAKxnIaD578H9eegPsp(Gv4VL$9#i>Z=qG~IEPP(b{g_U23)v7w zf$YR(*MSzFcTSXdPQJ)+wzSO5w=Lbc5?UVblEz852PdfA6^gglF{L(gKw6?pSZFgu z%sOt5e;j6j%DvfQGlZ6!0I|qr8x+c^Ly-WjP$p!~ujh=RcPqi@Qjs2J(KtWRM>Q-a zNzj1o^E%s>Iq$aZ5lWTraQJ_b<#LcRlUjW+M?vK0XHs_fVDDsY#3W~C`H@M<$iQBU zl$Dv4k(G^DNka<0U)kQ)!NC5FzO9j^Jt-?Ex1ivk8~QVJHXhFZ^Ifp; zZ~;#_QdSl=MjjsUgM*PBT(N>5|HEB~8QFmw=U@R}sl@b7Lz9$~o0NkYT!I_^zl{R; zWBunSxc<+hc>48R?Ej2{jf?fq)&J*FaDnOn&rxvy$0#JsEbPH#N?7RI8;SjyStdCn zOA~ujQZ7zruBXraTW8&@vt&zHSJ9##_fwy-KgBw*6>liVRa;!9a-DGQm?bXVfGSrr zNH(}ans*XBc&D=n!=bcOTVQ#|XQ-d+j4Te%K-Gn49xOd1Hg-cP*@K zT|v5s>oWwpcl|>i943{tg|)P~ukgDE)i9qA0tNL+^4j4}%)}^D;o42-#LMsX?l&7S zEnR+}!omnFT+WlhTP}BE*8FyEs^M-nVkWAl%#RQ6Pb$B--RwRDw5GS*>;!D?%!KSE zH+AoBJsh5`9UmY*{9mk{WmKG7wzUZm+}+(>3MhiRy9Rf63r_Ih?i$?Pg1fuB1b3HU z`8aa>cE;^K-QVc`1LFm1)MW0pXUTeM?VG3F?+!mM4h#FJAR zr(UABPL^3E9M+eQ40}4jUM%3lS4M?ycVJe&Ufc|YsR0j+nzY}>NUGw_bAV0j3FiN} zm}^-O+X&?;CX2yUP=)t>e*A*T7$tWzwN(A#u>{Dw^?YD?ecW>y!riR9OA#ogLn9F5 zkVRO*E?v0U&c#~{wG^%L}wuGbr-rfNXJ&vC<@T#MD5&R zhOS9pL29bC5=v}Snfi8XQv?2(2cJP=LB)EAMmRdBtW>am`hWv`s*elI;j!=ZyZaKx z#CaH9PZ5m(jH*3o2FJyx+Vrp!y0Vf2W#=>Ok&dTBD;7t>(?VTRWk`@rFdsc)$}Z>8&c4rCakm2bda{u|-z&bRizG&;=f; z#IfWXNMjk}A-d+Gl&SQ{@$*_yO)>OIF)ay*DMmm+(BtEvEAjV(lTr?!_qID@`xlj%qS&o|y6Za>feSEb zL;^6IuX6_1M+akXV~_VRi3a2$#@{{v6kFWw=<4{XYjYG(%|I)maK9H;$@^sJB3?_1 zh5DhE3P~!&R9zDJI4(>v5}sH%@nEo7D>J=qIgU;su1~$#%j4yQK3Tr6(GN2V+dNjx z=UwjJ!~o^3axMiwj9NbvqEgM*BJ>d(TV*`$L?+l8+qPCv!xX<-0`A4gPkLr(jX%mu zo2_tRULgux0#z;Too$OA2wv^loNlzbZ5!Vw3;i_o?jhZx8U$S^;~Mhox=Zn>5EIF&^IU6XBP%-mjMDI}8Z^S1L{F=n`bj1$#5 zEJc?!#U}4Kva1Q%>eUuXgm(PV$rJ|h%5>4Jzy16PiyxkaUojPHawu{{LB0Lx-B+nG zDK+ij@6D!5=q*#6fK_}A8N`D$Z4)(iIH3jbo2#u$gz~84XZHpgO&Ax5avK#3EQI=f z;anQ5S@foa0D+G8ZS+kkOB=?J74HK=rjxmV=ATJFkv{k1a%_A?z#+v$7nQ5`yT;4~ z&`uHNZ#Vwrd>hH3neM$-xl*E8;%pfK`_$Gr|x^LK~ zuIF27z>)*^4iOWxVBHO(7Nvm0d}6vF-k_*D_huDn??^WXoPUgdHJ16&NZ=Vo94*w` ztx)`6fqj=5RF`-TDT>I!7wD^#dnsKiitlr=nIzL0(3iQV5B9YmetcKq^*(@*xq@aP z3s5kbMkX5T5SAL86j#y>0vMVQRo-t7}Ld0rons$b~9u0B@< z&qI|g+kjXps+7SFh+9ov+LsFC^Anf1Oj@s;EO#?^k7Ib((WlxJ9YgRRxZrXms^f}D zZa|oa*lzc0u~@^u%VDkkrwr= zb%3=SJ@p)fk?OkHB`FX>OWhJ5huxh-(eiHxT5_xH8ca2C^^W7F7D8M&`TTIb<=(bI z8zfsq=g)h8w{_9B=w;d*mss`W4$ ztm5q&8u3E1K$KL=$W)Mp&@s({i3zXwtneBvt%f|t-FYnY#-TbP>~PYFCl9m{G8-pl zYT)PqIU;|PBvNC~g6EOExX<-enu5Y8`x5r%tvPvtY|{WHHHPV8SM4Jn3{@FvRTOfv z1$T@7LMbvc>0zf7@jQUAtfrr&CHMLPRM7#HORKS-!P=gUrw!coC)AZhi5bb$Q);70 zILADsG!LIJ+a?goud1UE=Sqz~LiEsAStvTkeKeLX4jz0d>W2!IFk7=rrwTHNsx<}b zLd9~89;)q47KwV_XI7x>EO3co@v(VdF!9erW6A@9~5TFF*ZNue>l_PWwf@i+5L`4=$NRiOOZ1DczF^n+<|1o{;O!GDeiu zc{yVe8B-ITA11nUGvUBxd;JHuY+?`YMi8QzZW~iX+=0+uQ+1#2n#DZ)irX=>S?758 zmnAn)2Q&@|#=l`N%GsHFJUDPPHK!uudhsof&SM(6$GV--kuSv-uq{f=4rCZRzCQ_BBr(7ib3b4YZigIZanYVkWEKfvZ8sxH*C7hAYrvKXKt)@5Z;d^} z)AXYu2ZPD;3F3qMhVSEI2E}m`rC9epeD_NWs~rBP+xa!fGM5F>IF@6C1*cW~@SG-g zKqwdEG%152T!F1n_YFjTBx5F3sHIRY@K`E}u8M$SQ|ZR~W|1ThVjDx>ipdMtf$0T8 z7QUZ;c2Vzz_kl{obIFPPleF0l=us>+3~ zetbCkDd(j?X0&u9G@6CP78JpqC#Uy%AvX1V+VsHas+z97^d(iu!tcUJu&I;jVQeJK z{288r&oH${;S~a%FH7ZeB|elZ7GPW9JG>b50;|=6nQYxT8kIrb%9`b~WUq3Bbaw^D zjXGAzV$C2x$k;I)FZzH03QoL*1e>)lCYXOhDqv7fZbJAuJUR)H$*rEvFtLxk{r*Ld zRh7Ga>?aHwBmH}_gSM}`nD?M;TxCnh?-4uOd%$Co9wMK6=nfHxPW_hHJr9n_s~+$8 ze#GfX*zJ3E`WQm^+A_U6sI9E&Q7tJe0VyLiOAF82dJT&r1KI(6RGFVyR+`LIr2 zAkcpX5B)(;qpvJ~eqET&MvxD4iN+qR@>&OTF(?pO3!oa|)M*_-l7W#$^{;6iA564U zEGuzfh5?lt@KsP&!V zzQH&4ZjL7?l7ikjmeD2riSckxwU=9-&l`J)3QVpzE+A8+Qm~r((Oa@b;aNUpuEh?w;}&*{x5+h%~Ud(gmb-hv98)^9z^GsTWv@ z&k*gXQX&DBq>*B)2TkM(cA>x^PiGJV1IIRiiV)D=h_ob}iQDo%yU54 z*~##E*wZP20y#-ylI7+L8RfZ&f!drTd0&gH*E)A26p)8M=ed2n<_UBz&`X(dfvYV& z7e`GPvBOL~c%+3<%pFoLXT@)zZDR?@s5}ads?)Y3=b#HN;U)p$nnW_4IElH2{lsQ@ z_npS%XVM4$MQ&%65}0YIy);t`H+jT^Yr2mrYAv|Ux2-`HB|DvyUfy60u@Mzp=!uNg z;_n|Wk`9D61Tr7KlS<-YsU?^HL@ASdH(zM3p!GIuJGh-n>a|A}-hGMEdunS#{VMC* z0T_-i*0hFKCl?MZ2L&!Z(9yfpd4bP_F^A@T|Egzbj0COF1l%q{zG9WwLv{m-rTw=9 zMzw9iDrFc|iEkpWt6k+8&&G;q!r?}r%i?#Vdj?=mZfrRDWj$oh^i)87In&cYd?RYO zCO>xq3dVM<0R2mP#Hl(T;%-YhsMM>J1lU+A95POVxWhsP;MNLF)I(01G8f_zuwzkV zRI?g{m6|h)Dc&Vda|lwyozcVw%WXtOT9IyD^IUXo-N6l4Oxr}KAu}H z5mD?aMf6%tp6c{6_b@OG$)_Y8TN~naRc$eCA_FHcjFB{}mZ$J9C#vl`#IDB=nw>Jip!VsoyAdgPs{rc}hd|5QpWbA74`mPem-a(U(u)GQm# zM;z&q@>8<4?kRXctwnMDdtm%CB@#>xt!pwZ9Y|Aavjh4&W|Yqz=o1$d13}c9HzNxc z(zD*BCyaC8WS8b(y{{Klo{(g1=PKvB+?3m~3wCmcAUTWzx`7mXtHt9U9lVn}ddU81 zWV{p(sP|vqyPGd1)Rn1Vaq{VItx2HsYj|=@4C092A$9uiUT^n1CxiANoY%^gd{_BW zzk*n*+L1xr8(iJysg&v{c6eqnh524_bp~(Yt3M@ga&R}LLj1!G!`6<@K9CtIMzw36 zkci$_+r6NaxwT~TFjH=Z2^4xO1M?Vb^M}3H%~+jdiJt1aZTSNbHvU1!r|0iwTp2xB z2c{Rfl(&vmL5wKLoJwClvOr`mL_hmsb7kfh3|3O*eT)r-R1Yfi%}${gO8?1S;HO!d z+no+p>|0AiSUjQ))njNUHS^2_yDDc4MAwCNWjh%=dONX#&&wMEQ8`#NW9f4G8Us1e z?xf}zJ0Y|2b5+1_LQ9YmTY@qGRfer#Yc1PcJG9{d!I)=&*e60G#Js`Nz=ctc7QN)E z*;mnOs@X+YO6o`zd)mE)xBMyRhoq#JhKw<+%vXO;@41=jijOXB?XZ*R(Vh~R;cJNV z{lU<)b$-<~f|kAAmO%>yA%4}D1->Z`##o!L5k*hTlC3uJOe(WHv1F2F1)LUsT2E~p zLa0;9?;BB}>vp>zm$quEXS%kQ@{-Aj{Fd<7QHaP3b}6n32htuvr*G!;uvPVrIzmj- zp~(Y>ZjPzrqqUBULm2ih$8v~Ka|`3dTCHpg${)uBF>1P}?tVxR2j&^NOUB9iEKxK_ zK2*WuQL0?pq^GY?h>ok2w~BUh%!xkvQk1*Me6BZ%B4j_h60dkVM3p#OAFdu8H>QHM z;&83;#YJE0M4slrsziY;cIK}GH~Nl8ZL>HSgU>vVNu6&a7Jx}a`ZbIWh-95e+(AT( zlNV%64B(6FB}-S;8xkQ59#3Cya19&WQmH~3FwsF~&6-vt<0jkORT>^O?fPo6p7rPi zB$=VI+ToH8QL<=}hW<#*@wHMRj#6K;W)sd8K&OpD1xyXcX=Uwn$;4jNZ@5UEBB_G^ z2nx)v9pnKYy+{RceEdAUFoNLPHCu>|2SOnyRR?Ef%8ZQzN3H@-)*CTtH}V<21d_ez z~Qm1UZ59 z)J&wl1~2R}kdj4XQzDfCb0pWoR)3*)+N8g-oI%Q7fWd^Hy?u$+^a!HP7Et!B>X|mC0w* zt*NEVNj@fT>V<++tMmvoYesZye%%w6GW&(1a)`b)GTyJoRpfr$C^Ai0i}7HKFxINHxT# z4_Fh!BuE2=nW!;te&Ilt@)#e-p=%RnGL2`8lhvV0fZ?9ArI0vLHJke~qrN)J9%JHo zvz;Nj#f*I39|&l+p;61HLGzAqs;Jf73X6JwM@fO zB1KY$IF1<^v(dWD)u*j;easAqqHyzXFlsG4W7&d`iQr=|rfnr>npSCqUsk<9=-Ov5 z(&1c=Q<`i@P?*&EAxzx_vS#Ik4rkO7I1_=0iGYq0b-$Ch!O+FezcR$O)G0x?mK`Tj z1c|xxL4-T#%O64zEp2yKI65SzV1wgTNwRVnCLPd~5|s zB`zrkSs@;E2x`01s-+NTQh{3O>U}xAU?G-PN*}X$VA1oiF-&>aKnDIH~_qly*aq=4QQ2m z#Q`f6#Jxv;8`C~(z88LjF*5|Kqgc5){UFP_d^&;=4TB3;RCtD(@5Fxe1nJu1vY7dl z;7Z|3(@%t-KT&-Ggm2Cx^&g3#u`EjX7RC)c9{wJ~{Mna3{Kw_gy6B5*)HCd~QBW^xw`_ua?O z&WKSibN2z&70to5N*Q+J#inR8U*g;`-Js{8Az43sSLH$sbV>0b4794bQ#8o5*)I&| z>}il##n$KOEtNiuHNO1TeLX&wsfA=NH7?9P4rL1Bd1ZWHV3Cv@kamP?V0Emt|& z#j<2byr~F?6_jiji<)+802C#)T#?~RBvYF!xnGMWvtx3#qgT~}bspLv;?7q?*9kXY)%V+K# zx_QK4(4&~p!Fop)1!#`USnQRU(;X0LpcrGOMv!5FTdF6?r`@l`24rrV~P!Dg--E-B`?~?+(9fmp&i2F3Zk0rZPUskIwvqO_~1=*f3-)? zyiZ;tyHca_ks(60w#%-b$Qo6Yw^P=4!xq!(ZKH%Id&aGpGY+G{{P_&WlSF*WIPIn6 z5FkX8fl0vyA=Y0&Jai6Fndr^!p^CTcXlWW3A!5+9O7oQ8J-dcg8m<2X)q>bt23I^M z>f?QGNRg8yK-cx}m5~a;B|=r~4la7GpyeX1{-A114f??bbBSjMrdtkjbuS{8Vn#!Y z@j7^66HAPSaN$8CL2%Y*q6$?Fd~ez2iNZ%bs*x>-0kVoU;0D~VY0gdD%;MsNn1`xn zz!ikC1s8k>-RVm(Yq}q_>m5@l+8wY+jlvD1c+-D7TPOhbxWP&ot8lV$PjSzf%qejR#Vm9 zy9c+PK)SpP6KKqN;&l@kOqio@vY8}^ylb@qu*PN#v5DNb>y%1J6K0odQJcb%emhP` zQH?U2Pz>*IZ=CUro=}EfrTk}L-a|EJCO}UF!u<5 zrka#9ai%v>pK?VX5qq9l`=lO(s&~$3Qn^QgRuHus_rf~I>QMSoZ8Py)a<8IWL@cat-`=i(%na5@|8o>11P5z24V0nWI{zn8WkcEMh?Y|*{^;Z$U_3{5g1ScB< zE9;vIW|p^qo{0I67Cjpa;LVtSYQ?{S25;thfTu)S5qze!1O0N&Vx|63L8zl!+#L2&<|Hi5q_ z$p467d8<$W;J+c_ci6$$#_0D_05JUv?1lLaba_+3%K26YoJ4PDkutnVVq*IXCs= z_Sn}7nxBx~c&8uH-bI6_NH$1%FZJTCTrMq>p_`7dHHg+6m8A${_w7HgKf&K0^5Wqz zk_GdFB@-VQm9nRpxnBS#;j>$yxw&~-)^v0kHmqwQCkRYB*12eENEmy6S}0c0lrGbl z0xTtC8v!laYg~_8wo8xeQ-=$cB_~IX9%5uI&2O_#_(+r`q_#wdbzV=`r+n7Ah6%z7 z2bF?CG@Tfn^F8up?d+PeXt$lbmk;$3Aqrvayb3^WN%%8oHt>wgKw3~-T55qk-|e2 z08jbR_wKao8^{CX&~j^e?X}cF?t!i-i_VTUwTAU^E6TnE4j2@kQT z3FE@tt-Bcb64kJ;wxT7z0x1ty&uhnhayR_+3Ohl2D*i+rI?*SGm(aTD_(@^=OPA2Z zVVK{yPcNZ0ts06|h{Jct`;?dRf=m0d4efq9dn!VY#<^T>HO2l6e#Hz^%lX;SnWg5_ zNu?FW$gqofA@M3M?Yk}d;*_CbD%p!vpFAGiTm@M%iv82mjz0JY0U~Doyo$AsGK%k1 zYeh|sv4K|{5w`~=ziiejU8Sn^omm|Dp{R<&Y;_H)S*veH*kL+3VRwneRgJ85b)Kb` z%1)Vdaq1@@_o^iu4vq(m+o&;<6>Ei|4@0S~MW?d7%U{rQv{v&Q+%@;&bBZ`hx8qEz z*DGQxv*Tg-;apz0=%Pzkc8UaRy7_(l(XkT0k7>}&S`1ORIiPorCc}{Nq(Z67AJ^>I zk&qF=LnL`m?E`F~Ak=2N!#UqUQgEVY!7i$qU&*p=4Z|O)3~^~U&|4^e6G5tQf$EPt zN6JG&CY+y{xv_&w^!OwvGOr-NB)3imSzxR)GmF8tBIELSl(dU;muiZb#XTH4Q#f*~ z($J)yk)AU>A?U zT9P>sH_`n9IV!()Jg?c@5oh#8+r8TD_B*$&Ra<5mYxS;nXCfr?*bxV|!Wtec{*otc zyLNYDhZZcy;&4Yf@0X~f<0z5`lt}k#KRg`(Is23;?d3M&8%Xs1yX>YqmGc()pdY%e$<6f|_DJqS@xSVeUW-ql5Zbb6XcmWX5JBxSG9B7d#JCp7*K- z!!F)QDGhK71m){P(}Gv04Gh-}U7{Z&Z6AU4I|fk$OmeZgA>@jiM0SWBm?p6hk_5w8 zh!vJ<8u!z++tR>p+`sW|#K}8nGUl#aG(Bdb4{J5Q zMDW+8tel-L2@r;UH?}k}z|^eFSiY(8Gp$uv>g)7p7p<}LlUyyiI8(ELeKr{S{mZ}; zw=1hGXiK$&PO)Bu-PUTbhdzNN0k%q={K03s`gVWNMNMR>JOujv?#>=w)D3GRaC<$95Ry?ltZ4YV{H|mGR3C$|Mw-u3Jle2{nDjY1k1Ewg*ENEZ z(+d$W)zwJg*17&__~u5od;&!2-kwsIU_qSPkMR7`bdlL!X!g!LU%F~b87S0zKP3rw z2H$Ib!|e!;IPxL7X^*W|zvCK3K@ZdIBvkc6zpaMeoM(Yu3gzAo7@FO*Nfgu0U!109 zZ}5+Q-(1cMfAWHwph-NG$g(8fPOh9cM9Q;Pe=+aArCl!fdVACv*w}}uGrhO^V{=Fu z{n%3@X4!Y`i%gMdRpGcdq!z7SRYkiFci@uu-Sb$K-U|n!vCie*uHnPNQtoU?wCKsZ zVy;Lag4`xB6ThVhp)3+mD~f{7U0r|cPH{haf`U;p2C4q-(O973J%_``2aM5n-&3{M zdk1St8r+ZG@)IWuHF(u5=#ll$@xJ?Z^}R(61YJoEAqpN3aPJxhSE1&&Z#3DBZ1C{) zI3?HYx($};&UUUC#Wd#Mj!c%cK_gUgb%Zr0tv1fvKoyU1baEnjuFF`E!*$mS;@|W7 zEFa>-r5I4VQ%}U;Z%4U04pG;>N>(t+$>!Vfk8&IYZ0J9SY1r`HN%jj%H zP+vAnB-z5f@3h~WRb|_^i5Z>Fo^!8~u|T(N%)o9an8!J)!29D`*FQ&c`{YJs!>!~= zvr%yAEQu{xwwb@*e;~RmY#JQDMK+CMzx*W{VmQpH+S6iSYer9kn6@0MtZh$5#M05v zH{!YHl*CTQZyvuLN(p9`O|S-GgQ}iW;$vv^;&bet^|mPXlW5?BXgbY9leu&H_FaT= zUa=Ya5NA+>M#&fdlGPENhXOxGw>`_yD0xYulzE&^{V#rcyeP5G58~xxlIGCppw~)@ z0#oe$5>-tcvY1XgAG}&=#e2^__jNoS?3Xcqk%qr5r5YI~oFy4XWl))ePd}l)QhfDq zwDuY25*21Nk__m9KCOnLh8^^SC`ZfbX^6l2v?fp6x?mHk2xKC#7>28god)B^C=t$- zJ93>RQjSd1IG8K*S@90lZ2_-f-Ld}BeT?osj_z6w2)9@cKO z279Whq@Oh(YoPONbkrcjl=bToo*oVc_W1}UtJRrrX~gzWd*ULb1XWdFa#vdV52%kH zMN63ZS_dOryA99gR04*{BrfwIkMsJ_X!+;BnZlrxEAW$st~ot^_~~4K*dW!{ z?R1DtZV>cU2&X0ceCZ*0SS1B08o}&^+kZ+C$vXk#Fmu4rVW;jpL77S3U$w^Pk%$A) zhb`=(x^%6eDve(FkTb?IZr7Jc`P0o~?)<*Hg$NA&DK|8p8mFL{{FEr6Mj^Vyo9b>o zw3(=1Rslj#Ig6kR#Q6Z#3*;f!xX4^Dyi*1ne6)f`795p_6l;-#_KABO&?LG3BCt8R zGiq*rQvCz)USx3ySfHncvJh`4m@|NB$;8h2oD;b;m2W4Lo8CK$pb8Y|_wTP32%7>Y zWXp|koIMfaL7md5_9Hf1y3knw^MK9>8V!XY*pa(LPz|MUE#x;ImTz!;c>5H`l$m3V zWbfb_IFf`VZoPwn$PX-@3uM;j0IS;rU*l5qPQlDv*tC~bXB;fdHsKe(Va83TPnz&} zwW5u)pNmeh%O>aPpeH1_)Y+DcRQ&btF>?R{V&yXwC%AxCLMA%A^rE~EKbeN=?68s% zv|!oF!keEt4?@ryZ5Vg|vD zIwG&N3LL778l7i|>bTod=tzL8U+ozhO&^RvNd*kGrQtSB9tt(=#kXoWvis2$81Vy= z3?%(gjDu3wW_WFHJPGFn4|!45csguXniDlqak%)ctCUl9GkNA4DgYG_mKuunWXe}Q zAW+j{$KG%T#mtPhPcl>OG@Dw96=0F*o^Mq@Q zSfRj=x!gGWk8IY>eoXjWq_1svbvm8#eus;}lkDM+56es@_d{47E-c!8DH;V=!)CY- zRihV=%h;6HB_O`!*Dc3*E`tmO<$8i|&o1?2Oq3UJHso9?ddx%t5`5L53k}}wD9J<8 zAGkj;G?j8ccG4D9>wVZK)HZ;en$g3iHqvPv$W9@b0VCm@K1&X~!qe64;vSe@Yft!q zT<9x>#6EscQum?dbN3cK9-_xJ+$;3`%SG!E(fiF4%-$XktRXAR47H}~gtZo&MTxSa zen0A9Yl@~64!n-S$`jueuoX9C1%jj%%blCE#g8=HHfALlHp7m^3h!?d_mD52iCrl& z8!s;8UzxD9KNI$FBdtAx?2k02ajJ9qi&K)o zsVcrQ0ViV-{GFvR0JfZj%l3;1eJ5gUFnc z2tSHFd_6&&%lpY2k57Xv=dx%BG`Q2DAn~8YzcP+?4Q@Uc!Y(+A=Igm}wje@feuMJqH^_q#hhA>AiK^cn z^S!5h)O?i|?tOQ~)=D3NJt}i37{`Y3P@ynIuZ6OT>hZ% z!5TOlt-uOQ#twhy8%vcP-;QCB%_Y|AWnMRipL9OAbT6`0mAx9gr#96dHDq^t^g`I1I7Uuhm#Cx z9NBbFv-_kLdgb2KGzursx z(plrW3KQUsfSbDtY$6m!)WxhE31_N`Enp=q5Fj|lp#_l0W?;qFfjO3j>ZM8|<29oh zX{}FuFq%9<)4~DDZ4)>i8xL4PguQg+1*}Gole#m{oLLJJlwuCi3Xxl`ZKE6ZxRtIM zOWaqg&atYMs#p8em-HXdPs_I@1agx_(j(0P&Fm8!nNK{yZP{bvR!$+4=NPlndp^yu zFi>{k9>iA7Bvi|UaM&y8uH z-s4R=-t-g9vGsJY5h5V3ae-Dz+`e{T_izNd&e!y;VV;>)Unf#XwQ-Zx;|Rc*g`fT- zkBckQ^UUs>!aUiWvMO6-wRWDqO6~1NmV87)exAI|=P#XJz%@p5-K_6MNwQ>FwRLFfy=J+OPvZJl#SR863c4Eu+B`87g{iU`8ZcXxt6|vL)Vd+N4X;&Ga zV8v4e6z82X?v&TWIyhdA-cPouwT17WB``y`Vo3uu!3;hV2Xpw+4=<>Gxd;n+_4stF z477u>qtu;#2C`e9kpYowlVpK})mZ-8Nxc-A{o*7wZ8IyN7!9dT;J{I6O?>d@if4B%oxO#!0FCpuF_vM!Z^3>r`BqGd0w zS;_gH3toc&s#6VV!_44_D|{z~1_{u*0jH1wM@}J4F!{QVtv5REjmFB;YszkcDxfkSU0Q2M$PR9J_Xp7^Ju~1<2(fvf^O!RVR^sLv4;iqyT{!SjiE}n+ z1Prn|TaPIZwne1?bC_-+j38>Pqz`jwD~}mdfK(nYBTXCMHN`R{BIj2Ee6IDK* z+;@N9q}-geP(MrrO(Att7)&&+$~c7$o>FiDoPbG|C0X75l4RDVgz=YZa?wFy^F9f+Q z>M7d~*}1)}t%Q%uI!uOeb>x|)>~0~Y?`y<8k=?><7^4>Sr=MI~s+{ilrJHWg zyM%metTo^r4y^6t{3Pwp!g*fvotM%5yQfG3?(gNlk?&Y_nZR0K^ zhqw6ec?+0v+q#8j)?=*Y`;U|7{fbNTdF9FJ_*O-P&q=KMy6;`*-j49K{1MvLCaMa_ z>z*cnG8=QJe#%+Ej2MgecE=*nCH90x@U{Z5I>kq|+cuL(X z+Bx)b@!x)9Gz>?U&iKQ_v{i<)nKX?VG!MTyv)qW2 z-S~n}DtWHI%r)3qyzVq9c>3t(sr{;-$6V|$f^l4BkoF;_4-RbC0H_m3pyBk2t-X@glJX=cYLto%k4cL=Qf=xg5`oB3=> zh*@K-%n?efgJODu<|t>P)t4l_81{s5e=rWFo4L*H>&e!MQTTDjM5m}r1Dp*eJy40L zkA!h0VhO2^1bZx!ad31G=8b#72HsBr~E&IE z9h!SgQKPV+_GRuV!Hot&@roeRjY<}|E^1{vPNC6?iVSFp_Y{dANE25SD8ogX_*si9 z&@79yD$x)eP_ZH(o6GifK8J29lL15)zr@iH0IjeV29@^}%0fLxE2+yu1IFv3(k=#$ z`nBppAvNsx2B4I|C!T2897Vzakjiytq1ITYs$|yRl%}qN^JetfYQJN-@S2F=4h@w( zJX^I&$S!;a*qL;G?MhQCSx(1_!l+@2v9VIfN^i`TNClO}IN?-Sl=e+hfXQ@;7s~fW zDt(ol?piX^M`d2o$ire7-C>SPA;*{w9G=-VjN4J+-6~`l#VpXO`o@wK+kxXB5A`qx zpBGs(Fr>>Y0QAQ^Th9K(G<;lI5tPv0a$yzR63y7ctSYJHBw3bSMs^IKRbhNog&STw zC1m0SGZ;Y>gvpeSk>o2JZPkvpoQdwUU5SuW|>Mh-8MGn#g*FaFn7p#ASj} z9ol0aum5s`paW9-Zq6ogpmWYbG6+n{RBDKc_V!%eg0-k|evh7ovH*$N+zPTI@O4-& zw$#Og4~$Q9&EzVk3JV^q=_C+I5mlGnp4PLd)V9Lr+{lb4nH=*|zjM7e^Gc8OAw3vQ z>M(PSGs3orfpQuxsufPtd%aQ&Hl4+`)1i6;(4nmI_{xHTpru65(QB##SXSixo|dgI zmMr;@#WVPRL$m`a4yZ zAG7wBB?Chb_&QltzuoY1M!5|SntbpO=yjqscU4v*8XA~jpFU@4_vL9*mc!efFU%|$ zYO_ge3m)NG*-^pJNVID| z4GZ^d)RnGDjRVSOKGr8JWhJMfU8yPwIdGs~R}xF4kp{$*n%KNZArF1o2#^pI$Ijln zv+zSmRR}_R$-X^74&r~H?w54OG8@^|cceTxK=#ql>w}7PVvj^_-LVT=?Bw7S7-|H~ zVZc13>Y^pl{&sGJc8W-?AbWwOeW5>d)HDFU3;wCp3^d{RbSUoHiH1F4RfHlrvHOL@ z08Q`xM0pEBf89HUBy&q4{{ao4^2|#eh~Ej;jDyi?j?<+b0+sXgHD7-PRXKmF_c*J# zFmf58%>r=?yw*FS{CnP1HDN|xN#Rkc?@iRI-OfP*v=vWGMBqu9PC{BiRr9x`s$Ixi z{7NRC3GoEFJEGDX@#pK({KMgKEJeq$sW`r`9s@75YiwEJQw4F**I&Z4KwMbAtoSLn z=6OKgxr+7yfn-h zg936m9|kCM>N{N`vwy6|0FWE?<&y;Mwwu26sZL(tzh`1FsLUHdl?mS13do9v={ov6))70;9k6UyXu zoRwGgHHh7`w~O0!zX}`%6zv8B)rER-`j+LD+{tm-jqeej3$QG9M}O9Ta+dM^q@Mup zBeg72m(@%IJ^V=U&U~Tk-UVAA4bE0*rF-QIfl*~RL7NW5KI7$ZxPbtEXHNB|nM^0j zV9~tbl$O$Y|Bu|AB9~TAeVnpIK}+2E5y)aZFDNVm0G)k=IUSlCc>kzC2u{?|ha&}6 z*Pj=>LIspg!TXW;qC!C(`b4W(?e|4%8>%|SZrpn{IuTcRveVMSP#(aXxU|YZRJsES z6V(q|y=BgMHz)dQ7QqcOm7m&!9;M&sJ$uMy7xRXmr3&6>wo`Ac&#>(-d4STJr*gPLS zj(y{QNJ;_Th>E{tF#beh*x%R-;NOrK4!~c4QY^o*41XIO0$_T(ga3oX0Dt9jnEwTr z^CuGXhX@w7H}-&o2=Jea_?63H{uf-%pHBRa1O3g3-zEK15ac&+|K^FKnyfWLA% z%>RPR`O}F%L@;x{%~N@E;y)MhE0^<|(7!^)nBStSr{~KJ+8?5z*6|78eoD}fCAcFH(Fz2o4|I!N9w^=@H?0-|i%E|CHis%2w ziZ|%+AM6j#U)h{D1naL=umXP@QuL=6fVV5)+pMDhj|KTBDt@JNSpEf_^T!5ZVPkp& zg#Lu*SlHjDC;hYS@$Uo$=dW}Q%iq&E|A3SFV|)A|;m@4-&n5gyGQO4iU#`WUF1%F& z%imo1&60oS0^7e45}d!r<=ayKrG!6S_+7%E8S%R%|B-}W!;%SF~%z(GYZsz|< zh~EHPmVeU$9s$_L!l8Q4U=SzgWqJ6a(NjB$!+oFuJK<|ChPF*enov{-CpQ@NX zD;pl}`V<-Pjj-0SY{eoQHq{U?#*brRjg=;RQ(_JwB#m_#^nTA4q9xb<-%{}jFP6fN z^kfH5xL&T#^u|pZ@AE$rhtH-Pl&vNP$7vj3t^P#V6EqxeSqcWzfA#;tQJducnzcC* zwjlt+@fh)G58l<7H!rDEz>=?-Zj6;&Lm0pR+E4}vI$&AQPM}q&*S6ndeCnK2imQ)= zRi0nuI&kx9!moU*>W|0!I9KpE`*uIksoj@_KJrm;;uBNr*UovWSk$aW_D4=Q}+ue#!L1to*mq@ z$1p~Ibm$Po^Zq~DzB;U`w@dpFf`Ee33J5A7(j{F=gGz&ROLs{fLIFWax2A~0(>3#& z+l^oDuZO-MP9BC>cdW~Merw4YfJCXKpho`4j70bQv2oJ0PW)KF!TGGAPNiE7#>R8$ zXh17MWi*T%$E3wjse?@y=-C;<@G{tpvWC2D_Nzg7c!A{Cay5eI(Zxq4Yz2moPd}5u zVC<5^F>idfue{aH2}@p9Hy*q-*Ji1k@89tXmL6Yuuv66DsCKRpPLdGtzK$Te%<)|m z_iP25(WlZEb!=2FvZyJS^mn%AwrDy}oIUaC&_3L!#{P!ZdUES@!t%3dlqkdfU=zIi zTAn+L%rDVbDG&{BtFN>mTOQ39Gb|7n$HI`Xkku<=tFNw}#}w?C&r^3*M>V@8MQtLf zqG0KWS5$1$mnp-j$ddcsYHMeGYc@kGd}bs`@WyK7O(RhsEq_jq``m$m18-c=$ zga9)FsYt|K=fg)%{T+K-L0aS~X#28U7+s-=X1bqVN)T*`Kj-gpck7dN^$$8|>@nh(iop$p=7;p7BF*wpQ<<=VMVI|R$<{BIiF~89@&fs-x z`$z}VHd1-lc2$<0{DBtY#i9wVuH#(t($wTZ5!rC{HuTLVNnriTFJ^462jjc*f z+=bd45gKV@V}6I#7~&>K_Ze|)2g*GKF~$mq$urt{pDsJxXSBYiivQBTqWW=b3ybi) zs9VlvXE2^ElJ-QKSYcN*K2fwA9z(M8ktj+;(uIplb7(deK98|ZrEPzsE#&1ViqNF9rL|tL*8p9TlR6xLGi*9gX@<~ zb5G$uo4nC#b0_4H%(qv=NBO+@x^iDBIDF;H+}R@!u_9vrd%ZNO9z%jS!E#13sjp=D}$BdMQ4JsN{z_rTFz0%>xxCtfu~I}b;4 ziSbot$m;Bu4^G1oT$1lHQTo5h8!Rk~Dk@mzpXtb~d&Cb@l6~$iV0-DYT<)C%D-wH- zYqM3W+KWT}LP}fKkcUKY>V^3`=Hd{C%%$wpK7IMBRx6Q7e{InNOHyk-1YGK2VK-KO zfqU)cZXwS_M#;aw#uw(|3Bk)vww#|L$DAa31EmwfZK z&z#4QUa!?w{&mYY$mGKP!iiMoMEb79JGk~fX@<=OvNDLztW-BW@hrqJpx7#M9 z1-#tf-*T|I!nzd`*j%LC#4Z1cc{aa9`BCO&Qd}h}GUvqmzQ^ysHi`CYt1^8Fl{i`8 zQ+Qfe#$18w-u30^QiOjS$l9#-cZ0?xah4oQt62fER*HuH6SSxH(qCgODXC2o1liY=uzafuToWb#-c@dlXn&@ ziDydK??ZiK{a+5e4Ix^2UnceW%6kQ6{?4HRKL4!=^at~G(}*I&VE&5dl4pDr2 z4IN}cg_~!JE;u%qEOv<0vYij9SE~(H!oOJr60)fH3k)Hr5+*dylb9_TeGv85gfj%2 ztM`@qk}Yf{<5s zqtQEH(MHSfu{r($BG+l}W1)GO46fDDgqQ<<`F&+q4Kw3LMveT5p?Bqf`;m~}c*lN#otC@NL;n!e?q_aL|8 zQI7Jky*1P%KJZ1oYA39q;whX{8orGJTnHWQa!P^YZNu~POrwcc40tlkg3-1qu2rRH z-#TUjl5P>zI!n8$`FVaB@ojh`sH#sz=OP-9j>|9aw8V)|ZbXI`GMu5@GMWBmQsqOw zc;#WyA5$a@sh0X1%c_U)|Yff9KP#g45E z@I;QceYB~FXy~Oj-S}&o6qA%IRF>_tG%t}HkBTa+rgd7K*5%2U%Ed-lv^aL=9Qu$6C<&rWc_#;IQR6g_mx z#$A5wLNL`~)pv}Ir^go&HWKJcA}V<)TjQcwJoh{rU5myD??;H)_!dW679qUEP&=o9 z()K)!pC}G<>Kz7TJxK$NzWS%#k9UsAiFUCM41)a^F#W&rml-`Cc&C(DH&DQ!*A6i# z_Nszq@_Y$~Y#*C=cpX*cU;ihE;}s?-5D8oz$HSukW84 zUPYt>$+_7fC;@OgkPai#T#o- zDuyv3sipXCEX=k4LnipvN2*itOhjJUuJCD%sC``-k|> zId~NN@`FAC;?CbmO>^@}rRx;wDGc52SXpD6&4vjOP@{$HxegXpRKrGK$P5g)tWRqI0FNyO@xxTNBC|{DX5sK+U!|(ZQEV3DM zBL_I7D$$tq?xx&+c7Em!(H$)bHbu)Xi$tun8fFD-^qaql=p$?%z46CxON$V9unduc z=!$bF+rR|xduLT5Y6yMF7f|+PQbdcb#ID)XW|gs+&@hYiNin{)N%s~b)Y`z(HyQGJ zQt8!ZQ+Yz&UU0Kg(%HHM`^8mDJ@qAa z@u{o3EU~G2rMXZuKbolvGo(mzlc9T9;2AsLb~7#gM4sLD?H_OP=Js_Hjp|)x-DDjT*d{ zb)D4@xm~ zl*%M$<7ON9{EmP!qVMpTI8K?^s8+jKXP8e1iOh~M&vOcxVN7dRM%~`f?wI{T z={j9VuI+n2targpGj`3NF+Wf#-$#7-F7{HuAV#-QzpC9aN`o_9?!7T#YBIiexXT?w z&T9=Oa*-=dEB>Z-dPYw%^81KWBF|0KO&BiDCZ!U5UlAR$=u;!F9DDQBVWWOxZSrUq zS^XB&XRM+^N|M8nkd3-ZK}n0}r^rVAXetD6*gcR*o-u`R2YS{37fq!8l4rMD_Jr3f zUJ_y(G^ebgxNTA8gX>dj`?ZkwxkHsCeR-P$<)qJ@P~Y1F(mXEg7yXG0tud7P`7?s= zuU;3Kzbh+w&YWfWR4+@X^~EgF8ZjL&*CJc_J1Tx2?K))zCH=2cqG{dS<`WiddE*zR zoYbsQ46;d`y+XnW-AwR_EwiV!`mSCr0s$ZM8TuedVskD`n{W+hD^jjI)dSz`H!b(k z5syBo%sW-x_TJxnf<4{SAnG6yu-J$dM)^pBRA}#kc98!w%%|la>ZQr%y`gFPTzwcg z-p}S=A9_Ff`JYpYn4|^olZ~ok15Pv9?M-nWl3Ahy3}G}sEmB&NQqo;lLfs}T0dtkc zEsZDlInlLd0yN7$*TjqKSj^G;lXxz?f_hJkcCF{3b- z4o)q87w7g_*2mO0<;;`y-c0b?hnsyEle#+hU0DbNZ;VkZc%ON(QPg_H8>N4s@m8cT&faE)HwUHj7dSJ<_SsSp{6_)?Y%>uT(#@zdb5adO@HL{s z7|Rmg>!7{L&&uY+;d4Qs zVshhZ{*cZ;$BObY3SZ(?%spl5-%K)d->Lr$IU+6Y<$q)LUK`7UsAJ4g;3UVAqs=9OW@W<;-2W~ zy6;0QyVtOfwN0W=n5&VklIz3g@8-ChmsK*e7bhsZu=tqC6PC!ze#`z&L}|Pw;?jBeB(^r2VrpYQb^bFEV`+4g*VWNm^N+Z^1OY$l27gey zl=@AXf0tcBv+{+Ogk$0^W8`paJof&CdvFcMn$J)CpN|cIYeW3o78C<3(+%Oz!U`@K z0T_37Mp_1N8xdAohW}w7?7!gq|Jj5Bmo54CLa@`{@cqAqU}OdCKg<7x6#r~PfgZxY zmEvdXiRlk1m>58F7QFgj=;FU1{QudBy15?Bzw6mEF#zR*J@~aD%nbCjpz-*BAjLm> zQ9#@OR*K(d@q&^5=f!4zn#BtyU>yJTwPya&9{tbFg5jUdD5n3WXV37=M%_#-Fp>P0;0Fo&4S^d%_!#orWy6yEPhMz+bsSMr1)ny>ZW=3 zr*ZzgLDD-3EkkgBr9bbuBx<6mr%R_`pabsA!}fxaPDIy0Pv4s41q(YJznQU_rHr|z zwl1B3uC0N#uC(wgx>p9)R+74w{AMQRW~MiHL}H^8H3fJ2F*m!p(+|meO=Bxvy8pW6 z1g@mQ@H3YD)pOdIauHEc9G~5F{ruHuV&Ta=dJffFQVWw2Tmsf;6Glw*DBlvm|bkR-pM_ea|BkID5QpbfePWygIF0jj^iJW6J@PAQqFi`kZm~4p1 z#LYs;<;1q?6%yilLDm6sd&!*NBT1*UZ;_HuF_8x+IVbf`z~O(kQx#D{66^32y9Mvz zTX>jqiFQ4IC4Ro~))85QWZLGj!2=2!R!W@P*o^4q#O1`ZUjI0Ne@l1^`D9KNFDT5d z-!f6!jqmY7;Q7~cIOvBFk0jlMqRBK_63JG!Md%{bHQpCG($(F)HEyJ9op7OZAjELS z2eIU}B&8ygD^4So9b=~no(EwQDgB_Y}R`uft+(u5IBMA(2# zYTx$ST6;%FM^~4Lsi~TZ%A{>Pw*mWEuX2SY?=g{VRP=RaNN%>OsnIzbW?Oe#8;4zv zp?!Hr&G6Y7EHwOD&yrWeF6ltEw4y>uS(%fWxhOyXF-B@?Dv)4%x;i>5+_vbRpHOsE zlys4x(pw1=Ay{ti_IfUCdeZW6ZD^q-U^{Qubp)QVUX5+Lv}{ySPLATb!_x8mnvn2< zH#(YoFE?}DCG(Tyh$y{er=#)ev?yV2SE2(W%sm(goK0(uuMf!2r04oU{S8+ zQhO){&j|^px3#tP=tKzi_oO6JDk>^Y&hxnjuY8vptMm+cb#-1=R^ctYIF>|pdHIr( zlK0t9hNMeX`GiKhWZSok-^OyVG3>ewSwgR%ZD(0JbkCl3+#JQhI`VQ0c_S*MW}T9f zlJvos^Zw!bY~|8L3Rrph13w{QAtBSrGEF&sef@~|_;6kJ17%@b;gx6PRXJ04py+S zv64jLYa`~f?YJIvjQG{n(?kXIFwdM6XWP_j1bRua85>J%^!@%}cOA5&p1p#C0xnL` zt#IlyKdABg_kgvvH6m-Sv{Jql5$&zgnk%#7;_Ibw^{b}+v8AP)loV7uC6V8HSiHAU zHqQuRkH0^M+PG34`Z4+<^!fLhADIes=TN?fR)oSG*x90n z!4H#hJ-cyE2tx9K>d3?dupJ$`2ag`{I2@!cBxieMWMlwUmBo@Ci{k>T$;<0)XJTbx z+1uX_&V##hh8)#cCri&bkM#HNeOr+c7r&P1ug9aKJzD|aZ0?|UygrhfjBtI@!rMQJ zj8Bnlb`Ffby}iAzuCBPaxT~wHuTP4df){!*y4yee%Ejfn*l1)hmP4n!re?Y@c(`G5 za`N=_RG+y5O*v_)Pd)m^Pl9A+vK{TkElUME`n;z5gT$(x&vReA5Tv5Ip1B+x99(Jf zzby6ephK|Ao7yrTw}REw)bL)+VW>MF$~`=XAdp>}Z0nnwn&uQ2zrgg?(bXLq9)A1w zZH3Xe!s^ymH}Jx?HUoYAckkZq7!NpnSZMZ(p@Ab3!KDef8uzWyaSf+c4brvG?(Xhh zG!3c5sGTm2P7gU$^7HdLvj3Xu^W{3YGH`Mm#B~s^-xwIAFOVVyN)ryg>SvTxGL@yg zN1+qL44t7Xyh^sP<#j$g*qLi6Ai2(T41ueBT5jgp13T%bD31(Z4Ur>p+LBBV8>mL#l zTEe*F&YchXgpamQK)$eOLbgTz#|mDPW^^mi8JFwo^YQ7A$QV3MC+5eT2nZIEXrdi_ z2IW%ed0? z`F~XUTMXylD%G=sxw*OZ@SFn!24`H+gA6a)@*mHpuzW_C*m?1|n&Xb^@LqSQUtvnlogJ=cXJ=Oq z5#dul=dIEH{I8j3V?3eC<@(AFc0OeWyTp}T>566*6chxZcOv^OoTK1QykIXuBF2yQ zoiS&S`swW~yd6#N_4b=yJ@%~j>_fKJJ=wTXV8r$wH?Rm`J1VzYl}Ln>^sFv()E`2O%rhuS0-W|S z#%G2z*P70lDc%%Dc>!Xuu-HXsD(&y@--ccDh;qXp(K5j>?s(j2W_;u7V!x-dveIt!Gva2w2b$?aKEg$_!ooJ z*P0}WM;PWB2XLwnUQ`AUvIk{tuU?)k1OSz9J}7o^MYvIU%-H3@>cIE!-$~ya5kpVr z8XE-)ln{%Ik|2-e<=$vbdcOs|I(9oKinhGS9 zl+KPel{1~RwHGc<_sh%6z0iry=Dditl)d8xhgR3td<33Ir`FU!p-?rP_CgsM8Gw## zY-}oPUewagZIk@*eG0j1)lR1c)Yf)(>gASAl-sMTf=#V-+ZC_h6baZrl`O<9zWbF2hQpV90vc4K`N$=+U)_4dbE$;rAF z77PhYaiNz=B4YO6{U|JFOS&6097jtL_$U#H54g8k=rRX~hsUo~?gpR7a@v`G`0&oz zSyx*-(MbGcs8r#N+K;uN%piUH5)%7Z&5~Z)ms%3MK!8 zo^A9C|7Nn?;H+A)Yf`kJgu8d|rf;vjmXHV!3!AQXWHs%8vq1Y`!wVfM*=6}$ULxh| z=O-$Zy~R&Zvmb7<#sw*l+%GF(ksIQRKL9Z^#mBO-C z2h(K=di(ns+1b-km*ix>sq6OC>x4cV|D2Ya8y_A0^q9Zjf)=~B`xar`#THAhe0pYP z;q@oUNxY1-v>)s1g*jqqV_rn^!Gmwr2E{74l=CcMz#@*HRe|I=Y|s$l^7`UoDXQ*1 z*@N3ZO4NaVzMQYkWtuFQ+{+6)d*VQCy|TZzw=u%h-Y_cP{d}9@xw^V~xXvEf1-MXd zv|zb7{im;-dERb$B`v(UrLh8kL<$t7kjZ7gmz11LX8JS?=+1zYle02Ef44i9vnP(b zkQIMf+-Poqz-w+!vj>;-0RcXKne}RrgTAx#c%9l79u{m%(Ic*OtziGBiK$N&M(M?r z?y}t8|NfYB`?mk#&TzIeBOj~jq`sLMM$X2_E9rJDlg4_@hoUXfsFG~RHCRx`AlJ$+ zmO}Fsw{S;z&r8~}D+5fb$Yv042%wd}D+nXctsRi5V?G+S(H*ekmuR23|&!-E+ z4Uz_mz(pV6Y^<5`W5r3J$Fr@cbAYppE|rgrjt1_GrcYYi+4=grT_UPIW3TFb&C=@p z{CDH-jg748sH6u+Mo^q}C|Z7PMB}EKjZN_ahh!VOu&{7Lk+EKY@{YWt81wN&GdXg| zxy|$yK%;Z31F2M$lpE#odVj8N`vyA6%Cai}nfi?KQvfE1Iv_x9|HOpj`Ozjle_(w4 zcA2nqEgAk?PSph-hIeQ5()>@7MHa0ejmz7p4{+CSZ zJ?&5$(qyhaA?l4NuC_rSZiV@ryUjisFJiA>1O(Me^BGqno>Qs)Ii+Q5W_mgb6QZiB zYJW<_^vmHO>W;JTs%w_K_TNCBc$~H>5|y8RU`l^jmU!7ld1`F^{a$fQ1h0Z-fI4Kj*>!{lSt zf~V;8hy`)<#B|@^HNe;R6CpgiyjTvXvE(ErNfg~|PE+-Wxhfx~^iF?XR0uMDH!+_> zJr;gBOekFlFi=vGz|@3dkWlDJ)BKd%Of}Ayl~xdZaY>2Lll$I$CMMZ72*G7E=S?)G z=Jg5_%@cf5dZ+Lu9Isc%x`MNmFO}-R=F4>g+s(e$=6gFNbbc2_T8UzSc9$`juHgHt~NwG(jjQPB2HG z1n4r*;?;ZSPE%G(UOr9Q2#{VG(O@f;SdEC15oiFcxcM$zW%EgZ58SBnM#vl7WctUy zZ;;Y2`@NC2Ld&+&0)Uh}7y1VP(D{trt;IM;{(TJO;@5%+RPR}VXg7aY=Cs%V`VcxH zV?t~xJ_vKLvp>fnCnqP&^aZ&eRy+($f4`nh>UMT4O9 zefN$+LQYmg|ue0z!E~O^uqG+M~S3qmO{n<_OE$Y}wB0IQv1kvIcODg@r>tJv+PjnnEt3 zdbiwa#na1+m6cW3{(qJtgT4BP($mwip1o!3=k19oBM5JlD1fKB45k)wXJKY0&3*D0 z$3#%NQ(5+(1m$54goBjpVv|hq+Z&bC_Va}H9wsN#>SesP?Spo{CF~CC;es*3zoW= zM&vCpSfJy41D#O+|0m9g)3`|IN&*Hr>}B^h>F{&aYKOzUrH+E$sj1DA&+=EfnVHe? z@fb5+K0ZD-KyH}IiP-kt8);5^DXP^yvlY9}w0&_63rDja7mKUe`)T3@B#+Rf>%&0Pfm_?=!q0@m?~iI0C^pZvh{ zWcc4I3OVNnY!YB}96nr}SgdDW4O0f4r_&vIZ8sbo9Dq`}Cx-ngvY6uSE&kRVB-x3{ z$tpmJf8+PcO5FfDtf;8S3YN97g1JVV*z`~q@z@<t@uRSW= zS5#Cy@;V~TNJ&XaNZ@luU`i-ZM-zQ6QFI@zT%GbB)=f;I7A#i>&h%6!2(yLK%E}6q z9uw;got?fmI65F@G>J`Tr2-ezwF0-l+#Dk9%2VIZ%*xINNIHG#*Ya68IkqaulSmNzsueys|7K#0||HI{oA$Oka%SUk~B?oNL)3}GHOZwQLnK0I$) zaL&V$?=rm>7|RR5)#9k3V$hTI*9)_=35c5jSsnE_asRn*CxXh;j)1$sqgBb<;#u@^ z=7jKq_#fsoDS?S|jFao^?7WtFbtJbKs30SQm4fka@@@$U`)hmqa+@X}!mpr=q9u}1 za1yz}qxNfq>7WpLR|P@}F)?vCS4+hm`G@IQSs^+?1-A_Bt*vGEzJpBNVgd>U&O2`> z_ijK#%NOlTep|JNRkoW^6^cGO4r`cu9v-(s3BCZ5QXP6qmQbLlSpe`HscDgij&soY z<_wIN4MArHy%uAo_D#wD`FXjVf<2B24#yTQ0ZM^#8L*!6pLOcavc?Mk5}3wS-*X{g*XC(p#IFBe9acu@8X_;w0UC{zw#`?PQ$Oo|6(y-*Op6yld#$$ z61jN*Ege*_1;5iW=%t`q)%|3X-k1K4qc>Ie-^BbsPwYQ@xLW+S`QRZC)vqgM;AH2_ z_DImdaT3C=;M5lf@ibW_Sfq0LQ)!z;*1A$zE=ANljQNA~gwE^=3R$v_vR|B@Q8y-Ugoo59e+yCk(B?J_d--2+H-TtvF7VjawIOn#% zz!#(!<6oXStsz6s9`{&0B?naBjR1{^5Vm!+pQ`761TnXUSPRA>K+Ko{8F1M`$-I%mNGfI00$99 zzR?u~0#NUbGG;uD0;m=>H8pK*ZFO~*T3bJ3=VWISaaikHSq(@j ziY2MYe+9vM3Ba*p!0%;Hw)z0R=c@?mvu7)lwpHx; zMnCtR-y3LbR8&m-jHqpriM#-E6vQY;bUK>kbxfr6()F&3=-+`_+4_7U<_~L(&B& z@~xs`Tnd(wvJ5Cc!}8M7V^H+xXH)M29w&pImv@Fk8Q)LH%F=SMfco81L11|J%9ih? zxznE=%XjH1_{79LpuyAL4pNH)04;pF24a}wK|z@5)R}w6%%ad^d~7XjucP8emw%vAA>5@=&aCMH&&Y=aJEa;Tsk@I*ZMI1R0a< z^N+Y4K(UD{sTgJWyHlwsC~plT{OzS0#s#i`Z0CKOt8mQa(34a|ww6B_5Zn3xK4^_=BT1H#Y$k+BzGaD@#dfzLMjo>I#0ncXfI0U(7`% zEk6&_O#4&=r09 zgASwp{ZG>0+uNT4QqsNWT=d2HssNQ#2+oowKv8yfrNv=-x-DO0Cour;4kAB0-Uexa zl8Q=ExJU^L2ZtfI)83-@Sxjkh@z9x%>ST`-C`6L40L#p+egK$A*!AW1)RH_}oZhWa zP;($-Jc{A6FDNWzN?z_5ln~;0WOqKy@(U^ zX%-igoL@#pMRC|}jMmq?FL;1*Z*a9SoK8IsuvlQu!P2hT!RqMvSiREr&D1@iFwpeR z7HV#3(Y|&%_0-d~FNzH86BO3>W|$zWa6}2$z^4u`yVw#kCH47oq3NBANpK&0f<6F_cb_pptn~;Hz??x zSW1TJ#P=XR7&uQ)v`BF8wLe4l=2tj)q@Qa+JR~mfyhOT<@9{HO(g$)Q$d=N;Cy;?a z39Gb%xJva`Ga&_Hg4_%;ga%2AJ+D9d&n#DK9yfFRM<`FLcFpAaBZT@jRhNYKA%hrC zcv+0S=TH0F9umwCMlfJ2Xs%!>?ni)UDk`d}d6e?-AL;E+Er9R_ft+dHDC8ecB`!h0 z|CL-IKT`_`@p{g1H$fg`Ey!=_AOHg0#Btc&H$q#;f8;qkH2*fRX|fR!5$0KpjEtBy z_bq@^t%6Gswry+}gLcH^77Y!JjkPs4E-okm0BfExq6(sy^^e}=<&?yN5Rvk%`H^uR z0t0$Fy4>t+6C0bM%dDn8cXd8O8eTwk7b5gq**A%h1_cLOZB3RhE$PZ#fq@!OkBevm zU$e5>2XS<=6#{uRe*+R`XxPYu0{>B}`>RdXiUkdfj~mjR?sd?uEHAr{1ZBNe1H%mZ z+S>e&#E#x6DLEW(sVZ)*tyKWNEb*#z21@0v#rM%4nv<2)I;>jtfnia;@d821g~B^N z$vkdV-O=%Uc6N3dcMMT2^#OblW1M%qR>t^41BMyYFr%3p=F^HMub z3nhpvphU7D$PZRAH8eE*@ZqHQ8-LJgW45}K)O~Z)oiB7XdGX58fXK7kQZfG+cX=oN z{1!54r_q>+u`$@e3|*UP37Q$0%k^l!cHMft-=Da*`%c-d&d)(XLBLnr>oXN{#lWb} zU(~ZLpk4dl%gYagP**>Q!E<>y--PDqPr5p=ztZ!O!1_Q2vjeoFLCZ<82gzlIj*X-) zcZr-mkF;U91e9)>3L&@b@vCSjM@xUWnaXlHKAtEz66&C3OmDNZ?1M5g|Z&WxIn%=rGSpA7R#VO%{TDUfhh)N6AFzq73^ zzXq8C%_3N>Yc!W&oCVM}pj0>+#K_y{;^^$@2@eSwHT(XgL;8C^&N(F@eSi(2TYdgI z*(o-Wqf)K~lWhzbeDLsLLHM1Y%!;0M8&?0^=VyUZ?Z2AQAxqVc10P&SS;+MJQ-O z&xj(4`~mMwg1%1OLu!8 zv>NM6iT6=HsH#qljz(xJ3keG+b2$;6<2Mo2&EDO`N{P?^plLmc)3`feJjqUK^Xkfz zs9gQK@02+>#U1GCuSU3kyi=&$O@0>kDdQ{!5P5i5-mxuQ9m>wiidSO>5Flt{hZ0I~ zhg`foqX&HH(w-z{2N-eyvl5;FMSE;luUFBN4h>p*0 zyQi_P6vUMJ6BK@GG99B%E~jXxSx+p{wkp!Wed;T1#_oTnvY1@**+a%K`HN6kxVZC% z)*2?k*qD`7W5$yX#`@b&wcMPnZa>!Px(rKoKB_*x=5&cTc8=c`PW-VHd+a>D((@tC zY&!BdHuHVEUJ*ykd~i`iI%A!NB<{*V=~t61CU?)feOf7To>Sl=n~J*hekp_n@pAPn zgb-u#6=wrLO4HE=;8Mr~7DUu;b$#8)%#2m$HY*nw7YhrnD(AYmRCZ-0r)P!K9St;4 zXB1$jy>4fcM+>>?{IsViMh-zL$Jii9i>l;tsR zSMIX&@?HZfu80q-VrDyh6O2#dT)CyU*&T|IzS8Y)20@2Wku}oI4ekh=_r8ud^=p7I zrO&=*X5oa;I663hP&XQ{#4FG-LSX9-J(WsCPkk-O?t{C$yiD;@a0ouSo2A{aScra^ zef%}I_PUS()s8c4@YNB5>*y?DnX`WNV;Qc@w6s|lz=Z9g-8-QTAsi)xkk1SO1O&kC zOM)9rZ8$}d5zFgRlb08G*~WWOEbtH?jI!#4E45;J^sE>e7|cDZ%<{z5W$UAx$!m~^ zVXNy#mDb{dUVMwUMfhEW)D03;F!!!VJD3^XcRFO4?F# za%3HpMM5PV2M5fRp9U6Pr706mgb9%0;cWdphbneI-MfR79R5RSgy$rO%8(aNLtCEh;K9nP9oB4=oogc4|P6kByxwGQiT+$Y>iJl>HYmN=yZg3Ne04 z!DR-&fs_OWb;-9yAZM~ITJPVJ^YX^0nALcO8QiUeysQuh!w~A~@sV&u1O(b+zARfm zegvxNYZRDkwheg1RoakR&|A8TY^|y3HdFeEMNLr=1rdHDDX^`g&yC_O zGb`&p{1+b|2S-OR#V|Uh1a@oGrjZ*hBYzCD52!!nI9@Cjx`I)}W;= zi&f&bH%!sc&`{*5&Xg%r(}vD#vlh~_u)4Y`g{xoYCx0a4pPAA}x7Sz&zC=0*`Bg|ANjFx8Xt1_IArNy89bWNICTzEVsH<&WpX=Yj7{9*)+;;=z*Glj{&(8BPcbs`k z>x&;jx;-}ZaHeM3qqp~7HY?1}+V_sIB%ur+SB8Xyh)8e}l;{JR2J|i~mcjJvz`(%rdPzY+|Ja!5gMdrXQ@6F=nHh=o zRSDEEDC~M;tZ*64>EOrxrl5)nj%;~Jl5Zv8=LPW!vtSk)x?O!tVO1~%X1i^-Cflsg z1hLyi`V(Hg{0u)0=%22T9(^0Ore_9TGP=Mde+A)pdVl%Zuy{fH=-dqYuN;N=X#-iw z_(dZ}Xk=_`S4T(UEgw11CF)l_J39m2tuE~PyBHXNsLI#%F`Sy3Vi@$(f+*`783l*( z=}O1tDU3Z$gxI7MiN4V60KKFD6}zx*qAlLVsT6Epz2;zFQ{lt#C7JL2NvQc}o|Qith|_6|K`6V#!DX${Y1 zr2M~ol$W!MNlF#hrWE>FYG>c~J*8>=ov}i+GEF-FQiwTX_6R{!p^p#hl^%#;Fo@gs zt2Q@Pc#S>5N?@kiE$Hpgn{f~3(Z#~Pf&r5CF2$d% zZRR(@2X7BLST}Y+uRE{MJp>;Vx{u`0j5#LKQaFcx?~E_+`Ra%!5y{V3_mZy_8pwrG z)vmmL2*&yTnYX@#Ny9b4zJ2?~M^c;92SkXw2dwV^bLz+Vvmn`mA$Ym?EY;Nal? z8*~~vRr9~kTUN{;N4_UG{IiLel*~10fj_y}GD!Jl-NRY{X(j%}5MDysbg}EA8I9 zR}jxl+<$d?rK~=4Rv$)JbMi#$>y3nwyv5dI&ZuP$Z&-47=_nhoZSc~3lYdaNN z$+;zI2LzNtV{Pj$yBeVew$?qHn|VW$WJsT|fuEnA!~J1U35&bbp@EOBc}Xzd$`syM zP>{QVF;6yFZE1`r#PZzma!@i;!aoMZU2)u;;ml>ey-77P7K%TFsn9~dX(uq8@3>sI zpXN1O2b8~^#1BX3_F%m_y@pe^}c{S4?A1ZXc0YA`)2#m96apr1cAnkGhcE+@}sXk&T92lLSKYKh9sIl z3XdGQlN83ovs;g7{aAvWk7xzu{q(GJFiLyqK65peB&+w{EOxatxP z7-wg8ElV}&UV%pQxSZe7zFxkX8idi#=w9pzTocdvL+c}A$@Jh2rRx4udwz?|LKe5? z?BD5y$;&xjtX;1gKvPaNB?I35kq}}5gfH!%_X&-h6%Ka%z*QZ(k81^MR;btkA-q?q57MW#YbPf~Gc=`TA6b4T@(AbrzUd%|w1 z9w(qSCjZzA3315Dw<|;sY~`A;)qYuY#GwzVDF&KyW?C8@r}|D;eKqQ;Y%*7$R95*U z{oz46afQ9FIdBSLkN)0_FsdC~6UCPuJo4prEk$GNUZ;t-&-+S_2Q38|^bYb@Ypz&r zv2M<$%Iz4h#-a(MqTxCIyI#A(-yROKtNr{I%1v?`oN?M;{*Hcqy>+7CUmF|SF$Evy zy|27U`&hhdl{bARdy%zP29zRZmI5RvR$$PKf)1NKhigd>@Vxc=?jDk0rm6vX#W&=Q zc@KbX!o&F+_m;Yy$iUv7|EzV>cXx(|C)S~Z70dY(YlG2J;dK)V`U2+e$MMcy0Bfc8*Ahf*mCbc1G^!l5#0{k$Eel)@FYH1>@!oWyXx{?X0_h9J-?1FL zPTrlOfYDX|961nfI1KU>C>R4`ouR__&`VR(|K9T3em=kOfuSSiAtLQy?J|94gMN?Bek`@SfwPTooq@yf`9Y|O*{Ut z!Jt`5!vV8j^Z};>giRi2yR3h$Qs;hX+ai3;eY?8yG`64pws4oZ=Oc^{z*;22*>-aK z^Rd-lYE2yKJD2EpC*P1HjwvzxXR^ ztIu${y8V>^jmF{-J8^w4$V#fHRXh<8$dE`Urv56U@bjArgOhGAmc!PY8rGEsY%sY` z$o~k|;DkfxMBw_f;{#`DMR&u!0ozHevboI0{OpxC3vnX0yHai+g3tf1@1IDO)%?-2SGK61l%-zKJvcM2NjpLuFkJhAdhjNa0-~gj`H2rkOmS|a6l2Q0!^GMfu?aTU-Bc+b9D582(>(4Dg-* zsQK@6E{FvG9SU(4|L+^)Phi$JfXH}1}CPbSCIW+{frulfiXP~Yd{MC#hTorj@>}E3nasT zt&Z>|D7rGQm|pQpdjZ~0d)N~hCviyoaXRi(rhi=jOxX?K3yL-Gt_k0`wgZxls?YND@)#Fa!E64LC0HJvfEpS7 zura;L$T8F_J_T@t+(LhC;Ftb+hDPso#YI?ZtRkJNo?b&;T~Z5QmBSJ8(;%2>G9sp` zwmqp_aJf<~EGlX!rSWsJn*#t4-@nqTwmNA9$hWbr?}(o;v$Dp;#gRRCpi(2Wn*cux z00w1e7k$xg2xfZ-IGZ&tyD4+K!k{oF9k!DNss#iR=I=8RV){y-9 zlm4Ys&pL`X7D8C|?XbSyvx$W`enU{be2#&r0P3wR)c|hMi@U%wlvlk$tbfabT^=J| z94L<2%+xs9+uIA`ZoUUY0Ber)rEQ~3_;w?xre>oHXBB~Oea+Tyxrt?m3n6T68OE5q zH}7M?O8|YZnhzm+@KLP7Y61_#Z*)5_jMNLMAK1m;y7}A%F;J4LeLxt{mJ9gx=^Pa5 zg|jvdhVlBxX^5IaoqzUKKX6&EvR^_o){?H+vSUK{Y~p{^Ac^;qf01@-@n!tz+Tlzi zRCog2VG+D7$v=-+GJ$4a8EGdW+AIK&31q+R!7IU_C4kSUcd<3 z1;rb{=W`3N8wJmC`{y~nCQ#aIBW(eI8vva9s0+(RoQGaW-%$T?TV1f-3xreviLGx< zW>(HBiTwiU4Iv0$5gV=bep%yFgg|VJqcXZ7PXGq#9tuKUhBp&8liw}%iZvp@-53F_ zLaD4IjVG2j1L)r4zqd|e-}P6oc7<+Go~p2!0hj?i?SdYlbB6xF4`{&zF7+EcC$^4* zPM!!edz`=k$wvle+~^F}IuK!B%u2QqBCkFGA}_0|LX?*G=9^Jt&8NT!yoe;ZrQnOl zCrNNty}I>d_b3;ye9@9_2uOwEt9=m!<17Nj`z^5vyOZqsQ^2Ey?lq&oVwf91bb<(P z=U`|56ftOpFdO&&S*#fos5F;e@q=cCb_K{mR9#&iknvCb=ozr=c;JYG$lKj29f9@j z7zYINV?7acckGU3-q$~|%m=eV{YNk`4uoK;s#-IEAz;4Nzx)n9yY<5GpTK}S9^Q7< zS>dX<$;iws=nT^o@EZpJkEaX&Y)AfI*AzEEX8-Q`C-3e$1Jsuk+Ft`fw^Am|zeIbW zP|>yo_WZENa6rj+$^n=I6+)Fk>kIn~=aY7DIo!Q(>v*=-h1K5+__%3su0$%&usdmY zxx%9+z=(;9V`XL4p1D7P+f?{F<(Fpy^=xPLQPEq$Wy0xpv z?)y&~QML5+SXfzw9hL(#>%m=ro?37N3*SAX?yUDXy@K2TNdK?h_b~K%b+EPzTDbSx z`TDLwP5Z>X{wz%Y)3;*9*(&?iO)g=+|jgFXIf6U3;|MYeMd)+TTNOaYM| z_4OXL{=3T^CXsJ8*9X$ID{XXjbU3H+{=C3%Z}H_g9!`%a?Ngo=CIXB$n9xHTpme{d z0+Oot`uTocgB&IAQe`hiWCyV4B54uVCjWIN)ERGQ>QwRa1jUZ= z9|`0lBmk5^c?Dpm2Jsa9p-AiXE(aRQ*-U89tj$W^~x_p38lIJlMu z>Usbow^9tJ`1cA7A%clfP%`!sN`=Yu|9K~{-SBuXm-r#v?K_o}^)L`4Bc%N&87kIu z4GKYr2(hI0__Z3O_O(N||M>+X#rNgIuWNA4_c6b-)z)Ysz}E$ViR%5`GKyEfeQmuS zYs1po(?9!ITUQqZNB>!>-ig%Y{Z>{N-foa&F*n};JnKKY_-8)_nIab3C@$g$+GfX9;kBY_lHWmVPZ%}r4qyV*Z4^gAO7_D<_M3RtSY zp+Z?>2k^f@$-pwOT?S*N<02FRWGw#A7yd-TZ%!VNNRa(rvHv*$s2-wzn9w%@dlPJv zKRWuKF%TL2d-qJBkp@S||GrZTjFmk^$Xoj#WAGU+4tVzeF4moYXZ6QxHvRi^5RLr% zYQQ`;|DP}XF_HiO1N^p*2LBJ8U>2{2h2bQx%8Z#gg`xgT$hsARLgb^))rW#DIJ_NQ0Hr zP*T2~Yw!a2oVn~Vw8r4Mz=FPJ^gDv zJ?__c(tarG>$B>Z?cUkhSxL+F!0010V}SJl z$ifL}t?}x2*$$GMMF$5508udM?@n{?&bmhH0AhC{?8I;3X=D!7fchUme`tOA0a(+t zGnvK3#r5?wvgFfydwb*K#M)V!gEKSMRWjPziB=qwk%Le3wb_WHt@U+uWR)bdUl&|w%ZH7I-Teh|B!Kt>vI!z}_?l!Q70Yh~)T!a3wP*+z{9DHw z7?MYw0OFydVo-#RKpFDmwYoYt2gh5@Kmz0Hj~_n*xKT@sNYFF?DNqefe&-ANOq_t= z^~cTQCr>iV)Ahet2+ElV=V6J{JEIML8%H$}rss19h_j>9HTZZJuJDx|2!XpofxKvG zY2{*Jj{n)5d5&6=3k!(qGaDDz%IT$XtxmN=W>Hb^w|lvW^0T`@3P3u=Pv{*x5}i)X zU8^U!(cyr=Pp0w3Ye9O=6Hu(>;@UTLYVelKjp6gjQ`Ob=TKyFdSZsxc>94vW1c~&* zl4Fx8QBkcHQkX~C4sY`qjyc+_PLf}oh`;>f`2I>@gf9r2kdW|7L0bJP2)6;#SXkPd z&#wa%s1&u*VJ-_Tw>hR%%m(J>M>O<}_A+wPeW=9AcfKKiRS_Y-;kwH9sq*PjBDWYv)D2*F#(NtGI^BJjI~-z z103T3N*dsuIBs6hCGL-p4h)djtBPS-56#W7>Vh7I-vIt#BLV0ChztC_=1yi%1E z{cCh1;9{{M1E#sVx!EaSZw3$CxoMSDwI$PJ+@9DVa{P;;HJEL>UC;e*UI46A22T*M z37{f@RwV!GCwJlOHj^d#}~XMpHy2MlOO>L(WfjYFWHtL^UYer9cv zA*9nP^dM`pl%xFLh==_0BU4HG?)%~P9KCr^0*hH=qxZI+s$kCh%moUl*f&0$oSagu zVSzg?_cW@;zulQb$ObttpHL!@|qZVeIs_`Yo=MP4^6l$pJ z&2kzED^Xh<=|){N#mu^I6{>2G-~Rg`aiY}4>hBQV$0l<>NFP4@s?)BXH=89?<6Kz; zD9ncnbXd^cSI3}{1mp|#^?>9i%H>-gpZnN<66odMJOVB}g-%QbDn|j>6BPVa9hs>Q z_#+XI$g6T-W@HRzwyYOZ+tp&tufqcRxkv&B-FUEa`$8PCKh98-j37y>z~9VdsE!G8 zfoy}Bxs_E&5qy&7lA}Ur>zPZ{HBbokjFD!z236E-~eblMX>1+a?`5g_4X2k zM*2b!?OtEuF+k>z)3ynvDjc6YxZ*w@_-^Z)%4`3Ak<8j{z6m+J{jKJ+e3!yGZy4=2 zR|zsufltD;otN%t{ldDcy)^{lF&!YeQf-H4gHyw0!dsi0bOVG01d2Hv0=t#X7rI-K za518r-^C314?KJ0yho7Zh_D>pe6ZwAr2) zG+^Zp`;0&ZhOQpDVbgl^uAd-7lGmKVLrSOX39b6yvjcYG%oDY#cMq+Is(utD7k3(a zLcyq$)XS6gVN(kD-yavKxwv9rwGi>pXFFkhYIkkXO_Y~^;w>a^CU7#Td&liv_I>Q< z0g?+M#}v3&M;3_sCqzQ}h2}Yj`@!c=_=O~KQQ?nzXUG4~pU=RNgL-A^A>Pv}!ao7n zj}OomX)QP6yZ5Hi|2)93Mc5$UuF>5N|4&>Mc=zVRTi?qOUw$xy_)7`>Mnk~)C~pSD z6RWu9=9h+@Sy`C^{+?!4R(Xa&1=CTaBlzSsD}4j3&Jr1Ag4GkbQvwkX>H**sHITC)mfERoaC(z3wgSfQFTt-l^gUsv^h_6y=q7<|4`-V1x3KP-~!%{$F=>Fc)h$SXN$Wo>P) z`dt7KpcG$08m;0OHH!B79?Mm*{0HM;Qjz^ds$EV-Ccmgi=-uis05L7c(bAXUnBY?b zIr>E%z)k{0S^e}8nbN4(yf*(RcmJRwM_`8&b=Sj5XFZURZklV$F8)f2SjT@|fP+=pT`OXOP%0`1nZSurI$Or$er~|3pS|1MeZMH6tWWN+IY)pE(!lwKb=d|bgO$yl7`G$!8L)9sNf~TzMuPT99)I32@QBhH!7cY*Z zbi7g_7v_L=i6yA zv$(YLF$+K6mf-aQE8GP%=(7?Gx4W1KXU=gJ|AmlcG+ouD&M&LW3bY8jokV!Ez-efM zMcbe7>9xokv-r_(mLwUq<$xP@d>n5MK)}QbLZDUW;O>bfI7vm0k~2JyuehFItszPU zWc~A3GH|`GXr&6O&%0cK_0SMh1g$m}*5)s)LC3&VTJh@N;J&j|f^pEY5d@xR37cF3 z#hYZ}*^G<1npUjYVrl+oo-5j&v!k&cdz)p!lyHE%d& z{RT+9v9OSa76Y7c9$Ky8dmOR*@1eC!)L?4PX<`7wSIh9SF)pVQY%~D22WLH4EE9q8 zc}#DqA(?|JJ8I^h z0^tfB1~F-P`_{2C!E!1=zPk2zC;x!{IlXHCgGb_V>yz0veDwsnm-osLu_{N@roOVW zNW5hBI6#us-u`MJXOzR9rbq|CmNO#Y-1?e`hQ3gVd@w)UJbqM4IB|4CGr1@*+wfUk z(x+xNaNzmq%aA7&-he#A%lSGoB)h+d zdO^>*J}N}{;cuECc!5t}rl0mH&L59fg}1Z&0HvKhOmzkU0b3Qy_eCvczzn#l=twV>Z#aaq}rk)R+cE|(`b zqz{rkP1pKfUfw_517Qk@oe2Ml$5(TdZPL2HM(D7=C=RUiim=iH1&y4+Tw+FbZVA_S zQsgVRhd!@dXWsKhz^A35-hVKBF%!kR!cezkXuYM-B{LIK2c+T{AovDTHMt6=y1FpL zX}Y*!3PB{GCIL=;{}{}bh#w?eXwGug{cp5T{TPkMl!h}b`fs%{ zn{#I72moj+3P+kL=vtTOekVD-yGA4i(xzDwEig4T<%EOk>}x3)y;pPF{^@0POfQm> z;=)=Wf(0F z689l2JpBAwBm7)f?&R`RA99jy3(-_LVI&G3Hhp@pW5t2na_Gx+hYLtMjqGO>mXWnp zgJy$b6y#bz%$5(&LB49BsOUp&k4YIPKbc+rcL59sz*=35&Y$RO3p&}~-v^jU>0>s^ z)a}ehaN_4Isjrti4HBml+NC`$Aj5D%HrbxuzP@hYg@z{kUK%_>J|ijBPiNPDNzexp zQf+Uq&$@TXZqBn4G9)L$@xH)e8Z2=DS4VdV_z5FgkHo(K9qH|rZ=jdI=6m}YZUhLp z0NJ-VpCRy&iZnc!QD`_uQ6u^XP)HC90IguPnb8;#@@WA^%Oqdtd=pkX~%C!1Kw> zO6OeAS)n(;;EehpOKbmne=wE2%ru1i|JQ21W5SbZ#CoCWk zy*m+^)Kl&Sw;esg6qjyrkBcM431A%T)V~0+WY;!DOKusN z0x^!?Qj1unpNNm)w;D9Ny9Ja;!nHN9cKv4vHlpWRQz)CxOORYjQw)qk5ngS)@vP^a z?b7hw3mX!^}sjaC2Mpil#4~i+xMochvpWk&f zfvC#~oDzzq`$Nz`ub(x9h|OvQ`T0RpbWWMVmAeE#7x#HHnHs*mkF5f97B;r0r=2Ah zPEKk=pktGb>HVNI#cxcqW!!H|h#mZZ%58vy)LwXZ4@Amq$G-c{3jX%#H~3cK&6U@t zOW)2$-yUg}B+Rq&u({c%Zd!*W`~0hblQlsO-p3C*YH5nZj~)T`1xU02OmZ}*h5KkM zbMzctjcT5$(=mGHN?Cl6^wEq-+3OySCzJFF5^Ypbor-in^wVVBH1QG67WZJJol}na zpxV6k*rvkq8G*%S3+GJMkohvkX)E7g>t}DMj{1q{=Hb_T{v})_8~?XD?&F0%(BYe% z@ZmLGkV!Mt}ycusjQ57 z{tz;YsNE=3jf&#dav_;OwO`yiq5yR(XbVk2fB;sL1?X~%?2cJV<}GZ1kA}q2dx9(F ztq0I4^9ti1keg%$FVU}3iZ4Nu?+l;Y0Fd8ruG2J`^rWfn2p{rZ<}yyt%w(bitfD-J z3}14^+^fusC}%QZNVGO+Vh37^Gg;yT6g&72CNffCetwVhgB4Ko0?ZqbP2{A0?VNLt zhFk5&SNCqM7dSjl?aT!;pt<3{0DBQ6s(ScPe2@h9LCD|HC?Tl^NN*LDm4~eD1DrSS z+0rt*8~KxZOmd^Px2*?6P7hf3N1hY-6Zok;uD6JnfcyR&1nz59eQIW^T1(s~Nu?gzWuTBGVLarEp;6$^<396A1>q1YDLi3CjG%skuR zmA|8?^exLz1XFMyK%%=t{nOKm#D=UHVoI?f3Dpe{ctWQU;KH5LFt30v?V#C0T2tpK z1Z3z3(j}8hKXpPrd`#R-k+=Act&jV9@;18W>N3{flEuIox4d zam;R^9{15oMR!oWxX;rgA*%av+8PK0{|YPke&ZvN1!-YN0+09G1rn7FC~CAIc5p&6Zq1_nD+`elB7T_y>d3JUNyicb4=g7X3!8suC zgz?$gERQw{g4EL}k5OE|8l*DkcGgFBj|zCfa*&w_2bqH4Y|%u3^uZW!;Olj{q}eXQ zWV7h*6%e3zL4f7_J}Pk^wEqAs%P8BRsK#Dm6XDl@LJp|&yu7)@*iO{Lgw!RVRsxtC zAjhGcYg8scPK?zRr==;u)D@pJWVUVhGpq4&CEbg`dK1bwRgQ4Q&n5A2hVPA5P1fHQ zk%)USIV*re<8h6teC-DaLJ3$em=j)O_}y9|5vP6lzx89=(FWsXW@$DX@uZ}rU8f8{ zLU#onY;3}^RdNY3c}-XDmT1b}SfojHYU~~iwl3I-^PS5;!An)^it##~EZuEQv(x#! z6o*}ft^OFPwW5E#h~;wTtdjqsx~qc&fTHj|XG_Q;YWVpw#TcZNt*v`{x1hGR3RGX? z<4MjrZn!Perw2j27~8$}?6$NzICaH(Jv=EePrD6{MIU{mHi4|ZzU~Lnc=F*)(7q0+ zncXQg|7B9vX{0=z(F9sy@BvzlmVcg@o*JvjGXjiQzvmtk-k1h$$ZS@aq1z0lsWOm} zwr?WtmZSP*fEU;|#@kV*XcXFJ7+ZXEc=+!8V#uNT@kgWEzT#YIiBIGw*pb154->m#0~=T8I`3V6LOy{*$qbZt)Fz1n||va9P8W^n|2d**%Ih7jFi;`Ay#XbJF&;2VY6S}jh%reUe;fP{2If!t2Ke`m3gRp zM6pnoxkY53+@m6wvdrK#MU@Au^TtbPDRc)3T=LnLee!5!@F zl@x4Hy&t)RUg9C`;d!2n^bPOgH1O@9_rHmNAMHT^X>4r<8NlWDfaehmxr^it7bFMS z-pZ$I>jtt&NES2r6v($+Z##sM{zOG;nn<~K_g)h`;@uG&4H8zW*KwKq$p;<;bp4BW zQhLBM3d7~6>8(|x*%aqf!;x9$Omjl zqTrB!2sA|oD#c*E9;c~i|xq)-g) zO7KqJ2HJZZkB@Kv{xw*SrfiBHQBGu) z_~hx0(`hesu0G0(C9z=+MbOpmW&qL%IbB*6xLml-p9z3YLyxBddf*SXg1fifq198f zP`5*8TEnb4e$u;=GwK{qDyhXVvmmxK$JA6QFSjV=W)Wt_7YUaQ2o4H;>;?5ZAQ z4_;j#&hWGD&iXVM^aWK|YpO?h@q17sr<4|S*YbHBlY;X{TuA}_K~Z#}vy)z@LJ`un z$l+cq1OK_?$tJ7IuIDud{}XJNJJu23wSpRwOVBU~4_Y;LA(~!&;me=IY~1v|qaNTg z#tQO3w^k3A?;07K=%jy}|KOl~D@vtga$BXW1+`m7zNAzJS3@RE#ZEXmNgeO7TpRAG zyl|6t)3%ujyFouYT)laL5qIEwdWL-ULI0D=e1@9-Ox9{V2mRNu#q)7;m=EK-fh&7E zU6eyXQkJe!HC;W`z^ATy8m}krn$O+K=$w5OajCCc$jYsIViZTcA)#jP@Wwd1-xU)Y zH}qVFr6teeuvEUVB!jz%!9gj@sHavadHdvYhOk~taAx}iju%r9^|dE>a%VXzx%}SB zCe8QJTK2UhvHHoRq>B7)NYwOu2Nq=d@om;OPkF{Vm8gxyeITfqSXr)>G5%WdRtezAQPMU)^=9xm*^piLmQ# z+%4t;u0As8F%{#Eu(mC0>B#x&(LjFGaQ-Vw{(%EUG9AxnJ!2*w7s9OJ%lYZ&hWA+A zC2W(&f`>P~ZMy3UXZmH=Qnm5 zXX^<h=U+P#zo2X_ z%1m#n7EH0MIUmfQue>UoG~Io~!_G36ijCw$x5IpPNy}6^GrbpJ4c?fdsWk>ZScm zhdiU}ZL<&nf5_?c`U7pE%V(kHw8-h=oJZ!Q^v(t^GSI9@eyQAItDmFlfr|IGU?wqW z+{7Mkxey<8E`;7UQ|x+oR-6hwyhFRuz0Bf9K1PlK#z}CTFw&H4a(a$sOhR!4R`Te+ z9(|l{kWVFrM+drG9*=J;vV{dq3e}t(#pirvfC>?&WJ1uyUMDcU+k-!Rjn)> zn-3)v*CVD-mturUUdL2FH5fuqcGy@9d4E|;0K2$g_sY;-eeyhX%$9nyZ~m!OKZ&bR zEYX#zudg2Sxjx_(H8!GgxcFjXuz2%rMY`X&!qjoQd3s5y6rdhFpy+S1bU)=Q=6 z?badr>qTmz25xi9?VeFn!B@RM;8n9 zV{9vwFe-@Lb@ltKU(h~(8f1A9%Gc>Np*jK(%?+ClVd_-P$C5Q3zpPwLFja0F5Eog0 zDmKe>G?j+4`i@DggJuZy!x(0R>m+mlf}2{7C|tEV0oMQg&Vl_epcbD84Y zCAqgATXoP}ipY=SQD%nTO^M*TT5Ek6@{G@m*xkT0M)&w?F6^$MgP=w*=UNq zLhj6+F|)Pct*}dj7>-!X&>FswcvOF4u(`aN{z>_Ox~j|a(+s4bTN4cjx9Nl8q#R`U zE0Y>aTaVNQL_^@ga+T&y27F9g+P_K(`i$Q%am(ufyQOsdP1Fi*lx=(SCca(jX=lqa zTAm@^XBe&2={BicpLHR1rkzm@R60z3MOP**?J$_+wXs^`c^^Mp!{=XW+PiP!Rwx*m zkBABsF1FVb4Ag&h>WOvL)y+g#zmd#3$e&sXeo#b3@ndG{v=$OWOw{wpQQ%V_`OlU0 zuT`&hf9-J>TVmLRVk(>nnx^`XsL+lhFBT2_GFal4e_B>1YZ1=MjGbl}Y>^&`1+>9UY5?XOT zQVLG*O%PW zzNDk~$JWyGe~{g@m%~{^<}B?(Qg9_Q#xjT>*QA!d@0Ziu?y}XXV7~S78M6)xx=Qy2 zE75aHLjrMYk@mfp(gka6{K*tJ`ij~E`_s?yk3K0g4bno=V)Nz6vxO|1CW+i8@}MDg zzNwZ&X+m*D&h6Q#Y!WHNTgos?j^Lj3laOWl*6SC+`w+X{JA#|R!tHLw z@&x(MI{grKyf2D1bYW=km~|e9?L5iCFjjHz;StEe?D`mL#!x;eNl%IVOZG(+zH3{f zbbzwq%j6OhWarJNg;GniM~5XpE+xpnb4F`XOddSWU}+`{8kE6ELdkl?nPmC6E~ zkNVK=RT0P8?y-2|7j@mcLlxz5rSaKoG>*LP+rtAYbBu{~_Gre33;pMC0kQ|=Jhto) z(IhwdWh8^Yeb(`pV)8)uB2h=L%(=tF-fNe#pV7<3x>$_It21-ecAJWQay8li0pXJg zkGtDSU6*!ZKZBey8)?VLn<*ve*P_c?bovL`lXx>?LU%t2J}>L(qIhF2ziAVnuky)X-m8*230R7OTzt*Zb*XX2OO^W zj4ZRfI)Z?_+{|In1T{8xfvSM!l5d=1zUY0=0JQ}}bEO%@@G`YyPA3(&49yaQ^OpqF z?@5w&FQxO>s0y+Mm4_(ako$Zzf1FRV;XV5HEMYh*Zcsg%Ek*1#pDbE9Q#@GX+iy%rV!eF{P)8?hKL^i=VX1dT2AcFb zUA$}(tfdxp`t*^N0h*=j#X>d7q|}S?{jD_Dmrr)9m+Vw_G@G5ai8Hh)w)Z))P+#zT z`Sd6Y`K~%%{B_!G_Mu{_`HB~UlsT9J7^9U2ru*cN872ZF&tq@%E{L3+M^J6|OZeil z%F;E7GF^q3(K-xwz}`g=A0DJVNlLr>%n~Jbv}+D6!tqHD8nMHuo5xq{ddbIj#@)qQ zg1190>~Z*b%mh5wpJ!y1So%uH-M@I3gmTnw5g3)ag)HD{W4pJ$KM}>t?RvC#`28z- zTrr`bt7qYQ$pW=f%_%Z{&&9)mphGV9K3YSx=q_4$IldUmFf)eF1kt*QS%JaO&Nc#D zyD5#y2guT_v9(AWo;97DIY!SShZBN=_?++tRM|MVmOLxqPuB~EmA+VG?>dSFTRP99 za?E`1a@_iW>Cl`(ruHe|VO=zia7iL{_R)jadVREkhn%EN7gYY?ZyYR`s+wQB83?qk z85wT!s`mDbis{UHkbGuuQGKv7t*f6pUv0~~UO&+{N8@1Odt2GhKs|Y^i?OQks zucbl;8BsANmFrF^_UY&~*D?(LX_(}PC+*$|-zc4#m|K+%0v>J2I`4taZ7ZDn{f=7E z?Q%_A9J)Mt#eHvQ|D3+>9AaKpN#u)%vm|)rwt7+hvse9S8$FhIlZmGXX?1QxXxlxP z#2YFtEn7X8XX`^TExSFJll`*-of5kP1A-eIJQ=(peQO4-sKbaWXKX0Mw2`edJHn<> z_wUp_7BTF-TVk#wnDtD>Z!zO0$^V(;n{ld(6vdo#3B&bp!F#JO0yaJdOY~{swR!IN zJj*5+XNn-hkDr)Z;uRqmZCOn>o4w~gVr4-|!#OES%%-7eEH&;~CHF}AXU49UX@2K8 zzJ4Fp$41l1O*)3XCmEcpV(wXPO;~;p^7X^V9r?n{e}x=LmC)`>KMU*HFqzpYlZz=Y zo^@^R9NL}@&RuS@YWti`8@FeHUq?1vIO^f~%Ovso)*Z{{$FJvihvqox=LJ569;I#> zCp(b(shEtnxJQ!awvr2pzTb`tdWPkGV}hS(m-*Z$itk1 zS+=)#yQb%ObUCBfeTOMH11>(rVlpmYR3F`He24p!q6-%j^KB{Jb~4C)lKW~ z>~Xa?e%q8M@p%}xxb)rO!F?^3?{Z2t?LMi4&xn5AC;7>*Gw!&H>PR6#ltan>%*wU5 z!%{uzmWN>~haM^oO3QoHD4bxyd$9}6_PNHsX_jms6!*Rs9LX`Zzu8mfLlYfKHD&3K z8`F=T^{J^|CBr6k!lU)a?VHSXvzLZhy=$m$jw7<-ViqB^AZzkV2(^ft=AD)Ni0;f{ zM!_2UI`~zMY*Bc@7NtIx?&<_8*~bdEpp4CVqst_;ER;i@wQR=V0=~T(j(?6vVXC|g z!vvWHt*eLJ@S)}|OpI6h_7CLeCI(Xr{A=71YkFa%78t==NZGf(I^!EoViXw??Vfah z?Y29*WwMauEBua`@L=`%S&ib-niVpqJ$1)~c)0t~k(%r9Cr&lo81awh-G>-4TIz;w zsR`qeN_XPr#TR*!Q%od!CB_|bw$EgL`n8XwxFbT z5^)A>A`4nG0=EtJpp*DZ-lyS8<=!n4N(OBt;+x3{pDW%=3@pM2p7Yw96{ggqz7tQ( zWBWFwYHwGI8yTO%jKR{YtdwRitNl`jYst%jYGtAqLTW)m7v)^??#{2?UglOGbbE#| zZ*PWMV~;MaPmS#c3+y#2m6w{3Ef$(4j8YdUJ&QFkk#zT^!IysP@G%c``t(Ie`=3?E z9;tUUFQU5Wywvj_dYSg((V9ZUw68~pCv{2-f8z*)2T}kR>3p~~jquG6c*rV6E;!RI zDwjppa2gG!P!qY_wZ(b-=GSylu#T!|Q82}REelwZ2IFxjlF9vQmLP`tnj<+k-3Qd} z;aej3X0hnECY?6STZ%BF`wR(PZ|N-i*~Xh+HDJyt_PZHOuhfn63{XT0%m(`r9O-d> z);kkr$1tLShu(%i2=+jWq0~fvBz+)xzWdIj(Td!0sQKp^xr0iS#L~tq{7;E)(ev=* zjUijB2S4XD**==uhf8h>c`wYqU3o2e-ybC+nN{X)QUQ52HB#Q*yByWqfzG419MpCX4SffA}yqmheqh_tj!e)d;dWn`^4)DwPZ-R*Q>Vr!j*mwkl1c z?`+HXCp~t2oTtxI_NcYgq-4&2+3r2HYZ~B>z0W(U;^zT#5#+_KAx#R<#Z}-)*L((Z z$J##A!4)U86THasEDDGfWEYZx40GW67`lleF)5gHvZ7!guw};Al7_ms@UOcM`{=OG zD0Uosw`XRHV(5Y%y-rkk+wS9124kW=ZPlbsPm^J`Ov~=$)7{mqEy$7r6=j+)k~ISE z$|sWeJy`P?_7N*?EK$5R>hheVcK)h`B`rTt66( zom3MoiulrO2)1mHK$dt0dXAc1@?CJtC3&gYchvZMVO2T(em0Vw{ENe9{n3ZRRU3_; z>f0$Z?s9gcAaCD4;k-|3z+CP@SQVt9aw*pA|DH6Bpx03AsefLAat1 zcCDfwN#v!-v(VduBEcR^$7W>Px`A1nalHdH0co&AU-UOMSG^eUUeV$7wXBv$cw2hM zis!>QKi_Xfw+Y6oRg-k73;uL~9CbNTd3G)YMPMsXBG3@^$Kr&V_7_=ojA5VZ-@3dNdx1gs z-soHBOOj6oA$LSX)TxlkabKMH_XN_2+z(>-5=a`>;LhE2UX*e>C#iww`%UC(g2vsx znG2fKsO%kQw@+x{Jm?3*il(vn`>5edYS%+hnaGDs$%d5Hr;UqGQn$QLFh68=TDs@U zxZupgJcgI zICaGh8?+3?$tY^&k+9A%&5hJldZ}nkDR^eA@Xpw?G^UaaseW5 z1wB(o!*Jz;5v%<@b5% zNhxjEEM#H`w->t{BW1D_*>-m0)&e|423xlj&jR}jd8xvv>hdjR<}N<#ywdGQ8zhrX z5liAHj@c*m#d@hmTg#8jZ`XZYQ(V8)e&%N!u&XlRx>jYPJCm^O=h8&$tzTp-Bz2z0 zwSVggArrn$*SA*RhrGejFQtWIH2sR#r$P*xFDt7^7sM_I!9MM~3%+t;b$`BtWw|zUD%+-hJi>|KJ z3if+AUJU3ASQ%vYBfpxgrG-~eRhJx`Tx&V?Hop$$x|_iHynfVDtXqIL}? z4Hm*_;^`}rW&2j`|B>d=^WAXFwC}B{PqQN2t2ysChwp6(X}=Bh$ZG`v9onDVW1xIc zXDjg>Yj34;(?b~f8m(12B*)hJ4m*za5alz-VXBLFkgUG-@_36TdTmJarFe=EKQgY? zWYQ0#uQ~51KW3;9NE)^0wBnh&E?V=*SiSgC>s5?i5#k*13|e-(%s!HSE7GfPBK!W8 ziW*9+5WD8m+feSCg|S(qK1LtglN`BsIJ-G6@gb_6cwZpW@4Ad#Cvu;$@^6%>tp)$<)u1wMwqf@UT3{(lbhTX&BW+>kOMCGU$2}H1xUe+aBKe(Ug6}<~h%;XFF}I z$9Sdww!}7PHRuxF!=xmIxf@xP!4FLIm$8^ z3t4>4@l;GuaE5bK-FrBVS%pG9&T*sh_45T})y;@mf_DNs}w1;*IgC>q`$w_xt)v0o;5L6RZa*D$TZwg!VghZFTYT5Y>P(NMNa!bF)cQ&hBsqEbs@Ro=5 z{{3S7Ard8^u=~rHv5ZB96A>=z936;R35!#Np+Y*im#jX?Q-C?jpOV+!6c7CA42 zm|JlQ7v;JJ zdZpe6`gDiz$UkaiXm{7sh};YvwR}6q3wS~f&YCQuq%<<=2O3%#Elj5Z zFmeKzrgXR@F=cYukKiOwkA_xWo)L}dtJ`GHDAtt}!?7@GUXfGuO=$HnwA6G{mf6VQ z6sVhiyK8~TWdoO;}64Ve7=~PUKg!u_ZQ`y=?B62a8LJ^ktPa?w>^^91oEOKH| z)LwA+gLNzD$t1T)@6R+8b}bZg3Dg)2bQ}j2U$Kx*$zT7trfGE@nWdwGnvtPf0ja6m zgQPT_CVdQbjRA_j+cEaWn_N2Jn%lhD0{i?5pphsjx?&^kM-mH@DZL1xQBbO~PJV`{ zIYOqXAk+Gvy26Y3(S&~EoQZ8*RW0mx;#GNB8RWWV?HDctn3V%PlvI?2 z+!|vhO6m;%@;6jO;G$c(D+jm~YEl=9H#g2ym-$(DjpcI~MVpmnsY8%7|AwTGrP*Ml zF{fk!OpZ9;j=j&0?q2}S&DS3Z(pLe<_+@{Ed@yIGX$Zc_-(7M@i3~0$kvJMR$SfxH z^Pr0?sEub|*OgJW_55{mQEn}$-0NU<@Ul+(k{pbP6iu#wVl8Bn>qzg3s&?cvGaGHi zD=K@(Y*xZl@pCa7Z=WxOnuC?*Xz6frUWb>f=%_L;r#s*#STLyumc{^gGn*h)7_J89 z#yG9A6x4h+~)G} zC|n4!L|nkPx)?}If9Qj6r_8ZJ)KO}mtg~XYyc&ZM)Z;Ssdf#j$8j~st2Z@)m(o&02 zD5l5sU{yb1r?h^sZXs|5Jj9GD{U*3Q;qKC-tY&1%NaTTC;56S36~DvEV9wM{z)uWY zdSJL@UYRx$u-=RD(3njsVEP>+WNo=N8HS3X1HMe$gp4Jx*F_w={3?M1OK;Q&o%cqm zx*T@vhv5uO8Ih_FX-D1DPqKi@&UTVUgoa{PyB zg$5$zZvug5vpnc0Nr~r?rX7p)A$@^HGgrt6>xqD42qKsngd=t2l)VP$^V)Z1`4omx za=RR{cX!XzbFUvIFi8bKe8xlHRwr+B(BWuRdaDt)M~@H?;~^m?6{ZPVc`h{%V8Z&mRv!4zbaaJkls-`(1K zxAt}H?qU1;=iW2MCHxEEH$iEnnT=mcuiC=}8v*mE4$-)7@z{ky6{U;74KA*oeKM zM5@&(b`zHtj@_+2OJ%oeOsAG$-^);)gLFGo5mfnV)9?dQcaR-^)*UR;H}R%qdEy<( z-|+M)aaH1PNykDL?&K5Zx^OKH*-L#D_-HYWyY#)XFq#sE4KNEK?8&Z1H&E%~I1MFYpT-mOzfJt1 z(;IU!vsDxoej5KW?=h)=$%g)d|NQ@1*Lh^r^&8?uGOH_(;aHFx*QvAhGKYXo^8Vm} z3u94Zk(<>qs}}VWR^ACSqcWyT^4)1r`D+=^vPNd7dLvu%`JJ&+r^JWP`my@ z9#fxA&&9@YYiZnN*9DuX%W0-zXt0@&XYcY$N;eYL-gF6EWY4_KzP_lWSvja=;S7XL5uMKz$Z|CfB} z;q5P-#pN$hSOuRxI?Zj{mD44*1mxPK&6br6EEx_$^QH29&NC<9_ZHxAIX5gCh3E-- z0f((Cw%IL*7uc1EfAuDlVbR)P3ZAJ12YShHa1W;gE7!TOsFBSYajMsMJ%`w97-zTmxK-c>AdUFWRPZ ziFG^zn4Ny84P^a&oS+3o9BFneGWW0HcI8&=R_-Xi$E>Cu@Yt%_qgi0(D8U}&7Oa}# zuKjc5o(jt}p83S>UI+a#Z;`s=XLgd;%Ft7^I1|+9TDYH#tMW$ia9!?!jj?2Ip}ZD{ z-EOfr791RPlPlW3FbXu-4kMNdXW!fhf&M1GphbRKlR}EI3f^p?_mP1Se1fEADargw zqog)juuyY8w44DSy_H#B$#Ru--J9TT5aF`wvdWE|aqd5`^i*T*;z4L^D$4BII)Nw* z7Bg8j(rHovH16C{oY$z*yl4>Ilj5Dvi8yv>G3`H)lQO_~Eg>%Kf7#L7oR`aTs;h~~ z5PhM|pvv7urME0NekF8NavB}L6hcbe%I~nft4VLba_o~J?=HQv&WoD3f5j$c=+tqc zo&^?RsLoEQQw-YzO_D+Apo(C{UW?%DRj!65eeDK^!iqA2(&VKbT@e;{S4;7G;?&;6xvpuPmhMv}WYN*MD%VhaiI&%m_ z1beelP9ANpI!dkpbXbAGTlcpUCf4^<|7vHdy}XKwM8vFqN+o3etA@%X-$t?ms-&X6 z4r}Js(V&vP1}oMXn9Rn1sGBerS0db_{S}z3!ABA#mT@@D-PKHAFimfIj8C>=g=-bDo?vj zeGb+8wECRN?1-gpamcNTf@dXoqCov97{BXc5dV&PY*1jpu@WfngJrfVF0hTl@L{P>hvzo!O zwUbed)G)8drA}BEm0K?|yFy?XeW#!Pjo2`j8dP50-%Jf<6e(U_q+f1vTlG#M*t+%| zjxJ0wFU8?xuN&UyGS1(uiT4EtaL+i17JkalgEVpEtZEn22qz-C5gp3+9bYHxA zgrdo%;y4W!odBW|OCC*J^c4)G1X%Ko2dd|;_P_A|G5vq?|FLkev+(l5K>qjkzikIB zwuTi zQ_vE5fN{VaDhl()a6O`~h4b65>5Gla@9*1}SDYNaUVLw>cM2)S=3qZ6go!4KEhdx? zMHIptC*u}AUXP1-3Bz~u=P$F9M;8xw@!~Zxv9h-W@l+OsHet`(crmfxr?2Gh05ZAH z{JTD$9xb}FJ3YC2q_who)O=qLkHfaPC#7!-aa3HqxHVrc{{UezaLAF zJ`Z^Lml|e-?}PWK0%j9#^1ry>q#Tq_C3H~Db;#I8#Yns;JA8e)c|Cl*g1ifJOk|WI ziH$y7zJUO6BZ_1;Dc$d2KmL442`ieKYw=fFC#T#_!VKt{pI(_n$UEejLJmXJLiS!qh=5HBJTkjm{J zT6hqWO*&ht1|gfrJ62I24yxcg!CntO7J*D9y4>4qF8r+hSlwg4|3LKS{KP1>h2ZVX z!@Y*%1`yC&FBL|vai0PSFFA1ISq#9o5hg#a23lHT-|X87^wd}_RuO}wm#U;ASA+bB z;yd4?^2_?RrRz*@9vP+!pNndoR2h(vt+@s64%*2UMAlJfHkBD#Qdh)MH7cVrXgJQu zolZV^xDU!Hz@<()^NEQ3E3#UsV&rnK2Z2+NwlT8ordi-NRj@r-O#IuRK3nKH#|_R8 z>v9LhIrc`$NhzO#eP;UDcNUQfWw$h863NU7RrWUq6afzg2vxO{krO)zq+oyVfa{A> z4y(W41f`4t#jKBTdfzeR!2-8?5mCC`pqkR7G_u7+MN%oKY#Ca?c;56+yui@t(<3u) zmawbs4TUj|hU`~W=2@S6ysEoZw9BH5!~5r=mA~Wk;Rl~K@%nk;`T=G76dIYYFK;wY z=F(g^>C039NNQN0+T;TXy`Gc0ZE}oKC1?l5LP>*AEKVsZGkOWj;=CG?c=Y}FdgAI& zAM*Lr*V7vDb>scF%JS+6|;i?jcJJ_NHuRFlb>*WE9N$}|plwL2t zJ9pT$tgf;-0U=cu2JPE6>>;(3rLDZpp_D}r?J1cl9qbX6>03nx>-2QM*g96!ZbE9i zIBtw$1*k?}6#xTR;3rau4WH;}&?DSmEHI>lCB(u}7oc@Ouy}}|=waegJ0c%|^`-JX zbqM+}!T^EW5Y1&4_I06G%A1thiiYBt*xJ%3pWc*X7lMgd&j`;T!Y^NJv0cwB6sL}Mge1$H_bTu0iwRd}TSAZNme@hd?dq1_Q#^i4t<4Qmm+ zPmz#H0PHQo_Or|TijTS+XF>_u6Wemb-A)S1Jt~Ai;6U;FlOKGa4>n20j%??iPHHQT zsl?IQnK=I=ccIVU$+0wZ_@64qaT9)KMaD^$aM)5OLzGV0pVV$0?ID?W72( zw-@B%E74pL^t~gB=OhweENJ(I#o0JFe?#dWUJ?)2zJ4i`oA$Y2P3D)=XM2AwYMrw# z**{c+*NID@^iwc^{y7a!r~K! z_a33WH^Uy1D2Dvu6V^N1C;xjWU5ZHO8t!A&hYvM-tau=W)=0AB76swc6+&tRqM9C-%ex>L4A|H}u0)?Ub>bxDdR zeOUss_FQxxS5jDukX3!r?9fn@MDz~Uk8A7^#6;%u{;}I{*pI7C!0?C`@lw;+8}Wio z86gO!-hH*s53j52Z^?mmv`luy-mrRf`d0^;rbuxIp}pw$nO_B(ywRtn2ESHnvV$j> zU;1-gsQgJUICDkXAF!NR~c2_;mxCt+yG+3H{!Cjo`E;!BH+ znrrS?_rFzszpsswbMCfDBBz(Dol87sS!>ur1f>Y(sJu%Rf&EJns~rlyfX^x?{{ zjLc`C4TsCDJQ-4giP(U_^BrX$_AG0~={xd1AIkab>Q;ZwmtS{QYar%B2qA%FI8YN& zNwssvrP^eB5|6(1h`h-W`O7>k`?3dmKIqlrV@2ul64FwJ5kq%g9E~uaecUrTt0%w) zbpfc(gx&IGi97x7{O9{pMeT6umvz*DFa-!h)Hn@qmA{rN3y`Z*0D>PPPV}7+&Dg$NIAqYB_X&JwfsYpFh!BiH*7)AB$ z(gGNzw9KV~x*8{{e~dIoJCKPOrFHPKZok1smx`VA&djjYW2A; zEvJMm6*SP!kmE#~v?z_BjnquFi;za3=s2e3{1zts5<5r|g`$oT)pRrM->oGz$Cm7! zvhM}rLzfD+D;8}Q=L+(C6pI+ipAxhQsKStREi$lZpB7HRa?%6sk*Rg-;~VS#!m^^u zEJ)VlTz#@>KBs}F(V`t*_UBk5RShvo7(u&QE*GNikidu#Rx-1#5(<}~R^v>c5f<8j zDq`5^3@wk;eU_@%&-cZ;AKQqc**G!zY2Hp!331gNqlkcNG*wAwP!4*t3rVdwBT3&t z*7qlw9RF#Apy=iXRAFjTUL;ZN6h{ATuqo-#|7E<11q>kZ?&xxX$Vv{ zIW-0(1b!=zos~kBq(O_Ob&1YI8(4ub$F~mBGfQpQDRbjACfv5g9p%dmj_~J*f=bV< zeDlsy_E^K4G+u8&a2-|>m8Vt)=gp>xa zQLH=5MKo>b)VBtUg0^;(|1OPw8zna(D`sp8WQ^5@5F)b!5bgRIl=2H_4&f4A}#!vhO0kV3692%sJBijcs!74Z;k z5v)NhVM|ym&N?U(jsKisb6X>8s|YPvnG;<&HZ76B!ltki3W@EqTF7>#g}lxWFUSM& z6P+Q3(qu&AFZL^${#d|kx-476+l62WGG6Ws)VMYS{9`xLSjXQRwP+=RFbEP+@hH2; z|GKH^uVGs$>tPS!f@6Yj(-!3!tEy#H&mI9Vw(;1?gRrBHn7C5+V4i#)hsgjqU38t< z_sa6dG6TX+Dj1*#IqHw%M%&;=q-Sr&&kkH98H2$L#UCuI64>0{fmNT_$PQF@?>Ge3 zhX1s=N$<#GD!u5bS@)=ch3gKy`EJB?4GC+%L;OnZ4d!g!+vK6mt8(9JIL5hF9>leKh)*&2zr>rxgr$aJ=|3%8b8Gpf7q97INMGnEUmT%JG<(n;v|nk>x>KEuIUZ8)@mq%QtE0s zE-!adfOi6|6&~XThod%5(UfdWF4^p;&7m|OLYD)`e)?qa#n|leukdiG!Wtr3`b5sda+f6s^i>gCcJY1cv=&P*tx%| zGHzV}VK`KepvPo{pxMxTU;}#*KlUzPt)pY<9W81sy=BHSBX|pW&@q@QGLCor5SM|f z7~wPPB#Kb!qu62~_9kgVCIe3v)2`xZl)Ulw>EI*f+B6q$i@gQ)X|!Y21dg^+=|H@5 z!y@Xc#geQ2JdV+tb3!;TD;dw9qLWG0W>zt^vdl`;BQ+xYh`q3|TE@R#X{9BqZNW|6XvchX@B0#Qdkiw@X=5r>)X>m+ zAPJpj0tJ5Ifcj;tE7cB8{=_e?xe%7+JiZEG-Q7q_Mw=6F3H`>Y`5)Y|&*ttkuAtjj z8KM1$f*6yxGCt7f*<8$IEG1nb?m1D>Mrqo+7b>Nz2Y)ejJslZQCc7cAU+gwrb6VP)qm9qB3Hi;8FV zF?i|9z@Q}`K9X{TiaVe$qSSM+--}~I`dDAwxf`|$SP@l}-OTGKm>TQY5dYXtQCYKw zHCH9KS8yTLz`L|XW8Ed(7zPHU(pn8PWuf3gEUkIIJQzbK&=^#jQ$;U2>sMdiIU<*v z@W)=1g8XYL7)32ZuGVq<2@V$L_RE$#66&g|$s*o04F1x3U)!Sz@NLp7b9!M04hcUtJ;)&{hHmv6sO?9HLk^eedb4qW2j2 z4?k?|o>_8OTuOl3V(t>iJ~kg55q5v|h17{V(AYM>b_8=UVK`bu9>%n7gr7hZ#uWD{ zkOlN_04O$!JCf>pq)Q;HpXU{=Jv)+f!X0pJkH!#wLG63Qs1HMfWp4&(@tU@@4Yd+WqYqdQ`#@Y zmXO3PPNl57sGH9XLkPV*0x`W0&4|84fu1^9^eDiga(&Id>o#$Nqjmah` zl#~dB&c*jz_XV{$w&*0oF#-zcDh&onSihPr2LCs?qyda&I4xkklqaCIyAgSyYtQ5H zXnhZS_)O#_2@ww`@{YW=>v&jYSxD2db1m4-1S`XyM%DuL2pBG!Pj*c>PVgIH#T*@hwJU zjdKXMtQ}LWQkfN4pv$cU(#>d~L@`PWzZX zlmcfsUMjgQLqX!422Sgv9&Y=mQ+93%Zgol*$D`r*NDrb{&NtA;R+4Ntk8~xJW$kRt zuLTB=%`aN2O)7-lt^UrLK4EI0KMIg)_nV<4<5a~IubWO4O@H*`DqEwC;V~NN(Mg-Q zIKwvmMklSf=QDZcvvRvioY3e9^RM_RtG&ODs(hC(^?=u6?fO}Su1iI=N@!|S+%@3N;zPALH=o?s$3vf>o8eM2)Ba$1qqp_( zcz?h!c7I&217q9F?uYjBdFZV4b9)d_-st9`1HS*Dmghg8#&1vIGETt z;WII?{ulLcVq^TDoB(EKmj68nb{1MDrvCHi1_w*L{tFVO!tx8Q#=6AT=` zDA@lS3PuJdTDIS#{~uGq!p`tNn+o>-5e3`-9t9%P9 zze6EvZsla+KqqQt;AA3fV)WaNMkj4zW9npv&p^+?@}GhKy@;cgh}ByEp9}}?;x@8{ zUlFGgsnkNva$S~MOl+YZM~VXFxVVhQQzCfssrp{;D+|1tH}&{}^ru>VRI0>!3dL+R*CJxVW^}|eehu4<`dR8y> z8U|U#BEKOH(Qs-Izab90xjfXMCxb3`gBsyKf#0T)Xazrbd$W~#0+6c*fv*1vaX?hs ztBTj#9y;ML6%?i!eyA5(15_*O`o8IJW|?}iYs1%4YcW?P1e#r}kd8=!`Uv?|bFu;4 zAK#`Ox-AkXtr3f{Owtp9soeiWv)#HfWG9{xQcsf7RIFh}S{zPLAB#w@Wc^zlcIn;S znUh*dymHy4QJCi(&t$HglGU{d4kkx+t#95zHP1;bW2#{AZVT}9E3>qV?oyTD%3kQA0%(9 zLbQ;^fYwhrIXH!0S?2aAZAYJg;ixEZ?J(0)EN&C7)2x9Pd7M{nkaqJ@mcttkJ=DLx z;z3amOEKd6N6KlZTcm=kRp`+!f!qCBx7DZl@OXEcD)D?4dHgq*_D2_c++50W0zbeh%5>jhR@5olYf%Z+C(usydfvbSO4wq1BVcAELvo5yK4rX`Fuf(HFo*no(IzdM-7xXmD3lm< zFZ)ho@u1cW?;yrrgFnGFC{SmA0RIhT*3MQ8I|?My@%p}vW97BIj$-I_A^TDeuM#p% zYD6+9F71m+?{E(sIj5yl1J`@L>mNpn(fe|Yt1UN~^UACd53*l;UQt(T<^?N^QvrF@ zsMPl_o2Mk&?FML!W3V^L*bJb~V;uVAjv79{pxqOm@PJn?W%Fo|Rg-6i^gxfsh<*{T^r-d+1#{_wumRN8ibR&pU zGs6i=U#rrmkq*)V`f2S5x%C1D1`Iqo(vI^2=iBG2)OuC_9K0BId4YmnIC6Nx`Rh|V zb9Mdzk6!+f5^ePQbET@+{tY_kuaSCFWp*_G1&uT$QR9&;|dH2$-e9PkH;2033 zn|Lxcu}_Xt7v58t8fc`6*syN!>e?996KAZV=>YTy{x~n!fbz%QR12wXJ{j_DKI7sT z^c}b$@dF3C$I=?_2$7%)K2`M$*4H=A&pr}26FFVKnuOgemvjS}(A8|2H<$u*`;Hc} z-bu-;s&DI{X~>sX7#vL&IXD_>5)7JH^KF{bN3k=c?Y5VhaFSXIqgi-sE8Cvt6zM3L zX#ybEir{D}B}3z>()H1ipcw&BT!54I5cw<%3PN){jxCyBQ!Kb_9UqIczMoCbe4`I(` z#i_G>lF6I?fouOuvG(O~i9Bygxl^wNmZp(g8(rNg3zL6M`^w-i<1c58hA*rOcV6F} zF46Pj$(i$ef)Tor{sdEV5U7ESRQL)er;PXn%Gs<0Nv2|?a~F&E$t*1(m_w{sIG%s- zDsm@XvE=tTH3~=*Z5^NEd*Nh)h+9a4Cn~U?Kf-v|j6ckrTol9j+w2dp;6b1!)mlU- zx2O=FR3NfCE@XudTz`&B61zxabDX z3G$}UCh1g5b~%BQOsdmTKu&~3Txb|{`;t=jSbhV|KS5Gu1(kTBD9Rbv=x3a7@K@jz z;F}qc`ao%@r^8h=-I`F<;2fv3f+^27|E9z^goRmv&bos_)v1Wd3P#4XAzIOfC=7Po zK=9SU&M63-k^4a@YT}U1Xdu^7$zAb-Fqt}v4&9SUZ(yq&pj9whGpXZHj&U2C&yV>w zHFf7o1?KbCTF{>n0ioAsefMC_TsSiDw)0~t_$4*CtO=$tBntmgj3<|fA)gTZtJ)!Y z(P9ltsxS}-IVcy@G2ykKc5k$t`0aQ$mL|+FACC`blyHtnvf|3%LFqU7X6zF^YH+M! zewH$3P^N~-U78<4fIuz6U+$hekU}=*113k}iH%fs+@@n0fRG4jB+31 zBo$Fh!0DW3;K3)1@E}0WV?1iOzEXh=>xxqX*34{CyxJ}Ym(+P-JKot4N^ZzIA1;rq8Q#wF-our^pyjjE$qjk?-5k69^$9| zZi!nHV=hd*g7S$rgJ~gGG!BYq$5Uy~<;=>tSUTAlE*Gjtb;ohnz8`4wC1ktzxuJ%>ldA<#`|g7D4K?TJV$v zqq*~pdax0SLztW#Tl9^k{_>Vv-%W8e`;&VvVZlqCn1vJ3)!iT?fujwm&f?Tu9KEnY zD0MXPlF|V|(@B|f{GK{6Q}@CX<2}%aM4`L~fL7exIqS9AIOir8G|Lp7cS;^9lqKZp zRykl;#8g4CI+StYjUwI{}53ZSnIj`X805thsc7z{hEa*eTBKDf@OvNGpyb+f;D|=3*A3a1bW|@g{$f3*f?0xA=|Nf0l8piv&xaL-5HPVR(%d z{>=8}!vJvyzYN1_Y!RjmJIaFJ59JvrOaN*LHi!@bup!OXC_qv@%7ATZ8#HVWl2zZh zBN?b4_|%41pRdfeaAX0H2-1#|iH&H3?g}g23l`BxmbZy(k)@x^y3azhV-p~urFb0x zct+Dyt|_{7SRw3uU$r{NU$U7U)EY~SmiG~RK*MU2T~R6MQ+o#R-iT$WeD(?8nwO0& z=kaxkI3=2l=M%g7tpC_d1P)h>%EPKnJn0&TU$QYqwCMmlS{f-gt&9XQ*Cm&@h*94xDpwGu|McTS)PnqJE+7`y-tEs#yhqc<>4a))ESc056YI( znw)u428uD-1-Xp-O4d)4@u9JG7c^>#HsZLZ=G^6 z>#Zo@L|DlSAX&_1nq&w?LIs?XD06q^*?|NoRYma*7ak&vwj{Vxpz=GtDti25Ole@L z0Imyi8?-stcX=TRP7k{}rdxeX4-BG8Q<{hE>ab$2G$K<(@?B59U9a^SDAv zE08H(8({KxA#JNT^*R~Ggjhg8{{=h+L+|H)Mk({KYe&d@KF2{Y49HFHQUMPj$YMUJ zfe>@(%<3}(Wo2f5%sF}oVweKRlX_B|6xiAjbsm@pOzdrj&~E$Z%2NABsdQpupj=V$ zfHVu*s+^z@%qqhvCNv#F?72BYXu<|g-_q(FMaVCwJwC+oU!-acH{n-Pe=7n+$qJCY4arBT6 zUpAw$_B@imtI<2tmAeL@i1VT*$wp|r1J+$wT~6&Av(yt7(_G7Gat!S30`-~DGTr`8 zo75to( zKHA;OPr}#Fc*85~Xi^>+dG>OYQe1X%l2nP54_n4{aT*Ki?{)D#$oRb~5uh^}UD>p_ zOQM;-nuRsjAJjCK$mU?3zRiDMPpFfO@vSJZqpGRbmvaW?qg{ebH1z~UGmwIEzk+_v zqXB+OE4=MLSckI^Jv9<%Z1OOK(P^OJC>65{-PB{7BWY#!dKNh)`RD4D*Dms9Z-&g0 zt)h|=$rYUCnK?k!U1X}tF5gon6lYDcFr?9m!nS(JD?{hzjzEmy_9-s;O|VFh^a`lc zfxk(?_Twkh4GIfoeHX?vd21pCQNhF%TI@2mLji_mjIK-`%unpP_4>Op zGzs$y$;y%)%6}GEj-i#elr<$4vs+*kmVdVZI9HM7wSseH_)WTTkfqk$dF3Zu?1Xfs z9_0xh4ng5&r4g>?3<6^1prZ0?#eed{YuzoON_l1C$4H4;7)#MRq+|XI+#vm9G1a+* zzD1W`H-RWcl_pXN+t)Pg=8(@JtZ(rx$?fo~P(?{XgRqEZYMR`_T-Oij=1X06_g^uV z>DV_1IcBLlj0+m4#7 zk|dATxXN(Qv?O&88ZLrF9OwA8tl>oO8V>5>8tEtKgXcRyyHWl-vL3Un$H;|!j%4bg zzkvcFwH$q#QO>iFTBAhkw%$~A|Z`&;Q+9`|TAQ|?I>fw|`bM>0d3AB+AuL`tB4 z(h;1~`Bpj-C7qoh#u~l-8pK~%;T{o7z#+hF6MBo`-eDj}z?R6$;u>z-@tmnl4UNcf zgTVMRrL^O?yELHa8Q30{#U972kSRK>?hln-H&Uq&(nH2I^;fobL8u-{+(BDC|7`Vu z>^4ud^zi@`xA^NLO7b*r6axUACzU(~&=`~#-{@#vRtj!*^E|0NDGeV^Rx>3-4me=s zrz%v4#<&CR$e7T)F34t#)d=b75&9aD%wl&LjMXvH7!`RQ14sxct>DJ5XJOT?%OZ^t zv%jl(!ld&ow7b~fYg5ZpL&yZ^jn3EpRZ=ma#;p)t1(8xmyd6%KUUY-Tdx(x;cd277 z4VFwT8dIC7s1QhIif`{ym#5iYexRMEZ?}>GZD+()So~OrZIUd^<<935?kp+ zVoW+43~*!EPgiY>VhIz892Xf5CNW8u@proSfjJz1h$n%8%zUK_-OkP9QW>V19hFhk zp?Cu$WYQ1+cnou=6EzU%os{{lqFWF-8mprH5iVd7BTe9QB<@!p873og_@OUi&^sAB z%IOcZgg!*OD|~$^cjq@Fb)xxpO4~|Gj(4+Ics(k4iQl=x<#o5Y8_bG+d)AS;zB3#I zr&fx|A4`FK1d6NXg&G~dNYnz!L;MPYn0tkJVU{u7-w@VPHaGf*j~rgfz$EtJFD59s zzPmxER9UE(<>Uu3sGPb;uT=$x@3onfRqBACe!l_0)4vvANwWn+Jc6Y9o;uq!{zcWE zdc5Am`J0u|ul??M>BJLJ64JoBVcM5$f8ar$F!O{y?*zrXEuC5#+OH^RfzA9tBYP7|%>`UQk+?D!SXUgnv*iHtJGRmBh8UyBzz9_8|8z2w@ zvU2C;Rbb2MS+1jLE2O(xNKN`*X&Q}IviJ#uPxNu0HK8DjQY~VlOC!4SM!Ktmd%9EJ zJ?y;!$Bv6i^L;NdM# z;s+@N(A$nD+$Zk08a10Q}ez8>KcTXb7GiS*_D~ou}6|kQ+i^37`hG2)6?T>kGSUM z_chYWJHsDEtcX*R z;rY|V|3f8WSF!!|F{Le1U#;_5K}LKz*x}}?)OXEPNpVPYjK}gq+z|Fj%;FodQhS^c zB!JoP&WKYdc@9<=)O|F8H2As0J6L7Yx9mmbX~cZ>M0 z^6m&j+n2#ztQ7o?4utWuC3Q4Y?UwBrv3#)1jvgK{zHYXM!ZGan+ajF zIqiGugiOI%e;95xb?C7pqI0*%@>nGs)>0>W#)r29L~E`EHsqw1Hv6v?CX|xRJp@hb zR*t<%Ed}`AQOsFqP`7n`^cZDFFw3;EnryY+Ck=ufUhLjxQzq>SJl#<1x>m)m(zf!T z{o2~<+ih|mENVQLn;KUK5MFA971V3ZdiDNKUjvhy8O@&YZy!rIu-*!w6lux5aw5Sb zsm+GzWG9>*9*nz2;gzn=XsyZ^K^DvW@~{bYfD0CmiW|MEGRKwcD*koryaE+Dfn~r1 zmnk2D>&!_&%hZlaRxo?bfm+^Fu2#K~jz_3Ss$T|irxuH8bE zZq)fr8K=J-++dbQE{hnISY1};x{{fZ+6OvllVM>o$_B?)Qh0?#5S|I^qV8VZ0{ZKk zakO>@>o+x>kP+-XzjpDDWgM>vU$?kEhpe8^TY=BAtd?bpYO9^5ME!fEx=OoLFVI4q zw*g;X{q;PUv=FW?%kFFJp3F1W0<&A0BMMvBz+}&0w77Vvq&e%;>#opD6?HAcW^i2F zPAHAG3ZA}l&t=bvHE>6p^Gxg6NAO?DLjCQrWN{8wnF6!D%kGGq!ZGgp@UX@o8{ibXZ1KQ96g9CxNwac^$i^ruova#9 zt5Yb0B}eK6iZ=A8B4B_@%VlU~XZI=~#k_k9Xs=cg_UqbTA|*TZPfIUWW!Y8myyEfB zT}RzxD_{Op8sW}w!NsWmsMR%?Q~6=2hAH)&AM|wr$(CZQHi( zOpJ*+;l#+`H5rGc7d)(Ox=em>PlIgJ-3wEsjxlXoFBs+32(z~MfJ0gwW5ms zNa)Vd@*!xRx5yD-t2Tq+vE+Ls;^pdHri|Ug!7<~l>T?5{@u6}POt;gS?vqBd(HGO1 z=+%Yt{Un!@_fl#kQ;{lj4~njPqHuRs=GrXKy?`;7A_S81 z8MinVlRlAmQh}t;boq82zVIDEK7^4i>-lV>0&#o+!EE9zG?1JaVp>QfLB$X@Lf>Dm zDoxk(=$c?^G^B@FJ1#lOr(8DV!2feWTMevZwtyoF_-H0=onJaN4GsI(3Xo8ySxbZJ zp#`wMwVdEMeYXLhYh1mi(ulI?n1|Ge<3;Eug>+t14QWr=r=k4d+gWdn#-iz?psU?` zz7WA0m+Ni@R2D?Z(iVa~Y8$8-Pz%B+Dc`WsiFoHUNYz##&}=yCvW(r^6-o|i1TGD| zxHQilja?Ty&-KH=gn34?_Et$=-s)~BY%#ad%v@cts_zWi6l4-B=@+sJ0e;ht`-j zz&O4R^&==bL!XS#plCbHkecX6V47w>tre3@$IXfH#qf{ysX+UzMD$I@HzfSTFF_YV z_filtmXM{%avXpq(WYq>#-%&u9pCgP2RKSe653*C$t_4RLsGP%Y9n;^D`E);l5d#% zR~xzmfoI@nuo?^CBfs2UN{bX1IP<4%>{6`BhNA}^u?*eKqB&}jXFva}5{ zN9F>1#&Rq_^;s?wFRtn=Wbq{)&#%RCF>4PrYAt+=6~A~ClBEdl4ZC8ifeYZ1Lxk z)qe(Kk1O+{XOnT~{Fb1*4yk|=MH-tB`mQO37|$2;lHI!@zChGoP=DiYTDM zld%M6Jl7!Uuc{STSW$)n)xkudh7&w-(8qH8NG4`dTCL66se-+^aP*@QtrknuofiD=OkYud_Ieux(an>Cj z71*uaa79k)_M0E^GyI+Ac3K`mo^L9vv zv31SEca6>vDcp^(AR5|&yp)O=c1~jB*E~N{AeeL}D6?6bS^% zodg)n_DH~qR+TS1ufL@bngT;hp+ zvBU$6-$l?YRG8ekCF14KED8kfbF;by?o(k3smesq%A-yfyc7c3=R@SpDDpTvWUJ@_ z%+u0nCooQXa!GAwsiP|{^!oCPs#YquG=(P>9l>rY1Ill>?h{vx!EJV*AcT4%^+4Qo zhGSJh*H03WlD6Q@CN19J4^w1K4a16Hs9lNz2&-lca!{kgSbpUFtHev#2N&uKh9HCL@lTclw7f)gR$ zq&4PqrNG%4qODTd_$H}Ve5+J@LE5x1KXQ!t&vm;rNAUxO6D9vaTZv40&=-=b&a zA8nrFkm${9y85PP2&`d2eTeyt$@e&3Q0_n-A^3}y-w-|U$)LH9_%+&rI?SW!Y)TC# zdU}917pjt@TO0l@ivVK_a!T(+#$F!HJ_`-aI`ZWrTjCF zhhj^}RK1}XcWXbF`A5fDIcx8 zbS@Qf`b1ez*6CJ{C8*)Llg6rk=%Mrhsdt6+FG44iU6j`v6wU0zY{sE2?%5b|cvsT7 zKhU2161HUnYvH>R_tTk!*u$qYfS+yl=R42 zUUmK>s%!bkDgqi6^!S?!c5?M%%F0Yfb^E({ie{M!yEpjmHVJ-V#mKl`k{&g^r^99v zU2-?UWl6Q+#hk+{Yjfiz^~GnO7;CcJOvzo0axOJRmMz0LVmq=3oGC|+DN+Kp#g@Hq z=;D+z^`#c$Y1HxcqQf3zh#n#+gF&ooME|Z-E5a6H{Nj{ zw+FSJAoZ1*5nV4fUc*GMvBQ{8bDAdF_MiisPz=Ep+1pS}{y(oJ`qRJN%?!nTzkNpD+F^25Y@ZCbie)kWmMJN7G+tFT>dJ+hXHRRI?()CI(`Fnpl45qun5^`U;Z=*#dmP2$IU!NNT)mSL%TOJ+ga5i*I}%QU@fPqoAcQc^*CU--#== z@Y(2p(NqiH(ueU_rfz#s#Gh9{l%@z1-#fxJ13SK z!)&8!4zKZUtK>XJ;?S`9%j<6Kat1R;_7PKIa5AK|CQrgwq2MZPRV76E%>O z`qIsS+-1*Iwgj(~-u_Qvk*ZT~AQ3=;WHgcl_9j0~b78jBnt+O2{dYldR8}ULYlvsS zXeq^x(t8beoS2c^QGUtQcMb7Dak;|7J~#Jdg(D817GN{E)^jXUhm7=f?u}k9xmOoW zWk~4*S7n63hgZf{La0^wF2QDB(fe9D8o^t%&8K~e6mzw;&dYu-*`Ib=Zf}h z&bL2mcq!I=vLx|{7+6Pf#ADcmkeY9cc4>-*u79PbW?L2w98i|#d5qG1CI&~jT+P_TB2aHL}!y#jV zM*W+K(u+rlyM;(&F`_wnI&?MxERve~TMU_cA6$GiwK$9`9TJ!#rp;5$u}TWzt?_ej z0N>=orv5kIgw4j$`S$5i%n-mFA$ueuglGB0Cgky!u~+cH$vd7cuuuXztD=*YU8UUc zfPbj6`cPt%lJjo&{3}J~c0r{fV|~cdsY5ff+wD;=2>;ESwV}RzBKV)}QkL~WvDYHb!9@&Vy~XqMa4+aSG6 zaZPR-Mm9BdF|$3AhE8!UB!D!GwqTn}r1#>z-4}7zH_>0e0DH=8%a;`F{>p=|SN1#3 zz+INjgX#8sd4Cymx#6Q#+ZQ=(*Ng4R2|a(hE6mQ6ni!j~bpJBAkJj0hlU+JypOlW4 zC#3x?I?2er6((@H@6EwIANaN~%QMsb8UIB`a*OZd>+Z;{jvP$O)ewu9-_K)Fdhp_? zr;{%%GxENn>d{AnA+?azlS*$Nkl&ZtxA%7QEwij|1yKCs-HICOm2|hE3a7U~M^ErC zjoEHlJ5-Iu+w+c9O?HIv3@qg1Frya(V-mdxEoI!a9@ z4$N)k#yHE;J4?@{wW<3A5)(oe)oms;zoFk-^YWOHMl5l+fhQpYajXo*m=YX4jLG@Q zJLKlfffP_^)Aq_@C(zvNQ|G30pbNP(L#e7>l<(UjA%_MBNZ8z2q_O!2P*KVn(Aok; zX!gH=yp>CCnSl$o>4_@cNT*m$lqYHimPUn;CqR0tqat0~@$g6?mdtK+c)+NM5|-sS zCE%zgyOAhZG`g^@o@B^0fIp{W$h_Oep_R;-L}XanvwY?7;F7wKGCvj~67;gYCc#Ug zQxoiV1=6^&TSexqx!8eBNF6#QYs8;;QG(biJM9EBR3a0Q9!&XESrL8z^kbjSX1An2%VEocd%YN*2A|l17&?c*muEQ=`KBE@gdY{(eiKxb znw%ZG4&=%;BO_#Sc4z|c;6ZtpJ=%BHIuDzJx0j~amA3}xr4i@o@N*NBq**T=7VlQmyIab+|h9eBKHG#)m zszM{mDAwGXQLJPlia5XNb7Ov)LmxdBVaG4IF7u*6zix4EYe&Vg{(~>txjO1b-`V?8 z@a>GZCmBHamb7*|xI9zdD7@Uu>Amz@)wlfa3HMj`h>PGZf524jG76fdQj&=9Mp#DU z8+3Q(x?rVCJVIu2N`~EO<0f?Z8^y;zoKtg{D(KB60(-^e-Z6ee0wQ>Te=0BnX%vk1gG zOLO^$bt=q(4H0zlF*{ovs8LkXUqiO0c^_ceiTx~7r4S-=u>xY{I(;qlnVwe+g~p7? z37G?r15YHM<8jCX|fMZS(-#=eIu zFVxEn^nZExa`@Uo6tp4dE{@-oQQYDHvOw5ef_Mx!b)#*p4`H9%GeVc^Qi1)7_Z{L0 z^-H>{T#1SpTdI>rhdgMw1+RSTH~lOHxjiy_<>4HrAyo$r=YEFzotZAO{K@b2+vQHU_rRE z6XT(ac_ervFFDbYe6Q%(w~ZR^rv-he)r-cn_zVIXeeT@dtjMKcwmdU~)(VlDo+Bq1 zFsABz3)-bgG6P8&+C(yO;bngvs(zp}1Pqv)4`xn{$AU96sOzO&irf?>+}tMFejv&vG`M{rYH#c|1 zOoxa4+M{!D;-T4+s>u*rW3q{dhZ%otmQBp24i49z9-y-omwe*1;F|}5K0G+!`G#N; zh&s^TTtymHUl4mYXQ`vb8LlvflB|AYHIPRl(}^8-<}XNu0>4+6sVO@P7XFBab`$HR z8PbDl@8oxmh1qz4Dqw1ZU?&=dQ3-Sd7r@YGr=&Pi=C21oP;PmZqj0j5B*jR zgwrp%Be)MW-K4jPQ0YQdW2Z_`UCF?@f({hglWc3NS_mxDpq^4n_3L?<8_3bb3{6FP zVtbm9sD-;TpCEGhp4F2Ir|%QhElRMJ)js6*vE88hD)t-gCUE$b8xY#+DI2u(9VrQ` z4x;|7Fv_S_v;aDYRT~j69|f+~DvA{0s9viy7@gvzVA-)U~@^HTDW0%i@wI1Tj0 z%0E}V)50U@A6OOP9|nVoRDrB$eL=+*VLWrb(!fB2`7Y}O;DgK;v-U_WG%(I0QF%X*D$??Spndt4l%mmK>roi)8*;-u6uq#; zzZ>1iYpE}=fl4o6@ZJur@ETbst#=eA5(!40NgE!}r#UV4gLnQ-aV{;5|F#M4#2@gyUOG%LD8slIPy}K{kwP&lNd8(_@mE|G^Vmc6^3j* zAYTP*9@s2?QnE1miwcavCRx%S6E_O-m$?Y=-*(hbpN#|8a^bY%W`5EH8|a;ytBr1W zH$E{%O)fQEor*I0*^C*o^dpWJB0@?e)4m4u(b78E6!%7BFIGQc_Ew6uwc2$bHhhnm^@$J{#MLXN6G(y%J+til??#mEsi$Nq1a|*@c290ZedX_^X60WbqVt2{y z538&WN~Xt>l$Xd8x<9Djs})}3XqaqU=>MbK9LNON(Qq|r$|T)RX{P(pq4r%?45`_%Y~XCd1@ ziHf7ZF}+|=<>f(a;P8<&5?FIGroCEJye#9|X`ejxH*Wn}dp{v&hib277&@EJOo}Zq z_vJ9kyYSGR-#R>LVH##n&5A3AovQe(dy{UwtnR3kd8la9)pwR1Y?!o$3M?RGCA@`o zH=}KYdu90E8dAS3oCiUB>P(VO#&d4S~uG?hQ z!=u}2NkJXdo4d5x6w@ycrl6IYj#XGLGPJ&=!=Sf0vu~@7$wrrtVa^u!znJ6?H8o5Gg&!tS zq`Nd>4+Qz9RxZACrew^2vRCGEs(ugoQX?cZIcDV&wo9aXw1&FDdFi$UnMJqq`MX}J z{I3ceJCZv)-C-yPt-v;}0f$qjm(n42O|7^-r@d*F4iyiMq-osan4`(IG>yG!uwbUG z{yXnBCeuqCiwqyu2Y9vvjy`>461JC5Ve^E!Uiqk8h9i1uLSs=uA#^@{RbA28Cn9f4w#fa)1P+ACOF!Y zUpYc@%JRl}n1>E=yt9KjEw^LIj;>l3k8tpkgZUQLTk^OMP!#ZEpVdw+AdQh+9T2|C zygi0+wAO`GQd)svZA=~!ow$gM*<$$_84>K*J!^esR5aP)Z~w`I`9_M4RV{c$&*KMK zvYk#y1cPRgOY67V``Oe`l3_sh34X$N`A8tclqV{Z!WAy-78BoQ+x@c--~kMyQhFc? z^@!38H{QnVL0HyS7A#t*M=*|AS8y!R1DNl3d)i9{dX(-9*km#>9`nVPL(|el5gOcy ziLaKZk@T7(E<1B=^{e65JL2B6in{Fk{!%{g7w;D9Pw%3>84g6!^L8ZbKAKUX zV?e~?z#rJGy8^>KMBnZJtx9_z|0 zGhcz!(xu+`kZ-aR{lVN4L>7(`^KjB?_wB;do5d$L0`b_9q1=l9;d-?^;;7$^JQfb$w7=H@zZ^?8STo(UDE@`-_m=lJ>wY?;d;{U?0Yz>L}8C)QZj{^F*s*{52^}}#Ps&dB+_bOuc>SI7p z^G?)5LB-7V<|>w!Vla%5vF0}%5(pB4bVWUqXvqGO+_wEUma(-B^ynJ%?>Sj>T`|=e zj!`l%h}6JnkC!H|vfLiQJ>G0Z9S%MH4?3TOo~+Z~9vZ)GF=>TvEHS(!2h_1kSzDM} z6b}%8%q*6E`;o3?>)Xn>UGBM9rjgu+oI%Y~prKp){1n$?=(^vTMDn)Q@2#Kh74PY< z@2}O2z?aS@?3VzlJpsKHvnE}AjJLk%&?4(*a9i8--6rlWc7u7T^9sK%r<2Y z^7xu^y}S4ol&9%OINT$*hriDo+SFj=Wwhj^X;?)}HG|!z);Dos^K!`<`3eZS6P4;V zz8i+ovJhf)k46c)j0YA{HgB42hI;-BDnwBbXm`UTcvOR*EBThl9wEuCPOBY*=%R_O z3QNHrjs@m~#m;%IGAb7!&zu~wYM&c@2QeI5C^oISCa*rN5YH*u$1RgwCN^WyPaL0Y zDr&STrE;$IPwdt$>jG=tvjt_8UXk42>bb_wzVdc3<{7w)EMas{mq5cbfNi+kD9??@Q9M_FN4 zo1SfR8ANmL6cd-5gw-!C3pM=dE~u-`jF@~Yx@Y_NSTdmROj6L)(e_M7E(-j61kI%x z{tB5RL8EeHjO{+R09ZW}ro3UifV~7zA;qyBe0ZKn{897>X(XzZnw+<#6B1oaMOnV- zb^!x2@^E!zY#Ec39>!ff9R28`Vb@3^PKmvzwYrrbZ~qF2xIx|`i2t<^VV4_ep_&Vm zg>BwYGbmOc&kE;;fsb#{1Bb=Wuz+YosM=a?gKZ~`?*)pemWQ{m$&po#ob z5cxbd5bE#Fmre@Z3fNiaVb@LjY#zgZ&e7U8tMu#?zhKwZ;#KHc#e(DJLtS4bhl&Zn zl?OQ4KidkC0;bk-0WEA0Qk7MnzW22E2MFM{Gd9wk8dZ07V_-uip`qfk4QFcq<_UYG zF=oWMx|!dw_kN!A{)QVl<~WU*;VGsN?UsZ`+t;3@9-UV=ht5?x2c3Wu9#CG4A9y%;`j@2vT- z6q${JmETZX6HQ$7HWaF|#KvhVF~N(WAi1lBO)Kq@Wpr7u%}YQ6$l96oUlP7kPkcbK zg8@w1-x!m>=J)|G|3)-nq5mh3;NQSR{*F~)WT9pJ2UUfMm6q-Q0##vT{1=7?0Mzo| z@=X2?Rrw>~FQ&@>S;8O3<3Fmv_}@$T3#sx)!(T*||GkEP4^&}f{?{`6Gmie>^u%94 zl|LH(;;HX(g=gJ$UNN!BzVxYV*n_<^tT9bK>oeZQJbE+G7Yl1V|w9u+&1zdS=jk?9Hfdkg0%z zgVRIzXX_-KoUbzPT^$J|YUyPk_VEmHq4I^1q~K&`;t57g9k;jJ@lTi2eQY(tj4!Pn zg7K@D)4be5rFc;Rus9xXEt^?B=aHeXID-5hM|T0f5ZhVUPj z`X)}!jd`^;sShD*@M%@9=021cD$LznQ*m;*RS1X^u*7+Z9&!3i#@Nig(_eX3nq8L#p`$0qUlh5nc@@8(#SBr*NQZC2NE+%NK_ls z+$xsZTmrpL?pztipT9A+J-%E{pMcZ4)3=U9UI^2u6w)WHeR zno@=X?X#i8cdo3bBoy%QKJl)ulNsK~zqN0ynj;lOGbMltbKAJjGiupW%%(FvsIBYtD-CeZx2*wO}M>a@8?j zN$uVvb1t$uadM%!8*bK-{8RS0qR0`Uss&zLI^~KXtrejx8uW@aAz=+-s(ES`47YmO z&;Bxa`VL+D6h-`{E=yb93~4px$Db4B!Rf)A-=R?rn<5dEqEHEQ@%cdmD77b(@|P(y z3g_g2SVLq9uJb5DNJh2LaWn0q#Xf;x=$uHTqZ5PCPM~2cfPhHKmwV6jR?i6YhbJh%>0c1Oa;0d@MRQx?w27=D&0?AV)F!VxtkXJH*5 z@cm(dVC~YBOnz*_kEjk&n-$7zvm1hQK&0 z>3YNIagOa zq7iz{HwBTq4LrHe)vITRfm=VSaIoO$mn{(M0^Tz;gHV1!?mt@q2`0or$BpQ>;3lkk z&Rxd$=G!}!ppqJrxr#{tOG`-tQy)3rAr|gcGo=3rHg<05i@WS}sr_w$J#rRTB>IjA z7+X+2dibIEJ%YoMu}$h?6Y1z3|C?7-JBMiN@r{$d@kn@uK{zjA13335ACurgz(=L%&(g0Poa0o~}WYYAZVF?!MyaE9y zr8lwGQ{bx_5!(o3H_Ad`-#VOA3vcUtxO>|OED!|}MR2q1N%=1!wh@r6EKmsqOXilG zF3Y~J8sxO@VD8_*lr792*`WhCz#r;3JJa0Jwx`=r5g(kT5j9Kvqj=yNlM++@VRKR`2K&f4CXuSl#?n|9t zlI=4s5H)6qtGJ9u=6VSsIi{EuP@f*Kg!C?7fnQCt6uNz0yQq6$6M{-2Tk7}zZ${&t zFM0|3c{fu?-2JExt*+$BmH0y39L`FU?4v*(jFgKS1@=yYRD|43a-1wHNQWu#HTj0%s!5Uu%oi71+V z&JGB>3Mg9(C_KGzHO=QVVaU?SSXd^65k`rLTwtt0rD_~ext~bc1tq&C7BjLbHIwSD z(@9(k6SP#2)`IAa*8%j<@>RpdISrTBopHIlJHObmN0LsBgslvWbYp&0Bof9s9@=*=`( zsxeR<9m9;y`k6~IfC559+?-@bT+dZd+M{Aez9|M3FPRc9fN~5M-~~wT3^cqtA^l$6 z#|5e=RP0}N1;(l0fI_az9Xn@f3}wuGkK{Mh_zP$jpT_~SXPThjH|GL)JWjXL1A(Qm zG>n4Dg+aGDR5fEzDnorjS*D%?vUFb3`HOy26<)ss#wYF4m39vVqPO5u^0zHi+Y$B3 zyHnhK31I9KIK3Lz(%6?76n2bcGgb0W=AH?m+KLZy-AC%C0rtE>fZ>D=*blU54U zm@jat6?BSDc8CzgGJyrnpY-t9dvdabgB25F4ucVP;W~A3){RAv??!XSo(1N#ywD0MpNMxCf7*y{su;{nTosay3A69Ro6+#7HqA`e|}S z0hA82zexr!B)S$Zy^;>bq3%Qc>26^?1Q>yij4;H7-MD*QgG0OC3stKrM(^I8V9}fi z|64vn8dYQmLW<_b3sF%CFmqfyEIlSM4;li5IBn+MsI4i)cOorzpX0rjxIBhKlkd5` z=2KMgfkJ@TPB?efk?&Cwr*GaI88cd^mF#TL<|a+|obj#GLdpLq(Ya?8k|A(`)q z^L&dz{gI7hJ$iWzksZux&l!e?K!&5=>cg=}6H!<*tp0)?O zcC}%);0+w@3-`5KRbrH2e!t|jjd$D&95!>vBXcGr_tQV{&)nTi(dgVmfBO~!!vuQ@ zT%JMcr8eBN1^p1bY1DkmSu?CvaK@g0h>T$quG7bm^Oz+M*2g{s{Osf@hU3x*O3~eW ztl>vncu`TS~O1Gm^#;Z`S1XZNn=I>GbZgTZP z2v?AXHynsJ9E0!>VZt5-HT6X|S+EH=`=l&7`l9h!Eq|5(kR2qne2XvA<6L6ZDH>iN z7;k$s7PP48C;CGNMQNU-5^_vHfe*zC&N@w!qnQqVtxDcOF;RD z_6i?}V@WSB?YEn6(eYSX788oD$}w#O=kqOTh~c^B?4n;sfj{R|j~7vC@rg-QY0Cyd zHEj1eP}%lqu*mwu$ORsmLs|M%aP2TCGKq8{F)4mPkC!kP=n)H71)w-ogqC8>dy=5S z8OsW!mV~^Z@_wC*A+RhC`BuS5|kS!Pef4iy*?u-F9FD@A9sGp%ra$gi70032z<302>z6f ziFjZkEKp%{+!Gixk@6LEL?LCw~fD?Gg|*4=bff|f*Mf!>xjr?LZ)HpJ+fwN*WnR6lI4 z+pJ&YNL1)2?hG7fT8UGy)_AK_#}p3t#>=b}=m(ZjQkw6l;8%h#3`N*C+;6U}LY-li zuD_&#^#il?h>t3;0`+04H6bL_`t8u?TTxUPOZf*RSRhBPdA*}J`nbKk#jPo+oB3e$ zR6uVHxWoy7X%{pdm#9Y8E({3E3#j;c(~1xXh8-l+x@l`hoxAL*5j3)w{0P(kJRtn= zgZO$sHb4OZIW8PHb;x$nE0v+hS(6sNKpF06^DGEC5PdxIelp?>&>{GM+dieWE9Su=E||&tj@gJ8 zxLg;mq_Kk<(sj1ZF~>1Pf-`c($0-OLBz!Zri5iH)c7dbMCKZ4DbL!JLxyfR{1QN+- zB5r6ZXKh1lwP6{|a#|BK%DPjYMg^fKv4jMQ(U}+ZQ{+Ul*dhsn{LEe^WuT8hH@r(! zzkqNgv8_A~dQWYd(+8|g5P>=2c)RrYdBM=*FJrB~f?sHfE&a!m9wM1Fr%^1))b*5n zvUOi%r~HR*Xx}9ST6b)rR)r--P7xoi<0~Ft8Wy|0u;wAGqO9|nfRu!+rx|UaEZy8d z*kjF!1CQ(!LY9ll0l+hioDh|>Bb97&v)DGu54oBB-rWtGN>o+C@J`hwKU0>thnDwH z5rQ@KhD%PZ*I+< zgcpxNhsQYMR`V56(cEH*;JM#6JppG+*J!Y<7xmNLpjk+8heEvW}jV z)$&ii(5GKa%)_Lv)3uuEUv&C$r1{-Lyo_o=NM*RrcftU}wyf7hs+Abuq>E?2AYaVv zqzK>O0;ZL8{aG~ALY;3_)36FfINbi3>cufw*vr`bxnJ?Sl<;e6)zYt=3?d+`<=gv0 z6Di#7elzwXx(5pc6{)3Ut0&aenxl_wI zZ@H)gB3^+;YNq5tTnIG9w*7#(sXrnSWWj?MTN<12USf&oJl{&Qb`S}`N1vZSolPJY z-q-OWWv_4H5$4-_+i$97*`KHBZW14tkv`s#h12ZuJ=C+`$%qlDm8jCqE-sHR?4z(r z+7s;$(hk}nIp7*qMw5lB#1e00sz>lFf65XkS{M59uDa+e6UZo?4Ph#OcngrM7>e?# z1qi=LM{JlecW=#eGCAKb2wP)H$D=6f$LEmO#1> z{bkG?BGP`D1+=X-1%@xt=C6+q;LQ>i5mn-tgxKO}`!62_>g7+yH(l#eQz+3X9Ga2& zOcCT{qMW{Ko4r4B_@=L;jxTR2O^>G{xCSy2IQjj3uz5lR%V_;AbLJCaO!a;Wm~&f_ zi|l07{3xL!L`a}5*j^C`Jwq(-`I!Q{m=NpH-5_o;dz%x-awVO~;h9N#bcKlbFh5gp z+Xh&FjINzJnRgIoB78j~E*^Y<0XcsMN{y)G`TAP#-rLgtvNYwq^%Wl6arZQHSv<+S zo919*r>md}ZsRpiy5y~Ld#JU%H``&)p|r$`exP)Ayl%dGvz+Q?CNi0i#u8@07zKnR`4`$RM#9&R3B^y&HrWhmHia_M#bXE0 z>sJJ63cg?MwNnUZ#YP^U6Qh)`lOyCjYh-%dmxJ!=X|XfXnbv$J1CQ$$Z}{;;=s!ck zE|GCMG+3Vzl9ACs6B?IW5Vb6~h|YIE-&7;i*760{Z6t-6wDH1adA2d*?Yc)FFCGHj zC7Ej-WiOSr(WI4W@}&e%znZ=ZkU8($@~gl)&YREoOQbi(6ccSBHp%fpoTeUBfJKlU zR-4@=NV}r+3bS;-jbRq1X^Q=H8XpWDmqL+KVde5zD&4U&eL{#IN47@pFzsTOzdk$k zlggVB7)YBEC?R2uu@tE&dk3f1Lyjn=Ep(sI0k$z_t+n|M^26ieN`&Hs-^3kzjOr$_ zgWW)P7bkb7wiiQfW#?UF8b^1{Kt%#F=IxccJyJu79CN>RU6+F(zqcFbWZq3o!*Ipb z4COq7ED=HKshXM1q3j)d9q;OJnD%wE-AIGE#W~EwOI1IOp*=kzHrp1x3qB|uka8mS z+*GDAhn*~2zK0FD)5_i4;#2ASE=gOM;c_iQ)4#4sK>rNOPHNvOy(_R*>>t3}(0O+$ zz}^R>A)_O0Gc8PCY*X^x$-BWNda@bYt-UXRxBv$M*HvlA;NFkoZ6FN3K>yU@@fW}L zXEaCW)|{FeNf+{3FUVRy=&xJB>AtCSx8kmz72{Zj_W&t7<-F*!Ck+b~_Xf3d3rbj| z2kt57@DwfU0YKBk^P(YJ>lge$KU0$C#bq5AwM1AI@@KzFt)4j(EASnC#YiE%3$vdZ z4@oLQqTp|6dczu*lDR!6m;1U1+H*Vk4v~fH^OdW?=M-Pyjh!Q^=cl5fQZhpPfEdPJ zbc*PddcTodM%E!*f>m3-7qQo6m1&ko1)_3X!X%FWM13af(LVQunxhYDL9fw5X}R?; zduLVrelC`n(PDhK84IdLa1|O11QzwD+d2%M0dVRN=yeKRyB~gmS-927u@{vVjXhHN z9(Hbi@A;tbN-P~ut>rS|Q3bUvUp@TFARudBs_W}MG0P24wg_cWN?$o{I62DTY!T3S z>JE{M@s3EUiCiggejW;BS)tt4gr^cBuYQ2}TA$EC2sW{3{!u<)7L3|He@IdnNuR zf`J1N69A~hpU(Neh+qPQEc_WBfA<&v`5B~tBZ85EnU|6K(W6C*9d|5%Ivjf#IYI$8hO=v4fjUm;>+?MU}m zReo=wrxVa~F#5BZ-`-5ml1AK7&(h35N|8?38W3n;W^FQ)pxH&i)S&3U4 z+W;i|k@%+?znf%lX6tBU57_+sdLj?V?fBh_->3C|YQ;aBl`{5*M)rX6kpER43Iaed zh>01%@OC5T2bkSPfDH;xwzif=R=<-y{&kf8InrMZ{zn`BL(3m&(t1`#bpNSW09g|z z4g^e$bbsq7erpp;BLW%*MmqlAJ>y8gLC^B{UUDR$VWelL6V$U6Gcq$VbtGV8WT)eI zHc>G%1O!wtGc(Xh>AC*x4FfwH>z^a4{Oy~}fQqU9eJ@59dO)a!-tUn>z{CVdD>1TC z2JHRk>jDBct{Mb1EP%25`&a}FOe`F~4+A)zfAI|AcAkhhQF(UkI2n&sv?@`9LNHmPZXkyPqrLI70P^>3 zuU+Np@JZvUx)($-Ca&beQqo;T*+#`tl{p}ZhC1n{H?aGyR2>H|!~3m_s)`Q}Z)*Gb zaudT>IF+&znyu~hg%20+^ zVM71emOvpd57&_D@B+W`)Wkkfol<0g{09sr^rF>(P zi$*DVGmxK+i8~K<)VqTA>(k}tRj{oy;~K3AxJY^8aXQWPj~s2D4)+Jodyw|x1PaIA zkurf8y-D+{(?j(M+33F0^zFlxnPuoZ2M^~lGq>`!Jb78E9(slI>)v_EBaAh^=qT!7 zkF^P29F=GIhU_uj()*9kdXs)2G;1Z`7k40!1%3r>KNO67+lFYE@+C!R$ZmXe*n!C< zX&=BBB@Zu->?MqJ=93C$ATknNRK6vZU&#axZD#^=czAkw@YqG%v=d1&m4)XImPM(tIQ|lP1w{{7-@@0(mIBtWoF~8SE{--Kcd|2p4-mLC@fH;t zK@gf|J8E^Jk{VGQpS>Qoq|&I~oDx$QK_LX{yuyI&dZ*&5Bv#N*MbiWK%6m7l2bAEaI&$C3oHHfN|bSqoM(B(3V*@3^yjMQNM=fGArY7 zeOx>WI>s_NnU#gUySu!%-Ik&=9xX=~^bdGi+sf+&sj}=%ASPUiM(Z_(VNOximj)@QY>9HR(vL=`k9wD)QQ5s{^J| zrwUPv+)e(KqG4sw?h`O4Ec302tNGBEnh;aGON|hJ7RF6v#gU#{8WQwLdPD~0sy2(< zV%t#{K+@>9ZE(@S@7c<2>SPcy|5rl6o%d?_o0eT8X_NI53SnU-12ys6-hw|J@)yk{a(LIBWS@h7B zlLJ#K417>yWuZY>XMm;aTq6UsvrAJ0CI>)Aa!o*11cz$rUV5p5p$Kb5CpH9F;{DVy>YmgiYlQ-Egs->K$!WySLd_ zHE9YiTmjZ1D=o+FY;4xW51|>CdJ~V%xtSNEfT@p6V@T?cz@NX-+mdK*snBvgVg-*# zc6xM&jaOo8JN7=Gli>#B27cc*s!r>7x&JjRp`l{1e(U)|;oaZAd|J=Yv^7ZgqpJqF zk#WN2O0abFl*HXtZD+n`Z z5*JfRiUR#x==7zml9&amnE5D$*E*7;;Vx#ix6vOg@>Akk86Af!>nlYIH6&?EOt zJ+tP`Stda#sGhr3Sf>;GY>KVf8$w~Q_t8)Yc%Bh^xeYqAyNnh}eEvL&!NgE>S=t|( z5hmX!eHHhK$)Q|pK$tQklf6=MJ{b9w1c9q?$ltOeo^&N0i50q*CDZvxFsxO+J1+mU z)K6Z`r2Ms{2uV~+F?`^4^2qD56_;bo3GzV7YqE68>Kwb9yew5qBvNmciU4(`?DM@Q zNwn&Afd_*PnrEl(Qxh!pJLQba4z)teV*hUqj2u@z@bA!hi@ z7{KZZNpWO;g$Tc}NW)Rxl~_R!s-$ScxB2&(HgA<(^6PL=8c5j2fD9-h48!C{e|w_u z<`z7&%J{IQkn(ofXtANPp$?&h;-wcf3jjY!72AB2krF(Di7ZU68-Z?qg4*S(uIwW z!Ri5}V-D7dF{F8gAM-^lUrD488cb4**s|n8jfCkXWiA36K~s1V%u<! z7{{>c(u!F)PRl^X7lH3jVo-zrrIeyM`q7MmjojPN?=(TN`ZmMU3}1$?g66#7!1PRt zQ&#&&Kr>`D#SmeGM=6^0SS-rZVImkqgZWkFAp@ih4ex2J&mITy#q?GCgsDpFmnkUt zv{x^$^zJNYxechSV$ZXvv@XZG=Te6u=*}uxVyU{4jI*GDCl>T56?^ap{oteTRw8^S zJlshw->jTTN1$@z?|na^)(?D^k7oNEs=&2TF3C#e(YUrXNJ<*>6MhzUyejTf&uB2OD5=PHK2rkd=_ zB6by}`L^I1-VtKADH?kfZy3DtUP)=Fp*D@gom!M= zZr6IM!9Yr`av~PzdMaI^=I5U~vGNsg*pSOavEme(VWU^>+(_Z`)BPLVSdf+FKZps> zzWDPOddYfGfh)LDZnIXI^FeKVG3o?C?&BE{ur9HUSd#Bl`@yLWjtH@;jo4Os>nq~= zlzngXtc$r*X6|&lBkm-9LnaOI0%}-*OCa5u%kVf+l^SOSf5$p%?kX;uxK8k-p(%#OTLhGC$U!9wNdW(iM z@50J_IhX3LAymBr`qffiNR%*x)H&Mx{q`$@C?1~Lv7IgtcagNu*H5w;yeOAfr-a;P zmP!S2We~L@Ws=_mkKsM?-t7ft@p}$J2hTtrA9_#G$G+(jFC|;B_Z`~+(Q)xXA6N!J za`?NvS-E{5;_!9-R6t=O-uRTh5)&7kmX?_k&elsL=yDxypO z23CB$2yoNL0?SC7IWs5*<9M&g0>wn@5G`!yXH(5$HOwSyw?xQQ%u$kftnJjb1c{A$ z4IkDAT($nm=jVQbD*Tny8adsFp1pT_IDGbOM4Vc0R=) zqUMZcHlJn_LTK8f_uy6Yu_1?VVb&y&!MmpwD*QaHD!@y<@eR%3pI`}kHTP3pf3eX; z9WRgC8RR{!R4k>Hw_2uoylb0C$aPQao#^pQ;vcK>ckMo*jB#1!fh9k?;#8|ZG!PNW zr#OVZk$?xv%ads=oYh>I@+^+Y>EQ5>5(udM*4K#Z>Td|8~Jao`u`%oj0p?6}BsgTZD+toV81-O5NOo*fa+#xS|A(BZA|RMQ%-n`?&GJ1DZGZr*nB z7~eegc&0m*p^xio4f`T^g|$&vWRXT!G-S(!We?oKw4^`q<^?SeF7GJbI{Gm&P=si zG}h)fRqB|hlbi0@@BU=%k{^eJOIcOtMu95%!#1}%{M9a$$eu)DMQ`vWdW(D%8>hI7#1$S*N=bp_U3lo);ftoG9CIK%46Tr=Vbf&>^}C`3B4f2B9S+H{T~o(_NP8Yy?v6(}!S zFGU{_a+MXQKCSb^tMcr@IPKAgq{My50?jD)#dhP2^2E2Gd%evveCU zo8c3-KXIsv5a9uRI;k>{;yI(XY1ysmXe699x4i%ch-<-{w8pZt(pK!Q`zq#mHh^1vftc0#ngELoCW(aQJh`eXNw_eZH;qRMm zVCcae)zfKxy?A5Y+hfqv6uk*4(uC+R)ujL9T^`v@Rv3WNA<~4A$|KL-_Vn zb^9tyNLleZ8ZeRHN!Ln8_GD*VUUoEDu9KnyB2^om9q`jsiryBLBQkQu9$c zOJ81ESc~dj<|x99!buQm1*v7^trX(69a{G7`!K8+6nhmTQ2FKZPzPcV=&)*3cS_b1 zlzLWO*6ASaugKJ)jh?0ANPdQy6^7kcZ1pG_4j;j7gSwqku1R4U&B;7tz}e+gvR)X3 z%N|jRoa!5fV|3l0F>dy8YeqOZDG7VfTvR1iLHn!T)sLgucwpuN=0ZA&?(K1OJjA6Zz$rSecvi0QfT+RQVd^b z`jKM_e+5aN7rd_sMrXM^j$^8i3%FW4=U%#B*SzZ{&weN=Z+Yr29^p_l5|o@8f$VFK^OMw z+HC>zmID015ld>YMn2^QaS03(S3Clds2&LCS@H!!-LD4jC>WLgkLaJE?O~!pta`8! zYBJSBNL|gnGQKAIGO-isYmSgu&5C}flh_621`z={Un!LS-sRZox=8j)RAf_VknS!K zx2fqg^SOa_h=m(24cW)TH?pTC#(vPVQi@L4?LIvDc6^@w+EKm7n);zvl7*f9t4%jF zjMh)-Sdhh(c#|b{NE|;{G=Zpig*2N|L{(HM>C1^q_X2D<6xgMCL|D|_!8c_%Y_ksw z(-hd+Bupa8p1rU0G?HUz;ssdoU2U4?VO0(N$M(=8vI+8-r5wNV=2PZ=s1V;Of;QuVZ%mjITO*T{7rG7L!bVAhStR;`rh zrbsYXwq;e1cX3r3VdrWxUYebDG`PBo{t%+HEkZB3DmIfa=txQ5;^U;P{wFauQoKp|iC%&|Hy>uT)m>tDdn z!_#abCiJ`^O5epcs~+HhZ$}m2Fn9MLLf;i#gaz2Q0PN#anv`YS>)=$BHJ=l`e*#=k z5as3f6}!O!C!L7`9N-V52{7=jZKjTjP3Fx;5F8g@yv`a54*0#7x|Pf!2I}jLRG!ac z;U6^gn%0>TTj@l@Ny)Z*os;w%+~OVGsGKCph_sqXELV}pEWXEu(dKA&vFMff#HPLs z=@F#19;mz!Fg>uu^P9>J3pWSQq(9|6nDR4P@AJ-lsIcC6ML}?gs}X}xp28b=4N5rg zCrAsooP*8KKqAkxP9G;?i}U1m0SP+kmFPf>Qx3=WZ$|D1x{l?5kDKGU96@4^UmTSn zUkzzV0!kQ5I!P88YO!VPKg=x(Um(;K?AJzR`p;#|gyqSOTAoMnp_V_rRfrXns^{9& zzZ}CBau`x(6v92;V4RqIf7xSs0DTN_ANSen^47iCUb~_`3;diRsSdX^7lY-kti_+B zTxLD0nd#SF9GvN?C)k_vhMjYafb%6sq7?0kvLej%_{K#1_!+qqWh52u@x(RBVr5)k z^9a2V9^#JAZ%P{Ff98By|JRw$e~0sB`m=NnK%)K|3c|l}jDO{P|0&1#Z-Mx;b`Fqs z{-1*QE9Xnk@b~QZAGGIxM7RDqK|R~QAUglb`ThmO-#Fj@9K@d~c(%XiIsZlzN?X`k z0T?+WXDx!ialU^+@i)%*pQHG9*w#OD@PKsl|Fk~-#`*pQ#osvJ{~X1iNqDy3!2iZ9 z{tveJORHdH;Gkvu+eCohz!?8goA`GcCi9=kO}4-1N&g23e`yncf$-M}5&t=aKlATw z|JKY90B8B%D&s%!{39#;JF_8}|4hEK{XN6^kFD?rguix-{~W@fRmOn%75}s?{Iy^F z#SDM#7XKW>ztJn0|LiK+{)MajYp?hVhQD@-{~W`gJtf=Ud&+-IHZ!v^|IwrWn{4g` zkj<;CNbl#EAK=~zoTxG#h{ogxnB626o)XpQ?M_S*T$rSaIC4hAiF>SP7wsF)+0R?9 z=-#m+UxU8Xq}CG06WsS0)-LIsDvFVp-`x!!g|cw@xD5F6aEoiC6q=<3iFot*4#A8xG{oyiFtKAUMm*95DW zY|hyVl5FvK+B!S@?oJ{}x2H|Q`5^DhwSBthZYWA_#PXc=ojfDj_iJ?dm2gzj$&!4_ zZWt0T#pvTMqkdcT8r@D9SX#W{tw+TX_+WMvt^RAXyT?1Z;}({!cLDZe7+wG={lr;* z#8L__`>6e?hEfs6N*O23q#{0LC)`&9&%b-vKYnYe zTXRDi!3a|stX8x1nQQWj^NSf;X0YZ#*ofhzx-xF@tZ-S%6z4@%Tdo`!pW}cW+Dm8h0}_QF3syPm?~o+tfb9aTzZ|g_zPtKNY@u z5N$ezzm$FBHHXa0@G7Kw&QVctFHUHJuswy#b-u+7DAvDv67@vM&JcFFz@v1>EzNOA zAs&AD#dpXE2Vlae@@fjRpAaF|}E$ez` zsTWN!fa&$2R^uBH;>zg$<814cS_d*YvRgmcx`az)Xtjtb$(@n>|BN60mE-R};P~ix!ZS4FcTx zZ&*j^3TbMh@)HP?JS(kC&qK3NSaf--Vw-AEJH7X_DHzNmC~VezKHEfDZipLlnJq)8 z+`|RYI3r`xn`#hHpbUri z5!!#QK9rw$pt5M!ZyfD=gL3!4M;uP1em&Y5U^@mfAq!P8)j+FJXt6JaXo2FR1;vXw zycUtJ%eFen$qXDADbpH zIDWE-?UBvvZK^9}w*c0x0DU7qinxEsx7>vweV#MAlduO7hb~@Ihh8cKD=W6fz;Dsq zbEy;P9=1^;Octlc!`X$>B?;naN8*Qes=)!(e3cG6kQy%q?e}5`xOC=cye#rHx%0N= z_~Cu`dGRqG4RkdMgYNhs1Fg70ObCP4(GUM_G?LY9`M%R(ys*6@3Zvpp&+Z;6)kuqr zELPVaA;C_fXbp)b)-|STB&Tfp#$)9mEYwpc)!6QH3-|QxMTqOL$b71sFvSCd(?C5` zh7f233YCXawj$79k}HBwCDPJfThMW$5yQ9P>@U9}@!DSz7jPHOYQVQ@7@2BewhK*n z=#2B_Ecui*n&h)prerM?FU}sHgLBq*)(==XYbozZs6L7^yaku&M%Pc<&A0Y@2h)P6 zV`L+2JzKeorGu|O3!hN%3wlJd`}Z=(B58Vt5+hv;#+GUT4PY>Upo@+pSAy)#L0S{M z=vgL;pM%_Ae0x7qcs=B<(vOXV!|vm)B5L6*d)qvmT19*>YZ z5IZ){potsek6Dba2YCy+o|G;Tg2#GKsfydCycx(Ffn`!kKcBh zpT5JBw`@hiv$c{2pQ@Upsku^vu0 z8wyJ}(Vauo(O<%~Lg%N64X$2C1|JmpR_=jIuU%!Tf7Xj^C7Lub*9LC9qT#lU4ElOf z^RPnJ6m)vTkfA*IP7G~7*%D0?0z-rdL>E$hyn@G3LWbF5o$({@k&{-Rib40tCoDjK zqj&+w^R0~aSNhOP`vC=2W1_Pxo2(`F9?9kuRaE)zQnpj%ngN@I&Zw-frjs`| zVo43sL6?M%wa14762LIxQr^JPJdPMxB_#ZDH=pmF;HuI}q+kz^^j*TF-|Ij5?(P?3hwM;q1H};H9*P3B<4DF zW_7eghSCG#c&(EiP^qK=YCy)8aS2}gjeu+D-ZgnO1fPW~Q8vvH_Ngi%`Wz zG3;EHg4%Im3E(S_g28RIWkXUl0@IdLL-n&MkLzCj-azG6QbyhO(xQr*eHsMt`;vCU z{`lf zPurdX2S>Mq$!OHQ(=D_isa9OQUNe+&9rjZ_Fd7`&C^o%Aqxh^M_r+Iux47EL zHF!$NWw%l=MS)oBQ%WW9FTw-pKrqK+(Oos*c{I1xAA;vTkHK~BypxA8i?Jg$_%4M| z;k->H&Ar`TNC6xwRT5>u-78?ecZat4BUStcw8)DPtL6H7oGa&uStc>I1qjm8gN94+ zU?Cc}aIBL;cKW@ZXZ6=M$m(7itG?h3=G|_$ipvB|kV^y>t3U0&>;dWJLdz1?>Q*Al zwwfh&UXqNy;)${4z(&Jq=F&>7#*BF1W>ry1l(Z2^T(*+BsAbxQp;Cov)lKJ2f}UE= zq@4Kt+!6uo$$47G%N|(_HTaYiNqqh40$Ykg{}Gc0=7Xdjca-#_O2DQ8GDdN=OiZ$U z==a;*aP4A}#a$fQGtqP)wa)g$Sqm&yKtgtlW=&VaaEGA%rFd%TBJl!W^D0qZV0w;V z`;`P>YeSZm3*nziAMlP-A;^5N{FE52fr=wY4Zv|h{+Y$rP+N5RxEOj@sdd4O%7RL$ z;4<_qNp)SO)MGB=r=?G8S*O+o8;lDDYh8nRL|$#S8#V|$UZMf|CUx1J6Htl%vdRu4 z4n&Od`@M3lt_a)oJK~6C7)$D@BPBU4oat50y zB|k&vBbgTsA7SIXg`xM&7+x#6q`*3ku&m{HAiZqFFX3R}{j{As#@pJU(z3^b)uwU& ztuAc`)21YW-c>|VxL9xJd&|p^Dmg z&_)N;n@8Bjg$kEq(PjK{28&-E)nN2Gm1ctC2Ks8x(>b%EN={uKy#D1X3JLsR(WKKc zRfjzy+opeb)(W1$7<6zb;6lA8;Nm>1#DJO~RjzqV-19)trhld!<>ZxAI~2s4>M)2i zCdl4wNl;lDpQb6JS)#P*+#$Y=RKi!lqN>R_VZvsKuLkorFbb3=S>r71D{@^cylSEA z6$`d$ki{UvwiRotVMD%5*cYU+ZF-fr$~`Gbk3owamc(M6A&5gHT0a4}ObbtrUQrdn zy8@eUYc4#)-^*RrD`{*>Y(?3Y029i<8(I;GCKzUNR0g%+$AtplB+{s0`JQTjMu+gq z!gw!myrw)Su@2J9T@of*cos#G1M^C`GapQmab->2$VHQ5VHe+K^hr%dk!#GdxD-Z{ z*PVt5$vq*z;=lWbEPiphnqx)1?8OI`A3=(f`@(-JO1TPFgT7QylPqF;RZ?#h&_B9L zK8}o?EXnPj%GW3#UMX-r#wD3&H1aFPt?d}mmk}oumvYO~GWA;DeSAomr>>4mL`dmw z=+s0(my?=HD3bg>u8x=~otUdo3nFl7Nbbv^hiUcbHRm`NU4IW!S%?GGgXd(DQ>neD zOuk1DHitEd0@nB9DlS7T3e4`G3Dcv#ZoLIY!rrfRq_I@}G6R{X261net*;lv%Vb<@ z<>D&|+;)V^Wv)Nm;!4hlLf;f1m$Xr$*?qH@U;r6d^wUdp*u;2FrN&6u;ex#nQ~Yfn z7@obxdwSz!J*lC7F)PF#(~vAU|1@;I%sDSDdS{YE7b#C)@qlse@l&bsn*E70;F5G} z*m=(mMo;gehyh**y$i3IQpQZb(_KNulmfCwhD%h_3l?NdrGS3=%|aa=ed8<VCsgLFq_bC_OrDAyN_?2g zoav(WfFfiuJ<#v;BE5B)ROWbM3#wD@CFhC)O0n=IIae$$W6CNP3Z}ibkqjjPqUh_W z%y*oa*GT7r%YNVv?7oM1+)W;4Ln*J&o#6~zKk`rWII{QP=YhbM=SMp zz`thp>r-669#lsxn<=uL7z)eM@tsSCA6qL@A+Hvc)0*ZdM=2MS491DFm$QHHGm1dyJB8I(HY6*Sr=K9?^_9(<4iuS8rm&26yT$LxK{TikAnJ|T( zkJlBNYwXn8FM(*zxOyQ5e}fEbW|gSRLsv$ReA#@M#aCF4_B_B}-!uOsP!^G^*1L-*L4fDwf(A@Q>x93Sf; zlUjQkbCJkKq-U%(^I^KT@Rr{{okW}%>a|6FbFxPm_s)>;WMDkFOubpckUi~kgZBe`r#(SH^_FoN6)ZR9+TXH)N?Mdn&kiNh zVhJ|gtnP^lm#*jo2NNtgjLFebnrD-$ipKU4$$q2l^4TQL0=I{^a3O3schM$YmEj=%LbOw4}{ zzq9{~@H_MGct6A6P_O_Z?*NVAe~yCX&k=Zl!0n#~ei<15s1XJZR$4%PGceQBGBXh{ z(zDUBGyJ0n_@8aT`ddNu|JZ`%&p~+he-VUdU}C2QP&a=?!N|@^3y?AXFQE8y9G?B} zuxg)EGEyN-IkVKH*{)YAi z&Lq4JnQw!4gg3;`T4h{7fk_6ga3Ad3m%8Zcs;Y9W{J{R}XG`x^K}{wQ%(wNf|&I&F!OEgqLY)jh^zOE(T&;y zO*osI2o|+W|MK*j+mkL^ybzruc8vsY_eQ*iEfAog2jhGWh7A!ECciu}q*tEy#!N%W z{k%9MHp0!F0h;@=$qN?(MjvY7%tU|7ca1Mr{NsbhH`7OiQoHvDD(t3R14Psh0?MTQ zT#F=N;e=;%-!e$Mud~{%ANbnGmmO}QC%Y%oBSu0Hl8#m>vZ#-2zz(NK{Gxp01G8UD z#GKHAV2uhEYnBk$D8%#~1#*J(EesyHur9ENxj&Qf*-Blq3 zm>sL~(`eQB+8ho~Q0yVMG0T#+5ZxsSHbf$Uu6`3wSrX{BXFq#dz%*jBgnsss|6&Rx zpE~PcvjjSs#@!xCew-Ic*qvEiy<{3kfNmOL@K`HujpN1lNe zsz9d79|_3SDxhYX#ieS6C`3WjL_tkG#6jN(cWxXwp#Ukz)|;K6RK&i7$t8aVPfF9m z)XZ0DG02}?b%?6nf83K3`-0brd7y+QQ@7Q#OyJDy@I#oW`D#iu8G>K!xL8WRv!%xq z*YB5rjlV3joHf_2)1(D77LL+^!7X>djJPOx_v_RBV~k|JTk&DhJ2&Ri;aN3CsIF0s zpBGRd6{l#o%PTc4hvx$rxNb0+s%F0pmO3+DZ`=#ZBm2Is)$@vI@(Q&Mt3<1H6Wlw9 z17)^;ZU&7bYwodq&oAG092gq~WHd?)fVMmm>X4@ZLY~v>5IZDPN`Vir1tj6Kgg+MO zGVXgp-xuhtFo{@48t(*WdW=rJKnJ+Bd8I?fm%`DNCL)*@?x*<<^Q&(w>H;&EwC^E2W@_=%Lg$!5|@e<$tF02b89M z-4s=D_9hH{wW11+08ZfO$({H9A*R7eoR21(n^WUK0}Z`*9x4 z(X=YLWQSsT>9Ttb=k9UWnhE&z3Q+;7c8eKhBAR;dECzAtHk@{eY&d@6k7n3p-k^{z zZ^%~Os1Pf>iYWj7fgt8mR{MmcYMGc3`(jobh2dD!1Vim~{f0azHJhy&=4BUA(ojJS z<_6nT(&F-~76(BpRo3xRiqZoF%5=c*R);E9Zi}1nlYx@vz8o1Z51ZO>0nIAwTJxLN zU*6K(eva;f?V^*5$c6o< z#QbLibcw{=q6O(T9mTGono(V?{5|58MJ&WCy|B|w|I9%Ux8mwXbw#dG*7+s%>dViq z2{u1vy!+gi$K-sDTNJr44c$7L%&89BY|$-Ld^;Pw^@wU|E1jik)?1brv~vXBdOjC6 zVxa8RM4YE3GjI_!H%%j3=i4Q&-uM%Ern64odIf!f3dxKTD#8932=_~U$Ddg>|2j83ufvcSP{3@9`@_#<@@jRO zmc}fcVLARxt8f|)#l~Ph5UPgNxKAp`n-$h0BtE@`A?8cfgmj)PJ@r0?f>`(E_KiMF zEY!twK)N(9>J*KqX1N)gM!C#^hA*(DHDO_vQP~kA%1{zE^odwSq#~93%JlCEt9<#5 ze4QKEnC08!6UB)|2+a&M0>ya}+%2Tnpt!i55Wis1prk86c^@lF5k!*P{S%Z%-|$*S zDPHyQo$C0DY?j?k)hNE&EiKF;rUTMo!`4*a5(KUs^XN{Q7AqIH5fZn@=Vo+nnJ=9Y z439vj-+kLcG<*rk>(uKe57ojSq%TM_QLczO?B*#kwBnO4=}?TkE6@;zi&@(BDm8i% z-NpGp17JWz@m>pYjh(}+LCzdsy>-6x2LSat991ztrJ?$pD?%op6UvBT^qKU@5=5am z_-bxA3Rb9z3=L4k)6gD9ny6ulCd0Gk$lnJW&bZWK(1~K2BGePXL!7^pb}HF2BEI73 zNk(XRAw!-#xRHQ)Ure0SPp58dPBJ{_TEv1*n_TkfT%d2{NY_JqLio?V_gt<*b0dk= zu?Tp?#$1Fq=SKb-AkcITHd+SPmaaZK>i=9yHK@Gl8|LpLU44w%*_h+AGKfZAe+G+N~S6xctM#9F)*gQBadyY5nnjQ)lW{DAF9|3u7 z^3k9x1^A8rp{ECft_ov$oNCzwf7)su(_R+Ntb;LoW-7c{w5$;AQ+oRN7L!ajxt=IW z{3Nw6?0GkH!ZDQ%qM`jqVWY5@Em7mk%O{D!ZCH>_8G`qxVze>7nIq_2IaAgv^u6%|l^8xZH zl@jA0Jc#}MOp8DC{OWRsmVn7e|FzhHgpGlj3Ef}x_8b5u{$J(wEUYYaLUz`6j!O0h zMkWC1zN>|iiK3VwouGxYle~$eke!Xao$c=@4R$&STW1qTdpm0bXA=Tb18XP1at;>O zfJ1bEMFE^mgiU@gzyQ$d+nNFN{Y*@N=d9m~`~RNIaJmj}k9ybn;9wc~i2(lNGm&Z;$P@uYJuv{rjhf=-mbfY7MGLO6|)5vEYuxMN&6 zL@_*-h-m&>WI|qHR5IlNibcZ`N-KktwBO`IGHm+zJ6C#qy&2m2m$c>c;!T zyCd)EGN0rppg;e8s}>eyVJqi4mrvFy5{;bt_~lvdd9N`)kLofGDEU>u^MZ%PC?t(Z z?Ce)1?<2q5(;;!ATXj^+qHg&HD4;|LbXc{TZYitnT&R6!mWQa=+QtX(Y$Gt>lp;Z@ z>i`U{tq%s`!&xf|K4y8}9)t<&L&CV3%N@w!Pva zfYA@%r{Lf-;DDiR-?!Vz-yanY-f0GGhR8DfpaICN4cGVxDZ_f!_GfcQ_s!8#}XHwiON(6tsy_M@J`~Oh&Sj*^lA0 zbqG#jPwSx52aV=APMXipcW<{=0m}7qNXo-TLU|O03faT>-VVlSpPILdT-yH7sTC3A+ zk<4nFim1}2rEIWG#f2@Ltq!&NVg@o8^}wo0?d!X+n~v2Sln})?HT1q9@#Z7QHp*byT_vUbhv{KhEa;UM8zw>z(%f zRzBqF7spx2CN?-fW@?k8zF>JAOmNvP+mHUXCBUS7=Wk+8`{@h6l} zc;lK)N`GDjLt~?BE^asK&#;Wx`|RD-sjX2IcW1tW2DR-sal#?ve=+SU4!ZZtZu@++~=3QRVY z{q9$3G#TDo=)PafA^X|81tYD35^ym??-^{f6i%Ww&`Afw&?}!SNV>k;ig%7|zC>6^l+FMP~J8TO( zff28H(j019d-m5H5OE2o+ePE+aXRgPNR!~X__)2?gO;m~JC3FzDkt)$?99a3B{$O~ zr?B}fJ1@G8C&yWkg14c$=$-f=(N!Xo(x&ZfoV`|6mTZ^yFXV-jp)H#}{%im&&8&vG z^MK#VH}o6XmQy^RSrR32a#ZJ>naHk|aiP51kV3vFs750Pk;jtff`G1WmKEu6^AH*0 z{%Tc~Sdq-j&sDn*y+yaltV->cnlVhD;pT6`BToy*b=#v=)gABCefd?06W$g)XqG+? zdeQIYeG}|8=;+AL@8u+o z6=!B)Syr`)O7UL^@s9X{X3(Y6cH3sNdT#GiUTikM?)Fj5WQOP3CDJ8A65{^qDl!;e zzOU1G`>43+W<%F`efC;;qn4$|(PVwv3n-Vg$!QyrCb5X>Es*W7$k?eW+$Ew4)kogtkml*3x3NxZNL7?c#IN3;&TVyn#%P zXYZ5j9U%_GurYFJzCB%jpx5cXXt?Os?R3nwKRPM?n~$~LBi5?3_tpfr$L zjL?$AYB2EmrorE?`|fNL`Z;p6Zs7*`8tU3xb$1@3muI8vA#0-f<4#Xu5d;y^C6wFi z{uJQS*lbpu-(R1yva*Vbit_UEK)~Ua0Curns>y9@Yb#EUR8v-NQJwMTu$(KozrPnI ziuI=n*P0Yr_(npT#c^{vSK6PMx#7|^zv8*^oz3^^_9(O?i4@S@g(jOBxxM!dhN}kN zKC3?9%`n??)pXcAp*mI5n`JdxF08+t>#loce?GV~Dfa@|?Z$aep8qtnPlIjCP<0$9 zFd#)OX~XpT7S)~IY1`zmytr3S2j7)5*)ry5^;S7hr?+~`vTU4<>cR5UezLi-@i?4% zZYNqy2VR)ujH{sXM^jT%`$d=6?cubChsSTX+3nZuBzr=nqM{NU91QT_H~ZsUKF|@xpZBZbEd{b^SkB?egr4HAO)kFNXvC@! z!#sFv=Z5J8C(AzN0l8MmSAstaFSQ9v_c|bYmam3x+|($MWcth zJDcG|CL}K4jy#1a1drAmn3KR#M2)F7LKa3D6+BSu?c|JqebawpEqLQjh8^_wdRQ;3 zl8t6&F5$X}Y+?K+T;V#zo}Y^lhltY+sL8LJ0uh99guFbrf$(!nwa0G{XFEfbSIdM( zQ6YljL(QMSpY@}NHwL`F$-y_`*0V(K5f%5Dg+_8uhZQc8w4mG&71IK&-?*1@5Fh zc5{{=CN_$ev`pnOyOK_|po}qzs8!?B1E^n4bnOnS+A(6{xha0<0ye!f=LWFQU50kr3J+dmLyYDrt7)J>mmIy;Z z|J&xY`%m{;G#i>{?nP&SVNsl-v8#c`#jE$MUUi&t;QLPVz+>J4n$Oh$-SZeuFX1)b z^Yy6Z&(D*esb{M@;>=R_Vusv?wgUdUiX%L_bbJVRH1x=LNM4?XK)qCSwI+q~A&-)C&S{hk zLy!zZ`Wn>TeZK2`-|PAL&vN$6^r^0@uDiPK>NCZb=?;N086h$8R~500r}1$>acU`7gn%vA&(R zkMvB;FC#Yl&SbiN()--UJf1As?9HW($t#b7CEk|bAw3X?4fuRwd0RWC<`mX*Ah|Eq z&82`H-|WUl%z>eqesh-D=1AUUp$MZK*f5|8*|*0{m8O0)5e~BKM>{ffueYr5U1~YQ zAA2J%^rjNg+P5I?Q_~)#Ic!@7?L91?znjnV@S>K2AvQ7PpW!0Cy%v%@Ct02%4JI9A z64-FCu(+A;N!%u~iu|EJ4T42WgnxN)M+JK~54a_pHkeK6(SYmX@=yeit$k=Hvp@iB z9fY~I@Wo0x_=i7FR%sYkXS}wE2OEoYk^@&}10PMLIPL*wUEQ4Z3@lSZRO}EUUp8-CsJD9g|!MM%2Mo?pN4VHZ>Gg&tfYkvn8jxAO_5s*tG|q@FX;%szwJq* zyZwO1cDp!gaA;Z7KcjKFk!8w=P!_v}>dXZGo6V9Z_m^1-CBY{;<08to%nf~_b34L? z&%P-G9;NxqFL+UIDa**_|NjBu1S%TwoW%~3Hcr?LfY&91Hw7cLFX z;*Qi8#~h-u%|WIV@69>_F0fr?TIxuFVV1u6;{%+Y)eW_i*U;!MGHE`+3?uInlx;h5 z_yQQa+#b7E*n)VNZQ3;t$)8s2L>@yDx|zdIKWwn`nm$(cL0q^WrQy>PUqJsFw(f-@ z5ZbDAL03-|E9+Fb!gt_nYikJ!cZWB_D1;rqf5lGWm*pn6l@#ijJg_awKe`vk&XyS64KX*X&6&tyg&uer5F zKr?>M&zr|vG>1}VsiX*GBDeb#(8C3>SB|F1klYJ=672`QqC z8A@>?nX@n-(Hr$N2U^BI3t&5Ja$yE@PqSp-M8!)UZ}-zgN0?e( z)V3%pt{gV-S}mwC@I7`3eBC4_d3w-o)>bjaW#s`*b?1W&hlEL4ws^9}3-L~&ywrT< z&6_uc%-k0!H)JnJq-8| z?X1-lw^owpB<&ZQpZ`OR@q0soz%R31FtxB)$StU4z1(SIo@mk>S`lNC*f%wG;!k}f zbz{DyTjH>Z9QviS^x(<-q#NpZNyT?rcO_FPu_K(FPDO0vRps+b1G+5-TML~VDiQ|` zxo%bcDf>yqVGTUj&aGq1lABs$=sRG6lY{) zWMwtm08gwNNrcu`ILtg=fEZ|;{0xx%QdYJ$QK9iN|J{BR*MXLLehD$%+k|%yi_1K! zmD5T)86yrG$qa3+ts^^ZlXbuImlV++43BAAiOo8p>psfv!tZo<0QwiLDGU#^V{ZXf$uRo z3%Esy;FOTZ=4^%2LgYNe1Z}${vZR~G<D@A_`ULjnZy6$^=*fiFe@iMO$(`TWx5cGy?lp)!BvvncG zcdFXqL+l5Uc1kQP(@2i6v(>61z7w@Ws9q3H64=1yd(cj1;Qq~>MQ0ntiXv0#K`*zL ztK$f2anFGd6&V?G(b@(}D=U1Ywsv+d;*G;vwe+TtopfTIp>ocZpFirG9(=#KX{WD0 z8A!tP1bWSPKHfra3vOHId%EY_9%KN14PmC3OQ-4`xlQbb-FVp@UIndKQeNfdpE>V_ zi}Ts;4$+UcX~`z;XX$Nngxl;7;=R>U-g&UVf}f?FG*)C1Fx-&|R&nd+A?h?kuT}mT zTAl;#CcE}pu;OmWP0exXk(`ABm#25x=7uxV#a z%C5?$_4#1yeYYGAo&A|s0UBH)KM=spQpvqcvMp*#g|{mKz;Id3RLbqH*--tL50)*`Lfb z=Qcg=b{7Avn4-OjWO2Rm^WJiAKn5s!0x1l4aZN&Sa zGqko7)2)dp)>jv2N(oaJ=y5OXvP0~gJ}uTN}VXgK> zDz6(b+z!!GPt{)SFT<*9Dxfz?d;Q{bRBSG#D5lFDRjwvU+w)y9^6FKQm=@c>SD_#I z`8k2)S<2b*yoXsGNx6VaM-ms{mk$hPFI$Tjr9GT{UQe?L_l3uBQa%^<%WK?sKrIOK z>`mncTiXw{?w%a(lwaf?CPxb8T3m{Rn$>JlW0%;U9B9?$bl4iWqZ=2}KHPt3_=BxK zF=0S_Z(B*QWUdx$%<&gIYsQ97?~6yecQT`OUpmN8&Ya$qup^)WJ%CgKy0_n6-ohK` zq8D~q_Df8O3v6kN)7gZZ>fVc&|0}liOhU!PA<5&GhzGNfQ{5z?PeecN^0pu|GJJ@n zwmm}MU9@$oF6pni+l9G3Hs<`wpsd5me7w-7%Hm*%1rD#AkHlH%)`paQei$&(jwpgf z&EJPuU9`IIfAJYzrYC$j*UpEkpH4ISlx9Ennb%Vy-;)=g!)xmv6VTZ^E(_we(&uU| zy%%HH5ynXurafp&=(G(pF6z=VMD4lTU-p{6C+a_pqnC%jL4O^$8zE=oG81AwE+9^8 z@F9MCaf!|L3->gm+pb(I%*+h) z`I$nnMA_1Ns6GxnH;Gm{K{TYBy)fpYC}jAW+Fg))zz zmo}FH>WFOyWRyQmF^5jUdhl!5e`~2VGO|{5NIo+`Vv-AGKhooNIgXHr^YT#Zhl)=R zsH<{woz7(wbzNjz3qiM=cT+vr8!pGofh$p)E5fzZH}^MiIQa-RDdNA)Lk7KSi*A~U z12StqpEK#SGc7Yw5Dgaybx9G+p6}>w{!1x3y0WhCLeooir(q3m9|?JupY=pLP4bZV z;n?WtB?$B97i1oz=LX~!|D@W_)+SV6sq^x%%sbEH?IpZFE;d-9`*NB&lE=?*Sy-;s8`}nFgi~;HFdem zCfS4XJSEj^n#J-MiujwGaG~c?DF1elR5G*n-5JF2PB(@4kVUj2dF)GE;r7^8_*S&p z6(FhbmXJSKf5Vr@_wu4XFAPz(-0vKc=zQmaw(#F#3%s5+n5q10_(lst3h$y^#ddLF zZ{1t+UAZ&lf3|p}!Kv-=CWQ3y#Lx3>?WJ^upS+}4rh>m<=EZh#=7dReYQB>F?H}c< z!Z^SGJ^T!Imss424oBxi)i?AJBp-H#oCDBa;RYw#F%B_aBbG)WrF8yrf^d)m>vLZT z`wZn}uXb|<69E^jm$-bMxX?tXHa0$3cT(UYAm?~jZj^EnY>_XjoA~@hNP6mkK^m?e z(*H);|MN0`n(%CZAHTNuSbp2n|NJG0dp27jG5F{HW8^v(P1S}H+1W~{ukgk4TWJ#1 z|NW$Y-8mBwwc}U#=aat#1|WXEgnrBaUtX4SNPXEi0HOc*0nIs0_w6a81?vtWd!ua--`KF?f_ZP|7oB9{ce8y zAH|&6`adjy)nf16|N7iL$C>}Wb1s}ITc{WKgC_C$)Lro3;>$p#z~~4y8eI@zZ2x@i zmskInX8IpYjOO{b2mB*Xp~?lU;y)@q61ei`4&J$Nqd_xN;19qRBf$Ugvpu75X=?WE zZoVZwApP4Czsf!rjM8GyrwE4pT~7HgFQ+RB|DNc7$g}ePZ$ma*MTYz>>6xb`9v=?A zy`GcN2u-#OBS{g@WmH@wXW>{)WY#Rc=HU^c*=>WL8eiC*QDHBmlLKY8LxMyNwCy}i1KGT8ZME-)xYrX{twg4XS&+!{ zuh3NO%UY58WwP7+ z5#TvHz#=~Wqux_bw^i)Tif*l%xlau%OK(Oi#A|PCc&>Dir+x^|Nl>XZg6Xq)P|$r{ zs*DzO;cKOf^_;x8x@HDRY<9k~rZ(Dnp!bt~xsg<@ewm_5>@#+HSNXiiSdf;f@bmkW z#9y~TN$@+Qq8=68=oqZHrlnq&qqzprHpq8f>3Q8==#UmV*CvV*$#vVC#JnvESJhYT zi7hgl_$AW(Dk68+Rh-jIzO~H7!>+W0=EZ2mN1NAht{T#93`KoCG)?LY2-PF|nFQlK zkn;3L)UTe@1Tc5jM;edu4Ngu9!e(3iylq}F*AHZih{kseu*$7hEUcg%lNL2!YO1Lj zngs=GYR4YyUyfHlpn2!yT(b!;@f&?!T&(7waB#5sVW<+))ymYQ3k9yDKNT9eFa>7y^Y!5`+`c(gy0q z)lsuLn*7gPx&jRt;zFr3c`cT&w?doV4hE7OTgaDN+YQRNF(fD_uQ=X|+sP>LR4=c- zsgb#8eVfTq&u7O^Xq6phacjt=F(0y8`my`bX~-tfz{3I%`l$bY{FKIeyxS2dPRoakyQ?jPp1;92und9Ps6!Rbj#S-_9tDZV7**z!-A$z%|wBv zjn2d!_>D4qCH2~p=nwrhWg@b*E^y?T-P73Q$|9jMp%m(E89=P*HZmGpK%@p$UeU2< z)=90NnA=<2TG;s{?Qg0d=xWlms0UQ@WIcrJ3IX_4`T0(CSOOf5@qRL6p!wKxI{`SO z+!Rl!l)O^M!w5!}HqT3A^WPuvTdAWut6bMsa;vW!X58J3c~Urb*XC9hiFO`_UyFq5qt{D5q8AoT-m=7kUYI{%Agiui@vji~iuH9=`#E+!##|xS zxp3#1Qblv9v_3f&7Oiyc)x_b|lH0fIDAdVZ!mx{}o5evucfm8o9^V*`I^_2y_9Oh5 zh7Dpcc6|c+00FS0Ytd3_WYJ8jEtI;uf!4q~pPdeM!QrtCPF<6Zl##-x*PSKITbtYc zS4cVf+)k(s9B0Ga9z0+qb&&V$zPQOjY~jp@Rj+@=w>eK?d;4=HW2w7?NbW0VxgVm| zZw+m**YO_L;!eK{#d}sxZd}VBhkrZ^KM#tqfxJ(}>LFBcqAjf_fcOPWME+p+6f3Jb zx!^9DrT)>Z-0@RRogVkH;e7q$E!)W)>MVx#wTWzMCAPUZq7PSv!dytw8G&u&ISnN~ zUQA=`&&<9|f+v; zg5Es1-Sy$7jcg;@PeH*rlM6B41Pym6uYP?lxa~dOpSBftFjQ>j8MIOU^m5FNrr8X_ zt5>aCBWp+LY2Z)6FAY0?j_1Xng*a_&I+mKqpo-PsUgUO4_F5lQ%c;;=s5x98o@v6d zfb(ysH0z}e$g|SrhTpkMuBjBFpcKP7NN${y+n?QSfzE69w9D=ulDop6T3lLZFc;VH zxdNJ!Ak;heep4rHhpvQkdQ8ZGpHC=dc!kyeUstT(4&RfV}9EIEb)&rou2UYPCb=d+pPs5Z0H0^vJ zDKasu0aa@~o0W!d)`_vPOlaLNmTCcWPv}qW?hifH(b3Vs(UxIKhvYo+waqWiSu=a}ZS(?hXM4!s$TQR8&$%tO%;c>M^?Z3OT+!0^9K_`PZ3qen7d3YRe#i5FL>|sBi+C)23Ihig$ zskzK(!^3CeIQdb~;I)lQr;J6Fz*D(k-xbH(F+9 zzk_<>XB&cml>KRuaU-ZC+XX8o3c%ZMEaJ>V&z>YF%Zn6PTLgEn1rz_NIFRA}=> zx&f+1P{;LA*p;VQ69DeV5zzIe<40!S+6=zguo1`~L2QL@wfaI#ZwXF3f9T?}6F?2K zWS<%v6S3%`;H8zn8zp7a`RaxcLqqLm8{306L3ba%2MN8t$>}=?&F(T`mIcW0QhakX z*V$4tQs6)(JXDL2sJ5cgD7t0-hS}dEuiNwbdvBD8N!F)QO}H)ts$E2`vg`e3xiGC} zv3)52j?Sce+E|%Vm@O)wlvAlUh*qQNko8GEiSPD#%lz0w+x+fjE4;mJ+azsLqsxx z+EolkPKGo!*HsqO7*Edd8$SN*+=3xG^^D^~{j$2!=W{g~56YBrE$_1h7F4<)A_fYqg>amczXKS$;*(4$JC6@$dzT=fM57&1mjG2s65$7(FrXgqv`~Az zJ8sY`yP5ookN3@iMNV-sPkhDrQR_V{$cr-fB_zk(++117^+z%?0o}dk4{0MVssBBb z>_OBA*;?H1VJB2&s#~CNfCKv`7nwKr`|C%3ThwECq+R$UuH{b6%#T>Bf@ z^bgz*28VOy-bX@{TyzRJt^!NN8q5jpNKkfUeEF8I=E0|&KQ|s38Tp<`g>}+0OI|_2 zE|@~hz2~S^;M4+E}U%_+NKFK9nuDK7ri7ji{xjn6_^WlZm6F4vS=sn2{ng{c%nB#siP z=(_x@Jk2eDqx2Ak=WSDumvlMACPBb%nJ8c=H-nXRqC`tBkSG7t9SyHlI853i6i3Nl z&CNZuW}Z>MQ(&iuP!6G%{Qej3?x6MvDW{n56C#eB_NgUiH`VQ%E8K7tUon}A zkZ9JrBweF9>_M3@yVq)xt$k#uk7U5HCueYQ=(wG9oBZxXn76!Xc!T9chxI~N;U>IK z(tg<_Q9Zz83&Tm_G)a6phNpY9q!rOsmWPhP8x7Ngp;31A}-B zM7E_|@jj%sXG4)vB10=G40 zE-p!j=~o9s5NHjTHVP$qjc=rDqX(9&U)GkD4V6c=R?2E?$EL@gm$Akc(&gTN(EiNN$2U7S2k157 z*kZVL@n{f%m%k|pITqy2_f(R_ge|&0fFO{-tF5KgHV-(@I|TCXCCTk~)64wFNH6QE z-_Z$nh>n@<21to=9k;XKI=VPrEjf}b?qwR}p@EySiF2-Kn_m%H%j2}0c3=h(Y0H2L z1spXqODxpjjLXj(=u1r@&{F*f<=X9exLn8LqQk5YNigFet@lPhF)&y=${s#?J*M@( zsj2C_l=a;&opHSCMk>8?Qtk7~cN}r?K<)Htx@>1$>2Jmi9l6hRT}_@!)HSbRGJQ|| z_LJIDyWnM|UeGxPY}vGRojxFi(j6A&@U?&9LwcAjcRSI3@4lc(pT`jzIu7{|kme&n zFnru;;d$jvoa4bfD4l>@E$wxLheJC;N=sgNuCEu1(Cvuw;XEi^ypy{Ju1_Sr7I4Tl zU8$`F42ImZXIyyDF4YY#Iz^BGk7*a*%`FzL0x|c<5g;N(LR@~}O5xm~_Y47^TzjlPZ+8&M zRV*4TgJv2}o(%|Ap@OU7RV=JJKQgwr$zQ@mu4(&iKi5P0JZE*uxGsc`U3{S`rS1*5 zNp(a@!y`6~nnqx`{&;eQ-28SbJ`(q>pI?&MK8K&aP;}j!J8u@hLE%myEsF2x?d|mw z1%{}hp)%LiG4NTZvhEMU{gab+Rb;%e zH`nprpe~HO*0@Zw_Z7P8c#PSR4kndLPfZ0yOLCFpljFlG*HuNj0U75+iA5NvgqWC^@5vEp7tP7Z0kIsP9y1tzbIC|asWVB`t&h?( zl$W1hQ&%^k&Bq?-qv|;;_AJ#tTz_{Rg>+jt2m}Q6TZ`rG`T!zoP(P(`1pf{;=Q2@i zQ#Fvj!S#{dot-2hhrg(TlmhXn#oSfR`jKj)JUqqj8`FM|y6>u25JlfySy>^p&~m)E z$3^DFqi{T=m!__&T4>eJD6GY?%XBqU^hJMLfrN6K#aBMoZN-$mZ(K5ofhCqM?@@h> z-44iYT|KFarbFLHYwYcE<5HSH^mK zjRY2yw{!2sZ;cU+S=qdXpgBR?3}f>gIld{-!TpE` zW^>(R#?{+`iDj9kA3D=yE1D@TB{LUdYiVgYn4@WDXNMh_%-`YkqlE_AX3U-)N^+s~ zD)N@q_3mDk_*~0J?9ztok{=5SRE|{5NDiWAR5|K&%5393!qL;44tYqVVRW>76hXEa zNMlm~V^2YGGh)2LDXXE8sFQ@rifS?yB|_aSHEZPKQxlh7X;1^20sN-tk1h@%%{%Wh z93@loT3J~|_(C8M7x~+{i9C8^H&uQN))#$g73XXbC&mM-ZisXKL2WXdHQEy z2!WhoCcO&B#%^eCPLBO#<*lAJe95r6#JDebDgw46G|6I<>fhzA?ZYFx^{ZT$vO0pl zD8zCO;+H%!E{Y3c(|)qyCoRM{pQ=K3cC)g*B>>OT2)mAx>6$C7kloxP-Y^}S_zJquPA~}AryJaz(>x3 zOE-pdDOuUr0s;bN!VGV2DgxiQ?ZKrH>qp~cUVyR&*$6~e*B(_1PvLPAsio^_PB!Q! zCenMwD*EoRm1(g2MPO=AiT@T5s@?Cj`=OGYDYWpfjsj$JhJ-<-@|5bCo1~;cte`X8YT+gW@g3D*OjJLH z0W(PaZs3_g@5TvGv{b{x5P7c-EvGFT)HP8rVY{299r zG8tu}keIne{*svXd>s%xi~X=SzK_3$Pm++BsMJY(6(|cB3S@=6P_9f~z4GS|yq``| z*gktkLyrtO%magGZEJ|Ik3MqltkGSY4lQOGT9032tR7SnuK2=|J-6vf`fG`Sp>>uK zqtdoYzLP}6c-S$C3R!&}ug*g}0EYQIRFiShr%(4>a0YjGU7Z9;q-5Q7*K8%DvA$k~ zfiDZA5ou{@rJ$SY;GnUw5e|nNSCn~Obi(a-6nE>x{%Q+grci+qMu4SrZ*z+ZtBzrH zD}n5yUmiC!-vHdg9fo2%0(APyxz8bG>Yk4@+tV1~t_J`Ep8gZ!cS&}`pqv=5`soAU zHCV2|Xn*0BlwRY~`uh{%Uu`We{p)_+Gi&RdFJEq!BwhY#j0-&f!U!%B_tNFPg4{+06Nv z|A$(`$N#0%|Cpek{uv1UnPYqgOmrP*b93{`l`8^vV|>EGRz;Fl+>@6-Xr27{@dLC9 z4i5~Zt9`Plly??$0U4Cs9ZE{2wCK0-dqR#Qi`(U^%3a|sZAO14UNQ`IIRZ%#*aA&e zdz3VuJo@^DQEzq^B<@R^ah0fiLu4%+ZU=f+tiBjW@LF^^ySe2G!9>ZP{r1&aKNKsd zWbJ7DlQ?D6)cAmNXW%>qI4DIzLQ>fRc9mBM2!exyK|5(G8(**?=rPUCmb((fsimbA zM7AWxr2OG+qp`Z{vu7W(vSgMWn9cgc=84mpK>pR&D($`dYj$S><(nG?0dQ+uuWPko#?lAL4IW~+OWOVEyuJl zCVR5VO(Ez~oY>8xn?5zCezmm{8xNzEW=lX*#SJDVrdSS$xpf?;0cht#p$gjM8QNYy zNe0b;DoRRMuU!jjSq06O)6)T|M&?BRTZ^O_+I@Gd{^EH{Oa*EQPBfc^wY3I{>iPv! zpj;#6-~_v{Y*=C*as$>K8vo_Xmlh<5XCh_*C%yL8qGdt#<8!96r1$>M7dZF>4V;Fx z6Hdm*o*DdJrlzJF(~UVFEsVc@q!7ZR#RWw`oTgji)k$aRC~$Mfuh3}kwXsqKNi&0V z{YvMhv&2u279>rL(QG;UjlpC}S9yaI6w|2-+Uyne(m%> zz&ohPfST|7mi>KqY3bL>1#tKv2^Duya!sTPF=$0}?h|ucu z1k8+JW_1FEiMyxG=a+_3+6-MyP18SpdLU_QYdcWY(Gfg?O@ba}%hsAs{YXhkX%1Nf z=EZf|S=Ou(F`oZAe&^RRHrvJ61*ybW-twJbbxBQmlO*O*TwDx#G-hbQ@c=`jR_O5r z`v|l&#fwysR|RqMH``u5~`z$hji4;pkG)Et~)q1L>hjZn;Cz;1hhqi zgjG%^mILJViShzdU09ApXAwqt9RW6r^O%e9*I;wudHgj)Ay$k(udq?uC-kUj9OTr{;>&3C&MQNZxE1Ik4OoEb zSJvLd-`1N5yGkzbmPrNi#8Xj8DLN*`e!Oh8W^an1s}(@aA847aM(u*ccy~8P+*l@z zO261NP+o8^7Hr<#t>c8ozkh#r^dc*eC}0-R_ptPyLU{Sf6lyhvO*`$X$@&OEqZ}Tg(+w~{Z1R62o z{gY3$wX2XGNT&s5P0i?_V04r5{iS8lB7Y&rWzQOT$x>g&GR&;a>iEVn-mSAl&NUQ| zeOTlY&N<}$M;7ulU)pi0@rpUY+0yx+QjljAT5+pfTHNGkNgR*Gv8%H)sP_p-N+Qe4 z%S%f&*@s=jp5_1AG>?KnUUCdZqdObzY}ed!B_d_di2#5y(`s61{Vf`{j>KG$huHoo zhqY(_-g}%Q{`sES5nwBu)ZbWqow%^%-LIYPIljD-@AG2(weJMugOnv)cEkSJzcK|H zLU5uF6fiX^x;g%ZVE<$!f7}FQApbie{U4C~jO+}m|CLt!PwBuvIn}Rh;a@WXY0rfg zah^TM0g7;Ip}9M`)8KUewpwkQaxT2Ga{v2BUT~W5k*6#9RVW^XjFpj5bp`|M&~>u| z7k5K5cN#+`F)7ZckzR*Dg*F=pGLmwIu8+scH>d7GraG_{fkr0i*kCraj%*Ts(_P+~ zJF&4Hsm1e9{i!Olg8bw%meC!^dkA9M&Td1$D$*h*Vhu%YSUFHdCDRtev5|5r20J~e zf4RCE7@lVWOsI4|AR0#Q`>}j$LGqnp6)DtO{&qq76RoE14<2z6VjpB%+k>?=8@p57 zv`?Nst=d(qq)V*&-ugZ;*Mfko$!#4rYZ56TK+479;asDZ_i$6T`R?6m5|S|M5d@cm zSwXoF;M40dlxD||=|`16$ntTR;p0t$Z2g?Dfh&>k zi9vFlkv>v3cJafPr&^@Gdy}(v!i>8;pZ1GP!qgk4E31-xFYM)E_?P#xw#BG;fsMjzXVO6`U zXwUT;&Wz&IgOtF4$bF*I9)5`v?uF`$VY+)qbU`M9f=s#|OBwqGu({qJP7617sZ{+J ziY|sL0MDwBxec>n)Y5J~JS3sL_u!pcgW@L?v&`cghBFw41?6cUokI&&7)0ZJ3s+}r z;?6i!Ql4xwx&b{*LL~hvoi|6@$LBJ(YRjQJ1VZcJ$Wv=ON{8fc$Arih+o7mZ66C$Z zxME73ENJa>V5}b7Z_|GREh&}QqIkHU?Xl=E=_Q8N*RyHMp^`+LM(+{ng8!v{+( zc+lxCBJB9Gn8jd0uhoGaqtlvw9sMn2^y9`=GiTUN97`%HQYVjx#Z%Rh^%#wGr4$*+ z$lIB8t2){9C2@#=IOxtH#$0^&s`96%IQMoSNJ(Q0i=%<;N2Zp{y@E0Ujqasw%IK#T zS{Qy;7F0%HXd13{qenNTYgX~-%B+^PSYf$b>Vf23y4%c?)v{I2OLRC9vh2Iu28Pr~ zhZ!SKqmhBx#O#nqn38~B?}Q-4MB>55`)x+(ffslxvYg-#yr| zvC^+;x7_oj{R#0PUtLkmQ@DBByF^D9ST3Y4696UA&ZnPpI?ma#)m87asEHALrQ@xofL#7&7^=4{nf2t<%ZQLi! zgpt6ka4sxFc^KNC?8Mtkn2`}UcvC}Ts#7>0b&Zg|R_15!MA9bOkZIof7}M~RVLIS$ z)CYN)Fo`ER9AB;>k0;k}Y}D4~J1ta-9S^OCExNHB_GL7*x-6=SSzVP=5yA3%_7n0p zx$t;*wzc6_`b_goT3TSi0Ogb@U(|j=6}+=5(5(GN@^>A$VZZ$`fwG$zn#Clv7)IBY zkMfkytO7Q0I<#Z8tKe;SZ*RN7OJ~g|v1Z#+0z*E|nnT2QREPq{-FSTng>8*!i0lu3 zlst^1emPAPN>al&+&S02!Jtr`(&rzkv9!BN4`VYjPDLY-tC&Wv%9Ev($_W^HPiA{- zoP_Cy;d5F1Z8Fk+kr*uV3-h7cajoAG#NtNlTx{&#+wh{>5uzoR{4B_3eNe}fMe+S5 z0&)>oZuuUWq`Gt~YiWw_Dpd-^R94EM+zcycR}ts(%M-b6Wyn}KzeB@b>>o`vK<4UNDZ9M2Tp=jPFdT*le?p@ub>MV4j+ zVPj+04i;=T7oQ=k@AOE;5vlp3DMTi4z7UG!fp|7H>iLa{BFC-FJ^kqI{4d~bDh@w} z`=Qcb8`S2+_4#b;-^eU6f&d8(8H8n|$x!PX@$SXSi6_I*f~hMQ__nHDdnAp+(mRxt zdTS=t?jDnCTW&AE03)UotN11~Kz%pgH*nmf zNbE}gxNXQ$^z)Do9P=N#&`3SO^sNTTej;Tvh@k&vJma!yK!TfESDfwAk4RIQR#0x` z&+i#sUoKO|!3mq9Xl}Yez%ob~@P*K(%-%&SSCxl7BVCzgZV53>xcR9zoqlR8q5M^D zKjmjp9XU&T*ve}))4b2j8ywYdKU7{=V*aIop5BP^1|}a%YfpE?#qJmBkxG(c&dd&! z>UhkNF<&^k@0!Y+fgk1B{Gi$W`1m9$x!Hu#i7MRv#M^tvI_$$nbJ+6qbn_ZN6NT{R zbCUQYHV6E}T?S9Khws(eU+qsSJRp)+&H%@k=wYJwdtJ5{>l5Fw^lHM`e0h#n{THa! zDr>AXQf~=QavE&MUD+@w)$A$2J0dj~iidFS-a4xTse~R&KuJXzj6Xt=Sj1FE5?oUA zrp6T?J?+%{3!>O|BM8@@7>3T7E(N&(DxdRe=^#7#g|(sp1a# zy9m^Ac}nLEYV5Vut3TBg)4y2v6ao2A$M@Ht%26NPPSuMa2v?)Ke^-30xcQ^^v)gX2 zI|cv8x6=a-a!0>`n*EPG%D*!|BT!4~;Qw7K`tL8sULTwNEokAl{}8DT4_Qj^&&)27 z9}RIT()}p{(b)d{XO`x{sIEglz=XVf`BEuSKuKBo@#u?=__cRRY^Ohe{scW7HrCdC zpL=-q8AOsr+}1v%zY7h`?3Him@S+g5b@mk7RG$84?j5wq!40r^NRjaI1SeP3TxmQr z`Ri#B7Tw881$6_*u7I-v1$J;=Qz`9M@CRY1%&IC#gwv++F9!0Wh`XiZ8oZ^Jv}|#_wRoSUKvLe6c!eim+!Yk&{h6bvR`U54BqjO{&CUR z%q+t_qRVNzA@C_XBgn7tJUuJ_4|bez&!W4RY;^z~XyxrU3Os3JD8WfHnk;dgqPh<>iwTn5Gu18fW^ZEugWi zt*xIwSAAr^(3Nz9O!DScUa#99WDv|XkzKMRkq=(|{Qk{98Pr$6DN^IeWzQY({-6s% ziCZM9rwRNvQ9r$0JJK^Uq))(823gK_dEjL}k3>X79`UwSSWfk}+ z9UWaT8J8BWI0+8k+}HcWEF+_%cewK}ffdll;B=Xo<81R|o`zxt?UFXJu(tCYrw^1h zvdjNw7Qg@rcg;x!?~~ar&(+>Qx}amKwB@!IWx>mK2p^CQTv=EQ6dM?}9h7eIn>JTb zFF=V0VYRil7wA_pMr>?s1O;75GJrsGnZ%wMi+eGo&?qN~%vrYZ_Ci(VBD&f8e%#~@ zxCkTQ9{zf^YYRTo($LeJ=<9Pl+_f{g6xO4j)1%F@uYXuGaGuj! zWpm2Fz}(se27|eDXF==N>IJ^9w85f*m=1$vC~x+yg=z9n7ltkP^ z_^#8RVn<4GcDB{jjBJo+8???}(#>)frxCb#j%F@sZMbmbOyk~V2n3?0Mto_pZ+>mE zD%-Rkiame#OzDp2RL}pPV|Z$0^vOUQyq=jV5_N|C*uWFcVblrKP3SRZXvkP%80C)7Bf&_G?@=mX<#UxE;#AefzeL zqe4P`?W`VR{V;~c;kX7lE~%Zb=dm@f)XI3UbHW33F*<=^DSY z2RsvLsC0JT+^{sc2Arj&prQ(utVMO6nf)8PLG{yBdxFdNAqQ3LPYY>A96{VJL=v7? zrWMu>?2h~o{V#WRc4oS~eRJ#9t?1}zupZ(OWc_zI^~z}^^6ak(aB~w!qME2DUVa31 z8%z(VwBmNGru3;S6`GRt^6yz!1dFz1K1EtoCW4c(dt@76DT9tDbq9w@5Lxua0jDHY zx@G{5N^|H}KA9{~6own7qCUQixZBa*buVJzOrk$X0%EK=SrPxSi=>p+r9!=bf^lrc z45H{MARc8WrAljRCMP;ChI5E^l-`Erx2ul4y-w~u|fu>JlSx67NxUO2*=@>Bd* zt#aSGcNq%vH)wQ!!_b|&V<`4l>|dM&jotn+57y6%zY6`~R2mu@fLi@#o(mS-FJ}aJ z{Ketawuot;c)#KG^~C(~9ttsudo;xJ2Z|uD#Mg$eF35(ISah2^ z=9zbi9SyO9n<`^6lmTo~T5%TL(0;FGCgRLnv$Aa7nLks&7L`|6kN4s~3c^J)%({lt z+0~y;{#0Cv_dP`Tw$HvTb^NlW9D6J7@gGXy9>QOwuXekiE1Hv4$&;=i{68@Kas}mf z#O~Oshn-qu>M5q+v~9LLWZ!ZjiIeS*4Sz!Zvd7<&g>3lW@;xE*Jwcrwqv9zl)u>jh z`^|9wR;EH6$EP_#4y!0f3agaKjZqb!c?|><)it{qvT{D2bF1EkM<6GD78^g02o)9e zu{;Sl!K@fsZ%>4;&AOb%qvh`6^(Td^1Ttdg#+y}MnWO%t7?m8Tam ztrBL2dqnyy|BS*g!^6N2RA+ZvUo!D(>t$;_*$r^>{j4Ff<|3wjJmK6(M~Ljy>KCT& zOT>0#5hj$_Xkr?I>PhnRN4MVpaL}79zmT?c56kqNh~k}qR#7pp150UKCOb?|j~_WLWEoi>=ECxY6!+nNE|K0m&a(HGej z!@WH`?!pdR;VDOLO9irz_&~px3ahrm9y=TRN#OJMAB{lOh8j_gh@7mIOHf}@m6G!xseE!1Em!h2?CxnX` zZ?X~PZ&S#Y<)dD{Szhu?+Xs8z@D`!NOiAwH%v$bSqznj5C z{2NrhXvG>YM@mFXmYX+*OW;&`ForeI*Lpnb(d>j-XK*e|DKP|gtZk^hQRB7?bMFlh zM{kgirDCLch(gcGUyORifw$26ME1vD#bdsMUVL_adaW$93Ug?e=`fVx%gHBxt?T1^ zdxt#2k(1S@Cx?LHMi0Tgz#A2&+-E{Smg00g#Hr5{i`9EZ?wJi8tcDg*vWaNFWe6%; z+J@6X7&zN7*3G%tgSEYfO$)oQeDt>rHJ1q0;g6k4xIXc{)lK zk-hs;q2~B>3YNJY?|ZZ)Y3|6)2B?C=l9XdxAaH6a;LL6e?~OJ7lbi#cSFO!fJ~dlW zXhv=iEkfYK5Xz~;`JP0sJWnH?aUSH|bXg;vPvv^REBX{Pio_t>3M!LO26kqH9)Z!! zjMJsvXp4#Od=hceJhI5$Wf1sfjG*3cb* zxO+Os5tL#x$0^87=NG{|S`5C}^j2qRK6a4CIp5cqv6Z z(&Yg1?Tucq>PAIP3gij0CBi^m(-;<5P+%vooWyCcyaY8@5rY&=sOpr|JccWV`)WSl z>r^|_;Kz5`jpL^yobP9J!caZQ1zrYR_lTRfwjs#N-TA+=6a0r`utZwpoNVf^po5ke zK3VQy!cMB8Oa8OuIzW%VrJ8^u2%#Ru-{lUp#o1Z8)DcCuP#Rv#nx1()nVUkc+!eX{ z{fPO%Y9=j8gE?8>nuQ%fPn0To_Q~?1p^s^+%o7Y)%M;~DHM=@YNs}Zm7c7U;&I^WI zc&*8G@en?6V_N3!^<-Nuk9lJXaBkKex?pdl z>ZD%HVa=q-F^ITD_7@PM0Z;$q@iArJuk0ByaQ&T+e#C!H+T^A2M)~>P&YCeBu8_W|3AvUIxefN z>y{8C1XNNQq`Ny6kQC`IDQTp;LmEkGq`SMjL%O?Ly5TN7-+ABje)s2(d{wZp^?&Z!2m45yNKK<~79maNrL$pTq`=}g%->jv z?x`9|ghQWP9L(ifyb0R;&uta+E=FM6$&x2%5=7H@4us)!aKR1@IUxHNvU&Dy%6kns ze(K|JNB{dbN8ClF zgLuwB5I7%Lm046Xa&<6J%3V&5cgcl)$<7CCE={P7K`2*rk%1LYwtdCi!Nk1h-w@B) zZSMT4_{{vxVw&5Rf{Z-9xofl5PX6Yj(`(`DQ_P{_CAlM|W;Y5ezMFF` zR}KDKks}=84dLDH@hAiCBF@{&vWpJY4}u@+$>tz=9+0>7D$F++SPo?0(6T0FPl;c|--YTSEKaE5mBk zVo=CTNbN%v20a~ePi>Y(h(pv(qc_r#xw50Beu;hIwtDH#I9Wgg=UJ9$lAB#`JSl(* zW9Kyn*`t9JY4xex`;FyF!KxcCwv&Z+?WV-u-)xyLTyM-wAvaz)4exPvmOCd~f0;a0 zKeyI8d@PHKAgrR4Js3(~lYK0!(vK)ND?3>0=SvP;sx#~={?Eo4d|#@Ar$|HXtc>!7 zrSJ)inv4ph-?5SY&P)(E7Jq$SKFfm#TxaORUWbI5*@Yab&Y=j<23GgOQ+tNI^;?|& zki0I$NAULecv|w!+s^Dw*{j_2hmxHZ3(RXuVzZE7rvElt`DplcCh|;q%b9;@z1&Oa@?!Ynv1hMDuwqQN{Q)O7rS9(X*&GpwYSZx*w zrgFy?nm1X7n;xDy{%+A3cr;DfzyHA^n?IeSZC3+Nmh6K9if%L``sG|jW>E9u=?x~b zi=bIVgoE&VU-7B>{EIucVZ?mRU)M@DMblhm3dHW#hZY0(`pMA}v5RpIAM{3xqchxY z?-Q2XGw;#uAMfj8`y?NJAENMAUs`YKn++d24*kUc-VxLn)C8RPMbG=mJ9rk-+2&ZQ z{lxA!Z5QNW)9|0hq{YJe2i-Ly^j{$U&33gp)aU}R21S*+rrqTdDGJpwqoaFU&c${O zH{e-uymkaAI>&-LHRGf4RZm2iC=yq5&k8x4>$~KL8vv-@6yyT%7G*pk4l%44adSXk z?KWzC<+dQ9?}v#-pEIXH4$a71^R)Ihzctydn2grdaZZCRBRQSzcC4nEv6-S7AZw{5 z>_#r)PS0)sL&ol67_z-`&iyf69mwPXSQ5Z^3T=BWy(UJM?oM{I-j=cr zT2PwRI-Wnnlp-|%7yV`CS}ovT`B#f9-6$V)pPZaxpwTvIxE)?8Dj2QIIN7%>m8%+=#F_8;3u_&Ab9MQ`Y zf1kToaIeK*s=!4!aqfu)S0=}*a=uCkB>%YzVs}*r&Z2 z_36{iTa}dkwY9t1ueO^rNv_RsI(AQa{S56=W-ddS%fE|eq^72pl|>A~`?mw8Rc&o8 z5P1MCkjr({NgFVG;OCw!_-n$Meu!BLD<I+%VA6;xW9Ht`9t8T-@Bb z_zD@4$|Czvl_dQ9DcFwpH@2m)rEkx|v9+|cqz?eee0+XBab$INX`LyrxxRkx=+aPM z{|#$!y1}nU!1!<(0&Yz};`owQQ{!M}7BZY&j03Rp_zcKUyt1ORfMhaGWj7r+iwgJ5 zz`#J#0Na*|$XL_S@p^JHMy5H@Ka3gTQm_doydUp6<{jb&?!!3n0DnP-VQ>;{jac2g z2why%?DH?c@*M`ulK9%DCb!iNct*eDPVd&`U%y_e#Zc*}e2cDixwc}##>2r$C$!(_ zLyymL5oMG#{pt9oNyHeP)lX3nhT6O*gxJvGVRltIH zSBHeE(dZQYU}0*yZmp`OW-(tQhzk5pXsp+FMMXt`JW{0t1T(qyIw7i^x)Ri$s4HM8a6a6I#R+FdBE1$Ao6U!<@iwG0h@% z<-*4{SVo+XoREO3`=h2tl*cGCc2J4l`*_Ss%OmTyOq*iOj)Yw2&dz3P*`j~_n*Y2B$maEaehF&`6F{rPbP zi7_<6goK1nTO&hk+rIhLRbqZ_D5mF7&>T-09*WKet1(huuf>$HE1blMFq&FgmH_%( zb8|}D-0p6k)b%7qLfn>G@~|x?CgM@G8+EZM1sYcw=Ae%B8#Bw(BRpK!pMZ{4oSzRu z7))_Sqm<~!GawnJB}Zb3z5fPq>W3C0N)rB8N3C3&ke)%UUc>WX0JrVQ>GRF4EnD3m z-D@jb=rr{7b5Rz#zAm(6ct8CC_p#ya{w!U3XQzJQR57=fiN1d4(PdEf^It53I$O?w zdwz@rsEF3-#$eWg9OX*_(GZK)d=HRBQjj0n=dKH-j{xBVV1>J$Pbdu)ybAtDBMyKt zKn*pc?sh7rcDm6Dj*A|`HS=cAiK!gUuWrSXWLLSCaNb4`o;2C-^}JdIXT(n zavc#U{`tCf(0I--!@&^FB4Xn=@Kfu*w%u}pZ03JL*=j>bD zTd;W=dv&lb>+1&JM49gBb2*(+$QG%?y;$Y}Sy*b-Q!Jvd?psBHUIB}l!f#`13lkmv z{Nf_88gmWCz|fEqr98nqBsh3F$|5>R?WF?`zVUksv{gvS1peHlacwFQL8S&oiTWC2 zm7w#zp(zAd@7d-C3o|nqC`dLbm8q>$8M)h=8_B$hDyr83QPI(*x6!4NCM;t)a+^7@ z$0g;=ud~$EwG7yw!CK-2RkONLyaftoChNnN8wB@{40U#-%yA#u7enuXJ)qV-Egas$ zAs{eh|AgeMW*&@T!7U%zO{zF*Md_%y0ul05!7tp5*#E;ip*VQ@iD zEzvuuFqEP+Ii+7oD(2u!_WWrLu?$v!SOq*(D{JfF6#nL9a{`>(1&>=Qen!UcNl6-j z<}Bn}cRC|EAvZQQ#$sq}OchYcvEQS4R<&}9J`*DOU26UF>#*>k;)9DSCaydXxX7nn zrg$2QQTC-15Oz5Lf;vR=$LZ-Q*lf#Nkb`ucsv_B9IGJ~DeB5SpAdX~`c*OfTimIyW zG|LI?wD|4p=K4M#dH@9sjJW>B9Op_&L@XxvfSN{OLBT$q)n3f%F@{^%`$K~%l9EcDa)N6tME?c=lRbM=m*Xv}vNAt$xw9JF z8gIuF*u@F8C%Gp?ejVgG9^E}mmwr{qw%PlN_4EMK^;AoKywmkg4iq8=#PaClun=I9 zV`F0z64W#_8i`#@=K)iB?bxAlF*zAu^QkSPvJ_}(FqCvLF)@7Kj+Ar%?{GxpYWkC{ z55DXgP_pFm0@5;&w=k=!^L#SWbO)tXmX3z|`j|k4u))+vkhS4D5nv$QGo367pfmw` zd>1~~1t0}W9l}6IM?yi_GgnSmENveePZl6#U}n~30)`1*<`itV)m2r&Hyb=IiM2m= zD;E|+^?9CfNGWH2eyKki4Q24i`pxs+_yt{R+QKT9`l1U>ie`}J#1 zKQ|(Y{d|romY#YfhlvfN-&v`sBg-gN4jWDFi>6=kcU9q#p9-HmS9CHPHL^*Sio3Yl zY;8N!vc!%$^h2DCN4fhNO~dHergQN9pA5`KsEfo;Qu>EdL1`fJ3fU|;bTR!@l5thn zm=292l^0v9Uk*%aXzz<5B+~0MQRx7gG|N_9@ZA zw60%NIS?>y7gybWd2i23^6~;BNPz2TXOuLuv-3b#_7NmJP+6Wb`>{>sYECJxtNS)( zYvbO@WNGloPo*q~_vhUc09aqaWrv z#&_87svDMjs5ga{n%Wt4sdUtbzDZYK<-64I;9vlwY3H);`@g}~aoDp`1^E8o0YJ53 zwxa9(fkQ!Jn~2|_ANgH84P8}-)BUXGkKecVfHlBU+R&gbNuc``#2;O}6HJvC6i3*< zfslK?Vg~oq8XB?3FfQqA8*1r}3p(EG-%gpr;cftk{5I-aH=Cck(&iR31$Tf94tJcW z(9a_?O!}^f4D+~*?CWQ&V*8;#n1w-N;l5>U)73@ZjrrPVji|A#ySdSe0Vq9vRbj-yop2Y5h z?M|dQ>E{nNe?zK$fLU#AS>2W84{7wi`1)%+FBL$Si3Bl>;YOjx|8y^ zvd{U3_G5^rV&nKplbKWZrJ@sMnlgD*RP)X*saX(|ln(l;MZ6^^zK_UkB-wvP9naV? zO48g`EW)}R7e7KnRNF84Mvj&6w4GABo)&gymt7tzcgpt~Vt1B+VDjkbD4;?hSmfvD z1N@V2YLIN<$Ty{-PSXH{Zw+NXKW+DDviS4rSF{c`+gqObes*zb03bX!w^#28Z+931 zsbc$zW!oZN%+w?w+}B67da-#GmEmg7mgMH;)1##`-{2H}2L9rdL!RV?Q-qjU(BAQP zO&F1(pE7vtg1h3a?i^MZ1NyPgL32C&Mb2>pzsOV4$kTz!lQ&d?Vo# zFkcXLzPt0hzII%|+B|l+a)bfplb(Rvir-?lADcTJ7_-n4llou`%-BlJ=0lgl=xFrj zCHiE1fiV{Uq$3#xg--S>a7YcwV>L!EFDXei^WzwE`T7W%*oL^?|8W&yHT|f5wGoR6PPJxM*D5fwq-KZYe$KfsE)b6j5Oce@U{l5es*)C zVZ6B5CAdyZ3LzD-yDj+ss{W+#b^Q+(JC^9#mk5+DBu3otS|j=zoT6*&^Ym?mKv#>JAn-_!;y7%*@8 zTNuyq!~DT*eH|diHl>ZpS$_n|{6Ysfo32Q8^7DP&X{A?d>IMA~knVb3CDBpt-MH`> z8*6E$h*i!i3KM?^`A_VcnPQAWz=5_8cY+Y#&JI?#$fgMX1b1 zVqndqv#u{JWmLIihzM{9;bn`2j2g>NuA`2RtL>AJ{Lxn`Y^pg6lDV2YZRGw;)0+ef zSH7jID~@_kV-8$%tK)9ij28=0L3{oCF_YZ+xw+FvUK{Hj=Jb=(SpBBvw#vNGm7N_? z^(7tv%c^v3&gJIj0)A6sA}(+OOiyFkKHUK8FHr2i*YoPGoqy}`X`8VL2l=u5+m64c zs95^o;(7o)Ou5kmc~ZC*0%Hk{+YDog3d+`ndjY_Po9_HT>-Spp@@z*CQI8DNuOrk4 zx8P`5e}Kmlw|wb;av`%o5;H+LNrTaXqu2^a2eMBXzwq_qn-}llkyk%0^1)NLCPcL# z#X@GlfafbgxnYaeFJfWd)%8uItD@p(euS8W{6wzIfx!bl+daj7!-kWSsJ$tB!;g|3 zZiqD067bKW;^L}Ve*-30=@MCb-t>_#uR|(b>i%F|1wt6P9eGhQ{<+IRUT#Z^!2YG3 z(SiJ9yT6?&inDOKxQ>pOUO&jg`UkuFe_>HoR{pXvg$pq1<{_Qw|KwzS5B}P|C7sRr}4)&)3y)MdqV-a8|?+fT{p|DPfapva)S% zOpBjQ%FD{WXaI7WRpK#5`t9v5D)2KI}PCSzZo_PjI?@iX!VcMR1T!N(|5CK6SflrHlDG)PBCTsaLM6u8~FJCLhrmq_8N&A?)z%wv)#U7I+d~t?J!sN8+ z6B9W7%cEoA;x>q_kuN5LNl}0dtRX!vcG*0q&Y};A9{i$7rgK|4m~Pq6&U8Wx0b0JO zlFQZ2pXiu3p7xBJuV{RN^3Jf=k<{C}bjV4YeqgG z6g7TbgOy@oXAg28GYpbfR4nR1sV9%M2>4+Epf~`Cttr69-`*}gnxlnK9Lb2TF%Iy^ z0WF&B3cJN3iD`z6iNf({1AVLZCtEfs6)i1x&e?(AOA@TbT8yqn1*RgWOudyU!$RP2 z7~a3YO}z`;J99=i+Dn|%sHkuh@xw*Dc5b>R)vvqOW;Bc)IR%>v3*@hA15Z!u!N7*N znCy9pDeYa}#>T`%O;b0itE(5N>e<=FJofShxZDDV6WH1Tk2GLdb~`Oq7!?5bs4_Gu z7TH?+qhuNA4$kkQKC>xFNv_}=^ziV|9Y%1JUx{W8D*bhgK@Z$Uq}LT{;-;inTE|Tl zlQ=rg zs(tCKRdmhT+EQlS^pWX7q-j#h;gs%G>LsfN58`#%;~S>Dlwo#N)|0|QL^7oV0Hs*n zebF+rvi!9AIxv5_^cMw|{jd-Q9?=y`W!sLj`uYUCm<*1oChPm3y~lIkzkj!1bnMQ- zoaIb$f8d;Ozt~qnsAJJ-tkf)4vUQAg)VfGOsSFruc<}kNGGs**npG>)N)HaDk_mE#EzIzO^$6Mvr$sN6@^xSJQanNRk6Rlbs`{<{NYwHG*@x)UZkCQS>&m2>=0&J38T*cl|XX~;9rcIglZQmK=J zzP`Yvqa}<(J3#=HH2O&B05Tk%nyM~#$=^@>;sj>=`952pb4p=RQ4>h~1B8QiloP5s zuTzG*vw#Pfm>-Y)LdkDy<1UmaaP{1&vx%b3*GN&deyIsm?lTTU2@45f?WSLlU-%Tn zSSKW*(A@cC4q2!oOYUbw-m)#;RhG~%9iA>G{MEkq@S|wHpFsLgSKP`S9c2y~G}MRW(UdFQfhCV|b>6uLm~ zU9uJq4iDg%1kztOSaRTI9X2=|d(n!nNb$r@h?`taU?QlFW2qw6iwB)-0re+HbEVnn z)QRxr2!)N2QPBEI3SDxy`f5~pCRjxOb(PixkHXrZ7NT0%(&1Khq#LO7N{Hz9IsOAc($41S*oX>B;lQb=?cg8Q3KPh}125R)~pI%ddToAEsO(%tU^nD)#fy4OX_J05J z6@~w)WlsroasxNKJF(}K#c?L%QZRh~k7})R^AY?|Hb+{UB@43C$Z&=~$jA5Rvt_>A z7z;@C-oK#GpAW#E6AFBJPmUTLiW#J-SkF_NM`V-l`&HyIx&n6fFETZ}iQqr?X(%gO zUSd5Hb;T05Ysc`D*L_IZBTVUsXd&f=g=?}s0VX7wzU-E- z0}v!rp!EUAe}8{H5V_vm)a_$r)@4M}Msm^fLI_y>b?Xf1p}&1IZz7p;Pu~GQM}B6e zzH|4Jt2b=jYZCImU$Fq(=3#i;BB+1+CNjJI{9wbn$6l?^ zU@LrP|Eh7TdIVU=hM7a_2sH{KAxsdTekb+2xiz~R83m95>ORXx2rT@=vLu z&Nh$_Ktwvgx`RK8g4^Hvnt)F}=$Deju_V4(C5v{hW5psk{XRZiHW$2bg$9SGtL^l# z>2`2d0V#&Ys6bXVplpi-u_j{=hsiz=sqypo&wU;LxZ+RnaA4ss$8sG*MF65)Oz+>n z-?w02A4&gk)cnZDx?J6SPfOps!{#@Yt1+o3{N&Y!u>AJ!XZS7)M0|U)?1l)alJfe) z+wV`w06;xtIl0JQ$p!3zVd<9=t9Q>hgzCCc3fI*FTix&02q<~6C*BVId?EHUeB9I_ zKlOUN@~c!;7eI}ti~CUerYo<{MAWAVOLu;orsn2l{wVl7sl_>9x}r>t&PG^#)fjbw z_~HSq1D*3vzGxrNrJ4?ojvhA?EOJ`39&e^V)hr)_QEW=iG2Fc0z}XZ=z(2_*JBP)# zq^EKa$OH+%P>T*&@yECKtF@3UQr6Q720)N;cjp6OFV4oC0AWdKsZLo8s1ABiq?Q<0 z0*l_)1&(T_fSfTTz1a;)hi$}a zH8~u&WiUR~PkO3VwqSg;*x3J`Nea*`)dC2h(5Y9}e6yPGFVxa8te$Evr3K{PeWD^A zPI6Q5;F^S@{gw`(#$VkJK;VK`3W$ z54b_0JRuUY3ieK~LG}<3%LzUyEVEvN3G0rGj6_B7y(-1LX`rK~?(geM!|kUZ9{KYS zPzgA48+LjnU~F$5tq}n%e0&TG+f1%<`H`T4yGh7AXSh!{8`+!2U^rZV zw>~EenVFvcmE4^7Wi^E@mTL0k;Aw18`0sxA(>JTDs?N^OOa8D>Ig;PuT2bxrSBz1R zwCD_{>*$A;A_Nf(H7r@A#YhM%{c$X`Q;>Y<0?g|GU6r`>e{f|1@rOUvl!UOo@#)j?;3nT1NiH%W9?30SoYWkLOsjU;{;~+vQGnN|}F@u={b4)+a@IyTgx`V5I?HlBR>P@osM<`F@49 zD#Po5?c~+`yp-2vd5-e%wEabhw|A$*GlI(`CuT}YQ>&|KWs&XtH`{L)TqHEEmL4BI zP~U(8YAtlPX_aFvYTQyN$jD`FQ4>Z%rIB30*t!)3hk>Kmq-wh`W~kJZnER3c(NO2U zR^ayh^($OPr>Ls~mmzoH9T|BNg z@^d_P?hH(9Y+b8zudgrmikq{#N)o(*)skdiay#zC1jgtAnDh_VkrZcHXv+<9j)(|=9CZq*BG9hLcVarc}zGyfwl&nuf>B|Ub`7PWk zv&HSjUo))p0t%OlaigfP@K3l5@qJ#aA+?7(3#=MM%g3t>=pL4=K1|Yh1wSRRNgnIw6c(mE? zqB}sB!EekU{9_oKtReplR<$IS{v!&<6_yebg1)()wT+d&j@h4=7N3og5Lh@k2pI_f zyyW4b7cnxm(YK-(G1alr7t+_Y(9@@v)HgS@`9jFSz{bkQhlKF=^$v-H8fw-!>}78D z(U0x&Nti~|*hn6=$>O!*F{a)1fsx9KdeRZJnEILpWx`HIR3A?ahlAYP`L0(|aat^U z1fdB7Mv@ErRMP}pLe$(BLSQYOs?--GKUgUCu2~F6y7Rh(ld8n`K1S1^3d^zxQ#r_P z(U>`uCGxoZ9@C1rZhxLVTokBxal8T@Gl0*>;YrU}B(A%H-T(3Ng_1H0`Ae2WQ*Yj@w-kr}P-y`giBMxOQXB3Vu zU+IXbWb|pSeSVX+8TK-(@Jm0$^W-?lqC2W8^d7W7_r0TJ2k8Q@mUma6zu;8SIri>h17q1x)lVxlV$Geb_~GVvYoyZj zwswt1pOY}P{?wFOTB`@bb+?j*8|O{j5hZDW`e{WD{JK`CvX!HYEM5}c)(85CHPo)q zrdWQuFzJqw&**AsWXkc@;!(mbHL`YGFqel{8R0+32S;w#pdP(13_mE9-4iUY^``tn zWIsWXyMw;-(Tb2*u2IxV>W+zHo)JbOJ#CVkhK$WltK+Z9@;b*y#?06YBpXB!ddWi@ zL}KAHZUHAtYC+Pob2>L-I!b~WL?X@{=oN`d&FR@^a-~kUMdE~sA)K_SzyB&IZ!M4p z-BEHR@$Sr_RF&4;DA1`+xj;2Aa8gtzTV=*#z4M*%x4Uh+iyU^xKF$CqZce`3u+4li z8>GJ4XBpaC&7NL~H0kMm5il?}uUHszRy)F!awj3qV zW`)7j+EL;ud;=33ZG|NVi~1u|{UH&u_+&c-!-{HZy&!OLyTPc3NH|bC`t!Gjz@e8k zkr)IMqhnW=P~(k_nWK9>9989c>CmSo$lKXG_~`Vw+z7{Azs_KDN_3Ut2{7b-$#vV#QOuPqd*uCL5{vyXLEfrr7i~ zR5u&wkFD45b~EO-uL@opsdSmsGm2fMMphRjL^&^*C8&Q^uFaz=ytUGp?}1Dr866QB zBdUdd#55&8xJdIXy(x=mehlCzqc2_GhNa==C0+KO)1&F1r(J@uZwwiVm#zOQ!n)eL z)~;YQ`N?u*XXJ&93TzERRc>VW53V>;RaxrRKpy=$E7v4_h5H_ARmOpWn2%=PUqy5h z5XP+ZOphf0sPsbAvm$p-%GGBvF+2HMpZfY&7SingQJA!NtqZbT_9TO!O%DvwftX7L z(*}~K9lY5+)Z-;A*K=r*NWEty5j@WPo|<0C0<>c{Ow7Tgf<*g2w-19o7*HnoA@d7y z9V!I{>auO2V%1ppt;z%0=AFvhd6~z{YhtYR^t@ssNefs#_l`06?ilWA+!Ncw%Fl1= zJ&o96O-Z+sult6zmw#_3(+tB1Eq^l*N}1w`4K0VmC7D~#eV#nsAeN8c4D)f{U^>7I z-K-|S%)kEGo+`}5Qaf%6iS%;H9Lh+i2O(p2#}5&IYJD+;17@M3Pa7yNx$~*vP*8ic zg#As*q9PZt-I>Iy3v($sDnv%RWf`-eO{3tZ^$5c~+qdAaAirGX5D<8$jO6XU`Ld+o z(w}YoX=Qf9cqN3jOW>nHnyD@9J7JUoIGOC=g}IEEj<7hq>!YwHXZ=iX+6i_1NlXfv zRhqni#t)1*Y0Q<3#8F`?s4i%wcubmQOzKw-HorS*zJ=>*-I_@GjX3aXo1j8viR@^( z+&x`}i@n?-Sv?)n)BN{A7fIjRFj4X;3w;i3ht{H_Cu|v>IWAsN4|!h(o!H^WD>-cOfVf=A64ooVz0n z@G;AM7*-e$sfb@?k;pBWCp%4wYtNZ6do z*>LROGr#_5%+otR%^#U*lfV2t!)DwkzZXFle*~!qn~fdr`=NF~Xmo2SgKnj`Hjl{5 zkned(3VkqlBxaJi14=c*4cG$dXyF3yLZYAuOe$aVCJ4>G@oEb#{=gJt5bTB1=`Yt* zh-9w&{MZR1B(6P_c4RdBi^u~@M*-%$jDnvY?$0{gwdpb&-n5CLl1e*n`;;Aa3D1ya zticOMwoe|q9Y4d+Ee=PfnAXRkNfl@jyjZnQjcpD|LG*t042qr0nYmR?M$R%8HFJX% zet3<%r6=>#{N4}oCVFGY0LnQ_rQ>T&0V`O@sdzRE@&j|&vOK#`57A7oFOPPPcIxih5cG>CNUIPm- zs)iw-&!B9bbO$%>=LNg0;n!e-xq{p-p^HxSk+HqndRBBsV9T((&88^xbUiHZGOc?p zAJ#4cu6HdPdJ1>-VO&|GI`W`<&Bep!!i&)g(#Fb07=!V_U?nyl zbapg)M1V?Zu`rA2=Qxe36&hmh`ObADa~=;)mX6*CTvrEfJC}4J98Eh8$=$eRy2KM2 z{#>CXwkAGj|BF-vX7XmQOhxJ{ry$CL-_#;rwwBm#cjp{@gACKy^~F1_nM#qYXo&`u zM8v&s(gjkyocV%pd&Ivbqt^7mkj=kw9ZSsSnA#MoIKi{zg35(G>4E zjVn}d+HPdPJ%9hjfcru_eg^sSef=epe{1F@49qXGJ@ErX$CnG<(5H~&bV`%=ydk`p zKi+8j;&3@V@5M}P!Dn&mmZ)u^La4!M3@UPWT*!z{Onea z;_|13?ddW;Eo5Nc`$(>v`+`-TO-t~2-L7$jfcG=S57C4`<2yowmo%{4>RTl6R^brH zqq+N~Fu5lz8uaVw zDhPnDp4lv3_4l&+j$q|5kpb18qHCq^auq1p#RggY-tM?vOJR0CfvY#+#n9x9bB$*g zvTapqPg%wGho9q>@B2yjVWbyx8))yIAC>=D#Esqk(z0-pHQ{_r|C#EUUhFI4E_<55 z*Aeih08wo$xVT{1nb)hOw-myf$Yr|6DxEZ+ejw+(QEzQ4e1?adYHYU;| z#U*4*K3q?U6UGQ?us$GbQJyOW$}0FmO@0e(HaUAYk!H-}O|0w_LjRvO*p%}ie8GPiuGc1!ua=BaqS}Ce0AEH@do0gXY zJfj)A`njT5k53_#NLz@4yk5I{Ko6h`dBE4aNszff=;x$+&6hYZ7= zn~8cED)x5w1(8vC7B@7CK+#&gC0xMPmfTqaZf~7j0Ms9 zRn+ZbN!MF55p!}iy~Nk1C1_uuilo>W3`5fh4BAaT!<`+6%=!i=+k6L*xwaaAh;c8$ zW3OlgMZ$7a0-dj|Wt8JV(4zpdjWFZQG9F~ZuhpiT_;T#B3%HtC(aE=PdPsKA+MaPX zJ`l&n5Ht*~-X3yYyd94o_nHe(mQ*m6;PR>h_rBK}5*h6r2q^litD)I!av zV`$d7-kV1@D2~@3)|&AuW7UMTEJ}=qdmsbwRKG=>zGGybk208}MAR{OWwh7UH=x++ zr)z+tK7Sxi%@`a0WBYm7@Fz+6mlC9PDxHEwUpI~np18l;2{q8=bI5O_NEhcodQmfDkTeaZQ%S~ObQ>k?zYb#D$Rgbe!;d3y7BO*6A z%_w*gPTv*kBgJP#bQ}>upRopu@TGksF*s2=*3jYCiR~?$5)PCTk_JM)Qe5m(r*yy& zA(>c@??wzN+N|5*1Z}I6(1&45pK9u$G+eF}~A1h+WFXcv= zmwaGc=9E}QXkB8AX7wguZitn=$66B7dznj2(htrIF9|cE^v`sm(|VWHrKhRFApJ4f zURiEJl*~9b!}dc$8{%wwvo?i#TH}4Yau>9hZ8V&FHG~wjZ*@%9#0r;HjOYCAz}3uU zc10jNB$i58Ksi|?oJlZPNfhAHa2ad9R+dlQZK|!mx zh>!NoiMMB)@FbC1$_MxRFd`1Tw$B$`=KGATw#a*X_^aGh4wRHcaG#sp_&OM;B4kqO zlk@ti?wG%(mJ4|0rmFsW9Z)X#?hvFEFXu`7~w1?rvHxE;uL@b4?I{;tTwJAksIX`xb@iQiP&zn3#eFCrmp zNw^=LUSiwVS|zC0Yv|gtJFq+^I12CjBvnP%B#s8PL|WM{)l3t4q%$kbUOBEt^K2gi za|9jBpuAl$M^vNJb;@9S>1SI~rSap`+SQEsE|X`^Td9%Dl5C+f1zTr_PqhIBA2-R} zn*-^vESS^^78@#HX1p4Oh$`i*rcFX8l`A~nC;JFh6{$8CJt#lG9-+Zq!8Qyl_h%{m zNT$3mV<|?hk(3NzybpS~X>JgX?g0Lgy_J_v&-%z{9dD(6M@ryyU3}T>_yP<6&Q60` z(rm8|(Sg{TAcT$<(*WPEzl=;DZGZCH%<~Yj5uIP?O;NCACkMJ4l*VuJ-(Aw@bC4j% zSr~kgfBr&I?1f@DiB0w!qk_hZK|L15VOARGC~x@U`GSwh&4FY@v6B*-xGY8Lb>4|@ zAcYiL6%;PMo}*O;n-t>o38$}*FAcN^yuh0B+pZ)O+ty?r<-q*u{t2-!a$b;UuaS{P ze?rhZP%Av^U8GnDq(v3F?2foA(POc3eBHrWII-$c4soiz& zW|=6w6Obi5jo)8*gdnjSQoqHJ6V(7T2_M)G>jQcVc1dMRVr+AW7{aE#&~62`DT8dS^MJ;_Mh}M=URA=_8$6exm#4Lb0uc#Gw`W79fOnkRU2tt4|zf0UIw0Q)z)o z5-%bM&ij;Hu#1sge)y*;jB`p@ADIPuYOwMj^(7Z4%}cA3A*zq(disFn;K-pdi8 zey;#k)K)%TR)y+f7g0p^VXN5?Qt(7-qoBJ0PXh(IDt(~PmX*$0VrreOdNwc7FDm{u z26wJpi(z?PU_sm>(3MgoK_$OZBAtKxvAqECD$A$qt2F%U9Jv;DLzZysp@OeBF{as) zEe)ez4jm`jRDxGO#zDv}Y4qjk`Zp#;VAdx5EMP)%W+deapUYC`#kuowC7`=`fXFa6 zWFvVIzs5^!zuQ((-+m}l`X&gMUMOfmoci^q^7;1xqTI{hXPr-=HcQ~HHBR$vf@r#Rbjf_z@L&T zMn0o!pqri|L%q>NSD7|PwP0=QdMYAXZ&X&uA>=)EGUf~Xy1kO-0yvCiX=pv=R_QLSagqQ1`* z2erWF4Qhf!+6C6LqPhkgg@Q$<^c$TmZ%e)B<@0`P3ly@JXx0{XGHV7}N(zf1Y02yE z?hjB}@$-CIP86D*zmyg-v&Ux@EJ=LLZ4{zwReq_&zPIc2;+;7j)UbWdfKQ8OueI2T zXx;cTDX`CyTl6#C_+dYCqZx%LWQ1M~C68?rM-J16k3OsA$!9UTy1P7t7j|C7Kjr)Q z6N**4X=^{_9v^&lNn%UW zVK7k(iBwSllC`>grlcI$U#)RAkPB9z!*XgZt#L(6bBS>qt%)i!+-F3#j+}Dw%L!xE z1gKna-IfL@-TiS0bl;e%nO?PMMaMEbN8k)q_zWYrjV0DfNarf#E<r} z&S>RH3>;HA*#?bq`r%{Rn-ngD^%9UE(*K?r(YP65@PvAy_kOp=0vIB;eK8b&2@8G! ze<=mF8YirM>4tp7A_his^JNAsKECj~;A69Xm=6B{iVOq_Wryc;abf71o4UR!*SHf{ z&{e;gQ}Qv);?N-nx&vQs%4PBlY!&s{q+ts@KOKRw=?BJE$_(=PX>Fe=BY}wn$EgfF z1Cj0Z50r}%wrqfMal=E7&cwZ9WaPitMh)u7 zH{uWBbHCVS>jZ%(jDmekgaHNx_nqPg>PTUNbwh-^A!e?=5vkfWkK%vfC9J z5K0Ca`Bl&^|p~iNQ+k+d*OiRGP z3H$6CcECM^d@SLbM5ReZ-SvkuP15^M!mY~>GkjDB%ZJb9(wyhK1LpjHH@q|R?sbcm zV4#ziJ5Ocm`5cSZZzVasaJ5X@_thyr(Or&|;Hb!AbFKF%V54IllBu) zLgDkkC9(IIT$t=8IxsvFUR980Z&Kqyh^ z>e;0#Ke#&id?4ghMTf1$Frg4Tb?n=aGgPoJPye=D^Rm5Q<)D$zzyq~l+3SK4M_PVD zA$kh_Q0&mw>(YDd<8L~=OpI(V#5omH9wG%p4NdYIa&Fw8_a3qJqu0eXUJJh_qVP&A90y*OGRdKR}l=;;hX9^Y3SDpp(ISnLDn+0vwps*Xre!^ z5_36#M>7)7jU&ue@ln1kRKSk-A%S#qKzd?CWWDbAA%qxjPy4M%vw~i29gO}p&(xSy>aED^W-QB&oGgzTW zacQBryE_z$ySqbicb9LtZGw!$D`le69(6OSH8g)JQ&audFm~FVY*b;lWMtx(ks=IUf`iD zJvl+L?W&V|B^RR?nY;H5`eBP5wEST`?jod2zS^ZTrO){O^N1bDFF3TtxIr)MJgH;s zY4x-+HfOS$xUv)7wlbSm!;^-;(rI#R{#dsX7|+>I(u(jcs7=@;ep8tw`MqI+fS6(djla(9M2p1C7t=O1^vAppcrg z3ul3M;(5NFUgh9q9_0*i4KRcl0n}1sYaYa%qOf3}Ayy(3D+R$K&=@Z$#)Y|zhT*=E zWO986(Sz9Aq z>R0+T#^>oyJQAft zSrR92vr)2X@M_{J1I8&(T1N>PRay+RLRM~*~m%Wz`?}U z30%N$YXiW`3w~cyz{T`mP`p&g{3i-lCUyoO+y4y|>@O=6{*K}W_@65q{u3`axERF&mfeNtCc*EJ0+%w9r*D>=NNcRmnZ*B=H36UwwhS@Z{h>U;~I@C7k(o=2g zF|gn41sl4k6t_O7@(OUlzM`f7wSj_S$IDArrtc%mzc`8&>$~FiJNv`neI&W>& zi&Jo}*?5p^06wh$%Ih_Nk*m+bw$~|w#osFsW5B#re|k|KiHze_YrdOXTJ%_%@!hYF zCx&~Uj*#jQY^bbYm5+(bgJ9#CI9t5ZS}-CvSV9k=rx^Sn_RBuoUN$G)B) z(DRmx8+|KbFVI+vQKB#`E*|f|llMS863D869kfsN#*G0Swxb;uqEYd3wxcD zCTK(UZd?voD}c9eh{k-*sQJu|jrVHr?2E&UlqvGQ*HbT-}gzk+3jQlZ`A~gmKV|U9018-n99@m^n?` z!sD`_9BEd+8R%m5eM(sEXV_Ee`=shl%vK$TUwPJ61?shxo#`cw@oqL|!HqK$8 zCWF;DuOQc_FiB)dQ6P3P3nCQHsRK_%JruvZe~=`c9>L41t+GTqr9kOVwCBPa!U(9E zW5XxB4(i!;%|om(8s*qs1BiF7cK5Au67zJf%9_d-McCAmxBl9DC)MCu9;8gk$v@&H z6oz2)LsJiH|Ki^IO+h^K)A)>Fc_32c&mji+twi0YwA0g-tcuf3)E#P2!goBg3etTl zPjlwN4hAuV1HMp3Z}lJH@P}5XJJwu!@p-1&P;TD7S0*7>TIsA=MXeYQ8g+=dF&XL+ z&(2R0c<=T3@cp_J-v>q6Qe7jb3c+Zu<8b;xnV7c*e_YLejm#8cxOoTVmdf1f4a6fKWdsZ)Zij11$*eE8i%gil32uBzo@*S z{>&;r$W=b5XK+$zzFJB5U827K&Ue@(scCNtD#Be4Ht@E$2N4pffiBsg&pl~?=BtXiu>H=aDnb8& zKxU{fp}T54wFOf|Gp7JSwCjF2pW8uxL0dtu*f9#-^@n=u_s0-X*s8I`bL#r^d|G7hwjy0{e1ciH%*yC}vn>|EH^CWP( zpM;~yaOw#<5sFPcyL_Ui$9OlKWX6t~{GpH08pXN-&{mr}aNZyAHqRIG;_8)U zEX+TZn3g<5)ojKf;U4b7rg-9EU5S^P{mAlRFrP)8=PHu%ns&{`xksx=TL96boj2dW zPpa5}Om7Bn5k&;jj7FWzt~Fx1m-$Bf&T$ae3#)FRjEjv@(Vz!!_DDGja=O_a@TMV) z!7dr%3$2Z)U#&B@w%?3WC+*3&03?>13}CF$h6;nA)cPR!7kfnJ40QCa71c?HJym`3 zj|R4UiCTbyKuC!Et)zBfC@H1zro`q2eZ(Z?dl`(xOc!>!v2|-3YBm|d92W_>v8^br zuWe$*x!{{>2?jVtPl9N>;w=W=RTv)%vGgj1TGa{im$7_EyEs+)Z%L`8UDXC2g1 zRF#$758p8a!bg@gBTTw!027{!)h6Fj6ecrbaD|pXH9TPp`gs|KK?{MjnV= zQ$8zmKRd)v7HC$OAvh3Vaej_I>5CEI@eS_qp>C79BMD}DND&my{yJqC{1j3gB%2Bv zdTtO{ZD)dWxmUO5c~+a{+SKFMwiK#0>UnG`rx(F1Q}zt75wD1pxmcxhsr|udHh%kg zX0=#uVAIbdwV{1Q6{vCMH~oxy8c=sQhZaXw_LxOd*k~uvwotfKd-S6#_!r4)3SBD* zCUTl%JM{wfTyPuWZK50TGv^dZEs|P*+N&m7x!{tl8m6za+-`RQ80xPv|FcTY1^frq z>p!WXFDf4^DI1W30jys$1DP0r;2awl1M^?1?C8XZ~k36l^^F4aHxpp{y*xe_d=$IA^=i zeWm03WI&wr7T-RIkU>yEP|!m|F(?e(o^T5P zHByv1<-1gq;UC!o>SkdUyu-6|mt6NnOAcQ7v}*A^ z%(dR%zuA4p9>KQwPOob5?84fAGG0WUO1_`wV`zr64S4$zO1zxj?;5_jqjdE#=CNJV z&)DzG4Yk~)DQ7iS?ZIcocBxiNfn1G~Jgd zkv*%Te1_7M(C(pLfy!@q1l za(`6tz4PI$53o)Ntv)r*oH@}J?UKrIQ4O+jq=sL|815C22y4#l zwQ_uC^>JeP1KA4*JQfM+b?J(bf*7+G82G)$HbgYM1=4~fV~|UE zl$e3u=BVYkax*o^$ik3lNo{i+cYYfgOn#1DoMH^}zA%X=b3&~&B^ZbP)WKo}m9o`1 zqTOT^IBy^i-!%6&2BRXs_oDo8fAzD${AmB(r{a$2_hzV?aCCe}QVUd?^#s$c-k+5& z*k-l`^qBGl!YAb?E`75U53YmN%?m(Dbx3}pIq*YJ0#cIKc)o*Jkn;)3g9Rx;*!G{tP_n!9#CKhqWGDgmw(c^jE0$NDGW<|n zf|yC-Ynykwh~%`E;p@IB=q?%~Y8owlThaPuZT>Nebm!J1tO%RgWiM@70o^8ZMgtH}tcnKti zAK(2driB4ty%jl&&-?K=3UF4jMaEbDHU-GynuWJ&%ohG^oHm@x{-Mb-jMr8!xO4f9*?0Gk1`D)-v@^G#Y0PqZ{#X$JCaaVat3`tSQtg?;rz8 z(57YPm!+2B@~gM=+%;G9`OeB@i}MJ$qlxMV2;5KCV+i=dj3@G5h&x1WwdHtL)TDM! z;noD}3Mf&I93-|1drY6|MZot|yAH3`ag-gx*}h4zMWQyCxbgR2K8MhZT7b+-yoqF= zR5J(KwvJ5XWXr{WmQ7|gIy?8i8V_$LrzmEOJZXToQ~lsx*f_XZ4vYB zwpitlS53#T{s(5>{hNy4+A@BQzkwr@r6=)C^B7%6_{5HN8Ak?BNvO(lwJuFq@>{_-C_HjFSg{fIl8gdQ-+B4Q1xGxWNTtK5~0 z=T9NE?_v+!PwK7H6LTWJCc~&_y&zR4nsi?`Qqk3+Quij>^+8gZ`;=G}N)rt4{8<7f z&pz5_{O7J3eFe2A%Q2$#p&a_y-ov+nV+vC`WJevZ{-@8VJ1 zkJZQDodae7N7>8Y@M&P*Ct2p>wxz_?0-ut`9h25pvH?(VH)=9 z!wv7}D;-Lr^$1$BduiFxJH-5vrP09P$Nu_2@+k=yT^K9D02uO~^+02q;?tzI=rGw_ z<PWRq@&FoL$1z7xSTh!`;vO75XZV18Ij{z9#_i;cMG2 zMO5`<*gWEcaL=wgL(=dTTRg)h``t=*giw1!71Ys;BJttgv?tIzuLFRGfh(JSI~xK3y4>dH4;ccll`3X8p`^<7Cjh2demj_ z^9ngj3onE;SA&>kl2^@fe2?Jd`sD3EE6IYSl-S6*MLch)CY206lqmdD0dkuPzwA%k zwnIE9zVC{_Qn>6@s8wyoj>h=p*OMNI+i#%$Dz1wDik6MgH9$!UG9k z=3y5Dirzu(Cczg-pDC;AT}3ObC#p0TP&6my8q8dvBPzL2Vib$hp?g(2$h`kXh8iRM|(CY_;F8o%Uza z_2KHpf{Vu-#V+YEZkVteUeVucR3g@gOFwXu>E%oOAM)qy#nY-IvB!=Lep zng99%@h)6>*~LWu0~`+ztagMJauLk75!3*n6k<=j%^px;S3SO^D8esN{BorkP zeMT$w*vgKub|Dp$D6>`EhSU;wS1&lPU`^5&rIPjA5aBvkCO0@>t=Xea{l1&4v{|yt z!$U-~G&W%c8BSTSGetL{L*sRtXUM_Jz!7_4y?0#CSelmX{f;Nx#Q3LSlHi<_%7NKC z+gGYgOcmvRG!X-2CXjWp+-f0=XVuakpXNtA21q~Pv{K9VQ%gUv49loZ_8o;~-MH9g zWuPj)(%=9>iAywi{$PF|-{e)ZL)KM&j?T>IFB&-RGOgXyY~eqi%bj+rr6sFD;29QE z(v(!(|LY>qNo;7(i$6*IV$6q4Ii{{4>$Yg~j8i6Zv9Q=?(~WSQ4yp&GLT*S_;FUP9 z9gPS(&jV^ZQl2h?MLs>5XIye^JsqtHPmEKtK=KX?r0hx$kJ0^YDvIV3FZgcJ_&UX( zak`(;y6UDQbh_f`tbmv@MoilQT zH5V<)EXPctm084~@dE~DgO^gNTBAy@;;Ozgc>u|{bW_^?DNPyc-O(^8u5z-gZ+tAo zbg#qwjj{fEh&SUltol8Zujly)ZU|*AUF&iN#F#WogcwhD8JYrfxvMXA?v6nSJe`?r&GK6!fgZSq&u}3Y^ge%K1#qm|qonn zt*xZs;ML!DwsNp@vT*%l(Bpabc@=>AK}=E%00993&03H7LPBbe zcXUk5Kp>EWii?kvg_nU9$nsJM1Ux)EA_5{V5)v-U8^Sj%|BwHk+W=^ zoLt-@??uJLB_uy6DXXZefkTc)#wMm_<`$NYPR=f_ZtfldfuDkcKZk_I#Ky%ZB!2yt zl$n*Clbe@cP*_=2T~k|E-_Y3J(b?7A)7#fSJ~25pJu^EuzqbBsV{>bJXLs-P?EK>L z>iXvP?u9N00Mzef{f)AJp$iR67bG+^6g1omT@aA2-~@#R4fBQ>7F|dI&cGhyEsNhP zOyTH^il6XgtcoXCh7Mz|vB`mJ6sIqw{YKgUjxhiKSCsvYu)ota4?qM9CL|gZ8bAPW zeMg@3_d&R8Su*X+cQ8wbNdO!4s>$}Py(S^akI|NT56Kd%y6(I zdwM408LDsThu@k+PjncGQOoe|>Sc&U0A8bh4=YJH~=1*wM$=Kuf!YlTE@+C#JkKUt6ob%Fq1_-qv zf)?@Zo<5`_2Ze6`7+QaL2J||LJOh66wm!s5UCH5sMt{o!!C65f7_1TRxv3 z;6#q`89<>3{@}LfYAXoY{uw~(-g-;p%S{8m-HR%m`5EwL2;~_7JpnpXft~5b{iQWJ zG9eBoE+!u;BeP-6>KDo#(hlf`G8z0)flnVei);?g{{BRIX2WsiO*3fFQG{#v3%=gd zhpdAijJ+faNyKuGLYvQkjY7bVc`4{1mFXFfz7_lo@V5Zn(xj~oi7PZEs?|(xRwsBO zjM-Ld362)M^M5C%lG4i+715FpVLcG4tT^w+PlFrYB zHyNICB7ZtSZW#jDj%hyw=6DUj%=(R*@n^u93e{Y*UX$I`Z?(FEYxU*E2h+?LcKSjy zqPNovk^r0aXTS?Z5nni-0pz1_BBG8frl&skj|~~mfYnqmMd|Y|1iA|U!EZq#B&^|N zJDkYdFFWqffO6mpnCZ2r?ojw!!6RUr1@4^%iLkIn9%H*nes2Pq-p#8eAetd@nmIkU9X|Q0wX?hCKBzb~= zY4;?7>W?dfgvGl%rABsPtvjrlpcigRW)U-hC1E%OED0f?Tgu2oM82{?!tmW)tHg!% zgS4CPJE<$DR4>A2{!gWwKaF*OI2~B?GaJ7AcqwA~MVP?NO8GC@$U{PobGUzpXIXNT zv7SOtZ)?kj^mZMtrKT~;q&Crl05Jh>SxMT;-HCWfhaN}p z#T{j=-~pznYvuep6WrppdQTErPv~XX8_$4T^FU;<0FOVBoGoX~cQi~rrhR@=nxOvM zFK)r?`|}4lppmT?{>_1I-zL@ue|#G51ijm>R{I8OS6e^6y&nUeXn{qJT;Ul2uNMaH z@gzx9PY5PGPjO0DLC?#hMgR!(XN zYYTJ|@7C1vHzrg!v#oo(+;^evCS@l%MM;{`?b(#*QmTrF2vTJ03!xJ)<*SgQ z7xW}4j2`V|hK_E&e$f`diR%~@)N9ucy21iIzHKNCst4ijRW4X*YA5Uv6XCU1AIow{ zd)0`nxbw!Zf8RgW~G8#UT>uFEB{`Mqu=IEBT;s1d7=74wybct%ksn!6euK(qT` zD}W#w75BzXncDlB87~38t#4a&v06fARyZluM=FNb!>^B^$m}?~02+dH^ zm91R3tyX^0h&9OrrTYQh$bDEd(Y*+%GUh#{y2&N5{TeFZu2-EpBCjG8!fXZf3-X}F z{L;;zS~G0v0V!wYj2*eE^@w*=d_(Ta1uOgZkH zeNx+mFxv#Ipi6kK4MiB8D>v^(yVU@<7?}xCfPf$+u71RZkXDsF*c2!zcE)Pd zus{H@KyF4B+A|%|vi1x>wz>`}u37wO;fjMQ<%lV4ZmLXSUjfPTs74xbyE=7T!zVk< zl!`S|Qfjk_p*2iiLCFCKUtQGq$MYlVAQso`X$tO4%1tTkC^VlRtkRv8G9sD#RTYYh zEhq${TdFYKoodoIq9P?w`@s+_8LP^n*nt9fT^AzgwG-WD~BYuy>}u)P8-q+4mGQk*|q`v>@lFJwc3vmAB2)pX$sGd5!wJnTL;N zH=rs@Jv%zMS3+-jEi0Y@yF?{+8{4^D$IInjJm49(6&p0GB5)Bg@5}vX*L%I)EC_eC z9e6`>hUK$zvFWITJeF(+J_8PDz!S5mqaYE)ecrCR*wd|-Quds*B6*rjW9mBY zf=7tLVOs|lwBHsd928d{5p#__S%(c>0b*?98t?Uv2h1oM!ggI-iF!3d@W9lF^Rx5M)SMO36N_jpRy?h9>eWTyRcvT zUs@Yz!3a^!ZTi)&Z@@rv6GBX(=qv)9=2gp`8PRpgS#Og-S2ihwQ064S$d7oDcpGBh ziIY7E$5)2D^Y_QiuUyY|ckQf*1}8f3f#Jqx$|}pn=_v2ck*!umsFTH{Zq<9O>e70^;I7A9>mJaF#F2?bSqaY3);Vw^|A zP}Q6~*f77Lof?^W=4f>z#<{DULc@Xp ztbIWuvG4OKc_E;x?a9r_lI5|y_?%D*_A@*A&?YP&Rbn$Za(8d{(l9`{VSO2V-@2#g zW`NqnwmBtCcB7T~TO&%i5i61bxzG~#bJ z!-MDg>kd8efyK{&F)1A+0H%WIe@zsQ;Ga>zse)%D9k4RdTjxA6!;*F;?`(Guqy7xo zS!i4v6j;hu=3r+Qqt5&xzsRgGY@+3k4=w)n4Rcn5ifIoZ3Lc8DO+ZA^rO+epTHay? zU1Nc-t5^E{=R$|hUz}!wf_p+Hy*rL7Sg!gFvFmJ&UsSDZ^b~57q($s3ENeGp-t`go zVMN)-NN~Q+z5@1@u;n{la`=$NK-bi)(9a8D-{S(s}W-|m!Zlt}7c>>*D+D~qgy zWDnOz_p$Y6UcpzYRMYdrVQ0LQF{OtRZ9L1YsZa8J1HPrY*Ek8&ZAwn=GIE4-;W&EI z$GKN;X|FNpo1K+FP>o6w*I}+Z8M~i$7mb9VlEX*jL1)eppGV3xcfJE8@;m3DFxZ7n z?P`OKvd@6=UMq+42Q{!g z)}(j;dUxec1IcMkAQDAE%BUzal=cAm(b=7T{z$?GT}zAXDP~Kj7(1A~pvBU?y6qvFYP`HzGE{&F=2OCm+uUCt<1&gNnyJlHDJswRQd-A1 zSJ5VmJ(~<145K(S*(aJ+#cW}7Km@V+c+qpdtZF~FW3r_8cu+eUa-$c$*)?GbL0076 z?2jdMk$1e7wR;^K)EvxTw_kT6LMYV45A4p%)LrRjlTSQ+@6BDg_Gbz7=RFF{d}Klb zMl(1xErQoar%uQtcu_UzIc$koo(u| zV0}YXeU!983jJb;FpZi0*T}|}ZU;GFaj}2}gVoA88X3wT;*=b3HY7DYuAkZp`i(;EAc=Zc=hXGfucY^bD|$Y!9rSB%g2%Be5u! z1UW*x)LI&PsxzcYk}p&kFLg8d7}Rm@xNqm0TP8goc#tP1Tt)W~bv3nQKe-OR3a_VY z`iMMb2%w6Bc$=1kFvK$;FsB*rM^|zf%)b9r1`^n>AAU+HjGM*}yn1IuACz&$X=uKx zqUHP%(FS+1+vq!Os;}7(i?dF`?STfvd&TM1M0FITViMDd=1sK4L}q@C40n_wG+pbL6UTBbw9tEG{94S2)f0vSUHPcH2#h_?LCO!HLhKpfFro1L7;Kf z0l+0T9nS&>?sD1J4MHI#dy78~T<`Ng#TLBw4fw zZ2>N6z)xtGVu2eW-Z$UV5X=MbcTd0u9T1`!GTd=uIUGgvC)kL@XeYU#0b7-fVb6e& ztS3~tSD?|N46ud#gYk*dm!rHjg%J;qj~41*zKMJ(^%)>s`r-(FxXt5v3BNit=_(m=yirXj)_dPK#$$Rf_ow?{ zLM-YN=YAl#01WYeEev31qo>KlX9f3PAuYENA?drhJp($= zyL|2nL13+z@n1``*q!H3&RVGX@hxwDwtZv^=u%$%LCY@&6XH9>NDV;ek9hzBzKycs z8StC68a$x_c2UN-s*Fz2ONmc7f5k>plB@agNzbFl`E`FrxtO57*hh(x7JxRGC0~hK zKm2d_%=-OY46Z~UY`4R&q1<6P2|VC{-H4rI|HcnNf?49~W{+vOf2G98t>fntPQ{6A zi>uXI2{!F#;C_fAHJ&nhFo@|@PqSSvwLtJnG>CpK}Mt1?@uqnTZdL%xa)7arTwVxSvY zo4dPWpJ!;-9@$>ix(0I+`S`jK?5hF$B-hQsJp-p*0NgXue(xD&wD))*fmOX~Ac$Ky z{rmT6&;#iYv=?xBy}lJ`3g%fu}-nxB8v!V6V(? zvaQ}Y6UfVKSL9|(?ZuWw?#dn3Me~K9Bt^8OWA&kRSw-Lz$?X2^GXQWEtP)uUG}_ky z_lke1rX6981S~Idzst+SQ;*)r4ICKeYk}9p|4Ie8f9t(^28 zntM+Mj}?z2oogOZOy0iP7yK=cpb@q)x7K!kyowXm-})o|zxBtGzt=sJc9Zy9Z@&aF zJusu*|HhWFOAs^28svD&Dc5n4ZXa$IaS5Iq+y9AmF9Xj%S3C94^E;J%J(oqxSiLuX zU`L~s0q`=F6nVG?Rnx!SSln%7Pch+nCqhwEDApwj9i9(| z2Nh|VudwOLb&8i*m%V#7I}KL39S2@IHS*Np?(LM9S-vIoQQd^nJ^#vR|E&90A7V{U zOara!N;#xYowen+*YFrX1!ELuUrz1RZ@elfC>CF`%~cZ|1io>9xkd+#NUA49x8j%z zd;wUlS9(e2^cC&ks3shs??BL3rG~Jeo~ETc>$TVH917yiGvpChWzOv>yc2B*F{bv& z;8VU2i1Pkfg5N%RasP!?Y3i`K9C&Mn<1$FVX~DXc%j31D_cZURdia+!^gmjFSmM(6 zD06!E0t09KW9)}1yd%ubBRxI`_fvbFCpE=a9@3|aV!em?D-xIyh1ZIWX8&do{&lc%GG_^Uk?b;q9fV z`7D4xd%EqZc@!%D51zhbmJ$U}Qg_k+J$U1cn|ny)c{i#~lklPkQbA_cHv6B=^CW}s zd|XyRBCKFC`RM7-NwzD9F*d1;t|N*V)kB*p$$D%5j2or@o-WOQi84#x&VuQ_m_ z%b{R3QiTN|Zyu zy2)4#0)djXDF)FDI@~;cCPO}9#4oQ<=IAz~w77}1&JdDt&>Bh1Y`&HHcEmOa@o0RV z*C?PCTi^nuI3gcvu!%a|%QZa90d#ZXFr+Unv} zkV3TZ~Np2m%w0R;>Z_ec|ry+_Uj4NI;n#oOOgId2! zRx2E8F+dQrj90R7_s(g^F|)I-kFS_HbBVbwcI4~(Y?;k%e}@iJagt@&YN!1Y53L{_ zIhhHY41^BNJro}7-qj*uUqrL-cZiPBJvwf-M>+@!p-9O4_xxJP@Hpa)^$}`sX+ODF zG>YJ=3IcRyd3a3gym$=q=2w~%QemFjquPZU&ge1RdU;q8!xvYH#rXBK~N0R5(q+UM({Gxg;QWe^vbT5!#Qv;i1d|rDHq2p!@EZ8cYrV4(b*tGB=sU?1` zL#tB3{>8qqa^7EBi+2$yJG{_dc?K(Tu3F|pB9nikr|MVgjG!aDxA!C(;*9sHIfQOJ z4hjE9+w02I?|@ zTl|FqCG3`18m9>?encRPB>#tSv!5RB}?rmu&~aI0Vbf~ zxyUr=2R~W`oFnQRv56>-Inz7v?Bc`I1(gwEW1z6G#~>)PuvT<$E-o9TLw&rBOJ(&% z0wKFa-usMO=#I`yVT89IC(P~a*ABnWJWeGw4zhYf=Fcb+@;1 z+hEIW4llumo$3!Xexk;jR2h2U?lA)c{U90&wb&8lhvC_6DD%E<`)Ob9rV`V~7h*Fg{8fStK##@3$CYk%XCSpM%g@zSMs~7NSbH^-PL2pFgT{ z&1KKDUCz?LHXG;@%P*uuFZrtMofaQT!z*Terd)oN(Yk~*Fd;FY6m%?qh^xH<uZi6gk-RRQmfy&wDs|5nBkPCldsab`$YUx|%g%1;#g$ zD5bvC9z!0!?rK1{y^S*>+8ew>n%ayEKQLB6-#cSjXdsKT;xrh+BSS2ibh*Za;5=m; z3LTt348+!=%lV-IGnU3IS~obXz|`S!!os!xfmg=Su!_CO048DJon2yYBdaNO?d`XI zN?bc#SaCip9{CAp5-fzWYA^;}r?3_-pE01U#`f8nc*4+GS^VVc_lxXF;E;Hil)xE4kee!T3EhIuS-zE!?#@MYTia6ltjC zerJZ=VfQqW0lxGtkc4ZB|ijRv{6~`n1_ST&xA}*m3MZ z9g={usmh|3`F5==HI(RsjH8*IN7AQ2v_0%~$b=IeJajp}L3^)F%qVTl4H{|U@8xvj5~62m5y}x587R3EYK_zpgAyELsdBm z^mGnqYHhZ1A%7eNpS}^9jMq4mB-NsVmUoc3iLOCq;tF z9$hf6E6$5uN4fQm)Y&CloOIKg2rz+d@hxj!y2_on`zfXNfUmPg<^0 zEP^ad;Wm=~vNGFF6&WiT88hKYU<0}N_|?3Wi!))qGmXT<-nP9U@_(u{{Q|6`Z$4Pr zGmphe)zqeL{Zfq5!qulH?D{f+))I%Z6og0apf(Bh2{y;m$e_>yq~A3D^G96*bdvgY zNl90GagMZYn~iB=l#jgfo!KZ-Gd;Jgp$H4vTghr$6+;Aohwq0{aqq10WVZO4pOl_% zIh5?569py3x;O6#5hH>jeK~E6L?^N*dATgv_{7|@rYXX~KDc26a=fZw#)8 zl;qD&z5Hv}@jn@+oo=2T(;hkTOG`t`Wm`Y;eDeCIjxwd`7YoyABrre13F)-Rj~~<9 z+2~raEub&Tp%K`FkC=|^x!+qHg>`*+)2R3GXq9%u*YbbZd+(^GwzZ8n2m(qGrFWzV zO7FdiG?6Yf6p>D(_l_VSEi?fEDM~K^DIq{W>7hrugx-6HP-Wk^&)MfYdw*x|v+uoQ z+;PVp_m2$7N;2nKbIm!|TJQ6F-uVk)sW!Ncw%`{4avT#P4V#*~mNdOdhK0n06n?)| z`S-tqe$$r2XxYEt`1gvE{{nc|JR!{+BgcAS{&VMDADJ|Cpql!IN$V~OQ)R1@U)OlL4H7u-f&5R4pz{j)U< zXLug#!euNcfQssL)H2dOZg z=FNm54Y2lYQvGH?Ip7ALU^FIT{<~8R{ib94{TnXc)%^@JHy-Gq?55<;#^$TEa3xlY({#rZa$Fw$lLyk)Jud(7CXD69=_X0Vv zG0Mm9POlm!Fy@r@Km75IbCSP~lXy!f;Ailj`d`DK4>Jt@*-N+nIZU8mvjv9}>cqvc zzxZq6-uY+42A@g&`xyH5tpEHmaH<}u388JsC1gBP5NfjAF`lHCT^9e@+I9>?!(Fn& zKU@FT_aJ{)q=Wh~RybzgY*O*A0)IOVn9=k(0}LXSAXs&VmyQ|c!3CW zKK`u%F+t=R-s>PJ@`_>hXV01KLFaj|{EY^sKosz3h-2F6kF&)e2Xk{{>>3o{+X|~4 zb7zcTn&5r+f%g1lYkh}uw9L05?dvoZk~Uni(1(H%|1A0O7j-4{Dkj)4ZR(V*$r@j6 zB635JU)IBIC7xc<&k%d$7r@x_-92tcr{l9CIqSxHe)%_pbWe6QVZC6%Gw)o2V_i4< z(f`iz{%6(~D{RS^ffsNFR+&k9GQ4YKq;Wfu^hMYfFl_27x~$C1c;iC&Wan_V1_nzq znsD0wRKkr2!diq7H``&2{sk#wJ7?b$=wE0e6>i+NKFxu>mrR&Ae;IU~Qw+J?GGXO8 z9>7(+O@1OujCI+*?aiK}oghoX8T7Zrl3&FW#Qx43lvkz@C6)s8WO>OR*~i_V#Ct8V zBy&<_#6UmFK3Y3jRR74-xsr*B>fEv+Nf^`Zo@?PY|Cjh36>4Cmv!ZNa{YCOCZ@(}F zF%(@vjz~z8BFs#j6Yxgs`!(Co8HKlnY zKkjDRv&h@MSdylyYY~hytuP+=Je-$YHfo|vLN1D{FdAsMn-|#M#cZXOU*-6@bO*3T z0QL*|x{MYGpC+R2PZ2 zR(lUqxL{9-2@brwG&c$XBPi#D%@% zYLY?`pq@Q?!SpqJ`fB%XMZKjWfD0#hLKyVsAg(jn;bJAFR-a;|E5j@u4e3ABC^tF3 zm$E3-vh;Cl@-&CC3D44-t$dal=F8HxgyZ%slId=w;v+w_l>0hJ$fxGX*RlMGT21;h zuVG2JA!IpHJCgUZ=v@TLCMxZL{(Q+G7QG!-SSP6_W8`4bVrw37252rhvp7pCsEBdF zTL=i0ZQF3=67orh+oR6FtF-F!j z3t%iV|89DRdcB&~hiBMy;&Z%&T2x-jT*SFc_Z*LGOeHz<76aiW{Ys1vLK#S%ZZ^v{ zdY{Oy9q-iEm5Q*mmp_~d-2$Mg`2}F_6X>|dBOH^Z^w236millZ>T#5n;V7btELO1O zJjUftkOOoV9!MD#aJG!CSd-033*`_P?iG8Lm_X8mU3pcTEbF01b*1>pM2%$Z%738@ zZpUVn7k%sHo0^i|Jxfm9R;({tO|Pe-KP3e4Wojl#E9>n;W{x*^T!W5)QQ68pw)(6o z;_P1Zd{#0 z?On3Asllayk9~Xp1mW`ym^Xkgj=B6^P%;ZD{$(T5)U*R0K#5)D;`t}R} zJX0we3$uKg8pq<$*)OMA8&rnvJ}@X*>giy*SFES_5_`Mx%#T^jwU-p{7l88UJZMH( z94#k_0A$csjQBj1w~mV1B3ah^fE z5bw`+ZU+L(fXyuW`-SP=j$#SwAmOH0eZ7tJ`S+-eBEOV?biGx=@wapsZGFg=n&(GUZFR68iT;%($g6pzbMvT6_*RK}hLw{q+%&%BChaaCjLyFR+`MxS zV1K7`rE|Ax=?C%R#*S6Z>vE?hD9~q_slj{}?#!mUI@8q} z>z+V>!mW0K`unh8;uoVyH=MYH)%2hl!nZXnL-MLFpOXO z->C&6-C5Baw5o4WY_~*Ox>S3pm!kPxH^E;EXUM1J`v!<7 zk96R2D$}sg1l!e>Z0}xYtqV1J#h(;ji2Dl3Q&b8%v>)2kwYM4XB1pekt;loEX0J4C zrI2FIaeQ0DFM4gcao+>2jhgY9Q?iP)N-^SDPy#lv3edhj+HZZoLti~P=u_pnNKal# zae+X5p@uc3PIB+gDueYB?!PPmq(3Dw?e4KS@>mSv#T=Q&*_pr&4&UTvD~)SxO$|z& zXXwYb+YgcA$X9eVhNCA`6CI5oXg;9P7r3qtiBEdOfj(=FEAL?U(Q)PVoeDpo^YwZA zS0dLuLzZER@1*RUKT3|uv);#KPrPRtorbUo>wNRK@e*&dxF6;t+FOl3U$|q%&7R!@U=d)?FN9C)|n# z9jFg9@Al<$v16WqnUhmss#E>~smm&4m@jb3>Wnps`pV?dF-YuBOL&#U!{m+>S-y6& zIL5DrG$?BK!k!9q1KYimH~CwaDv9Nb9Nu4g5J@?+1cZuAGNnBJxg#?i*z%t0PdZQw zqeYkeV;GjYGctuSt!C%tgqPReOit#WWgVxacKsMn#c@1I3@iyX(cx(K>S-5C9AVO= zGoBMV5Sh~)E2_cC02+`~QJ_d)s=Tu)A=eBXDm0txsNuXNHBz_aeh;%ke7dUaEM10I z@?xN**@Vyxi~2aX@$ixXDC)TVcKV`A^^DcCY5@t~ZrVq8X0bg1p4iVv18N{yPn~Om zK^RS%Cuc=@#qrX75@zd!366e2OPAGF*!j3&_&Lp~c?t36OYg~`-hd(Y^tIsfxwtR3 z199o66@QQS`6K`H^SwZTb`i47N7;D9@o{Dh{MP(i{+8*3>e%e|2T;6|0qe6**MXdE z661Lea`m;JvwdO+K_3rNv)f-eQ=;ZMC2i2kH?7+!))`oEV8>F zpWod)vD_RNoOSRcJaC+}4jLIqj(u2{AtSA^LAgKhN()Po?C-svd-SORISnEPYDi7g zAD-77HI?t3ONx^FeU@UOOI)8IV6ILs*(AiGnxB0pebxdnk^U)2of2{|GAm<99D~Fu!`OG=$ONMePRt zhZj?$0qUO;UWZ-PXyg^=5*xNIntCKk<;hpEzn`~G+Cjh%6W4~k8I^D$z%!u2h;5a> zzh{I`#j~N_L1UwW!~DmlQ(SA74a?anO_cOV@~}#!J&2D{qEV=WlgaA@yh$D<%{moE z9S&^&8>#=-&EYq)A@-nRyNPjwfx6+vS(PHkDVNxMQR#a2jOu22UFCZ< z-4~eEgNl1tJHFqjLpbmMwP7u>%p7T3YRC6jsc#A$`YLusvG&k)-COBvIB1M^N(~q@ zAYn9h4``C^*tPBCPWtiU3KNt}G5e=M_xFUvjei+;|80BCah9quP@KmyF7KARbOWJ( zCuaxZfJ1Z1m^}UC2Bg4H&FSzK!K|rCC@$b0k~KF7>)=caH|xJV>D|;Ghq4YGb1OVg z6-kohwCACwEW^?1xKr`y#O5qgJb>Hn zS$NGDK*bh=eejO4EktPjzm)q|b>=}FRP)x2BTBd&S-td!O$2!L@eAHEn&=Js`~b;z zNPxCvsK-3&m+$uY+X^?r3B!59ilDFxUtRR=8X4im}_uGryH=D?o^w^ z=DbRf$=Cm3JLh0;>0bzxvW`3Hf$8Jz-X%-2y1sk&Ec)y3;SY>FU=u>|znG9e*<7wk zFoX2XM{;)*Dw`@@Fd>S6lDI*)bA!mC8F_`7jMZP!-f7FeM^2L?{YSL@SKhlAn$`SI zO8b+|<>pkTnwA(GXLnqeyo1KGqe`V&J5_`!{v&x!Mp0=dn z01UaMQHVVP{t)rxB{Wd!i8H2+S$!!t|;J*oeMakw054y6(sClO^Lqv~ff@r5KxJvJPHP_dI z`P9<*pB}8e&JL(X#1fu}4ajVnLaXXWQ+ExQ!ZfSZCa0Zj413a8i%l%=(!EIXoqyr9 zb{uy{XSgD7^ob^GwF703EA~@-iX)Szx0`|?%Do+)_utc{XwffnQ)-Xm#i&CX+=Fx3 zvMT76&LdIP%@}ss_`?TczkL@hSdmZWv#|=)@UZ=}Hd)~(b;Dh(a&kQ3qqoTJiJO3x zi%Um9s903iPGNH4lqmt;^ZKJbLLQ?8vF{(L_}Yn8wLgHzxX_|_ofp=J3fFPYMKf(X ziH9{kPTH;$iL}S`&08#HL*u8qDZ5QPp0}uOLce@Y6=RPQ3DH}&zkBA0c$kg9#I%fU zA0QW3yfHrD$jU!!sP1PLJX6aoh>z-4lK*ik-X(G@U40_UxZx!d!=*i|&SKI^60LTfF=2x4 z@*Puo1+Re6j*5A>IgSX{xe5|So}BA*`gFp0;blV&ucI~nXpgf;O+BlP;_VL!IUL=a zKq|cQFONp{uH+XKY#k<21x?TGr5r4#ncXO!yG^BGQAeRvd-pXJ7{hC&)t=Rl@|@7? zTraAXl^C{5w2+59O6+~+S~6`J=QGIXYqAEQX{7j!8c#>JJD`hpNLyYeh6%hc@EKHD zl6~OA>OOiR6ri@mE!plxIikL*CJm|4TzNZZ^Em14;Z08JmjK$ggGyLs47Ak^BgZ8l z8)Nh1i_Q9R=Yv#v3OuCz%CIji#mSLpInTz4Qx+kz>ccr&j*j#nU4`rts_Imp)}ira z;oU7vscX&{a(`D!+tO+x2NXcy-&ylKRNN+U*)B=zBe?(&L>fLV61!Hcuel^mJS!>U zUqUxq9_LJ_KitEb4ZN9vqsQH#Mpz-hHyuz!O?koAm*u2d3y*>3=tpnPZNp*+H)BAA zL00MwE()9#1U&N2CNz9%72mhMP$yk#q+Xv3{dl5!dw}vo6*UA+mx^!lP;QP7ZpV4eq5B#T(If0KA#4~3?>MJ0)f#Tn*yTcjc$DO>981lU@5E{fOI58H%u&BMV5 zjw^hP-K?+DMYi=&VT3?JRqPbz&jzXo^tJZb#8$(_tvIvNIIhm&XR#v+C*T-p4XbPDVUC_Np_uwM4I}Wq05x z9iIR2!NQS*s*9ne_`FJ1U?3PEvi>Vt_-8Y`y2GY_Ah6xF{l3bsCuOvjY@AG=Yi;DI+R<~^C$o|D2?{biLkrzgDgEy2vDnI6Z`GPkZOjY9D(8k zy8!_A|DDZiPS7lnGCT!J#ARk*&;wr6xS1d2j!3`72F4YCtSZ~aaRV94Q}hpe#KY)C zB8f%Ae6!*{S`y`N(cjlj%Du;hxNY0h(v&u5w^aF5c;1UVSFYV70xMH@iwXY<&i>V9 zoD3_fa-E=3wSX&mfK0^OW>NEj@BPHcWY!m)dAN82*saSqBuCAEFFB1ij*X%(U=d3Z zj}xaidC78vX#!KdF=mn1%sFj!>;FM&{11wz_%DFpD_%dX3%?gA8*l$7+4BD{>mRc4 zpR|_@(Fi{#dB<{)CD09{#-odR5K+zvXLyRc;@41&IAW7*$Y@;71r4-Nd==0D2K>m0w9^*agr|D|PZ zc8@iYJD{>dzo|l`?1Khe5JqsvD71ao{Idq#`rPi;R+f)U=##V(2Tki@JM83FWc- zi9Gyu^Fpq29MlnXme~=1hYy%hOU4iff2iz#O>Rz+JUV40ny8v;YY%165Hs5uBl3JApQj#PZvo*Wg;Dom%{hHD zpLcZ39v`~Dj&v-#Y%Uv%JXx)|k}v)ew*b+79)}ZeZ7bZC$MEY6tQY9-#T>%;XOU24 z2aep^200d&W;y8Q>|oTLNz8qs)IaYN9d=%VylRkTXHF`4wrYWj%PEojCD3}4oHJ66 zE0ELQXC08k9?Qeq%P_D4b94VG&S!)`|6$@8Wy{6wZ{>IJyASP733vO0Yfk_Kbo;yy z06~TbD8PB>Kl2{{;6#)i1|y#foP{1eJ#!PS=FTUa<$}3GRN|}`sUn(9fHrP4J(7dc+_p_%xTqht(4apr3HnC?Am26`epqV96^# zLbriVGg;>m58c6YTdv@sUH`>2!!hDyYjQ;L>K?qVZVK)sHJQXcb4UFg5uk;eLawVb z$~+=;?zCdy`Rpc`k3gmWacL!-AK;(SA7ebav;1a@#u{4CbXd;cb93Q+8GqY(w6@ps zLXggMA|^sJ`>A0P`a{E)$6RG-u^9^W0xKu&_4?BLSkP?Wf6G+a-`6dZB0LE9WNCFS z*qF0}r_MMTOEwTSw#Bs^5syFWh-eF!^{k0?!)j1;yGV<%9X^JaJQ%(jcsdTWn;oP+ z#Ut&l%412Prsj@)o%F_ayw-AJp?*wg3TQ>h#Wjl;)w58=^9QG{Qu$PS%34kL{Su7F75|w_Q__Dh{uy#pFByG=2!x zH`_MoZd;JIJhF_vp-K(FWY}{zIG{(Tqo>{t2h50Ss-NmMb%{PAlcY+vxCbbzSXm|! zkT3JTxR?ZGn5CiZSwS1IjvNcj9d7k&XHkcSFFZC?mY8VCv{4N}_23S_H{O&YeiT`3 z_HNa&x;QRD+^mR9tS z4OwktyaG2Fu?em#u~~*uC}$1Gk|Mv&SLP+Y2#gAcSOe(HP@hX&BV`kJb!pSIbWL%y z?u&BbqA98TXUpq4|8-Wl>vgZwL&mWfMm_T8qO;1@M$dQpJxlZgt_<$nT@X6(a*`?+ zkiBFncPCa0w+mj}S7^^I^(ewSmD9&N^tmcm3=IYL2V57;&*kv=9o{>T=9R80_u@|O zQHsM(DSi%Z%opCHA0R;snQIe#n!j)Qyt_z=&D16w*koe4I&8sGIm-C_0+ zE$K+$S#m_^-d&~mS$XxUw^R@=wI)VB3g48Ng_KMgZ`N$oU3io@XZqyXCh5{VRTbbQ zf?LUlU=8|~8p}pqvE)yxV(u+(MMORHhsR{iIYw#j+4y=bc{`pV18h;HWo#JNx3hydu4WVAa0UNkShn97ikE{Cc?Z(8|a;djvC0*<>| zS*p5wwhS3qCY*)h$?U3FD$xN68mFbbg0H!o942>a2a-Si1 ztqN_LtvA@PrrKdvG?|q2X<-2nKG!*`YzgAZa@LGKUWQVL8ha#6cXLmUTM|&*P%i=~ zzi!3zHh=dGca&yjXQD%)P-$JLetVbFY1YgKHJv)Mj&td{Nt5>MdU8T2Gti63!BA!r z&`?)x$jpc1+JN(>^1TNBv;uFy%c@#aDIsONi2aWtzSPPO+B68D&OU0DwmS-OLQ z(^jME*Y-S@(jLG+8F!*-8Q+>QM5+NkDUCcC>Bvf9J(9yx#^&h2c%ej&x&72OKBjt2 zf=UcKizl4{z98t6#AL(_S6p(>(H#qftZ$`*;HCtyr*yMUpC(q+TdOd=2+|)a1oDhz z=}8FD%j#izQIE5K(|8Oji|yd2h>3p3c!2C6Ps<%C@<^Da;nXsxSb1CxJ0DJNWS03v z%H8}y8Cf}# zR&>NS&b3$k*X)-Qv&G^&PGPCWflaAjL55~7X}T!+HFZLu;ocL}6nH-53KF8)+W8_U zDw}%fh2n&idEP9Nvr2h{$xBZQkFfYK!FN+-&;^eSd1mwQS zYtk)k2YK6jduTJ)${2xFZj`3J$*NCpO!A>S8DKr2h;rvr(8mA|6_EK98?YE#^u56% z&Q<;t*o%-k4l}u(PSeazhP!DUB7T(^GL7m|xS$i3hF%Bn@h`ku^QJoVv&@iH!O5N8209b;7*k=qKXrXLgLvFC*0#SSnD^RS8&-*L)D=x6^D z3JPvoi7vw(cAN@jyy&&c0L?t;^r8J6Nq{t=C=T`g#%#&BB0KY$9P!6D0P_*lJqUKe z3i!O@H9hSqz!=Gffif z*iXdxX(5xW@y%+Ui#5TYOwH`s6l-RtzN2Q>ToMaXSZwuJK2h@zy7jii61!0XhgK4I zd4uksdG3x+?m%|A^P^eri9gyl<)a(vCMStt_t|vY#T=py8cb%)#hDwvIa*2cwP{rVmW-AB1j}GOv&_;6+^zz$G!l)WB)gj&U6Wo9IRTaB6?S^!mz+l}xabzGmtX$s-3q7J1^{;{=?nWpZ z$O2rvcD)D#o2-o-H~omf$>3PlOw2RgTTPhKPWRC(7!h_RGEy&6lm$15i{uonZS%1X zu|^#Vfts&|X&nTK$?dR*I4Xj#Nxx#U^-N&Wip+QMUO$RI)400-3qZjPlanWm>g!o4 zV0gTCblihmK`lusj@L0CW~<#BsgoZ+Sm90He)hHNnmVmj;@HcKW0+y%cq=^IVw8o) zq-*MN$mF1Ftb4{T9_*Y9u=yuBSAJzKPPkRKp+pQbmV~@}G&51M9{6l&EC+9IkCtEV zi1Su@^hG9=8Jg0D0|E~%lB5`&XOmCJKmPsH1MYi^S;TGaJNHcT@lOR?>Ev%E8R_V& z-cXXUVH<12&W3(tNLfj|;%$VE?s;yhHBf3dz#DuWjW2vyl0>qVV!0BktLe)daQJ$p zwD3Sh4idXX{&YKq53&kkSDXg7(tVazbnE!;NTss6LjA^fL9a(3LZHmE+8uc*wL%9c z;%**K_)PV@)w#~C=r4F;crLp)G1u@vxLV|B&+~-;+q3mI+-tjm{|3I-Vtvi{ulde* z0M4tinCw5lfAEZKMH%A!C^Pv-SjsO%f^aBfQJB`8z`h1ji>fO>jj($ul6V%q-7ht% z&-OAq$ZOX%dE@*!;@N)bW|*3z-<1PiLCFF4T!s&F`sio`6(UJDlyTH7v)9rX{%#^> z5m^5*!aG7KxlcPp>q}V}aD0|(sA67qXYVBHW1=@};?`+wg|s}WoAf$% z;egu&Z}G+#zAs-RAAcF;t|;gJXaG&cf-WV^e`Yo!IZnKDBi(=D2SYDVB|8u!a;+X( zs+{xgr;=S1$nWhjb_9Re3V;4!AW0({{#6iN!!w z7b7)QCv`aDuu}XMZ6&~+TFUAYc`;5yZQZ&))))lC*JH8L=U$yIB(~B9 zHw?;k>P`qXV{)UmqJ|%%u4rC^)!1qq#+~vl+z#Tosd4%%@I9PFd4}D)?63>=Q*%nc zi`06)pi!-CSLCxuUj+KRG{R@}sESPzYel}Isab@B;E=oe7&f|O@k?zzNyj>bxzm*{ z7R#+HtJE*iq{|PTVWwkn}E`oVi8&*|&RIK)l3!VInl( zzC|zuwQ)NBa(rC%fxqh~A|-e>As8(sp_h!m8yg zeVJ2OpU6B1x7^G7;DHoxDKe@1SP5y)8jN=>YNzj~yoZz;5~zw+Ou%oGBu!PkYz@-U zG~;B^32T=y2%qaPpv-0xQ6otx1sN17To2Ak?h(65x@Sj}I~dC(77ftXaxQ|lddM25 zjJMMK>td~=e8--9(0xWa0II0Rg>agxtA@K2?nSb}nGj}AoOclQNI^&97+19YRXkZ|k*NUp zm)wgTWb(u08&WUl>j_l=)nJtq>XDlL>v(_9Vjx1KiJ{BY`JtoRX)3=m)70he`-D3c z!6d{*McQDA;HS%u&d|3fAjsp>Hsjg}LSx!s9*{tl+#P_8i`#d?Y0s85y9&3Xh11tO zo{}H$yz!LQ*M4}ZH!3>#TqWqGnyN&a)Dg@TX$E?F(Jue3NtEKFrS&2Z@`%7D@k={o zTB&YGsrk05%bOQBM2cA*S+Ju4ljFN5s!$f20KsC@4cBeAef3v2+dWZFl1lK2B?AyY z5|8Y*D7-0+DNN3vz zU&T|szMHQ+bnA)b%t?X|bt~944QCKvk6Fj2_by06X?_- zx@FsN^p*?07~sycmmxe38C){=M=XbUYxmeyQm3gGiOE9wtA$ZMC^^>HJ1KJA?35lt z&0*@`;UB?)uL26*S&}mESH3<~rRrWHN)T(6s-Cp#I?p9J%iI1GTqAro!4nWK>NWHA z;Na^XeZyqzX_@(?8KW~v#amd$(ad{>g*r@(U+aD>iDp)N&MIE7@MVJ_mLVsrQBE8y#h3h_9i#04(RmtVym@d z``{8`xwJr024L$*2^8K`HMFzK95EoJUQ*M>bE|q{S4AbNt%27iH!Li!fgLZ}v9l0d z=~Q>ur$|>22pOWtSot75jMKi~E3$hT zZ5LMJO4=~!!}v&6c1aK8uN#s5H+x-alFw64M`wlRs?;CXJwAsTJW$D~(fhD;8NI|w z_lAkwL5yDh<8`TBj%=hb33~3BXf!JubK7UKys~tR=+CQ;o*k*Ea4P?ldf2&L^ePhO zOWr%5c=~QWto6zl8(N(^e6w}a4(ogV&jd)Bid1B^TG(EMmaqbzp$|vr7@m{r3;S32 z@UeyKix)r))Zmy{6qm1fWD90~TJ}(kSObgxrfxK*x)I?li3$CTw!WeJj4aLI~r?^tL@GV&{BYF!1y@NyR6|;3|L{p^P5)3)-CcLr5Ehzvu zlx+D0&Xy5{XVvAfAj!PacwL5jhnmd!?M58J6YBv> zjoV%--J_&^n&w9Js^>hOu!(TY{Eko3lK!Y|^eRiL4~YKef@XezOi^q*h>~TpP#sU(-tw`XDV{^tZA6F5v(SPU*cM9 zqRyDm4(cMG3_XaT!hWaSG5`?iUF+msjENIi(j7t(sBrJ*^KZD7sZ>jqKDU|QVd+`; z9CWH7p0jhYTkPaiYgvc@ISVBy(~oNGxD8b)pQnVxI_m=#E^JY?+{YVv2kO^_1B}V8 zwvJBG#D+p{8XY;Wo_yE9zO{!1{IJn0#oe~jWOjfrTioMPO>R5bXOC3F==}@gfU%7| zz4G1TIsA>)IpEmwmPmbbQ$y^4TUCS+4}*N%_Z|Y~uyvoF`ENJlN#-{7YwRg9tWrNC zgZ&)))A)o+OPNx29+!P&=YRd-R5)Gst*5E@E>}f%@8%{!mNbnIlU?3JclQ;69i9$} z5Y1UxUkyp!y}WN%-VffV!u(_^t&3)Vd^*J9^1l7NReDB-S)lIyAJruf(31-R@s z?nrGW$W&V2uHvQP$6HjX;uMO#6=KsdISzmtnLHsgj*;U|!>h~~+RU_<#5+Sxx9i2b z_&IHvjv2vhIkDd4BDR3f_MDt7Sulwg*P zZrnN!)K6eLQ;}BjUlRcqCRH{WmYO~sI&uu!np&B$b#`X0shF8m)B%F8usebDe&goR zLgy#W_*=$~#k#KE7E*U{#b~odw3EMEjptrB{52!+~y$GHo8zXXqZ;uK60x9eO!&+}IuZFg*0feC^5(fFp>` zEfyGTI7h7sK5EdxZx-{W)}7{wvqI#ND{STM8>V|L*on2IdQkHnPWTx_zw3fKdOuFD^ zR!e6waxzv)WvLCN2XeK$n1+blqVh^!0L1~@Qu$}TZ$z<*dLwHvaOSF_L4#X9hfkZe ziv|{sB^AJS2o1jaVTY3b1t0;ytfsxU9ZcfmHf*?U8O6=}GVYaQ&;VWrlCgiP<9^S76IP!CEGiqmY> zECMPv(kBWedR@L$7YTv#OeexJt$T8GWDJaBvUNf)c=nFxjsrD(ZR%7q`vgteAGLK3 zO?+f|oxJja4qM|OD9e3e?>4gBzLI+eoyCQESBO&$iq&;jk71xV*msZ^_l; zHtrhH8rm!0%XBR0Y)aJd{^?XeNY}HjhCJM89Br)2T_lp(q;adb9xWlzmr+R-NJbcuf1X(Is=u)!@6TIJz;5a0geY=G5ATV|qiifA0IS9 zdYQNsZux~M_aU`SDQ;rPZ<^b$!8nvOV`6`X#@bRjm5lJ5AqW0=8m|Epg zAU+d#ECnxIXv_cYnp)h8CMWtQ83R)#Olv9jDi+)Fc+CJeG@o?V$~$8rn%OK59u`pv zf7WWleCx=Jd&=ssAE!QIvF<_ig+&k5jx7uY$Sgg*Bt^)CLO>v(*vH)Tz&z=x9<7UXwlw&X6?PhtX@C0 zp>4k5ofyD7u|s%IcxJ5dqrg<|>_U-1Hw(a%#m7uqtfJ2@A3rZQmynkf*y>sIn5W!{ z2Qut(sA{*HEFbbcNtSnwix>+VkI-)k7Z$EQhvHSvDVetSe<@N~^7v)C`RYBMalOF$ z$FJ;@~|ROFq!6Zxetz^SVN zy(hSx2KF{N7mTnHekh*;QPyo+8NiEP1%F^&RkZP!ui#WD%NjpUzRxLwk$DOCb)-Xw8Dox z31%qpxwm(5+CY69DI>O7AfdhcwXDbXSSIlclY?T&JXY;4xHh?x+6&_4<(!Tq4a|W9 zmY2V%^L8XVRN5BzI0hC@Dc+v?-p9hJbi{9&7r8SItFcw6 zs=^%}Rz+muW!BS2d#&|Tv15k~c>BwD`LYzyDgs=+yzXs$KEr$JA~R`~X@gCDh*_)q z!fSTu(kgn#0fr8Qp+o1Wj@+tzpDrgu1(N{l0{v1nleTp;Zl?g!xthhb6UANetZvCmR6Oe2k07Ps-VokDCLPXH{smB) zY=TCU9hm*uMW7<>4y zK?uS?<1YUJP5EqYI9Dagx7syaWJDQJGQ)gL4T=7X=2-u4Ihy|UIfiyXu=)wNb(iOF z`h@|M#6*)xf=T2rFh-LNi6n%TUgQ)mLt(>k9p}(@k{QQiQpsV}v zjG#liqx?`N&8@UlK$Twv073m~m$8!om$2FxZbPis4HFsCYvczc{8iJfkC~Ncv#5t!=8Ic$3Y7= zl~e{`?B9Uo!Es@Q{7FUE<#YJ%4y0~(Dqh4Y##><|$aRj~PgRE_+u%iUNDcowW>LJ3 z1MB9Q!H7?Tn0VW#=9>D$PoDao;6-uTo0A5TS|`F;WvXR9X`0E35)4HJ^1g3(o!L`I z-@M8B07w$&>Pw+Ev06TmyC=V-D;n+@XI;A*Z7MRW7G`(2kgv%(5WB|6v&Lf0AOlMz)#qWkq zW1hM}k}6}wWtMEnB<4v^SLfO<+vmDcMuU>ugOaxNH3l#`uWP+-drH5$I7d&bYl<-^ z!D6%jF~Z4+T%n#WN(1;?Rv8E#XWI`%hrnP-jx*(NXInoDPA+R@0`DMcm>hVjYvu@a z-AF&cH%*f1DWh4{GJ7}U0S8?I?DL^%N=dCJXQmx>lsFG@V)x|>ennNHpm74@!?V8n zm_=&#`}N*01ho7ERk^~TDrLfTRh9OqHoIe7av8HATKg=c_I9Q;fm-Vj!d}YTK!9zM z3%wgEqNxs@MkC#oLukNfq9%3pq%~HDD_806_Yc*)vjm4peg|?SMR7y5vUklh?GS!VhK%wb67UVuV9{>n`$JV8_`lW5gA!;D)h&nx!k+-_Xe_Y4aRI!y674Yf-Ro ztlU#YXz|ZBG-Fmaf+9jaRmvf4o5QN5tgcd}pX{7$-iLF4Af~3XZ47Zuj`3TKAxFgW z@K#>YcwQO_UHZHT<{7(6Q)TDj7m8L=K#WvK7h@X$Cp>2;+jSjw^6iJ43z{Y<6XFzG z^yCv*oY~jdlwInjFo^?dH%=ZhvFp~>)@26W0GiZp!LXACXh__%`MVj(D2D8{Y!}~=pf|%98oAZHP9HOMzcMjaat|RCr*{IyxG?4K!M;e(-TMLPhE}N!i zkSi5c*X@q;y$?%Nds7m99W>C@aFG9x7%F(vyMm^NE_)RH6h;i1Tx5?+ReEh#wMQ2} z9Y{KmnxH1zKbe_tfCSAaYZ@;dPrB;Q@h-7XBFrS8^)nwd6_Y?gyxwwe6c`v z?)n$?t7dE{x$E6|)ni6JKoYV;K+Q7XRG*uEC9b6|dlpwO6#fAjOrvoSaa9%%on7l!WpQgEbBlJrgi$>b z$NoS!N;4NZShX0(v#9Nr>SAP?*8}opgWsax>5c8`?I4Lquz-C#MU_XKu4L_t<%#lU zrg0h6rzdVMH{!Th+rDfm8T7YIp=OiAEjR9`G=3verz9CNbUq@{b6tXeev4`okt;UO zzY{%DVX3lzzK@1W)$!lr_7oAE<7Xmo*t73!~-chjO9|D ztI`8*^A>JC4Q=FGf1}9y=2|-u!%K$$6;||LKBF=dQBG?yV+OO?CLY66^t6*yqdwns z1kWuzKY^$U1rlhDvBl+sdr@i;ikq!uRoGk64M;`^K;l1HUH`f5wrE`{j55QcrjE6) zL0~HG`}8Wi!pS-HFMvnQhBU`c7Zc&>&Tu2A*s5?Gt z19~T@m>q5|lkfpjec7=0@5Hy&ZjrW~y3g7R_PIVxoY4OAmVfguPk|z1Xfb0r!0|7k zLJV-I@BG$dVmv^&bi-Ap>K`^z51sYrr121YecnHHuK*Sy*9__lnxdCnn>5+khtv!+ z!u~P96!sFGBrfOU`qRGv&td533;5z<&p;Ne)&(UF?2 z9U_I1TTdpp8of${C`l*VZ*~ZbYxzC0OFvIrq?1NF>G+iaO zw&*CwRAA-ZnXdAK?x7E)GWcw_=nnBWv<3s{ajS|pDl0Z`m_DAV;GRCqSm%uEF2%K7 zZm@*Wdx;k4jHu6I?8g>DWe^b-&l1s$Mv#e#ah^#PSUC2^b1|mfR`bN*CVWVdLU5t| zIO)JAbCVk2mi`t<`Xk$N#ts8(ilu3BMRCw89PBUnxx{Ij!%f^}s$70f&A~pH#bY2q z=X*1~y0H5;ixsdpwFQs6_JH4URj>aK;@&c>t!>{P4#kVp;##Z}ch^#^6e;db(cmsc zTHK*n@D?ouC&3HF-2)Bo1&X`&P4_( zegY~g>{Xzx(=8fgsiLJTB8=0u{UtU%Sel;R+%&1rYdMhp3nOUpix0@FT~@HN>7`~0 z>!F9IUOd}6_+9WfF+j$}{*=M1%9OtCxQ4ALK;{p9vPrfBgsQ}Q&>KYAKisOkRL|*#{0r16010qXE3QxsmKFZq5W6a9_4|Lx&}z6i`BAFvN<5H`{=G?AFLrru#`nrLD!40>&|YFy&<;(^{#P7s@y}v67B^F+-Zvu zbn1GPviz@LXVW7MTbnr=b)z@C{e}V)F6Xf~(mNe4ac*(;MfHa_y*@Y#=hY>4@s4`S z2Kf)!R5VLX>0*W9L&76G_B5}iIZl-yj7o(oercF4Ur|!HFlg#v8hiY55}@`B*@bLj zj%+pPS^PU1ytoNI>=^$716{ZaKub z1s@w$KX>UlY|B=7oSH)onp2)}U?6Wfjn-jcDN^A_mRT=*B#HlqWgAWM@5}P+~^94TaRng&4T|2zB zoA!C!VdTtZ%XvT=#jTG&@uBX*popH0F@NJRIbTMaaiV~zEM>ETU%M-@>?oD1FgUZ7 zw@~B+Aeu6E|Dq6bw|1UcA^o z*CnByyM4c}Lnd|<{}QkSJzsR3y&FCDFPODn+9c|wfZpD; zdij6b9kI_kqH4{UwrFaCOz(X&!^F)m^cj63n(6LD`O*~~g&4(uc#<+mD_V7oQJFg_ z5Wi~5(HO?%(cG^7LXqm-rX%-y(@{=9BffW92Q_{MyBxT9r>VY^ml51-=f$hgwG3G} zUXgoDsE8aq`ZCFgO?7-|ZOH~@?9Z*dMQa;a8r;ndJV41I><6;B2ieGdm#P*)HZ zb3gr*)#B4b!S{twNV3)>zmd5K??62?Kz&n(qmzL%g9|I6ks(3CSe1w>2G7>ViZ~Vx zT5NlqC@ zj@N%KY;oaDF-tJ8U{*(ZauV~vZru^&ut+nFn-&1Hwl{MzKd;j77oDr+V|Y-4MRYfa z(~j?o>+B{)bO5{+EcSL(cHP|Vdger^@XBOPr%1iO*%$SZYp4Ad1WCAk*lyn2M82*L zwCT41qzlDP;+}DG{*0z5*}4}s+B{i7vGV4NBfFJ-Sp)yG<)AMAuhzENBu+-N3D_Q6 zg+T8d?ou0(oKP&T)+xTZl=luolFZK)zvEgOW1?)$E+eD$49YboFs^!MDp|)Uk<8Wa zrV!?{G*UPkP}al<;Oe?)ADjZwRiO>3275sG{4;NhnM(cVhI>-z+0&W9S#D~JMlxVK zaYi;LM~=N)Eo;Ukw%WPjiunv;-rTImjVy9R@i@63j&hi%=#q7FHKzA~m2D%E zwE_i@Bw2>sH%&h4a}+_n8xFX_;=KCWZgcZ?pv6``LHzC5;tu418n^;k%O}ysXS6s_ z!r&y~t%)GE%J+Q5T2?KvKC=Y5X1@^0gELt~rWsgH-jf_?>rwK^!gZo)!A_9m;Q*o+ z3^hqk&5c&LS4!Tubw#1#$>G~bqQ$q<)VU7^bDFzM1p+B2J<3Y=&YW<1u|w$_r;MLT z-SgeB9U$;54`e0(3t#HrGeQ4yjFh=b#ebHIz0+jqim~2W3tBJ=d!F_@FL$I4O^6mI z`KO*10w??z1rB%=^Mlayf>c3}QL~)k(tM^n{iQ;bqH7>V->u!<8#{gbr5$qduYI2( zB(cuz@om_I-NBawcq{tu|26xl78UOgNvpsgKLMP5H!tQO?k8eBCz4b*wFf$7kG{fc zzispOx=_$VJ_XRKi80Vz1uT#3e2v9u%)ZI31eQM~>|MHCOFke@)X3H7!fPRHKOr|}xv zmC>)!;b?C@Ubc9z_#iGj+}QU-=SR8u^l?+Emboxsjb0)g z`S|fQGg6`S+3)|_tqyo#7+g zf@{IBdLwl{J?eoG`%t;>-S}1L$6(579BWl&dzmS|Qp0Yly}Hyrx?@d|6b8ST%^;3n z5aR8iB;NoWu~P&qljHs~SGNfS8_%1cfRiYro**h&E@4DYOYjcwF#y5ouRQO{C2~E6 z{JqGjy`P@CwbYAp74aECFQL9qE^Bm%msF+AB}h{mt^v$AS?-&N6MsP@rstblaIPN~ z?^qp1auMs;mD_|uIGA|Zg=(iAaGsSm(`41zr&Z1o`!z`7imRU*4|VbM)w&LpDEAlro;CspR zLf8F3Xh>i3hLT!J;zJu#*kZs#_ZEXh4DYN~h*;mtzJiy$y?s({9V@Enh0gG{JjYw{ zRiQPQ17Z@Wg9D;3*W!mD0a0QQcTtt25rD~=VO%=kjL0EKmF$eP#OVNhIxMnzf2_&@ zgE4`u;VM&VN|d-N0C84<-tHW#sY=3$UXzK6eG}0qA?LzWRXoo5kzx-5AHM5-foM%` zJ>o1r*P6MHvIC^fbc3v>hqN!hgeV%AQ?v?fE|4`d+tMRS_163-ZGz)wwio@r)g7#z z?7io}{$Mi7Pn$-W0Bw{<&6FPHyR-b2d!kq-_;$p+wyyJC-_JccF;B)jd*bwU;8-kc z$jQf9mTxM;SHIwHgH-aZ1Il!x3#QKS&!1b_E+Og)AD^U}OOui!$XmUXm@T!{%SkQq zz3FP4ZeJJMHU(E@8TY$avkg;$-(OH@MWZtG#Gt*D;Jt%8y$3(7I&=)T@(dHr43JoS zM*nobsV6_Y5v|60#yx;!6}R-R^z-cORg+d)+IiWB=(mhbBZ353mT%32L@30aRNE#- z3Q;HcL1nys(ni5=&o^j^=uz(X-he(cf z9`4|4Sovu|WQD#qFJX0I3!Z2jnhGJ;kQCKXw{Bf)*for`%o-2n9m{;YV|aqwEDRUw zXIto9sW9b1(ZJ58J+d=D=tBE~u(^GJ#~Y>G)#JW?&=A}|p{*>Us5~@jVraytH-GJr z#?z+rC0#R~^UG4NFW`Wm6JOVsR~~0>c(bqYs|=8>Thmz&!U{yN?>{otBzem^@ngTc zjG}*oi*bbQ$J53Kf^0;Qk)+rk90Hr{8SH!|!dLY;9G$=pr*mKy80&)xlsHxPO}5h6 z1crEkTO2|Y{J5jQj#wKGjW+0TG}12t-H23aGL{A=UW6&=i5>Z zJrkkd!V<&7I&^l8L&nYS6_+P^IoJhylkanG;A6$%<=_QLp-*-)O5zFi53EsUN(``s z8)d{BDyxWwTZZfvMr4LvrGHNUT82;5guSBTgEB)=Xly&9FZkX)wY4sFO-c1Kb1nnP zM$2I%PL(eZV{veXEDulCCzUxzk4&8(HJZB};Kfv1_XU6Zx+^9%USheqJqMF{7PDJ zg~&VY-4BNcvvp;oL{|Crwe?f@NkatmS~ZaVr+EO}FWK%qI|9x=_a0LO0XYO>H|xj) zF3q6X-**Vt_xdxcv+~r<7ac5A z57*!Nl-+gzm6wr+{a3yb5N2FhDxRAEX|CKX^lr_d`ssc!O3nIPZY2E=|LzL?>9OZ8 zT=>B!L%z77CAe=$NN-h3I?^cs+fVyy+gPL2`$nVj2nEEHfmjWxVXHRkXT(bZQ<3y+ zAv7W{VyJd{FGoK|0ZwPW)Q9b0={Y`8+{eW48bR(4POkH6UtcYsAt)%FV6cx4M6sV( zRN!V@zYuU8Wxnui7!iN$Ec$Q;kwuKwL@2xpB7QbsU?#VTQdFo!qln#I_H*D^W<}uA zF6X_%r+Y$njr;ctZir=~7kDfSaDS|WAcw&uE=9=MIyU|U1eSlfqKm&&s8_vy2ovKh3ggU5pb6O;ioZa0f?-_OO z0(ZfMoWBngz9e}H`!xtwR?QPcYTGZm674dB2`aBp0GY~znpW1;Boj@nQ$^2+qXKk~ z>d$IrEfB=`Zfqncj!jDTdQY8dnaGZ-%c#od=*8R@`~98kM>mO$zfQ+b0lV z;Iu-mQJBdPCG{=!YMqz|V!AK7zMTKA<*rA#WG5h~b6t^gc%u=ZefT1otdgBhFT|2# z^N|2o`NHF^pa5CznHIgWZh=g&zd$zMTtg04GFq(@eTo%rkl<6}TyImiJt->fFCK1Y zE7|J%J>oOk=dS$^fFnj~DWuoIy5v2f1>f(9zrgs)6awqn_sG3H0LX^Qbg_d?CM`D+ zfDi@R#EFkJQ3hCj`(}sG80r^Ku_PeLPx|OT`1NSaG^|zH=>jJfH{QgzFVcPGvRMW` zpKpIp8B$?oh!`ug24z*w21w@ZJ&j=zlANquBhh~2DFZJV6*^~L9`pziFRAJz|r zSIYvDzU~K5$dYgdeB>ih@&5+J%n>F~XA*N#qki>l#J@_#1@xvk+t{O_@lYq?#f^Xu z_8FWDjH9k9KxcVhbHxQV$8h6 z29au;Fal;xOAn6M*PM$#qfR=p(X`(`0b%vUkTCh}+FB-J(3U3dN3Wq=tchu5mX&gP zP+;A}BinO&nU26FGJbT#H0_ykyNs274`^jZ&YtiWJpX>Mj~>#(S`s$R`4ccvSv1GH zy7T%3ueOal1~2^(eF7?`vC{hRrt2+LL(@3l_GZ&ml%W#)XWmyIN0x)uW2#Vf$o4;t zX>tDeK2)oaLvZw-&ek$x0>{NddA~dBy;3`xUivb&o57=sDY^MHSr2g6UyS_NPnz@- zpsLiZkh(b1o$``3X1S~3$}mna5aU%0Kv`|Zfs?(3GmmjIpAAZ!26Aw#seZ6(Qg2Y| zxgQw+u6Hq}Ygy}K=mzkHTq1A#=dDLH;f@@2$|61$9!yG+ zj1W0nO??$9S9#jUudJKmUjh%JS{%~U+2cDiwjiY67_M9EROYcaq)mlKkEj>x#e5-^ z0aUR)Wy|8)taExGn+dF4MM6QAqjl~K%qyy}hetV=Xh9UKiWOqK4o?ryVklx>rs2Q; zYS5m`nM2@`{SMit!>UJO!yWDcu7_l!Xm|06%CN3eT?x-CEGH>4Ts-9urw02F&Cg&i zgPm1{UejNlTPA!$zz%6Bk&@fbo|f{Z`hpj;t*OA3A@vP;5&jWRYoAC9x6{~ce;0KI z*y#O#GbsPFdFSDV{rU{uH1E6RJtxUC_^&PZS>S(R9G;;^ zobmny@OVPrCjV}W`2HW*qQ5neM1z-AOPNbJ^2J87PA*I(1JpJkP5K{cC}FbhPm3?Y zX{o0r5f&#$a{ZsSP~%aT%5_DieZWfV%b|sl@wrh~*hm>|-mP#LiUFsiY&7)x%7 z<|BZ+Ad~x-6=4W!vDmceQ6o1Q1h$ax%WaD089PbO3~ZN@nq$&|Qpk-R5}7K59>S2_ zBYHZD4BAByYO$&u9>kSb=o`dS>Dysw*hFo~XsNm4u51j1i}|i4ciRO-cmD*O{_j1FXwPH|y$u=O`@>s|=dWmvEa%dc-nI3(a9 zS9}kervkXw7-O>;gt(I%lISahy!&SO=$$me+OL0Bt-5SEx@*i|o4g_abuUp-fR##r z-nF^1MyBvpY+{!xfHYbt*^74MkYirAnIzvk*5`vSj|#yB&cmzOEXT4V*158#2gy0l z4OxyRgG6*R5L9?e=0|~d=-b~fGRW!o=e_C3S4p%mr{p96{m7@DA3JkHZI(ih z64*OasCZ8E`t1yYGck zOSsD6u`QHsOgt;WC%4%m-OM)o zv;|U4eccgo;!~Jlp-Zv)Hl&;?TAg?dTH4{(6Uli;T_}l2y+PE)-o6^P8^9i4PXITn za5q-zU<*=G+aM=ZAEA}vz4sUB|Eya$+!OC4e52JelRPgR<9IjkK#D78vWehA+hmvQ zB40Q!bOFl-7U|Cp=5Js0ES^y^(3wa+9l{IJ3{jjr0hAptH-1m<5J)ii)`>s|dzLv_ z5a(=?sgbS3;0O21ga`@_WvUMOlw`IG(7dUGhO14P#x0J($0Fd8i_xz7=;ms--+P@| zgH+YzA0x^2_IL&Jr!+N86yBg{pD<2;9V}}9s^if~Cia!fLdYzkE4ZUjf-6^j%mWS5 zJa#|chNWvcQLhTQQWXnfw5HYvc9_Z=E}!;_!d1iRChD< z>JW?d`4(4|3BD-7ml$q!GIuKt5EbuoCxV5+!f$r^3QbeW1%%tKTlNQ7YFsnQk-J`Ye z6A(Gu3=-u6P(D1llQSrzh<(1MBeIaS%NGm$EX_J>MJXE@(}HmcFAJKRtQHNEroy{r z5XsoO$G>x;`Q45)=YFkHxxkNoe$6hju~5Nx%6-L4!qBGpe3|=`g4%c}XWq_r-pwRg!4n`j7EuJ9HEjM}ckH-%xgw35@l?9d!FF%gg?G8WH9iI}@ z!SpnqN=bUA{sJpJIjcmhf(zG0il|_6G`vMNzdm;3rn6+ewXloCD`~#;0j8CX34eMS zGO-Y?S)BZHZoW#=Z${n&tf5D!<>PiF>a+62SoKV_?=D<@5WE2WPez0Zt6#f^u0oP59tNa0rC7(vlULkQI+{8QQ9jCMjl~^UdqMuZOvWzp;|n@kQiy53 z;TG!4QYxPZzX(VPZ4MPHZB#hUblaBRnlB0g+!S=I&d zmH3>Rusg1ojSCY^h2~sha*`(AKo;i;B-AAhHwt93q7FFu`kX52b|a}}{jlD-;Hz^D znI~~(A|Pq;r0aNv>~Wd6x#!6g3I}eYs;qtA*oG$$9}>ye#I@Qy2x~2?uYAX^Y}`K$ zr;;!z(eptkNL5E<^pb%4r^6!Em=y9I{}$(;cY`Nq1v`=2PJGe^DX znNg9@I4(UMco(N)H@rf+?|u`(;SnHbU%C;Z;lHSm@rnnN9)R)HlxrK>nD=mzs{Tg& z26`?SQC>@cbS7@F$1O;|fx*Gp={2$#bTZp?Jhn^C-ZZ({)E2fl(u281oaQQ>!RQnG zW>)S8Mi{cCt2bC#Qn9(F!Pb#~PhRbL<_kgYxzEUnCvW!|gx4su+$M{jLBky#&FfNu zcGq)i2Aa^OhPvZ$xHFF;_Iq3xUf&k;=*I2-O ze(I!q-$;=is$D}Qgti#Aghz1Y0Kkhdy0+#VnUW<09|NGdHllaK&=mCw`ot^+Nd-ps zAc%F>$qzm9mcQmluQmJ0i^II$^tXe~U5)!ln(b>@$vNEPjuI*QC(2>xyQ&R|S>mA` z4H3^s+02t9GvhKX9n-fS_d;5duHW1^Braf%`m@9?5fIzi3Hpk_H zEo|L}Ng~d&c@&K`rE%67XOkj14mF-ud1u8-%~AqbmG=rHY)NV>uC!&_RTFR;rH}7m zaJMYz$SnOvk7tIha}%trbfI^nwNu{d;X2`yc+UxEzm_C|A9BvF%*b~CUYe{vv&TH( z7f17ke5m6X2NuQ0Yc$E;@){7uBgA5?5MnVe1_;lu@-m&*OQ0a>c$p^tJe;V% zAnN&d5X-+G|M%ian*YGONLl@kdAZp{R674fZ03)z_oN;>aqI#2>t>5-S{fU;4Q?Ad zBeF*)*X7HmwJwrU$>2`KIf)G6XwUlQK5FWX=F>~QJ?C~pnNV}Q~UDWbarK&Q92jT7a3rDZl?w^;4AQF?$ zAqbJW8CFdz=AG0(!1bSHTpq-EisV(phx7 zVJGfl5mw$<&KtiUxvV*~H&3%S-c8{NuJ;xXPDTOtp_CdmZW9eRyHui`2n_RR_)6Hs zt*x6fajspyd18W<$sjTrwp3q_7XqL_U72qyA{oY6AImgCvuEI^jc80mHdICAD%<`y zR~aNK-bL+lpu7MDJD>ANq^)rh>^SV5KdV;&I;O;acB%^|mP+)^JQ#9BA57jP>){f5n$v|m4fP#wj+^(Wa8fyJ%Vdgyi4=#r zW7)je)T)EXf(YlF8H6JN{+8BGDz~e7mtF!ohWRC5%WHBayLR1k~I+j!*h%Gg=-IcCK8}sc#^NUkQ{N-_RN> z$0YYl+^PBkzC&s31gXD%-Vu?@EHhwlD>k$Ddmx!!ZTPjO#1sP^8)F3Xb~oWLF0{bF zUtqi;+1AC%eDh&9Et50A6ZP;gHu}HnehFSn(pf?m!NqR_szG(!J)-V^(e;G@%>S!`*F}g!{4(*R z0yjdztG?3kzD@poDb#z!LmmM>fQo{?Gyn6x|F!?>KfOk%H0h687mQMMImE$ZPlFY9 zDm_?BZ?%FE$n((U?PnBn`DwUjL$tFqDLrYpPCk!QEtQPbJ4#8-m55_(u8p&W z*_hQQ?CXT-S?Z>w%wRWgV8W$)?6b!WxPnuGTCqnSWyl>!{X)#pQrA6gZvN6 zBl&02po6wNQkMNsBCHs_#VWFwqRxPV>d+9sJ(llx5G>)nJ%?g8v3_FlO`~plVbeKM z%7BHg1O>FEf2)_NBCe>ii2Khxsx@mi04*O3tl^7>z<9nZu?cD^2T z=+CD@UyD6@n){|X@k1D;;kvV`iv80c4;kbFF)qJaY2$3n+eflFNcYXh`)Y-`bf9R1 zH{x&UT?|a%#&$f-iv|WmX*x9{HRUzsFZMj2U@SFnU=6Gl6Aj65HPlV(kEjwVu5t$k zQhh>i6Uc|HYDLgonNn4rK*v2b>lJ4UcgTgl|DqJGTIc`~?CU(^bk5*&WvgYr=at=Z` zDVSp&+RxSd%(YJw@+#O_k%m)68EES~3M`gE?cOyWB-R|!WR<`~_7q}6LlUzLapsKz ztQQ|y$8~o_I~~I1!+i+qKnqR0oaRz}=#0ErBdz+4#eR;YUPFad z9u&=GMmTcNXWlwXq;8;hk?3Yl_b12{N8K0$iSstp_{B||2|E;Bjzz**%G6bJd9{{8 zjlPrdM?KbR^{%HHYLgy)4vHWbTGaDiH%neu-?HGo^&mypujB}ZaKa)Ce1TP6-qr9 z1TWklH>9a4+1Aq~SL94aTD}H~BHhF<5;STihzsXo)b$21DHhfrszzX+0BVL^{D5LH zXwJ>+O>f%!*M!K#G`Z#qTL)g{pdaB*nf5!*obNrrcYXNPv8BFa-OQVwKgGvar*rX1 z^Whz=uE}47{~&|?HjQGfNtQwkl68P$t~@J*!YO0WRPmvWl2{})Bd|1_Sr6D7*l zl#pwGo&Fva z>v1;q!sp#JJ6f+^m<-aQzOE}pC#4HwN8so|nmA6t6;8sY+BBx!*U$!2XUQm~B3eId zs+%divfU=Rcw4JHf61vrB})bRkS(?PNOeX-Y@yWW3SZ;o#ZGqPKVMevEm9rM^X|f$ z*w5~>nqq3j`+{YBOh4juS(1?w@(%PY&lp*=$H%nroB1;~D*3(F>;1;b5S&sSQn+gM z6rDC^jeb@Qot=Ftf`2zc5_(U)lUfZ=X5iUgq>WKvpm!3rijFO8oOj8|0zuE!;K0q? zr|-oK_*>zj8B8#X4+*%=+CKscwy{E3b2e?lBQyT zn%L-Kqb8u*oP?6oAIV_xA&i}$f^`ssU-yi+*pO6qU>+UJL8g{-YzNiAL?vE{58 zR0W>%jBeRKROXTTw_`NPhbBq=jmqvmUonk!Vj-fjB%$Nf>d_N944wX8(HK>kUj1C( zty&H>!3)QXw&_j$xwkz+3kbEz@`YoIB~R|-F;ptaZfY)&m$K^0#zGy13iX_3eMYoP zaD4`v$VtwE@G1iJ`cAcaa`jN60g_6`?L-0xa((1}k1iO5D^U zC~tU!mvUZw{KCYMxY@t_$IU0?w? zWE-^ycjJ>^)RD$<)DQMHe**6D!48Ie&zTZbtxsr0!{p&y&Tj8Uc%0>w_5RtgVDOJF z3e_X6AsC$C*fQy9LldN)hu$pFDn}?iLC(w%FG@Zz_Ku} z=t3*+12c;IVerHp8%@QB(h?u37|~=wT_kcTYCv=TTZxPraiw^T(c8#>HdG9zX*9u3 z_ize)*!MiLr9KCMbfR86(57k*miE0NcqTL#bh*RhWXtM4zN>Eqo-aG6Scio9h4VJ` zjCDS{%4Li=F|ajvmKu@j0Q@p{s`u~roaQbdQa=IPvcGyFa{r}y!|R+r$0#BdX2map6!4liOSX^emNVT*wtkOea zZ~;=>H(vO_`OR9o%eB_SgNl3DX7_^dn?Oe3;~EzE0HV6_Fi}gz^cP4}JXDFbbGB3? zKs%9WT|_r~lU(_4%&$AYYnJHV+90d{MVR&AZ{EZH({6KE`+W;6Fv8>McnkmMoy3oQ z=h|+DEP`^sT$dCRt)NV5=u8sh(Y_GfW09%@kQ(-`{?rm)y`P`%}#8 z9pIOg?tk+~lv}XfU-+%xi84&qFJm9mEY2!pgZ_{+_>?GLmzp4PeSDv6A^j)7b_YN# zylngma9bU32Uz+~Uf;i-E2p98JMu>Fa_#z&#FXYbFyO2ik%>a1zlf0b-Kfa@WMaI; zu`BB5!h5<~TgJ~=1BV^<{)*Ww;OT1RkV-mWRTdtn)}z=@G6K_I!w4{p%^)?(fpDeTZR$@12eYhMEbK2c9l$)e^lRtaH(veMr}Fj?qLPT zA)26G0VGmJx8c$X^+1ke{A>RUPCf=ntq%t-9RpPfjeWgZv|B>oZ81jOq)5*fX}AsL z*%!ejc9@UQ!&sAvXJ?)9`l58>wb^%PK+s}aHQUrmC#=4{i${ipUDob3bumK7K_f1E zyE-L#*g%=i)%~MNb`Q}z0Uvw@@SE{fH4#VL7#<$EWu%K`O{AsH)I(celW-5#Io(gI zN!30$M2zz2 zS;f*F4EIEkOgT{3;v(CmVYd(CPWtT@NI*_rl4(S&fb?4o2e-kTd@DP^jY-@BzfYp2>^0zH#YrkKSBBjsivo=ovlzh2t$? z{REoS>O<7<7`Yq49E2Sp->I!1<6Gdwa9C7q150~O4B%qX38cMUCgeTs6C$n1A>#A_ zN)%Su`DS@eV19%);S_I2#v~-Qv{sE1li~39dk=j9vu-E$y4LOBL2}&#R9#3 zGF-C>mn7I#o1HgQ=7sl|%1YSRHiZ-T1QG6y2cL@Xmd@?lJVXUpZ^Ic=)A%OznMS$k zBGmxI%%6-($pJ#IPbht>OC8*2-4E&_$j%K_W>7InwH+LLsj#dXN7(`p!sY;r*-OWP zuS>GQ)VB2Fd$-YM^vL5VW^(}l4jJqiyzGYU=-h8ru?9Da`m*UA>mp%SMqZAF@mg2a z_ctDEB+Pl(tUm$RG67yLoadoG@Qv2?JQGQ8%d&932&}X5g}$AA`7h!_3Kpb8qBseuS;Lx&T34fz@t6k-o+-gJ6iUGO9*VYR z_3NPP^AEr%Q`Ao(U_e}B$u(8!?w5!0@m`%NV^d83n zc6(U9LsGQx<~V39E1#e|JwRHB7#)z%n&*z8Npw{m&J-%l!^Y82ZE8(csa-st!y5N+ z;R{95ioNX{1E4DkAoVWDBxgN(d!wSXyTG%u&H^KmTalviPq&OmpSviylQo&!))o1a z67Jt<=lqqf4kDID=(lU=jn(6DD3bHFLXsA;NS9=o`;|wM{EHqa z6?AbO7Vlic0uEg>bKnyY;nS6>7V z6(sR|)PZji+_+{%CLX42udN!zxi!&354IC1z=~GF+={5`o3F0LjxWi>k-l?NDY_{B z@2T_t6Tn3C&l0x_Wi;B=IVT!p*3piGtmionS!T+0<3~GQ3SYu(kj?+b!vB>A@bFK~ z8q3%&tOfxc7%lTgED+%H%;;v!z$8m=FST6t$u~L6r5g$o~01+H&AP@to4U4onJ8CpcyeZwm2be{cQ*`8`pk zrW26ek&|!R+CdTMY6YdJZX8kx-#z9TF^rk3mTW1NRO zBPS}^2P>1OIQj}PHCLf6jlj6!1p`#i^^;zP9OVTit*KjX_VF~eG%a+6mMJakDE`?) zA6>2EDgWZ(gCy>$F?8#OF@x>6`|0k>FhoX7WlYA{uGWq_TUFVn)8J#@dt=!KoS+AI zq@;aYjJ4gns*mMThdoN<-%=~ChyQ@U2vPgBs z#OP41(%^hIriI1jxEqPsH)>gaY4cNnE3AAkYYFkHGRoUxK@u~wt3NNU_zAGHBW|M3 zEEUt&V8E9Kp36egueke&WmqEtSM39)0Lh4THFS4NUoFqN(j7|zTPzps!0#LcZ(>#2%OFh7&%Lk8auQv+=&z>e< zb|Um@HaR>KmfI*@i<4VR7VT57tHvGHXE;GHm}puvM2QN)5~D^e&D0G?@xGfy&r#S% zns?kni^+X?qIRKS>)VnxhUM3LM4d3%PD()e-u5Pqo_0BThgEJy?+E9-Vul$0wv-XH zL#R*0G!7Ii$m*G}gyuG|)Vg=j0|*e9FN#KFShjKC%G{pU4+-okr}{=GNk|Iu<^p(C zVaB68In3xYselDwJ;93-sYm?5zx~cW)dPqSdqA>0!Vyr{g)9637c^KJmlG)AOEi?y zPq7y^=D>wl{i6LbKkA@<>O*m)l9ML=y!d1?R}Y~ATPRQ0%ea>X8~DNVxQS?V5(F6E ziic$@lP5J_U;lYO@{X+2`DYS%lJ26d z=N_3`pet}JeueHCWB)BZ{ZSs)>7ThK|HXMT?{Cy5NZwIGDLL{J`&wFZicC!HL=e%y zPz_i;!}uw?jAp7pk|?V!2N_8jih37b1)YQH zYX68a`5hDTKRA{Dk#+q8#N_q=0jm6uNcA6qFY^C3ir>Xw{|J1c`6Ez;^&hIae;5;y z@lSwe^VI2XCe|p*Zj%1Oi?N}cfb{to46{VH#01rsI|x--ubV*i5dOOZgYHbs{T^CT^dV+YxVFz#zP;)bd9x#59P|R%nA;ytz22-klgWYEOvC7Q&{Y zRs+0|<9cN~2PN$v5_k=MpQK0!_AjBw$^~YHyAymd5npm3a+xX~wbUW;>%Tm>6xVPKORM}Z- zB<<(oMH1ps2ikJVlI_l+ENN#5C?@MA>lGsV&Mn`w>sLH$v@@<$D%#T+V&F66JX-=t z19ANXv;p=lj=AUBk;%C2HC`QhH|ySL?I`DmuoJSD(#NmY$NAShdw6AwAsW2w5(Thq z@>TM2bN7F;hOyC@Je=7-L&)gWP6met%L8z;0Dw|Q_O&K%ig*<7I4yK5ugmv?-irdQ(Pm=5G zF;byt$mPhJL&*rO%|;R+gAQz5DE$Q;Zh4wi>G2fjU~tSeD5`g_^pkS&;-#cPhGlDG z6CTlUfkT+$dWvVwe3&*;dmnw))Ry{m-SC4hLld~Z5?d{Enp)&m#wT3=!sCQeFYaaN z5C-j`Pmg3+J)(vUf`zkzvK!>1HFTdaf;Tw;51zk@x=om01h^eob?5QT*s+1&|K%`jG;;L9qq}=Kzuwr6Y(LSYDJTw)OjT(6f!{@ z+IDIKc7OhCE%YHSdS0m&^pSxKN)8qxht2ZZKD7Mp#U zk>kRw5o6q2J>+Prwl#R$^~JVMLYv+u{I=!fm>1V=M%)KX^KX^KvDZ?Re+Qn^`G=DG z-+W8!3dQV+k zlEmYr_i zH?F}NClDmJ^X|RBZ@=G`v+uZP+%eAiD`Qlus*6=stJa+JnZIY1>3ua%nG656$ny-+ zEEF^6hxic@3^s?qA?@c9Z&%Dd7%zn68w62weZ0z#fx|BXRAeQ zTh=s6o}A5ITJ|NV)iF+@=S-141f5O*A|o=m3P54J1Y|rZvnyNa_i?uSG7mRU^3Vg; zmk+B!q!(W&$6$kUKdeSS+w{o6FJ(`qVVW+48Yxe`yitqmXJ_!wb=mUVrpvUQJ~~OXMQ2d8A8B=N#U~-j6cMlJS}ebDAU=F zu|ZA09?b&$_UzKATD+VEZCfLfvKqFq->Y5*&b#6DT<1h@Ul7yUGue0DMx1?B3#Z-l zJ^Rt@Doy?HVT_gMxiDxkQN_Lcmjqft5j^=X;|QkkzvOJeFv%K=reo z<~6a5_-SDY0|=rUFFy|I+osWWQKS~#TtzGS44E0W^*urg-=tKh+p7f{zf_t>`p0O= z$1}K4BJMI!J805_$0&}ZsZ}2i!5r@Crx_ZXYRBsqIL({0mQ?nf655m4<<(Z`iU(gv zFYS)#A#Y=v$`uDB+?;E>r4DkA8{z*h@-gjGFIW%hC_wv%8q(2IjE()%v_Ft5sbFc? zy`XmQQ4L&yDTCx_nK|A{8hf)^hS!oh!!1z(El``G)b&yDeyzx1hS$jN=kGBM6EKJr z{(T$n@AS~BneeoiA&fVd{QfEBSr%Vt=JfUnTmJ^_mBLm7d-J5|l4rN9Xionhk|}sAM7xz=u58{+Zp114UJmd5u^dLf_srq# z#H_wG^OT4U@!W6Gf2B)gH%HP-e<80oA0qiqr(f#d_I3R4m-NYbf*x+=&(;=RS;yqX z2fU6ZzJ7va`1I5s!{Dg~J8z~d^KG9ji?YNMufet{?bFeYAY!SZ#WeTAF!iPjzv!Z^Mb-gPPh!p}Ekk5)# zN$O(!$ky8`W=$~@o2MBitni6Y!gx^zDb^iP=B&iE7%|o_%u|BEqjTJ-0#cs{ z29<5~X4`zOB8G3TEX~4J+NQHAs>L}SB(f64y@_j{+Y3)(FqF1UR}`J-V4dV(Ox=p4 zd42;uDkv7r$I)5t&6mMrk2b~7_y+h+{fS@+Q^*BLHOIqe>E^c+4s%_n*4d?oDVa5? zAbTvxDO1e|`^m2xJE%phTM(LSp%l@f6UkEiAqN+`N#$GRk}V^pEi)T6c|J{JeeI8~}b`mJ)lpo<4t zq$6({kjgD4gYmk*+YGd2Eefrbp_Rb;uN&?CC z+?Yw2rJ)5rsC;$*l&9Ziw)$|kQoqO()EM(}L5ha~y2OGwlg33-&)SYY;>&7J zhUJpiJ7B*rJA`UT>o75HCdYr(*>FKTb3CWk`MG|z*U>AG2Fh&pwjEMx3;~9ny$Fr} zk>^7Aqso_9$t-^t`uKr^xAS^{kdH8VUelbD`X|5+=JRmFADwhR2_Ag86WP_hOct)O z`^r;0b@Waiwoyu{(aQEjjf z1@uKLm+>a7VLs47OF-f)84Uv8^6fgN&^%?(Z1Ph)D_;&tpjRHHqG;@VKfNKo0Tn=z zh&#bd%!6G84l6Cr#ut1M`}HcOuPh z<3WrLj9S>U{P7I*hwvxFp&7{=ZQ@tLD*Kmh?y)~1NbT1NEMHtIFUTQNV5IWPvUH|? zealEiOJoM^^J;kf{p8ImO7^^NZ1L`oQ&`2WXZY9VcOqu!LFNfd3O5QL&Z1BIsqkh& z{b8OSwI@j*c_Kgv54q||_&3ABw{9<}vV>BT+`x2b89M~ECip8?fjjykCM2Ke;(E6l zYQc>0jSF=Y$KHq+tmAKBH=pd*%4Xv?fELr*VJ-9;Pa0sfdzpRzW{lvW_EaP zPPF{_DHwhH@jVgn_Uc|rb-eG;OCDpO@xGRf>yu&9iWa{x9m=<~Z3qGfuAg09b9#xd z>Zknmi&Y=Cx)01Y-wqX5jFu9ndb~?8cM3iyLs_znhfhs5A+x8?l_mrv9w`Y>i>>HG zYa&=OIrGkR)H&F1S1l706CRAJvj`3W{Y9_L+&>%HyMcWjzz3mGjTKx)`kV`x+d4F6 zot;?GA=nIbp+?NvdAnj+5qCxQ;)+VT%o7*Gb)Uo%$|*1dazmd{#qqCDjbrGwKIEN5 z6xwmGPg82PHUXUvMQ4{i{356y#?#t|>1cPLlMaZ7)-nqFT7Pb?&r0OjmH4PLr7wMw zA9roFfEs4{F7TrBx)H{k)-?&@s8>~6AF#dWslO5Us@hY#f9e=Z2J!YZGy_IHapSZx+ESmn>zd0r` z`>D)+@~LIm@^|HLJ=85#r&Oq5%@C!IQ4`#~jzx}mhEAIx8=6mOmBaQ(@5QH^C+|^s zJL!po-S~4$ZDGdgj6@2w5zZA(!j8~}IVWh6N$Y~oj5GyWB61lk#`QM9i3#!x0E`Jq zPM{FH={Pa1X;|BF4bwqCAIf+F*!QM#kDhy)Z?p$vDxb;7dNji&wQlCaH-b0YLe1Ei zAjjab7CzKnOue5zeT%Y+7Szm*yRt9*nD?$ipVRXJ)q#6Y^q3f8(M^7`XEnpSY}YEc zQ$Wlqrr_%HJ^6uYlX}&DLO+?yV4DR%$pfj7&{;$Y<~`5BwdrimDkxkw9H}tTUs)cz z+^~PN^f}Us%}mR`X2*J<6L$A{HG1a9#F3zpu10g~+b{2DQ_ZU-FRVkhMY*Upu+VeC zW4XIy0yo^add3C{0)y-9qLj#fX5ZaZACW<&1vTGj-aRoIcIHWZf<47$xf8+ijLtOJ z<%Urc(da`J5?&X5`5Ei$kWIWuz{;^_{ax1Et-a)ZjQ!=MF-F^)B>&+EMsmq_JW^v= zk>B|ZzbsQuZ0P7!cs3!#lhdBt-pY6}CMo=I7ok?9V8n}0)Kh~QmF{sD+hy_80CBO} zQ%2^t96#@D(HOz~`yDJqu2v>yEcTFwnyJlckYi=t(PO(xk3%X#_e!-PM5$qg zMYBJ3X@7ad`K&Vf@wQ(y9 zxd~UEdJL2NEYMQlRNq808raR@hNY7@?0?7*;`KlZZw||yE8SbLzA}8usO9E$A?p!B zaQN!W50G_-voIeOJ8_-q`69l0{;h}!0XRxw#=N<$tu;l{$JwYbt|t;?WBA_7JkUJU zonKhOwHM&~hD_@>QQir`AHu)Kil>U?_*idbSTy+Ld8uJabs-H<1d`8lgg2xKK8JRU z@CQj0qnvBYT5e2Ll3}t;{z1xv^_)HMC<+ipXvo-ea0~F&i6ljmfQO_Q3VK4 zDn|k?|8oWSWr$<+mR#MbD^da8{@!7R60QP_8WGcnlK>4_k6kQt=Rx4jsoW&=x8$)=4#_YY8-4n0Ju~K&9mkp3T z0QQCpdo?n&5l?orR8X10>1wC%LRjY*DaZ*PGh8*{YuOcPw$9zMSt6~|9zpr)d+U5n z;vKBg?LN{E=yLJB#?+bjjeDSJoLc9bCKL(SI9JEWWYG<|Immh#JG6ABXG?4S$x89s z@+{ri7%WObWnE@_thS7IoVlqnC=SzC;xhXXb1D+1$b^=qufI^;`P_9b65+zu){qUd z*$K$Rd0=Ii=}jUGU8bW+-IMM>rfivmdA^Q|%a+;k!QjjN81K6m2RTRb8&(tX;@_dl z>4=`W$6;UlLNKhaWV?lN*Gvct%S!g#zC7}(p%&YE8uK*%p>oJ0!Jzoy4r>-R{zRj% z6Y|UM(p2v&KHooy{Mlv1t<}^hjOs^T5m{1<52(0ttb>#ipp{J;^HDqS{ z(@WDPMcB&-B|KS$7Tn+wSPLaPdEL#+hW9%juhxn(x7`QDTN3&!-TP&9kmEl(<=J8c z9JvwjuD%A3!49k&M%|-*KD0E`r1qMFXF26KLG}0~SjqQ7ellAj%K1a2t^k^cJ!%1Q zv!i)yHxgQFHjU|83a{re8VX#U8V9Akgf-M9T(h!5il*vX0{E74-Xikl12&h8hFumq zXnp0)v8eeWUkigpna3+QZh;mB3;K=Yn~Gcop0xB5H3x543YBhnX(nj9a8(J7qm){k z>Sr!&rKgVyLA>;D#Rp=(UM_e`@W7nFH3^;gJEe^19V?7K>l{T}HEbFFsuo)J zt{X(f8rSo>J-5K+#$YXn)1lAE5jfGIXX z22EdmrN5wAkk=0+jke?u8toq0D$4IWf>!lof5fD=I1dFYFJS9oJtg6l3WAf9 z$)V%|{f5YPl+nTg^aQG=AtEXs{ICsQbE;LU9PIT&uF+xm`MwJHzLO26*Xl;T7{X|7 z70{zts*Z-TR2vb{o#DXSdnY1K5}+@rnkHLCT|> z&LYdzaA`TJ*!X*ujI)gkGpVu3tBQ2-ef=UI{9KkiMV!qbf>GDL00!jQ{^C#87W?Xi z3YMSj`z{#@1J!Aiw?)?^*)ChN?UgE%Fq^ajRyR)!mkN`d^H=oY`!4$%2lup7)CSby~Ubad!g}C!C_s_VlP$l7kQm!l(>c_DngEg0D^n| zhO#{&VedfPlP|vjR+*LD8*LEs5TVQ0F`uJZ_q;)iymNtmbFOs+A5EVCR_pdvp82cf zFWL^SqjF}+dcbnqPJ85;$u&K1?yGz<6rNdTBecrA<|T8u=-N@CqnW}Tqucv z)%a>A(eDZj3~3Y7o{y`4iz1}g?@!7>RN)v?`CLp5ETcFIz=1 z(9*X}Jm_TDLW79C*_Tj0Qh)!s{#dPr%9$gP@9y)rtxYd)@x>q37Ka%Gtf(UAWrRfg z&GWNga=t<)!K?LQ+dSVtn8gfZh+}dga6P-;X0bcSMNV=ulRH*ywlqX!2_!3tcc0dx zwzM2dajB^f53;1~c=CAK&H7cMgQH)O4)eiR;2qyGGQU_fYYh*sZo1i1Tp&T3yJZ-K z?~m7Qs>7JxklH6FFPmuA(euYNqESI^T?a73BRzIKDVM|*Kt+3+`EIEKW!Eph>?7CK z;G8l{OK~^eo6$V_8jj_aLl_>Bfx0>9;+i3$%SPu>`CT@@W2`eJw&_M<%uW#w%j2JY zwbqY~jtR;@?o{E!Vu58&`tn%xZ_=2x{NDBfHg^DNGc486I%jlnlGbuiodTmlH1Rh^ z*nr*;)NDS<+F0*6@FU71X`?9wdlyn4x-O)GTh6WTr8hadGnhHQK{RqoVSR zx?fDys}tYVcI@av>srFdnurVrmBv=Tu$YnWmfl6TzegHdC8t zAoWaZ@xpoSXe3B2vGYEp5IS9PXw#BLi@qPlwD?(nEZf?lXqZJrXV`;OUTIwJ& z*~y?Mj#X*JB{}sKIIK@y0DH~PZ$#3A_O>y@)FP*M*YkN3f)l}btkY}-HJ=d9w#H^s z&Pt(*rU{?FBtyw8y3+1WM&4vW(noI#6fXU6DRQ3KJ-K$HaB|xZ=2>Ao6}{FSw_s74 z%R$x&vhafjrxh+Urwj(hibmt2te=AB6*Zm?v&ADDkc9Xro1Y;H8`Dnp#R)4ZxH*$& zy&eli8ZfQACvV!Iu{h=N+3)B^c;ZI2i5@T?3)O*)#A}}nTjp>(ny*?=f9QLzfe}mE zNxjwgzG(49t^Sfd=JQV(Rz{DO?Eq%uF$1kMguY!VnkijX4qEdtq={d<+Vnfk-G=X2 zX|W*Ob>8`KYbTMudokjYViUu?K3 zp|7v-5HXxvU!sk|C_dE>a?EeITdu}ukV-#bioI+oS-Zh^G1#k8GV}E2x=PATFdavK z>KcMNwC0`|O`^1U*4J5Yr2evAj3%Xwv)O@H0aP;BAOLwj5RWZsnDHJ5i~7M%z0)vJ z+7N8~ilHaI*HJ0BGsqdYKVy@`48=1SRV-D-B#b3=3yV z1$AO6WPvpw!4jWUhcXWKR)1pkE-uJ?*FbGo#pj6yBI4_t>xk2hYY6Z7F_uI)7bo2# z{K|BZpa%61{;~DQImMU$e*9D@Y#%zff$SPFgs9vAG3x4$+au!xC#bfzrgKt9=XBVc z5Q8``Rx4ZwHxi|#n~N@kj}<=jz;8!F?pKCZqMc5^&eVESd+msiV`MVCnRXUemy8u0 z;N6YvQ@X7D>9ldWK`lf;3-G`CE>c`~L}06VwXRgRM5d z;P(1!S2jjZa^Fnuu~2ilL;Fxr9n6Vx)P&_w6x5%Xu^H?enYE&YOyeMI{Yfi0QrsTc zNCu=XcRobf-iS>ibKRAu;toGAtUhjk=gD+D8f6|0a|NmO1)W0)EHoQ^*fY0+UE3P1 z_oL^kw%Py{INfUDszSd2*2n6R6rf-tIoHx&aZOV*uYM*tYsV^)$e{sy@t!p>kNds9 z;;uxOS~1t5?l7!6IPbAIm&KrF=i&ku3mvuf#+C03_yYM|wP}EWv({HoZIRG`QxwW@ z%{X~>lzNpNKGM}+0OI>ot555f(`G47fZnm8cGjV2wB&*3=>mdp#Cl3xk=)1c&KBg6 zm$2lqS3@0!}QHO*$;mz<%8y|&y=J-P|BWDd<` z_Qpinax;QJzjS@jX3Gay#G&^yqZ+c0JtJf86qkbgrkNcN`@hEP~8Opm+F|C84#$~U++98dH-zufJ1VEX-GQOU7WawD3vLR$uf@7V%yvZ zm?OIX8=o6mWG{v&@}oK|WX>#z-f|k814W_T;G8FSv)@*+s+Az)!&_a zp&gjRR)NJp8vqXm!wco4m?oB|*nO%1^+NE1C-(!ree<4vrrzFs5?EbEk4*xTb_>;Q zO<K-Q#fFelEE=Fe<>$zvau};byWc)XU-xQzH`Xri&-eUD~}Ci_`Cn8r4YpDpWhT z`M64j?0szpNjjBFplN>zu90)ZL4}~n1BWM|Dw8^6y%BU72<8uY&FmhCEh^(R+ubv%tdQ6@v%|?P zt3CBLx#L~Li!)F9G5n{|{X$nFg?|CyPnKgnbB$~hfc1;`Ac@s1ey4|FbC%sc;UO+K z1g=@4g$)t@PM+|_JmTdbJ0?Wdw+#}E`VhV%>W7idRCfXR0Ag^Z)->Jm$&^6463fi_ z>@<#%ah(dzTY}eoJ-rZX>hL8g<*6H!4_`amZ@86jTvKdAZZ5GS7TCWwWrYp$x^^u{_M44W{s` zaDZ7San2y(3$M4=Vav;`f-Ih1$yQN27C0XP%~@zRSxFpXv*peu`Y?wlMw!jaEpq4$ zDdi$(r~>JF0*caX5I6pT{({%Dt=zWaLIUNKs$sJfg1DkvkO5rhBqw@1T6QQNF(KW~ zTZpS#)$#X9@s}w)QNwUM&ESO7dti92V-R85&Zb#>|2M+Y?2o9n7k63+Zs`2?6ZHZj z15x}1{T;OtDnF!YJ2J~fXb*IL1UCXF<1>p4My~g<4>;AHwx@1`G{iQ)yjqbCV5`Wy ztNe_t<={QxfYMsN0|J*hCa{%RVedPgd8kn0h|b32_4%)~wWi*{mENgxr5Ef@>>?14 zN0S#SgrDwgEkei=`;Q34p8$62+KKy1!BM)CpP^PpqUMr5&dFNaa&$q>6MWe&3Qi!0 zC%Kc3pBqp8mwtH7!o5NL>3ni6xx4KmN0EKU%kMq&_8;SmEXNe;_nd{%wq;s2`9S#N z6ImsA&s?XXvN#%An#ZU0VT11Cx((hmuN;d(%%almYOB*O4qq^K5h+ z-+Te0%+;-;>)eMoN(Fwhb{uN_xL<)5#b9_&pXOVJYCO?iYx_z2Wu~dk3AON&T@7RN z=jnr6^-rI&>;M=cDtue=x)h?~uP?>$?~~T`j^UC#-OO0ry{aplu4;J4X9W5b-SjFSH!ga$B2cu`a(*Lpz+(D+rR)fR zlPon)08po89X*aZp_IlijVs4&`{&Jl79UCuYDuWkPBZ{6rN|cznzPI+x_mF$C2R6QUm4irt&BDASfbd?Ax6@l)ezMTvf&3>p4-=)Q` zzw(&ZniLTzOC;&YMKx#Mg=Cx=vG)H07?ke){+`7A*Z0H|-ojd{;<^$HE|W!qk39cP zw-d#`>B2I1(A9?TEmJ}$a1`8&TeaTa+Fk0eVBMof2I0W};{-b3ypkh!Enudi$gk4C zXrMV}WNCQVer~FhD!%Siz|8V}Qrw}{z|%0L^)|KY+vfp7MTNr>gWB{a#?m}F{_%^0 zPwtg-G_ZJ!3~c9wPwZeJ;FMR>i_~$3``#^99fPO&q!0ZGTnN?{aaNGwi!ib|B)c5R z(8q$d-+DnWqqmd)&`HaBv|s<6lREbE`vvH?{f8a@rh)$R;jveLI?Um(`sP1v{O9M& zk|dbyU|iY{CMde`{ec9N=*TzOtpyPps0-egmoZiY2i-W4>6R8!z?R{SvsbB(pp*0V6iR_sb`ZImv3`_>mYd1AkG_9joNFPP-hnbgc zK_E{q@kZ+t&dKL@WMhf?$4aY%mGwY{6O3~{yM$}^>#r=$hGrVb@Xw?xEbb{w9x7W3 zWHis!X59hTf%4oT$`IIZR&ZT-el5G>qa24V#kEX}EtH`A))`3(>eioGR~6e$1L-_3 zXfYB}$wim4jO1qnq4OWTNSEP2dqfxPhEi*_c0{R$QPh(U2eFa@Uc}3& zOWPE1gaJ>{^QtBA)31)}N0(BUsJ5D|28J5=Hs3zlr3Ed}UmtG9@TISCZj;|T{sMSd zL;^f7Qwre5f|&)-$a?mV8k7BY6^3t#B!mT0aGEv>l`czvc>NS?Ys-j}U5{!)RHTi7 z%;vas-o$Hen!*tec~+jdD|!J?V}~(5*6~3Qc~t^Yk62B`dgu}1wJjEAFfD#om}zUm z)m4gG+NfYMvLrKH=qW!SPh)sM&Z`4JRica5eY!4%1!kjW*KcV$h7{P82xiVK)xq8` zRzUgkK~F{X;oBRox-dobv(Q+XX@5aRU)68%hDLj0Q7R74Ra`7cUNxLO(0N*~30Uh` zb=wgz+;h2tJUGuQT#+jr0}1#>|A><)4&!?VGTIa79n(w#kY)u3s}R0DcL0LR54UFN z!^j>`x$b*M7U!4(&|3i_03GU9G0y&lA|7xdr`T?uN`TD8a5l3xGdj4p(}g?^#R`ql z_iP!GE-mgl+lWg}GkQA2`2^ott@$x=dZt8zK8F@x_s9c=!j4>(hr~5VjaFwbzn}`)-645IGZ=cU6XDGx-0GX4iS&`V4@R-jHMJW1BbzcTo+^DqH1|5h@Iuz$KY{esVEs7800>{Fc5P%0zA*!)1j<*3=7}g1RUREuzZZi|(+TgRU;LYbPtq#Z?_Wjbt@u z)+qC9()2doG^Cj6;L*p(FzFxfM3XdPQ8qUNPW{rQa2?W^GB2TP?W7G6JdiD}dVHhp zFhQ$pORL9fLp&>f&O;Aa&;)(eF|G)^o|H%G@20)aoVh-I*OQ1TlV_n-mj@;K@Ntt6T7`kQ#K(Yo3>uOKGdif#!5RGu8EOT(;oN^J-V=& zu4My#pke=AHi?nmAmdw7(Rl16p@f4TDysLg39Kl{nz-FpnyLKugsEQPhVfp;skVxC z*PD+r35p3@N*m%_>a?#KKvHUT6U@^`Us~VTTEttZ=nF0^>!(JRqMsu4-M)27a}fA> zjNF;-J<0CIHx@l)x}Qo>ZVFQ*;cwa|uAvTgljV6HAVXdvcq0LPGbgYgAgKphucmcO za7fol7G)Gw9A|5`p?yx9zV(z(lnjt8`DCJ=lF|?EFyeZMFxR(`f~VxMNi*CV{4}q9 zG_2rohLyOUXwN12%^8Udg>N6yXgzNLQL+S%$Jt#tmim0FX4${Y8?W#nAz zy*>6~74qyY(Rr$fg{+-z_eY&Fz->$1e zcw7`80%gN=8;&9Im%#4`0f}}8pK?YBcfzcqq&_)@e{G0RVxO-D28fx`$Q+llEC9F9 z!Nxa&(VGPPzU#vxDphR5qdsg#3(1A``g$WQrOCsMIOqq2Rk92jk4%M8O8fu|n#U>u ziYOyW^ogD^UZ_I-M5~mu>*FZ1>CaH85{cZ*BlM4KA=pyQ*p%Y5i8M1)`*XyDo<+tl zQ%EXeN)XM8rat6O4W8Gp@v3NiX;UO_LW6O{ykb9_Y|(5O*Ej20`srWX&)TBqp9~x znX^SD0i}HiJsRe^*H8$v8#!u01K)c(5?YZC=6a`hHU5&2DYdG`TA$p=0bpt7W#@vq zb0-RCOW|X0Wk8o~!3aU}EX*dFC0!%L;lpZd4@sEfhNV_-+QCz-Z!d(Z2Sm$34Du5f zV1y7fg0rY0eV`HAILD3FbMvOkYxMP&z9LJ#VA6MMe{1DHT)^5oqfYw&*8EA z=g3wcK)M_`Z6Q*9ja}3LS%2^}V9oMHw1rzV%DEL?$vIufbDftoWK-n`hD070-R4o>JSGQe}{9BVf)%3F!` z{T&9f{to|0ZF>dHVkj1fUpFoG$_pd?VfH)Fj*F1?xOJA<#&v%gI*Jj&HOL!WdMu63 zV6!Zl0r8(i_>xFo4^E|ng|oFak3!WLyXvz=C2x^I#v1@u4ge1YIgtO*5nH?rGgvgX zn;e}_fNc&t30t^-$|RiIw7D(4Fm;${**AVi1W^Ie#RmhdcCy%(u09`Xjp9;^Q6Nh@msMco zJ}RVNxOtgosN&wB&~iV0yB;iN&z@mII&7bEvUjNoU)Jx%D`eOIwojLu%J9a#Smp7H zMmDin!tn! zv-FytwgJ}by5+o7>l+5oz}pZRWkpkt++jc(Ie0&YA9#R^CL>cI@-6J*y9;@-X6VEN z!_lFzWWq;qLvR{3vj`NpsMqW545r+Q&*uZhI`KVFOzlLV>_ViG9WQA?kEAZmRWUQB zjMa-5?JgU-3?I-uV^aNgb^X|pV{>&C6>}qcp=QQ2zC_Nh%(fbszvo{T#a`GH&9hmy zEx@X{Nk!x$FVjIs`B78v(J~7#o6OL59q#BFriX~mP+~*pqa#0HRC9Ba#ltTQ7XDu0 z1q#wmMOaRpgDcBHMtSkeM?*f;V5=CfxE>;1#ih@2h2+_7k>>Wr#< z+OX|19CMPTIZ;00y;UZ?nti*gZ@`@KQ!SgbHG$)OC0B(v>*@m=AJ;3a{x#_*bvo49 zk&c2As*ZKNY1cCJ4rLxAts>NT?}F99T?o1hROr9F29yU~iQm~;R^a``vZklzd*J*u z0hrHAR`Q)9%$G+i^D~K)P1No>Q*}X9-=R-3?+QM07Ot=+Y`=+7@oC7%tEM^zUtZ=A z#A-~Jdz4E$>@SG7fK%LgwEC;a(HIjH0RScDYJY8?qLnKhRf&4++$ZOR7FMDLR=Q`e}s~;;O}V4PPlzUd`mzeKa;Uzj2gxCVmQ@xd;6Mh>-sRB)=KB$~@w@ zWx9(Gz|%0YOI#Mm#VdTN2UKqbEAze?ox~x)#50Kj_%3?Sp4#)xb7b#o$Wcuygr4T5 zU@P^B^0rfK&}?wGw?U^oZqjd>#9JI})9g&_o@>f5u3BcHd}mKQ{`Nx)JZBJgr?+fi zcd4Pmy!b#d;d?mk5&JWdRTABLyQ|IYE8S&ABp#UVF9?oS+O5I!qh3qkRi$EcrbVPr zBtM2qr~~WUK@k*d_N{6bfLW8cj#JS(_2V8fu7Z5qz^9W4L6sKK^#;iDPhq!hp-uqR z$=vaX&a7Y?i{5eDWlW**3qh4A`7m4zI>Q$SExNpSTQEh&H~^XiD_YL9zl>SIXqBP( z2(QsLyPqA4mB|rLj9%%n4+9mA-4rcn&IAUEU2#N?Gi!k?# zW|`eG&0KwLxrwaR<=_UgvJpOCN&cSHym~cm_bH4Z(8YB`?h+1msss7@=}vjXKb-eW z<_uv;cxjm|ExEl~L!vIrOvoH8G}qH?VFyh)6sYR9!Buyug)5Q8_n|OFJLaAQ`?-fk zR^L@x)T(KMs&8SsU?%Ik%$Ee$Gma6y*V^G)@qo1$kA~jO=C_A5-5V<<={%0DeD;RH{;%KU9{_?=~!xjNf;dr@>(RufirhO|Qcbz2={WqZ5_7iLGj2+4{Qb z8H7jGwXthF5_Tw#SZH8LDl{Cbp)NT75}#yIN8+N!6Mzp&@Tu_Yp}2=1=bX=2BHs~X zI=6?5$ zj()P;`o_-hO9ZEf3KZH}uQ7*D2_k*EbFkI^u5riZIx+Ot@cfCM$w-_L_dYct{I}5);ptx1c#UNA%3qeelV0lkWd=)wVMKws;$XE55 zWtMGjZHq985C0%uw0J55iV-=FXdDe89r1FoP_4WJ+C9+{_kCdf*e%T;4L8VD7t+=X zx$Ht(s2v_5xl1|tw-ad{|Bz+Uv>*ZN-%GYXADs6;&JI`^L63I7-TzkF+0=Jw}je3yeNA1fvs$(*92GStFIfpf6iPMIVISh+9k(_IfOMOi$2lm zL+#(HHML0?3GE=?dG`+km6zQC6P#&H{=v7;FT?gRK~%7%Pgjda2Gfv8fjoyG`dqLd ztaYY4rJ^h z{pI9{C3V6qC#`y2ecJ#>4ZL-ehhncKPyEKP%y#h=4aC_iOs( z$dD(IE_Au!7hnx<5~-Ei_rJVfZ0o;|$-!|&LN30mcw3l#Rtij5RCfirK#B8hCkH00 zQrt1gZKPa;UK8A6kA+!I-^zMRR($o~E`Z5wzl6W3AV%PdRk%@jmuUGu+KBH9zkS+l z^4~3yb-$m{KaK3;^TMw;3e@GJmoVTky@l}kbxUvSc8ewwK+d3l-K z8Nm$U+>>5mtT2{-unEXHr<*H@c9Hq_oh5H82KK*P>1)oj?>SMS{Rp2&s7vP21=8u< zX|}f1Lz}0}GyYZ{B%t?}Qje#p{ExYRs5B^o8;`xRxTcS|jyx$p9o-5*f4IsyTnaZ4 zeLyg(FZUv=W2HjDSYvNvKYCW$mWr8HKdQXTu9CTofI9AOUzcwON?PCEjAM!B4VUi; z5fA5sW4qm8+ykHSXUSIF{6@|UH z_Fs%c%W@^ebS26ejQ3$)=>l^+^CQl#0aea`hzgKn5MS%nO+H>aO3zaWe|yUOq+|1g{7S$ zP7ywNgQJP6f?}V|dLtek7gCPO_A~Q3x*VTG zH~bG;&o^mWbpo=(Zhh>$sm^YtLrw)pP19dQGq}FZ=8|&~J62H6EmRM1SP!)#o;Cx< zJX+tBh84Fqa#a$=bbS1@;hfoV9Z5O|aJN=z^HZM?9NtHong0OVd6UZClG=EA}0o=ufQLE}`Bfz$OMv3>3Os#-{wLTcb3_^hrV&-OB- z=dJDzOFLVAO5xY&b^^}!hS|qPWtTIw;AIlwU@S?SG&SA8{&o;|UiJu?+{`L_D4LJ7(T|SKc z1yDS+MNQ82DgQo5xtGOx+!oo?RX>_>5+(_+2(!0#CSiluUZr=JLODoKJ(_sgO&cEH zv2TlLfe-NYCf@}eC+!z*DqN27N!2F)xF6YK<~`iLUV482aM)z`#NOb2!KZ*^K5&Az z6{FrY_SBZO#~6ivPq_GPS1{Mo_dubx=|Vk81_J}+g0v1gVQxkws^Q8QJ#Sts>-Cwa{q`WOpsc}C_Z!^?Rgaoo7VHBO^*)4x2W{kU?cr_e`lL)z3T zAw#xmoFW7yQVC(N%CFHdBmM?6mj@gACt9*l3ZwRI#1 z*O9N#fV1qF$u$~MwJ`X`M6EXLOl{^oMguKyZ_w{4`I+Wh?EUZQZU9=3G6L7clC`M8 zdRiRYA9JGoi}RfVskA)<`S*pvY>KT)Et$U5dHtX13Km=a-NCEy{D-kGalh%5keNX`}ARoY}J`LA%j`m4PW z_kY4>{b&1VdqsMZp+s!prhaLCSZNGYG;a)5YfOHI_1ZJ$1H*R*o9x-rf7=23?+XK% zlI0c>+eJBJkCu{k55*Tmy3+0PHl`8rL3p#hmiBXJ3wvpJMDaD3cRA?{qM9J_3}5Pr z$~A-Y{{qVXvy1-wZ8|LP%WY~WZ6NDH3LyEP()pgc%}LYuY#sN4P<>yT{Ga9TpoHWx z38#B2IAHo`%XC3RsX6${|E`Ks5>PO2pS)r{&2flW9dKq_XNp&%Ccy50=oASU$^L&> z`^xaPl5ATuGsVozATu*FGcz+YGc&}@n3$OzQ_ObEl*Ak}(^Jn(-#dNZO!vI+-CsI7 zl8%=4sj9EE_S$O?0sr6RXm40^u<4AEq!XvC;$V)GH|iOoX(#y4)LD9^Ov=o^F!)vy z5DxA?)512??PYAjl~&i07>`ZJnx!y%*C$k-=-AluAeEGjlSvYs)n=R?v#Rl=lUptT zK(Rg+9^vX0SbQw~wmN=|xO{hngV(5KE_Bl3deZEpess3i9wAkxbor%BUr_?W=-{H( zUUozS>x0E83By|{2(Sa&Cqq`{g0mNvL{D1&6jyi#)su03DD z(Z@g#jIOLeKFt*;3P(yWa@e4h2B>;pf{_c~dsgk_fu?R;2dnB@<)|0rQ+~8BUmY?f zO;1_lLN#@gfT4wgA-*2b$HwR=1P5`ey_}_zYJe)?%?_OaUpv-36tE?T6ecZ7G0rN=I^Qc+yQWfqq_N+O~;lC?9 z?Dd~&h0VqWfqiU40Wx<^%xtP&^%MIl7akp^mLIa+T`M+3;mi zNj6R&46tBLl3HCuR813*r?78HtiXF^dA)v_cSw*E+Zu+2x7!R00QT!ZC)2vh&4)dGgI_a4*H&z0U5V@s^gp9bHaKY= zw52`Q)IO#mN!CN9*SELkh>&SlExs+?X)`b^N)Y~t%o=uaii6E0Pi;L8QF9 zxnEb!A(-sFFYy-^FMcasLow}oIK}&+o;Z>QyFw@rBdU zykvDx%i}A;T}^XUAk`#XmZsgAi%9B9nLNEtMKrK+1Kt_`O&!PagsdZ@rDXo*DE!-5 zwn*?oiZp*C8^JrsU2j{-rWL0SdB&M1xUQlXRor^Gamy<6mhny=SZJPQf)!|rA#e+1 zYA~xo)TA#Gvc|hvw5GMiRhmX6Uka<_PDY_y5S$S}(cAv%Vv&a<(PFyl$l}qoy~ipA zW>)kngw$m0eyDNR|5$SNT<1W)JAqwx<_yrYkey|Gw>E$SJRBUbUk z&ZiK(=%FP95dd@IE!2W*l z<0#JDkILM+!i!h5sXKA9qpdN7Mk&dobF?Tz5;|Gv13OL&b={D4Mn)T(BWT9YAB9To zd=Xk3sd>(Et}8KP3*C~{`qrMAsfQPD$2+>~vApH^4tP!?{aFh(P+SZl%(Xrsa=q04 zil<8J)}8J@CN>1tvl+;v$z$kU+os&`a(~4Uvg%giNV(HJ0CW?Z9#o!i7|6t1KBxGa zUHd|+q%+Jv?J6(yUtwp}f`U9U*^d?CO`PI|*w}E@HUnK%%n4S3? z%kz6K4>YbWv($QoqO{yp71&3qXIg8V(d_b~LwB8Z}TLBY7KUrM68F#SyB;vvI5sw zSJj=Cu=O=c8E`0+XYJce+KIY6Y5U1d9M=HNXQj!xI}PDw;C<5t@88MB(%#B@W$Yoy z=a-k9$IN$YqzFQo_($!qR?cSa_3;~C3iayzwz4;c@e8fJ!w0H2hzUX5wP~QqTZ1?%P8dGS*Wr<(cVJ-#cSBTe`bqO3#{lnRxI(dRbL_#Pd=^v z*{D-NJ9_ptKq7FWK?AA> zueW8_Lfitjs>20Jh{&u1M_`rMU#jlu|57ynPlfaE&*=oE7gA+Er)+T}#N4xOpbg>Y>%OY)6^4hdO?=cdp%*1dt!#rA;R1;S)we zL#&vu^l(u_lLj&WB~kr%i{!tc#(y_uMw%ZJv{?Zb=2ZU1m=o68+A6|rA17Pi@wC=> zk|#~m_y(eGN+mza<9=#Fzu4|E5a{8WQQm`>&3y+!JkIb?{IRL0J&D1nz|lnl=Xy)p zeo`fVA1(j$w2beKAPLx>s_i>@_#h0Y1@O&tEes0$0Z+&L z0_fx?j(fJ{#)o|;4;IAK1mhzLBp0f={slC7xwVfFUgh5(yOXcp-a&qTM;-H95%jmM zK4CqkL%_`+4@5Y|sy3gW&NH#R@)!bhQsm&zhPA_ouyBft-$< zPsnQ)yF!np*O{IQT-ewIpGA+RtH<}_$=hT0?qTtWb`xa9;&tDiwF7lPN-$fKb{!~M zF3oUV&(-1{n@IcV|tgbQeZ_Pm5x$x(uElt>YPk8m|MnA-w(hdPGZ0ExeOr^Py z-LPLiF^PZwu8~kvDbQ26btqk7!|@dV$h&$&@pyuLju z#}WzBW?E_K)=?1NLEk;d;|>Z6Hxf~7*5rVM^4x&2(><%Kt1UyXbcEC(C}|D;W5*Zl z-^^lM8V{e+GsFC78BQ%N@~lyhIo`C95t7Eiy=!|UFmZIr_^5=+gV2~@ym&>H585u? zK_XhJ8usEC7IQQz=mnJQm?b>gg`^*Kt*F2uc2ISn6k>~Q?kv12E+G{0vdTmJ9WD(% z5U7vkN%*({`y@cb5FRz_8xEsv>K;1}RZX>Vv}Is1xqf~nq?RH?*1MA z4b@&nUf@_?L3h*lx@g?? zdHy^F5@AKvKv&wK2}D3$>6o*L>$w92d`51^%T%^+wwrTzQ$egVXOEv}Ywd1spJXqt zdWX~6#%}`+0|XJC2>I}SL4OGU=}Ov~GnH1L%?pNC6nuCrLPG_)kBc}4s6PK= zc7#)bx7)F<*^7mtE>AvT0hv2j;F*wVN>luAX4L;P74yfW$?rDPe?0p?QYkI}@U{NK zrCM;k1O^E-75ZXMR9UqZ=Bqc3IX}>@M(>ZV>IXePe!(11#c7rd=*rMg4Jj4-M*OtAbN3EH z`tKD(k~Y+ZaR07DL(Oe=m32d4rPVz=Y4tY)_8~BV2WD9;=zVIzaO+vnf3*$xSLf6K zU6Z=&nmN-R!)@rp5*vO;bYz!rPi^c0z=9%Uj{Ndz$bO|We{Zfe*Q-fa@>pPkuzjWn z#O|LNkbiXy?DPb9ymf>*(Xp>ob@nvoLxtkPE8tL0{bsh@Vg~fl^QRl+SuU~pA39Hv zMWPkJv7?Xsf48y96=%Qz*$l-#*_~CtCUB+?z3lxo8{H7JdX-pot|I0$5eFyN>CoT#cS3Ej;r5$Q>RDITejt0 z<9xj9*M06ry=H`U@Fe-KSAK&BIm!*lh3?ba%NGaHY-wuy#D@`(qw~mNo2;pQMiv~18 zZ-8g|^U!w?Fmb_f`xU`G>#kW0J78b2E2glCU#& zGZ!;Abu=?)k~4R(bh9D`uyeBt2q41!{&}xFpy8YAdMjGMecU@ZVOc>IrBFyFTmILF z`DW|X<_Zs{)YgS$2Aw-=`ZA!;%-#JRXI_N>{wY`~H7dLaM^B=Dr-ua|(FGG~IBgIRDvjfp`Qd-0u>!YyWFW*@xD ziZHEY#Wece==JhYuI?StPyZE4rCs?${RNocU~U?G9K8PtA7Cbg4mBNP2ASO$x&t6{ zbuU>zHL(3U?mfbzEzu+f7aheqKF_Lri5UI;R0WmW&x1Exoq|`tk$5smB`IPA$><8K zSM%3YNUYKXsm$kDTzK4lGkgkbspY)qg-eqbosD_j#f1@*B|GH-tZWSBJogXYol2;r z1e@W@KG_l?NotNYm%=PL4b?lSYB1tSq`ZO9pr3T0Dyk)9Vh(kq`cYy&xMEhifBC8G zge5eM0nf+Bp5BY*m*vkbr%=cMFeF+s_&(Z*bihiCNy@*}Mk@NK8 zblMEbcRDuJ61ctf6Ud(VW~D=bpPwjtPT8R&M#5wJpwTgO&h}-d#=SB0<;KDjjn6F%uTEg@B`jj)p4~AxGUY-$#DK%EU~0o|jK>1rM>L z$}J=eXwiXc!x}0$Z_okiTfuSg-j~Qi?b64h}Fy*kg%O zeg$0eSqR1zh&rSlBECejeDaJG`N)c0;qdb~Bdz^ex6#Ucv%}z$ofdU!O^!YI#542a z5x4IBt(?P&eyy-Sv{`t2x;|)-NcQej2NAUduH01em?tB^ah691l1Q#S-ECuF3?A^I zju23SS?z#C*wVQ|2)kc?!63(sCr6XHbeP z&9kv}Bt_mp^rfF@sg9NH4$q>q%?Wy__CxqJ63kwXrudS~B0RHBVAeaP8uyWk&oGru{Ucq;#a7~nbwLI0U045?5=g0)EF=EW*6 z-T;!|U_(m|YCY93()jiSzdZNIQ zW;8?V0wh}8dew;)m7)}|5YRiURAS1urnM-_+I)i}UQzOM<$}c8?e5>AVMIYq;{!ub*Nmv zb!J|E^}?!+^+Z8I%K6lpk$2LHmyxn&nXy9=Ex-l!_!iMc2a}S3n3cADD@s4>Qxjo9b&a{p6rw)D(TPjOt<45H_Vsp$Snk(8KzJf_w*}Lvaqg zF}&*aSHP#*0%o^hhJ)(Xd`x%#v4~kE3r2X^ZS=bKXh_xX;+|&PqPF>y2q_G_mb;=h z5th#$Hk8G*+jb(=D(Nv*9j(?Lw_`jtV2Lk&b~zCzT+zJ&ZNpO8E$ekl$7tQ0Ch7$K zmh$iqclXZoYhybGhs_*}P`&0q4b>;pN4bsNUFW8Xs=C>`gtqE^Ln_de49O`-#6QZJ z6po76|FE{OrFdrMP+}{xkR#`Z%${H(ETf0FPrt*&5q@rJsVG}ykX0{E`d$!MKoouy(S3W~)C z;?qA+NG0sJR_be2vu>sEJRH)A1x^fT73hFH(cp{a+<<)E`Y;VDeDczv>(u`i_B_{c zVOpQakvlBq7=NDQ%9;9$ah2`?ZnG~R;l%WNwRDn#Tm~#hXr#N`KEjS!Lp5^E#o{L& ze(ldIGEHjB=svn}lTt1sG427Fy{I}8&I%~EELA9*{PkSYC0v^uUU2qmw6aPF4o!E) z_y;4BuN7RzPIUS|7ZIxpv*6Dk`6Q@0g%#G>ZIAi=eV!~}5qoMOF|!=ZeaGbCjZ_Rb zgH+{?dxIvZ+5A7nhes-qge#C}YUMkr8X1;+@ctH$eZ0f8JKIG`PC*K>HXy@~J8V)Z zDl|?;!yi93@lB~Bh&4QwJ*4SCGRx+5@kUHgpICgs+hEij0Bw*sJ{8W;iG~BLWo_FkQ96s%+Cm-Lu(bL z+LGyl2&OY)zf(yy%MAcW;qBrlb^zOgyxaOk1~mj3RM$zizw^VPID-=1#yZ#*615n@ z{nwZ@!j~B6Ut`9!I6i`{tehJGc2tqG?N!32M_A2AOCruW*{99cUSDr_hu}AOita;r zSrk}@QMyP;{i zL$S@{XBa|LCIIhV#C>mi?fPmD1?A2841Ht1>7rP*R3=hF)tFZ`plES>3ib(;q@eyAt&KqIMRokI)vi&H-Q$ndbwPh*Gbi77RcZz8;J&Rdl>4YNL}hB- zB&o`ovYNRNV)}Vq{pY-}P1}&qIcrBt_q#1ck`=iW#GqmbfIHX>66w~%$C+>)o zrM#f3ENRIM*(Sbt`XN<4_|a_LqXSlV;ye~RHJ@jSzz!TQjNlI$iQd$fDF5{P4D;tWUUvGEdMRyZm}> z3XAm_(29L<6tML&;TxkQyUi%?9Uy*{MHO;kmOVQ3uv`8=i@hTyQ@hi!LlDY_ez~^3 zE!Jw=Af2J4g2Hnrb+lwmSjhgEeHF^F8GrHT_^BXyS)#|xlBhrq?tF46$J72&8^hhI6hzFQ1qUE?kM+x&l z#L}^wa=8nrUS4oP)2Y0EJwL8;;rPE6o5u1s+MNVe;flJ%{K#LJYsT>JD90%#m0g}D z#oRXE%`4ktxj|_$9p2>o{BPWJsB^Wq|AvEaGB;*Tk- z7Wr?iI%HNpL0G#_KAib=Wujk|nbz5*dkQS#$f)We%~Bv~4J$nrp-Oa0nb!duI z1gLWRi^Oi3)K3Q$HxzpyRmsK`b511Z0l=+T<@fY%A_mxTVv%!6!WB#17{;md3{?30 zn@V}yY4}8{Y?Y_652|rB>G|YpNGxF$r?Uo2Fz47Na%vIad*sZI5-2qaMDStfsQ1;Z z8}ox4K;ww+Llkh0y5&8%?3^>_6B_qiUtTs#w)u=lFh3}3Kw&_ci-Pl4>8&U21YK;; z)r$(j67Y>sbo&&IEEpn5ZJ0Y#BRH#IoebF;LXI16gJoc>J~=(S*R`2yFcI}u~7>1ZcSrv?i-LiP~?+@m!0zlW?DD;yPW6jgn_o!WXJ=|OOQ;~`0+`44NO=J#`y$ff5)Uu;U5gxx=sI?8W>AIT!NSkbPE zJ+&?$hTlx9aL%txOA|pwB&{h(ZO0AP3Z#g}-}uKFOgl#y_d`1fBLdf@^)Ow4r_Ue* zD_r*Bh&0hg@fb9JnoLFYe6s}9YEKg)sV@YItQg59$ens%Dm_n)J zj9QD|E%iO>h7aw^rOr&Hj)G1R`Du}RKA*l@LRE+L=na{FxC(6E*)y^K=lS>>_peKl z{g|}AP8Og=hZrl@WFe0Ij)_*j9II=zTCh>Pg8$D#vM21+Aj3)V_#6zCk zOSouNdaeLBhj+CG@|4`$;Y8-2?|N%aWPl4RJXW6K=Ckz{9%fP3je(Uyw2k`LVg6oW6eZBgZES9{eC@VR!d|I1jG1*C;F!BfO*nG!DRU};X>j~T`D9~sbc~9 zGHWaT`WW*7=g z*8GK3hs$Pp!Ydt>%h<>ZtY~hz8lnlK5DnuUIavH9wF9O2H(Db7;6^=Epzq)!O*@1C zhCE{VC-O+u-Nen?3CI{(JJ>R*n47xk60@;$GjaonIhk1*SvZN=IGGulS%^7V*cdrD z^@*88RDqO}CNZ;s0FwkUfJw~U^|z030WYb-q@}Gx%)v#>$;Ls<41BAqn~S@to074M zxq}-q8wba4R1}cS`Ui!@`WGlTxENW1*ZMmO05gCQ!1=#{g7c3k*!~;^fSH|_S=nN`8^hFz#H@b7Yg=2g80jo^KYT}2Z(=!;{PAS9~VxRe_lBM zg!|{<{2$!^2>-gv`j@8j>UqH_vh1u`J(m6|2K6Ho$F!F2-1JYr3HfQUtRy)tSXD~1 zv|AsiWqU~!pPf2=K`ugY&{!iAYQBdAfp%7ORXDP3^6+G5rmpWsrsNwGGzH=lI*p^$BL4PpVHCs!dnB>26F0i`wtKO| z6bXGw;r9e=|1`}hNoCIca?ym{CFp*kd}Feks^cu#YLV!{C4K)%xS-jMZ7|-xo0FaRK45lbHz|-%@BAV-gKO0 zHf9|3frk$whyiQ{mG?xwqjLhYAZ6AM>H6Io?;LC|m&lzlOr&$4+ILTn*Mp(Z%oV`V zSD>-32b~Q~l7Ox#B2M+r?ro%JPumrI6N1QBGm}ps-#z&U4DO*@J?B??IBNw_itoYo zzCMF5<)$|&qsox$L?~sCKxcx@iS7g(AtUtTfA3NB7Zv0R-0BK>+}=Oi<18J7Al#S- z?=H?Xg1uq8KL&7oRRM{q)2KM2nZ>R;h!jHEE zRik*?OTE|Vd5o%3)kc3>**kojTY7bhY5jS1x|erZvNCj(bsKZE)1dkKZFzW*oVCLq zNuXN{qWg;30BnB*aXy!-i$M+fP>xFb7`o?#C!KI8hl+!F&a-EwsR-7=$OY7j%5h7S zp3--_1lswIf31U)>ABi7o^!kJ3H4W0x920F!vL4@PWa}RU6Ni1;bvOaOYma4`>s+h z#ZwLF)yT~13tY_5)Dx!R$)RVs2EZixs)9n^Mj_M4mdt`Mr$ z0T%LCOpDE#4>J}0^YRNET^#c75_UIJq9W+<%p8YpnEt#tqyFnK@6l}g$iT1 z$MG)RU@#H>ASsVp8f9rjLzY#(9nmQ4+3&#ed+FYf^dV@Iam^^qo!qSgvT0fX(<21mj7di!kICFkQa0q=wix@Ibw4IS6++0; zChoh4;KFj#Q>oK;%88_PZu$~iCo*Yw$z?_of{yKPTV@>Nebn*v^F2S?;^mb;dZ$U@ z8b*HSOSVR_aD$yuPnjTYXM-!@8wbtQg-qW?f=sGdcwly<*>K5@Bq7Mu;(5fsn*X$=~;IF^*-EM#|l}&&85Gs!>z-;1c!!5NYot++lzqxaY9T7Y8kCmNN5N8 z%793-Y~{Vly>cjv;I&aJu~jF;`d8^>kF~o=>4z^*K1e^rc#P3X^+V$onyIuo>E~_< zdl}cL5IsZbypVzwKu&QdU-Zy(TJ3BejKIBJD@X)(64i}PP5X`lFFu2tinAJuvBK~npup#W(;LhvBYR7yF{ts@%Vg}^t5^Ew8aos*>> zp|&=N7;H{%W{UtneYdIO-y-Jvp&E!e_tPuP+lxAr+ zD@KytNRBdsF++h}8VSB560!5Hn%?8rTbB=j?#N0xlg^a(P-rBio@u=M9Q;oA`!z(+ z^xW16n0`Eh14P3r`6@iH^0bq?tO-&3UKQ`HV zl6Yi3>)slpq*@4J%c1*ztAld|9sRskL(&?nun8!O+1;gC0_Tvcx_M(Vv|evK=ooP_B!9Zn3WVRa zGjhn{R~A-2e?spVBwFqdLO-T*WDFK!utW^ev{W1dji>~$Wrzo*D8W@d%6Tv1&3%X( zRn}zV;^T2Y=8_o&*r@Pu=y@M}Y&^z?;GZ=Yia6quVme8ctth1+8 zOkaQSXwXsGjrAf5RB9AmFNSnhimuGz(MKcXx_TY8kaXAKF;Wlr1b3Lhs_AN^(V3Uc^XF0+oxGum$qCfuS4@v<&G5Tb^gEn=yE;i`q863s#a2Gn}v5tZALu0%*n2E~r)`0asnSex)U^$mfK!dxb#74e2g`Q^Ji z!3F9%^+qoAv?jl)RE`j!8Q&bDQqz!)`*1);l!zgi?k4+tTsE%K-HKQTG za4*w)htK>DU|Mp6UGPnmoNkhp)M+{Q>Pv<3VICIYKS>p)r|9w$wIR5CNly6kw#}OJ zedZ&ez4uh;C$@NDFE$9E(G%@b9{Et1j4w$K@{%7DZc1QJf++jT;iyFD1d2fPnrO72 zg2r9!vTEF?c|@q$EONtvBmCGep7D(SbqWKg<^n+rbI*1}l>T1uH|Q3YhW0w{mYzM3ud)f`urj8UcRrD9R~Muh<^K-QDsT=G6f zs0k4g)vC0wFG0zc{TT6+8he%%GC|%8*R`LA_CwYO(^pyw3FA14D5k!uo!CyAFc+q% zqUf?t<6Ms0oQ3&0j12!+qvCfE{kCXm`*5;X8mP(+Q?G!wb;-2IILQ7$bHK)0jYQjm z(7qmvTjgH1Y}! z*m``=W(ZkUysVGk6uD^Fsp_^wY<6!_+4Onu8|0{OUAKTYkcMkApzwu6aWc&ii?geXgYY@&(mb zt065!wU6^au(RBe(Kh-U16udcQ~r#vGOGLJIiGH9ot0?k#PxgxKn{lw>Pqrk_~fv} z{XL@ly8e*)(l(Rldfw6-*&&a8>JHvl`OyxAL}<7M2EC62$Os0q52$0fj2$5#7xsh0 zZ0i!CAJ=T37UQ`W@+M!rg3e*U1ubu$#;dyG8)6rG6cQB^ps^ZUft7z16aJ`u<%&C0 zuA*^HNt^EB!A>yOY+m~KW6M^B>MHxFIS-wxHg*@Y5pD+JI4U0n3xw5%{GH#q^)m?-S$aW-u|_?Avm-Z6_<`R5(5A0x7tLQ-E2gR6ybS zt&2?Vnmx+q=9VE#->ZLjqy)N5m%_ox&C%ZX^C}W8hV12?Vn0d+79AV=ej4?|W5(SZ ztPiJTEzW$xP=Z@2T1hUIIvky^ljoO#SA2PFe$LVRUtV8|eiiQ!`nPTTjLX?5qm%!| zccwMlBedJWWRq(VH8**A_e7(%&`2sd_(Vk^QM{&svgVY)8 z_k0p_Y_K+xWL9e03b-uASGXE|9~nmfhYUtydFhc#GfQg z$l?#8Px1Y4sy|j<(`B~(sN!`B?h&3f1-Jj9*Q&!}AXoL#TDo;=oDjuA>Afcz+EPLZ zr&z?j;4pWRNRbw^J<>m*p3f|5+vyv2T*z9I%keu*vP#MG2OMroqKXzWgABJ>n9?vG zJ%O+A_h84NfqS#QpHvqjpO9@k`ifdOcL!z#4#^G03>P>&14}It?UvZQ<%^HYu-+9{ zjJEni!)D%I1UbIf#omw^MBBC9ISwUq9{24EWpgd{})C1NB*4UFZgq|zf+X| zK=BV=?tcNrANg~Zzu?bVnYkEQxQPKA?2N43#H?(^UHI(6{*Ols*kGwv7(jWa$k_daPoN|9V9$4w?P+iYg0O+fha@PSp3 zkL&HJhx}eK5;|>zh)`~aWC8&IMiD{)(=TZC4tE`eFTKvy@S$;5^ad5#MT`aJ!`~>SZOE74Gse2 zf=wS(aE5EOXw^ZkBg0ZSB~wYc`O(ICT>wRZM}mq~@qZ`t{j_ zBKIeAVm5iHtlnHH58&4`Dfd2ai5DKX&`!qXg6%`dJD38cZT-otiC;|@rYbFzaf%qPi=jqQC zu1t#9!=wsK8+>R~Mnkj&)g{r>r!>{w5GS%Eutj*^2{6oB;u6$FCs5|8X8Q|)!sNQj z_=$3BH#DPcQS#Y`Z_Pt!disO}`5v&9a7D2VH}Dy>xFVT9d~j6Zz~ofR4K0l{wQrBHiFT}bCxCjuLf?f=$u()V4?eKDCO&$6hP%z|`U`xMjt zX9RvyAZQ6$MS36lnss4g_@FY%cZlaN_JLA0-cp*H93lJk8j~_>BgPZ z!?FDHy5%Mn=C_3!r0N|+xAo6y-UznYSi#W&Qf^kmDGQ!`JLi3&#)9v>Ssy(c61`j? z9pAtvj`!B@QACAzO3h70%w685nJPYf*dDV$oTNBxY_Eld!HOl;;s^U^Zq0Jo`*gU6 z%26zdM6cgLtGX;tkY^BDAsS$krgseab3Ad!_r(b?KJc2nla?0k!6VESbtfSu~)V*n(;(GGd7&?HS0zqG}1>cwPE@ zC1XB3;Xei(p>3FMZhcLNF%vfu-5!)pa*N`Jt=@0DBr`->goyHvN|Zl81NpT6@CD;x zI>2rwYpEOhIwCuc<}JR6gA&K0(CDX5nT;Xz;&Io5uWlLraO^`)*qj;`sNDfFvnVrp zC2?Fmv5uqFc&?`V-EJrAlLTcA&dd8z>K#&@iLk^7Cx6~SRhnUpblypuh-`>Tqp|m| zo6>i^6x~`X;`4r}8Z+lm_i%n}Vv^5l7fd54B;Gn{pmrqJpV3iCYZok1h3 zEvSjTWVcFovVYJ?B+5d0r_Bw)A>Jkf`2y&+wVfNqe7$SmpS4c$-2s-M+(h2wX4V(Y zIm0_7UsHm|i-CX|d+-aS%LpB|1m(9X3sEG;YWA!<8FNbw8}ZLb8Et#b##!wEIr^_F z+@>qgM5-Q4-#waUPPf2p!bq_062UVwRwhii?Hgfu)ygv&Jx|ou%+1bP8YlG@(RL!j zB_G1Kc73pE5$tfF(m!~(wUD^#`zxW3o!yyc3Z*Cat?)`mD#Ej6uo5OE@KgI!s%l5f zdha#(HpVSUz77OtVnPvIANJ-=#iTW%D9`nnNaI)#y&UeX@KlK@E+rzRIw-Xn*4|~@ ze@SCHzl5g0xW1af)3WD76Z$m(3vlNmK5DhWAD!6|-iwaWbt+fAVuvVBM@_Uv)I8h8 z0G0hbulT0(=7C(9jb!c><@%F+|y3- zWfS^rZDg|Z?G0>HPN3mI6TOt|GD=0*t61D19yJyQ{r$QQPp9&eFgqmB#5nZjw+nwA z($3^Jiil)KBsoY$7;;ti^Yw@}sN{r)nSd;kVNTVPr(^gfEaST}rN}q!fHq-^OJ`Xp z;4-aT_|dL~|Ds7JxI9LbTT-YQ@j|L%lm%I-*OLIRVFx+ZW-!K?^2&x=<;yP9@sHDD zz|pExPJ`&sP~G1iF>2FhB~ZRY`cc?MJaf?f9Z)u+5F3O1ot1%&SxxKHxJvLlruiy< z7a_PwdNk-9Ui>E{1ehkf#9~t(rlhw8L^Y#vU-T$v*zvgFBK$zav>)e`Nf`L|X8afd zPps5qRG$mKRJb3t;9CjI@N|8VuR|VHRvjY7e1%fC$ptcB85`6{(@S>_dYM`WHJc1n zncKd#Cg(=N(e4(?@D9p4(d-A+Z-|t%lcAKy<_|JCgUYvzz5PEy_-jH@lX=5@XsiUL z7%+F1D+hdRDs@l>rzSc%O!#;{#_vGpd2YvOFHNX*f0q)e2)~ z6R98-@7(_CV;&8c;au5)ajOm}12X2oX?h1(iGHi@gCoZolo+pzgf1<$n+MI~Beg&^ zSan{B=XmG(ii>K*1~+(dy1|zFBG8Vd@-}XdJ_U3Ri{_-$C0-UVNOMY7@!ctmz54iQv zB?V*V%oYE9PVuZdU`W)ji@L9d!hdeW>n;x&{#Nw)4FtDXw*eiRuZ!@_My1An zQ%bd1ENw1s*|EWXJZUAb2On$BpID+>@jX*>g~3{nT)G3HSz&io%F9`~=Nz2HdK2S( zbMe4A)#68aW_sL~x~DNzU|n6rYOdhubmGZoa?+AKIL>0$Re!K<9iwGkCrzw6uY@i9 z9GcO1I7~iRH|2XJr>w%*7GeQdx6$0*fUfHe+&Bdtm-uOiH=JU)!dp>a&f;WQf_Fi>)~+yIdiwD4(;-9Cuo?t&1|NEt!ND)R zij<%D3mO%DI8u*PnMVGi5@1Q5`4e@rrE)o+Q}>iO-d6x0Zainc1QA*ukv~U2r9S18 z4TTb#mYQSgsgP`~jER^QLcXQ9PH0}v5~V`H)@@9=GZJ8pp8&Z6Yv!f`9BbF{LsA@}R(_+YR4k>w!{dDN;gPGvUuZ+2hO3_r>M42%=z?zJ#r^xFR_nPfW;9TujRHBJ zv`bFAlBm=>z=Y*y2l{Pt-=|%gEPb}(cAq9vfte&W9_)6ANV5E*Am~u4kvppgQ=70C zxIdfvimtJ_ZoIP8%&>;d+jGUHg6`C6vr}*7EY5WFlStkK#^vZbv&Z#S#dEUSx)Ikf zZRo;>O8B;FWiIac<1_y~uBQ$q(_X3zYs|Y{-Y0#bt`?FOQR-Nm?^BxcY9e^h3 zEW}DS5kWUU^)HV<@vz)mdHG1z9W2GboTK0>(&G5}!!enIqkD-9VrQUJ*JO`g=Cjnp zx9jyaxWU}^qwE;5Vzbz@6&=ZV-8hyucbo*T_4pYR8RruvnHWOv($2Z#IdgL=m|C`L zhHaz48zRbBEX!3A*sjspA>BVBUp_M&vra1a>882#uPuj> zZc&?Q7likdV~4F)yn|@xOr4XhMa;@mmBb!xd`|Iy7c^IYS<{-MT$wsnniON3Gfa@e z&f_ye^ZtFEv%($u{_ZyP0I6@0sMb%-RgE0z+*ca#&kUVA!q3;>1bOIAAMtgTcJOqL zjy`Hsouyd8_Nb+^{i69DRJ;~{`i+HWz>>PWaUVfK$D92sdsl`S_W;A)Wb^TY_I{Omt1#^g|H=)tLA_SLMhMy5%ORXbx*R#rs$(&DmX}vA zZaw`PXHq9T2MEk@N@g?iXCenXSxPo?)}QlG5{%>U7==DBw=UjlTU}4z-#!Z)-0SsT zKF75Or-sBrQ}4e_zHVNzcZSP)&ru@XEBGZNmY86%#<`4qD>Grj3kW057m*QewhT$Y zB_M)log?aSkwXY%Ir?eje*Poco2I617siXWL?$2H?5{72yGq#=+D0)q=jY40mS7O1 zh^{Q9_bSCEdHBnV{056PaiPv7lrJpZ-#^*9Y(LC3pNA5q+$xgC$k5--D zcRw1YJU`LHjD8%Mh-7)>DcAUYC@2(JNUPIZUH}*D<3qOlwWRa*-8K3ZQsMl$q?Tk8 z=2KDiT9epe)}KQnyBs@Zq$m=?x@&6nH-i+0s@gq?-8aS>18&;l6|siv5G7^RHk`)d$G5 zrh<_r0GMX^1C1zSZD?l7qG4eIoV@4dW@V8!wJk&Nql2QUy|}IQJ6oFvh&0b1NBLihtNwnFU&aPF+W*e>;b=c4fTsTQWIs0> z8`s|~XZKV0i=aock}{GY7#J9k0q_sHUjk`MxLUjgf#l^u^dJxj8H4}_13~~&Fu+F^ z4(`|YLmH&?=(qI4g%UOh9{2*1nC(h9f2P|W=s++5X&_KZ#QiKt9E6OBh=hoMjD&=Q zf`W{Sj)#GchK5drgNubnMod9YModadNzF`4`IM20l$4J9IpYgf4h{|qT3$gOHUR)J z%l5zo1_cEL9Sxlj1A~z53F#BI|JQ%_%^+-KSYfzcIGCp(SZo+LY?%9Y5CtG90#FkV zmGS!@3@jWx0wNMJ3Mv{vQ1J)^3j+rS3lE2Y01v1O;|2TI30X4gky$=fNV*)}VVwz{PbkFHIIJvlac=^O%N=Qmc%gCyzs;O%L z7gMy=DV&mcyJ|!k)WM*aO8% z!Upt$g@=cOM|#i;2G#}mz+uB9JYhw|5miDmw8MSM_5m4BEGoUE1%--T`2gR@ei-#J zHOCUo;e%?wH2a?^=JUVO>`%r1rPmAy9q5>_*l^e&VbJ;2FaIf7957_Ekbt_TS#x@)}LEDjA%kE^Da6h-vLe+|jzt64ySv8ruM#C|ra&;*>e*syv_ zw>o{I@Sp`Tt9vGApGC`pB5eCnaqTh4}Zm2S^x(V~@-QKFi% zm=3t_-oR1Cd@lsJ`CN!N9ux=OgM2QUE|S{H56t{OcWFaw4(7uRBVLt8QC*|!s3qy7 z^&!rqpwuyGT4(2K9U!3 zzo{hgFZW4*rhy1UL2HfIl7VK%c?!m7bE4_-<~UqlKJ#ub1UgJ9IKTryh_H;B{T&RI zyFez}*>iQ^j@1UZwyX4eP+~7|(Zu!UCPIV^1AmYLYs(w*eXSU>@R{XKDhr5)15w+! zV_%D*ZU$+3hd5S&mux|m01b^pEF-4rKaPg|5>1&KB z-~;{yW@uRV{D$f(UHFI>?0Yx$P(D)IRT`;ludeV}&o8cU=@}*Uv|e`k7sBFA^)Y=l zHKU73W-|m1<(8U@2ADFNto>I1bC+5F$&J?E^G1{H0I%fLVa!Zsn!#JUH%bLM5moaq zqeL-^$E5eD!$cO~ST9xWWeOLjW~y#6i5GrXcQM6S496~J9RK@3PVib&NrmkdDQDC5 z@h?Ro#+C~wJb%>G7Np|EZClhAc^dnB(A3pmxhU*-Y1{>pfm2dzepRAy#f!PF-#MN> za0J@Z%Bty-JYpwIhvJ9_{N}gH2ZC-{EKTg_hHm8*D_Rie1Fhbs{m|;a`T_qniTXV# zy-nx$ejsWm8r9wZ)6bq{*~8(V9gyFd)v-}(Z@%%}HD-v=^+*X}`o zQ|MGmB}8+0siIy1&oY6isoZ}lg+wnrT33n$t`gt2b|W3JfXE-ETarZ`lZmVWZ|J?z z^YMAMAyGSwZ8s1entgm#Ny)1l1d`fYBXmJnfG`|}; zq)@n!tzf(dO*TBxUMc;ZSZJPpENDmIfve1I?lLoExp2%YBI@C0i)-`1Gj-aMZ9I)w zi1|fK>P0~XMd$ov#MeFZyU|06TMX@lH<#z-K*)EFhH_C;*TA7ucXmL8+-1gyi-J>9 z$RrxTR%EPRCKL!ErS^yP3bQYTOAiGjG&1TlujSeyC!CgVF0g(Rcl3}PvT8ZjbU;3O z4+Wcj=_(wV{3StCa0SZ^QaQ!7)V9oR=JKnRI~=G~c+=)tYT!*t_HG8tPM?(V z_~uu-2eof8+#>|p5z=l2l7!1Wr4~B0BgS-Q900Fd=4ZncXZlp%f0OoCg;lV$&i^VA zs6U{tzE9>|zx^%akLntke6mO;r!>aoWHR2?m?1s6PG`A$y4)nA+6?DqfIw*oH8V` zeupi-c41|kgJ)?%`P(97yLjG7+W+XQmm%fw(LmLb0MH-Q0MB8;TeZX+H^6}WqzMIh z1b@r&=Kf@Ax4o@uoHUv-K8>rti^8oWS{hwa-bS~)*ZN6i z74}YT)5;UE0GytFur!|GqEUoi$Y$lXp#f!e13gk4e6j5i;sVs2U6Z&5naN11QGO7Suu z+ws(a*x`?H5j&^45fgTF6qjEIlgmb)SrxGl(%a1v@q$uZi%+29Z4<_7)ipt-|Jtcvh7jnR!uvC!rYO%OI+wT@gwH%3JSb%>-;910ev8iR9Z zwY5m(cy>H5I5XGf@r+SPE24;qXz5`P!m&7Da*`%LR(L7S{OmT(rT^(%HBjqc9xX>2 zUEbW;L&h4xXmZxFxDouGaNH@(wtZoS$;leue;_D#t|IY62<<0YYKF^C=!7`0N8@H* zAa|F6EtbLZvf!x`>*v|g6KLwkoZX+SgR zUrcdGX}#52`S>EV>5AMQt)wSzqgV|&2nb{ImvIGY% zzEtJc@{VTN4%&>wyTwp9&iT)|5(u|lGtA^n@@poBsFJYhRidGiUvz2&4j3|tx`dL4 z5D7jY-RSINP+a)~FObdbVjsX?9W10<@L=-R2MRe+o)rC`2j2dx_rw2`eu7sX>%Ha) zoPJPox(6BR0YkgoGiV=b+d=M)k4@7K12FpiG#RgXLlJT(aQph>4k4a_l7vGj*l{Jl zKqLOAotX>S%}#t)AQt>ro8b)a*Cy&nd9;+_n5;kMAa$cc^A+9OwJt#wuFOTz3@`EL&2Oj&x2{`Q4P!HDADJaHH7~4t_Q}Oj)FG`e2Ef7FMP4a{ ztyNU}fakV3Jm4_YIa~)se`H(1AcdN2_;@UaXiIzzDbLd;@af!pf%kMUA08Vfwf1S* z>xN@s!BK05qBSqKkKZqhA|sGQb(^!UlZbP5#KNb{{X!>E%^{o*rg_mB`U7>tk&d$v z@mjF+iy?ki%%DKDR9<~Cv4$Hms)2~)MsqhIdG1${n*E>s_LFbwor$NM5eV^=G(%Z6 z-_x(iRCL`UaO~eQ22?R%bwG|#D(*qwioXEih9V~=aW4)}#p1hE`9?-C%PY=kdH(&a z9Z+vSd+VGfyv5)teDqfKj9s7KqVFma@aPT9Bs?L#eR2K}zf-o)9xj_|llrcXWa_Gs zIkPh8rlROY_%#FXKkcy&*wfFQPL+)A*^jrh)d6 zEA%@WQ&IYeU~^#!Wf@>5a>_H_h)l~R1Z*KGN1#{b;kOXBFj!%&f)g1sXJdbuoR}PM zxre8|i_|00(qDq{>ms3(Jf@1kI3^A4!LkXQDC%{{*Xe-AsmQOZN$$Wa2wPh*7Fw|8d;=QT`^51ZZO zNUpr0L}#{FB1S!*qsk}E#e58*rSSfv#p?*ma58?ipo}=EwP_r)e6RFX2+p1{>+wfW z=LiqTk^H1E*AmSIB79~Vf_9?0F8+Q^8m27b$KjU^q4JY&Ul|tO)Wm%~)f3YrP<>VV ztt4LU^A2uvNgUj2Z&dt~YN{MIsp8$rbku=LZsM@yqyV?@$5ZVol8;JkKJ7V-sf&y{ zB~;b;tUaj?chyFh$>+kyB6|!oSkryJtpT0Y3z$=v1M|*CkH~leG1Ug9K(}-jfdb@`kRn z?1coFF^Zen3Sd^)8BgHcflCaH*X4*MrDhjE&+S>SQ<``Ohg7k(ETeQRzJ-uHjVC-h zx5S8Vf6H2TP97#ACs%RFYIQ0oyCOH58wXXlmNII8%*BAsT2^BFnJKa!Ce#c*r9zFl z;&UoCw03Sr^6a3WgrcmDD)ooZZieUpjndeOO%35UMkkX|YsQtba)putWK*59d4CNX zdxOq*(gMaY9paDU3dNnsdc*bk>o-hsx%d_7&gPi9i|#>~{$=tK06q`rF& z*1z6abterTs2V<%ei}?rUYSA%ou9_hITCAM5_%I4vhxGs#sFd5i>7C{E2GQ9BXtd( zDHD{83WP#H-RHbQC;a$G)DveX#w=~U%g@ufX5w0Dk`a_gj=Qm=k5;4BDS4Y$&2lZR z_hS&|6VNwQ!{?y6F}=YS^CGhuRCZw@q=<&ek?bdhLFC`6j^@zNDA+Vd*f6eFP<10N zjVCuK@9;vC+TKXGI$o0K$*4f*s%rVStUX_>3SWZMkLpw}s8jca2W15fOAT5wZ2$d@2T8?x% z5YNoCK8xqQ2f4g|FN5uCqc?=zttkC-a%>bM@Z+<}x{4aty{FawOQzs)5*Kt6>q^ql zTi$}FGYu3!v>QtA`W~M9ohn6;T_;uFLAU4U%xVJQ zJ;SI@T9Z$T=>V0~(KdR{UP>uBVx*Smrj0mJOWF$e2R@pV#1ZZ;pJ<&wP{8vNlESZ}(`q-6JjFpIo)RA{?s4|$$P{y7rm zwXZgQzxl!;{UKLj7I!ax%iVA}S!GRof$&_+y71|khBUhf+TWM5|MI!3+Z3`7kOmP5e$cd-@7sfC%WU;;TT93)@x-vvN{@)5BihpLcP zhsAr)6>+)n4IwbS@6ZsJ_>D*yAi@QRSOFpmGFM?z*Fy0>#r>3q326?zV*zS7FRB31Bo=* zv8*i-JKc|^!tk&fHdd%H>+Dj-k1jrTjDI<=DV_34__$|N%rQ;|N_k}?^_P=wCl9Eg;fPSDtx-+*qI5r@-joTYwNd?nrc*cGEDOdU z*e-`^q4Vl}^mJ*JoL6{Low;|^`J*WfDu4ayex|R1W)ZJqq-vV9%2P{8=&UoVj;4(} z7ZST^KG8K((zWoyFNP*%o7!&QA)m5y0%_7fuGouk^6yC(v`wngJ{8ZGv&_7qI_1RDw zPmkAm8!EaweQ9hth~8gq%bysE%Ju?LW>zDnZJQt@ppJBn-ReNbwu*kBADhig(7C;E zG#RdwcjR>hQ^F@plb`bf<>OxsD@$W!Q{*~qOQ_u=-L!nzmrYPU1>hZV8|SchSh#Xs zD~;XIX3uX0fvS@xp2KxKhrHmhoE_{**NnE$q;yYupOCp=5imc_`I1jB!|k08O)-T5 zq2keF{>t!AY69r%xd(TNb{U(MGu9n_8qdMREpXJ&*w>!=D^9=dZe9&F8&Vx}bkh!W zMB+|&{j5}fAi%CCU<;Lwlmt$t)eYngH!g^-d(IzLWxpw#JY~5MKM{P{24*~0SM0a5 zb91cxmdW;@no4}O$u8UK- ztloHuE{_?Vqa~3+pH>g#k2mGB$gHV-)Dv?pittm}UX2h)qI2=gg&qkhiiOAJa|b?4 z+E*2}76p3=Xc!4oCWNoEK9ZWNLx9-(+x-A8kaWIR;EmF zhrDhi!2XtENW2?kPSSYZBeKa)IzH#Nm)dqF?}4YJOQxbQAK7CfdiNRgMTdrf2Ws4j zwd7fU#+Z|Ij)Rl+yGDtx3B+z}MSdWy&rD_T@jL?}yHde+w-Htz5X+yyXrhII*N|En z_;icbgUn!CPF{B}S7VIoQARKw=r11_5}xIHUZ;j<6UVAPE2^adrsFIw)G-C$`uqG$ zaDNyzw0lb;_dgrnq^HGnGS0;aiYNCxlnMd{HK}wbzKLXo{Mv{cbHE%M0}M=Q1Hg3r z129B{dAt?OhoJUuZSLPq<=^BTvRue;2w!1XEL`BF-l$O=L~Xt~AsTHupcg*;YJEd@ zLw8j#er*KliNJYaCH4m^8DKC3*rAa71Cfot@JC#^EBrxUi?th^`aAtY(Gw3v{~JB9 z1kAh#5uYuzMzls0ru`v`^a;xq`p<<6e2R-NOz6@OxyH8I}(9ot~Gcz z@ulllQ0k6zH`U)@d+%q_g`Qe);5eBkTpL!&k7SB=xC>OFV&7|{+@s7s;U%h}T8Onp zJz$EWkhv4y04(b=>5w6_*Y}`iz=%zJRx){z`yS6r59zE!VNEIs0#qyTvpn!Ku!!u8 z0IKal);ZRP`ybv6m3Mf*k+chxzLENx)6rN$@U-A#SD!wtMJbV8WRY2qwD zR6w&#WoTcDU7mqyp?LKke{NI+G+O9bROF^cJ4nmCB!QuPwxkE^t%S&f?-wsjVIo7ldcv&y3CI~fS)83Zh z59cFA%_rKSyKo(evN1;WWRnq^yr7EoDhLcLDlVTx9qBwW`B#Vg|C9zC@w7@$epg@poWAf)!P&VO z3t+>(L*uZ@Jmr8X5YA?z%>KV~#s3#y`LKUYM|!)D42zH+9;k<{_dg|jO~GgOWdcKc zi+X-X>!VsEOtj1*W;vvl0O(wUUci(9DWU1cxt5romukwz445h*>&M)K1W&)-kj+C5 zXM~qfM<5%Gz)IS;cj1m-4+GDG#~H0G1$YQqfbN!ZHJN)8$O5_8r8w~aNp+{sSuDK8 z>j6YH0HtLHX`-(Pf04C zlvm2XT|bq%Hkml+pqslv9>H6wViN`=L#>l4i!i9;-M^rOnsUJvJ08-Zr1{p!K ziHJ#^dcc5P&f-&U$jHVzwsvGH6ZLGoI7@!B1&Ba|n*0JO(jAz42}#eNp_PDOlT;Ze4h|R%4j0(*Z+;Nc{V%G!RJ~s(9@1!WF7|A_gzUXTDD`($SfT;npLWynchPpFbIfTi_!3*>B}8JmbE} zgPnT@`Y8_|E+fcCtY|-V7yDmhWB>+j?_ZzpLy4O!4Zn&nl2ae-EQ~o09}|(ppQydT8$ zM8Hncf+Y8N*_-W#H^0BgRY!W98Qy|(HeXO->ixzZ~RP zLmfRc@ecF6`Xk)am{HPdQYZhbRW&B!g-&AbfRkMsj(&`!ff0T~-f^1M41~F=oxABy zkJEHd1Z!~iOl7K*rxOFW&PS8#F=ll67raKp@pN!&Ev*Nni;D2Zoe3*#ceHg$^Yi@u zoVGb-BswO;qSR6ORJ_z2uJ2gSV?%8ScT3%yE%pY$qJQlgqBQI--jm2DUPcsKw_JH5#DtJ3IR`Dbv0+{>Z<@rJSJ z!8|N3Zu6`lRmqnnx2KWS@G;(q>`9|_9$`iZwIjl%oDKBLf+-U1ixM?jrCZx1d$j!0 z0vNu8-9_6F%xz-ED}fnRVyEu%%K8B5XEh#9iw?N9Tpf2h`NhA- z8BVgo>s;sKXys}SU6yszGwV=rO{{v5H<-h|A+S6)e@`BLg#tCOv$I7>*_D&P z>E@FhXl6S|@4jx!)m|s*B8bugD{F6EVOCl>=I_UQ3CdOxkc>9{dm#`p-~yN&5ktCPGn7VHgs1YO6~Lw*0vC3#aPOjAXm?p z_0w(nDrshYQ)8}$#2=l3po{~&+x0ZGviXZZDG#j*v|Z*ilwzYQbL$;_6k*q`53z~K zWZ6~N;oiq8QeM!l(Lt_6PJd`9ZbS9;D=hZD;SwofhCI<4O{|7wGq`MV0^gGc7OjeL z4kngYC5aH1cQ|v8fEcK|^i2$*8&o8LNF`dzgPJ2WNla`rt;;u%lttC{1_dfO3b-V_Ev@gR;5g>byORKjQORKJS|VKWK9=7?$aDt z7Z)0RYjJb1v$j%RW`Ej3oq&S=A(kzkUMql&SNo$YD>H4m+-#!u#JFjqe0F=~-nokO zAfsPr^M~U{nRd&PgCeg8$nk2+NA|7CbHg=L?nad=!_T(V4XGWZsPjf%xU{*sA;lyJ z7@&e0lYn*4wzg9Wl+%B=GLuRauQGnnW>~hQ{*$Q%g?*glDz*=j?y8h+!9|49=;DOq z#mOb3nOZ!_voODrb_I;}{h1;S_~*JNi&gHP&V1{+P>V_TdalRLGmc>biqk&?b~&IV zUGZf8>+_~=4xMq1w0RbB7yir`-O zwpa0~XTqx=w4WVN){LcyKpfzBM4DF(j`rMdzEy7r+f*%+gy_8&q-T3r zcB-cN#9{a0sb>!!Za0rzhZLDW>Zm}VOXfgD}x8;1MvoKA|GO7Gb;cQ#e#yEIpeCf!gcsZ*)qA70! zZ8TRv>)Q8Hr*aX{rc|3CRXb`_k>r6k`fgb7)i6W8kNGzurSH6v z}@(EdrBac6e`&C&XJR&)+_gs=@zky)0vW^E}^DJImbW#6NX+SSJ*A z7%%J8b4XW1f( z6&7jf{P+>ZuUP{2$P^rl=_$phBhyyyinV&Aa6n6%1d5ee;h_vadb8v4^|ND=bvyW4HXbQOUGhg;0V&t{r*$K{6@pX>NmE}FZ1Z0B(@fDp8<3-%i#2oJ-Q-`X zVSwAT7lMm$Urlm+#gc~o^jT$oRGv5)$u+~g$$1CVwU0RhbNP+^Ymvpwm*XF^w}CR_ zj+X=Kf}+806m;+)Dnm+Yo7MbY>=Z;0hb^beXg#}K;ruM2No6TG9~x4KH{+kk#)d*j zMdcgLzWJ$T@Vu15P1m|l>l$K^%*kY~#nge53cby;_ zjnV#?*KO+t##5Tt=LJu@+PPfLX0`+VyS0%y zcD%ZyZh%=Qx|Pfi*G=}8Y$U%0g@e=15CcOU9-Ak1qw!**8ZwWKzJ56O>=}u$LY%(B0aKef(6$I3}HZc8w-+l;xvls^qm3dZ5GGAfXJP+u-UZ?gysGIsi!eS|0Mnj z;Wom*p3~w{`DdkJ9I`^{qA2NYII#sDWhu;dvfQ-g$W85(;e0oB;hBXQ$P9%Uds9r^ z&OOL%dfjU7?rZYS_KY{_Jmom(t`A2G0)|*%@DCnQbYq-B$`g*xH*Vh$E=)E^kvBkf zw^FBG4CdzKZpJt~4!1Z3Z)pFsp~l5bOY zt_Au(H;o_Hndy&{x|5fI3&`9_toh`XEoj(hIY)~`^(bF4rf5+|lu5dYCa1*0aA@D< z=0nV;rW%q7j!ByMEYjSlDBi}3KO4i$O)%}$$%SHH_^OOa_{W7zw?MdOZhpS~uomi- zq=dFBvh`XofygGMe5#yDPX2DNp(MC-`HrIEa#)VPgXsEIhS|&#;lUPb+^ShNBj4lP zoDj5G!Xg`%rRz6e@XG3yupM3`o>fZ<@P(SX5&aY)aVO8XO8G>aV3rgkZ_5&otb8av zTtc)8`~97uAXv7HgGunDfysJ}?ycL~>V#hEJU3GdLS{Eg0!k0m5nxt`mzeoS?B)?} zh0cPl7e92Tdhwwv(*w;`U$8aPkpu}JiEerYwID_Lc#0O92ikr-xjpN>2eC5o5=#%( zb@X;!*plaXGfj7{bk){p6H3nL1qV?1ysUZ|(MEL)-TFT2w9TZUT3uNh&;N0y+-Fr+ zg3{5BN;VBvP$2U%c=CV0N-O0Ix!mPsLY&7*XR)0@v1gBad@R$|xH(a=6}S5Z+CPxW z*=8iC@8ZTo5us%AO670U{lBg~B{zjC+PA+gY&Sjyg9U|puDTSe zT#Iq`4i{B8x*7OUV!p7G$q1;>v%d5U9bt+h~ z(*`h1L@xR;m(@f+@pp3)kv=+Uoy>ZeOcV?7!=)93<32`Fh?YVrUIWv%k>GJ&?^~dc~ZP4+p)u!nD{e}GaaZt-9S z|IGXy-1%RqVD3R|e@goR{e%Ez{sH|=%Xo;gjR0(TEd7ZaO$ETI0FKle*t2-Rk#hbX zF_kjq5wO#u0hsApJm1{N|A98eO}z?ykaJQL*zR}$wz`Ty`uzm)#k5O{u{}EYvn%+`-9IPZS^}N1!QB2gWyfbZ`~^MxBgT3dttSxba1JE^tAs* zLk@r7%}b6C8~|#20L@xJ9t@k^K_I)r2Fkk#V^TF&v@X&?-=+l3MBLCa1|DyU` z#Q#Y3PX+!B%KO0TZ_mshtbS1?0j-_^$o_vpwdO>D;>s`oEq=G2BD;^OYj5}D(`rpRYICSrB2LyHOfE^=3O zH)e6{Q{<*dXzf43?fyCt|EDwqTsv#sw$Nh}NrR-!vPbOYUg4`ISN0+|;P-i!#L=2_ zKjZgFSet6NwnVS}#Hnk9rane=db41bmyhTEYghBH1Kls!U@k^>DVUqPKw z3qk)7iN8h<3V6BpX;n@ zo%xhbZ?0B*#8jz_z20A+(2q zs;}uLOnq@IC!vGj%9!4b>r8zTS%g1C`Zymc*%+HynDi{iQv2t(nrjYXul4kIB|)Zg zqU1(m(&#R=J}BzV@G<3wBKUXHD_B=Bz*~qn0l=E)U7LjpZz4R5G3#&cB=Z&zU$I+q z^F(uvcBY!SSZ!w2=eT?VA$fir1);B|wsOh68jDs&s9;^9J_1F--x;yQR?IN-PxW>Tq!%Ps!v;Mfvcg&OCnkY(O(J z0AHC{3dd?*JkzJZzD9AXg)@E0+Q!;eq58{OMXfZmHu64W%cD6u(7uSA0jz9POb;n; z2Z+MzFz^-xY*CW})35JiUVpDSHF=hfefzIxP@&bQTN;lsoJbAC{B4NoT7Jw1Q9jcW z)oTw8eZ;Km`h_w{uh!}0toz9a8>6H8s?W|qNtFB{H;I(YD?V*WAcg;`51i!T+_w3< zt(mpYI$5=*69wNSV55g5zkQ=$e%sxiWnZ9^kG--!S9NHDwDG!}*sFi1 zR9`Y}H*5*DM=8-R(5v~T4ep6Ynf9Sqe?%ZBIIle9J0}{L$Oh_0f_1zB?w95cXfBj*A@G4Sz z#C7OHy;ryZJ|YtZy^r3Kcx=*m5{ zU@T4cY%>0;Gm{DW!+66-p;G?)DN?!$5Oqa_ERC0TCjQ$AnWfI;=htKDI@WK;u*yZU zVx0s~jA@IkefN;*-S8{vV9fs#teAmab(H+>TB=$LHUzD++LS5*5yhzayf5tzKUcGM zZEWJIDquNSIqJt23to?K*!$jh7s3ZLDi?}~-+?ViGKbgyFy9Uae=;yv*2)aqfH2cI zgT7BORXB_-$u#d^WeY#^#yh#O4CM=!`#Sg2hYLq%rtRH;J2o(fe^0J-v(;CHEp|v< zCKT0}X0~S9^>IE+Fv>Ey)6Q_wwf{)?5>0FxZ{>URZ7RR+8#20L%@M?tiERus>7f+a|mjl@tdZ@S*iFKV&02aEPd*#eVTWX(qF{w0h40x_bV3fL(HrJw?zQ z=0p`&ml~PaLYam!k7x=6Y$TDMQ+o@_bV#G@NqW)2oGNHs6P$6LpT!S;^GZ=D-@k5D zAFUIb>er?Y&xIPfw$6L(!*5T-4=38tj^+l_bs)`{=c>JN=`Wa_{t2`BXfy-74TCJgV$ zq$l4Ub%@lpPCeqx(%V`c@Xt(Lc-l2O4Lclq!*FC!ly9W+O6QDe!+Mf;H)mx!LVJlE zJe$n3ixf`QOIiQ(_lKpdaYqAEISrL1rXE>el*d<-Cc#|BLA^Iw0eYVnsvk-IFry+I z#Dnq8bTv~txCaI9W{&P9$xE|!130)cIgGYPvt#UgtUd!e_IcEK-vxrlhRVBllDreCpMEs=tq z*46*M;lb90E#CzrO^HNw`C$`e6%FD|ydlb$U-H0sArIb|y)fF4a%P@=HA0OF9p!hx zHCYh|X8`LTtZXNFvq|ThJ&W_m?IYmtN-K!k$LEh3dm(|Ov{3> z(ti1oXq|c@PVgV%z7vsWWHwFMYH0Djjxz(>IY-j;HCfiapbJZklZ}&Nv=58=5YD@* zh$yiUSON7=iQPt0@EJb&4CR3qMNq}COC$=J>Y_in^dR3&VaWBFJAuCK=TN}3!1BnI zHz~6iT9;yD=4Q8&FI+I|Pr=;do%3zSpgE1p?ud=IwgWraJx{Fs^a@9c1T#7Rn2mzc z0B*oCCws+!MDg>9-1x54JQ}Ly4eGRW_5HcW8O^Fx|~SRQZ;D@(HdnN*}Zg z%!|cOJ-#U~I#g3wr;KxJDztoczUfhJRS{4al~K6sY|hNu_Ltk>_%pvEKgv|4bSO=72rph)p9WB`oRscY^G z7(>#20oK1wT%;lVb^2bQv0!-pI`ym}#bpL-n%n8vvuZ%_riuNuup*>bd(f`X)kZV( zt(>*QT4LbA^NQ+MsTa6;H|B6APT4u3=O_Ppb%7-OaJgcX*n#O#IZfhx>6?XCq zDjwQY_d?qxTP$rI-B}%TZIj36B4{5o%EQzZ*}a?5x!ByVhLA`Y&y}_+)zw4KGrHPs zZOxf&h%Wd{!o|N&8^K9m3M8Z3OK1<*OApHx&Hos*|YV5!go3PRM5KUt@P2zA<}hG5fLjO2{?u|QAD9Q{M9Nv6Spl-_tgQ1z20LB z)v#!GnD|7=MV={s7^Q7#W-I6^L%-NM!|1X!lSG+rRqSTMR$j(aXWtU_S0CyYknl%) zS%Py#Vq9HBqQn`zuj;c9m5CI%8bm?9TL`M36(($0I&SVT56Y{2ZI~&P94KeRS^BIU zT0jwE2p~hi#L-{$BxQbUeG6Fs>o%4|nTwYjxHb)x8e=Ld!aYQFA7Ik!P!`5 zmxjg;F@F}Kik+RsH&&M&D%FQ!uPRNAk;rG$>g}F15smez-;^n~5&vLz=9O0VhYA@~ z-nWb$2|LxiMlyrS4oX~KiYgOsZRLP2ygPx-DT;J88M{^@7+GFbu9)L=gz0NWb0!PDF#05U@_9}A3NQ%95@PH0=J89B^N^^{EE>sI{Cg0Y-^1_n0m%SW9ED;4PiJ>(Q^J6YSwrUO5og75e~MYj7GWP zO_M_pR$B4WS1!sj@WJ>>8O|!-6;%0y<%UY1oWY@Qacg8*rJSYzF67uV4bua}uL!SC zE>~S|xD4Y#jr)Vp8aZi(3dibpZ_I=y{Ln|vhFATyw>nZd!EOrqVfkd$Bv(KyV!*KS z&&;r4=y0R?am9HZpXrC6oyh%;k00MrjzHh{=DMo1sXJdXt?6vpOC}1wemsUgrZMxr ztU$JOiyZ5q;YV;7aYJX;(IaS!qW0KpdOu}skYXy` z7*)231Hw)uq@OJ22U1@99# zT3Y@DF88$^f=7B6a&7Ew_RBIOdNOmS1|WnF6_?@ok_rZb3|uR1S95cxA#zI)bV2_w z$rFVJlY2&&^UvV1N*Aq4rxSy$7Lp-Bv&^Y_9h9_AHDm#?^Uom0}BvxJwv4^OY!P$Nmp{Zy6THmiGNN z5=ih6+=EMi;BHCK4jvo=!J%=2OG5|{+yVqA!QI`0ySuy7xLe-Jp4l_mduGowAI^2o zbFSQ!EF%B#G>t7M9q$oPQqVf{u zuEya`$*-NwyA){Yt2`n81UIIAr4%!#108m@Y)cHa?+59>rH@^X$;qDEQIk|06XX+W z?@z2U8g=n!=_R~L(5SqvCOL@;wwj)*3|kc-mMS{fr>Yw*G)mN&7i>-sm4YuulX@AT z>kG2uT~d}v$fiwOb**%(WVn^wrCtETWq0{R#(1LX(dgE(An zvki5m%8M$+9g*3fcWZY!ZEvOPk6(PTFQcVu5^yryI!U+Eaf=vIPC4XSC>v< zwDc0l7vBj6Aht_KXfXxm_rL(6Rqm%601P1bto4<`y}<`pWq13oIYGqENtDVT{jhV1* zHz89r;T&AX5zT&uelkTv1?rk98)g|;xJ;1Q8(vtGBDf5@-Otb>lC4v@z%65uJG9ct z6YKDs*~DV~EB>@^q7t4)?L}RZg29iqc}LFxb-Ulz0Fq|rS{Ox>Uo4*ecAj%%s5BZ0 zHP&0lpRWu1{Y{G(zlYqogEjt3-1Yv0X#4;)wr6T(FH0~YNqnbT$)69Bgbav;cqcDd zx~{5NiY1RstEsxlvwP^Ppkogx>s1`zmcj^#idA$sM)34L}|4h_pBeQj$TtL(Q6|RxP1PM%@>?E6Rjs?Mw&()OX z4bs%wN(~s|YJ=)&*_W3+P$DR~`ZO?Ts}qBqL4X4{AdZygw4y_&Qd@%8jqbaq^fX$# zZSWb=b9qOgu3NB|7@^=3VQ+{-rfHS5P#t08ya#_revMJ&hQm=>~!;Rouaw zIQm|EP}Ih+8*`Ou-*jgdw4($s@G$}NQ}Gb@8l4ZhOK4ugs&pGxb`_R1to4etS=pCQ z&%T(9S{ek)#6(t<2cDFFdKDQ=!f%+lWIMJ}H;3|Eh#mpCHAany+uumD@odbC{+x210E>wjbo2i|=U4@+p z1f4i~3P{ZTA+49KvQ6q`5Tq0*)W+r3`j~YI{$na=@0_uJ0Ozus)025;Tdp8Ov9*et z5G#r(dnATDylrc5Guyish~f$Ov@44v=1gXIbH1*W6k9#*x-+UpcxT`4R@q ztt(0~56%s^5JqW_I)puu^n{kK6?X)9WPO{HCw3_vT!%5Om%T%daj_tigs&?|OiU5L*qK6o&hc06Z0O+y&*;%h=RyY7$4Sb0=oRzRy& zHx`3m<<&v*kn+V8J0Aj5mDwg^C-w7Au(UUjOuu;x2%!`L);B2IP1joJ)`8!TVsE`* zKw54lkd|w~)%Yhxi|5T)a>tEirTVz<-Ktg%-98**>6+UHg$U6|E|Fh+?4+wst5lB# zOGpbnx%(HxAmqc(DJ{RL`u|BCf4Z$+Sy`49QUR_E@vX0QNR+w@qK>8UUm}I_&u}Fm zr5|6$+<@u7G8ZuKBW%X73-(AZuVW5)ac=#hw*9^c!SI|TUh@ywJ}6y?!88?3pb2&R zIx~B+_G`?Ym@;}stMLLQXiaiBRKjkWN>D#;RcXi>xlR5NTdi3v4GIa?E7=chi(E~C z8F_ED%&vuCu&sGBYsAO_?)@Id$T_DaGJ5zWAfmWd+VH{)d_5cw(q!O}FoiQs?vfr zjM<#j4QtP$PV0#RyDGzP6D+I-#JAUE3TViS`RgiD@qm-0{+~GlmU4JliVxXc>4! z%=cSclWxRUjcSAxl$xeSN{vM%MiL3~65RAi@Sr)?@a<|#6fE`b9w3<$Sv;9-&jE9% z9=--!JhFe5o@Se95pDun{!Hc=xYz)=q`sf+EN_}DPXK@UzKC`akya=n@g_0&1Lmse z6RjO(@Ji4fTeM(;8x!Os1!;S_%h=}MR|K-T&|fMhsPL;s(WEPP!q3Uu+7m_?NEp9? z=Q4Vxo_10VSJepN(o(9K%$mIAuNBV8TF?-)qP7%EBmNd?C-XT_wDsc4?zpT5M99)g zO}(meR82AF@q_-nxtf4zof-DBhZly{?jec$odn$=X+cT*td|~^9wZz)+}{>WBGGII zOzcS{5ldco<)<5!1aFRvr(Fi3%TPCQ<2%|T&7GHUGF#b3gpY6^x*FM73V< z2lGtgkGw?sYR7!rM8!^xgv>79jiQSICc~!+#;6cV_oS*GON~{65QEj>m~j(}7^?N3 zqvDCrq*22N`8oyd;50{-kC1W<;~S#Pdf#z+I#i^G3xN3_f2NgPdiu^MBqVq>@eOw) zJERC(b2eX!GogWhVuQ)2H9soO5oyzx2@kFlO?1RJIO@|Ew^DPbHlX)#ebZ%M3LAj4iDO_miZ1agWl3zZO$%!pFfd9ovH0ws!Y8!&T=!a6-;Y4iE^|^l}oI_GS8dCKO%U#&Ti_LqtQiNfy z#!zM$!<{jL7L~##-ip^n;@%tlWKiZSvcJO(DX~QJ=m8fKsphW27r{X^r2x;-p^y5Q z2V<)Q0J6t5vONmHzG|AO*3g1=oY{x$Di(Q|l1`+Me6wpeN$Yde;tQwJUK5*j{W#-lGlkgWX&-vtjuDKFT`yC(i`s!Q$ns>O zhY!r}dS-+;+)s)|!#Grglft7F{sngoIXjtDbIzXi8N|a;h)%h>w9ci#utvIoIi8%= z;2R78O$DkB?Syw#H4g1%mwOBN!5;ja^<%ID<5KbddfW8k@`%DWR%j(`deN6Y8Z$BwxZrv7Di8RYa9(oIH=kNuGSI8P#A% zo7h=LB{>shIz;Yeyy$;v5`o}lwUjr`>(0tF66TG5W*&ZdMVKa-YAx;IsAzVrH1E<}5*sgx6vu#{{V zQM3=R1IdwOkCE%xP=vbj69oDNT8Lb#CeA##yZ5b&SSUH>^50E>{XfIi5k56kupPQS z`eHQ@wHjxsS2n@S%6Y@*eiJ=<(B!fKcay3~+Y`KR@c~28^~4KFc7<8Roe^MIzIGP8 z%ofYiHl}rsSXkk`*qbAMK&^)0BtbI%d5jCjsyVuMW|q%tSwTqlFr&QE%`s3VWUZA+ z>gIDU4;3O75{4az139v`mPhJVq)VP)Wvo0|ng^$EW>qpD@<8*HRftS-^-Q8e0l}U_ zzr4oi{+V<64U;9m1dt2QLgpBw8nW8UAxWTuN@WArO%)N0g;E)N&pcLO&AL~3s>{MO zn@w3B)1xp@JaFV?^u$J;PRE~c%M?hAOnJQc>OCX~m5FC0{|v)bn_Wo zid=Yv-A2Vvj!D0?9Q9Fo0hvw zOcH5|AUD(Ee5;$i^9*@7 zJ{d1fX44G6R?}wI;-hqz)wV#fGVwTds_M3)Mm!SMdBb)b0q_AqA6Ol#S;IV+ z0PQh0#NK{pHo0$BCBNq0uSMD1Yg+pX5jlTU45$rN?*acfAYJI+r4apn8{FV!@4cww z;yLap^t6&_5!ZW_^$Knl$i4>h0!OAG?h5d~?m-pv6X~eNVQF3|kcOy@;MKb4M2CC? zx`(gIjXs+%s2E5=2Nsy~e9&uV6Qw94y3el^uYlA;P&NNOPPvy)*FFdMuf1^;{AHyo zW*go}y^iG`(keCZqB2t_&pDA_V?4@d;;~qs?)yI`5rM6MDvr=vcID4Gc0PfS0!0(o2Nt_T&5US>8?tfbJ^RPPrQ_mfzE z(HfSWisJLV5epDuTA056Bk+uUv(^S2jByFhawkp`r`%laGBbY7LB+g zbTw{W%9Xrj(hMF+AB9jSgoXz+=+9xuN{*5h}O?wcb_*dwb*C#m0!09 zr}D&*SYt~e>4vn@1!}=K)WD{vrkq*TK{r-HVh68>b03CmRa?N%UeMFn24i77;>7`7 zzCZAHVs@lFJP&OdPS;4k?V|cB^W3Q8E1f@Qc4`$P zwMMxjNuYE~7;_p1_z9peIumXyH~AN_xD&f%bwBB}xz3*qj2K)m%bJaMfE!u|(>@nN zG%3lZ7>bdlQ)ga=z2srQepqxC6ThM&p^s7%(Pjk3(-xsagzbu=K`{NP@dwKsOAK(Yxx%hx6k*v%mI^K{ zo~<}+rxJQZg%J60I}p@Abjz^>gMb51okheymhlT3ci_!*trMf+Z)oQJqIRbkpPE3#Q7_I#DkY0XFHyZOc_l1OeT z0+hU{$u0h5CWLz|Vp(Ts`X%JW&@<@``e&BwwNT?IGbvzLe;OwEoNJqN0s-EOZxQ2? zqtz3?KDu1%A#*18QQNYdmL7{3^+^o%TGYVswhkF`#ygGQ5&(ROdo5YoRX#06Fb`9m zktbRI#$Cb_ZSIBLYLgoL{z!(0BjAe2b~ce6J41l-HHNOW6_?HI;N#syfN>Eeb}&$@ zbTvVf{e=0LmoMKpU0qL#9D4jrM$QI)a31gvP)Y&7DjZBs7ex90(^?U-nh6oTl?A$9UDVo@cbJDT=Yih5l%Pa2YvN(Q6NcQUbU ztxM461fVt1|C0*?@+ux30C^S8UeiXNqrFjKpJ(OC$qyOuDt4*Vo03PBhAfvEvCr>P zW2yKQtvM6j_Crh&)PaTY(58{3znsWCbXDQ~3t_t&Li<+}P|)OmtGMTCHe^(OP1DtQ zTR963a(Vj2@9!DWg5xvIN40{Da7Q?{X#$OLcDcFi>R-OVi4vzxPQ-*e{Fgof;eZWC z7m#}X#Ps5JYX(_HlOB#cOok0C4x)WPK+w*N14RVE$wBsYI3% z!u&K9<@pW+OOsRP!zpQN2zo2u)~gUk?@JfSlf1Jy>nuS}n#OU#?*=txRaK8d-*lXC z+aGL%^^|Y@B#q(F3BT5=5LReunce1~)t&pbyg2ak^tvXJleT)DMQ|(EzN6WHKU22z zVDKIu02teb?<&mhW{YkS0U|aa=R9IxzA|fWIcJnO=$=@45NNE|W4*b>SY zh<~GM{p(g(p8Wnibcwp@R+empbjVHJiPLnj!31idNxobQ1SHbX%lPHGw(tMntQuUTxm zl&FAh1KhwBbv59(JPg+C$Z0jRi0|*;i8}8tSPoRIyL_C^&}n7p>2{9;=lE-1{SWUE zxn63GMM(}hpesrB1(;aUv`X+7i$9axR_iyu43e`nXw}S&BMBm2(CD=)Y<&v;svWUN zn2L^e?K)c4uUy;oVGNU9tR@r})NP$g60ao?P{@8@F_d*^^{)C((mdJ7?JcJVLW6dpApy2=!{EG|WV$!SLGiXlB_=_O(mUkhc7h}fI67`6mL$F6SDj?F3G zPsAkeNiJ|7jKOkW#Y`BDJ|mKhK~?~55>S}Xk+>R{B!RhOHlE}euTFk7menN4$2;=b zW5LQM)N8L?C4bAm~XFH0}GY-^c~k#qN1Ew)RVIgJ7?8sk-X! zP7wJ(f!1uVb&uq~!D*Tqck5GACbNXrVv3q`s0r$Y zIN_10wka<-z)a)}N5L@OjneYoOTQ!&(`}p5PfFZK3!-ox{Hx>z5QYpU-LLhz^aK5; zEZphMQw8OND4XoTmIS-ad?H?1bGldWR0)#JNSzodNQLZdkXOvppCo{BN}MyXm;b3{V=E>L2ZA|1N zI`qt2&u&i##blj|xpLSzJ)_R%rLBwl{lTx*eUBl zxe|69slzd}SS>Uc%7^9MJ#@&mI0YQixL7Lq3RJlvgwwjFU53j69hm)-DOnBLAIxYz z3Py0ghI)5Vd%g;r$bQ?tp+56T>BTowbtJ?}gd#e@JNtgq>yxXA!;KB6sV#pV4$Cd& z>amQ#!BEnaS}gDYiFb9v>x=H?p6wuzVL;eT)mA?Grr+R(%p{rw2mv3e~ z>JPRl#f9c9IdWD#@`l?GF%oH?;iQ4Qaz*f2lp$0v~Y~!qs^H0&r(-7>vkl z^FzGtH<`3zUNR*$v2U&qAPGkgTZ5LWM0#?cSlup&k0d6z@62M&?L5}(N0YCv&kDvs zmXlu*y)`F1W1y<#9-5IA_|*3Ct0;&MA&1N_dtUvm?wqzvX(!HW!3?!eWqKwNCusJG zwo{6@%RWkGEZ^dsv?M;Jv#i>f42pU{6*X!j8wN>iRd%nX(bYIoEDxF7G92C8C)0p*;j?!?f0%w&b3#clr7#q&u z1aA_T1*--P_8*z4dorthoz|-R)u!V{Y?Y2Je%%Z{#%*6#*94Nj};xPOfnnra*IK^if8$#tV>+hni!^+ChCNZWN6 zuYG|^@5GaffZbV~oU!bg4OQ9@^GHYvcy1agCLWV>XGh@0uTPfn(~NZCF}NUzlYsN& zn{qRP+4d}rUJ{ojj&3`GJ1Oy7UrQB&{!bHD?hQ@WH-f^B!WXf%@~pzsCyZ?uY+9LD zhOcy0d2tddS1f59Wq(d0AZ@o=;>@kkQO+y*+lNQjLq=m8H{tD8m@edQn3oS%&$7=; zwsTS{!luWD3_3OY!yvnp!YL*}fF9%OG)4FM2Pl29mtwyp#OH)0Y#_C?B6RX?jd}<2 z^a^#PvJQI@H-LOh`hf2rsx~1$(u2r5FbSacf&2 zf8oUU?ryT=GweM2hWy}7RdY8D;*~e1_3ey3Y81gL#Flc9jKEi;#>Yl*F)xN!k((9< zx8+L$#Y@7uCBGc==MX#vV&vvf1Sna9fl9loz-)ZyUNWRPVxi}s5za3qf*xs5y<&#k@d7i^3%LGKvvi-P`+;*us zMuJ|FI0vz_$N9Z^426Zg6zV9ai5@2~z|^SgJiG9{vaQSJO4pK49J5o?-C4D2;z;AC z;Q`GV+B)1<#`-w)-E^th%q)?|crni%{SB{T6LTo;zhyn-wxFUS*ly0hK>1TFo9q-3jHax%7Kd;mmNUr8XFe$weu8b(ojS!O&))JnYqp7m(o3LUnRE z+r-0HkC&bBKw1|O{bRX+|a*WnS+hBx) z$=O0HxofFS2h!7sV$h)2m2zcKY9{OA_Dp)APrd;oY|U2tE-60=7Tbs;MUO!wT%ngw86))cj^1s!C(?z39_&+(5zL4t2HH0SPgTCd7n&eUodiBQ&(5 zDb87uQ~kUAtb+bh2~6C;KEGVC1Uf*FqUri@#D+!>%MW$&ZfrUeLT@`Ek}if zQtQnh)Qg2q=tX=%rUm@}DRe=!N(uRUME)-+`JMrKE|} zxXw|H*V^htu^*|}c2(boAK}YoSJ%?8DOTtfD-gDLt^$Dy{mp}ey9fJC2cH1(IdC|m zKq&q`f$LoH5dxwSFPUdrEOl6 z@$BI@o#F!#MI+U}eCf!yFyp4o)@jMX17qvo4h~Q%emgh@q$Edv^GT75eb#%*@~yP# zqU{nl`m4LWzWafCfK0C#yt@he0s55g!44Y^-?>nyLViRb@Ye&;ZNJN- z*ISS}ct|qZaj-yN@a3p7kS!NXYE-jR?lY}-0uo0fbU?BIBDX^SR^lcbl{~f3mAa`a zf@QrjK=O-W^vCqdj#Yx$sRswQTp>~&7{hmRE-g6m3i7&2dodT!AF$?Y)0?1RbPY&T zz+DJQW!(jC9o-e!Cs$7c^4en!p10D~pL!G)h}$VJ8_N0#ZrQ@jqo2OZnwLfKO)5-R z4bQQlOSC@-He88JE}((NrIcU9gXLAtP??Hr?k8)`ZX%#ZIKxIxZ|9yTpDy!aXAK>g_`Q;IW$Q=h-AJ z#l?_ItgAUP{ypC9T{ULdJ_{8#ZJr~}xwE4DngUS{RL~Yu>JlF|RR#~W-?&P-`F@(! zN!qZGVHzpJs?U8KL8a$^HJXip`~y^=h=e_JQAraw9!!hl7{%i3yzrmQP-}rJhh{1Ky|fVcsXM(?7Pw3Jd9C31-3(0IwRKzIzJpDTSl=0rAi-=ygoEzK5T2>^o#r%)) z3?so&0;9m*d$#xIuvNfMe{Or9fN4Z7(h%1)ec^MjeC|t7X#XD`6X?GCB5SO`S^e$yil!m!hsyewhNUbF7|%*oL-EY9=elhU z8$xmej-T{B-J}uL_Lv6-+F3dK4({cVy{|UA@K-)*Reg(b8>v-en)2AXW}ZqPE6b{? zG5DjX`l@dQzg|rwamg`h!Dk>I=%FB+KW8w_<0NVg><>0+;}JQ7;opBeOTS}c*Al24 zBifnS;JxU`ZjlOlPYqDJ<4NFcqp_Y`M_HyFvn9m}`$Scz=`-aYAlCE6OElbkOp7Y_{Wc@D|D}boOM7A1E%3CTN}_Gl7lPV zB~z~lEDwzD5>xg5dh=Z=>Yy|*YY|$ zI}#GKy~vexZmD(;g*6=#HvP-#aoj7MhXMOFLqp;C?~cHXgseP4O^8Y04+rS+>#2sC zLFwJ3p-i_3nh1Nv(8)fLYc_}|Mw4bwe8;^tgGs&js)k~h`a=;Wq}}Rk)oek7na@w^ z9E+9fqAa!EwH5$wvjwvM2$@P8dUFcStkK(XGN@|C-ZFfK65YitA3~R8vJMM!Gd#}8 z%eR3LXnNBl^)AXum#5c#b+PwEL=#lWzmX)xKQaXOCyR>T|Ar^(uNqAj!Co{^)?=HS zo}K;J$!Oq`z;|&XxvnXhp+ECC(+#v>%azgmb*Yo@CXs7w*Wp1|D4^M21iF7QsQC4> zd|d)fS?E%M>&OfTP206Ynxc)Df*K^CGP{YeYZVPl3o8l61gXMD_#p{8bw+ zdg5lL>&;4$CE)O_ic?nYr#N*IY@rOMx%9GWBOz%cK;p4g^VQ9my;dhz zeR#D1sZ6qmxw(w$i&BD!Wfk=p3In>LiKG$_2Dg#X;yt!ibV3EGLED)GYj~};2npdg z3TeqL8EH6L+4)5_z~v(N{j~o0`cui@&LOLF$_;oFxiN$4_}T{1k_q8V*zDFUIqJKYAbA0a6 zw0Gn(wY$C_)qBgap)xvBVrgk2Pi!7*NsQ|9ewR1m22Yv=jQO2EW;-xST^kpvVuq|a*FRWcpmdbRe_cc0VTBV=QfQ z!p+XkwL4gnwsA;O1G|kNz%`gPH3HEr{>4vS!ciNj+HCAk#FRU9*PBDKj_l)=f0|!kuv195o0dr(FVCH z=u4lbMj{DJChZIZmEj8KJM(sIq>&ol8Ns*Pt?;f!TjIT@bxaIUKgPhMLQFh;i+{qr z&$au+-a(Mt^;6&?jH7-acj8b=;)3SWJe2|Up(sog@4#Jaxu1Ifsef6`LXt?8yADpM$Gjq+_{#U?P_H*N$rQWbj~B z8nsNl9|>lkn-biUpMurQl~EuNtdfRt!Rtb5Jxf-m-_KL_Tt65yU@>ZNUPIoCnQnO| zUk&FoNf(Y}8;P*fApZEv$sXN4ViCI0ZPFlm_N*!wdVPME~zK;(3mzeN?^h^1)h zQ;;>BoGYumY#5e!j`(sHzH(i8P2w(*EvBXU5WQ}tn0H0Gr+u>hob7@acljcg>2mH>ImMO2udsTnEVxqT>uJo2fEI zS%a@rG(pohuU{-P&%Alk6}oz7|fgQSE_EEND#c^YG4w^f-n- zY(_LBK{L9vV}QLMgg2K|87pMr;*{F&Z(oa~&b3&N-N$}|byP%Q;uC3S2e)NECvIs; z({@6w(B``q-G!2iBu#w^Lh)P;^^9wG!ARq-vt4rQm$)imZYqE8R#hX-6_Dv7Kb=m4 zJ)ic7m}&JXW)H6S{6wXoJbI_U!B}MPo3W|>lfwNEYeG5gS!=GyJyS zQ!ypc+i6!^_3KAi_Zpl$^zOlf>S z&S3Z%HFU3c`>CIF(mqdDu&*>ZeWyNKxDDHo^NVATm(4Sz>vMiuai_a3M&YY0FrrB3 zGwLCv`9Bw{d%6vlGKEi6iz&*Vn+9T{j89xx z=VC29t@DfcJf%bYQ9=0Xc{d*BGJ}XOk#W(xd@YYO`TD?}XG`U>Nr0f0n_|$Ff9EMF zYtqtF*i)3tUySTWZcxK3JdJRS16TjE%3G7~Ut3c>9pEjrJJ6T_Vrc4`k<$k5mTii% z59)Plg!jk(9wHJkv*)KEGU11Bk)CM&D<#>BZUcWnjq@w+2%bvf%cmL7V z=l?eO_m))u?z&{!jNBb#~ccdhQVC4=ySog=Wm^nYJ0l=vev>Ioy&S? zALdUys;%iZ2>eF_FRhiBpNQxG{hj{o3-<4Rgg?1b0Zn-61zCaOAA{D17tOY^Pmral zY8iXJuVIO2iXp0g(<5^K_9CHnVw$A4B{EIeVt@Lwd+9;OKO8X)h`nchS?E z*MnLKzm`&ZY?I5e1%l}?3I8S3t&fNi)|BR%rKF3VWm@`N#lU-gAKJ zncb{d`6^vhXnD!j%x6vQ8SS?Z4X2Wu_SHs$DB_Sl9 z_=hW!W?^NyJEd?KIH^;@y~nrdMWg|wOgX?!aIn{}J5ZN!k2Q#LRrSfB1`0!-=TFWB zsP^Z=e)-yxD+2wC=7&xGbn{PI+~-v#`m95?`-|o+^CE_pOfnpRvTDri&Y`O?GAG|# zz;a9s_K(UK<+!MD(yVM&nw|SW>vw})o#9r8(y^U-?$(Zv23VN|2&UyRBmL;&WRuwL1i;*(uOAg_YdC%z)O<2*5_uY z0=5T*AOtTaAg=pgJq7@dcTM+Rt^^nNQveeckq4Akf$Nyv6@DJoRy9FBHN${4J=;fh zKNkLA;RJ2}Mp(|h@e9H1*qV3N9|t>4h3T2hGJDsoJ9dckx6f8vpGI(3t5|L?ZW+&h z`m6p&|30<9d9eQ9Hh2T^OIu{)5q zx(VjkA9n3_0nX9)^fyN7!#ntzj$s))k?zHF>buIQai8w7K8#&8?MJ`c;~xhg3rHg~ zbT7MJEzRt(V!pT4nthKSg4IGk@;2_g@aJK|aeNtak z@0tC8kRND|!68H#(hn9(rpS0!G~-eV{rGp3(~C>3&}{5K^J#yPT~aVQlGE;De%;?6 z$$G8LeFT0wdy6rGxVcL_^kC*+CZvC_Wb^0k|FN=-nPs-=_Kz1jCcp_bD^(xZVq?@Eei8zcJpieH zD@&a??QP(fm6%m3i|L>-j@)1v{wA8n9D|I25Vfti4Mf~r0h-LL8ly!S;&a`W4kW?I zIVf`U2&#eo9!}seWg?6CjL5~R`Erh|_&Jl01FjzCm((fdAP-zbCxu?l;!aM>XVi}r z)$v|Ph*DJ{lDkS3E+_U-#`7HO8YZZd27`Eo{Sisr0zoC>##6g9ayf$GX4eHFbHkVm zGz~3M-DfCrB1Bc_eQJ0|gNQlL*t4D2B+v@8!o^4>1g;ejPgQa5IS$*)8+AGZIGuIP zi=|n=sWN_NPkb`;;o%t~(PULk;Qow2kV~XGjp$J?F_M}R`$MV^4>u{jXup-6k($Vk z;Bk*tFoC(kVK433JF9O@NN(P2yI504bW}YrkCHG7P-$lIvC@#V;bEl;`{FwEAfB;d ze!U?iKbFV7-5Sw=^;zL#EY}!8lmhF5?O50M@gbENMqI%%{WN{{X|KE`w4PxgAuG># zahm39vEn(qDbD7lyTENTUaLa>ICh}hvZmSUm$G_(<_#8W&k~~eP zOnIlqmx|8FSTPT)OfjJuhmCPp9tGErR=?7)x!Rs1DxoBj7FaYkw4Y@_#jJ>O3$LQ}8DbwspAxvY6^c$CT-j-{|Yk{zPn32~Gs zz8CVKM|cq!XtrAAC!G~d>Bm+xKQOMqA1N=B11T_ztz`9p=GkBnE56`jULo)2*E#@G1o+|r+M*qu^fBNgpqk8 zD$HZJ05Z-rE1;E-BnX3_KobbIPo~NQ36rE-%0eI^l1jt{-NWW6c ze7dmq>(FoCJ(Ar})v-1shr4b1J4eI|3^cf_PNY}nU&`q>zQV&ROGQXJmbNMQSvu8= zYwO=wFZ@~4`}sE$a>v&3C32f$NAUi&QBQ7mx4ym};GBYPtt3kR! zXIM2)^L-)k@qm^o;-0%DiBq01K6sJljFenzh}AfDJ^otO(JWJ+KTkk&&ETdUZi^ma z2m!BO4}wa5OQT6xe|+D8z0|o85msR=!bEt_oa`w=WK(wp{ilg=1@7>X&{=uRq$kng zS$n+?CQxrEIA7=?cQq$m&}!dZitY{fNYi16u17Je!jv-7fxFA)EyR+Us{#CGbiV=& zMy1cEarvyNQx9V>T@cE8FYVhJbI?tdNlV1vsm8F{zQX# zm<=Qnf^Jm7mQ&?(%i;if&hi6PuG_yIY<)w!pL`}`e3?Iq%~kJ-CZ*9GLhY7iqgQybU-9??p4I$5@|V}fg~}5Pj`nORq@6Hbej6$2;{#PFI95<;CoZ$4Q-#t zAls`t+u80D4wyzP4UD?>@biN-$aa-x?V&+Mls(vI>MJ(f-Taa3*aSCGV}fAWl=I7$ z%29Azn00o&#oS3GvxLi_X06E)SSE_wJ2g&4hUssHSrp`@YY4uBLv9L4#?dDEAx>@G zX^Y!2juAVLQv+9;HzGP-7yrjPie@rQI zT{&Na{1#&LCx@u$4EmYuns!QOibG#Y0hDsB7$r zvJnX1D28Hy6urIsL8dzjZ^LkO#KQ65$2$YX;~p=ZJ) z8qaY1GPN7`n@?z=p;E9b!@i<6_vn>YR`B%SAWbs}ZyH>PjDR&}mfo$_+53ZKPV zXY5qQzn^ia@)2af{n%DsIlO~WQnO_ASyL~{i{CL1?>Xe!sA{_W0M*%Q-~r#`*&RDd zpE;P80zLese+O3)?rGveCiKT#^og03=Y1oAqQg@;?KDBVpL@= z!Syq(4bO!Lq^@>Qs&WdnN>+p1-lr4wEGuV4mW$xpa2=Ux4w-(do>ieo z$_xm_T_h+usaO7*BWQK9jSf+dSFJp!l2sRPOzH^kNydBY(Dl!UH0FVu`U20p?*m~4 zz9E_&*pfTlg!<&*K-$3|e{ovUz-5^nbxyO>hqQhss+5-hooo&Q!e|CawBODX|I&XC zU=ss(nvAD|v5XRWW?>=Kw~QWoK=-!LB(RoEiZrc~n^fQyOfA*=l0cOW5=MT(&exrT zjfqV&U(xoKbO>u!^!$j?{P=?NttmAgBSsk2hK|Kv_>wfq+;O$ z3|(}1iQz7UK$#OKXpXb~{(%Y-)8_cIZ*`?C?se+EZF~wCyrxq%LKiRk}QZM)ZI_R2Hf;3sCBXXH?JBA4tMXq3f5Gamy)x&Txs3mM|3Y;$A6e; z)hsEFY#D97$FC}j6*j8pk4m?W@QKE&=EH%@(ATfylf&27AE>B`TtVAF z%}n!6&c7{R{=4V&%Qwq^U2U{_UWDi`rq`mxWB=vT88=~tnd>YC-Mm)Y?%~4ufR=+J zA&L&lTIglJnJQ~AOX0J6+`@UyuHm`ntU2i?MJl$$Sdxw6Ad5iF9!uQ;d$J_VnK=@C z)i&@Mv`FvKd7i4`0?TGywY0{OZ>Ugqik!4az|ZoXe-`$C|NH5dnHi@1eFf-Eac$(z z{F)6;{zzx%>u15K_o6B;6$}RBc(~#>jM1SQ06S1AccHBR`W;$`!JgZJBzu5S)@y(>LR_7V&yIKR$DNfq%0KRllIV^q zX)|rQ#*Wx$016FoCZGy1&F-ofQdWuUojjQL4qiI>AeM?MZ%?^Xtm#!p?I(@l`XS%v z_$mb7i9LTO3P@pgfS_DfBcEt>opnN>knS z*#DvJt)tp%v~};`uEpIQio3Qr#ob*31b2rPcPLPt7I$|jP~6>udvPrez3D!8pY!f> zzIWd{?ik-+39!ftjAYKNIiKhEjN?8R2^B?wnM<0#A7D#{LLuF?(CiQzy&S43s&Kos>31ke|5U-8{j`lDG>zPq8rN7bE!10oE#sHfH)2P{} zYqjfkjp00{wzM(oaZaN5J2LJoXPN4p9z?sy1V}o2=tLGC z;QAnSBT(#%nIr3G0dhvmA%w%k+?jF-jAh!c9BT=ZdL#+@P-t!=e*tyPg9VnN(EOS? zw+FV|y-2++C*ztO;RA3Girg=RIWk7;##F?#yK2&Q`Z4EF*mjTI7nx2b!;QlJnpT~6 zs~pCRIOoxOtfLkmXAuCXiBciP;~yTIrJl=VOw*j|7ty8x<8!!xTn+ z6^r9Jg~DjHOQ7V@X7d)a*HcgkbS*08xxJ69BU-N_oQzN}1F zN9?Ex-B%1ENXW9U8vPMHrG`c$(-o|+s=Ha{Ko{2~j4aPzWoeIb*`>fmUaiOMXhqjI z?+KpXW!0lX^*}P7X_Ak4L2p)-?Svhfq}3RRcptt1B-qxtl0=|N>E^zV4KSt)KcKTt z1&$hj@E3aZKcdVBgV$wTO@Vf>ANTwuaX53G_^HL>-yhMm*4Wj|$f`PEMK(E4ro`pu zI?s~0E(E;g3?Joou;FMU*{C=bPPzC9r=RE5|> z^jOx>lY{G5cXE3NE256a8a!gihl_W{j^X1qa~FWldPlbRal!5Uw@y;5g$>6$Ahpwc zG3zwN`be6Su{wiPauo=zZuM9kjU>aJU_a^~IuQ=JV2Fl>Qbk67xABx&alXU-oBojp zUULl^@56#niIyhXJ{S_E5VM(hpSa$3G&=7mQhdyZcZY9wXx%I$ThP>zu@=&**2__s zge0~3sDgl10@eo-#T6DDmLvd&-M_9DR_I{$v!v~c&Xcf7+IYkX?a&;&*PbcJG@Ps2 zo2n3&g5N`W+QZjkp)y{}a}Lf5hZW3S_eXO}eZ`+)t;m^XHO%+@a#jGePLiWZAvGi{ zuwv=MF)FwK9QLz9oM1QO@`qK{aqcPI*aU2apX3G2#A9G$oUdU9aiD%w=vh^6)3he{ za(U$-agz#cwX}qRWu&ZIg>uI&h`*R*cMi@pHZnT6kwepdDst=S%s$;zumBc>2v}Hw zze2H?g^NJ_254~@`UzU5be^OotduET3_6Sz?2N{=O2Om}et8k`4;4896|{#OZo}KT zTSV451=nVwr$2~K8d$i|Q;?*E;w#KGyeRj&9-gx0S~IZgAK|?vJN6Wsy@QbQnZqR# ze*;+hRi+zOND+DjU#s(hcq+CD!(|nmJ+@K1v|}r8D4;d$#qs$c#7~$zc(wLl96P#h zQX+nkytzYy4G|<0Kc3BU7f=u)wnOm@0kbA{)O{Fj$?AxkILOtq;=kL0q)~Nk5ntTq z-lE*!>aQW?qXfjjF0u?l8BTl%z79e6x%?O+pl}@P9zf#N#Ls;yZ~}8on0>xxiE^;& zKqW>K6X(Qt9XvEix>o$@MxS`8YO}%VBFRL$C2>0_L4spoOpPlmD{;>w{Mr zyn2Uej?Qah@cL|^1iB|US`PHCcKSHhWK)TZ(wuDo%Pfzd6NQ|(QZU&`4({Vgp4924 z@)jwZS{5qdzJEn@BKq-a!GN?US-RJ%2AzZmBib?!@P0XMi~%=>MVfErGCLHK_S!ra zB(UaA+Ifdb;Ahr<8O0q`DS&FpI1?7j>jgRnIy!HGU_OK$zLO)%`61O}fGHW&OD0XQ z>9@S<V{*pZ6jMYt15UJ9g2hu4TrED~oSCTM;Q()Uk zFwV*KPHy81B^=Eifg-C@GIa{AlC#-;=T6ZC!Z#19GGsZeR)6l{-}Aet13H6I`HlCL!SSyC)Qq*CkIW4;lny1g&dYMn-T2*eovC#(Gv4R(wZja%zl$w6rGmJRF>6X3%5M>Fh zD_dNFuY!Q^^PZ)%ZP#tPV)?MmaAGf4qAA3p+cIexQS7XS!1PrXw+>LO0v~vb4$=RL zXOcg|D_`V4AwWdmd5ZC`F!c9Yp*T>vFCX(EDq*@oi0m}^nc=l(8p6kUV-69i4!`1l zl>%5pu(&@VAQ7Zmh{V+bl4>tj;}-Y`3qk*Hat4OlsEQLpu15vMUZCv*F9^kc#GjCo zzXtP)-J|Ai>EWor+x_(6WHc|-fg?!*%>sOGD&~|iMm=iSQY`X^ldQc#u)gn7NC~AS zR=r7_^?gEHA*^fGk036|>9E%`3Brn2_LXNxkl?Syf4zXLMXwjmJmL_Hw+J@F&YDHL%W5Fs2SK+LfNS!e%y zy4*mwMOgjS>U2|K;woz`I_c#&oCE}fyyuo;+eF)p*vgYY^EPzk25NE1dR^W;-j#iWB!TJFCM4cw@k(=IDk9G@o!| zoHH}yF@TqP!L6BQ_^L4ATI=L9IYQpB_7l(?Lbxr^oMI84<;~>w z-|JI<*zv|s#0=7`%oQQ_P-ia>IB_V(%gI$&@3-o9r&@A+YH`;xW<_ACKv3yT%n=C% zXyUbLT>fBbU?w!u(Xy9A{#KTg8KLIlJWCp@S3kqux?|23ZjF);vSg8mC6)f_VF^L#6oe`@a9teRW*=`@-i73F{Da%clXdrV+afg`lHzz(vN@3) z^jP=GS1|IyOdc<<9C@x-xZC|HV3ahWm9o^-giY{B2zMS533t?+=?sx`xH*u5qikV25OX8g zHQv_YC7ZXq z&i!g38y^zhvt*FvG&KVr&=bqK&ZT2f$l4`5(K z=d(d@Kcq|@Zj+#jQP0`Fq+!(oMD1h3Ci(N=e3da|P?I3Z#B~MaHk7PsFUG<*=W(Lp zGhd(R(vgQ88$<+I#AoB#c>KQYcu1&z9NI~o)JtMz+p=#&(S~{9#iPA`tz5!X39RGf zxPMYVgXl<&`A0#t#g8-#o3cMW33;!0le@u!k2iVn`arPnM9tbyAA66(wB6jw5OO_u3Zfemad`@x{fUA54} z=-pC&u(D$I<-)g)rmR@$dDiS%mC5szG+T#Ql{46b*w#(52EciZ4Iua>-MnRZ501AC z{j6nxYc{t~8!y8;z3T}>@rgcr*L#3_Ro`Q>y_sNbaD80gPB*Tmd7A~Wt~K6!hV@!M z>me<+Rx;i=fEL-5Aags};GgdU8qD6`AzaJ4oC%`9%P@8M(;7UNh0p27uVy_?S47WN z%{@s2ksCpUKd;A~-`FfLTzsDqod~Ch3E}?@puzg^#M7f(^OB+b_B7DuNqP?~^N+_{ zj7xEtJy>uoR8PU`#}Ye5I|-E00~r6M)yVv{$5lddOvV1%=T!ft$1%T)0!;o(pTi0K z*A_PgiB*DRV*RDhk^iN|H8A9%{s#Qz*%D`n00Xlb;EleFuyi|1JBLI) z{Z+g$_KH2Qg!z%3Z5`{MeGWJ-@1Oge>_7XQNBPET2=6DnkWTSW9@?2tjB4_4 zz(O8^sw}z>$&`}N6!f$rO_T~m`fvoHS0~IWka4U-qQ>X~Cm50VA%}ffJ7aWx6`q1A zp{B|}x+z#22MEE;#F%ANC=2W~vMGuGx`iC2I7}LtLfqO9IftqFu|l#q`nQBPIW{5? zjCfHhb@f#tAtb^YGB3gn-o}=0+%h1s)^rNIK;LgZ`nUAOCc#%y#<~9kei6|}i?wj> z6mnrUUTE%!mu*ese2YF~5GJOE6-cQsUBi+ohRG8=AXaxG`y0^p2QB&6J=njyucaJi zPe1QRU2(Y3O&r}$xEb*#NH^b-ytLBxZLvf(zX64aP)R`cxj_XQ1e2Fn zA_BC@gY70|{H{hQJpM6&_iT{=W?VGkfJ6l2(!o94iSxwp1pBN4WcAJN~g(Khf zzV^AS>1(Niohwma)O6l8n;h)tcnasZ7iE#pQ}8*{nrCiL%;UMX4I%#N%liYw4n8{~ zf*2!ZO@%Z*%k}Qc^$#40^iF5SFh4!akAIaD`H!yYcO=2VS*LO|7vV{(-fwx|2H(!==dPhBWHkcS4*>YfG%~Y(@Z>1}| zCXfy;)B+)qHNn#G92(R)XY1Pp4!a@BB2oGMgdf<|mU^s?U`P&{m23&ld5ELE&O!a{ z;+ulv8sTpIJs9nPom%5Q_dGNMR1Iys)J5lrGthQ6)GD3^D%7u@vRG$tS63F^Sk!m$ zDAc2bezj0F0Mh{i*W4fF2FGuHP-#SxNw}G0%ZM?=49P!j!c5KtakJj6pva-7E@(}) z5-Uhymr~CL&s1z`DV~+HU>zyrr)q)w9n5G*u>B^!Z&2JE0h@dhGcL_umuJpgb62}_ z1vYP9wjOUz#fkX~x+@|q=i^FQ8`88asbXn`KstD+2Ieo;0SHF$N+3oY(mDGKFZxr$JX>V>53UV!H z&)77i;~77EnGO>07KGI3?B4*SRLHtewC&&((J}CT9H4heyL+q0B~p)*0o-hqgWerH z_>kxbxR5_zn?N9};$vGyO$$j`VAR%xq-b3Tp$wbO!JblwH6G9w_$=TVr2-_6yrF3Ws z)PbfXv78WTn^%0VHv9H1+1bKzzn=XJgIva>WNTlZ+bY>wm^l9`fPYXJ8E|wnRNOTC zEyTCipIi66(+JLYq=6IX7F1~894D^e`0bP~?+UPx-BTw!65O01XgFlYdu6Z2WJo?n zRD)MZV{^MUJl5?u0KEr3y~sRZnufl}5_9!Vqi3|Z;kBxk}GguPzAGD2_L#~K>{T%bBs!;3X&1~dM7Wz5%n%Hs7 zVF>yK{48I>2bZ5g+gyCg_lXYy(qgBdMO0IY%QZh2i{u;&T36HL^G#zWJVQ7b?41ye z!Wzsj<8rIkbSHiDys8!bd3R3PqhpE8_fw-}BVNE=0NFL?3631#WAMrx4(t}HeH%Tb&By}Ny*2=9|RHp;QSw^`d9eQTV~em0ef zmbN`6IYkUf@EkUVQOB>FDkwI$Wwz6UxyHBnN0A_k3?biaWXl*?jFCPm+sp{zAUQyg za{{93<@>#%3%*#0nRZ)w@ekAxg-A3gV*9V+(MKf*ddKzyzSN0{MD=i3D zdZuM3!H! zOE53;_rP3U-=8_Tj5?CVcy}cp4@i$jszYk?~R~8yW z`etM$#^dzFg+WN0ne{y8>#TKf2_NlVqGvP;s^(gLh(!)GT?e7|68{Fw9XJ_w`wHB4 z!{#6@u)3oVub_amM3kQdH-E6DZho+c4DuRw&Ppf-3hX5;I5e_UVnqLPb@fZOG5tQ2 zXejI)+f+M#O+jhQvP;^18Dmxr!5vHFqnSU+fqv~}_1t>Gyzl5O0gdLa?xxUQt{gb( zO?I_UpI2LdR@^S3Y+t!;mvvJ}Bpm=4e`#zrO#zTraPsG&c`TmGM7`v)r8MNV z62xkyPn_PC+;6jC*F+R;*yF-;Y0aXFm@0yNA*@zjPY87-crYrw>z6IK3pH@%h<+s4 z*jYX)k`i0lcvJ4_Omk)Lk)=?(nmU994@lxf+z~+HE%&TEd?fVr^%b#Ju~e>?ot9^n znk&gAJ)O z`WZG{nI}rybaj?-ghVxU7OgKp@1!_|^|AHdM4BY-3l5aStVTwEqao3BK}%cMvz|`n zSS2$6wDq|i5|^biBuBIRoG(DtAdEAci@|BIrs&DScUSW;`~AQqO|4}35g_`df^;1_ zXH8vm#@*1&i8pIQ=VB9q7?o8z6 z^Aj=`e%~A+2yX#HKxwWb2MB@MP&Y{Ea6j#LIo>YE<=9uo;vLqLp7`i`{jnX<8DY&J z#vJVmHTl{~$Iq~MAk>iOA<_dhnYXqJ-52^`3WJP};0KkYBnLReN!AtY|8$p;`cYWi zzODTlrTw@%P8Hr=GO*#B0rO4!RZd&Ke2l+U6q35n%As6@ zIQWQ}GZiMAh4G_lF!pfqu0?T|H9ofDhiN)=m~%t@gt(u%-CsZd{TBHDZ~rK((ZtH1 zgvn}RP~jK`>S?V{s=8`?sEe*p!93!m->=5NvK9N~%c*?{`2^Sbt4%Gp4*SI+-+YN=ZyHQsPXW9;k zC}>}Z=pD%;31@DVe@T6+2+=Ur+&L&eL(bA^l0y6`s~M{Hh`;2tp&X&brpgV4Ak$%U zy07Y!+ki(5xqYBs#)0fK%gKIrLna4_YJH8q#ROpTg9?lT8@{TYZo_D_P+DWIZ%J;P z>SEc)kJmmLmAI!(3i#9~VHYD|&EQ$e-=vLVY70=9 zhdFR;RO7;Ww8iiao1;jOwgDpf>3#A}@ChdPC;TsL&A$T4Z;=0t!yzB-ko%)htY^*V ztSYy#5F_JmPti}SpmMr3f_b<~yptsCXpncM{chnj z?pA6-HXthvqb#iq?u>%ez@-I!03~EvjlM&iR&3IHWeP6poVm$#kD-e-WvQ2|@b8&okSxl1X1# z&A8oHX^z=PL)V>wiNjW2W-uIXhFNaHb?^qIXRUz{lE{yec6>mSM{=Bu!wpm^X-9OK zfgv`p9I9&YDvmY%Z@_!f7h5EInuN-!tJl>S`4(Z&>waK+{31f7)l0??-OBBzDYxbf z&Gal;+;`p%WxbT>-i{J8)%rF~Y~iPRZ0W=YXM;p7gLB`WZu8JgydTxevz~Y}_wfbs zvTwzNhOXu5PM?}E(i}M2<63Xak&1s}6Qqg=_GB2YAS`RsJFZWXm|VC*{MbLMT)?v* z(ks^$QIr&Xzxjphq z{kKWkFgGiW^neIePZmrAu^XXCy9#_ZZX&SIrrBe9B117kTg3^KOmT-0mHXEL-2YP< z{+C4)z()1o_JB{98vk-U&j;g z`JozLVt=0}g@)Rw<*lZWZRsc;m2K%1@txTb$BD+DfPOlJ!ap=>8Au!>WF!PYkdQ{m z+lKHjKEObrE&su*{__J9)jv7{I>>zC4@=?;*=G|7kOQ8Pog)Tvixm7H-^DR8|HrXD zs!XUi}TOY#0cDI5Ufzrs%b z-TgA6^@0rEk0nP*(v}L$KsG`IEyTiz7p4~oJz3G;x>v6%jUPbDhtP;jV0p9Z`TxRW}#$`j5oK?CL zXNF?HPDZ!vVjM8_QDH-~w+>UvP=*_9-c&`~+~nInA_ERWY_Z}g^j3+Txo0@SG}I|P zSqiWvx?y*nTw|;%fMEZnS?bucDwbXBv9a1ZS*1gQnEG<-kEe?n%iXUXD!39uBvbI} zeYcNAIWuF|(8*HY#W{6OogvAs)Eeh=!@(W^JM^n z%m4{O!X8pIHi($kj4f``)5Z!LR`!fYI?O|{PL7I~vjAK4Zf{(_rAEgjxRPr1_UhrQ z?l7lcp_0ySa+rwglvWVH?bWRT>K)i_xk`7hk@te>6!8S5-g$CF7KZHkpowYhhgOJG zL~(jU=sIV6?SPDddQo%OK3_g$i~&gk2HDM%K-EcpD&EXlR{FksA{h&3Lrib^!B^69 z3kFg+UfKLq-Z)8ZX#z{r1evcm0Bh=fauvIr#%aZ-H1kBRaa7rQeFc}Z`0iBzYcn+h zY1`$hoy@mGXW1l~qUHRrs}(g2O#Tvs@Ku{C@PfmhK<^TqSqC<3U|(W~BY~Q5gOMjY zb&5!vW+f+B!HyysbWOOfjWPtcR13K4aU7@y!Iv8VQ}N@-jz-o!VQheATKqS|I8bW$ zt5Rj))m}T+9|hP0Kj_3YYGY!~EME`LHLV&tyL^ki!1E3ZLN4udZPJCKZ$hN?oefZL zE2Hg%?D(JC^}X^w9N5d^SpQ_QSAo~SgKS5V#@LElb*ZlkuRYLOhShjO&meQ^U<~=h z{B$1T(Ub_;SP;bU-D;SRN!%%-WW?b#S{13wmvVI zbazltmGrnzLL=UUab6#pb2#d17*0x!q9DG}bV5-{hgY7z%V8 z%dv6i`x4-@OmFjEt;^vKqISEja$;Op62C{wE;5?|4-;vsV^^3Y^|75NMhptyRkC2n zvx_kS`tTNs6(gGhSq!7&8}QXyuKiZch3d27zTB0voYF_D`!>gH@0u<;iE4?SiLI0S zl3wcF6HY)%8ssnTwe+}c;(dqTY)4D!K#!0;Ikmd4ItOVsU2*03#5=ScDq+_%IY#cF zhJL9vPA*13sHQKHLC8tZgv?75b>(Y@sA0)&pk$dFkg}&f1}~H;cb{*rQ~T2{8=K%%46FlpXP;DSrRUkSZ` zOO^UhfydtoK_KV|ITnYTQP0>f8>^Y_6fZw0lMHh0C1rNBkGV8v$zGpiT6CeKQ3hHp zsnh<*S?;wTWGp=)9F_vo_9}9X&oMFYR}IIJ>b-IgSUcP;mP1>9_Kjw9 zeH`K0>FK=TDh2w=ZJ2<-gtx%{=fhWu+3)k9{6MQrh4g|Pfhr64q~!v$^D8(iiO%#e zUBR98AVFeaVJcXFE;uhSfvax}DP|{y1{;ZNkSt}=E`Xw?adBtHbk1#!BWKMj&R?3E zY888|5EDT;-6O>NXD>{pZXou3pcG26tr5*^en)exnyR}uiA!<=NezvQ1VXV-)ae;d z1m3ai>(IhYdBm+Z{+nRDJ*(033dfeLQ;G{-RCBr@+PVdILY_`8<&NesYFA57;dbHx zJw{V0ONy5TT?Lbvt4>6o?{?8m7iYEKlnWFKC5l!v73_vALhRC-W&5sWm?|vI15oQ06ffegs zyG#;j#DJ$b=MYj^(g3Y0-w&4_#ok-dnXRXr(dti<>?{3^P20|dpK2zQVDmjNH0(_@ zz`rWHVsE&K;A_np<8~~PSH|iXq}7t?w8c2$-iiMLdu`5V=AtXSjX80*DTrk;{dm{3 z;tf<0>=Peg$J2E^!w2jHAus5KNAVErkH2G8kZfv-Iy=LO@UbSkqy!S0quy*Et4EW-n`n|Oy?CGSOa&(+} zu#1`vx-JBx7$L~c))CJ}&#lXH-W|f7dcpm$aAoxEvsvEGKE+Og3`_`y51`uJx7yI_ z+p)szTkaJdP(|e#iovq*$tm?%rEqFirFxR#V(crox{a>Gn&j4&AM<|RGqs&79z zoDaP&wx~7p6{|wjoj|I-av~XI>Cwif67l{zBnt!p2>>mYT(xV?P5)DR<=6Ssf+Vn? z^f>m2=&}7Ol9pN=z7xL*mqr8eB-Xl};Ai~BM~zg-2fZfu=GooYy)mp20ug@j-Jg=|g#(zn!QUydJRG$Ne^$7OZGV z*RRm|ZrkQLgtrYY@ylBRYJf`=S5#;DvMpMf?opeCR`TkK6i@qmcdmDpB%uV^BNZ;F zcF!V6hvK-PXJbdQtXW&*Hm`*pzlg5(#Lbj^cO|(AZAzbnRci!n16!Z|v+7$k7BEv4<)+!f*0%bn^*uH=3#r(AYfFY7ysKQyF_^78iQ)w6_eXN)tR8lc z@R4@T1z=mOKwC-OJuX5Qd@h+EpNt?mv8LaQGGFLWa!;8_WyU5SHKR^LFJvF2?+#8Ew+mpdl%lG^*TQ7E z9vgO|XaQp5BA*a&NU z{I&Y=P32hV0Tq2HOx0w9y=xMR3sqO5E=^Fd(Ec#ud~0>Pb`x57ZkpL!3YsDdkv;3(LxZMo?eTvo3J`JIp*py(QBcD zX)O2sDd^08BbQS$u}E$FC&p*wCro7nWNlIMdExiWq79&%TYc$9nOSSj`to7oA?0)e z06DGn3~`u)?L_?6$_rONUt9J-qr1PO$Y;Et^%azL@yytg&J^9(@a%z+*N~l?pbs-A z_*}hZR%@%mB+9cv4v&!DG;)YG-@JZL#Upl!X79UdoJ0ATgP|^_IF>xSYey};6LTB@ z%E`qwxqFb}4Fsa-&hx!;tL5A00#Cu{e$MzE+IW) zw~EV?nS0-z&-Wg3D*^hXu1W=@K%4)r%=qWmP-qq_I?CkHzeuHmo`i4lYA7dZ^OLqR z;|rqo2I@eL`^o)nVOjlt5iG3M;s`>!Nm~#fn-nX+?*A5|2=O|x(sx}bby|Z6leYZ@ zw;2+B>bdO!&vFp><0X2*BVSmfp%(vwOkI8Io@yKn&bw~%ksxlF9fc1Q2sNZf#QIOZ zgNdL$T}f-W!*`<%Mo#jOl{inimE1H^ z2AD!!)wO90wV&cn7)-L0+@(~bL_;xz1ke?NSUT*SJ*BpKpCk!hXUcgo;Do=#o%dEx z<=S@T{RRwm76pT6-o5}-;C=%*BttlNe4%@M6F4T17-=*3seo3A=CR(^u0di%`HbWj z3Cp>UZn?*I+uzQC^A&!ZMVNI^?Zuf_r_Ubec_>bX@7)QK)@}CQPbYrFn8`@Hote13 zTzxlNydG%*7e0rcl3nV(Vbg*acpT8ncH$YBHagk0Q7ShZTA1*IV6=L<2_}1e>2|`u zJ_FFq^HSLnO|s}Dd3vWM2c0}=VyiC5Qcf%zyoz0(ql0P@yirm{4C%=Z7UP#h=QRLAu-|`sSza&f^kYW$-M~lJH&amSK}eJLII$mZzk-Fl6*$JXY%$BH2S5`oCL!QbN68QECjx-fNX zAA;$f!P*YWDqP8D2!5L|au!;N$xf?z*sZ%TvkyeHiIkBAiSt;}x?eUKNac7kf!I>p z#HV?Cr(dmT4(R>5UQF+ilZ_^ysllo1U6v5Bh&aS5L{u3%mt)xY(lFz`LNYSA5oFu_ z8P|+P4JSdlNN~T-%6Bv~)7Ng)&d&WBTQW&tbhmV^!BQImCfCg8T5;|}?T8+{gjI#; zM(_m3%EiFh{Qv_DkVG&{Ya}tj-~aHYZvdX7nZ$f1_kRjs{&|@~36aV0J7V7JOJ2rD zp4m6DioR{s(bXS^`>AP7W$ln0|GQF4Kd6ktxEVi-}-u6SVlG@8mZ|@wZjp_ z22sX4{(!vuKA|sMtJKf?(S8FP0Iy|8_R-#+Vo^YB-R-h9K@q5-??pwogxyHv>MfnU zOYePjs5fv6pT-4-h*egU350(=WJ`-2)2mPO5XWK+re5khWNKaq4Dgj)yISJB?;;mu zKOp6r#eqVc{!YeQ>Rc3$VN-Op+_VZ+P_+~wK|k@tTf)#CB8!k90AJ_MC`z`pTrqVo zJpd%yM(n816Rf96DkH=paOsApr@&O2pU`!kR?J&l*SVh=uLaESnL09>1ZdTVv97xH zmis<;$&W7DyN|ovE~+SE+XbHNDX%IxBl(8md(@L=8dUMFG@+#Ig~Mb3#-fyA4Tb|r zMB!`EKqdOR#bECD&~;-|Y}-Z@xWO$Gz1Ns|H}(s6xAZ~qg)g~~Y|@3q1Bd0VCrUqv zGk*2j!+zs+;^d%FLNvR4b+VLV`V7ml5hSKAN2cR3kl2{#wStj-M48wE=frO&i!&OC zCi1BKZnJrwUmP#$6Z zNJwixKkrCJK}W3dt-Chp-GIFzYg@#O(3iELs~O?vGPw!YIDumvuA?^5=56R4lCJM@ zXP0ag8Az2OxOh{86AzlfYs7&Vv)q6Tv9M>-io?VWnJrQ>sCTzCffiaSkqebSa2JB2Jx{MTXAJUCH@4yS0#3IBE%EUHhI3f*UXFMvrgAvWVF{ zr3o5A_c(yv)eJ;C#IUYt>@SLU|8}^&)OYJ@K+TfmpjJ&p6IX)!K8`oJ#kn6~310C+ zyFp`CZ@WlMd1H&`ycR(*-9H?u3q$hYocr0DI07chzcD`etV5GG65|th^RgXUpC@B} zSmg60`^zO+H}pUYXvs`IP9rK)Vz$u{Z3*Z?O6NPAD_K{Qfk+qOjs1>XD4HKmIYWX; z=eZM2=VBqb)P^WDwzEH98EKlO!m=$)@@hK?gTHBWj3De9AC~bvO9k5SXAYpILth~t z4T!=xuy06e#NTtcFF2sdwc<=zmZlfj`y#54(si-^5kJL;B_HcBM9Ui$+N1@`+F8vB z-$@wtOz3@MAZo+oK!vfwJP(1p0B-p5FK<@Rjxi&ZMGBtO&;!zt3=OZ4X7!1}?WK6f z6FV=29S@<+uai3O{sve*K-FeJgfS1!i(N`KFhqyn$-5sNlebV%BF@ff8a~qn?duRy zK~f<5^m|F@aDqH)O%n69 z?x&RLAFCfZ183F>d@ee5z9z9>{cziIOziyZOexGk!YG>Fh#S^ux%qVLOT%%5QDQh2 zRh1c|W+aqdu=oB;=H6Pj8Q0Vlyq}gax>d-&>Q*I(VygrV=g$CxWycm+MFJ0c1OoLe ze<0`tLS zUee-8(_&kUnzF|+>9(*ro2m}d$4_X@$Vw7x;k`xccH!C`z9=Ob8+~H7c0&4-bU^$Q z)gPLc(kdhl!@a>NO!_2Ka8J<~;k-?}clD6d#tB8fP7;6!kc8JNR!{?sE|%1L06F}- znrrmE-(eRjcXLL21%(iIIb`dAjBf@uVHy*sII}RFWZq$X(7+SK8Rm@_7Bn0$iP!cW zO=+7$8|y*KstNb7a?GT~x2*>N1dd}BI7DN8tBnj+hRizWP1x<36sX^W;Lkb$TlG0k z1wk&Hfb;*I0$&yW8xV5eb)SI|>_;U)_FvKG`s(tR6pX0J*hhsbB^20D4zdJ*B;QRE zXeU%-V0zKjYd=4Pk$=rcx7N<*__Vx|n_T4Sv2v|~z>|M({zI^`eB>2#YAb`#h%g_I zy=hRorw7c5&WYh9(S4{#ei7pJ{x#GP<3BQ;xpN3iMHV`J!r2XN9ZUr_BetXP2A|RC ztHS;e3jcdteZKn^8nyCbhmdc+4UvCA!bWS3or3JPWej+tBL%SItR&)W=x%kCk-W5F zb2~~@)74?;N%PW8k!ld{*N3nJ*#?QcF#dbUTA34ApALcyEO@E2^D_JF@Cpk=c3w#* z&-o1qHTe4sr#!Ty|J%9a#3g+0OZC>8@`ttN)6}|^vk8t)W%*E2 zD?tdeBjxoFh?OGA&m`$y)GAJlOpNG620Qpr>UV)n@^T5k8w1JAedR?6$0s7PG!Pj?XoJc3X zK6zL7ZVz~Du-HXR{JfGiu=H=c@Gc{Yo!`;j&~NNtj#Cu$PT7y+wy#>pfl5F$&t4J@ z7odRgoLCTAT7uXNAy4nJ4D}I`5Ryjx=JXZXD+T3M5Wds*uR_gV0Vuy*nV zTx?pu!o+b5c=Mh+o^7=!ap#(q5*VMf?w^Q7>LXkn&IGX_{fdFecTytn{yf_@;TMC; zTV|}o*DrtmdF2pqg?na+MtbG9D^mmaKGXZhH1ZVMy_CwLG?CK+28aAlLumlZwV4-`=AkmPd!?3t}AIy9^RHoeZ;mzD~*c|7pBh*Y0KKVIQBPN ztb7_Dt&E6X)NhAD1Atv`qacjD5=$~_wMcXLcvPmZ?}U?hIexwif)^>5{z2@8Eel$$ zqfV^%kd%ShBm3C3bFZP-!OD&K%^Tfs-6XrFKDP2RJ;KXb_}NV!GW@JYYrJ4p=C^fD zY|ZGpP;zPM=PM?gQ-^QCr}@(j1;MX3c24h_=e%{wk|VaK8%wn2E3#RJ*-H(BaQ!%U zikxJg;oCTlgq|R)F{~rJ#0L+sRwixi?FDeQ} z{rT`maxh@H$(dJZE8teNyd{7q`L^WLv0y=GA89Nh1Vg2a_tlb|tUbIDpr5gRbtDPA z@n_OfZZq1gH7+tMtuIZ(CKXb?#+5Jkue^d95Es=ZMIf7x15t#%%AP?&u<#WK41Wv~ zpMtJZDFhIbXJHyaHq-V^iSw{dqjdLXu;i@r)g;ctu$RZ;Si;&fQZz0=L30^qh(~8H z!gY|w+aL#Fmx;=<2%OkR1KW`Hv z4)GwQ*%cgpHIZs=vXisS;7>zF<}|GlB;j%+foyCz{0&%&P*{0rT$2V4Bi3S|#bd0S zeF~<%a@?<~wx3fg7di=!0^8dUTB4H)In zd#q(G{scoM_cb=WtRV{Hry@X7sfw>dFCZ(KGj!b{>w+uh^*n*o>#i(QSe@bO%zSD$ zv?WPw{dsiN1>>reFtFa?E#3%Ca~OeH=4dQHo3;QIa3ZTZ`(5x3rSqjK%R$p3>TEYH zqU1->pvfoC9?c0~hzN_z*2P3L+vG{s1Z{-`(?x7AO;w&;T}9LF36+B;*b9=^`Ab(j z_2_EQs>$Q}Jy~HLr2FfPynJc?xB>=sdK z5s1i)4HoM0dBW)E<0kLYPh88AR6k!o9^@K+f1ZMU4XEMBgj845Kh-t29Fi220x7S2 zzX8M*=ZtXm#@>v#y@7iVEe}op`Bq$qO?m!m6L;FP*7`pYpA=|RBBedP>=H-(vI4{V z*AC~Q#f#}oK70Ksb9R5qobZcr=bv&d1}WF&c?sUs&x}47Hqa5d+SFpEwFkNP&;Pxs z7tUOST`gIII`;7Cg>kiEF4p3^wL$^b-r&LK`~P~}zxE89X>r2!f9V_Xf9)B1+$!*% zf9)Ij|I#zGVsW6d|D|t~a2*ps&~N{{<>+yTLoRaL44U8W80xZl4QhWx($FLF%VRMlf%#bUNx?g0PJ zf`ryoo1u|6Y!{d{Jp%&+PICPKw9J_XpoB zilVCK7`?`*(R%Bxea8Ts-SklO*GQ8~8%VW>E>9jeq%~-%SNg&lH!-M@3QOKhvWx2B zXZe`8teSz@i-6C!z6{LRjB5af?bw7?66|c?Zi8xysJjlL+bxCEK~^a>bqg(*&qE0L ziV`2!rlq#IXEVE6sVA)FEp?AHWkm!l1hWLn@6fu2tZgpX8OR|OQuFoR0DQEW*dX2| zL@q6g1v6ck0-mn#4}opZX1zw)F&5kXS{&;HafrcibyL1T$q+zvsoN@@>Kj05p3(Vk znmweZ(bCiG)P~V!%RB|0Jv_X)GAO;jH{QN$^S}=|!fc59NCL|E=j9PpCBu!|N$NI9 zpR)z0BrixxgN+#~h^ok`=)=T_-R1}xYKfN_M`)Nnn?hA|?n=%=Af$m!L^RfLS3^kdr zhJs6+7jg9tY|%gbIBlJd7-Z%uY)?p98og}7-Fiv}iusi*tSYRm4eM(g!q?YH8@O|X z!viP5x`<^Cj=dBZ*0K_@VCE=W+XB|1xbaDw;u%hcxWUvYoT>cBVWiQ#!zuK1iCG{3 znfFAA01(o{894i!rxnf&+Ye%7!EOfNnK2BM%n^XEN)-je>3pim6)@n3C)|J`=U;etzxPn4&pM{5Pc zrh6g2t1+gu4c|GER(Tf2qC)Atq{d8z9~ZU@TQ@2dpjKj7NLd&!@KL#1isp|fd_D;? zNo3$Go+dSTq=!JHLtOxtso64_j)ZOO4&4wp0WzP590iP(n=k@zC7bJ&xi1s?%|xIVVYY}mzXY?=(-OOq9`Sh$$C1*3R%OXvjugLpq^hOYp~?tVx?vBO5^EoC#h28p?r`|_6l5-1`2 zF%OO0moCdk33m;KAN|ryaaU5wR8ax`?ORw5(vOE|Y^oIj^M1D^#fa=He7Ix?dx6lB zZ9m$VG;Q(E7MvFYdxH0A%O{t}u;ZdR1n5F|UZB`8JKAG=__{hhJk0_KfL2e4=5;Dr z-p090N#?km@%k;nn~x-9;!5V5KwD zZ^ZhAg9f!ycQw%AF(aRkWX7Pu2K&ihmME}Dz!xt-z)(I-5koULZ}1~H#jtvooN0yZ z?TT;ROQKfKZKUb&74#XXwKxSh=PBUPRt}Km;%lqP3uVzi@|hNZ);gwNcBs3xM?(#3 zVh2hf2}+J;2o)-1D2VhTYeMOo7~RPih{KAiyN+T!0QryN-?|Cjzem7-2p{1K1!+am zBky#RC&;ib<~C$f8#g1-CavG0OMTw-6EWdFT23XZFO(&dBq}gD?WHXp&yRP5Aj+Tn zE+|AXw$GFlwQ|)j;3$kbQmCn=a4;CH8@Vk3zxb7{y((_arXa)Jly?L*w3b4MDB{`ti zuNJ0PNA@wspk47jdtY|#PKsWPa|EVGet^8h0snn477WuAiufkS*<0Bb4kc0sZ8u;4K8Xv zo+wy8g|&X3Vo<9<{ce>Os#k>V->veGulm#Xp6PE502!*7A_U@_&Yezz7;zPHQb0GK&n0)cZL{Aa5JL+l{c>e8;7p%wEP7 zd0MNEcEDIV;%yZ{u7J*h%2yuX;aotWlbfn?#xYyaTQ6M$au2i%{YN*H{qCC%P~XJd z3qKQs?CJ~u0eb=Z=ALmqeK*&{B736SBCkt{EiHO?SAAu%ri;m?|4!E9WPG*j2HRe5aN{Y1v^-08k_pxgXlkZ`u_2` znS_2dha*u%`SZC*&zXV%gXjN@iAo!O`5bf`1H79s&|HjzU1r(XSx|WP*%Ti5ToRz*Jjp4WhzlryQhBu_xmza&8^`EeB=O$8WPksv? zjt}TEIc4f@WwH7({W}GWfBhRs4Z|6(E(^|*H>q0D-rSJ?0t**E2{-hRPP5oDxoX3V zH#nmUdVPCYssLI((2^8p|CIj9JH=d{|gv38*&B&LEfnjK(2j%{Ssd5 z%-Ph|-o$yUJZ_y}+!i+FS8K#WKIpwM3`#M>Xr32qdq z2U)02hUv{X-RCI=e{L~`I7j;gg+|&kw>N7YH~PgKBItBjQ+v?+rCpe)-cvZ9$7w&F zQZ?$-23O{qWc1*1T7m<1ZJB{dUX7mzSO|HkAk=bW;JYa~pPlfE4yhuGpiKq|6#<hkXkghwUR{*6h2R+DXwTToK^i~!&tsfnw|?}CDu7l%c4V^}RSn@zoF_vOk&dFlsno!xrPQg5ESM~4I2`Ig?^BIhSGkK_db-hH$Ds3I70Kd~8 zPc+?SUlOE6s%Du!9sl!wK{f3ZGipV?MsY8GP&j_~ycgMh*U&%uqubA)|6sa-KF1g8 z*>dkamF7O^xGq*0H(%aaZ&V{#k0Y~1gXB{3#2tU!^&PzGX%he4o>2FX?tp-w)Rn$} zQX`M~|HB~)staB!c|Y%#Gx`JbaI8*tn_?x)rPNDl44|$3#=#E7t<73S@#a#p@Y-1W z`*}|GaN^-$KI!!uiY~yW_!jc?vBLk^0xSFOIc69hrP%c*0_6jv8!w(-v80uW;ZA$)&WXk z+UN0gq&k$AvZ{am3I?1L1I{K$OmYw^NsX46TEFihIqb%$CN2PIq`_8_nH5DDMKu}Q z$NJP`CdDt=N);sb+Ba}{cMGjirK=vSIe+ zEANRNg)yQ)7YT96FZt#vD<;GcH;te?bn3VyU?liw0wd(mVo*60V%&a@dr9MM;vvzw zL~%8FyqsbKhV>x~!LFVI+)z=EuLnb=>kxH3eik)*Lx}0JA}}fF;;!X-fZ&~GtvRRT zD*tIb96`u?O6OewTQ?3jz_gOPgn^#HDqg%XLND%lU<8YP5rQIN0p!?WT;JQMI$!ni zsrOC}8g45v1ePm4kmt%(03>^^?J!T>v5Mt_qo^J#)B*EO2aAR1XTnF|QCq^UE z+342R8Xk}kum~vFYNlq#PtWh=HgGb_=tqhch-h_C*w@9fmh()UUjYqDpeR&J^2Fh(~w{i!ih{F^m^Jc z!4i$)<|(&KeQ{a)SJk?<81ZsJgjWLERe!H>)kaU?z?N#oHIUB`Cv2^>FDl}8NG8$= zXD!n6b4-CoTLo!U|4y=a(hsgVuw`E~VVs7mkG2U)c3!Mg&&j?%xpO9z=)xCp& z{?_r`tZo#ig94Hu<<@M(oAB`-&BkaXL0M%woOvloOM*@sD`psey-VSPPX6QMt|5Mp zIjQSG2JIq$B8?wg^1Wx20{#XojvIvbitkFs3vrLjdzHW|m2QTXJwTX6R_`Zh`Gy?a z*}Pf!RiiXffU;hl&+$nePzi zIrofhj#_lQhmQFYeoeavp#hh)R~oi!CAbdu?a84)w2Th_fqL_bHkR?3QmD8oLlclk zyEKW9l`n4vgP%F6dY2TIt)TeOUMM+HApgaxXBwalS}2Ku(u>;#?G>0T?Mbx^^)O|R5+F{pspm$wt7{PmYbcK;k84xU{>Dv)=*owx8UZ-6Oz zZ79cAK9G~V=eF(>l(z5B!fXT|ido~SHm0(}{HFt`NUm8+|L zrsf=TAS{tIa)`W9{1dD6Gi}Njr(gBH2o}r6)gl6W>GKz-IdJg^|o6 zozGMhT9aMLH>y**V=jAVwK*ut01Sz#k!CO5D%SXtk_Q@rHbE15etSj9l-tN|%>bxMz(XU(v zj&Y`CS+uH?&fvca?nZXZaO>SK1DK*ZolrlX(y>l#4O5m7j*abINiZ^+dbjkgKi5J9 z1-3bmt-_6aFseHOxzbc?i?t=qU2fyeFLdAUx_Sx1hV;v<|6Y3-s*XCo2n zsw8~un9|p!7WZ_Ul)LnWM{q9~+|@gc^0=L-E|lK}XUI*Pk(p%*>T9dE34(rCH?CA6k zWyyA>Vw|iWxsTFKxV>DFRx6-FBFfgaBw;ex74u~bdTV-z`|=T*_!(g#4+2_4>`_Aa zX*_c$3hPIf4CV>NDS&pv%}veH2?lXLf<<8`2*BdTG|neNZJo4rRa%?lp~KJYBP9mN zxm+C`1vWhZxG|M;wU;moj22w}K!jVm+J>F#Sv2=7I7| zs`~ls8oDdyDcH9qUd2lK=pd2Ul{{8sY2}a;wYoLD$B{0VH1suk>~r%kCX5D9^E_B2 z-xf%WASSrSdHNit@9|YyUZ)a{Tf`Hze!6;?v1pC3wbeX$YVSEAc3}v7!F?tB2;dVC z(usb3IxZYPUCJaEXk8`q=hrKy&t@TqN+Ats6rf2ss$RBeyq#g8v$nKm7LV9BNtQPJ zgwG#8(a3P zdi5Ape>dMq|KvT{D88N_j?HfR8Le4z`H`uDBPNEcffT@V4hcrKDQa(yLq4ixjT*UB5a@Q56zm=1F4XJbh64cKk0}@^SaK(m z$TY_pv9~9AD2%;ve6ZsM00_W7dx^Yj`0aIM@b0sV0klg@^=f2RumAo0Ez4);zp7{! z#s`S&UTFf*8W$e)qmcv z(Lpw&t8qSGRxm&kb!N5KsHPuVFj*;e7CE2v*CovuU^O)6ATy>v=uZ4Yf8zhmPmr^z zCN%{5^r7oTWr>;5-xP6aB{L!TQ%GZGgLDT~*A)Mvp!uJr5r3K@D+8KA<`Qp!A%P2~ zmw?L7YvoVS9XX!1g})ZK?&9558>-o7r0W`bKgkjxe*_57Aw9cp?Xtpj#L2la;!W#U zqe#Q9^lE{q!a`K-S{KGi{RNvR4nL-aSoaSUGI5mc@H6uC@~HgdC6(3JNhfa*rnb*& zfwtI>kS?m7yir#u^~Ub}z7;VE{#VYMo8TK^UO?MyS$YTIt3=QDbchZ^B-roRJ;S61 z0gwjF(kA$JaM}wTQRde#@B$K`^oBHl!(e`-REgH% za@0vhYASy_&9)*LbX>*hUYa<57~q61G8WFtw359|wrFG<1*ykk9{>5MmBzHLY0(~U z^}{9I<>xJx8ZeSg|1`jN&q|QoNR8*Wc6^y0SxD4!&HShqX_M&pYv1haB~#-i6d$esC)p7Qc<=>TXSowy&cr%eTx;+_PW(pl)R3 z)pZeHv|KD@M8(NR9q9%ozFO!9*TUI=S-H?f(?hf>Wb`C z-BTF*Q?Oq<$j^d5`ge5!YE?f4z-vv?;=qe$>xqHu_Y%IicX)loAL(rlFr#dM6>bP%MFtfZAmM|G_5HZmLCTJX za?!WcIt-(~C|LdQXwa4jfdodZRfC&5;l&+{Q~1ge3Qs_W-f3P@9XKo=89KJa*kTEI z%o-6AI}{4|lpam*@o%~GT)9H^f2%DprHx{rpb@7k*1n&>?RWd74l9NCwAcw+q+7nY{LNER@WA@I^)Ekwrc z@d_xqW!~XHJq~T-Q&sCHSBX-iL`dt1WKy6XXQo9W@5dG=&k?7Yv%Yd{Rcx$e*M+z- z9+rHjAz+e zmMYNS2g*(?4@SkLge5C?5j;m0Mcxc(h3`5OBagZJ7LVBH9^Ofpu{+@8&EqZOz$6e@ z6CB3-*;mC6))*1EU|8Pro-MW+7ipN)==fTf3AAl*Q$(7~bIUaBueGwo3u+NW#*G7b zTQfWrYTJOoFBIsUT&yDGxkeZJya6SdD`8_s79E1qbx$twYoMYFCZ%x^sPxm~etU#~ z;UF6wDV>T-|GN~P$Ig&UYhBeVr*>tfP-SP^Rf|i_mD~rKcNC@XwF0ZsgB-;4uFFvJ zENHfHE8=HHTVph>Mf5b@F`>@NcXd-RYO-`uIM_+;`|&=x$L~X?LIlM@1jm6Y4A}z8 z!IY1M$#XCnY3baF%*d0r;<23&4HBU8C=g4Qr3Qa>ldsOsf=y`0+&6g$y##<5#MjmZ zw(=BqKQ2ee2JmQ1UAW-^yYU|IUG3cW!Fj}w!63Hs&m);=6G58U%qjONtKGgHm)2B; z$Lhl{$+5!?CgCnWA(<~XClUfKhn%wNwJ+ZwB2i(xGeS-Dd=zJCZVX^P00^lu>Hw-H zC4~YnAj6m%sQ)mGVMIjl^FK=!d8YeV?L1Oaabt_rhfzS@JgY;K=!^G~ymjuoDN}Tw zjTASZoW{GK@z0U>AH`^Y|Ah5W;r`C>H%{9dKsIEZ#)!|?e_1&F#n7Y4l5+Wn+p})* zAwA5}K~=p!vO5Do3gW6ag(hI(--#yu>)%Q}Iu|>uzjxL(cn2O|dKdYwT{dJa-S%7T zfo8I45P=i&Xx?Qim62+ulI#n18Jk2GN^crqiLk|~AfGsj;eWqdZ)gDnX*MDds4>&O zT(BbXV_lnfoWiFsUN*kx9J%Nf3h0~)oqu_s{3J`A!%)F+3UQFk%0Dc*wTCiZ_fNpH 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

I0*%T3I1@e{A2kL@WEK$t1I?X14RTm*zc64q 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

Aq%(TXoRTyHSaCzLG!$sj*Yu-31$QS^z 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%0A4NB<` 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î`*xS)4)4Ui0w7WoO~$XFFofAn5IunJ2L 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 z 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 GHf+#Au z6fZyp+Xl%5mKwM$?<8?SLLr-l!8#`S+RE$t$=LKci$?AGZS^M%6H1j7+J;IxnsCn8 zAY?;qJt)K)e<+p%y^98C@|DtzCHi zrt25hPMO@Y#D;$P%DlxR=5$ONzqEN&c_bS1>wjPRSVv1kb!udxmY&&4<`Bl{OIU@i zhXQa9eWPy%(hDGm7AZ~a+X{UnJDp8ZxjVW`5_$3sUyI8Oc{4OKCKf6@*UkL2%f#^H zy9HPZW8(E3#ZtE(Yi)^S&(X?EX7Ff_;kt8C?DcII#a`Dp!duTUqX&A<>KoAw@F)5# zTCU}+mo3KS@(%q`znPTFg5N~Sg|Cu+mEev*9{4x_qyrFG&G-_%rs|fElJ2ie5(K$p3}e7Zo%zTUibSGhLe}6#5*ua& zPFavZymTy#3*VEh9D~xEUGwhy@V=Ygy=N-21_SyV7F8^q*Z#m2i=Vk+Ld}-rdp7K^ zht5$~&u>^fC2dDDrXE>3V^Ni@VDzlYsoSp}%LZ2dX!XeSwcT6v_6-N_YO5Y`NhI1> z6|7yg`-(-6UU#X_5wy*?c5;EIYQY5k_nr}UOZk|l$cUy2e|YMqOg75SO_(0JAObGe zMhiurA|wXAK_qxRUKGU|D+1BnTxT?xe>Y*tVpm?YJUdl|Rnz<;mx~RTDU832m4^AU zpHc@iC1uSd{lE-SQb_EWAOY&)tF*DRV6XErUqby~1) z<$d!8Uf~YEUp04h$XPLSe_upk?&X1-hYQFw{B6Pq7m*m3hDe*=QH*nuW{0B8BQ_|@T#+c6*dkJf!5;h{ zCI&z4Q9tb=lZl3NCvlS;h4#Mk%3$j&BxuDz`s`WeZIF$AxCiGbgEnpKqawUogt81o zK@3W=QAY)Nm2w%0~$kIKnxxU2t?Ru(w-hWQHe5xJ+>rP za}!(RD)^7B90^5}+3Ho}Tg4mkS%!?G(3Xvt#_iE>9^9jU1fyss+%$MCIy#u-4i7Fx z4-Z~Kxp*O8LSrfwfm^iyVed=e+bHgZcXn5|ElZZ~$o9&Ie95+K*;ec%wq#pA;xn=x z$4N{gTe7XhmRw1W6AC0GKtf4ENK+DywlowdN1;GUXj)ndDdlbo6atSDN=w`D8m_*y zlwjrkXLeVXbMUo%U%%J>o-?ubzjOTW`OnNAv+W56l$efW=_qXhN>;}u#f>JRBrXR! zUT$t?s)mb;Q|6gdZK-=;-kq6eri6Eclag|CbCR=)b#ZYTjaIEw=!<0}>{+l6mV)P% z!vwsP^lj2pNc6jW`_ZE)<8YpmZtSX>xBJ9mSuXXNtm;|~?0>+iW^^B+I^AEo;nR7%sz{Vas4LG71t5W>|HkK1zoU%akgKl96WP=M`yKf7O*k ze6O=aW>i>U?4|g#PL@slEaG-pJo6*?K6fL{m;pQ(Rf)vAM=nj9OyU7urHZZY@O z<>u5aFE8)2<*>E;E<5wat*ZvwuRnIxju)?Mn)#D^M{iC+&zGHp+nmPyu4(LTTVXUC zBi`n>*{76OE9n)YzZrRd6P(RRoXv_Cl*HAH6pNjWVPSj$XOlt!qvQifw6}r3&3fC# ze2pCo-yYr@eito3?WjLIjE;rPk|Uoz4l@n>otLd=e@{=7U80I?T9uMAmL(wm86+k_ zi637&q>5F+@)qloi~}<-;-?q22}%5BE9AkVyb`8Ti*8{ha$~VJKP7LhJ=Bp`maYOi zG4=hiDH*Kf&uOJ8iw3_k%Ch{sLoE{gWTug-f%Ta_D;sawnI}z7=A>q+P0C26i^~jV zHBx6~;+KE3bK{bw_$A+mbh0XZkSbIZFvO4H<+C;hrD$fJ#|#2TQ6?51E1knMBgRz0 z{LB-WW$W#0hrbo5ZMyW1OUTov(J~#)sp~5%Ut!D5S<-7Z_c!K;r&Aom+gGk@arW&$ z_T?*|y{>iTs;_@WM?_|hFWc0epXb~%u;TLW+@k&~u~)=_0&J2Jh-$?)4UJSrxeR{? z;d>HBBB8OgDy3Y?;)j40u zib_{coz93-r^c^BROS@ZrEH!m#j-`FJ6Duq>5I(Tdb%q}}@CDic@_3@ni48-M_bLfnm zjGT%jDUwN%wB$IKVosq`3htCD6jbJ&x>#sk$FDVrj4(To=huQ7a4Qjv3^IAMhMA>X(OY?;F1B~djH1<+5pBJJJoNpoL!kaoU-*2acuSu}S*Z{=y zL~6IqCQ~9t9UB8nHr9yuPLfI_(iPGjQo2UER7w|sf@E}@1~0K7q{>4I1Z@lqmrXXwa5Y^pw^NS zok@1bGUOR#_*p0L8JPhhU>Z#bp`f@JCC7o`(rTgE&(sSBw(L2MhU)%#7JgqVTN*n4%+m z^$OoF051>@u$nQTM=z`EjW;bSE!GWndVjdlU|iT`IuN$glF3^ts~pLNi*mgF!uECc z^so5CbRum4A=Vmtuls15TjO~ zeV@IOy_zymD{Ur?L93+<-!mY)VVU6u!?z49zoow+JJo=-y;*P5@6oe*y-{c6;?41NJbA-CUa7-Iq68yFUEtAS?PoCfo)!dE^8Eo4 zN-J=9HD(_`M_WR9&dtk9Xx zms2d(G6HTDpk@3}qp%2^bu2Q<3j6d6=>W5HW*=>z`3b$14V--Zt;l*eHLK(F2wgR-Q;D!R4D=-(>3Yda|q6`DSKY3yj=}xeaOMMK; z#)E6+Q`ulMMowlI(Pm4Q8d-?>v5eA4Zoz6PvRNP*)D;R^u2RB80xR(-o-Xog6!duX z)ZFd#4e^ILL)bpTSatCw}qa*v; zlb!qWax)k*AkhYtxoG|VRX_L{LRvSkN(`!30)eV9QvVVl}X?V`CM@G8Lj! z8WpEvR0@Qg++^afAig&v-Hqn~caJJiDvky0984J#)0sQT!32~5Q0`ST!tmvPiRpAQsyYQXiM{f+j4f?J`&xNaIR-pg9F?_GkWBvx*OQ=d)>RJ}r*<~!v zuR2*7BU<1H@WVtp=d5oEhE2qqFx%O{XVWJIjY#kalS*y1btNTMCDPR_OdC-QOQj~p zO5;>A<0dIuCq;{;?NYi}iu5pwDwPX1=#WQ;EV>3AouxxM_^*ahNNd*8+SEi=rIu)< zI?&9a*cgRI7)6i9li?HAm1L`MJb5I*DGS-!6W=6&83_JfqBa{r!rbaIm}Dk}l_}M# zN73H!r|enkx8bvF_*1m^h*GVTOVFAH#b#?RU3X?TQ~B9*_z!IVSdO){I90TGh**5N zt@2ViYLg?mJO#!LnUT4H1<%C0Eh#q8s1bi~B|7LZ=k*lcy1;!ojyI<)qEZo2EHHck zY0wWCqzS(l?qGn8R{HRn-SmAky%d?3zR$i7@dvM0du+uEb6aw0tD)IIFN|-Ar&}3R z!yu($8BA28)~~{YsJKtWsj_kOlbmxafOHFf6+Sy@!*M6~oMr3kW&4kBzvlIudU|ep z?W*ms-{eGj#hvSFYrP$&!nXCcy7e6<+Oq4{2fCd%y|Lrk*Y_`5w*R$V16TDI74=`e zYG7MmLH_cq#IX(c;RGs+YOv{*292JBk&V&oshlKTvq(UC>64> zo7oxui$-HJmNm*5me=}j2?ttVKvhxSw6!#uku?)FB_M|mwI~q~DAohNO{vJ5ij1i! zl}$1fuF6KO*=QlSV0ZDJV%lDexMFiLU0l3SZ{T9gF?38h7D&t7Z&LvVNnv6kU6^ek zml-GoIAnNyz*kZ5MHKLs7oyBHh~37*cY^X#ehnp9Fjr>eH+qVmf#WAO5HY3INFL!! zuBsAED&eM_e$(QeUD%wWc^hqo1E1Y!>Rex2oSV6{WbIPyFzq#> zsV{%JEwc*!VbwJQMatyj#C^$2vWtRCMT7J9J_YvXs8VXeR+^lcXiSJtNQl?OXC@>l z4Jc2WN9W~HWu=*X1VWS+S|!IPWNPB#h*B~$OA-<}Wl5A593=w}Ow6=Gw-WuKycBQN z%shi1?>%%!ulwYun8Yj)xRnsr_4s@E@AkhsLZ((1Jw3Ey+O#hIpF zz~!as_B1a~GZk2hG`;ql*g#yCH9!9nOYz$N)?_x(-4TBGlg2#NiR& zQ-xYMObUx_B0KpnUc(T#Zz5U~6-S=^MDCP{75ObyT%kE(Wy`8P#!yY*uJKpi*M?7M zd%L>(6D#`bmv1RtKAKt6SLMCs#AyTCb;%laW?7cO94AZCCN1KIb~bJtu-y4TjNN7~ z)TO7T#w8Ranhs2qt?6q_D*WkFczlNu>SMAVGuq;Q!6H^_^y81f$dpoqg=MhyXO6(a~9VZrLYnS;^axW>FLd@ z1I?Fy$G0R-6$7FB=K56$)y?sl`N?UkY;<7eKKIpY8nZIYS@Feft_t(s6?i);=owc7 zk6P##mROZi5vx!cm5KzVLaA&~AcdBd%D^k6M*Niuxm^2ASZm5C4%VNPLItx2d~Z;$ zP?FIFcLPYI1smwrm3XK{v}$3qs$a z&`lH?qfm1Os?0#f43v>;ps3^=1HTn}N{a^7Xi$L$X_N+qLdB*Sl2wM%m^z4#_%=43 ztjS;*MRrUwmXZ>sEBp}ZoOx~LF!F}?V?O1;=Pkgeoa(jZ zlf71rc&}BN6z?X((1=Bh5pPn7XnY4B$tZy%etLdXoUZ;l>V`y$W(H3A$!TPBRP=bb z1vMc#qEQ2Q*IV?y@Bq4NW?dM+us~%(kN=FU;`(gH4Kh>>^I{-r~=e(fDD7QcCl)89W@oN~%1fAAFC5Xog&=wp5Cnfo9T+!*b@znR{s8AL(zM zd~T*5uOfFte14FY9&y3|w-&r7o{Yg3RtWmyW%r681|O`%g# zR7!)9_hM73zBna0S)#`ayaI^CDoPD=7Ntazjjwl>ii^A#%C-Du^%u+W+;4C&veJbS zzLY%P!cV&RXY5IA&d#p18pY@94O$^W%Q6`DLHqPwqZO?SO-Z$BcB{G7oDvFFJd?g^ z$%>&kS@`YREl*ta)Q85`ZDVZ($UU%gZMj6IlD?@@rj^uYcU|(eyV4gdZ8Pqjd5Hej zw(ozb{Kg#*%dN{N`FBa!W0L=*jj`7XZ#>AU6e`sg0}JbwJiOra`1jm1>F4bimmoHk^&2&*e& zEWTMQrQUd{j7qX85yi?7Z9|Bitq-*;&wfZx(H|jM>_XIc_8RgG1FaIDI#>l5KA=xC zGU@}0nkk@U4^h~sNf}J~>5Zi9L$Qn&%kly1mGnnY_7Rlj;<5sjPzJr8-cO$fii?r+ z>{kdyd{2d^m<27j(!Yb!B~W?|Zpn%*F|V5mueE4U;FXQ=Y5}}k=|4hg9a?pE2W}}9 z`7xdSfWDmm5Xx+*_w3b_>JTk9CFP}nc@x2GNB!q%p^|=%-Yj{Zr%Ss?shkl@OX=t7 zO_CS*w)7Awjc20UPLZ~tU!kouQc9khz;6J>P6_tihfIP`G`8_R(HME@hi^mf43jpS zgf_eRHXu?)E~U2d@7m01!|x9HGPJo|Xv5$)bOhgvV|m{b-_POO#M3{c_e+lOcA~oo z=Q28CC;BORD=7s#(W|kxb+n*u3;mK%29}^#;xd(3W&(X&PV@nm0DTZkXc*oS@UKcp zyQp8!CX|InA=K5;)ATp!$LK#Y>zI4lDH%HL4P6dj7aikJDM+@oq# z{U&C4%=crN*gMr4b+7vNxE*niXx`SIh#!uBPIn+-Y2u}cKTE1idMWwODG#QaQctIq zrVXU+f^=8fT?_8loAl47*Jre3Je~OnSH*4Twj0t7Jz2$B2eZ?%59FlgTxTpX{y48Z z@6G)83Vv0%uV_^yT^32-E_zBxfB5`ll1Eb3Iq8{5Ivt&g`@UcbKzem>e`81#A(|npw^JzZKr};FW=F@zd zPk&D;TRNZqWs`G0&8L6sbh(g@lqZ$@%lBIt%fSC-I%xStMPWsC#fFNjE52HBu;QMI zBNb0nJX`Tn#TymxRJ>R5amA;VbfvO#ZxvP5T=h`Z->g~IDeET-2O!b*5= zO{nIbn)hlxuK9G)x<$WR+_dZEdrO_FuDkA#O=Y{!USxm5 z{)hVN`h5*K4I3MN*l;E~HC`D>xBMT{_l5L}e=z<2e{DMLU>sUUrlZ8M*wN+~aCjXX z9oro@I_`+1pZtUA_5X+I&;M9zqMI~L8BHbgX+F)T`81#Y)e}WgJRRz=mRV2Lu>Vl7u@1n5Ni-cLkWCG80}EV3txQoDg6M6_apUfTdJSA`)O3 zRTjY`r&4s^6krAANQ@QWSQ(w@1k8wKfRShnF!C@)L^Q5nz_$ie4pf60UEe1sK==3xQK{eUn~*p}t8&;04&Gro{pbHZ_?E zoK9?dP=K*bdD~@@`c47H^_vKsgKcUW6JW5ZX*Gchv3^Wj1Q_&V3K6)N;Mpg@7|#w2 z%cJx!kJ7(9N-lYnTrpAgW1{NEMA;=qw9DNTN0n1%s*JJ%)Ju&~9yoSTe#!@bA!-vf zNpc$CEC4Y6bwR$D)F^=xJ2ei8qnwa83hhHwkeqqo=z-cB;MYxR#zJa=vmwa!P}7jp zMX>vTu1KdHux|p~Q-Fs9ynevxrG^0>26z(60uee~gnKh(0mv9Rvr;C)g9|WBLR}8% zx_}PGF-)x&>Mn(|G04TGQ@~>|A`{kwm&h@GQGP~6tSyV8|V3ncVX>go;-v< zH>o!%*xy9@x{uJABwX`thXpJi;oL=VPZ9|xpjL>K;Z{S057D0I+9o8l;5{X9Ud~8F z22KDxM)eB?idHABbjqVAee+G!}i~c71{)HqEsh`i+q9`B0lJK&G2t6@2 z21xJOMEnQuj_o56!*x+fdEax*@hZOO`-NX#Djvo$Xi|tom|M}BA|6~5$Ggw-Q9f$> z1k21~7kh|T&~kvpMlb2ZA;GqIz9NniBcwNv6DdV4&-H2(v5bqrZov=Ek7(!ignSa& zv79wjDI^bx$e6}@61P0WsxHXG8XAQfVp*wxbImzXvOws)v(X|L(U{21KQa#eopGPj zpM#@a#KEOUym=ku@pclu#zV%;abdie_3qCb%S5ld_;`jb*B$9O!KgU`Z*SfUJOZsz z;>$k4?j|C0Kp1EE*n=a3i|C)Xv*^dXUrh=ToTq@t0e)QZMLfkt&5q~i#73{$>i*o;SZjPdjh0*FYj(CZ+iPY=BGHB>67T(l%1Gqg6XhW| zZt)fh0=C%^mgjni@Zu3hs;P)Aqhkqg!&1TGLDEacBRq)xdaf`1{aTG4;dv>eN1C}l zJ*$anqQ{9ZXh(50z_UT0pczjT2X69SBo7GWtOqts%NMZ$Vt06(|3y-<3i&!)ekv>Sg)JL%My@(%q zqet{F>H*^T)p$W=)Ssa7|Ou0mmm9K~Ovs@^_ zHp2Y1Lzo101`7bBwEuBP; zbE)`deqRY^A0OwO-qEp8kaK#1 zp1=l=yM&94ZSf2RJkwm)q{r8b+qAnj`KLnMxPR0;%nkb|HwADT4x=|)I3qq-O`Ov; zJ~_s;W$j0tzlJ6mYpc6RyB|&OdT-?TDE*e9La>2=K=hb58$|*T;2whsXTmuAqtQc7+1oVXuqp zaS>|ZP_qPZ^9Zg*L<9L=pc3*-V5 zeqY3)MI+>og+h}xrKKKU$+UO9chckbx=Q?k(NcU?3N_aVu3rG=C2kSKjA1kv?yDE- zV=oCc+HsASv6|QUK_;vk&j!yp^gp8RxxE>ya!!AajqS$936d@Va)Syy&}uZ`0?oKh z+(-cWCV0>Am@6;}GGiTsuE3(uobwMspY&m+xJWz^{p|0T0yE?a2K~@;uz$Gy!&4Jr z5f|U>z2l&ne2j69v|Nu6P+l$|9JxI>BJg&&U_EZy8ydseQSN3E+zoRt7LR+uPkGuH zSAY+xK!J23ETM^;@VmVu_~;=DnVbTFf@7q^0_veD+BfDf4Q5Cm>N1YW|+I?r%Obg)@J2IqHsNyn?< zUEDR~-{6TF7a;!OE<^aioosT}Q-q@6mon6aY8y$^Yp1lXo^GsZSYi~<+v(`(;kuk$Ye#o`s{`^{I~&^j8e2P?xq4{V*#*N-EA&J_+S|opf&!{m zM-N8U;czyzz^T2ywY{}>z{EAR_I6^NO@P$Sb=#f2tqpzcb|=@}=j`t4aRB*7K-<~c z+2jN&jt)m>ZwXL^JkGHkPPm>HdwV+}W$y#-orJ%JuI>S6YjaC4*V5JA=zz?62XJPu zZ+GydK&XaxduxY@YqWRRn;oQ87hrLcY65rtEe?_e^z87zp|`cG6N}N%)!FNWQxiz( z?2R<-Z|!lIIJ>j82P>q>*#+paI-x}uK?3bM9XuASYHp52pb9?k>v7ET(&(_a1Fjz2 zIJ)xOJ4cGW*C+FmjkQGvNP7`Sxiq2zpFpn`unV-P#gLCTs zv+h#OUyq-^9zTCQ{(t^@JbzDh{+j&1=QVlWdh^%i=da7pUzeZ1E`M$`pT9Og_u9Ou zo%!qY^VjF+uh0LBU7x?;8rOT?8W+z3am3j`=2)=eom1LO<~KnyhJ;8QoxAQm3CH!+ zU!e6#$d4{tPFh6gw28;acvUhnL`6can!aLmVV z1GvY1qXL{1hIof?%WqK5%c0r#EWy*$y~WoD|5&CvCrO_ z{MUC^P`$dZtlMe5iIP1toy^`fO7d>fW6ZwM!VIs?RVQosmW3=HYBqHXavqOov1^w zi3fhpAhBZbu2d3zdPq7M*YNteME<7TM_*&hwEvWBK5mgoJ~x_)`xLZwL^DQrW*?)F z%I0ZEa5^cO-j^9ZhN1n(%Du+5UvVADL0am&ij9k-h=Y}Sa@(pEb%P2`WvLEC2~>g1 zgeuRy><-m%<=_DYj^ULB*%;%|ttmz~=oL{n)b#S+HuiVrCMZg(=pj@~MP+-%^tODe zrOXMa!k%0{?)NU_JC!7qDm|jSv?{Wg059S$6oS)`)7TK4iqy?<9{b}ZEYI${nXU?4 zT8{g5xSk88OHk%JbPRZVhui?VAto$ zygM&2GW>0v-c$+!qQ%Bfa%Y{Ge+`lxd)Ebmjhyx9c>esTOGx15s_QYBGT9Y4S+R;> zHE3$mDXYSRZF)I`!mtAC_^a)q`EU(;i3z+#Hw0*p7%4wX zBIE<9DDkX|twpKz4TUN?4M8&=9U-$GxI9f&>|mOf7!gCjs>8jkO_+;yZixyNTuN3} zH_VUpnmtX>1m}=7b%=&6*J%IfUKG?b-1Z`M7|yoKmEWR2M={~-(_tL(N&Y-!`fx6> zCTZQbk-H)M?O+B@lEzj%+v{}YgV%MdeS3v@g3_nyaD2Kw)z;f5>!C#!LxRT|0{8i9 zcapO_{5*0mXp>(sag$#n4H#bT#}D&aPH?d+6!<^2gOWE3CD7!B z+QpCx#X@!cP*${C-anTcNRNn)CO8>w4-Yn{o;F>N#v2!_X~|*7%NFSE#BYN+W4KIN zlplq?jD{0+W;|uK^OMbOnJVgh;Yf+y2&<|1a>pC7EM&U3#Q;vbMWBp$X-VRVY7!VV zY39W&tx8m0D{05&>PP02JEaw5HTjoaH|rcHUa?}RL4Lkez5a1v`V`rhV%gwKwAF=4 z?0s&)8>g|aMCxb3jy#lovA?~UZABlv7oB@#U71+&D;lCQ@zR=bW@G1ZKNp!+$oG5g z_4w|)G#Bs@V)WWV3;>80RJ=S65y3neWc~bHF@?>8g;Q{|Ux|=M?((Lq55n5(zJD)8 z`bJ%q)^u(KYpHw8`6dH`E;5~E4BwRlQsWEP;cQs9zE=l}i0?J)ZDVih(CaOr$WRx@ISv`sa+xi{7? zefBWBoCS;~E5gmeU=_S#=5sdk$d~ZcBm}5!qn+6N>Qx%F!#g7gfT8wNGW_t?50SHW zPp)KDSvO%VMj!Y)z&)g$nx!*QZn~t)N1w2CEWayZn}hU_2-T1NB-@xub4aR)Nj$Rc zi@8lypRZSsbJF3DmowN4*K1q1s02&0d*2~5c{!gTQZ8e@de1Zdv62cTeoLTHBdMo) z5}>j((A8Ot?`9&9E8A-PM3I121=$}2BKA!xntpfcf?vY&raj3K?sPNju9z=*ru&Ns zHf*qVj#T4+o^uUlhdBHz9)H~R(kRxgc>nS!*i4C7uLrgJnd?674T&|8KXU6wl?05> zk$`H2!t5+v3J<_(w(IAv9{>Ole4`NtC~(-XV)8Cva47IDK*uldBj4vp=OZbvU)qEL zO+sa4eS-x|!KNuwws%jEtq>Vjo5I0uem5BPmXaOXPLep^nM_G9yWVA@W$9^2)*~otUCBKd}u9- zVuCJ@2UM1(P|WKVD6Ec}ip_bSjlwzYX^XnV5%;-e9^URmBXnB_iKGrxQBZBlEZUmBF_=W!0p zKZ{lyZ=Vnuvn;aObgb>@o2clH;8DCUh$LdLT4bA`__93D20PL2O?vXM-DC7*GxKTU zf0nSc8Y0N2Rt(SxDwe|o!(DEkODA*P#r(A5VAx3Eo_`dOX~>~CV&aLcAG!>DOQHxU zYA?31t$F|HVT;G0Wpt}HoQJZhth57p`=)~g4>7C}nXEjp4AP(qzs=_C)b5M}V z+JWeV_jcTplfrsstiIm13{I?p7FRotY)`M8O4Wf~mBNp#<0X>Uz%Kj!m@--PD$c}eUY zQkih{U@juiv&=+c0_C+0j@GltP3y!SlE)D83@TtyXCH?b9PKWv?`V(S0Ch&70en6E zv(}9WFvvuySs?Vh&q3)& zy!Ck}d;S3=>voq#7gQ5mm2rh^+-4dZ7u-!SJ1`*t0zP<1BvfG7pUUX>wdCN~OkW-F zuUF66F%DFi7z$wrZ3h7Cj4I4LGf9Pg#o0^jQU!lx9*amjMA@f+^mv#}LD5I})4^e~dc%W7m7l?C(54Bk1;lQwkR-yxxX|{mH z5$CAKwXk~hQ9c`M$Ye|z7tEp1RsYt^+2yeO0A^naJ@Y--G0}S@cZUQN^4Jc5^@2+p z&yB$g;)nfBo#btlSYfumBtxqgB+1{!@%=9l@VaQaehNbz@ntvGKi^%1UmpcO zzQlMTXHCK9B-^!qlfz!aPNC~Fd&l~Q7)yZ^a-t#H!|L&^0a zf{Xyr2xTy0C=4L}a@X=&zX-v-0XPT^$n_S0M+RWuzJ=h2|L`@~4Lplu=Q!n!3Y~G3 zj_F*}3vzy0zaGEis>zeFg+Y-+7~E^mL!xJEX?QhJVlVu<9{?x4bKo9#Q8uadn5~^E zvhRuj{4jc@2bH^SfP8jvdwK_%PQ5uL6Ua;v3%((y{-fWtzC3y&_QvYtoU@x^4-!yo zV&Jx{uHDjeA=RIVPju$CSDnmMUiO3yzOg$dZvbcY{EJDcx#NIweyAer>%{;$SaYdc{XX>t|I;o7TJGjvs_lXpd6_-v1ZJ|^(>pJC5*w@t;5MD zb@kwtc}5wOHI_|ou&blzXhGzCQB~6*rl?27t_!`r9bo8+F|P*AP8@*>nvaPxqd~T2W4-NS~D`?-VcU<50*FX~kw?d;av{Pzg8e18o%@nw zN(Da7YXNrX@1mFA1a#rpCaGz&e;?P$e^dhQfRdLwMtiS5TXf=vZBkv%OFe>8G^FC? zUgDo-uQs@|aKfKYJo8Gl-j7CQjV*LApP0?i}fN2Pfv3bcuRG~2f;sq0O z^WggM4Ia5un$C=|Xehm|`v#+U)Llc5emuq`sR<2ndGnR?!<465fs2Cc3*RMRpcR*(89c^7l|N6TMZ^acGxl;NRQg0T*S_ z+1l3geRIxE^hQ`4QN98TsvUb#EO&iAhn#R5q35#mhw0)G5Z13@Qpr*X&~94jqR+JA z_6#{S^3QDY8 zSraas_apke8HOIY?b4VD6IMab<^CYQ3ejDc+JN$uyo5aD%4c8d*W3@(izYKuZW#$F z0DdI&bGgIntT=XQJ{&o20>{}esl(6RXIwwu*S=9k!#BboUu?a+hi(b@YJR=|_%GgU zQt-*!TSe+AG^m%ylnssyj(5#=&Y{a5Y(G+C;QS!K>HE_#=#t=6AK(_}q+!nzM4hc{ zoyIVlMyGwMXeGfeoztv4 zr^WRKW=g*h$)tYQsoO>&W#KVg@leOU9B2l7oQQY?57V+f8cfygyCVFL?gGwyR4 zLq*K#BOKk!tugBp(mV2Erq^fCYhtkwj(OUf48Ek;5jKr^F9WO&zT82X4Ir{H%7-jt zn_=)-22ccwGVv-4@0p{!Xv;_6q3nNE{q7_&bQMA-$ZYf=tiRM|c739`vu zHM1vdsjUl!^Q0iyd5$1TvT{(wZ;Rzu@yPTW9^RE|n~-=!_gO7n^Yp;fdR4kv8Fo*M z5C}ID%PY!N_DV(~0&)WCo~a}dP{nO{Pu#4uLLsGRI;tzm@ii$oG8_itre*u|mpHqs z|BQ}yE6?Fb?G}7uM)cAE!!J+K@#FXMe)gbN=g@+EmPQ*rv*Pw1sS=X(1|a58b>>d( zibjGq1mqw~7X1A5iype$zLX-33z zK}NnlM0j;`&@GfgEnu*6cnHXM+EiQ;P#%nT9Xg;1uJ0y0FZ2C6UC(zGI}U!U@1LWw z2NDr4>E3{F@YDr1Z|K=G&lyqQGf%5M!ondktuAQFnlN$_Ruv%HSMJ)tVVG^iz#^U( zIP%kSEp-BLxN(tQ%O`=6RL*Sbs?K?aUpEMLT{|Q{BHU%Pgb{CSeG}P~(LOJ}YZ)2{ z%WN~)%LfL;+>SIG&?q}O$DHOaX`Y!K-K_Z}D&tDFHMeTf*|0JwKmWXa+5V$ZrF|2D z4q!{?=!Rq5xdyetS~tWsmt&ku`QmKV!Q7(GsGd~TjX)40pyyC9fb@v>g+PPsFCM<> zbUMv+^uitBCHc>a9k2DMm9WCs>Uh@4V0!DmKH?X0k?F~M^eRa8+|FS;;u2ZZrw^3OoaQMvpkOfD&11ET;A9Zl1d@<)K;xF3<6ZZ2k)ex z2M4VOan5HOB4Q3_#sr^TxQDdpgL>sA(KfE^oo7soinOJGN06+pPA;#LalKe(Rl3p> zvPxE2l-RNDzxL+Eo^d6z_Fe&i_Iv{jsNP{9jctq^og9qyt^Yx74J=?F=@}TA8Sv@w z|Cwmw(`n+fGSg|}<1=dFGqAGZGcq!MPw442|6>0!*x2!z*_i%a{RjT#WM*dhKN|n) z`K#l5{58e$ZIprGzYP`^R(uwEdVJPz&41VaweT1JOK1D`<{z2w^}oFT^8HV_zkJ_x zb|$8O;J@_0*8gi?EZ>&D{r>iWh3y~gAKia<^4G>+_?Q1L{&#%KeRHz@C+A-+Y~Qi? zclBS$_%}ZPi{xMYuXlgpKZEXXc-g{oi-v8gr?tfbNCsY4R zhX2jRzghe1(LZtezn9%_%YQZg$M4_V{GI&^{~uZXPp|9#L+Y+VK-MfppM*SMCwm9fHDQc?(2AjWf!-wRq7NKLiZa z3K8<-aNXXBWtOC)fsY41qv{%pxtm2iGrHQ;UA9khqaA9;O-cP9=_~{tWRg=p1>8~- zYl)y7T4->K7oi!;C^EW2w|6%rSm7)#cVdicWc=q$3V%%%L#=03eS|JE=s_&e-#F%z1CM4}*O(hdLt@~V5Ex78P12KB`1%K;w&;^k1=F#$9hbb zPgwl6(6#|F#&$LF^>LNsE_te8TIDF4#i8tcx=sY}0|1GHs}hr*g!1jJH(T?E75+x%*ov z5Of=k-T_wAoMo~1;|^oZc1O3!c*PLt9Q+*A^QTcI>C&X8)>b3!l}%+2@U-RqI*6j> zC60p?e(y;g0DZ@IFU+OjF4`u&FS$b1Lup;Dy9m!ubNoX^wH&%0lg)eU8r(%dFQ*?P zc-5M09&H7(DBD$`7_w5}eTA_CjSmEzofL2wAy;v<=sf_HE*I?37py=mqH*KbB zpO5t^qO{)A^op)3?ZC*56x=}LML#|r&?`OnXTf-57qdV(J*SMPW%Zasmh@46PlK^x zQwyR-iIy?%bRv7Q+i;r${$T2NApk=Z&&-hB_5ouwYZb}$h%ZU9Apb&00|a2mkdZ7l2!zw-5T~8FVxS>w}|k$%2IeC zjpsj_Mr-WsgJ89T7Ed*PhHwU70nbW^EAS3+!!sySsOxai!NHG?_gp}SOA$Ob9m0k% zmiXMmm#hX*Qpb}WEi4jI>;1Favhf*Qs`t@+*%xq)V%{|~#Da=-rxhSYcd%Y}RcN^* zr|*_^Iotc9^F6;eVj7bKA9V*ik}fCmyNiR-+3~>YsQIz13>ee0ZomOorf;o84|wqo zXSc$^Z5T&)<|yKts=hnxZCzq0UnmEd-yL4n*Ow5VJItHw-Srf}pO37sS5CmM2Uq0Y z+a6!qm3Lk5tD4Ta2+MA?o1L$XtIH6Zp$pJ6g98gXA zo=96iiN_94E$DUop{q-3d0$sskj(vtZNmrGrxgBzYd|R^7(1zF2#UtN9nf)2cFboD zbZ{iWyNRK@JM1SUWJMe*J!>bTO6Z4;sAu>BQ}1)vljmUny?0Quqnyx#cT>6mT|Z-( zBq(*UH|nHB+Pq9n;1e;%fbS{*;3aimmgiS6W6$n#)!k3tR=+|m6L#RgepDV>>Q|{j zbi9E0Tfb{*1(Msn3E)xK!gIBspOHaPq&=*>wCBX zposV}?}NJO5J`HCN&`JwFETBW%QM>e>K4yU8!< z+P^p8*9-B=@anjV`v!IkJV8}!295bb3y?!@XV5Q?-T+dbs3DU4BIrlNFpiE1kB*cD zpCu|OEN1sC>|kK8!_hn##Y!E} zbJ%khB+71W84@g^E5UcD?p3Tgk=-hW!^6%Iu1lp6l%5w< zRh5IT+iKtCAU4zj6m5+Zq9z4I(BG`c`-G)kksDG@S0Yr;(DzHNGqt0!5Z8`_XJ8&v zmer^<@)qG>*=~G zWU0&cE0s9fB{PHU_girndMl)q;}RjkX!bc$q|SR-Ai^@#&0daR9XLc zt8-#qp(q%I&OQTeH*>D`bhj6g%>OL@%?m)uaB!?ZcYa0XsZC?+!7&GAPG>`O%f?sr zG&-(!THqeTq232Q1V%_{r)IoGmDIK|>GA-Z16Hgz)M23{TwC3n)QWm-)JD00}{L01GKECd@CX2)b4IEV6$;DZF`{q^otMWMpCc9CZY*CRRDHF?S^(iHP&)l-w zuABsB1(v0kzp^5B#JL%l%+ri_wDZtH7UwBc;|9VJ^@>_}WGS(?ye2ucg-hH+K?b+c zM;Zjmi1GdB*@#M`oB)_AT)CCZaCgKWWV=RFa=pspZwkl?K5~9x+dRxsvs;u9-Ex&_fdYX`f0CFh@T*(-|PUbQ20;uD6yNS2!^#4e!aEo((hxUKor z2M0I;d$oqP>rhlr11*e_(@S-MVCYhsYeT(2AoL0*=AnYqJT-@aHEWREV)3{0z%(Hp zxOhBjm1D+D+#?6e;aV{J8&qML=02|3b{WIA@NcJ~<`BXX5!kW2dk$nodU}lOGn!Ij z|L6?e?ijCFY%nsVokjI&t+A#({n2;w)Qmh+_qMfk+0x_ga;?qI444~pqP=~N&Ir-Z z2tF3k3je*g@2N?M6fn?;%3>vJX{F_|%;*HCaNcL{sf7CE=Cq8%BY;gXV+(p%zyyA- zG?#3_p)S2)kx^8vpSMZ7a&GY&mBCY8tZs3tGKXN%&L^$xF&i_r^z0QpmAWq}%Vq>$ zi+~|3h;?HG9~+HLs*!Iy+GKr$&_&9-w5W(-H6}7HAF|9q*Fr!eiDxk;)L4SHatqOo z)(9NST&rPkIWU148_VS}-ZQyeHwmtRXWvo?*8(%2&^UZLU>Dk!n&G0JQJZI zJX8{@VU^0@ZR8bsVfsr}P{Yc%;f3r*XxXPetKq|pQ~#}xW&CmNUa)yjtf_10u;In6 za5ed|Ae2kLnbWEuzRj`OV@+$#OZXzga%8-qMS6%IX_j=EVtQbg>L7w+3?8fdu(S%D zGji5D2)oJM3d@Q;{dC%j<-WA4ZXV#aM@F^_^GZ5g?wg@d>>xq@PV(M*t~QM9<>^f41=bm(%4XN zF?-d+l`F_2x4jwC$;t3d^Eel8!*sg8)%JmPawH%-o z(v_=&Dx+y>R{6iA8h$Ns1-{{I|G;r ztdVwUSLN8?&lNe<`v{-MRu%`kd1Au`jHA|osiDYJd_Jd}%KU2INP$|SB-#)K+t)OO z8m!n<6LE^+?dnp*H4o?JlZT=1-cdb6St}}|XzV57<%Qyf5O8@+QBk8f1eSzYDy4Q* z0!p@-WJIk_F=>nj3QrpNReX`55BRYX0Vcj}#=$A|%N!K8sn>TXK)kuw8LQYJI&j&3 z##)4{fVUfS(DZ9M7|d;0uk2vjJOq~k)LUSx{{0^Ru=q8!y>El$(6F^%6MaC2c88$L(4O1I4y0K! zsncESlKri{j{uYXpIe|}!H8+WN|D4R~|2_hj0^hT&F!Zh;XsMDG!I}aso>YCvbfJS_(g3Ob=lpAcaLA;w{&0a1XF#CP;h5?GX>Rjm z-oSIg>Ugbgdp{$2`6tZn5+Xs>B^b>H8YNIAh>9f08v&+^qb7pZXIPO)@AKRO+$5;% zADZ6+y2pCSbQ5po8Oe<+$qtl8lgvP8h71aJo3dIi6Q9oc{NyOHMfZB1V7;T`E7_3VC;90yPI ztL*6PAnhO_2&tdb#voe`eZhP0b|8{QCzyy)7ADVHoRDP)z)loQ2Q1D+QFZ|y6S;wJ z63GsP8u6Ouh5i=v@UtQ$p}{<~drI7bD5~{GRiGs=kY9f?B3FluUmw^9)bcAphwl;8 zdjC-ml`SN>Dt0vO!4tLK%RBBGH}rnx9+MsTao_n`HqejPyOOfY&KV2cJ1dn22B!ek z88EYfsRlmP7nq;IveUf ztUfEN2F-YF)RWve>u`zU084!(KA)TQ()?`IoyFm^az>dd!;t13L3Yc7odMR9Z9&u04fya2O&%y83@50S5=Oz^2 z{o0cB)EJ3LuXB<4^Ixd(uX$$gAYh#kDX|IQ3lKmSW&H^QHJgxfhJnrv^hNdCyz*)* z3*gt)QhfUgU1>X3Y-IX?3#gujcVs?y5w;P@-o+n591%$FWNh34S3(h)tR)ZZ?le5m)&~)M! zVni+UQ`Tkrp~iPW66QP5%E}`O*gZ0G2)*ljKYV61eeJtWf3iB<5Dob5row(5GMeJU zb1;N!FKa>|^odHu!bmIjbUgx~>B|%Cw5ecL-}X!^9{YCzRw0G; zB4vZiNQfa!sk>z(fe#_O{gn5C63r+@3Tk1S44>ts;E!UvaT)$-V|c-C)egpYMQ-1B zbl}9l0vW`%p;j|JJwZ$vE73A(%JZu-B?#{wvI}C}?_M-TU6SbceeUzc<#w_C;w(gE zR)#vjb*!Hk%}*#jVCwAkXVbi$S)kU~_HybV%~Vi;=D4)ikirdR*yxm9q0u?!qp^Eh zJ?M|TFtPmc2Y!F69>dX&M?UHH?iQ_8M^e1KVc1LYG<`9&`9yTt`_%f6C|<#xoG)^$ zRLT$U%r%1it%nYRvDKHjVlckNJ2D$b`_M8$kfF8wMrL5 z?^RcsWj|qJdRG9cTz3tOsv^7}0+-9aA|H=Rq9uwr(V|x1P=9yV|F&Pukst(-Lk+dK z)nxwO$D1m<+OeDG?d#6f;QLW|(?VsN#^L1NSK5z#d&E+II=ArQ`}z8I_bJOdL9lMS z1e3$;PL1-&(`vsQl#Fvl_wh%-(F;qpEc79JP@z3@T0#KQNpSR`y{=J!^!Waj1>bB9 z80IcvWbh&uL<0p&*$<%Gm&IlDw zJ?rJWH5REF`I=o_J8vAd*SwoVg1Y-7 z=?Gb3+kV%#eDtOD_T8^|G5W*)@wNX$YT!&xH#L`Pc84dHoHAN1iO#V)1%d!lcs7E4 zM96SRpqrVqDlJ9rg$U=A9t}ezB<~L6h@KN>pdUGF5~FMos&khKvAGX4%wGI538%Rd z9dQB}UeL#rYTY_=;#kXTB>0hnDSxbeoNJ%GZ4cX#I_syNK-lkC0czL?zCTwKE)s;Z zKP9Ayw#6i>?lf4a)ZX5;$D}Ztmyh4ztkN_beU&7Kr$V#Y)~4xvGQTz$OMLMw@|$be z-N)9Y-?`tp?@Cy0+L>Q|M_yfMy{qxdC@w&KHkhX4sOH72`{62qi6m^F(4znTG4NxL zejqXg3e=w!nsJ(Hl)4JlhIQT6Yuv5>IYK@V3=mzYpb)81sQ~F-1Oghg;71e>;$ap_Ba>}Xbm;Lwc`RLjsC`Cp1uOOf}r6vXfs)?7}s>gYh(ez*JcVMaaHtW zk1@xMcY2k0s^bgZp)9gN!1gyl6Z12sF|lpHJpDOTq|MXD_joW(Q55^v1C*v4Z2q7_hWOYmurBtSgza>-BiVGieoz zJCIGA9&@PDF^UsuU=4w1@)++COYoE7k9GJq@sJG@qiG?`(K7nPz0+XvC!7zTuCr4oyKk@c5ZG4R+E$(QkR!8^tXqc3^eRCl zZ)VH+<<7vv{kzW>PI@{X&s*&m?bF8dEECS@0YTC_j#&+aS>4x8_&F9YRkjG@uV{U7 z4UcQBm)`~G<82P_432?&#rMu90orqw<#?dr6X!ztZhLo1Vm z7OQaiydCZqkVYwr7)HY~4-){R4=f+yNt+~uH6j>~;X6@H3 zBQCSLnwmeEZ5r3SFIRe+)&TKuki9kut+5IGQ#NP(&Q<_B1Crk^qki0juZE->Eiu~ zu+ngq$_O+>^V+K^nzvflx;&MYS7yKjyK#Vk;|s7)5VUoKJ#eqY?Cro3CtEss-Y;2c z;%zk^ufDRrO21gXy3py@(Vmlfa9k-so4C+i@Wd75diGW}(`u)GS*!k3yhXM$@M#7+ zlNbzOVIT>yARu9+2ptP^F_~f}&p-MIBIA+Y*uH*l6)6}GoN7R?v7v9?%#?9R zs7_sHGbtL<{5a}RP<(`~xZb|pIhmFR^j%-}4Nh6RdT~Lg*Xz7r?s?k*p}6Qp8+QTI z;rqh5`$?6WMYATrTnv7(V_6`oTI2Dx0(YjWT=@9td-HNb`*dZN<~{ZS(;!-n(^{tM zy|NfCxHPW)g`AqvW6cCJ5&(!r;?zoc*FK8B%rb_vsvn zc|?;__iB9Tk0n26n)i;FM|%F4_8La~Q~Q^AK64-A$%P6s{?K~CP=F%;P)mab1Zv74 zRgATmPR2?a)u1@WA>f3Zbd?D;0)$z=`~h&;2&T_>U~5vSE&+~inK`F(Zyq#$Ih1;PUlHPPtxq!<-*zT}O(1I#dW2vD9T@c!Ta7`3 zKGCHXi&q+hKBu?f>SKfgRg|o1)wz!fx|jossmzxHKg`)K0^H1Nu&FpDlj3+PalWf z+*fc@F987qy4EJ4<*dm@rtQ7mi^A2>xk2C#Mr@`<9PY{tIhp5# zzSl$~W-D+qyL(L#5Mzz{aYH<3srPb$TM6=6{rRuK-DLP*Z>rusmgZt1aLYEt=!W$W71VDyDaw%5XJy|@=OvWB15(ITRi|qci z>szv{H{Qp{vb?}0;`*}9w3t+V6}c#M7n?5Z^0(mL*dnhw9olPBVtIAVx{O;q*ZO0% z`#ktTaMM^X{4u7CFrDPrT|j-7auan!+SM~XV}S|Rqk*kb`k)VmxKK5@W&S=yO{BYK z$X?7OnWURq4-l($4viCuDHudx;V9`gibz4E&$D|&O;6j>q;#OhW12CAuY@_>rGnlowX{Za^k?Exn-kz^? zdPtEcn5k4H``)#Qe`;U7`CjMne4(B^fz)Zn5@WZ`eSLfu!)ac2iM_D(e4!}_c*I8s zy`3MiPH?(<-DP|w#!mJ8KDYmAp#o*0f=*_aYMQ3pCp_E$Ocha-I%K&sAeJW3B!p*6 zXn(^(9BD*83-3=>k3CEK%YbxH++4`t$~DBFghiW?Li`b7)DZSmCcG;KUJ19Dvy@D^ zk4~2RyKJWetRNdkvXB~DJJn7?MLDWY9y0P3LO!AJgZ49Bmzbb+npnN~+GO2BY*fzO zvSN$Ox6>n2uIpS}wqjd5NVa9T^%GkJjq28%Q(GJ7U)zBP;fo&-J2B(>iZmA%?!zWS z8yP_rw!;f&J4q!yk&oN23b9PVkQ^}zUAZ&2m<9ez7J^VH^n5d7h<2SD;Wh##O`H$8 z@!3G}VLTi!Y53O~m+TUC=ixh7B;1OXj@j7KB3bty}lbic$ICH+#KOU zcKSo#U3<$ zHhCjCf@5W!4#r`!`$qF!t9Tr6%qZ$pjNSX)8UlnLmr(eKI(l6 zTO@I}u2DD@fOy1#Rou3cRrBh&-A_XcCAB7gVH4wMhrKy#Yi??i72+-J@hNz7wWd35Xc}w(DqGmkz*>=K4T#o`laioT#I=7zY)N_G=EG6=Z^{+b)QnNSKsqT%Ia8FkSrW zfuh%PUZ82}nECGWIKlt|m*vpcL7r`Vyh`Z6hWg9EjN`DB%e%j~tob{jQjT5RYr(Az07VyGl)`8+601-YGLJHs? z>Oy_N!tz4MPV+x-z@{-kAmV}Ld+qzOZrJafP#-1)@1sRB5z^(w?|56v8@9*aKlM&k zXp1W*U%ihq*TylJh}tq1eBLi~bvB=-?OHW62D+QA9&-+vSPkf^f=ubvxdv%NiR_^V z`sGQu561wO4ISA>$Lte&@7nSQpllD=Io?L?WP|~oN3ku_9oGr)!InZOrAr*mYf2Ym zD1Ug8VqFA@SQ;{?=j%#GuhsTN8yaSLH()UmL(mvT1QZPaa5*k@k0~h-D;@_!)|gSC zTD1G4L_l%#!X|9akP;7uc3gdTpjg@JA zU5g{;=VR>2$%*TsKQ|l!t?TD$KjFS30OZSjaS4D5hMw|P>MwsuX;dx_nV#cM<7ODN zU+MwI-Kp)=wk7p0T2Y_8D^bNSm)MJAPGvJ9!Q^&zCq4031e_n&$;s&^e88_isww$S z$5*upwEC1FlMRA-G|;JIW=Gmf7#TN~=$9I#V}uP7XZN+vZEmSxs~om4SI5^++Q&YU z-UOdW^D4FTWCaFOE(sul1F&IUBN9DM$Qgmv`4$e&lcs`zjubJ1jQs{-rM4yb6P4Ui z*9zs?Dsaqm0hs&oy4g1n2{%>br0ltta9aLJ+Q1{@q)J9ef(+29_SzIi2Bmd>8KD>jLYQHe9qT^hd)R zWYJ==)I&o0PsjcTLxWnk@~4o=zELTQkbtd(9fD==T1zCtB~Q%wA>9awVEH+eUjZ0R z_#{83-j5u0KH|Dp-(&eN&pV5*x);`mnMj*K7 zH6Zrg?W!QJRG+88fdfZNEKXh@`wmrTP@e&uHoD7TUEb+YD}Sr&VP3nHMO_{AKkptN zHL^^)X|RhNaFxm+mJi!)CUXoXAT1Kc&f1{mLPNHT$85_U29FS{3E_o@7k1KKr1_ z<7Aff0X5jZt#T&gFIZ)~F%ExH79&fNtM%X*CFBdC;5l~S9S7in8g8#ajAD1X{?3K=&K zG@l}fi$gG-_C>V+%uYV$3ss6_vNx3UzO!4A{4&E;VZ*O@p02y^pe?~mQ_Lfd;rsnI z5Ue}p+5Vw?SdJ$`kHq`2u&9W335?MR@LWr~Er=651Iwr+w9BA=&^90mnDlrLj~@y9 z$Ae<2+-=6~9HHSOyV8m!W(2s{9RP?SswP$uI{A8j;I=|xF(cWuibTuA0;hLxR9;n_ z7x)COKq*L|AA;pBuvM&1`wCXwHCaSdUe8mf?nT%Dr^b%lD&bUeg9X1ovU;O|cti1V!2Y*~!@xHYy8(8KSDrx+$Tp0vRcF3aPlk za-jhPksxMzk$Eg$GDx*M8Y{}?bHP1tkIPQ`ur6O! z>vpu`^X8{*of4Nd3ZWQt%~S&_H~vVCckgh~W~_E!sr9^+wC!+5!}YoEZBmA6E@HJ8 z9p-Tz7%!*@HJh0<{r!~q#1xaB?kAZJw*>k})O6xOUgE~lY&DC-5Oc`6Me`2q zHoDSpi_l>QFqU_Vj=}W`l)bbbZS!E!sF;r$ddx;}eS0bcC#)akRgP*aAu?}>IWB>a zSC=WOx)H*@tBDUfRp{C0e*ix~z`s1DYVl~y?FLmnFbK#VaeQoFhWGMx=FUHJUbMSo5IIH~x` zswIDHsvbMwn&qcAJ%zQS)r;?)Fz~A8bRKtP@V<2|U&RJhufHq(6?Q#v-S}kZa;Ain zC){zFIV+Fm@%t`*&dmZpt3)5Qqf+oCrz=%LeTjCL6)N&&eQzr!6>Np0D$0lzn58eK zXoZxPTm*V3NLKWDKxQzig7sK9&7xHj~{(?ry0*398V) zgOqlz^IQT*T4Qss!i=jrsh`%Zj$ek6(O?9Nr&91{x_(84^e?SLclADnR8e2>R)Jz$ z!}?2Q&w@YScbrT(bn}7s{sTUFrgrXCH=o_na(*#>QTAT3edg}zBdW%xe)IF1N%h+< zqF;WWeii@0T{iWex}VJ*SzR@Ie0=D`S2sUDd*#WQqE8zV8+=9Cn97+IQ;T!zN5#u` z&c5l58$P1azX*2zq*W8$WmaSn96=GG0>~^QIxx?WI3;klRdXZ?Xt;;5fxU(?B`P$S zMe|Y?RZ+5YQ%Teh9iV&9+VHE-J1qRSm5z*dcfxJ!O;A7o*JgN4chTZfdfOPqv|j<( z^|x3{hhyw*v2-l`H_o$n?++dHPF}lsh8HOwglIiL)J0dSNRNbO`kH(<;gvqV7mZ=r zTt5PRAg6*6i3@$)VjNQCpjNeHgMt-mC88-$k_nQr+(s6fY6w5UmTW+H34G2Ie#ojV z!PITE^nALp8GH=l^l4ZVwWuQjps=Qky1;5f5X%|>dS~d1&0e}%X_a`#D@TnZ_bfTF zq|Z~YwDjGPK7U}(x2uW)Qmk20vEsgkC;!M4U3l_O>5Grt@ba3vqi_xB44RP8qo!vB z9zm|aR{$FC2AXXb7n=zVNfF5SQO*JM#ep!+C7hQK+H`eTKv4pCxW-{hzi}MF28i&V zrou(=8k0Q1y&y+2ItzyM&cL})2do`|)4`5F$ja1qb^E8_s~6Csw;b((QY4T*^WxJ< z^~ym+e)Gbg;NEt8egDxLnB$a((y1uNEpR`%_)0SnH}DuVHrRls2b)k+a1~k=+=Mm< zB|GOIHgF`o0j!Feoeac>&Yk$+B+I0avUGsx0p##07DR{Z%s});8={+a!BAFKAhUIk zh??qj>N2obHz0C7Cs)bJ&CL}Rpm~a+`+T{60}RE;%@U1>o~4USuHWZW2+0i?4&NFR zOkwRoJz})sAuWNZ4yH4t)fvqqxws9#--4oIG=KDtQW-XVGyZlHRd|OXgX+5 z_6+4lp*pctW8+*4;9@*u#_M^EK=A4c{L-8K9gMs0*cg7|WT*fA z{sKF=IL!iBN~F%1A=i{27BH7x*t`9`viZLl#S8@Cv~ua5yX!8D0W-RI46L(=Ru%Ad z=0G+gS4Y_4&bu&EEe({bl`--dWrR9htC#DQHu<0EJMTH)-~B4X6ru`cle}5k=R7Y9 zqKq??S5k@LcL#ufIjE{B8^dm=gQfGHL_-eC7;PnIRD7dVZjxoha?~3nRb_OS+wIjf z;&HomP_zQ^U-3B@RR(90iRNTfpW<*Eeuta*WMEc4g}#f>M9x4WXPmzQ!mP+(F+L44 zwr>W~W~in-Ly0gmh^bP|zh){CB2xJFsQ=41!Eq+k(HdspgAfkVDrN`=^bXK)yh2sGv>B9}08Zb9dM%1? zD|IM2nx6CFi{s@`c-$j+7)G6g@cqC0I@Y&hLV6+jjQlQr=yreq5%Ye5FYlD$HApmL zr=%~V5%nzSF$sE9&}Zh9Ys70L0>nh*WgM3kSyH-6e6qwdQm)8@&+t4Zyhw5x-peq& z$Pci?0s?Y? z6IgYTo)a2!+||7pK|69>Jk{dQrli1H`ONCbjHwBk6`ud%AgsMhB~edLykbbriuB<3 zKO8-L+&bLw*Uk|)l1k?G^c7onZ+aZ>zi@*!IY$3gIxb+<&z?4ikCh*WgsH_{gwRNg zHQ@QG>hk%VKCdFP2Bt+LnNwY^T+Defux6KmRfXFiMiXOJ{MbJ-SShYaM(h>ezx1YNZN-YYeB zzoe`Z)5dPBNDyd7#k^2a78M3~$j1-$O*9tt8(5tN%=fM9LdUkEQYRCRZD+1;t4hj{ z?Dsx=Vfr(r{9fwix1^icqV$(=Ss_!QlZYV>1=;_5#+tI!&!A)-kQJsp>bs47D&2J3 zZInyQxcCKI!45%1s2rUzC(rDI3#0-$rWBM8#N#lZbW}U0MHfcdRB4IKCgX)pMneU; zv3P>tkWeTM2s5(Lp!qR`Ja{($+7 z`p@@WHEPM!CFy_OGI79FDSSrLMKy6%^<`JjdYa031jv|nY&F22~6ET}CQ?W^}K@bRmon1TG4=YflKGuinJANCLu!w9St01`$_emKkv zo;Z>MVNDhz?%HgOvXj}h*%PzRW^>uul-(&vB&4g70G4b9MT^hYqKRl0-9%HLZ-K%3 z`9G-yF8!AhLZGWI)Yv@y%7&ID*|;*%INk1r&;ZeSx~D?e-67s+r^8HBkkXj4uBj!J z0Yw!F9>LN<_x$JxJfQXZ`Yo3|`1+(3x7;zfX?LHJ>+x-KX6;(Ae%94bRssU+JU4OZ z#~RRkt?&B^qa+1`oj*6_xioX;&9wR8XUZquU;~M46Kx&w zZJt|HxLhyYJB7IFln5R4``Yq%U)4ISz%GoRLL7Avh!`VL3vx(W@(GH-5RU4;r!>L zdW0*C6t?36)HAnb4WV1}ZSX^@j1b}0TDotfLqLf{K}G`97p)>t??E4xF#01;?R;a` z*_E%&UwJ6~?%s62(rd@9nYZDNc|#X9jrrNZPd<1V58Zu?4EkXdesS@-sq3Ep;g)*` z-u-*(Vb_8@hJx0EC=VTPM^TW22m%Sy8iAimrGZL?kLTSTxI4%Of}=x3K&`=7gG?b) zD&G{^7-A89FUkrb#*JNC4$9Z@YyhlS$CKcM#h0^Lp;FggcWhd;>=^R@tdDW~{C*dlBTkVOMiy0<-ycI9pbT!Jiq(jSy`+=@49Btz?}upQS>|Py z=|E-N%X~i3?{7dNy9_vK(w@Zj9x}wYwm`J$RWUi;i*cR?ze#qrl&xtUI=0+Q14~!v zcUS9g2%O&448)BTYL$6nm1Wi_pdnb1M4YnC~a zVXpv$ijRk#5+Bad0s%1?YyehhfV4#8Rs)BPq_NI;&tPX67(q^LBL#=VScJl}_snb( z*$TY-RlTrQ!iYAl*wUi>d>rwL-Y%#R+z3%_0`(nHs|m8eQfDlcdl!n`MEE5@rdaMuHUw3*v*S7XS;?BarviK zAFJQm@lgvdefYI!f4unAi`NXhbxM$2etl)#GnrPZ+nyCy%7+m2hkb>_L?`1 zW^ti_!%EmmL|ot)i$^)8F&iE4x`c(oYR78GvoAPaaPh3ns>CaMA?6qXLIQ!9jhjV9 zi8*yI&`%HKR+?prZq>1_i%Dm#^H%43PF8nLbk1@vcCt=q8(C}i3DFjL zAOQC6#nqt2ZNL3TYYo^CrxQD^BVIx^Bu#Aw8nH5EYixFb$x5C|4pndtYyt11=gdM@rCxY>d+`W>y5*~ z9kXA`>1VImNqaRiZxy}ttvN;3ql3X{?IjzXr~iwNGJ%R7J9^c~1g=+fN;F&ZkDf9H zk4zj&q(^+*`Z3$_&O1MP*uo$GK&K!b>1iZp$<~eDF-LC}and`D*19AKD6Z25NDsLL#QDK%xWv_=uS&N~Tsl3&MmhC8b(vqQpw| zqU4EV8Z$gneM|2N0NOulv@3zD>pr#NA1w&}w5knw+`8dRn6QH~y>A4OS?8>&Cff+@ z=}&7ufY#S&O9X__lIYYUL;4LIS@22gnMBq24Wp?%zQ5yVuDbnfzaRI%H+~*?_9*ad zx+hJ>^V*Sg@f)*P)>9GA9-y54kS68NN~ywn4L^?xdG5GtvSNA>xmj*x)inAl^&|rTC0eWWljQ* z=^jXs3CnW~>mafm>ot>5X3r#u4pDN%1l}tMJpDQJc2?3rG$jIbMc_wAWk=smp9)uj>a z5e7%ibQ;*3A+lT899TAvF#$(idayOTE3@-T(6p4|q3iPU8v)rri@f!x7@w0g@=eW6i;% zT)5N}rPQv{7h=as-!tBbeNOm?jfZ2;`k&3)U;2WMYL5&5ea4-Uxjng2Um6=61(CUayxv;l&=0 zw;;?1!-`^MGQK37OUYts8-Cw(dNtAA;MI{w_YmNPi%e%YN6&2lh!NJqBut+PBchiy zTw;p}P)tM*dvy;D#CBM)e{9R_nhb2Ti$>jNuV8zFC;aIGc0ljJBq7eI8RNY4v?q@x zXd+7hyeku|G-mwUWY+t9_{XgU^LI7Qz0)_jW$vAK8e3cM_YA99k5VCM&cAV*b=t}H!^Jk)FbgrWDU6C<0p$29htL! zduU_pJ-)Fc@BXN4AzRpf{k$#92i@AamOOrSvV7RdZ_{pY=y|}(rhxQR6hSN7kqa>N z<$$5HtSyito}ITOkMLZU&zs9k_s;Ou=hlZ8`(}sv;T&G3ukfx3tnKB-Ddr0Ax{3^tv2c;|P= zzkDElcIVA+Eo!}Q@xY~5kMxDN-7s}ab2;9QE8pJt&D)35ukO3{g~#B9`ZWRG5yfs7VR8)Oa%IA&uB$mVCgqK= zD!bxH6(b=OniV3UHWD@SX{ASWxd47{vLY*;PDGc9C@)UKDaw=H8ggl>@80}+DYWd` z!Pk+&mv(W-1#G^jwqx&3v)BNT`$k9`U8X{;%_&TV0CeGhA1>P)ZrncQp_4c4ezN{p z)5_;u!KLFLJ-&YS$QAR4rJJ}HADA=#&+qO@pWQRz<<4Ww*qizeorGr{-nf12w)br> zWM+b#HFVBgBQhJr?T&3C%RBwfJ&xDe|6_k(_(BqAt8fJwgID3rSWq>>$VAh+fPI65 zmowti>?EXV4aijWl-1*RLtsPwXvqh7+HAB0($P2IRknXIs9v{n(p&AgrdP|~PBDE9Ydx5o$u83~Xe#k<(R^(eibP#f1|#lrMVr|&;DWpR zOnGcd#l&&Rs#zziXRw7ItyxjDFYkkNN4lQo<_X|;49Ke#{k>H#(Oju;W;+v|Ml^$P z@}Tq4=%abe3TAb1hy0+z%G4kunT=vm`mPahawl_l;7NIplO4sZk~hgriIN}9i&ZIX zM3I>s$W*Yh*vR)!@t}N+i$h_Lz=ezD9J&!+UxrI*aYV!o5qpLP*uSawp;h8<91&EY z7m$K){MIyWesK!<{#L?RLJkNhPnSaB6G6_4O-P<`<;@Cq8_{$wMc9%Ra}hTYl9w zeR9{Hs;Hmy`o^~P>+vFa!VRNl4^5VotO*t`9&^i~_MOV?CG`Ua6ox8hq%OZ{;zKiM z&a`TeUz7W}eJF%BnI+@21==x3r1#@fDw`}QbUE+`A!TqfRyIR2(LKaG!%Y%-f_@Ml}@VxZ7 z@3VjaxL3SG*${Y8cu@Kk^AztWk}3l$gcZ^aV1pT7J;Nx1D$iaZbh2s98gVT)$KTUgDprJO1_29(dtl;7x z8wB>Br$y+^5_(9FyeesCUrd3@#*9oydg03DjxpI?mBzEu9qUnx3Nw z+MX4#LmW+z_WW;S!otpK_wJU)OeNFeG+pxp7Q=}#!DA=a?95x&darxz=*zY>Mg2Lm zTR+}={KI<|4F3h0-#LA1vS#?WTk0$C!fyfj!{`Y>7^^_05_-%W?=E5@$|%WHCMlbR zP2xJ`mw1nK7}EiL$}7bO!-x_yAm3b?a|1 zvlws11YeYo;5w_#LS3rU+N+rv8=zsw(W{JL#dkWU?2z0B9aFX&)m9@8PkQ#iOwFH~ zjOQNf+|3qt9-jSC^Zn#j>wb0t`mKcf3Bl(Veip=9_9xk-I5;|ZlV=07PTrv0=D9Pl zF0@npo%eI`3+W4wnr#vCXv!M#84esz*HqQzRAgE8`3=Jx2!=uirBb|P4G8dj2&o>! zYfaP|b0vx1xksJr^@jMlAtZT@ka@^U<{u7a8%D_8;5vfakxb^b90wZQhTB_61BRSA zuZ2!_wc!({s6oOEX5F*J>XS9soo_y)cb;!d2hRsOgA+#1A8{s7r=R~CWMvIS+7j!q z#74hp#TpBsrS7i&|Gyh(rBF6Ox3g0@QbAI4@pO$tW}5x#;%EDL2%B5dxAWDQgA8as z-P-y6(Kt(rtJ0sdh3Q!OT<**T*Uu*O>!;JRtcZFco&uM*gk_&yyzD}Xgq`?!V3cJ%4Y~J1IDDNswT@s z6eU&D9ID7;R&xjf!w_Bq7^Z=dUB*juWr|-#^)jr@MUJ_`5t4^^BDc`G1Px^vds}t1 z7+~NL{2tOV^IVHHr*--q-Q)@cz&>WmyqVz@!}i926C5^@bYqeE4x}+;`~D9 zN8<4kQDjMSG6b{0-JO_a%j}M*w2Vr1qJV`m2aoeLO-D2@mboO4VT>2`WiE>KB?|dh z9Tb*X0SsQ>Prs#9R#WJ#`>fSoI+w7>)w$D@RGm9LL8m5(YU?_hsnAZ>W>zjUo1&}T zgSn{L;;3bnn0A+YwU*;KWYFO8>#NesBTRXq^LYO`JFD;$(Jkcm5o4V@mv*kIoGtEx z>lk~n8B<9aGh}<<}d%t ztve5vKUSD^#p=}j;|o8y_o1?@2V8zf-l~Q^gI~U4bf5W`r97hV16KU?vrBeN9kB9b zT_mUfw6zOsrtF>f<&>*O-#$KCvtrt`;(oXMeR%1pSk;J%;DQSZ-0X+UpP30DSrK{A zJ=BuFXfd*B2k#5B6i!O`Vtog{L)fA3aP8su2z&HBE=k~Bx`>EJQm{M{X;N4sQX9F= z47&u^wYtt@G?Kw1nf;_rmPR_|kl}S~@q688?9=ZYqThlPInuQPC;Bk`A(?7@3zG-6nMDPB zzFx^!>MXr>k5dvE1arG;Px*P1@YHX$rIf?7~(M zp)E@Qfl?@&1-h{avQoW{`f?X-~a?2|8=h#B$l_+pa8Rt zhOcSh8sH%NG`^RkxhV1?BGe&{*jq9JgYY3@;kr}1Db9!~1~jqsM2Q9;3|uT_pT2mJ zTyMi4Hx~t58`_X z7po%X><>h*39?US9aH(G45#jC{W@D^NR9A zRn>;ooqhAJy{2q_MR{f)?aNQ_tBg$gQh>G*Pf!Dw(nhS`+89Bv(ztZqHwi=%Ei9t_ z0IWLAdh>1c*oswW^FOe7Goa`k{OznKs5+VLH=cvZ1JKjqc|0Ms1 zlU*BD^4tWX!>Ogis1wHKT=Il$|0d%Sh1owjWSd<*W#+_bg*NxZ<&kmWM(g2>yZiR< zpVc~b+z)Tr@-Xv|FY8Tq%2_nu zkuiUB$Nc#no0%0kqQ1!Q&(B$b0vBEn2VQ^kb*gy+fq?PN*Nv~6!sO8SIz1fwU#SOy z#HaCmqW)Etzf+%ZkL1ar&&}{AKP|~mTkd&jouRhPa>i((UW8Nt(FE725 zzWujcCYR;Xqj)Gt{+^J_%49s7zQ;1?7kJlb-PnoJ@?cP@46o3#_(J;r-?Z|b^oY5e zyp@u(_-|yn>>@dVd&ogEz1bG>2G0fq6|qKgbXRFpbm&ItC0p} zB7Y>SPuM5mbpmuTdlwB+CpqGx-Q~owVX<=7I;qNMA3(|5@@tYOQ0^&YBhmMza%?re_4f4}ueA6$rM zZ9D=R5aRz$s1<*TP^X@mha9LWQb_y}o1ZsoOnzNJTT8b%BR}wT3m&;Z!w8JYV&ruU zlSv5`yAT{!B*i3~WC&as4hEuh2#w@GrpD-U&Nn5WmMXPIP>GntpSmk!n%_|zFuWsAFZe|NiSKZLu6rNfwz>dD-RpV-x_qWUr6A&AJmbAB)P%s1K zqSi>I#ot2kzl)44fX<(p?Ntei{kly!E_@<y3pPwyhEJ+8tl96?mzFO&FmLYHZ`|={jU2yq*@9`y7gM@_Ksdoi z=q?i5uEmJsMV3K+k;i1nPqB!$FbILz`JnN9&_qVoYgRUc&=ing%msUVK?V-nx3#Ux z+DcbX_4TcJ{K@+WjElcS=re)P$Bx{n1T{qRDLu4$?9a%s`g00Izr&&T7idwI_st?G zDsts|%`Pu*PEmwfk#LF@^qmlim`f%<)qg^b(J`dog$OAs2u&C%vDAzT$*S#(rmtSx zu<(h4E1GZGIAdW=bw|%FT?d1*+DxR+rz_ z(!Lvub)(j?_RuYYP8HB|0pri&)hn{^~<*o|Fou@_#b`5 zvs=PWQ06XXM=E>V{chZn-JXqmvih@dul;5_ZcSU6hI^%(C0uBPd>)uuqYZ2}kF!>1 zcByq4E_4o`QbMw1KokR?&`OGCN_bkH96zooufa?(kpn14alY^~uf0F(?sxaJ-M1z@ z^RD0M7av+ux^dg$+m@7VVkf-!@@?^F*M&NcEk780cHO0#xrbls+MtF>Ao4_VXFii|GaPJaA!Q7zI^;)E&J%1Q%BI|!M=Q8^$RlZ+d6yK9(G z4O3B0H=Gf-(_5J<2Wi?IJ*(0)DmU}POG~s>H=N$P^;omRRyw1yV%eOC`Aj9SFE6<@ zTH={7dvUwG_{Leq8vHtd^u}nCx8lBM;?rCL&7PPr3_^ST?yxj_pxP4L{f+Dj7(FjRMY^795<*%2?Nl_ z!U7gpZL9W(7JIdX%8%;cs1A1OV3Q8obWpDYuMTv*49sJI!5FP3m3ZzPelj9z7`_&0 zc2+tz9}gLc)u<(qmy$;&9!8RXOmgDC@jG^eV)iQ%LRMcFyE~tW+&OsOeg3+MJ+Zgr zeb9fJ*?4L5@pvEh;`-Pi>2qa#B|Dz=l0K)8JQ}}=_Sr((L;FlhA12bUn|lHC$o?;S zemK5^UBu>-+8HCq;yY+<)#ciEjQo+^rqs?r*^!#_E{uA6IkhWNwYbbIOHpt6Ox7o_1l5vrU=qxE>W>rov;Y5M%6RK4(l_DXrV9+F= zCpINIoD>w98onrH0R0e`NCOjAM9?@IHq2Rkc*7jmsp9U3-n(V% zsm=*TG#C2^$)Ku4=g;epmJMd{9lU?uAb>Cti$hV?RL9H=c|fLnwagMR_Q2j zyJHazaKm*Luf?4Pp#m)q=>ljnq- z)tPO_R#gV(-8c(YIjS;#_UyPGC1*C>{r;|!C8{$r(cyAA5S9=Q;RZ~f4yn&EX|y^c z&BUNLNP0t~q1S*54PgVe8Ni@7n@m_$;;=DB19s_Y}wb-O;r4huxEO z`m@Z`@oOja_qN>reEX$~+~9BImWg>qi;s268z)_QEMeJ%AnDfx^i*V3NDIX!B@Tb7 zsy;4az4>Y04LhCa9AXzOm%7jU|)kidxLKr}f6%x)qbU9`79`n|IBPw>Hk$xonbF zUAgt1>jTo?FSdzo{R~L=2t#ANdQhEhm(WO4B1=q|u0g zF~{=^%Q^&65(KfBr~-i+byjfmYDOfkFRG0Vk$;K_CK|V2X{<7|!GOXKq~UI2ZDo}^ zBwIX?gKx?EbokS}SXbU3hX2S7p7{2m6DQb3iF{6cma+?aZ)B<{BDG4b{H&-}TZw}s zh=@Qm3=Skp^l7cE7OQxMXBY>|Ni0{$?c;DdeUN~Vuc8kP;5p0yVpBqDCXi`J5z!fP)4K~mN?r#V|N~T5z1dY!ps4~rQP`5STQ#kE5UEa zvXgsiy4e~ep(1okWI<0pbf@o4$1UmY>3EL;yaqU+1)mmZ^j(vwIiO(*MbL*y@ZVtNRltjWh7m(NTS)q=Q{PO3@6qos+Z`TA*y&OaE=mpna&)J z<&(>QbhcT6(QIOwy$6zdHz`FdV?6rU^qUq{6i!*T@y5t6+w#s_{BgY0A~#<%b?5a} zp4z!(PHk;DVXqcFdZfL^-1NX4@p2A)BBin50;5Htr#o*zndq@PZF zCRUY(;vG0^oaj;DKcry5Jsb ze4L6`lVJr>8AJ-ml~Ej{35-KS#>?oNxJ`5=iGshOY+&dY*}te7sCq8@Ip*jAP{+SM zK=I^ef-gG=WpYp@+8CL>rvkbwpuGb2IiV_hWj5~1+Lwi=W(|$zeUNG@as81>~g9IUEcOM~VAz6=(qh^OQAH z39yoqpHK)ciw&mmh3$Csx?Sx}6Z}%u-OI1ry|C=sJKxy8nTx)f9`I3Ees+TnuQhGc{Sod}Xvy`K*$c%k5bjX`!yrOV#A?_)FP$qO|?9IS) zGoZ)>nI^Cs3yt_74_kPcLWT>a*Or#*D_w*l`L)~ipf7guf`HsE3rC&I1b`kM1D%Hz zl8mK@Oq|S6imT{MXwt`2L6Q{A=`qJ`zt(ujN$SM&@Eh!aQcXuxa>4{XOEqt*mZhZQ6eENK_loxoG)krpn^`}rDA7ndY z8^M=XQCyUfRa{b$AODcplP1!$6{KhM31~io-fQ-IV3nuOgKxHh(eF(A|mSU?t^&nGy2B5}x1yL`k%q&yi#(_aYp8@b_nPj0v%joP?vBY$OI zV|SrKv^mm9e6!^_FgFM4bD$*~tXa)jcyl`JHNzeg^yy$V`KJZRm6k^IMWL|}7Zw&f zT}U*FSVV6ozQV|YhCe-)scyvi>GJ9_1ErO8k)FuV8h|qU`N@! zEmK`3O=0)!+g{q(yye>b{JN#%iO9|*WBmphYb~;)wUPRTR+wUic}CbI>=tmI&?ew6 z^&T~DXJIb`Jq#>ofOjP}Bv`bWcAd_nMUobwM4Vse(~5QM1I>0ay`ul#dx1se^{OgnP$VY$J|KgUgZ_bvP!))h--cwya_~+vb@4sfp+0Mq^ zmNI1(E$P7t(gO`z5Gf`KNkj9=8#M&{fi5{E;!y&RH~_UkfRIlRfb(I>mZA?Xv*q`3 zrJPb+ZntGL^E30orLM1-bvd!=lW>1dtZyoQi|srffAx6$;bePOllBP2vKJviU`+%Y zGeE$ZhQctSiaaW{q*ANtgJZA?`#4SoJ~e610IyQ4`@d_A(j2Nom1cM>ZgxuS&}5vQ z6Z`$@!LOKN=B@b4$Kz`9+dwS)UpXz|MEcU5I>OFB%W*joLpAPj zA}SO+pJL}RvD-v&=t|zsqg$rOgeWdEHw~QA=W4JA_r||Hu<4n-jjNso=GeLi*H6-) z)cP9Q8@dN~T=UcW2TvBnAIZVmqs`5eH~+NbFyQCcl{WV@=Kclk|F&gyC+Q`q*Pp(jc??bL(RR>j%FaT!NdHoWo-5pKND53@<0z z3jZQ)Wsn?6XJ|ty!&)(Mt{};_3}x7X6#j$DKcxJM3~F*?W#o%S{>uD-9Hpa3#CEd< z(g~_hvq@<-TUuI%M(+~U={9n!r$kMf$q7^~$+6&h#cq<}q(e3uD1cY@dgpdYn=(i$fm0b~>PR)#tOL9;|hWqYtn8QP((gI4# z5i$PBE6WU>(8Q!51~@Vhd2>z=$-hx7p^<^)wwQw>|e2y z*mHk;3$c&y05NpFFvkv~R3(QAX)Bn^Y@9S1Z7TA|dR+L}G?7 z2j3vdyz^2Zsl~YW$lcS>Un7V1Nw8Xi0txOjgJd?#iO2LE*1%p3^k_iRof2UC%!1l5z`00f+n@|4u~C)`Z< z?peZ50T1J$!(g#mZE_`Dyv+XL#0z}vF9!~?Lnprc*Cv4nY%ce}&%R*}TZh^(jrXwkH5@E!y`2-*;&WFN$Caj%FcQ6yHO0he+Va`gldKxN5J0lA_iZ&PF1w}Bwu%mE) zAu}%*=D48E+2!2hWac(kw}DB?Vvb_WCU=uM0a%uIrh)@Ufju zzS+J1b;Hwpr~0nzx$D&Oo@aK}uX^gA{l(MUdv;Eov1M+_%v=9gSN-Ps<;;X_j~IXhyTQO23vdUXW!CZ9dE`{JJ*y?%GaZ0Yu_fVwGtG4W2CmvzR!*sivQCj zlx9g25Hh%onUI+&y45zP;1mRpsF6gChHe1IVj8mf%oYm+YPIO}X(+Q%0ZcL*HM&H@ znPg?k^gBp_fJ&MYVl?3EAz@6O z_kRVo&H1q(!MFz=S=SqX5<-;?#iqEC?L4sSz9;N#dRr4Tt!Qs-p!Lu{LaNrfU3YmO7Z)Jwdn^28&|n109% z&yUosn&Hcy)G=fB{-vSGI|h4pJh`rdKf^t6d;R(u1(}mKwnTT&Ets+U}yy#y=m|DRh4ZATeVxZxhfmIc~vEO7EAT?CDpSw&n|l6aYEb2 z2?rfeJj|()JU+tBBKn6@mS1A*q0bRy*_q5@1|!BupGC&{s7e~Zi~gbfJJS{2{&=D9cH+jE%bn71wkn758oJ-U;O=Woexy3w+TzcEWmhnEbhJM

    cHWC8JTVHiB`c{*WFgQY^V$CL;wE4oikp530+~_)wx5Nd=gkrWpe;xXa!+GiIiW z=)sv9XL(ci!|OIburODz*>!G@MxR#EI=Ow!)r`s@*c@UYHckm*WR zYS4EBv_Tg!`b+MD+SE({kKy$#YFUQ;ib4jQHnCi}TQ{k*;Yh*opPd z%E*#2OKcOHmr<92Gwi*@TIA))$sB@oi-^WXthn7KYXnK7A&Ld|0IYy+z+M_V6z#AQ zgB@$VM!jCvX(gRjr`w}}6`F2>xU?RlElXf|ZC-|6hwN0(XfS9m8?|JANq2*RQ7jWq z*s(+m!btZsz!Ufn+#I|myQ!4AkW^NZyHxyZNz_% zEh(5cdy=`ddm{b>!N}c&171*2!R|;C0hcPI7Ki|Gq`!nN3=fS0d@DeKP$e`9M}%|2 z`@)|DmB5IM%nAf^2`akKmOzBjunnst4y#HO_=G}c*vo{XaW5sGmeO%L!!b&k&cuT< zi5>|ii#EsDnm&Y{4w88YN zIoSlt`eq>7LK!HV!pDD(-MeCNMf}C{k4P@jQXPZ_LjN1$PWVrJTm1Io>7ML{Dp*S> zPorZkN(^a5q)f%?Sj@^AoutvRG`(o88O&xZZ8X6g6I7VMq};u8aHZY0J{qTEt=P70 z+qP}nwrxA<*zBZZr(>&=bZq07@7sHyv-ho2=iaJ&|GKqm)*5qYKJS=gy|rGtM{)ty}8es_ugcykHkpF7CP8-)iBiZE&p zF>h*L_*v0JD46spoWVy7>Ui>$^m>bhF3IV0C-^Yi%5$&gVjnfx%2LX%7Q455*XOO_ z-}^ms74u#P!}FOvwfmEhd3*`J?;lOsMUZP`lGo_eXp87V>)qOEqgFkN95pkO->slu z$kH_sKIitv7yzu77Lm67;Sapq+L|n`n)muFAH$}^#DMo5%?)!7eVPI-XkQOAvPLlx z0h(w>umE2y1d=>uJwdDV7@xTOe*FNcC%78i)!>j{B}HT{bVqznb)iqrL_PWOXR)3M zRzQl=3gZ#2gYgum`Y|qgs%hLe;Cz97B&PatHj%&Q8hxfRPUCiF#^^uLzT>Xez7;tY zDxHw2^F`7p&BqrQo6z?#F}s?QQgVlX+29M~Qx>adiLI{*UcAzLWTfZ?tdIGQw33J4 z-Bip^L?e>+EadzMm>e&a@`UKP^&QXU4-_5a?h?CvBltkw-_=v~dsOZgp=@ESoDVKp zC`s`H>61${i%H{)(l>=}Uk1EA8t5{q^=Vcb~$))0vm2yh`5x+v} zNV}5=Pv-T)_n!n%o1z<#C=Qp6PbZxEjN9vl%t&U=Yv)PcrM;<=>vPY|%`KN#qPG`7 zXpNq#wZe5x0x;E?#Ta+`2yCUfajP$Y7fxIfLAm z;!n*C)b-?7$h$j@TYD&@Z(aaxz6#gee&i-*BLPPXY_Aj@8BfB z3|9rH1_B4JgKUG{!$!fZA>$x+cSftGFVLA1o(mliHVJRchKOjS$FDCE-;vlzIToG%$x!?W!F348xey+prAU?;kX%^{GjtO8%=V~QY898rkYa4$ z79U`Vs_bEg`bD|*P)0IYpt1UzTn`n{l~hkTG|ZP4GDTqnit8-Jy`D_65j4;uPi$z- zob?VOkU3res>dcrEtw(c=%N*2fD*DTKY-YW`lD=?PflF|W98=`K+qK82P%~C8!uS4 zaCZ|f6lix7XV7l;c$^D4GTE7Yf5aA#wB!D?BuOCx>5tMQOTD&VCz8L9hZ2>W(sFM?1UH}P10<= z<`NjQkGvrU+9CcT1Bm{(KitIFnwc95c{gTQNDbRRL4$A+@rVrr%#q#f5dJU>N@C0! zHX?2SpC2VNY~TkQm=pI-i}~mx;$lJxa|I)AV9sHR4m?>PPNgcFT5L%yN~?g|f*XI!&{6T`_c z1+58D`o=I8(TQ`lcq<9C5DjEYTM!J~2`!*3g#@etWcI z6p(%tEv*iN)kULS?fU{&q-M3tqDb#etbhDj#D`F zDbbzw2k^$ahq3QK8&jaK2!}lx^h01Z3$1L!kkX|q!%fY0D^j)3=ob-a2QHTEZmm3A#lQ;c8T7daYuILS5f1uWY46L-j+8?W_3~}q zHEgFqcwOj^FD_C*6p)3`Vf~cX$5y5Aj#7B*-#(-gM-_fjm5p3MVT+(5x3M_KB!AEHof`CVduQhCZOBBiAnYE=yQT_1Kw+ub|o9*L7O#Z*$d zH4ayt70E*^QlAkMOi!(~FLNc7ihF`7cMT~VM8$NF7=Mxm=BfJ4VOFTaAlz>%za(?9 zLdq+7Ra>8S0V4WO>9hOGtbWaFhB7f0lowV;6JZu4D9$dq?}CKFOiJQ=5npHD;>4Ze z^SvJgZ@SSaPRpDt$gVvRGzm$a4q(D*{!*r-De8<_PUaXe@VtuFQ!Sv zG?_he9n^R^Rb#!l3P~HzEi;r^)-FO^ZP?+zEAGYauNLIA#EeV?GrEKFTv|6}SRrIO z!OgN?FfO`@PK0=gL*FWhf&mr;UNVEmhdKzdVZ+cAoGrt-Uvu^ z1(bqZ9}#XO1C)OD^bJUP5nvgt3}Fs5Rly*AWDd~{+N;q#35hJ|s|>-xFr{lm@g9>% zgJHWo$HWx+AQ<;rjtOvk2`u*y(IDHD0!|YAXf<~p7(^ssqx6Kld|i-vl43~+p9HtD zCW_*%&agR!6z1y66Z1ai>1I!GOi(D&`}?1*Q#ARFfH}Cqq^FV%BB48kluJ?!6rod< z3X!c!pgCdoM@=yFv$D$-jeR1uim<4Vni#B4IV4-9lp;u}NpDm<$OJV?W~~@9iPWhE zM4(L*q4Rzac=90L2Iv#Y#L%Zu-qv#z>Xab<2DPCV&BKZQ6}6b4Y?Y@HI~McjfI>y1 zghiVS70MK24Czb}s4PRPP&JZdhgw{jLPe6HR)5UT=`9#uLaio~g?bEoUwsKXwK zeo}QRlq!ZiF<1>lok*obX#lbp$|+cHyhv$Sj<5zt+?5{~ALC*_XeNsmDNV|_bHhOn z4gvdN_%-UP5@#9->TgODAyyP=Br6rAM3o4r5D9PAVR#rg28N*ptx_d2aIYhZ11z+( z!dWBm0U{X~nu5UAFbkRDei5oj1!6-Zqe?BPvzebEPK;$Ll0T}x*(3&hZD^+~r2?)L z3z0BEC*-!Itqh75pseCW0O@2fV1ED?%psL3RD)`nfe}OGkOnn#j0rRZeH&mVmV^pY zrqm%(hB}z=OS&#$B8q{&l6_aT_&i{st%NiPXib?^QMgMGa)~)$1g^Q02*yJa7(KQG z$V;0PTxTdss6&Pjz}}pfz<~OVuOJSj9wc8Y_Unni2FPNF_YDb?sc>}A&m{E3^+I7F zL4$lA%T~bXWMgX>VR~`G7=QvyLYcY2rVwkiDghfr_Y$m*Csqve;*vhG3A*%IsZ@jp zwGmLIk;9bN`NR>_jb2DQ->J=ZqInq=UPQdeQkDk7EOI10#uaG4r`LNrr>+sGz}rDzl- z)51_N66V&1H&uj5F~|jl{0cg>z%AGc0lj3k3ndjI1E6Ul^9gBULV!a`=-xtN8PHlO z_>e>b5F>DkQHiu4$cbY32KSDzLHabJk?3+E?F`zCDn<+R0`I|;!3TkoWi{~tC&^rL zFfCJQER*lE5{jrMbxQ#TL8Ry;^ohsYOhA)u9CTz7agwq}R~;Dg0i{>TuUADKa~b5~ zK!&hQIKhrdO!XdmN-QY*53;*o#Vu(v_LiO3tP_fF%IoG zjDc?-qF&I&Uwh5f6V#jB8>T1wiSBD0?CihHU4K~qI3<6Xoxk;YD}NcuUOy#&^~s&T zgR*7q7q$Hc=zFI0yH$Q0UhICB^cy69_Bv(ZpR)JM+J0mC{A?(H)_+!x5f-qM#;Orj z_71j}E#@{2o!hki^*D>HfRNQmOee%z#Q2D9l5ZstyE__TbZ6p#Q5X|IX2I&nFE<32 zb->P%D5R(mdfch7C1J!_HKQ~R3Wizd09?CUAp{-SM}PH<`gC0~S<3Q`pZfL?43QbtWfNO6pb&CWJzL8MFjtigC1nt4UGDT zvwhmL%n~MlzJ0!JNrhP}bXpTqq1aM|Y8~0$&}z?GxSTUf!J)7+w2m@Wa4~eYA_f|G z3)>vaFelB8#;wRjm>9DK0=!crI31aHr(ZWVg7J*&4nebddTyXQ?XhkgbV0p&lTR(2 z%H(1q9}9!m`heSz?he;x ztM0p3RkOez`Rq5C6b&f=P#)7j2TJ0ot9;Qrg^P zoS}!Gn~|F0o+&C&`B&mF?HK9_06Z)J#yL6$@~;#RIE+coz@%Ox>hPn%2w2K9DvleMS!2;{`s z#vfZ5+NkpH+nvsftCy59IRR^zerNA{4ONQ^Q1I~2YSk_5bc-L8TkmV?4Y6{vW_Dd` zg~~bs-7Yqxt!=2va;`c}j+Rc^c_VMr6M8k>I6a)*){D?vtn^wRtnSeV%)br~8aXDK zJi4tv!s($qy911ME&K;>4E!~uB zHC=FbF37ohv}9jCk+f{nSr47Ws7ls84&#S@Mq%7T;D@dnaigGn z;g@Hor1xd_Uf1}v4VG(Y(&kNTDagY*j!?JVGQpj*a*w$h3fqcCcw1om(AzdRI^oxm zqkFRG*>)@+T6I{BT;{ZwxjA!zp)2Y3VH|whTzFN*^&9iL?f&%nsyC}1!n?Vx1=gKx z>$A|g68vXfE|IaxF3fmS@J}(;`Y6NP`|kJ|3&P_zOP{=BbKTF!_;q`1Zm-#wnHHEF zI+cAc|m4-Qg>DsFS-iQ)+Mm=? z{$iqFr@<@J_qBQ0IWv!Sa}S>-d*zEAFNQi^hOLv=^x1D#!`vk~+hmMnU&?~_NYz}3 zyU6v59lR;rtlUWXrytv=1=3M7^rh*z+Fj{q{`Xwzu5F{w_p;>Y)g}Ak{F}86G;#MI zJ~!rn#Hc3(5uE+8mkW8WAA?q|2K&xXp!Fv$l`U;s+g!@hkZ3mAI15rd~wu^4Iq zbZ7GC5<3Cn$SQDekpd3|w+7K24DG@R0cUZ zKIB6OHFm1&2?=uA&}w+U<_~>(K-e@308*?}K?GU?7{LS(*D!3OD)~LnMqwmTPFGNppXjmK2(00Ke+84X4e6h2m7Q28*Ll%$ah6GEwsm?jMU}xA=Hz1fNnVbT6ralWCupDkP}Zm8 z=f^8?8Kj60AuT8G^q+fi+iYX)t-dw-sWr`xQ7x{e+uaqs>F2XGa<&BbD@Qn@Kln_G(+@&Sa%EtAI{&QDm91AD$I0^@ z4%_ykYpy#fUG_>FTL{Jbom)dp_VzWF-`M%{7@9chN?pwVmbbxk+rD{|Qyjsrdu>%e z%h6ysBU@U2zddh1*r4k>2h9N#qEc{ zR3Tr1&WX&F0D_0q9S}^RupT1SyId^2L6ZV&iv{C^@!lhShLM#wBv*u(n|HS@s0oa4 zeGtPP>A2a^OXHY2g}^yjA@x*ZR0tN-@SN2RfU2_W+mag(7{UPPD)5g$j&21wgJMep z`0~#U)VuuDN7B^B*k!trsT<7987qI|$0=>dqenMsP4B&BH_2RWK2BX%F2h=g5iNce z?sTq^JoYZ(gBsUch#kCiiswhMGe4HOn%~;k!``zdEPbliT@FWn zFq`e%T+=gOiQqju7iQUO>JOG?@{y^Ics@)9o5iu`7Sk=EYCmg zS80u`wan6DK62Qu;4gqrQyy+BYV9({x9Pe@uX^^=yNAC*3ej~ep^7Te3e;<40X1wOf#H*D-B2{;3;a~XUY}QUe-dB&bO~8vX2oi`VhVG}0f+5oP^@#*TKPD&XZTdv*F~*lDT(#5BJv2urY7LpX3;*o(su zUoLf!g?Wp^K9rqIlfaVe`AArbKqcfp*?#B z?4ggWF3@|hx%ul(>62q)UGvB+N?DD!mOqq zCL6==+dsD05E>yxI3}}WL^oKRVLkkFHmxbTy6VPnMnO#KRN&bY6_v%oez^XyO%dVQh&9r&3suO!#nrIzo_%?fwfS_+OPYh1xk{4H9cKfqfP1KrF zv;J65hKF~w-e+8B#P%Og@MBbT>#C||CppB^M1JmQA8qky;LUTUZ=4bsA&%zm$cyT{ z^!7ihZr`8mj0PTp!sBzyZF=E7zI7Q|e2$I_rFKjAu#(Z{$2`$e{=R;c+3C8!bAdt~ z4$VG6ZL7Xe6Xm-kcKuocv|7gh{hp6$=-guZLUek6J;HMHeaT#A+i(4TIt^|_Bs;t` zYr#>2(%Q^kgU`m*bx5anpT22$-HQ7evW6vH{Vsn`Px;zqgK_y5ftw6p_bSBwomRCd z!-Df9;%?Ob22$0Od}S-&7XAU>fw4jO_YlHIG_i&y{Ij^N{}b+VCftZC+3Jg$0rNiW z^*RC8Hh7B6leUy2P#g->pLccS#*eT7xHT~gAUqr~mRLHA@!{P&{653Ex!yBemKAP` z0{4I%?f0|bs#Fx~bJ1ri-RhqOxb&?LuDZypKgd7*`chQaWrcAuyK#-JYPmkJlKd;C zL?_G(UyriwIFQ}qtVZH^xaT@0c>M0p1anPK(QnbVX0SaDwK@!v!JFLP>G@y2V{aL~ zhjw6&KyYSl%wT%a2VBk#e_mMKrX(-UtuxW%8O*g*-|Bs+Trv3wlnz#B;4TXfSs(1} z7*bP-(7sPUynSreR+}vyK>%ovJhxl6lnu4p&D|c$@$H`{oVGG?V?-v^_yO-q~|s_z-M630wWVd(aXOCi}8ndZ9t-d6}VlJUnf{%&3#{-4fv zZ7G?w-Xj3DzT%CQmawvk&hF)2FZb}y=BF;hRNBj~YqyqlJl-U4Z~a=UC)dTz>18XU zLwujkZOZqXmCATzPmjeD%VoTK{l<@9b=XdJ7u3|4*H3TzPhC8hRN8f@s>M#x{@E$K zG}g(V?O(NNAQu2$p1l4#3a6~OoIU0eH@(=~qVhbmM7su?Hx&L;Ic+!YgY~^K>yv`c zXm=9uIPR8%A+74@{;htZ%bd1#!R`%%p)J{yiW* zIeDRabjS$L(fu;Ay=3VaAN4>m&UPnaG>@WxZakNjqj5CN>8+f&Q?;jUeT7-9{SG!1 z&7*3}&XP?UGI+NZtK`sQ-i_sd@_`4WzcmTd#9`9#IlJcS&i3xK z>L+Axw>=v`m=|Zv)_ddQo{AYKd1O1DkwLDmV*6|1frU|5@c#OwFuGoLvSC9z_vvN$ zj!_Q!RdJ)L(B11r!mncLz&w44E4ni!Rj=#rW)miS96XQRPfyS7M6xWxxw>z4;F?zk zMpi!C?(1sl90|IOr^~4V)Odz<+7P>rT%GhIetb&>KEpfFsh7#jeR!hrH|^fO))c)P zr|30bdxMWBSX;gERUxx(y|?dV{@OmPQ{iidaq)N|lk`^T zpU*xm+IbIc_xOCWeioW<0&A}CYanxz7v<>pl2YF(YRi;UlRBv9XEOs#V5ia+9={CK6@<2dN;wrgX3=&TbBlv{mf1=upMxX z;bNtRqz~VI#a90*54^7vqmqK}-xG##gyC8rf9iorDDpEKYyAkf|QRdNKuzo0`!mFQ9m;V%1dpxM(eeKg>NVf%8o9<(5)2_w5Fak1yBp?hjUw1HQ({eqrG<&p5wU=!ck7Y}TQpeeV>@oto6v z9F{}NOl3WheI+Me3!Tm5H)gem(5HrUCiaIWzPBEiz%iiY98>b|eTA0kdHGv?>l=Zz zm$GUmxW9K1{N6J&3svKtWb41l@tin&XkCL@>ax$h2^y2Z>y5`gHf3BS z;NRUeg17EC%N9^MfSazcj0nVQU$p6IaK6=lR}#MkNhi-e^)(q^nmYroVuhZv{9K9k z_;tA&W5k4FZ;q3cc7F*|8PH)k6taoT%MOulPO#v}Q?QMWw5olxqse|to0)kYcXrge z?!RALets*~Cc~iiwRJNbwPW1{yXlqnb*7^>(`AE}_vf2|2zn(&Wp|5>nMyiwA6!JU zf4%RCN#xu6m@$6O_>lf<8HLuxOafI(r?E|6viE5TdD2&5|Q;=$l*B7 zdf&l4X%=-T_njL&6#S_oW?QAQJbi8w85O~wttiMMpkgpj7-d| zYy=Dhe|NMA7_@ipS#+Fu%9+Fw{$zfk>$?LYkdCHcbi zuMyZ78NWDeU!K0a{6%s68(s#6|HAz>;(ya$o|wKG>zDkm@4v?Wx8wWr!toV{zhdyW z#=k7TwEx2M#rx9W{6hB+ijkT93(ns#7}>v&ec64<89Bco{Y~l;{O1I)|Mvv^1&ZN+ z{QM>P=Olc|{|(&#O8;N|{VPa+2lfm4|1b?--v8qM4^!|Z`5(gnPyK&+`WO1Y?Eekt zzXkrkxqpTFe+m1S{r?j3zr25W{r}77?|k{sy!a~>{`tdXV){zu|CDn6OUlDTFJ@`u zV(LUMW@G4LDq?DEZ(>R>V`^vaV)2!A%p9Em>@X5=FtW2S@bSSx|LZ*9k#pt?>7$~$ z_QClmH!(@VoNSULNoHu4K>`*AAP59YfGwHj4u)bS3=IGV2_XUzQ=FxE(3@+i)gS}4 z>c243gn8&ibJJBFAlaA_w_PH(VYwkB74 zLMiy1B{$cWe4HP$NA1NtFO!B_JFDfkTeBSXndZ%DYPIJ*HUsO9m>(!#wA&k9SI1lJ z*w-gLh6NRST}6$p=LfbdV{)BP@E)O1oDDHL?H~47@n_oLKC?1mPfv4 zzP$$upF8GfK@ek(0K~$)Alx#pc@J&3@j2>gFO+Lb@zUJFui9T5+|0}e3sD__*9SEA z49+`pDm#Jt0{&!5`j`44W}S)F^!Bq+PyPgC>nQ?qtB&~$o;Ty`Ym}Su`pM)Ty)+XV z&de(jhEG#)==V2?t+ z@6^8vU}uHNbpO5gF-?mqP?&qiV&EiShWQT^o&^FD|@k3O1o zpAoWO=xxvWJDY-<*z#9forZ3fOr_JCbDBLAZwJbT!@zHkrgE9R)nr{QhVLwu%VqLd z90#5pjYnd>SJhD9vodM0?SU7%$}-* zHhrXiRB73Bl(W@LT*qT3lh1!}ah!N@SPkm6SH;nyJSuDL#--o+gz7vr>b!ryjLFU7^@}Sn8LfvAhyH^XV zR%3TpSyC(Lk&Euw(BHC{KAqv3LX&_|;aJ{Y8*>(SkfrEI73M}Yi$afwt6oiYh1;c6 zuBN8m;M0#iH2$rnZ7A%yQql5Tm*iz~`r7Tmzhr-dj$2y+yPoX{`{Yn1e347#M1h){ zt2G2S&_Ul{wEeOZK?lRhxV^8hhzaMaxZ(O&98W;_{i<7E+rD+!^y{O)S4}zH38Tq+ zpP5h;Azmigf%McY`yJx`?X!sf^dIO(aEXxhay8|(3AA=%8V$q>DC!oXBc#lI*vK5W zOy?4>+HLZ*sz$b#p3YTNJN=!h)A-fp-lpqVAA60dN?nC*n)dGvgZhesw`|2+I5h#^ zmPALiRy8#OZd_Y1eiAXlDOV4Ie=IpP`U6k{2C0_}=I*R&rJA)kI(R0nPK#Rxz*A9+ z^tZ<2)}T)cEGGC{ywI^1-u=uImwSv6sf}2R@OM+3Xr$y!#a)G!SCmif`af)L)Vh3k z4dBY^hV?f!h}FjI5gvW<<8LkH7px3zMpDy4hel&p$?RM9)U1D6{n)J?2=`xbFj;BP z(Nd~8uGrnOx-e_R$U~+jTwpvWC^SotN7AgS(Bd0Duf9%vmq_23y%*APW# zpCNm#_KN+^>UUPSlVZil#<;xp5|@90&+n?%(z-UM%e0>X_?@mmHR&^&233mVT~D=> zHc?e7ZvBUNjB&&?K6TY^t}ZSvOs>oMmXHx>)xSl>Dh7-d*k$H z6UwRwpWiSAOKH7guAkr1!ZZQD^-Il(uG`mb?5T=43LVNiT-9Hhq1`9Cdc#3k>PULK z0H`{Nh_o_7!};+pcW_MWWhd7xVd-Ue$FgUc`4LUubRj-&UJ7w<1;n=G7dqVEV5XM1 zK4dp7%6~R2EK!`!h|JlQfBH(BB)Kv%{t#^9vw$83ua)W!qD1}vji*bIEv^Yy4R2;M z*TOmL@M7;g*HQ41uC~;2F6o?t(&t><=eUDnshE%_9s-YxD`>Xn1XnHWp+!CggA}%F zb}@!G0-daa9|6B|`ehz3 z+%X5z;t&ttw!9qaSFg}gVLgebtsm@6i7k@Yu*=bmh;9o^TGh<8*IlT@`=FJppX@;F z(!3mE4YF6b7;V*jYlYCn_)%ym4Bt{YgM>g;@kingVIc@%x|7p8x`5*@R<@2T9$S*9 zCX8&%LUiWzeYC3XejYC~u1SU-rYV~zHsZN6M-0x)oh3QauyQrc!wONE7*6?*oee)KFQS8a=l zh#Lo=w+-%=oys;ye4mIKTO@%+WNSlsw-}=n^&u`{VfCxp=U6XZ*b3p6pV24dBOQ*4 z+Aqg$Vjk{<El=AnnH$9DIEC!m$*gbn<3vWH-MD&P{uTN@7OCPe3r2}?I50N;XIzdJYo|Sn zF!if*2CBB=s^RTLOUt6=v@a!B^ZksndpZs_cq}AgD0caKwYAqvdsgG+YOg+aIb!u~ zP>(A9xgMx8h1W8frMjvoTtCsw+bb8^2gSNGvQDtx`ML!Mh(PAfqWMmWM#4I{x!!OM z&o|Tx8M0=6G+jZ$A8fw@<@9P&-9R2483&_*8L; zhEsZfleDxLQLS* zL^8{{oZ-7r>`M=$V3@o_<;7OZ#UqL~H=T?)0cuFv0+wlX<+D~}g;}nW$cy$1`{#G3 z=(VkSredy69$oX`1D{dr_P&{8!&1^yx(IK zeS=adZ5k4uC~sU(u@rp}eyDHIPo`JWJLo?Ug7HE4zxf4(X2^MFqXIJn-A7mf*@5T* z-<^>(|I7rx=ag2%Ge#8vorTZ=IaYiiJlG6DDc~QzG8s!4Wr5n_uSe0thj8Xx%N;N4)9e`RTnq;F&fOLsP;vNYlnskFilo=(O z)EtRuF#t|!LApU8ii^^!G=qMKhw@O0Q9No@X)>uuEXs;fF2$$}KuBpO!KfQ$sU(wX z6a`2w%^(>Pp(K-F)QfUdib*w!0Th>3Bo!$|K~s*GVvr6=PzEWbNHPjVp_E|I4KYxL zNhwl^MgoLOFla;@0HR8;Nk#<#&=QK2B7rC$%A1m7dQpKWKc%}=BK0Ufr2~mXTG2Fs zAElS{Zt?(isCbl~l8ICzVW@VL3*~%?gJdF=XcRz>GO1J|iAWJT9NvnB zeUF!ND|HW-(vNs(U8$RNC|jwUaOhO2n{23BshenMLaCc%C|aqTVCYuqEOn2QGB0%x zlQJ)DZ&`_lbSPPghj3_L=`3+iU5STms91@IXlPK0hh!*NiHBh5UFj^%C>@}yv_U@9 zqqIRhBuD8cfs|OJ990i+mv&4CxJx;P1J+C1b))p99J2v!QjXC8c4^0CKwrY17^Pi; zQ8r*%+A$ZfEaeyrP?vU01*l6oh62*19Ww#xQjU=TbZN�J@Z8AmB*aF%O_!%Ap?R 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%0DN_1rKVlUm|b69mYqc2iiBO;)|Py) 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 literal 0 HcmV?d00001 diff --git a/src/docfx.json b/src/docfx.json deleted file mode 100644 index 7d5100d..0000000 --- a/src/docfx.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json", - "metadata": [ - { - "src": [ - { - "src": "../src", - "files": [ - "Z21.Client/Z21.Client.csproj", - "Z21.DependencyInjection/Z21.DependencyInjection.csproj" - ] - } - ], - "dest": "api" - } - ], - "globalMetadata": { - "_appTitle": "Z21 API Documentation", - "_enableSearch": true - }, - "build": { - "content": [ - { - "files": [ - "index.md", - "api/**.yml", - "toc.yml" - ] - }, - { - "files": [ - "articles/**.md" - ] - } - ], - "dest": "_site" - } -} \ No newline at end of file diff --git a/src/toc.yml b/src/toc.yml deleted file mode 100644 index 38eceae..0000000 --- a/src/toc.yml +++ /dev/null @@ -1,8 +0,0 @@ -- name: Home - href: index.md - -- name: API Reference - href: api/toc.yml - -- name: Articles - href: articles/ diff --git a/version.json b/version.json new file mode 100644 index 0000000..a59cefc --- /dev/null +++ b/version.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json", + "version": "7.0", + "publicReleaseRefs": [ + "^refs/heads/main$" + ] +}