From 24a1855802557665d78d0dac755e74042ae9778d Mon Sep 17 00:00:00 2001 From: Vladimir Sumarov Date: Wed, 28 May 2025 14:22:57 -0700 Subject: [PATCH 01/19] Implement object clean up for encoders and outputs related objects --- js/module.d.ts | 12 +- js/module.ts | 12 +- .../source/advanced-recording.cpp | 49 +++-- .../source/advanced-recording.hpp | 3 +- .../source/advanced-replay-buffer.cpp | 94 +++++--- .../source/advanced-replay-buffer.hpp | 3 +- .../source/advanced-streaming.cpp | 12 ++ .../source/advanced-streaming.hpp | 3 +- obs-studio-client/source/audio-encoder.cpp | 46 +++- obs-studio-client/source/audio-encoder.hpp | 3 + obs-studio-client/source/delay.cpp | 14 ++ obs-studio-client/source/delay.hpp | 2 +- obs-studio-client/source/network.cpp | 16 +- obs-studio-client/source/network.hpp | 2 +- obs-studio-client/source/reconnect.cpp | 12 ++ obs-studio-client/source/reconnect.hpp | 1 + obs-studio-client/source/recording.cpp | 35 +-- obs-studio-client/source/recording.hpp | 3 + obs-studio-client/source/replay-buffer.cpp | 13 +- obs-studio-client/source/replay-buffer.hpp | 2 + obs-studio-client/source/simple-recording.cpp | 87 +++++--- obs-studio-client/source/simple-recording.hpp | 3 +- .../source/simple-replay-buffer.cpp | 94 +++++--- .../source/simple-replay-buffer.hpp | 3 +- obs-studio-client/source/simple-streaming.cpp | 49 +++-- obs-studio-client/source/simple-streaming.hpp | 3 +- obs-studio-client/source/streaming.cpp | 203 +++++++++++------- obs-studio-client/source/streaming.hpp | 8 + obs-studio-client/source/utility.hpp | 28 ++- obs-studio-client/source/video-encoder.cpp | 29 ++- obs-studio-client/source/video-encoder.hpp | 2 + .../source/osn-advanced-recording.cpp | 16 +- .../source/osn-advanced-replay-buffer.cpp | 32 +-- .../source/osn-audio-encoder.cpp | 38 +++- .../source/osn-audio-encoder.hpp | 2 + obs-studio-server/source/osn-delay.cpp | 15 ++ obs-studio-server/source/osn-delay.hpp | 1 + obs-studio-server/source/osn-network.cpp | 15 ++ obs-studio-server/source/osn-network.hpp | 1 + obs-studio-server/source/osn-reconnect.cpp | 15 ++ obs-studio-server/source/osn-reconnect.hpp | 1 + obs-studio-server/source/osn-recording.cpp | 16 +- .../source/osn-simple-recording.cpp | 32 +-- .../source/osn-simple-replay-buffer.cpp | 32 +-- .../source/osn-simple-streaming.cpp | 16 +- obs-studio-server/source/osn-streaming.cpp | 80 +++---- .../source/osn-video-encoder.cpp | 40 +++- .../source/osn-video-encoder.hpp | 1 + package.json | 7 +- tests/osn-tests/src/test_audio_encoder.ts | 6 +- .../src/test_osn_advanced_recording.ts | 12 +- .../src/test_osn_advanced_replayBuffer.ts | 10 +- .../src/test_osn_advanced_streaming.ts | 8 +- tests/osn-tests/src/test_osn_dual_output.ts | 42 +++- .../src/test_osn_simple_recording.ts | 168 ++++++++++++++- .../src/test_osn_simple_replayBuffer.ts | 16 +- .../src/test_osn_simple_streaming.ts | 18 +- tests/osn-tests/src/test_osn_video_encoder.ts | 8 +- 58 files changed, 1069 insertions(+), 425 deletions(-) diff --git a/js/module.d.ts b/js/module.d.ts index 2bb3aee9f..d7c7003ee 100644 --- a/js/module.d.ts +++ b/js/module.d.ts @@ -754,8 +754,8 @@ export declare const enum ERecordingFormat { FLV = "flv", MOV = "mov", MKV = "mkv", - TS = "mpegts", - M3M8 = "m3m8" + MPEGTS = "ts", + HLS = "m3u8" } export declare const enum ERecordingQuality { Stream = 0, @@ -774,19 +774,19 @@ export declare const enum EProcessPriority { BelowNormal = "BelowNormal", Idle = "Idle" } -export interface IVideoEncoder extends IConfigurable { +export interface IVideoEncoder extends IConfigurable, IReleasable { name: string; readonly type: EVideoEncoderType; readonly active: boolean; readonly id: string; readonly lastError: string; } -export interface IAudioEncoder { +export interface IAudioEncoder extends IReleasable { name: string; bitrate: number; } export interface IAudioEncoderFactory { - create(): IAudioEncoder; + create(id: string, name: string): IAudioEncoder; } export interface IVideoEncoderFactory { types(): string[]; @@ -911,7 +911,7 @@ export interface ISimpleReplayBufferFactory { export interface IAdvancedReplayBufferFactory { create(): IAdvancedReplayBuffer; destroy(stream: IAdvancedReplayBuffer): void; - legacySettings: IAdvancedReplayBufferFactory; + legacySettings: IAdvancedReplayBuffer; } export interface IDelay { enabled: boolean; diff --git a/js/module.ts b/js/module.ts index f4fcb7988..5be503343 100644 --- a/js/module.ts +++ b/js/module.ts @@ -1653,8 +1653,8 @@ export const enum ERecordingFormat { FLV = 'flv', MOV = 'mov', MKV = 'mkv', - TS = 'mpegts', - M3M8 = 'm3m8' + MPEGTS = 'ts', + HLS = 'm3u8' } export const enum ERecordingQuality { @@ -1677,7 +1677,7 @@ export const enum EProcessPriority { Idle = 'Idle' } -export interface IVideoEncoder extends IConfigurable { +export interface IVideoEncoder extends IConfigurable, IReleasable { name: string, readonly type: EVideoEncoderType, readonly active: boolean, @@ -1685,13 +1685,13 @@ export interface IVideoEncoder extends IConfigurable { readonly lastError: string } -export interface IAudioEncoder { +export interface IAudioEncoder extends IReleasable { name: string, bitrate: number } export interface IAudioEncoderFactory { - create(): IAudioEncoder + create(id: string, name: string): IAudioEncoder } export interface IVideoEncoderFactory { @@ -1834,7 +1834,7 @@ export interface ISimpleReplayBufferFactory { export interface IAdvancedReplayBufferFactory { create(): IAdvancedReplayBuffer; destroy(stream: IAdvancedReplayBuffer): void; - legacySettings: IAdvancedReplayBufferFactory; + legacySettings: IAdvancedReplayBuffer; } export interface IDelay { diff --git a/obs-studio-client/source/advanced-recording.cpp b/obs-studio-client/source/advanced-recording.cpp index d98f75a1a..92bf450a1 100644 --- a/obs-studio-client/source/advanced-recording.cpp +++ b/obs-studio-client/source/advanced-recording.cpp @@ -81,6 +81,19 @@ osn::AdvancedRecording::AdvancedRecording(const Napi::CallbackInfo &info) : Napi this->className = std::string("AdvancedRecording"); } +void osn::AdvancedRecording::Finalize(Napi::Env) +{ + ReleaseObjects(); +} + +void osn::AdvancedRecording::ReleaseObjects() +{ + if (!videoEncoderRef.IsEmpty()) + videoEncoderRef.Reset(); + if (!streamingRef.IsEmpty()) + streamingRef.Reset(); +} + Napi::Value osn::AdvancedRecording::Create(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); @@ -107,6 +120,8 @@ void osn::AdvancedRecording::Destroy(const Napi::CallbackInfo &info) recording->stopWorker(); recording->cb.Reset(); + recording->ReleaseObjects(); + auto conn = GetConnection(info); if (!conn) return; @@ -268,22 +283,27 @@ void osn::AdvancedRecording::SetLegacySettings(const Napi::CallbackInfo &info, c } Napi::Value osn::AdvancedRecording::GetStreaming(const Napi::CallbackInfo &info) +{ + return streamingRef.IsEmpty() ? info.Env().Undefined() : streamingRef.Value(); +} + +void osn::AdvancedRecording::SetStreaming(const Napi::CallbackInfo &info, const Napi::Value &value) { auto conn = GetConnection(info); if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetStreaming", {ipc::value(this->uid)}); + return; - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); + if (value.IsNull() || value.IsUndefined()) { + if (!streamingRef.IsEmpty()) + streamingRef.Reset(); + conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + return; + } - auto instance = osn::AdvancedStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; -} + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::AdvancedStreaming::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a AdvancedStreaming").ThrowAsJavaScriptException(); -void osn::AdvancedRecording::SetStreaming(const Napi::CallbackInfo &info, const Napi::Value &value) -{ osn::AdvancedStreaming *streaming = Napi::ObjectWrap::Unwrap(value.ToObject()); if (!streaming) { @@ -291,9 +311,10 @@ void osn::AdvancedRecording::SetStreaming(const Napi::CallbackInfo &info, const return; } - auto conn = GetConnection(info); - if (!conn) - return; - conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streaming->uid)}); + + if (!streamingRef.IsEmpty()) + streamingRef.Reset(); + + streamingRef = Napi::Persistent(obj); } \ No newline at end of file diff --git a/obs-studio-client/source/advanced-recording.hpp b/obs-studio-client/source/advanced-recording.hpp index 8bdf25edb..af3215585 100644 --- a/obs-studio-client/source/advanced-recording.hpp +++ b/obs-studio-client/source/advanced-recording.hpp @@ -26,7 +26,8 @@ class AdvancedRecording : public Napi::ObjectWrap, publi static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); AdvancedRecording(const Napi::CallbackInfo &info); - + void Finalize(Napi::Env); + void ReleaseObjects(); static Napi::Value Create(const Napi::CallbackInfo &info); static void Destroy(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/advanced-replay-buffer.cpp b/obs-studio-client/source/advanced-replay-buffer.cpp index cb26f1445..6ee7eef7b 100644 --- a/obs-studio-client/source/advanced-replay-buffer.cpp +++ b/obs-studio-client/source/advanced-replay-buffer.cpp @@ -78,6 +78,17 @@ osn::AdvancedReplayBuffer::AdvancedReplayBuffer(const Napi::CallbackInfo &info) this->className = std::string("AdvancedReplayBuffer"); } +void osn::AdvancedReplayBuffer::Finalize(Napi::Env) +{ + ReleaseObjects(); +} + +void osn::AdvancedReplayBuffer::ReleaseObjects() +{ + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); +} + Napi::Value osn::AdvancedReplayBuffer::Create(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); @@ -103,6 +114,7 @@ void osn::AdvancedReplayBuffer::Destroy(const Napi::CallbackInfo &info) replayBuffer->stopWorker(); replayBuffer->cb.Reset(); + replayBuffer->ReleaseObjects(); auto conn = GetConnection(info); if (!conn) @@ -174,62 +186,82 @@ void osn::AdvancedReplayBuffer::SetLegacySettings(const Napi::CallbackInfo &info Napi::Value osn::AdvancedReplayBuffer::GetStreaming(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetStreaming", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) + if (usesStream) { + return parentOutputRef.IsEmpty() ? info.Env().Undefined() : parentOutputRef.Value(); + } else { return info.Env().Undefined(); - - auto instance = osn::AdvancedStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; + } } void osn::AdvancedReplayBuffer::SetStreaming(const Napi::CallbackInfo &info, const Napi::Value &value) { - osn::AdvancedStreaming *encoder = Napi::ObjectWrap::Unwrap(value.ToObject()); + auto conn = GetConnection(info); + if (!conn) + return; - if (!encoder) { - Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException(); + if (value.IsNull() || value.IsUndefined()) { + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); + conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + usesStream = false; return; } - auto conn = GetConnection(info); - if (!conn) + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::AdvancedStreaming::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a valid Streaming").ThrowAsJavaScriptException(); + + osn::AdvancedStreaming *streaming = Napi::ObjectWrap::Unwrap(value.ToObject()); + + if (!streaming) { + Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException(); return; + } + + conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streaming->uid)}); + usesStream = true; + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); - conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(encoder->uid)}); + parentOutputRef = Napi::Persistent(obj); } Napi::Value osn::AdvancedReplayBuffer::GetRecording(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) + if (usesStream) { return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetRecording", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - auto instance = osn::AdvancedRecording::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; + } else { + return parentOutputRef.IsEmpty() ? info.Env().Undefined() : parentOutputRef.Value(); + } } void osn::AdvancedReplayBuffer::SetRecording(const Napi::CallbackInfo &info, const Napi::Value &value) { - osn::AdvancedRecording *recording = Napi::ObjectWrap::Unwrap(value.ToObject()); + auto conn = GetConnection(info); + if (!conn) + return; - if (!recording) { - Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException(); + if (value.IsNull() || value.IsUndefined()) { + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); + conn->call(className, "SetRecording", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + usesStream = false; return; } - auto conn = GetConnection(info); - if (!conn) + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::AdvancedRecording::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a Valid Recording").ThrowAsJavaScriptException(); + + osn::AdvancedRecording *recording = Napi::ObjectWrap::Unwrap(obj); + if (!recording) { + Napi::TypeError::New(info.Env(), "Invalid recording argument").ThrowAsJavaScriptException(); return; + } conn->call(className, "SetRecording", {ipc::value(this->uid), ipc::value(recording->uid)}); + usesStream = false; + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); + parentOutputRef = Napi::Persistent(obj); } \ No newline at end of file diff --git a/obs-studio-client/source/advanced-replay-buffer.hpp b/obs-studio-client/source/advanced-replay-buffer.hpp index 4395f8fa4..60cdeeb36 100644 --- a/obs-studio-client/source/advanced-replay-buffer.hpp +++ b/obs-studio-client/source/advanced-replay-buffer.hpp @@ -26,7 +26,8 @@ class AdvancedReplayBuffer : public Napi::ObjectWrap, static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); AdvancedReplayBuffer(const Napi::CallbackInfo &info); - + void Finalize(Napi::Env); + void ReleaseObjects(); static Napi::Value Create(const Napi::CallbackInfo &info); static void Destroy(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/advanced-streaming.cpp b/obs-studio-client/source/advanced-streaming.cpp index 267169b07..018896e18 100644 --- a/obs-studio-client/source/advanced-streaming.cpp +++ b/obs-studio-client/source/advanced-streaming.cpp @@ -80,6 +80,16 @@ osn::AdvancedStreaming::AdvancedStreaming(const Napi::CallbackInfo &info) : Napi this->className = std::string("AdvancedStreaming"); } +void osn::AdvancedStreaming::Finalize(Napi::Env) +{ + ReleaseObjects(); +} + +void osn::AdvancedStreaming::ReleaseObjects() +{ + osn::Streaming::ReleaseObjects(); +} + Napi::Value osn::AdvancedStreaming::Create(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); @@ -106,6 +116,8 @@ void osn::AdvancedStreaming::Destroy(const Napi::CallbackInfo &info) stream->stopWorker(); stream->cb.Reset(); + stream->ReleaseObjects(); + auto conn = GetConnection(info); if (!conn) return; diff --git a/obs-studio-client/source/advanced-streaming.hpp b/obs-studio-client/source/advanced-streaming.hpp index 261c5585c..354f54af3 100644 --- a/obs-studio-client/source/advanced-streaming.hpp +++ b/obs-studio-client/source/advanced-streaming.hpp @@ -26,7 +26,8 @@ class AdvancedStreaming : public Napi::ObjectWrap, publi static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); AdvancedStreaming(const Napi::CallbackInfo &info); - + void Finalize(Napi::Env); + void ReleaseObjects(); static Napi::Value Create(const Napi::CallbackInfo &info); static void Destroy(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/audio-encoder.cpp b/obs-studio-client/source/audio-encoder.cpp index 08cd273a6..d13e626e1 100644 --- a/obs-studio-client/source/audio-encoder.cpp +++ b/obs-studio-client/source/audio-encoder.cpp @@ -32,6 +32,8 @@ Napi::Object osn::AudioEncoder::Init(Napi::Env env, Napi::Object exports) InstanceAccessor("name", &osn::AudioEncoder::GetName, &osn::AudioEncoder::SetName), InstanceAccessor("bitrate", &osn::AudioEncoder::GetBitrate, &osn::AudioEncoder::SetBitrate), + + InstanceMethod("release", &osn::AudioEncoder::Release), }); exports.Set("AudioEncoder", func); osn::AudioEncoder::constructor = Napi::Persistent(func); @@ -45,6 +47,7 @@ osn::AudioEncoder::AudioEncoder(const Napi::CallbackInfo &info) : Napi::ObjectWr Napi::HandleScope scope(env); size_t length = info.Length(); this->uid = 0; + this->encoderInitialized = false; if (length <= 0 || !info[0].IsNumber()) { Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); @@ -52,15 +55,24 @@ osn::AudioEncoder::AudioEncoder(const Napi::CallbackInfo &info) : Napi::ObjectWr } this->uid = (uint64_t)info[0].ToNumber().Int64Value(); + this->encoderInitialized = true; } Napi::Value osn::AudioEncoder::Create(const Napi::CallbackInfo &info) { + std::string id = "ffmpeg_aac"; + std::string name = "audio-encoder"; + + if (info.Length() >= 2) { + id = info[0].ToString().Utf8Value(); + name = info[1].ToString().Utf8Value(); + } + auto conn = GetConnection(info); if (!conn) return info.Env().Undefined(); - std::vector response = conn->call_synchronous_helper("AudioEncoder", "Create", {}); + std::vector response = conn->call_synchronous_helper("AudioEncoder", "Create", {ipc::value(id), ipc::value(name)}); if (!ValidateResponse(info, response)) return info.Env().Undefined(); @@ -70,6 +82,38 @@ Napi::Value osn::AudioEncoder::Create(const Napi::CallbackInfo &info) return instance; } +void osn::AudioEncoder::Finalize(Napi::Env env) +{ + if (!this->encoderInitialized) + return; + + auto conn = GetConnection(env); + if (!conn) + return; + + std::vector response = conn->call_synchronous_helper("AudioEncoder", "Finalize", {ipc::value(this->uid)}); + this->encoderInitialized = false; + this->uid = UINT64_MAX; + if (!ValidateResponse(env, response)) + return; +} + +void osn::AudioEncoder::Release(const Napi::CallbackInfo &info) +{ + if (!this->encoderInitialized) + return; + + auto conn = GetConnection(info); + if (!conn) + return; + + this->encoderInitialized = false; + std::vector response = conn->call_synchronous_helper("AudioEncoder", "Release", {ipc::value(this->uid)}); + this->uid = UINT64_MAX; + if (!ValidateResponse(info, response)) + return; +} + Napi::Value osn::AudioEncoder::GetName(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/audio-encoder.hpp b/obs-studio-client/source/audio-encoder.hpp index f03c2d1b3..99e0141e2 100644 --- a/obs-studio-client/source/audio-encoder.hpp +++ b/obs-studio-client/source/audio-encoder.hpp @@ -24,6 +24,7 @@ namespace osn { class AudioEncoder : public Napi::ObjectWrap { public: uint64_t uid; + bool encoderInitialized; public: static Napi::FunctionReference constructor; @@ -31,6 +32,8 @@ class AudioEncoder : public Napi::ObjectWrap { AudioEncoder(const Napi::CallbackInfo &info); static Napi::Value Create(const Napi::CallbackInfo &info); + void Finalize(Napi::Env env); + void Release(const Napi::CallbackInfo &info); Napi::Value GetName(const Napi::CallbackInfo &info); void SetName(const Napi::CallbackInfo &info, const Napi::Value &value); diff --git a/obs-studio-client/source/delay.cpp b/obs-studio-client/source/delay.cpp index 87f27990a..0fb532ff8 100644 --- a/obs-studio-client/source/delay.cpp +++ b/obs-studio-client/source/delay.cpp @@ -71,6 +71,20 @@ Napi::Value osn::Delay::Create(const Napi::CallbackInfo &info) return instance; } +void osn::Delay::Finalize(Napi::Env env) +{ + auto conn = GetConnection(env); + if (!conn) + return; + + if (this->uid == UINT64_MAX) + return; + + conn->call_synchronous_helper("Delay", "Destroy", {ipc::value(this->uid)}); + + this->uid = UINT64_MAX; +} + Napi::Value osn::Delay::GetEnabled(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/delay.hpp b/obs-studio-client/source/delay.hpp index 605a5754f..13092f19c 100644 --- a/obs-studio-client/source/delay.hpp +++ b/obs-studio-client/source/delay.hpp @@ -30,7 +30,7 @@ class Delay : public Napi::ObjectWrap { Delay(const Napi::CallbackInfo &info); static Napi::Value Create(const Napi::CallbackInfo &info); - + void Finalize(Napi::Env env); Napi::Value GetEnabled(const Napi::CallbackInfo &info); void SetEnabled(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetDelaySec(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/network.cpp b/obs-studio-client/source/network.cpp index 840548efa..47971b6c8 100644 --- a/obs-studio-client/source/network.cpp +++ b/obs-studio-client/source/network.cpp @@ -48,7 +48,7 @@ osn::Network::Network(const Napi::CallbackInfo &info) : Napi::ObjectWrapuid = 0; + this->uid = UINT64_MAX; if (length <= 0 || !info[0].IsNumber()) { Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); @@ -74,6 +74,20 @@ Napi::Value osn::Network::Create(const Napi::CallbackInfo &info) return instance; } +void osn::Network::Finalize(Napi::Env env) +{ + auto conn = GetConnection(env); + if (!conn) + return; + + if (this->uid == UINT64_MAX) + return; + + conn->call_synchronous_helper("Network", "Destroy", {ipc::value(this->uid)}); + + this->uid = UINT64_MAX; +} + Napi::Value osn::Network::GetBindIP(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/network.hpp b/obs-studio-client/source/network.hpp index 6a3b14824..fbd343cbe 100644 --- a/obs-studio-client/source/network.hpp +++ b/obs-studio-client/source/network.hpp @@ -30,7 +30,7 @@ class Network : public Napi::ObjectWrap { Network(const Napi::CallbackInfo &info); static Napi::Value Create(const Napi::CallbackInfo &info); - + void Finalize(Napi::Env env); Napi::Value GetBindIP(const Napi::CallbackInfo &info); void SetBindIP(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetNetworkInterfaces(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/reconnect.cpp b/obs-studio-client/source/reconnect.cpp index 237ba54ab..95ecdb1be 100644 --- a/obs-studio-client/source/reconnect.cpp +++ b/obs-studio-client/source/reconnect.cpp @@ -71,6 +71,18 @@ Napi::Value osn::Reconnect::Create(const Napi::CallbackInfo &info) return instance; } +void osn::Reconnect::Finalize(Napi::Env env) +{ + auto conn = GetConnection(env); + if (!conn) + return; + + if (this->uid != UINT64_MAX) { + conn->call_synchronous_helper("Reconnect", "Destroy", {ipc::value(this->uid)}); + this->uid = UINT64_MAX; + } +} + Napi::Value osn::Reconnect::GetEnabled(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/reconnect.hpp b/obs-studio-client/source/reconnect.hpp index 29ebfe273..fed6871ef 100644 --- a/obs-studio-client/source/reconnect.hpp +++ b/obs-studio-client/source/reconnect.hpp @@ -30,6 +30,7 @@ class Reconnect : public Napi::ObjectWrap { Reconnect(const Napi::CallbackInfo &info); static Napi::Value Create(const Napi::CallbackInfo &info); + void Finalize(Napi::Env env); Napi::Value GetEnabled(const Napi::CallbackInfo &info); void SetEnabled(const Napi::CallbackInfo &info, const Napi::Value &value); diff --git a/obs-studio-client/source/recording.cpp b/obs-studio-client/source/recording.cpp index 656aed422..62d607461 100644 --- a/obs-studio-client/source/recording.cpp +++ b/obs-studio-client/source/recording.cpp @@ -21,23 +21,27 @@ #include "video-encoder.hpp" Napi::Value osn::Recording::GetVideoEncoder(const Napi::CallbackInfo &info) +{ + return videoEncoderRef.IsEmpty() ? info.Env().Undefined() : videoEncoderRef.Value(); +} + +void osn::Recording::SetVideoEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) { auto conn = GetConnection(info); if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetVideoEncoder", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); + return; - auto instance = osn::VideoEncoder::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + if (value.IsNull() || value.IsUndefined()) { + if (!videoEncoderRef.IsEmpty()) + videoEncoderRef.Reset(); + conn->call(className, "SetVideoEncoder", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + return; + } - return instance; -} + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::VideoEncoder::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a VideoEncoder").ThrowAsJavaScriptException(); -void osn::Recording::SetVideoEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) -{ osn::VideoEncoder *encoder = Napi::ObjectWrap::Unwrap(value.ToObject()); if (!encoder) { @@ -45,11 +49,12 @@ void osn::Recording::SetVideoEncoder(const Napi::CallbackInfo &info, const Napi: return; } - auto conn = GetConnection(info); - if (!conn) - return; - conn->call(className, "SetVideoEncoder", {ipc::value(this->uid), ipc::value(encoder->uid)}); + + if (!videoEncoderRef.IsEmpty()) + videoEncoderRef.Reset(); + + videoEncoderRef = Napi::Persistent(obj); } Napi::Value osn::Recording::GetSignalHandler(const Napi::CallbackInfo &info) diff --git a/obs-studio-client/source/recording.hpp b/obs-studio-client/source/recording.hpp index 84af80883..b597b7222 100644 --- a/obs-studio-client/source/recording.hpp +++ b/obs-studio-client/source/recording.hpp @@ -29,6 +29,9 @@ class Recording : public WorkerSignals, public FileOutput { protected: Napi::Function signalHandler; std::string className; + Napi::Reference videoEncoderRef; + Napi::Reference streamingRef; + Napi::Reference audioEncoderRef; Napi::Value GetVideoEncoder(const Napi::CallbackInfo &info); void SetVideoEncoder(const Napi::CallbackInfo &info, const Napi::Value &value); diff --git a/obs-studio-client/source/replay-buffer.cpp b/obs-studio-client/source/replay-buffer.cpp index f459cd4b5..de019905c 100644 --- a/obs-studio-client/source/replay-buffer.cpp +++ b/obs-studio-client/source/replay-buffer.cpp @@ -91,24 +91,17 @@ void osn::ReplayBuffer::SetSuffix(const Napi::CallbackInfo &info, const Napi::Va Napi::Value osn::ReplayBuffer::GetUsesStream(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetUsesStream", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::Boolean::New(info.Env(), response[1].value_union.ui32); + return Napi::Boolean::New(info.Env(), usesStream); } void osn::ReplayBuffer::SetUsesStream(const Napi::CallbackInfo &info, const Napi::Value &value) { + //todo should be depricated auto conn = GetConnection(info); if (!conn) return; + usesStream = value.ToBoolean().Value(); conn->call_synchronous_helper(className, "SetUsesStream", {ipc::value(this->uid), ipc::value(value.ToBoolean().Value())}); } diff --git a/obs-studio-client/source/replay-buffer.hpp b/obs-studio-client/source/replay-buffer.hpp index 5250b5d75..8fbac491f 100644 --- a/obs-studio-client/source/replay-buffer.hpp +++ b/obs-studio-client/source/replay-buffer.hpp @@ -29,6 +29,8 @@ class ReplayBuffer : public WorkerSignals, public FileOutput { protected: Napi::Function signalHandler; std::string className; + Napi::Reference parentOutputRef; + bool usesStream = false; Napi::Value GetDuration(const Napi::CallbackInfo &info); void SetDuration(const Napi::CallbackInfo &info, const Napi::Value &value); diff --git a/obs-studio-client/source/simple-recording.cpp b/obs-studio-client/source/simple-recording.cpp index f80456ec1..148efe52a 100644 --- a/obs-studio-client/source/simple-recording.cpp +++ b/obs-studio-client/source/simple-recording.cpp @@ -85,6 +85,23 @@ osn::SimpleRecording::SimpleRecording(const Napi::CallbackInfo &info) : Napi::Ob this->className = std::string("SimpleRecording"); } +void osn::SimpleRecording::Finalize(Napi::Env) +{ + ReleaseObjects(); +} + +void osn::SimpleRecording::ReleaseObjects() +{ + if (!videoEncoderRef.IsEmpty()) + videoEncoderRef.Reset(); + + if (!streamingRef.IsEmpty()) + streamingRef.Reset(); + + if (!audioEncoderRef.IsEmpty()) + audioEncoderRef.Reset(); +} + Napi::Value osn::SimpleRecording::Create(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); @@ -111,6 +128,8 @@ void osn::SimpleRecording::Destroy(const Napi::CallbackInfo &info) recording->stopWorker(); recording->cb.Reset(); + recording->ReleaseObjects(); + auto conn = GetConnection(info); if (!conn) return; @@ -145,22 +164,27 @@ void osn::SimpleRecording::SetQuality(const Napi::CallbackInfo &info, const Napi } Napi::Value osn::SimpleRecording::GetAudioEncoder(const Napi::CallbackInfo &info) +{ + return audioEncoderRef.IsEmpty() ? info.Env().Undefined() : audioEncoderRef.Value(); +} + +void osn::SimpleRecording::SetAudioEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) { auto conn = GetConnection(info); if (!conn) - return info.Env().Undefined(); + return; - std::vector response = conn->call_synchronous_helper("SimpleRecording", "GetAudioEncoder", {ipc::value(this->uid)}); + if (value.IsNull() || value.IsUndefined()) { + if (!audioEncoderRef.IsEmpty()) + audioEncoderRef.Reset(); + conn->call(className, "SetAudioEncoder", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + return; + } - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::AudioEncoder::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a AudioEncoder").ThrowAsJavaScriptException(); - auto instance = osn::AudioEncoder::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; -} - -void osn::SimpleRecording::SetAudioEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) -{ osn::AudioEncoder *encoder = Napi::ObjectWrap::Unwrap(value.ToObject()); if (!encoder) { @@ -168,11 +192,12 @@ void osn::SimpleRecording::SetAudioEncoder(const Napi::CallbackInfo &info, const return; } - auto conn = GetConnection(info); - if (!conn) - return; - conn->call(className, "SetAudioEncoder", {ipc::value(this->uid), ipc::value(encoder->uid)}); + + if (!audioEncoderRef.IsEmpty()) + audioEncoderRef.Reset(); + + audioEncoderRef = Napi::Persistent(obj); } Napi::Value osn::SimpleRecording::GetLowCPU(const Napi::CallbackInfo &info) @@ -234,22 +259,27 @@ void osn::SimpleRecording::SetLegacySettings(const Napi::CallbackInfo &info, con } Napi::Value osn::SimpleRecording::GetStreaming(const Napi::CallbackInfo &info) +{ + return streamingRef.IsEmpty() ? info.Env().Undefined() : streamingRef.Value(); +} + +void osn::SimpleRecording::SetStreaming(const Napi::CallbackInfo &info, const Napi::Value &value) { auto conn = GetConnection(info); if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetStreaming", {ipc::value(this->uid)}); + return; - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); + if (value.IsNull() || value.IsUndefined()) { + if (!streamingRef.IsEmpty()) + streamingRef.Reset(); + conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + return; + } - auto instance = osn::SimpleStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; -} + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::SimpleStreaming::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a SimpleStreaming").ThrowAsJavaScriptException(); -void osn::SimpleRecording::SetStreaming(const Napi::CallbackInfo &info, const Napi::Value &value) -{ osn::SimpleStreaming *streaming = Napi::ObjectWrap::Unwrap(value.ToObject()); if (!streaming) { @@ -257,9 +287,10 @@ void osn::SimpleRecording::SetStreaming(const Napi::CallbackInfo &info, const Na return; } - auto conn = GetConnection(info); - if (!conn) - return; - conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streaming->uid)}); + + if (!streamingRef.IsEmpty()) + streamingRef.Reset(); + + streamingRef = Napi::Persistent(obj); } \ No newline at end of file diff --git a/obs-studio-client/source/simple-recording.hpp b/obs-studio-client/source/simple-recording.hpp index f1913234a..7d6b28851 100644 --- a/obs-studio-client/source/simple-recording.hpp +++ b/obs-studio-client/source/simple-recording.hpp @@ -26,7 +26,8 @@ class SimpleRecording : public Napi::ObjectWrap, public os static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); SimpleRecording(const Napi::CallbackInfo &info); - + void Finalize(Napi::Env); + void ReleaseObjects(); static Napi::Value Create(const Napi::CallbackInfo &info); static void Destroy(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/simple-replay-buffer.cpp b/obs-studio-client/source/simple-replay-buffer.cpp index e238a6f9a..d6163f96e 100644 --- a/obs-studio-client/source/simple-replay-buffer.cpp +++ b/obs-studio-client/source/simple-replay-buffer.cpp @@ -77,6 +77,17 @@ osn::SimpleReplayBuffer::SimpleReplayBuffer(const Napi::CallbackInfo &info) : Na this->className = std::string("SimpleReplayBuffer"); } +void osn::SimpleReplayBuffer::Finalize(Napi::Env) +{ + ReleaseObjects(); +} + +void osn::SimpleReplayBuffer::ReleaseObjects() +{ + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); +} + Napi::Value osn::SimpleReplayBuffer::Create(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); @@ -102,6 +113,7 @@ void osn::SimpleReplayBuffer::Destroy(const Napi::CallbackInfo &info) replayBuffer->stopWorker(); replayBuffer->cb.Reset(); + replayBuffer->ReleaseObjects(); auto conn = GetConnection(info); if (!conn) @@ -150,62 +162,82 @@ void osn::SimpleReplayBuffer::SetLegacySettings(const Napi::CallbackInfo &info, Napi::Value osn::SimpleReplayBuffer::GetStreaming(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetStreaming", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) + if (usesStream) { + return parentOutputRef.IsEmpty() ? info.Env().Undefined() : parentOutputRef.Value(); + } else { return info.Env().Undefined(); - - auto instance = osn::SimpleStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; + } } void osn::SimpleReplayBuffer::SetStreaming(const Napi::CallbackInfo &info, const Napi::Value &value) { - osn::SimpleStreaming *encoder = Napi::ObjectWrap::Unwrap(value.ToObject()); + auto conn = GetConnection(info); + if (!conn) + return; - if (!encoder) { - Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException(); + if (value.IsNull() || value.IsUndefined()) { + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); + conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + usesStream = false; return; } - auto conn = GetConnection(info); - if (!conn) + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::SimpleStreaming::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a SimpleStreaming").ThrowAsJavaScriptException(); + + osn::SimpleStreaming *streaming = Napi::ObjectWrap::Unwrap(value.ToObject()); + + if (!streaming) { + Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException(); return; + } + + conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streaming->uid)}); + usesStream = true; + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); - conn->call(className, "SetStreaming", {ipc::value(this->uid), ipc::value(encoder->uid)}); + parentOutputRef = Napi::Persistent(obj); } Napi::Value osn::SimpleReplayBuffer::GetRecording(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetRecording", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) + if (usesStream) { return info.Env().Undefined(); - - auto instance = osn::SimpleRecording::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; + } else { + return parentOutputRef.IsEmpty() ? info.Env().Undefined() : parentOutputRef.Value(); + } } void osn::SimpleReplayBuffer::SetRecording(const Napi::CallbackInfo &info, const Napi::Value &value) { - osn::SimpleRecording *recording = Napi::ObjectWrap::Unwrap(value.ToObject()); + auto conn = GetConnection(info); + if (!conn) + return; - if (!recording) { - Napi::TypeError::New(info.Env(), "Invalid recording argument").ThrowAsJavaScriptException(); + if (value.IsNull() || value.IsUndefined()) { + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); + conn->call(className, "SetRecording", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + usesStream = false; return; } - auto conn = GetConnection(info); - if (!conn) + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::SimpleRecording::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a Valid Recording").ThrowAsJavaScriptException(); + + osn::SimpleRecording *recording = Napi::ObjectWrap::Unwrap(obj); + if (!recording) { + Napi::TypeError::New(info.Env(), "Invalid recording argument").ThrowAsJavaScriptException(); return; + } conn->call(className, "SetRecording", {ipc::value(this->uid), ipc::value(recording->uid)}); + usesStream = false; + if (!parentOutputRef.IsEmpty()) + parentOutputRef.Reset(); + parentOutputRef = Napi::Persistent(obj); } \ No newline at end of file diff --git a/obs-studio-client/source/simple-replay-buffer.hpp b/obs-studio-client/source/simple-replay-buffer.hpp index e1467d050..e8f8c364a 100644 --- a/obs-studio-client/source/simple-replay-buffer.hpp +++ b/obs-studio-client/source/simple-replay-buffer.hpp @@ -26,7 +26,8 @@ class SimpleReplayBuffer : public Napi::ObjectWrap, pub static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); SimpleReplayBuffer(const Napi::CallbackInfo &info); - + void Finalize(Napi::Env); + void ReleaseObjects(); static Napi::Value Create(const Napi::CallbackInfo &info); static void Destroy(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/simple-streaming.cpp b/obs-studio-client/source/simple-streaming.cpp index 8c3e56246..40a0f005d 100644 --- a/obs-studio-client/source/simple-streaming.cpp +++ b/obs-studio-client/source/simple-streaming.cpp @@ -35,7 +35,6 @@ Napi::Object osn::SimpleStreaming::Init(Napi::Env env, Napi::Object exports) StaticMethod("destroy", &osn::SimpleStreaming::Destroy), InstanceAccessor("videoEncoder", &osn::SimpleStreaming::GetVideoEncoder, &osn::SimpleStreaming::SetVideoEncoder), - InstanceAccessor("audioEncoder", &osn::SimpleStreaming::GetAudioEncoder, &osn::SimpleStreaming::SetAudioEncoder), InstanceAccessor("service", &osn::SimpleStreaming::GetService, &osn::SimpleStreaming::SetService), InstanceAccessor("enforceServiceBitrate", &osn::SimpleStreaming::GetEnforceServiceBirate, &osn::SimpleStreaming::SetEnforceServiceBirate), InstanceAccessor("enableTwitchVOD", &osn::SimpleStreaming::GetEnableTwitchVOD, &osn::SimpleStreaming::SetEnableTwitchVOD), @@ -79,6 +78,16 @@ osn::SimpleStreaming::SimpleStreaming(const Napi::CallbackInfo &info) : Napi::Ob this->className = std::string("SimpleStreaming"); } +void osn::SimpleStreaming::Finalize(Napi::Env) +{ + ReleaseObjects(); +} + +void osn::SimpleStreaming::ReleaseObjects() +{ + osn::Streaming::ReleaseObjects(); +} + Napi::Value osn::SimpleStreaming::Create(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); @@ -105,6 +114,8 @@ void osn::SimpleStreaming::Destroy(const Napi::CallbackInfo &info) stream->stopWorker(); stream->cb.Reset(); + stream->ReleaseObjects(); + auto conn = GetConnection(info); if (!conn) return; @@ -117,17 +128,7 @@ void osn::SimpleStreaming::Destroy(const Napi::CallbackInfo &info) Napi::Value osn::SimpleStreaming::GetAudioEncoder(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("SimpleStreaming", "GetAudioEncoder", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - auto instance = osn::AudioEncoder::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; + return audioEncoderRef.IsEmpty() ? info.Env().Undefined() : audioEncoderRef.Value(); } Napi::Value osn::SimpleStreaming::GetUseAdvanced(const Napi::CallbackInfo &info) @@ -178,6 +179,21 @@ void osn::SimpleStreaming::SetCustomEncSettings(const Napi::CallbackInfo &info, void osn::SimpleStreaming::SetAudioEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) { + auto conn = GetConnection(info); + if (!conn) + return; + + if (value.IsNull() || value.IsUndefined()) { + if (!audioEncoderRef.IsEmpty()) + audioEncoderRef.Reset(); + conn->call(className, "SetAudioEncoder", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + return; + } + + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::AudioEncoder::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a AudioEncoder").ThrowAsJavaScriptException(); + osn::AudioEncoder *encoder = Napi::ObjectWrap::Unwrap(value.ToObject()); if (!encoder) { @@ -185,11 +201,12 @@ void osn::SimpleStreaming::SetAudioEncoder(const Napi::CallbackInfo &info, const return; } - auto conn = GetConnection(info); - if (!conn) - return; - conn->call(className, "SetAudioEncoder", {ipc::value(this->uid), ipc::value(encoder->uid)}); + + if (!audioEncoderRef.IsEmpty()) + audioEncoderRef.Reset(); + + audioEncoderRef = Napi::Persistent(obj); } Napi::Value osn::SimpleStreaming::GetLegacySettings(const Napi::CallbackInfo &info) diff --git a/obs-studio-client/source/simple-streaming.hpp b/obs-studio-client/source/simple-streaming.hpp index 95edee1ab..78c8938a5 100644 --- a/obs-studio-client/source/simple-streaming.hpp +++ b/obs-studio-client/source/simple-streaming.hpp @@ -26,7 +26,8 @@ class SimpleStreaming : public Napi::ObjectWrap, public os static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); SimpleStreaming(const Napi::CallbackInfo &info); - + void Finalize(Napi::Env); + void ReleaseObjects(); static Napi::Value Create(const Napi::CallbackInfo &info); static void Destroy(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/streaming.cpp b/obs-studio-client/source/streaming.cpp index c51b906a6..fca86f56a 100644 --- a/obs-studio-client/source/streaming.cpp +++ b/obs-studio-client/source/streaming.cpp @@ -25,36 +25,61 @@ #include "network.hpp" #include "video.hpp" -Napi::Value osn::Streaming::GetService(const Napi::CallbackInfo &info) +void osn::Streaming::ReleaseObjects() { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); + if (!videoEncoderRef.IsEmpty()) + videoEncoderRef.Reset(); - std::vector response = conn->call_synchronous_helper(className, "GetService", {ipc::value(this->uid)}); + if (!serviceRef.IsEmpty()) + serviceRef.Reset(); - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); + if (!delayRef.IsEmpty()) + delayRef.Reset(); - auto instance = osn::Service::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + if (!reconnectRef.IsEmpty()) + reconnectRef.Reset(); - return instance; + if (!networkRef.IsEmpty()) + networkRef.Reset(); + + if (!audioEncoderRef.IsEmpty()) + audioEncoderRef.Reset(); +} + +Napi::Value osn::Streaming::GetService(const Napi::CallbackInfo &info) +{ + return serviceRef.IsEmpty() ? info.Env().Undefined() : serviceRef.Value(); } void osn::Streaming::SetService(const Napi::CallbackInfo &info, const Napi::Value &value) { - osn::Service *service = Napi::ObjectWrap::Unwrap(value.ToObject()); + auto conn = GetConnection(info); + if (!conn) + return; - if (!service) { - Napi::TypeError::New(info.Env(), "Invalid service argument").ThrowAsJavaScriptException(); + if (value.IsNull() || value.IsUndefined()) { + if (!serviceRef.IsEmpty()) + serviceRef.Reset(); + conn->call(className, "SetService", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); return; } - auto conn = GetConnection(info); - if (!conn) + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::Service::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a Service").ThrowAsJavaScriptException(); + + osn::Service *service = Napi::ObjectWrap::Unwrap(obj); + if (!service) { + Napi::TypeError::New(info.Env(), "Invalid service argument").ThrowAsJavaScriptException(); return; + } conn->call(className, "SetService", {ipc::value(this->uid), ipc::value(service->uid)}); + + if (!serviceRef.IsEmpty()) + serviceRef.Reset(); + + serviceRef = Napi::Persistent(obj); } Napi::Value osn::Streaming::GetCanvas(const Napi::CallbackInfo &info) @@ -88,24 +113,29 @@ void osn::Streaming::SetCanvas(const Napi::CallbackInfo &info, const Napi::Value conn->call(className, "SetVideoCanvas", {ipc::value(this->uid), ipc::value(canvas->canvasId)}); } + Napi::Value osn::Streaming::GetVideoEncoder(const Napi::CallbackInfo &info) +{ + return videoEncoderRef.IsEmpty() ? info.Env().Undefined() : videoEncoderRef.Value(); +} + +void osn::Streaming::SetVideoEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) { auto conn = GetConnection(info); if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetVideoEncoder", {ipc::value(this->uid)}); + return; - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); + if (value.IsNull() || value.IsUndefined()) { + if (!videoEncoderRef.IsEmpty()) + videoEncoderRef.Reset(); + conn->call(className, "SetVideoEncoder", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); + return; + } - auto instance = osn::VideoEncoder::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::VideoEncoder::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a VideoEncoder").ThrowAsJavaScriptException(); - return instance; -} - -void osn::Streaming::SetVideoEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) -{ osn::VideoEncoder *encoder = Napi::ObjectWrap::Unwrap(value.ToObject()); if (!encoder) { @@ -113,11 +143,12 @@ void osn::Streaming::SetVideoEncoder(const Napi::CallbackInfo &info, const Napi: return; } - auto conn = GetConnection(info); - if (!conn) - return; - conn->call(className, "SetVideoEncoder", {ipc::value(this->uid), ipc::value(encoder->uid)}); + + if (!videoEncoderRef.IsEmpty()) + videoEncoderRef.Reset(); + + videoEncoderRef = Napi::Persistent(obj); } Napi::Value osn::Streaming::GetEnforceServiceBirate(const Napi::CallbackInfo &info) @@ -168,98 +199,110 @@ void osn::Streaming::SetEnableTwitchVOD(const Napi::CallbackInfo &info, const Na Napi::Value osn::Streaming::GetDelay(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetDelay", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - auto instance = osn::Delay::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - - return instance; + return delayRef.IsEmpty() ? info.Env().Undefined() : delayRef.Value(); } void osn::Streaming::SetDelay(const Napi::CallbackInfo &info, const Napi::Value &value) { - osn::Delay *delay = Napi::ObjectWrap::Unwrap(value.ToObject()); + auto conn = GetConnection(info); + if (!conn) + return; - if (!delay) { - Napi::TypeError::New(info.Env(), "Invalid delay argument").ThrowAsJavaScriptException(); + if (value.IsNull() || value.IsUndefined()) { + if (!delayRef.IsEmpty()) + delayRef.Reset(); + conn->call(className, "SetDelay", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); return; } - auto conn = GetConnection(info); - if (!conn) + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::Delay::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a Delay").ThrowAsJavaScriptException(); + + osn::Delay *delay = Napi::ObjectWrap::Unwrap(obj); + if (!delay) { + Napi::TypeError::New(info.Env(), "Invalid delay argument").ThrowAsJavaScriptException(); return; + } conn->call(className, "SetDelay", {ipc::value(this->uid), ipc::value(delay->uid)}); + + if (!delayRef.IsEmpty()) + delayRef.Reset(); + + delayRef = Napi::Persistent(obj); } Napi::Value osn::Streaming::GetReconnect(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetReconnect", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - auto instance = osn::Reconnect::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - - return instance; + return reconnectRef.IsEmpty() ? info.Env().Undefined() : reconnectRef.Value(); } void osn::Streaming::SetReconnect(const Napi::CallbackInfo &info, const Napi::Value &value) { - osn::Reconnect *reconnect = Napi::ObjectWrap::Unwrap(value.ToObject()); + auto conn = GetConnection(info); + if (!conn) + return; - if (!reconnect) { - Napi::TypeError::New(info.Env(), "Invalid reconnect argument").ThrowAsJavaScriptException(); + if (value.IsNull() || value.IsUndefined()) { + if (!reconnectRef.IsEmpty()) + reconnectRef.Reset(); + conn->call(className, "SetReconnect", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); return; } - auto conn = GetConnection(info); - if (!conn) + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::Reconnect::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a Reconnect").ThrowAsJavaScriptException(); + + osn::Reconnect *reconnect = Napi::ObjectWrap::Unwrap(obj); + if (!reconnect) { + Napi::TypeError::New(info.Env(), "Invalid reconnect argument").ThrowAsJavaScriptException(); return; + } conn->call(className, "SetReconnect", {ipc::value(this->uid), ipc::value(reconnect->uid)}); + + if (!reconnectRef.IsEmpty()) + reconnectRef.Reset(); + + reconnectRef = Napi::Persistent(obj); } Napi::Value osn::Streaming::GetNetwork(const Napi::CallbackInfo &info) { - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetNetwork", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - auto instance = osn::Network::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - - return instance; + return networkRef.IsEmpty() ? info.Env().Undefined() : networkRef.Value(); } void osn::Streaming::SetNetwork(const Napi::CallbackInfo &info, const Napi::Value &value) { - osn::Network *network = Napi::ObjectWrap::Unwrap(value.ToObject()); + auto conn = GetConnection(info); + if (!conn) + return; - if (!network) { - Napi::TypeError::New(info.Env(), "Invalid network argument").ThrowAsJavaScriptException(); + if (value.IsNull() || value.IsUndefined()) { + if (!networkRef.IsEmpty()) + networkRef.Reset(); + conn->call(className, "SetNetwork", {ipc::value(this->uid), ipc::value(UINT64_MAX)}); return; } - auto conn = GetConnection(info); - if (!conn) + Napi::Object obj = value.As(); + if (!obj.InstanceOf(osn::Network::constructor.Value())) + Napi::TypeError::New(info.Env(), "Object is not a Network").ThrowAsJavaScriptException(); + + osn::Network *network = Napi::ObjectWrap::Unwrap(obj); + if (!network) { + Napi::TypeError::New(info.Env(), "Invalid network argument").ThrowAsJavaScriptException(); return; + } conn->call(className, "SetNetwork", {ipc::value(this->uid), ipc::value(network->uid)}); + + if (!networkRef.IsEmpty()) + networkRef.Reset(); + + networkRef = Napi::Persistent(obj); } Napi::Value osn::Streaming::GetSignalHandler(const Napi::CallbackInfo &info) diff --git a/obs-studio-client/source/streaming.hpp b/obs-studio-client/source/streaming.hpp index bb5e6cee6..3e1fbe9be 100644 --- a/obs-studio-client/source/streaming.hpp +++ b/obs-studio-client/source/streaming.hpp @@ -30,6 +30,14 @@ class Streaming : public WorkerSignals { Napi::Function signalHandler; std::string className; + Napi::Reference videoEncoderRef; + Napi::Reference audioEncoderRef; + Napi::Reference serviceRef; + Napi::Reference delayRef; + Napi::Reference reconnectRef; + Napi::Reference networkRef; + void ReleaseObjects(); + Napi::Value GetService(const Napi::CallbackInfo &info); void SetService(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetCanvas(const Napi::CallbackInfo &info); diff --git a/obs-studio-client/source/utility.hpp b/obs-studio-client/source/utility.hpp index ed856fce9..6f0040388 100644 --- a/obs-studio-client/source/utility.hpp +++ b/obs-studio-client/source/utility.hpp @@ -76,15 +76,15 @@ #define dstr(s) #s #define vstr(s) dstr(s) -static bool ValidateResponse(const Napi::CallbackInfo &info, std::vector &response) +static bool ValidateResponse(const Napi::Env &env, std::vector &response) { if (response.size() == 0) { - Napi::Error::New(info.Env(), "Failed to make IPC call, verify IPC status.").ThrowAsJavaScriptException(); + Napi::Error::New(env, "Failed to make IPC call, verify IPC status.").ThrowAsJavaScriptException(); return false; } if ((response.size() == 1) && (response[0].type == ipc::type::Null)) { - Napi::Error::New(info.Env(), response[0].value_str).ThrowAsJavaScriptException(); + Napi::Error::New(env, response[0].value_str).ThrowAsJavaScriptException(); return false; } @@ -94,40 +94,50 @@ static bool ValidateResponse(const Napi::CallbackInfo &info, std::vector GetConnection(const Napi::CallbackInfo &info) +static bool ValidateResponse(const Napi::CallbackInfo &info, std::vector &response) +{ + return ValidateResponse(info.Env(), response); +} + +static FORCE_INLINE std::shared_ptr GetConnection(const Napi::Env &env) { auto conn = Controller::GetInstance().GetConnection(); if (!conn) { - Napi::Error::New(info.Env(), "Failed to obtain IPC connection.").ThrowAsJavaScriptException(); + Napi::Error::New(env, "Failed to obtain IPC connection.").ThrowAsJavaScriptException(); exit(1); } return conn; } +static FORCE_INLINE std::shared_ptr GetConnection(const Napi::CallbackInfo &info) +{ + return GetConnection(info.Env()); +} + namespace utility { template inline std::string TypeOf(T v) { diff --git a/obs-studio-client/source/video-encoder.cpp b/obs-studio-client/source/video-encoder.cpp index 37a591fff..34c4e6a05 100644 --- a/obs-studio-client/source/video-encoder.cpp +++ b/obs-studio-client/source/video-encoder.cpp @@ -53,7 +53,8 @@ osn::VideoEncoder::VideoEncoder(const Napi::CallbackInfo &info) : Napi::ObjectWr Napi::Env env = info.Env(); Napi::HandleScope scope(env); size_t length = info.Length(); - this->uid = 0; + this->uid = UINT64_MAX; + this->encoderInitialized = false; if (length <= 0 || !info[0].IsNumber()) { Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); @@ -61,6 +62,7 @@ osn::VideoEncoder::VideoEncoder(const Napi::CallbackInfo &info) : Napi::ObjectWr } this->uid = (uint64_t)info[0].ToNumber().Int64Value(); + this->encoderInitialized = true; } Napi::Value osn::VideoEncoder::Create(const Napi::CallbackInfo &info) @@ -92,6 +94,22 @@ Napi::Value osn::VideoEncoder::Create(const Napi::CallbackInfo &info) return instance; } +void osn::VideoEncoder::Finalize(Napi::Env env) +{ + if (!this->encoderInitialized) + return; + + auto conn = GetConnection(env); + if (!conn) + return; + + std::vector response = conn->call_synchronous_helper("VideoEncoder", "Finalize", {ipc::value(this->uid)}); + this->encoderInitialized = false; + this->uid = UINT64_MAX; + if (!ValidateResponse(env, response)) + return; +} + Napi::Value osn::VideoEncoder::GetTypes(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); @@ -193,11 +211,18 @@ Napi::Value osn::VideoEncoder::GetLastError(const Napi::CallbackInfo &info) void osn::VideoEncoder::Release(const Napi::CallbackInfo &info) { + if (!this->encoderInitialized) + return; + auto conn = GetConnection(info); if (!conn) return; - conn->call("VideoEncoder", "Release", {}); + this->encoderInitialized = false; + std::vector response = conn->call_synchronous_helper("VideoEncoder", "Release", {ipc::value(this->uid)}); + this->uid = UINT64_MAX; + if (!ValidateResponse(info, response)) + return; } void osn::VideoEncoder::Update(const Napi::CallbackInfo &info) diff --git a/obs-studio-client/source/video-encoder.hpp b/obs-studio-client/source/video-encoder.hpp index 5a3f699ee..62c553474 100644 --- a/obs-studio-client/source/video-encoder.hpp +++ b/obs-studio-client/source/video-encoder.hpp @@ -24,6 +24,7 @@ namespace osn { class VideoEncoder : public Napi::ObjectWrap { public: uint64_t uid; + bool encoderInitialized; public: static Napi::FunctionReference constructor; @@ -31,6 +32,7 @@ class VideoEncoder : public Napi::ObjectWrap { VideoEncoder(const Napi::CallbackInfo &info); static Napi::Value Create(const Napi::CallbackInfo &info); + void Finalize(Napi::Env env); static Napi::Value GetTypes(const Napi::CallbackInfo &info); Napi::Value GetName(const Napi::CallbackInfo &info); diff --git a/obs-studio-server/source/osn-advanced-recording.cpp b/obs-studio-server/source/osn-advanced-recording.cpp index a4a949849..2b78325c8 100644 --- a/obs-studio-server/source/osn-advanced-recording.cpp +++ b/obs-studio-server/source/osn-advanced-recording.cpp @@ -440,15 +440,8 @@ void osn::IAdvancedRecording::SetLegacySettings(void *data, const int64_t id, co void osn::IAdvancedRecording::GetStreaming(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - AdvancedRecording *recording = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!recording) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); - } - - uint64_t uid = osn::IAdvancedStreaming::Manager::GetInstance().find(recording->streaming); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -459,6 +452,13 @@ void osn::IAdvancedRecording::SetStreaming(void *data, const int64_t id, const s PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + recording->streaming = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + AdvancedStreaming *streaming = static_cast(osn::IAdvancedStreaming::Manager::GetInstance().find(args[1].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); diff --git a/obs-studio-server/source/osn-advanced-replay-buffer.cpp b/obs-studio-server/source/osn-advanced-replay-buffer.cpp index 1d8a7ee5d..03054882d 100644 --- a/obs-studio-server/source/osn-advanced-replay-buffer.cpp +++ b/obs-studio-server/source/osn-advanced-replay-buffer.cpp @@ -267,15 +267,8 @@ void osn::IAdvancedReplayBuffer::SetLegacySettings(void *data, const int64_t id, void osn::IAdvancedReplayBuffer::GetStreaming(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - AdvancedReplayBuffer *replayBuffer = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!replayBuffer) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Advanced replay buffer reference is not valid."); - } - - uint64_t uid = osn::IAdvancedStreaming::Manager::GetInstance().find(replayBuffer->streaming); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -286,6 +279,13 @@ void osn::IAdvancedReplayBuffer::SetStreaming(void *data, const int64_t id, cons PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Advanced replay buffer reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + replayBuffer->streaming = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + AdvancedStreaming *streaming = static_cast(osn::IAdvancedStreaming::Manager::GetInstance().find(args[1].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); @@ -299,15 +299,8 @@ void osn::IAdvancedReplayBuffer::SetStreaming(void *data, const int64_t id, cons void osn::IAdvancedReplayBuffer::GetRecording(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - AdvancedReplayBuffer *replayBuffer = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!replayBuffer) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Advanced replay buffer reference is not valid."); - } - - uint64_t uid = osn::IAdvancedRecording::Manager::GetInstance().find(replayBuffer->recording); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -318,6 +311,13 @@ void osn::IAdvancedReplayBuffer::SetRecording(void *data, const int64_t id, cons PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Advanced replay buffer reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + replayBuffer->streaming = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + AdvancedRecording *recording = static_cast(osn::IAdvancedRecording::Manager::GetInstance().find(args[1].value_union.ui64)); if (!recording) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); diff --git a/obs-studio-server/source/osn-audio-encoder.cpp b/obs-studio-server/source/osn-audio-encoder.cpp index 4ab7f211a..e49d41865 100644 --- a/obs-studio-server/source/osn-audio-encoder.cpp +++ b/obs-studio-server/source/osn-audio-encoder.cpp @@ -25,6 +25,9 @@ void osn::AudioEncoder::Register(ipc::server &srv) std::shared_ptr cls = std::make_shared("AudioEncoder"); cls->register_function( std::make_shared("Create", std::vector{ipc::type::String, ipc::type::String, ipc::type::String}, Create)); + + cls->register_function(std::make_shared("Release", std::vector{ipc::type::UInt64}, Release)); + cls->register_function(std::make_shared("Finalize", std::vector{ipc::type::UInt64}, Finalize)); cls->register_function(std::make_shared("GetName", std::vector{ipc::type::UInt64}, GetName)); cls->register_function(std::make_shared("SetName", std::vector{ipc::type::UInt64, ipc::type::String}, SetName)); cls->register_function(std::make_shared("GetBitrate", std::vector{ipc::type::UInt64}, GetBitrate)); @@ -35,7 +38,10 @@ void osn::AudioEncoder::Register(ipc::server &srv) void osn::AudioEncoder::Create(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - obs_encoder_t *audioEncoder = obs_audio_encoder_create("ffmpeg_aac", "audio", nullptr, 0, nullptr); + std::string encoderId = args[0].value_str; + std::string name = args[1].value_str; + + obs_encoder_t *audioEncoder = obs_audio_encoder_create(encoderId.c_str(), name.c_str(), nullptr, 0, nullptr); if (!audioEncoder) { PRETTY_ERROR_RETURN(ErrorCode::Error, "Failed to create the audio encoder."); @@ -51,6 +57,36 @@ void osn::AudioEncoder::Create(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + obs_encoder_t *encoder = osn::AudioEncoder::Manager::GetInstance().find(args[0].value_union.ui64); + blog(LOG_INFO, "Release encoder %p, %d", encoder, args[0].value_union.ui64); + if (!encoder) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Release. Audio encoder reference is not valid."); + } + + obs_encoder_release(encoder); + osn::AudioEncoder::Manager::GetInstance().free(encoder); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + +void osn::AudioEncoder::Finalize(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + obs_encoder_t *encoder = osn::AudioEncoder::Manager::GetInstance().find(args[0].value_union.ui64); + blog(LOG_INFO, "Finalize encoder %p, %d", encoder, args[0].value_union.ui64); + if (!encoder) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Finalize. Audio encoder reference is not valid."); + } + + obs_encoder_release(encoder); + osn::AudioEncoder::Manager::GetInstance().free(encoder); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + void osn::AudioEncoder::GetName(void *data, const int64_t id, const std::vector &args, std::vector &rval) { obs_encoder_t *audioEncoder = osn::AudioEncoder::Manager::GetInstance().find(args[0].value_union.ui64); diff --git a/obs-studio-server/source/osn-audio-encoder.hpp b/obs-studio-server/source/osn-audio-encoder.hpp index 41bba0c03..a2d838b0a 100644 --- a/obs-studio-server/source/osn-audio-encoder.hpp +++ b/obs-studio-server/source/osn-audio-encoder.hpp @@ -46,5 +46,7 @@ class AudioEncoder { static void SetName(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetBitrate(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void SetBitrate(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Release(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Finalize(void *data, const int64_t id, const std::vector &args, std::vector &rval); }; } diff --git a/obs-studio-server/source/osn-delay.cpp b/obs-studio-server/source/osn-delay.cpp index 259c87e11..8bf3b2361 100644 --- a/obs-studio-server/source/osn-delay.cpp +++ b/obs-studio-server/source/osn-delay.cpp @@ -25,6 +25,7 @@ void osn::IDelay::Register(ipc::server &srv) std::shared_ptr cls = std::make_shared("Delay"); cls->register_function(std::make_shared("Create", std::vector{}, Create)); + cls->register_function(std::make_shared("Destroy", std::vector{}, Destroy)); cls->register_function(std::make_shared("GetEnabled", std::vector{ipc::type::UInt64}, GetEnabled)); cls->register_function(std::make_shared("SetEnabled", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnabled)); @@ -49,6 +50,20 @@ void osn::IDelay::Create(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + uint64_t uid = args[0].value_union.ui64; + Delay *delay = osn::IDelay::Manager::GetInstance().find(uid); + if (!delay) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Delay reference is not valid."); + } + + osn::IDelay::Manager::GetInstance().free(uid); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + void osn::IDelay::GetEnabled(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Delay *delay = osn::IDelay::Manager::GetInstance().find(args[0].value_union.ui64); diff --git a/obs-studio-server/source/osn-delay.hpp b/obs-studio-server/source/osn-delay.hpp index a3515e39c..0a38c1730 100644 --- a/obs-studio-server/source/osn-delay.hpp +++ b/obs-studio-server/source/osn-delay.hpp @@ -58,6 +58,7 @@ class IDelay { static void Register(ipc::server &); static void Create(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetEnabled(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void SetEnabled(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetDelaySec(void *data, const int64_t id, const std::vector &args, std::vector &rval); diff --git a/obs-studio-server/source/osn-network.cpp b/obs-studio-server/source/osn-network.cpp index 6e4a335d4..426b598b4 100644 --- a/obs-studio-server/source/osn-network.cpp +++ b/obs-studio-server/source/osn-network.cpp @@ -24,6 +24,7 @@ void osn::INetwork::Register(ipc::server &srv) std::shared_ptr cls = std::make_shared("Network"); cls->register_function(std::make_shared("Create", std::vector{}, Create)); + cls->register_function(std::make_shared("Destroy", std::vector{}, Destroy)); cls->register_function(std::make_shared("GetBindIP", std::vector{ipc::type::UInt64}, GetBindIP)); cls->register_function(std::make_shared("SetBindIP", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetBindIP)); @@ -53,6 +54,20 @@ void osn::INetwork::Create(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + uint64_t uid = args[0].value_union.ui64; + Network *network = osn::INetwork::Manager::GetInstance().find(uid); + if (!network) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Network reference is not valid."); + } + + osn::INetwork::Manager::GetInstance().free(uid); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + void osn::INetwork::GetBindIP(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Network *network = osn::INetwork::Manager::GetInstance().find(args[0].value_union.ui64); diff --git a/obs-studio-server/source/osn-network.hpp b/obs-studio-server/source/osn-network.hpp index 95281a5ff..82bd7c8d3 100644 --- a/obs-studio-server/source/osn-network.hpp +++ b/obs-studio-server/source/osn-network.hpp @@ -60,6 +60,7 @@ class INetwork { static void Register(ipc::server &); static void Create(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetBindIP(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void SetBindIP(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetNetworkInterfaces(void *data, const int64_t id, const std::vector &args, std::vector &rval); diff --git a/obs-studio-server/source/osn-reconnect.cpp b/obs-studio-server/source/osn-reconnect.cpp index 4b405e9e2..c3f5fe088 100644 --- a/obs-studio-server/source/osn-reconnect.cpp +++ b/obs-studio-server/source/osn-reconnect.cpp @@ -25,6 +25,7 @@ void osn::IReconnect::Register(ipc::server &srv) std::shared_ptr cls = std::make_shared("Reconnect"); cls->register_function(std::make_shared("Create", std::vector{}, Create)); + cls->register_function(std::make_shared("Destroy", std::vector{}, Destroy)); cls->register_function(std::make_shared("GetEnabled", std::vector{ipc::type::UInt64}, GetEnabled)); cls->register_function(std::make_shared("SetEnabled", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnabled)); @@ -48,6 +49,20 @@ void osn::IReconnect::Create(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + uint64_t uid = args[0].value_union.ui64; + Reconnect *reconnect = osn::IReconnect::Manager::GetInstance().find(uid); + if (!reconnect) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Reconnect reference is not valid."); + } + + osn::IReconnect::Manager::GetInstance().free(uid); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + void osn::IReconnect::GetEnabled(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Reconnect *reconnect = osn::IReconnect::Manager::GetInstance().find(args[0].value_union.ui64); diff --git a/obs-studio-server/source/osn-reconnect.hpp b/obs-studio-server/source/osn-reconnect.hpp index f93507060..f6902d505 100644 --- a/obs-studio-server/source/osn-reconnect.hpp +++ b/obs-studio-server/source/osn-reconnect.hpp @@ -58,6 +58,7 @@ class IReconnect { static void Register(ipc::server &); static void Create(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetEnabled(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void SetEnabled(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetRetryDelay(void *data, const int64_t id, const std::vector &args, std::vector &rval); diff --git a/obs-studio-server/source/osn-recording.cpp b/obs-studio-server/source/osn-recording.cpp index 77da3582d..86ca53cc9 100644 --- a/obs-studio-server/source/osn-recording.cpp +++ b/obs-studio-server/source/osn-recording.cpp @@ -31,15 +31,8 @@ osn::Recording::~Recording() void osn::IRecording::GetVideoEncoder(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - Recording *recording = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!recording) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple recording reference is not valid."); - } - - uint64_t uid = osn::VideoEncoder::Manager::GetInstance().find(recording->videoEncoder); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -50,6 +43,13 @@ void osn::IRecording::SetVideoEncoder(void *data, const int64_t id, const std::v PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple recording reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + recording->videoEncoder = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + obs_encoder_t *encoder = osn::VideoEncoder::Manager::GetInstance().find(args[1].value_union.ui64); if (!encoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Encoder reference is not valid."); diff --git a/obs-studio-server/source/osn-simple-recording.cpp b/obs-studio-server/source/osn-simple-recording.cpp index 27addc6d3..c59a3e2c1 100644 --- a/obs-studio-server/source/osn-simple-recording.cpp +++ b/obs-studio-server/source/osn-simple-recording.cpp @@ -116,15 +116,8 @@ void osn::ISimpleRecording::SetQuality(void *data, const int64_t id, const std:: void osn::ISimpleRecording::GetAudioEncoder(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - SimpleRecording *recording = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!recording) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); - } - - uint64_t uid = osn::AudioEncoder::Manager::GetInstance().find(recording->audioEncoder); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -135,6 +128,13 @@ void osn::ISimpleRecording::SetAudioEncoder(void *data, const int64_t id, const PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + recording->audioEncoder = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + obs_encoder_t *encoder = osn::AudioEncoder::Manager::GetInstance().find(args[1].value_union.ui64); if (!encoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Encoder reference is not valid."); @@ -551,15 +551,8 @@ void osn::ISimpleRecording::GetLegacySettings(void *data, const int64_t id, cons void osn::ISimpleRecording::GetStreaming(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - SimpleRecording *recording = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!recording) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); - } - - uint64_t uid = osn::ISimpleStreaming::Manager::GetInstance().find(recording->streaming); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -570,6 +563,13 @@ void osn::ISimpleRecording::SetStreaming(void *data, const int64_t id, const std PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + recording->streaming = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + SimpleStreaming *streaming = static_cast(osn::ISimpleStreaming::Manager::GetInstance().find(args[1].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); diff --git a/obs-studio-server/source/osn-simple-replay-buffer.cpp b/obs-studio-server/source/osn-simple-replay-buffer.cpp index 30af1d273..04a140100 100644 --- a/obs-studio-server/source/osn-simple-replay-buffer.cpp +++ b/obs-studio-server/source/osn-simple-replay-buffer.cpp @@ -235,15 +235,8 @@ void osn::ISimpleReplayBuffer::SetLegacySettings(void *data, const int64_t id, c void osn::ISimpleReplayBuffer::GetStreaming(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - SimpleReplayBuffer *replayBuffer = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!replayBuffer) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple replay buffer reference is not valid."); - } - - uint64_t uid = osn::ISimpleStreaming::Manager::GetInstance().find(replayBuffer->streaming); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -254,6 +247,13 @@ void osn::ISimpleReplayBuffer::SetStreaming(void *data, const int64_t id, const PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple replay buffer reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + replayBuffer->streaming = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + SimpleStreaming *streaming = static_cast(osn::ISimpleStreaming::Manager::GetInstance().find(args[1].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); @@ -267,15 +267,8 @@ void osn::ISimpleReplayBuffer::SetStreaming(void *data, const int64_t id, const void osn::ISimpleReplayBuffer::GetRecording(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - SimpleReplayBuffer *replayBuffer = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!replayBuffer) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple replay buffer reference is not valid."); - } - - uint64_t uid = osn::ISimpleRecording::Manager::GetInstance().find(replayBuffer->recording); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -286,6 +279,13 @@ void osn::ISimpleReplayBuffer::SetRecording(void *data, const int64_t id, const PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple replay buffer reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + replayBuffer->recording = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + SimpleRecording *recording = static_cast(osn::ISimpleRecording::Manager::GetInstance().find(args[1].value_union.ui64)); if (!recording) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); diff --git a/obs-studio-server/source/osn-simple-streaming.cpp b/obs-studio-server/source/osn-simple-streaming.cpp index a50e3bbcc..c1bbe54e6 100644 --- a/obs-studio-server/source/osn-simple-streaming.cpp +++ b/obs-studio-server/source/osn-simple-streaming.cpp @@ -96,15 +96,8 @@ void osn::ISimpleStreaming::Destroy(void *data, const int64_t id, const std::vec void osn::ISimpleStreaming::GetAudioEncoder(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - SimpleStreaming *streaming = static_cast(osn::ISimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); - } - - uint64_t uid = osn::AudioEncoder::Manager::GetInstance().find(streaming->audioEncoder); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -115,6 +108,13 @@ void osn::ISimpleStreaming::SetAudioEncoder(void *data, const int64_t id, const PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + streaming->audioEncoder = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + obs_encoder_t *encoder = osn::AudioEncoder::Manager::GetInstance().find(args[1].value_union.ui64); if (!encoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Encoder reference is not valid."); diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index f447c28c3..6ab829d6c 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -35,15 +35,8 @@ osn::Streaming::~Streaming() void osn::IStreaming::GetService(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); - if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Service reference is not valid."); - } - - uint64_t uid = osn::Service::Manager::GetInstance().find(streaming->service); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -54,6 +47,13 @@ void osn::IStreaming::SetService(void *data, const int64_t id, const std::vector PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + streaming->service = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + obs_service_t *service = osn::Service::Manager::GetInstance().find(args[1].value_union.ui64); if (!service) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Service reference is not valid."); @@ -101,15 +101,8 @@ void osn::IStreaming::SetVideoCanvas(void *data, const int64_t id, const std::ve void osn::IStreaming::GetVideoEncoder(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); - if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); - } - - uint64_t uid = osn::VideoEncoder::Manager::GetInstance().find(streaming->videoEncoder); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -120,6 +113,13 @@ void osn::IStreaming::SetVideoEncoder(void *data, const int64_t id, const std::v PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + streaming->videoEncoder = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + obs_encoder_t *encoder = osn::VideoEncoder::Manager::GetInstance().find(args[1].value_union.ui64); if (!encoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Encoder reference is not valid."); @@ -183,15 +183,8 @@ void osn::IStreaming::SetEnableTwitchVOD(void *data, const int64_t id, const std void osn::IStreaming::GetDelay(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); - if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); - } - - uint64_t uid = osn::IDelay::Manager::GetInstance().find(streaming->delay); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -202,6 +195,13 @@ void osn::IStreaming::SetDelay(void *data, const int64_t id, const std::vectordelay = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + Delay *delay = osn::IDelay::Manager::GetInstance().find(args[1].value_union.ui64); if (!delay) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Encoder reference is not valid."); @@ -215,15 +215,8 @@ void osn::IStreaming::SetDelay(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); - if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); - } - - uint64_t uid = osn::IReconnect::Manager::GetInstance().find(streaming->reconnect); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -234,6 +227,13 @@ void osn::IStreaming::SetReconnect(void *data, const int64_t id, const std::vect PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + streaming->reconnect = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + Reconnect *reconnect = osn::IReconnect::Manager::GetInstance().find(args[1].value_union.ui64); if (!reconnect) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Reconnect reference is not valid."); @@ -247,15 +247,8 @@ void osn::IStreaming::SetReconnect(void *data, const int64_t id, const std::vect void osn::IStreaming::GetNetwork(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); - if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); - } - - uint64_t uid = osn::INetwork::Manager::GetInstance().find(streaming->network); - + blog(LOG_WARNING, "Function %s is deprecated", __func__); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(uid)); AUTO_DEBUG; } @@ -266,6 +259,13 @@ void osn::IStreaming::SetNetwork(void *data, const int64_t id, const std::vector PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } + if (args[1].value_union.ui64 == UINT64_MAX) { + streaming->network = nullptr; + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; + return; + } + Network *network = osn::INetwork::Manager::GetInstance().find(args[1].value_union.ui64); if (!network) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Network reference is not valid."); diff --git a/obs-studio-server/source/osn-video-encoder.cpp b/obs-studio-server/source/osn-video-encoder.cpp index 71a52e480..39b31a53b 100644 --- a/obs-studio-server/source/osn-video-encoder.cpp +++ b/obs-studio-server/source/osn-video-encoder.cpp @@ -33,6 +33,7 @@ void osn::VideoEncoder::Register(ipc::server &srv) cls->register_function(std::make_shared("GetId", std::vector{ipc::type::UInt64}, GetId)); cls->register_function(std::make_shared("GetLastError", std::vector{ipc::type::UInt64}, GetLastError)); cls->register_function(std::make_shared("Release", std::vector{ipc::type::UInt64}, Release)); + cls->register_function(std::make_shared("Finalize", std::vector{ipc::type::UInt64}, Finalize)); cls->register_function(std::make_shared("Update", std::vector{ipc::type::UInt64, ipc::type::String}, Update)); cls->register_function(std::make_shared("GetProperties", std::vector{ipc::type::UInt64}, GetProperties)); cls->register_function(std::make_shared("GetSettings", std::vector{ipc::type::UInt64}, GetSettings)); @@ -81,7 +82,7 @@ void osn::VideoEncoder::GetName(void *data, const int64_t id, const std::vector< { obs_encoder_t *encoder = osn::VideoEncoder::Manager::GetInstance().find(args[0].value_union.ui64); if (!encoder) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Video encoder reference is not valid."); + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "GetName. Video encoder reference is not valid."); } const char *name = obs_encoder_get_name(encoder); @@ -94,7 +95,7 @@ void osn::VideoEncoder::SetName(void *data, const int64_t id, const std::vector< { obs_encoder_t *encoder = osn::VideoEncoder::Manager::GetInstance().find(args[0].value_union.ui64); if (!encoder) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Video encoder reference is not valid."); + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "SetName. Video encoder reference is not valid."); } std::string name = args[1].value_str; @@ -107,7 +108,7 @@ void osn::VideoEncoder::GetType(void *data, const int64_t id, const std::vector< { obs_encoder_t *encoder = osn::VideoEncoder::Manager::GetInstance().find(args[0].value_union.ui64); if (!encoder) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Video encoder reference is not valid."); + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "GetType. Video encoder reference is not valid."); } uint32_t type = (uint32_t)obs_encoder_get_type(encoder); @@ -120,7 +121,7 @@ void osn::VideoEncoder::GetActive(void *data, const int64_t id, const std::vecto { obs_encoder_t *encoder = osn::VideoEncoder::Manager::GetInstance().find(args[0].value_union.ui64); if (!encoder) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Video encoder reference is not valid."); + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "GetActive. Video encoder reference is not valid."); } bool active = obs_encoder_active(encoder); @@ -133,7 +134,7 @@ void osn::VideoEncoder::GetId(void *data, const int64_t id, const std::vector &args, std::vector &rval) { obs_encoder_t *encoder = osn::VideoEncoder::Manager::GetInstance().find(args[0].value_union.ui64); + blog(LOG_INFO, "Release encoder %p, %d", encoder, args[0].value_union.ui64); if (!encoder) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Video encoder reference is not valid."); + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Release. Video encoder reference is not valid."); } obs_encoder_release(encoder); - encoder = nullptr; + osn::VideoEncoder::Manager::GetInstance().free(encoder); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + +void osn::VideoEncoder::Finalize(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + obs_encoder_t *encoder = osn::VideoEncoder::Manager::GetInstance().find(args[0].value_union.ui64); + blog(LOG_INFO, "Finalize encoder %p, %d", encoder, args[0].value_union.ui64); + if (!encoder) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Finalize. Video encoder reference is not valid."); + } + + obs_encoder_release(encoder); + osn::VideoEncoder::Manager::GetInstance().free(encoder); + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; } @@ -172,7 +190,7 @@ void osn::VideoEncoder::Update(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetLastError(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void Release(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Finalize(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void Update(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetProperties(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetSettings(void *data, const int64_t id, const std::vector &args, std::vector &rval); diff --git a/package.json b/package.json index f82886171..ec1bd4b9c 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "local:config": "yarn install && git submodule update --init --recursive --force && cmake -Bbuild -H. -G\"Visual Studio 16 2019\" -A\"x64\" -DCMAKE_INSTALL_PREFIX=\"./obs-studio-node\" -DLIBOBS_BUILD_TYPE=\"debug\" -DCMAKE_PREFIX_PATH=%CD%/build/libobs-src/cmake/", "local:build": "cmake --build build --target install --config Debug", "local:clean": "rm -rf build/*", - "test": "electron-mocha -t 80000 -c true -r ts-node/register tests/osn-tests/src/**/*.ts --reporter tests/osn-tests/util/list-reporter.js" + "test": "electron-mocha -t 80000 --js-flags=\"--expose-gc\" -c true -r ts-node/register tests/osn-tests/src/**/*.ts --reporter tests/osn-tests/util/list-reporter.js" }, "devDependencies": { "@types/chai": "^4.1.7", @@ -35,6 +35,7 @@ "colors": "^1.4.0", "electron": "29.4.3", "electron-mocha": "^12.1.0", + "get-func-name": "^3.0.0", "mocha": "^7.1.0", "mocha-junit-reporter": "^1.22.0", "node-addon-api": "^7.1.1", @@ -45,7 +46,6 @@ "typedoc-plugin-markdown": "^2.2.17", "typescript": "^4.0.7", "uuid": "^3.0.1", - "get-func-name": "^3.0.0", "wait-queue": "^1.1.4" }, "keywords": [ @@ -68,6 +68,5 @@ "audio", "mixer", "beam" - ], - "dependencies": {} + ] } diff --git a/tests/osn-tests/src/test_audio_encoder.ts b/tests/osn-tests/src/test_audio_encoder.ts index 1de67cdf0..4633c8250 100644 --- a/tests/osn-tests/src/test_audio_encoder.ts +++ b/tests/osn-tests/src/test_audio_encoder.ts @@ -43,9 +43,9 @@ describe(testName, () => { }); it('Create an audio encoder', () => { - const encoder = osn.AudioEncoderFactory.create(); + const encoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-test-1"); expect(encoder).to.not.equal(undefined, 'Invalid audio encoder creation'); - expect(encoder.name).to.equal('audio', "Invalid default name value"); + expect(encoder.name).to.equal('audio-encoder-test-1', "Invalid default name value"); expect(encoder.bitrate).to.equal(128, "Invalid default bitrate value"); encoder.name = 'audio track'; @@ -53,5 +53,7 @@ describe(testName, () => { expect(encoder.name).to.equal('audio track', "Invalid name value"); expect(encoder.bitrate).to.equal(256, "Invalid bitrate value"); + + encoder.release(); }); }); diff --git a/tests/osn-tests/src/test_osn_advanced_recording.ts b/tests/osn-tests/src/test_osn_advanced_recording.ts index 59a3a56f1..059848e9d 100644 --- a/tests/osn-tests/src/test_osn_advanced_recording.ts +++ b/tests/osn-tests/src/test_osn_advanced_recording.ts @@ -82,7 +82,7 @@ describe(testName, () => { recording.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording.format = ERecordingFormat.MOV; recording.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-adv-recording-1'); recording.overwrite = true; recording.noSpace = false; recording.video = obs.defaultVideoContext; @@ -111,7 +111,9 @@ describe(testName, () => { expect(recording.useStreamEncoders).to.equal( false, "Invalid useStreamEncoders default value"); + const videoEncoder = recording.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording); + videoEncoder.release(); }); it('Start advanced recording - Stream', async function () { @@ -128,7 +130,7 @@ describe(testName, () => { recording.useStreamEncoders = true; const stream = osn.AdvancedStreamingFactory.create(); stream.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-adv-streaming-1'); stream.service = osn.ServiceFactory.legacySettings; stream.video = obs.defaultVideoContext; stream.signalHandler = (signal) => {obs.signals.push(signal)}; @@ -243,8 +245,10 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + const videoEncoder = stream.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording); osn.AdvancedStreamingFactory.destroy(stream); + videoEncoder.release(); }); it('Start advanced recording - Custom encoders', async function () { @@ -256,7 +260,7 @@ describe(testName, () => { recording.format = ERecordingFormat.MP4; recording.useStreamEncoders = false; recording.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-adv-recording-2'); recording.overwrite = false; recording.noSpace = false; recording.video = obs.defaultVideoContext; @@ -316,6 +320,8 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Wrote, GetErrorMessage(ETestErrorMsg.RecordingOutput)); + const videoEncoder = recording.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording); + videoEncoder.release(); }); }); diff --git a/tests/osn-tests/src/test_osn_advanced_replayBuffer.ts b/tests/osn-tests/src/test_osn_advanced_replayBuffer.ts index a20737460..582cfba9a 100644 --- a/tests/osn-tests/src/test_osn_advanced_replayBuffer.ts +++ b/tests/osn-tests/src/test_osn_advanced_replayBuffer.ts @@ -131,7 +131,7 @@ describe(testName, () => { recording.useStreamEncoders = false; recording.video = obs.defaultVideoContext; recording.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-adv-recording-1'); const track1 = osn.AudioTrackFactory.create(160, 'track1'); osn.AudioTrackFactory.setAtIndex(track1, 1); recording.overwrite = false; @@ -239,8 +239,10 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Wrote, GetErrorMessage(ETestErrorMsg.RecordingOutput)); + const streamEncoder = recording.videoEncoder; osn.AdvancedReplayBufferFactory.destroy(replayBuffer); osn.AdvancedRecordingFactory.destroy(recording); + streamEncoder.release(); }); it('Start advanced replay buffer - Use Stream through Recording', async function() { @@ -264,14 +266,14 @@ describe(testName, () => { recording.useStreamEncoders = true; recording.overwrite = false; recording.noSpace = false; - recording .video = obs.defaultVideoContext; + recording.video = obs.defaultVideoContext; recording.useStreamEncoders = true; recording.signalHandler = (signal) => {obs.signals.push(signal)}; const stream = osn.AdvancedStreamingFactory.create(); stream.video = obs.defaultVideoContext; stream.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-adv-stream-1'); stream.service = osn.ServiceFactory.legacySettings; const track1 = osn.AudioTrackFactory.create(160, 'track1'); osn.AudioTrackFactory.setAtIndex(track1, 1); @@ -433,8 +435,10 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + const videoEncoder = stream.videoEncoder; osn.AdvancedReplayBufferFactory.destroy(replayBuffer); osn.AdvancedRecordingFactory.destroy(recording); osn.AdvancedStreamingFactory.destroy(stream); + videoEncoder.release(); }); }); diff --git a/tests/osn-tests/src/test_osn_advanced_streaming.ts b/tests/osn-tests/src/test_osn_advanced_streaming.ts index 8c1ffea18..a9a931804 100644 --- a/tests/osn-tests/src/test_osn_advanced_streaming.ts +++ b/tests/osn-tests/src/test_osn_advanced_streaming.ts @@ -101,7 +101,7 @@ describe(testName, () => { } const stream = osn.AdvancedStreamingFactory.create(); stream.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-adv-streaming-1'); stream.service = osn.ServiceFactory.legacySettings; stream.delay = osn.DelayFactory.create(); @@ -180,7 +180,9 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + const videoEncoder = stream.videoEncoder; osn.AdvancedStreamingFactory.destroy(stream); + videoEncoder.release(); }); it('Stream with invalid stream key', async function() { @@ -189,7 +191,7 @@ describe(testName, () => { } const stream = osn.AdvancedStreamingFactory.create(); stream.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-adv-streaming-2'); stream.service = osn.ServiceFactory.legacySettings; stream.service.update({ key: 'invalid' }); stream.delay = @@ -222,6 +224,8 @@ describe(testName, () => { stream.service.update({ key: obs.userStreamKey }); + const streamingEncoder = stream.videoEncoder; osn.AdvancedStreamingFactory.destroy(stream); + streamingEncoder.release(); }); }); diff --git a/tests/osn-tests/src/test_osn_dual_output.ts b/tests/osn-tests/src/test_osn_dual_output.ts index a145b0b5d..108fd1c85 100644 --- a/tests/osn-tests/src/test_osn_dual_output.ts +++ b/tests/osn-tests/src/test_osn_dual_output.ts @@ -123,7 +123,7 @@ describe(testName, () => { recording.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording.format = ERecordingFormat.MP4; recording.useStreamEncoders = false; - recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-1'); recording.overwrite = false; recording.noSpace = false; recording.video = obs.defaultVideoContext; @@ -135,7 +135,7 @@ describe(testName, () => { recording2.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording2.format = ERecordingFormat.MP4; recording2.useStreamEncoders = false; - recording2.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + recording2.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-2'); recording2.overwrite = false; recording2.noSpace = false; recording2.video = secondContext; @@ -161,9 +161,13 @@ describe(testName, () => { await handleStreamSignals(EOBSOutputType.Recording, EOBSOutputSignal.Stop, ETestErrorMsg.RecordingOutput); await handleStreamSignals(EOBSOutputType.Recording, EOBSOutputSignal.Wrote, ETestErrorMsg.RecordingOutput); + const recordingEncoder = recording.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording); + recordingEncoder.release(); + const recording2Encoder = recording2.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording2); + recording2Encoder.release(); }); it('Start Dual Output with recording and scene items', async function() { @@ -176,7 +180,7 @@ describe(testName, () => { recording.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording.format = ERecordingFormat.MP4; recording.useStreamEncoders = false; - recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-3'); recording.overwrite = false; recording.noSpace = false; recording.video = obs.defaultVideoContext; @@ -214,7 +218,7 @@ describe(testName, () => { recording2.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording2.format = ERecordingFormat.MP4; recording2.useStreamEncoders = false; - recording2.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + recording2.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-4'); recording2.overwrite = false; recording2.noSpace = false; recording2.video = secondContext; @@ -240,9 +244,13 @@ describe(testName, () => { await handleStreamSignals(EOBSOutputType.Recording, EOBSOutputSignal.Stop, ETestErrorMsg.RecordingOutput); await handleStreamSignals(EOBSOutputType.Recording, EOBSOutputSignal.Wrote, ETestErrorMsg.RecordingOutput); + const recordingEncoder = recording.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording); + recordingEncoder.release(); + const recording2Encoder = recording2.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording2); + recording2Encoder.release(); osn.Global.setOutputSource(0, returnSource); @@ -262,7 +270,7 @@ describe(testName, () => { recording.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording.format = ERecordingFormat.MP4; recording.useStreamEncoders = false; - recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-1'); + recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-5'); recording.overwrite = false; recording.noSpace = false; recording.mixer = 1; @@ -275,7 +283,7 @@ describe(testName, () => { recording2.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording2.format = ERecordingFormat.MP4; recording2.useStreamEncoders = false; - recording2.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-2'); + recording2.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-6'); recording2.overwrite = false; recording2.noSpace = false; recording2.mixer = 2; @@ -335,12 +343,17 @@ describe(testName, () => { await handleStreamSignals(EOBSOutputType.Recording, EOBSOutputSignal.Stop, ETestErrorMsg.RecordingOutput); await handleStreamSignals(EOBSOutputType.Recording, EOBSOutputSignal.Wrote, ETestErrorMsg.RecordingOutput); + const recordingEncoder = recording.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording); + const recording2Encoder = recording2.videoEncoder; osn.AdvancedRecordingFactory.destroy(recording2); osn.Global.setOutputSource(0, returnSource); + recordingEncoder.release(); + recording2Encoder.release(); + sceneItem1.source.release(); sceneItem1.remove(); @@ -360,8 +373,8 @@ describe(testName, () => { const recording = osn.SimpleRecordingFactory.create(); recording.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording.format = ERecordingFormat.MP4; - recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-1'); - recording.audioEncoder = osn.AudioEncoderFactory.create(); + recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-7'); + recording.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-test-recording-1"); recording.audioEncoder.name = 'audio-encoder-test-recording-1'; recording.audioEncoder.bitrate = 160; recording.overwrite = false; @@ -375,8 +388,8 @@ describe(testName, () => { const recording2 = osn.SimpleRecordingFactory.create(); recording2.path = path.join(path.normalize(__dirname), '..', 'osnData'); recording2.format = ERecordingFormat.MP4; - recording2.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-2'); - recording2.audioEncoder = osn.AudioEncoderFactory.create(); + recording2.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-test-recording-8'); + recording2.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-test-recording-2"); recording2.audioEncoder.name = 'audio-encoder-test-recording-2'; recording2.audioEncoder.bitrate = 160; recording2.overwrite = false; @@ -438,8 +451,12 @@ describe(testName, () => { await handleStreamSignals(EOBSOutputType.Recording, EOBSOutputSignal.Stop, ETestErrorMsg.RecordingOutput); await handleStreamSignals(EOBSOutputType.Recording, EOBSOutputSignal.Wrote, ETestErrorMsg.RecordingOutput); + const recordingEncoder = recording.videoEncoder; + const recordingAudioEncoder = recording.audioEncoder; osn.SimpleRecordingFactory.destroy(recording); + const recording2Encoder = recording2.videoEncoder; + const recording2AudioEncoder = recording2.audioEncoder; osn.SimpleRecordingFactory.destroy(recording2); osn.Global.setOutputSource(0, returnSource); @@ -451,6 +468,11 @@ describe(testName, () => { sceneItem2.remove(); scene.release(); + + recordingEncoder.release(); + recording2Encoder.release(); + recordingAudioEncoder.release(); + recording2AudioEncoder.release(); }); it('Start Dual Output with legacy streaming to two services', async function() { diff --git a/tests/osn-tests/src/test_osn_simple_recording.ts b/tests/osn-tests/src/test_osn_simple_recording.ts index d427d5641..99528c238 100644 --- a/tests/osn-tests/src/test_osn_simple_recording.ts +++ b/tests/osn-tests/src/test_osn_simple_recording.ts @@ -79,9 +79,9 @@ describe(testName, () => { recording.quality = ERecordingQuality.HighQuality; recording.video = obs.defaultVideoContext; recording.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-recording-1'); recording.lowCPU = true; - recording.audioEncoder = osn.AudioEncoderFactory.create(); + recording.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-recording-1"); recording.overwrite = true; recording.noSpace = false; @@ -98,7 +98,11 @@ describe(testName, () => { expect(recording.noSpace).to.equal( false, "Invalid noSpace value"); + const videoEncoder = recording.videoEncoder; + const audioEncoder = recording.audioEncoder; osn.SimpleRecordingFactory.destroy(recording); + videoEncoder.release(); + audioEncoder.release(); }); it('Start simple recording - Stream', async function () { @@ -118,9 +122,9 @@ describe(testName, () => { const stream = osn.SimpleStreamingFactory.create(); stream.video = obs.defaultVideoContext; stream.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-stream-1'); stream.service = osn.ServiceFactory.legacySettings; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-1"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; recording.streaming = stream; @@ -230,8 +234,12 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + const streamEncoder = stream.videoEncoder; + const audioEncoder = stream.audioEncoder; osn.SimpleRecordingFactory.destroy(recording); osn.SimpleStreamingFactory.destroy(stream); + streamEncoder.release(); + audioEncoder.release(); }); it('Start simple recording - HighQuality', async function () { @@ -244,9 +252,9 @@ describe(testName, () => { recording.quality = ERecordingQuality.HighQuality; recording.video = obs.defaultVideoContext; recording.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-recording-2'); recording.lowCPU = false; - recording.audioEncoder = osn.AudioEncoderFactory.create(); + recording.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-recording-2"); recording.overwrite = false; recording.noSpace = false; recording.signalHandler = (signal) => {obs.signals.push(signal)}; @@ -303,7 +311,147 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Wrote, GetErrorMessage(ETestErrorMsg.RecordingOutput)); + const videoEncoder = recording.videoEncoder; + const audioEncoder = recording.audioEncoder; + osn.SimpleRecordingFactory.destroy(recording); + videoEncoder.release(); + audioEncoder.release(); + }); + + it('Start simple recording - mpegts', async function () { + if (obs.isDarwin()) { + this.skip(); + } + + const formats: ERecordingFormat[] = [ + ERecordingFormat.MP4, + ERecordingFormat.MOV, + ERecordingFormat.MKV, + ERecordingFormat.FLV, + ERecordingFormat.MPEGTS, + ERecordingFormat.HLS, + ]; + for (const format of formats) { + const recording = osn.SimpleRecordingFactory.create(); + + recording.path = path.join(path.normalize(__dirname), "..", "osnData"); + recording.format = format as ERecordingFormat; + recording.quality = ERecordingQuality.HighQuality; + recording.video = obs.defaultVideoContext; + recording.videoEncoder = osn.VideoEncoderFactory.create( + "obs_x264", + `video-encoder-recording-${format}` + ); + recording.lowCPU = false; + recording.audioEncoder = osn.AudioEncoderFactory.create( + "ffmpeg_aac", + `audio-encoder-simple-recording-${format}` + ); + recording.overwrite = false; + recording.noSpace = false; + recording.signalHandler = (signal) => obs.signals.push(signal); + + /* ---------- start ---------- */ + recording.start(); + + let signalInfo = await obs.getNextSignalInfo( + EOBSOutputType.Recording, + EOBSOutputSignal.Start + ); + + if (signalInfo.signal === EOBSOutputSignal.Stop) { + throw Error( + GetErrorMessage( + ETestErrorMsg.RecordOutputDidNotStart, + signalInfo.code.toString(), + signalInfo.error + ) + ); + } + + expect(signalInfo.type).to.equal( + EOBSOutputType.Recording, + GetErrorMessage(ETestErrorMsg.RecordingOutput) + ); + expect(signalInfo.signal).to.equal( + EOBSOutputSignal.Start, + GetErrorMessage(ETestErrorMsg.RecordingOutput) + ); + + await sleep(2500); + + /* ---------- stop ---------- */ + recording.stop(); + + signalInfo = await obs.getNextSignalInfo( + EOBSOutputType.Recording, + EOBSOutputSignal.Stopping + ); + + expect(signalInfo.type).to.equal( + EOBSOutputType.Recording, + GetErrorMessage(ETestErrorMsg.RecordingOutput) + ); + expect(signalInfo.signal).to.equal( + EOBSOutputSignal.Stopping, + GetErrorMessage(ETestErrorMsg.RecordingOutput) + ); + + signalInfo = await obs.getNextSignalInfo( + EOBSOutputType.Recording, + EOBSOutputSignal.Stop + ); + + if (signalInfo.code !== 0) { + throw Error( + GetErrorMessage( + ETestErrorMsg.RecordOutputStoppedWithError, + signalInfo.code.toString(), + signalInfo.error + ) + ); + } + + expect(signalInfo.type).to.equal( + EOBSOutputType.Recording, + GetErrorMessage(ETestErrorMsg.RecordingOutput) + ); + expect(signalInfo.signal).to.equal( + EOBSOutputSignal.Stop, + GetErrorMessage(ETestErrorMsg.RecordingOutput) + ); + + signalInfo = await obs.getNextSignalInfo( + EOBSOutputType.Recording, + EOBSOutputSignal.Wrote + ); + + if (signalInfo.code !== 0) { + throw Error( + GetErrorMessage( + ETestErrorMsg.RecordOutputStoppedWithError, + signalInfo.code.toString(), + signalInfo.error + ) + ); + } + + expect(signalInfo.type).to.equal( + EOBSOutputType.Recording, + GetErrorMessage(ETestErrorMsg.RecordingOutput) + ); + expect(signalInfo.signal).to.equal( + EOBSOutputSignal.Wrote, + GetErrorMessage(ETestErrorMsg.RecordingOutput) + ); + + // cleanup for this format + const videoEncoder = recording.videoEncoder; + const audioEncoder = recording.audioEncoder; osn.SimpleRecordingFactory.destroy(recording); + videoEncoder.release(); + audioEncoder.release(); + } }); it('Start simple recording - HigherQuality', async function () { @@ -316,9 +464,9 @@ describe(testName, () => { recording.quality = ERecordingQuality.HigherQuality; recording.video = obs.defaultVideoContext; recording.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-recording-3'); recording.lowCPU = false; - recording.audioEncoder = osn.AudioEncoderFactory.create(); + recording.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-recording-1"); recording.overwrite = false; recording.noSpace = false; recording.signalHandler = (signal) => {obs.signals.push(signal)}; @@ -375,7 +523,11 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Wrote, GetErrorMessage(ETestErrorMsg.RecordingOutput)); + const videoEncoder = recording.videoEncoder; + const audioEncoder = recording.audioEncoder; osn.SimpleRecordingFactory.destroy(recording); + videoEncoder.release(); + audioEncoder.release(); }); it('Start simple recording - Lossless', async function () { diff --git a/tests/osn-tests/src/test_osn_simple_replayBuffer.ts b/tests/osn-tests/src/test_osn_simple_replayBuffer.ts index 8cd527e89..58fe6daed 100644 --- a/tests/osn-tests/src/test_osn_simple_replayBuffer.ts +++ b/tests/osn-tests/src/test_osn_simple_replayBuffer.ts @@ -126,8 +126,8 @@ describe(testName, () => { recording.quality = osn.ERecordingQuality.HighQuality; recording.video = obs.defaultVideoContext; recording.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); - recording.audioEncoder = osn.AudioEncoderFactory.create(); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-simple-recording-1'); + recording.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-recording-1"); recording.lowCPU = false; recording.overwrite = false; recording.noSpace = false; @@ -185,8 +185,12 @@ describe(testName, () => { expect(expectedPrefix).to.equal(true, 'Wrong prefix when saving the simple replay buffer'); expect(expectedSuffix).to.equal(true, 'Wrong suffix when saving the simple replay buffer'); + const videoEncoder = recording.videoEncoder; + const audioEncoder = recording.audioEncoder; osn.SimpleReplayBufferFactory.destroy(replayBuffer); osn.SimpleRecordingFactory.destroy(recording); + videoEncoder.release(); + audioEncoder.release(); }); it('Start simple replay buffer - Use Stream through Recording', async function() { @@ -217,9 +221,9 @@ describe(testName, () => { const stream = osn.SimpleStreamingFactory.create(); stream.video = obs.defaultVideoContext; stream.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-simple-streaming-1'); stream.service = osn.ServiceFactory.legacySettings; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-1"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; recording.streaming = stream; @@ -377,8 +381,12 @@ describe(testName, () => { expect(expectedPrefix).to.equal(true, 'Wrong prefix when saving the simple replay buffer'); expect(expectedSuffix).to.equal(true, 'Wrong suffix when saving the simple replay buffer'); + const videoEncoder = stream.videoEncoder; + const audioEncoder = stream.audioEncoder; osn.SimpleReplayBufferFactory.destroy(replayBuffer); osn.SimpleRecordingFactory.destroy(recording); osn.SimpleStreamingFactory.destroy(stream); + videoEncoder.release(); + audioEncoder.release(); }); }); diff --git a/tests/osn-tests/src/test_osn_simple_streaming.ts b/tests/osn-tests/src/test_osn_simple_streaming.ts index 97471ddd0..a1383b709 100644 --- a/tests/osn-tests/src/test_osn_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_simple_streaming.ts @@ -87,7 +87,7 @@ describe(testName, () => { } const stream = osn.SimpleStreamingFactory.create(); stream.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-simple-streaming-1'); stream.service = osn.ServiceFactory.legacySettings; stream.delay = osn.DelayFactory.create(); @@ -96,7 +96,7 @@ describe(testName, () => { stream.network = osn.NetworkFactory.create(); stream.video = obs.defaultVideoContext; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-1"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; stream.start(); @@ -164,7 +164,11 @@ describe(testName, () => { expect(signalInfo.signal).to.equal( EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + const streamEncoder = stream.videoEncoder; + const audioEncoder = stream.audioEncoder; osn.SimpleStreamingFactory.destroy(stream); + streamEncoder.release(); + audioEncoder.release(); }); it('Stream with invalid stream key', async function() { @@ -173,7 +177,7 @@ describe(testName, () => { } const stream = osn.SimpleStreamingFactory.create(); stream.videoEncoder = - osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-simple-streaming-2'); stream.service = osn.ServiceFactory.legacySettings; stream.service.update({ key: 'invalid' }); stream.delay = @@ -183,7 +187,7 @@ describe(testName, () => { stream.network = osn.NetworkFactory.create(); stream.video = obs.defaultVideoContext; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-2"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; stream.start(); @@ -204,7 +208,11 @@ describe(testName, () => { expect(signalInfo.code).to.equal(-3, GetErrorMessage(ETestErrorMsg.StreamOutput)); stream.service.update({ key: obs.userStreamKey }); - + + const videoEncoder = stream.videoEncoder; + const audioEncoder = stream.audioEncoder; osn.SimpleStreamingFactory.destroy(stream); + videoEncoder.release(); + audioEncoder.release(); }); }); diff --git a/tests/osn-tests/src/test_osn_video_encoder.ts b/tests/osn-tests/src/test_osn_video_encoder.ts index 86976e44b..83aa1d9b8 100644 --- a/tests/osn-tests/src/test_osn_video_encoder.ts +++ b/tests/osn-tests/src/test_osn_video_encoder.ts @@ -47,7 +47,7 @@ describe(testName, () => { }); it('Create a video encoder', () => { - const encoder = osn.VideoEncoderFactory.create('obs_x264', "My x264", {}); + const encoder = osn.VideoEncoderFactory.create('obs_x264', "video-encoder-test-1", {}); expect(encoder).to.not.equal(undefined, 'Invalid x264 video encoder creation'); expect(encoder.active).to.equal(false, "Invalid active value"); expect(encoder.lastError).to.equal('', "Error while creating the video encoder"); @@ -96,10 +96,12 @@ describe(testName, () => { expect(propsArray[10].name).to.equal('repeat_headers', "Invalid repeat_headers name property"); expect(propsArray[10].value).to.equal(false, "Invalid repeat_headers value property"); + + encoder.release(); }); it('Update video encoder properties', () => { - const encoder = osn.VideoEncoderFactory.create('obs_x264', "My x264", {}); + const encoder = osn.VideoEncoderFactory.create('obs_x264', "video-encoder-test-2", {}); encoder.update({ rate_control: 'VBR', bitrate: 5000, @@ -157,5 +159,7 @@ describe(testName, () => { expect(propsArray[10].name).to.equal('repeat_headers', "Invalid repeat_headers name property"); expect(propsArray[10].value).to.equal(true, "Invalid repeat_headers value property"); + + encoder.release(); }); }); From c335a11103b106b8817be99d7282718f9c504510 Mon Sep 17 00:00:00 2001 From: Vladimir Sumarov Date: Mon, 22 Sep 2025 14:43:16 -0700 Subject: [PATCH 02/19] fix test --- tests/osn-tests/src/test_osn_simple_recording.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/osn-tests/src/test_osn_simple_recording.ts b/tests/osn-tests/src/test_osn_simple_recording.ts index 99528c238..3be49b7d1 100644 --- a/tests/osn-tests/src/test_osn_simple_recording.ts +++ b/tests/osn-tests/src/test_osn_simple_recording.ts @@ -623,8 +623,8 @@ describe(testName, () => { recording.format = ERecordingFormat.MP4; recording.quality = ERecordingQuality.HighQuality; recording.video = obs.defaultVideoContext; - recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-browser-rec', ); - recording.audioEncoder = osn.AudioEncoderFactory.create(); + recording.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder-browser-rec'); + recording.audioEncoder = osn.AudioEncoderFactory.create('ffmpeg_aac', 'audio-encoder-browser-rec') recording.overwrite = true; recording.noSpace = false; recording.signalHandler = (sig) => obs.signals.push(sig); @@ -671,7 +671,12 @@ describe(testName, () => { } expect(sig.signal).to.equal(EOBSOutputSignal.Wrote,GetErrorMessage(ETestErrorMsg.RecordingOutput),); + const videoEncoder = recording.videoEncoder; + const audioEncoder = recording.audioEncoder; osn.SimpleRecordingFactory.destroy(recording); + videoEncoder.release(); + audioEncoder.release(); + browserInput.release(); sceneItem1.source.release(); sceneItem1.remove(); From 773c4c613a36416fd7ac35608da57e9e0ee8c4cc Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Fri, 19 Dec 2025 14:56:47 +0000 Subject: [PATCH 03/19] Code moved from osn-output-signals to osn-output --- obs-studio-server/CMakeLists.txt | 2 - .../source/osn-advanced-streaming.cpp | 7 +- obs-studio-server/source/osn-file-output.hpp | 6 +- .../source/osn-output-signals.cpp | 116 ----------------- .../source/osn-output-signals.hpp | 62 --------- obs-studio-server/source/osn-output.cpp | 118 ++++++++++++++++++ obs-studio-server/source/osn-output.hpp | 38 ++++++ obs-studio-server/source/osn-recording.hpp | 4 +- .../source/osn-replay-buffer.hpp | 4 +- obs-studio-server/source/osn-streaming.hpp | 11 +- 10 files changed, 172 insertions(+), 196 deletions(-) delete mode 100644 obs-studio-server/source/osn-output-signals.cpp delete mode 100644 obs-studio-server/source/osn-output-signals.hpp diff --git a/obs-studio-server/CMakeLists.txt b/obs-studio-server/CMakeLists.txt index 3f91439fc..9fa3385b4 100644 --- a/obs-studio-server/CMakeLists.txt +++ b/obs-studio-server/CMakeLists.txt @@ -345,8 +345,6 @@ SET(osn-server_SOURCES "${PROJECT_SOURCE_DIR}/source/osn-file-output.hpp" "${PROJECT_SOURCE_DIR}/source/osn-advanced-replay-buffer.cpp" "${PROJECT_SOURCE_DIR}/source/osn-advanced-replay-buffer.hpp" - "${PROJECT_SOURCE_DIR}/source/osn-output-signals.cpp" - "${PROJECT_SOURCE_DIR}/source/osn-output-signals.hpp" ###### utlity graphics ###### "${PROJECT_SOURCE_DIR}/source/gs-limits.h" diff --git a/obs-studio-server/source/osn-advanced-streaming.cpp b/obs-studio-server/source/osn-advanced-streaming.cpp index 265ac9d49..3c56a6af4 100644 --- a/obs-studio-server/source/osn-advanced-streaming.cpp +++ b/obs-studio-server/source/osn-advanced-streaming.cpp @@ -366,9 +366,10 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec { AdvancedStreaming *streaming = static_cast(osn::IAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple streaming reference is not valid."); + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Advanced streaming reference is not valid."); } + // TODO: enhanced broadcasting case if (!streaming->videoEncoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid video encoder."); } @@ -390,10 +391,6 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Error while creating the streaming output."); } - if (!streaming->videoEncoder) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Error while creating the video encoder."); - } - if (!setAudioEncoder(streaming)) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Error while creating the audio encoder."); } diff --git a/obs-studio-server/source/osn-file-output.hpp b/obs-studio-server/source/osn-file-output.hpp index 89c77c817..4697d461c 100644 --- a/obs-studio-server/source/osn-file-output.hpp +++ b/obs-studio-server/source/osn-file-output.hpp @@ -19,12 +19,12 @@ #pragma once #include #include "utility.hpp" -#include "osn-output-signals.hpp" +#include "osn-output.hpp" namespace osn { -class FileOutput : public OutputSignals { +class FileOutput : public Output { public: - FileOutput() : OutputSignals() + FileOutput(const std::vector &signals) : Output(signals) { path = ""; format = "mp4"; diff --git a/obs-studio-server/source/osn-output-signals.cpp b/obs-studio-server/source/osn-output-signals.cpp deleted file mode 100644 index 5f52c7eac..000000000 --- a/obs-studio-server/source/osn-output-signals.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/****************************************************************************** - Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -******************************************************************************/ - -#include "osn-output-signals.hpp" -#include "nodeobs_api.h" - -void osn::OutputSignals::createOutput(const std::string &type, const std::string &name) -{ - deleteOutput(); - output = obs_output_create(type.c_str(), name.c_str(), nullptr, nullptr); - - auto onStopped = [](void *data, calldata_t *) { - osn::OutputSignals *context = reinterpret_cast(data); - std::unique_lock lock(context->mtxOutputStop); - context->cvStop.notify_one(); - }; - - signal_handler *sh = obs_output_get_signal_handler(output); - signal_handler_connect(sh, "stop", onStopped, this); - - ConnectSignals(); -} - -void osn::OutputSignals::deleteOutput() -{ - if (!output) - return; - - if (obs_output_active(output)) { - obs_output_stop(output); - std::unique_lock lock(mtxOutputStop); - cvStop.wait_for(lock, std::chrono::seconds(20)); - } - obs_output_release(output); - output = nullptr; -} - -static void callback(void *data, calldata_t *params) -{ - auto info = reinterpret_cast(data); - - if (!info) - return; - - std::string signal = info->signal; - auto outputClass = info->outputClass; - - if (!outputClass->output) - return; - - const char *error = obs_output_get_last_error(outputClass->output); - - std::unique_lock ulock(outputClass->signalsMtx); - outputClass->signalsReceived.push({signal, (int)calldata_int(params, "code"), error ? std::string(error) : ""}); -} - -void osn::OutputSignals::ConnectSignals() -{ - if (!output) - return; - - signal_handler *handler = obs_output_get_signal_handler(output); - for (const auto &signal : this->signals) { - osn::cbData *cd = new cbData(); - cd->signal = signal; - cd->outputClass = this; - signal_handler_connect(handler, signal.c_str(), callback, cd); - } -} - -void osn::OutputSignals::startOutput() -{ - if (!output) - return; - - outdated_driver_error::instance()->set_active(true); - bool result = obs_output_start(output); - outdated_driver_error::instance()->set_active(false); - - if (result) - return; - - int code = 0; - std::string errorMessage = ""; - std::string outdated_driver_error = outdated_driver_error::instance()->get_error(); - - if (outdated_driver_error.size() != 0) { - errorMessage = outdated_driver_error; - code = OBS_OUTPUT_OUTDATED_DRIVER; - } else { - const char *error = obs_output_get_last_error(output); - if (error) { - errorMessage = error; - blog(LOG_INFO, "Last streaming error: %s", error); - } - code = OBS_OUTPUT_ERROR; - } - - std::unique_lock ulock(signalsMtx); - signalsReceived.push({"stop", code, errorMessage}); -} \ No newline at end of file diff --git a/obs-studio-server/source/osn-output-signals.hpp b/obs-studio-server/source/osn-output-signals.hpp deleted file mode 100644 index 50da406ed..000000000 --- a/obs-studio-server/source/osn-output-signals.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/****************************************************************************** - Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -******************************************************************************/ - -#pragma once -#include -#include -#include -#include - -namespace osn { -struct signalInfo { - std::string signal; - int code; - std::string errorMessage; -}; - -class OutputSignals { -public: - OutputSignals() - { - output = nullptr; - canvas = nullptr; - } - virtual ~OutputSignals() {} - -public: - std::mutex signalsMtx; - std::queue signalsReceived; - std::vector signals; - obs_output_t *output; - obs_video_info *canvas; - - void ConnectSignals(); - -public: - std::condition_variable cvStop; - std::mutex mtxOutputStop; - void createOutput(const std::string &type, const std::string &name); - void deleteOutput(); - void startOutput(); -}; - -struct cbData { - std::string signal; - OutputSignals *outputClass; -}; -} diff --git a/obs-studio-server/source/osn-output.cpp b/obs-studio-server/source/osn-output.cpp index 4d82e05db..c38954b4d 100644 --- a/obs-studio-server/source/osn-output.cpp +++ b/obs-studio-server/source/osn-output.cpp @@ -17,3 +17,121 @@ ******************************************************************************/ #include "osn-Output.hpp" + +#include "nodeobs_api.h" + +namespace { + +struct CallbackData { + std::string signal; + osn::Output *outputClass; +}; + +} // namespace + +osn::Output::Output(const std::vector &signals) : + m_signals(signals) +{ + output = nullptr; + canvas = nullptr; +} + +osn::Output::~Output() +{ +} + +void osn::Output::createOutput(const std::string &type, const std::string &name) +{ + deleteOutput(); + output = obs_output_create(type.c_str(), name.c_str(), nullptr, nullptr); + + auto onStopped = [](void *data, calldata_t *) { + osn::Output *context = reinterpret_cast(data); + std::unique_lock lock(context->m_mtxOutputStop); + context->m_cvStop.notify_one(); + }; + + signal_handler *sh = obs_output_get_signal_handler(output); + signal_handler_connect(sh, "stop", onStopped, this); + + ConnectSignals(); +} + +void osn::Output::deleteOutput() +{ + if (!output) + return; + + if (obs_output_active(output)) { + obs_output_stop(output); + std::unique_lock lock(m_mtxOutputStop); + m_cvStop.wait_for(lock, std::chrono::seconds(20)); + } + obs_output_release(output); + output = nullptr; +} + +static void callback(void *data, calldata_t *params) +{ + auto info = reinterpret_cast(data); + + if (!info) + return; + + std::string signal = info->signal; + auto outputClass = info->outputClass; + + if (!outputClass->output) + return; + + const char *error = obs_output_get_last_error(outputClass->output); + + std::unique_lock ulock(outputClass->signalsMtx); + outputClass->signalsReceived.push({signal, (int)calldata_int(params, "code"), error ? std::string(error) : ""}); +} + +void osn::Output::ConnectSignals() +{ + if (!output) + return; + + signal_handler *handler = obs_output_get_signal_handler(output); + for (const auto &signal : m_signals) { + auto *cd = new CallbackData(); + cd->signal = signal; + cd->outputClass = this; + signal_handler_connect(handler, signal.c_str(), callback, cd); + } +} + +void osn::Output::startOutput() +{ + if (!output) + return; + + outdated_driver_error::instance()->set_active(true); + bool result = obs_output_start(output); + outdated_driver_error::instance()->set_active(false); + + if (result) + return; + + int code = 0; + std::string errorMessage = ""; + std::string outdated_driver_error = outdated_driver_error::instance()->get_error(); + + if (outdated_driver_error.size() != 0) { + errorMessage = outdated_driver_error; + code = OBS_OUTPUT_OUTDATED_DRIVER; + } else { + const char *error = obs_output_get_last_error(output); + if (error) { + errorMessage = error; + blog(LOG_INFO, "Last streaming error: %s", error); + } + code = OBS_OUTPUT_ERROR; + } + + std::unique_lock ulock(signalsMtx); + signalsReceived.push({"stop", code, errorMessage}); +} diff --git a/obs-studio-server/source/osn-output.hpp b/obs-studio-server/source/osn-output.hpp index 13250cfb6..df4b63a67 100644 --- a/obs-studio-server/source/osn-output.hpp +++ b/obs-studio-server/source/osn-output.hpp @@ -17,3 +17,41 @@ ******************************************************************************/ #pragma once + +#include +#include +#include +#include + +namespace osn { + +struct OutputSignalInfo { + std::string signal; + int code = 0; + std::string errorMessage; +}; + +class Output { +public: + Output(const std::vector &signals); + virtual ~Output(); + + void ConnectSignals(); + void createOutput(const std::string &type, const std::string &name); + void deleteOutput(); + void startOutput(); + + + obs_output_t *output; + std::mutex signalsMtx; + std::queue signalsReceived; + obs_video_info *canvas; + +private: + std::condition_variable m_cvStop; + std::mutex m_mtxOutputStop; + + const std::vector m_signals; +}; + +} \ No newline at end of file diff --git a/obs-studio-server/source/osn-recording.hpp b/obs-studio-server/source/osn-recording.hpp index 5a5f0930d..27afc8231 100644 --- a/obs-studio-server/source/osn-recording.hpp +++ b/obs-studio-server/source/osn-recording.hpp @@ -27,10 +27,10 @@ enum SplitFileType : uint32_t { TIME, SIZE, MANUAL }; class Recording : public FileOutput { public: - Recording() : FileOutput() + Recording() : FileOutput({"start", "stop", "stopping", "wrote"}) { videoEncoder = nullptr; - signals = {"start", "stop", "stopping", "wrote"}; + //signals = {"start", "stop", "stopping", "wrote"}; enableFileSplit = false; splitType = SplitFileType::TIME; splitTime = 15; diff --git a/obs-studio-server/source/osn-replay-buffer.hpp b/obs-studio-server/source/osn-replay-buffer.hpp index a296b5f32..8dbf1087d 100644 --- a/obs-studio-server/source/osn-replay-buffer.hpp +++ b/obs-studio-server/source/osn-replay-buffer.hpp @@ -25,13 +25,13 @@ namespace osn { class ReplayBuffer : public FileOutput { public: - ReplayBuffer() + ReplayBuffer() : FileOutput({"start", "stop", "stopping", "writing", "wrote", "writing_error"}) { duration = 20; prefix = "Replay"; suffix = ""; usesStream = false; - signals = {"start", "stop", "stopping", "writing", "wrote", "writing_error"}; + //signals = {"start", "stop", "stopping", "writing", "wrote", "writing_error"}; } virtual ~ReplayBuffer(); diff --git a/obs-studio-server/source/osn-streaming.hpp b/obs-studio-server/source/osn-streaming.hpp index e1b0366fb..3691be419 100644 --- a/obs-studio-server/source/osn-streaming.hpp +++ b/obs-studio-server/source/osn-streaming.hpp @@ -22,25 +22,27 @@ #include "osn-delay.hpp" #include "osn-reconnect.hpp" #include "osn-network.hpp" -#include "osn-output-signals.hpp" +#include "osn-output.hpp" #include "osn-video-encoder.hpp" #include "nodeobs_configManager.hpp" namespace osn { -class Streaming : public OutputSignals { +class Streaming : public Output { public: - Streaming() + Streaming() : Output({"start", "stop", "starting", "stopping", "activate", + "deactivate", "reconnect", "reconnect_success"}) { videoEncoder = nullptr; streamArchive = nullptr; service = nullptr; enforceServiceBitrate = true; enableTwitchVOD = false; + enhancedBroadcasting = false; twitchVODSupported = false; oldMixer_desktopSource1 = 0; oldMixer_desktopSource2 = 0; - signals = {"start", "stop", "starting", "stopping", "activate", "deactivate", "reconnect", "reconnect_success"}; + //signals = {"start", "stop", "starting", "stopping", "activate", "deactivate", "reconnect", "reconnect_success"}; delay = new Delay(); reconnect = new Reconnect(); network = new Network(); @@ -55,6 +57,7 @@ class Streaming : public OutputSignals { obs_service_t *service; bool enforceServiceBitrate; bool enableTwitchVOD; + bool enhancedBroadcasting; bool twitchVODSupported; uint32_t oldMixer_desktopSource1; uint32_t oldMixer_desktopSource2; From ee273c6c21de2ec64848762236bf32b2f9e951e8 Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Fri, 19 Dec 2025 15:20:49 +0000 Subject: [PATCH 04/19] Added PopReceivedSignal method to the Output class and refactored signals handling code --- obs-studio-server/source/osn-output.cpp | 29 ++++++++++++++----- obs-studio-server/source/osn-output.hpp | 24 ++++++++++----- obs-studio-server/source/osn-recording.cpp | 14 ++++----- .../source/osn-replay-buffer.cpp | 14 ++++----- obs-studio-server/source/osn-streaming.cpp | 14 ++++----- 5 files changed, 52 insertions(+), 43 deletions(-) diff --git a/obs-studio-server/source/osn-output.cpp b/obs-studio-server/source/osn-output.cpp index c38954b4d..1f7772bc6 100644 --- a/obs-studio-server/source/osn-output.cpp +++ b/obs-studio-server/source/osn-output.cpp @@ -47,7 +47,7 @@ void osn::Output::createOutput(const std::string &type, const std::string &name) auto onStopped = [](void *data, calldata_t *) { osn::Output *context = reinterpret_cast(data); - std::unique_lock lock(context->m_mtxOutputStop); + std::unique_lock lock(context->m_mtxOutputStop); context->m_cvStop.notify_one(); }; @@ -64,14 +64,14 @@ void osn::Output::deleteOutput() if (obs_output_active(output)) { obs_output_stop(output); - std::unique_lock lock(m_mtxOutputStop); + std::unique_lock lock(m_mtxOutputStop); m_cvStop.wait_for(lock, std::chrono::seconds(20)); } obs_output_release(output); output = nullptr; } -static void callback(void *data, calldata_t *params) +void osn::OutputSignalCallback(void *data, calldata_t *params) { auto info = reinterpret_cast(data); @@ -86,8 +86,8 @@ static void callback(void *data, calldata_t *params) const char *error = obs_output_get_last_error(outputClass->output); - std::unique_lock ulock(outputClass->signalsMtx); - outputClass->signalsReceived.push({signal, (int)calldata_int(params, "code"), error ? std::string(error) : ""}); + std::unique_lock ulock(outputClass->m_signalsMtx); + outputClass->m_signalsReceived.push({signal, (int)calldata_int(params, "code"), error ? std::string(error) : ""}); } void osn::Output::ConnectSignals() @@ -100,7 +100,7 @@ void osn::Output::ConnectSignals() auto *cd = new CallbackData(); cd->signal = signal; cd->outputClass = this; - signal_handler_connect(handler, signal.c_str(), callback, cd); + signal_handler_connect(handler, signal.c_str(), osn::OutputSignalCallback, cd); } } @@ -132,6 +132,19 @@ void osn::Output::startOutput() code = OBS_OUTPUT_ERROR; } - std::unique_lock ulock(signalsMtx); - signalsReceived.push({"stop", code, errorMessage}); + std::unique_lock ulock(m_signalsMtx); + m_signalsReceived.push({"stop", code, errorMessage}); } + +std::optional osn::Output::PopReceivedSignal() +{ + std::unique_lock ulock(m_signalsMtx); + + if (m_signalsReceived.empty()) { + return {}; + } + + const auto result = m_signalsReceived.front(); + m_signalsReceived.pop(); + return result; +} \ No newline at end of file diff --git a/obs-studio-server/source/osn-output.hpp b/obs-studio-server/source/osn-output.hpp index df4b63a67..2469cfe47 100644 --- a/obs-studio-server/source/osn-output.hpp +++ b/obs-studio-server/source/osn-output.hpp @@ -19,19 +19,22 @@ #pragma once #include + #include +#include #include #include namespace osn { -struct OutputSignalInfo { - std::string signal; - int code = 0; - std::string errorMessage; -}; - class Output { +public: + struct SignalInfo { + std::string signal; + int code = 0; + std::string errorMessage; + }; + public: Output(const std::vector &signals); virtual ~Output(); @@ -41,13 +44,18 @@ class Output { void deleteOutput(); void startOutput(); + // If no signal, will return an empty optional. Thread safe. + std::optional PopReceivedSignal(); obs_output_t *output; - std::mutex signalsMtx; - std::queue signalsReceived; obs_video_info *canvas; private: + friend void OutputSignalCallback(void *data, calldata_t *params); + + std::mutex m_signalsMtx; + std::queue m_signalsReceived; + std::condition_variable m_cvStop; std::mutex m_mtxOutputStop; diff --git a/obs-studio-server/source/osn-recording.cpp b/obs-studio-server/source/osn-recording.cpp index 77da3582d..89a9595d4 100644 --- a/obs-studio-server/source/osn-recording.cpp +++ b/obs-studio-server/source/osn-recording.cpp @@ -68,22 +68,18 @@ void osn::IRecording::Query(void *data, const int64_t id, const std::vector ulock(recording->signalsMtx); - if (recording->signalsReceived.empty()) { + auto signalOpt = recording->PopReceivedSignal(); + if (!signalOpt.has_value()) { rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; return; } rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - - auto signal = recording->signalsReceived.front(); rval.push_back(ipc::value("recording")); - rval.push_back(ipc::value(signal.signal)); - rval.push_back(ipc::value(signal.code)); - rval.push_back(ipc::value(signal.errorMessage)); - - recording->signalsReceived.pop(); + rval.push_back(ipc::value(signalOpt.value().signal)); + rval.push_back(ipc::value(signalOpt.value().code)); + rval.push_back(ipc::value(signalOpt.value().errorMessage)); AUTO_DEBUG; } diff --git a/obs-studio-server/source/osn-replay-buffer.cpp b/obs-studio-server/source/osn-replay-buffer.cpp index 3a4b55d89..9c3c72362 100644 --- a/obs-studio-server/source/osn-replay-buffer.cpp +++ b/obs-studio-server/source/osn-replay-buffer.cpp @@ -134,22 +134,18 @@ void osn::IReplayBuffer::Query(void *data, const int64_t id, const std::vector ulock(replayBuffer->signalsMtx); - if (replayBuffer->signalsReceived.empty()) { + auto signalOpt = replayBuffer->PopReceivedSignal(); + if (!signalOpt.has_value()) { rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; return; } rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - - auto signal = replayBuffer->signalsReceived.front(); rval.push_back(ipc::value("replay-buffer")); - rval.push_back(ipc::value(signal.signal)); - rval.push_back(ipc::value(signal.code)); - rval.push_back(ipc::value(signal.errorMessage)); - - replayBuffer->signalsReceived.pop(); + rval.push_back(ipc::value(signalOpt.value().signal)); + rval.push_back(ipc::value(signalOpt.value().code)); + rval.push_back(ipc::value(signalOpt.value().errorMessage)); AUTO_DEBUG; } diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index f447c28c3..ec2948fff 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -299,22 +299,18 @@ void osn::IStreaming::Query(void *data, const int64_t id, const std::vector ulock(streaming->signalsMtx); - if (streaming->signalsReceived.empty()) { + auto signalOpt = streaming->PopReceivedSignal(); + if (!signalOpt.has_value()) { rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; return; } rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - - auto signal = streaming->signalsReceived.front(); rval.push_back(ipc::value("streaming")); - rval.push_back(ipc::value(signal.signal)); - rval.push_back(ipc::value(signal.code)); - rval.push_back(ipc::value(signal.errorMessage)); - - streaming->signalsReceived.pop(); + rval.push_back(ipc::value(signalOpt.value().signal)); + rval.push_back(ipc::value(signalOpt.value().code)); + rval.push_back(ipc::value(signalOpt.value().errorMessage)); AUTO_DEBUG; } From 5596bbc634500262dd312233f37b4cc36a054120 Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Fri, 19 Dec 2025 15:47:11 +0000 Subject: [PATCH 05/19] Made canvas private in the Output class --- .../source/osn-advanced-recording.cpp | 10 +++++----- .../source/osn-advanced-streaming.cpp | 8 ++++---- obs-studio-server/source/osn-file-output.cpp | 4 ++-- obs-studio-server/source/osn-output.cpp | 17 +++++++++++++++-- obs-studio-server/source/osn-output.hpp | 7 ++++++- .../source/osn-simple-recording.cpp | 8 ++++---- .../source/osn-simple-streaming.cpp | 8 ++++---- obs-studio-server/source/osn-streaming.cpp | 4 ++-- 8 files changed, 42 insertions(+), 24 deletions(-) diff --git a/obs-studio-server/source/osn-advanced-recording.cpp b/obs-studio-server/source/osn-advanced-recording.cpp index a4a949849..34e44019c 100644 --- a/obs-studio-server/source/osn-advanced-recording.cpp +++ b/obs-studio-server/source/osn-advanced-recording.cpp @@ -186,9 +186,9 @@ bool osn::AdvancedRecording::UpdateEncoders() return false; if (obs_get_multiple_rendering()) { - obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(canvas, OBS_RECORDING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(this->GetCanvas(), OBS_RECORDING_VIDEO_RENDERING)); } else { - obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(canvas, OBS_MAIN_VIDEO_RENDERING)); + obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(this->GetCanvas(), OBS_MAIN_VIDEO_RENDERING)); } return true; @@ -215,7 +215,7 @@ void osn::IAdvancedRecording::Start(void *data, const int64_t id, const std::vec obs_encoder_set_audio(audioTrack->audioEnc, obs_get_audio()); obs_output_set_audio_encoder(recording->output, audioTrack->audioEnc, idx); - obs_encoder_set_video_mix(audioTrack->audioEnc, obs_video_mix_get(recording->canvas, OBS_RECORDING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(audioTrack->audioEnc, obs_video_mix_get(recording->GetCanvas(), OBS_RECORDING_VIDEO_RENDERING)); idx++; } } @@ -232,8 +232,8 @@ void osn::IAdvancedRecording::Start(void *data, const int64_t id, const std::vec if (lastChar != '/' && lastChar != '\\') path += "/"; - path += GenerateSpecifiedFilename(recording->format, recording->noSpace, recording->fileFormat, recording->canvas->base_width, - recording->canvas->base_height); + path += GenerateSpecifiedFilename(recording->format, recording->noSpace, recording->fileFormat, recording->GetCanvas()->base_width, + recording->GetCanvas()->base_height); if (!recording->overwrite) FindBestFilename(path, recording->noSpace); diff --git a/obs-studio-server/source/osn-advanced-streaming.cpp b/obs-studio-server/source/osn-advanced-streaming.cpp index 3c56a6af4..aab6bc390 100644 --- a/obs-studio-server/source/osn-advanced-streaming.cpp +++ b/obs-studio-server/source/osn-advanced-streaming.cpp @@ -242,7 +242,7 @@ static bool setAudioEncoder(osn::AdvancedStreaming *streaming) obs_encoder_set_audio(audioTrack->audioEnc, obs_get_audio()); obs_output_set_audio_encoder(streaming->output, audioTrack->audioEnc, 0); - obs_encoder_set_video_mix(audioTrack->audioEnc, obs_video_mix_get(streaming->canvas, OBS_STREAMING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(audioTrack->audioEnc, obs_video_mix_get(streaming->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); return true; } @@ -290,7 +290,7 @@ static void SetupTwitchSoundtrackAudio(osn::AdvancedStreaming *streaming) } obs_output_set_audio_encoder(streaming->output, streaming->streamArchive, kSoundtrackArchiveEncoderIdx); - obs_encoder_set_video_mix(streaming->streamArchive, obs_video_mix_get(streaming->canvas, OBS_STREAMING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(streaming->streamArchive, obs_video_mix_get(streaming->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); osn::AudioTrack *audioTrack = osn::IAudioTrack::audioTracks[streaming->twitchTrack]; if (!audioTrack) @@ -356,9 +356,9 @@ void osn::AdvancedStreaming::UpdateEncoders() obs_data_release(settings); if (obs_get_multiple_rendering()) { - obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(canvas, OBS_STREAMING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(this->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); } else { - obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(canvas, OBS_MAIN_VIDEO_RENDERING)); + obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(this->GetCanvas(), OBS_MAIN_VIDEO_RENDERING)); } } diff --git a/obs-studio-server/source/osn-file-output.cpp b/obs-studio-server/source/osn-file-output.cpp index 483637d6e..f7250a39a 100644 --- a/obs-studio-server/source/osn-file-output.cpp +++ b/obs-studio-server/source/osn-file-output.cpp @@ -75,7 +75,7 @@ void osn::IFileOutput::GetVideoCanvas(void *data, const int64_t id, const std::v PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "File output reference is not valid."); } - uint64_t uid = osn::Video::Manager::GetInstance().find(fileOutput->canvas); + uint64_t uid = osn::Video::Manager::GetInstance().find(fileOutput->GetCanvas()); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); rval.push_back(ipc::value(uid)); @@ -94,7 +94,7 @@ void osn::IFileOutput::SetVideoCanvas(void *data, const int64_t id, const std::v PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Canvas reference is not valid."); } - fileOutput->canvas = canvas; + fileOutput->SetCanvas(canvas); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; diff --git a/obs-studio-server/source/osn-output.cpp b/obs-studio-server/source/osn-output.cpp index 1f7772bc6..41cea4912 100644 --- a/obs-studio-server/source/osn-output.cpp +++ b/obs-studio-server/source/osn-output.cpp @@ -32,8 +32,6 @@ struct CallbackData { osn::Output::Output(const std::vector &signals) : m_signals(signals) { - output = nullptr; - canvas = nullptr; } osn::Output::~Output() @@ -147,4 +145,19 @@ std::optional osn::Output::PopReceivedSignal() const auto result = m_signalsReceived.front(); m_signalsReceived.pop(); return result; +} + +void osn::Output::SetCanvas(obs_video_info *canvas) +{ + m_canvas = canvas; +} + +obs_video_info *osn::Output::GetCanvas() +{ + return m_canvas; +} + +const obs_video_info *osn::Output::GetCanvas() const +{ + return m_canvas; } \ No newline at end of file diff --git a/obs-studio-server/source/osn-output.hpp b/obs-studio-server/source/osn-output.hpp index 2469cfe47..4fa777b44 100644 --- a/obs-studio-server/source/osn-output.hpp +++ b/obs-studio-server/source/osn-output.hpp @@ -48,11 +48,16 @@ class Output { std::optional PopReceivedSignal(); obs_output_t *output; - obs_video_info *canvas; + + void SetCanvas(obs_video_info *canvas); + obs_video_info *GetCanvas(); + const obs_video_info *GetCanvas() const; private: friend void OutputSignalCallback(void *data, calldata_t *params); + obs_video_info *m_canvas = nullptr; + std::mutex m_signalsMtx; std::queue m_signalsReceived; diff --git a/obs-studio-server/source/osn-simple-recording.cpp b/obs-studio-server/source/osn-simple-recording.cpp index 27addc6d3..ad81e0956 100644 --- a/obs-studio-server/source/osn-simple-recording.cpp +++ b/obs-studio-server/source/osn-simple-recording.cpp @@ -293,9 +293,9 @@ static void UpdateRecordingSettings_crf(enum osn::RecQuality quality, osn::Simpl if (!settings) return; if (obs_get_multiple_rendering()) { - obs_encoder_set_video_mix(recording->videoEncoder, obs_video_mix_get(recording->canvas, OBS_STREAMING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(recording->videoEncoder, obs_video_mix_get(recording->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); } else { - obs_encoder_set_video_mix(recording->videoEncoder, obs_video_mix_get(recording->canvas, OBS_MAIN_VIDEO_RENDERING)); + obs_encoder_set_video_mix(recording->videoEncoder, obs_video_mix_get(recording->GetCanvas(), OBS_MAIN_VIDEO_RENDERING)); } obs_encoder_update(recording->videoEncoder, settings); obs_data_release(settings); @@ -372,7 +372,7 @@ void osn::ISimpleRecording::Start(void *data, const int64_t id, const std::vecto obs_encoder_set_audio(recording->audioEncoder, obs_get_audio()); obs_output_set_audio_encoder(recording->output, recording->audioEncoder, 0); - obs_encoder_set_video_mix(recording->audioEncoder, obs_video_mix_get(recording->canvas, OBS_RECORDING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(recording->audioEncoder, obs_video_mix_get(recording->GetCanvas(), OBS_RECORDING_VIDEO_RENDERING)); obs_output_set_video_encoder(recording->output, recording->videoEncoder); } @@ -387,7 +387,7 @@ void osn::ISimpleRecording::Start(void *data, const int64_t id, const std::vecto if (lastChar != '/' && lastChar != '\\') path += "/"; - path += GenerateSpecifiedFilename(format, recording->noSpace, recording->fileFormat, recording->canvas->base_width, recording->canvas->base_height); + path += GenerateSpecifiedFilename(format, recording->noSpace, recording->fileFormat, recording->GetCanvas()->base_width, recording->GetCanvas()->base_height); if (!recording->overwrite) FindBestFilename(path, recording->noSpace); diff --git a/obs-studio-server/source/osn-simple-streaming.cpp b/obs-studio-server/source/osn-simple-streaming.cpp index a50e3bbcc..e658fed21 100644 --- a/obs-studio-server/source/osn-simple-streaming.cpp +++ b/obs-studio-server/source/osn-simple-streaming.cpp @@ -219,7 +219,7 @@ static void SetupTwitchSoundtrackAudio(osn::SimpleStreaming *streaming) } obs_output_set_audio_encoder(streaming->output, streaming->streamArchive, kSoundtrackArchiveEncoderIdx); - obs_encoder_set_video_mix(streaming->streamArchive, obs_video_mix_get(streaming->canvas, OBS_STREAMING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(streaming->streamArchive, obs_video_mix_get(streaming->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); obs_data_t *settings = obs_data_create(); @@ -317,9 +317,9 @@ void osn::SimpleStreaming::UpdateEncoders() obs_data_release(audioEncSettings); if (obs_get_multiple_rendering()) { - obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(canvas, OBS_STREAMING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(this->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); } else { - obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(canvas, OBS_MAIN_VIDEO_RENDERING)); + obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(this->GetCanvas(), OBS_MAIN_VIDEO_RENDERING)); } } @@ -356,7 +356,7 @@ void osn::ISimpleStreaming::Start(void *data, const int64_t id, const std::vecto streaming->UpdateEncoders(); obs_encoder_set_audio(streaming->audioEncoder, obs_get_audio()); obs_output_set_audio_encoder(streaming->output, streaming->audioEncoder, 0); - obs_encoder_set_video_mix(streaming->audioEncoder, obs_video_mix_get(streaming->canvas, OBS_STREAMING_VIDEO_RENDERING)); + obs_encoder_set_video_mix(streaming->audioEncoder, obs_video_mix_get(streaming->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); obs_output_set_video_encoder(streaming->output, streaming->videoEncoder); diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index ec2948fff..1e476255e 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -72,7 +72,7 @@ void osn::IStreaming::GetVideoCanvas(void *data, const int64_t id, const std::ve PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } - uint64_t uid = osn::Video::Manager::GetInstance().find(streaming->canvas); + uint64_t uid = osn::Video::Manager::GetInstance().find(streaming->GetCanvas()); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); rval.push_back(ipc::value(uid)); @@ -93,7 +93,7 @@ void osn::IStreaming::SetVideoCanvas(void *data, const int64_t id, const std::ve blog(LOG_INFO, "IStreaming::SetVideoCanvas - canvas: 0x%" PRIXPTR ", uid: %d", (uintptr_t)canvas, (int)args[1].value_union.ui64); - streaming->canvas = canvas; + streaming->SetCanvas(canvas); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; From 221dac618893298a49423a30fae7799d9da825ea Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Fri, 19 Dec 2025 15:58:33 +0000 Subject: [PATCH 06/19] Refactored the Output class. Made all data member private --- .../source/osn-advanced-recording.cpp | 16 +++---- .../source/osn-advanced-replay-buffer.cpp | 16 +++---- .../source/osn-advanced-streaming.cpp | 28 ++++++------ obs-studio-server/source/osn-file-output.cpp | 2 +- obs-studio-server/source/osn-output.cpp | 44 +++++++++++-------- obs-studio-server/source/osn-output.hpp | 11 +++-- obs-studio-server/source/osn-recording.cpp | 8 ++-- .../source/osn-replay-buffer.cpp | 2 +- .../source/osn-simple-recording.cpp | 24 +++++----- .../source/osn-simple-replay-buffer.cpp | 16 +++---- .../source/osn-simple-streaming.cpp | 28 ++++++------ obs-studio-server/source/osn-streaming.cpp | 18 ++++---- 12 files changed, 112 insertions(+), 101 deletions(-) diff --git a/obs-studio-server/source/osn-advanced-recording.cpp b/obs-studio-server/source/osn-advanced-recording.cpp index 34e44019c..beb1d3f6b 100644 --- a/obs-studio-server/source/osn-advanced-recording.cpp +++ b/obs-studio-server/source/osn-advanced-recording.cpp @@ -201,10 +201,10 @@ void osn::IAdvancedRecording::Start(void *data, const int64_t id, const std::vec PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple recording reference is not valid."); } - if (!recording->output) - recording->createOutput("ffmpeg_muxer", "recording"); + if (!recording->GetOutput()) + recording->CreateOutput("ffmpeg_muxer", "recording"); - if (!recording->output) { + if (!recording->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Error while creating the recording output."); } @@ -213,7 +213,7 @@ void osn::IAdvancedRecording::Start(void *data, const int64_t id, const std::vec osn::AudioTrack *audioTrack = osn::IAudioTrack::audioTracks[i]; if ((recording->mixer & (1 << i)) != 0 && audioTrack && audioTrack->audioEnc) { obs_encoder_set_audio(audioTrack->audioEnc, obs_get_audio()); - obs_output_set_audio_encoder(recording->output, audioTrack->audioEnc, idx); + obs_output_set_audio_encoder(recording->GetOutput(), audioTrack->audioEnc, idx); obs_encoder_set_video_mix(audioTrack->audioEnc, obs_video_mix_get(recording->GetCanvas(), OBS_RECORDING_VIDEO_RENDERING)); idx++; @@ -224,7 +224,7 @@ void osn::IAdvancedRecording::Start(void *data, const int64_t id, const std::vec PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid video encoder."); } - obs_output_set_video_encoder(recording->output, recording->videoEncoder); + obs_output_set_video_encoder(recording->GetOutput(), recording->videoEncoder); std::string path = recording->path; @@ -241,13 +241,13 @@ void osn::IAdvancedRecording::Start(void *data, const int64_t id, const std::vec obs_data_t *settings = obs_data_create(); obs_data_set_string(settings, "path", path.c_str()); obs_data_set_string(settings, "muxer_settings", recording->muxerSettings.c_str()); - obs_output_update(recording->output, settings); + obs_output_update(recording->GetOutput(), settings); obs_data_release(settings); if (recording->enableFileSplit) recording->ConfigureRecFileSplitting(); - recording->startOutput(); + recording->StartOutput(); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; @@ -260,7 +260,7 @@ void osn::IAdvancedRecording::Stop(void *data, const int64_t id, const std::vect PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple recording reference is not valid."); } - obs_output_stop(recording->output); + obs_output_stop(recording->GetOutput()); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; diff --git a/obs-studio-server/source/osn-advanced-replay-buffer.cpp b/obs-studio-server/source/osn-advanced-replay-buffer.cpp index 1d8a7ee5d..79439f2ea 100644 --- a/obs-studio-server/source/osn-advanced-replay-buffer.cpp +++ b/obs-studio-server/source/osn-advanced-replay-buffer.cpp @@ -123,15 +123,15 @@ void osn::IAdvancedReplayBuffer::Start(void *data, const int64_t id, const std:: PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple replay buffer reference is not valid."); } - if (!replayBuffer->output) - replayBuffer->createOutput("replay_buffer", "replay-buffer"); + if (!replayBuffer->GetOutput()) + replayBuffer->CreateOutput("replay_buffer", "replay-buffer"); int idx = 0; for (int i = 0; i < MAX_AUDIO_MIXES; i++) { osn::AudioTrack *audioTrack = osn::IAudioTrack::audioTracks[i]; if ((replayBuffer->mixer & (1 << i)) != 0 && audioTrack && audioTrack->audioEnc) { obs_encoder_set_audio(audioTrack->audioEnc, obs_get_audio()); - obs_output_set_audio_encoder(replayBuffer->output, audioTrack->audioEnc, idx); + obs_output_set_audio_encoder(replayBuffer->GetOutput(), audioTrack->audioEnc, idx); idx++; } } @@ -154,7 +154,7 @@ void osn::IAdvancedReplayBuffer::Start(void *data, const int64_t id, const std:: PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid video encoder."); } - obs_output_set_video_encoder(replayBuffer->output, videoEncoder); + obs_output_set_video_encoder(replayBuffer->GetOutput(), videoEncoder); if (!replayBuffer->path.size()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid recording path."); @@ -185,10 +185,10 @@ void osn::IAdvancedReplayBuffer::Start(void *data, const int64_t id, const std:: obs_data_set_bool(settings, "allow_spaces", !replayBuffer->noSpace); obs_data_set_int(settings, "max_time_sec", replayBuffer->duration); obs_data_set_int(settings, "max_size_mb", rbSize); - obs_output_update(replayBuffer->output, settings); + obs_output_update(replayBuffer->GetOutput(), settings); obs_data_release(settings); - replayBuffer->startOutput(); + replayBuffer->StartOutput(); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; @@ -200,11 +200,11 @@ void osn::IAdvancedReplayBuffer::Stop(void *data, const int64_t id, const std::v if (!replayBuffer) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple replay buffer reference is not valid."); } - if (!replayBuffer->output) { + if (!replayBuffer->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid replay buffer output."); } - obs_output_stop(replayBuffer->output); + obs_output_stop(replayBuffer->GetOutput()); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; diff --git a/obs-studio-server/source/osn-advanced-streaming.cpp b/obs-studio-server/source/osn-advanced-streaming.cpp index aab6bc390..0f54ac83f 100644 --- a/obs-studio-server/source/osn-advanced-streaming.cpp +++ b/obs-studio-server/source/osn-advanced-streaming.cpp @@ -241,7 +241,7 @@ static bool setAudioEncoder(osn::AdvancedStreaming *streaming) return false; obs_encoder_set_audio(audioTrack->audioEnc, obs_get_audio()); - obs_output_set_audio_encoder(streaming->output, audioTrack->audioEnc, 0); + obs_output_set_audio_encoder(streaming->GetOutput(), audioTrack->audioEnc, 0); obs_encoder_set_video_mix(audioTrack->audioEnc, obs_video_mix_get(streaming->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); return true; @@ -289,7 +289,7 @@ static void SetupTwitchSoundtrackAudio(osn::AdvancedStreaming *streaming) obs_encoder_set_audio(streaming->streamArchive, obs_get_audio()); } - obs_output_set_audio_encoder(streaming->output, streaming->streamArchive, kSoundtrackArchiveEncoderIdx); + obs_output_set_audio_encoder(streaming->GetOutput(), streaming->streamArchive, kSoundtrackArchiveEncoderIdx); obs_encoder_set_video_mix(streaming->streamArchive, obs_video_mix_get(streaming->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); osn::AudioTrack *audioTrack = osn::IAudioTrack::audioTracks[streaming->twitchTrack]; @@ -384,10 +384,10 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec if (!type) type = "rtmp_output"; - if (!streaming->output || strcmp(obs_output_get_id(streaming->output), type) != 0) - streaming->createOutput(type, "stream"); + if (!streaming->GetOutput() || strcmp(obs_output_get_id(streaming->GetOutput()), type) != 0) + streaming->CreateOutput(type, "stream"); - if (!streaming->output) { + if (!streaming->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Error while creating the streaming output."); } @@ -398,7 +398,7 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec if (streaming->rescaling) obs_encoder_set_scaled_size(streaming->videoEncoder, streaming->outputWidth, streaming->outputHeight); - obs_output_set_video_encoder(streaming->output, streaming->videoEncoder); + obs_output_set_video_encoder(streaming->GetOutput(), streaming->videoEncoder); if (streaming->enableTwitchVOD) { streaming->twitchVODSupported = streaming->isTwitchVODSupported(); @@ -406,19 +406,19 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec SetupTwitchSoundtrackAudio(streaming); } - obs_output_set_service(streaming->output, streaming->service); + obs_output_set_service(streaming->GetOutput(), streaming->service); if (!streaming->delay) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid delay."); } - obs_output_set_delay(streaming->output, streaming->delay->enabled ? uint32_t(streaming->delay->delaySec) : 0, + obs_output_set_delay(streaming->GetOutput(), streaming->delay->enabled ? uint32_t(streaming->delay->delaySec) : 0, streaming->delay->preserveDelay ? OBS_OUTPUT_DELAY_PRESERVE : 0); if (!streaming->reconnect) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid reconnect."); } uint32_t maxReties = streaming->reconnect->enabled ? streaming->reconnect->maxRetries : 0; - obs_output_set_reconnect_settings(streaming->output, maxReties, streaming->reconnect->retryDelay); + obs_output_set_reconnect_settings(streaming->GetOutput(), maxReties, streaming->reconnect->retryDelay); if (!streaming->network) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid network."); @@ -429,10 +429,10 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec obs_data_set_bool(settings, "dyn_bitrate", streaming->network->enableDynamicBitrate); obs_data_set_bool(settings, "new_socket_loop_enabled", streaming->network->enableOptimizations); obs_data_set_bool(settings, "low_latency_mode_enabled", streaming->network->enableLowLatency); - obs_output_update(streaming->output, settings); + obs_output_update(streaming->GetOutput(), settings); obs_data_release(settings); - streaming->startOutput(); + streaming->StartOutput(); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; @@ -445,16 +445,16 @@ void osn::IAdvancedStreaming::Stop(void *data, const int64_t id, const std::vect PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple streaming reference is not valid."); } - if (!streaming->output) { + if (!streaming->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid streaming output."); } bool force = args[1].value_union.ui32; if (force) - obs_output_force_stop(streaming->output); + obs_output_force_stop(streaming->GetOutput()); else - obs_output_stop(streaming->output); + obs_output_stop(streaming->GetOutput()); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; diff --git a/obs-studio-server/source/osn-file-output.cpp b/obs-studio-server/source/osn-file-output.cpp index f7250a39a..90b74947c 100644 --- a/obs-studio-server/source/osn-file-output.cpp +++ b/obs-studio-server/source/osn-file-output.cpp @@ -233,7 +233,7 @@ void osn::IFileOutput::GetLastFile(void *data, const int64_t id, const std::vect } calldata_t cd = {0}; - proc_handler_t *ph = obs_output_get_proc_handler(fileOutput->output); + proc_handler_t *ph = obs_output_get_proc_handler(fileOutput->GetOutput()); proc_handler_call(ph, "get_last_file", &cd); const char *path = calldata_string(&cd, "path"); path = path ? path : ""; diff --git a/obs-studio-server/source/osn-output.cpp b/obs-studio-server/source/osn-output.cpp index 41cea4912..07202c673 100644 --- a/obs-studio-server/source/osn-output.cpp +++ b/obs-studio-server/source/osn-output.cpp @@ -38,10 +38,10 @@ osn::Output::~Output() { } -void osn::Output::createOutput(const std::string &type, const std::string &name) +void osn::Output::CreateOutput(const std::string &type, const std::string &name) { - deleteOutput(); - output = obs_output_create(type.c_str(), name.c_str(), nullptr, nullptr); + DeleteOutput(); + m_output = obs_output_create(type.c_str(), name.c_str(), nullptr, nullptr); auto onStopped = [](void *data, calldata_t *) { osn::Output *context = reinterpret_cast(data); @@ -49,24 +49,24 @@ void osn::Output::createOutput(const std::string &type, const std::string &name) context->m_cvStop.notify_one(); }; - signal_handler *sh = obs_output_get_signal_handler(output); + signal_handler *sh = obs_output_get_signal_handler(m_output); signal_handler_connect(sh, "stop", onStopped, this); ConnectSignals(); } -void osn::Output::deleteOutput() +void osn::Output::DeleteOutput() { - if (!output) + if (!m_output) return; - if (obs_output_active(output)) { - obs_output_stop(output); + if (obs_output_active(m_output)) { + obs_output_stop(m_output); std::unique_lock lock(m_mtxOutputStop); m_cvStop.wait_for(lock, std::chrono::seconds(20)); } - obs_output_release(output); - output = nullptr; + obs_output_release(m_output); + m_output = nullptr; } void osn::OutputSignalCallback(void *data, calldata_t *params) @@ -79,10 +79,10 @@ void osn::OutputSignalCallback(void *data, calldata_t *params) std::string signal = info->signal; auto outputClass = info->outputClass; - if (!outputClass->output) + if (!outputClass->m_output) return; - const char *error = obs_output_get_last_error(outputClass->output); + const char *error = obs_output_get_last_error(outputClass->m_output); std::unique_lock ulock(outputClass->m_signalsMtx); outputClass->m_signalsReceived.push({signal, (int)calldata_int(params, "code"), error ? std::string(error) : ""}); @@ -90,10 +90,10 @@ void osn::OutputSignalCallback(void *data, calldata_t *params) void osn::Output::ConnectSignals() { - if (!output) + if (!m_output) return; - signal_handler *handler = obs_output_get_signal_handler(output); + signal_handler *handler = obs_output_get_signal_handler(m_output); for (const auto &signal : m_signals) { auto *cd = new CallbackData(); cd->signal = signal; @@ -102,13 +102,13 @@ void osn::Output::ConnectSignals() } } -void osn::Output::startOutput() +void osn::Output::StartOutput() { - if (!output) + if (!m_output) return; outdated_driver_error::instance()->set_active(true); - bool result = obs_output_start(output); + bool result = obs_output_start(m_output); outdated_driver_error::instance()->set_active(false); if (result) @@ -122,7 +122,7 @@ void osn::Output::startOutput() errorMessage = outdated_driver_error; code = OBS_OUTPUT_OUTDATED_DRIVER; } else { - const char *error = obs_output_get_last_error(output); + const char *error = obs_output_get_last_error(m_output); if (error) { errorMessage = error; blog(LOG_INFO, "Last streaming error: %s", error); @@ -160,4 +160,12 @@ obs_video_info *osn::Output::GetCanvas() const obs_video_info *osn::Output::GetCanvas() const { return m_canvas; +} + +obs_output_t *osn::Output::GetOutput() { + return m_output; +} + +const obs_output_t *osn::Output::GetOutput() const { + return m_output; } \ No newline at end of file diff --git a/obs-studio-server/source/osn-output.hpp b/obs-studio-server/source/osn-output.hpp index 4fa777b44..bdf461825 100644 --- a/obs-studio-server/source/osn-output.hpp +++ b/obs-studio-server/source/osn-output.hpp @@ -40,23 +40,26 @@ class Output { virtual ~Output(); void ConnectSignals(); - void createOutput(const std::string &type, const std::string &name); - void deleteOutput(); - void startOutput(); + void CreateOutput(const std::string &type, const std::string &name); + void DeleteOutput(); + void StartOutput(); // If no signal, will return an empty optional. Thread safe. std::optional PopReceivedSignal(); - obs_output_t *output; void SetCanvas(obs_video_info *canvas); obs_video_info *GetCanvas(); const obs_video_info *GetCanvas() const; + obs_output_t *GetOutput(); + const obs_output_t *GetOutput() const; + private: friend void OutputSignalCallback(void *data, calldata_t *params); obs_video_info *m_canvas = nullptr; + obs_output_t *m_output = nullptr; std::mutex m_signalsMtx; std::queue m_signalsReceived; diff --git a/obs-studio-server/source/osn-recording.cpp b/obs-studio-server/source/osn-recording.cpp index 89a9595d4..7723eede5 100644 --- a/obs-studio-server/source/osn-recording.cpp +++ b/obs-studio-server/source/osn-recording.cpp @@ -26,7 +26,7 @@ extern char *osn_generate_formatted_filename(const char *extension, bool space, osn::Recording::~Recording() { - deleteOutput(); + DeleteOutput(); } void osn::IRecording::GetVideoEncoder(void *data, const int64_t id, const std::vector &args, std::vector &rval) @@ -149,13 +149,13 @@ obs_encoder_t *osn::IRecording::duplicate_encoder(obs_encoder_t *src, uint64_t t void osn::IRecording::SplitFile(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Recording *recording = static_cast(osn::IFileOutput::Manager::GetInstance().find(args[0].value_union.ui64)); - if (!recording || !recording->output) { + if (!recording || !recording->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Recording reference is not valid."); } calldata_t cd = {0}; - proc_handler_t *ph = obs_output_get_proc_handler(recording->output); + proc_handler_t *ph = obs_output_get_proc_handler(recording->GetOutput()); proc_handler_call(ph, "split_file", &cd); calldata_free(&cd); @@ -306,6 +306,6 @@ void osn::Recording::ConfigureRecFileSplitting() obs_data_set_bool(settings, "reset_timestamps", fileResetTimestamps); - obs_output_update(output, settings); + obs_output_update(this->GetOutput(), settings); obs_data_release(settings); } diff --git a/obs-studio-server/source/osn-replay-buffer.cpp b/obs-studio-server/source/osn-replay-buffer.cpp index 9c3c72362..c72d034d7 100644 --- a/obs-studio-server/source/osn-replay-buffer.cpp +++ b/obs-studio-server/source/osn-replay-buffer.cpp @@ -24,7 +24,7 @@ osn::ReplayBuffer::~ReplayBuffer() { - deleteOutput(); + DeleteOutput(); } void osn::IReplayBuffer::GetDuration(void *data, const int64_t id, const std::vector &args, std::vector &rval) diff --git a/obs-studio-server/source/osn-simple-recording.cpp b/obs-studio-server/source/osn-simple-recording.cpp index ad81e0956..13c2669fd 100644 --- a/obs-studio-server/source/osn-simple-recording.cpp +++ b/obs-studio-server/source/osn-simple-recording.cpp @@ -153,8 +153,8 @@ static void LoadLosslessPreset(osn::Recording *recording) obs_data_set_string(settings, "video_encoder", "utvideo"); obs_data_set_string(settings, "audio_encoder", "pcm_s16le"); - obs_output_set_mixers(recording->output, 1); - obs_output_update(recording->output, settings); + obs_output_set_mixers(recording->GetOutput(), 1); + obs_output_update(recording->GetOutput(), settings); obs_data_release(settings); } @@ -344,10 +344,10 @@ void osn::ISimpleRecording::Start(void *data, const int64_t id, const std::vecto } const char *ffmpegMuxer = "ffmpeg_muxer"; - if (!recording->output || strcmp(obs_output_get_id(recording->output), ffmpegMuxer) == 0) - recording->createOutput("ffmpeg_muxer", "recording"); + if (!recording->GetOutput() || strcmp(obs_output_get_id(recording->GetOutput()), ffmpegMuxer) == 0) + recording->CreateOutput("ffmpeg_muxer", "recording"); - if (!recording->output) { + if (!recording->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Error while creating the recording output."); } @@ -355,7 +355,7 @@ void osn::ISimpleRecording::Start(void *data, const int64_t id, const std::vecto std::string pathProperty = "path"; if (recording->quality == RecQuality::Lossless) { - recording->createOutput("ffmpeg_output", "recording"); + recording->CreateOutput("ffmpeg_output", "recording"); LoadLosslessPreset(recording); format = "avi"; pathProperty = "url"; @@ -371,10 +371,10 @@ void osn::ISimpleRecording::Start(void *data, const int64_t id, const std::vecto } obs_encoder_set_audio(recording->audioEncoder, obs_get_audio()); - obs_output_set_audio_encoder(recording->output, recording->audioEncoder, 0); + obs_output_set_audio_encoder(recording->GetOutput(), recording->audioEncoder, 0); obs_encoder_set_video_mix(recording->audioEncoder, obs_video_mix_get(recording->GetCanvas(), OBS_RECORDING_VIDEO_RENDERING)); - obs_output_set_video_encoder(recording->output, recording->videoEncoder); + obs_output_set_video_encoder(recording->GetOutput(), recording->videoEncoder); } if (!recording->path.size()) { @@ -395,13 +395,13 @@ void osn::ISimpleRecording::Start(void *data, const int64_t id, const std::vecto obs_data_t *settings = obs_data_create(); obs_data_set_string(settings, pathProperty.c_str(), path.c_str()); obs_data_set_string(settings, "muxer_settings", recording->muxerSettings.c_str()); - obs_output_update(recording->output, settings); + obs_output_update(recording->GetOutput(), settings); obs_data_release(settings); if (recording->enableFileSplit) recording->ConfigureRecFileSplitting(); - recording->startOutput(); + recording->StartOutput(); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; @@ -413,11 +413,11 @@ void osn::ISimpleRecording::Stop(void *data, const int64_t id, const std::vector if (!recording) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple recording reference is not valid."); } - if (!recording->output) { + if (!recording->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid recording output."); } - obs_output_stop(recording->output); + obs_output_stop(recording->GetOutput()); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; diff --git a/obs-studio-server/source/osn-simple-replay-buffer.cpp b/obs-studio-server/source/osn-simple-replay-buffer.cpp index 30af1d273..de2a24dbc 100644 --- a/obs-studio-server/source/osn-simple-replay-buffer.cpp +++ b/obs-studio-server/source/osn-simple-replay-buffer.cpp @@ -95,8 +95,8 @@ void osn::ISimpleReplayBuffer::Start(void *data, const int64_t id, const std::ve PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple replay buffer reference is not valid."); } - if (!replayBuffer->output) - replayBuffer->createOutput("replay_buffer", "replay-buffer"); + if (!replayBuffer->GetOutput()) + replayBuffer->CreateOutput("replay_buffer", "replay-buffer"); obs_encoder_t *audioEncoder = nullptr; obs_encoder_t *videoEncoder = nullptr; @@ -120,13 +120,13 @@ void osn::ISimpleReplayBuffer::Start(void *data, const int64_t id, const std::ve } obs_encoder_set_audio(audioEncoder, obs_get_audio()); - obs_output_set_audio_encoder(replayBuffer->output, audioEncoder, 0); + obs_output_set_audio_encoder(replayBuffer->GetOutput(), audioEncoder, 0); if (!videoEncoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid video encoder."); } - obs_output_set_video_encoder(replayBuffer->output, videoEncoder); + obs_output_set_video_encoder(replayBuffer->GetOutput(), videoEncoder); if (!replayBuffer->path.size()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid recording path."); @@ -157,10 +157,10 @@ void osn::ISimpleReplayBuffer::Start(void *data, const int64_t id, const std::ve obs_data_set_bool(settings, "allow_spaces", !replayBuffer->noSpace); obs_data_set_int(settings, "max_time_sec", replayBuffer->duration); obs_data_set_int(settings, "max_size_mb", rbSize); - obs_output_update(replayBuffer->output, settings); + obs_output_update(replayBuffer->GetOutput(), settings); obs_data_release(settings); - replayBuffer->startOutput(); + replayBuffer->StartOutput(); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; @@ -172,11 +172,11 @@ void osn::ISimpleReplayBuffer::Stop(void *data, const int64_t id, const std::vec if (!replayBuffer) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple replay buffer reference is not valid."); } - if (!replayBuffer->output) { + if (!replayBuffer->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid replay buffer output."); } - obs_output_stop(replayBuffer->output); + obs_output_stop(replayBuffer->GetOutput()); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; diff --git a/obs-studio-server/source/osn-simple-streaming.cpp b/obs-studio-server/source/osn-simple-streaming.cpp index e658fed21..442f1fef3 100644 --- a/obs-studio-server/source/osn-simple-streaming.cpp +++ b/obs-studio-server/source/osn-simple-streaming.cpp @@ -218,7 +218,7 @@ static void SetupTwitchSoundtrackAudio(osn::SimpleStreaming *streaming) obs_encoder_set_audio(streaming->streamArchive, obs_get_audio()); } - obs_output_set_audio_encoder(streaming->output, streaming->streamArchive, kSoundtrackArchiveEncoderIdx); + obs_output_set_audio_encoder(streaming->GetOutput(), streaming->streamArchive, kSoundtrackArchiveEncoderIdx); obs_encoder_set_video_mix(streaming->streamArchive, obs_video_mix_get(streaming->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); obs_data_t *settings = obs_data_create(); @@ -338,10 +338,10 @@ void osn::ISimpleStreaming::Start(void *data, const int64_t id, const std::vecto if (!type) type = "rtmp_output"; - if (!streaming->output || strcmp(obs_output_get_id(streaming->output), type) != 0) - streaming->createOutput(type, "stream"); + if (!streaming->GetOutput() || strcmp(obs_output_get_id(streaming->GetOutput()), type) != 0) + streaming->CreateOutput(type, "stream"); - if (!streaming->output) { + if (!streaming->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Error while creating the streaming output."); } @@ -355,10 +355,10 @@ void osn::ISimpleStreaming::Start(void *data, const int64_t id, const std::vecto streaming->UpdateEncoders(); obs_encoder_set_audio(streaming->audioEncoder, obs_get_audio()); - obs_output_set_audio_encoder(streaming->output, streaming->audioEncoder, 0); + obs_output_set_audio_encoder(streaming->GetOutput(), streaming->audioEncoder, 0); obs_encoder_set_video_mix(streaming->audioEncoder, obs_video_mix_get(streaming->GetCanvas(), OBS_STREAMING_VIDEO_RENDERING)); - obs_output_set_video_encoder(streaming->output, streaming->videoEncoder); + obs_output_set_video_encoder(streaming->GetOutput(), streaming->videoEncoder); if (streaming->enableTwitchVOD) { streaming->twitchVODSupported = streaming->isTwitchVODSupported(); @@ -366,19 +366,19 @@ void osn::ISimpleStreaming::Start(void *data, const int64_t id, const std::vecto SetupTwitchSoundtrackAudio(streaming); } - obs_output_set_service(streaming->output, streaming->service); + obs_output_set_service(streaming->GetOutput(), streaming->service); if (!streaming->delay) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid delay."); } - obs_output_set_delay(streaming->output, streaming->delay->enabled ? uint32_t(streaming->delay->delaySec) : 0, + obs_output_set_delay(streaming->GetOutput(), streaming->delay->enabled ? uint32_t(streaming->delay->delaySec) : 0, streaming->delay->preserveDelay ? OBS_OUTPUT_DELAY_PRESERVE : 0); if (!streaming->reconnect) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid reconnect."); } uint32_t maxReties = streaming->reconnect->enabled ? streaming->reconnect->maxRetries : 0; - obs_output_set_reconnect_settings(streaming->output, maxReties, streaming->reconnect->retryDelay); + obs_output_set_reconnect_settings(streaming->GetOutput(), maxReties, streaming->reconnect->retryDelay); if (!streaming->network) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid network."); @@ -389,10 +389,10 @@ void osn::ISimpleStreaming::Start(void *data, const int64_t id, const std::vecto obs_data_set_bool(settings, "dyn_bitrate", streaming->network->enableDynamicBitrate); obs_data_set_bool(settings, "new_socket_loop_enabled", streaming->network->enableOptimizations); obs_data_set_bool(settings, "low_latency_mode_enabled", streaming->network->enableLowLatency); - obs_output_update(streaming->output, settings); + obs_output_update(streaming->GetOutput(), settings); obs_data_release(settings); - streaming->startOutput(); + streaming->StartOutput(); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; @@ -405,16 +405,16 @@ void osn::ISimpleStreaming::Stop(void *data, const int64_t id, const std::vector PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple streaming reference is not valid."); } - if (!streaming->output) { + if (!streaming->GetOutput()) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid streaming output."); } bool force = args[1].value_union.ui32; if (force) - obs_output_force_stop(streaming->output); + obs_output_force_stop(streaming->GetOutput()); else - obs_output_stop(streaming->output); + obs_output_stop(streaming->GetOutput()); rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index 1e476255e..8d34c9b42 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -26,7 +26,7 @@ osn::Streaming::~Streaming() { - deleteOutput(); + DeleteOutput(); if (streamArchive && !obs_encoder_active(streamArchive)) { obs_encoder_release(streamArchive); streamArchive = nullptr; @@ -389,8 +389,8 @@ void osn::IStreaming::GetDroppedFrames(void *data, const int64_t id, const std:: int totalDropped = 0; - if (streaming->output && obs_output_active(streaming->output)) { - totalDropped = obs_output_get_frames_dropped(streaming->output); + if (streaming->GetOutput() && obs_output_active(streaming->GetOutput())) { + totalDropped = obs_output_get_frames_dropped(streaming->GetOutput()); } rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); @@ -407,8 +407,8 @@ void osn::IStreaming::GetTotalFrames(void *data, const int64_t id, const std::ve int totalFrames = 0; - if (streaming->output && obs_output_active(streaming->output)) { - totalFrames = obs_output_get_total_frames(streaming->output); + if (streaming->GetOutput() && obs_output_active(streaming->GetOutput())) { + totalFrames = obs_output_get_total_frames(streaming->GetOutput()); } rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); @@ -425,9 +425,9 @@ void osn::IStreaming::GetKBitsPerSec(void *data, const int64_t id, const std::ve double kbitsPerSec = 0; - if (streaming->output && obs_output_active(streaming->output)) { + if (streaming->GetOutput() && obs_output_active(streaming->GetOutput())) { - uint64_t bytesSent = obs_output_get_total_bytes(streaming->output); + uint64_t bytesSent = obs_output_get_total_bytes(streaming->GetOutput()); uint64_t bytesSentTime = os_gettime_ns(); if (bytesSent < streaming->lastBytesSent) @@ -462,9 +462,9 @@ void osn::IStreaming::GetDataOutput(void *data, const int64_t id, const std::vec double dataOutput = 0; - if (streaming->output && obs_output_active(streaming->output)) { + if (streaming->GetOutput() && obs_output_active(streaming->GetOutput())) { - uint64_t bytesSent = obs_output_get_total_bytes(streaming->output); + uint64_t bytesSent = obs_output_get_total_bytes(streaming->GetOutput()); uint64_t bytesSentTime = os_gettime_ns(); if (bytesSent < streaming->lastBytesSent) From 4d9b38521d0b9b3519c27c85a8b56920e910c869 Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Mon, 12 Jan 2026 16:01:36 +0000 Subject: [PATCH 07/19] Enhanced broadcasting with the new API proof of concept --- js/module.d.ts | 1 + js/module.ts | 1 + .../source/advanced-streaming.cpp | 1 + obs-studio-client/source/simple-streaming.cpp | 1 + obs-studio-client/source/streaming.cpp | 23 +++++ obs-studio-client/source/streaming.hpp | 2 + obs-studio-server/CMakeLists.txt | 4 +- obs-studio-server/source/nodeobs_service.cpp | 39 ++------ .../source/osn-advanced-streaming.cpp | 90 ++++++++++++++++++- .../source/osn-multitrack-video.cpp | 27 ++++++ .../source/osn-multitrack-video.hpp | 22 +++++ obs-studio-server/source/osn-output.cpp | 23 +++-- obs-studio-server/source/osn-output.hpp | 3 + .../source/osn-simple-streaming.cpp | 3 + obs-studio-server/source/osn-streaming.cpp | 25 ++++++ obs-studio-server/source/osn-streaming.hpp | 9 +- 16 files changed, 229 insertions(+), 45 deletions(-) create mode 100644 obs-studio-server/source/osn-multitrack-video.cpp create mode 100644 obs-studio-server/source/osn-multitrack-video.hpp diff --git a/js/module.d.ts b/js/module.d.ts index 2bb3aee9f..3872d4e73 100644 --- a/js/module.d.ts +++ b/js/module.d.ts @@ -798,6 +798,7 @@ export interface IStreaming { service: IService; enforceServiceBitrate: boolean; enableTwitchVOD: boolean; + enhancedBroadcasting: boolean; delay: IDelay; reconnect: IReconnect; network: INetwork; diff --git a/js/module.ts b/js/module.ts index e3c03b84b..8e3d0f866 100644 --- a/js/module.ts +++ b/js/module.ts @@ -1709,6 +1709,7 @@ export interface IStreaming { service: IService, enforceServiceBitrate: boolean, enableTwitchVOD: boolean, + enhancedBroadcasting: boolean, delay: IDelay, reconnect: IReconnect, network: INetwork, diff --git a/obs-studio-client/source/advanced-streaming.cpp b/obs-studio-client/source/advanced-streaming.cpp index 267169b07..1769e1398 100644 --- a/obs-studio-client/source/advanced-streaming.cpp +++ b/obs-studio-client/source/advanced-streaming.cpp @@ -37,6 +37,7 @@ Napi::Object osn::AdvancedStreaming::Init(Napi::Env env, Napi::Object exports) InstanceAccessor("service", &osn::AdvancedStreaming::GetService, &osn::AdvancedStreaming::SetService), InstanceAccessor("enforceServiceBitrate", &osn::AdvancedStreaming::GetEnforceServiceBirate, &osn::AdvancedStreaming::SetEnforceServiceBirate), InstanceAccessor("enableTwitchVOD", &osn::AdvancedStreaming::GetEnableTwitchVOD, &osn::AdvancedStreaming::SetEnableTwitchVOD), + InstanceAccessor("enhancedBroadcasting", &osn::AdvancedStreaming::GetEnhancedBroadcasting, &osn::AdvancedStreaming::SetEnhancedBroadcasting), InstanceAccessor("signalHandler", &osn::AdvancedStreaming::GetSignalHandler, &osn::AdvancedStreaming::SetSignalHandler), InstanceAccessor("delay", &osn::AdvancedStreaming::GetDelay, &osn::AdvancedStreaming::SetDelay), InstanceAccessor("reconnect", &osn::AdvancedStreaming::GetReconnect, &osn::AdvancedStreaming::SetReconnect), diff --git a/obs-studio-client/source/simple-streaming.cpp b/obs-studio-client/source/simple-streaming.cpp index 8c3e56246..b1cb8e00b 100644 --- a/obs-studio-client/source/simple-streaming.cpp +++ b/obs-studio-client/source/simple-streaming.cpp @@ -39,6 +39,7 @@ Napi::Object osn::SimpleStreaming::Init(Napi::Env env, Napi::Object exports) InstanceAccessor("service", &osn::SimpleStreaming::GetService, &osn::SimpleStreaming::SetService), InstanceAccessor("enforceServiceBitrate", &osn::SimpleStreaming::GetEnforceServiceBirate, &osn::SimpleStreaming::SetEnforceServiceBirate), InstanceAccessor("enableTwitchVOD", &osn::SimpleStreaming::GetEnableTwitchVOD, &osn::SimpleStreaming::SetEnableTwitchVOD), + InstanceAccessor("enhancedBroadcasting", &osn::SimpleStreaming::GetEnhancedBroadcasting, &osn::SimpleStreaming::SetEnhancedBroadcasting), InstanceAccessor("audioEncoder", &osn::SimpleStreaming::GetAudioEncoder, &osn::SimpleStreaming::SetAudioEncoder), InstanceAccessor("useAdvanced", &osn::SimpleStreaming::GetUseAdvanced, &osn::SimpleStreaming::SetUseAdvanced), InstanceAccessor("customEncSettings", &osn::SimpleStreaming::GetCustomEncSettings, &osn::SimpleStreaming::SetCustomEncSettings), diff --git a/obs-studio-client/source/streaming.cpp b/obs-studio-client/source/streaming.cpp index c51b906a6..d944121b0 100644 --- a/obs-studio-client/source/streaming.cpp +++ b/obs-studio-client/source/streaming.cpp @@ -143,6 +143,29 @@ void osn::Streaming::SetEnforceServiceBirate(const Napi::CallbackInfo &info, con conn->call_synchronous_helper(className, "SetEnforceServiceBirate", {ipc::value(this->uid), ipc::value(value.ToBoolean().Value())}); } +Napi::Value osn::Streaming::GetEnhancedBroadcasting(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper(className, "GetEnhancedBroadcasting", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + return Napi::Boolean::New(info.Env(), response[1].value_union.ui32); +} + +void osn::Streaming::SetEnhancedBroadcasting(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call_synchronous_helper(className, "SetEnhancedBroadcasting", {ipc::value(this->uid), ipc::value(value.ToBoolean().Value())}); +} + Napi::Value osn::Streaming::GetEnableTwitchVOD(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/streaming.hpp b/obs-studio-client/source/streaming.hpp index bb5e6cee6..afde56080 100644 --- a/obs-studio-client/source/streaming.hpp +++ b/obs-studio-client/source/streaming.hpp @@ -40,6 +40,8 @@ class Streaming : public WorkerSignals { void SetEnforceServiceBirate(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetEnableTwitchVOD(const Napi::CallbackInfo &info); void SetEnableTwitchVOD(const Napi::CallbackInfo &info, const Napi::Value &value); + Napi::Value GetEnhancedBroadcasting(const Napi::CallbackInfo &info); + void SetEnhancedBroadcasting(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetDelay(const Napi::CallbackInfo &info); void SetDelay(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetReconnect(const Napi::CallbackInfo &info); diff --git a/obs-studio-server/CMakeLists.txt b/obs-studio-server/CMakeLists.txt index 9fa3385b4..9853f1140 100644 --- a/obs-studio-server/CMakeLists.txt +++ b/obs-studio-server/CMakeLists.txt @@ -292,9 +292,11 @@ SET(osn-server_SOURCES "${PROJECT_SOURCE_DIR}/source/osn-multitrack-video-data-model.hpp" "${PROJECT_SOURCE_DIR}/source/osn-multitrack-video-output.cpp" "${PROJECT_SOURCE_DIR}/source/osn-multitrack-video-output.hpp" + "${PROJECT_SOURCE_DIR}/source/osn-multitrack-video-system-info.hpp" + "${PROJECT_SOURCE_DIR}/source/osn-multitrack-video.cpp" + "${PROJECT_SOURCE_DIR}/source/osn-multitrack-video.hpp" "${PROJECT_SOURCE_DIR}/source/osn-audio-bitrate.cpp" "${PROJECT_SOURCE_DIR}/source/osn-audio-bitrate.hpp" - "${PROJECT_SOURCE_DIR}/source/osn-multitrack-video-system-info.hpp" "${PROJECT_SOURCE_DIR}/source/osn-output.cpp" "${PROJECT_SOURCE_DIR}/source/osn-output.hpp" "${PROJECT_SOURCE_DIR}/source/osn-properties.cpp" diff --git a/obs-studio-server/source/nodeobs_service.cpp b/obs-studio-server/source/nodeobs_service.cpp index 732f25d02..61bfcc5b3 100644 --- a/obs-studio-server/source/nodeobs_service.cpp +++ b/obs-studio-server/source/nodeobs_service.cpp @@ -28,9 +28,7 @@ #include #include "osn-vcam.hpp" -#include "osn-multitrack-video-configuration.hpp" -#include "osn-audio-bitrate.hpp" -#include "osn-multitrack-video-output.hpp" +#include "osn-multitrack-video.hpp" #ifdef __APPLE__ #include @@ -92,13 +90,7 @@ std::mutex signalMutex; std::queue outputSignal; std::thread releaseWorker; -struct EnhancedBroadcastOutputObjects { - OBSOutputAutoRelease obsOutput; - std::shared_ptr videoEncoderGroup; - std::vector audioEncoders; - OBSServiceAutoRelease multitrackVideoService; -}; -static std::optional enhancedBroadcastContext; +static std::optional enhancedBroadcastContext; OBS_service::OBS_service() {} OBS_service::~OBS_service() {} @@ -1266,18 +1258,6 @@ const char *OBS_service::getStreamOutputType(const obs_service_t *service) return nullptr; } -static int GetAudioBitrate() -{ - const char *audio_encoder_id = config_get_string(ConfigManager::getInstance().getBasic(), "SimpleOutput", "StreamAudioEncoder"); - - const int bitrate = (int)config_get_uint(ConfigManager::getInstance().getBasic(), "SimpleOutput", "ABitrate"); - - if (audio_encoder_id && strcmp(audio_encoder_id, "opus") == 0) - return osn::FindClosestAvailableSimpleOpusBitrate(bitrate); - - return osn::FindClosestAvailableSimpleAACBitrate(bitrate); -} - static inline bool ServiceSupportsVodTrack(const char *service) { static const char *vodTrackServices[] = {"Twitch"}; @@ -1307,11 +1287,6 @@ static bool IsVodTrackEnabled(obs_service_t *service) return vodTrackEnabledAdv && ServiceSupportsVodTrack(name); } -static bool IsMultitrackVideoEnabled() -{ - return config_get_bool(ConfigManager::getInstance().getBasic(), "EnhancedBroadcasting", "EnableMultitrackVideo"); -} - bool OBS_service::startSingleTrackStreaming(StreamServiceId serviceId) { const char *type = getStreamOutputType(services[serviceId]); @@ -1404,7 +1379,7 @@ bool OBS_service::startMultiTrackStreaming(StreamServiceId serviceId, bool dualS throw std::runtime_error("startStreaming - go live config is empty"); } - const auto audio_bitrate = GetAudioBitrate(); + const auto audio_bitrate = osn::GetMultitrackAudioBitrate(); const auto audio_encoder_id = osn::GetSimpleAACEncoderForBitrate(audio_bitrate); std::vector audio_encoders; @@ -1429,7 +1404,7 @@ bool OBS_service::startMultiTrackStreaming(StreamServiceId serviceId, bool dualS isStreaming[serviceId] = obs_output_start(output); - enhancedBroadcastContext.emplace(EnhancedBroadcastOutputObjects{ + enhancedBroadcastContext.emplace(osn::EnhancedBroadcastOutputObjects{ std::move(output), video_encoder_group, std::move(audio_encoders), @@ -1447,7 +1422,7 @@ bool OBS_service::startStreaming(StreamServiceId serviceId, bool dualStreamingMo } try { - if (isTwitchStream(serviceId) && (IsMultitrackVideoEnabled() || dualStreamingMode)) { + if (isTwitchStream(serviceId) && (osn::IsMultitrackVideoEnabled() || dualStreamingMode)) { return startMultiTrackStreaming(serviceId, dualStreamingMode); } @@ -1634,7 +1609,7 @@ bool OBS_service::updateRecordingEncoders(bool isSimpleMode, StreamServiceId ser bool simpleUsesStream = false; bool advancedUsesStream = false; - if (!IsMultitrackVideoEnabled()) { + if (!osn::IsMultitrackVideoEnabled()) { simpleUsesStream = isSimpleMode && simpleQuality.compare("Stream") == 0; advancedUsesStream = !isSimpleMode && (advancedQuality.compare("") == 0 || advancedQuality.compare("none") == 0); } @@ -1766,7 +1741,7 @@ void OBS_service::stopStreaming(bool forceStop, StreamServiceId serviceId) obs_output_stop(streamingOutput[serviceId]); /* Unregister the BPM (Broadcast Performance Metrics) callback and destroy the allocated metrics data. */ - if (isTwitchStream(serviceId) && IsMultitrackVideoEnabled()) { + if (isTwitchStream(serviceId) && osn::IsMultitrackVideoEnabled()) { obs_output_remove_packet_callback(streamingOutput[serviceId], bpm_inject, NULL); bpm_destroy(streamingOutput[serviceId]); } diff --git a/obs-studio-server/source/osn-advanced-streaming.cpp b/obs-studio-server/source/osn-advanced-streaming.cpp index 0f54ac83f..29121d184 100644 --- a/obs-studio-server/source/osn-advanced-streaming.cpp +++ b/obs-studio-server/source/osn-advanced-streaming.cpp @@ -24,6 +24,8 @@ #include "nodeobs_audio_encoders.h" #include "osn-audio-track.hpp" +#include "osn-multitrack-video.hpp" + void osn::IAdvancedStreaming::Register(ipc::server &srv) { std::shared_ptr cls = std::make_shared("AdvancedStreaming"); @@ -42,6 +44,9 @@ void osn::IAdvancedStreaming::Register(ipc::server &srv) cls->register_function(std::make_shared("GetEnableTwitchVOD", std::vector{ipc::type::UInt64}, GetEnableTwitchVOD)); cls->register_function( std::make_shared("SetEnableTwitchVOD", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnableTwitchVOD)); + cls->register_function(std::make_shared("GetEnhancedBroadcasting", std::vector{ipc::type::UInt64}, GetEnhancedBroadcasting)); + cls->register_function( + std::make_shared("SetEnhancedBroadcasting", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnhancedBroadcasting)); cls->register_function(std::make_shared("GetAudioTrack", std::vector{ipc::type::UInt64}, GetAudioTrack)); cls->register_function(std::make_shared("SetAudioTrack", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetAudioTrack)); cls->register_function(std::make_shared("GetTwitchTrack", std::vector{ipc::type::UInt64}, GetTwitchTrack)); @@ -369,17 +374,94 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Advanced streaming reference is not valid."); } + if (!streaming->service) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid service."); + } + + if (streaming->enhancedBroadcasting) { + const bool dualStreamingMode = true; + + blog(LOG_INFO, "osn::IAdvancedStreaming::Start - service id: %s", obs_service_get_id(streaming->service)); + + const bool is_custom = strncmp("rtmp_custom", obs_service_get_type(streaming->service), 11) == 0; + + OBSDataAutoRelease settings = obs_service_get_settings(streaming->service); + std::string key = obs_data_get_string(settings, "key"); + + const char *service_name = ""; + if (is_custom && obs_data_has_user_value(settings, "service_name")) { + service_name = obs_data_get_string(settings, "service_name"); + } else if (!is_custom) { + service_name = obs_data_get_string(settings, "service"); + } + + std::optional custom_rtmp_url; + auto server = obs_data_get_string(settings, "server"); + if (strcmp(server, "auto") != 0) { + custom_rtmp_url = server; + } + + auto service_custom_server = obs_data_get_bool(settings, "using_custom_server"); + if (custom_rtmp_url.has_value()) { + blog(LOG_INFO, "Using %sserver '%s'", service_custom_server ? "custom " : "", custom_rtmp_url->c_str()); + } + + auto auto_config_url = osn::MultitrackVideoAutoConfigURL(streaming->service); + blog(LOG_INFO, "Auto config URL: %s", auto_config_url.c_str()); + + // TODO: !!!!!!!!!!!!!!!! VOD track index from options instead of global config?????????????????????????????????????????????????????? + const auto vodTrackIndex = int(config_get_int(ConfigManager::getInstance().getBasic(), "AdvOut", "VodTrackIndex")) - 1; + blog(LOG_INFO, "vodTrackIndex: %d", vodTrackIndex); + + auto vod_track_mixer = streaming->enableTwitchVOD ? std::optional{vodTrackIndex} : std::nullopt; + + auto go_live_post = osn::constructGoLivePost(StreamServiceId::Main, dualStreamingMode, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); + std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); + if (!go_live_config.has_value()) { + throw std::runtime_error("startStreaming - go live config is empty"); + } + + const auto audio_bitrate = osn::GetMultitrackAudioBitrate(); + const auto audio_encoder_id = osn::GetSimpleAACEncoderForBitrate(audio_bitrate); + + std::vector audio_encoders; + std::shared_ptr video_encoder_group; + auto output = + osn::SetupOBSOutput("Enhanced Broadcasting", go_live_config.value(), audio_encoders, video_encoder_group, audio_encoder_id, 0, vod_track_mixer); + if (!output) { + throw std::runtime_error("startStreaming - failed to create multitrack output"); + } + + auto multitrack_video_service = osn::create_service(*go_live_config, std::nullopt, ""); // Stream key is defined by config from Twitch + if (!multitrack_video_service) { + throw std::runtime_error("startStreaming - failed to create multitrack video service"); + } + + streaming->SetOutput(output.Get()); + obs_output_set_service(output, multitrack_video_service); + + // Register the BPM (Broadcast Performance Metrics) callback + obs_output_add_packet_callback(output, bpm_inject, NULL); + + streaming->StartOutput(); + + streaming->enhancedBroadcastContext.emplace(EnhancedBroadcastOutputObjects{ + std::move(output), + video_encoder_group, + std::move(audio_encoders), + std::move(multitrack_video_service), + }); + } + // TODO: enhanced broadcasting case + return; + if (!streaming->videoEncoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid video encoder."); } streaming->UpdateEncoders(); - if (!streaming->service) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid service."); - } - const char *type = OBS_service::getStreamOutputType(streaming->service); if (!type) type = "rtmp_output"; diff --git a/obs-studio-server/source/osn-multitrack-video.cpp b/obs-studio-server/source/osn-multitrack-video.cpp new file mode 100644 index 000000000..61435d9dd --- /dev/null +++ b/obs-studio-server/source/osn-multitrack-video.cpp @@ -0,0 +1,27 @@ +#include "osn-multitrack-video.hpp" + +#include "osn-audio-bitrate.hpp" + +#include "nodeobs_configManager.hpp" +#include + + +namespace osn { + +bool IsMultitrackVideoEnabled() +{ + return config_get_bool(ConfigManager::getInstance().getBasic(), "EnhancedBroadcasting", "EnableMultitrackVideo"); +} + +int GetMultitrackAudioBitrate() +{ + const char *audio_encoder_id = config_get_string(ConfigManager::getInstance().getBasic(), "SimpleOutput", "StreamAudioEncoder"); + const int bitrate = (int)config_get_uint(ConfigManager::getInstance().getBasic(), "SimpleOutput", "ABitrate"); + + if (audio_encoder_id && strcmp(audio_encoder_id, "opus") == 0) + return osn::FindClosestAvailableSimpleOpusBitrate(bitrate); + + return osn::FindClosestAvailableSimpleAACBitrate(bitrate); +} + +} \ No newline at end of file diff --git a/obs-studio-server/source/osn-multitrack-video.hpp b/obs-studio-server/source/osn-multitrack-video.hpp new file mode 100644 index 000000000..b81ab8005 --- /dev/null +++ b/obs-studio-server/source/osn-multitrack-video.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "osn-multitrack-video-configuration.hpp" +#include "osn-audio-bitrate.hpp" +#include "osn-multitrack-video-output.hpp" + +#include "obs.hpp" + +namespace osn { + +struct EnhancedBroadcastOutputObjects { + OBSOutputAutoRelease obsOutput; + std::shared_ptr videoEncoderGroup; + std::vector audioEncoders; + OBSServiceAutoRelease multitrackVideoService; +}; + +bool IsMultitrackVideoEnabled(); + +int GetMultitrackAudioBitrate(); + +} \ No newline at end of file diff --git a/obs-studio-server/source/osn-output.cpp b/obs-studio-server/source/osn-output.cpp index 07202c673..f987d9c68 100644 --- a/obs-studio-server/source/osn-output.cpp +++ b/obs-studio-server/source/osn-output.cpp @@ -38,23 +38,34 @@ osn::Output::~Output() { } -void osn::Output::CreateOutput(const std::string &type, const std::string &name) -{ - DeleteOutput(); - m_output = obs_output_create(type.c_str(), name.c_str(), nullptr, nullptr); - +void osn::Output::InitOutput(obs_output_t *output) { auto onStopped = [](void *data, calldata_t *) { osn::Output *context = reinterpret_cast(data); std::unique_lock lock(context->m_mtxOutputStop); context->m_cvStop.notify_one(); }; - signal_handler *sh = obs_output_get_signal_handler(m_output); + signal_handler *sh = obs_output_get_signal_handler(output); signal_handler_connect(sh, "stop", onStopped, this); ConnectSignals(); } +void osn::Output::CreateOutput(const std::string &type, const std::string &name) +{ + DeleteOutput(); + m_output = obs_output_create(type.c_str(), name.c_str(), nullptr, nullptr); + + InitOutput(m_output); +} + +void osn::Output::SetOutput(obs_output_t *output) +{ + DeleteOutput(); + m_output = obs_output_get_ref(output); + InitOutput(m_output); +} + void osn::Output::DeleteOutput() { if (!m_output) diff --git a/obs-studio-server/source/osn-output.hpp b/obs-studio-server/source/osn-output.hpp index bdf461825..cdcbf88e8 100644 --- a/obs-studio-server/source/osn-output.hpp +++ b/obs-studio-server/source/osn-output.hpp @@ -41,6 +41,7 @@ class Output { void ConnectSignals(); void CreateOutput(const std::string &type, const std::string &name); + void SetOutput(obs_output_t *output); void DeleteOutput(); void StartOutput(); @@ -58,6 +59,8 @@ class Output { private: friend void OutputSignalCallback(void *data, calldata_t *params); + void InitOutput(obs_output_t *output); + obs_video_info *m_canvas = nullptr; obs_output_t *m_output = nullptr; diff --git a/obs-studio-server/source/osn-simple-streaming.cpp b/obs-studio-server/source/osn-simple-streaming.cpp index 442f1fef3..cd141f8b8 100644 --- a/obs-studio-server/source/osn-simple-streaming.cpp +++ b/obs-studio-server/source/osn-simple-streaming.cpp @@ -49,6 +49,9 @@ void osn::ISimpleStreaming::Register(ipc::server &srv) cls->register_function(std::make_shared("GetEnableTwitchVOD", std::vector{ipc::type::UInt64}, GetEnableTwitchVOD)); cls->register_function( std::make_shared("SetEnableTwitchVOD", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnableTwitchVOD)); + cls->register_function(std::make_shared("GetEnhancedBroadcasting", std::vector{ipc::type::UInt64}, GetEnhancedBroadcasting)); + cls->register_function( + std::make_shared("SetEnhancedBroadcasting", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnhancedBroadcasting)); cls->register_function(std::make_shared("GetDelay", std::vector{ipc::type::UInt64}, GetDelay)); cls->register_function(std::make_shared("SetDelay", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetDelay)); cls->register_function(std::make_shared("GetReconnect", std::vector{ipc::type::UInt64}, GetReconnect)); diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index 8d34c9b42..159298840 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -156,6 +156,31 @@ void osn::IStreaming::SetEnforceServiceBirate(void *data, const int64_t id, cons AUTO_DEBUG; } +void osn::IStreaming::GetEnhancedBroadcasting(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + rval.push_back(ipc::value(streaming->enhancedBroadcasting)); + AUTO_DEBUG; +} + +void osn::IStreaming::SetEnhancedBroadcasting(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + streaming->enhancedBroadcasting = args[1].value_union.ui32; + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + void osn::IStreaming::GetEnableTwitchVOD(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); diff --git a/obs-studio-server/source/osn-streaming.hpp b/obs-studio-server/source/osn-streaming.hpp index 3691be419..42922f970 100644 --- a/obs-studio-server/source/osn-streaming.hpp +++ b/obs-studio-server/source/osn-streaming.hpp @@ -24,6 +24,7 @@ #include "osn-network.hpp" #include "osn-output.hpp" #include "osn-video-encoder.hpp" +#include "osn-multitrack-video.hpp" #include "nodeobs_configManager.hpp" @@ -38,8 +39,8 @@ class Streaming : public Output { service = nullptr; enforceServiceBitrate = true; enableTwitchVOD = false; - enhancedBroadcasting = false; twitchVODSupported = false; + enhancedBroadcasting = false; oldMixer_desktopSource1 = 0; oldMixer_desktopSource2 = 0; //signals = {"start", "stop", "starting", "stopping", "activate", "deactivate", "reconnect", "reconnect_success"}; @@ -57,8 +58,8 @@ class Streaming : public Output { obs_service_t *service; bool enforceServiceBitrate; bool enableTwitchVOD; - bool enhancedBroadcasting; bool twitchVODSupported; + bool enhancedBroadcasting; uint32_t oldMixer_desktopSource1; uint32_t oldMixer_desktopSource2; Delay *delay; @@ -67,6 +68,8 @@ class Streaming : public Output { uint64_t lastBytesSent; uint64_t lastBytesSentTime; + std::optional enhancedBroadcastContext; + bool isTwitchVODSupported(); void getDelayLegacySettings(); void getReconnectLegacySettings(); @@ -104,6 +107,8 @@ class IStreaming { static void SetEnforceServiceBirate(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetEnableTwitchVOD(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void SetEnableTwitchVOD(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void GetEnhancedBroadcasting(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void SetEnhancedBroadcasting(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetDelay(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void SetDelay(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetReconnect(void *data, const int64_t id, const std::vector &args, std::vector &rval); From fa74915b15c353ac091a687b38af80ac12e9e1aa Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Wed, 14 Jan 2026 16:12:56 +0000 Subject: [PATCH 08/19] Implemented enhanced broadcasting for the simple and advanced modes for the new API --- js/module.d.ts | 3 +- js/module.ts | 9 +- .../source/osn-advanced-streaming.cpp | 80 ++---------------- obs-studio-server/source/osn-output.cpp | 2 + obs-studio-server/source/osn-output.hpp | 2 +- .../source/osn-simple-streaming.cpp | 5 ++ obs-studio-server/source/osn-streaming.cpp | 83 ++++++++++++++++++- obs-studio-server/source/osn-streaming.hpp | 11 ++- 8 files changed, 110 insertions(+), 85 deletions(-) diff --git a/js/module.d.ts b/js/module.d.ts index 3872d4e73..1be255710 100644 --- a/js/module.d.ts +++ b/js/module.d.ts @@ -794,7 +794,8 @@ export interface IVideoEncoderFactory { create(id: string, name: string, settings?: ISettings): IVideoEncoder; } export interface IStreaming { - videoEncoder: IVideoEncoder; + // Video encoder value is ignored when enhancedBroadcasting === true + videoEncoder?: IVideoEncoder; service: IService; enforceServiceBitrate: boolean; enableTwitchVOD: boolean; diff --git a/js/module.ts b/js/module.ts index 8e3d0f866..208d89acf 100644 --- a/js/module.ts +++ b/js/module.ts @@ -581,12 +581,12 @@ export interface IGlobal { readonly version: number; /** - * Percentage of CPU being used + * Percentage of CPU being used */ readonly cpuPercentage: number; /** - * Current FPS + * Current FPS */ readonly currentFrameRate: number; @@ -601,7 +601,7 @@ export interface IGlobal { readonly diskSpaceAvailable: number; /** - * Current memory usage + * Current memory usage */ readonly memoryUsage: number; } @@ -1705,7 +1705,8 @@ export interface IVideoEncoderFactory { } export interface IStreaming { - videoEncoder: IVideoEncoder, + // Video encoder value is ignored when enhancedBroadcasting === true + videoEncoder?: IVideoEncoder, service: IService, enforceServiceBitrate: boolean, enableTwitchVOD: boolean, diff --git a/obs-studio-server/source/osn-advanced-streaming.cpp b/obs-studio-server/source/osn-advanced-streaming.cpp index 29121d184..b8494360e 100644 --- a/obs-studio-server/source/osn-advanced-streaming.cpp +++ b/obs-studio-server/source/osn-advanced-streaming.cpp @@ -379,83 +379,13 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec } if (streaming->enhancedBroadcasting) { - const bool dualStreamingMode = true; - - blog(LOG_INFO, "osn::IAdvancedStreaming::Start - service id: %s", obs_service_get_id(streaming->service)); - - const bool is_custom = strncmp("rtmp_custom", obs_service_get_type(streaming->service), 11) == 0; - - OBSDataAutoRelease settings = obs_service_get_settings(streaming->service); - std::string key = obs_data_get_string(settings, "key"); - - const char *service_name = ""; - if (is_custom && obs_data_has_user_value(settings, "service_name")) { - service_name = obs_data_get_string(settings, "service_name"); - } else if (!is_custom) { - service_name = obs_data_get_string(settings, "service"); - } - - std::optional custom_rtmp_url; - auto server = obs_data_get_string(settings, "server"); - if (strcmp(server, "auto") != 0) { - custom_rtmp_url = server; - } - - auto service_custom_server = obs_data_get_bool(settings, "using_custom_server"); - if (custom_rtmp_url.has_value()) { - blog(LOG_INFO, "Using %sserver '%s'", service_custom_server ? "custom " : "", custom_rtmp_url->c_str()); - } - - auto auto_config_url = osn::MultitrackVideoAutoConfigURL(streaming->service); - blog(LOG_INFO, "Auto config URL: %s", auto_config_url.c_str()); - - // TODO: !!!!!!!!!!!!!!!! VOD track index from options instead of global config?????????????????????????????????????????????????????? - const auto vodTrackIndex = int(config_get_int(ConfigManager::getInstance().getBasic(), "AdvOut", "VodTrackIndex")) - 1; - blog(LOG_INFO, "vodTrackIndex: %d", vodTrackIndex); - - auto vod_track_mixer = streaming->enableTwitchVOD ? std::optional{vodTrackIndex} : std::nullopt; - - auto go_live_post = osn::constructGoLivePost(StreamServiceId::Main, dualStreamingMode, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); - std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); - if (!go_live_config.has_value()) { - throw std::runtime_error("startStreaming - go live config is empty"); - } - - const auto audio_bitrate = osn::GetMultitrackAudioBitrate(); - const auto audio_encoder_id = osn::GetSimpleAACEncoderForBitrate(audio_bitrate); - - std::vector audio_encoders; - std::shared_ptr video_encoder_group; - auto output = - osn::SetupOBSOutput("Enhanced Broadcasting", go_live_config.value(), audio_encoders, video_encoder_group, audio_encoder_id, 0, vod_track_mixer); - if (!output) { - throw std::runtime_error("startStreaming - failed to create multitrack output"); - } - - auto multitrack_video_service = osn::create_service(*go_live_config, std::nullopt, ""); // Stream key is defined by config from Twitch - if (!multitrack_video_service) { - throw std::runtime_error("startStreaming - failed to create multitrack video service"); - } - - streaming->SetOutput(output.Get()); - obs_output_set_service(output, multitrack_video_service); - - // Register the BPM (Broadcast Performance Metrics) callback - obs_output_add_packet_callback(output, bpm_inject, NULL); - - streaming->StartOutput(); - - streaming->enhancedBroadcastContext.emplace(EnhancedBroadcastOutputObjects{ - std::move(output), - video_encoder_group, - std::move(audio_encoders), - std::move(multitrack_video_service), - }); + auto vod_track_mixer = (streaming->twitchVODSupported && streaming->enableTwitchVOD) ? + std::optional{streaming->twitchTrack} : + std::nullopt; + streaming->StartEnhancedBroadcastingStream(vod_track_mixer); + return; } - // TODO: enhanced broadcasting case - return; - if (!streaming->videoEncoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid video encoder."); } diff --git a/obs-studio-server/source/osn-output.cpp b/obs-studio-server/source/osn-output.cpp index f987d9c68..979290784 100644 --- a/obs-studio-server/source/osn-output.cpp +++ b/obs-studio-server/source/osn-output.cpp @@ -71,6 +71,8 @@ void osn::Output::DeleteOutput() if (!m_output) return; + blog(LOG_INFO, "osn::Output::DeleteOutput"); + if (obs_output_active(m_output)) { obs_output_stop(m_output); std::unique_lock lock(m_mtxOutputStop); diff --git a/obs-studio-server/source/osn-output.hpp b/obs-studio-server/source/osn-output.hpp index cdcbf88e8..9aba541cd 100644 --- a/obs-studio-server/source/osn-output.hpp +++ b/obs-studio-server/source/osn-output.hpp @@ -42,7 +42,7 @@ class Output { void ConnectSignals(); void CreateOutput(const std::string &type, const std::string &name); void SetOutput(obs_output_t *output); - void DeleteOutput(); + virtual void DeleteOutput(); void StartOutput(); // If no signal, will return an empty optional. Thread safe. diff --git a/obs-studio-server/source/osn-simple-streaming.cpp b/obs-studio-server/source/osn-simple-streaming.cpp index cd141f8b8..4a1c1035d 100644 --- a/obs-studio-server/source/osn-simple-streaming.cpp +++ b/obs-studio-server/source/osn-simple-streaming.cpp @@ -337,6 +337,11 @@ void osn::ISimpleStreaming::Start(void *data, const int64_t id, const std::vecto PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid service."); } + if (streaming->enhancedBroadcasting) { + streaming->StartEnhancedBroadcastingStream(); + return; + } + const char *type = OBS_service::getStreamOutputType(streaming->service); if (!type) type = "rtmp_output"; diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index 159298840..22b2eacdf 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -33,6 +33,14 @@ osn::Streaming::~Streaming() } } +void osn::Streaming::DeleteOutput() { + blog(LOG_INFO, "osn::Streaming::DeleteOutput"); + Output::DeleteOutput(); + if (enhancedBroadcasting) { + enhancedBroadcastingContext.reset(); + } +} + void osn::IStreaming::GetService(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); @@ -405,6 +413,79 @@ void osn::Streaming::setNetworkLegacySettings() config_set_bool(ConfigManager::getInstance().getBasic(), "Output", "LowLatencyEnable", network->enableDynamicBitrate); } +void osn::Streaming::StartEnhancedBroadcastingStream(std::optional vod_track_mixer) { + blog(LOG_INFO, "Streaming::StartEnhancedBroadcastingStream - service id: %s", obs_service_get_id(this->service)); + + if (vod_track_mixer.has_value()) { + blog(LOG_INFO, "vod_track_mixer: %d", vod_track_mixer.value()); + } + + const bool is_custom = strncmp("rtmp_custom", obs_service_get_type(this->service), 11) == 0; + + OBSDataAutoRelease settings = obs_service_get_settings(this->service); + const std::string key = obs_data_get_string(settings, "key"); + + const char *service_name = ""; + if (is_custom && obs_data_has_user_value(settings, "service_name")) { + service_name = obs_data_get_string(settings, "service_name"); + } else if (!is_custom) { + service_name = obs_data_get_string(settings, "service"); + } + + std::optional custom_rtmp_url; + auto server = obs_data_get_string(settings, "server"); + if (strcmp(server, "auto") != 0) { + custom_rtmp_url = server; + } + + auto service_custom_server = obs_data_get_bool(settings, "using_custom_server"); + if (custom_rtmp_url.has_value()) { + blog(LOG_INFO, "Using %s server '%s'", service_custom_server ? "custom " : "", custom_rtmp_url->c_str()); + } + + auto auto_config_url = osn::MultitrackVideoAutoConfigURL(this->service); + blog(LOG_INFO, "Auto config URL: %s", auto_config_url.c_str()); + + const bool dualStreamingMode = true; // TODO: revise this??????? Make this dynamic????? + auto go_live_post = osn::constructGoLivePost(StreamServiceId::Main, dualStreamingMode, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); + std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); + if (!go_live_config.has_value()) { + throw std::runtime_error("startStreaming - go live config is empty"); + } + + const auto audio_bitrate = osn::GetMultitrackAudioBitrate(); + const auto audio_encoder_id = osn::GetSimpleAACEncoderForBitrate(audio_bitrate); + + std::vector audio_encoders; + std::shared_ptr video_encoder_group; + auto output = + osn::SetupOBSOutput("Enhanced Broadcasting", go_live_config.value(), audio_encoders, video_encoder_group, audio_encoder_id, 0, vod_track_mixer); + if (!output) { + throw std::runtime_error("startStreaming - failed to create multitrack output"); + } + + // Stream key is defined by config from Twitch + auto multitrack_video_service = osn::create_service(*go_live_config, std::nullopt, ""); + if (!multitrack_video_service) { + throw std::runtime_error("startStreaming - failed to create multitrack video service"); + } + + this->SetOutput(output.Get()); + obs_output_set_service(output, multitrack_video_service); + + // Register the BPM (Broadcast Performance Metrics) callback + obs_output_add_packet_callback(output, bpm_inject, NULL); + + this->StartOutput(); + + enhancedBroadcastingContext.emplace(EnhancedBroadcastOutputObjects{ + std::move(output), + video_encoder_group, + std::move(audio_encoders), + std::move(multitrack_video_service), + }); +} + void osn::IStreaming::GetDroppedFrames(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); @@ -507,4 +588,4 @@ void osn::IStreaming::GetDataOutput(void *data, const int64_t id, const std::vec rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); rval.push_back(ipc::value(dataOutput)); AUTO_DEBUG; -} +} \ No newline at end of file diff --git a/obs-studio-server/source/osn-streaming.hpp b/obs-studio-server/source/osn-streaming.hpp index 42922f970..a54a08c48 100644 --- a/obs-studio-server/source/osn-streaming.hpp +++ b/obs-studio-server/source/osn-streaming.hpp @@ -28,6 +28,8 @@ #include "nodeobs_configManager.hpp" +#include + namespace osn { class Streaming : public Output { public: @@ -43,7 +45,6 @@ class Streaming : public Output { enhancedBroadcasting = false; oldMixer_desktopSource1 = 0; oldMixer_desktopSource2 = 0; - //signals = {"start", "stop", "starting", "stopping", "activate", "deactivate", "reconnect", "reconnect_success"}; delay = new Delay(); reconnect = new Reconnect(); network = new Network(); @@ -52,6 +53,8 @@ class Streaming : public Output { } virtual ~Streaming(); + void DeleteOutput() override; + public: obs_encoder_t *videoEncoder; obs_encoder_t *streamArchive; @@ -68,8 +71,6 @@ class Streaming : public Output { uint64_t lastBytesSent; uint64_t lastBytesSentTime; - std::optional enhancedBroadcastContext; - bool isTwitchVODSupported(); void getDelayLegacySettings(); void getReconnectLegacySettings(); @@ -77,6 +78,10 @@ class Streaming : public Output { void setDelayLegacySettings(); void setReconnectLegacySettings(); void setNetworkLegacySettings(); + void StartEnhancedBroadcastingStream(std::optional vod_track_mixer = std::nullopt); + +protected: + std::optional enhancedBroadcastingContext; }; class IStreaming { From 9bf5f0f194abf83c5e8095bab1e10fa215f9a93a Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Wed, 14 Jan 2026 16:13:46 +0000 Subject: [PATCH 09/19] Enhanced broadcasting tests --- tests/osn-tests/media/bigbuckbunny.mp4 | Bin 0 -> 1110623 bytes .../src/test_osn_advanced_streaming.ts | 102 +++++++++++++++++- .../src/test_osn_simple_streaming.ts | 97 +++++++++++++++++ 3 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 tests/osn-tests/media/bigbuckbunny.mp4 diff --git a/tests/osn-tests/media/bigbuckbunny.mp4 b/tests/osn-tests/media/bigbuckbunny.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..c70addbfdc76f5bf3b52ab597194ce8a11127a2b GIT binary patch literal 1110623 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 Jfb zl*jvT-6&#V7sd4K{j4x~+2=v#hyT6d%FT;Q{1dr=`<3ltECpbhjICD`4|+aa##ike zvUH0()GrR`+BB_qcy-E;+$rmmC0mT+kLLr8P5;hR37+Zb(vuCS3SiZ1qst_S?L&Ah zFl~-p0ew?cAyzouC5{61kv{xgq7SLSxo$TZT(LEP)V0kNU2vCL+}bUn!%G5RRnXVL zrPboJ3gCXyN%@BPgvIefi|{XHB@&68qiQ=p;~+t6SaKG?lj@|CUA}_cM36uJ(^V8hKE$G-y+7x zA;stU7ASW7gINE^RK{oYB9Ttm(^1|%3#z{cx+Y&&S-R4ggWw~DfLQ3 zJs;b&bx0Swa`aA}1=XY1Gt7*rP+&Mdxv;OzFN7kl`DeHbj%O>R0=I&oA?CO|^#orn zjYc$GRW&w0?$vK3MmD5s#XL-|e>g>B1=Sl21r$CX2tBzxwlMx>BG|Waw0d(Z(HCQVbkr(1@?`m?{D;T`>;E;%D?w@Hima-nvW~6Tjc+S0OfiGuBDE(> zkl}Tz6Lf@-3>nLW*KTk*@u~cY`m>R`#eYa~+U>RBZZ{_v({ko+cyjLxB*)%JAagmG z@SGtNGRDq_o(-K7Z{$vEsJ*c?movrWs!4m0^j|sGLHu9l70WPCP`O(|-!eIWLprf7 zH355uOLS!2Y`eG;EL;qO_o=H!r4e@Y@;=yS$Um zXlqtR-+N4vSntsj<{ktaE4;Eo7gS$rJR!z__guo2L0J~oT=wyEC(B*BlkX87dY;Ty z=;sPk$mZw)O$foGH9GS2+K_lCI1QdYGKmBbE;;MT81Z6pUT&TEetEDTT%1V@hg3ly z4)tNx9RFyrg>c_)J5l1=l1)vx6xOk(@6g9)E=eJIAg0L?)ND1AH<_C`t2*NkM`GHe=5-N| z174TuqO0jM@0#D=)v>gR?VuL5^px-&ki9)BRPLxbi=ZRWm1bb!iNnr2+FoKD@kcJg zVQJ&&%!h|yKlLLyb){_P={=V>k{KkBv zLNgijQBu{X0}xG$laf(_lXGgRf4~cEYot~DitD5WPM`Y$h=s-(hki&_j0-$-dT$hM zgHx1>BwUt}t&q;>A_3$Z*msy)pqmC=fzQW4E5v*$&)|8mGr$=?d^cDbV1Brt^Oqj%YkwW8T*_}>LS7b3XRE!4LQEh zcK}5wsuquRN_%$L0|yQIc@(G*_|@F8q?j%>>8Pwq7z`G*-#Qv8DoHcUL2-Vph#8sG zq+_7(@FfT@G990(P6W_6_m-t|u|Fb{KIWoaHINAvGhHv>;*N+_gWM@SVht7XKbUiC zU&b!C?O3iJt%9*Qqb;jT>e@)@Y06*=EDW2r1!Ab0RAZvJQ8tR8{jb1r95#WX&w+f zfhKT1!zUM#UwyBHz6;x}b^|TOs%=}1NnZ$_Dn|B6>N#+10f08YjoR$>A-_vlxciZH zAV{ZkjliJ>j?JQe=D`49!=o!Ag4!YSVQ4qt)(6|&0KBZJBWK7#>vZcs-{81&H>f-$ zi(dke`ak8@V=9PrQkTZli7QPa1GB_w}LpZs(11=LT3;nq{uSF>zSuAGp=oiIxrBbWQ9>Pm@#4{^z0S{&P0I> zI|@y3KuZW)bHkP=sN(*Rw-_X6Dx0gSiG`Xb)ja>L@0Cj&nNr3!HE12%&5c`sBUvmb zf;6ntJtFr-pKPU_8!@D~Bk-?psZycFrWFv{QRsH79Iy1p+d?ote)`;z&mxLBxj>GN zvsj)+zjczlJ-FTW4rXfJ8)IC{+_0^4#R=S>>P4ixvSh_+9khm2_bfBO%mQyr+Ys}0 zn9~?Gof{PYHjwV7*x!50@;RfVTZZA%pDYT1nOo_~tyj>Me~9{mR=8u9zK4e(+En$X z7^Z^}j1l1bZ8`owLR#eubKxwbnE04$yILPixsODbRaYT;p7Oxyp|J|16}t_M)>>zn zs`lqSg0ZP+W-FqLysy3*@JJWT?&Q2Gwj})4h@`6FV!CfK+xa2m&sjR~rQX&aZ*`*@a}93#UWw zSvDt#LdC8{;+3VSg;AjY51%4AE%0g?F|Y2=j?&|JpN$narARnVIn@QtSKM~u_C~trH=(9CD6%e$fB6SUZKJZG8yTIW~SMR0+pBUc|KdQKa9_3YJBY(pWxxsOE7Vq8IovI(Sv>9v$@!O z2KLD~?V#f=KnTO)?1eqv8F7Q(w;4}mtK(mjv>g#mwKiBqno;k&U)!v`%TbFpPW16_ zoA9uP%1dpM!CnZ|wq3`EzS9fwtLFYqQ*pgiW_i2@zi6*K9dMK7_O7sF+Zy*QXXjahYWC9o6dL!& zxfqp!iO|^RWYvBtD@>y3_t(i6Xet^Fjya zw@c@Sd)cZ0lKUQ9D7-hv6{EL^XbCQ30SVqx#!SBj4;jNu_cID@UfU7Q=CBLsI^jXG z3@XNbvHxevvby2}SIa+mpQ5)G}+p%RoAol+9n>sL4!Lt)e)kZ=W6`55TNH_y^W27p`A)l<_S!G7_ z+3{>Kd#Yu&JvjVtM&V0odsYK{*Cj&*b&{K@Ct4LUPeXz6SuJ=#z=7i7p=39{B*Xpq z1q3K1OBLD(HdtL95Wy2vz>vjh5bX~18h7~x`%hyfs%x=>HQoys87?)`3YB| zDRW_v{PE%*Z#vRq8;KfHdZ56}BYXtlp_q7x0{`G=CI+tL@8oIA$Ve=}A_K~YU&}wi z?u^yGZ+CIwYpa1+E*$xb?{6id`g{wgXiS(NSq$1u(eFdYC*e*2w4g95Xz|&5heMsm zB6nyky1O~28O0~tX3hG+?J(L!FA26P9rHSW*wq*p5376i$slVoNsft(b10o`?-IDHq0c!h)I3H!B!k?G2JY~N&E>ZHISum#-MR#zW!q-6bgM+FU zoTvoQEO`YsV8Y>F;tGerQn0=Uhit>Sz14Z_P6(kDOb(Ca2yL@~3yg`s^(BE1?p$hJ|bRznoMv!###l@8?~uHChc7YLBp@1o4K ziUw^&!H@Pc;1ndglq<=6NQ_|XYslu0wcwe7=WYy(ePc8cCrmMrOHo?*Shn#}z2oqR zzbL3Mg9MY(y%lYv%|;JJ z)CR%==@Iizup7dYr_^JfYLxBYlu%8c28AptdMxzKAFTc)yuc9AR=o!}h36TA!Ch7D z*#MuS7X4BXN0$97{EDSR$4oE-Gz~`4%#fI7mUv-@eL-1281e9U!mYc12*4srQJE)wX zoLmRP1Q6813*25L;_q44E0{pR4G;)ZT)R&Jk#}<_Qx5@q37bcW>a=j%J|tL4NgoW+ z@2@ZH)r5sAJKZ%uECW4f;{Htg(-fOg5Yi42Uev&ak1n@OTO~;!df z6=gj8zlE{1ZztO}bEQZJJFqzJhTFElc+h)^t*`ZkLHkJ^&L9mHkSwcc2-JyD@hF*! z!kK3YKB-hVIB1+|3T$@BIKQs=P_nFt$(PN@ULB4JG*(XTPadKv-|xdZvH>!=b1EPr z9r9$S3oJr2op#y_At^%){uB1-QO5@4tV9zQbr;Omv55X(7IiaTXg|i^yE_TMP};}4 zi(G)bdxaFrSK72%IWSh23y7X2XGIZ7cV}nuZIbSl+wdeiu7Q=MxQWBtDxXy9;XW^y zpi#~?g5>J>P#Zl-5LeeKTYAQvANtdbklkoD?RNQc_Q7Zt)}7jKkWG2(qT603Pq_5I zfYfddl*t9gecsn?_U)z^NN~^eKv7E3Oe*!q+{(zEo3jeGbyRO+^Sb}k!#fI!ZMZC(N0(WpiZ^;9I*%Cc0;C+2KNO9DWH#GNwH}DDar6Xp zB~EfIl(Jk5^%1&1NIoG4WBAC^@a8!mTlGRtX%Vit#DC~FouuZyPTR;h?TNOFrjN&I z#&mso%!iIMRQqHeTo9|?bIper=vgZV3vN7I!zlb@Q(zEE4xq8(E!hIAOZ$_7Gxuyd z1OFM=?6P+`b<|2FNp^b%sABu4+M>uD-;)5Q!;Qs4cpCz`;6fQQEZ0>rv!`|-0!WU? z*7uzFUGLUXR^-y5ExeYT`&e(99O=oGMo#mi>zLT@1&8KctCa{ynth+13pqn$@AZ%F zZB9GC?Y8i+#x*M`tBI?fESdu%~c!if?pKDPV(r_Fp=G zz$6&9TX)*`d{QFOB>-Y zbDjIi)oqoMYs5Qwdu_kZQ`REU3X6YyFK53<1L<5igSm@ZwKMn9p zlD`pYH%9N^U8R-Wwk(;$Ff<~Dbe$$XiO30frwE3}jMz(hQzwLsB`BS-hR5{aXWbG$ zst_@>O-%YVc5b(hwAtYv)~W-(2&sTiR)oO^MSDzaHA(~QPje$wSQ8R;Dw?&&aO8rp zIB!*pO2|*X`HM^x*=-1Y^p+~Sf$-u@3`-@C^^OOuBu+Exe%xZ|_ZKseApi|9=$Sib zp;&E=4}3=xI8va?Udh2J6ASB5*Fyy}dVu#9j>>*-C?B13wl>qLkH!7bj%SQAna&}= zzWePykt}WC2*ivJrc~CC?qV`^q>@Yb*y$B5LuyGZZ5MC7>(ka4k4c?MGpJZ91RHf& z24y55cC_NaXBI0Os>z=viLMZw`5(U3_~xzC(PCdWoG>u+y*plAyCqc+PPkP$#eILI ze_EAtF<`T5BaHIM87OHVRU#w+0B~McTd=^=J%hPhIqaD7+R4tj^5Yk-YjEYR%946( z*ela*b?5|6FV2vjlj-&Y;+spcq+y2X^dA@ttJ~qrK}GBTEbuVSi}!p$fyLg%f8CsYW z^Bx&(T0brN5eDsqdHrzgN{xI-K-cqMK|A1WZ&+C&|1m!#;|S(K*GQ|jMIky#JKOk? zy0q5pI}Y{CCf8<9d8#)XMa|%lR1lTcUf-Jp#|k|qFt2hE2K!{2rMs|!livb2q*^58QB zk9+Fjf*F3s)G2FIZ*+a>!hzUt`QHO1P9WWsy&RZu}o@dO$DK3mM!3d29nG z{EJ?`f3gGb-BD{}W`9B{PZ zr-$lg2Cy57`D>hMWrq!B7k>^~G8Y zq%Vtu`gJX0ANF=LMR%1OV_ISdd~+%hiacr&$vQx5ELxz=jK8#sz2yQZ6%gn6C(Xv7 z??49^Hhqm11O-VZ?%lWFn!c{m*|-)Zl}HMF6Mflwd22cx-%&3!u$X&&AT~!2K<3ms z6LHx_;r=mVXS=MYDs&y@DctH?qUzHrog^i89pw)RC3SLvhxZG^%GRo4qoEhE=$Q_h z%J`B=tC&Y)2wYLwiK=g|52aCm|DO-KMaB_Hrb!{yLyr-2#j}E#x$9QnkqL)n4V?0c zIIb~MfFiOjdS_3qNTzxdUUlIlilp`CC*G<9Vu1PSF!{fG97B9LD@Gc0g? z9l$>*<&5s4q3AGe!R6OdBB_Rk<}@RQeG_><3lX4{awk_+cpNy`$SXz+7lEjc3O(jn|2V19e30^#H>;$wc8r%)@BlLVxoU6^ zxp%OJJkP6l3{U<$1Wf3-s)Dz!k)sp*T+dEty51>J_tg~vp+bH2XIU5cen;%ex>$+a z(V^h#aWEa39LsY;adZ-f8!f*mv8~h-%CgL)_~?>e`7ct_@X^(ndqE(E7?5_cx;PkE?X%!q3Z#=>JoKkuLD(LF58 zR!__GPZQ4U#djv}oc5h9GOlg(XM@$nP3w>O*M469B&I#(b<~qit{8j|Y?9*Z&?wdG zhq#Zjv+pERmL?Xx^q^_Ptr_MW>z!qL)hyC3X${i#9?c+OTDitGzg&{UI_EldCGFs| zWES5nJrO0A0_?X^(It8Xf#C)HL7NmHgHJV3LTrnMZqU!dbE?c_pUKXJ2z6!B4;V9JKA=OqXtZ1nN5E!v!2%POtV zNjve232LS*gl(R(|L2y;;}m=%CDCr4RDr!X#~>u@MF&elx9<@_MLKAGsK1=?;WPc+e4l1w9A@P@iuknGoANHR!kf+HkD~H)a}lwqY58hM(~zNno5)CL zwev)~1RA;&zYI#x78(Chs)XCy8Yca11R=X0!VVg1`n>;DPddx6{g&L9@OWH{Pxc=# zzMsJ6{5f3|6)Qrn&2(v2U~l;gZwYC2-U0@G-|Sf6qZ)iiL)1yth9*kQ>o_nmS2fOma>Frq88X|G5Mtt}Fe`oy1N!+02 zlF$d~xeAI~*)sCZRhUcMwuOmSjp3CypyfIUmNl|pmoP4i!1+9AlRKAqeDQgCureGQ zjxrLMtHYm@Xk@a{(6t3S!h{DWa0wTxRP3c@>PGOsV!yEMry_lRw)>%MwhbBGLUme1 z1cZ*h#J;D}n|qV(B}MIXkCge&_f>w#(e_~m2T6w(5ij@K|G)||KlK}SO9#8yzXut! zw7pH|l~BW@slyOH_POPUQ5?6m9A9EE?ccVVBI>VP88kzJgLdV%bh%Ma%Awq{ry~6@<^AWgTrCf47pQ$3 zl3pdeVTN-v*qN_W)Ehq2F9-a)j8Y?pnY4wm+Y}Pma6wUH9+m z;y>Pjh8@~|K99fa=hFNztv^5WNn-b7!5Y)Ey0Be5U~4F}G-S0|ZeAxkG7jJXTJxQ+ z{XO;jF^=?C3)0xn6%mC->M%z~-;YC@Bj@#!Z$7o^Lc7HX`=`k>n4bkO027%xH`DO356%G!-Oo=g>a)uCL)9=;F8YxF3> zazeRbOk9$jt)=7nrbE_(pR0#ZEc7j91>3ow?j{(9)7)i?Xw(D4Gq)b3t)`7{AR!6c z;4w%ww$iz)6_H+IcoHqOK*yDLt0dJ~^MI3p{_AzdKvfLi`VxD2L&>&EC)-qddImv` zG131J!~hHkBHJ4_e<)sLDiDka`4SU#HK|~c7J8Lk1aF}kQ|#vAV?rJx^Jk@=lie$H zvh!=C^9}aTLAt$Zu+Tev|_s@)u)Aa za~Z{mh3S*1>dzNR*{PU+m@G3ymV*C9-fA~n6tfz|c|6q@uLHB2uQOz1|2=ioAB%Nm zT@b7SHGzPVI3Y~F(t}d@GtKY!g!!L-nM1ZoPvCJwlK|AJQ`aGOz)SV+1dA_5yF_gc z*3o1->3<^$x`s_)XcAqzVdxu-Fzlygw(y8!5}Fyl^oO2r%FCKC?$>7Zqu-uPOxXwTBT7CG{px_^}K@3}qBwj16` zg(jmYSM4Zh7L#vC?eO}Ln_7%JqV~b`>}Te7DGbd#G4-5k5AK5cTL)szY8!CU*$!0nk;;eCC-4X6!B5(0Tn`Jq+jeLUK?X<{6i#ueBy5<&FQ-nt!`=pKZO2r}72(`ScTe-|0#MuN@3F>n zTj~_KVCQTrnI&|m!hE>}YuCN-U7h(Q=S)574-#}a@8~?`Ttd5bnskJ3fUv&AR##li zhGLb!1$SUls$2PA+@YWBk`9thu!z$DNq*-`lSW5Ur7_#^vjs1Dy_mkHKQ`Q58No=lB~_-NW?_w%N}?R^zNp} z7Kd$((gQNmq>kT+aO&tWrdJyMY8i&cVBQ^H3p@e&aswho>2ZWjOrRiP5gtTn50Zjo zBYrC#f~v5W$WpywKtJSm>sNQ>m57nKS2^$2jK2sm=|L33e|Y7jefn9QWB}qw-L@d+ zebzd$oG?mGJBXI-=RLx*(Y{njZ~GoenEqlKVa0w-Ga?+hS8~bR)7$h!&$n!6aSCN< zq45D3LaZu=0P=EaVuamgD&z3vhC}?+_%dsYWNE#=D}EObP2TuJ#Kyr15tcT7+8!11 zUg^kSC_5ge*o7$;{IacSUc0Tvh%#8)^l9*enK}3a z0RqLs>M_#Brd({rz?~>7o^fQSquPQ>oV`1Z%vyA2HrQ{@<%L4A=sF>Jcb!v>`{kzq zE`!vCx(*P&@i0fx%{YQ{7Vs!~;)nLpo(is%l*!RdR588tvN1cdB2cvS#QB1IneyM< z@Sqa)Z>ae;-tfL{-z(}tdY^ed%-(p&n#$YhpSM6Jlg|?lQ#s4~QJ*y$cMFG_4oICB zoi;=nz~V5gp1$#T&WEAvywKs+Cz@GngW}dPXWob*~?FWo@QGG`k z{8^qx%_q8{0YBHJu_pv?D=BVB^~Y5=mu`_HVZ`l~sBwO++9qkZCU(QY{p(~I5KU;6$80N}b@)<|+M32hXE&EzaU$?5j>fkE!WSX%tAWt@9ds@tA;mkb00Z1W*EOVBFFiz|3ngH>lHTcEg31@} zR7dAB7F6QGVLIW;kL@F?K^Zm}r69O;=3F#`>zLcSkvWsKHlPU5&AG_d^55lcB0q`z z-$v@yHg0`-r$9r;LAJbjEyK7Vt~6l{(_P3N#M5jtOvoN?2Az8#a`Ql?!Byy7LVD7k z*7ty_qfwIs=_yuySl^^J41L26PgcUM95sS^JuLK0qzm`vZ8BS%C1g!mxJHtqf6{y7 zFhYv68fm;Ng^6IFn)Esm^>yn~vx86Lk|4c4AOPK0wv$_>$0n4&rye-~$6K;vs8GxM z^vZssKhR9BOqA)>;`l0R0g}!%PXXBk}R8<=y%05-!EPyS0sT#d$v0o ze)cJuMgji@RS5#;&Ra%Cv}QDHB#^M-uJ0JLWf8Yu^wwy}=okDj>bVYrxB^JnBEl}- zD0s^{YXs|=v1+-~P=&ppFUl_USL}?1ib%mv>1!lCqZsF9Y@$)m$-|!{lheB(QH~)}_fdYQ!A=rjH{;qg5;HaKy!AM-dXMcL zLyM`BpE6Es#9j*8saS1lg)5T{@j!v`{M>YRb?BZ+`WRYZEK^1Ig|}pin{XPj1OfiV zJ@nH99u&y0^z;A8*LVNI$El{!LoTQbEKc)S|nF=aLm?*5{sb&*(1(T)?0!agf}T zJ|29){mY0PTj2#hyzlgfO6nzZU8(srrYkowcp=91$vhN;IF=?Nhwd7~sIS*l*&wIb z@q*!+>fV}m_#5ooN6s$JRWwvpBOExOdF>R<5ND4&1N;ZX<2bYhEUr-l;dqWH^2dn~ zW4rhiTbY$ZU0+^z{hSB@pYacZqUF$;>Caa?F9XEw-#w6z0{3kF&k2 zd8r`Dp<6|XB!qx;T+XniV%-1#e@dBll9=ostE5Y3X$bUWJbj{X%2OJFZ2~DnFL$x| zW6W+y_J>ZkpmNMBTOW3%zAJ?K+tc^6R)2sunapko)VgB9sTkl`U=z~r9!_|coZJl! zj-9Ea%bX|WKhQuev9R$ZiT!>r97uO`Cz zbGZX1^3GhnYx^&qCP`cIN$r;`S)ZvCL!iA7j_#xq+2k!>x3yx_7wM^)RrcAg7AFlI69?oWKlyizVLRBu?p?PH4nl%YX))x|Rgl};=oQ2B1sr~%g->3hi zBR}bM?Wyx?LnHWuj+;Yk^21MRg9WFIOTa@UR%oF0;y9R_ZQc>|qq)as*Y+nX1GQ>?e!y^g%#${lqUhBZ6$JwIwb zBHzOX*RR{%bqPa)yWsG=UGT@bFm5%LmmuYc)i<@Et{nvmRq+u8 zLPIWWTmkKZZ=^kqRLPJ7_C?P`y_Cnxi=P&yvtfL}giNdMxt=(yKzwdz`;*q`8NBn| zagO2@W3GW9*s-okB4$uKyQ?YuZ4Xjwxle7DGy#vTBbl*4tXkNqb&A&JQNjw&uPHjNy*P-m}&y!vEzrSZ0Bn#)O9ElU7= z6mF%AyKVMAS!<4WwDfm=hcK>J{l(4taHjr%Fmn}}A!_JLaB@$Jm}(>EfqyMgEN-5^ z)!3!)G|Vb}f7wTofhi=DTD00`59{&?f=)$lcs$G2*#D2dj#i2vSY93yNo(fZa-@Bok=MR z`+@1^awN>YlB_c=UTi#GW7Jx6l%ij)zEFt%M+1O7jqDGGiBCmCP2L;FgI(m(2NrF~ zW1f0n%b!g4grpxU68{X^SKg7)$G$q#GX%9j;mG0L3=3!gmR;zU5-rzGBOU67>fBP^ zyDP=4&jcSFqW^1y zR{f&~=2QWfC8YweFrKHcsZAO1#zIqVK#cAE`M6==Kc2Xvon$RMCPUN9iD+zT)E%A z4HL0UuX8x}W#!wtCcOw_4l|W!4-)F{AaSX+Sdu zP*BlHsB_vD-gnq`zAgfcL_aqBWeyM#MtkhK+maCD4Z;=9^3 z-e-V|N6M|};BKpO#$AB93RFum%~*KqZ(>yU{&Sl_3Xi_W*)_&lkjlNoU=LGB#-4$( z38jl#{Z3LG9W`Q6nLMD>=iyz@k@?44k$Po57To5<(-vRh4BNiK@=-Dmt^-=jQ~McT z-z0#0Py{=6n9^Y({6BVfs}*w)*d6?YH?J{I+EPaWH}WaE5~yc5ZyFxRB7q65L(xL+ z$SY+;L5*G6@v4E%|9PTRLVG4@+-M-F+Q0ws-%B-Ztsr0 z-D*493%Pz?qKI0*-UWnF4RM`HLFrU`1p>lV$+6ZM&Y6-Vbb1MUt9SV*M;y#Y7h@HM zEy%i)rI5}&CZ*Y0FBI|RhLk9V&8(nG9Bi_u2K>}1umDwjjUWjM|o2)3#63-;nGFg zv{#aBgnypn>$)b`x2Bq>iB}xT&YcfG(?6+W9%E+x_=ER4usW3%T;AJ^_fYBoHvPwC z!Nu{ecB0C>53iAbNUOtk7NFzL9Y%e!9jIx^tL5Hrofq)j>Bj~op-#~j2_2k^HtL_P zTLTX+RQ6TQ{B(+xj$>{XH!FB9(y5&I4>h$+ZD5BP7V_dPB4RW34Ke^BaO-vDp+*4d zOu|F|T?k1v=Wr!HRiPCYD}$D-DNbjd`T>k)kws?E+MJPx@h^{2F5;%Bnk8D+CE$>$ zh^K+ur=@oN>m+jr++e=&3ZUpgNWIT0m2i)u{q~8*)*q}*Ca`f*30%#7&9uXjC%77l z`SVvb&p}J$x}d=ir(85;sYx1Du}Xe%z`(kHH7Vgx5xoYf_gffAsKO+Im>f&&V1K9N z6aob{7yiVw4f--)Hb1^q3;56T3tXthDcNaX8<1Lm5vjHkJ9H_op_O2fl<+kLA4XIK zRE37RU(MPrxL7MG;T;)!hS)#^NkP$|IUjEqi^&=+?2XIWrqfSDhst2I@!FH{YCF(z z=-m}%_UC2A)^L&5aRK@;PK7d}(Zs%0%ZWUtgY#c(asL#KR7yHx4F3oYXsy;t-DULZ zhbje!%p=LwqM6YT$Et4H=8Z&(i$bh2tTpS)(c7T&<8ZfDH7hD#K_1cE?g=hjxv*GL z1z(Q(WAtwXnbj*q78av$k%b$`#rg>k(Q=%aCz4bt8dZ7WF3BTGhFiU+!>Q#$v3Ufg zd@3O-KoU~`01rq(nj&mh0UK7{&SzDSR@3>;>qRXoMF0P8)~@A^xB#d(dZ!(})=Md2 z^cbr0L3L3i+0ywN`rp6TO0P5-v$`#NP$SZ^GFE9! zHQ3Me9mEwv?Cwv8T*y21DDlel@Xz$|-)*H$P&nLd=XypkhxfU+>-Mmq$=@c`&TqEQ z!BBYG`4)3gbG&;%cq;M7PDD0A-bRj2WhT~Z2YAz+0H=KnYOT>YMoL#&AwgsRg!oAx z%&WuH$FOpobtN3-B*{Z_>U>whca${I&z~t@%uNbAp`XhF-JJ?UTgvqq ztqLnYYEp^Mat@#I<1|4}v<|6X@zoiq>^;giU+};CK_m6Ej>|kP@OX&7$#kX0DLi)u z_r`-k1w~nfw4>C+OYb~lnks*JEzb18l;vAG|K}Ov4z4O1$YU6rHkb0!0T>sNod=t9 z$wEPs`vEdq=zHZ@Lo@UY3TzGRKPU1e<_hw&$I$eqfiz$k$NS5UF))Ty>ZSEYW@Ya7 z6IA*MQKHvH?89}mx%K4jH?k9@DX@d_gsI@*R^~;VgsZc^UKi9PFhS?aEpWo?lC_|} z8KRO7q*AQ@52%i#-`%^C5KC0VX2g%6SCpo-iLHSm@$P@gR86(La?qs(3l&8y-zCo8 z7Ek0^P0z0lD0znhtYjNJ*-pIY`zbG?GhJgC>X0s#v(pEdCDXAB5pQl5v!-h?1H5-S z0Ay?=AJw$9%;)dcxS{-a;Ja+{`(wXT6XU4udIW=xku<`){0&)gNEB>hp|#rGJM_ni-j9#s3Q&cw=XCX~Ez3i+(o) zWRE~cf&%ha=b@a6Tx>e&?kQ`$U2dRKpM}>Wj2a?%hxBUb?hbv9y;>1fW8&%z`dzXL z=v#32f$^Tg9=}I6foPY?ZC;;$9E&`{S`hOUFvtt`@@Q4}Y1WaUr=s)bnP6dQ(q%}tlomPeX$L2Q$qjNU<-A&Bnpg8ScJWD;P-(`Q;_8nxrQmKpw zMAhcew#Ih~21}OHMmA@4tGv{ohoAdD@~ijcZn`7M0nA%U_dsmw%5Jjf(&=>NnVH$e zp_2kO-CO3PYIICMAYt=&y-S3Q3zz*Pcuvs%rgmIVIJW*|ZA%VsXm9m?evx+{6 zsnx}#Cy%Tg4fp+jiNhUgs~kPT(}YHd!_i0EFwJOYA$5K+5P^H3xTGM$^xP^=W(~g} z>H%tGHzFcKE7OAh__HFJbGM20;eNtbGuPT>AtV`9EI1d3GY=YxGl4|a)8aG<;SoTC z>zG70F+`MBa<;Hjm*uYAKC95hcr=DQN=L~FGSSHty7)jRwwiw9SO}r3=)>y@ zRi^t0IRsfYaGa&BWhqi+v!EdW|2jV5Zaj=QAwG|b^+i>PfD_6YDsuR*G(EJmP5j>N z;ci-3B8%cKT7@mVSB`Sw#_bWmSjQnIL%UIxqpB9%)Sy>hOnGK?I>)f@8hi!7{~=L? zEmhEAuRHs-i$fOFj#R^PC=)#yO9t-mvI#>d^n|sjk zq*SSZM25xsEO7L-ugIlPhBK5pmf?i%IuElf?*>eQJ*%w(moP4M9PP?8<#n7i`)YZn z65tklDglIP3OgrT$g5SfYmhx%0R1cN$L&>|y1b@>Ks9H+2r)_=_Hw=(Rd5NBFmbWS zGrK571z<|Lg4=~}f3<|zKRD#USr?a>uGM4}r9*t)TtRUQnO~VO&v=#Hi}g|%D0B@U z5Bg27X%DA0ybp~4aN+2HM!D-iaB-W(Z^LN>^O!ZpIPFJAy`H!ho5KywHk-YPf)`xp z5?lw0&j%Ri*qz2FYXXHaGC+kM^age5M@C^A#TRpLC(g+17Hay<^76V9eXD9mGv+fj-r7VHVX()L@@D8cx>ne1C( ziG&@^JhZ{k^|Mo7{;Ax7io03nIUV)<?~gB+HYO;Ri#%v&9-GR|2WCfB%KJ-Bb74 z4JmrBm8r%OUOhfOxqRysJ$Qqd{>U}dzQ?48DPIjmjEW%u%Me=uz$xKlOF%?fdQr3W zx-+U*)mJSumi^UN2~6Ih>QZK%BRN}o-LoAivMcPp1q337!VY_$;xf5|2LGE0%%nas zKjH9sO(tdo4I+Q7u)+8Xp6@yfHK}3M*$*-yRR6BcX@}j7ZW8CIw2|*z;c8!t*0(~p zTNsM^Sd&_SqnuAcEpfy4jO(Yf7vgJqei)iHf#vL#xoNRbN(KM^P7d~JJyAhSQ zJ1;ca85lG|>-NTHT9I_jXle&))lL^L^Z81!!wrL^9wCy%cp>`yofhUW4as5lK{o7> z$qPnNcm)o7+Qhcp*d1R}5k!B@XP_sX%^jG)CIg$hsc*T$un`flvG#QWIjXayIcz|D zx%3sKQBI`|9F~?td+?&^M~jxJ*h+NhT*Qzcqu%1icv~KVf(_^Q#+q@;C@B(R#;F~7Qn0L)n5`y`b$^~#uNLA5cISY{Ww18(+o-!d`~ z(%r=?S6x`KE0o3EHV>c+*RGt*pg4ROKP}tTG6tP`_?{*njr|NDxUHllGN}$l7tq+k ztQXakPTz1#4hXYy2#X+-!9-|aJTXM7DoQZYXi*v{&``QB4f{3pFjV*>9swqYlqvEF zNYv%kcB*fiOmZ?Ta;@ZR1T4I#LhA)&Nzul+cH)OcRuhX7kyDv2<5G*#WIDI$e((KX zZ-z=KQb)J48eswk86TqdCN7^a zX3&(fSy?lJ3ql=Ec=5CLCJb`F>!Vg$c_D-O*Q3+sM+`&$%hd2qy14>5vqe!sIj=c6 zt0-C=L_N_ig2lxRXAoC?j2a2si(DuZ=qyqXZ+=kQc9wDeA>ujlC8m-`_Aee2s7Bz` z!ELuOqimmO2gC+EYkNYi%s?mqO!(!>p4cL!Y+gay!pR!r_ zPmCzGQZP$~Ljn>`B7&0fCzZq$!J%>Usht51)EZWD3~R#a+>H!#H_&8etI#Zpt$-x| ziq$5AjvbH|Xtq=?!BSch=Ufc+0p2)D`-sQf8U}9WE+a8+@Vi#`4jC&Om(Dr^KLC^2 z(N;gE!6dihjX@NK%sz8)!t;Pbvu3XK-EtSO}^Gtb=p^|za=u=v9A{`GQ#rsOXEi4RpI zx|`|qO?z}C#~_CDGHA_14vlhr5C%rtcC0wYGGlK(ZxNJkNqeDDOWCR_e9w;}ID=zK~# z?I_Zs2?Xe;{hpUt%rh(&sonIi3S+4rXBqHSma{=r`s-EHW>P}XxzSEKRM;A+NSjgq zB+ZZHvffX!u^H;$2!EbvXxMR#qzYQdSmmbju3BOnr`ZhFdCZxGHN?>mGq-AHB~=lG zA?iNXSnXOL5213ltkhOAo64(j@@A(B@USWT@zafI-Ftt6A&mZ^B$)jykpyv7g*^Lr}j27>1`>;p+o% zul5FH^-!MbtrRL!yrJ==o*wFd0boJrlk62SCO1~K#DUuEoL6-pycqnR8T6BcWM+bw zvdI^OKlX>*OWBjs*8ZIUy6ZK#FdCy9>w=OzGspsNr|y3hupk$gpR0oT>^zNKc;>b4 zvbrPQ(sSmpT9GU8xb^)P2S@}zeK;`a8318Gp1&4DC7NQOS{R&PrL~uq;YY56taV$z zPaQya2=%Lmk%d8$KQLWSgJ^Ze#_b_yd^EBae@M9Fg+#W+VWrnQ>22V6jP zFcV%oraN<$oe+8P)$~bj4$=m8U0nGaB2D*UEWTW=8c8ep_^u*b{Ck#U=q>gj7rSHP z7aaouw})^9Z97#}E2=DF8*fBT*K}-G2W&j_!EZ=158H{CFo-9Uvc056F?9{mQ|$as z#U<*9^UZHCbu`%#M$x)b(wkAl@-$|J4)HZ&GjNpgimk07JA!(%_V9K{Yaa4iZ z(7!ciF?QZ*YDw9bnk1q3R9;R(;FwVl0`OAr$U4PL!=!dW_Wjd1Nr3U#Sr3t!mA~|t z<+22=q%s#7*FYIeApWxc!Noe(lXeSLJ;CLXD=qr@K3Qa^kdDyX#Jf|rAkG#N`Z8c1 zi&YD9o54hip@%HnboG9hO_55}OI#=Q)a53Y5wY61l(ucj&B6UMW z#K5uj;@V8Nm)?m{T(G3Xtt=Kpa@bYZ#7M$`(O_vN%8sO0%&5M@8z+N9U5ntqhGBz# z*Zw_X6=oAavB=KIdn?2t{QBrF^o2zLJA{<^NC+vtR%QS>~P=HyP;X-jM-^26*+1LRogeL2j{VR=9?d zv&wl3P-u5f6c>46S-zH~L;{FQjb_KzF`G;5qU&R2j z^!Q`A3)y*g9WY+$%+u66;twkV6p}yl!p7t@>_JAl=0Q~y>qQJ)J*mBU1_SMxqy@Gz z$8VksjQ(w63M^%be2jJ`Dk_ct#=V;_+=NLYg&uGnZbyDZAo%qpeWnz5tZQ!)OZNIo z^9d+ZEHJF(_&k=c3}x#oh%a*81Wt3EZWiMfNRwU{+cLLTH^fl7Bw$-43rzy_Y;RY!-VK#{tQmc~xAcp*;rCusjv*2M?J_K6BMc;2_hb01G=Ij8i9BZ6NT>_ji! zzOIov($J<+6a5pPY7q*$-+4Y8!nI5}_XGBL$>;B;icUPnRU?$zNVR_{VlF77STw*zWN{X_d|9@bj7Gq{5kEwfR~ zU!5jKuZ}D0O<_)aV7+2}K0M+@jN!5|WT_o{zLLm2Ura9n1T-(yM;r!3{c`_LjL+la z_0B(Q`~H6SH`gUBM(j2&G!DE&15nW**6Osw;M?Ka8c?~rKF7vtp=ma2|w+_hDaRo>@14*$9 z^BWcwP-qC`I7vCM$;64+xi5MCN6F|FR4CtmzxIq6-M~&kh=f}bu*#6aMj}Cyw+NKn zIXLMfEQDaqBSxh{>rnS}5>lQ>DEnrIlYueg!qqyqq*g#x5^t>jPw5$0K6S-7{PbI{ z@Li4~Ltumn;Dm|>n@}A|=6#+31>;BQ%R8Zo} z-WSC*w0%!fe*Q@ORhf1iKIq0RYe4JKUgX=w-6qLaV=$W*Mk>G8070tdR3rIhQzpyl zQ2v9c^8=>G%V<)VRQJhOLkTWqL7j!T?E7BEzY3hD?gO3C$lPtovibJ^f5Y|J@B5v8 z=9b-qZttf#4(gC)YP2~YL$99)YvQTe&%cg`nYTWFH2DwD{iY)N?0e3*0l)zmG$9tI zG9gd^00x;n+0vw#lmn}xL|;0i{5)u0+PE;MF4l8)XR{gWu)P;*1M{R z>~#os|G(#23sn41w|(SnUcQM=J2l-8cHrw*(RNI3pynvcAImIk|13KfFt{@ zykclEy6RtP61|s~BdXyAR^iE4hY(Ff@KbTeoX|w0cY_e*)SS6p!<2wH000WCL7GE6 zA(JVEe*leP;SUp?%?0*;2#2XVNxu>g@Yxzx(L&GsUrFy^VOf(&D7OW36}(r@*k2>d zho6uDFl}UcyQ1xSqV zMRH2)-5bN??fPAlFnVBhRVZm;&N!)JV@P0bl*9NNs`2VIMLhrB@m=yR_BWLSzLWRB z&eL5tC?=f}Z36vJ9xs72YweH^Oqe8%ZcZftx=9C%mB7DVVr$chI!Rx6km?QGp!(z< zgg?>QD>H|8sPg^BvQi6y>ngU-lNeoJNbp^xWYxCjXn9q;)G=8(#w93}K>}R4vGnuQz_L3p@5}D$&1OmmBgLu^ z7>1>EOoDPwrU|Z+Yc$|C_>Qy(_pDy%Xy9vM9gi2`o=&MNe-qCeqnBX~nk*LV(G42I;y@J_b@7g5^C3$Z-n)Hf_+FP*M86mUPLBxzOqeGNUjWWDOeU`%m`bNoy*Nrps{w~Xr>q-TMkk#n^ROo8FZXH?_D4{#ixzQaW zs`8V$znpL*Uf`WypEagX1Lq@D$H(<^*@K{tC=4wpqcO=zTdltz5V$P&85_@15bg4z zto&=bOf5L1rOytG|*91jit+b;Za_rSM@o{Itj$nZwpMAM^W z5EkiN0pLj{t797TWmen-sFMCXGohaG7?p_qu37#*|B-A_k9wkoIwb#E(h;L>w(p96 z^$a$tG)3oCcuS^g1Bd-rFqC#R1*Hl}1>rxF$Hb_#4ZzdsM=fPTlF3#?LB(0ag+6al zfHCF<4HU)3lM^Bf)@sXxOQt7TXuIsbv~&pEj3L!pRxDt|o)LzW>Thb+DhAbhGKC-% zMp8|`+X+S3MY!h;Kpn`;+$=MMa^7=xf{A^_1)(3v-(AM>cf$sAfaTv%;W3rd976Hq!NmxPLWR3Y>j;kS2`o!t=+ zb!z|Zi4@mb>vl#5;ml8!O|Vg`|7&zREv3W0uB+^^d)6DH5pgY7K8%AP`6h$d$_7&`X}4a165-;3vhl z*NGBFsqGi1Gz^M_t4rkClqs0aXNQ#RES@oS_o137m%kH?7+JN;31jz1GRs8gJ9ZUG z(B)ViR>}%HV9lv8X$Rx!UmBFJmg>W~k_o79G(TaOGe{n*Q28;H);BFXw#QEm4V^b+^}{nk-w)bz7@_oTlnt`K!1c53qO? zSTW~d*sa^+wESN1yAW|2!nttOc+=i!g&j1qX@ZsvSO(`AqUsHZ2`VpMF*j=5kn|lcj^SBmoSYi>cgi1Jby$e z$&3?hp*dT2NrC!?SB+oYlyO*Gg{xl%m}kj!CG%F7k_2DIJfKyg)!J==7DM5$ui8|4X$DyOWIDO@Pf}v=6u3n)q{18t0f@S`6Z~kR3ovjr!=<_03MK zi*uoq+T)Om+Z_qe=p_t$UF`)(+UsuZq+}C>o!Q=MAAVK~E1w@K;=CrzeT@)GtruEn z4z=lbmh<+^G@%bhg?dXrllMzK@TjADRcykgay?Ye#L3U^o9D+w)=W`S>41SbCS z<059t@hjG+-;OJO-T)+-PV6xJQ5EsJaWjTuL-y(Lo56a9hV~q^x_EaleQ`H%PD?W* zqDxyju(wOXUNfkc76BDZWESOM5+7tY8mooCjl_XIjd&@DF1JiRk;=%!?bC^E0*zO< z!j0r>I4R@glm9)!q@WguWrJCM+{%SAFVWVK-xwP$zZpUT04(hOh6kZ>i zdjpLz7!i?JX5%RBaqs?CG&B!Hg>YZZOAj^)9AD)%&l`P=d&}azOkZRXWwh!t9TEo6|IAK z*$0uQtLt1ct8fG<_F4Wu9X=(^$Za|xVU9xrJM?5+wyl>rw}&(Xsr>>f&s&&4qmYbBOe%MMA*?pK9jrZZ9z_c+ipgU7s}Ekqfb?u2 z%&CwbgL0gaQgb_f_5VOAwcztKdR#y0biRne|CfKJY-znP+Q8TdmltoYZE0W<#wM97sSpJRx;Op*vMDOWgj>uq&rEA_a;eV)XnRFF z+&>;0rabJ(07|}Xk~8jVL|j(?=0cz#Sajgl@ozcYphf{L`=!LVa%fUO zUL8+ezvQ7Arl&Hm0iIAnphofN$b&M#0T?tP7N$ZtFE0QAcwVkLU8-MwG{Y=#0fxW; za$YJVTCf60DVYccQZTY0RSt=~=!%9Y6j5cppLjwN6%6R{1I%P;Xc88x!`p|_D-BBg zMS(Pe%!t^)$Zh+pFoeRC7{n!&UFf=ah@KHFS2Dk!ow9E{{i>-|2hA8T_GF0@BtV!Ar`134ITgh z0DCo8=OL}{pscPW$TfKme2l1)%0e(8Hqhx;UScC&hCaOF^8jI=6Dr$iM3_((0*(l~ zEu}K#RA(@v0tNvj2yl{$luG~Zta?zl)RTTF|7zSh{A+xnXnQ{bFW*M z=((?n?E(_iD?*6fL=TT_sm5hJF;7XM@ng(dIfY(dqq`4pLThP&FR;UEKh#buN#Wsy zP!oT-MLxCQ|~xx%HKxEM+T0_*5;3B>;O4oh#{IbS^G&d28M9mKfg5EH z75)h-Y}jY71+M|ytr%Fdg4bLz-NCP8?YR_j3MKb z1kOk|7BCbtFxmz3XS4kHTGCMQ!VVoW_`TX~A;8yYwfYs4AYhBdA*O9CSnE7lmJ2BXW#BbkaEL&5#I;t30U(7jAw$iF? z8(|YN5Lxsn3y*fHxG}u?iN=$e1d&ki|8bIw!`2KS#V*lY4T4`BdA6LhmR)XtLOiE` zl{Rw22RveLm&p);pd#JnL1PfU9_>vvf4>~m>-fcmKPq5tYyGky!0dJ+QR zx5JHhg~@{Kw4X7Pe_*8;fGXEAv*fpOy!_s7Mpo8+C_p*^&DINNj0xfZ><2YLRO0aZ zMgpvv&S_adWD9XV+!;DeJoqPxddFDK=S|Vb%KhC-4#pAeA>%?_;>z!9*@$RA1;182 z;jguC&*eKPHmN~xWsW+smd@9&GS+EzYe*fv(ZANn5AO6V|H2HNRF7iWJYM8Ty%zv^ zZr-X>_f{Bs#rMAntnlo^&P(6Xc55;|bx9+2w1t`mpY%vr(*H{UTaDCWw(x6`W?0zn;w? z7A;IwIKjr5zN(0Av_=q+);+E=!Z78*4-&WbJ7V`xuj%qZlpnh^1`FRyrMq0&&5sg9A+-dn}UR2 zwEu0x0GC`RG$Dg4W~uoJ?-lffeK8Jljzu-EefsDf6-WTF@CF^}Bla{e5`$DBW-dbp zF@zA?k)>DbDMT{J+J}Oe0>8N;lh*qHL{gc;;X}HyOFqT2F#P8%fjQ_@^R9;A=3sot zDuq*$iRYxRhZje|h#m|r`n;+<1yCI47C7`R9F!>D&4?*O+93FmT1|k}cg&z5{Blw(8(+hKLSRnw99R8rh4R$bbCppUa~z zTJlS|pyP+ov7s0Vdp>u#w8&SQBQI@T@l_;diX**6sORAd-J6WFCmJteIp~%5XRW3` z#a3Our=B6Jun}910)oL>3pogP^oFxdiXo%@Jg~BDF?T}Cvja-7?gqI8LG%r~+Iz5M zkp(@go#9)DYP!wme=GZNEv-B!Nz17D3N+R{CvN`qUa2-$km~(05{DSx{0@D^xC{QF zC!gIuG#!p$ALC+YeVNxr7$iwm!{K|B#|7dI_H-;;b3Vx>i zDq6bQ0-?rNGLc#f1P!yUQ58W#VR>Cz$qys9*xteA z1o!UVy9blK?#b{lcV(K>Plx_x+|X>vU}WAIYG#+7x8?R-Bq0+Z@lN=cu}- z;3pgGf>us+7GsX@u@y|JAE+P8=kGB5-PO;ZZ_|&wNZ{ekGWk7i_3S8>cBAH19hx{>6A} zYplzNcEE{-!^UtB5_+JZAU|anmtiUn4!M9KlMSSDuc;AfL?^KS54ObcqO_gmu(=2V zm(us8>pPh3%s*_bNV}24PQ_NExiX(auOAa@P?S6y7}d<0f<)&*hb)J-E}zx`JEr5) z+#gaZMz-W?M9MvpNufm)poqMs09CHT9 zT#JABg-InwDS;M4Q?DFR!D!5l`8xp|23(JMYom}mbZSn}mGIJc|GQlpvvaubTiP!a zq{a^(XO~H3`Gn_n8wV!5db_zn{_Ihv}f0G zK(h#wFdUSqb3jkdBN*FRbZd6|`_i$kyCGF9<;4u&`wX}oiSyXSM^^Op^N+gxD{in4 zXu)zH2(oM7A1qKQ52ui|Ui9*$``~0r8}C3fOf#3p7*6EjQNL>BL&1?5E~4sfs3tBS zQ~_$ z=cNO|DIgLcJ?NYjN7&U|!Z-Md2^hU$^^AMB4*TMyY$#hh;W+#WQD^BOe%rtyV`fZE*G`8IXt{ zc0^ZMey=;hL}5p%Uc3dLG)|siF06pPRh7bnD6w@a7=%ET0`Kc4^W-u;kK~yg>=qh6 zZggolmV}j8hCwIc7rKnZO~RYp z^R#594BSt5Kd%{BW*4aS?R@9@QYz5%xGljvIuBFvlnXOmQ8~INNHB@Px9<2PEO|Rk zaWNwn?sqE~6-#t&82_1sa}p3g6X_!g=+!2vsHz!~fS$jl;D{ywb*ai?3i$+xZw<3R zhk-*ap?jd5C8R&_n^h0bqqHp>Tu-GPqYq+FIE0<(u5P>sPDVWajsZ7k4LR1y%t|d_ z>2tl2eyNGe$|aUc(i4yXk5!FC($|L`9E$nEO_8yos#VZgA?ph`5%_Ey`ALiHl&lZA zI4Ndbs2;U09f*nyV1?L>HwMxqDl)FZRU0%4=Y)aJpF- z)DZ}4Ci!qIQ@vx0oD>b{Zn(MB%qlJQiF#ZYs&@BkuM8P1U|MqQ2)3B+K4pcKTR(vV zn`#cAB(};iOz#Pmy#2Ps<3=zvB$eCid(U4~jWx1u#67kMxZnFM!1XM{@M-~IXgOaB zrkZGH8Wu+XwHdF?LZc9IcD@LeO`q1Hq5ii0eh(5q!qcWkR~TY!*|;q-`}+Jix8DLK z750=!no->i_Ujc2NYjqfS9@5kX=CW&547Q{$J;Atp`uE5<;H69U><`HTF{|BTxpqI z)ZWUuOO50fBNkSs2@Ai9&GYmk2G+*hBSRuFtKkvV4A(F9I((cQo=Vzvq!&)yKM$nH z+qBGtu93@96nz|k2nOF*pOdXuDl~F)DrY2k3dUbP7YRFvLkwm&Wo;*ndGkewRo=&k zBusf7M;g2=#SF|g`MjbfpE{W53ytA6->78J4DG{mN%f@gv(78nRy7b-(0h-R9CsCjQ}5S%+hskJx89Bo9fpAd{ST$9E~W3*x|U@88;n1oN;Z2s(KD#pz@LT z^H{GfS655?o~hf_#H&&>SVokvFCAb_S!8b#wySJYWcIi@sCx^<1%YDb|gVK(PUdCBF!ZsRuH?+#>B{3Mf^YHl?X14fzl2*I9ZMVE@c z#J-!SQecP+j#}CHmu7KX7LsUOs6}ERX5k%EJT@RsGhv@ZF(WGpe`vlA;v2Xx!l&6z z#C#BCGZbr0QucEiqM@6Cbq48rU64i9VSOnOFUABwv=5<*Ip}>`PGL$;Vmtq_!w;a3 zF%)C%8`$Q26{C_W38XR%x*5Ba>9g2yV--Eq2SA9rz6A-rB{;5wv7iqjw`u7vHER>M ze>bXi-a|Kw@eZh599R=)H;U`+UlQeN-W1Tm>aCM&Bcj9O>jV zlzQod;`H^?Ni4m9ED=<(d7(N5$!!$xpW9i#HP&l;C-uye8A~K>*@IBx4n%x8Z%mfK zxJPixqgB(RO%kyf;k3CJ;?mZh=8c^voWe@YarhOh|3dJZ(Hvm!Rj}I0aqH zNX6LePUx+@5U9Dgo`5bCC@VuklJj9OIosHCH}{q4f``?WS&f!gN2JQ}wUSyE*)nCF zWhg}GIfb>rtJoyL97_x{|I0o((B2f_rS+y>o9PU>843Dhtir|4J#*7gfoLN>M5Eev z)P@InHw_@CJIB`%x<|NB2SNmeRG?p^-y4s_B~p{TmBk^2saF9W^>U(NSWp}D$dUCS zFtKblRBJeggWBBWMBn5bv6v zlTO2e&!Z7kzK^bZEMUh(w=D8;>^K=M61`220NBw;xCI)Z(-qC#3V_j1`SjG1AKW||l*p)vF zOcv0WJE_9X-KNN}~qloDD zXfczW=A6KX=U#w$32oIzPZ2Ysg_?bTgg(uQ+mJHMwzeyCM?B67m%uRXJMM`@1n}KK zx6pNPRg}8>-t7e2;FR1v$w2LTEtPA4M$rdjDfE_l#{?aFnGCR?e(iHsGy+?g54w_< zOnN~M*qnkcBb7W+Bh_F8*f8TzuI5%0}tOSW`*Q)HJr$`_-{vS=l-P(hcvaq3#cY!gK(~mNy z_pM{}nZ>xyMj8$X>m&3NB^1PVr$LC>m`uV_X<|>Tvwh)X$8u6qu2_>K=JYc9j;5S+ zrVw%3__botwo0BKOkFkrwcFcjkHNYv(>K0;6*Ky?rfpR+)B{ zI9-TN_>K=QD6qZ@2fhx!0Uit;Spi1j$D6`uNqHzBOTlXc z=;oqh%%T9Q3btyy#_S&ur+WlDtBX1I;KzZHV-K~{vQTg?S#Xa-_s#9x=IeuQun*WB zX^j{dMCSY>-VgI`edu;19jb#BYcr0$->oe^m`bT-a)q6CJkxu(^OSFFx29v)L%si> zVh@w3w7L@t&{J;fy#W8Xd2O-Z*aq=*l1K+y>GyJn< zJ9j60sYzUI3u&#*2Bsv25Ri z$8C%Z*eq#UMddDzv$I#3F7pLDpBr(kEvib0VV@p8hIv<~>wfammkh0li75-nlDiuf zFU?|Y`_fG${hZiND!Uf1C_{T{eY^It-X1tMf(yQiN+bNKPn^au1*} z!CQ7=A_0s#T&wv*;pelGNQL?D{TZcp0IL`epE9|%TMNML&V-FC_aysk4EEanxzjb5 zF3xJg#b_OU$K%Xt%BHks*jxdsYbR~4SJv?v-5*!c(ORVQxVSk#&x#H=G7m;)Hu815 zS=K`UGuSC=!ka;GcKz_VLAsA32Pt;NoL4`eDc<-apG*~@nbUqx9z_3^F4faiP5_3$ zF0vb7ptaIA8KZ~$b_l@xr>z5$E`Iq#p&~vASfQ%qH{$6EX;aO!*3O;s(2?JddOP9N zhUGM3-)8f;k%Qix$AT@)v}0gopF^bWi9iBao%@i8$)hC*^mr4)oKJgW# zzgbaiL=c7_hfAzG#A_f?o6bC=nxMa2HerEc>;v48giIyZYan#?dfd&dd1HsGZ5dvz z=$zXBU=NNc&wuZxSgzr$+dT{Z)3+<`%;c)snA!m?iw{tp^{L3MF3}%-?-bGzjd{{ z?*4-}8YXVT-Ymgg3A@?4p9=3tz@xMBJa(S3X?jxHtoWkP3Rv-DLE)FkocHy9QSyE> zmLu!~AfX48Umx8ueQ<^aW*|GEs3Y+F`H>l3!oneIEI&K%eR(z7XI{353^XIeK}s3V zGhMW(Ap4FUk+tc)7Z7+bA=Hj=-_Frv^uo$C+?DR!x)qH_;LMIaoms%e%%H6%2@}c! zM-o@K`M;4q2r&oje9o#RII{;m+~|isEHtZIkj}YG5abVNYIC%ZKkf0Ez`AGug4X;( zMl!J|*TL7W$mAsxKHuP;K+XebuZ({#H&pSUzO`x`Ec5{cXFhB)uWaRzpQ=b{$xG8$ z&~zu7Y1tZ6UJ9Ftzh(jG%BHrz*rQ05u|x8EkZx^wrB}u_0j|OhaYdSY6P>peGlphHB zd!$3JBZ`G1{CW0j_ z!bQs(WK9%Sts=HRM8FH=_6$Od#_+9 zO$wHu0x7{z))X1|I<`SqkOAXXHe^@jmtHg^GjY|KMUC+Nz2DmKLgJ9)j7kk!$>|u? zJ{WeNoE7k8I#oP)7xmP~`VNl2tKVv(C{}LqH4LDaCJdCyV1z`Vg7pjP8ti|=@6*sU zeNTqmI~MsOf1Q*D+u`{J%n_QHa=b|KsPsY&bjg3<)wZ_izQ~JH|C-0?+=j7^HqG22 zPcMWk%vbj(Pq2SJVz*rA#8jhWjtQK#vuV=c4E)o!B#Az#=dc$6H>Aj)e^QhGK>P$6 zKOC&gDoUi%#lmC}7ZMi*YJfCvZ@fj)f0)3yG>M8*1Ke^NcLwNFS7F*CxfRBoH0 zfG{ZxPT{nd0;8KPwDu`MIq(NrUqg`hO~!E*NYV&|C}^Ke5*nRbLPm@m=z3N`MZ;fo zBC%~f^dEtA<9_qZR48Xj9Vqqfnf)s3!gR0L97$-tG>tASMnzM(haKT(7VsS_?Ex>v zBq}CxF1&3H?U!O+`cO}<41cg|lAb%P#F4gW^H+sT%Hy$Mj!o&-1SPCVmEvwD(~{7q zCafjbXHSkxWco$=5m=m;^UpqJM?bzJ+1x2;DT8s z6!K!DWl?CkLn>=l9;rNqnaSe|pX-;bvd1MJB4Bj#dmOt=$_H{<4tNlSbVW%US0l$B z2_|imFjV%Qx^dV7(czhG3r9bUQhVM(EZPJdDeLPIx+qyp9sSF)+7s3AxlCGfDhELu?rP8OVC7$$$~*vHZqBgc)Br<%*;Km+eY)>@p}N; zK4w^U99=yv14U(9pR!SO?Gm@nc=O7!c~~aj=cHv*m>{*FA1=GV?2qcQ%of?=30F zI%L2^t_Zp9mHUZq_6oOJgfuR~=mK9x(A9$jri@Y8KF&0)Dy|GWK-P6*If}h7I%_m= zv{7q!!?bYEU6&`XD{;k^`5;{Oqf@h}<3qHusYqk`u|wd3&1_Kqu4E}6L z;29qnxoLLG@8NK|6VfrY6236eyDPL&st4fN!gnp3Eh1>&%JPy;=sUoa`kv$HPN>+y z8IRQH9a}XVa_mtK^~I+?U_eCRF|JcSLaL}~YATndXT-Ql=01yfnKk1|yct{>2zOm{ zDWOnP{<8ckwn5)2@Mv-$si-N*2~+JJFn0ObwC4+kI^TYj4x4t>S%#4zbvVeTzlQye z24QrsM-HJk6>3ME`f%af^ZU27`!>bnM@Ya7-Q{sc8MGHTgc?R?UO-#XYF*r*8v7u48g7!bw%0(tRtdq%9~N zH4VN<`6-H7+zpyX);sQNS`7li^_shGf&0y^#0eSl{@f_qL#)vfFMj7isR<1`*8wPR{U*mfg_^5_S#?Ri3tEgXrejzA ziKzuGAk=Tr2*NlZ8Wqv{_EVB8(PW+IS6tN~ZX#w>xYI6(R1Rf0E|5}mL23ATPOhSZ z?==wBlT$q&N^^;P;udv3Ow?%ep>x^3P&~Oc;xR+qZ~?J!f3f6mXwi84|&A$ezud8wr0NJ^{D3de|e*ohpE3_9Be|BI6uoPj>k)>Y{ z1c1XfAS}S`NI|zSl`bX1dc$AL;%q=R8J0wz{Ta3?1kTM~noikqI{8Y{s%hxMuP!}y2&B0unet{2t9Py(%0 zx}!VEVi5D$Y%BwFSYkd~@Rm;A80?fjbjT)H^qTEV|$y&5CDk+8Otu;v_r zD{C`bxFMtmyrp&xE%PB_BiL_HBO=lsc{Td~h14Q|)5AxUmHAA@_%(MaM$wd92|iXW zAA_T$(eG@kZO@R7Q3f-9!$AQUG$9tK8x0Vs051Sal+|BTQ%b6nd)4Co~j@(z_Li_4*30yf8Wke}U z6s>s}VsstUN(*%KA9l!qi4c&7m97T;U*G%{EZxrbI4#ls#LvnF8%fE8mqpo=)TQ{> z=CpvF5O2rs`A&N$lrIJJO}egdW7;#==k7T}o3BH3yKbCawHB#Bj*X`%Z06-Kz^XmwU zU{0zK9Gt`@e2Y7vS0`b7_qo@>xPJ&Xm<-FPJidK?xDk&fwHN`EV{EgsuM1KsaGe9? z4Oh5N?H@Q+_C&425Z7&VsEf+mI*8)t!>Xti&a%q>b(m{>;FKKWksQM_8siO5El`&W z6q?1tb!a)31OPYy00-Vdo`gjaJa^thX%KWVA&zoXY8w`<8JOjXN3RxuzB*wYhHxzf zYHnwcygze$DE$DxQh1%ETy+a$*m~9W3x(5}H*-&w$nS2)JN$|VgA2C72tOHoU`xyP zS=OIVI4suMaHtJ%UmR`{S!$yC1YqEL#OUBCc(Uus--~=gQ;?78N(6(Z+zEeyLDFfM0 zoSBZlJNo_uhrvXch|HlCEal*y|JfaVanYSoAELm%KZ#AQ)fZ{I@YAD>);V;V(B%+Q z`Lx8_&BzjK;)>@$PU9do4P~FxaD*9#gJ=0NnQ+crWEp})l5^COK8(V`!K|QF$;e+k z0R=l|*f9VgRZ3v^CA5)%!+cU>k?QBO^a;p7-ynIsS>*kvHFfQ1Xv6Apt_HFYQo?0E zv>KFN46d|3WwJp!B0P+u)XK>qwJXm@vD9_;L~&z>0A6Ir=Q4RR!DLBBa9wy8DW%Dg z{rcOg?5oByT^$ZdD0#Y?ut)Zd^dul%cdI;7oqU7noiEl*{MU=ecU&-yZ9K;z6t;cq zlC?>9tR?&O)ZMSl?Rfx?>8ICvG?L1!pN^UIHuQV2qM3LB2$d?WAefzWjn9ui?-&qp37ot8F=~3VyN)@ut0D$0aSrjhn}0- znT!8Fa(n<|;TMk8ksvOSx%b$0HKa;);b1|08lhS+%vfW~`oa(x)+cx2u_o_c1IZ$! z(FQFHvd69GJePO_w)HE1ur)({jV;Jha7xI7<+(451- z0lS@yHT6;Igt8T(-t>~a#X%ZZF&79&Nwo}JKAmzMP`4$+Va%Gp?Nobxu{2_y{7y`Z zHjB*pv{KGtWHd_r{=%en!WG`B<>a{!)dj2h*hm@`-^$Dw9M`bMi=2Q~Ua*$hyLjFS zBsVMAiG`JuC3h@=ZqB_pcMR=sNzavOyM-&Q8lqC-EIb2&DaSMl;J#|z2fJu^z{BXR z)n@UVlKkZRjZE7R6cfqf#MgM+U-=7?Ac#lZb{QrGBI$bnKA6? zY)11-G?|2j(07=&pBmdptIY;iX8w&u(q8{egm2Cm2crWrd&&y^$YwO==lH9Ks|=F$ z#jnJFI#UqeKTrW;yY9B*t_aosJ~|MOcy+(w8#wYa>jSx>-!;anXsh{-14$a5A?mnx73dgjV_R1j_n-iUE`&7mu=%T2;4 z7{VFUzAEJknz{{-N|?H$@MpULVNTE?<;`(U0%cTK+>^(JVQ zpCxs_>(h&yXly+y%T65C(LJQvd46X)mce~c;?*#Lu1dKwcJKNwT!1ph$s%M8|WbfG^UNA5=dYFro4Y(?Mf0v#R@_q1IP+E-2grvZ|Zx zf?TQ7CW6OmQArc-d|V>GqLwIaOo3+}-5(@I;FGHaa)qbKs*#Drz;Jx!tHu~IhaJ&E zH!>B6B3=kiONDh*uoj=^!ZlQkkE5tUeor#jZ#_jDa>dTKe{;N*eUvj22xDZ|nA7*; z*>IGa$IslZK6yx)&@gLs*ocCJ!FZSPHtC>(ti*I{!WAmZ;4FQ_sObI>yl& z+yg~cHvoUai$3;{I94no;|7djaWL?Yw8yPDvMo^5%n~l04x)ix*aZbkTsx)aguwjh zRjWbAi7lKgpkU3lVF(>U`d^^}d$vmGa=p?dN}vgnD1n5mRHZ20f*>jcXOYVmku^N& zYVkRO2*A+ucJ^xgVlU!fMu4B%RiH=ECq$oXz`8`-Ho1vWSJ>5FIf7uF1lL`0athh5PtNv=$q}5>D&n+v?bSTNUGTOIodRTr z1pyc|85XD;2||l9fCQieguAcQ4iLC=irUrW9Fdmohq^ zCqtzMK+u>`(g*?;1XQpOT218Hi&DOP?g>-BW&b`ta;j$)py$>IJsl$ckPmKg4$@wRvo3zh%$C3Tw zR#SfaljD~Z@Y#Y&zW7(Jx0`)thq>49{U~>4?C0P6JRwaa{kjcAea~O^>F=r>0T?tG z_P84r8~^|SYmHo&H#LwGygTf(TSirJYXPkQRzRu0_&{T!%{Q}7j1C}UDUc!<@Xks0 zJw8%or%#rIR4V*d*g#@6yI76DuqTCUqSOH-M2A!0U%$f4;TI0B!MzIlZ^E5TTQ$;< zO#39iaMRyaAa3Z&`cF&50{K&X`VCphWD9q))K!B0)!+yw2cg4fFlUovPMbXI2ME@Y z1bf=i0E_f3?8Et+VOB?~s6~ou;YS-?>LVyrr9~lY6%Q&20xu?ND-r=Qj}L+HxYPhO z>ASn|000SO0iLC5M}O=B{f7&b#ip{K(L60r^H9iS%VCsh5uzSjF5!yCNr}vfL%@RP zca46_CJP!0eRoO5ago0p$VN%`$T!K9DzHL;wdp6sA%rZ@0FfZMN)^f1xG=}v&M!J+Yx-zAg_tE;f^GZ zinc58snc6>#;^VThvl*yK2+zG>6|@P0>l^ysQ=1s1l=>ufm;Rj8&YkH657aE&WVqdWL9Idm&EvUL-TdgxXs$aNL#l7 zqsGHqFzCOvj0shDFRskt<|Oo4=W;_timlR!$cwe%nfFh?@mmyoUC&zB;UdWFC>URA zIq|^_D0bk=Qh8e)nBNl7W=i;-jZ|@f88X&zeC5$wmZ6n!F=L3#W(F`|Iw0un+FoK8 zm%`knOc&N0dMq;FC&ec_`Imi#jC!ISr$DPw+j}sTe#buEck^_U*}`7Tu)dZJgZ~Fv@L8p9n_f-xCC(s(mGDLu)3KMiU4@J;BTq`e z_+_f0-skh!lL_hHHG^TMP$lG>q!E%c`0PjbOyh0#PaV|g^M>41ljrZpUP!l}LHvDs zEq|@N<1Mu*n5NZNOQK5Z%PpYlq;b&HK%V`^qMD$$0!~EP^(=1cy7hJC*FsvQ8^ed4 z+*Ih8RN_o1%CJ;n=U1 zXH$^JUzOcm1A+fy#~uqL>o8y&3=LR1{Kir);G% zX8NqbFW5wAQYh}XA}JtO!kUf%?G|Z_!76!x1ti_iu0&v2w(d8s3g{rXBSOo^x8+kO zI|}Ay{RX0{36FCPBA}sPTva&X;qW`58~K@cUllg;d78_R8e#~~F-o2+yfsQvo$&hB z#>bs5m7*~#p&B%I2i71Z>hV5b_r3*_)$ed?WKTJd0aXjtl|du-fV|Vw&)4LpVd0nw zT$1paBbl*?|;P*;mlFDsy+3S0T&(ayWLh~%M^)8e(YL6x$b8~% z&=Oic^EG0P>B9L%cAbl4RGO#GhL^XQ2VgCfu*K|V#UQrcd_x%z3_7xDomZZG{Ky2o z7+z$wC>?egcF>CbNv2%B)8jgK1v27Db55 zc+E~r`hros>*^Dm?7;?{-~Dy!5OU-uy3oMXAsQif zPfLXPnQ5>(`tSz@2pH8n)eb~~?9_A4{gOb;YB&Er7*3k-)O(DxRyAD?%L`zk3I}El zxNgAH6Cw4x>EKM>4#YX1TydCxF=zwhu0ln}{(}v4TFH|e!xVEned6U2V`e>k`s)|W zd%gI-eSZQwA0Ao6sP(dK!1gMGz_Xe@dpz~Q27DiV8NlcrndQQ{2`oP)#T#uHLCz%* zI0Ovd@r?!hZI#yq-U15()l>YDTzcqgkq$-eisc8Ak@3*%^|@6WN#NrsuP_Pvg5{#Y zMFRr7T04s0_nCH}Sx*CWJRC@WO_ADNY7r8fnw1kzU2)(Vj$c8CJT-Z0w6J?Dxzxsg z&cjc$5VYQ$##aQ_YLI>|FbQh-SYItF@SgdmrKa8C-JDm>dXhbTdvT{(glk3bl?EQ7 zX(P`$Y@2e4H*5#)v5`43k&@hu0yz&jyvbsV`K*>5ZCqr5M6+|=X)}QD4k$8u@P^g< z(rwbd}bO^oYeDk4=RG6GBnm2{0MU|6%8I%hO2Z%L8-&8H~<3_Sf4@;dR_IGj3+<`UOS zT~e=}V|e;!k~TzU!k>Gu_aSGtAOu9>VMrPwOovvF;c&v{lqPXu3$*& z(a2V@FiHpui%-d0lFFS_920r0NNzN70mUChazTl~G@{KpvP5)Ho>CbFzdBH&jvWOP zKz(?-W>iGqGP*<7`9pATzB13h<1uAG#IaM3x%1{KdgohHcOa-le8VU7s!UpEi|9To zh2Ej~7vSR&LBW&--0Fi<5#ic;HDPOcshxmLx2`l3h4{;0ej5*8f$=_$Ew%z8PgX?X zrYhe%=2&K3xQ?6NM9)|J{NoB>dk`>=6D~5FwyADDA`obi^j94Q^_Palq-KoQ71ZNu zH-|lRX*B+LXzwJnat_;Yw)=lsAyh7yi5lDBj^>MqL9f<1&dZMRu!qCDt!aEvHbelS z-pN-+s^b4_Te@g8cS}7SK*Z5qLBDP>;zBPPPRw(4_U4}3asF#vp=5_jmvJ=yq2b~e zxWcnP9S+PBoKO1z6;rW~-ORvQ0T?ux_U0NTLWMB^0013UooYodoBl!WD(Sw>Q%m2K zj==!e)wH^{H5tTxbAcI4m4`I>XQ!MJMD)~}YJ{bsfEznR`WKL+e#oRL#6q1M5EyCo z?8{2CcxNP=smCxg7r5^)zd;4L6iS~#g65Kg^9Qk{s`o7OIr~U1%#}uS8$S^8LmdhE zu&HCIT(ZCH{fdx9?o2@ddx)YNPmlB#<2-;)bv{)#IpGk5y8;xWDlqqfYXx2j+M0aW z4F7!TZUud};)gPPR`f^mq_Y1v$B&3Dic8^}fB_gZp%$hU1%`?e~&pKwhuYIjS(tn;` z@av}g%ldyh;r}PSu1~Y<@aVS_+5D+{U$Ng9N+`^S001l6L7J*bs6l9%ObI`t9EUFr z3B;oGaWQdx;aV=>zXjpx*R>RtDp?Qmv_-apN2@MD2Ui=oZU+l_eJdR>k znif^Hnpy1?pPl06Rl*5`EL47VC>V%X%kTrt#1P0keID+>8z5}f+ofukAHNA5=34vB zfjLX6&PU*lEN3$HAoljGaE4A@OyR~n?r&dz>DDDVpkpw<25p}mIKDmUe&6OkzHTyl zL8-ylgWznBSiOnHNp+6b1LTG))1yT0A`rt_R*UX&?XGsi>`FxtZViDuchDX;0Y-e! z2*F7k@V#Obp6}IWIV`31VYgiVJGf>?;n0YQ zjC+|~gD6$V;?SlQauCw`@{aP*g-cJ4 zg(^MDY(@;|KKAK6BE4#pvmYLa@#Uh5e!+&KI1&vh38?=zfJ}B?0_N$sWzROy*`((M zD)JT~Or1){Fr5=b%^S;6hU1M<;R=KhC^5tkeYIHDwrW`hg)DNw~bke&d7@hkg=>Zf#-HvkBj*JoC&82UH1S?*l+!j@@`5tz(5EY@dT2mRG0-Q9uvod^1BkExV?ZX_d5Rk z058NoEn(%XTn;BoTP1AkljVqdyfHiuc5|}N5|t6FM&5#SwRUbO{5XFNe}l3bs{#SChh-BT6lE|x4-#(Lu#kI%TnLsv|4jGY`bC1B)_)`&A#cwe z86Dn_L!9UmFkScM=#hb+CJxW^F`i)(t@bmd9Y#Q`fLA!Wv5wrm#HELjdtM-_;nj`w zjWK*84*Za}03^~fj?o)24bYm-Jozc}7fKXJf^3`t(7anPx;(s3QeGPEt&r~f^=Pl} zo0bT;zxKgS06jWo$S2g!uzw*g0-34Gx#k~iQ|AcOcNzLRYrRJEaH}$$S_36%pob=D z8VpZjMKnT!xrX)~TQJ*1UleQo$HMo=Y;Fc=1)1gfhkLuA) z#OROYs4b5>pHr8;C{H38t}gQ*Cq#{G*#i5OA$ugNx{Sgm-HjWPFp)$e{p0<5{?Lm% zgzl*5YBEcOVelEyK0F`(bM1AsWO1POk;UK_WC1yJ~+q%T{1+BW(}!t;KXi zga6y3*v+6jHwy3ktC0f;t|1g!d%69MyZK#rH?t5g6I^@jtP?=3Ng9eqkcOCSP0BvT zCobnsRyq%|5(O!>*A0RyI}qbC{#@J=wS)e6nL&>Sk?y8!k5nk?vT5j^W6;nhojZ0d zU;khoD+!Yl9o)Ni1qKGogr!DEoBsX~PfNEk^jPb)D^qO25(;za9@7LUtCOV>urfQ{ zVneyj_OlLUFQVq(?Ud971ne_G5Q>CBJEDo~p}Szpy)Y*^Nu#$vK2TzY48LLr7%or! zlY}I$e6Mhq(ks7F0;QYR7y+d8<(>{Y8b8^Z++CGNM%xRR4n9}`L5#l#_*o>RTMvCRRjB03z zn<&j2FDR0#KKlk20vg)3kg}{gWye`x#WnvCJ>kb#^K}0Z>M$Qp7}YBdB8PSB99jyg zgcyhW@XPD2Lvw=sFfkvWl^dBn=_W^Hb@&iIa2>=XOhuZ$xa@KK6PpaDprk|Qi$4Oo zl%)~Idoi-o(j1p%ilDLd62|I>c#lQ{8%q$H3Qny8`XG>>w9Me1(}9_ zlvnefRXW}CUL?KimDetCvuzlFtXyhd?;tFbLro%gl$rI0x_yhqV)K-tN$IDe^5d-ELxFOA70>VqObl3ipfiX=g zI%|^KVaHmjP)Lif8)|TD`D}{~vCn9nTjK*~-5b8|e5#dlHxfiTgzu!RvRoTd} zizkn=z3GELO|~>&V6zUIwSHxR)#reJ*DDSDJpx^1P)8G81%>0X;!!CBonccu?@zCC zvNv5Ef;D!r9|BY;$xOsy&uLof)w^bkukiDT_eq@Z7fcZdr>!)O2vvy4GzqCfs&z40 z3|BQqddM_|%}%mdN@HR(+9{T}inI(j=?dnc4boXFEqQMSfty`CX!iV;byfzzYQPi1 zN`SZOp_GzsW0I6)Zvs#J7-F$+C-k17d$@d)dc#sS4%Y2qc3 zne?#>lZrGJ=$>FYD(cF(A}Vx<5*_b~jj>M#mWN@KZ`8&3jyWqVngk@dg(0y~6H<@O z9}yI5?lMHlTQ`Z2BQpiKEFva4rPqDsC9`Do4d9;SZ6m4S2IINC~T+hD(IKd}B>O^1g)&ry(+ zhvRf1s_0+49t!qIZ$B1EJ&;_DuW_K{Ocad0o}J?k>jJ9I|B89l1zhs{v$k<&$uFwwbmBQ9uk^AY2 zx?2NWoa#+p(9=X-29jtxB?jQm#O%5)jn}UE*3pQPR!JJX{<|4Zy7r+Y8*}LbDdAmF z4HhIv0XxRG5M40<@UEY+)9lWQ&7bua3Oh(vE<ePdtl02nMS=Y{}VR+q$3) zGN##rJw*ejEEv%17P~i+* zg5i*K|7Gt30#-swjO^nZ$0aqWELj};1_X%qy9i|W`sG4W#XeX?hNC&~vSQ^VXvMSw zg6hNrbfdq(&=1ZwlV^H0ZC>Z~gIjR`Gd+Z#$I zpJ-fN{6=Qy&;4rIGJBm|;J6`KtUbqBFStc>GwD{6i$d}PkzD}e?*0#Sh^ag|aP2zl zM=LLT-O@uj=Vpr2#L$CQSnOVBDyD~&{AkJP1joagisOK_ksA){Hxf4xkq>87Mns*_ z;`1NYNSrlQQw)G7&Cae%!l12ZTp-1`&;5s?q1hB(#K3kI+(c4dU1D_rZ*nN4N%QbLL=sK)L*v zz74du%2{@gA}OQrrs5a2xyU5+*RwQUlYv1QB{*v2u`O*d`yv=dhIV}aZHPuoc7SI8 zxTbjq5fr$NE4`hzbcZJ&e0|(jF-HDp>--0Q{bVn14`Ik!aQa$csIP0NOiY-8^)_Cq zz2g(aTflC~#7rO1(Z%?)Jty8FqWy8>c*zoKVq!l0uh%u`$v_KBJqzO348%3~(GN(! zKJ0#q>oZ*eXwLabFK9oA3+RurqHQ=z^An(1!v`*z$rJ*7NSpf{VyJ(|8Ha{y$OWcl zX4V)iJ8@WU_1;GiY0XkxWj8%y7Ww1E>*(hTLn0Tu;Mvnyk~R~qL4#6J;le(Vhv;d4 zjxF$OOQcg8$~wAW!c>fg;QD04r1aJZSk1t~I7r&m_Zr5GuO z+aT^Y<^mB!N3@%?u5;-cgQcDagEgsX?jGugjmFGeK4@{=rLfJFMpG4nmzqTB4~&FE zojb}wP*GAUe9m@eA2^PN=kNxjb0lL_m;sD40S^7Lu}sZv+0ZwRzpUF-@!N2b*%oT` z*!$T^pXyg{^=l=d*B_RWR^<@EMgJ=T`HPd{U|~r?P2-8FpywRp`SnyaJKJqUJe?p% z*3}PUJzYK^j=|%XXn_Z$(SDKC)3vYuCYi3DFOgw7>zH}$*b0^K$+C1#cWp0%zky1c z{s&RWA;g_M}oIh!YGPY}Be{U0nVH)Nyq*d5;LGAyOPh^l|d4bRW`nqlll9R7PIsr@9s?7Wbcf-n^ zHBLAfsU=cTz`nG#x|)iF-IgGM=2~uXaOCq1w1@rur|*`Oa1xsUUuT_Kb38lEw1@NU$nIJk)iIU-C=iIe4|~zRbR$OEe0obqGytJ*Jmu_{UH# z*ML4V@v9;zB;e-c%{nWPzKajj;ank5?H@kLV&#Lp2wRGKi`S!7e7{S?o4fKA&m@89 zq~btil`@%oyJ z5yzxl25Z%u$ht!2_d*xMJL-H`+u`l^-&;8o%u65_c1t3Ch6Kj7+-p~7zY!P10b#Cr zrId{I4s%SsI71arehdFZen%_vtI_o=Va$u2=ui5A-h+#HA$~8(^-7`u0)+K8flE$* zi@0U0?nrP&&9TCtoG2Gs1%UiFH2{A5n$7fF2rEm}&yikZBeSxQB841-!E7-df58rX zxMsTC?zFz48V`sEO%QH#ss`Lpsx|g|);vD%Rxkk_c|A0O>S;YhKMF5O8reW6Q$P*I z**oRYjz&<|mNrW*?lV+6TZXMQuBK;y!!89B3D$RJ+f%mr)%&3&!LpFwmQA@3Te^GP8-BCPB8P0TJ|N*-}s~wm_AxVGHs;x+;j(s6B56~R9h+8 zV~~Y0-;W4znR?!LLAYx}q9!lx4?cwTGX@8lZRi6fH2CWj^F7 zxbCW(6!<;WfF0@jvN;ZmpiPKW$yl6pt8pTUF|9aHols<2*)zN*Ai-3O&Z#3~nc{sj z2{Tm03YoCvC`_PilN6ygChIJod;W~jDO^3@KoaOvIVlS-4e$89<`3u%!75G6ehD5x z!6asNgNef+*d&!{US4-6)ZUfsv-pq~3kLzehrYKHaF6_rDf~`{bN-^5K8|qWm5J1~ zIxW{5W`2P&27oLfifVPOEATS>M;BFNfX-VvGvjj*YY*{by+-NPcn2`bq2w�zq= z9hf_2tUGk+v~(>jD`F#6VnvKOvw; zSkUb;c1(Aq;{Z{hODpSK-?euY-mb-xR3Rq}OnW#WPPZ_YeXcHWe{ zf^jW$#5=OGer-XcJDe_KvT?mSrQJ8Kd02Tr|1WXZL{;XD7<}gtZgw7oQt%zSm1@46 zmo)^FxQ2=PkeoD~nqmUb}Y>C)DYZBXz=vWLQ< zK?}3R`t&e=jC*~U6dUP7DK0h~n0PgbQ4(v4>}TGW4HQlhJ{;oW93?pYrKG3*sD{qK{??SGQJ(9`z#>xw^vlRpNUF;Ez=jI;5IK^fZ<7RYMfB0PU? zL+v}0PNc8}fA=f$7j@N$+{4Ez!4bHRsaAe~#MX-=)0Dzrqj1Uq`QrQJC_mT;TjA#;_P(Y7- z<&QoXm7#tRS~yd4&i!7^s=tbL%XNNE;qVkdhN3LjM=dbdli?yq?r4W*c7}f2fX4k@ zBp_f|oEG zZkXCxb|Ab2{+9<38wzwf#Vymm{zre3rB6E4+vcam{5howr(yr zvE9pZ`xg>`@R{6@qQw;Rf(b88?hG4Zn5pUMy6x8fCF#S{N0M1Z-Mje6eNK(;J$^zM zaf{rx4KuRkVz38{N6gnwv~PslTj642sAO0x=%YLOl0E@1g->?`1@uIHz4-Wj6G{sF$p1QogMj z!^>^t0b|}0pi{&*A^j70L&w(jf7SorrVl|*%bAwM!74*azBWiuJu}asw>qw{E^^=7lad~wEm6VTopqF~ zV$Jt;?MtVd(RI(j$|6t6YDE5_t8b!7EkLAAt3iIYfyWpp1r*>K+B$zFXB$PY&QI^W zg*)92@LowscW@QojOTL8iS{Wq6>gEbBLuAmhlL!(vDrNE#g$#AnAEqf7X{9oy-5Jl zG>H$ty-n!=Zx`9cqD8BvuyflQyn~QDWt(9!Yi)oGETDKgBX$pfXM$=24~f)D$_d(c z$z($&exw{)2aN)}DozD|<)M7QjdFxKo_~A@u}z-=ScCz+x#-hv-VBD&tPMLLd+A%f zh`YA3WL6LIkWqDbuZpa99aD7Wzw}3J4r}Gg)?a;r8mXCfwkZ4Rl8>I1F~n?L;n8z# z&Nc7P=!!R*YNiPs=a2%;)Hyg($k*zH9Gr&SzAuHjwU*?J{bw!Bql0Ch8@egJy-bRy z(crhe+2kx7VI8i5G8MmyQ~{lMJ4RHjDcze-TX;ok{5fLykDd?4TOuFx5N6vaY+KK? zP-N7$oM_!UQWLGq7*8%l%dbdtFL-QwB5sydK?Oa>?sr{fu|KDM=HnAU~K;9u7IMGdb zRKtk0$n$Xg9{i7);UOsV^$>j{GzV>I=i$beg_{XExIxUITTfM5@-A-QOL_n^s5MFN zw2BJ9w`Z>s)**FO+)m_NaCZXuIdJGuMaAoFop~|ng#sCuPG9IrH1xAadu~|u0dGv= z&wVK_*jm3OVjIMaac9#uwC2g1uxI54yo0a7f65h8a048ZQ)dh_K z9ZE0B_PDREj@8W`)=sX(Y&yn@?eBO&T-9v=>18z`tn{1!x{v$vBVq-ON<%RDrMgai z$n~4?`u2$)c;S~4uH4f{T>jwjSKtC!$7jFt5jF%cKtm+B3L2kdnzqc3EKRy@`3UIN ztX#tc$~fQljV*^fYIcsnwl;=nSqis!G8KjYF*#XsV%Na<@Z){c)$yjEt%L*xmL&1G0gLN z?Op)yj4qjPgVDbTgJ=c605#U~ZxSo2 zpgL-;>TyzFj=l=1qh?I`c?&3EP}$7%CN>COcsrdRYTqk`1#D-l-kKw9>y7{SyY&0gCXK68@GCmC z)JG2M$q$`yHmZ3md!7IY(FTZLE2)cuW*?Xo_pXAksX)pUJbuPNLbD8RmY-ii5%LJN zsPJS3aiuZ{dZRRCJ>gh*X8}rvG)9m+1&d^E~4R+VcdVIe?qkdxj~LYkhOU= zz}6vHv$%E5kue&|cy1mpdAyl&?$15zZ#k6I9rDM1-q{g`GN9%qS@}~Z;iqb3n*9;Y zsyHm)%m}59sS~2N!GKFaT4S5iO;_C=dBk80S1C0+N2Gny#I3Z`q&vjsICmk7P9C1D zrkuDc>x~Y~*#d8jMq5Kel#U*yqBct^LH*29tR38__rr9oRmALrh2wHAa%r(lu#H{w zlkAB)C_ARN%oP})EZcj$lOk^2d*vT9W1wTpX5ldXMY{Zq82%#6LcSQCN%@~o7Nf)1Q))4JRCk*pJDJS?O_pt*|Kf!Q*F z77yUTqk5EH>c#Xf7GVKlaG4bV~{+Bt8MAmW_T}b=U&B7X7)$+`R8^Zn^S0ENS zGvO+#@RP98FSkBltv#Xe7KYyaQh&pA`$Mf#vt$cZWjHdE*kFQc8OPot>BvcOY6jKb zE34uK765<}8WI+zM$P&vc}36i1+k1@@t^#QEa5FkjyG)>Mh50Jf@7`6Xy#4RWww%E z#FcT^Uo~+lAGiVez^o*FnpTR=^BOnzW*CDgyOYVx*O7Mp$eA1?rp-UZEqOldL&$~@ zgwB*e6lRl>+drbw*AybmI-_t9)fXdVUKqDbRvHZLS?elkn<;?i3&F)Gcs4weubde>g;K_)+2vZEAn>l#CX)2)2% z&kVh&ACk{#PZBICP|dPFkx{Leyz{;-RF%p1$yb}X=CnYH`*lM#RKr5}DP66vvC8XQ zvZg5BqhzxT8y_;<1vGymm=uW;da+&qow^=O8r}7I9|gaTK@8G{xhcN|Rq~)_hHJ-zd4$EN7Vd@_8kbdYqftOzxn6iaocF{=>if%y^E zB*McNBAPS>nuhmKm$proV6>@(jsI|B9xMzTC?%IWH3M>D+DfTAVHJJA{8*VzvjUj~ zA;@8nG)!G%cnNg~rcpl;i*V(Vg}b&_Xj#h~<&^**(o-%csrx~1HVQoZ@%>{H1S-6>{aZQ>LQ;$)~IwIh+&rAb%nY1b`u z#VLf|7Gs}UFqO>=w*1z_jlbacUBisl5%jWYqDEFdF`(@%UItcs@iZ2e|77!htL`H- z1m#ugB902ZVf6~Ags^4dtgIy)@_NP37@=_^EKTOj;b!{$ z_OFPg`j1l(!!smhx`CE`6@P|+@4=r*D53)K7BPa>U4r9W3H-coJLg~VEeHylX>(~$ z>d8RVqe7Q5uB)~yjZsnygmx&0eNH~bBCopz2xp7tL(u_-Axc^QF2v6q6XtY?e4n*j zF?q_{78(QX)_L!DTwVz8*K<^7YdKgp5>V0a`6fHZcIX7oaO7biSoxxg7wt;L()VA4+1v;)WU2>B64}RFX0| zJIG~%wM5PO(LWdHbqokL%_eF=QBXlm1bbKlcE*(-Zl)6Mx`WP*n_|jH6!W<4{q3KM zn%9;i$LhnIx=WJc8%mDd{93!0+zxh@xR?vXK(@r;)WebtgTg})8?rL_yV3mG+oKY5&ly{>#Ht;HM#*8XkCjrlEOq_Jq82X zPP1L8&|$S64(NYrqqq|F6~{lE0O)_Q_M3er+agK?t+JT zItKmX_n>=0oyW3;smsYCF~Y3eOO-l7FXz!tLJ2(kxT>E{yzHg}=GfFwJ;!A8I6V-K z@7Uy~p5$7R_z3FRg=r-O%=jLj*H4Ozg16zZkJs4Jown+l4@Hk@36 zm48JGO#vY(*j`f957Nzo$VMSyrRf)+zuG53!5tmFJOcTjesv4Ds5L<}~(vV>&f)p~(na=0sj&;8R3Ouh3Q?XR;l zm$}VZwI%~DeP`fJbg%REhMta1)>569nExlX^fU~~&{u!~7&Ms{sT&Exk1+rM02kLi zPbC~>{sp<^Y~S-e(l62`d9M<&C9W3pqGbQ70Tzkl1< zY0Py(boWUro69l?bGHB8^u`K5Ex<7+fHOYg5&>t5*^#gZ!{qcX@&>6@`j{pD-LP4I$MG-7# z-*<;OVn`lqX+WFY;ON$A9I!X-mgo$4x*0qLe;ciQ}!0)=_>A%#bDhc=_ zdW*tOe#e+AL0lQ4d5Xwc^NR%r*oJmRGYt#f?5&TczW6J&q>_ya(HhAn_9LzrSeL!| zJ6AxNi|%<2p0Fp{$<6R46RFQVIdO5J*z2`vLB-22R6o;6j$M?6HaGo5*u^)Yd~pfn z$+gPk+o5h7xo9w#4{^_s*MR-epWS>&Zu6c+m^)Qd*$IL_9qcf%nsD#%WieR^!$N4` zOXrjQ)AOb5ry*cI!<|A4A>Ms%!up_ypFnVZlGSfYaIO%Y`}I)n?=;wg7`pD(4#wFa zn5YYC`mC+sxrwqLMd1?LrR+lgUURgFBc_G_VCC|r!d+%R&V%n6j0dy%U!nnQ2=ru5 zNZM!kOdA~Jttjol%;pl4F$pv_t9}ek-LKA(+_#jN4eGS?Bp(va5U8N`>eoB0*%5%4FnNtmsBMEbPQ=|5S}>1!az{6u2?5g}@|%m8KS8+77v_=VSR z+vBfCr;tnvV2|D%^oKFpR%wYEoND)Ez#hfe)3g}yHa?D}&aJ{PqQaixbHdd7FcBWrBAaH<@%ZaHrCR;NWojj$OGZBE7cnCDDPYHhF8tr@AaDLJl z+AKk0Ngk*S4G&QV)chOLhJV;AB>Kon%dJwTa;9Y*XXRI?1$Rgu32PVb>!A11ee?~W z#A=e|zIchGdmlF+7b-NE7&eETHZ$;1|Ca!5fH4IeOJyh?a?yQ?9%d2J(9$`IMa{$3 z+Tt}7b3p$cQo8WJy1LTNfc81j1*=3OF*xJJFL*(C-gwP9d4yp5VL2{j;^e!f>K^@cE<7C z8zBg*+1vS?f$8CTz>hjbpnnjZx0=?UE-(hng!lC;6ypp;5CL)vcT=pvYp%~ZSy`qW zmVb2Uc$xV(PC489^lAIgb#ol(F1@(ieuL=2>Pr4D}Yo)xXvP+=(m=X7f|jy zgs4kWVlL9WNmd`-?Y8DaUk)EMDyiLW><%RGH(CD5blBhDIoT8!!5ApU=pf@s0X3?{ zxaN*}!(6%AvM7BM248He`w?4`Oxxj%sZc=hfwTOn(y4AM2k^7IEj^Z%RZ7UNuXuWz zlHs~}Jg*zu%?1Nh@aQXEd8qRqjw`;BD#Wf;$?K(v4tfjX%)?s~x$;#2^`~DF-zOt3 z2!kz#dMM6LI|H)~WhM=+oS}o*t;tq-Qb&yGneU=OMe$jny4tWu&#rsA`^YgWPD$b0 zj_d(xn<8M8aLPn2i$WpR3tq1DJ3cMePYCy|Evzl`%m7>58rCzuzNkP$)9CR2`qVB= z4*PpSMiY{6Vd5}D`4y|7=Y!dF$5a&N&TSd`2PJ%qmB=Ph3w_$}+e0tfDy#(7VQvy2 z$7IAT2w#KN;I8g=>DH+af8MB4@?sB(vcqEq_ zi`0D>`Y0)`BGM`j*x>91NkMK50$c~!XZk!H4Ro0_N08Y-iZ#pu?-g7Q&?vDH#5w)i zhll;xpRek6`U5c}#M-l*X2f#;Ih-({hFI;~A*=1XvoDW>r&GHb$DYxH*tiWmuS zgo&L8GUI$-+I40z3Fc9B9G65LA)|FqU!TB|BHS_{D+J7=+l3%Kb%}p&m=ri`(wa(v zK249j=Y+#xMp~Mvkg8-0KwIz33L^+`nLd0I#`SUZayO2ahn@z zS=czhOhTR1G2o^FC-ld3pNJ5o*(J&ej(|KXR*YPUo}WzE#!xUMz~3JL34f&xFdGEN z)#J%aLx4#5|GKRM_mHHw|FJGZFjOoUsYJb{r6c}7$=v@^|95wbvcidP(Ad^qYB@V} z-X9WV{%4SqP)8i@IM{rV)>{7lKT;U#3fr(YzTkBHt3Gt4s1;3t zu4~d8RHodhSY1QH(zp_R=O##${5B~P(toJeN5;oV#;;eYW(nzQJ}HKbqc zm*beflU-$TtJh1s8*sNr6b`V>8qMIkbS*y#m)bzu0VS5pE5P?B=_D_z#bYVKn*WGL2YE~Uan-S>K34gffVH;^P|@x0fSAV0yMMa}?x(bi0v zJksz>>b&^sOVNgVc|f&~#1EjH85+VQh;UxZ?R4NX2-8MU^_z{Ho&FEp zrA;7ZP*AdDMM6vZ*oGE{L>(YUn5&Pv(T_)N@P8l!Rp9HJ2uFt+8ntqI^9;ge|-Z=1|_7fN{=7z-=7 zkw!Y(?@h%FaAd*oR9+DICUh?gt)LmE8^(C6Edad00H>GPQ|B;lJhR`P(xV!%j2 z#)85$$yzaR#%YvmKyF(f$uZcGokkLOV*GQqTOo`FSY=F5`nJU)%2bx8jrKwQHRG#+KO@e_69Lr_uQXBj^9qHVmlCBSu>)mgZ;XhW&9oKWew9FYOj z6TRCVM!h{MQUh~395{`QtsMZt$;5hfVUkdugJO6+zXi7CZ0Nq#F_o@;SDe ztLjJ$P=;TCfa^VfsUJcagjy%<{^}fCZi*oR$>N#0sg8{ix<{Fr{1!GGQX@7*yIlPe z@&BFz@}bwkvP00$3HzVRb5K~OMs}gN%@CNECuu%qA*iSn9IZ~7i=54#RZHQt>$s~I3%Rm4&(E@jmms`0r2fg!3;bl?`USpgVlDGEom6+dD>swJ|O0EUHZN6 zLV^R#lk+06+JXl}!bfBAS$5>I7tcqw6$AGwfFXVPk2eI`D<&mI+1|9)$@gjI3i<#H z3=4XAlo^KkfJpuzxPo8DU0|#<^DA+@;JhkR*m5h?Z%7aXo20m*w2E_R19U3)INQ+$ z5&F{<3kx*b*UEZDzVEBJg_}w+(uJycFK8?4pCUb0Ox1a1C=uLg?1N+MG3ec{;(?Ml ze_@+1=O)35IFWon0T?ux_OulS2#qm-000j=)$wv-SC9OFpVBt`@xNX;={?S=8c4b) zVN-gT&9-Rfk3})9p<$Y|(>V4v`g&X_6j&xcb7HBa6wHnFf6H%~=XZ&UaR5O1(`3~K zOc&k@r7gsy&+4+$j3kO#hM+jWpGl-XYGny&kzXvk%!G$(>cIT>hm;PzImKgHF3~vj z&wi_ACqo??<8z%2FssxYzJb?=tj*j}+^eG)nu&`5f)95&J|2wNnJy`Bh6Ql9LD0V9 zEV^)+pftVRSb=KrK~6aE0T?tG*2yv;&;S4cywthoweRgbUcs))?mW6++4sAcj^kTo zis@n4;WE?Mhft1;qL3JoTCODmCsZ*S$kky4Kr($KadD4&@9Ny7>|v{x%gS=noA^Ig zt(!7TYO=ix+c^4v3v5;1hB<68(yd>Ua*22=f-Iy)+Hmwf4OJ;}k?L5Cz`wGPOiA=P zlDF(@W~0S(sg^&`Jyttz)SDRk1ZX z``m*QqS>~6lA&_U(X)TelIR{w0v*Dq1@-3Jz^w<`RE=U{STo%hN28d<7|9 zh!?PID8U$NK9%9rIxvMQMmhi22qXDGe3w!(>ziY#CM%n?v+E3{9wbOqc>?;8SE^Cw z#F48T7^5&kL2)FY3WK0{B{b&%d<%_S)Z%@g)0KleS#F9+Ih=Rm@!WZ0!bc8A=ayU# zTTgSzOEI*OY22qICUQu-9Al~v^ltU8 zd?`{e9&Y33254X)5$SwzlF6C%;VT?UrJKo;h3O=`*41D^``8VzXd4s^a?9>JHGcJ< zayA`_%|ubo_^E|&3);76Vd1w`Yx9Bza&Di zfn+Dh0k+W?L^P6R-3WEf{O&)(A9@O`bftBqfF6^D=3jfnX33um&(BEHwiRm)8v0c$ zy$TwHmBNpCI<0taMexab(gFxKbW`YS4gmj-#ka6X?WgEj0F$k%?E2^jpwHeu`OSMs zK(+9PZ|7>??w3y~ilx6QGG7LQVvKfy7oGi$G9Rdaz1A9mQ)QNkxzExUA<1}T8jVTi zDZ8mJRs=e3n^F4EQ6Duj3N5#^v#vk`3~Q5t({LW@zni{EU;w6R5Qp}LNL6+iL#Rip z;sV}7Uybnr7&I96xiT2k000KIvh?#Ozt(#8_Xo|OyQFRmJ0+1GHWEycEk-{a43Mgn zfb!bm&#pkm!bCGPneoq#xX=SvZjsAXDWb6~Gt!9D#>U-B)%ZWlHekbBUT|%V8PLN0 z*UMfwUhT-bYt5#Lwjb=Ga19w2g$Ng3l?+x%$v}$&;)nl!y+JB#irc*HY~2iBIm^RG zWzEg>ouS>P>Mg@ly)jD2k`?dycAY6nzr_#{udRA%l>HUppl|>H3jP6}>1s!R@ztOl zW!>}@m^rqklBMwXzXCpKDZ+P&{VkHU_`Z3s%R4GQ;zbRRCK>@`QxYfQ8ZWdB3zgSx z=-Ok(sy~tIh}}(C2WP?4gI)VDH==hi{LmSh0oxk&Z(Av{QSVy}PLH5qh4YZ}YZX8O ze_#$~&{zMLkdIsc0%>^FyIL+VgYsyQsIcm`zEMT(Mt1`<}72+|u(=`Du70aQ-5sAA%o zFrdZbxl{UumILa4op5*zr;C{LOC~P5-;7k6Ulpic`uE`f&>K3}|NinhS$!Vr8Z)%b zmnMqHf7!^Dj4RNPy*!B@hk;@?iAS+l_~*BO_}n)a5Ko2Uc`u928;DfdlZ3?uRh`-wW&BgNo)(Qmf(yP~}yG zf!R_Vd6_PWrO-Zrp&CQ9S`kq~6TBO?f@+4*24>#ZrzqWaA2m8U%jkpb4Wbd}03{ht z6vTuTBT$xcTJSfc%G^^w)N`ZXQx)5tmyi8`=FGEwgcz|76T2opgwovZO~WYDwO4JX zY1tE=9ItrMiPUonUg0Pyo<*r0#(CQKIN|(VcKD7|^!AijUAH?P0aV)Ukb)sIl}1?+ z&1x})`Vr~yB^iICFL|=UA zi8rwc($Hp7HI1Up5V~uJ-ZbRazc#PInT=61fG$^ek4lXot{*F;R-2{{4B}19lK%b( zCSp4LGo1keJ4W_yvFzCWEhu}FS*w!?#||kB2pO;hT8(e}(pio{=$XLRSw`T+-3k1>ED~nK@+fipdK%Mw zf}F=CF3a(e8w$3gUC-{#ZLe8QJYti=t&y)}Ov3SP1nEkPv^2E|qeHVGP)atK;o|Qx zZiF5v+RV5l#xA?FTd3#o*m{Vo#D~_KY~3kui+X$n#y-R+RHeF%Mm9LBjUDAwq@71V z81g@sXmEP6E1fVpLu2CLHQcCWo=L(uznn9xs!%%rXSOg-+eTz?#_oNiz|DUR(m7y* z2E_~hrFvp^iIeXJ-;iBTCdSW_2Y99$P411<`}OYehszk%=P~BV{O~eoI1Gt1+mcTm zIIhOpj@*uGgyU`N7c@1=vU~j@B$+dFAH_v{@7nCD{TPvNoe}`v`~`!~DHdF_^6$L9 ziin9b?@bo9dfENjV>7yk*43Vn_Uh7X?1r222km0P3j7hcRTzKvhA~KsD8Rbic)BMP z02h$z{H(A0)NlGZb`ZMb#Mi{P-`pvIs2wyND@A?GQo*t$c?$tqkmpeCirUF^9RhJ? zUo2klN5~wzK5wl`?7LMjt1Ms3lNJbW+6V<^DHh0!N|GoJ2OKu;X-!S`}ph@s*q2ZzUs@EORR}_LAiatVyqKRgi z>5|sx-Fg1NJWV4hl>+D~F-!l4W)BVyp z2L&-Y-5=+4`D=ed`I4%R6hBp+W|=|ZGP+#@MgjJA3T*ioI$H3ud)VWm2sO3kG>PQi z>AbAXR>=Q{BoaC-HUIy!t#%Dk+s>6>&`pfBH2~m+6P2Zi&4Mmu+!q~#5p;h@Q9!(H zJ8`&Vm|&C)Oe0rsFqnu?eeJ{@Z-xKH^DHi2%(V(8HGIuzM`X~uG%wnJ5VF3~qWI|OA; zyKkjGl5y1|o3wPeC2%llV5RSwFmPr57bZS$5kxX#BPT8agw7;`K~#|OOUQGQR6OC^ z7Jbx5m?5}46VhWzv(B-7b8*g}ajxfk6qYW*@}NuhjqH*1C8;Mm_}Iy>5`ep7b!g06 zS(Kw|-un@U{>W>)b(u6q@g0=n4P_)#TApPp*dXS)r|0G`9RP=xvsfg}>nA9ic z_K|Q`&gR7L-j+&_Q@wCZZd28A-Y(TnO8u|~lL$mZ^zn!(iL+7Y1eP8P2 zRMgklTmp(tF-g1i;5YbVci`?fYO!eh5Q?c6sOL>}?%s} z0snqr{=x%QV%Zq-i4pLw4Su|FS?|nDs{gM&VlxUo3YA2;I$q!x7#I-ItGe-8wOo3Z zPxDn&Ws;gMKbBNG6j~oxmz~}IP$a!}5!p`s4SaHk)Ug>i+ybW*ZO!=ll!9betLL{P zsH0mVGLsM2V;RSUzrQq?q54jfpl(@j;jNpooi;C}7*ya8eud82*+3bRVy z!|+Xrv6YN^v?KSGcBiY8VxG#Bgeen`e^qrNgC+&}@)py-1c?i! zf*?+SU5sE%S9UWMrGXJYz)h2b$%*=XO&#qBJEN^R;whQttd`?7Ek7NI=3Q7SDtl&@ zSG`rBVxwLo@E;IAlW7Q(C0mJRDvw%>qgwQ3N~A^Z$pA@Iv*+>;v{iH6Kc5LB`E8@R zbwKVRB3bhlQg+Hv^}c~WJ%Wi`6sFaOG|bZR?+|X#>S%LPcSiqP%an`EVH}6gHG;3E zh&WkU&aG8dV2j>Sq!D>zGfv25o6f0& z2b@_uPQyP8B97S|%7?N%2Z0as4VsBF8ExKG``g@llA`n?TxXS4XbcX_4?Q}Z?=5z% zq{icFeFIhVFuswntdOp)C#k;=&dxBClC*%!- z?!W3Anx%f<<;H3J_}ipggbqoWQd7z`>mV|Lq9QQ1$&KP=m2#ds$e{*CIHPM9x3g6L zo}de|1ZmWV%rFcP>GiZoHJ3Q+>iG4H1^7;KrIzFGABT;urm_j0LSnyqwyy#UCnqo~ zus03WrPa8_emJd#gQ}-r@~*>ct0f!4s>=|CH_vz@mq*a9;;R09iB^{OR5cORilnfc zNBS#8c?{8DbGT#Bg)UZ+w*6l_iCKQV%y1^_w0-}ke*fC{8lT37-P!HAHAW=~KrT*vd5FkcVJLJxYXo%Df0r)#FlKOY1jOocg)JR~&$x z3?Tj2b2LVEmOu|Beq)8e+E>JDwhcwE*WTW(iG@yy9T8e8BS0TJQCC};$jkFVO+~^eK=#dj05te$gy3?+T98TxAZr~_XzNDZQhpFrZu=p0{cRhi6 zwijyF>Gj^6lu4<<(mT~o;93(+Spn5KRCJG7#vmJzKb3lr)e~YKPQRcs5fj`tU~Ui> zeP9vc_Tc=;O%a0BE`ax_jYSK~1Nt88X}2~G$e z3@!VZW#x$U`x^vF(dBFcQK*vM^=@&>{KPG-;aK4ixW&;rf^K3Nk76kFw#~$Kh@CP? zZshzwV=LRhmlJqy?Ac%(xccQdK$hfmz(rg_=-qi@EC_|0>;}`* z57$rsJn6oX^!sg%spaegwABL^pb5EE*}|jp(w>^`j3xmW2pU1NR!RSfH$-Q*{+koz zbW?U#N{Ftp#|w)tO@b{BBVsv6$Zr44wu%t>7J1f&7#zRbV?95`f~+X?t_ui&57#Mp z`Evbj)qP9~x+xG*C2e5cAB6tPN6!9>%qMPdUq)pMYg6-B6d5D3{%r|NdJ5%rwgI97 z6=C#oo{#A`p{-8{AtP-ee#JXtvJ3rV)DW4n%#bz09=v?m4DsV z7)&8+9IfbL#T#jsvn2tSgO*|39VC)djuX?O6if-d&``*0x3LJ*uB;TYJll{n>F{ZM ze(wyLOq7LU_G;6<%7-58e9#_~_|J6aVr%I$6Pxyp&E>mU)^ z9FmxsW#m$>szdbWauThzvIB~eZ2Bs)UU-Z@>Ke&%+hn`+Faz;`m<(hUctq|n(oX&7 zx%J*P{DN`*{m<9p=z^Xm(+Q56(CQl-W zLQ_mCybVVyFCf-xPCpomxV%^dr&4O80|C-gkykx*HfW`8z_$u`c$O01IO_x@>c|zi z)SBpI$Q32xrk@CFNcN%`r~#TV<;JD>iz@u}8!2qb)NgmR^oC#&Vc z9CQM;IYU5r5Q~uksC?s!Nmrgn1F=>FX4n2ZOIqZLok)i!W+D{kr16t(i>lW!JpLq@GT@o$=2`~Du#2jHwX5Bx?BU+>*`g4^>|EK7&65SzIXN0ZRcI( z?K9?)z(OSNv6{GJ#eX9Q>WLAAM=j&5B(q^vYNzQxa58r z#93}C&5tXkR}>;)HCvrLpC4t_k35IJ*Z?G(!)yrW$cu+~ODUEcYW!sFNy1OtVo)$o zu&}5#J+Xz$(zDS>@OKm=YWUr^OBmZTodts$ksM+ChR>{!1^`1`?=%}@ zsTQBHP7_B*>nLJ+7T5ki=3~N<4#$lIBYy>e84GQ%_NMuoW1Kx9x?;Z~{8Q~Q+u@iO z@6`UuK$TwZgG|7N4Zn+(!`=%IMCiiLSraeX>{n-YmWxM8@c@}T{aLw){$#JmgCLip zLLe3;lg8+6q6#y0o#hta|QT16}cj?m{kkr&YTFMGob^TC6^RB`z>3%P(&rCoQ}BTa_U8LgVZrs!hT}ZwW7>L*<~>-Cohy$OC9=niarQ z%5xTrX`Ms`a#&Sz|TpdD`>RsXo)3v6Qj2f&UbUPv!img<4Afy>I72~%||rH z`5yV$j7@trw6NG-&}X$RwF78XX^VSP#y2Moilc>Bbx6B;o=YWKBwk~KH&bPlFCc0c z32JhqTC`1KCYwxA@9uO{JNf=QH{~Bvz4pya1u$}oblMPGkpJ^uL zAoQU54fh&q(<)LnRUZc;_lThwfd*uVHVuZZ`Mb|-m#y?`T$FtlvrYlY*v$Nqt%%{C zqa#AV;%r5$8r|QBc_UH|D-RM3Zq1z+!sXQ=>yCCAX-i~XhsBa`_!o*O1@Nc?LqzJI zJt7wU1B`T+XYQqBQ8UEcvpm7GO172q3b`#Z-7Dse!fv`edn@FiHDI; zIteS#c{rdIs)-TzjEWo=V9lS}1OtiJ8yJBb8|9`i)Sno639$|PPjBiL2J{C%R>6B5 z8E~45w^01u)b#+OvnLUu;-kD3jJpRFIChxp@idik{m|LX53EzGy4VRU_kSH!z(xDy zQ08u!51bJDv}uA-=fE^$eWKdYcQRrd3aO=uv>5{Im1Jx#7Di)UFB_$OC2WtIX+$vK zypuA1UIb(~36Xz3q?7rCv3jB{@-tS-E4&6x(~I^}jo)?HEjpKw+%uqA3E|+E8clE) z)vFv3-@VK(ds#^ULdUeZiarNy$c*wdM*^kRM8GcphX}Su|5sZgK0hw`KaWF%Btw!@ z?)_=IoU1RKx20{pwVOBkVHqS4>HK(M>+t0~+*O+?$MWdU4P zx3}`19*_Ip{t;3qbkk7g(GhmeY?DOq4!cwIul8ig@W84}D<5O#!#DWLjK795?#n7% zIaY+L0_`MR)7MaDr|PRnzMliJceaY%~wb!&?%1%SJ>g`G6TAl%F1Bj{V7y5sk1XSYO)tIso zI$dCGFhc7_wqct<>s~a-^(o3HI;ZLvnTMdWd7pG3aj(k85j6SxSjVFDF1PbhCl>!o z&nI4{f&tQA^=7*gAy!?elR`U}ZXHC+U#UySkSmk}#I&VA7P6X0&ON`ds{H#wii*#9 zabst@w(O8lI{~J??kFuD+aA%m-go64iuxwXPoVZM>(8Z7NWQ@c4lIY>&{363k!=!l zva{hLA1WYZMX2~tXm?tZ!a+dHy$;VCoW@`Gsih&{36RhTl2PQ${2k(LJgDz-JCeH> zoFrZ%Y)Rp0Y-OXh(PWe_<1PBCQw+NH{Z>ACOvdR-8GD&^w&UFO7@i633GA1GO?S*H z#Ky4B5)>R2R*m&NHwuZ^9^2?=XD}!@B#RoIQHoSx%V5_mIr(N;MLc9mCz9DW9!p2xT5ko)U1P+(_ zH2EgI=7v?Zc)Dr0e4J!N$A-}fbDFG>cKEwny9eO5;UJW^I-o}5KKDHDiMRDXD&MOC z;);qbm^l~1iB2t__#m9HUYOg?Z#LLuUBHn%x>7Grhox6>#O1S>zb z4~v6%HU}`U_x)DDNinntTt+`jTd=CKn%xFSk=;(mOWOz(flJ0U&)xYoJ*cjy}%>>ec1J% zQkkAYd59fLajIA(LRfTl?Ct7wUg*;d?^hisCyoQlw4`I=Ke3Ftm*{{%5;8*zd3URb zU=~BxALKi5Xi-_*_Dzf=FlRty{b!;HV{ev8`L+Q-A`CuO6W3py{wV(|4ap%*=+ym= z`C3xRU|6Xa_ZSX;6X>~9Et&T4q(T{GN@VcaHGocrKAGx|tDn=-ZHeBA-@5ndn-jBq&9imAbTAD8o%#ULmvKP8Q^WJ!>BMjMC_|!5 zEG-c*Q5pHsf0Zut(ON_6GBr^Jp)Br*DfS6OK$H}^dx}HL)ZFSMOfE10J-_D(=FoB* zQkn0PRFWED4$;U2nb1ogX5)HBZ;&QGQ+q)ZHS}o^h-kt7jiJ2sL5yz+z@HJfDp0#! z2zksL4N5|I*l}HH)Pet0AG`B#K$OMiAVMDyjlAm1MY+%ZDi@Owg{gut0k`*uKq z?=M|OcDYYlXSZ8{eJpLf z!M$tyHG5T@GGnd~^a)sHD)8}zayM)Tbd3|9kE}pKtE3zb+B?ECYbX{tW&n!;tVO5s zPL_7JTC~}caPdX5Ejs*T$+l86_E~jU@`^aL&O70QeQ{EIT?KuRpQ~b^oFUtoou){J zw^3|Wxl`=tl+9pQV*M77r-?kw?IcAq@Yo;239~V}af+T3&>a+>Q++FwFwBd;kw+3~ zVW@43G)hZETp3tt&DJb@Wlza7R@`~{=Zv*+WvAb3gWGM(YHX82O{enmZYfA?-|S^( z$>Qvt2@WkNEb&bsClje=qWF}-$2G>%m*k#OG!PHo^2h9)L?wJ?kv0ULZN@Ynd|zv^8vH1!AA8*^CQyuRj91cZC#B3 z*>IUfvDn{{B)4I*|JUU;#gqXOvLFx^|EXmBeQx){`@p%?L7D!bi|A20%#X5JOk)lm zEnO1AsSoP?3hEWP%bQZ&$lI)$yU>&huVR0ax;|QY8J=(DAj*8I@o=XfWvCF?qbs11 znd!r$7RSI;Dklo$FZqE7EB|7YYwr&jJ>SyXtHC8f+&`mmYyL4JxiO!I0r;)VY{0Me zf_+1GD_}@-@TMeYBRW|ADYkXeLOinNR_5E6e!EHGYWC6y~3byr6dRak+ z*|Hwn^ch4-9NMrr+)f6OioN!&#YTd4K9&_hE!OgQPKFFDlO;qt;&TY@QUDDr1Hy&@ zRMgWdF73Rm5{4b}(-)3Ob4PR+Ld5v$WAxDw`--1->9`b3ibeinA*vcr)*$%K_dZX5 zssRl@NN!&gDN)F245AP#v)qUMKG8CFOk(yS*kBxDK+A-nsKBI3c9+ks^fa7BH-}BV#_K zsQCKp)8#M+1VM?7MiU2m((n&o#^CK$In@=~({g-J@$YHWk69Fh-HYUH1*op9ve&Wa zC*xJ)>xq`Lyo=30EP;uV~eX(Ab$!%^R*& zX&vU$gZ&`0|T_gGf#UWVlQ@A>{4G&GtF-}+4S^7ncv()Mti#63K+`>yZ;CQI*v8$#M zf(kOW1hfyD_THrUVeM9F$FrB$|NqG905AER>r*7&I)iaypKS|l*?-eB@FJn84L~jS zZdJAw5H4M!8>}*qfc9cCt4G&Jv?Q>BAe!CEu73_eqW@jjo%$o&d}!o?Dzg00bUF1a zRVel#sgH@hg>O#0#vkxiemDw#SQ~D-wxy5J>bVQ?|IV2RB+d3kcyX z2@>+$o#2-DgaxmYo^-W8u6#7*j|tDIy*=&(BMt$f6rJtGY`!qCh*v1<_aj z3gA|FI2@q10Cf(*V_@?;L3P>P?%c+JVmMJORIR#bNl*-{1a63)wS;q*cPNbV!v4dF z_%8eb#ky^ghz!vD&W?VMK_CiCz2)V1OvJj95?mTJ=q&}>Iml#8`V7Gtf4T8KuIB6g4Q5LhSSMbm;cT9p*4y${9XP zry*zyWs!=Tn56Gyh9n~?qyFKc4`x>XYM2_wZ*UMqUL_z%)xR+&+0P&77xr|yMstaC zHMOO+GV;wd#Yuov6uz?G?lV6>H-ioD{@TidF@#=dNX(}yq##R!Q%7bBIjHy@u!w<% zwEv9aV6^baZ<#yg+KUTO3|T|b&e14({sg!6CFT#e#{huiTbioyRuFp zDBTT43Cnc{h)nkTrtchssfF>g6lf%m!Ia_%Y1=+ubhKI=%(O4q9u4lS^SqGwQDwy2 zGTz&@U-;eZlU;)dpNrrJa+#)(AXoumyP;-lv8f9~=zX9VVUaF#sw zfjn?-H4q9aK*4*bliCr^TYZ{s&HXeE(i}FM#1=|OZAXY6d)d!A8WF{JVu|P&HHa0= zzL;Qp_e2@IGJ{<!$xre6iggK$lv;HE&c!7cx%}p;zLPZW;Z7~Q6&OO*$t5ymj|V)w@^ad? z$^M6P?_PhRoZuy)%x(h^f^$2LX zWP8{jt>HE{^{mE}DKNwz8(bW@ZtWhO6-AlUk}XNNn(W?klW?W!o2Oq$Gcmn6;k^?x z;D{4#NVJRvFMu-F&EP;|>Xu(f(4U}AgXt*^(7c{D=(hi}QSpFQ#1PDt-R!a9%1Bj6 zLS$6uM>Gz6sNq@u&ek~1?6bAT_iSq63&e+UB>MAjE=9|FmB);bvxu@=s^!xUQ^I8X zB7yF0pT0Wb!j#cIn;hD>2LoO%s6=!{F~ALYr({xa{ehicfB1T*&6q}2{r2N% z2m5&!bIs^SQ&3D!vk&2PG}z&ji!Wk*$s$wKashMkWWtMi z0QJ|iF38#Q-^6sQnGlQSee+L9O(Ak+uh{}pnhLSSq|WH{f*PX}!utco!@tb3H`M<` z4=7wH(gW8ZzHHdS;9heV%E4?!pOZWpd43#9#L;1&6l4&M3PuR zK}@yBt;*skKYDbOam%6t(on}gG6;U9!9#3LmTQFgGeg0!qpoBoc4#d=xh-@GyZ))uMC z`OEI!VhzWQ&`f`A{2y^`&dV_JSoj=;iPt@ZS?(&@#*1Nah0}sSZllp{tehvIEy!l` zKavCG4K|>crrbr8pci!-GI${?z~^=KWo3?9H3`oHLGG_C-EAnTna=`nYjAd=EX9_84yvkNB> z&DokH12-Cg*Ua{-w$Y>~vMIYHflq01moo%(P=^8fj711?kmnz&&MztY3VnEdS1;yyE)Y>YpI-m8D?Fl%B+I4-@vIXE7S_Ux3UBdZiuhKzT(4}Bj{{X6VaCa(LOmV)fRP>^&p z*tVy8|N1*N6hdPvIV$CTbSL3O)46&us5cx-E4KWe3%S8eZGXzOu^7G`Y-!qNWqA(IA4+3+F7X>W`1R7y1h` zOkQ6ni8|3avkGzT@mV-Bq)26GgZZJXCQx>0)QGP&VjeKXvfi;|-xgiLUM9 z7J=0u;sBslvD)p=(t5`V!5H|EEGi7J+eHpYtcZC!ba&^{JGsSb9RO%}R&vM@1ABPT zP7f;?w?L3eXw*}Ec$at(u<~q{#7^Jx8!c86iOLLz$q3(m5oU7vU#DH1Xz%!WW+LME zcM=7a8yVc?WMlU4GdnFcaN}%wu8VvF1h*yI-&r-#csykn4&V&x?z27zFpv$2zD+&+ zFm&;<@BnH)U;ULqTviE1VeH98J*RXfVvTc5=+W28m~bp>=u8_kTe<)#pPPnVF@@~^MW zq^ejV{uxl89IwC4P|5B#^(=RtG9sdyHKiDL?24U6ebOu*$T-7n1Ky_o z>onMTq^Y$^7p>4mo_~0@kC&Qou{sTJmiSE+eUXf)zQj$p#?lw!dmHEQ@k(4JX`V4= zK3C=)%1GplSwqrpe?3ZJc?KQ7r+zq_>FXS1;?GO?IdoZoa4n3`$W2FKblkE9DQ2?(?HQ*x#$ko@EVZHU z>&?)x8(Rzd>mOehjxAS-CPdAY9&3C&-#~#^4ELcXiks-;&%8hN=2f|b2IYw!Na|aZ za|Ex=g19t21Hstkc|lZ<5g;Qy%J^Z+1}YD?BzuJ_28?yXcR^x*Q;rqp!?(L?%$F;q zPYe_KLO!2T3-)?l!|lp;Q={EnO1Ha$^*|h zf~}(8sY4h9mt^8&UaJ}M^kxN59@VYjce5%dw;hdt9X1pbjf!5F-O z6qaWCjA>zjEYx#=k4{iOr02|j^B}Td4WGn4+*)!ZJF7aCnasM)3Fd;Hg{q;1GQjr6 zf0DNrH9C=c<8VXqujh~Idc5tDJrh{?xelFUwIEo?CL3+pxJM;HTW=>`8d!+M^1rF5 z@GhzSmLI2GkYQ1)y7Qsp{bN|?h-F*u?33tErK47R&)o=Ayo0y5WEuuUxcj!6ql6xe za6VbU>%5yflBH6^oo^XRg7J+)xFf1SC`ft~KD<4ko7G}Hx zrs7~dI&t!@Impy)OvyU?J`b?H#ivl8y&1VUe z(DK7YGWq2zrw0h%K+#8FTvqlqBo~N4+OU6w`4#V{w!%NQ#dDFrf#R`oZx@Q*PS@2C zGEhTqy|W>q5?p9mbjFFoWGPV{!k7=sy!+`erRX-f%-IFe+cyH?jXmy)f3c*KxKJnai{qO7q3c7bocDsvvs=JDlJe zS(2;NBCuoDRX4j+hr~)SdG<{o`+^Y4}F#p)ogj2Sg{ABj^EdT)B-RS=45_T#!AUIsv z{4tth4cZ%gQ#j;g)p<@rV!)_{6mre$l<~w3HzbkkSW=cK=vpau>ung2zFTDD3-Mqc z19(S(iumRdM9>Q>L!zR6oYYX z9Mf;=PK2yZbKhO}3V|;5oX1NS10LbO8Xsb#EC1K#CC>f?ph*~o%}R{YR{OPkX~(uk z(Y=Z_h$FD@5W)k84qS?oRF922pe#ebJJ_RP%LTM&d0y!KWGb%`HVnC9WqI*X)Bisd z@|kWJ573<+kftH5)w!0acYq0P&v64@2A8#`Ap0ILO_0G~RHJMuy_}tp^?wPHeBxLV zV6)!hICz6usu1gd&#Nb2`Va*6qnc9OjT7sZrt`q~JLXT9$~6^a0TEQ~8-vtWA&BPf zs8%2SynKiE4`Es#OROCW5(j<1%l4A#!?LAo z{5xRF?sT3%QsGU=ncNaBs=}p8cHkk>euh!cIrW(TzM{)ywc$9!aX3K1>?hTYJ3ntOC!y&c_69!_d!nV1O&{iJ7NhE*= zM13U2!L!AG3QFaunWFim;l%+8;z-}XDJsU6+yf^gLRhCgcz^=MJvT2uek~TTqY?a7 zuDg;#Bik5(Pp+^Z+@LMaSm^!A3&n>2{&&4tfCgUGao+;+y9Yvj*FD;(&oWQ6tqZHM z#0kLDlr^AyZj(pc4T7daoH7x37ih66;_$~8o=W%K5YLfp`TQ6WexmpUVk$gXe#eu> zXl22VRM{ccSIG3gb&OD&FifJkgq>oN@EQX+HkL`I387z&Oi|Hec_OZ1DqT@f62Uh3 zJKrDdJVJRp)o(B=3k3jLWSNpMN45t<0W1LlX60a9Gw_rFSS@%w zgkD!wEJJ%*@|C`d)6RygV?38D>}dT1{&P7z)2qouHpd-dV*5&RML#YZmgP)b%<31c ztQK&Dcfz>}OgzdzU(&QnM`tZHRd`#{n?|<_7$If`xaEUm?B%^=TB}MhN?(js;Zr2b z<9S|}Xi!0Vrv-$dLjEw^=EC88eCeM4#4d(uaTWD83=e{f`$1pma)*gOFm*(SS?xNs zcZA*MS${%vlDmkmnB$zt=}m9+q3tWpcD(}rl^JD?NV>J zrX8C_%Q>>_$@erYTS8-0aOmazRMFdgIix}}!=XdRj3IK$mI^359BLMG`cz7zz^8c6 zmch8urx}FGxhqOcYUV!{`Q*nkL4ZUKG|v%H zY&gwjbVI_9YLuld>wQe;6n`2UCeO=)=Re zs0JMXz9CI%dCL$fL6bJ!zFTY^&7~8&c`K#lQG5a9`RrK)*!s+Zb z{Xfy}znY6jX@>s%Tddm-9w;9+tidIRmskyD5jt}^j=<#=3g(En(l_rnvpWnW^fO$)W>8}h#PFUpnmq6rf)Y{bXc=ZEJa zFna}Y^I7f0u5%q?HlU?t47eXxB)BEPBGXWF#+rp}goU4Hd(yq-V0Xnk!VguhCK38@ z$71I=i}hagr)E2@#XXpmWiO?|^N&&qxnDKfdFKi(2(PctN>#j!dfW&X)NvWAw|0E+2VQ??n=v( zb4t$Jn0j~>agXMDEqyZ>8uqb40VOSvATjxSaq;4m|L%GhCz*bjB%sX;Fz7s0PqSKO zsG~Hc@?#0%$#Y^@_EiTx?wrjgg<5vhee6i^k;#Q?i155YBsFca+o?r6BN_{-6?4DcSPO-_OGoq{e?1-O%FsU$xpzqdv^&{^p4i$zyiF zhERB$VlYf!I#-NEf zUdnRS4xzjtXtC%Y$pWvi`zQ?(BZvZB@HcWh%at*wow^vpx9IH+mYC#hVtv?Lc(NDa ztZ+~GhcrMz`)8pT>@rrE+W=BR@BTLRp>K{8H5Qa?GBpwZ;sc71Zr}X*Ek~IRA8Wou zPBNo^8sA?*u&-w(qjCh&!kj>36sgB=v;9gFoteM*rR3$PL44gl49gc z@vhK7=z6!vN3l{S8v&?Y!PhH3kVq}m*YYOZ0Toi=X&hT9g@iWR)A$ssp=`UKVFWSh zheRx?ooLR-6uQCPSu6TSULW3(ShDz{c>z#H zh|!slSt|+DGNJ(oKlFJ+VL(;sY=qV3fdBOvL~+IHqa9=B@)2Fg+$fAdMyuDQiK}-a zfTxW25zR0%d|9(K>>%r!h7N$s{r$0zv4A*>!^xLYfCbdZj>wA=O@n0}{aVP-w04mw z`2OnGAy8i+KAC@?r+xX1wD?7H;kG#|p8~i8MXwy>qH@E5RHK_AXliAo;rL!e4MAv* z!McV@VKQ-8{OGf)GT3F$0|Q9 zpwa8!>RcoR-O;iCe z=$`Fwv>qDn@HYBDt5xV6U~}L#-AQL!XP|We<<)a1&He`ffQ|v&pMxb4d1@V+`=r7zp|3 zTEOB%FP)mn!}%#w%I}W`qad1v?mnqcB}fD$Z6yi1b!s%WC6cbk40pm_X3nfQ$ zZNw+n_$*rgZjKBJH=X6vx%*58Y;y|&0h<=lk@|P?8EUOCI#N0Mpb)frxdBZ=yh(L^M{qfb#nItT^ z&KDOA9_wGuiONfWV4F^Mlc@IoU@wfKvs_y)qz_JC_9as4Y$94*Pk!MN%M#-w6|(l$ zk(lr`-Ghdclo{Tt8mQ)pzcSkoA+7huRQt9;>Oh7z(k0pTrJuN5gI3P5Yx~fod^t)v z&&9LelJQvUsR(l#7cVRdx!#$ZbJ`{fDlA7HqHcPKjzph|U3!PtUOJzyw~))_Bnk8+ zxB?mjCYb9z<4uybze2kS#DDB zXt;YN$Jw;3*O$I8C!Zt%^*<%_AiXSW)uRPkhV$NZmdFf5u4siJ1(CWfGT{lls1bQ7 z)YW3aViu|ct#A~wep1iFhT4jF8m=BPN~&%vZF%gH!kGdVYlmB{b~0AY*b5+)O%q6} zEiq=91*&c6&qf7`0oZIwhzgAEHUf`yb_S8*jZs9&O&Cpu8Qf{GcNB}ZhqMm~cLxgC zDc8LZFWtb^bU1$UJxEQ{1P2w5|Nkvw$KNu8OgOpoiNY?zvX90YPu$)F_(Kz^s-JyR zo1AdlAqlTfd;7C3$w$&STg+{+R@o{zB5$>KKI8gD62R+n`{QylGQ2Bk=+U%rh+tB5 z+3Jk7v(7msp(>tf9dCjlX)~xZ$mf8oozrX#x^9>)&~MB7oxHP~)4mh6?16;-z;c&o z+~K%zDm8zYFM`Uhk(9@I*iE?=wxZ7zvrYS6_##U?j`U{RCUM(orTWo%P3Xr zlUlW+iPmPC;G5x6opk8O7DAcIRbus%}W>>LOg)>V56H zo#^jY6x<{cPY2+0n20*YeY29$jQ+zO4i{gPWYb`E+MH)BpX!tQ~qeqk-wb|f> z>T3M}SGipaBd~kbX!$-v6|tmyRFNM@DzW%2LkNV;VoI`kPfk-N4)15w0O_occ!n2( z?>=LK+e9Z$1<#BBygH~LNrK|1TFf4|Q;twG?wlTF%C;ElwgUcIcy2|gU@feKqLF{D zkL&d5nc?xetk-LCY?AN^ssEW;V1WeB5Nzxrpu!4-MQPH?g-P_ku(gL0n3Q?%Bc3w< z(NhR9s<-+ZFUmm$^$)9ssl4(77ET(tiP#mAtK0Xftf0 zl`ZvAOssJW6t(((Y+m|98D-1Tmq3-t0NgZrInvMPCQ=r>a5A~J2;-LSBk^V$FASin z>qo1*r(nPeqU(^VO+rWil)RR{K}{Tq{vH6V{v{wAM%zPxDyJT5DHUx+?y~L|K+{#1 zE+3j)=v8K83~cT=aBNJu)>2R3M97H{0MvZgocVh}dkfMs17%)j|wJLC2{_%q#j_D!n7GtK|n?y`gh`FM5K*eEHjwj=KSf;IGGZ(h4k zPoy~e!A5VNsb~hIOHGdKGxE%6xu7*hr8mqZ{%=BYiS_cb(Ke=chZ!k#^67DwGl0`+ zSqaBQoni5kV0w})QWO_-w(_`M7Eshnj@l@sd3EMW+c@Y3)$=b^8MEyJ^A{SvIx*hZ zWFA}|@Ivb7fQGK^=95JL{QKgD>u$8w^ZeI?f^N*=$T7nM!?8yF7q5xR_xb{e}e#>>r3? zb(KEWE(#-I-Cd^Of@Yv1G@cmU)WFKl~jG-e;%i+T3_Ma}-APa-< zg;>L1TMe3r7t}HJUU==&fWgj@itT0VZg3DG~DkGFyc%r}GXt*8|O13n^t%`YnEQ zO8sVr6zjYir-M794R(cL1PtNadWM(%4ShLSd|5YZeV+X5SZ?w`V-@zZ317la4!POa z6^G{U(p)n5_a6#5M;dE3!8M355Xkg<()c{=brfHaI5O(X8_H}Zn>U{;HPZ&SwyW3% zRsd(YE-cWQ1S}q9scyd0*B2K1_b8*et~V&kLV$=Qg1uH4GzAp`XtDsMn;x!*h+TZ=J_< zG}_4+Jsw|+zbNE!dM6uzA6h_h{vY8{a3JSNhD=@g%6Vd2+yB)}xOf0D;gAYYDRpOw z-@`A2`!q#!SIZycCifKCVzMGR2Q9l+Gs2wM=kBH8@gY5KP6fWL^8>f%~7~P^T8*ge;$=>lC3q zL`wx$p#UOhw`iMY3mC#jMbX{&+rPn*k*Y~J!HXIi`#R|mbt9#ni&7kdngy;nYvi9P zwI0v9FBrO@){bg7@&%kp$X#p$dI8isbGh#@6CQbIw{zqFxEc(esek{+Ycv5q>ei>@ z{IB)Fxq~(`4j+(gG)H#lKe;Ar+47(qkVx--X`4!?MZCk85u-w(PWxa@Q_am}mjYkE z%paR-U!VV8tTcZQ2mYCZ4ewSFea+$v0Zo(Lp! zR@X5axx!)@>r@yfkZu3SOcG06zMCAL*%}t5hy!jAO@8G{oN_UC%>F!l=g#h$;5{DQ zbpqpt&f*^q^Lk6s@*6-h*+Tuy)G5tWbSb4iB5f^+I;%jwv(soF`P9~xUG8FB*4LGV zJ`3#$;ORIo>+brs52TyTO%pK7RfzAA=p}DcHvDb7*OinaI(I0xevDCUtc<9?;|h;s z?M&(!kd#ejO((`;_jGwiFAHc3?=$92&5*}G;bNnPrSn2aM*aSzesugzSeMg9-OGz2 zk_?-iyi7CCb8iBJq2B|jWSbZWR6v;Bh8M^EAi@X&b`Xsq6mM%^|7 z2X436TN$_N7Nt#L#^y~HIroIS>B<@_n&m*Ie!ng*^79|`@TexKnoukY7>nY+)+Wtz z+j$PXqU;r)TCeYTXF5ve@E>Hbhg@LfN{Ch06Odnk&St|TIz=C8Secrv4^A2&|NF}} zi3Tpo@V32x?YOd1S}O>>$E_?{eRfDnYL28bN6!1L!m@6S*1*)M=tIr7LTvfRN95LztH)V4uXZ`laIeU=2$$VA2s8plHvvj=9QJs*fs@$(p{oTqKc5 z-&GdZZE_6giAKyqR*%YsTuiE!q*lujQyR>jfeI*)T8okjE!nB)Hml|8pOy+NHQRa# z%h}Dh`F`&qm690vcXSPghqxi)O?UkduY_si_tX?i*pvvHGRY7`=Kb+fH*^>Hx)WX% ze5#go3K0fwHmnFADoGTnI3X|U>4}9Mju_!ap!&5Es?iB`hE&6T;DGJ2VHt2dG#(ns zevBW;U$;PLG)n2D8tUb%pe-B;;K18!8Sw*%TUWF#3DLT;0*e(!2DN$BA1=U-3OI&u z1dx@zof37B0FApf{*0&pP~u>ogIl^r;Nl>O^AN>ajlA|4JvTTDox7r^Q%=ZXxZ}fl zz&Yy1T#W!U9dxlpVu31xjS805AL}*-dIFbt8@r(M*~IwVS!Ve;T8fS?tEPe!U`bm$ zVvJaE_cE=*XnU~<22aUmkF{syItEc6NK?Z>(aq~bHh7=(R&^9^aE5n-Erij4#+7LH zAYbjPV-_e{E2Z*-w-F3d&5jXu?;bckaQP_Fbiib%(TC|FjQhDeg5?j>f);?y81(GL z6eyR6w!OJ6SRQg5{vF`e7o4R)o7>3QpJdn4@Q~!hX0O_q>b|`OIZ6wsaVkmS;pyEj z+FnvTF33>~8(KeWupZcO>4z-9x*phDd@Q+=&-S z5Tb@N*I;Kv+bQEiB4?k9XT(%$+}{y zdizQvLemMUI7&9Clw(?2SO}6lw?~T>{bT%Me5eODFA_{$6rout2uy9B(zHs9MF z1d(NNTGg3{Mx_Gxt8+)eR~x|a5MAZ;AiO~4KQL-^F0ydm-_;@j>|<@Yz1%h|8vq%E zcx%_YcAFL1O+8&};J1^sb>oOTkH;>;qEpS>ePjjuS^coA`jgv~{rpuK#*OLB*tl$2 z-XWPzgde1c(t|4ln&SXKAwS$n$?GsZdgJNr=N=Y6)wt@e$^*icc3L)@`rmow1E((b z{MqmFG z=%xut@d?p(wJzFriw`tj*plC7I#K={@m4DKii}}}t500wPP1zxZ}^aP#XND>B4Tk#at`ksF=M09w6xY%O)3zBq}9RyJCWhYqMfi$MO@k*Wkil zMw-5bBt3{Ly%TtkbKM@-W2)al?vRlaQz}0e5AyN}zFs$)>K*z`3I{H?d@eoJ+EcnR z{~KXF;d`uG88FT(&z1z}o6J`9ic)bYp*+TlPcFvqi9?Wby2=DXP#(Vx`=tIGF65M* z@Of~eD`DEgvL8Z~7`$m|Q+s6dIh3`0NCjFLY)fG79jm^P*7iQtOhiOUivx#3<5HTZ z@CI2v0PkV*Z`ON-#kzA|Sp;LXi2cNl-vHj8b1|q88?XsUA%Jf`m(YjkTDnX}S;+_! zVGI+71)zW5-1lq1&SL}r=jQzG`tLy{m??H*`#{sI^705vxgE%cq&Xm6LtZ2DF?QBT z*oPMh5?a#!xRGD-^7U0?RRGL#e=FVJ&*-gzic%!-^`$8kDxH`Hg+03rHV$CweN2X6!VeOq+%a{Zpb-B4SBFFU1gTRKaxlnbI z#>mrz1fZ%c@#Kg7_1jkKBeT&F62#=+h4E&zYzJntQAK}}@?xz9Sp_Fahl8yW7*hq+ z0*pmcihTao&_WPbI`Bqe9Vf;rs<_BVYvEVLHE5gbo3vRg;n9u6IdKqU+mc|?6Xc@X zg#_wF--mq8f6SKcr`&eK6SV8X5=iAmH!SScHDFrRK;zoha36>6q+Y5N5`X)8y^n5M zh2Afduv-*12TZ5{EIpTZE!7U?-n=u~FnxL-&I6#?v&b+u_W)h9Mz5#{!Ly_(EpAgH z>^7-qJ_U)tuTPT3XZv8_KOAt-k{hHue!x}nri8;#dp#4xwlkpom z^eKQw0q zbw<09Xc{$wV`_+B9!2qHN8^qF8OAS_@WbMk%<|n*-^}pZ%Y{tQsqA?f!-2sB#Cvfggk;;qSx&>&BR&h`S5j)WPT6xMU#?U9xkC6Wjiu3 zKU;m!@PFoJ2F3YO=xKcLSx>;2YdhN*CS#n0^0uv7jB7M*g_jLbL-OByx%X!ngeu67+A3p;x9$Py=G;oYT)=d}b%5EwE80ekPbZvmR&0&$#6 za^(+bPx7KaEmAV5M)9322D<}d$y&O4s#BUwN~Dd{yayuqnO#VA;t`s^u8y8x=+nuY zs~`D|kLBL&$Aa!A1i~E+%3j+m;DJV_K;SQygo2+!@mH>+;Kob!d+;6MaaC~+F}XJd z`JKG!r?!j|&$(xrD(hGo)C^$3^0~vXN&C?N04co7;s+f6+6nK~wCFnr!atyD zD6Yi0zQSp_613Rh0T?tH7P%`04rl-X09yL3YJI*T^Pm<5@r>UiUuE>&&uk)opPCp1 zNNOQYi1viS*C9t0Ar1Q3ny8{P1mzs0GcrM0n;2Q5c8Y;{NLu;bv~_cTA?mvm#n#)S zf*5GkYkoQGRT;$UYLT7+&2*f*^#blM8!jd?`M9zf<;%JgCbvCxFO$>MAt~&fpJm36 zift}Hj79y`V@O)(fBJMOE0YDKqW1o}spHaz9a7O5fBy@W!ngFGoGYUsH~|)|s>grb+f3yp6l`$Imz+oghhl@GSS*p}*Rg($kWve4FM2E&T<~JuGy;_k$ zn1X=AkNP@Q2*R5dpwY_DHAWP?wXLr|seX5>o*8FTjySajx9Zz!v|$sT12vSwgKNyuTr@`)mba{=C$2Tl1#PEHN;XDLXqhmLNvKF`cFJuX7dfu!= zOWW2aq!#%QV(32Tb%?x5o{h$Gpo-rEjNckgBu#{~va_XjC!Uq%pIlHi1*O zzL9d36RP18`FC^Klks1u39;&@(Y^Da`@y(}(DjZCzi3lRpjUp5MY721%QKs|a8fL? zJHV@A*b~>&QpN*85Mgp7J8XI-&$>)*6GB(KtRFiY?*6_Vxts<+%oTu0neV; zA`%)ZlpOy=oVb42vlesXx3M})N1}q{#CQf{3;h-KTavH}1W$@7G<%XuewetG(6RK) z^q%G^9?~3nC2MNtPZx?gFEyRK_!21vD{ygHlbdX!+h=uWASSY>%V`E|@HCT;^uIJg z;Gut}l)>h_alO@BOrKw@|0v!L8Sg$No7y2;bhVrEx|{uR&OBU)1NKUt4`hm2Kgv8? z`~`c|bj4;4nYf%sz?|}5_(`pN=9=3&KFuDQ07wv{@Qk>Ai$6;`!B7eiB!teF=(T~? z3fG6&IU~Q4Lvs5VkzCA{J;Hzzcy{yzHSu8!JvJ^a3oZ_89Z<}JS7GQp>@Ol8ST)?v zNFaY^3{z4Xn28;EW@vrYThYrt*n#Gp;)cQU*zmCJ*h)`7&dI=@VKt**o)gW!&iN&? z`6?+nAi&;4Z$5T17S^M2piIfN?2-Y+56m6|d}^e;5P{uLyl5?8ZJ?;lrMvJ~@0t+w zmp_;F8#8f!q0YyKH;>3eb(2#8Ls>gukK2hH=SE$Z%;1}8MVH!UxkEFO15XaSgPj`n zeAnhVK_{#u*BU)=e4KK06NMaDQqeY2$ zmP<_tP*18Ayun_gNT!2WmV8WVoN0Z7+EKyYn5f-bgFP((NI>f^STRwAHU?VEM2zj7 ztT~(yt8pmA@E{&Sx8p~NS9##Uw6@>(sMN8n|_6P?T)%kSc zD!n)vI)&P65WRTsytNP7Ci-Ix^R`cW&u1S{8wAy?c3bu{V6Sbjnom??S@pNALZ zqO*++3O&9jT2Y$>-ERY}lM~?D!$)^SV-9i7^q*+%s8sZET8>6}PL$0~J)R^JH$5sj z91Mf4+qk0#ARWvN0Oh4B;Cb2UMq!k&_!npgZ#9A)->4<^Axk@Vmiy=$JU^*P3seax zHI{`i(Lv7Z!hCjIj;yQ+Y_Xv?^RVifKnXssGjU{w^9fklPR4?VzueteLeyaFw}E*$ zucczRkQtFu8*+#C4qn`>%@~>*!`Dv)39P)*Iv&TrgDn_)QGu*m{ZggW!tD>+Jkb;K zGzY-k=zJ6cLwzyp1FFPsFn8C)4mPw9!}7t$PFZx%O}OmHbNJ88IHZl3T zZepB`W!CmTid5T4KebRE$(&71we@Zk0-+;Ek{`fJGQi)mu=%BcKvH*?kQK>|!e2l} zj0Ju|YPi*E9OMzvvzU|D++9%Wz=XK6PeoGqu_Xs^cx`fMkZ|~Ex0bbnl9}VLmFjNg zeP*Sk$>fQ=JcY$ta#!jyr_%d zT3ho;%v*G-xU@+pTx$C3bLFS7?gdFcJ>bIYSyk+Xi1%g&ptA_^n=d6gez9V?JFN+j z`8_ZfbTC*liu19ZNC0rNbx1XG=>FXrk2agdl_j8=uzVz8;C$F$0) z*Z=%k_uud%{A3-U(u(wMUJr~gjX@Yw_l>vaF^w(Krl5k-?*b=l@4ca1BSZY3ePlXMY%E{blhdIgNet} zo4UwEb~)5+kTAKM=QaET8nuybKxy9Ud^kvo^iM6z7w?P`HV0l^tmkyA9Bsz=Yu+T!7*foR zY9V)C&MS<;%ieuv5yxFN5;tu7KxY$vz_vH4BoDE;h)A15ns1VH)>~jKzpDH{aPT97Rm@v%goe-BNWAqd3T6# z{=x@dP%lW3V{PbZx+nU+QDB#QMNc&NnMq+!_JzHSvNHy-6!^v}e+rpH!OE=jH~`%& z%d!ZuPg$I^r>KZSg|(LtxCb=H+1Y~XjAV~M3W(;2L02Y=c+4niw6OdJV%dloF`F~0 zi`2LcE|Y3`wH%S?bZhVlOSIZx0uk%7;j*$XMRsn=H9(Yc__8}2Ptzg1lri>?9*$70 zXz9YOxZVtLKuJ79?g+BONJhy- z8it9Pnot5s1WhYwt_85bo2f1c(xDv?0Sy5c|FN1N z{B}ZK@6NQ^@Mj?-U zGfTqM2)l=CEmVr$ox)4nIyKIdLR{FFUT5Vuu7_+G6zBI`dUu6;5V#sP0q*5T_wwwN z1NvI#XY24wS63~Ie(RPbwPCujY8&6wzo>s%hcKts4>Lo(rG;~Bcp8$5$X5$>LXdW; zow_K6EU;9jKD_BsJux5JV5tv$tsR!u2Z=MQr(q8Ewc_;REYDRO#Sp>@$JYf_t_N$_ z7(j0E*>Kub^vB~^%$h=#(bgE0)?2f{SLZ8(aG`JNxV*f){7`y8 zX{RRwTFxg1j_^($Y->&M;3GClAoS{#3+I`(_FG&>mnDkD6ON9UcOUi5rn7d1LALJ( zT2BAn6AAj}hn$t)`rr-{Lnu~A+%ZwD!(z6>u|3r8Na>YIcmJ&clex#O6f)*|+YwR- zIPrzGzO-ek+ykGJULbs-K{j`i|1YLO`8x5{KOrv(k>pK$kTh)S-XGqWcfTR4bkRV| z?nJhXVmMGe9F=R)RFl9R=9+|Rz^-T)B7j}E=JNj|Yqh$UpdguxI&O7q?8Nx`Ep{X(`Ks9(VPxpP9RU zRUc+%6|q@ke7EfM-{~MG0UXOQ)MMM{LbyEin@mp)f?-ULm+lPN>6Hu+K)R?_^6H*A zv!Bs3%qKZk7uD9IV}{1@^3WeZnT$$@e!noxB22d2yzJg&@umupI7{DqF60%Pzxz94 z`gS|6;Lv3c1kQiqpcv97dy+Dx$Ki>RrZwT_ZE6j*mvtO8k`IqZdKS(gIHeVLCjp#M zKKRIynqoA^gT{ZHVM7eZ1D_}mri#<=EBBZ@Xx<#MhS@d@Npy(=Q7}6@vq=hg2^4H~ z88FYueD#w2UM%9R{kng7a6c1v3N`lUKZ)jwBG?7T?#E*D!VV_h)ro-aqJnAf<8rM_ zk-_354k{e4^EeK+N`0j1yO`2FnT8b5$Ao!XAm@~q)&@qe1n)~^7$B{Ly2<;HUKXd- z&f_1OKrS~h%ENk$f$|8AteCyLLY=^J;<_xlxg2AQUeyjRpM*LH^e4*U*8Ql^{sB$d zXsLk>uxqG9;Y&f@c~tR_JG^H6dY5NShulF+r(sP{fHKo?^9OpSvI); zJuXqbR7LgM@jrC)N9-6%tN&;DgpmWQ`maqDw25h{(RIo4Yb7Xy-;gSM(-tTZpL~0I zK)7s}`qo_ys^Ie&HlhLaA1|u&abLL8gNC@Lb`v-T^oSRd*nLNcR|uI{!vQ+Uovv2< zcein-2_Q4vs8@T;I(h0hirgl!$d3yYB8A#(xDU$kudd`LC)B@apUj@J_Cp`M&4UL> zN^m7cO{8FjlHwb1^v8~l$6V%;sf|Un7TEd;wu_&(;?O!Qw5ig{9e#YL@5?ra7Qkrh zs~)AR7`(=rV&U&BhTxa1YyBS*@}ajLB~e7Aed46dp8$c}%TT65^6QhlSwoM_*@d6mNj> zS6eZ5IMy6X!bA%ipVT5nF=TXTM+Lxfa{m|-Jr}iqA0Of1?;RnuOgaqNPB(zE)yi|5 zje5<7H$oZ;veg3E>KPabqCy>aj@LO5TDe93?U~MD1rx$&l%K?V{rQ{K);9C;<)77x z;u#H_`c&PZ1AyFu(8Q3K)@R4x`!5=kVQ3SG#Ng#PbEh{Kzw!OemTq~#)|)i<=wc=L zJ0giGNvX;D$t^6=%E0z?L#hjQPYrNBbDi%uBv^e;rHQkiw3ut%XVtJue(3h%@%I(h ztBv+=0BxJ%y4giGX9TY3BE^O=iw~cakR_4?nOgP-oetvvFEN$~%rL)4CJ$@|u@BRA zp53+nm*^c&F^Hl_76}TEF2@N-O*U6$5smzt?-gd;=F%f6SSGvPDX|-NXM%$<5$TRH zm)hVQi60*7E}PkEO77`ZQm88@d%rh)MLH(INmn4Yye7}FO5~YzaiQyLmWu9Yp)-8} z;60NRCh%iC#iPkxoSyKYbzk%9tB4+AbuTbD2ktuXeKniIC$i6KbFE@zRP3^!O+2-Q zUVDOH9U;Ll>K=ODU%CZ&Ih+7frjI$rCtbx(6gd^e(7nNpTY&tGcHRfvUMZ(-8hF$Oi|}h5wFHbzKP?z3)j znUo1^0880~?%Qug^L@PzL5gX&HZP&ANrAlXVu~F15f9q8g*aa+0Ga`>lJ2_Q`pXkY zPa*@#iHD24sE;`F%*rOTKUm)+e<(fWzr)eDqWvCcfagGuMygwO$gQMWPUv?bhYy2$ znQuOVbKq0+V)=A%jlid>wDz$zHu>3n&O6q17zg=@5mjg92R9!OA1vw3i82~?tUu>- zGOEoVPyEhA+tE#6MnyvkVxHX>)ig8~WX+B-4YcdsX3vu|mF;=++MPn@4|XgewLE#IaUue(|^T9En*tb3HxgVCfyfq5xIKgzmCOP3Bwvs=$jI%8O$)x>L+m>ArYZt9kgC{UA9{x#RPT`Zz%^hZ*Ny)c07 z6yevJvSpRZ?3tc02N>iNZsbD_pG}!?Krk49WCkVz#XfWm9Xpy^296W~#6xEt#J^Jb zjU3vxys3^EnR4$8{Ju!S8hAF|bQ`H)xD@@}N*=O86`5NTrdzSgaJcK)*d$9w1c!S37$dCWj?0T?wH_W2V97G?kd z03B+zbhhYYZI(GQAJ1;Q^nprpSe(7}C(eOU0NjeK^bRoBeD^Frn~TJGX7 z&Z1NHT7m?13sDUtS0ziZY%_1mquW$}0;XC?cDO!eqcGAr#}ka6U|>jR3`huqzjkJw z@@s-89wcp&(#Iz1d=Cs(?@%ylET#nfc*~uDC6-f1q8L>7$n*O)F zgG)%p`R>MG_`I3o)QZ`k-#SLPo>&-1jEo|UbB+yJ^%u3|%!Wp@K(XBtf(wU?ax=|- z!U8ZOt=9DeQ;J_={fJZSV+i_Z1!pryDV>ohJeKsVZqjp&Y5F4=m~7*6;Q~dY5g3DL zC>po4Tp>?xwJwF>`qPE7*C8Npj*SI~?zBTC=&4|kCE>UOC>UBT>59G)5oH1WdqUkb z8|U+JcFDkFm0I4^5df4V0U?hnlo0uOrHt=@iDAd>GM6fLp>#Q zO=;3I4P}I4+wx-1P2(jKSwwHS1TQ@jAsOy1w+H*u+zJjC*pr`aA{(J;*l?QbHn+d; zmL>l~ACI5R!Mzdgdol737d15TVU_(dGBjUQvYoggX)X$l%ksLEpG*iSXG-SNhM=8@K`&^J=KRlQXlD z?L%*f~`UK>QQL*|YG z@+^zcJB)ut+RCm4pz+#v)RGDjeX||euOyUK>Y;>DwO5RHXqLhK>kgEsk-a26EZ4Hu?g@TPyymVsl-(E@7#{lgDb3M|D z4Sj9TW#(2w5|NqB_ea+bg+up5_3VYC}oHSIz+SwYBiLl38d-9Qee6v2$=%8PGJ|y?O zk(uLfJjfPT;SSTb^Hxdr9pzUA>FFqIDYsZ*9{x2Umz}Dg0|2-HTtK70YH-$Ay45=b zP{tHGev!1yHYsgpXYKT7;H-2pek7q63NLs^R`|Fh)8_7cLwjN>XK16K)84CD#3XA1 zz!#S+%cRIROxPw8C|_fj`fg+Bl~#LdCz~wQ~o&$zSY_eLNpD=VPkmL55M@DS+&dH-~bQG!Wif$+GDLw7Llxal_3 zTHqF}_n8CNJ#iHLAyzOb1D1puC{1$f#5wEBU7iA&2qaZoBSgd-?E{Y>(N=uGY!9A# z^-6bpf7b_C_Wc!8OzjI>n{RlFFuRXDK5o)f!;4WVj!|sXx&zOn;H;owbc2K1km?zq zvD0C9{(F)cm6?j|yiwA5vog`J32W}q!&4qdXHSbmJ8jtDiRV=I$E5#Zq%$IBxGsEl zX@=x#@2cEC`;#mh#6Kvn?#%&k$3Ca$ol8b^sihVJO(^`}Wv9p-Uti8jpH6b3(1lkm zDhZZUbNOKO^{Sy&UZ{QLDA$63{DhxNrgt!`FpE|h%%59T*%Z1eBvO=|BUHF~&`b2D zz<*4`gbzEtCH!n#M>MAMC={+1MZ*5vSPo+3J0z+7AJ)5 zmx;c@+x|0Utcp7&17xe3^C>NJkaa5U6&B2xx|)x-qf}Pr7V&0BQIayc6KVr{2neQd zT10$?(tf~Bbh4FTM$P`80TB8*9IYS_-Z`DS{zgl7vsLr~(j)hlruo5JMq{cPvQdz~ zmRJDz{W&~gn~+#7$62smVFR{>$qL8yg&Ae2a+sLZT7_Z_aWg5KXmx8r8{m@hKevk`tNnLof;@vB$94@&H8XeZeF`k2*m;ZeX!Rp^1- z#GG$$MO9yn4>eSg6)-w}sQaBzbdbnaY$_%gTEd5lk4F!8We)w#o#*?Y6vIK^cmS@T z9X%Y9FtEvHAoGeOTU5!bqvUaXjMEvF*tu4ZjtL?BE>X}D-+@W^$;(pxWOw`5B+oF5 zz(^4;PF-A#Vo2VP)FC%<(SNPt33#?^&VR>#c?=*BTYiKgQL;c_=+6$+^X-e4wk`~e z2N}6|HpJJ6qpBaBr|@i^8Mf6*TM7)|Qw^ir{%BX{GEdcOQ=e*pD9$w?G=^8U!l&p^ zONr4sLydH3_Ur+@cPRNRyLmy62ErcSIxH76R`HJ##e!Eqm(`5So>wl1eH#c#^bsI^ zcuOMC2tOy?;jEZZT3QSZf#LS=QDGMw2GrjV$>v`vDbMf=9ANG4i%HXuXU^mFxw`7K zAeKmT+xSztVpL(D6ePLKSre%py7jf_1kRFSU0shlXX1!u9q3o_js44|lEq(Z&8u^Y z#nM?LRp@lO7 zK%txlRu4%^|L-K4r%^Xp_(lz3iAn}ZVM?XaX-vc$4hzR#DP2{FB*6pyTfUDN zG5l@Kzri;5L(*8k`Z!gJM0<_`&K35}z|eH}5$Z+Agc||h_xD=(H=zE(T|mRvgWcl2 zN@mj3i`nHA<*%bxl@-JTDxZ)T5wB^`^_x zL~_uPfNi*sPWFF&N^G4U!J=Z{zyvz(fcU@%Kn<<)10pDcWihWrL=ccGIV-eF=A@ zvMZxeEbJVj@bp1Ein^EU?f2VR1Zn{c`?ar8!kTrQf%KD~h2@tz!)HB}Ae|Gu7nt+@ z#b|5`z6eb>tYF^8B}HGb=-jPX8jz2{VAmzgriKa}bdsDuA0Uj+#82H_QkN$DR_`|#%{4S@Z2#FiBC04=suW3=BF(X<)=VmF<~;8G&fw{M#QkS zyv*g=3Czmq?0JGz$fJ`oAP|8r~GbwAl{`;yTF`85x&j*m-Z`tk1nQO|%J z0T?t8w$>GfM!`dx000074=sB0zP)^S`2%l$?)i0A`x=w&ln9XI%!HaRM2NG(9V`t# zIP;jfBFV59ois%#I@+`b;KI#1A-QKN2J|yr;#$qba>h2h4ye`LF^4vFCT?^Sf7Sgp zuTt+k>pc!K0ZyQr(yP1BySBTxMttZ-j;=AT+3gxvmhS`WR>n*}&z3lgCmYB7w8iY_ zZfxiU4@>lzkRI1arFii6zsv6dEH87s+GXkbpp#2(AaDQx47&lJEow)9_-P0ff#!vp zZ_|rkwB{_Hj^GSNa6x5Z_C?aUHWxDib}^n}9d4IeQVBn9Y|l#tQ*g>Rh^iFUr+|Kj}h zs<@p+Yi($!og<2!Ty1#J4&#-&UILKkUmmBY#eI>;vid!4COXarDxI>axJtokL&^F1 z&Mr4i#*ux)(&#+7wdM?4JSvbpJH-A}lbDh4+9~GZbt}H=WWv5EK2)ld^2=!YvC@bA zVkb?_g~{CW<1E1hBTj301s;}=3(sz2q&i*~>RLvew0IS_JtVCFZai9h@-D(TPI^~6 zR82I0>9d3MEI|6IR#{iB4Jd%IwwTsfTGD7p1cK$|?g?P*mt=~M9Kx<(Ah_c!)wD+gIc0_6M*3(eg5<$aEoq9j;X^`K2T!&5R#9$M zAS{;3Tk3CP4>5}VG$&&N(xyF8}o==L<8VjN^Iq- z@x2m(241*=Z%u*C=Va(MbK8Ir&0gruk|!YTMhe1Bd$-egmDufl??^P=f)?QH)HA9Y z@VcijDUxog--07}P! z@3>^5m^PbzvJ-FW%!$B#!zEbEw;x>Fe>4qfXUIVb3Z}JmDs&DPg)hQ;9cFPeY|j`i zp=lIocB6NW#*$|h=OA0&h{ZlNt z!&SQ&<@q)n^oEPomIAHrWSUHA5Nl@c%^YphRCYW3umQjVO;9KOVDb3Z8k4&p`H%Ej ztIIQx(#ntz&7u4i19NL-vM$`5V+!MO(TQcFK2>E0e`0vI_TfCU--S` zKNzOPT!H-*HP@m}P>nV;3cVi~M#1N-Xr}QXr|T;5r|c<(q`OTf=TIR^siDspP~K8# zP{8ANK>MEtK_Z40kE_t1a_J7+RW@^Aaq25q8#OLgCR&$hhM_D zYd7kTQ&4?IMVtI9HKQ5omBRkGRC|S04`HQFv5f)Ua+nXpN$*GkfXu4ji)9iT8w08% zJxI~^zH78tpXszgE~}yl6UvCrz{b4&dyQ(F+oKbp^|vPTsfV7{s_9z@^8k*}*nsRe zM5~_ZV!7Bc)5cMq7xv6gHM3YqwD7_U;vT; zN7N?0I%lRemrOt@oX1*}ETu@vn-pJJVOB;Fx1;w<5kpF<#TG!4l>y)#UcO})Tmnge zBc=sj>85jTYFim21*^Z{@x(Ax$EoAs1Ip?cP)VzEUm&Yxc>+Fz z0%uWx>(PB9yqX?wUyP47^y9F+xih&KJR&Hc6zFjS5O)S9Jh~%AU$&AGur0Hq@R*Bc zUvg~wa_v7<8<4W@x<^B+a~lI!A0+HSRcYjRaH1q2YQdKbk(DjGvs{mQLTZj&Gb?il zm6~JrHxn0d%0euEwqQ=vn^cZE$6D@-+^_qN@p+}Kzi2y{g~)?wUMr~nP8CFm>~U!6AkDmA(}Hg3_8TDmV=Sr_ zl;LEN&$A8+>Q`DWPl4eG%g+;)-H}-4um&#?GPbA7Em0IqgGzTHEz^7PbnNl@q79>4 zPxP1l1{+=+@YYEe z5@A$09h@s*OLqcXw*sNGxzWv1SYJ0*GmmXV4~76E$`6Dyx=$uXc(GiRbIWgO87?3k zR_}()?1NLIC~Fv$VtMiNee7*)91_+8kI*l1m=|6;Uz0O@d%wO{T56DNK-eG>q84-S zCM!JJRGtAl1v_I@vW1@}bm+QoI6!YH%P%M-+uG;yq0lEQpejV{f*#xeORMJ4>uO~K z%D0<3ReQ?19AyzobZ&0q57PS*lJ~H?G-(Zb?NiGfM^bZkQ9Vg|;dJL6VUAUuJ9k-{I1o`H9KnHdv-*FK779g8O z%y4}_E#RDt0@EtApXMxg?5_n2*=_D`%nb zKzO{c>5uC`&QgMRgc{<8{AbDJ|615N^GP;&SpYZ&!?m1h9Jdm=_o+ViOLzK`;=*5l z@436N+oI%K=K?{d0bi*XU(6?Bk9GeOmTmddnt3m=^+MxwIAKWsFJ(B-9trs@+k@~iGj?kWyi-up!KAW#Rien*;Ah+0- zw)vI7l{@i8^f1O=LVh__Gun2YzrYoUqp*p>a5z2}p!%$~9PfcaN;^90uAGLL~+)Ppp>8_S)qU4El?4H_7VjLeY zzBD?dGkIF)Ze=-VjKgy@%96BY8B@z2$%Aj_J6^-Rj#{vbskD}*E+45?!6}k)_p+pV z>Am77&99vtos~Qi7hw^?)D%D;QizC?S<^gzu2E4+-nS&Uw{hv0+ODs5oo5Oy-NFv7P$7&CL+n*gI zzz;{9+8l>8`yGx)pCX@&dL?Po+*XHjt3(P_hq-c0Ply#W>CNnI(p@XO{eVfb)ialf zf|NSEe)&re5=7?<{rFE)1jIy|-N(8~NSb8KQ%Jf_boYr+5eT&PcftWOT_0?a!ZLY$ zTl$q2z+Utvs1Tbv-9J=9$LFd4D&n0m%MTqEP}R~JJ}>%sbnZK8)9qVkcqyMUU&%ub zR1H9k&9)dv+&d9lDy-TDF1)epP!Zm6Tas2|NVXBMA}`uHcnH;u@&iGO3ji;;E>^C5 z>kj9t6u!he_s!tyWxb>Nw7zum010y1A*9>K|Gip-31#KgaU9tX;}phiS3*ej6jSBr zQVQhM>ukRc!tIG5JXf8 zkKGZT_-^gz=xiWHe4kT^VwW%Ctn9azELg|1cSgUiJ*S%tIEBff6G2z2mYM(1CyDcp zP_PDS4M7r?37%S<5V8sJrc6jl=?T@600st`@oRrTdBTinn9M-~TH|Wpw*eS585SlTl?7x`p$#j*001R%rn2g|{Xd@mK^lj#VF{m9guL&8^VHXs zf3HhQ*57&w0ljW2wjEJPe3#y@3YXbPCBW_jKeqzUkPmT7`wtKVUE2xEfDMm5hzu1Sf33fmaPl+2~J zXG(TIXUP=s&GpBJ|FYAWsy~?4&m3nKqR#T;Tv7B((T*bH4KTFmCByeL{dKT8SdEq! z?)^vF^x5HYo*L-Zvk^X)@a2p~wFS=W!M&{$DXLHW8-3Fm6PGXE7bGEPE4}4Y?P0F= zQw_2C1kV*ZR&XFzD(wtys5vYu$$rOE>$rhWx9$2+Hh2D_?fQP2m^Jbu5c>o`XN6#m zBftOvUe!UHGD)aGY?(|6KgZ99wl{+wnheJ=7U-cV&*3%~zuD6qoj^;5HT3^J1#(G0 z@L19>&#kkQSBbFenCwT@{m<1c+xd+5Vp5mqgGjpRZZf38DYi#6j6{XD%rdymkd*Fy zLw<51XTwxsVjxiDG?S~fCUZog%I4o@1)ZWo0hLc?IEIxVLJ{Vvm$->#a1Pd77d&u; zjRTAE^|X%Yebp=3@1||Id2i4S+r70c-@37e_E!%Yf{t){v+#}K@IzFMQs*gR*-Ns} z3S^P73McO_FV0vuY@Q(=%55Oj;qDZ1!g3cKhvIR!Ftn@E44HqMBppJ|>jWQozHhC} z{2=naM+z0pWvl;-f21YaZfg*M`WFD?fwYl0H?hpsq%pVLnfBo#V# z1<2O1>pCS@@eD0r&(APlJImB=YqX}L4hm|n^M6ydt(*4Gk?|mVj1H8u^rC-fc3NJp zaA@P0!}s0gu0l%-r7^f~Hpr3u>*hG}Nl`YIiEDvFk2&?B?#kMXnvKDO!<+i~Umyf; z-x8N7^}vziCN2a>u47o(0jH9joLfa{dXMunJ8n_5Z3I2AOb>R$Lw#0Vj!6s@q*`5-W3MgV%ijMU@QYsj$s1pd{IGLu* z_7V0QYtnN~ujeBQWKzSSYQy9lx`UoWOf({?FYRx_<=@f7au~ zbHanJPGQl{vwgEO-)$(HoFfDk;r?AyK$W3H^R&XZ&yDlEVKG$)FbD;$3Y)7YFUf3O z6aMB9?auDY*YU6SseJ+qY92qrJz$mVD->^)e99PV$8A*`x-rE&8F_vK-Vzk)&;4>pp|SEbDqEYBXjj4C2}Xf>EUJqP;+b4jGI`-YS+L{ft1q=B-iBN}I^ z`Ypr9H?cFtV_O!+C^{dRuHW){Nv5NFDo?ldoEr{M3t$`hSu)-$M(+}PQnoTY8Wera zaY+sTtSnfiSGJbGsK-HbU@1b?$uOi_I|zh8>eHHhhz@MkV~Z%LCfkpMHCQhjc988W z4_UJ_1via@<;-W4^!KWk@G2_bJGBYO$%Ybt5P4&LQ}ar9Q0J!41K)tnF^98avU zg@lxZ^Ci~VtKOsRQ+rxO9O=S8hS+9ZMv|=)po8~5QYp2~rz_EqgEBGbalu2+TZp+t z%6l2(&|pN@=Jg9$;F$Im0tYhx{#Z4rJBKmvF^jh+I>}x`irzkr$zUGbF8EzPyf+hN zlAb6~W_27Eg^X!p$mJSCddyi*M0Us)k$YvwplrmTy!>Tirk_S>dr;?eg$r6pJaP@a zcI(#X8vqP#nof>2!4rSwa{GFTcF(^t=>jRw!M*Md5^76<~?VW9-NO z`__8~_fn82lHQ5o=@ztM*+}w~uXRSIw2l^%2-R zn6$ZPNa$b^3pY-bf{Rb-&-pxDfrh>F&@vBS{Op+gUjH_gV=Ik_GRCSsf6TTC68N~q2lp&f2c9@s+O8!5=^p^^DDnh=E_IPGcAm=7^njZ zUZErben(4RYJ!P7o=}C#zhkp{E-w3T5r&>tz)nEOKiLjD5#$T&7tp>$9>KY0f97*H zR4)RH2CSDu2)#f?c=&r-Mm9W|jp%F$>9%2gKC0~Tq%jM!&#Gj#**kI7uQKys;r_cF zsly3sjjm@ZHgFC5)>KN*}+tjW$5cFMD% zUAqh4)J_$Av&Q2_W)-Ful_ubR{}>&^^RK~08NzJ}{7!D8DAc!7n;^@$3Y(EMGt@$1 zse27U%#;FQ=wL_&&kEm*W2%!S1poY=ut#S)vZI|5wSBAm4W@~46n~{Wf3qY-Syu; zwi=HC_YT$DxO~PtBY%j^!k_>bg#W{%*0`Tr! z@PB)T=E{S9M`t^ci=#J>0V$2@V*2LB1ijn=kJ7JN=I5}I$jfi8DGyS*bzjnwp(gej z%y8E@V5SY~v=i6(lAWo?QESD)RDUkkWn+?TDQTTSg4gTrJuz8@g+UtF{c~-dr0Px* zW=0nB<}*d2i_TJmGezs6lwhIvKKF}f%t=}v%L+R{RGYbmg@4#v+!K!`M5-UTb3-T0 zm17LQTB$tPy)9*#EQ9Vm!GXs+9R&0Tj&di9m4=FH3FH!5&H7mI)Bl5Dx-e5lkf^XHs3+*WG+}5rwk9uKld0-%*PXE4^ zEmPH;0y$9P-Q#Y=TMa7{#sZCdssc{IzO5n}z@H=xq9Y)Vig^UBusdyK)swczDr6Q~ zqoKOUZ{2HG2A@q?3D13?#XMbGM?b8hBA_W`tP$k#rwP(%ae zmi5XCPK*hBwG`SM*c;!Vj;oljU9_r;npPeO7zY_@MXf+0pz!-&ZB-n|sfP>%(ka|J7!QAchEG?O?XHo{NjLCHTLdf=d3YX2nwbs7Bh_9&qWd>E;>IdoUu?$clqv5TpA&%Cs$*{TmR8`h_-U+`7*;d3$x*8qrsEA|I zy@^--@j!f#3{#lI9m46KEXu{6=h_K6erbZg%Ej$Lm#1=fU~mPTwSK%+Gx3lM^0iBa z^t2FsTrolHF}?@K0;bQvoJumR3!&O9_aV=xxsJH_k^j0-$)(=Z7JhBW4pNmwVqUw1 zIH66`(#!!(O)dXJBs58Ft6Nbd(VB%rL}l82B`hn|8ejrCEinV-sp`9_^zYL%LN7bq zbvJJa5CbwR4^DOcXRDtVP@Mpnom<*h>l)SRQ2O(m`xbd0Q0VPqB{=tL26Q66WLsWepP z;f+prnU&dExAE?{7v(vF?= z2BHvjW_mS?L?NgC38r=kkA_M!cl1-_UVI+iqKT-bO1m~1+DY^_ksv(#&7L@Gqp)Db zVu;jnLdg?~jQ{KmmQFZLh3`-exymw&cP@x8wcC76ngbfq@2TGuuL6{9kzAO+?7wKY zG^F%yOLZ^yzQ8ceAiGflu8~QM6C-?{u@XZJiJ8RKEgks+pNpKVpl3W8I2i`L%|-b z*1s)Lf*1@mZDBk&|F>{WIv37YL^%45G)n(bF&)45$wz2X_*Hn8Q=Lk0 z;*a}V>u(W+H@evE7ae%ARc3XvTZOn{j1%;fuku0LVjVk5?eB?NL&ute_cCXnR-~cD3JWv0Q*bM%#1QI#MYdu>s zsWtj(fxGZefwIqP+m{jtyiHwgLDc2LCa6n33t@oG4i(r9_(wAg#G4svk$&ohYT6(Y zlm_Y`!eV_b)oaM%=2P?H1-+%y(zsdbekD99|EI1_&BBjhMoEA3u9VfciJyD9Qs(be zq&g+0t`DwBu&LujmmV}zoEBI#Oh~;`7Z;FDQEStHN#lv71D_`h*5ybBVbu}L{NqNw z3hc%a2 zsNeU@YG^*ux?73=-pwaxLhDb7vG5Gm&TX=Rn8)kxBKwO^S??0k-V`mUjMUW->KMbU zTyGH0KI?Xzk{A@y*zXJ$-uq@T-lWAZ66RO3=>9A{3@~@+Uq&QiJi4~BTV&kn*OX{j zk%lSx(T%U>H7etkNhTdSPt=hD0=1W@xU;R|V2WY0Zu1oc-cYP9$YpiayK#aum5mHv}HO{}S;?VrZ(#EiNqiHet*c8qkU{YeNAlD7( zC-xklxrmU`aLlfMx?q6=og2u0JXr2M%Eyd3#Z^HBoQ7)c9T;}9y~nI)|gqMyKCJMU(G zn6@GdaWg$%v3qgy5&9OM^3YvEc=Up55q*_;A8FUfa1(Ni;MOZf)NWk}N^?ixkIaIZ zr}K9d&Bf}^4S(Bz*8gX8uywZo&HW{uX9+|3rEo1A67&AYkk>CUMw~E5i6L(PlI(UZ zN#q68M`kn~Q0&|n9?blRC$2Ebt zR`Lu&tbV4Ge9=Kjlo3F`H_^d9Kfc}{26aO^l9$)5E0xNCsCsct5SImj)If;6Z>;Y!a($%jC0U*yMgGY5hA16( z!{15n6ac%$TJ-;l+YD#>VN^d}d>Sl$QkK*GS#h|sdoUV|ZoBvjoK^lT~TZ} zQE|qWQg(XSV8v*DWrV)n1FTCO&FK9 z$pZmZs2Ld=RifPzS}9j6liIr*F&Y-iuY$kg2ak_uaPcc40^jFL3*e%CA`Ig*_sY(Q zZi7F97=*7_e>uOqN*rUhMi-5_upvm#d9BihhUQl&3LFx=&6)NCKjF^g!IPrT2NYnW zQ6tYlEr-0YLChK{n`%Pj!jTK@H1^FLvgU{qDH2uV_YS}^&SL6ac98fnu>f1S%$y>0 zD9xK9c+|za>&EE_36I>3LC~#Tq~^a~HnM;Y2lpru1sUZdYzOdc{`4Y`-w5Bt-4+64 z-R|Lm4^XH?dh+NJ4ewV^+_5CS!j@>X;4#6LxCiD4ZU|p{-0m$JuKjUa;{KLpDq(1L z&8O%#%Vz1Cs-r6BOj;9t%?HyY3}ArDRmbkVc+)N5^K)x{*p0zt&a?V89%_k;4BSIn z{T=HKTlo+cW3bu{r9WFB z{Osc_cp>`9tM?|Fs%Dv~)QoX@7m9d`w?qMSEkMEWW_?W@#fj!vp_uHYaw~6bRmkttpp|)l<0)a$lyHUyiby7v5qh zx{ldZuq!M>A1}OWthG(7vq+iNt5aVaeg9fQ0g+&lTbJLz%(2~q_W%d)lPe}~LFu)4 z(%T_6%7aIW;hv;^i=_ee&PIr=+Q;qxTRNN4D)DuiA>Clz4k+Ba{ih{& zXBcG8h$ThO-KcE6LrP+HUC5myAt4>LubVt8PWgLNPt*6+HY+xxd&|4!Oe^NutvYN${S#>-= z#cWDSsIf;!7`rkn;&Lq>o+((oR1=0J1k5e`0dbdA_-d1nOEpnCopOhEE!9oS?l8ro zLIIO-*Z*LvvC-^u%jDRxc;SQV4o4l{&)Oar>qgbxr_B7tn3O~gFcC=SG~b-;ulPrj z{3fIA*RZ9T^9a%OXW{E&0bjx(2>rBYYlfxgL*?wF9ThK#42YZ9e(9)}6& zsr!&PHdYb8@=tM~eUcfaXwX}pLKOftCB%gpMR^pz`r^au+)y~>9YEC&$H&rZK? zMpV%66BKSf!}C|EdT~5L|=u~dfi(Z++=ZA*Gbme)8(+U+E zfL2h4()_X+c0mcOu+G!-e$WB{{SpGu(RiINDb0_4n_2Tas2WxPJX)fTIxFACt8H&< zjQ7~gR<_N`HS}RwJfl5#yOe_QupEWmC;&oGkQE?mNue;Qrzy#X+0o<eYWor3>o45yyG+S@delpQpzS}0Gc$@8OrJ^Ix2<>+hry$53e!qP) znN>}^&_T`*jUG+97~uKg?x(mn?4#qRWZ?+-J`<8SiHl@B(@&nchic!-2?C*|C`3%x z$hMopk|l?CXQNun;a5sK=Fcq zXG`yS83tqmsP;(^#~0Bl7fW-Vg4XqcgltN~d7v^5yAt2OExq(?DJBA1lQXX$_t9!L z^PSc!6}G|9?=V!KPbb)vI)HPm~4%m`(eT0m&By2PBvK8gg+egdC zbl^9}57v>7X!?J-&~0N737$l=Cz~&T9K#QAtnfA|nEb>sIN$n*{KAOR>`PAw;Zpn2 zwmPfI7?B^~|GsfPG!uE$jqw=7XAwr)Y!OBwu&#eLQYCy4Q)GqrLI+}_=+cB_;eDE0 zY!U&(4|h%@53r3+>c>C`nrPb(z6ig^ZE_7`;Eh16QJ5<5yJ(B{ry2SJldoXcs!p&b ztmX!l4&M%s)zeayz)tqCaFRt%GjIZ$A2XYtxY4B&$!;+{*GH%|)yeC`?nibIn|)qm zxHeWfD?y#jtN$6pWDZytHeIyzOk?a42Ev)SRs>X|@A4@8z2Jm@)J+m#`jjdzi?9Y!y(w6B8?xWebI2ZeTNYq;Tk1(pp6#TbQ`)eTjD!I^Eqn#<^jlN0F5xN;W=Sa2; z{%Gv}TYdFZg_%`ZI=pc>OYew?hn?H^pJL4Itc!k}RT6ICv_B%!mIz?jT5m9HLtT*H z_Frf_bhMtM-IaY4#>w+$sZ5#`WRB!B>TG0-(*!tKZ(z(%CQB#W7K1l#>RM5Qa4_lM zYB$0J;F_sR60l`bkJ{f+8b_ZNu8o)dDZ@|NV2ljVCANz0CrBG05zeA8oZu%@+gmJ| zm@$L2(|HU1(Zdr~CHXfd!b}zP!!t zwY~P?#VJ`Q&2o6qSln6WdZ~dMKBTz3Z|ZXo_Fcqw&^DUu)Qux#W4lJ~!fOz#y6tX< z7ARVbKypP2V?C0Z%7?<1YB*aAEDd-?Hl*C;Ls%)cL<5T5mzVIL8w&AODl{6h24 zH$0kK8Pf%YNGV6E8)VAy@aX*U;XwSTRUVb#t@w|Tr8kz-3Rg*Uat_ei97tl`I_3>h+m1FDU; zJYq*#eqOSotm2o@sKjtw$1AZKHM`NOv2da@e+xgbiEyWa{MzGDepQgF>{yo#gzxpy zTIK_*3!#W6Y!2qNEN!@wK02a{=Cq(LS7qu`y@nxLl)=@Cpw=K*kyTG*R%TwaME%uC zDxmgJzk91Y8`^3hFtEc8kp3s_>Qasr4w`WJs6<%EcdoLsGXB1O;Bx1X$yyQbcOa!# zU`~54EKfDoORIQ^^R9ExhXoSCxgL37AX<<8(}SsK5Z{85OsP2cew$=Nt~x3LTRBWI zEbjRkwm&T=DmIl;wBE5s;Hgc^ZaFupb$A0fBtArfH+L4YBJed)I(ud7Di!se6j5Oh z9z}`RbJ;F0>W70yENVu0XrF74b+LP@*@pz-j)Bu69%_9IQiUOm=DNG-hB_KZS>}U) z!g1_b-3q3k8J7(@6TO_dTCA;h`59eR4S!86xhBTWlJhStg${P7W@%BDS|2kzW5_o2 zhNNh8k6YKzHATP2IZAEH$VaPi@mKrEd_3#v$iM>UC89T94Zzbtp9(ESc^R`Y&dFyAxJl^+I$p>8x>8}6)U!lS<=#iR?c5)B`}uk zFk3eSRlfk&lTkG7FGwHX}CG$%O) z0s&Mf{Yn8KSmf&ZV#HBR5ShNm$=rD6yius^%#H$P6Ob#1gmj(CBT!rMErh(p&a;dC z5m$=dGBmqzd6mvS3-KI7v0-E{PhFS&Kk$3k-GB%NZ>TwFv&b`Qt|TK}VK zE8#p6_E)Gj>4{X&9r5A+#_HsW!}OdUU+(cl+-n-I8bg zjF0u4UGm79sC}=0`%#h}mS01!82}2pd4qW{W#X7oIlSsxeAoGiEokA0@Sj0_vQ$mC zY_e}L%a@`fY8Sji<8xx@M|igI5Ak&$MwNBa-xHX?ibj}jLKOJryetX-j-vQiJ)d<8 zR$%uU+J}L8gFZ*pf!LKJPIg@=t<`f{Au~LUlj~g%`3F(S2Rk^Dyx9PC5+TnIQ9uUt zm@WUz;_G><{P_BRx{Ww#JY4~*VX&0 zb4Gkm3*&L8OS^(Lan2etQ;RneEUBC24Um|F>g((|h@~zzH<&Lg86`I^>*mWFpQj?) z&uc%UXuhZW8N;5j*`7t4Ss&Me%z|j@a(=lLk1*5Tpjzp0lm;M{w;LgEg|29ORA85&Hu}r!t2G z0Esh{m7sT@7<~xPA}5|8nhw{ZXzNH3+#Ha(EFVTKi}!u|hd+=cdkeIQYKLf{f2Siv z$wsp4_JxqqhqQ-hl^qt5eV&d11WK48pK+znNhHc#1tp6{#ls=3(pmS?Vp;r{@RU6d zMsfBIE?Zc9k431#ajs4iJZ~G76D~#*Cg0#~zE!g;{2xs$TCU4z1Ix$b@^H{fBKxJf zw(cim^Q*@bnq4@H3|Q|>4T0&U*90pTDt(jyjO$48{!=6~H?}Z|gt}|^f!_TbX5MyH zHT9>>Evk(8((zaPB;ni2e^f1Ffs@scPi(dDN1r&ymj}{vs1_QZCQ%-gE8n_!fBh&AJQ? z|9oU;tuKnezXV%FA%trwpRC-o#|o4rhMm!^;9jh3HWrvCWF=X9j;Czy_m?4H zJe-==b+u8@Ik6i8Qiin6k6FlvzUhTE@)>}^E_NKP`%dV84`8{!{RyS<0A{eqGjGr) zE=caKJBml?{H413EmrR>@;fS?z=j@0^g`#6T@QlD2f9^G)C7sT)8@pMWWz5eGPs=X z8R&K6<%Te46{EuB&FnhR^!pP`FA?C9Z5pd}ai@v`Ugz(MR8CnR z4R=cDq=nX_cvTGJ=Y-=0x@8ToO>XCYhYt_W2Sh{}d;is+mC9<}5o7S97pVHcyvs zr?u-+>2v=%-4t+9)Qd!7d_E2nj?X8sp({d%L!_MiWv?C4R$zo@g94x)cdD;wawWTj z_b@b%e&}5*(eKoCQl50hF5CM^3}AvyqsojProFf>=jt6DcGRfRNHPt8oB$J8?WeS? z>sCDHf!j}E3iYVPH_IfFdDHl@Wc~h~X0NceMF+Y(*J}YI3VKYb(FkGI`bk;wpEnOu zFpjkPIIR&9@I33eZp8;CSC*rpA^m}C!LzG2SkS8q`OyspPutdPTV+*P&*u#!N)!E< zk@|T8xOu4g06h9L*&c^bHTHCJM4gzM(vG;CN1vs^bb}$S21fIa9=eN(-?P-bQ8GL= zBx@&>WF>|7pLT;NEbgpUZ%rXjZMxRYH4eBVvMR)u*Z~uTDi_VZaNNaV_N$O|ICpf<4z&)S4*v51Kz(hrXup-GXw}iGD{maa$(5Cf zX}mZvq3b5v7k(+BDLd|-gL1}71Un&#eHW;4!+T|QE&G}M#m0HeX*d~!614^#vLX6; zc41sM$zO3kxQtx-nuiIURuY4qUc86eg745?Lbu~6F|l3uAA`N){DhqmTjB*aDl}d7 z=xRN;5IpzRJ7J2tdvbd(wm5cwC2iD-i{0B}W;{)2A@H2gq>&t{EY+`naL*~I6t4&W z6_%W)VyToGoCA|Qgub^x=%P#&$Kh>ID(o}h?XIXe5I#O%+=3y~CH;}83XOb4hOxQe`-0%#6(%Rxk2ewUEsj2qPm8|HT^eeSka_zaMst^U%u5Z!@%_|+(|6hyw-_Z((FR`h8RounAN?+c&2C5(elB;Entma<#|Kh9J5t} zM`&l~VaI6Q!e%eKVxZ&#>*nBrG%!dUXL-Kc{R!Zq^iyPEWm+>#xO*f9eRrWc^m$AiDcB zd5YtzI6)k-gC4pXk)43V*oU*+BJRjbU}_N?v`W$5C08P5empeydrPz{_|-eQ>~F3v zWxXqGPvFV#_m`}So7MuXQFA-?VI^?wHoIckq74RDe3JfGA_OiL{%eHzEO5!Pzp$$q z2A{Qe10u=(rX5n^GBoiLgyQ3&cU!I5?-00*ZKemLbbVtDnwrH#G|TGY`M)48!1(90 zjDdkQR4iD&6BZC$+dpI(YDreUhSui|cNk~{H+$>g;AO?ZL8sjXNsbHnGMHy^Rr>CR z;t1Enk_L9o?z`;});4~BPp#%5C~%{X}*+3zA$Y@vFyNe@1 zY=|OEE<=R}rcPtQLF1z}Xxc!)pQEBAHZl?gh0s^9qF~h(Z~aAJL(<20@vM#;AH1a} z22krq;m7`|-C9f5&r!Gm@A2=@iCZYJ?K+jtiyiyN98{Ry5?ZnzA?o0M6G79z+%O?c zn6_DKa=})^;8t@#>nCTyKvZ?Lo4_v(FYdD zzixzfIT8h+C^(C^Ikg^B>H)XD5K`OvV3)4k^boY&{`S8(;fvgv#YKIpd=6UmK0h8P z#mnD&VG?to@FI_1`1lb2imv|)^?f9YnuDr^?4uKam!?OJm(3kQSezDA3hHE7n$MD7 zbZZq6wBBQk-%gf;&qy@D%@?9VqVpSFO1U1|U&4CI&BgbKbloMso`Ueh6Ej6iFA6ox zhThYAt&CH7WhmgTkXQNc2*`o4wHHlC>Xi&*QQK9I3SzuLMXvG~a*$7MnXzm$qVxGi zPUXIsF;|dZ5@cTz7l^tqIrabj?b(1s(A@qMDq)*%?_Kf|!>ydOuq5W-QGbo3FS>(F z0Lz0DTk3l-WC_smvuDsn$X(OXcR~}b+{?c zkq(+sDk5S$vMXOvm3w_0r{Bma)+B?=_aCiG;yy5x4`tHtnVqi50$l2qUn^<|=pQZb zr)0_6MEbm3Wo0kGwK9r!=FLGGkyg4sqLUg>F&VmpF*Z@wD}C#FSo=Giz5BIVBEfit zEe?c>!kO}RX#ZboM&FxE+m>4IF@@Ejvlfgcgr7V6l@MhO+E$fmZ){6ncHUc;829^c z>XJmzP?yN`%&h3Hi51OZ4rSCcAM8-hA3;|PLo=5;2F?^_z&;E^q)9GLmJaL9Fj zeb;dfoH>w_fTds!|GH=-P3U&Ptg5?QX|0VImeM@Ly$;pB_O_R|!DcL4qyJ?l(h%QU zEp~y1ASpK>{gXuDSA=vzs^J;tqw3IXKt-@lyuUV@{`&2~ZR)>wOKbJB{0`dno=6zO zkfe(b&!py(vx_va)=gcY<9{Hf zuE30T`fYo}xE8!S;>nbHU|+heG`pnSX}Mq@8E38uJHE8QTy7LO8`cVHqGX=lG6=-N z%RkW<^Qfwkw5S*2(@{6q9KMAo2{M1z#9$pu6=Au3Z`~w7Jn5N98aZJ{eYsz`RIFZm zgOk{lxt>L*ONUCbF>3MA9Ugbx_xL9<)d_$>HCQ9g>$}A7;2OWsu*Uc9W3P->gWIvuKxg$>92^o2D`wHvPogsd;_m(N$nb;;56Ile=N(CO zGrjWlOaVuwbfg)Oqbs{6`U3(r15`OZ8{z%2Wfy z(6&^u&nuR_oquIAv=Hho2>^t|{l+bi`bs^ow=jAY75Fm(4xawi>R8afTHi!Il@0f# z!UGV&q6rb&kG}nB-H;h=kOs^0P>g&wD&_Vt_K{1(`YvcY|0_tK9AOSRev3%h_2WmS zKN=8-KBuf-4x!E324i?@wC~&=VPVusxPvZ^1Dk`(bUQy&yYoapVO%-O=p%G?!2LK4d+AgK~GQLaQEna?w z{KvyY$g5g1zKJLiP6&4k$u<&Ki(8Ai>4h!AnbJzK5ToA4cut{Sr0YB&G%tswzcE>h zJ->k|eDPN=`?j*dp}2HFFbe7%jLZ%UGx}vH5*vQ66bs@* zhy^H?a$qvVU1B@Ba)9cXMa2Dn&qf>ORn$ND{Yyke;_{0auvGba^o>IQl@3Jponlu+ zSt_@Dq&X~aFGs^M&*00CxQ&Q%sj2vDo`O$7(n`$6vl+pmeDv?Ms)Bw0qYN|$?mXae}2sfOB!bL(n&{AM!Qf^4!SxZAH=A2Gh+_eQtpAQ-vQ zgP{cHaz`KsA~}8>e_8_lIdNY%8p;Z}xN-U0Uqt8Ivq>Cnl8)_5e|5O9m&DM*g|D7%Zi_8?c zn<1h1U5^MJ=ox6ZM4Gqc{Zlc`v%3lgc_@!pa_CcAkzfl6w|bG6s>79 zF-aSF*+%DpW3j(c!s_n8=<-0(QJlJGigYk{Q_PUCl6#j#Y9PseYxV?auK9!3$c_*0 zoz~i-dB~zHnCi5o!6wMf!0BP=jiGXowK2DTY4)&#zXjU1 z>uy%9nz^_DVph#VkFF50X()7E^oV1F3;$auc>ncUxf`FOTm8H}A`+4H+vXsM>Zf+| zr0B6wduwUCTw!)W9j8eBffaiA_}BMFkM4YH-Nhl6iC$o11z{l*Q_2{lg6Tw20kiwKzGT zCs|paIUwQ+_n^OIWQ{<)6)R%ot->4jE_7)wy`lFmRHWiT*Tu#FbQNLZR>K$D@J2bf zIhVQr*#77_39;x6k;JyI#M!){dPu_of|KX$IXLYBvi1Et)XpwKzrVO`kx>4o17YgP zDyBi9>z^o~G7bjB0&Qpnr_m9HpTJ2-#B@gA)8gG*q6M9cUqkLJrNcex^z812RpCaDYgy0cPR1ExmEefg@$ zJ1pdF_5ah#;i{aZG@+>48YKv}vU&LbNU)kb&0Az#@2W}u^7AM5NFBTj z<{MJE%7k%~BZoPOjF$Z-_CG+ds_`BrDK~*F*7qp$5|va#3w^#E3Dc&tGkRDQwW)5N zpQ>>-Uqme84v{VOgs)upvCz18Q|FG?a%6enGzjc2G!8zG*lxV*6V z;p5^8oMhU*4t(1!L#IvEIMo8xW#gdBr-DXqJAIT^#GPF&)vaef40Oa(EP&}!7Cf~e zze&{c^r8;(sIvm_)U9!}-~y2`7fEyuqK0?>20jI$D=ewV{kb&I#TK!i_(1eml-82G zdI+cBuwR7i{J6F@hJWJ}Su_@_81~{&gK9Jj;%;(hBi&xTQxv0#nx(z2_CYZvNUgGJ z@qNiUnl)Tos_xs%Em^CQvs$+OOA3v*G*MZAcg*GA4qC5m*%%yHXIK~d^nnS{zgE@Z zh$mCXY<4bekM1BqQqcIi>49lT+WEm&Oqknbo}V}IxRerhD!OnaEz7*scD%2s>aw%* zJduE&$wP^eWiS@-7Uvsnr{`XzX2ZUIz{gst3g|vvXMB%<-7{&fq=0aDNXSrP@gVjk zrP0lDS5?G!;2I3DqnV6Df}RDj%lMj=g6q7jrb}J7gWmck00E%00m|cRTkc|Rl%J|m z&ZQY5rvj#uOhpTxPho0)*dZ+Px!Ps9OOh*ZhfsN=-qIBSoOR|Lun&eB?=#=>Z_qab zOxgXMYJHUD)I%}SX@ajUaxeSSIvYc_BAdRy(nRyN2(RiMc(37pQQqKH4l=+5(F`MY z_#~t<`E^aJbABgS*syyfngw$NAEM^b+TM4?@v)gD-58;#Zz1w3eMF!P;p7t&^<)LW zb;rFg2{?~E^_Xi>Tro2GvU01Ia3YT2(X@T9NU*F&7L6P~$nn)Ts0o`2a@89Al^~7E z*wO_vJt|Zye*O4&l5g`?Mq#&DTby{pixN;hjV@@Iswr~)4cX?fIA&P+jE+rrpVg+v5fm%Ktx9dBk^MAr=K zr}}KvpYgbx3&2#Z+Q_f+{=%awYQQ$?O#NO%1#@@7ekde%-iqkfoKX_+N7j=^0g9D# z%saEWDs5qEFVQkRyR@-2SMyAU7X6xxoRda#w|oSO6U6lwbpiFr0j{+C8UuAJ=3F;F z9Ulg@Jd%{zCu(p2gx#04&`ZD-=0F39^P2kH8#S{ zIYuO^q)lJD?z#$)6bi~F+JF-OROzy$-rGaFbQzCWRz>vW6xCbI5_ZPD zkBzU0N03qlvO|+)_6+a=Q;o+5TYar398fbIOb?bPHLYzE9VDq~jfi7srHKI3>Ri01 zHvL*SfHmC^eqEToiRL_A2RewDkymjC3s3It9Dn4B^mDy3VsA&O6anJg@XP-w9~aDH z%X4a#X~8l`-wdv&_}m789U}pEX`SstDjqiX7jubif-Cj^Y1!R_TN|PvmBQavd|@sT zdaLg+6dyH#x(OFir#8w%C}=Dg5(f>6i-q{noBGFgKlLIZ7*n z9bd5o=lD|xWEeen3CY#`1>_^Lmr8_+RDl12gDNNNDy0eO;FxG^PxZN+Y^$9GpeR7! zz0fg|kH7C(aDe^(Q9^1}ToqJ>`%g4%LO&@w%+L6Qlrdhjxn@GOx!}2CBP<$Mo39e+Q;FBEA*tv01iK(SH)GifUx5< z+LL+Z@*}X&GldPIfp6%`1O;M9Au9dR(*N7ss>ZuWZ?~BoLwA`yh6_bb`(OdCEXi<2 z@_x~GoKu<3)h)qc;CDy7q?{~5Bt2YAE^Ql`v?^kNu13HKh9WJex@N=;CwKZQ40RR% zJ`kyo_8;RVa$vrift~vtam>D3gh&PhYA-%<<#ZlAH)*(OCJM0#2sZdK)k*R@?edQg zy7AD_fW2_v{h8q{fHmt|k;6lVttN8x`}$j4JAa{<__gUgKZuPVXInz{de}cg64K0p zKs5qFtv#YuGK=yBu-0I&PzZ7n(7Z24PB=@`*ryi5!B$qc(Kh}bwUo*(@PkRKu0Z`{ zj>Qw!=^b;#;AuEtG->4WC14jI@ny!aLtgDGupoSnH$%MT!^rA3A_uk1WPzZt%VFR% zf3PFgptDWj`rTGcmu>?b+u6!=r;%T>lBwEdZIih%=I&j zAna4e5$R@d`d9t_9y(euW-BI>kizz~=?-^95m$XNa?rb^4lGLCSz#i%>>tb4d#X_t z%FoNk1vx^X5GDORI>M(^%;qI~9)KIIzGB+cqV1AG(^BK#oL9&_mXN7*5E#l=iU^^L z?Qh&hvCm@!=z^PNMWSh{{m*+CK2>0{tD96mI~U5~WH)k7ny42RY#nPsFZ_jud?l!3ZAW zNG%@X`5~?QT=B_N>SKM1$0TbVK$zWBQ&25VnT0xTcTycWROAOArktg5RvF(o+eON$BvM-Dha_d!Y!EjeS>AtoGTSf3yc|k z*KJodjN*a|GPhkDb$T)8rmr%~G5h6~@KWS_BUUC8V0*KxgxF{aRhHZ?{yJ!b6f?3m1Xyp$Q{{$7v7?e>@k{jJGnl|-k<&@$aOvlkVLE}^nx_+7$4?gWkG*R{|aaTSCS|! zrZ*Z3zhAZJzkr62v0xVEQeQL}4=>5?})942;7x#etuu;Wp5h31FMOg z23I(HEoINqn)UE97*FtthR%Z(DnG=|WcGk;6GaQ`aOMu=>qZ!&hStU-C#VG;=-#;nR6#_odyLjp~1<*YXP*0Q?)d9`+be9Z;ZdjgUB z^!4U4SPMgTIL}$rK~=-el(l_h$cb3Zi9dE`EPqe_)JA}&{<|M$cq@I)CUA7EW!Dn- z85g(N%HFh+`=gAm#YRU2n8KTs3e{1Yt%d`Wb`9~-19%tKdv8?VU80u?c14MtjDNS* zHL9eJ=;|9hFXHmlp$=N*OC_n(2Hz8}!-h49RJbrfo8@No7bFub+r#;!c+w<%8!31yfeyktm*^V+HK} z!&Q>uHWUS;>?bH=_$|KcDqb5?7o01RB_e}W!+SOzi!Q@)@A<$T;yhQ*W!;>>-afFp z5>2t7hsI!;)pT}P1m5pFB<+lr?Y4V;)@MNn?%M_$JC0F?dtO(vI39Xv$-=n{A1DC4 z>Gz%up}E(K7VXuws_k@Z(n(2F*8&`|h@84{E9kht&1wBS66mLEe6Jm}J3FFpS>%^C zfU~|)L<_JXg5s}!k}?-0Sb>y;&SA6a$|%~JTCEiB+=$gPUjc9z&In4tTu-Ml-@H#Y zwp;(~W?z8>n1RL8qpDCg`@Bk{y3SD4QO)U!v{cFDp~Nf9X}4&+>Etmjp@Iv`e1g^? z4j)(uD6xWU3v<7iaESi2vAj-#wGNR-n0=YR&oGceGYJs5S{KR`)DF)om}Oq&I<~VA z)gv1|-3JTBfdI{@Gh?CP?u_Y`VBd0~ieO;#Ludf~W#v>}NdpNLh4{Xiv`7r$w$S3I zDwgkxd8KFw2)Ab4Lc10lids4UfI`#1x=Qj`vf(OLa>Ss5Xz3Rh66tU>XX-%JoYA$7 zWBIN>x?j)}O1F(aRh{4RZ+M8K$s^f@{=voYk)kIJ3lF%qO%<2r#0OEfbDn`D%q==M zKS+0SYgLf+02KsTf*kofUWhnn!4+Hlr~e*Ec69i2Tt*#*``NtVg7TbTpjF9XTo$&u z>(w5gwzd@d0%S4a8#>}AWB~u;ty>5%YVxy5{qD;n zWJ8fP8W`fdx}Vhsxi`#Ur&jr8m+(M;NH7p3H=P?YvE4wSq7`5ai^|My7|$#B;E4&! zm_r!NFL8f{Ky~(`gnJcdmu0oW*w1t>1B~Of#a$Mup>ivwX(erR}lFGt$z2g=U}La28I*<$fLh# zOL^o~Cb~p`Jel!M)g$&6m+xyt9Lb#?G9BWqvZBXslHVA3*9zX?)AbhM5D@m#&exFz z4v-UI3m^jTtC>X$fezR8TO5c_a8FUbJ3($pfFhDfNoM9objUcPw#nEgO$;ue3Hx4pu?9P;>xc>z+?vb%M7<2*SQ0G3cF1}9MwkH1cJz8($~-kx}OQB`)q_10C-4Y zoGN~%K8s&uk8H3Tf*VUP3Hs#zI`RU!2cK3Hx)9+u&YCm9uJvy!tMQDOg5dqT*cByL z(;SQI#Mufd{m}Tk<3Ju8Tz^-ja?m4rQnr_) zF_hQc({{&`7O$lLRGuzdNl}1SfgVXf2o=T7FwG35!UUlO8}a^jRpMqHg9>ljZ}S(} z8d7=<1?Qk<#qE3zD-2#PN4@9QY`H5b+Xer$?qSM@(GbfcpKt^s7^g$5TnTf5d00 z&2k}btY|0!g@*^{M9R>_v2$*Iyf1!g$_nPC*nA!L$<49tSk!Xi*NIvEo-mKmBTDs> zpyx+%_P+_u7kzp9d{|_)B&GLUrWnwy0c${(0}v*w=(f}Ww{A3fzVku`DNhQP<~@|9 zn-pdI#I}D<%_ANAW)`Iy7jR0A0z?a{aFefbZ=39!TN6fJO&f%rdI%FMNHQqOxJk~0~`60quN}p*pz~Qz#tw+JZ}d&);lPN+#~#M>wG>R zL7Rk=a~bX2M|br%faY;KOq5(QW~cvFh$uo@;zoi3p1pLv&r6e#+ihoZ!%dq(z$8H5 zvH6yI-}x#|MS{0%xS73f2wdGqn=lQg=P|4p;Mx}%3$?37TPUYDj%M}XF$=|tZ9vFB zq?Tn&e}XQ{#XmcpMwUuitG@Rfze$rMzoU}5FYwNG_q3{yYg7jT6dVyqh}zChWl-h_ zuZXZF#dZ>dV!GA5s{Sp5i>GeP*&!tS2bCE9HWs4LlF^+jrH+coDz4cbVZaEG2-FAD zv&<6T_|zvM_X{E3^%Wc+J%|S`|GMBz-PgTZT0!Xqm|(wnD!yFOLoWdfa0Hf7a`}cl zU?(nhr~fK$3bl7^>;YO7vf-vK{Zz~9f!guNEF3RwqIn11h&}~PNe~QAr6T}y+Y~O3 zA-<_2X-}xyR>b>T=DOK!rvJg5z!8E)pTM+!fj#3VN;Ji`^YHd(&TTLNU|lS)cDIwa zhI5%|9P%)newBz_%s;y+44YqEytE4>jRo4&FAR^8mxS7-dCDt8?haQ2n0(!9nU zS+QsWKU7SeFq}3rk_>`Q=`0e?5-q~yc6i7qT5j_r1pA)Xs&B31pzvyPRZ}VTL4})) z*wC6f3r48QICroBW?d{&(-z1#D+3|b14r4E z+pcnOIlhFXh-537zNe}px-UE0&wtVzO*iTl2Lr)y#--ww_nX~SQ&MXOa|#vY!+K~a zf%-Es@6A6&?+IcvV=Prz)V>iAy#w-S%!G)cTwrMPKmVw@Yf*&}WA9U$f($$F(DGYa zoCnTv?jI~T&l|>da(hUS1KKEBQ@zNm=iATR3uai-auPAT!E6ho&$2LBT4Y2y*V&!7tf~F4DY`>@{}SFKXLiFkWVzxIWMyJijI$TV2;?j{6~RL zp~JM0;VQJn>c%^$<5lB>t%Q*72ZHxol3mY5Hgt8QF*BD(@L?p=H^S8OhJSk8342y` z6d3LSe0j1$`{?%|*vE6dxw$q+yrAZvXHi|5nZqg)w+Q<$gkE6IU#Ao%F;L?xrwxIC z2fNZO3{AJ!Q=N`&p8?S~hPBkc%eG86&OSvpRN|PqA&41J!z-sRfxTm4JI&NhzK*YV zB3-w&1xyAGZSh|S68(RIuW@G`mKve%CO_?DF4~Di7>%uTbE3e|a|N~BDb1<9PicuR z9}o(|o{QJg>;V{Au)+4S6cLsc;thpKc$)uoM2lS>KzApqe|X2)*8K}QKR7r)-_C9> zU5CAQXey$gp4+LA{P_v2X{$D>_1)(envx-E0b_v+Z%#F}@=FudBt=d!{nK2Nx3mHZ z6-Ld&CurhF&a?SP(+CB+(tH>p{kP%Nj4q80JFLM6#2G^Y4~~>5(vMtt7e$Xkk6U}v zQ7U5O3n%Cu zYz$CWYrY;+I6gpA>Yz90<7V}f?uU^^=YMOi{{LotH~+flP*m|3nxMaJ9L^*0*x8yW zV^Z5~JNecDO|3n_BDSUhDZ&l}3-N%tGV9r#^xsQ72=(YxdrR1FP5&G&?UhMQ9Vas%Z{ ztlIAgk=ZI3m@z2M@_M(R2yYLV$mXPN=kkC_tX8qLYWEfO^q6}h9oU1cU{ge7K z7c;_NcCuOB$sBj;f14KR^q<0W51;n4`HyN|IV%D3gU#X*`=ZTQ@?_Z=tUViI<&!>_ z=KY4lDz%`F$sbj%Z{hM&pH~Gw#ce1dO~2)PGJ{3|2uAv}ax0kb*V(w4ji+!tz!l3@#Zpq?= zcp>?FiRnd0J=Kg7drH(6aJzlXqep)gbe0adyBrFQ$ZJstSgdJH?*iy!TdtC2Z-5+` zGvqD)l&tMABuNY6D_y!D>dv~f3z}*jEd9Ad4frxyr>bfVA8j{Ms-&Oh96oV=pR{DZ z;OUKjh`zfjogjBjk3C#JXT4?!P1+4}9d}VWgHoM}^u7Rca*jWg$l&{nkJIK#^o%(u z+wm@Zcf98P0JL!na14XB&*Z?rjW(u@fptLZ6IhEk%V1J%FC&t~D1pnCPez$qrIQqW zaU*G^scKOba|+CWAY53r9H>*;kV}yUCJLVDedO4C?C;l;R^k2#hSPeQG7i8@{m7{e z#>xgaCD1HErL*whOp`74kek)HAnZ{{~=7IJ^UqVx8L z3vk z7UU1))3h~dHPRp?uYW|}4VKiBPj50hlV#T7aQM*OjJS(!{1{6?`nT$BjR?3|{wSMt zF_39erE#?`{th@Vo+D068~eAiFIw|zMWU=jJk%b-FTWptA>8x}pDlywz6vL$F3BRu zz;YtGH9Qk^$Zw!g%dvkJ<7d_~IcnxyeXp^Re6+xi;b_f(>8AjGbKCmXBke>t;Qd{ineo9-U$CU*oJ!HDj zJ3M5fXXM=W)Z+%UiL#M|*S)y6Jgc=ZcTXvRhjFFqH^$c}CZ6nPbW5;hYz!Q?uK`vU z2|KZOoP9NCLT^n&cRD43nLizeN zAqahHg@noAlnges%gof8Q}mARLhLXBOJW)M!XgQ<13KkyQRkKB}OD_svDDeQ4&*JxF*Ir|D!7J_Xt zKSrL>7JX@o({9_rxQAU?w{JZdrG*fhB^2H076ivw5Vka759~qoLPkEWSjMQ!hIDSqB&tACdi472Rl{%{6#MKnPZcLbCWvDRGKq zxk6I@b+kl(8emxX0HZB(W255paDAR9JYhWV*hq(T@aexD(L*8_(KHrj16$8ar2@;3 zRs0gx=h}eoiqx-0){Ty%j5X!bnO4K}{b?)kxT`YwblyM@OQvE8>>sGonzL=B$(LjG zvs_Fld!vaxU|`FF*R*lG0xjWkmS9voiE1$WlI@n9P3blsP;5 z{|;c;Co9|mIYmCPYfY4GfG~Hspdbt`fL`bj&X^G4LTu{+D|Rx_=+Xbxecyk~HG%?4 z{HB`?np=Vx88%2ZVfGy5_PZ!{CeFa{o8#YM`55>ZxP=@jtcp&e2lK6w+GVz;Lc@VG zKu_iV^4I|mG2%t+B%bTF6Lti%;GbnQ4ZHLJf1WfDxW9Khw*lABcyTXVwFlepY zWIe(WE-642@vlA6vKa~>v4=k=kS#}DXsx~)r&!I)^sgY92Qk=)1i=>=eVaT?pA49_ z84DF`7`Q{yiA=l(aX5im6~m6?udCeyGVoTWBKq* z0(?qUi0QG=xpXm}53L^aRHw7|l{b0d!-dR$D+z2lZ29+b)_Z-VtwM1KTho;FsE73T z+BfF<(=!G}Px=-u>XCZGCs6;&T!$-mVzOu19Th55otiO?RMv7o*87c0`t+X!bk0gQ z>7ojF`gd}D5xJ;NX95a?qG2@sOr~8$Kq>{W0M1|A1^@;~Qf~Y7#%ttAyqU;UsN_e7 zwuwUEgRr3gn#;sH6YXt$-e&a^;D{%maTkI4D{o(x^9$+zk=X&H4XWLvDF+Af`_hn+ zG1Aci7Qbij2cr*qW8c0X`cVkIniH)Y-Wt{F_vq5WLnH_BDRJy$)OSaDRj|QmXw7n< z8K}k+hyVPVXEX;tIVO6b9z91aY^!cxqly9SSmB=NyHvFJ`0;Tr5v?>p<9KL&Jmc9F zkatSUJkJ44QVlH=X)?ETT+RSn@I4&@52C&`q%ZAK9joWSX)Ux7-9d&V6YeiSSa%wX35XZBSf?c+(d_WCjw_!rckUD zy@UlUwjUC4Oc6V&lgrg%Jf=xpBE!8h5vVTqv34sURh)-pD>_YB#0yQTFV1&QdFD$4 zQ8;3e067In=Lyyo7^?c zB*jOk%}X;769l%x$DBtX(w8zO`$iRr+O&#I2ofVB6Q8=hJV491Iq#K)rzZK6Dzi`y zF152~m+2K<6%7omOb;_aHbJ+j{KGlz8Q<#{h@I~0H@kwW=Pf!f#KvMk;YU-w6eni9 zn6JU6rp>npsgFJ;p-W4UJ~d@ikC$kSa%XSYp(vIQiOrSKfiY+*3sLm4@$s>V2irfNStSXQi{V6 zJ2Nsl0T?u)7TOyP3TXfU02g}H%gbBG{lMWR$PtE}(m0A`nru!8D7Lf+nbFonW~^$X zcx1HUIzs4N27QyZhYzxCdw*%_j?+J3AsBpzf(c&SXw; z3Yn!J1k9J5K(fJ@NFp9$I*E{r+ivw@`f9$2G%P&sip4Gw3>=^^4hk@bPn=Ml3FtgA zrujz6;f(A#ujx(P%>kyGDgnr9iXZyl% za-?*vV0CI`NI|e34soG0nN=$#&$i)CL6@g1u%)Mc;tTqZ)s?ULl-zg)SVvN-RSVa# zkw0N8?r_5_X>6JhL~vZ!$yqQ%#3;MlH;0~vDE+lZN@f(n}2egv(0>$nRrLJBmU*w9OYrJF1TF4>=izK)!FahWwvT`zd zhK{C;yJ-jb_lip=>`uI%lut{5TBqWVY|cBF%H<)vv^@2w`p?hON{6#1$KqH*jYe<7 z`@Xa#3Y^2Vew%Xvl~-`^DUOWAc6hR_(h=!bge|TpbRYr*$gxqmB<$0k=ucWw+a@m*4&NJY#^0ul#^J}yi4VE zZSPDZ6xL2|ioG~Trt;kF?S5*@?H3H>(d~}2b0cC;xVlW@UG|wvaZWSos#lT747bL2 zQ=1`mk`Zs1dVQ1Jq^m@OUVwiIQauxcTZt6+zlPBKHZ*CwSw+E>a)q%pcuQoe3$1w8 zfrHnKtxEeM`isfpc5u9hSnyPCJO*5nTO>QKSKU}m5mKYXvv9M;SbDj1NRW9Q)@fD@ z^-R;^*GLab*%(1HNBFN5$0#B|ei>n}hNL#zu*5|`ofkH|V8u@}>SunpiI!$P?D1*= zS>Lx6GV_A}008`&7CPt(KubGD<%snJ|wJRTv4clm5T5D&(KSNJN+$p7kAM9e+W#(}6_wIX4Kxi;u1$B8W;aerq+ z6m}i1n|;c_H6)k;mu3HpR6vi>fB*oI;@`#@nOJP7Bj~85}K8BAcm#xHog(vsnZ+0g%#z~W= z(Zv=_vHQYciC6N0%1S0?$!glkI%?(p*8>Dzyx~x3i|T%vuZ4A^CpH;~AVcTQ5x-iMLs%c1DA!DItF!k#np3L2krWqnDup>xwL2S(DEr6^f3Eur zmclROpZ{)#-tqy;8M$L;alKjZg9cMdhn==4$4%260gy3GQ1hU)l#uBpx(mf$gJxAuvRluId9Z`fRWI-`J zvRv?!_TAK@7-M~U-eV9Tu#$b?xAB=-S$wh&L_P9F@Xo40pzLCcsF+o1YI>O+lc1wN zW5;@>gb0D_3^;)H)B?Qq+zC&$)W`DY`i*zMj~jcEZrN=x?QIoAvmdL!Us5(#9g z=WK#_lbpW5lPfa|>Z6a*4>X{grb%ZHi~L0ya9KVKbVh24J-$moGP2;}P9T=Lp_?e$PxW{!a7m{(8y# zqp`r8UhxF^>1Zy5IaaEFgHYzsXC&@==to2#C0U+j&wU@xw1Eyb!)hIyF5Em`##kR- zC~l?9p3X*Ah{SzKrPuoO(Q2;)-R5~(sy5y4*K-10KfZBUJfFthN`Q*u)-|UI4&MPm zL9?J1XJDOHpL#E1s6TCnL7ISNv8WWZYqG4UBXKV&NA=EzhRDYOg0vZT^ojmevQ!yV zP#1}P-egUC{iI;5dHZ>&jT7n)N?WM2PU*wr+R-gs9_6-V_`vh~fY~Ej6!NizJwM8= z5HG6Sl{fc_kF(&`eN342g*NXVx_v(@O2H570$iEHtQbE5N5xwYvz3MuiEoAZ8Ex

ZF+Cp6$DH|0btoo3veX^TT6b@C^XR-O?tSma@y!aIo6b#%{sQr6rC~=;hYRR z2@G#`xK2EDzn>=c#;AiBR}i%)ftcL9^@=gd5E{U`X&TNJ*$3`~WvyuV*X+TfzSf0M^Q4re3aFt^5}!-Qg(| zKzunSVys8bDQttp9iiXMRfg;Tg{oL|pILJ2lRZZ` zgzp@a2epZR%~}cXl0yq_Qhyiv!?z!3BbPCeGP8f`%Fwy~?_*m?JJ8_+89kM_3Wt7w zsE5rv>r*EZAymYeLG|r*QM(6ybdr7p6F~a38IYhY)7>K5*d%hJI~~{WNbM1l@uPsQ zENoY`(C2UlYhHYF`Z@7}=7RKMoXB?nUG#^&T0#=&S}Q2Z*W9eb znfv~rk(|Wo5-}CK$Ct;Lx)PPqjlb-kW{b31EOpDn+gJ0UY+2I+uD|^Y)?u3Q_BM{- zE=qd7nd;kSp7N}HlBe#@L~7BVxq*v0>;}fKiecwVb zEe7MiXH3v*WuTq;k~VOqD{tVGw>M~8Xks}x0fEo%zBR}*Nhh$$b&>ziKX3L1S{ssY zkz7_n#eicP2ph}B51hciEE?XQqe98l2X2AtdB}h%8NQE^b?cPDuQ!K1`V8iUS}&X| zv>DoQGR*Fu6u|-u=-vtq+r*pJ>MjAEL{cB6VFYJ0OvGkLlsMgFQf;di~?< zE??Ou%FVox*ti#Hh~{mURww+@OU~aPkHv#3F?hKOJy32!w~B#i{_t7bJ9JIwFIvdy zi8-{GwWZ2`LctsOb7I#2{Bbgj@hJ>DAaU_sML$!ohWi##S^5l80|Y-}@UK`Bc4%x{~7k`JuG{f3W0m2zH16f7@L<=1l@k#WEfN>qevhYS1 z@PhisP>a@_U$k?ryZGmL?cL$G+n4c$nRQ8;D?5cXezGRVH-PL>{^+;lVKnVDN8s@v zINM;W<>NjX@=#$BqdPpKNit_Dkn&FmkB!&67a`(ty$4|SJ+;x+ndw3Id>!)woFMmg zLWZzk<6IL{U55UkNy0o~h7x2GHEGf@_BdZ&vyemNpa6>|+)zaPu{M#Bpw#^3t%k2`2KyM@JY}NfyE!KW$A+oN?wa^d%u4k2u}rtt6i;GEWPL)+!;Mg) zt8@NTI;9=_%Pw@N|W z8yEwsrZf+5;uDMW8WFHWf$j|@_4y@fCjzerIh@{IKFvLN-G~>0Wh}MxNu%;dx)Gy)Tf% zLe-Y{b4zpf{G`0UuWe6gMF5Jr36YL%-#E;x*^;lI`&X3umda*QuN*)^>H@Mx%>z=_;3oQ6SFw zZpxQBXm4aUv!Rx}2Xv#*bRWl2z7g5$b*>ZR2wH>iRzH3b|)mR(c@ zknaf{T~$*Ev|U*y&SQR>nb%+l9?F%~d+Ab5-?~7(8O-R+W=qnQr00e7N9Yw}gyZ<7 zuazRRGyDFpR1C~9_NFl!Bzbb|czj;5okDM#E6p%D=$E*cBpe8gk$6dg2&1|iy%Gu;&mgKAs8fMFLa zm&?FFi-d(=nCo@V3#aUWQftL?PnmpW1~447ggD-mPa2JbA$wFCT?&zwCq*D>98A6c zAeg=V599r3?#5|!Yju`7R`*jy$!8-n#*>G<4CW~^0;$$NoM7^YaJ+oesht7E5%5;` z2Lb<_^8U=_4VJ10Zv(H!C7|4X)=4A>O70L>_4HK{7SWwtU(}apTwdbo%3zx(Yptee zONRi;f`uuPn7eVa83FE^S{2)mt;2j6f_8{Ha5Ob(kC5-GbPk5C2Ln$Qh=sH!BrxxZfH$S1sS2(T&nlR9$6Y!R5|q|DM!YcTI_FNl^e8e6#gg<(x9II&_1_{c zkJ{0#;Vd2esqR)os*27fRZ=dxMplA?y{KB9@y5W!Qxdy?6vZrrziEvdO({92fu^e?DUi3UGNsAAeg29YKhgq|xH0-C|0sylbsC@PZ9c zOMmN1LfV&r%DE(c9I#SroS7PN^>h?zGdKGxvlBPc>ngN4jxcY>kmc9)ciWl99?mZ~ z6C4A8E($8Wom?7n1s7FI zWqI7^>~r=ii_63fg=vLI-6lN=uc?T_f5FD1>5-&9G@GUCUWJr>%1@Xp1>Ku)iSlBf zs9)HOjpc-DT-fygKpFu%3-lXIQd=-`_BCcVYQra2btHB^Nq*FDr$BI`1U|b;vSAe_ zyo`M{5rG5<2OB?Lot2QnU__Z6Npvx=r?NZlVziL#MD4sIQw^Vl;9v(W;!dL{l&+|f zu>zGL7%K*rw9{c0QQIb`g(q^XwekBiW0k}+Z+*rB*+CLDSg?zpV- z>${VVqdqvXJNTEc!X^0SPz8a*^-#B*yIfBfe`sj<+oC2Vie^}RBSsAt^&}K1W)If) z=(EHUkIphB#;OS){2X1-SuRGwzMw2$3j#GoEIFXCJ`^9lMqE{ej_fGu~2kf~ogAp#vC|X7TZ{+Q#@m^1Lhz1g%WdPc!|(pQ~N$ z`5!Z|L@_d_4~mAush!r`6~~xt?lod`1=gImUN~D&x=#8XbD$%0E3)+ZKf9kQxfy%o zfiuv`W}N=X;s46w2ZIy##;1~Wjmwg<776uUGA)aWk&`QqtT9`?kQ(W6@J=AX2DNmg zX(zInt_^_M;;=m0Zigl4A4122s|}Yg_8G8<`eFu_+lET=@^cN%jaxlAP1iBS;L+L! zrXD;e!C77ldEq_)wJ#nS7*!4g*n_io@r{9{8^-!b17a8&gq3Szz&F9i2`7 zN1Vx#g{jSjp+ys=VEdKJz0lYAQC<_nn_30rVsg{Z_E`!{eMmNrEDgBZLE?q{6-f{! z(Ld7J=IH}6lS_FjJD*2K5^YxL{!49XY_+aC9?SC-!EArTcafg|Szq0Rr`G00GEruT znd?TPM(2pu7E*<<4SOY((K*bPnD?sc6{wmwp0 z0k?@gN5(#g55%RWtXgBeKctaChDEeCBZb+bMl8F^+Vku}fD|cRgF@~<^YJo>og8xc z7SvCrAz~JKhhmZwL`d}|3q(QbK6uYTd+NV-{xn75S@;@?54PesblA6SRZ8(J)*S6^ z6jkT}b?{}pLdoaH{f#56E_|%`{6zHy>T^6&Gr6$^s`pZ%o-&+0bL6{4 zaw-Ru*}|K*&py)|q>0ESix6wnu$1L~1r!B?fH4Z5GV+@FfY^A#&B7tl8py}=BT2|A zYHF=@W%zvZ_)Pv2qC9u0g&6v?PjvtNhf5>I2Vr@!9BorQOESz-2Xq+g6`8NYzka@7 zT5&PJHu43cNWomG8$GfTmkg3Ruzi#j^ zw0MK!PMxYeR*|(uZ)|_Ne@iT_wB%Og!u1y$8Vi==)@YE}uF{E8U&2R?3`vrv3KaGz zGmy%lVhmPg&QusM1xL!Qp_|9Imct3{*{%e+x4SMV7|*@&inXEp6o!Q=2sUf=O+}U9 zs<&Y+Cw9bsn6{%uiZ8 z&TA4S89$X7<}u+3S*L%7Y3pdm$q0cfAl8|cb%}r>*(0fy&)8-egHA5&hV$vu==dI^ zfIDHqZixKX*#=^UoIqoW3nure4-nEHmc~Br?O&AOiRj2*Yo_E^7_>m!QnJJelOoIaZ`Y5z)MTK1Cg`VFB4(*b}TOX`C zHtI}#^-6$^J0*rCMhQM>gn$>^bj2e@r#-w4b(tPxZA=#j%TX1l?Qrpb2*3<8Yxwt| z)(UgeBT-eZ6|k|KMbk@!hf~4&ZL2e_!($S(;t13c(mT+_Q-_WE$;X)U+qglt3V*TI zn=y@%_v9IzBW(Y491@@l$z)tTLG-hua>?KNNaLdYzo~|Ywn1uYG_6mD-*^bpO2XFw z&(JhOL&xaiBE!@@h=I5|a_Ze_h51s^uo!V}JJZ`6EFz$7sw3vja(+Jg60hGm3Lhwr zU_5CrGQYw`IRYkurMc%T6yL1OcX9$p2r~3S*S}FND(eWg;k#L2cf+it(sdtEZnd_z z)oz3yMetH>912szPU}S9iRcdSZ+PN%_Mk0=xuFu%qOCbU^fZ=1 z)eid(Sn+G=-L5qkYuh4aUDA{aA<*UhD|nyl=3riupKomVy4Us&lsV!N@)$G(-rdrzvHpJLWx%enSeOl>I5E1$*vcuU4la z193M!MjXsUD}N1QZtj{eqht`#9o3DbH}{8WH9@xWgV8ZCr0 zE$PreOs0v6uaeI+QV^3fO>^-sJfAiBxesU)C+D5T|MYlc*pwCoagk|t#6H0cI<$u$ z$unWh1NUG25xmHI&l#jX4*XBZh;v)2X+gyR{eWwe(uc>QkqUzjUVuct+3fCVn2TW0 z7#q=Cb^Wtg#^@QK$B zwCkcG(aiw7huG>?o`B@lF9j5nnRZ0li&ZwI=9}?nIqpi2i0V2NtV}n8tufN zb1Y+-WJ+Z7hn)BckQ53l!H{5!A7Qx^-={r{VME}JFkXp*k(2Dtx@%d~vB;)N9J-{5 zjEHlfIrO|t@LA!;t;LV+nzZflg zR-2cKx)ZkN%GTJMQ}`QFx#O#m+mY3^qsvPv>A_R=3wW2J+j_}S)UH%|!++zan?v!MaPC3yXN}5E6FalsO}`Z z*$n)CuX0i*@J^?Q*mJ>+5nH%gp4OteAD{<-H5p*yMxlrH4`iG17PGf3*=o)f{|d-l zH#_QW6+JNBKWbyR33f9n6-@v%?ucMHY|FA)_Nh>0#roz-#~;J;`{z7fl~&g|RHVW* zT(xkZ56y&=w#g4se6gic+S6s}660x0)^EFOqpao7R1ORFCAm}-j*PhKwU9KVzh{v> z?6_k9Drmn$dyRz1K4vfTq6>LjhZt%&DkB@%Qvn zP@%FKNt^4eA-GKZS(WC5Zxu5Rnq7>Dne=7Tft62_Azd}iZ#(9{OGmu-9kaNTs zd?dqSGnQ&(IA~fmu|1+?%uHke4l@BY!4e5H^@&1I%eUjkkwMf)!H&t8YehqwxN{Z9 zZ}Ht;UET$HLRxfYGD1MI7%9(YQ}HRH=ZKI$l@-BzX(rGrFj=vI8PFAdDwaboL!vk& z3dPScLj&%6q6ash5H-+$r<5O=i3sb=bbMupTH4GEorBc!&=6czkCDQGo8nkFpu@q= z{&_5BO!qUAcq~#!W0{Fsau%OAk<%75rR;}lmkTlRN8x(pt(JrpR zh*}z+OYgv*DgG(LWPl(tJ`Aju1U|LH%i*zd``ww&XfhZ%2R2i?EAxzY<=4a3d2aC) zy|dy=OaFf+Qm$!Z@YXF@Ej8g81LFhy76A<+TR`apPh}4w;g*){TkP(<9k55Hzb53x z-%#(yspyBXU&ggmO5zM1dyZ3=MRn_E7V#oouZ6JbU(>;ndd_d-P<9{Cq?pyIZ!3;x z5!IB9@JpZa_geY-pR$oXjcX~CB4K8dSS*o$g+I)_GGs`IL>VfJSkp6#?=Ax@ep{)M zO(9!+vWCD9CMRBAk9@E|z;#Y&m9!7O<3|{bR3TiiCdfsRO=aw!Zhk3;c~LA8s~U^J zC!-bX?let%=$PD~2dp^d(67mm>L$;MlM&{x`k-mcdGq@G+S|BJ$i)i#tQN_emZ+~S zuY<=0!af%A?4Y^}#DeE!yq+ON?4MsYI|gd7E?x*L4FkE^;>Nc<@BfJPk%QsbMX8pY z+>&tkEc8t7*G}ueK>2c2*xmKj#x^I2mLvk!NBv64g25CTPcO0(WaQ*RIT-R{?+HY= zWF!>lH83n|sln_lNc*nQxfF_0ozO7JwwEx}Pue}C$yJQrkDHEr7+^Bb zV}fNo-8#kHA+G>~qfo0<^ZK>QeUY8@Irv+D7blVKea7OLX-}O)@9BA@^jODKQW+L? zd_D545wEviRN@%Jwd7~RcasF;QBl_6+;R9ah{;nbujsrXg7>+-uG)(^MK04=NK+B4 z)qV;x|2^0;o)1)Ijnb3;4X!#4nmF4{J;Hme{K_L!o@|vKK^S}m>}v%IyxATq+RzSc z!G}^qD#pKV895tUkFWXho*fkKLzhgf`U0v{TU<|hl3OKCgOG>hR7nQ-0^WBiqLAJ` z?gAfv$xlNS9hrr@>W@nMaiIqv_EN!;1Y5KV zekA7kIGyZwgy3`&bj1jo#6$ z;!GOW-%I;^AOjh_&GCeqvB;WX)C)<}q9p;_nl<2Ns{zOP1*n6P;Q*E_g|f{0n)9`R zxXdD+H_{O;P44Qo|E}Hp(UG=v9@(p4 z$W2bcUd@PYVCZs`URjiuAh%*&*Ck8j@j9pUwX6bJ@HY{YpUbno&l36#>)meh3BVP; z*olq;L7?P7Znm>?V^6)9w{AB^!;S7TOLAtKfwbbGNkqZen3+MIo>T-veHO%PYFJiL zvC7<@n~7_T8M{<2Nx|tJvXTlzFJr(Dg;V(+da>)^_=mR4_S3{Q{^RLhLUaSc!?>Or z3S#pvgsi~(EDZJ5knP%&enLt})NmfEKEh0gdcTB1%zzLjQTBqt!et02h0_nkc@qiz zDlWPv;-er{GknjIxxRaIG2!~262hFbv}?u-m=!Ap^hx(fT+ z?pI^-sxi^<>a^JRsW9{Mf2FXQ6 zdG)Jf&oTwmP3F?oaLR#CcY16yjUC&GC{9UCcSz6y_$ik8P`^^tIAYSDu{V|a=<6Yd z)ln}c=cSB=xtR&w^XcJgEnvoE9Wa*EkvZLHL5uIE7a%U(u4vcnm6+EI&%kPS*(ynD zS_Wvb7w8uMvZ`=^RLIYKCVk!W~{2`5D)wM3vyyJNO><91Y)PjP4s zx65#c8h2a}huUJlBXB&}y{!!h!inFK8YHpC*iM&hO_ZY!8=?sC!;tqhu8q$Nk& z9!=Fw>_u&AF37HNZbat)&j&xY=8`Ssb_MPfjhWl=Pl^IxoZiTm?q&&-047cjnkFAB zAUi2vT1Y~I@)2)F1U2ea5NVioKRK{U=(tQ#eDteA5AI)8xkOe8t~)Gg-tsUc}b_ zL{Jn9h&g%DK6Z(zjm^P~OM2Dqz`9ECD`<-|!YihyH6ZB9OO2xm+kt9ue~^qSgT*XF z)cd@2p)R846}(eh=S`uIkVn4B5J>&q@!?`DDrztZHrcP0%RMY8#}hdvr_O2YZV?4j zuYf6@J(09(;_`gUQ|zD{^p^%nk$%z?S)b^H9KLj*DZYrOj@wcy#*>FAOD~;iY0q8P z_Nh%djL-{oEbHWY51DQ#de2wZ80s{k9f`F&D@!eL)xr%y$RO(WNxSKvP~@Nn%B9$j*A3?kSbg%f$ME?Nd2 z=@;8DM5At+Xe3ISZXt$0&)1YFpU4lqX&VR#N+CsceXW@U(D$pO;V}h!e36yHHn3VvjqyR|^&BTA7ET`UmJ$YM?#!xf1`Vtt8nS#lIZjA4)7i1>$P z@6Gso0X)JZCapaF-K^tzY}1;U8f>*s?4+PR{IOMZ&=lWm=))^h*P{;En8E7&dC zG78Ec#S*>;^!RuPRSti_{Zh&HX)abB{wOI6mUI*b;kjnVEiq!cue4G8`{l5(CfvZ1 zw3^-qERjLNQ~hIU-C%jz$}4n=4J_q0)8F8jQ)}&+b_LPZ$~K#SC&_Mds!xB*n-s;* zKAZ@*>bjp?9;JyPXnZc`8Byt^+-);+k~1dVb( z-Jo1xy}^}5BkdDc)3Q>~g~f%$O}e1Samm6)k!T}W{Yl1tj|Rcj+2*09HHG69$g)t+ zh1U(Zr&!tk7y7(xSQSV7o-JJkZwwvC^Sz?j!dge-DEO#2-T3YoDbg*hz(^a;WUj9uRf( zLWQay8uskUyI94bO0Z_K##Myh-fY5C~z>(yDfVh}^Z?ZsfMv zBd5l6Mi<+6wGkt@`ym}hTD);g1!>-R;YeXTW0!ZM>^?hLuN-2+5UqPW?_ud_HfX+m zYTpu>7ncQDXy|H(CW{t3PN&{a+O8E&G#ja~)o7~Yg8K~ZcMqSIdMJyk_(JyANDo1( z^}l^+R{9_M?T5Yo9{_AXlfN1h_3WaNgA#jN0B`{qG$6LfEd^3&0000NsmC8~GwZ}~ z6jI1~Y)W(*FKXp*5*$fPbkYo=Wgrz<%;;50S%pSi;Hb=2D{3@J9M>-I!o_m?ydY&3 zkSL&dD_Vm9cMK`O4aspDABo3)VCm0+;?dvtna~`SuP?XbjmGYt)D{HAGUEG!Zzd3{7a(y05#2wY<58iFVn=CJhbEhzEJ*9E(UwMblkS zMMQJ;;BWu{3DN4vAfYFCwO zqeFug^X}>{t%e~Z0W)j_H1Kk_vA@y(9GO>YTV=y5A3gs901$Oz57CbsxSniioTWg{2S5 zPvN(PKE{=s&3s{N8o8GRa|Zah;|TC38n{}Se6mldW;o}tB$1FU*$2!?+%`~89+&Mp z2kr2}2gMjPV8LKWTD}yU$8Z4!Mi|V0-K)sev5`O>W}O$rh<7e4{FmGwkW_%9O_cJS z^lxL?PX0fR!M%EQD!OXVNC&qnQf}CkHa$R+PD9u7u#%y`-Di$xurt_Hq!KDAoTI*9B4V-B}Gf z@29#Nk{Dp#=zP^j9pp88MlI3w6n4H87qwDAqU!nNL_@ zFAyozgpza@2pdPy)Nn#D2xnkXC*VDia9Us8~=-XHf5=yPV~Cd@ZO1-@hXV)cey0N zODY3@cpy`}tX~K`FmHnX(sL6yT1Ds7stfPU)=yABp77(%)ezrQEi^7wMr59Vr7M#l z4^W1l(vQW-B!=tboD#{HtIZztC`o+=E9eNoX|Rj(prJ)wyiCc(#w(3p356Lsa;2gQ zhRQ*>xCfN&)v$cP0s8RbxJVS6-rh@1kNRgg6g6yjB(cl+WkLxX2_KKv6#1hITEFZe zjYb>AcIghuxj9IUc~__c{(!xO^@D+=GUc+KcO7v{VoRe@^d4aA3fzo!IA4Lq0b8c~lChv!aW^8PWP++PY4UEk=gz485}kmEa6`TPvu- zFcvBSXsp5MO9{Yr|Tn-~-@H+eiei#uUs_m=H9(nwy&j3<|Pz6`> z;H2w4YA64rrv!SH9o`3=2bFz!S3pXeCr=H8ZHEG<3b#0Zqa^22vTe=i=BF*2OXd8P zgvN1A^FEP2g?9FqYyh~D%$)Ye#O_ISC(l71Lky4=rMN5dcIqUf^OY|#`GU?VntU%_ z9F<3%I?DBGRdPpA`Cx6awiwbxN?87Xz()kb(<5!$=EX_dE+T>@;RY8L`az+uiVed% z`HQO?tUG4~rY{RJ=tBR!EL$_7jxNcZ&wdHFlFC>ui zSXU!Xj|Y|OJD}bQjGTuswS|R?T@=TW2ytEhhCXzz4-M5Ff6^Ix9&+#G(oE?BR2_8K zjVhqzG@?E3dTVi$N+i~=FIQ*FCUF*^E+}QeZIuXsDhzH_-Orelx&cMQXYZwaLyJ+F z^yKG~_HV)oeb%(wlmnO8Hx2tRngtU@6A>Ew_Cz`zw=!gx=ubc1_MGCIG2(yIU4CLP z1(=FC+i=~+XLW;1pV#Dl(=h@9S)qZ~d(WEalB>c&TYHtaIf{}KhI~sO5tH3K3+#EM zFya|%=)>SD@$u!4@3{AR%_Kp5`qR85BZ`a$wVH6tfkLV$`>0CnU?)S^mOhH7an%G4 zBjjUip(rvlr8cx{H534jIU4(8!4nZGMPM2Odr|@u@WGrp(G@7xnbI)F_BWHlv2>nm zL3bGFi=5*!%aaqAq9qPi&6z%`DI4)k+Ww^f)X(xw=h{L1J)jl9Qc zlQ#5Ot@vcm{Q&mJDmZZRcyv1Bt>>)&ExQgLkGofL>LTzOIg5C}0_u4Dc2N_iLqqku zgBl#3kbe?AE86OHs3|6RNVRn9XDwnXLFs{9z^zGU#)r4$2t~XX*JJ?3L2Ne>oacHi zKd;mi9dC~|UPv(CHvXi3bMI%8zRAN*q1#5lVo`L%y{fIWvH#f@A1!Mvt|-u@}jTIwst4R*hzGe72p6j9!ad z5wp7wJt_eh1ac30WqJ!A%fU}!F9{#3$U^M`Nj8IAKsJf@4&y_TuHmT|9pIIW)Ao?lDnWx* z{K88Q5tV)s`BBFAhI&o5la%oPB-Y~ue;A_50EpuvtQ;=8rZ zCHg+qZ~q6am%%2e1a>l$z#95-$BZQOS82Z30e;p`m{rW^)msxYBvy1&X`7vp4$i(L zO534H)Fv;P31`7k$rvCNDjWA82p-7L__^cfAI$MdaV64;;0ZV5Mg*>^gup5tITV!vm zcZ`~O4YVg;;q;^-8Ugm430DcYjIz;LDlTk@WaH6Je`#v1Z!{d)%QL1TWOsu2olICJa+GP zXMHXmlxIs+4xTAcZ~+)JF3cGrv;Y7AH1vh-%CM=Mh zyvcgJDTK#_ud7un1|LJCUu#G6JqqeT{7$!lDmC(^(kdd4JR=<$j!#zNnC?c9GVmIB zQ^4L#CYIAHD~~8@9`?}7>g4nNqAx|A$+ED%*M(YlhBjQ6=Xg@V6bI_eB{p>|(@x*a zB|;R_*vj?2|H8JfIY}#zoS(7Oje{z^14E896-BnqtJ(t;_EMmQ!hA4P#2f$sQ>a0k z+)3dIQe`kC|M&w@(Lh-`7B}ef9W`s1xgjglwD7(m*Kk6Ql}{iib?da|hqd(3z6_JM zy14cw(xz6eDgFjo$tv4NoWuZ&dQpkR_uL@b4WoG*R7b3oUjCT?3(L-YH|sjh;ykYs z(o>wMS(68Jzu%;28;ZpG)!9%n; z-eyaCdwM^oq)L}iuD}B`{*ERZ7P03Y+)_!^pr?36do5Ndz|UY-w-Wn%c3DgoS9MLH z@r{g=GQts-bi%^g*d%8#QI7#~%~#g?{h6Q!0_?aKCeQ-JKe3`ASY@&i{Z*e;67wD$ zn4!w!MUP3Z7MBx1FPC1JZAjikwLZLvUoL`V>s=8lrj1|Ea-(UlNVu~dzaUvTO{hKV zK+rwd-;M>u4p8(%{nL;KLyuYK^t3rO?mkaIXhecCx3tN53x1FvecitP9xJZ*$A<@$ zM5;^*R|9AOkzU%yMAGYC1#9iANm#B7DQ8PJsYcJo(tq zg-eG@(-IKTB%FE+`ooJZ1g(+7_a@&R@z3rb>gh+DqaQrry(J zT7;{L5}Q+bwLMDYo!OeCfcfFma3=8y?PLE*)3-HBpfUFhLNLj{5^balqv2jrO|9rP z1&}72q0=A`Fgx{9O`l}O0`-dS>4+nF|2h_yI>{J2`A63v6{?^(WaGIv(T!ZIW@-QG zqT#D($x7GX?WUAdOMg4MmBUVaV|7_SF$h<0^W`99>;hR6HCdayKLb(Yv}C76brYx;dq z%G2rd>4sCNp~`EL<4pX1)uyMRNyL_f3KVj>?}yb09F*B3EdrZy2t$|BliNX2WTd~B zJexaKfs}kgiO<~=2A^&xs%%+mD%(e< zD(aj?lDPF9%i1>!mzq8iX#gHxSR}xB~?_la%~Am2jf1-2L4K zE%>=!@8jkxFMG*Yv74G(X`7BGcBqu2@m>-?@U=8O?+kpU||@%V`c=4RzIP_z!e;w*wq z3X#~p_XM+$&#ODD{v(z5*MnMoF`bej%3JTV43)>@o^)=;iA}c_Hd2fAoX}PFWH9g; zpm8LeV%~VzeGWkE&5LixE9ws|W)zm`vYkQjuW_iV^|rp12N)#Z2r*ma^AVDB_{`_g z!@TNOD+ugD8JI~E=xMYIuJ-NtbBev{zD-H(^ofvXb5a1z56Drev%!7m5@_2J>yE9& zR?2Z`;vvB2!0`*A6{oV+r`fVqv2uOvW4&(BV^N{h=0oh`ky3>(spxl~jK$ZW)lsdP z%^C%9Gh(W^Ok?RBoMliFYxh55)73y#f<^SNiz-+jImBL13TS0gn-j*sy{g7b6}fO4 z`TjU03Ssv^U*ui?jS|h@kzq*ZTSDk*jAHtB73Ib|j4c*T*O{7`l=6^OZ=WuE!i7G@ zJ|GN-`@znLmH=sy2@_tr@=J-UK%c?^WE>ohfKJ?%QnE!uqQ?bE2i z$ydWUj#B}>UQ*>Capf{0_K3qE%OBbCU-dU~<~pQqSG`53?bOkK*~@KS3XoxjdER41 zgncyP3DiAEROo+Tt>Ti)o2kNvSGxi{=Rmzcu^A$qoIj7}=Hclyb=CV~ zd8GhTM8q)|S-lGo$cH7B@lHg>z9Fnj$$)1R&o=eLAQW!4kh)GNZkEXPdsf_!=%oC` zYa(>Wrw_B6_eu&*Dz!oM4n7~TEjSW8@)kIlRzQ^u;oQ5@HoN*T1k-9XSf-A7;FOOn zFlm+aBxb#T6firXdF5JgF#puE9%H!>v$TIxg!SKjawu#boRr2t<8D1R2U68-Q;cix za}Q>l&Z$;wfD3xE4hZseM^_$B`J^ErNOXt0X38GP^DYP!~3jZ5e z@`M#4U?ZE*65(EtQF9{Bckz9g1t%?F%43Ei!Iu4%#=+Es$k*c`_ z^%8b`j3NsO2VpWjvuMl;aOhok?o_WK8o#!Y>_&5 zB|6H)9Li6x7R>w^xA%Xf1K4^hU}B(zAm=!0e5fzAFsr(|5|IJ|27gQfrOd_Swy+=B zFq+tHwHODNh=peUkbzzlM>PiY4Uj`xhXVe~Jamv2p~d-90*ktX3LVxIi+>lRvfKxx z!wgnv@%n=7sy>9BLIbp&e8fL6uqDgV6_Tep^ubZ{>pdi4kE4fAM7d!#tt{su`aR7u z_giVINTntI;!!cBzYY|hJe`CX(J6)5f0cjXP_%t0FNYxiUd!e973f+(Txwx&PrtqO z<5Yqd5RHn1tZ;!Glo|uDeNs6W{@;BFy2x+*S=bLCL9@;Tou3T16T9;bX0sVG-p(<1 zYSoFRm*gG)&>+o@5VN5FcmS|@jtOQx^QIpsmNoREODPscr4fO#P3tsGo(#E>UF>uO ziVLR8)+hE&7_fntlG8Xy?n*;`<~j5LKL|nAlo=M7<6~bu!o`i-WO1Qu1nEckpoOD{ zxH)-bZImGtn~C-CGKM)k&u`wRa)iGo(ue?-NB= zdH=Pzw;$gCNvCuOu0S!$9E^RrBM2J}Wd`O>GOnpa~k{d=6?t~^EB8%YU|+A1#t zFf6x?PVNJ~7p?*ILP9z?Ukwl24OpEZ zJJuY-DN`_Ur=j&z3anDc78?Im{fv=A8t|;Gyp|IL1q1~19=G1;RnXy1(bnBlO}8!B zGy{2^`6XPIC1j1SJ_%9)@`$4q(Co=*8jp1UZ94~7w!;8EJVK+2S^TeLF2Ss9EB$c& zA3b+h58)dJVcc-qr?v%dYs&|k)N=)EreUKw=4)ev1@5g?_zfj84Snd&4{wLU(Aa7; z8Qr|(IsPl)EnFO6hfP@IqiMCCx|6p!E?x&a73gz!hO{hX!;ta6wl`^TXq53W%TyHn zWaprj&80OIPy(3SfY+}Hos0g8ks`J1M=bz6%hkGxON;G9!xwhO3$-Q+gS))bg`tFC@{jCcvUtrM}af0vgu z6D~wc9Fx7wQjRQdb-g>7GDvmY5MLy`<=J9;yu6RsZRn#jh3KeF0-U_KZFbwEAFj)* zLtlw)Ae+mw?MvGbe6QG>rFw7MJVeBipmXg)y4`PboN(>Uy$YPh#WrJ#lLg^iaBf+W zlwxVcaED*7GC%;Uw*Y5iTh!ZFhzWWKx@ zA8==UjJ}N3LJ|%4W@h=Lg<^#9wPOLu;fb>F!-ajCjVY{yp5&Aw3ZM+y$09A-C%eCIbCr_ zTMojE(h>U5Zfzla%!=K53{rwo0ILNdUKp;aM%icc*)@G|JFHl^aR)nZDAFDp7Q;=y zyyGLDv7g=~2`Npyu6Yv*c^aR5xQJP1wyDnrG@w4`W}u=4%$%P=voePaJd`_6yV_X9 zP?|z`Y-apV2OMAkoS)Y_a*3=3B4F50m69<^Ykm{F?ilSOSMlP(xnTw zPlfW9<@PZr>Gzg3kqiIykL`A_U@e|3Vp`M<$H!9Na80TU_!S&w$^&W9vcbArnaKIM3EO7IUzbF-=e<|=M z0F2ASxIYAS9L(1*1odMtbF}P*%uEGm8n~2qL-K4YH4qAf$VreI{IP^1=#@t$?Lb5` zr~|JutpA@Cgyv*44f`M6TatEMoi>#R^jGiCU zINtJ~TyBL847X*o>C@EN9*ZrUq40ofF!=vu)St6j>a~p=Pl;%FDYvuO$-YRl^!@=z z@*y)V4!D`ge9r?AF{~}Fo34uO#34xkJEra zyayQoK{{%f6^Q~&LG^%@(S}~3|M)R5qF(i8OiFes=Sca1?lV05!>bY}ClqzTn z7!(4JvyA;RxOp5NLRf50#Hp*Hjn?MzLFupl-Qt^*V_MY_*A7Y@&+Hu-dM7I66sF>u zUYtJ$W@V($DjCtv-*$!bgomCpt5_F$S^1{H9U`IPJ^l+a$1zi2SI+ir$0j^!_m+jK zNU|f-Ku+0*TT|iVw)myQe1pe>zP>I^2@5GJ){~yyu;ebIOPgc7u=Q+@o{ZZK`NCeC6vI2C0sTytUhP8tFlpn))AMVm@WP z$qcCRmv^$k5TVxK@3>UJre>ldnB(P}y$|@zT>QO`D-9hG&W^X;6%*=JpXFXZ*DC?4 zsee{m)o%+2EX3$q!FZAn1X0TVRd2Rp$_10C2`)(b(NmTY>MC`+uUM<_SMC!K1=G@o zWiC5=Xqt5E(gQJF*m619)xv^DIf*uJ=*hEZR5HN4n!}v^^f>(MVwgalkMNqT1Et*V z@5R~YbS-aD%rr&(f;qx-S^&pAnN=$>XndZRh z*E1G_3g^3+kq~)}NxI5lvJH=Lj?37t1$Se+jj*)sHXuy^1A52I6a$rYA}=B1sFe|S zhsdrod{MvR#M4B@4NdS!w@zU<6+i-A)CC=C1#*eQXH%j!%<>Teab6o6qRafCtZ9Hc z#^Zjk9K>1xsDgFhBI+%ij7s_G5WSPZkEp0o2}*seDM_a7o4hZ|OPe{Lj=TF@rgwa> zesh+oL)oSlOx|1C{R#W1KEfC}tvy>+T2M8Um(mF|nvNpU_jxVFy z#fZAJ72`|_cF)G7@OWF5Y?zg}GW2vAI2Ye5OtI+3=p867?_tWwU(4Ydy?F^Hn7V{+ z-n~)#Uw6^IhoaLz>CG**S{H~>RJjw%`a8r72|AM zWd3pt(W{zD8&VPJ#vme`N^n|{6;aWh#FvM4!g2=L8uT#wgP3g_!f5AvH69tv$3<0w z>z8C+I-rC<&c0HR<+s)dX%5wDpyEKJ8c3MnVgg$-BNxq)0}t&p0jl>6X3>QxQ!O2r zhTV$lDomZWe(EC5J6U+v55**}I`n4HNzuRhp#y$cVjDL*#dd)PDga2tvi^~!vLgyd zKqiXr$--mk84lD3m|VZ?#D%F-vwr-XD_H#)IphV?H}Jeew5r^w%tckCBTuwF*Q@H zjSbij0~^p42#O8ES3Zj~*z}A1*9&`R-aLUiy~t!0^{wYiwQldXd9(4*I$}h({8Y8K zYOqe38?K3HML%pnZ@iJO&#ZL~MZXL_znN6%qQE*+V-N%3sz$v`ljDS!p!d9fLfFUN zM;Fr>QuG{uxEWfVdum);I9!po8Iv#;cIA3;Mo<#RUqO|b*oY-a5lr*OQzDj1iRG<+06)OCanuoG{EzB+``b)keMe7Cs@X^oAKp$=6aV>(N${CM_hWxW)=mw zIyq1XjXPF?xmLzH80rumj^I_|0i{V;tJSsMCC)qgz%O@JpC$FyT{tVxq;pN*^!s-+ES3C@ZZ&Ut|mgli; zw5(D?xiL?5oZ|?_xnNljU(vUI<)b{7m*v0RRV~eb^+!-Y7s3>o6#_r!aX?EsiF|8j z6Q^5sf~G{W!kb13}^L1&cR>fp&kScB4v@;5i}+1$2_47do2*j!XR| zrX&!)ZXEb_8;K#rS8s(l&_R%D58JJDFNzGms~YeG?5dv=gvJ|AF!qs<>?JQ(hlEHT zjih$Ln*&Hf(fYb>0%PaqJkV62q#qm^E9^sElBb!k>ZP?px8x&X?9 zhk%jWF5+-MsgdArn5#1(*U?Jqh*URp{U{{w_$jX_P|j)J@{U)s!*-7<8vhZ%Ds=GU zZ#ZC#$si^V3Dkueya&o)eY`N^}eahzo@xvq$wl4fR8u}S9?<^hzV42{L9f$N`K z=}LaN9 z{)BcJnVb%|6UoV3e9p_c4x;mUL@_`x2+jAIw|=(kT}*En~F}kpe(-Z zF7G_Uxk7**))gLQaIPS$wCTeNy=}NpM7OLG+KXE%V==kDT?|SQLSn{gYQiIe%c?Hv z37I}+6S9UGszEzH1lsh4E-vW}f)os|@;jDi&C%~=f6=C42ji!v3L$lDvV(^ekl6?= zKuv>;gKlQnmgM%Mi@A)D2R+xT5A8~Ejd}&yi}TN>k1tyOOz@Cnpy$#if^@%IS?+w{ z>&WXkPM(fhY98#g^<@!UZ)j!553#WivMawOAwyQVeD1W5(So4CQ$r%we|{Wh8F7^` z=!53M301kt-G03u>})or3aYlrO{?-5w}mFOh+bJEh6e*yNH6>9H+22BLA6HQsn@LYAo9qf26f0T!8f4U zK9}LVLlz$P;+H}YXEK+YlG=4y)K3SPfw*B{(WCQS?W3!Sx!dO6Ks`Q`oZm`P7LHW(nYwPg8%t}jEUVihU-jtt|0-_kg?@vYCL z*P5x+A!FnFY&QD$2X3NzI7CMZFNvBZ855f{HnH6MMe%5DznQ*w(YBQj>upS9iQNya zlVc!BiyUm2W)PZl%L3b&e5c)=-3|38^j_J-2%n$5yro*!4^tu^d*3o(y3xg^oIjpT z$cSMVE05!3GiY7c*e@;z-vGwi)ld>gwpy6^7W8Y)5q8|(ZImm6iZm9Co%|~x=|pcP zc9b)m9WNyH=j(iQyR}L2v2BPcYap*;@8I5AZLVWb1-Lr>S0ryYtK`#^47*u+zLmFB zxPVs@8qsU434KT*7U%hnCOKCl#LA~NpA|h&v@;P_ZK80XL|4HGq>(!T0s9@2f5v9j znVfj^6e(%}t_ZCKgCvdgZX>vFp$#iRmyP~ko@;iiKb$?lYGBN@NLIkq_QThAY)DL@ zbBit&<8W!M^e9r_TT+MKxB49)2NCx8!%Z|&8XO6J3WBk11}Y&~n3~Yme>o}JlJ!k& zZS{ps`H^V_$hm@3S~Ea%W&|%MqlszIPgC6nu%*>$`om!FEFzY67S~mX#yT-uS7XmJ z%*ziM!L%0|!_$=zAEm+yFeLU#t!FAawGcKfalWR8cpQrWb45co;1Pn!NM;YJFZT7; z-t@7aPmVQkVGbQ2t??7WR7LDyP93Eg3^H+qM=(ie-M+)rF%_m!XkdZr=-#Z(!T&-k z65VpJ1BfkSiBEdE(VXkH>mPoNv2*ck%jSg$c*h?%QI4aht&6mQ&BnmCo$~~ro3V#j z{=~vrK;+EwBg?sT7zWB~nW6r*qW8g$BxPqNaBk37^;7>3>xNt2%-4I*l?CEq$P%-; zNWA1)B>m;pChc1z$879{4V|G?2x$)euz5D4`>`>spugvj9Kn>Mc*E)TJN< zA&Zp#CFD8>3@0Dl3?y#}T;|GpH8Xw+q=8&XwDq-mEj&}%N3rZZ9G-S_L6YwkWW8v`I`b z^&@(|@|~`$me%Vgn}Vg6ir9AtM9@5v#(s~DX~Zz-JGt!_A>JPvuJk*qRcGlnCU5(9 zx{@JIgkp+&&47Q7zNA-pT1K=!Wx|?R4N8u0uNiQ{PBIUo1erv%mV=N{ClEMDB@U2n zA&pl6=O=6^sSLo>hziA)oND}m-e4I;BE4S?_R;2$;3!iqPquOQe7x5f>4o1?ZKov) zYRlEu;6RSYL45>lGb0mI`UyinSLlP0G|slF=N1BD<6aBw5fq{Vuh2n~e^ z&>;S_1jI`#(7 z%O2qX(nsaef*|^Wi$o+B=TE4`rI29br@fZ^7x+iIn;{X)2?YJH@6|s4x7xWb^dD28 z{^?q~vaeuas_3CY(YlhyTy6(%1sThI_6abM64M;Mj2#_2 zH9;3{xrrXmceccTu-}d;no67DR_}oF>DmbIV~CL7bS~CYoyDtV=!Dd>(C6&`h+y*p z{}MFHQ8AP1>5Cl~gx)A935dL?c!Ma#7< zS;_UcpI5enh@(qYv)aIzMWYmT&#**Ft`ztBDL4-`(M z=i+8WG3_=zLxlgNP52E2e-=4>GsmiQw7mC507K^E-B&~OF}gEL4Us@Lwv|rzw%fu) zo7Rqph}H@xNgVR}OC>RvE|58fN=>mTiM%d)>`fIJ(lO}Byb=dZgkq>C|D4arlKlz13ko~!l#b^weRm0K`_lh2%%usrK$6`z_iqpG z6qIG=jxIn6bEZ@0M~E5G1(sa~&7rYS8ePwNM0HSt?L0~WaJ7J3OJ72qKq_Ut_w0skHQ{ki7?^o8>8g5`T5-9UI`i{laIFda>?8w3QR`YTKulv{G33c!C>6P?Dy>c9uH?DD^Sf70kejO14$<9i*y_q2`PTzU+wKCvCA>dyq78)vHQr3d94 zU1n)j^esNzBlMhoTvkWysRWz}9YMuDUrR~}mev4Ag*5nS54>278 z8?`r~g*=GnLyWEkw-_b6?Y_7f@j129Ga<3;9>nX>qijc#Z9Wdo)^;vTSVRWPm<%({Zfi0HcDdZ-s=%>fI;k6Y@J zh0~jSluV?FaQ;M+po&G5dhY`#SpW3sU3L1e6wkoS+(MeC6gM7U%{5=KL5ZZYQJ%XZ z1x4TfM!|E1W=3KK1h?Vk8Ywr1CDU=&fnLz%shevP$YK31G-`nBRcc-TSnP1;M_D(; z53;S)H(&8ym^Ac@(N$hfub@RDj>L~PX{0kOOSk4*NXx{KTcfKk;khjH_8Ye-9|RPc z`uO0ik_g2Zh~9OEyQGtK@o?ipiQ{)aYtp*}X=Awqr0G3?;l^Wml$MxqsQi&8nIlo8&g$P8 z#04OEyjOg_stlprv&j)1{??oEt9PcMv!fN=$q{+U?sd5Hf~}h}~9%t`Zd^(oNch_crl? z4t<#h%KG9_UJ9@gjF-6Juxuy{AHt|t2zi;B2Yawu*^&f2(W9mG9*cl6UCNG|8fb|l&Gl%a*O6g=ImD$u@NSfF!W_Eod;Pg&odlnaQ8ElW7&tX&EXz+zXfrgf4 zs*TpL|D+WSzlyut269)hr@ZwvJDEwIIvM1AO9n4?`SxvFH1TwJi74mq$~2^IK7%z| zOri*wiG9F4 z{EqkkY8vYS@E-!bIh~uL8{aZWKZ4Yc|83541a?9gxq@ecOjYokRWQ#-f-Vlc8_`wE za*)Y1?;3_yc7YqmZOS>vZnHz*{>bzwodR=1>0*F2;9?~jzra7`Q%@ZS#?;X zI#eB^SM0iI&{%MFrEc{GB()>DXb&{DP{y?gRkTt{%vrq?P_LL|cQr2z6-vM0I@U&U zlo0I85H6nLnhYbP`AzvR{sBUVqQY>DjbL8!k}yqLJ-h;Wm#iGV`Tcn5vZ<~~+>m)i z7eu#LUOpyc^v~&*u&&}9p5+8$<&>af(FV+E0ZSJ>0_liNyQ#ODCJ%gKnX_4gh{KE+ z_D&LeYIU17Uesv9#J0$?bs9ueEx76KXUBHdXwyeTkW@rq-YO~gwe@6=P;I({s)^SknL6q|2C5oO6Ctt2E-j@hPl^RO!fTkyfnXW!5U0}(Z z(P|EoC&3dTdkDc3G_GxiaANxCI#i@9%#NcFD(CcX(ujN==HJ38(sLL>W8T;ad?$0q z#ixoFIEd14D0g@w>`nfAauGJ6kH|z z&{n;mDc?z_)S*Y?J=8%S6V#ZtH4S7R|B|k}MZS`-R*B+7PNr^si%4Z~HIJj;8C#MY z4==Gy>j`_%kqr$gNsbh=&>hv_&UlrVI-5~_LQ(h<)-dLvP+d!}T_(l1`vtlMO_MG8 zi!vG$OB3ULWZJR1pnK~3f24y3Fby|W9NU!{h%Bm=*d}~zT(|VpXTXe?IG;zm;z7rF z;1`m1dds=VXoXn&ekFVn)y-e8?>@3>^9AY#OaWNn{c|#uA0DJx-NM4|N>tH%x$0zA zKz4J{3M9oP0it8klBa>;Gh`uaVqTw^+H;ri+fG|gGPCz1GMXp|n;-r9UI8o1oP0g+ z9<&cq9{7v;IIM2#g`UAST30cKVR@vPK7~mhGOB(f4n}(M7&cMvzP=iaN|Db94UJo_zo%`yNv&aH|6GhfgZ zwv34Z4lUGnO48CUs>w%Dl;jw-`$d?4#JPiZP40zuTYZP=NZT*yfD9BNwi!MDJI=co zN%M(`$fgaaOZHWjo+FrHQuGmvurc#j%V09B2UOvBoHA+B z!KO#6+4d_dc8XQA3f)e?8;3pC+Be@|eGm04D~nQd>l*e%4KIqk4b_1H_ zeN$aN(@Ao{m~0s%wLpjas4FNCOVRxFVcESAhx8;yh1JQoz-#(Gi?c9H`3yp`)~3)l z)E^FKIHt($+goFEpk`_yT)lS~n>iVmXvh!|CDMlqXO#sxerbtdL7Res*!hilU5Oz?UcB9I0e>~E@s7QA# zTUauGKLA?Ca?(ba9scA~C-FR|3CPlE+NxX?9+JXqN_JW)P1*E)(G%qsn`g_ekg}uI`lxX35PLF38ICNQmo&xHS@I@Q{~iR zvL@Jv{APZkjeU3AYirgyTIK6VQvKR(d4zFBfQ%E5VqjHxDhX4E%#SoNd|KVx10mXf zCcSxtewbyLyB~o#uNKbCXum2F(3TQI1MT**>Re+~JwsTBYmm$y8y^X9UX9$*pdq@s zbA~RM(0g&t3Fcxx;z5KM;_R(qW+H{kfcIk`1Qib{hdHE`$2wxU*^kTE7Hbf1_pMdz z@bcz^B|`a8U;tYuhM+8KG{nO%?QHVsQD%vebgDo?hn`&Juexc{0MLX=$_Y14ZyWmNhsS6P<#6ET935eoJ;ilb*AUYvP>9KTR z_7frF)c9>lmo4Js^6&bqfn6@cvR~S$%@W=hv=0Fo1&AVXnbmf3W)+i8iHdX`1pdw@@-?$qSEdRtsr$IkGr zr|QUXYuW=(MtaQcWaTJ)F{DC1P)lfl&2VOcDC%EmZ}<=0S*{!$bYa^5;N8O)?8>&D4NBo+kBb0cK%c)@KdXB&v~3cGzQ}g8oM*b~JWmeD zVy7g)+QE(p9vkwC&1QA9J^UeK{KaYt2#nuX_yRZYN*+q&7inIi({ktu#|g}caqIbp z9^4wZ>7-aq18KCARA;(^g}g=B9hRex`@M(xyO1iY$9yJm)O6Mkr(n^RsAYxst^FSd zNTHSRZ~e_o^nY~k{*<;g29Sgl0*zAKUu`N+$Rnf#HLmkbWzUg=ycNQGiDbt3Fb_b0 z;ZZtUci=khd&n~Zcn}#$SKGuyqzOxR@5X(mbCq|gCJhMaxYUW5YI@TC+D1s# zi1pea*}>wrk<3|d{5U0NoL3aiRlzYW``}*lWr?ohb-M966$W$7Pu+aY={`BJ!^(O< z!$O^TJv}50?6Ew+$|;I&xwQezj5~D9#vRFME}pWvL0I|L zPRDFTbT8#i?`|@bRAiwySxX~JoSZe01nUx*bdRmktUKoxCE#+b?eS8i1+?s{?VaqC z$V|T{@+c*89O4rYn_03#B{O{Hq(MgVK(KUgA;t>7dgJ^OTOqg2_wMaqbBj^C;K(wv zuBNXu8%sm;DY5wGxW7f0`K}&!;0&0{In%PcvN>W+F4?nFY1UorgzrC8avkdat^Z+N z=z@6dA|!FwtNTDnW8E_F&aGqpnF^%_owNAJ=ZOoJ7k_ksxoBJ*%9y^c6zE6&ewbnT z?+)4uT?;jtRaX`zG6RGkDK}J#a_(z;9sH!jHS-UO5eJFedQ+Y3QtZH#m;46q(gdUd zleIfse98FFB>8D@!m6x@hmO_Kglb)mpSNW7=dPhAr#wMR5Qc@C>R?ZD#T_hTJ@i8q zr=KQb(WbBe{0>}KK2`mq4jB+TgYw8S`8?&L#%AwD88IB?!1jZeJ1aX$%;+5 z?xziQrw_!MFUb+#<946Q$>7vO;}tty4-P74g}mn;?-AGr#@ViYQAs>@63eAUHT9Q6 zmvepjlx@6!SJPsB+_qnz0Sk>tPCPl_EUF)S)2@pF$-bEjaE>T<_5<)4^_36nZ;s7@ zq&Mew;huC;UE$=O-4!0t4BYTQqzI69ruExAK^c!l?%^ov11@*s)8V>)qR9U?vB1NK zul|B}jYl+aoK@V~lS75MsUY>NEa(3?fBYMntp;`12k=0}Wo>!zN&UBkx}XC@^_*TZf_LpH&d4zn)NT7*pp9AR_WWMQnV;i$=q8`7qTp|C%deuU*bkAM;z)ufoXuL-_BW zQ}sJtl_9xF;bg6Sn~K<=Ff%@v-XJsoyq=`y1>ug; z9hk5g5;#`{0?syZxM%7zBd#>0c9{dN}^KEmZ;W#pf_&G_o}822S5VOkg)Pn zh&ZlkF`#@IzKPk@m}NlX$3-z~)T_S85OP2>vC^oeYedIzq)LZ}zQSg*Sw1jEZ`zQ9 zmP)&L)%6m+EF}EAvy{(GqX=a6S($AD5V@||NP5nPEQGAqHw$_5@I7T^4SXf5&(Ft| z-#B(b3*K$bT2Jo0RDiG)6`H}^m;OGlSJ0>H)_NHK8e}Qj_(KlT4-RE&e-YXs7k2g^6w9gdTGpu9tIUxjW-v$EkpR zysao~$W{u`!Lk=hER9abJvcJ5s8mL4vZ>4v)!K~{NT5r!g-oqu@AqaXgx3X8cO5O& z&O5`*k?{WI>Q&I>E$^)N@4RWDyNcp>I_L1}oP@DLsvEeKI;s;kf3|crZ~d(bKX2w1 zKh^Nlu80LzzK6=kuM+8+2GUkqE_#SZ)b~=$L{dG2hhua972yZ79%0>WPTk}=m*8n} z--6==_B?mT6~agK_6HI#VxGDuPg+nDoI12)$=w_1|eVA=?nx$&GtNKbBkd z1#$Pev=NBs6uG|~0!zbPg@ZF6T*m{CYi^l!hAu!sePaR#jeXv~b2^VD2=MS+`Toqd zM1Qhq;9Bpy2obVzoZ&+%<4t-ei4zKqIHt;?AU=rkK_x21WWvf#0*YOLWAG==l2t4A z80A_%?UWma85*x5JhssE^02#d_6XQ;qaT2SjIuzxENa*4UgujrOzJ{L8|77MB{zHT z%U+X8gvBC_@ipu0R&V^2-t&IRTIYvUgXe?xP9r>q$yl}CJ$Q^(1)J(2I@TttQ>4GuH4g04_$Word<}=Vt6xPG7yTE@J0@R%*=ZA8zeSSCB*7|Y|bz$BS&O}ut zn7!ji^$zV?*fM12zet7iU!!-^Se;`&XIbbAYqQ~gcDvmBtgGvH9v6W!&%IQe-41ll zMRlI9SG4k!>(LKg+=3CrHs97_J+ZZt7sH5RPANf%Sc^IkY907B!)p>KnRcu|52Gf_)caqqf*OBYB zW`8|KApf}Ed7lPJ?CE(FVW}Iw*Rxj6o=vSUee^KQSF))-9co}jeFW*xoWn1-w7+g1 z$RI(I(&(kv9i-t)EDXV}yPqu%=~(`H-CS!o1zaq0;-mvcLW5A@hghD($`MumE8eF% zJt*1+|5!2Xkl)^7<9?t?Wny~ZnjQ&J-^~7=<<4odt140ms@ZZH8}9ID)yuD|%~DFe3|HR3 zjWRXC)&@O;0HY(;o9j~kwKxXUko;qBBvN9KiykX}!p}#dcLtTDx_IUwlchh*zDpW= z;(O2zf(pY80?41 zK7mBQe{Z`~bWF2ei|<S95+I8mQPU|8yMJZ8pg!ojGF1t%0H5_FJO#(W2RcS*tnJ?qUTG8F0L88>2Q8HFCSSIL@zbsh&kN(oGq;1oO z#rzLmpqFuPuihiG4T-RtOJyVN7qQ|O9Ec0F-2`5#87hn$42y75H^5MdnO4QK6xMCA zZp5Ot^|w}^CA|)2X5wo(CQpJ8fXn=niT~A{Tyr!3^hdwV2#zVb{v~^*$l#c6Ktp#< zlD7qCde~?z-kSc`8g`pM)G0Im3(R0QSt${Yr<->7b5GYBreB!n?( zvNPiSJZ=EH%Cx^PilrIE#8IO)dj3UyKM0Z-<7~7q#@J5Y9YY6x$wtbG+7~ya7!ll9 zTQZ~*MRAQ_+V|_yWN5=BlS2>^=3GWFDnuqk9QZ&zXpiUzsicV7%Uk2K-|e+5LETw> z)$-N?T?Y4{B@Be$4?eFv;qgtVUOV41#Bl_ZwlMI-37h+Ix=N@xC7qT={SD)%IK#uYd#?sb5Ny2C~AEZXPiu@W& zZ@>5+>yU3bw(h7DW(8V|K?ni|O<-f@GaJ83MZ5b>Pl);lMbfTb1ML85^uHu6Lb zo}X>rnw=C@z&6Y98|ae&%*I}_PVa6RytvH^NIYzq5C_iot^(r-JC}K>^(=h|3$f2{*WFyQQFGZ;pY%zt}?xBHfvz z)cXJBxvxDhXSa_zaCE>~k!*iqTIkW52u-%{pT9eHB-YH|U@TK1?BVp!B5@ASAf z&|?WBPITRZUvancrBa(63_1pT-x|~k`8xt_1E*TKvb3mGnpz8~*F}MEr_u-x)L9D! zE+dT}f|E&BqC0dmicBeuG+4F5&|ggM7aiR4ST<=Kk_Np~cZ67~rDERcW$HleQq&fW zxjQ!r1#Dk#4hV{iiP}n!A$1tUtb3E=ZpJMkSmlt0u=78>7Pe=w{`@8d(w5Sprfo7s z<|H_}^Z``K=HvOz`KcuxJZz(c1*mj{CvDS5ox3^1x*Yt)2HxAJlys5@%&p*v@klUb z-vDi?!4QPporXkY_pxOCGo-IBsGTZVQW2Oeu5<{r+;c5H#NOU^B0WZBbn{{LJmSZE z=`T}f`tv3_HUD{K25L49*oL#`3)WUT^qC`pJXvV^R26a9h%u;4=GkDwQG%i2;fmp0 zt|15gr$XKX+^-Hy_c?;uw;7~jtN|~({bX(0a1jrVh;Bkp9`$uHiiz1rl8Zc&o}=I%K^ziXqGn)UguvUDH`V_ ziSs^4?eX>?A+)s_bc9vXX0abi#5kYOFeG)$99T}wM$M{pyvw}_#mLI=9)E<&@x_iI z0qfs#YLN~GkyA%VU~eoJmUS+9rMTzJ7fvkHOmiFxaC32KeMqzt_4lqtP@Ra83B*n@ z3Nb?YC3T*7nk%=z?3WCCU#h)8^$%j%sA(8hz`AM9Jf+(mjW=hk0 z3PkA&D_`jDvy5hiZ*d_kjdHTmH>;}}=KhcC@}U;_%-{N2*@~t1sM-f}wUYo(sKiB z#et4Ay2f@Twh!LU$t>IVKp%}^e$@Ho*Z3%OO5(yinbSaDF*!Dyn46Y;4#jF+6B3OV z1thuKYcnM(Bwkgs5s5)1iDRfmD(73hSMZ*j57pvHW*$6ZKfsf{NV*M>nDc^h3T1gr zhwep?56q3^@bim@gLko&i};)ij)Y4kn!O|pOX{a%*l#i|&NkCYJY%+WBsgM1rTGeG zufKi|V~NbS2g(74K8Rgz7Q3cnJ{IyP9N*H{*YeX(5zCYNuU2KtaUE*o<`&%>)`8;X z!T##!Y(Jot9($gC+zp_;a+_+5@_czZ0*lCLpesVqXqsoZI7SXc`3TFql`pk*VvNeV z*Qg_wtrTmgxLkPWp?D(!DQAaf%ouxwvtV@j2l02ZX!Mmw2Ve^d#nJgF3ikGzhoF~x z)XW@_`o{n@OZnR#?F%OVU{lM`>{aLa$Jh}FHa0rpS0CQB7*KxvX!{(}D7iwP7DJv@ z3jG{gaFk1#hZ9Y>6`S)~luJ8GRgn(2K8{@0|4NoiW~0F=0p%r$b?Kx1Wk7!_5$1jc z{ZJ2jT|AP!w)Gq*!w_kR_FEEI?-p*giY>1qe>o~0zA0IS(<4jpo zp1Skp_y30IjtnLH5)QtBt_I5~j>kh$_5D8S*M<1YD`4X=tiuTTaamsqA9Wsq|QFWYNmkMY0$>ljZi;=7b z3U^7j#$O9JWYIL3IE|Rj9ZrMOZ4WC>TYK$Zb@(b+n4tIh3pA;6#3Ka3^xHRfoFOgR zsO^!sf+o@AOMhU{+GCAOSg^o`RoSn+{sTUfQVLy_I_tK?zjy*nW*I!nA?Et!+#zgS z5~-erzxyAs(?zs?G!Nb{HI1u9K)NF!BS6Mv_a3UcWlc+{^T+1wnqPPIyC9Hsq9&De zIj=%0TG7?4e(h|JSolK^pEh&CFA5OgQr6NQ+Ki^ln^!p+@x7LiVs4Y?lOpEBTzVXA-e2!Wh=G~AbIEJ>~Gc^1X>&-ysvU}36-V=$hjO|av zw$w-7$0FAuikEWZtm^$GZNF`Kp!Sbu5LmUMk-HPl%fN1M>y^q&VNjP$cQ8pd1N5=AJA$|;; zP0RNqA}n5l2{UyL{NE{m4LCF(it1qLNYo!B@x)4D=F;9^JZ8e-KRAnj*%FwWa#m+YL2fUz29aDp@zcznCRrR&b>ROi3hD=r zn+dwHoK>6nL=A1?NEZ@j4B*m!Ra96=ViPyS;!hSaP&sKka8P0*Dlu`M8k+LDBSxtE zr&W2iO--)znd?`tIxv~qER8ovoT#H$=lhryEw~Mz%O5Zct_94v212rzG_s6(VUr;f zV~YL!N(|BN3R?L0;dmL`R!sM{%^;2e+u;s^~)V3q*&Kr=R4-!<-Xc zB2Ku8u%ObkU4}TAog8;=TiBW?Hjj@RsR1fqEo!FzH@5|N2UL`_3@_>>zU+`UdO8;(Yq@Q-gPa}B~r;jJ#6@&L);>!X@R0uN3oZ$ zc^8`vDKKqy>xBOtDE`oBd`#yPuPD;6`COox%dw3|GIIFQjS%{eNJS9bd;szus^I;u zYL4{Sz$mZB>v8%ISpY?&ubN#yPej+O363Y^^s@e-2+&8VO+2Mk0Qo&b>E8ZQO}A#J zc#x-56ecFz){xWb^G7A1-?plR1VDrVcfGUzhKTFhVr7SRx(Lh5GG{e6SDVm76I`&l z(JVEWSqH`cuh1{K&M>cSQ$^7&RxHC(gSP`5N!O+5>8ShN;+fMEJw8aYxqES(&jFsUJ}~W@ zr`GGxYGvofBefjf1JNAhE&?==2T5f`(b!hzk&iftxnQ-ChbYxLSbN;Ep%)t^m1x#~O)SeXBFdlSgs%Ma$?2*)g3>|&2&Hn6m?13Y78O{I#KTv}1m?4-7U{!;O(UZx1X87XXt)=fbGg#( z$R;EZsX?A!>gul|pY#{3gNNMfXnWi4a&NLTxqC8nm^4B1U;$mUS}cg`3QgBGp8_Ua ze@L;_CcyJ*3IIi;SYut-hOCw>I+DF&d*<@x5qH;G6`O|w5*GrI2Y0TAR${HSwvva< zAuTDW#@co~bpAP>KJeRUF^#d&y(h*t!RH*ihbOK?9c=WDY*#s?xORr~rbHM~4_X&Q zu;JpEg$)_1^hB!5p2J`TDPG5aOlnThS(cKHP+yJm83`}UNmkFR28z3dig{t*z<&q`eI zc)^>}%Olo$e5VFnRCumwg03;PS`mzQPJrIG=Sqr^TcT6Xy-yYMot0a-y81Pat{0=P z@0&8gjA5KFX8y;Alrpr7heP;yH&V2I#d(bw?BlX)ez63t+ViCa?QHkgk_idd5ddJ( z?kk`)<*Ox}d~lm-86@W!;0fmrxEufg42waZ`b9KMA^-S^mlqX&honso+4mW(ULhx3 zvzVlpNj{Hdm@5iMRSOT8HWSi|Yr#qO1`_~XHT)vg-ul0vf%fi>jT@yCQm&-)udl?v{k;=(RVdLI z5qU%`qelrHqrGd2w1h#!{4+|?_Y9LUn7D|!3^6!QLQctcA1l?I^~fKAfyX2(SdFOt z>KaI97$qsWi+e9Ig1ZH1vB2zXJ91sti36zMdy)0+6r46^;?}?*emm$#rrzg@^!$!b ziZV73-w{LQuibdd8AbXubTpk`;_IhA)tfHaShFvjW^2#RvBJE3)7G*6&du}KNFUCA z*PGGl8mf=RFyO-N3%{+8R;XyNQ`4H(3V!OyoK~*L&)q}j^NdRx)mjFg`5|LH&(Mf% zpIx@MFQZ{n^3&;;C~boDJ4-U3f3AlJ zT;y2@(LXb2KSqX$Ub_!<_!wUlRBur)pKLha8=kGE&M6t(XhRr|UQ4G)5K6Pe42h|$ z)#%h#P`~=QL`}U6BWF3aGxLA7*E>)(pBdHX=`7~fLmL5ElE?gPobD*0)~+;OfTX=(pn%&Z%je2A8&7?9phtOzDIU zY>f4W_HbO@P;#8{vBI;+vF&Ln+I4h39aj=Td$r2*W>O9Xa2r>Pu&sVzE0YFNdz3&L8`3w_ERX`wZNJWQiqQxMNts04$Q}?4fgKfHrdhK-ly<|ewKx@rj<`eUk%>G>tLZrItVkr?|4cX;y zuNcPX?F6WnYSrfEWL#w;K+q3@;&s8Zb&g>vfI*~vr%c!Dc!j+AU6o^Lgx3`5@?|m% zO(Z|o1X0Gh3fA1D<}P`;d0W2?31SRqg$!VCezWa0$Df`;mt@M+Nx=_qZI;pm5wqDv zIZDR=faDg0J>TNUkJaEEB!Uv?jmw8dy~jpq>Z6#HtoB#W08Mvrb1cKhtN(K16wXb7 zQyqCIYFV$qYv`vC#ug8@j{`(susvHJXqnC7!!MKKLYkuOGzEZDs4@zP;N^TY`YQ7pbEh|J09~)*z_1v7u@m|ED=g$5wMoY~ zw4~lz#|Kk6NXJ{9R?xK!MHzPq*=)=mkdQ7({YBALGI9Rohr$1VS!0t|Mg>9)7NCAw zQu@H6c{fvpzA;QbYrfp2Xlyt_QXWmF8~$D44R0dckI4J)Nu+KW4>k1vr@A&SAc0ko5H1=$lIQ_N=Zy4V??yHJ5ali|M8oqE5NU7|ijr066QZu)r418QID;$`@ zq=~e`B0>zA|4TgJXSur?G+z1_O9lYQ+p1LgarJtQcmR674C<3`*W!p?Ybl zz}a;FP|%SW7yP_&IJ#)B+8lZyJs~~Gpj|1nx4o`@Pz3naJ5uMEd+X5&3l z|C#jK09(FRMe0SJeJjOYLf3>1p_GKGo%GMcvPI>hivGP^qoSs?WDz%D31p6%ZD*SL4LZ|)V~^y5%1}lkQW7$W$=Fj}4GP&z zf8;15$9DQYABF*9Zupyg^-2c}XDJ}q8dTxUhLZ+nXjy1Imw^~^^r;wk9R$8Y&&0tZKnY;G?iC z@AqxQ9hhutjXYs4(A5|Bk=nb3)>pU8*{J7%Sua=OI=7@WEFn_wM&c3432?+ntk;`x zbAfKmzRTg39mA^N0MS4>RS=)wB{3sQZT?g#ds&YWwvU1%)eMDtV!|YykiuRq>Xy*8 zB0D2IE<@`Coh}C0=dIwZG7=YVhQMV2FtdRCJtKqNQMP8W)dTI}hy0g7mt5~Tvt2u* z-jQhtVDbM2in}B_ssw#Cu;BCXDZ?COms?obc0RQ{je_#EtdRr)okue}O(Ni7_wNOy z)2k0#U9vE?MTgtkc0=onMqL{@%(FV&nlzxc|Lft-f0^_AhKdgwyFV|tkpGE2EK;CP zwZ3dqc|!g%&uiKRd_)!`QjGrwP*U47lm96xY^jHfDt<($m(fisHtfIWfKooI#MUU$ zXrpb7_W%K#;j2aNk&uG6^WFF@BYsj=$Klhc{sk!X1635V2MX)TlT7}sucZQ1IR{pD zTn~%fpFzCz50FYnH)dB-!V*(rFALu@bdFU?2jwYWNC8)yh#_EOw}9V(jK92l^OON{u?lE;+$%aviphQ2;qNWs3m=U(dSatD5643=Q=b@f|$i z-FxI&2DXj^@w?$qD6gaOk^!X;l@EySXqwm%r#+rBR-BG)c^iRD_lBQy?wh*Fw4*HT z^F4#>l#3#vTy!-IIW5c0wmZomtLqVByPmG7&u{+eX}RWf(N5t=9DnKHxb2(jR=1LT zWO0{G-@ykF++1~1LOk%MpU4qtk}CzpV&~M==EUD}jFPi8>n)KTQyu`Bj=EM zB0_}v4>3vSOrOoPn@Q{6XJ)5{f!M86Y&@CF(I2Hk+k)49A@y-#d^X21mzdF>%jpvk z;Hag#*0)6#vI_BA8G=utXKM0j&SVs`q}Kk^d8~{MES215w*Y-4lqQ5?>KZ?TuNGkX zN_!u&@ugH%k7*5VoosdG2!ed>*)=`@zG^X|Zke@Sl=JvAY^mu7$Kn4I zl*))Jay8YbQol~e z))o5r+8}qj@;1)=$X}g8+Q`97LUC3?!nA@}fLRXQoEBC1v9=nFBC#@`&5bx6X>AH{ zSUbMhIC7_zwmf{N!Q-I}E9XW^PaykOHL*OnYx0r29tmgAj>qBK*n#iZJUr)MKJYV| zrXz3d_T*cT1ZW6mydq&qtmyHb^4$^sbBCSy%?*+}#-Y0-SB#7P1wp0Mf}LCY^Ijfk zW@#$$cV6JRQMpLIpZ4M62p&?S{p>mD?)0FvvYdcZhrbd`Ujx7Yg3ea}bk-3&&|s7? z1`LCBjgMJ@I1K;M)uDyXu-Yw}zKDpK8twB&rY5dVx(sFIdM;{10F zL18^pU3#hZfS?*}bz8pLU0u(|n^pQ>$G5?nP!wV#dgL`ac7;G&E?AcO07$1>Z#iwI zV4oNAivzqq(5y;+V#US^AL^aPo%abnJt_dV5~RP@vg0zKs&kWDbopXY zHJ;#puEinD*3e+a0~PdN=V^GSVI=H~gqubNH`p2<9E_hLC=3)V&V6CmQ~CU{8kcd9 zI8@o6-Axoh6OyhidzQUpIMLx6@@(Yc!ib9m!OYb8;T*Jre9=ez9R&+Rn3+)mGaU?obFJ@I^9RBajRYf@ zQRK!PgLGoatC4z`W!%Ly_)4cw#?tmQHt;?FWCzc1z?W-! zMZ>LcU+K7Ir4*Tvh=^v(_`cR8i_XSqX>D*!R<%K#103pFF%AJ3G!S<=F|Yst05!j< zDR}4LBk&e-YQrENk~qGyRd&i9C0vi=iO?fXIbtyjyzN1@52t65S0H$ui{+|=X<61i zAe=#xCj|vGCJ1#F=AcQ_J$?p}bJ;+oqQ=arkH;4dg?4(8TAOZle;@dU8MmbsIl2zJ zJaCvTE5oSaQbk;>=TKdQd;O1L0QpcYBzAiJp7+Yi)}*PY)Z|19)~~X7VL{AS}JxM zZY@tj406yA?hW(|K90}PMG9rC1|63VrZtU1dWopI9VnL6Ita6lGyIPkC3{zxDXIdIaj&r`&qgDez4``T&ah8}$ z&{q6(!=Zx@r^_D|-)cEG9t7}$pp+*xLil+OF1z12$Sc$Kby2RoYLtc= z<8MzGiFT8ftg>{NLzc20rr^-iBF{!Qy$;tOc~k8s$)na~{r=0gfTE36-D*KdI)lUm4o94B!OxWL6w7!R*PrzblE1&1Ym zc9+V-NZUBGgbs&LUyXbCsw_!jye~*c-jh9LmotR9&b^)*ms+?~tcHZU@;=}iPmJv6 z9Nfg)8R0+lg%Ed~O)M~3-95do1Ejn~w`7w=;j{Txq~G@lypR*czU8*5fJ4I~oR7*g zaf#|pkX1N)ekR?dnHOXl@OTXUbOOQQgg3xTkP1%~z@J6Yt}ovGAojV@0v9W*OOVbU z4rL?gmJy6c{h$t-!LO}`r?SPNw*t&*`m~;x_%Ds10T?tG*9kHZ&;S4c9dFMWmBLg9 z6i;;6@7vqgK4G8@Xv3AA8^%w?vffoqFtLSWpTTN@;fUfUgN3P1!^^XmUB^1g_F<5< zjJ(F$W9ER!<||Z7rq@I{E0IN`$4!UzclBii`$l2WSn5{iu`1>ol#x|8jc;0MgV&R?EY18J32`$C) zy8C)JJIdap*s%_#csX)~n_UlLB3oF3Ss(~!!@xl7?#-K)`oNN1ok6&`CDars8~^|c zSpl9KYC>QAqMn?&D1-9InMQe^h&Y;;WbA_)VkGDws$IZE3Q^kNxhcbGg);Rjp&wZ* zx*x!d*ENNPjXr>1mCA0o>-jpepGtiNF;%tY^O)Mlchb6rxPt}14A>c0J4u%rcX=Q9 z;@2EW&Vnlg6T<(j!)D%wCVqs?W2@H0ALqRaY&zR!&M##xW;_8A%N8W1XEvdnFo^~0 zaOz`a|1*-<{GwXXNriv;foGW>NK`W07_p1mNM54s<_%gWf;?ZVsb+$Z(pJf?H zk{#$v)M)2}eelMr6(zaVrz0Vy_Mqv#*1cl0FHX_0NFRhklm)Al2ObOyKi|6+>9`a9 z_c%O22pNzZ-H+pfTF=-0fIYIM}i z-kNdTYKn@3LK6jh0bUEO|M=XqWMq=VCzp)yXj*p343j_sm*R$3v2Lw{=xT4onR;|d zdXktrv2ifUT~IOe8CO_u!eP&;z0x(;Jj#}Pr_D*k(cRyA1G8nY?KuqUJGT}8?3oK- zb~^a@mCmHM@1Ch_ha(LDH-Urq^#N=i?A<)1EI>*5lEvOK_lE9?6;nonf}6tWr;@7w zJEW2VaX#%hNA(FtYr^ENFpGynt`8;@J#Jv3^1coKGf3c5RHT-&VFx=wJ}Z_asedX#sX9ICb= zyuzz`)KNoW7NM@s;RXW2RUqEdFuK&~cP2Ib^NJrb8YOEGJ_N7kS34ZS#}2!`tDiy^ z$i2$Iu0(MT@NVQJjph5oNZh^h*+>t{@ncjSrts9l=uU{DPe-<$ECKd^cWrS8+uOzIV3sIg!j=Usk!4dF8P1a| z#w8f%l5LQ!GTv46sp6U)h)c$-`%XB#x?+;}rtrn}_c)X(l~(jNxd`dw=@T1w1E>{x zF!PXt1A#aW4k>Zcy`}RUGhAF0&HiiXEV&BY7?^1EE#iwU;(H<95IBIvQ{wweg*2!7 zN>rgAAE+6*pKbhdfGIa^JJ>0a;kf0)hfBZ3a+RyTqbfo;r7C4QR1uTu;U6Y}1<->Kq4-COBhg zEc%PYY}opAm3BJIORDvVv*j@G*m`ZDE?zA&8Ie@JPXOx9VKU$5nng6lGP-ssm6!k_ zY#XjuZ;pe=1aVi5+_*Q7@eSQsve!yOVl7FYr3Gh@5|QE@5_c2!*7OeE2t}{1p2Zb} zG@^?uDB)cf{%Vuy%B!hNl6=na=Rk$TZnoU`H71cenXi|GRjTPKt-H1agd_FX8O~OT zJdP$ilb@h?K-axJjd#fj_*XfE{uAX0mw9ub)?6U%Y^qgfHyekUKqaNtNo|BddS0U9 z8!O26Sg{Vzamx$mWVyt*!4-<@?tEv6bx8d~hK>cUrGSx;0c}y*Hy0a}qHlacsa&*E zYQm8$atqu#B{?aBKnsGIPhlGdR^yNwQ&C~Vg1xm(E>ZKPs!fmC)#JWi!0RK6+59l@ z<}>}SR=LlL3uDzPH{-g6w3zKHxmAWkKZn04P{%uIxnd9Qfq^oM2&bX$czvLwxYWr%MZdmd{~emBr9^Obx{Bc8WPM zPS4lDZZz$xdl|G5PyQy<_U)7jScS@=c)t#GF{s8&wzG&tS+~zX^BM-TD73~u-$Q1DLfnwF7X}mMK?#K8qEWxtQ8nRAEFaa!b zl!KT?c|YxqNQ@QGXW*1~504WeQ^MH=^?txUl=V<3e%N7GPTS{A^4H9%EmI@|?D1}| zvRW#6|^2LwHDH;;;m+DzBF>0=Q2)vYN zlIf4!-2GRfI8~&Jl7p!(aEe!ZxZm>=T#pW8f=S^r{sKm;(PZja?<8r0t=S^J*UpZM zG`%2f_Nfw)t$xD$W9omx!<3@WZO?u+e!Ie}_MWS1&#r8L|xk2v)XZovciYE(Br`F*2+ zrlm?CB;?)o?hf=M;!ZNpeK6^qh_#fZOI1^wbburr_D1WhB;CuaMZ z$&0W-L5ea82C6>xFw@BWlCYk1c4=UO#n2u@rY1rQlE0+BB1TV8e!7DcA|~SpOL-w@ z0|7%2koiOfx4Bk5XQc)B9~c3d5qj*JZu-jEQo|7!9eaS+$5u-Cgy7MKb|89z!eN*H zoEW1gUSo(&xRG6HcHn?6Iue+uf{Br@s>EqLVKp}^mo+|7r+ixldekwzNaU~w_ zdeSrNi^X&r#YmR5oV8hfCV`(0eT^Pn3CM*CIrdU}CoLtN@_K?6&?5HdyAA8w4kpnB zk`*Wi0p&fAC(If;4reX(tpmuPSreDA-^(t|7~`9T2~ zG#J+hA-Dhl0MR|Sz4h0A-mGJ!Y+N(HcKbQ1P(Zp>YsJuMR`7_JUWz)}Y8AW3Ns=81 zm!U?uRs0hrJc*6Ur=g-%$J41UL=#g5ELj$J8-PKKG^FAfQWsM=4WdqiUMWa+V#8AN zr};jV>R^ted9 zEg{r-R#hET|Aj(ndOmMdny(zjNEQcB9yzW>snH}zY!v$ucz3--aKDVT;b<&L2097O zj9?CInolEFJ~`tJEWyu|@`qCP+G7o7N|!q>SV#-aC;-Od*Zr|kxRUUxpN?!H7R)k& z>QGtV7?N&-%K~|Oe|5T7Q|><15z}^7G-3kaPY4+nYkw&%uLwbyK1@hhHjJQ;1%ErCNj zR#XNjSLujLR0sg#+ifi|A{r&oCpSiZJZoa{2br?QU|8O60@0KL;0XdLK-1qCmq@ky z2B(4zNbG`eC+W*mKCD9kBF})BbZrpL;F+ueUKz5!P0!L$^TgoJ;}wd3KTV>+{yT65 z_DCq4Wm=_G14akwCgj8)EiUo`8u!5!G;?2Hwfoa#EegzWYlo5Bid!j4~#-dsCL{h%PDgH?4Eig-SNOWNWt~%mJPe4I!;!M@Wury|3@Ggj}{$ClwuZKU>lvw5U8xU)GZy>=>_ zrXQ@U@h;*U$H%ts64u^?r_HI+&kj+k^mQyFR}?iDi))W&L3nkF2WKKBGe^pbi7Zlva zGfNR0J9M<1@Fm!sW#EJeUMzBJ;89|%vy#h}0O$v|3b*6}VRGW%R;Z`=d(S2~Gu-u* zl49FYFq_LMf}Z58GzN66GkyxlL?Kgy-mdWgTR^10H|TDv)$n@~0*F{`18HZJIu&Pk zmyM6E^l|#F(sKj#nxU{KX9nSmLn`CtSgPk0z`L$Glep22cw3lvWYERcL7(F#{=<7@ z4OGW+T=wb$lbnb4UFbXb zv1U=%N-qR&3jCFO&zozH^0v(r*w>p2m_rUJIMRLYj`6!RhYJ9viccmay9$T(eA6-A zGI1#Cz~`}e9~Khz9z;TW;0R}RtO9kEyuY+8ImyPL9PwPztBIK;WCu&BdPnTsW+q>S zzu-VN5AbI+B(i+UEZ?khY?RRnU;IG9=MdRBzxSj0-|?vNE`x^TSjJGKpo&Ie#@P(1W7}>1UFstpQB8*(J zC|&&3lK>uT%BQ7qEyQr$Shk_-FZwn;+VSK_PFyWWqVmJ&>R0DM&W#VzB-!w0UPZw9 z?netUR%UN(6aTT~INC|!4V{-_E2(8vY`)v6e`&E&>Tp9_N%rtYpyv&O@hyk4h6OV7>HgVv-os;V}@w# z7+4gx1i0t4HoS$^;m<}bMAbm;u`&%nI^SYEzm#(>Wrk>q=!axwAUgxvtfV_3wZ0qZ zQ7@~{5T5``&QF1D7+gtC{kM1V&*8o#o^}krLQrkOE- zA+SXtkr|zt?ycY()vD@C^KlMd0*xNx9zG(Abeut&nL{UW^Ii)=xF>~wQ|ZgYPSPB& zc5xH<7<43*#LSVo>(obn-euQQwSgco8Lkuh8%6^n2o!Un2KC-NW)uO%yAIYnS>mCR z!At^+1=3iRwgpju_U;Pi=hgrjE?9ux%iu*0$uf4$1Azod#NcBH{6|dfy-r(Au5yxt z6S_|lJ2l-)DYNyeIVk&LF>^-!Fos-86;@~_p|{o_bus)#J$~`zH@Drj2cEjas@oaVeg2o@jddEGN)aS(4lcO z%P~Quh61Dt3J#2?;FiJ&DTazpw5~1mxt}2Pg1%bC+mE1K9T(f`{2U5aR^5e&WKFsN z7C9gEBT&1>BR);bWQXE%Ngr$0fK=!(YsQo)q8xv^dJ=2y^ymMQlcGNV7$>l1aPc@F zk#S)gxcoo2#{x$B7U#mG;owTzby+ljqlX+W>+(fZs*goO?*j0>ve>*QzMa(jhaF<^ zR!MPpIS8Pjx;mvP60U{!$t=?`BQ;z%RsVo$Aw!){83Vu_zIzv06(Kd1)HcFZ7QMhB zi`&MFn@*rInIqH={jm>!c}e|Zpmr>@Um>H5V)A*8O_MmZ*1Qw8=<{%k(N2oBwz3!v`<9tjbgO*EW^R zbgvjt)*TI*PaY$}zd@gM9CiFl%Sdv-A~!4)LgAJLLY>H~Sc3rddJpY_Z&w;oBC4f} zL270M8#qA@l60T-$6w}HaSOzJmsfjru9UeHWVPGQK+Pc^3M^$Br@A^gcJraK$roQ} zMZE#?0{W6AMc>0k)It&e(71HLHTb9&L`#1pxkqBRXT~q{){lq{qET!5+c6IKwgpfF z?N>Y>4s_Ib^TzmQ5k%s%{g>eXy$Gk;94N`hgq)Rk-}#hURhI{AA5v3E2S!hl?N@p= zelS=Ph=PMt5J`ALwv;nl_~d&IxY8MXD58SIy*%*H2`O8Hd%B4T>i48;hB+Ty+E%K8Y=y3usIEttxx^{rxiH z_PmeqoRwa_$@&r5Jk_BZ;;TR2Q;}>-vak&|44(L7!Q=e7+NkB7C<*uPlX77T)-C0d zXZnutOcW>pw@)7pN>YM6_UC;6mqyzLq97F*e?hz`YD!vyA`IfF??X}{%{ad$5z)#L zYk!4sWgFeN%4?JE#AqqN2GZb5O58qB&;mOENeGkLBYgH)N~v*BjCm*yLzUW~`nsbf zXRmu$D45*V)HLaS);J@BCC&{iE5W*rZkvMtS(KH1Kj&O`ar<45u51ySNJq67sqXa# zu8=|7%L1HVJ6l$0LI;m9*^}@s`~+p9P40j<^V2ap_jwww2uL&|1@RUhqXwPdZ866%Art^K=eP0ZII9RW;_0D_1to?C#k5CWb+ai~OswQWpSuhdwVOG5iWLcL z#Y0&SNiAPU^Lz5h>X|zhFCG-8N-=G^WyQYH#0? zEo`X29Ivi)`PxeH=ueP@c0eZYjR0tbr4NDOzQQBoKtE6V&&F=Rb!Yks9;nv`+dHeciahS8DRkn=5g-bwXaTo^)o)Nx3I(xToOiD~xwkE&$gPvQ^ z1b);SpNis8vg1_fh~H0F^QXtCMn9$cep0$Q?>L8-h{u$=qfQW?f|mU?{_I6o)`%qW zr3-c$-K5WMuDku7D@bw}m-OCn=)!sKLL{Z_n_5Prkd3nmCdyE?CbZP)@41H|~ypnejx|ItJy0^q5N|l z?$023#6j(jXx3DDI^Hwt2Kije_GZ?rWIa)4De^Yd47&hR~^wp zgI)rJ>R3&JkoUfhe8`0!lq773o#<10+w?kYq-7RT^Y@<*-xH(}K-?2#j^LQBp3*jU z_D&)^y@*9+rP9m~(Wh19kk=*i)3Vo@%Q_B&FYpUBA(1}5kNk2!E2rSyLK_5OO(&D-Cp z{HL{tc5&0hUC`baBT#h}`g}H~GPF4_a$~lwXJeCBFivDyQ_>2lWT$8uDF#Zh>yrS0 zNQPt?%FNVoibqADa;go)In7YFvEi_wl=oiRBo0h!6#9JuohefYy5w7N7s>LQn5;A9gEwTGW15b z@n@nxgVaL@J|0#1QK_tJA!kYOv34yIP8h$c0*lVX&k zGUjP((6EbrHN;Iv?*bt%xIojG4BEy@P_SI=&1n!qjK&ji|8J&bqD}@aZB11Xnfmfx zh>hnCDDPL^E4E`)(XPQYD?nQ|jDO}9{B1@pLOb8UKp+e}bZMjLAD}S)W>i3JY7`X3 zW6&NtD%pW)e_JHs19r7Yb1nGufNO-aBMqm2I$8h@$c=vp$rnTZ;P15@_KJ4@0MH&X z%a+JDfc6|f_KyK>{Ba|TFK_2~TJi;gA$ZwPj4zV!tz9t8$R>WD@x{WQt@133nbOPe zToU69FJLE9wA}63YKDunINa+)S&h}+3iY$eP~$fujf;?O7n^_JczlT{M^@-@nmN86 zRAcWQ_}Z)Yy$oj57flzfdVQNpt!U>sTffV`DO@jQeucs?LTq3F1~CY|>F#`v8&aL? zjXCkoY&$>_>;P6<2ix}R1-fj+XsCesE@^<6gwvLVZvTxxEEtF<1YQl86wHedg3bMN ztkq+)TP_o>B-8fV;FAc2(#kE+)J;M?Nc_J+l~twCagoC5@qmdRM$SGesqd(@(AqX> zDI#?gh?Bf4UDOEf=?RpoUmKRpR)}9W@(f!3(84+lS#3Z(kNPuG$4cpS*BRSjTGDGP zMa{6;diViU_+GOR9#Jn!W*y3eSQE^Kq@>)KkX>563VI178(SJV!jM=N#SiiVIz$Oei0WwCo&1U!R^#z6HW2ZX@Z;~hS?Ru2h^C|V)_ULuoebRy z5w{=28Y|CmztcNN${S`a$4xdpaQW>g@9u7@K$LlHx~D&#^4*K&0Ue4CnOWOjLPBZ> z5-g@+_O>&Hg^>egYiDuge{k4{mM^<(Gki^;XhogW7t zz!Gys1V{HA=SwuGg%s$B3aaLoO^juj_m8;s<)gLLkBRK>rXQYqZ}Ek|d>PukW;{nw zvu%hJyl1iVM0h&v#9y&{rTX$5|0fp5d#T-5@P=3aOFsfnjxub#5{^o$<)inx3ar79 z&wDI&JpY@NoC;qer_J=DJ@zUM5sjvdG4`bse|X=obP2W!SWPbWs}^dw09T%(g0s=P zRaGKg^o!o^fxlpXwY0FBNlPUSshr=IEqPB`Urzk?FrRIJ)fd82SnK)&kx>Kkyojwm zc5KNaKIu?EqTsVHL970T)zs$_oBJJIdCeY5CV65KO5e^deZBvf9obbd=gZm1V-Zid96e-YAQE=q5(h>M;nQj7P@4Z!vt~gRD|pGK;j4uWV^Fh0K@7Y9Re_Z$0mj4L4Tj zBJ5CMymCf@HG+N$9a)L%TBgFnRTUoX3kE4NX^v7fkIa~Vr1NEOqb+$ixK6^Q{o*zO zWfajS|H2=ea@?w>+}lvsL84#eUDdtOpAwOPRf__4+_tXy;QA62J|-!)JKfT-dGU}V z7=`PXgt;x0H)zy{rp%{_E*I5Ch1Pi5ffNxBLa25yDP8)fDoU@oC1-;H`@1MovWM6; zBQ-`@coSQQEY@g4lpVoI5J_cwqUbLgmI1d2FY3#qMqwS4JDfE#_(n}u92C^VvNETp z|9&Zx>s#?*tjN&NF2s?Y2P?^1_Q3!5JENo_ET9gXlT>G)zhl!Yuc>R;q<2&8$x4Fa zI?Brkb>BES@aZr6+Ao}KNN{U|=1aZi5+Svlu*=yRB72KZ?ptiS3`{9Tm^c;vZYu`> zkN6zV?u2hAN?2;kgGLe4#lWt467grf9FBf%bC{58r`rTiu{Hpekq22ElKS%%rWAAn zmp@E<0c$c`4L{`a&vP~B`7A6K;VbFqwPf&Z&sS*|>sSsH$-iO>0L`ZCN$@^fawLN+ zQ!Q*XFWR3*#NmvOqc*?gP!87ci%c@ZF)Ti&lU`cMm46S5?jxwZS!T=NzD_cgWIA-b zDbys1p>ez0&i@7gI~{pg@*^Cak@U^!iDnD%o_N(f^nk~NRvk51^W`T{C&PXnN+gMy z0HErBdgN}zBNK?S16-C;>IymX7>uk@31n*`Y}f4u0q!}j13LQwe5x$$i+b3qK-53= zQk8u#kAgdP`PmP#qRrr5#8E2_&3R-W2o5wyEtGTIehx=9x(6oc3)8!`dxzs;FB@=~&HovLy!t!E+^W5zJah`*wayA>gi) zG?V003yZ!buTs7yX)-mFpDyY&!vTD`e10j20&tP&>GBj)9E&5rV0@6NG^mNkYOr~M z<-L_N+QwHjlJ#yU-|lw+Hiu}i_90{xP#?tR3l8u2^KD!K{)i-N52g|pX7@0xGE;*w zwkRf%QGNNkj7hxaYqD$8@J|*msvufOoA$BA8{Lab`s`h(=IKFY1=M2aF=Bc)?Gk`D zg*Q47tQy-41#x>GdQB5*JAcfwgC`^kP6sw70vA8CyawuGnfCGs8^575lhdN{gro1vOmqg>6|+&)5~1YXgpJH@yZr-uVdZB1|8D z&c9B4PRTusnRwnk4DJh`O2g($|FW~x$MRb=Ey=zldGz;>WMj9~YDh0U2xV`^S40Zx zAh!to#l52;Njdoo5b=vP3;HGFU|~8MijXKPNH;j38pq%yc+DF0vF7eJUYeX6?C6`TbLy_Kxc9K zw4Vy|v&}7}DZ=F&%}s~)$x{HyzvcYVf?m#IbO5QfDT=+HhrWuPeKZG3Y+HG?7goXn zmg1#b8x53&$Md7Tr^d=!=K|5_t*AZm7V4io@|4GfLqgz7DHdV#j_sxNW-cXbW+ET# z&#HUgqbzOhU+a;9%Rt1OyiG^lvpzCbO(aJ8!)cRPcvKY75e3Qmt7ReOvpf3~P{{)o zJL8Y}2U&$pxX7r0iEA21m zELOe=udFJneN)T3vE%Li4CSUA&;zEc>aJ<1V z_SV+lsU3ROO_D3fR$5T2pc80g^XD7tlm#n26Zdrxbjl%XZAdJ^Ql?-KPpYs(1 zG8E(<-hTqr;Z%o*s^3&1EDSh7;b+L32-jC=j3XAllx#>wuS-CWu9tFAV#MSqD7Wq- z8cNU25*VaG2gYY&?o?Tgc+Za9K+`IN&Hk|{dE`9Xj(Q^%5~Xj6oIu;1K}d*))=ui! zWEIWy3wXN!G~jy#z}kU{$sO126&nr%NDA6UIPD-i7Ra^3SrMwb&r3DM3&Kq;C>*Hy z053tZqlvtl4G}@87IO?;!ySx;OY@W%CeQ8ms|D?ocl`9L#p4xv_sw zbhcgV@)t83h`K1;0EsBfii2ZvrbSg1XBw1T$`C5Hg5M2fBp&Z&2n#ZY{W1jVZB32Z zC#Tz^u9fJ^gq%sZc2{Do*q&_e-rYo%q-q_g5I{bz?~;KB}6wkxHY63TI57!@}U!M zKOJFGZNz6v3yx}ow12S(bUsrd_()=&x&+{dT>mAOTEJ0*-9G6wd~<#fJr;1QpAM3>?rQx&Tf0{o0iYW~d|aFznUtq#UE|$Ov{%L0b#D;N zBTKPwPuss0+JvY$G}{|7YIJ#g-H)x+sin!ORKgl(lyiAkrn9%RczqND{OiJVcUR)3)z;a}U2onEtWf-qNuRex-la^{zx4V;Gnl7x#mg>xcjnZr-2sqYHF-DX-930&1JU zD0BS6jd&lHnw{n3NpTH#2mLO-8dCWv_z=Z2-R7h!_HwEdZ*@jQ{n0?cLjbXtk58FC z5-AuP8Q2xdrLFz}Y_qz%M*FBBo@hgCc%{Pm&$zgg-;wC^2UBuj6{x%r^!-uNb15XY zx~lxL+MKv7we0i~>O7THM?GKegUP>J0Ey{KAM%PbofD?G}pLvS$_|*R3Z#oh7UY9r$jK2E;tQ+cMS9lur;OhucXy|(Zr60DX z%vW4ybz!Tjm%hiDPaKDr=aL^n?zvZ-EQP!GAvB_#UqFMQ_BM+R5RIWQF;$|awq_ju zu4O!~zwbq7G^qDL5jzgv|fM;krKNwGb8|26&pgKEmF|V4Ire zR-Jr11S28_x~rbM=)N58ZrSj`%hGfJR4TUfJ&fuphn;L6t!LzU!bdzy3CC_*z9bI` z>aGB2mM_N93_ckWamsDGshTVV*4&7I9(Dr@oft`}?EFz^GqP0RFfy!kX!U|4)UBse z%o$P=NBXbMsNyo$U6ENPR35}|2(aR~*jB(;AeG7)YLx|-miOR%tMT>c1 zTd;u#+~Y%5AQ|qb@{XkfevJ%NOhl?FQ%(q&_8C*_T5Vu^=`jr9o)B5uCl4XCnPGSKN|2-$?3omsJM>t*>AQ7cD2c47^wb3By$Zcazy7jOdVt$Jpr+qU__eZb9Pz zReMR=1?`*uYFW?w(IR7$z^Z)t9zhO@ofl7ah3c1L9Vlj9>tOce{Mr@*=kN7&AM~GX z2b{~Bzgkx8m9PrgDJzLetYH>VkqIm0C}V>Y{Pi2gzX^yf|Bs*@2D!PtE0|dfqrCa< zE*VI9mFWx|Ck%CkA`bT7{OE2$&I*#U+KnEd6bw+DH{KLPyf6|ZpOY9@PA*zQ_<8ye zeYFHwWY$yGB!mb19H=$(YS(k-Q>T~6Tr)Eps@47Zo1<*B@_-b@8FoDi_mbOkwKT6M zfBvU+_)$@rUBK^NUd4=09Qw1QVp2uH`yW% zD`Gy~6>d8@H!Xe$)KBut~tXKsDCA%2myAmXeeaNZDeF{Jxe7y@; z%L?8BP33`)Vdyb<_N|)UO}5nBtX?f*~t6Y!Y;(PmDJ!Tn6tG__4JNxeX^^~ zGS)bF=BeAQ!@bxFpl#@L%7Zg6FV7(NjzacBOrP+o1#2l}SVgSAM}oN%pEElo7A65q z1K6-ih4It+3h-V}p(F4Z6)Y>p3&@7bAA?m3&vmt;2=03wG2{(B@V{w(2iSZGeCWJ< zP3bOrEYcFE9Pp!{(SO|d8sW2bXnx!TR!`sS+yzE$K9PURt+ja`BwwC|wTvl%H+e3Q zIWGLs3ADl>@*y7ZuB|vJNrfM!{o%GM67wLLm9j}9<;lN~zqt*O&a@gy^q3K8 zgYl0o`-f_jd>wV;a&-U%AY(%bqh9hS##MuJK|J<59SKqPdHW2?Ebc~nq%4+K&d`lT z$MyJsu4<1hL(fV%mKqCe?bT^FIR$8bfdfRMBYIfx6#Z1DRQc(&-)C1;6E~t!BQFtM z_8;RsbshpQDnJWaB(ZF1Cln?AI9C2r%MVSFlRFkJ&+ma$Qt|0SV8UvlrlIMxek9B+ z!Wdy#wQCBqK;r$#$S60eCYrFf2N2|A(5aw}1QUEm#`}ys3yy#HLy5VEkC^|2P6@2mBYvlaxvNZqlWLE%v8qJd?VdwGv(YEh^vg z|9@+fym2sDt8A-uK_TSg3=Yb?GMxoFspRDg*;%tR&2RAq{42NzQd!;DP1G#1j(aC< zj&^9DxT+j3dC6g(P)}<3Gd$*t=tZAUBvcc6+p~N-_Q<9Sd~9i`t8}gebMC+YYxd*Q zU(`M#*y#}|`x(`k8(<<40EJc_D&x>64Zs{70%PiS-u`agN|RhGKk{)pZ(_?-g6BwD z{V_Cd8w_(Pc6u#0hmZEqMWRXS!h4WmUrMwJRX^Jw%Qd<~G_wVrmHTjYR>0#=)H|hG zMrqLr24jA+Ve9*oS}{o?ZXs#b&oLq_UKV91rSY&BD|5J(1)IazE$YbBx+y-`3I|WH zg0jkzFOUBp3iw@yV~XN=!fcDOKI+aa^#tRE%Y2I0|AbI!-_%IAUQqtT<9z1Tvry`m z9t8Vo1#TJU1g8+3s1+1n`Yeb3(F)uH9#wtam5#rLky3!E-SGstAqNE9^UE!2=(}6r zlXYz1wDciktrekj;A+NZY%qc_iV%+-y3M49arAwv2;;g2e$PLr#HrjRv8IGqJ03mQ zwJJ`7Y$+T1Y@ve6@<1t9nEIiNk+9Rc?~%f5^1r+BwZ7--68mLJ76^{9GTbdoM`W~F zj1cM*)9--Wp#X-psAqIVmXz>VdhHOYbgB&1tZgcXq;f!5B@I*4tA8jnyphE@U`DlM zK>m^wjMkx%!2=8#k4w{%CU8>3ca!C?a|eN{0d&7?&Pj&qzJk{yQ5dV(Gb+ajvYDz?PD^Ho7KD0LbMgFcSV6Fpd-fyJfYVb=Y4Zh1KZ?)EOel}C8vF`{SXTL7_cvOI_F@xx39mI7 z17nes6V!J~7G)n2VZCg^d*jLNb=T>X`Sf`>Y8-AXYdQv7y)tp)$-c~SVMLLH+E;`2 zr}zp8POwUA0<|o{`8X0NC;mOCU}-JXJ0Z~Z*h=`vZ(M_kmYYSqY%R?&ez2bN!KXzp z#MRW0%wgY7=J3x}I4|Nv%hx-mqbB+FYaJI}ZvHLGgys|gWs`0YjD|{D3zy_%H-m3n zwLC)@v3=@TNm*v*Eiky@4I$-YIsa*uRd!msU$aZYvmnJbs3J`QgsebAYuUIye8t2Mi^85ybFGzcd! z@gB@Ito+BL!Z(Dj@i1^K@+==iBjR(T6$6f$Kj_&Ln9sX?piXrgMY+P18@h=fo?jQS zYozFjgI=>w1SWkG;St79X)J|C>iWT4-Nrx=`fx(2UkG0Fwju);9L;^v<{|FVj24~bKnUJ@himQ@nJ{tqm z>o!zRVyU%c9kl}#kg9o}6a^_xrb9neFS->{Fknkj&R)p;^EL_V*?H#enxWHoCzMZB zXZdN}m%_-A=cb#b4M+iol3K98T#iPmPT|F8J-H-**1a5{JopLG!BLxhpDmXNUhMyD z#6)-?S#uhVmm|fH1oMq?6H;>x;8wkvC~=;Sv?2|pP%q+w@&4O{Gw<5A(Y!MIuM$Hh z3y`6Tu7ZHjy@B7O`o%rYRrZ}u(7ZS(s~(-lt0r#5Jve}0sXC-$_up}X8h7Isn7Y?x zp1PV^38Dz$xh*l9-ooVdtJ0ps$i{r@asBpD z_p#)MkbQ~=UUObgPm7lAb{^D~=piJOr|`3z#SW-?B$YX1l;fcr^Ke2(R~Obvj!QEDC3(c!zytq4KI+-p>_fMyjNyrEFdoL)jQz$D9 zK4*rsZtk;R|7yMxrh=QB*T#mT(C>}y;w22Oz#s*$b$wP(;mQA=eCW(?MQRqFbTH-- z1|&R%dA&(4!>jEqdPA+K79HR;%!K=dP1tcGdiCjie$4fgq?<6;x>!$uk zuav)q*_@q5!p3h+=D&8p=Cl!KYyC&ANzqU1HL4Uss%c*83Eq|EzMW-|x3ILC7L5M7bQI&}cd;jK6mYve6C-O?GH`T$9 zd8OfG7Zq3^?cI@-!Mg3y0ugXgNWiGexLyX;-ZKvTivSZZ>{L(WU^%R`JaLrQX7$+- z63}P_J_>s}l3r+pN!o2E{0h}0^06{pRJ5tJzF0rJ>-(gNZT?^ctt8De$->1_Fs4J% zZ%vsE5hR?PwBU)OZF>tP3i&yt1_P^T3li3 zN#yJKDplGF*}(u!aY>%Qje*O+N2aQ`_DYp$#WNo&BMB`0e+$@3s48wn)JNdViqIBAb!4D60SD3s)R8}7jA28ods;y+_=U?6G| zyG8f`$%DorF(dwMK!LsQA&ZY8!xgM`C!Ecc=8ePO=Xf41pV7Ow;8H*J?tI@t4zx9> zCdeY5*K_`Ou$Kgtrjgiia~VL$TD0lOcP5%`}UoY8nlIOsnm*TMgH4a>UD2s4wEa-bhhH)Rp0 z2<=EbpldLviCAM-K+;?x!fAzyGxNn}*`*)FF2Iu-kFuQ;yGUv_Y)k(JnKK4Pi^5dQ zgl@a!LT%@4Vq_yxJ%dw0Eh1sa1Q=1`cO_7VT%Yy=X15&g@ZnlFKt33)dlRJ3JZC)W z==MD`Dp0~P+H<;Roh1P9FjDlEDXn7eIEh6l)J!Da6y&rco)~~9vQQ;$Y8wU_=Qo_dL^-?c2E{iq8komN@ z2|-I0PM|;Th7f2~oqGVFhUp-)z@fA(;F##N7SVZ3k=T=RSfcKmE;Syw5aMI3mC8RA zD$Z!-h?iHh*Bugf2_Sj4BX)`AWWSq|7a#jG_t#gf7@!>ac6|q->;N{1_*IgS4#?~E z_x4e&WB(~GpqQ~#04HSynTKd1?ns}2h4)iKXT;vJnrv*g2auHsyg&ZL@r6rqVp`w^ z+~9yE0&NS7E!a5)wnZ(!q~jL0|LZgsdYNUT9vjvc?zr{xGLo(7@(d?Z=hXR_LPv>H zfd4sOp~R9aA6L<*(xfVvza)_!hXt<=z}BJryIKz~OlLEjN-V$~pQ}o5%oK>>5*Hm6 z*SBKO`c%Nc?vCiF#~(jQGAIQ7qlWUVenh(!F*pNu-o6@)GHJmqMqlPXKM3@J%@6+c zizChfB;48{7cu1_D~0)(~iX{*!zxC-=ihOA%YnixAG7Kn&- zrL%}0v?9?&H6ErjgRV4G#L+`?*=&@66Ss;ZKPS{Vef;JA#JgC{m*+gBFFQ}%`btt6 zQ;vo2Vg;p8x_NA`h%kj{D;!c6h;U2oQd?#^Yv0x}CLd zMsPEMJ({0+)`@BaIw9tRAJi*Z5gRi;mt}V_K_XDlfD6!m>%K~pZE-oy3-_Z%=3cz+324!jJ%oe*f|L9ar~-}z z%FQ6=$Sd=J-AL<5Q&IR5I09(+r%Fs3rxaAQ%=>0SWA-^`!WxmH@SJ3~1aosybh?Bi zD1F>JRmU&xtVIZ6Ie;8{cOxNtJ|%j==WNwEL%;B!z1VaDVDU zKAvj=514`s)GA=NdfTU-b*#-kn;;uBjqx^@>bR$%Qsk_Oo~TzK8fK>{%>M(aCvzdG zbO7i6x^JVPbT`3Ilxj;&!$xc@Q>JpO-&E_?BmaG|w%<_yX6~-mxrJVR0`pALPt3z5 z-K?aqP^ogqqYD!SHHy=CpNqa*BmCSTV|H;fkz$#R=3;P*>XmiME8jeCU(RqD-=XjJ zf18HzQE4a+H^j^)j%~fYz5sdpK^ffi;KJ8?GbR9O$X4rhQs0FsTM)+!7RsK>>So_d zW=^75>Vn4OtT%A($cFrapA@Zc0c8QJZMVL`Smw2);_Qup@}i7x--7o0(Ee=)WZVaN zI$YPKs@QpqhJr853YGKOjbVU;xzO5GOv2q>_y<_c72&+dedU%+4^Z{Kqd8`F)xPB2 zAJ?LD9o~Mmw|1+)#jyu0?Ub-Jvz|InMjdJKD@LrKlqejEj$|qj18Qj+{M9Br^z}*b z>4v`v!XjTwx4jaxTy)R6RiV;Y4*=7Z+i`Ho@pgCLqbE7r#*Dam+9>4aheD{mSaZRz zn*~ikP(r`v@7%UyPXX`^!%vn`eM^fxe%hXR9>?8cAN^NeFj%y;-HEIhn@&&KVUrB0 z3hs^uq2*)_p`T}-7Nn~6?ey4eT2AW?BEy&}6QKAdvO>uEb>u0`f+UyM;mV*U*5_p! zlUaGp@sWjksiN0zY3Qp&X3~Q!Ut-@3nL?yFssNpFcR^7>(wknK86}FKum}s!(1HN5 zPUAbJ6B~ZK67kq>gk~{0E%T-z{c9_f1<5n*-06#ybEayF3D4t&KQkXXfLx|#V`W)* zX7kFe(hev*;n4~c4U#ohl(=$YKXr(=DGFJ43Tn~jd45`+ejQbgasgQ0reS=A(WJoy z48N;8?K~m}-j#1nNa)u*Qjku@2Du9{FTEAANL$(Asu8=gn;*E3Fcfgh;AoI3)`H_U zCR)$aF;XjE*aM>2$or))k4U>srs%wE^~~2%>?s6_jZklK#Q1Lttd51wC;oy6lz772 zh(m32bF-SVPH?#5h`jHJsClx6d(=1eS;Pa!SuvnY7hxfleiWiryQWA?y4QbXhtZqU zl&oQ-*EU8rR(2)!(M}vU=W=P1nbjX&3Mo!W#@-R658ohIG|=&G5eO*YH$K5mtLU(v za7GcT1c*AG1ZS_}5H@9k4%i@I@wr&Tp(VCyOwIB?mK4@lX2_#Ol&-WXN7EYe#XSt_ zn=C)oA>cw?$~R_|>XjuJCu_}aHSiK)51%ul?koMUne^$9}WaeU*X!4-=_|F zFtM8Q2M0hZaY3H>PZ*u$ z1QcA4oA`z$X7&Nb9|6wFT{J+Vv47?7DRB_@R7YY>gx9RHM$g{Ps(orEbT;9~#fJ2p!%Q45>L&y-fGwP8j{=6u1a3X$ z$ooy_cl)0CmK{P$4LC62_7tln1XLE5tpvq@_-;wvX&y>hu z=po>KH^;950g$1yHA=bi=r(l~3QKDS{ry5Nd2z0$t~URpkDInj-UnkNB!x`x)X?r% zEtZWkCYs+1?WHSoN%{Q0;+0Z;(n%=tXYyh=@|3`e%F{x{(nIhl`MHs(SK%R>;LuWC zCWBd*={O06feE3cy#Y=iu#_DdR24F+q1fbQ+hZis!gg7tI^+X>RJljX(AwXH;HK^& z_Afgucqv?lfSBxon`3Go@%9>wff8c%~u3V{}oB9sxN(dyN;M}nzn-WO>+J!{) zDBKR9WXyj|={2B; z;r8lZuLd?1V~9Gxv?DcQFA!$tTGr)edpr3!!)u_?b-m+{=@I(xMp)}Xa53h+vxQW~ z>HHhOss_OH)ao%~sb`8eUFx>uo$bmcGSiH0jK^vEUc~A!)&46x@PGftjxav1XCL7@z$Xt2 z4ybJie*@)GuiJ$Gk(fz!aNQAuZau0B;WN`|mUQt(v|dSTweyLI?df2DqZE z$COz7 zxUt^tHSBQLeEkj=k__gYxH|c{gnu=ZRY;L4qSUa)4GOOnw&m5Yd`PDSpmh%sIF~kK zBV(6hD_x5j9^I~<3#gb&G^DNgWc|FVXMG@OeermMhvKOMvCLu+RZY~lFH1BT_vr*A_(tamR13&K@l)umQm>N3SDR79Go#AL@ zsNFXCi^VElVbSPyBZXol6_@71`T%CWVhKo60CI1igo>m#%eQ7JOA7&=w{E0xH$%cv1LPo4EQ$ zCjNZnIwN%1XjL(h=C$a1N#}UUV$)YZUud=SNWPNf86)xGx&lwC6M(Vv`S`_In3 zHlD$#kdnUi-XV~qY`*m>vpPi_Y%p9_eQ3$^|1h?B(Gb2TvB{}gIAR_u56_RG@S150 zsGTer$Hq(jO~)onIGVRhL=`O}8-GfZo(2p_Q4Q5O*omjp#7Mb-Y&u}Tp#2@-p`)q7 zdWQkcXQ(P%xiNeaz5R~l)S88pi0NQVkZK;$)+H&XJHhrivP_{VL@zzKAq=2QYc|UF z0n8Gjedj08M!s_F^DTrShrff35<@d zZrx$eDr!Gk@Knnh4u*x~sRnTmJ|hH*EajK7Iq(h_L6IhiJt=@BPrtopbe5Oj%^A`H zr5~?$A0GgNODZJ6rcP0KP3ZjgY?C$pbAxg_W11PV?E zO)^=;?~jgLGV_i#_&gcXm2VK)*q3jGzs3Fm77S38|M?26PA~zVV%QOa4lK~ZPwFmF z!%JnOe-71%8a4q^Pt&}P@cI-OPU)GFx8dHTe^Usl!57hxggOsia0J0+!fz)3eYQFf za>xYrY&8t2CjP_BAPR&$;~u3%b!Ue%c`m@YqIPp2(Lrhw(|WDY#)ZY`w0Lb({eqYA zJ-1mc_kh$pDsfW8x*U71Dnh?((yWsP9^-{j%eMYa6YC-@gv}42weR|$D!dGpd--Y6 z>7(H(Wn9NIplBQB`D_msB}sXNmxCg;I~b+qvGNe)XNA!bJoYoOv^XwNHn-29h4PuhOgL z`X{vnRAU#sH^9h&mC6cN1q+Qor0gOK+}SdrHCxuYLQ{W_eR?_N#nLv|mlx1;vo)XI zOhrZwldfXa)fw_11n*|&wyH!XC?a?l>C@NDbrBSzoyFjc1o8vV;80fna78ab%cZCJoF(>T*F8ww(G za7O|xGqx5MCbrakHN-6T(odsxuhSnpB@bMs9=#cfg9aDa(T^A-M=@uVqKR2vd~D9d zvb3Px>xbsQ-Wk&-hm-D&Zu?7h(4u4IHMq_hm24K>H~J=BCynj}dvm(*<)=`O$oNAV zF!XGn*S^nEN27tEu-@}s?O0yE?HX9`>vZ{|atqfI0tt=bLrHQtEVNX|Lcn$B5F82* zuoe(hgkmV%nIsF)vr9v7vSC947<%Ym>0uQr4QJc>j2_vcS(1f=vCGr88VamBq;@jm zE?5(vxWdh25%2qMa&wGlTGWeWJTC#RL}4>D3=J8+%q`a=LMqm2R`qP zbu%Q%F3cykQWJLviBkBKt9*?A98 zBFJSvd&t3=U_N@iNd*^Bw3o!d$WlF~Dv-jC z*Mo_15rH`|4%3B1J<|(U>0DK;Aq!j8q@jTGHD3TbtlEi-99ph{bsU25} zn8(7*(OOnf*GBFOy+>+?7{$QLQ9s2f%;)XWL~I%N4lQ@d>K`EBkc%>XG{)?`L4eS4 z@f=>XEb#lp_xHh;s84r>d{r}JzdbD~AHcQ@SY4%ya7kpgItjN6-s#`0(wjDVv#7S) zSG8UvoeuBrg0T7KoH`y6Fysa#A8WyjiRZb^@1pI%Cw||ME(nfF z+CFYQBXjG?jVxJ4w>Q_ZZ4u6v8R@8L7C3S}zjWVsWdGPs4XI+vW;xaQW@%a+o#pH#{d$2gnL?vUXDl zU{O%1-sI&?d@evtkYF}VEXc!Fj_Ay;i5fHE53V9*2k+F~Ev^js-8lGHPnuF3*w)TrqlbNGncw<3&p-c)FFkg=ZO z!&PC)qaeQ0;EDjEuYRuI`9N^oFWRhDP6JZX7CSEEs9fj>wKji@6d^of==E~3SI!~X z>P*PXm3e78D}QVR$TTdW;9)~#Ha;Ew6uTF-vP^Zjz9yi~)hyl*J^)al+5WKeD|SIN z`I>yDohP%2BZ}tZsS`~d0W)R>^AbtxJ{0=-CT|#P5PQwHZ?5us7ED1%K?gzGp=uP_IzCf89^VXWT=Zz_B7YoQR?s4- zkhC8IZ8(>y6}u&J3TcMQ2bNP|6@{OJnoyxu$joK?X+7_MGbz((Dg-7T6nyTQwf~J7 zQ76zUM4p0quonFTy$khYz&5SOX4CgQG7h!AN@`e1XwLQfi?!+H@M?SJR2@v5k+{D% zSJi>nOI7h`WjRhKK~)D^rM{M%9OBz4kkao54lrP1{m?;ze3AaIFTRzl)!Rf1zBLUA zVWvIgYjk_o8(zrLl7Uo^r1Is#km0evp1U&&UU>88z%|g5dvy_hGYLfBeMf0y=${h1 zRE!_(8-V)*K5TdORU7gcHvTs^w!wQmpHQY0ozyaUxbqo9CFy;_x1g8r!?!uqvyDvg z=i&U(|Gy0l;QsF^FZUT6VrD*qV3qgGrli=LTnYGF=NOduR&`tcOeqqCx~FIIw9Y^> z3pbqFr!Mj%UUD&W4YfFw7M)v8nJmZY7f%F;Yv@UlXO9bAMFg_1$3IR>eZ!Ur0n!EH{zZ)>uVgj9BH3UAxM{bUbq!*4(+}5< zGZpSz!nTJ;Fnk1g(I-da%6+eFC$C%hUNl{}k$fF*Xl{CBU~UDzT6y>e|5lw+wn${M zzu4gp2%SxE&RLcN`#H*8-^bapyXBgib@^FD(BP|Miw=~kkk{|$#No3eXL;R~?E&x$ z5|c5`AF9S9>J*{3kArfrjc!!Z+Oao2iqsXgV0=BfDMt~eq?GR%&-e*tSNH`&1TXwy ziH5M_?}b20*E7v61CTV87 zQ=NX!AR=*?YTE*H200G*$b=y@Sj!|I99QI`?i=h)jHemJU=rw-V($uT4Np2;izzGY z&ZB%|7;NfLag;o=En^O({V~pfPxg#I&}NxwIUOXFr-Fo!Jwn{q<)_r2iu=rau@q4I zD(18Q$K3ER4Lv3SPwiD>v|Aa6o_&9|eP#I>tj%s^dhYy()2)ga*K$naX}>=VwX?*7 zNE>zlUNv&^_)xkd>wMdw*L1bsUbd7kbeP#qk90$Z z3I0E$nC&Cc*2qW033|O~57J$mutm9kC{qEa5(0*prnyc!3f*=S84? zxsp^QB&}E-9DvS{9+nQIc@T#725aaRl1Z0Pu=A}XN*)mos5jo?cA6@$TVToTm#KzS z2I=L!U=_V&D-rGp(r((G5r0#q^VM&9y2L?Z$IQcHvlr6%R$rMU8Ru4%@u-3-pX7Ju z?UU(pt(Bn1O@WzM`f`?X*-yxJVe)L|L^?(2S}d@l(FX9#b>ly_lv-gMxa4b~SP5Fl zPI%EieoZ@)?4I-0lOeNKw6<4>7)nx1iH3m!g}DiSbY)z zG}ap%9C^^_qAx|oM0w5-Reu7s=bqePfE-sK_W=zBipWnK9iG zCA%d=yz$v(;ZbAV(5?}tCtX98^*;gxPc?%e?UMKIV8vT}a{`u>uQl6md6D&rULetmSl48s=hcx zqUQLXm%jBn!76SALa-qrT5b%FFA_}+bW34Fik}nZu`|kOPcz0=Q zK9NwYo6`w2zG?v!s-)Wx%Bm_MjU{WtvH&lA)Nq{-<}}P|O#e@BXnW!n!Q8l4(`xu_ zhzolgyNTGR(&aDyIeV2XVEL72jRfzhzQ>aS8aAOOX!P(G#9t@SraxlNCG@#jI$gp; zC33y|Qcl)}BzZK3_?OstWt!1l-cM74a)tQq4HZu?gep4`hX6<5oBwNBX5Xq5-N{`% zdA2h3=UaJD_s_LUafJP&VA*E)i8M|ps!fodk=g#ltNGAMQb(tQ<#9w22%=J`7yeSp znZ2Z*ddjs|#~Kh05}FQV{i zymuKppWSm@dW*1K4E$pJ|MZeCvVh#_9@ZkXp>(wL5`#5(ez_%-U(#0#W^*1sdMz?H z+%O!IBlZD1#)r{S_t0FPb5C1f+|;>!m(lS>3rb%~$maS>o{;E|juf=bi^=fOg@{P1 z%d6B3T^)vUCA0@Sn@Ds8{O12*Q1M6Ngr;1hG|HhQiNytG1mx1*xmo<8;VS{!&t(Xq;F zxJK~(C>?-P0;_tvYUZo#gUNqh5(-4@I^03G#kSwx2(USJ}^V=!^HOYELqQAB>uv%CZ6tdt{zsH6?0xR9YS9@T2aC= zZR64P{DP7DCpFjxdJI&zwd~-XycE;+%FKFZ%-~kHk}#E-8%Ro*-$%EZDfVcBfDZSP zFQT@BT#G6vxP8)e7(}dU`D14o+8n`u?5JA5S1+>&<+no5yXAe(YQuK1?HUvm7$V<1 z3P7RWTeGt>DXf2MTO3`IC6mN}RbA&!6{mbq^xR99F=>9pVVo z4!HBO`0qZ=wGZ}-aj-CTsC`FudVHIsqqa;n+!)IV@eDXt?zW&3K!cM(x4& zq|G=J+`)?b=l85;gM<^oYu1}p8lh=4T(7Sw`1ksYs+Wy&47Hp^^P}R6!NpMR6OFQ$ zNh$%HP}=#o^DLff+5EDtH>m)#{J0dc{KGE}fbXQLDI?}a=&B2R#&D!0}W zawl*MJbUFoTx8%vnZH9~9^mPmc}SpYk0iCTnd$k}YweLQGlFbLiqlN)ff-a@#?{pC zce_fLT8YZWL|kxeo`<(fYV1noHgx|4+~7n?j{qz=TNP+HQ^%TowEB|zQ42f&US5;E zZTA_ZVi#rx&OK2>l;|@nob`~33DQLBQNNLTZcKoj7DAM7tJIlwI9=(j!3GoN$KSD8 z02h44*kKX;hO8Rj1zo7xpW*^{%i^CxAA$q_3;`9Bt&4b~`|k(TMyxG4Q3Mo9IPl91I<`mwB|e%zpM4i)nieNWZLZ;Cd{-%7x(&b!uoQ&FNp4~xxOB*mX* zYjVs;Xnq$Cysau5$?;wSI$Y7vP6WHOYsbQ0eP{HcK@X z8rzUA7;sXiO~ptkJF=EZQQU(%UVOII`0YmVLbWz$c_RM^?Xpk7y3Bt_9Ph)RZF0Kw za3T6^KE>G$G1{jPWYj?OGbJDE;^A2MRoB!sf55y83st5xCb+d%cQ0D&o$3L9ETuy{ zpQg@FzO9yPgmm_yMXM{+eB}= z-xnr6qJxs|^0JHq+u;5FNlz_`F(OL%e8b|z283S7kTqz@y2Yjp7&ds@5*e?ppb0y@ zGWpsi0mx-Z$6HZj3tsp7MZHrD5@r=8732)^FYG+a6uP zf>a_@XI^aYhmr{o?WxC4?rY&w-qHex?kda>eWEU8@m0`PJ%F$+g|wnzhb(NjwBjxP zk{{unn)(8SU!O>5Iwj|a$b3E1kyfhP8HYJ@a_=o#8aGX;5;3aUj|uup6X<|vRkOtr zZ(utC#1HF@b$UIxHT{oZZHI@Ax!hS)^rM^>TY-?l!Oqty5RrqdY4h8orgf##pNG`Y z#V8~ZAkk-I8ysL|Mo;k$3;gFK2ISvUkI3#*zSE@_oFV z?K}TX+%ykrEkkMZICc})8XA&@& z&gYiROdq9&Q8$2iPowBGVv2ko>4#&};!gjG!sX(szAz>2{*7lU7P@s58eU?-`~;|b zOQKSWRaxvjAD=ayue5UHmucTNcRa!R42&-K+DXWask&$eS8Pv(V(u$@kHU9dk7|WV zv?BY)+CU~BKT2LGIuhf7u6qyI4+xE-|9ZH7f+GYGL_2m$eVn3nf zo(HW1?Ap(N9(OxM{vuh36O6pZHGA&V)TFQj4swmLmzT|E3EjqumKX2@2Xb8=v2^dd zTSJgO>&l4_@!Z#(@_mSC9u%oKgQi|}N}DyorVBa|!Tab8RgAp~RA-P_QhJ@oT|AjZ` zr8lf_l>wP1{Rv<{_m2bWg=_UeyyMC*Ka7^UV&8LL`j}LC>Y1A4Y)#Y#O7%)VAs^RM zvvu4^Knqbntv&n~e6co50~+&zNUYk^hYea9k z19ZJPV>a?AW~S8u;^|F=I)jhlg7%0nKe_)@p`Y*%hZlufM!EeUX$>Ip-(R$ff1z3q8T2U0rSX=XdV!i)4JgBD zESk>s8D#Zg{r_4Qh-IGc--J2N@-TQ2uUcDPMMZm~l+FUC^T8jT-1N#X7=hsJm!^X_g=Y5m}fl*u<6N-{wy$0AbXuv zGi8qGNCsTpe+cB^#yHv7(5=&sQu!%N#(Ra~>d@(eMfoar>Cu5R<$7x2PZatEyqWos ztVh~DzFfHNVz%g*+*A_cCVbuR#-3uhS@kE3U3-s|s$9*@+jo5-sN6=Of@PtDS6X^1 zpn83t$`%;h=Fd=pYBBXhdtx2;^iHjF$gR_Jm%5r&_Rx_OL{H#3k>(U}$D~Dqbqset zhddjpUR7yqK>3P+d5`@7HIp6?G|%mY43BE^b+t4hwNiJrxN#DiteA)8!u^MFl2k3N z#6^;6rSiB02KXHQ!n6RlDo}$L<>V&n`-fOr)F3|WCnK$#%+n4CUGAVVE8ip zgD4uu0Igd*9Al-w%Z5+XE<|Mi7yK!!_GVekn+(y=I2t5@YIhq}0j0CPnS7c4lg)c{ zcwgjA(D=y?Dk%!p%gG_n1M?y0j3&Lz)XYI|)Z!{+J5wa923!bPk9PFTGdU^m=-jn6 zJsX8lPfco#T*up>v8VzZm=n%2jjMoEoAM28vPE(>9qA)E(FYK?Rq4K|U9Sg}ut@$avg&o1j+tEY@5MNLY7?oO1vl1ho@d z|9F5^fyVrbc-OC|`_qk+Bb9s>S=LkHJ4)fvg_9}Bl;5Tu&ZWwzN3${lfbL%6SK%hO zw!y_*LehwwIR_Yw-n7#Ou0Kg}XxyxOpnq=H7uc}0X_E>bI09ZEac$iEu=pt%r$bK8pr z|A((dXFOyMo#JB>S$FLKX(~3N@kO`cnyL!1OORO}EEZ}K%t`kd1cB%bRzWtDgYO{i z$d-LYzxYq^I!!kMOzc`jz7p44Ph*cq8*!vssd${3a`;>8BA_-D1W?1;u@ODs)Tz~5 zo3e^`%2||2to~G|EVqR@Dm+dO>EFZd8)=4-1Wrea%;Cbo;!a^Cn@|@m=}(WnAzrjI zoCO&7*ZY-JM-?;>`s|w9Xh4xitY*i8{B7a_Zidv}80z5VA6Tt7YSScJyqvk`UsfHd;9Y0 zqd|lgsbuLyM8NzxBW0q3@31{;5M&6Jm{1(8?}NpyM43~g zi@Ju-shS{*nAf<)6!?~m$Ihe6p%xgM8z*+G7&2dPYJ?#5z3AsJa>m9p!_U4zbH?}? zv3>b@y~Mg4?ly!vzcpK}ob6YgC@6J>h~XjFf_5Wb`M!5lu*ta^qX2jY`QU42y2NkM z(f1XTS%UJy*1-h56@!Z)R9RSbjm(nA&HQqiK@ z%4OmRL}T#PPW@!M@mX^#rZ+f{ohL$-cO>p4wpnvC%34_hgWPluz25hsKi+Rp6pH7Z zc;q|mBYcSt&`d&!aNq!qyI?4$ws(qpr1{W*!%1K)S)#>~ex#zavE#d{)Q1P8`1r(p zp8xQXdiBIlQ?F-9qko;Xo-+QyQY`#9O)FLGXybDoCo<^B@RdKu zBge-vv~@u<1bvo8INRp3{&d6hoPM$er2xMK%zvHcu-^|w_TLInjZdPy*OAwsAMiC! z3-6a)hNSEQ5M*GyEO6x~J}+_Lwbce~-{)~XMIMsG>ujoLr|drb*TS_nmL`=Ex%l6Y zlcXPbqin=9wYlRF7L_<9?M$mX^XY^ksEBM@ZyY*Vl2}WS-0V!XkR}088CUGKdl_#6 z-|o_jIg+M(0)fJ&?4~zrm`51ii2KEsvY%_-)a&&tP5dQj{BSUHq;7ZqY_g{6D3u?F z6eJVX7}s+rtV$XEyrAhWY+%+>R&eE{z)wl-Uh-!`Rl!%sjc+%Wi-5R7u%a|<@$hw1IdB{ZiLs~K-IL$C z`#ybTZSa!)pHxvSRf(>reY5T$vdSY3vIOTb(gJ6|;yS59B_~9=Bs`&YB>0)0a6wHx z`@|Q^6?6(JDAKq=efPX-KgS zirlGr=V3tMXWMP^HIJ&|X``8p{1xU-!QPjv*K~pYbuvKKLW2sPl$fBW!spu7JzJP+ zO+fx$-@HEey0CzyhNy}7l=_0rH#Z!PyXhhn-cqE}0 z)7TQ|i~qzg zUqbe~<<*)Y(W(`ywd)%}17h=j-G>olSmat;$!Q5F?X-?=mxOs?cvD*NVssl~0KQf8 zsR0RR=vT1fcLZ(6WiC=f;X>hDgILd=5OoCo8o06M)U++f0yAPvIn7Coc#)(fWSpvQ z=TpampvsUcsK8V2s1=%Z?MB}KG@<)yT0Ki@ZQ3A8GY4CbWdnU0Ih5cSLHS~4SZJB^EW{ZIl z95wrhKmEu>0GA8xJMq7jT-SBxgSeeVaJD67!5^KH%SJVxz^6-=9$Z3X0sy;`^&WU7 zNalM?A6$nF$)WaLr+3B73pr;gr)tux94joQ5G4k1tgiXcLJUk9?5We3MTiShKM@Z1 z38jQg=M}a`B~o!BSM0Ls%(t>d#C4staH8fqay5pvMBtqJrI+C-7?6mp9j8^(dUKuO z2y|t`DvEaFTM7~yc@}PWdhzRRmdC@6_4T+&>jm9oluK9&1+5t; zMT~ZKlu@J%U^@D&;I$eU%9jLVs6~XB>Dyxvc1VHP6l5;tV8ZB_q+&$un2t%>A!px82 z692bDEKWl4&mrC5=202>M&=+e&t00KBlX)R@0HTcs)*X`drw;wZ+zg-Mlj2vwY`C6^tfFHtS<&>cZ9v-+=dxO+ zi)_buPlD?uAkoCoaPFaWQZ`<#c;&ldY`uE;is~*ssMGH_9}9E8G%5F??L@q0JHTG( zOWOh?EHc$_5sc*Dl&&{zJweJdY*{fWzm9@c`y5;`&^$PFFzK`KHE4nt z$LylaT+kV4mMVHg!IaCgmLAyIY`G)`t^fV4$FLjo!X&EjCNV<3TT_akHl-=l&Te1$ zw5x9vZT_!-NT|DECA-j*6QJ^Iy#uS;?2V>Z08k9l{uKVM?7U(%xwL+fs9^61O8WwC z7kUGdJfeSFi>RZJTc*Yz3NXI7KaY&TgN`fgVK;^7Bda^ z^U8Foi=~SiXX`dRB(r=|%H>C5^H|@~&Zz+yG#J+jA-Dhl07*T$DD7!YUJ-$b3qnKVuXmwS>6#o(rDo&P(c#LRQevT_GGsYzZJ|pnVGByVmbOR)*9<0uyy_LMjKf<#JK>is0(4TkyJPV7&I8SHVP2d z00017)n2na%s8wuB)p4lLpESbJ6ex`MJA~1V zW~O`< z3y6BOJNF6FbGz-*u11=p1tgVs8cZmtRV=e7EkMYe1hw!z8L}xrKU~2hz{Tf+V6G9IfH>-ec!+_Zhjc-^}kky zmR__*l>oT8|*25Q(Ej{3D2-+AS`f9}R(mLwEKdvSM5TXH+`CT4l+!9>4cY0BF zlcr4R)cC~@5ZDJOzYec_tR=_4o`zbuoMHn2C9_vLDNR{p?fWyu+16mZ>GUu+qQ10s zM|x2qJXbt4rWmi3go8L?pT`zE=su27Yp32yZaESorj#2nSW@-TmKhB**Zop01+}F8 zKv8b3?x_4eEaC&rl^w+#qtAj7&+&PJ)4;hAik}*_F=N1aAEW=KmlFl)+otI{gc#=6 z)eOJhx*GO#oZyoao$>(UrtnyVu)FFFOg!ShGz~wsJbgY#CBKu@cpuTwOGCyumIRlD+xvmI!)gX^TNco#if2)fY_AdJBgnA%LFDTOc;&Kj zDt>6iOB7GYuK5t@msk5%0+KK>5GdgBZJ6$K;`~UCrWV~AfX#)bA(pqz_PebOb?Y9 zUVPdR>`fLOD$y7@r8I9V_h|}vbbKd5nYp!*#KXbSl9;kY4xKqJsb+yHk=54&DHP~q z0oTV0fl-cd6jb$w|IK zMPxF~f|7+pyVi)Avgeu`J^5=@2drxXEG23Ri+Ww+V&FLz5nD0$mzB3_=V69=BX z%WzizbI>on^4?|;wW{&EK+0D8Fza6`rG++D!DBA9u2qZ(q}pF_&68Q|e(|eDflq40 z3Jvk$2PvtcpI9`4WHpA*bO_|p3et3pN8(-)Sm@%#Ahx?rC*^klRbaSU#DA78usn1W z?WBm32>5Gzf8eI1z{*dbokeCa@5tMD5%{nSb|vkl zYOolISAEc@!|x^c3i^bhBcpUe7;3^nau7)P_TmG>mgY2>vVle-i?oS|B63|U358VQ zfG{HDv;tx=vICLX86`T|euJ&%*GZ|qMRu^ch)Meo%?REAAuGho;Fx|d=={MAKc ziu~gFL|4dn;o7=1{V_)SYPAo)d1lQ>20a3`-`mWCu;K;_yCi8-VXDo#O5Q;5ubATB zVHYB+gXdZx=3y6b;JNlMz0yD2%itqZHxa~f5rK#86Hj>IQIwK~vs3!EpG+p^bcXO` z#K9%(PcZntoH(d2yPh@ry$k5%5eX|Z*AW6x4Jgjr5!&=d9%p=OLixU=O5;!exTY~T zdy_Sr8gT3LsbqIA+BODE3{e80CA1FEe4lrp$B?cE+LGAZ|3GFu*fU(GV$EfxZ(>=()EsOlb?gX&u$ z9hURI{59ehP(e-K%G|rm`-D(AXTpexQxB`MNTO)PhyRGMS>_L9K}fn*EE&0m%}BF# zsxty<;`P}W6*>r8a~g3AUcPeLF_gKWp`C_m$wpf@jX=_9$I)mBqNS; zZxoIsTHMI+I7Eeg(O&GjW73u)VN$%4;b}8-L=^jmqfpN;X}CdQUd`D@;f32`WS}4Z zyqbyJZMhMEe)ZRSt%b&ix_Pr|639Dc*Ei*hFGw};r?YWfkz_^l4uXRPU z!$SMe(n?(AO<5E?!8--4J6E=IQtx|!+P={FAFhpp)2>J>+U&-CCyRqmUbL4!hKKkR zuP$Z3mzkVvS_9GjzkJFfM#DhWhrQ1vcuxC_XRjRT1h1yg9u{#GZRo!q2Vz}n;0Z;z zzW#;jc6C+8SaO2nxhNjd%qt-9Z30^QVd2#Kje_v!`ILv>?Gj&T?0@3v^0!EE@*Y-! z*I0o&eCdc4ybr&?5Zy4At#x=7=)OJQ-lokod_vWwC|5A&bHQ98)#|5Y!{!{aiM)H0b3oUHC|bZ{WmMYh84<9!|5%6>x9j=CT4sNAAC+LJ;}GY~3S+XN30+a3#YoHr{KkN8A?UXzN#@D^6_?Q$`XNZM^o5dS-+Gp&+cO}$zY^H8JL6B9Y4Y!90>NWPjsr9^-ttjY9)Nxi zmGq78-00)W=rXUZaZQXMeASW$uPEkfV9V>*+qicdwNNqn3A<2pBOi5gEQb{GzQY4Y z%sT072IQGhQ3gYP*haN6oKI3Lium5cy~wSx-!=tP0YV;shOqOjK}}YNA5HGqs!!}k z4mC4VbS_pNPZQrDoq%d(+2*GgOJ{r?nD3Or^~NTRS+M%Yu`jyx2|3Sk$8L9nZroSg z7cBrd31+|<)yye=7d7ShTo&6HSEj}+8PkJ(nQjk{DyM|)4p#XzI@7j%Dudzy3WiGa8UwkE@S0VCvBVQUJ4 z5uv7{>#5eo9JZR)8u^YBFaJhC1l0-d$T(tU;EbI^0Qz2apDFj_0U2J?okLw5$1(oe`qdx4rR5Nza1z>rn;a$f(9)a^yE%(^9ZWZj zJ*`>62Gw7?N0QDzj4Jh#s>*vXdEE*mqR0#@5(0JZQ1c_3)1SYLC3&xW%Fp|CKMQ8o zcX@t^m@0B%kQh3=E_y~6+W%v%J}d=?@eURLT_G#1m4XBPdT&#?Iv`WN zy7>aBC;PyqDCLj71MBUxlOCC@lg&bE#M_zj(Av|9_V->T<*Oy)0|Iq+eeGyEJ5dMAY>w-L(PwoepM zuCon->mO2sd_DQ;_$UZ7ym2)Z<8;@JmpeZ;DWC=gl;jLL1tm7b)g@zn%eV_V=H#qK zi>$fJ2`Lff$j9%rKG6Xe*4_DMuo{a5n($o`6;B`5f)Lzfe#*#MUePcDdIvq6G~O@F zPhU9RCtJUYywBX`RO-OZi=xgszU_B$N~pxrP020tnmmn#QeX+U4F=^${wVvDcMP4vg@ObwsmzBWb#fd|%0ka122=UOMd+>wLdS8gQL3^JX5 zYb_D~JVVfA6iG-%+L8D48V1<+sy9szRSYvp2@UI;5(&1@i!F~iyL~>Cg1qfW%@*jY zoVRCDmfvJ~=&b-oh}UmK^5?IMwCe!%mK(mKG9q7#T`GC$YXj6Bgr&PoF@Ok_`6wOY ze@^q#`%SdIDprJ{z*BjmS^}Sil`X?VbVDg(Ii5}1G4!43C)ypLVO$bF4ue_R@R%UG za!FE8`Sng8`(qM$&7I{;5BkB!ir|hIqVv$I0IDiJXZyFSyQcvSnjv9ME&s9bZzVqR ztS_byfDkmh`?7O)CxI;6K1kIim`Y^L+Mzz)xM)1f8yj^9E9UG1!Fd%k!9o402rV2M zm@X`hz!o}&JRlofZTFrJ*^HtA)C`jz`cL2s5WUr_v(Md{G7) zHE}oA%O*ts^jSxI#&!!ka)-kCrib$NRM2*>f0EtvTX_3#|BD6}=S%-A&D1ycnfBCW zi!tq)Q-jDM+URSHOE$5O;_tsA|2E((bDNTGcVmI6^|Hu~^qJgkktnO{SH` z(W))>cnE%E=kB-~`UtP~LSbmkP{&?D{gFwNcIM6LflNh2xT()*!+dV4t49|eecc0o zc?BuI9~#(GQN4%7)ss1dsm@y;p*aWN3d=8FZP?0J@al9n6a^R1d}0Oyj)Tv}TZZF> zAB<1wFi4ndgV$*j%eUWKp}pu{f*;luGsJo4nvFWir{^>n3DZ6-ZU@MSqk7F?k_41( z<4ke>OP$^P!w{rtoz}Y9eks{poGeXvssOrOptE#FN3=?HHlyHs=QPxP4K^8H_W8XJ zMiy7h!h1T5cP&U55&9|?-|f@^K4om)x0gOw?_dBupY~P>2^b56rKX(rbd&`+?i>bv z&qUu)-)wBtwaWW20&>nGC&!bYH_I`&`T{OYY`W#FkY64Mj$utgb}Z}8k|`q|g_k*f z5MmxyJmJ$WT)KQv!L6J|KH|2({}T##YH<=Villo6zM6sWOELH>^99nsijEdB7kptF zE@ti2UW(S}DV7o6rBW~bYKcw zLnpeK_%GmKgK$c>7W^1(H3NUK4WYKZq?Y9yDMtI&C$cCkW$`rH@`m}lM!N7O3clZg zTzodO9f-Cs472YrJBz1a5!~`{svEg?@+5Osa~kiz)AfcQL+{gv2{&f`OZwv^;(RIc z#Fji2>vKADb6ItW+2ecgQD~0@iaGH}iJ`A0&ZhBxCj0FFAVG^5INQF%Vt! zY6MfSekPm0_CXH>twEHjUy=j{_5#@V%-5FkUp*5Irb@}UeI=a>TA~-fwJyjJmhsjUCR?^F!o{6) zk=A2mx!n56Xp(a#S!pXdi1NC5tGm;C9>>Ku-4ef*iV=3CsuB~Q>(_mhWrryvPndq| zIO!I+Dz)Hz(XQud5@q;?d(5w;KPbpOmgFlCGvvflFszpA0Ap#!v{KfU0o$&@B0X71 z{=AMlxglh`IGh0zR%9<2MZ6<fr3KSMFFB10KC`*aAqb(y*3I)ILOx&4EFz!yaEcMylYT|v9JGn zX{1v47t=@pDg)Da$A#q0>g&cb%~#9WBGe*BNS5;(m7z3NF*aXMG1gyWQ4@m|m!&!U zup+{Tus7nP zAg^1qFxpAN$I6FnK9?mxh@(;t3ptirV(ToOBsl;%Cc+UG|gvY{W zQ+~heGBCWBs^mn+cNFS3x?wYOI*Oq?5dw8B+RN!>pdxxBaLoWqm8-$w2XCGbRa$bE z2O$O8)W{ZEaccvB000Wp0iIoSLSOvFnh8MtK))KQp)Qz!f1QhN#)SU#at%R#718Wy zR%CXu(+3F5T2t=zKH3=O>z~ZIfv=0uGus;-I4rfV%E*%6yb^(|)H~7Z0&}vC3p#)8 zb)Xt%XDUYt&Z-&eZulei%VS++&g^s-Ig$ZT$y13RYWecEUS|)rY#Gx*0wl& zb6ERP?vzOE%x%#R-gQ*O1e8O6m;dbE2SXo65{Z(Cb@$E0cfV&voVEWU>~*dRT8Tuh z<C8s)TdJ2Lx|((F%>W6wy+Bpx2dXZedFRYP+kkm0q%>5X78MuAnw|eNzFkMkTaA zEq26SC}-5MgV2hLG}ehiFe+Fw7R?q18;#TK{5CRb?~GL}rsf87UE2NcF>Z@iOMdzn z48HJgyKMZ}BTwGYsD5g8w|8SRr`!AApL7`TcLD^}2LS@*$9{y#ro%;4?CLutlXQK; z?WXmOrJaygxMCm%*K~{!RYe3-0vFVkZ^23|au8Q-6_4xQtghHYQa2Ptc!rgiUc28D5_=>>CLF>*3tQzKmmi0!{T{sm&bp6hNN#GQG}Nh@ zNE`Omd@?aZhzwW8;2|)1828_rC~!GE#48G9Fk`VotUBa)LosLe)#A5U7Z*&eX8sC} zuzB)z|FA)wGXsn=5fvfXT=EA7_{rvWHZ?B;p1oJZ>J_Ft7%YOE z*b!-jz!Y%0G_c())F-pqWO=v`VPrWuy!t&$uR&RQIrMyp=hk2rzxa*?E>P486TSB- zrbWHdImS=vGNkHE+K69WDC}#!Q!%cxi+ZA>Jngeo@z&_9EutO7tPSEM)tb_`98V=` z1QpFSL3C>>Uglc=FZw#KmZi*UQhe9aBRAD~g+`Vq_lYiVTErxJ&tm3!hKOxL=KOsh%5LH*|> z!&EQ!EjHQ~Vi>whJt1#1Yq{D<-I$POiOIj_2uoc?TPRBJM07~8r8j*p!u&LatY;4V zkRG)|0OR z4RfmnFBtAkofH*u5VJB6I`5*EUZxhTkw}~E{3ql`L2r$ON)H2;!RZ@guUp0fVhD`3 zfai4bLxcUd!Zc;sFm8=3sSQtZ8hIDOC&NonA8P^hvwk#}Xs^hzGFoxMq zgh(&c5odLKG|cspW~TTni8>{^)sa|Q-*O%8@djVc9lm~mJ#6#?6*3v}l}vc>%YdqZ zButDmE5u*2<^TfL|8dD_FDkWTWycqyb<0^xxxA91!5Gg$SvaT`$^n7gQ83E(3aG;9>Vrrz;IPF@P+tf+b>bVL07u z87?hSERa^%(*{}tx^HW|$fYX1-x$aLNHv?bl`9jBTy^NNMZ5vBB;UtoPW4d25FIRk zLc0!CM1X~<5E!7-gbMVA#_DS+@^H+F5>Mz_+d^6nMQ~EzyR{}|lXQpU!9|48%mOwc z19X&dJGra0d9d9jK}nxcFrCO1i+x`{42AzIjND(Ae>bMB6N9AWfBKu+gzLhUon0q z;a}vvTg*@@G~?Rh6VG*aE9}DwP12x#rqcWlWaZJtK+s2P2t~))?SlCZ$@S!VT0TsDjbV5 z)T4lM4P8E=B3r%g0np`BbUf)08Ys1x`3?5;FoXYw=MhNLPQ!q@U1_cPvRB9?na&Kd z<6G7;^B(SS_Hn4acM9%vrzz28u{7xK5GS>tst#IGMh&UmicM!^;@ZRCv*9I(lvw>$ z9|+-XrgEr7=#9*Ww>tpMi$hJaj-n%8;@d?%!Z7%gQn4LVv!;u;Z#^7iTW4Ml^XCaJ zg-onOQC9mc#pYCPKnmk4brpxaNq3@J)kJz_aoqWx*3;a>=mN%T86cO%k~gNACT?Ax z$>A(gl>kgx5p$Rt%5YPV4e z`Ub0R#M=>x3^wVx1Y)@3kH^zGE;mj6t5vGCZ&vHO{=$ruN35w$h%PJzc<7R^p|7@e z(g-bLCte2fQ*aq{#j7h6JA`-peFy_;@l$Y;qe5wI!L2cLvHUJ5gZm;z zX)4!Bw_b0cmxdz=GGLJ(-?LCdmcozjRHV+}?fX zu%EuNuq>E;VgI{&1+6cTbE8S`SJiJU&L8aZSP8Po?B^0I1Dv*-+;+6s2JFpP5H5L zb&u2O_$g>>a92}RzTEgwyta4Db4OQqc-4KK3E<~!i&Jt7CMCBjehY+I+k#!M zY6eQ{detw%$pmF?$Oi!!G#IxO3Y3AlQbC*vi1 zdYuD>8``Lci%NmHT^FcxsQFE{2n7eHGZ9DQnbmIl2f;NE;}}s$5i=DpcCCn;nVbk$ zj%jF3Ef;+?AbKx7Zh~pud#bUhP-U!Cn~LEwxYA|3)9ud7o<0r1NZe`_zKBL5H<4?c zkuwQ}++9TKWCXFbUj)#B4*1d@#{O74!6ldEF1XF|7fQlBsGtGobcm6$LXd0VM6CH2y3tJW$h(G#pdQ zfv0qbNK+V^iokmlbmhLRwG6oLY3OyCINT&rR|duV&AodoW4XXayJKSXps>^M7R+{T0HDf!nTGrW-++ z#nuQ$e@Cgr^|`c&~BsEClU@FGeBM8b+Q7tBjJ>rFEL*8(Q zE%Kc*HJX(~bM^NAexmBTo4mzr*oUCM`v%cLU%wh<>q5oOsA?f(P>WDubaX2%({HI? zUQiayv%e}Wni(?c6(vU0AsmfR?BeS%Hu?e1>%SlvTb1}72^`2sR)2E=B~@&THLDUe z-?Okuvq-(8*)cVqy&9xM1K{?X$&9H^wEs0&uLV~|VWN&KI)N`0yW5KwEgUQaN3#eb zgIBsqLRtxOFUGB`0f97^Z60u!ee2y0W_YJj^G>RBd0=Z|m2km3DVsd-w-{bHjWTA_ zk%I-%G(j48v3-LJ9uI~5t2pX-LQ9b41ELwXo38&i-#clqI`c*ZSBivskh^X&V55S8 z#4L`zfzXGo>ZBfW(YX@9g!Nk#>P!m@N;o5M06!Xzmh)-JMPza-eL5*+pBi|0qig7;zyTOFB-(;O~*W&V$PXK{{GJz3Lp0H*tauvWi@ zRT07&ku;vdpi4+zm5Q*=6aSiu3tHPPn--k_{H_ur$i+;O&Mc7Ge+&njk^Kpn9JW`d zgSA!+<0l|sir>?TdSQO4-dXj_C-`J!{WuXV7!lC=@X@U9qkh{+{&W?5TU6~4d#8uk z_+aI*Y#E5o^^>JkH`%Yo>S}^uJM@rw<#`EZ+X7s0Yj0OOt}q#g53@y|DwI5ku5Ahu zH2{1kEV;i!*qm^>VTp{D7BKQeQCc$ERrUfqLV z4BD=3#Yv$_|MGjY(y$Fj?g7v}3y!!}ri2V8gyC&)rw-}NoEm@Pf-|R^ENj)V0q12^qz_6<^UeTKBhC z5%xq4|4xzl6{uYKRe!k}6>b^kcORrKbPw-{PhNo3*g3O!t#hk23>W9#aL5!6jFo0*o_g*4n7nIpG`FXCE)tdzXvED2YQ{W<@ZL)UV z%8;2W&ER*|WoYs_Y3J_4Yx^0NZ)96{$LoVx`v)%_n|Oerz~W z0~#a(LGsgP5TH^T5ZDvXg}`F^_JvhOq0YQQr*I8BDV$)rZ-I>5dq>sW5gv!1j(v3l zcoW2uB0UqX#sTEd0k$X2)+L~lhaA~@Z(-s@_&Q*V7z3Kl>OoOZ@OjGouV$zInwC&# z&@s3snX8GmJwu@E>2c&Xl?l>6Y9K8!zIri#J>UbEM@6KMKS*Ym47esF_MW{9{(&UI z6;U1#%Yi26+-#OCYzEmC90Ug&ZrB)d6ZGi8A^Vw~&7{Q6Ee3)MAp}Rre6B)F=nM~8 zWqeg;nH7g1q)5zgEn2>jHgc-%WZtx%kN=+g96|74*)3%$ij0u@tLPls?aKC%Mu%ez zOcV@boL(vH)JO~4vC@3rldVn24&In)McPB}Drp~y)xeci^js)JVnVuF9b1R#hnFG{ z!(+4$$A#I+@qD^9sevbAFfDuQ@2BqeBAW{kHzS#7XHEW}x0Rsm{B}Cw|Jyx2VQCBP zmL0s>=1oJ2|G!ZOUg$LraSr*V#D37|k42MQJzMK$fcCt<3)Ut98>k0)A`rt*`5zOR zI*@R$JwI+PN*AhnjQbR-QaJ56TMikA5|+-R@P`{3Hp;F>*0}c!yxN>-g}lBAkbDH+ zp+~MrP;MXul!dQNPP7)5#xAyCMWTZ$-kksXkPvsG%SJ55QZ*~EVh)PV&4P6^3 za%(N%;Y9i}A|pBeb;E#aH+kjE0{Pw7~CTr1Wu*bc!H zIsq4@B`5Y1V|3e`fu}{j@q?|3T#OV|GeKcN_hIb!kY4FgoT5muS1mtKBJ<;w6RK$Q zs=@zA#!7Ds-w=2kiPiy3kkn*2W0Ih%>v2`Y3A_Ja(wTg(Nk)XuQLBA})%zz$DhvK* z{)HWA0<4c89Tjun>)hRyggBS8v_I@W^yYM=L(&~rk5a%SYjhsJy($ID#;DXvs}32s zQ>PYMfYRDo_)t0f!|N%ll`aqUC!x@PEa(}9&?>0qLZz;3>v-xvnie?X5P4?a3uzXe zu^82X`pP?}Vu(3f#*NB@bqQL6pUH||9O;-~*rZa#c zq5~&l1vB8&@^#^cf2AC zfuWH))HnecG$8i&5)9e^000`Ed79p{uYQ6hx)O&g4)vD1Cd*&@1Oqn4#Bd?d92n{G zS``nkZP0+ao6e1uMV9J-nnX#cL2Q{!3jdqP zKK`T+56$a?x#UNDW^H+kFga^wjFLd?N=fR9;k(D?fz7Acx6pkT9~vs*PeS+O1^Ajy zjF=kqz4J|xeuY_r;l=jTBbIHIaOyO~D;jN&#@jO3y6aX3`<8M;d=+82ZkNF3t&Esk z#GOX2L^izAn@?J9?){-)@4Nu-vVxN4gU4jOyrK)uBnEB;`cQrvq3>O@zSVO{=D{Nb z-Dk`Q>E53HKqH$PZRrLIA9Go=jfjdc$_a!@*N1H4kM*SL--{<4_(KR+;OEbya)KxY z9Egpid4Baz+qugyy>U(#@iT21NrVM-#eFX6jN6)K{v;~R_I3>9UxT84JXYG*_;5&kP@n7OT0bJg_1fWeW?)| zy&YcLvL(mrZns1M6Rykc%Hlv@P;=E{7wIl5l9;OttD2q9O+hw7&rrEr5+Wt1Wn=4mdS&yhV8vKw58g1Zuzv}ln@gbxv8;_;L_nQJcNKY;Y1v9 z2;f(HGL*X%1lSG~KI};K3ErK_h}+;hC8S$vJ*lzr@3bLjbdQ`Urm9y!LX5EM=i)(% zB|2&2)1JqlYmX{r4st2}*h}#5e}8G5TwlN&T3#mz3Ky~LYuqx-LN5-|P2yPo-z5JTpc>PZ6c{mt1E4rFTIXcOY+SVq;alI%R zHSoX*z5x)#qqb$kx69sKe8m`iiA=$wLSFTrJ>v1B%ctY;G7%@(wmx0r$-Yj!&KVUb*oH9aBi@w2yDWP zMUC>?sUn+>rnDdDRtoy9Ghj@NZVy9qa~AQm%}wBOzg@|9iX7US4AkYC(3pANJWXq; zONCdj&qLNK8qcO_d+OPbalU|rh8VudC8L zZc4sJMudHGsd)^0pu`Ust|nv69xKJY90CTRIZC){qJ^2m2%~wL$_UrVSDx1=A)2Gf zK-(jzCLN3FAVPUVB11dW=S|fX=OgHzU1c3O>kUTNbR41GW$`U;*qDt$(0Y~Edn!a> z|4l-dNe{t=csE%;fr{352F)gcg?Hu~?rtl|o%ZlZiqAltiT0q)b&0Z;#2^6*U-Zh! z_iH)(g_7CH2p&W@@c?`w1;%>KTrmuBOWemTx#H}xI7s0gI^vsAImAk^)vlm>q2^_? zi*dps8Jy#BI5ilY?rLs%!pdKztf%gaC*i%38Jc6MVxos%mU>7bM%P9xm!aRRiqg2j z?V>jY4s2n?2I}4?f)xaXTq?T_Jx)&QNHs0U+5}p9|tw^^e7mMlyK;tWS?e>r;XMoUElWh#AaeL`~L~oGeBHy75vsZ zsmFt8)wxdQu+LzOz3q+5ARpRfwTk_WJk^vsdwg6h-Lp|O0`kVsFV|y#=@J#UM<4L? zj+Wjel6wANk62TtC%^x&HS*6CS@`SiK(w$MGXt*6*A4`W? zq2I+sDx8jUs|}3!*$tvQh&O*`C68~krNA1+MrN&ig7krqo*zdkXL?e<%Gt)lbuVboub##@}#X^Dd~_m_13|J{1@Xrz}mc5txNO= zongsMI<7RWAIi4@O^)HZmJTSinAd&FHa~y)6W3H^&y(AC@cDof|;T6^>AOZPCs{uc6tXZ~b+G&AF`&H??cRwA0GL37tU=vPiBw)&gHq%PYnB=3Tm13+=&>3++J zjAh~DLmpb|)qZ*VKzC+jujPy|5sXWS(aL1(ZQsIk2=dVrv$9aNRnDajsy# z$ytu5jim|syT&Woo5%aOkQZejr@wvgZml{hN4#PO=~PUo5Ij*p2Y;spNvfM!3JM^#^@R|xlnZ(KLku#k72qn=@kJpe9*PVlu6egz z=|nziNG0rpKy85;Z*4*^Ij>hBH~eNMG5}ix2Dzk}yRJl_GgysJvq3lC1S%Bd(9V$% zyTu7H$?kI>g0(cxQNDH z*F=!G42jjKEd|RD%9J07Rx2HS$Ln;mPq#2hlHt;_@>m}j@)LX8!6hTLrR>5UQ7#NI9O?;!= zysdUEyEWnh-}lo|m?-_0xe0p?tZaS_@mqZ^Mbh~~(hM!t=Qkipyy3?o5L?i-B zPe=W7C^fHU`-=(&Q-yhwgkagGEqFw*cdYo-8;yM1Ke-F~Q4QNr?vDi9KurvMwj&E=cPEC2KrLfg`E z24&Pmf`2FIU&0?h=-T^9^L?BR)JF6Z$(!s!^&A0H+~*)2=6vDxVTE4{BkC&vn(FmM zTF7?`7K2uH)bF?u1x1>=5%NarKdFXfAp>chS$6Dj9heZj0;{8?`K;DgabOIeN^+`;R;vsz06&EZec&i4ZsJosfDeuYkzb;w2$|J} zKjt55$QdXL1+0hevFYBQt>wg$^ZpeY-qA1-m4eV+C3X&!RSNrdV48f_vr1N^pY8SU z0C`#;C2O<&Wj*G?t{oR9k6wo;?pg^?Nkk>(lVNCMSQrwx>Xk#Z>f$IVZl)*u~I18p(B^DlJM9rx;t<-Pt@k*5I61nc@fdN|v?ZeCv9{;? z`;3i%@ZL6^_2WsF+u9HoZ@*>~Hef@~wcI?8<21^(gUpu^Vqc%9rIV=kLR9~(h<>Y9 zZxK7P3UX)RC1==S(&D5Ijn9mBbY7}oKX-6U^j<`~@(TZ=6A$IiBxFMGqNQM8`3i}= zvk+J7Aj682?=*;PBD&5aZWmJnJk|{@sR-^=OA!~hICVfEp=)eJE(2T2JuZbG#hEby z>+6^!it0E@dK{Kt>CIt8j6+r#*;R}JZ21zWUY zMI0GE_RH3R;IUPU@Hxm@k%RssXM?&BWq1Du71|mrNSv5#=wIM?fY}F)koMj~o}+vf z+FBsBWq!0+NL--yg&?b~brNcu$4oomla`a2(#XANHOF)H$I`(p^tS zz?KXn6)n0LHX%YOh;ws`Ab#t!930mvfVd1f?AV*DbxRSi)<6W$7vC3n0%(9`jhp~G zOO1#>`WFm@Ze*chJG<6RB4er5K>?>>)cDCnamaQik^Yi==xX6K!cD{)Ha8*^!52FR z1Wq&O%|4dBCMj$0^8>k6Hw_nVp35(Gw%_%OrMv8^^T|Iu& z_VRjIuaFG5x5bEOiW_zJFZN@>_=77#_TndBUyaSosv*fG9^9`oDMy}D`fxehccw8; z7w=b4sR;Z3PSH%?3H!~OVg}YXGP-h%wvjH7v5B`@?jQ*jni8$6{=DY7gNftnK-(4% zK41G+LRWN7BLFzl#|=Mzp&lw$uDO_&3)5N%1s9#Ix}DlPhn&V<%Gg!$KJ@m>5K~bt zhKU*4>{D@GC;T$n2yBt`Hk$Qztfnu~QYwlm-F1*O(#cjcJBt41wPQdeXt|Qw2mHCs zSl>=T2Tbiv_Kx3$ltE0vwa+IY0eqVrE1wPlnfW=KO=(82;cM*c*IgPA7b?(GsTQWt z<_5m~iQ$C6FSJyzTMtHKbn*zH)|jq9t&M|_qlp0jcMqy)M_r=oEr5oUQrNcit&vp! zYU}n`$M)ks^049JIK_&I39 zag0@?GC%SzyCZPjj-)@o;f>5h?(HXi&QC{t`qFdttEJizdXy~k`%*X@btTqZh(zkL z0e>g|ODJ+qL*#IX$&Fd8K8?G~ABPP=G@cDJRc2Y`dKpOKM$2?>ZK7k)B>&k?UJF@qgwt#OK@W&D1&v-fr_j`gOeA@bsZNWG z)e%=L4g!Z}YRYXYtD@^m>+btw{uHb^K-0h3!o*E2>UdbbJXnBN*rbrTXN2|C%>s>G z-kEnPJjjg2;?EZD;xG@&Dn|GJ?_!Ty+4@2MKBX3fn7-)XRjgE0=Oac2&fLInRtV~% zp)+=as?|9N*PquebU*hORfB3CqXVao=&%4Y$fFw$mT&(TvY?h-D;y{q47<12{vh^| ziQu$IqysBuHFB|ycZFIR=<=&?0g7RhEm{-I4+xQy(+Q?ZAJfql=#u^F-}i8znC zI$iO?d$h;zA1c-I#qGj1ZeQNqwnaf~e;bKt`dffVfr-jg3q|f`J8dz)AnL4fQ5alC zBlq(1j0*eCLd*ts{`{D%B>!1}XWc}0o?OQXzsiA6x7cRR#byT1eN=@Exk36+I6`v% zp4e3k{mJ)!0k#u7UBq#{IJ!h@T4wkd~ zH|NlZ5|AbkgSp$wvBgtrGCWO)GFq9yf=bbZI(IkoK+B$HKLTHAfye}d3}|eHsYWA` zFh~knh%S_;u1b0t({ctxX>@!9JUh((%B%mITAmJCx-7E*)BRD@9rBr09mUBOm)C+C zTF>Aw&Y_eHyV48bUzg0gWnL;;6 z(;+-rklPl;WaDW4=oYQHkWN`EQc*fH#C!s&ztu%rDH8f_jW%rKwxZA!5dgGvp8j?6e zKu}EyO(8@pPWzkR=1a03A-A~yQR}>Sfxdkm<>D@ECFc8J4JSbuB+u`O-nBdV=OYT*jjyYaabnOXU-l0Kx4j*V+5-*i+EHc4ntmW*uR#jQ4Fe&to*3de+AUzB|Szp;)(%#P_Fc?$Rs$_?PEx!o$hb@4my>g zomwvbhIY{P{CdBS+VGZj{Nvn|A9~Ao_1w)Qbc|ssKmp}OQRa`9Z9}oPe?FL43Y3EO z9o)bfkK(oNo$2I|1RdfU3D{Rs{;hR)kHx7apl-BkkFjbtk3-_g-Sy&}!g|P+;;jq> z@Je2I$uliFc4+X54rA)FrXnet-Ma#+t#vKMA1~}zAv9mZpu*5R>`MQHc*&JcixHd9 z>dqi!@g7z-YRWO|?Wd|!wQ^a43p__72_w->dv|JOB6DD$GFbot#>$yiSJ~H3x5mdg z{C%w_T|tLhNq)9vZSKUiMA&|v58B+0&9<1JF=?OgIxnW+Hk^W)Wrg=pbVG`3Pm7de0 zgNsm={iFl{k)zEHt$rkm*^5l(TNc$?##q~}kl-ZA1OIn39j%iZh^npNLR{{En338d z=;-R7DN$9Aoyz?-4K*uzO)zxdhCDu7Y=}Oebe2Fj;vryC#UbGidPweT|t1w7{^*<|WfW zZ50FKX&!iRHnSFa=Z`Zj^X6SRSfig?M6!`su8ve0Z^&3OV%uFAcHh8f8FL;{X zVNNet7fBPIie5)2%sTKLJEOYZRW{lKKIGW!&x;#E8iKh=f8IUkGdUK2+6i{(;d=^h za{j@zH;`}1PpCDxWv|YH)!c1b7}lO>w4s^*;;#AD1A~W`i&mH3RS(>7i0{fF3S%IU zJlhe9I@7{Q{X!+xg^LTk6#kB4Y2vjvvX2~5Dp>f;j(I40IK9J_&^bcT<5aMvA&pkP zev_RoejZXC?f?IlH|s~BuEz6*fu^Qu|80N4n_vqy$1nLEUh?m%0+8!PEZK9<10o{S zM^w1&W|5wX6}+IzRG&;penXENvmJ?FMB-VMqdU*M9eXoM^S;4vBCIAFQDzY*RGbI|1Q}nd582Q$(K_5IK9?`^P#P`U zVW)GsSWOz$i(4n5#12?t!^BY5d}!QV^k+n|mgj1Q0D(f}gXXSi?=~p{v*|znopea2 zj$5QUoR=!LI2C`wzsNA@oYJaU!oeS(mf*f5MO|0lI_OE=6zXe0bPbgTTNELzjc99L zFdb+6b;dIRd01qjwzGlzo&Dt}UXG3CR!}6l6Q*Nc=XaA$L0l0#BH077ljQt%*(N>^ zsY)9pMrw7NQpw+2b5JjlQd`|03~nsh^8??lc4uGTBL{MYdg7}6c__kcOKxZ0B;Nh= z)X+*lbNg;<7@OUTIrIg)$K_6JCdEp@xsbV0DN)<%q7%Wxpnoi`{qXdsI_=&*SRo{W zYZddEaRkk>Z8<;63HETG|8S_4)q8{0NP$jVoB$PIIr7BFg0cQpLAK{Ix=4$GK6t~2V(3U# zGE#n~ciK58)$@{0dr%Y(Ka{>sS}Gl-%#H{1Cg`(v^iS6OGfNkOqiN_{>C2Z2;GD}U z02v=y$Gr?{khwv4?$_2ei>X?r3T8bEIyYS-zop)TX)E`?49lkTK+3sE~m0RRx-o0vJl1O{4)Zka2v`D7Q9u3L%U+1oXIYLg(`M=rq%M5$Yh&wq zsvv-{t=-$&MTz4-G)5F1ppXC~ZtBahJhUK~j8U_Ff~XOA^rrYd$f?>t0pdHn`S;DJ zLN~eGekX%V7Yg{kgpjC$p|=UG-ZPu;h>Y_}obctrpoE|XVNIK}nbs`@5DDceg)6ph zLj5tLU;;G>mjE`c`4az7)tCf~cpX86xo~sn(zE<&BtOP5w*-G+(JvsdP|KD+Ks@{n z5O@4aS`72rur=bWQIKERYZbdTzE=bvM8K6I9}QvZp+KFd$eKo7q^;u7cu)6GXWWh< zzxH8`pcHqLdW_YnH(^J0`U8NWcmO+&tvYL0w6i{)b+{?4LP?6dcbdd!t^nVx?B#il z>kw55Bm*q(QDGs8tNJm>hPFz`V>(A5!lnRt0adVTj_%mJkxD9BPQ|WrH(_4J9pm!U z05#;S)+YO_ecx=l?q{|B1T-A2UVI(5Hn=CEUzFrUMkw>CX+&*&lX$SBxjSEjK;=>B zdrpSCV^LbFOFc?oLKHjIz&!2dP)v@?w?it+S+|ny06u~I`K5`i;y&1(Z;X{};Rl1x>E?U`IN|^-@6L3kq}< zisjuGrN9OdRcA)nFop@VUnF2p9{faHV~S@<5Q%dB5gyf&BRsCjrNVN7L(_1yhn$8> z#)a7tovi~mTX3DQ`Gkhf4z#ubTtZRAj9caftGxy`Lc|eM>`o;|+661rC0mTkBG@^j z@L9Nu;H&*bx*1RVKf6Im6k1aq;J1I)$K|7z0LgKr;AnwK4>RnaS!xjNCJ75(nk`P- zp(GicMM~AiLK%vi_6mWfO?t1SZYo|+i>IO&YM`ih_i7HcHS@M95`G4-!3;?c?&-03ozGp5R_~+{mY78Ugx3cm9WQ~5iZ<4CYbtnk zxyrqcvh2oH1jW8>lB`8`>Os*LM2G6>iSx&{vpYSm!{jdU;d(L9>Sjyn3z@X@t_He{ zuV!m2D{MqZ!b*}?Fo)t798}!?4y$aZ!)Ya>@J5|SzVsO;UJ^n2kK8Qpde_#@l$ngf z}E^O3BourRj}@VA(g&ZBN8KB2yY&czruCMR;M56RGYQk!XG2 zcU*6(uDxorsi+pnmz|+1Q1U*mh^B9CmeF8w*b4O+a~Fbc(PS_z2vRTOiR>mwr@?UQ zHTBfKKYDkEixiJ16m`ikv95|X-hh;IomXB?v1e*ZB@0wOHUZrsGv9h-5&rXp%=17D zpd~mB6=`!Y7o_!khQ#=JPJJKrim{tvDW&H&p%&f{gQlr?0-YbPQVZsq`X93hB`M+U&ej!^H)Eqb= zy?LoBxG{mNb0t5cZ*|U{f$vtHzC*H*QXJ7xU5<4pYwU2Ed*Osb%??RCz-NcKVd5W_ zTJ|_op1qgXj!&Gi5JceSC_GA!76vupIm~xiTzk90{Ql}SO4$VWg7Be$1$Rm zv5k6gj94g%i9F;QuEMDG-ohHp1&Ez<#ss%^tiu~8fI4vivMtv^xcnYP@r~Uf73V_T z^uSN3!3toM3SDtMJ()@EM1^S1&WOHma;Xh@GMLRq`!N<F&w1CXm2S$ChPNY6tKL6quiorJl9?}ut}T}5!WY`9H4`_#VPWUiPRiPMWUllTj}k0Q~(R-IoW zCZqL<&vvML4(K1zgZ+BadV2^+K)?9rjc_8e?v8cXiKm#Gop`FX8uacYV-%J`IQD{* zVvEA)LIi@4paI2PTg8R?nYHCX6+O9XT~de=63}+zsuq*@-}}_-MM!o)!A<0Zi9Rpv z(Ny{!)Z3Ygs}{PiqNrl!qB3}-$YL34;T~|I9%j^5Y~qVRo9f=li$2}7t;i}h9xA<| zLl?1l^;0-qbnXdQV#r{sPxZo+c`jLF^V zH?`;lZMPe6Q%-^3r^y2xAPkpGVqqBnc@|W935q)#LEp;2)y!umu}sB$gT+d8_lno~ zQ;69TM`)h?$b8Ugd>vW0z`AComvSzVY4YhZ3wft}d}<8g8Ld>* zhe#)4CX3_s&U4@npI;mn`W<6Ad)0Fqsqe2-T_b5Sk zH>~1>xfT@tZxvI3OEg$md#FGhNu-~}`qN=iU*`DOVSh8vO!pvV{Mv>#RFkjToU970^tI29nA0qp|@HH_pO| zqLOW|iV87EZgaR_UIVJv8tTk+H0^S#X|{(|8rh<|+u8oWLy7DZ;QDT-hubMm|MANZND*4J4vp`+6+bJl9fjU%7zC04Wit98u!%R(5Wzo= zH}<)9jlJgPL#zM<{@V#=rwM`df%r{tQ%R4OXK1_HXv$^J^bmK7T;K{oJndpqJ}q>- zxR-_&=u+w*>|e<8nyf~7O=@*YjNfu-tC#@|bu~c*)O4nAGXg2uOaxK0>4I@2QS#H6 zUsp7Sv9>|45;X-Wv-?+eTxA+pZ3oXwdMekNjUmqvs9^?J#4Rgqo9+t;E62`&a~#Ogw3kznSQ&l!=f`hOQ@9 zY(@}~KRh}j8~q9gIX(efshFkQhIH`8kZ^vvY84T}K|z}^<86c;cZfp}p+=?~b?C_c zXnMahWAMX~F};|XGGzZ|+-!OPM?kp05_~WaScGU`a7-(obn@u%quWl~;$V>R9jKKP`4PG)|sJoiDwhaCv>?aAX4iNy*_b#GatALthh4V-=Yx8tI zh@k7MM@&veW!VMlJNKA(5kNsmidVrY3(Cj9GNKq97?RI8jFkfxv9qmRhZD~J+6kA7 zH_3r~OD8sR*p8UgR47Y<+aN6(V(kd}j+?rASsQqg)Sx)aZ)TTNFak#s2zm{?_Bozo zdWESbu}PP?2}hBkV71W^k~MS-dp#v7pHk4p2~1wx5kBlE_K$jH-2C6$5e5ubWrb#i zTMZYDtJrW;4vO{MJZ^?phiHyKBE;yiFMyC^j*?4tZb&GHtOM)vm}Km#2(n=YJdFV| zphzlmENu*a-v?vni5zWzx$r|>{A3U5KOR0ldfo{j?p35xL>V!?b9Uv_Oo!MV!j22EcdofJ4l&wu8-sohaP|hi5~bw~fj`683<3{(=MQt&l8K(pl@N z5dq!tB(Lx+wP^Q7p-Ni|ZY&~I)0LrN+^wn2j$c25m1t~Q*tLCmv>IGGlP^Z-SK`HJZBR}pQs_p)K`0a>YVmE&M#L-RvIN-{A6#FiIFu2{d{-AJ6D!2H3H8eq$X%u3J?{e+qXG6HNI`b0AKI^d2*fgYmrs`xvR``0(Yl&XTA z&wdHHT}4$M0zqGWy?5bE_^S2)ASxd$etLGRIW}*Nf&nH`BIO0QlpnXdHYs)x{yf|= zS9w1C)rZyQ<}naNH?hQN@?T zCoV`0hU2cV4gL&Ber{JKAtP#)Bh558E+`vUP1tJe*FqePUvwm10`cF9?hn`8epOpY zy+;_Xh7e?ARJQ&Gye#powD0Ak4$_t>a|FkfUVjJEu2Qo^a841*WqTlc$qwyi=q+XL zy<7jSU5)^2A{CyU6Qv=NywH&a8@P&1%CI&Ltke}Fo`G~QAyDvm^`{s$EWv%RRef{V z^LxpCpNj;Z^R$eoXb=fTB6w7S4J`_JtgU7>4j|{#v(^~ z!nS+qm5#r(1a{(|GNb?$F^{gN9gC$f4PLz&I6j6pR7m`q`USdTFyN34e=M>?TFHPU zx+k`ZL_vP*T#MB))hiKp&30ac-)YhJB*#zA>`6M}`0;by-9&G%K>lEQO{kdyBxTTk zYl?~mVNrcFT7#67_N|~KeBG9iX`-M@kCH(?rH z_%C*ZfcwRGbF6KBgp|5&)O<$S(00gOQs1Oku+Z<-<|q^S7A~DQMQYBD|CdHBQkH>X z9OW^Z8Pd3zGp;3OAG&#%;X#vqMw=~FJ{^ZW5OA|xxq{M8i6Vp7y8yYoP`!h`Q?@qP(&c}TnuDFKd4K7cwnXlHwaxmJZ#zwd zYaPVVpy%B;YsKqL*1q7lNa?l4usV3Qx23XVFa0ySVr;k`axO24ZDkY?+m>U z9`_CXHfr@HUlD-syWRA|bokjbTiBXCwx~wGQ#uFx+mTU_F@9tOfmTPrtQ(7^{A|pS zKPL3&+;3w2Y|}+i?UB#nml?~mAI%9S6P=^&MN_T9s~uOlm0`|1GOp z3;iV+M^v5aL2!BxBw4F`QEzCr64p&0%nDepP2BOqj<2M~0-=M>VeDUPw>KaDW4vJ) zJ`F?$VTxp?NFV(`leYTd28C5yEfHPP%(VnJ=nZ}ewCy>9t zY%ZGd?$k+)CoW8*0Y&gj$I6z8P+!lBhjK70x+U@&x00vI+L**in70~UvsqciOz-9c zhyTz~_ZFYT03z~m<3fs$jDrXt0-1;be1H^%7DBkimf=?kq90DTxiu@BvZ`^IkwoVm z{U?>&Gd{03a>5;ibMm3!Xa2Ae)wCJRkc9@TZp9nNbQOeVM2Kb-x=Np^0ZnUcf7}r7ux>Sw z)rcK)Gu?mJq&U0o0vH}2++U!BkbfK&R*d{*^=>*3=~CK=YQgStC~h7ksHhx|TN(-iW>{Sn^{_MY~NvYrZGNXF}8 z%b!x*xHf8S#)GKmGbo+44&c`v>9r*%IO>70wA_b6EB^STq{6%d#?+))Dv4f}+EvyAV%~Xv7bXIQ;S4-!*RI9R(RS1~B*K=kn9VVI`L| z8b^;^P&d5vXgF6idRVbXon6&^J}^XM%Ca9;YmMzy@65}KA8z}JECoOa(fLdyRyC~XkPF};Y)svv=E&cdLzb3L&6 zC?{NcsrvZ=jkk#Y`IwlerkLjF0z=i2qsb6&XS#mn&6P@{c;24QH7K0<3_ohfxT?O^ z!rW(t=Dz?Ez}XUl5{_Tw7;7|p{1$!^tHm&L6P=kbIe|#5XiM8Nxgi09x|+lO8&_Cfyl?twB{v2L+4fZr$BXn2^M^hr-^lr&V)TUqAr``f6`s} zs)8KMDbCHK5O8lp!Q^VP6~=o2#I`0C7UeRD6*g$DqFlz`hQ9~LD8E-%ZaG}$rYEe+ z*wLki8hai=rW+^8GvhLnjEBH5i8aSZoe9olB!R36LfY1Kq7BvQV2Rmuksg90&YsIv zcvUTW@OXwBa;57mk~7{T+zs|vUb@5PGgd~p_TW`j3+0iE`a=E)pQ$ATX@k>-P5|g7 z2)9y@z&>cz?xy1^Ft}#F^1w%q`32i`69|<>PSqcLnx7$l@;|NIf|I?ez^jWuKK|xL zZD$&Wy(d%&k5h(y$~?LKNBxGi#Zb&A`lczKt}uA54aDHCeh|%}6<DgLkh*70rf4*Emc8~?DUSdnTzZm zT-x&(vj6wOw=MYb`dnc}@SthA&Jgo0dfQvT`K6a0+@L8Njhm2S)=q~FIWt$r`?T)a zrqEj_;UD8;JOHXS*8=x;hf5OS&RDE$PNK{b!mQh`^Hv;*UU_sVINe0M=s|JvDR zhyX44S*#l?8HJ(YYHSV5KS;9IYber`PJ@vGn0 zg3-Sdf%wZGQ{Oy?fRkJ|GN=3Hzo} zCNldx;&*4EGFl~8!Q1}ffOpf|R}4bk!w<&o&umg9g?uzjUJ_nWoV3Y=F8{>r6|45s zKnbJYOHLlRBe>wpFQinn35b|#{F_|-@HKw@!A?e)8pD~YsVv|s?o0|U{c(T@3z7Vm zd8Rs4GfC|59wDT5;G@CEvG@Kp_cegZ3VrkX&%lYIu8FS5rIjN~4L1}Kf#CFxq?^;R zDaZX*aqc`XfA0)|kGfiTl%x!BKh3o^uy{Odi~GQ0xJiKeP+du6>~G&Es94VcRKlOD ze$Y&}*7hDkT;yZ4)Den?-FtdN7$;mfj|aKfJ469Cu`g20wtkZA$k^$x7`SnJ9(-vR z!gc|yoO7K5C}Dieg3=RV<#U0_Gz817dYko$q_!7tp3(XaKXL&F@QQAX-XRhgCYFo) z&YGk1nSrNhY_~7&Xlv$pKYl_ia2ZwCQwWfyIth zt5D^!c}WBk5mA{OazhMgVV8NS&qcJ1njUdcrsaN<*pS;URd(Co`#jk|U8N2&b^c%W zxpW9t-z&hX?=UED*EW_yB%x{l0`e2d~g`ZnC<-v|e{e z-vMS`Vn$+<4*6n7t6RKAQK6}Rlg%h4MTXMz^lgwvaJ zZ^R11ag3I{QM!joL|>~;+1%0I+s!*D9sOqkW48#(t%~>71bLD6sKPGzTtjtJJeD^? z$y33{u@DQm4caX&l3?>X<=9*K*0P)c1&fS7-GIZmUrwk^P!ME{RNH>5izCF#>buuC zLc)~8WnkDQt<>QJRN(|1$B(F4B?CHs`JSNYH5xLE)Bk{LrwxMrZ~{z+GV0XFbOWl$ z0-#-FR%_OGFuSeL`uPNTfB99-!cW-~gqcq|&a&6SG_z@rqG3H2M^lv5491T1@Zb{tse!( z|9%72FSH-G5Aiz5LzIkr%Ke(Shm7UI_m-{Tx0NS9DIvD^pUVpXulo?9lb?=E-fd|hdS_5 zt42M*ka+h1meuw#D9u>mtO#QEM3yyU_LCl*X#7V^5>USdXD|0ajI}13)-Ar1Graz9=vcD2rh7UBEU?@4(N^Wn!%mX8$rO3w#Q8vG5f`qN;$um}#PDmIX}^_MB!Zxl@mvFI_yV3eAh( zI_M`X48Qn*=V`S(?Ymg!USGl z9}S%b0QCYK&z;J}54BUODz%9D1q?RvG&Y=>o^5Y(vd-hEi744u7>0pch@adb;)nf@Op(K&5*M z+lxGr5SIzr2zCdX9^CjL2y&1F_aKHgqD16a<1|)`0oREr&~!*tBTH0pQx^5No9)E0 zIVUtBinQFi93uH3Bai=P8svA!Kl;qF(Q3ivO{bYp&Tpb_C?Y1o7Tp|ow}M!-7$Ar|aQ`KT8}J*P62a5Xo61CR6PkuzS2d|IESrb*noq1g zo%_R1HmwJ}zSP{*lY?!0lQI7DAxsFqPBvl}jp#Vx8tDgtk>h%<{4 zwaH{oyv`Fu#jEbo`stTNyISaGs*f9r%@O-YZ?b1lkf`!}*+IX=JnQa~nvq3588bTZ zCfk9PIaZDqc6o#U+Ui^WRd01SFIC?$9_BS*UT*zdj8LqN5q}Ol2O|@2pu19lgA7zm z%YHPoNU|Auc`1e5aiko>(Jo_;gk!i4h4CYVG?R46DE=K#ROi1c7ReA$n<0=0&}{Z@ zvo!Pl2QGc}z2O3nGk-w}ur|MIQQ(d9XtU@31QT^xI1;z?$IVR=`$CiTD*a?9uDa#z zxm3c%1Jy5gAigh3ywGI=2{H^PJ)K>NQZj(87NIP&$f0tWee9^g|{lH`*JVgnOCcSgRV zL8|1dhPtJtHTBMl@PTL0Bgx;8JI#g>JA5Em_fG6IIhI`%HPRm+IEn0^OyyOVNr!MR|doAhz6GW`;2 z(j7}0k~x9ASPiA@0~~6!5c`SLl?VnZEIjC`Q6fw`5dz!6GC$XlaXH4^%WO~U8zj$sqj02 z5}sw@3I__Pj+#6cl=<%ZpzjES#WL}DSOyM%c-wQNPKEu@n%6+*J6)Pg%6jomKkpX_ zLiQNOM>=O2@W8PyT_z1)PaboFg8+Fa7P=?@9H$6ey_ub}I1*I;pC4o~P0DM^CgEj@ zmdFkx^nTQlXqhuz4b|g*7jspyZ0cdeO@Kz$oF=R_8aj@_C!}7BeMHBI*Dh>_HJ#S0 zW|T`a(M%;mIQ-M?QwoAy0)j>m%1S;CULBo<$R{>WJlru?>|5B^6Cjg}nr&1Y30vwG zYM7_OJo%T2#l5eik;Cx$WC*{Rzwop2u2Vj@&)ofkm<#UsFeJ`+AUIF@s;h$uz5?Yaut; zSwKEAaf6Nw0x5Ombut>rb&uP(SKy>2K{NV7i;MT>Sv6wG-3n5rFauPgcJFD%DV|4x z@otu_v(mF$T$XWjMwos)NmQ;C8$*s@LC8Iy^myViFHo)2wNlhAs|O#g;0eZj!M6^j zgA-W6A%V3+#yGo=H*?7PtKEwY>=kcF(URiYh&ZNa6|EurvP^MzpK$B1f_WLWGv#48 z-ta_A58cFWIZ}yA+?4$2yBU8lGx17!{vPMVTdKbL1X5Moa^oE){17X*vG+r(YlpBf zh(M3g=7RFiHVhV0>viB!|G;X)SMJbo*mzHZ2ZIKDZ#6**Qt9i@*d=zI8uVHhk>(@k z+x%;t=1gQG7TD<}9Q55wL2UZ({CY|5tkJ@~e+YLoPaiCYQ;fEEvjIJ0FQ)K9UBiK0 z?i0x7lgnOL`cCNrf1)Gg0Vw6vuKNV)LiU>)Cu}Ofwl-r@7WHYT_^rK$1+9BsFg+Nx zvjRX8EatpvAq6y|n~tIf8cWcEy7z+rbVN~Vs#7y%5Y)3n2F48Kv18v9PHoVDL2(~| zpRvIu)Uq<01dJd_XTzEl%b`)0qupF~l>7y6%|M2OIcyO!1F&<&5uYq0wYgO5@KxZm z)_3vU*GQ6Dy!y7A?akr;28cl4UZ30*;b31QBg&u5bccBGN?J* zzbG{!N{08D-1w5X)M?@+(JompoPLGx@T>XKe!?BDvey3~_A7_t`k_5mN13SmC*63l zVVSYGSF!O~JCbF6Rk}Xx@NCoCVX`7US~?sf0wH^IaGu@CKZ4a+hZQBdXb$VHGxTE< zS`E;de*XE=k#q8Wqp14~z(|jeCWnHy-1?=2jDOYjF>DBbyE2d9&nih@MlQw zXdw6IDQ&Np(|X@xOH@3Yc#GMtlUb`Q2l=9h`E=ZU$;_E%i}UGX0Lcwrm6xStTkQr1 zF6^n;Go1{Q@0~K044M8GZzeBob&hG{)pdr!8EaNynm*HB2Jb%Wjp}HTuTitE6S-{G zOomB>Tc_UEwixYXRZgY<4Sinz_+z#k*R@}W_rS)QDc&S~N_DAMe%k#1%^WtD#XLOu z`74CA(oW@Gvb8v|)J@LG7@!yBaa;uO8d(O2?DdX`ws6!+$Lud6(7e<+n0W&64d9j` z=zD#&DiGVJJH`-RWNSUGiUR0Uidv$l31QKtR)p5dD+l|qE_n@jl3os(-=EeaoT0cq ziscG+o86wG@j@J2%GgzH6oq$~4aGF4eTM4=kJu}7MMiZJG6tPbiD-#H zX{;PUj-&4G%;Z+?nY(87A1ts?H2mQ^Zv8_gTSz4ymhCf#*U(r<5$aO@gC?gNc+EFLF099>6@wa@~8 z*&CUR=KJ_xyk}>Cs_rtx# zh>+GAnF)NDsJ?x&H#Qf>&$iNuKb%-E(e(>v{HVIW?4szgPhtp zmYVL?a2GUq8b0an^xwSuPA|DB$S&>@fQ>f7%o?;1PUT&BZ~$`II1bJ?WLuW&m3)U_ z-#Dk=5*yV@LALVS&`2spzm9KE_xZZO4wg2=L0=vTF5p$dzx|S3jbsQ9#32)u44YbC zrhM8~wiYwL?y@ONKE;`;eZ{B5&ym8xW@=n0&wSxim*9Zi&_Gti=%=%e_{;pyE1gm~ z#^}qk!4kfR7y~Hm?PT*s;Qx{ec+z)~cjnIS@P_37wo>O?b1RmwYaz;p0bgmMvXkwW`5ndciwwr$Y9D8p>#% z>}^t!5Qm){WW$~Ski)5oekpW_Q$Pv@j$AVBlmEwQ_I%e*H6HR%+g6eg%EA^lx6-|PuWicU|*n4!T83~ zEI0kyubjDP=jw#F$nPP!*$35Duzzc9NRa+IF|^!zoKX)-tO?@a?s*jMm5@4;9M=}a z)h7X(Tl^UH%U%}S;z_sO$Lv-?(O00ZgieAwRF!lbNE6r2Hl2Pv64ZU<8drvLb0YoJ z5hc|dmlSfl2GSXnioJC#`~v$`mYW1(y0GhrtqvPbB5H6vGLJg$7%)#vbjm1QpNc&z zH0qBK;v=Gql^bk*pBd?*sI1KS=s<@-5$mz#f&6;ndiK+k23AO{elE+khQ};z?+@vx z^cU0M-jpC_H1JxUVLNWvIVgPPo88l$hC|VnKp1l{LLJ&4{G}}&*fM5#jE8x#j~Xf? z-&k2OLEx~d?p<$gPh_L<%%U23Yr9}_O+ z^$Z!1{nhW59#hEbGhEdV^eDhk^1HZNoR!0U5dpgIEAW610<>674*E9@j%TVG3MJrO zjgUzgJR?N_>Ik`2(m&Mr|9&=MOpGsc0^(k`!|WQQ6}9C&I(9(afBfEgV1nA*TKTJk zRPRvv@w751w3*6p%hR&f?SGWyRelgd*XydT(E9{Z)SD@r*W~bA5b`?r?-JQ8&bZ0f_k73Ln2hFdvbmMZ8jxd-lvs<-`O@t9BNCnEg1zJTuyXf7IQJ2e(TO7g!Q17 zBu*u=>}rm(;&ecJ1Db$e94FG}4fvrwK4YXV^Wrj&lGkdEMM|NsI0W?N=~W!yic!6)0yZ4$A=AZ`Ft=H$x>^^Edr; z_1ADKmM7IjXzJhm7L&8arLd6c$MfFS+*wUayc>H3QFN|a28}IL3-uaS3yK6fn9mg4 z&8+(s`tzyn5#~&Dyxvdz#)lQW&5|pbYf0#4_q+|i;=e2)b}S4~`C^$_ygoimM+v`W zm)~x<2%@V7PaV$9xmTf&XC(4w9Cj;ccS^83kD6c-V%jsCB{lcj_GPHB-cgz;6|>Uh z75|eqsKy?3;=bpmA|kC>WAIBu+a5~!%wIxc6!G}=OYGzL^Dcn#Fe_aDaDtZyT+d%H z(6v*W$wiM$L2;(DT+yZejc^Giv-HdZ%U|-Wj!vcOq{!^Z)r7A%fBFu)8Cp9PjNQye zWNd?CSbrMUCFL{$)*rFc?Qboo=_q92sizB`!U|&s-Po1quo>jCD;gr;thkpR@@3t> z*a;+!^dhd;>OSorV<9Q}c{vxGIwUI+zONfh&7UXoVXn-n6PfS|Mf2i%;6cy{3_28O z7lcK8bw*G|lLyKBFn*O4I_l{{@j9IOxqVapl9#*x=}Q1SG5uX~FThrKEn~k;$<7W- zA*2$p+@p<0a9}5-{1&EC@l*@NTMLLaU*c0L-#~%>QkaHvA4*7v<@Q;s7J<$tYuUiF z#Nx|d!M|or@$n3ktneM&tdj4(hmBt&o7BK!sx`^$+L5tM=Sq2>EOnhnm{I6m^YV>{ zDSrsRG)&H&8z`-za@>K!w$b@%YqTcwk6oXrYrl_6yP2lTc+8pcJJ-oM5-B9MHEiS4 z2tXP0f(VjSK}}0lmV*(Od5o)gvbIp0Rs@dy1mk!LULvEVlnJaxI1{qysiiL(9*LC zb?3__X?SV5SyE^}10iUneZMEH&Yc^(xv9C)pu2Vqdyaz9Vw3`brXNtAe2Lx))HKWFUs=RXDa~ zeRl9Bg_GJa>wl5`#!mjx&@G365%cR(QwglFZ3i-75?UE#!0LbfZ@vB(g*QNoP=gYY zfc3SMLOpNc7GC~JhKtZi(>j&nDO&wk3@YPt;+3Ccssa( zUxud_WtvE2kQVfwvNv=MFDq$=K(_NMyIuT9WOM75j=oE8?^TqM>O8#N0WmKOAyE{! zP|dXURR^s;;L03!b6vzYFX6C)Cj7rb)P#PcYI=`!a@DkO1H<=hU#C1T9Kym#^KYZq zlEcqt9|TTB3ROG^`75yyr*8+h(am3Dl#XHY%sa^4DZ!yobrsLQ+`Gsi&P~)jCl{%h z{(XyPok#ZP=hFd)F}wUbnlh+O2ivVoej}7}(6sIPP&mq0%6+~ANnB^fNS!iVq&(uj zAV-5MBt#|ZyL_*oeIG~vGSCo`j>b_w@ReLVa`{Rf83181p=x{%NIUDlC*qutifQ`9 zL@QQMv9AxB7o`aX(JPHBu$>b!dbV7U_S`bxodIY0b?lV+gFc@y^WXD!T19vpuTm?n*i!YD z$brKKaIf%BvN=4TFA8t&7!&%c-iJWfsFQv;fQWRT+p16n;70r*3+*{0D{dE_uD67$ z4zQFBAubH_M5z^CUA#f9$UJ*C6eL`Z5Pl{MTgmVtn>!wXvUg^3^RUySSOpqh9Js)( z@a_~4bd9*)_ZOm?A`^Lu;Mg;%w%Udp58?;MM%(N`H}l4Y5gm%Y8^EJKOqL3=jnQ1C=q z^-i?#yptkmQG%jbrI6V+LjC_Ki-P8^=>5g8eC5-yWe{ySL8~=;U$-UZBrMKG--yh@ z{n~$+eSWQ834pIRUtC{Xa4zrJ#-cd<#q`syK)gx{WP9d(j``=$Pd6sIix3k`I27{+ z?eH_5JH#<@Ji&1RA#xqiXXVMOP^S@tYJ`z)|8tr~w&W63W#Z{=TMy@$>sV`)E*Xb~ zQ5<74MO);uSVJw^%Xs=^t(HUcmm%m8ctl9MDo1~q$p6khXI$t^77`0ltFFEa z^aF3?XST+TPA!!E&0R*_>|rs3{2BPgbRM6>Ct*tqla`Qb!@hK#MT!D~(ahiBdW)Jq z()N_c64^i0fy9JT=Q|)jkX*#YP3)dE>rsL&Kuw|)^gb3z1+tfqcKj57cR3G{Id{nL>s zACA(eX#0$m_4Tt*3$klm0-Lnr0?t~s8Gei9hc0*GSG8)o^WbX0LcNICd!JvR^$&H*>h>Bj<}hV6VlLKrOr)Vs6j zTtQkNLX{$`qX;8nVD?#R@QUVo(GbLqEq*6q6+SN}ivY1|+w zLV1H67ppXw1`Fj%yO@q(SZhM8hHhynI$|&mvB@z*!U{X6qsVWPQ7EeW)z3znZH5Kt zvEA87Z-q=*^=F`lW>1gIxV%-oCuTrgZfBAzaNOei2Q4tC6278CD($J zG5GK#iyC>HR`UFXGfR8WM>Dpz%0D}#RbBNaZ6&tY^GHkQEe^~CQ_`+J=f-nCdsjDE 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�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 { let obs: OBSHandler; let hasTestFailed: boolean = false; + const mediaPath = path.join(path.normalize(__dirname), '..', 'media'); + // Initialize OBS process before(async() => { logInfo(testName, 'Starting ' + testName + ' tests'); @@ -183,6 +187,100 @@ describe(testName, () => { osn.AdvancedStreamingFactory.destroy(stream); }); + it('Enhanced broadcasting streaming', async function() { + if (obs.isDarwin()) { + this.skip(); + } + + const stream = osn.AdvancedStreamingFactory.create(); + expect(stream).to.not.be.null; + stream.service = osn.ServiceFactory.legacySettings; + + // Note: no video encoder set, because it is automatically created by the enhanced broadcasting + stream.delay = osn.DelayFactory.create(); + stream.reconnect = osn.ReconnectFactory.create(); + stream.network = osn.NetworkFactory.create(); + stream.video = obs.defaultVideoContext; + stream.enhancedBroadcasting = true; + const track1 = osn.AudioTrackFactory.create(160, 'track1'); + osn.AudioTrackFactory.setAtIndex(track1, 1); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + stream.start(); + + let signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Starting); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Starting, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Activate); + + if (signalInfo.signal == EOBSOutputSignal.Stop) { + throw Error(GetErrorMessage(ETestErrorMsg.StreamOutputDidNotStart, signalInfo.code.toString())); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Activate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Start); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Start, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + // Scene setup + const scene = osn.SceneFactory.create('my_scene'); + expect(scene).to.not.be.null; + osn.Global.setOutputSource(0, scene); + + let settings = inputSettings.ffmpegSource; + settings['volume'] = 100; + settings['local_file'] = path.join(mediaPath, "bigbuckbunny.mp4"); + settings['looping'] = true; + const videoSource = osn.InputFactory.create(EOBSInputTypes.FFMPEGSource, 'video_source', settings); + expect(videoSource).to.not.be.null; + + const sceneItem = scene.add(videoSource); + expect(sceneItem).to.not.be.null; + + sceneItem.video = obs.defaultVideoContext; + sceneItem.visible = true; + sceneItem.position = { x: 0, y: 0 }; + + await sleep(5 * 1000); + + expect(stream.droppedFrames).to.not.equal(undefined, "Undefined droppedFrames"); + expect(stream.totalFrames).to.not.equal(undefined, "Undefined totalFrames"); + expect(stream.kbitsPerSec).to.not.equal(undefined, "Undefined kbitsPerSec"); + expect(stream.dataOutput).to.not.equal(undefined, "Undefined dataOutput"); + + stream.stop(); + + // Scene cleanup + sceneItem.remove(); + videoSource.release(); + scene.release(); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stopping); + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stopping, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stop); + + if (signalInfo.code != 0) { + throw Error(GetErrorMessage( + ETestErrorMsg.StreamOutputStoppedWithError, + signalInfo.code.toString(), signalInfo.error)); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Deactivate); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + osn.AdvancedStreamingFactory.destroy(stream); + }); + it('Stream with invalid stream key', async function() { if (obs.isDarwin()) { this.skip(); @@ -218,7 +316,7 @@ describe(testName, () => { EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); expect(signalInfo.signal).to.equal( EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.code).to.equal(-3, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.code).to.equal(-3, GetErrorMessage(ETestErrorMsg.StreamOutput)); stream.service.update({ key: obs.userStreamKey }); diff --git a/tests/osn-tests/src/test_osn_simple_streaming.ts b/tests/osn-tests/src/test_osn_simple_streaming.ts index 97471ddd0..a28c8d7b0 100644 --- a/tests/osn-tests/src/test_osn_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_simple_streaming.ts @@ -6,12 +6,16 @@ import { ETestErrorMsg, GetErrorMessage } from '../util/error_messages'; import { OBSHandler } from '../util/obs_handler' import { deleteConfigFiles, sleep } from '../util/general'; import { EOBSInputTypes, EOBSOutputSignal, EOBSOutputType } from '../util/obs_enums'; +import * as inputSettings from '../util/input_settings'; + +import path = require('path'); const testName = 'osn-simple-streaming'; describe(testName, () => { let obs: OBSHandler; let hasTestFailed: boolean = false; + const mediaPath = path.join(path.normalize(__dirname), '..', 'media'); // Initialize OBS process before(async() => { @@ -167,6 +171,99 @@ describe(testName, () => { osn.SimpleStreamingFactory.destroy(stream); }); + it('Enhanced broadcasting streaming', async function() { + if (obs.isDarwin()) { + this.skip(); + } + + const stream = osn.SimpleStreamingFactory.create(); + expect(stream).to.not.be.null; + // Note: no video encoder set, because it is automatically created by the enhanced broadcasting + stream.service = osn.ServiceFactory.legacySettings; + stream.delay = osn.DelayFactory.create(); + stream.reconnect = osn.ReconnectFactory.create(); + stream.network = osn.NetworkFactory.create(); + stream.video = obs.defaultVideoContext; + stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.enhancedBroadcasting = true; + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + stream.start(); + + let signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Starting); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Starting, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Activate); + + if (signalInfo.signal == EOBSOutputSignal.Stop) { + throw Error(GetErrorMessage( + ETestErrorMsg.StreamOutputDidNotStart, signalInfo.code.toString(), signalInfo.error)); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Activate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Start); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Start, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + // Scene setup + const scene = osn.SceneFactory.create('my_scene'); + expect(scene).to.not.be.null; + osn.Global.setOutputSource(0, scene); + + let settings = inputSettings.ffmpegSource; + settings['volume'] = 100; + settings['local_file'] = path.join(mediaPath, "bigbuckbunny.mp4");; + settings['looping'] = true; + const videoSource = osn.InputFactory.create(EOBSInputTypes.FFMPEGSource, 'video_source', settings); + expect(videoSource).to.not.be.null; + + const sceneItem = scene.add(videoSource); + expect(sceneItem).to.not.be.null; + + sceneItem.video = obs.defaultVideoContext; + sceneItem.visible = true; + sceneItem.position = { x: 0, y: 0 }; + + await sleep(5 * 1000); + + expect(stream.droppedFrames).to.not.equal(undefined, "Undefined droppedFrames"); + expect(stream.totalFrames).to.not.equal(undefined, "Undefined totalFrames"); + expect(stream.kbitsPerSec).to.not.equal(undefined, "Undefined kbitsPerSec"); + expect(stream.dataOutput).to.not.equal(undefined, "Undefined dataOutput"); + + stream.stop(); + + // Scene cleanup + sceneItem.remove(); + videoSource.release(); + scene.release(); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stopping); + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stopping, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stop); + + if (signalInfo.code != 0) { + throw Error(GetErrorMessage( + ETestErrorMsg.StreamOutputStoppedWithError, + signalInfo.code.toString(), signalInfo.error)); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Deactivate); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + osn.SimpleStreamingFactory.destroy(stream); + }); + it('Stream with invalid stream key', async function() { if (obs.isDarwin()) { this.skip(); From ce077e2bc6fe729f6ddd8acf539c8752b409e923 Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Thu, 15 Jan 2026 13:28:04 +0000 Subject: [PATCH 10/19] Refined constructGoLivePost for enhanced broadcasting to accept desired canvases --- obs-studio-server/source/nodeobs_service.cpp | 12 ++++++++++- .../osn-multitrack-video-configuration.cpp | 21 +++++++++++++++++-- .../osn-multitrack-video-configuration.hpp | 3 ++- .../osn-multitrack-video-system-info.cpp | 1 - obs-studio-server/source/osn-streaming.cpp | 3 +-- 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/obs-studio-server/source/nodeobs_service.cpp b/obs-studio-server/source/nodeobs_service.cpp index 61bfcc5b3..844c1745d 100644 --- a/obs-studio-server/source/nodeobs_service.cpp +++ b/obs-studio-server/source/nodeobs_service.cpp @@ -1373,7 +1373,17 @@ bool OBS_service::startMultiTrackStreaming(StreamServiceId serviceId, bool dualS auto vod_track_mixer = IsVodTrackEnabled(services[serviceId]) ? std::optional{vodTrackIndex} : std::nullopt; - auto go_live_post = osn::constructGoLivePost(serviceId, dualStreamingMode, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); + std::vector canvases; + canvases.push_back(videoInfo[serviceId]); + if (dualStreamingMode) { + if (serviceId == StreamServiceId::Main) { + canvases.push_back(videoInfo[StreamServiceId::Second]); + } else if (serviceId == StreamServiceId::Second) { + canvases.push_back(videoInfo[StreamServiceId::Main]); + } + } + + auto go_live_post = osn::constructGoLivePost(canvases, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); if (!go_live_config.has_value()) { throw std::runtime_error("startStreaming - go live config is empty"); diff --git a/obs-studio-server/source/osn-multitrack-video-configuration.cpp b/obs-studio-server/source/osn-multitrack-video-configuration.cpp index 577f2903b..6921c2ce6 100644 --- a/obs-studio-server/source/osn-multitrack-video-configuration.cpp +++ b/obs-studio-server/source/osn-multitrack-video-configuration.cpp @@ -218,8 +218,11 @@ std::string MultitrackVideoAutoConfigURL(obs_service_t *service) return url; } -PostData constructGoLivePost(StreamServiceId serviceId, bool dualStreamingMode, std::string streamKey, const std::optional &maximum_aggregate_bitrate, - const std::optional &maximum_video_tracks, bool vod_track_enabled) +PostData constructGoLivePost(std::vector canvases, + std::string streamKey, + const std::optional &maximum_aggregate_bitrate, + const std::optional &maximum_video_tracks, + bool vod_track_enabled) { PostData post_data{}; post_data.service = "IVS"; @@ -255,6 +258,19 @@ PostData constructGoLivePost(StreamServiceId serviceId, bool dualStreamingMode, if (obs_get_video_info(&ovi)) preferences.composition_gpu_index = ovi.adapter; + + for (const auto& c : canvases) { + if (!c) { + blog(LOG_WARNING, "constructGoLivePost - empty canvas, skipping"); + continue; + } + + preferences.canvases.emplace_back( + Canvas{c->output_width, c->output_height, c->base_width, c->base_height, {c->fps_num, c->fps_den}}); + } + + // TODO: remove + /* const size_t contexts = obs_get_video_info_count(); for (size_t i = 0; i < contexts; i++) { if (obs_get_video_info_by_index(i, &ovi)) { @@ -273,6 +289,7 @@ PostData constructGoLivePost(StreamServiceId serviceId, bool dualStreamingMode, Canvas{ovi.output_width, ovi.output_height, ovi.base_width, ovi.base_height, {ovi.fps_num, ovi.fps_den}}); } } + */ obs_audio_info2 oai2; if (obs_get_audio_info2(&oai2)) { diff --git a/obs-studio-server/source/osn-multitrack-video-configuration.hpp b/obs-studio-server/source/osn-multitrack-video-configuration.hpp index 3741694bb..ca1a5cab6 100644 --- a/obs-studio-server/source/osn-multitrack-video-configuration.hpp +++ b/obs-studio-server/source/osn-multitrack-video-configuration.hpp @@ -7,6 +7,7 @@ #include #include +#include namespace osn { @@ -14,7 +15,7 @@ std::string MultitrackVideoAutoConfigURL(obs_service_t *service); Config DownloadGoLiveConfig(std::string url, const PostData &post_data); -PostData constructGoLivePost(StreamServiceId serviceId, bool dualStreamingMode, std::string streamKey, const std::optional &maximum_aggregate_bitrate, +PostData constructGoLivePost(std::vector canvases, std::string streamKey, const std::optional &maximum_aggregate_bitrate, const std::optional &maximum_video_tracks, bool vod_track_enabled); } \ No newline at end of file diff --git a/obs-studio-server/source/osn-multitrack-video-system-info.cpp b/obs-studio-server/source/osn-multitrack-video-system-info.cpp index dd74c229d..04167a41b 100644 --- a/obs-studio-server/source/osn-multitrack-video-system-info.cpp +++ b/obs-studio-server/source/osn-multitrack-video-system-info.cpp @@ -241,7 +241,6 @@ void system_info(Capabilities &capabilities) system_data.build = ver.build; system_data.release = win_release_id; system_data.revision = std::to_string(ver.revis); - ; system_data.bits = is_64_bit_windows() ? 64 : 32; system_data.arm = is_arm64_windows(); system_data.armEmulation = os_get_emulation_status(); diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index 22b2eacdf..a8262a792 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -446,8 +446,7 @@ void osn::Streaming::StartEnhancedBroadcastingStream(std::optional vod_t auto auto_config_url = osn::MultitrackVideoAutoConfigURL(this->service); blog(LOG_INFO, "Auto config URL: %s", auto_config_url.c_str()); - const bool dualStreamingMode = true; // TODO: revise this??????? Make this dynamic????? - auto go_live_post = osn::constructGoLivePost(StreamServiceId::Main, dualStreamingMode, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); + auto go_live_post = osn::constructGoLivePost({this->GetCanvas()}, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); if (!go_live_config.has_value()) { throw std::runtime_error("startStreaming - go live config is empty"); From da218548bc4c0fa1178a90b36ed5e284aa918546 Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Tue, 27 Jan 2026 15:56:38 +0000 Subject: [PATCH 11/19] Implemented dual streaming with the new Enhnaced Broadcasting API --- js/module.d.ts | 25 +- js/module.js | 10 +- js/module.ts | 29 +- obs-studio-client/CMakeLists.txt | 12 +- .../source/advanced-streaming-base.cpp | 134 +++++++++ .../source/advanced-streaming-base.hpp | 39 +++ .../source/advanced-streaming.cpp | 116 -------- .../source/advanced-streaming.hpp | 17 +- ...hanced-broadcasting-advanced-streaming.cpp | 186 ++++++++++++ ...hanced-broadcasting-advanced-streaming.hpp | 40 +++ ...enhanced-broadcasting-simple-streaming.cpp | 184 ++++++++++++ ...enhanced-broadcasting-simple-streaming.hpp | 40 +++ obs-studio-client/source/main.cpp | 4 + .../source/simple-streaming-base.cpp | 98 +++++++ .../source/simple-streaming-base.hpp | 35 +++ obs-studio-client/source/simple-streaming.cpp | 78 ----- obs-studio-client/source/simple-streaming.hpp | 12 +- obs-studio-client/source/streaming.cpp | 23 -- obs-studio-client/source/streaming.hpp | 2 - obs-studio-server/CMakeLists.txt | 4 + obs-studio-server/source/main.cpp | 4 + .../source/osn-advanced-streaming.cpp | 16 +- ...hanced-broadcasting-advanced-streaming.cpp | 171 +++++++++++ ...hanced-broadcasting-advanced-streaming.hpp | 57 ++++ ...enhanced-broadcasting-simple-streaming.cpp | 165 +++++++++++ ...enhanced-broadcasting-simple-streaming.hpp | 57 ++++ .../source/osn-enhanced-broadcasting.hpp | 145 ++++++++++ .../source/osn-simple-streaming.cpp | 8 - obs-studio-server/source/osn-streaming.cpp | 101 ------- obs-studio-server/source/osn-streaming.hpp | 8 - .../src/test_osn_advanced_streaming.ts | 94 ------ ...nhanced_broadcasting_advanced_streaming.ts | 271 ++++++++++++++++++ ..._enhanced_broadcasting_simple_streaming.ts | 263 +++++++++++++++++ .../src/test_osn_simple_streaming.ts | 96 +------ 34 files changed, 1973 insertions(+), 571 deletions(-) create mode 100644 obs-studio-client/source/advanced-streaming-base.cpp create mode 100644 obs-studio-client/source/advanced-streaming-base.hpp create mode 100644 obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp create mode 100644 obs-studio-client/source/enhanced-broadcasting-advanced-streaming.hpp create mode 100644 obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp create mode 100644 obs-studio-client/source/enhanced-broadcasting-simple-streaming.hpp create mode 100644 obs-studio-client/source/simple-streaming-base.cpp create mode 100644 obs-studio-client/source/simple-streaming-base.hpp create mode 100644 obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.cpp create mode 100644 obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.hpp create mode 100644 obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.cpp create mode 100644 obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.hpp create mode 100644 obs-studio-server/source/osn-enhanced-broadcasting.hpp create mode 100644 tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts create mode 100644 tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts diff --git a/js/module.d.ts b/js/module.d.ts index 1be255710..31ea690c2 100644 --- a/js/module.d.ts +++ b/js/module.d.ts @@ -307,6 +307,8 @@ export declare const VideoEncoderFactory: IVideoEncoderFactory; export declare const ServiceFactory: IServiceFactory; export declare const SimpleStreamingFactory: ISimpleStreamingFactory; export declare const AdvancedStreamingFactory: IAdvancedStreamingFactory; +export declare const EnhancedBroadcastingAdvancedStreamingFactory: IEnhancedBroadcastingAdvancedStreamingFactory; +export declare const EnhancedBroadcastingSimpleStreamingFactory: IEnhancedBroadcastingSimpleStreamingFactory; export declare const DelayFactory: IDelayFactory; export declare const ReconnectFactory: IReconnectFactory; export declare const NetworkFactory: INetworkFactory; @@ -794,12 +796,11 @@ export interface IVideoEncoderFactory { create(id: string, name: string, settings?: ISettings): IVideoEncoder; } export interface IStreaming { - // Video encoder value is ignored when enhancedBroadcasting === true + // Video encoder value is ignored in the Enhanced Broadcasting mode videoEncoder?: IVideoEncoder; service: IService; enforceServiceBitrate: boolean; enableTwitchVOD: boolean; - enhancedBroadcasting: boolean; delay: IDelay; reconnect: IReconnect; network: INetwork; @@ -840,6 +841,26 @@ export interface IAdvancedStreamingFactory { destroy(stream: IAdvancedStreaming): void; legacySettings: IAdvancedStreaming; } +export interface IEnhancedBroadcastingAdvancedStreaming extends IAdvancedStreaming { + // If set, the Enhanced Broadcasting stream will be in the Dual Output mode. + // This value should be initialized before the stream start. + additionalVideo?: IVideo, +} +export interface IEnhancedBroadcastingAdvancedStreamingFactory { + create(): IEnhancedBroadcastingAdvancedStreaming; + destroy(stream: IEnhancedBroadcastingAdvancedStreaming): void; + legacySettings: IEnhancedBroadcastingAdvancedStreaming; +} +export interface IEnhancedBroadcastingSimpleStreaming extends ISimpleStreaming { + // If set, the Enhanced Broadcasting stream will be in the Dual Output mode. + // This value should be initialized before the stream start. + additionalVideo?: IVideo, +} +export interface IEnhancedBroadcastingSimpleStreamingFactory { + create(): IEnhancedBroadcastingSimpleStreaming; + destroy(stream: IEnhancedBroadcastingSimpleStreaming): void; + legacySettings: IEnhancedBroadcastingSimpleStreaming; +} export interface IFileOutput { path: string; format: ERecordingFormat; diff --git a/js/module.js b/js/module.js index 9ca431d08..a11852eaa 100644 --- a/js/module.js +++ b/js/module.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.NodeObs = exports.getSourcesSize = exports.createSources = exports.addItems = exports.AdvancedReplayBufferFactory = exports.SimpleReplayBufferFactory = exports.AudioEncoderFactory = exports.AdvancedRecordingFactory = exports.SimpleRecordingFactory = exports.AudioTrackFactory = exports.NetworkFactory = exports.ReconnectFactory = exports.DelayFactory = exports.AdvancedStreamingFactory = exports.SimpleStreamingFactory = exports.ServiceFactory = exports.VideoEncoderFactory = exports.IPC = exports.ModuleFactory = exports.AudioFactory = exports.Audio = exports.FaderFactory = exports.VolmeterFactory = exports.DisplayFactory = exports.TransitionFactory = exports.FilterFactory = exports.SceneFactory = exports.InputFactory = exports.VideoFactory = exports.Video = exports.Global = exports.DefaultPluginPathMac = exports.DefaultPluginDataPath = exports.DefaultPluginPath = exports.DefaultDataPath = exports.DefaultBinPath = exports.DefaultDrawPluginPath = exports.DefaultOpenGLPath = exports.DefaultD3D11Path = void 0; +exports.NodeObs = exports.getSourcesSize = exports.createSources = exports.addItems = exports.AdvancedReplayBufferFactory = exports.SimpleReplayBufferFactory = exports.AudioEncoderFactory = exports.AdvancedRecordingFactory = exports.SimpleRecordingFactory = exports.AudioTrackFactory = exports.NetworkFactory = exports.ReconnectFactory = exports.DelayFactory = exports.AdvancedStreamingFactory = exports.EnhancedBroadcastingSimpleStreamingFactory = exports.EnhancedBroadcastingAdvancedStreamingFactory = exports.SimpleStreamingFactory = exports.ServiceFactory = exports.VideoEncoderFactory = exports.IPC = exports.ModuleFactory = exports.AudioFactory = exports.Audio = exports.FaderFactory = exports.VolmeterFactory = exports.DisplayFactory = exports.TransitionFactory = exports.FilterFactory = exports.SceneFactory = exports.InputFactory = exports.VideoFactory = exports.Video = exports.Global = exports.DefaultPluginPathMac = exports.DefaultPluginDataPath = exports.DefaultPluginPath = exports.DefaultDataPath = exports.DefaultBinPath = exports.DefaultDrawPluginPath = exports.DefaultOpenGLPath = exports.DefaultD3D11Path = void 0; const path = require("path"); const fs = require("fs"); // Mac- search for optional OSN.app bundle (Chromium requires an app bundle to find obs64 helper apps) @@ -34,6 +34,8 @@ exports.VideoEncoderFactory = obs.VideoEncoder; exports.ServiceFactory = obs.Service; exports.SimpleStreamingFactory = obs.SimpleStreaming; exports.AdvancedStreamingFactory = obs.AdvancedStreaming; +exports.EnhancedBroadcastingAdvancedStreamingFactory = obs.EnhancedBroadcastingAdvancedStreaming; +exports.EnhancedBroadcastingSimpleStreamingFactory = obs.EnhancedBroadcastingSimpleStreaming; exports.DelayFactory = obs.Delay; exports.ReconnectFactory = obs.Reconnect; exports.NetworkFactory = obs.Network; @@ -70,7 +72,7 @@ function createSources(sources) { console.error(`[OSN] Failed to create input for source "${source.name}":`, error instanceof Error ? error.message : error); return; // Skip the rest of this iteration if input creation fails } - + if (newSource) { if (newSource.audioMixers) { newSource.muted = source.muted ?? false; @@ -80,7 +82,7 @@ function createSources(sources) { newSource.deinterlaceMode = source.deinterlaceMode; newSource.deinterlaceFieldOrder = source.deinterlaceFieldOrder; items.push(newSource); - + const filters = source.filters; if (Array.isArray(filters)) { filters.forEach(function (filter) { @@ -90,7 +92,7 @@ function createSources(sources) { } catch (filterError) { console.error(`[OSN] Failed to create filter "${filter.name}" for source "${source.name}":`, filterError instanceof Error ? filterError.message : filterError); } - + if (ObsFilter) { ObsFilter.enabled = filter.enabled ?? true; newSource.addFilter(ObsFilter); diff --git a/js/module.ts b/js/module.ts index 208d89acf..4805a3408 100644 --- a/js/module.ts +++ b/js/module.ts @@ -392,6 +392,8 @@ export const VideoEncoderFactory: IVideoEncoderFactory = obs.VideoEncoder; export const ServiceFactory: IServiceFactory = obs.Service; export const SimpleStreamingFactory: ISimpleStreamingFactory = obs.SimpleStreaming; export const AdvancedStreamingFactory: IAdvancedStreamingFactory = obs.AdvancedStreaming; +export const EnhancedBroadcastingAdvancedStreamingFactory: IEnhancedBroadcastingAdvancedStreamingFactory = obs.EnhancedBroadcastingAdvancedStreaming; +export const EnhancedBroadcastingSimpleStreamingFactory: IEnhancedBroadcastingSimpleStreamingFactory = obs.EnhancedBroadcastingSimpleStreaming; export const DelayFactory: IDelayFactory = obs.Delay; export const ReconnectFactory: IReconnectFactory = obs.Reconnect; export const NetworkFactory: INetworkFactory = obs.Network; @@ -1705,12 +1707,11 @@ export interface IVideoEncoderFactory { } export interface IStreaming { - // Video encoder value is ignored when enhancedBroadcasting === true + // Video encoder value is ignored in the Enhanced Broadcasting mode videoEncoder?: IVideoEncoder, service: IService, enforceServiceBitrate: boolean, enableTwitchVOD: boolean, - enhancedBroadcasting: boolean, delay: IDelay, reconnect: IReconnect, network: INetwork, @@ -1757,6 +1758,30 @@ export interface IAdvancedStreamingFactory { legacySettings: IAdvancedStreaming; } +export interface IEnhancedBroadcastingAdvancedStreaming extends IAdvancedStreaming { + // If set, the Enhanced Broadcasting stream will be in the Dual Output mode. + // This value should be initialized before the stream start. + additionalVideo?: IVideo, +} + +export interface IEnhancedBroadcastingAdvancedStreamingFactory { + create(): IEnhancedBroadcastingAdvancedStreaming; + destroy(stream: IEnhancedBroadcastingAdvancedStreaming): void; + legacySettings: IEnhancedBroadcastingAdvancedStreaming; +} + +export interface IEnhancedBroadcastingSimpleStreaming extends ISimpleStreaming { + // If set, the Enhanced Broadcasting stream will be in the Dual Output mode. + // This value should be initialized before the stream start. + additionalVideo?: IVideo, +} + +export interface IEnhancedBroadcastingSimpleStreamingFactory { + create(): IEnhancedBroadcastingSimpleStreaming; + destroy(stream: IEnhancedBroadcastingSimpleStreaming): void; + legacySettings: IEnhancedBroadcastingSimpleStreaming; +} + export interface IFileOutput { path: string, format: ERecordingFormat, diff --git a/obs-studio-client/CMakeLists.txt b/obs-studio-client/CMakeLists.txt index b8abce6c9..ec3530915 100644 --- a/obs-studio-client/CMakeLists.txt +++ b/obs-studio-client/CMakeLists.txt @@ -98,10 +98,18 @@ SET(osn-client_SOURCES "source/audio.cpp" "source/streaming.hpp" "source/streaming.cpp" + "source/simple-streaming-base.hpp" + "source/simple-streaming-base.cpp" "source/simple-streaming.hpp" "source/simple-streaming.cpp" + "source/advanced-streaming-base.hpp" + "source/advanced-streaming-base.cpp" "source/advanced-streaming.hpp" "source/advanced-streaming.cpp" + "source/enhanced-broadcasting-advanced-streaming.hpp" + "source/enhanced-broadcasting-advanced-streaming.cpp" + "source/enhanced-broadcasting-simple-streaming.hpp" + "source/enhanced-broadcasting-simple-streaming.cpp" "source/worker-signals.hpp" "source/delay.hpp" "source/delay.cpp" @@ -187,7 +195,7 @@ target_link_libraries(${PROJECT_NAME} ${LIBOBS_LIBRARIES}) add_definitions(-DNAPI_VERSION=7) #Define the OSN_VERSION -add_compile_definitions(OSN_VERSION=\"$ENV{tagartifact}\") +add_compile_definitions(OSN_VERSION=\"$ENV{tagartifact}\") set_target_properties( obs_studio_client PROPERTIES @@ -235,5 +243,5 @@ install( TARGETS obs_studio_client RUNTIME DESTINATION "./" COMPONENT Runtime LIBRARY DESTINATION "./" COMPONENT Runtime - ARCHIVE DESTINATION "./" COMPONENT Runtime + ARCHIVE DESTINATION "./" COMPONENT Runtime ) diff --git a/obs-studio-client/source/advanced-streaming-base.cpp b/obs-studio-client/source/advanced-streaming-base.cpp new file mode 100644 index 000000000..3c13403ef --- /dev/null +++ b/obs-studio-client/source/advanced-streaming-base.cpp @@ -0,0 +1,134 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#include "advanced-streaming-base.hpp" + +Napi::Value osn::AdvancedStreamingBase::GetAudioTrack(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetAudioTrack", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + return Napi::Number::New(info.Env(), response[1].value_union.ui32); +} + +void osn::AdvancedStreamingBase::SetAudioTrack(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call_synchronous_helper("AdvancedStreaming", "SetAudioTrack", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); +} + +Napi::Value osn::AdvancedStreamingBase::GetTwitchTrack(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetTwitchTrack", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + return Napi::Number::New(info.Env(), response[1].value_union.ui32); +} + +void osn::AdvancedStreamingBase::SetTwitchTrack(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call_synchronous_helper("AdvancedStreaming", "SetTwitchTrack", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); +} + +Napi::Value osn::AdvancedStreamingBase::GetRescaling(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetRescaling", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + return Napi::Boolean::New(info.Env(), response[1].value_union.ui32); +} + +void osn::AdvancedStreamingBase::SetRescaling(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call_synchronous_helper("AdvancedStreaming", "SetRescaling", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); +} + +Napi::Value osn::AdvancedStreamingBase::GetOutputWidth(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetOutputWidth", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + return Napi::Number::New(info.Env(), response[1].value_union.ui32); +} + +void osn::AdvancedStreamingBase::SetOutputWidth(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call_synchronous_helper("AdvancedStreaming", "SetOutputWidth", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); +} + +Napi::Value osn::AdvancedStreamingBase::GetOutputHeight(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetOutputHeight", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + return Napi::Number::New(info.Env(), response[1].value_union.ui32); +} + +void osn::AdvancedStreamingBase::SetOutputHeight(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call_synchronous_helper("AdvancedStreaming", "SetOutputHeight", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); +} diff --git a/obs-studio-client/source/advanced-streaming-base.hpp b/obs-studio-client/source/advanced-streaming-base.hpp new file mode 100644 index 000000000..1ad27dea1 --- /dev/null +++ b/obs-studio-client/source/advanced-streaming-base.hpp @@ -0,0 +1,39 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#pragma once +#include +#include "streaming.hpp" + +namespace osn { + +class AdvancedStreamingBase : public osn::Streaming { +public: + Napi::Value GetAudioTrack(const Napi::CallbackInfo &info); + void SetAudioTrack(const Napi::CallbackInfo &info, const Napi::Value &value); + Napi::Value GetTwitchTrack(const Napi::CallbackInfo &info); + void SetTwitchTrack(const Napi::CallbackInfo &info, const Napi::Value &value); + Napi::Value GetRescaling(const Napi::CallbackInfo &info); + void SetRescaling(const Napi::CallbackInfo &info, const Napi::Value &value); + Napi::Value GetOutputWidth(const Napi::CallbackInfo &info); + void SetOutputWidth(const Napi::CallbackInfo &info, const Napi::Value &value); + Napi::Value GetOutputHeight(const Napi::CallbackInfo &info); + void SetOutputHeight(const Napi::CallbackInfo &info, const Napi::Value &value); +}; + +} \ No newline at end of file diff --git a/obs-studio-client/source/advanced-streaming.cpp b/obs-studio-client/source/advanced-streaming.cpp index 1769e1398..45697af65 100644 --- a/obs-studio-client/source/advanced-streaming.cpp +++ b/obs-studio-client/source/advanced-streaming.cpp @@ -37,7 +37,6 @@ Napi::Object osn::AdvancedStreaming::Init(Napi::Env env, Napi::Object exports) InstanceAccessor("service", &osn::AdvancedStreaming::GetService, &osn::AdvancedStreaming::SetService), InstanceAccessor("enforceServiceBitrate", &osn::AdvancedStreaming::GetEnforceServiceBirate, &osn::AdvancedStreaming::SetEnforceServiceBirate), InstanceAccessor("enableTwitchVOD", &osn::AdvancedStreaming::GetEnableTwitchVOD, &osn::AdvancedStreaming::SetEnableTwitchVOD), - InstanceAccessor("enhancedBroadcasting", &osn::AdvancedStreaming::GetEnhancedBroadcasting, &osn::AdvancedStreaming::SetEnhancedBroadcasting), InstanceAccessor("signalHandler", &osn::AdvancedStreaming::GetSignalHandler, &osn::AdvancedStreaming::SetSignalHandler), InstanceAccessor("delay", &osn::AdvancedStreaming::GetDelay, &osn::AdvancedStreaming::SetDelay), InstanceAccessor("reconnect", &osn::AdvancedStreaming::GetReconnect, &osn::AdvancedStreaming::SetReconnect), @@ -117,121 +116,6 @@ void osn::AdvancedStreaming::Destroy(const Napi::CallbackInfo &info) return; } -Napi::Value osn::AdvancedStreaming::GetAudioTrack(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetAudioTrack", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::Number::New(info.Env(), response[1].value_union.ui32); -} - -void osn::AdvancedStreaming::SetAudioTrack(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call_synchronous_helper("AdvancedStreaming", "SetAudioTrack", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); -} - -Napi::Value osn::AdvancedStreaming::GetTwitchTrack(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetTwitchTrack", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::Number::New(info.Env(), response[1].value_union.ui32); -} - -void osn::AdvancedStreaming::SetTwitchTrack(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call_synchronous_helper("AdvancedStreaming", "SetTwitchTrack", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); -} - -Napi::Value osn::AdvancedStreaming::GetRescaling(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetRescaling", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::Boolean::New(info.Env(), response[1].value_union.ui32); -} - -void osn::AdvancedStreaming::SetRescaling(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call_synchronous_helper("AdvancedStreaming", "SetRescaling", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); -} - -Napi::Value osn::AdvancedStreaming::GetOutputWidth(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetOutputWidth", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::Number::New(info.Env(), response[1].value_union.ui32); -} - -void osn::AdvancedStreaming::SetOutputWidth(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call_synchronous_helper("AdvancedStreaming", "SetOutputWidth", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); -} - -Napi::Value osn::AdvancedStreaming::GetOutputHeight(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("AdvancedStreaming", "GetOutputHeight", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::Number::New(info.Env(), response[1].value_union.ui32); -} - -void osn::AdvancedStreaming::SetOutputHeight(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call_synchronous_helper("AdvancedStreaming", "SetOutputHeight", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); -} - Napi::Value osn::AdvancedStreaming::GetLegacySettings(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/advanced-streaming.hpp b/obs-studio-client/source/advanced-streaming.hpp index 261c5585c..b15274bf5 100644 --- a/obs-studio-client/source/advanced-streaming.hpp +++ b/obs-studio-client/source/advanced-streaming.hpp @@ -18,10 +18,11 @@ #pragma once #include -#include "streaming.hpp" +#include "advanced-streaming-base.hpp" namespace osn { -class AdvancedStreaming : public Napi::ObjectWrap, public osn::Streaming { + +class AdvancedStreaming : public Napi::ObjectWrap, public osn::AdvancedStreamingBase { public: static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); @@ -30,18 +31,8 @@ class AdvancedStreaming : public Napi::ObjectWrap, publi static Napi::Value Create(const Napi::CallbackInfo &info); static void Destroy(const Napi::CallbackInfo &info); - Napi::Value GetAudioTrack(const Napi::CallbackInfo &info); - void SetAudioTrack(const Napi::CallbackInfo &info, const Napi::Value &value); - Napi::Value GetTwitchTrack(const Napi::CallbackInfo &info); - void SetTwitchTrack(const Napi::CallbackInfo &info, const Napi::Value &value); - Napi::Value GetRescaling(const Napi::CallbackInfo &info); - void SetRescaling(const Napi::CallbackInfo &info, const Napi::Value &value); - Napi::Value GetOutputWidth(const Napi::CallbackInfo &info); - void SetOutputWidth(const Napi::CallbackInfo &info, const Napi::Value &value); - Napi::Value GetOutputHeight(const Napi::CallbackInfo &info); - void SetOutputHeight(const Napi::CallbackInfo &info, const Napi::Value &value); - static Napi::Value GetLegacySettings(const Napi::CallbackInfo &info); static void SetLegacySettings(const Napi::CallbackInfo &info, const Napi::Value &value); }; + } \ No newline at end of file diff --git a/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp new file mode 100644 index 000000000..d181e19b9 --- /dev/null +++ b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp @@ -0,0 +1,186 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#include "enhanced-broadcasting-advanced-streaming.hpp" +#include "utility.hpp" +#include "service.hpp" +#include "delay.hpp" +#include "reconnect.hpp" +#include "network.hpp" +#include "video.hpp" + +Napi::FunctionReference osn::EnhancedBroadcastingAdvancedStreaming::constructor; + +Napi::Object osn::EnhancedBroadcastingAdvancedStreaming::Init(Napi::Env env, Napi::Object exports) +{ + Napi::HandleScope scope(env); + Napi::Function func = DefineClass( + env, "EnhancedBroadcastingAdvancedStreaming", + {StaticMethod("create", &osn::EnhancedBroadcastingAdvancedStreaming::Create), + StaticMethod("destroy", &osn::EnhancedBroadcastingAdvancedStreaming::Destroy), + + InstanceAccessor("videoEncoder", &osn::EnhancedBroadcastingAdvancedStreaming::GetVideoEncoder, &osn::EnhancedBroadcastingAdvancedStreaming::SetVideoEncoder), + InstanceAccessor("service", &osn::EnhancedBroadcastingAdvancedStreaming::GetService, &osn::EnhancedBroadcastingAdvancedStreaming::SetService), + InstanceAccessor("enforceServiceBitrate", &osn::EnhancedBroadcastingAdvancedStreaming::GetEnforceServiceBirate, &osn::EnhancedBroadcastingAdvancedStreaming::SetEnforceServiceBirate), + InstanceAccessor("enableTwitchVOD", &osn::EnhancedBroadcastingAdvancedStreaming::GetEnableTwitchVOD, &osn::EnhancedBroadcastingAdvancedStreaming::SetEnableTwitchVOD), + InstanceAccessor("signalHandler", &osn::EnhancedBroadcastingAdvancedStreaming::GetSignalHandler, &osn::EnhancedBroadcastingAdvancedStreaming::SetSignalHandler), + InstanceAccessor("delay", &osn::EnhancedBroadcastingAdvancedStreaming::GetDelay, &osn::EnhancedBroadcastingAdvancedStreaming::SetDelay), + InstanceAccessor("reconnect", &osn::EnhancedBroadcastingAdvancedStreaming::GetReconnect, &osn::EnhancedBroadcastingAdvancedStreaming::SetReconnect), + InstanceAccessor("network", &osn::EnhancedBroadcastingAdvancedStreaming::GetNetwork, &osn::EnhancedBroadcastingAdvancedStreaming::SetNetwork), + InstanceAccessor("video", &osn::EnhancedBroadcastingAdvancedStreaming::GetCanvas, &osn::EnhancedBroadcastingAdvancedStreaming::SetCanvas), + InstanceAccessor("additionalVideo", &osn::EnhancedBroadcastingAdvancedStreaming::GetAdditionalCanvas, &osn::EnhancedBroadcastingAdvancedStreaming::SetAdditionalCanvas), + InstanceAccessor("droppedFrames", &osn::EnhancedBroadcastingAdvancedStreaming::GetDroppedFrames, nullptr), + InstanceAccessor("totalFrames", &osn::EnhancedBroadcastingAdvancedStreaming::GetTotalFrames, nullptr), + InstanceAccessor("kbitsPerSec", &osn::EnhancedBroadcastingAdvancedStreaming::GetKBitsPerSec, nullptr), + InstanceAccessor("dataOutput", &osn::EnhancedBroadcastingAdvancedStreaming::GetDataOutput, nullptr), + + InstanceAccessor("audioTrack", &osn::EnhancedBroadcastingAdvancedStreaming::GetAudioTrack, &osn::EnhancedBroadcastingAdvancedStreaming::SetAudioTrack), + InstanceAccessor("twitchTrack", &osn::EnhancedBroadcastingAdvancedStreaming::GetTwitchTrack, &osn::EnhancedBroadcastingAdvancedStreaming::SetTwitchTrack), + InstanceAccessor("rescaling", &osn::EnhancedBroadcastingAdvancedStreaming::GetRescaling, &osn::EnhancedBroadcastingAdvancedStreaming::SetRescaling), + InstanceAccessor("outputWidth", &osn::EnhancedBroadcastingAdvancedStreaming::GetOutputWidth, &osn::EnhancedBroadcastingAdvancedStreaming::SetOutputWidth), + InstanceAccessor("outputHeight", &osn::EnhancedBroadcastingAdvancedStreaming::GetOutputHeight, &osn::EnhancedBroadcastingAdvancedStreaming::SetOutputHeight), + + InstanceMethod("start", &osn::EnhancedBroadcastingAdvancedStreaming::Start), + InstanceMethod("stop", &osn::EnhancedBroadcastingAdvancedStreaming::Stop), + + StaticAccessor("legacySettings", &osn::EnhancedBroadcastingAdvancedStreaming::GetLegacySettings, &osn::EnhancedBroadcastingAdvancedStreaming::SetLegacySettings)}); + + exports.Set("EnhancedBroadcastingAdvancedStreaming", func); + osn::EnhancedBroadcastingAdvancedStreaming::constructor = Napi::Persistent(func); + osn::EnhancedBroadcastingAdvancedStreaming::constructor.SuppressDestruct(); + + return exports; +} + +osn::EnhancedBroadcastingAdvancedStreaming::EnhancedBroadcastingAdvancedStreaming(const Napi::CallbackInfo &info) : Napi::ObjectWrap(info) +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + size_t length = info.Length(); + + if (length <= 0 || !info[0].IsNumber()) { + Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); + return; + } + + this->uid = (uint64_t)info[0].ToNumber().Int64Value(); + this->className = std::string("EnhancedBroadcastingAdvancedStreaming"); +} + +Napi::Value osn::EnhancedBroadcastingAdvancedStreaming::Create(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("EnhancedBroadcastingAdvancedStreaming", "Create", {}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + auto instance = osn::EnhancedBroadcastingAdvancedStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + + return instance; +} + +void osn::EnhancedBroadcastingAdvancedStreaming::Destroy(const Napi::CallbackInfo &info) +{ + if (info.Length() != 1) + return; + + auto stream = Napi::ObjectWrap::Unwrap(info[0].ToObject()); + + stream->stopWorker(); + stream->cb.Reset(); + + auto conn = GetConnection(info); + if (!conn) + return; + + std::vector response = conn->call_synchronous_helper("EnhancedBroadcastingAdvancedStreaming", "Destroy", {ipc::value(stream->uid)}); + + if (!ValidateResponse(info, response)) + return; +} + +Napi::Value osn::EnhancedBroadcastingAdvancedStreaming::GetAdditionalCanvas(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper(className, "GetAdditionalVideoCanvas", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + auto instance = osn::Video::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + + return instance; +} + +void osn::EnhancedBroadcastingAdvancedStreaming::SetAdditionalCanvas(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + osn::Video *canvas = Napi::ObjectWrap::Unwrap(value.ToObject()); + + if (!canvas) { + Napi::TypeError::New(info.Env(), "Invalid canvas argument").ThrowAsJavaScriptException(); + return; + } + + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call(className, "SetAdditionalVideoCanvas", {ipc::value(this->uid), ipc::value(canvas->canvasId)}); +} +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +Napi::Value osn::EnhancedBroadcastingAdvancedStreaming::GetLegacySettings(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("EnhancedBroadcastingAdvancedStreaming", "GetLegacySettings", {}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + auto instance = osn::EnhancedBroadcastingAdvancedStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + + return instance; +} + +void osn::EnhancedBroadcastingAdvancedStreaming::SetLegacySettings(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + osn::EnhancedBroadcastingAdvancedStreaming *streaming = Napi::ObjectWrap::Unwrap(value.ToObject()); + + if (!streaming) { + Napi::TypeError::New(info.Env(), "Invalid service argument").ThrowAsJavaScriptException(); + return; + } + + auto conn = GetConnection(info); + if (!conn) + return; + + std::vector response = conn->call_synchronous_helper("EnhancedBroadcastingAdvancedStreaming", "SetLegacySettings", {streaming->uid}); + + if (!ValidateResponse(info, response)) + return; +} \ No newline at end of file diff --git a/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.hpp b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.hpp new file mode 100644 index 000000000..f9378ba24 --- /dev/null +++ b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.hpp @@ -0,0 +1,40 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#pragma once +#include +#include "advanced-streaming.hpp" + +namespace osn { +class EnhancedBroadcastingAdvancedStreaming : public Napi::ObjectWrap, + public osn::AdvancedStreamingBase { +public: + static Napi::FunctionReference constructor; + static Napi::Object Init(Napi::Env env, Napi::Object exports); + EnhancedBroadcastingAdvancedStreaming(const Napi::CallbackInfo &info); + + static Napi::Value Create(const Napi::CallbackInfo &info); + static void Destroy(const Napi::CallbackInfo &info); + + Napi::Value GetAdditionalCanvas(const Napi::CallbackInfo &info); + void SetAdditionalCanvas(const Napi::CallbackInfo &info, const Napi::Value &value); + + static Napi::Value GetLegacySettings(const Napi::CallbackInfo &info); + static void SetLegacySettings(const Napi::CallbackInfo &info, const Napi::Value &value); +}; +} \ No newline at end of file diff --git a/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp new file mode 100644 index 000000000..538cae63e --- /dev/null +++ b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp @@ -0,0 +1,184 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#include "enhanced-broadcasting-simple-streaming.hpp" +#include "utility.hpp" +#include "service.hpp" +#include "delay.hpp" +#include "reconnect.hpp" +#include "network.hpp" +#include "video.hpp" + +Napi::FunctionReference osn::EnhancedBroadcastingSimpleStreaming::constructor; + +Napi::Object osn::EnhancedBroadcastingSimpleStreaming::Init(Napi::Env env, Napi::Object exports) +{ + Napi::HandleScope scope(env); + Napi::Function func = DefineClass( + env, "EnhancedBroadcastingSimpleStreaming", + {StaticMethod("create", &osn::EnhancedBroadcastingSimpleStreaming::Create), + StaticMethod("destroy", &osn::EnhancedBroadcastingSimpleStreaming::Destroy), + + InstanceAccessor("videoEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetVideoEncoder, &osn::EnhancedBroadcastingSimpleStreaming::SetVideoEncoder), + InstanceAccessor("audioEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetAudioEncoder, &osn::EnhancedBroadcastingSimpleStreaming::SetAudioEncoder), + InstanceAccessor("service", &osn::EnhancedBroadcastingSimpleStreaming::GetService, &osn::EnhancedBroadcastingSimpleStreaming::SetService), + InstanceAccessor("enforceServiceBitrate", &osn::EnhancedBroadcastingSimpleStreaming::GetEnforceServiceBirate, &osn::EnhancedBroadcastingSimpleStreaming::SetEnforceServiceBirate), + InstanceAccessor("enableTwitchVOD", &osn::EnhancedBroadcastingSimpleStreaming::GetEnableTwitchVOD, &osn::EnhancedBroadcastingSimpleStreaming::SetEnableTwitchVOD), + InstanceAccessor("audioEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetAudioEncoder, &osn::EnhancedBroadcastingSimpleStreaming::SetAudioEncoder), + InstanceAccessor("useAdvanced", &osn::EnhancedBroadcastingSimpleStreaming::GetUseAdvanced, &osn::EnhancedBroadcastingSimpleStreaming::SetUseAdvanced), + InstanceAccessor("customEncSettings", &osn::EnhancedBroadcastingSimpleStreaming::GetCustomEncSettings, &osn::EnhancedBroadcastingSimpleStreaming::SetCustomEncSettings), + InstanceAccessor("signalHandler", &osn::EnhancedBroadcastingSimpleStreaming::GetSignalHandler, &osn::EnhancedBroadcastingSimpleStreaming::SetSignalHandler), + InstanceAccessor("delay", &osn::EnhancedBroadcastingSimpleStreaming::GetDelay, &osn::EnhancedBroadcastingSimpleStreaming::SetDelay), + InstanceAccessor("reconnect", &osn::EnhancedBroadcastingSimpleStreaming::GetReconnect, &osn::EnhancedBroadcastingSimpleStreaming::SetReconnect), + InstanceAccessor("network", &osn::EnhancedBroadcastingSimpleStreaming::GetNetwork, &osn::EnhancedBroadcastingSimpleStreaming::SetNetwork), + InstanceAccessor("video", &osn::EnhancedBroadcastingSimpleStreaming::GetCanvas, &osn::EnhancedBroadcastingSimpleStreaming::SetCanvas), + InstanceAccessor("additionalVideo", &osn::EnhancedBroadcastingSimpleStreaming::GetAdditionalCanvas, &osn::EnhancedBroadcastingSimpleStreaming::SetAdditionalCanvas), + InstanceAccessor("droppedFrames", &osn::EnhancedBroadcastingSimpleStreaming::GetDroppedFrames, nullptr), + InstanceAccessor("totalFrames", &osn::EnhancedBroadcastingSimpleStreaming::GetTotalFrames, nullptr), + InstanceAccessor("kbitsPerSec", &osn::EnhancedBroadcastingSimpleStreaming::GetKBitsPerSec, nullptr), + InstanceAccessor("dataOutput", &osn::EnhancedBroadcastingSimpleStreaming::GetDataOutput, nullptr), + + InstanceMethod("start", &osn::EnhancedBroadcastingSimpleStreaming::Start), + InstanceMethod("stop", &osn::EnhancedBroadcastingSimpleStreaming::Stop), + + StaticAccessor("legacySettings", &osn::EnhancedBroadcastingSimpleStreaming::GetLegacySettings, &osn::EnhancedBroadcastingSimpleStreaming::SetLegacySettings)}); + + exports.Set("EnhancedBroadcastingSimpleStreaming", func); + osn::EnhancedBroadcastingSimpleStreaming::constructor = Napi::Persistent(func); + osn::EnhancedBroadcastingSimpleStreaming::constructor.SuppressDestruct(); + + return exports; +} + +osn::EnhancedBroadcastingSimpleStreaming::EnhancedBroadcastingSimpleStreaming(const Napi::CallbackInfo &info) : Napi::ObjectWrap(info) +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + size_t length = info.Length(); + + if (length <= 0 || !info[0].IsNumber()) { + Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); + return; + } + + this->uid = (uint64_t)info[0].ToNumber().Int64Value(); + this->className = std::string("EnhancedBroadcastingSimpleStreaming"); +} + +Napi::Value osn::EnhancedBroadcastingSimpleStreaming::Create(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("EnhancedBroadcastingSimpleStreaming", "Create", {}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + auto instance = osn::EnhancedBroadcastingSimpleStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + + return instance; +} + +void osn::EnhancedBroadcastingSimpleStreaming::Destroy(const Napi::CallbackInfo &info) +{ + if (info.Length() != 1) + return; + + auto stream = Napi::ObjectWrap::Unwrap(info[0].ToObject()); + + stream->stopWorker(); + stream->cb.Reset(); + + auto conn = GetConnection(info); + if (!conn) + return; + + std::vector response = conn->call_synchronous_helper("EnhancedBroadcastingSimpleStreaming", "Destroy", {ipc::value(stream->uid)}); + + if (!ValidateResponse(info, response)) + return; +} + +Napi::Value osn::EnhancedBroadcastingSimpleStreaming::GetAdditionalCanvas(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper(className, "GetAdditionalVideoCanvas", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + auto instance = osn::Video::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + + return instance; +} + +void osn::EnhancedBroadcastingSimpleStreaming::SetAdditionalCanvas(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + osn::Video *canvas = Napi::ObjectWrap::Unwrap(value.ToObject()); + + if (!canvas) { + Napi::TypeError::New(info.Env(), "Invalid canvas argument").ThrowAsJavaScriptException(); + return; + } + + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call(className, "SetAdditionalVideoCanvas", {ipc::value(this->uid), ipc::value(canvas->canvasId)}); +} +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +Napi::Value osn::EnhancedBroadcastingSimpleStreaming::GetLegacySettings(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("EnhancedBroadcastingSimpleStreaming", "GetLegacySettings", {}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + auto instance = osn::EnhancedBroadcastingSimpleStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + + return instance; +} + +void osn::EnhancedBroadcastingSimpleStreaming::SetLegacySettings(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + osn::EnhancedBroadcastingSimpleStreaming *streaming = Napi::ObjectWrap::Unwrap(value.ToObject()); + + if (!streaming) { + Napi::TypeError::New(info.Env(), "Invalid service argument").ThrowAsJavaScriptException(); + return; + } + + auto conn = GetConnection(info); + if (!conn) + return; + + std::vector response = conn->call_synchronous_helper("EnhancedBroadcastingSimpleStreaming", "SetLegacySettings", {streaming->uid}); + + if (!ValidateResponse(info, response)) + return; +} \ No newline at end of file diff --git a/obs-studio-client/source/enhanced-broadcasting-simple-streaming.hpp b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.hpp new file mode 100644 index 000000000..409e67809 --- /dev/null +++ b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.hpp @@ -0,0 +1,40 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#pragma once +#include +#include "simple-streaming.hpp" + +namespace osn { +class EnhancedBroadcastingSimpleStreaming : public Napi::ObjectWrap, + public osn::SimpleStreamingBase { +public: + static Napi::FunctionReference constructor; + static Napi::Object Init(Napi::Env env, Napi::Object exports); + EnhancedBroadcastingSimpleStreaming(const Napi::CallbackInfo &info); + + static Napi::Value Create(const Napi::CallbackInfo &info); + static void Destroy(const Napi::CallbackInfo &info); + + Napi::Value GetAdditionalCanvas(const Napi::CallbackInfo &info); + void SetAdditionalCanvas(const Napi::CallbackInfo &info, const Napi::Value &value); + + static Napi::Value GetLegacySettings(const Napi::CallbackInfo &info); + static void SetLegacySettings(const Napi::CallbackInfo &info, const Napi::Value &value); +}; +} \ No newline at end of file diff --git a/obs-studio-client/source/main.cpp b/obs-studio-client/source/main.cpp index 132f8efac..5b439f5ca 100644 --- a/obs-studio-client/source/main.cpp +++ b/obs-studio-client/source/main.cpp @@ -54,6 +54,8 @@ #include "advanced-recording.hpp" #include "simple-replay-buffer.hpp" #include "advanced-replay-buffer.hpp" +#include "enhanced-broadcasting-advanced-streaming.hpp" +#include "enhanced-broadcasting-simple-streaming.hpp" #if defined(_WIN32) // Checks ForceGPUAsRenderDevice setting @@ -138,6 +140,8 @@ Napi::Object main_node(Napi::Env env, Napi::Object exports) osn::AdvancedRecording::Init(env, exports); osn::SimpleReplayBuffer::Init(env, exports); osn::AdvancedReplayBuffer::Init(env, exports); + osn::EnhancedBroadcastingAdvancedStreaming::Init(env, exports); + osn::EnhancedBroadcastingSimpleStreaming::Init(env, exports); return exports; }; diff --git a/obs-studio-client/source/simple-streaming-base.cpp b/obs-studio-client/source/simple-streaming-base.cpp new file mode 100644 index 000000000..4e9aef8ae --- /dev/null +++ b/obs-studio-client/source/simple-streaming-base.cpp @@ -0,0 +1,98 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#include "simple-streaming-base.hpp" + +#include "audio-encoder.hpp" + +Napi::Value osn::SimpleStreamingBase::GetAudioEncoder(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("SimpleStreaming", "GetAudioEncoder", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + auto instance = osn::AudioEncoder::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + return instance; +} + +Napi::Value osn::SimpleStreamingBase::GetUseAdvanced(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("SimpleStreaming", "GetUseAdvanced", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + return Napi::Boolean::New(info.Env(), response[1].value_union.ui32); +} + +void osn::SimpleStreamingBase::SetUseAdvanced(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call_synchronous_helper("SimpleStreaming", "SetUseAdvanced", {ipc::value(this->uid), ipc::value(value.ToBoolean().Value())}); +} + +Napi::Value osn::SimpleStreamingBase::GetCustomEncSettings(const Napi::CallbackInfo &info) +{ + auto conn = GetConnection(info); + if (!conn) + return info.Env().Undefined(); + + std::vector response = conn->call_synchronous_helper("SimpleStreaming", "GetCustomEncSettings", {ipc::value(this->uid)}); + + if (!ValidateResponse(info, response)) + return info.Env().Undefined(); + + return Napi::String::New(info.Env(), response[1].value_str.c_str()); +} + +void osn::SimpleStreamingBase::SetCustomEncSettings(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call_synchronous_helper("SimpleStreaming", "SetCustomEncSettings", {ipc::value(this->uid), ipc::value(value.ToString().Utf8Value())}); +} + +void osn::SimpleStreamingBase::SetAudioEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) +{ + osn::AudioEncoder *encoder = Napi::ObjectWrap::Unwrap(value.ToObject()); + + if (!encoder) { + Napi::TypeError::New(info.Env(), "Invalid encoder argument").ThrowAsJavaScriptException(); + return; + } + + auto conn = GetConnection(info); + if (!conn) + return; + + conn->call(className, "SetAudioEncoder", {ipc::value(this->uid), ipc::value(encoder->uid)}); +} diff --git a/obs-studio-client/source/simple-streaming-base.hpp b/obs-studio-client/source/simple-streaming-base.hpp new file mode 100644 index 000000000..b92a38463 --- /dev/null +++ b/obs-studio-client/source/simple-streaming-base.hpp @@ -0,0 +1,35 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#pragma once +#include +#include "streaming.hpp" + +namespace osn { + +class SimpleStreamingBase : public osn::Streaming { +public: + Napi::Value GetAudioEncoder(const Napi::CallbackInfo &info); + void SetAudioEncoder(const Napi::CallbackInfo &info, const Napi::Value &value); + Napi::Value GetUseAdvanced(const Napi::CallbackInfo &info); + void SetUseAdvanced(const Napi::CallbackInfo &info, const Napi::Value &value); + Napi::Value GetCustomEncSettings(const Napi::CallbackInfo &info); + void SetCustomEncSettings(const Napi::CallbackInfo &info, const Napi::Value &value); +}; + +} \ No newline at end of file diff --git a/obs-studio-client/source/simple-streaming.cpp b/obs-studio-client/source/simple-streaming.cpp index b1cb8e00b..7f5edc455 100644 --- a/obs-studio-client/source/simple-streaming.cpp +++ b/obs-studio-client/source/simple-streaming.cpp @@ -39,7 +39,6 @@ Napi::Object osn::SimpleStreaming::Init(Napi::Env env, Napi::Object exports) InstanceAccessor("service", &osn::SimpleStreaming::GetService, &osn::SimpleStreaming::SetService), InstanceAccessor("enforceServiceBitrate", &osn::SimpleStreaming::GetEnforceServiceBirate, &osn::SimpleStreaming::SetEnforceServiceBirate), InstanceAccessor("enableTwitchVOD", &osn::SimpleStreaming::GetEnableTwitchVOD, &osn::SimpleStreaming::SetEnableTwitchVOD), - InstanceAccessor("enhancedBroadcasting", &osn::SimpleStreaming::GetEnhancedBroadcasting, &osn::SimpleStreaming::SetEnhancedBroadcasting), InstanceAccessor("audioEncoder", &osn::SimpleStreaming::GetAudioEncoder, &osn::SimpleStreaming::SetAudioEncoder), InstanceAccessor("useAdvanced", &osn::SimpleStreaming::GetUseAdvanced, &osn::SimpleStreaming::SetUseAdvanced), InstanceAccessor("customEncSettings", &osn::SimpleStreaming::GetCustomEncSettings, &osn::SimpleStreaming::SetCustomEncSettings), @@ -116,83 +115,6 @@ void osn::SimpleStreaming::Destroy(const Napi::CallbackInfo &info) return; } -Napi::Value osn::SimpleStreaming::GetAudioEncoder(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("SimpleStreaming", "GetAudioEncoder", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - auto instance = osn::AudioEncoder::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); - return instance; -} - -Napi::Value osn::SimpleStreaming::GetUseAdvanced(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("SimpleStreaming", "GetUseAdvanced", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::Boolean::New(info.Env(), response[1].value_union.ui32); -} - -void osn::SimpleStreaming::SetUseAdvanced(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call_synchronous_helper("SimpleStreaming", "SetUseAdvanced", {ipc::value(this->uid), ipc::value(value.ToBoolean().Value())}); -} - -Napi::Value osn::SimpleStreaming::GetCustomEncSettings(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper("SimpleStreaming", "GetCustomEncSettings", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::String::New(info.Env(), response[1].value_str.c_str()); -} - -void osn::SimpleStreaming::SetCustomEncSettings(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call_synchronous_helper("SimpleStreaming", "SetCustomEncSettings", {ipc::value(this->uid), ipc::value(value.ToString().Utf8Value())}); -} - -void osn::SimpleStreaming::SetAudioEncoder(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - osn::AudioEncoder *encoder = Napi::ObjectWrap::Unwrap(value.ToObject()); - - if (!encoder) { - Napi::TypeError::New(info.Env(), "Invalid encoder argument").ThrowAsJavaScriptException(); - return; - } - - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call(className, "SetAudioEncoder", {ipc::value(this->uid), ipc::value(encoder->uid)}); -} - Napi::Value osn::SimpleStreaming::GetLegacySettings(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/simple-streaming.hpp b/obs-studio-client/source/simple-streaming.hpp index 95edee1ab..a94bd5861 100644 --- a/obs-studio-client/source/simple-streaming.hpp +++ b/obs-studio-client/source/simple-streaming.hpp @@ -18,10 +18,11 @@ #pragma once #include -#include "streaming.hpp" +#include "simple-streaming-base.hpp" namespace osn { -class SimpleStreaming : public Napi::ObjectWrap, public osn::Streaming { + +class SimpleStreaming : public Napi::ObjectWrap, public SimpleStreamingBase { public: static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); @@ -30,13 +31,6 @@ class SimpleStreaming : public Napi::ObjectWrap, public os static Napi::Value Create(const Napi::CallbackInfo &info); static void Destroy(const Napi::CallbackInfo &info); - Napi::Value GetAudioEncoder(const Napi::CallbackInfo &info); - void SetAudioEncoder(const Napi::CallbackInfo &info, const Napi::Value &value); - Napi::Value GetUseAdvanced(const Napi::CallbackInfo &info); - void SetUseAdvanced(const Napi::CallbackInfo &info, const Napi::Value &value); - Napi::Value GetCustomEncSettings(const Napi::CallbackInfo &info); - void SetCustomEncSettings(const Napi::CallbackInfo &info, const Napi::Value &value); - static Napi::Value GetLegacySettings(const Napi::CallbackInfo &info); static void SetLegacySettings(const Napi::CallbackInfo &info, const Napi::Value &value); }; diff --git a/obs-studio-client/source/streaming.cpp b/obs-studio-client/source/streaming.cpp index d944121b0..c51b906a6 100644 --- a/obs-studio-client/source/streaming.cpp +++ b/obs-studio-client/source/streaming.cpp @@ -143,29 +143,6 @@ void osn::Streaming::SetEnforceServiceBirate(const Napi::CallbackInfo &info, con conn->call_synchronous_helper(className, "SetEnforceServiceBirate", {ipc::value(this->uid), ipc::value(value.ToBoolean().Value())}); } -Napi::Value osn::Streaming::GetEnhancedBroadcasting(const Napi::CallbackInfo &info) -{ - auto conn = GetConnection(info); - if (!conn) - return info.Env().Undefined(); - - std::vector response = conn->call_synchronous_helper(className, "GetEnhancedBroadcasting", {ipc::value(this->uid)}); - - if (!ValidateResponse(info, response)) - return info.Env().Undefined(); - - return Napi::Boolean::New(info.Env(), response[1].value_union.ui32); -} - -void osn::Streaming::SetEnhancedBroadcasting(const Napi::CallbackInfo &info, const Napi::Value &value) -{ - auto conn = GetConnection(info); - if (!conn) - return; - - conn->call_synchronous_helper(className, "SetEnhancedBroadcasting", {ipc::value(this->uid), ipc::value(value.ToBoolean().Value())}); -} - Napi::Value osn::Streaming::GetEnableTwitchVOD(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/streaming.hpp b/obs-studio-client/source/streaming.hpp index afde56080..bb5e6cee6 100644 --- a/obs-studio-client/source/streaming.hpp +++ b/obs-studio-client/source/streaming.hpp @@ -40,8 +40,6 @@ class Streaming : public WorkerSignals { void SetEnforceServiceBirate(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetEnableTwitchVOD(const Napi::CallbackInfo &info); void SetEnableTwitchVOD(const Napi::CallbackInfo &info, const Napi::Value &value); - Napi::Value GetEnhancedBroadcasting(const Napi::CallbackInfo &info); - void SetEnhancedBroadcasting(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetDelay(const Napi::CallbackInfo &info); void SetDelay(const Napi::CallbackInfo &info, const Napi::Value &value); Napi::Value GetReconnect(const Napi::CallbackInfo &info); diff --git a/obs-studio-server/CMakeLists.txt b/obs-studio-server/CMakeLists.txt index 9853f1140..9399093c8 100644 --- a/obs-studio-server/CMakeLists.txt +++ b/obs-studio-server/CMakeLists.txt @@ -323,6 +323,10 @@ SET(osn-server_SOURCES "${PROJECT_SOURCE_DIR}/source/osn-simple-streaming.hpp" "${PROJECT_SOURCE_DIR}/source/osn-advanced-streaming.cpp" "${PROJECT_SOURCE_DIR}/source/osn-advanced-streaming.hpp" + "${PROJECT_SOURCE_DIR}/source/osn-enhanced-broadcasting-advanced-streaming.cpp" + "${PROJECT_SOURCE_DIR}/source/osn-enhanced-broadcasting-advanced-streaming.hpp" + "${PROJECT_SOURCE_DIR}/source/osn-enhanced-broadcasting-simple-streaming.cpp" + "${PROJECT_SOURCE_DIR}/source/osn-enhanced-broadcasting-simple-streaming.hpp" "${PROJECT_SOURCE_DIR}/source/osn-delay.cpp" "${PROJECT_SOURCE_DIR}/source/osn-delay.hpp" "${PROJECT_SOURCE_DIR}/source/osn-reconnect.cpp" diff --git a/obs-studio-server/source/main.cpp b/obs-studio-server/source/main.cpp index 6e7f7b71b..52d02cbaf 100644 --- a/obs-studio-server/source/main.cpp +++ b/obs-studio-server/source/main.cpp @@ -61,6 +61,8 @@ #include "osn-simple-replay-buffer.hpp" #include "osn-advanced-replay-buffer.hpp" #include "osn-file-output.hpp" +#include "osn-enhanced-broadcasting-simple-streaming.hpp" +#include "osn-enhanced-broadcasting-advanced-streaming.hpp" #include "util-crashmanager.h" #include "shared.hpp" @@ -273,6 +275,8 @@ int main(int argc, char *argv[]) osn::ISimpleReplayBuffer::Register(myServer); osn::IAdvancedReplayBuffer::Register(myServer); osn::IFileOutput::Register(myServer); + osn::IEnhancedBroadcastingSimpleStreaming::Register(myServer); + osn::IEnhancedBroadcastingAdvancedStreaming::Register(myServer); OBS_API::CreateCrashHandlerExitPipe(); diff --git a/obs-studio-server/source/osn-advanced-streaming.cpp b/obs-studio-server/source/osn-advanced-streaming.cpp index b8494360e..ac301c6c4 100644 --- a/obs-studio-server/source/osn-advanced-streaming.cpp +++ b/obs-studio-server/source/osn-advanced-streaming.cpp @@ -24,8 +24,6 @@ #include "nodeobs_audio_encoders.h" #include "osn-audio-track.hpp" -#include "osn-multitrack-video.hpp" - void osn::IAdvancedStreaming::Register(ipc::server &srv) { std::shared_ptr cls = std::make_shared("AdvancedStreaming"); @@ -44,9 +42,6 @@ void osn::IAdvancedStreaming::Register(ipc::server &srv) cls->register_function(std::make_shared("GetEnableTwitchVOD", std::vector{ipc::type::UInt64}, GetEnableTwitchVOD)); cls->register_function( std::make_shared("SetEnableTwitchVOD", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnableTwitchVOD)); - cls->register_function(std::make_shared("GetEnhancedBroadcasting", std::vector{ipc::type::UInt64}, GetEnhancedBroadcasting)); - cls->register_function( - std::make_shared("SetEnhancedBroadcasting", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnhancedBroadcasting)); cls->register_function(std::make_shared("GetAudioTrack", std::vector{ipc::type::UInt64}, GetAudioTrack)); cls->register_function(std::make_shared("SetAudioTrack", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetAudioTrack)); cls->register_function(std::make_shared("GetTwitchTrack", std::vector{ipc::type::UInt64}, GetTwitchTrack)); @@ -378,14 +373,6 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid service."); } - if (streaming->enhancedBroadcasting) { - auto vod_track_mixer = (streaming->twitchVODSupported && streaming->enableTwitchVOD) ? - std::optional{streaming->twitchTrack} : - std::nullopt; - streaming->StartEnhancedBroadcastingStream(vod_track_mixer); - return; - } - if (!streaming->videoEncoder) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid video encoder."); } @@ -452,9 +439,10 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec void osn::IAdvancedStreaming::Stop(void *data, const int64_t id, const std::vector &args, std::vector &rval) { + blog(LOG_INFO, "IAdvancedStreaming::Stop"); Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Simple streaming reference is not valid."); + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } if (!streaming->GetOutput()) { diff --git a/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.cpp b/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.cpp new file mode 100644 index 000000000..7f107bbb4 --- /dev/null +++ b/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.cpp @@ -0,0 +1,171 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#include "osn-enhanced-broadcasting-advanced-streaming.hpp" +#include "osn-video-encoder.hpp" +#include "osn-service.hpp" +#include "osn-error.hpp" +#include "shared.hpp" +#include "nodeobs_audio_encoders.h" +#include "osn-audio-track.hpp" +#include + +void osn::IEnhancedBroadcastingAdvancedStreaming::Register(ipc::server &srv) +{ + std::shared_ptr cls = std::make_shared("EnhancedBroadcastingAdvancedStreaming"); + cls->register_function(std::make_shared("Create", std::vector{}, Create)); + cls->register_function(std::make_shared("Destroy", std::vector{ipc::type::UInt64}, Destroy)); + cls->register_function(std::make_shared("GetService", std::vector{ipc::type::UInt64}, GetService)); + cls->register_function(std::make_shared("SetService", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetService)); + cls->register_function(std::make_shared("GetVideoEncoder", std::vector{ipc::type::UInt64}, GetVideoEncoder)); + cls->register_function( + std::make_shared("SetVideoEncoder", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetVideoEncoder)); + cls->register_function(std::make_shared("GetVideoCanvas", std::vector{ipc::type::UInt64}, GetVideoCanvas)); + cls->register_function(std::make_shared("SetVideoCanvas", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetVideoCanvas)); + cls->register_function(std::make_shared("GetEnforceServiceBirate", std::vector{ipc::type::UInt64}, GetEnforceServiceBirate)); + cls->register_function(std::make_shared("SetEnforceServiceBirate", std::vector{ipc::type::UInt64, ipc::type::UInt32}, + SetEnforceServiceBirate)); + cls->register_function(std::make_shared("GetEnableTwitchVOD", std::vector{ipc::type::UInt64}, GetEnableTwitchVOD)); + cls->register_function( + std::make_shared("SetEnableTwitchVOD", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnableTwitchVOD)); + cls->register_function(std::make_shared("GetAudioTrack", std::vector{ipc::type::UInt64}, GetAudioTrack)); + cls->register_function(std::make_shared("SetAudioTrack", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetAudioTrack)); + cls->register_function(std::make_shared("GetTwitchTrack", std::vector{ipc::type::UInt64}, GetTwitchTrack)); + cls->register_function(std::make_shared("SetTwitchTrack", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetTwitchTrack)); + cls->register_function(std::make_shared("GetRescaling", std::vector{ipc::type::UInt64}, GetRescaling)); + cls->register_function(std::make_shared("SetRescaling", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetRescaling)); + cls->register_function(std::make_shared("GetOutputWidth", std::vector{ipc::type::UInt64}, GetOutputWidth)); + cls->register_function(std::make_shared("SetOutputWidth", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetOutputWidth)); + cls->register_function(std::make_shared("GetOutputHeight", std::vector{ipc::type::UInt64}, GetOutputHeight)); + cls->register_function( + std::make_shared("SetOutputHeight", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetOutputHeight)); + cls->register_function(std::make_shared("GetDelay", std::vector{ipc::type::UInt64}, GetDelay)); + cls->register_function(std::make_shared("SetDelay", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetDelay)); + cls->register_function(std::make_shared("GetReconnect", std::vector{ipc::type::UInt64}, GetReconnect)); + cls->register_function(std::make_shared("SetReconnect", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetReconnect)); + cls->register_function(std::make_shared("GetNetwork", std::vector{ipc::type::UInt64}, GetNetwork)); + cls->register_function(std::make_shared("SetNetwork", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetNetwork)); + cls->register_function(std::make_shared("Start", std::vector{ipc::type::UInt64}, Start)); + cls->register_function(std::make_shared("Stop", std::vector{ipc::type::UInt64, ipc::type::UInt32}, Stop)); + cls->register_function(std::make_shared("Query", std::vector{ipc::type::UInt64}, Query)); + cls->register_function(std::make_shared("GetLegacySettings", std::vector{}, GetLegacySettings)); + cls->register_function(std::make_shared("SetLegacySettings", std::vector{ipc::type::UInt64}, SetLegacySettings)); + cls->register_function(std::make_shared("GetDroppedFrames", std::vector{ipc::type::UInt64}, GetDroppedFrames)); + cls->register_function(std::make_shared("GetTotalFrames", std::vector{ipc::type::UInt64}, GetTotalFrames)); + cls->register_function(std::make_shared("GetKBitsPerSec", std::vector{ipc::type::UInt64}, GetKBitsPerSec)); + cls->register_function(std::make_shared("GetDataOutput", std::vector{ipc::type::UInt64}, GetDataOutput)); + + cls->register_function(std::make_shared("GetAdditionalVideoCanvas", std::vector{ipc::type::UInt64}, GetAdditionalVideoCanvas)); + cls->register_function(std::make_shared("SetAdditionalVideoCanvas", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetAdditionalVideoCanvas)); + + srv.register_collection(cls); +} + +void osn::IEnhancedBroadcastingAdvancedStreaming::Create(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + uint64_t uid = osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().allocate(new EnhancedBroadcastingAdvancedStreaming()); + if (uid == UINT64_MAX) { + PRETTY_ERROR_RETURN(ErrorCode::CriticalError, "Index list is full."); + } + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + rval.push_back(ipc::value(uid)); + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingAdvancedStreaming::Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().free(streaming); + delete streaming; + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingAdvancedStreaming::Start(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + if (!streaming->service) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid service."); + } + + auto vod_track_mixer = (streaming->twitchVODSupported && streaming->enableTwitchVOD) ? + std::optional{streaming->twitchTrack} : + std::nullopt; + streaming->StartEnhancedBroadcastingStream(vod_track_mixer); + + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingAdvancedStreaming::Stop(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + streaming->StopEnhancedBroadcastingStream(); + + IAdvancedStreaming::Stop(data, id, args, rval); + + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingAdvancedStreaming::GetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + const uint64_t uid = osn::Video::Manager::GetInstance().find(streaming->GetAdditionalVideoCanvas()); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + rval.push_back(ipc::value(uid)); + + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingAdvancedStreaming::SetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + obs_video_info *canvas = osn::Video::Manager::GetInstance().find(args[1].value_union.ui64); + if (!canvas) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Canvas reference is not valid."); + } + + streaming->SetAdditionalVideoCanvas(canvas); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} diff --git a/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.hpp b/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.hpp new file mode 100644 index 000000000..daa557262 --- /dev/null +++ b/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.hpp @@ -0,0 +1,57 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#pragma once +#include +#include "utility.hpp" +#include "osn-delay.hpp" +#include "osn-advanced-streaming.hpp" +#include "osn-reconnect.hpp" +#include "osn-network.hpp" +#include "osn-output.hpp" +#include "osn-video-encoder.hpp" +#include "osn-multitrack-video.hpp" +#include "osn-enhanced-broadcasting.hpp" + +#include "nodeobs_configManager.hpp" + + +namespace osn { + +class EnhancedBroadcastingAdvancedStreaming : public EnhancedBroadcasting { +public: + EnhancedBroadcastingAdvancedStreaming() : EnhancedBroadcasting() + { + } + ~EnhancedBroadcastingAdvancedStreaming() {} +}; + +class IEnhancedBroadcastingAdvancedStreaming : public IAdvancedStreaming { +public: + static void Register(ipc::server &); + + static void Create(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval); + + static void Start(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Stop(void *data, const int64_t id, const std::vector &args, std::vector &rval); + + static void GetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void SetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval); +}; +} diff --git a/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.cpp b/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.cpp new file mode 100644 index 000000000..f896028f9 --- /dev/null +++ b/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.cpp @@ -0,0 +1,165 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#include "osn-enhanced-broadcasting-simple-streaming.hpp" +#include "osn-video-encoder.hpp" +#include "osn-service.hpp" +#include "osn-error.hpp" +#include "shared.hpp" +#include "nodeobs_audio_encoders.h" +#include "osn-audio-track.hpp" +#include + +void osn::IEnhancedBroadcastingSimpleStreaming::Register(ipc::server &srv) +{ + std::shared_ptr cls = std::make_shared("EnhancedBroadcastingSimpleStreaming"); + cls->register_function(std::make_shared("Create", std::vector{}, Create)); + cls->register_function(std::make_shared("Destroy", std::vector{ipc::type::UInt64}, Destroy)); + cls->register_function(std::make_shared("GetService", std::vector{ipc::type::UInt64}, GetService)); + cls->register_function(std::make_shared("SetService", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetService)); + cls->register_function(std::make_shared("GetVideoEncoder", std::vector{ipc::type::UInt64}, GetVideoEncoder)); + cls->register_function( + std::make_shared("SetVideoEncoder", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetVideoEncoder)); + cls->register_function(std::make_shared("GetVideoCanvas", std::vector{ipc::type::UInt64}, GetVideoCanvas)); + cls->register_function(std::make_shared("SetVideoCanvas", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetVideoCanvas)); + cls->register_function(std::make_shared("GetAudioEncoder", std::vector{ipc::type::UInt64}, GetAudioEncoder)); + cls->register_function( + std::make_shared("SetAudioEncoder", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetAudioEncoder)); + cls->register_function(std::make_shared("GetUseAdvanced", std::vector{ipc::type::UInt64}, GetUseAdvanced)); + cls->register_function(std::make_shared("SetUseAdvanced", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetUseAdvanced)); + cls->register_function(std::make_shared("GetCustomEncSettings", std::vector{ipc::type::UInt64}, GetCustomEncSettings)); + cls->register_function( + std::make_shared("SetCustomEncSettings", std::vector{ipc::type::UInt64, ipc::type::String}, SetCustomEncSettings)); + cls->register_function(std::make_shared("GetEnforceServiceBirate", std::vector{ipc::type::UInt64}, GetEnforceServiceBirate)); + cls->register_function(std::make_shared("SetEnforceServiceBirate", std::vector{ipc::type::UInt64, ipc::type::UInt32}, + SetEnforceServiceBirate)); + cls->register_function(std::make_shared("GetEnableTwitchVOD", std::vector{ipc::type::UInt64}, GetEnableTwitchVOD)); + cls->register_function( + std::make_shared("SetEnableTwitchVOD", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnableTwitchVOD)); + cls->register_function(std::make_shared("GetDelay", std::vector{ipc::type::UInt64}, GetDelay)); + cls->register_function(std::make_shared("SetDelay", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetDelay)); + cls->register_function(std::make_shared("GetReconnect", std::vector{ipc::type::UInt64}, GetReconnect)); + cls->register_function(std::make_shared("SetReconnect", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetReconnect)); + cls->register_function(std::make_shared("GetNetwork", std::vector{ipc::type::UInt64}, GetNetwork)); + cls->register_function(std::make_shared("SetNetwork", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetNetwork)); + cls->register_function(std::make_shared("Start", std::vector{ipc::type::UInt64}, Start)); + cls->register_function(std::make_shared("Stop", std::vector{ipc::type::UInt64, ipc::type::UInt32}, Stop)); + cls->register_function(std::make_shared("Query", std::vector{ipc::type::UInt64}, Query)); + cls->register_function(std::make_shared("GetLegacySettings", std::vector{}, GetLegacySettings)); + cls->register_function(std::make_shared("SetLegacySettings", std::vector{ipc::type::UInt64}, SetLegacySettings)); + cls->register_function(std::make_shared("GetDroppedFrames", std::vector{ipc::type::UInt64}, GetDroppedFrames)); + cls->register_function(std::make_shared("GetTotalFrames", std::vector{ipc::type::UInt64}, GetTotalFrames)); + cls->register_function(std::make_shared("GetKBitsPerSec", std::vector{ipc::type::UInt64}, GetKBitsPerSec)); + cls->register_function(std::make_shared("GetDataOutput", std::vector{ipc::type::UInt64}, GetDataOutput)); + + cls->register_function(std::make_shared("GetAdditionalVideoCanvas", std::vector{ipc::type::UInt64}, GetAdditionalVideoCanvas)); + cls->register_function(std::make_shared("SetAdditionalVideoCanvas", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetAdditionalVideoCanvas)); + + srv.register_collection(cls); +} + +void osn::IEnhancedBroadcastingSimpleStreaming::Create(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + uint64_t uid = osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().allocate(new EnhancedBroadcastingSimpleStreaming()); + if (uid == UINT64_MAX) { + PRETTY_ERROR_RETURN(ErrorCode::CriticalError, "Index list is full."); + } + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + rval.push_back(ipc::value(uid)); + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingSimpleStreaming::Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().free(streaming); + delete streaming; + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingSimpleStreaming::Start(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + if (!streaming->service) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid service."); + } + + // Note: unlike advanced mode, there is no Twitch VOD track for simple mode + streaming->StartEnhancedBroadcastingStream(); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingSimpleStreaming::Stop(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + streaming->StopEnhancedBroadcastingStream(); + + ISimpleStreaming::Stop(data, id, args, rval); + + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingSimpleStreaming::GetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + const uint64_t uid = osn::Video::Manager::GetInstance().find(streaming->GetAdditionalVideoCanvas()); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + rval.push_back(ipc::value(uid)); + + AUTO_DEBUG; +} + +void osn::IEnhancedBroadcastingSimpleStreaming::SetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval) +{ + EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + if (!streaming) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); + } + + obs_video_info *canvas = osn::Video::Manager::GetInstance().find(args[1].value_union.ui64); + if (!canvas) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Canvas reference is not valid."); + } + + streaming->SetAdditionalVideoCanvas(canvas); + + rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); + AUTO_DEBUG; +} diff --git a/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.hpp b/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.hpp new file mode 100644 index 000000000..d3701d459 --- /dev/null +++ b/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.hpp @@ -0,0 +1,57 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#pragma once +#include +#include "utility.hpp" +#include "osn-delay.hpp" +#include "osn-simple-streaming.hpp" +#include "osn-reconnect.hpp" +#include "osn-network.hpp" +#include "osn-output.hpp" +#include "osn-video-encoder.hpp" +#include "osn-multitrack-video.hpp" +#include "osn-enhanced-broadcasting.hpp" + +#include "nodeobs_configManager.hpp" + + +namespace osn { + +class EnhancedBroadcastingSimpleStreaming : public EnhancedBroadcasting { +public: + EnhancedBroadcastingSimpleStreaming() : EnhancedBroadcasting() + { + } + ~EnhancedBroadcastingSimpleStreaming() {} +}; + +class IEnhancedBroadcastingSimpleStreaming : public ISimpleStreaming { +public: + static void Register(ipc::server &); + + static void Create(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval); + + static void Start(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void Stop(void *data, const int64_t id, const std::vector &args, std::vector &rval); + + static void GetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval); + static void SetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval); +}; +} diff --git a/obs-studio-server/source/osn-enhanced-broadcasting.hpp b/obs-studio-server/source/osn-enhanced-broadcasting.hpp new file mode 100644 index 000000000..dd3561791 --- /dev/null +++ b/obs-studio-server/source/osn-enhanced-broadcasting.hpp @@ -0,0 +1,145 @@ +/****************************************************************************** + Copyright (C) 2016-2022 by Streamlabs (General Workings Inc) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +******************************************************************************/ + +#pragma once +#include + +#include +#include + +namespace osn { + +template +class EnhancedBroadcasting : public BaseStreaming { +public: + EnhancedBroadcasting() : BaseStreaming() { + } + + virtual ~EnhancedBroadcasting() {} + + void StartEnhancedBroadcastingStream(std::optional vod_track_mixer = std::nullopt) { + blog(LOG_INFO, "StartEnhancedBroadcastingStream - service id: %s", obs_service_get_id(this->service)); + + if (vod_track_mixer.has_value()) { + blog(LOG_INFO, "vod_track_mixer: %d", vod_track_mixer.value()); + } + + const bool is_custom = strncmp("rtmp_custom", obs_service_get_type(this->service), 11) == 0; + + OBSDataAutoRelease settings = obs_service_get_settings(this->service); + const std::string key = obs_data_get_string(settings, "key"); + + const char *service_name = ""; + if (is_custom && obs_data_has_user_value(settings, "service_name")) { + service_name = obs_data_get_string(settings, "service_name"); + } else if (!is_custom) { + service_name = obs_data_get_string(settings, "service"); + } + + std::optional custom_rtmp_url; + auto server = obs_data_get_string(settings, "server"); + if (strcmp(server, "auto") != 0) { + custom_rtmp_url = server; + } + + auto service_custom_server = obs_data_get_bool(settings, "using_custom_server"); + if (custom_rtmp_url.has_value()) { + blog(LOG_INFO, "Using %s server '%s'", service_custom_server ? "custom " : "", custom_rtmp_url->c_str()); + } + + auto auto_config_url = osn::MultitrackVideoAutoConfigURL(this->service); + blog(LOG_INFO, "Auto config URL: %s", auto_config_url.c_str()); + + std::vector canvases{this->GetCanvas()}; + if (this->GetAdditionalVideoCanvas()) { + canvases.push_back(this->GetAdditionalVideoCanvas()); + } + + auto go_live_post = osn::constructGoLivePost(canvases, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); + std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); + if (!go_live_config.has_value()) { + throw std::runtime_error("startStreaming - go live config is empty"); + } + + const auto audio_bitrate = osn::GetMultitrackAudioBitrate(); + const auto audio_encoder_id = osn::GetSimpleAACEncoderForBitrate(audio_bitrate); + + std::vector audio_encoders; + std::shared_ptr video_encoder_group; + auto output = + osn::SetupOBSOutput("Enhanced Broadcasting", go_live_config.value(), audio_encoders, video_encoder_group, audio_encoder_id, 0, vod_track_mixer); + if (!output) { + throw std::runtime_error("startStreaming - failed to create multitrack output"); + } + + // Stream key is defined by config from Twitch + auto multitrack_video_service = osn::create_service(*go_live_config, std::nullopt, ""); + if (!multitrack_video_service) { + throw std::runtime_error("startStreaming - failed to create multitrack video service"); + } + + this->SetOutput(output.Get()); + obs_output_set_service(output, multitrack_video_service); + + // Register the BPM (Broadcast Performance Metrics) callback + obs_output_add_packet_callback(output, bpm_inject, NULL); + + this->StartOutput(); + + enhancedBroadcastingContext.emplace(EnhancedBroadcastOutputObjects{ + std::move(output), + video_encoder_group, + std::move(audio_encoders), + std::move(multitrack_video_service), + }); + } + + void StopEnhancedBroadcastingStream() { + blog(LOG_INFO, "StopEnhancedBroadcastingStream - service id: %s", obs_service_get_id(this->service)); + + auto output = this->GetOutput(); + if (!output) { + blog(LOG_WARNING, "StopEnhancedBroadcastingStream - empty output"); + return; + } + + obs_output_remove_packet_callback(output, bpm_inject, NULL); + bpm_destroy(output); + } + + obs_video_info *GetAdditionalVideoCanvas() { + return additionalVideoContext; + } + + void SetAdditionalVideoCanvas(obs_video_info *video) { + additionalVideoContext = video; + } + + void DeleteOutput() override { + BaseStreaming::DeleteOutput(); + enhancedBroadcastingContext.reset(); + } + +private: + std::optional enhancedBroadcastingContext; + + // If set, this context makes enhanced broadcasting stream the dual streaming modde + obs_video_info *additionalVideoContext = nullptr; +}; + +} \ No newline at end of file diff --git a/obs-studio-server/source/osn-simple-streaming.cpp b/obs-studio-server/source/osn-simple-streaming.cpp index 4a1c1035d..442f1fef3 100644 --- a/obs-studio-server/source/osn-simple-streaming.cpp +++ b/obs-studio-server/source/osn-simple-streaming.cpp @@ -49,9 +49,6 @@ void osn::ISimpleStreaming::Register(ipc::server &srv) cls->register_function(std::make_shared("GetEnableTwitchVOD", std::vector{ipc::type::UInt64}, GetEnableTwitchVOD)); cls->register_function( std::make_shared("SetEnableTwitchVOD", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnableTwitchVOD)); - cls->register_function(std::make_shared("GetEnhancedBroadcasting", std::vector{ipc::type::UInt64}, GetEnhancedBroadcasting)); - cls->register_function( - std::make_shared("SetEnhancedBroadcasting", std::vector{ipc::type::UInt64, ipc::type::UInt32}, SetEnhancedBroadcasting)); cls->register_function(std::make_shared("GetDelay", std::vector{ipc::type::UInt64}, GetDelay)); cls->register_function(std::make_shared("SetDelay", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetDelay)); cls->register_function(std::make_shared("GetReconnect", std::vector{ipc::type::UInt64}, GetReconnect)); @@ -337,11 +334,6 @@ void osn::ISimpleStreaming::Start(void *data, const int64_t id, const std::vecto PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid service."); } - if (streaming->enhancedBroadcasting) { - streaming->StartEnhancedBroadcastingStream(); - return; - } - const char *type = OBS_service::getStreamOutputType(streaming->service); if (!type) type = "rtmp_output"; diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index a8262a792..710ba1780 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -34,11 +34,7 @@ osn::Streaming::~Streaming() } void osn::Streaming::DeleteOutput() { - blog(LOG_INFO, "osn::Streaming::DeleteOutput"); Output::DeleteOutput(); - if (enhancedBroadcasting) { - enhancedBroadcastingContext.reset(); - } } void osn::IStreaming::GetService(void *data, const int64_t id, const std::vector &args, std::vector &rval) @@ -164,31 +160,6 @@ void osn::IStreaming::SetEnforceServiceBirate(void *data, const int64_t id, cons AUTO_DEBUG; } -void osn::IStreaming::GetEnhancedBroadcasting(void *data, const int64_t id, const std::vector &args, std::vector &rval) -{ - Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); - if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); - } - - rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - rval.push_back(ipc::value(streaming->enhancedBroadcasting)); - AUTO_DEBUG; -} - -void osn::IStreaming::SetEnhancedBroadcasting(void *data, const int64_t id, const std::vector &args, std::vector &rval) -{ - Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); - if (!streaming) { - PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); - } - - streaming->enhancedBroadcasting = args[1].value_union.ui32; - - rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); - AUTO_DEBUG; -} - void osn::IStreaming::GetEnableTwitchVOD(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); @@ -413,78 +384,6 @@ void osn::Streaming::setNetworkLegacySettings() config_set_bool(ConfigManager::getInstance().getBasic(), "Output", "LowLatencyEnable", network->enableDynamicBitrate); } -void osn::Streaming::StartEnhancedBroadcastingStream(std::optional vod_track_mixer) { - blog(LOG_INFO, "Streaming::StartEnhancedBroadcastingStream - service id: %s", obs_service_get_id(this->service)); - - if (vod_track_mixer.has_value()) { - blog(LOG_INFO, "vod_track_mixer: %d", vod_track_mixer.value()); - } - - const bool is_custom = strncmp("rtmp_custom", obs_service_get_type(this->service), 11) == 0; - - OBSDataAutoRelease settings = obs_service_get_settings(this->service); - const std::string key = obs_data_get_string(settings, "key"); - - const char *service_name = ""; - if (is_custom && obs_data_has_user_value(settings, "service_name")) { - service_name = obs_data_get_string(settings, "service_name"); - } else if (!is_custom) { - service_name = obs_data_get_string(settings, "service"); - } - - std::optional custom_rtmp_url; - auto server = obs_data_get_string(settings, "server"); - if (strcmp(server, "auto") != 0) { - custom_rtmp_url = server; - } - - auto service_custom_server = obs_data_get_bool(settings, "using_custom_server"); - if (custom_rtmp_url.has_value()) { - blog(LOG_INFO, "Using %s server '%s'", service_custom_server ? "custom " : "", custom_rtmp_url->c_str()); - } - - auto auto_config_url = osn::MultitrackVideoAutoConfigURL(this->service); - blog(LOG_INFO, "Auto config URL: %s", auto_config_url.c_str()); - - auto go_live_post = osn::constructGoLivePost({this->GetCanvas()}, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); - std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); - if (!go_live_config.has_value()) { - throw std::runtime_error("startStreaming - go live config is empty"); - } - - const auto audio_bitrate = osn::GetMultitrackAudioBitrate(); - const auto audio_encoder_id = osn::GetSimpleAACEncoderForBitrate(audio_bitrate); - - std::vector audio_encoders; - std::shared_ptr video_encoder_group; - auto output = - osn::SetupOBSOutput("Enhanced Broadcasting", go_live_config.value(), audio_encoders, video_encoder_group, audio_encoder_id, 0, vod_track_mixer); - if (!output) { - throw std::runtime_error("startStreaming - failed to create multitrack output"); - } - - // Stream key is defined by config from Twitch - auto multitrack_video_service = osn::create_service(*go_live_config, std::nullopt, ""); - if (!multitrack_video_service) { - throw std::runtime_error("startStreaming - failed to create multitrack video service"); - } - - this->SetOutput(output.Get()); - obs_output_set_service(output, multitrack_video_service); - - // Register the BPM (Broadcast Performance Metrics) callback - obs_output_add_packet_callback(output, bpm_inject, NULL); - - this->StartOutput(); - - enhancedBroadcastingContext.emplace(EnhancedBroadcastOutputObjects{ - std::move(output), - video_encoder_group, - std::move(audio_encoders), - std::move(multitrack_video_service), - }); -} - void osn::IStreaming::GetDroppedFrames(void *data, const int64_t id, const std::vector &args, std::vector &rval) { Streaming *streaming = osn::IStreaming::Manager::GetInstance().find(args[0].value_union.ui64); diff --git a/obs-studio-server/source/osn-streaming.hpp b/obs-studio-server/source/osn-streaming.hpp index a54a08c48..9afa67d53 100644 --- a/obs-studio-server/source/osn-streaming.hpp +++ b/obs-studio-server/source/osn-streaming.hpp @@ -42,7 +42,6 @@ class Streaming : public Output { enforceServiceBitrate = true; enableTwitchVOD = false; twitchVODSupported = false; - enhancedBroadcasting = false; oldMixer_desktopSource1 = 0; oldMixer_desktopSource2 = 0; delay = new Delay(); @@ -62,7 +61,6 @@ class Streaming : public Output { bool enforceServiceBitrate; bool enableTwitchVOD; bool twitchVODSupported; - bool enhancedBroadcasting; uint32_t oldMixer_desktopSource1; uint32_t oldMixer_desktopSource2; Delay *delay; @@ -78,10 +76,6 @@ class Streaming : public Output { void setDelayLegacySettings(); void setReconnectLegacySettings(); void setNetworkLegacySettings(); - void StartEnhancedBroadcastingStream(std::optional vod_track_mixer = std::nullopt); - -protected: - std::optional enhancedBroadcastingContext; }; class IStreaming { @@ -112,8 +106,6 @@ class IStreaming { static void SetEnforceServiceBirate(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetEnableTwitchVOD(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void SetEnableTwitchVOD(void *data, const int64_t id, const std::vector &args, std::vector &rval); - static void GetEnhancedBroadcasting(void *data, const int64_t id, const std::vector &args, std::vector &rval); - static void SetEnhancedBroadcasting(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetDelay(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void SetDelay(void *data, const int64_t id, const std::vector &args, std::vector &rval); static void GetReconnect(void *data, const int64_t id, const std::vector &args, std::vector &rval); diff --git a/tests/osn-tests/src/test_osn_advanced_streaming.ts b/tests/osn-tests/src/test_osn_advanced_streaming.ts index 4fa98b67c..adc1f1d83 100644 --- a/tests/osn-tests/src/test_osn_advanced_streaming.ts +++ b/tests/osn-tests/src/test_osn_advanced_streaming.ts @@ -187,100 +187,6 @@ describe(testName, () => { osn.AdvancedStreamingFactory.destroy(stream); }); - it('Enhanced broadcasting streaming', async function() { - if (obs.isDarwin()) { - this.skip(); - } - - const stream = osn.AdvancedStreamingFactory.create(); - expect(stream).to.not.be.null; - stream.service = osn.ServiceFactory.legacySettings; - - // Note: no video encoder set, because it is automatically created by the enhanced broadcasting - stream.delay = osn.DelayFactory.create(); - stream.reconnect = osn.ReconnectFactory.create(); - stream.network = osn.NetworkFactory.create(); - stream.video = obs.defaultVideoContext; - stream.enhancedBroadcasting = true; - const track1 = osn.AudioTrackFactory.create(160, 'track1'); - osn.AudioTrackFactory.setAtIndex(track1, 1); - stream.signalHandler = (signal) => {obs.signals.push(signal)}; - - stream.start(); - - let signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Starting); - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Starting, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Activate); - - if (signalInfo.signal == EOBSOutputSignal.Stop) { - throw Error(GetErrorMessage(ETestErrorMsg.StreamOutputDidNotStart, signalInfo.code.toString())); - } - - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Activate, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Start); - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Start, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - // Scene setup - const scene = osn.SceneFactory.create('my_scene'); - expect(scene).to.not.be.null; - osn.Global.setOutputSource(0, scene); - - let settings = inputSettings.ffmpegSource; - settings['volume'] = 100; - settings['local_file'] = path.join(mediaPath, "bigbuckbunny.mp4"); - settings['looping'] = true; - const videoSource = osn.InputFactory.create(EOBSInputTypes.FFMPEGSource, 'video_source', settings); - expect(videoSource).to.not.be.null; - - const sceneItem = scene.add(videoSource); - expect(sceneItem).to.not.be.null; - - sceneItem.video = obs.defaultVideoContext; - sceneItem.visible = true; - sceneItem.position = { x: 0, y: 0 }; - - await sleep(5 * 1000); - - expect(stream.droppedFrames).to.not.equal(undefined, "Undefined droppedFrames"); - expect(stream.totalFrames).to.not.equal(undefined, "Undefined totalFrames"); - expect(stream.kbitsPerSec).to.not.equal(undefined, "Undefined kbitsPerSec"); - expect(stream.dataOutput).to.not.equal(undefined, "Undefined dataOutput"); - - stream.stop(); - - // Scene cleanup - sceneItem.remove(); - videoSource.release(); - scene.release(); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stopping); - - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stopping, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stop); - - if (signalInfo.code != 0) { - throw Error(GetErrorMessage( - ETestErrorMsg.StreamOutputStoppedWithError, - signalInfo.code.toString(), signalInfo.error)); - } - - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Deactivate); - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - osn.AdvancedStreamingFactory.destroy(stream); - }); - it('Stream with invalid stream key', async function() { if (obs.isDarwin()) { this.skip(); diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts new file mode 100644 index 000000000..1250f5cb3 --- /dev/null +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts @@ -0,0 +1,271 @@ +import 'mocha' +import { expect } from 'chai' +import * as osn from '../osn'; +import { logInfo, logEmptyLine } from '../util/logger'; +import { ETestErrorMsg, GetErrorMessage } from '../util/error_messages'; +import { OBSHandler } from '../util/obs_handler' +import { deleteConfigFiles, sleep } from '../util/general'; +import { EOBSInputTypes, EOBSOutputSignal, EOBSOutputType } from '../util/obs_enums'; +import * as inputSettings from '../util/input_settings'; + +import path = require('path'); + +const testName = 'osn-enhanced-broadcasting-advanced-streaming'; + +describe(testName, () => { + let obs: OBSHandler; + let hasTestFailed: boolean = false; + const mediaPath = path.join(path.normalize(__dirname), '..', 'media'); + let secondContext: osn.IVideo = null; + + // Initialize OBS process + before(async() => { + logInfo(testName, 'Starting ' + testName + ' tests'); + deleteConfigFiles(); + obs = new OBSHandler(testName); + obs.instantiateUserPool(testName); + + // Reserving user from pool + await obs.reserveUser(); + + secondContext = osn.VideoFactory.create(); + const secondVideoInfo: osn.IVideoInfo = { + fpsNum: 60, + fpsDen: 2, + baseWidth: 720, + baseHeight: 1280, + outputWidth: 720, + outputHeight: 1280, + outputFormat: osn.EVideoFormat.NV12, + colorspace: osn.EColorSpace.CS709, + range: osn.ERangeType.Full, + scaleType: osn.EScaleType.Lanczos, + fpsType: osn.EFPSType.Fractional + }; + secondContext.video = secondVideoInfo; + }); + + // Shutdown OBS process + after(async function() { + // Releasing user got from pool + await obs.releaseUser(); + + secondContext.destroy(); + obs.shutdown(); + + if (hasTestFailed === true) { + logInfo(testName, 'One or more test cases failed. Uploading cache'); + await obs.uploadTestCache(); + } + + obs = null; + deleteConfigFiles(); + logInfo(testName, 'Finished ' + testName + ' tests'); + logEmptyLine(); + }); + + afterEach(function() { + if (this.currentTest.state == 'failed') { + hasTestFailed = true; + } + }); + + // TODO: more tests: + // - not set main canvas (error handling) + // - vertical primary canvas + + it('Enhanced Broadcasting Advanced Streaming Single Canvas', async function() { + if (obs.isDarwin()) { + this.skip(); + } + + const stream = osn.EnhancedBroadcastingAdvancedStreamingFactory.create(); + expect(stream).to.not.be.null; + stream.service = osn.ServiceFactory.legacySettings; + // Note: no video encoder set, because it is automatically created by the enhanced broadcasting + stream.delay = osn.DelayFactory.create(); + stream.reconnect = osn.ReconnectFactory.create(); + stream.network = osn.NetworkFactory.create(); + stream.video = obs.defaultVideoContext; + const track1 = osn.AudioTrackFactory.create(160, 'track1'); + osn.AudioTrackFactory.setAtIndex(track1, 1); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + stream.start(); + + let signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Starting); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Starting, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Activate); + + if (signalInfo.signal == EOBSOutputSignal.Stop) { + throw Error(GetErrorMessage(ETestErrorMsg.StreamOutputDidNotStart, signalInfo.code.toString())); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Activate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Start); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Start, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + // Scene setup + const scene = osn.SceneFactory.create('my_scene'); + expect(scene).to.not.be.null; + osn.Global.setOutputSource(0, scene); + + let settings = inputSettings.ffmpegSource; + settings['volume'] = 100; + settings['local_file'] = path.join(mediaPath, "bigbuckbunny.mp4"); + settings['looping'] = true; + const videoSource = osn.InputFactory.create(EOBSInputTypes.FFMPEGSource, 'video_source', settings); + expect(videoSource).to.not.be.null; + + const sceneItem = scene.add(videoSource); + expect(sceneItem).to.not.be.null; + + sceneItem.video = obs.defaultVideoContext; + sceneItem.visible = true; + sceneItem.position = { x: 0, y: 0 }; + + await sleep(1 * 1000); + + expect(stream.droppedFrames).to.not.equal(undefined, "Undefined droppedFrames"); + expect(stream.totalFrames).to.not.equal(undefined, "Undefined totalFrames"); + expect(stream.kbitsPerSec).to.not.equal(undefined, "Undefined kbitsPerSec"); + expect(stream.dataOutput).to.not.equal(undefined, "Undefined dataOutput"); + + stream.stop(); + + // Scene cleanup + sceneItem.remove(); + videoSource.release(); + scene.release(); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stopping); + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stopping, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stop); + + if (signalInfo.code != 0) { + throw Error(GetErrorMessage( + ETestErrorMsg.StreamOutputStoppedWithError, + signalInfo.code.toString(), signalInfo.error)); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Deactivate); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + osn.EnhancedBroadcastingAdvancedStreamingFactory.destroy(stream); + }); + + it('Enhanced Broadcasting Advanced Streaming Dual Canvas', async function() { + if (obs.isDarwin()) { + this.skip(); + } + + const stream = osn.EnhancedBroadcastingAdvancedStreamingFactory.create(); + expect(stream).to.not.be.null; + stream.service = osn.ServiceFactory.legacySettings; + // Note: no video encoder set, because it is automatically created by the enhanced broadcasting + stream.delay = osn.DelayFactory.create(); + stream.reconnect = osn.ReconnectFactory.create(); + stream.network = osn.NetworkFactory.create(); + stream.video = obs.defaultVideoContext; + stream.additionalVideo = secondContext; + const track1 = osn.AudioTrackFactory.create(160, 'track1'); + osn.AudioTrackFactory.setAtIndex(track1, 1); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + stream.start(); + + let signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Starting); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Starting, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Activate); + + if (signalInfo.signal == EOBSOutputSignal.Stop) { + throw Error(GetErrorMessage(ETestErrorMsg.StreamOutputDidNotStart, signalInfo.code.toString())); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Activate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Start); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Start, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + // Scene setup + const scene = osn.SceneFactory.create('my_scene'); + expect(scene).to.not.be.null; + osn.Global.setOutputSource(0, scene); + + let settings = inputSettings.ffmpegSource; + settings['volume'] = 100; + settings['local_file'] = path.join(mediaPath, "bigbuckbunny.mp4"); + settings['looping'] = true; + const videoSource = osn.InputFactory.create(EOBSInputTypes.FFMPEGSource, 'video_source', settings); + expect(videoSource).to.not.be.null; + + // Item on the horizontal canvas + const sceneItem1 = scene.add(videoSource); + expect(sceneItem1).to.not.be.null; + sceneItem1.video = obs.defaultVideoContext; + sceneItem1.visible = true; + sceneItem1.position = { x: 0, y: 0 }; + + // Item on the vertical canvas + const sceneItem2 = scene.add(videoSource); + expect(sceneItem2).to.not.be.null; + sceneItem2.video = secondContext; + sceneItem2.visible = true; + sceneItem2.position = { x: 20, y: 20 }; + sceneItem2.scale = {x: 0.5, y: 0.5}; + + await sleep(1 * 1000); + + expect(stream.droppedFrames).to.not.equal(undefined, "Undefined droppedFrames"); + expect(stream.totalFrames).to.not.equal(undefined, "Undefined totalFrames"); + expect(stream.kbitsPerSec).to.not.equal(undefined, "Undefined kbitsPerSec"); + expect(stream.dataOutput).to.not.equal(undefined, "Undefined dataOutput"); + + stream.stop(); + + // Scene cleanup + sceneItem1.remove(); + sceneItem2.remove(); + videoSource.release(); + scene.release(); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stopping); + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stopping, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stop); + + if (signalInfo.code != 0) { + throw Error(GetErrorMessage( + ETestErrorMsg.StreamOutputStoppedWithError, + signalInfo.code.toString(), signalInfo.error)); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Deactivate); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + osn.EnhancedBroadcastingAdvancedStreamingFactory.destroy(stream); + }); +}); + diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts new file mode 100644 index 000000000..843a84121 --- /dev/null +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts @@ -0,0 +1,263 @@ +import 'mocha' +import { expect } from 'chai' +import * as osn from '../osn'; +import { logInfo, logEmptyLine } from '../util/logger'; +import { ETestErrorMsg, GetErrorMessage } from '../util/error_messages'; +import { OBSHandler } from '../util/obs_handler' +import { deleteConfigFiles, sleep } from '../util/general'; +import { EOBSInputTypes, EOBSOutputSignal, EOBSOutputType } from '../util/obs_enums'; +import * as inputSettings from '../util/input_settings'; + +import path = require('path'); + +const testName = 'osn-enhanced-broadcasting-advanced-streaming'; + +describe(testName, () => { + let obs: OBSHandler; + let hasTestFailed: boolean = false; + const mediaPath = path.join(path.normalize(__dirname), '..', 'media'); + let secondContext: osn.IVideo = null; + + // Initialize OBS process + before(async() => { + logInfo(testName, 'Starting ' + testName + ' tests'); + deleteConfigFiles(); + obs = new OBSHandler(testName); + + obs.instantiateUserPool(testName); + + // Reserving user from pool + await obs.reserveUser(); + + secondContext = osn.VideoFactory.create(); + const secondVideoInfo: osn.IVideoInfo = { + fpsNum: 60, + fpsDen: 2, + baseWidth: 720, + baseHeight: 1280, + outputWidth: 720, + outputHeight: 1280, + outputFormat: osn.EVideoFormat.NV12, + colorspace: osn.EColorSpace.CS709, + range: osn.ERangeType.Full, + scaleType: osn.EScaleType.Lanczos, + fpsType: osn.EFPSType.Fractional + }; + secondContext.video = secondVideoInfo; + }); + + // Shutdown OBS process + after(async function() { + // Releasing user got from pool + await obs.releaseUser(); + + secondContext.destroy(); + obs.shutdown(); + + if (hasTestFailed === true) { + logInfo(testName, 'One or more test cases failed. Uploading cache'); + await obs.uploadTestCache(); + } + + obs = null; + deleteConfigFiles(); + logInfo(testName, 'Finished ' + testName + ' tests'); + logEmptyLine(); + }); + + afterEach(function() { + if (this.currentTest.state == 'failed') { + hasTestFailed = true; + } + }); + + it('Enhanced Broadcasting Simple Streaming Single Canvas', async function() { + if (obs.isDarwin()) { + this.skip(); + } + const stream = osn.EnhancedBroadcastingSimpleStreamingFactory.create(); + // Note: no video encoder set, because it is automatically created by the enhanced broadcasting + stream.service = osn.ServiceFactory.legacySettings; + stream.delay = osn.DelayFactory.create(); + stream.reconnect = osn.ReconnectFactory.create(); + stream.network = osn.NetworkFactory.create(); + stream.video = obs.defaultVideoContext; + stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + stream.start(); + + let signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Starting); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Starting, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Activate); + + if (signalInfo.signal == EOBSOutputSignal.Stop) { + throw Error(GetErrorMessage( + ETestErrorMsg.StreamOutputDidNotStart, signalInfo.code.toString(), signalInfo.error)); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Activate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Start); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Start, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + // Scene setup + const scene = osn.SceneFactory.create('my_scene'); + expect(scene).to.not.be.null; + osn.Global.setOutputSource(0, scene); + + let settings = inputSettings.ffmpegSource; + settings['volume'] = 100; + settings['local_file'] = path.join(mediaPath, "bigbuckbunny.mp4"); + settings['looping'] = true; + const videoSource = osn.InputFactory.create(EOBSInputTypes.FFMPEGSource, 'video_source', settings); + expect(videoSource).to.not.be.null; + + const sceneItem = scene.add(videoSource); + expect(sceneItem).to.not.be.null; + sceneItem.video = obs.defaultVideoContext; + sceneItem.visible = true; + sceneItem.position = { x: 0, y: 0 }; + + await sleep(1 * 1000); + + expect(stream.droppedFrames).to.not.equal(undefined, "Undefined droppedFrames"); + expect(stream.totalFrames).to.not.equal(undefined, "Undefined totalFrames"); + expect(stream.kbitsPerSec).to.not.equal(undefined, "Undefined kbitsPerSec"); + expect(stream.dataOutput).to.not.equal(undefined, "Undefined dataOutput"); + + stream.stop(); + + // Scene cleanup + sceneItem.remove(); + videoSource.release(); + scene.release(); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stopping); + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stopping, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stop); + + if (signalInfo.code != 0) { + throw Error(GetErrorMessage( + ETestErrorMsg.StreamOutputStoppedWithError, + signalInfo.code.toString(), signalInfo.error)); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Deactivate); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + osn.EnhancedBroadcastingSimpleStreamingFactory.destroy(stream); + }); + + it('Enhanced Broadcasting Simple Streaming Dual Canvas', async function() { + if (obs.isDarwin()) { + this.skip(); + } + + const stream = osn.EnhancedBroadcastingSimpleStreamingFactory.create(); + expect(stream).to.not.be.null; + stream.service = osn.ServiceFactory.legacySettings; + // Note: no video encoder set, because it is automatically created by the enhanced broadcasting + stream.delay = osn.DelayFactory.create(); + stream.reconnect = osn.ReconnectFactory.create(); + stream.network = osn.NetworkFactory.create(); + stream.video = obs.defaultVideoContext; + stream.additionalVideo = secondContext; + stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + stream.start(); + + let signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Starting); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Starting, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Activate); + + if (signalInfo.signal == EOBSOutputSignal.Stop) { + throw Error(GetErrorMessage(ETestErrorMsg.StreamOutputDidNotStart, signalInfo.code.toString())); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Activate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Start); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Start, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + // Scene setup + const scene = osn.SceneFactory.create('my_scene'); + expect(scene).to.not.be.null; + osn.Global.setOutputSource(0, scene); + + let settings = inputSettings.ffmpegSource; + settings['volume'] = 100; + settings['local_file'] = path.join(mediaPath, "bigbuckbunny.mp4"); + settings['looping'] = true; + const videoSource = osn.InputFactory.create(EOBSInputTypes.FFMPEGSource, 'video_source', settings); + expect(videoSource).to.not.be.null; + + // Item on the horizontal canvas + const sceneItem1 = scene.add(videoSource); + expect(sceneItem1).to.not.be.null; + sceneItem1.video = obs.defaultVideoContext; + sceneItem1.visible = true; + sceneItem1.position = { x: 0, y: 0 }; + + // Item on the vertical canvas + const sceneItem2 = scene.add(videoSource); + expect(sceneItem2).to.not.be.null; + sceneItem2.video = secondContext; + sceneItem2.visible = true; + sceneItem2.position = { x: 20, y: 20 }; + sceneItem2.scale = {x: 0.5, y: 0.5}; + + await sleep(1 * 1000); + + expect(stream.droppedFrames).to.not.equal(undefined, "Undefined droppedFrames"); + expect(stream.totalFrames).to.not.equal(undefined, "Undefined totalFrames"); + expect(stream.kbitsPerSec).to.not.equal(undefined, "Undefined kbitsPerSec"); + expect(stream.dataOutput).to.not.equal(undefined, "Undefined dataOutput"); + + stream.stop(); + + // Scene cleanup + sceneItem1.remove(); + sceneItem2.remove(); + videoSource.release(); + scene.release(); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stopping); + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stopping, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stop); + + if (signalInfo.code != 0) { + throw Error(GetErrorMessage( + ETestErrorMsg.StreamOutputStoppedWithError, + signalInfo.code.toString(), signalInfo.error)); + } + + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Deactivate); + expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); + expect(signalInfo.signal).to.equal(EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); + + osn.EnhancedBroadcastingSimpleStreamingFactory.destroy(stream); + }); +}); diff --git a/tests/osn-tests/src/test_osn_simple_streaming.ts b/tests/osn-tests/src/test_osn_simple_streaming.ts index a28c8d7b0..4ea648cf1 100644 --- a/tests/osn-tests/src/test_osn_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_simple_streaming.ts @@ -5,8 +5,7 @@ import { logInfo, logEmptyLine } from '../util/logger'; import { ETestErrorMsg, GetErrorMessage } from '../util/error_messages'; import { OBSHandler } from '../util/obs_handler' import { deleteConfigFiles, sleep } from '../util/general'; -import { EOBSInputTypes, EOBSOutputSignal, EOBSOutputType } from '../util/obs_enums'; -import * as inputSettings from '../util/input_settings'; +import { EOBSOutputSignal, EOBSOutputType } from '../util/obs_enums'; import path = require('path'); @@ -171,99 +170,6 @@ describe(testName, () => { osn.SimpleStreamingFactory.destroy(stream); }); - it('Enhanced broadcasting streaming', async function() { - if (obs.isDarwin()) { - this.skip(); - } - - const stream = osn.SimpleStreamingFactory.create(); - expect(stream).to.not.be.null; - // Note: no video encoder set, because it is automatically created by the enhanced broadcasting - stream.service = osn.ServiceFactory.legacySettings; - stream.delay = osn.DelayFactory.create(); - stream.reconnect = osn.ReconnectFactory.create(); - stream.network = osn.NetworkFactory.create(); - stream.video = obs.defaultVideoContext; - stream.audioEncoder = osn.AudioEncoderFactory.create(); - stream.enhancedBroadcasting = true; - stream.signalHandler = (signal) => {obs.signals.push(signal)}; - - stream.start(); - - let signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Starting); - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Starting, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Activate); - - if (signalInfo.signal == EOBSOutputSignal.Stop) { - throw Error(GetErrorMessage( - ETestErrorMsg.StreamOutputDidNotStart, signalInfo.code.toString(), signalInfo.error)); - } - - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Activate, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Start); - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Start, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - // Scene setup - const scene = osn.SceneFactory.create('my_scene'); - expect(scene).to.not.be.null; - osn.Global.setOutputSource(0, scene); - - let settings = inputSettings.ffmpegSource; - settings['volume'] = 100; - settings['local_file'] = path.join(mediaPath, "bigbuckbunny.mp4");; - settings['looping'] = true; - const videoSource = osn.InputFactory.create(EOBSInputTypes.FFMPEGSource, 'video_source', settings); - expect(videoSource).to.not.be.null; - - const sceneItem = scene.add(videoSource); - expect(sceneItem).to.not.be.null; - - sceneItem.video = obs.defaultVideoContext; - sceneItem.visible = true; - sceneItem.position = { x: 0, y: 0 }; - - await sleep(5 * 1000); - - expect(stream.droppedFrames).to.not.equal(undefined, "Undefined droppedFrames"); - expect(stream.totalFrames).to.not.equal(undefined, "Undefined totalFrames"); - expect(stream.kbitsPerSec).to.not.equal(undefined, "Undefined kbitsPerSec"); - expect(stream.dataOutput).to.not.equal(undefined, "Undefined dataOutput"); - - stream.stop(); - - // Scene cleanup - sceneItem.remove(); - videoSource.release(); - scene.release(); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stopping); - - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stopping, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Stop); - - if (signalInfo.code != 0) { - throw Error(GetErrorMessage( - ETestErrorMsg.StreamOutputStoppedWithError, - signalInfo.code.toString(), signalInfo.error)); - } - - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Stop, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - signalInfo = await obs.getNextSignalInfo(EOBSOutputType.Streaming, EOBSOutputSignal.Deactivate); - expect(signalInfo.type).to.equal(EOBSOutputType.Streaming, GetErrorMessage(ETestErrorMsg.StreamOutput)); - expect(signalInfo.signal).to.equal(EOBSOutputSignal.Deactivate, GetErrorMessage(ETestErrorMsg.StreamOutput)); - - osn.SimpleStreamingFactory.destroy(stream); - }); - it('Stream with invalid stream key', async function() { if (obs.isDarwin()) { this.skip(); From dabe446840815fa4876f1783ccd06f534ca41029 Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Tue, 27 Jan 2026 16:08:03 +0000 Subject: [PATCH 12/19] Minor scene cleanup in tests --- .../src/test_osn_enhanced_broadcasting_advanced_streaming.ts | 2 ++ .../src/test_osn_enhanced_broadcasting_simple_streaming.ts | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts index 1250f5cb3..23e048f8b 100644 --- a/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts @@ -139,6 +139,7 @@ describe(testName, () => { stream.stop(); // Scene cleanup + osn.Global.setOutputSource(0, null); sceneItem.remove(); videoSource.release(); scene.release(); @@ -240,6 +241,7 @@ describe(testName, () => { stream.stop(); // Scene cleanup + osn.Global.setOutputSource(0, null); sceneItem1.remove(); sceneItem2.remove(); videoSource.release(); diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts index 843a84121..7ceddef3c 100644 --- a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts @@ -10,7 +10,7 @@ import * as inputSettings from '../util/input_settings'; import path = require('path'); -const testName = 'osn-enhanced-broadcasting-advanced-streaming'; +const testName = 'osn-enhanced-broadcasting-simple-streaming'; describe(testName, () => { let obs: OBSHandler; @@ -133,6 +133,7 @@ describe(testName, () => { stream.stop(); // Scene cleanup + osn.Global.setOutputSource(0, null); sceneItem.remove(); videoSource.release(); scene.release(); @@ -233,6 +234,7 @@ describe(testName, () => { stream.stop(); // Scene cleanup + osn.Global.setOutputSource(0, null); sceneItem1.remove(); sceneItem2.remove(); videoSource.release(); From 9f211b56f68f06a4affb1033ba9c081c88cba34d Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Tue, 27 Jan 2026 16:11:54 +0000 Subject: [PATCH 13/19] Clang format --- ...hanced-broadcasting-advanced-streaming.cpp | 45 ++-- ...hanced-broadcasting-advanced-streaming.hpp | 3 +- ...enhanced-broadcasting-simple-streaming.cpp | 42 ++-- ...enhanced-broadcasting-simple-streaming.hpp | 3 +- obs-studio-server/source/nodeobs_service.cpp | 2 +- ...hanced-broadcasting-advanced-streaming.cpp | 32 +-- ...hanced-broadcasting-advanced-streaming.hpp | 5 +- ...enhanced-broadcasting-simple-streaming.cpp | 27 ++- ...enhanced-broadcasting-simple-streaming.hpp | 5 +- .../source/osn-enhanced-broadcasting.hpp | 215 +++++++++--------- .../osn-multitrack-video-configuration.cpp | 13 +- .../osn-multitrack-video-configuration.hpp | 2 +- .../source/osn-multitrack-video.cpp | 1 - obs-studio-server/source/osn-output.cpp | 34 ++- obs-studio-server/source/osn-output.hpp | 45 ++-- .../source/osn-simple-recording.cpp | 3 +- obs-studio-server/source/osn-streaming.cpp | 3 +- obs-studio-server/source/osn-streaming.hpp | 3 +- 18 files changed, 254 insertions(+), 229 deletions(-) diff --git a/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp index d181e19b9..06a549e62 100644 --- a/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp +++ b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp @@ -34,31 +34,43 @@ Napi::Object osn::EnhancedBroadcastingAdvancedStreaming::Init(Napi::Env env, Nap {StaticMethod("create", &osn::EnhancedBroadcastingAdvancedStreaming::Create), StaticMethod("destroy", &osn::EnhancedBroadcastingAdvancedStreaming::Destroy), - InstanceAccessor("videoEncoder", &osn::EnhancedBroadcastingAdvancedStreaming::GetVideoEncoder, &osn::EnhancedBroadcastingAdvancedStreaming::SetVideoEncoder), + InstanceAccessor("videoEncoder", &osn::EnhancedBroadcastingAdvancedStreaming::GetVideoEncoder, + &osn::EnhancedBroadcastingAdvancedStreaming::SetVideoEncoder), InstanceAccessor("service", &osn::EnhancedBroadcastingAdvancedStreaming::GetService, &osn::EnhancedBroadcastingAdvancedStreaming::SetService), - InstanceAccessor("enforceServiceBitrate", &osn::EnhancedBroadcastingAdvancedStreaming::GetEnforceServiceBirate, &osn::EnhancedBroadcastingAdvancedStreaming::SetEnforceServiceBirate), - InstanceAccessor("enableTwitchVOD", &osn::EnhancedBroadcastingAdvancedStreaming::GetEnableTwitchVOD, &osn::EnhancedBroadcastingAdvancedStreaming::SetEnableTwitchVOD), - InstanceAccessor("signalHandler", &osn::EnhancedBroadcastingAdvancedStreaming::GetSignalHandler, &osn::EnhancedBroadcastingAdvancedStreaming::SetSignalHandler), + InstanceAccessor("enforceServiceBitrate", &osn::EnhancedBroadcastingAdvancedStreaming::GetEnforceServiceBirate, + &osn::EnhancedBroadcastingAdvancedStreaming::SetEnforceServiceBirate), + InstanceAccessor("enableTwitchVOD", &osn::EnhancedBroadcastingAdvancedStreaming::GetEnableTwitchVOD, + &osn::EnhancedBroadcastingAdvancedStreaming::SetEnableTwitchVOD), + InstanceAccessor("signalHandler", &osn::EnhancedBroadcastingAdvancedStreaming::GetSignalHandler, + &osn::EnhancedBroadcastingAdvancedStreaming::SetSignalHandler), InstanceAccessor("delay", &osn::EnhancedBroadcastingAdvancedStreaming::GetDelay, &osn::EnhancedBroadcastingAdvancedStreaming::SetDelay), - InstanceAccessor("reconnect", &osn::EnhancedBroadcastingAdvancedStreaming::GetReconnect, &osn::EnhancedBroadcastingAdvancedStreaming::SetReconnect), + InstanceAccessor("reconnect", &osn::EnhancedBroadcastingAdvancedStreaming::GetReconnect, + &osn::EnhancedBroadcastingAdvancedStreaming::SetReconnect), InstanceAccessor("network", &osn::EnhancedBroadcastingAdvancedStreaming::GetNetwork, &osn::EnhancedBroadcastingAdvancedStreaming::SetNetwork), InstanceAccessor("video", &osn::EnhancedBroadcastingAdvancedStreaming::GetCanvas, &osn::EnhancedBroadcastingAdvancedStreaming::SetCanvas), - InstanceAccessor("additionalVideo", &osn::EnhancedBroadcastingAdvancedStreaming::GetAdditionalCanvas, &osn::EnhancedBroadcastingAdvancedStreaming::SetAdditionalCanvas), + InstanceAccessor("additionalVideo", &osn::EnhancedBroadcastingAdvancedStreaming::GetAdditionalCanvas, + &osn::EnhancedBroadcastingAdvancedStreaming::SetAdditionalCanvas), InstanceAccessor("droppedFrames", &osn::EnhancedBroadcastingAdvancedStreaming::GetDroppedFrames, nullptr), InstanceAccessor("totalFrames", &osn::EnhancedBroadcastingAdvancedStreaming::GetTotalFrames, nullptr), InstanceAccessor("kbitsPerSec", &osn::EnhancedBroadcastingAdvancedStreaming::GetKBitsPerSec, nullptr), InstanceAccessor("dataOutput", &osn::EnhancedBroadcastingAdvancedStreaming::GetDataOutput, nullptr), - InstanceAccessor("audioTrack", &osn::EnhancedBroadcastingAdvancedStreaming::GetAudioTrack, &osn::EnhancedBroadcastingAdvancedStreaming::SetAudioTrack), - InstanceAccessor("twitchTrack", &osn::EnhancedBroadcastingAdvancedStreaming::GetTwitchTrack, &osn::EnhancedBroadcastingAdvancedStreaming::SetTwitchTrack), - InstanceAccessor("rescaling", &osn::EnhancedBroadcastingAdvancedStreaming::GetRescaling, &osn::EnhancedBroadcastingAdvancedStreaming::SetRescaling), - InstanceAccessor("outputWidth", &osn::EnhancedBroadcastingAdvancedStreaming::GetOutputWidth, &osn::EnhancedBroadcastingAdvancedStreaming::SetOutputWidth), - InstanceAccessor("outputHeight", &osn::EnhancedBroadcastingAdvancedStreaming::GetOutputHeight, &osn::EnhancedBroadcastingAdvancedStreaming::SetOutputHeight), + InstanceAccessor("audioTrack", &osn::EnhancedBroadcastingAdvancedStreaming::GetAudioTrack, + &osn::EnhancedBroadcastingAdvancedStreaming::SetAudioTrack), + InstanceAccessor("twitchTrack", &osn::EnhancedBroadcastingAdvancedStreaming::GetTwitchTrack, + &osn::EnhancedBroadcastingAdvancedStreaming::SetTwitchTrack), + InstanceAccessor("rescaling", &osn::EnhancedBroadcastingAdvancedStreaming::GetRescaling, + &osn::EnhancedBroadcastingAdvancedStreaming::SetRescaling), + InstanceAccessor("outputWidth", &osn::EnhancedBroadcastingAdvancedStreaming::GetOutputWidth, + &osn::EnhancedBroadcastingAdvancedStreaming::SetOutputWidth), + InstanceAccessor("outputHeight", &osn::EnhancedBroadcastingAdvancedStreaming::GetOutputHeight, + &osn::EnhancedBroadcastingAdvancedStreaming::SetOutputHeight), InstanceMethod("start", &osn::EnhancedBroadcastingAdvancedStreaming::Start), InstanceMethod("stop", &osn::EnhancedBroadcastingAdvancedStreaming::Stop), - StaticAccessor("legacySettings", &osn::EnhancedBroadcastingAdvancedStreaming::GetLegacySettings, &osn::EnhancedBroadcastingAdvancedStreaming::SetLegacySettings)}); + StaticAccessor("legacySettings", &osn::EnhancedBroadcastingAdvancedStreaming::GetLegacySettings, + &osn::EnhancedBroadcastingAdvancedStreaming::SetLegacySettings)}); exports.Set("EnhancedBroadcastingAdvancedStreaming", func); osn::EnhancedBroadcastingAdvancedStreaming::constructor = Napi::Persistent(func); @@ -67,7 +79,8 @@ Napi::Object osn::EnhancedBroadcastingAdvancedStreaming::Init(Napi::Env env, Nap return exports; } -osn::EnhancedBroadcastingAdvancedStreaming::EnhancedBroadcastingAdvancedStreaming(const Napi::CallbackInfo &info) : Napi::ObjectWrap(info) +osn::EnhancedBroadcastingAdvancedStreaming::EnhancedBroadcastingAdvancedStreaming(const Napi::CallbackInfo &info) + : Napi::ObjectWrap(info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); @@ -93,7 +106,8 @@ Napi::Value osn::EnhancedBroadcastingAdvancedStreaming::Create(const Napi::Callb if (!ValidateResponse(info, response)) return info.Env().Undefined(); - auto instance = osn::EnhancedBroadcastingAdvancedStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + auto instance = + osn::EnhancedBroadcastingAdvancedStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); return instance; } @@ -161,7 +175,8 @@ Napi::Value osn::EnhancedBroadcastingAdvancedStreaming::GetLegacySettings(const if (!ValidateResponse(info, response)) return info.Env().Undefined(); - auto instance = osn::EnhancedBroadcastingAdvancedStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + auto instance = + osn::EnhancedBroadcastingAdvancedStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); return instance; } diff --git a/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.hpp b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.hpp index f9378ba24..37ee11a2f 100644 --- a/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.hpp +++ b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.hpp @@ -21,8 +21,7 @@ #include "advanced-streaming.hpp" namespace osn { -class EnhancedBroadcastingAdvancedStreaming : public Napi::ObjectWrap, - public osn::AdvancedStreamingBase { +class EnhancedBroadcastingAdvancedStreaming : public Napi::ObjectWrap, public osn::AdvancedStreamingBase { public: static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); diff --git a/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp index 538cae63e..641bbcb41 100644 --- a/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp +++ b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp @@ -34,20 +34,30 @@ Napi::Object osn::EnhancedBroadcastingSimpleStreaming::Init(Napi::Env env, Napi: {StaticMethod("create", &osn::EnhancedBroadcastingSimpleStreaming::Create), StaticMethod("destroy", &osn::EnhancedBroadcastingSimpleStreaming::Destroy), - InstanceAccessor("videoEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetVideoEncoder, &osn::EnhancedBroadcastingSimpleStreaming::SetVideoEncoder), - InstanceAccessor("audioEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetAudioEncoder, &osn::EnhancedBroadcastingSimpleStreaming::SetAudioEncoder), + InstanceAccessor("videoEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetVideoEncoder, + &osn::EnhancedBroadcastingSimpleStreaming::SetVideoEncoder), + InstanceAccessor("audioEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetAudioEncoder, + &osn::EnhancedBroadcastingSimpleStreaming::SetAudioEncoder), InstanceAccessor("service", &osn::EnhancedBroadcastingSimpleStreaming::GetService, &osn::EnhancedBroadcastingSimpleStreaming::SetService), - InstanceAccessor("enforceServiceBitrate", &osn::EnhancedBroadcastingSimpleStreaming::GetEnforceServiceBirate, &osn::EnhancedBroadcastingSimpleStreaming::SetEnforceServiceBirate), - InstanceAccessor("enableTwitchVOD", &osn::EnhancedBroadcastingSimpleStreaming::GetEnableTwitchVOD, &osn::EnhancedBroadcastingSimpleStreaming::SetEnableTwitchVOD), - InstanceAccessor("audioEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetAudioEncoder, &osn::EnhancedBroadcastingSimpleStreaming::SetAudioEncoder), - InstanceAccessor("useAdvanced", &osn::EnhancedBroadcastingSimpleStreaming::GetUseAdvanced, &osn::EnhancedBroadcastingSimpleStreaming::SetUseAdvanced), - InstanceAccessor("customEncSettings", &osn::EnhancedBroadcastingSimpleStreaming::GetCustomEncSettings, &osn::EnhancedBroadcastingSimpleStreaming::SetCustomEncSettings), - InstanceAccessor("signalHandler", &osn::EnhancedBroadcastingSimpleStreaming::GetSignalHandler, &osn::EnhancedBroadcastingSimpleStreaming::SetSignalHandler), + InstanceAccessor("enforceServiceBitrate", &osn::EnhancedBroadcastingSimpleStreaming::GetEnforceServiceBirate, + &osn::EnhancedBroadcastingSimpleStreaming::SetEnforceServiceBirate), + InstanceAccessor("enableTwitchVOD", &osn::EnhancedBroadcastingSimpleStreaming::GetEnableTwitchVOD, + &osn::EnhancedBroadcastingSimpleStreaming::SetEnableTwitchVOD), + InstanceAccessor("audioEncoder", &osn::EnhancedBroadcastingSimpleStreaming::GetAudioEncoder, + &osn::EnhancedBroadcastingSimpleStreaming::SetAudioEncoder), + InstanceAccessor("useAdvanced", &osn::EnhancedBroadcastingSimpleStreaming::GetUseAdvanced, + &osn::EnhancedBroadcastingSimpleStreaming::SetUseAdvanced), + InstanceAccessor("customEncSettings", &osn::EnhancedBroadcastingSimpleStreaming::GetCustomEncSettings, + &osn::EnhancedBroadcastingSimpleStreaming::SetCustomEncSettings), + InstanceAccessor("signalHandler", &osn::EnhancedBroadcastingSimpleStreaming::GetSignalHandler, + &osn::EnhancedBroadcastingSimpleStreaming::SetSignalHandler), InstanceAccessor("delay", &osn::EnhancedBroadcastingSimpleStreaming::GetDelay, &osn::EnhancedBroadcastingSimpleStreaming::SetDelay), - InstanceAccessor("reconnect", &osn::EnhancedBroadcastingSimpleStreaming::GetReconnect, &osn::EnhancedBroadcastingSimpleStreaming::SetReconnect), + InstanceAccessor("reconnect", &osn::EnhancedBroadcastingSimpleStreaming::GetReconnect, + &osn::EnhancedBroadcastingSimpleStreaming::SetReconnect), InstanceAccessor("network", &osn::EnhancedBroadcastingSimpleStreaming::GetNetwork, &osn::EnhancedBroadcastingSimpleStreaming::SetNetwork), InstanceAccessor("video", &osn::EnhancedBroadcastingSimpleStreaming::GetCanvas, &osn::EnhancedBroadcastingSimpleStreaming::SetCanvas), - InstanceAccessor("additionalVideo", &osn::EnhancedBroadcastingSimpleStreaming::GetAdditionalCanvas, &osn::EnhancedBroadcastingSimpleStreaming::SetAdditionalCanvas), + InstanceAccessor("additionalVideo", &osn::EnhancedBroadcastingSimpleStreaming::GetAdditionalCanvas, + &osn::EnhancedBroadcastingSimpleStreaming::SetAdditionalCanvas), InstanceAccessor("droppedFrames", &osn::EnhancedBroadcastingSimpleStreaming::GetDroppedFrames, nullptr), InstanceAccessor("totalFrames", &osn::EnhancedBroadcastingSimpleStreaming::GetTotalFrames, nullptr), InstanceAccessor("kbitsPerSec", &osn::EnhancedBroadcastingSimpleStreaming::GetKBitsPerSec, nullptr), @@ -56,7 +66,8 @@ Napi::Object osn::EnhancedBroadcastingSimpleStreaming::Init(Napi::Env env, Napi: InstanceMethod("start", &osn::EnhancedBroadcastingSimpleStreaming::Start), InstanceMethod("stop", &osn::EnhancedBroadcastingSimpleStreaming::Stop), - StaticAccessor("legacySettings", &osn::EnhancedBroadcastingSimpleStreaming::GetLegacySettings, &osn::EnhancedBroadcastingSimpleStreaming::SetLegacySettings)}); + StaticAccessor("legacySettings", &osn::EnhancedBroadcastingSimpleStreaming::GetLegacySettings, + &osn::EnhancedBroadcastingSimpleStreaming::SetLegacySettings)}); exports.Set("EnhancedBroadcastingSimpleStreaming", func); osn::EnhancedBroadcastingSimpleStreaming::constructor = Napi::Persistent(func); @@ -65,7 +76,8 @@ Napi::Object osn::EnhancedBroadcastingSimpleStreaming::Init(Napi::Env env, Napi: return exports; } -osn::EnhancedBroadcastingSimpleStreaming::EnhancedBroadcastingSimpleStreaming(const Napi::CallbackInfo &info) : Napi::ObjectWrap(info) +osn::EnhancedBroadcastingSimpleStreaming::EnhancedBroadcastingSimpleStreaming(const Napi::CallbackInfo &info) + : Napi::ObjectWrap(info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); @@ -91,7 +103,8 @@ Napi::Value osn::EnhancedBroadcastingSimpleStreaming::Create(const Napi::Callbac if (!ValidateResponse(info, response)) return info.Env().Undefined(); - auto instance = osn::EnhancedBroadcastingSimpleStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + auto instance = + osn::EnhancedBroadcastingSimpleStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); return instance; } @@ -159,7 +172,8 @@ Napi::Value osn::EnhancedBroadcastingSimpleStreaming::GetLegacySettings(const Na if (!ValidateResponse(info, response)) return info.Env().Undefined(); - auto instance = osn::EnhancedBroadcastingSimpleStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); + auto instance = + osn::EnhancedBroadcastingSimpleStreaming::constructor.New({Napi::Number::New(info.Env(), static_cast(response[1].value_union.ui64))}); return instance; } diff --git a/obs-studio-client/source/enhanced-broadcasting-simple-streaming.hpp b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.hpp index 409e67809..00b60d49b 100644 --- a/obs-studio-client/source/enhanced-broadcasting-simple-streaming.hpp +++ b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.hpp @@ -21,8 +21,7 @@ #include "simple-streaming.hpp" namespace osn { -class EnhancedBroadcastingSimpleStreaming : public Napi::ObjectWrap, - public osn::SimpleStreamingBase { +class EnhancedBroadcastingSimpleStreaming : public Napi::ObjectWrap, public osn::SimpleStreamingBase { public: static Napi::FunctionReference constructor; static Napi::Object Init(Napi::Env env, Napi::Object exports); diff --git a/obs-studio-server/source/nodeobs_service.cpp b/obs-studio-server/source/nodeobs_service.cpp index 844c1745d..9ed51f404 100644 --- a/obs-studio-server/source/nodeobs_service.cpp +++ b/obs-studio-server/source/nodeobs_service.cpp @@ -1373,7 +1373,7 @@ bool OBS_service::startMultiTrackStreaming(StreamServiceId serviceId, bool dualS auto vod_track_mixer = IsVodTrackEnabled(services[serviceId]) ? std::optional{vodTrackIndex} : std::nullopt; - std::vector canvases; + std::vector canvases; canvases.push_back(videoInfo[serviceId]); if (dualStreamingMode) { if (serviceId == StreamServiceId::Main) { diff --git a/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.cpp b/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.cpp index 7f107bbb4..ec5e3e202 100644 --- a/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.cpp +++ b/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.cpp @@ -70,8 +70,10 @@ void osn::IEnhancedBroadcastingAdvancedStreaming::Register(ipc::server &srv) cls->register_function(std::make_shared("GetKBitsPerSec", std::vector{ipc::type::UInt64}, GetKBitsPerSec)); cls->register_function(std::make_shared("GetDataOutput", std::vector{ipc::type::UInt64}, GetDataOutput)); - cls->register_function(std::make_shared("GetAdditionalVideoCanvas", std::vector{ipc::type::UInt64}, GetAdditionalVideoCanvas)); - cls->register_function(std::make_shared("SetAdditionalVideoCanvas", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetAdditionalVideoCanvas)); + cls->register_function( + std::make_shared("GetAdditionalVideoCanvas", std::vector{ipc::type::UInt64}, GetAdditionalVideoCanvas)); + cls->register_function(std::make_shared("SetAdditionalVideoCanvas", std::vector{ipc::type::UInt64, ipc::type::UInt64}, + SetAdditionalVideoCanvas)); srv.register_collection(cls); } @@ -90,7 +92,8 @@ void osn::IEnhancedBroadcastingAdvancedStreaming::Create(void *data, const int64 void osn::IEnhancedBroadcastingAdvancedStreaming::Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } @@ -104,7 +107,8 @@ void osn::IEnhancedBroadcastingAdvancedStreaming::Destroy(void *data, const int6 void osn::IEnhancedBroadcastingAdvancedStreaming::Start(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } @@ -113,19 +117,17 @@ void osn::IEnhancedBroadcastingAdvancedStreaming::Start(void *data, const int64_ PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid service."); } - auto vod_track_mixer = (streaming->twitchVODSupported && streaming->enableTwitchVOD) ? - std::optional{streaming->twitchTrack} : - std::nullopt; + auto vod_track_mixer = (streaming->twitchVODSupported && streaming->enableTwitchVOD) ? std::optional{streaming->twitchTrack} : std::nullopt; streaming->StartEnhancedBroadcastingStream(vod_track_mixer); - rval.push_back(ipc::value((uint64_t)ErrorCode::Ok)); AUTO_DEBUG; } void osn::IEnhancedBroadcastingAdvancedStreaming::Stop(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } @@ -137,9 +139,11 @@ void osn::IEnhancedBroadcastingAdvancedStreaming::Stop(void *data, const int64_t AUTO_DEBUG; } -void osn::IEnhancedBroadcastingAdvancedStreaming::GetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval) +void osn::IEnhancedBroadcastingAdvancedStreaming::GetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, + std::vector &rval) { - EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } @@ -152,9 +156,11 @@ void osn::IEnhancedBroadcastingAdvancedStreaming::GetAdditionalVideoCanvas(void AUTO_DEBUG; } -void osn::IEnhancedBroadcastingAdvancedStreaming::SetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval) +void osn::IEnhancedBroadcastingAdvancedStreaming::SetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, + std::vector &rval) { - EnhancedBroadcastingAdvancedStreaming *streaming = static_cast(osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingAdvancedStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingAdvancedStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } diff --git a/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.hpp b/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.hpp index daa557262..b5400dc39 100644 --- a/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.hpp +++ b/obs-studio-server/source/osn-enhanced-broadcasting-advanced-streaming.hpp @@ -30,14 +30,11 @@ #include "nodeobs_configManager.hpp" - namespace osn { class EnhancedBroadcastingAdvancedStreaming : public EnhancedBroadcasting { public: - EnhancedBroadcastingAdvancedStreaming() : EnhancedBroadcasting() - { - } + EnhancedBroadcastingAdvancedStreaming() : EnhancedBroadcasting() {} ~EnhancedBroadcastingAdvancedStreaming() {} }; diff --git a/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.cpp b/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.cpp index f896028f9..681470add 100644 --- a/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.cpp +++ b/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.cpp @@ -67,8 +67,10 @@ void osn::IEnhancedBroadcastingSimpleStreaming::Register(ipc::server &srv) cls->register_function(std::make_shared("GetKBitsPerSec", std::vector{ipc::type::UInt64}, GetKBitsPerSec)); cls->register_function(std::make_shared("GetDataOutput", std::vector{ipc::type::UInt64}, GetDataOutput)); - cls->register_function(std::make_shared("GetAdditionalVideoCanvas", std::vector{ipc::type::UInt64}, GetAdditionalVideoCanvas)); - cls->register_function(std::make_shared("SetAdditionalVideoCanvas", std::vector{ipc::type::UInt64, ipc::type::UInt64}, SetAdditionalVideoCanvas)); + cls->register_function( + std::make_shared("GetAdditionalVideoCanvas", std::vector{ipc::type::UInt64}, GetAdditionalVideoCanvas)); + cls->register_function(std::make_shared("SetAdditionalVideoCanvas", std::vector{ipc::type::UInt64, ipc::type::UInt64}, + SetAdditionalVideoCanvas)); srv.register_collection(cls); } @@ -87,7 +89,8 @@ void osn::IEnhancedBroadcastingSimpleStreaming::Create(void *data, const int64_t void osn::IEnhancedBroadcastingSimpleStreaming::Destroy(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingSimpleStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } @@ -101,7 +104,8 @@ void osn::IEnhancedBroadcastingSimpleStreaming::Destroy(void *data, const int64_ void osn::IEnhancedBroadcastingSimpleStreaming::Start(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingSimpleStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } @@ -119,7 +123,8 @@ void osn::IEnhancedBroadcastingSimpleStreaming::Start(void *data, const int64_t void osn::IEnhancedBroadcastingSimpleStreaming::Stop(void *data, const int64_t id, const std::vector &args, std::vector &rval) { - EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingSimpleStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } @@ -131,9 +136,11 @@ void osn::IEnhancedBroadcastingSimpleStreaming::Stop(void *data, const int64_t i AUTO_DEBUG; } -void osn::IEnhancedBroadcastingSimpleStreaming::GetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval) +void osn::IEnhancedBroadcastingSimpleStreaming::GetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, + std::vector &rval) { - EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingSimpleStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } @@ -146,9 +153,11 @@ void osn::IEnhancedBroadcastingSimpleStreaming::GetAdditionalVideoCanvas(void *d AUTO_DEBUG; } -void osn::IEnhancedBroadcastingSimpleStreaming::SetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, std::vector &rval) +void osn::IEnhancedBroadcastingSimpleStreaming::SetAdditionalVideoCanvas(void *data, const int64_t id, const std::vector &args, + std::vector &rval) { - EnhancedBroadcastingSimpleStreaming *streaming = static_cast(osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); + EnhancedBroadcastingSimpleStreaming *streaming = static_cast( + osn::IEnhancedBroadcastingSimpleStreaming::Manager::GetInstance().find(args[0].value_union.ui64)); if (!streaming) { PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Streaming reference is not valid."); } diff --git a/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.hpp b/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.hpp index d3701d459..4320d366a 100644 --- a/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.hpp +++ b/obs-studio-server/source/osn-enhanced-broadcasting-simple-streaming.hpp @@ -30,14 +30,11 @@ #include "nodeobs_configManager.hpp" - namespace osn { class EnhancedBroadcastingSimpleStreaming : public EnhancedBroadcasting { public: - EnhancedBroadcastingSimpleStreaming() : EnhancedBroadcasting() - { - } + EnhancedBroadcastingSimpleStreaming() : EnhancedBroadcasting() {} ~EnhancedBroadcastingSimpleStreaming() {} }; diff --git a/obs-studio-server/source/osn-enhanced-broadcasting.hpp b/obs-studio-server/source/osn-enhanced-broadcasting.hpp index dd3561791..2cb43493b 100644 --- a/obs-studio-server/source/osn-enhanced-broadcasting.hpp +++ b/obs-studio-server/source/osn-enhanced-broadcasting.hpp @@ -24,116 +24,113 @@ namespace osn { -template -class EnhancedBroadcasting : public BaseStreaming { +template class EnhancedBroadcasting : public BaseStreaming { public: - EnhancedBroadcasting() : BaseStreaming() { - } - - virtual ~EnhancedBroadcasting() {} - - void StartEnhancedBroadcastingStream(std::optional vod_track_mixer = std::nullopt) { - blog(LOG_INFO, "StartEnhancedBroadcastingStream - service id: %s", obs_service_get_id(this->service)); - - if (vod_track_mixer.has_value()) { - blog(LOG_INFO, "vod_track_mixer: %d", vod_track_mixer.value()); - } - - const bool is_custom = strncmp("rtmp_custom", obs_service_get_type(this->service), 11) == 0; - - OBSDataAutoRelease settings = obs_service_get_settings(this->service); - const std::string key = obs_data_get_string(settings, "key"); - - const char *service_name = ""; - if (is_custom && obs_data_has_user_value(settings, "service_name")) { - service_name = obs_data_get_string(settings, "service_name"); - } else if (!is_custom) { - service_name = obs_data_get_string(settings, "service"); - } - - std::optional custom_rtmp_url; - auto server = obs_data_get_string(settings, "server"); - if (strcmp(server, "auto") != 0) { - custom_rtmp_url = server; - } - - auto service_custom_server = obs_data_get_bool(settings, "using_custom_server"); - if (custom_rtmp_url.has_value()) { - blog(LOG_INFO, "Using %s server '%s'", service_custom_server ? "custom " : "", custom_rtmp_url->c_str()); - } - - auto auto_config_url = osn::MultitrackVideoAutoConfigURL(this->service); - blog(LOG_INFO, "Auto config URL: %s", auto_config_url.c_str()); - - std::vector canvases{this->GetCanvas()}; - if (this->GetAdditionalVideoCanvas()) { - canvases.push_back(this->GetAdditionalVideoCanvas()); - } - - auto go_live_post = osn::constructGoLivePost(canvases, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); - std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); - if (!go_live_config.has_value()) { - throw std::runtime_error("startStreaming - go live config is empty"); - } - - const auto audio_bitrate = osn::GetMultitrackAudioBitrate(); - const auto audio_encoder_id = osn::GetSimpleAACEncoderForBitrate(audio_bitrate); - - std::vector audio_encoders; - std::shared_ptr video_encoder_group; - auto output = - osn::SetupOBSOutput("Enhanced Broadcasting", go_live_config.value(), audio_encoders, video_encoder_group, audio_encoder_id, 0, vod_track_mixer); - if (!output) { - throw std::runtime_error("startStreaming - failed to create multitrack output"); - } - - // Stream key is defined by config from Twitch - auto multitrack_video_service = osn::create_service(*go_live_config, std::nullopt, ""); - if (!multitrack_video_service) { - throw std::runtime_error("startStreaming - failed to create multitrack video service"); - } - - this->SetOutput(output.Get()); - obs_output_set_service(output, multitrack_video_service); - - // Register the BPM (Broadcast Performance Metrics) callback - obs_output_add_packet_callback(output, bpm_inject, NULL); - - this->StartOutput(); - - enhancedBroadcastingContext.emplace(EnhancedBroadcastOutputObjects{ - std::move(output), - video_encoder_group, - std::move(audio_encoders), - std::move(multitrack_video_service), - }); - } - - void StopEnhancedBroadcastingStream() { - blog(LOG_INFO, "StopEnhancedBroadcastingStream - service id: %s", obs_service_get_id(this->service)); - - auto output = this->GetOutput(); - if (!output) { - blog(LOG_WARNING, "StopEnhancedBroadcastingStream - empty output"); - return; - } - - obs_output_remove_packet_callback(output, bpm_inject, NULL); - bpm_destroy(output); - } - - obs_video_info *GetAdditionalVideoCanvas() { - return additionalVideoContext; - } - - void SetAdditionalVideoCanvas(obs_video_info *video) { - additionalVideoContext = video; - } - - void DeleteOutput() override { - BaseStreaming::DeleteOutput(); - enhancedBroadcastingContext.reset(); - } + EnhancedBroadcasting() : BaseStreaming() {} + + virtual ~EnhancedBroadcasting() {} + + void StartEnhancedBroadcastingStream(std::optional vod_track_mixer = std::nullopt) + { + blog(LOG_INFO, "StartEnhancedBroadcastingStream - service id: %s", obs_service_get_id(this->service)); + + if (vod_track_mixer.has_value()) { + blog(LOG_INFO, "vod_track_mixer: %d", vod_track_mixer.value()); + } + + const bool is_custom = strncmp("rtmp_custom", obs_service_get_type(this->service), 11) == 0; + + OBSDataAutoRelease settings = obs_service_get_settings(this->service); + const std::string key = obs_data_get_string(settings, "key"); + + const char *service_name = ""; + if (is_custom && obs_data_has_user_value(settings, "service_name")) { + service_name = obs_data_get_string(settings, "service_name"); + } else if (!is_custom) { + service_name = obs_data_get_string(settings, "service"); + } + + std::optional custom_rtmp_url; + auto server = obs_data_get_string(settings, "server"); + if (strcmp(server, "auto") != 0) { + custom_rtmp_url = server; + } + + auto service_custom_server = obs_data_get_bool(settings, "using_custom_server"); + if (custom_rtmp_url.has_value()) { + blog(LOG_INFO, "Using %s server '%s'", service_custom_server ? "custom " : "", custom_rtmp_url->c_str()); + } + + auto auto_config_url = osn::MultitrackVideoAutoConfigURL(this->service); + blog(LOG_INFO, "Auto config URL: %s", auto_config_url.c_str()); + + std::vector canvases{this->GetCanvas()}; + if (this->GetAdditionalVideoCanvas()) { + canvases.push_back(this->GetAdditionalVideoCanvas()); + } + + auto go_live_post = osn::constructGoLivePost(canvases, key, std::nullopt, std::nullopt, vod_track_mixer.has_value()); + std::optional go_live_config = osn::DownloadGoLiveConfig(auto_config_url, go_live_post); + if (!go_live_config.has_value()) { + throw std::runtime_error("startStreaming - go live config is empty"); + } + + const auto audio_bitrate = osn::GetMultitrackAudioBitrate(); + const auto audio_encoder_id = osn::GetSimpleAACEncoderForBitrate(audio_bitrate); + + std::vector audio_encoders; + std::shared_ptr video_encoder_group; + auto output = osn::SetupOBSOutput("Enhanced Broadcasting", go_live_config.value(), audio_encoders, video_encoder_group, audio_encoder_id, 0, + vod_track_mixer); + if (!output) { + throw std::runtime_error("startStreaming - failed to create multitrack output"); + } + + // Stream key is defined by config from Twitch + auto multitrack_video_service = osn::create_service(*go_live_config, std::nullopt, ""); + if (!multitrack_video_service) { + throw std::runtime_error("startStreaming - failed to create multitrack video service"); + } + + this->SetOutput(output.Get()); + obs_output_set_service(output, multitrack_video_service); + + // Register the BPM (Broadcast Performance Metrics) callback + obs_output_add_packet_callback(output, bpm_inject, NULL); + + this->StartOutput(); + + enhancedBroadcastingContext.emplace(EnhancedBroadcastOutputObjects{ + std::move(output), + video_encoder_group, + std::move(audio_encoders), + std::move(multitrack_video_service), + }); + } + + void StopEnhancedBroadcastingStream() + { + blog(LOG_INFO, "StopEnhancedBroadcastingStream - service id: %s", obs_service_get_id(this->service)); + + auto output = this->GetOutput(); + if (!output) { + blog(LOG_WARNING, "StopEnhancedBroadcastingStream - empty output"); + return; + } + + obs_output_remove_packet_callback(output, bpm_inject, NULL); + bpm_destroy(output); + } + + obs_video_info *GetAdditionalVideoCanvas() { return additionalVideoContext; } + + void SetAdditionalVideoCanvas(obs_video_info *video) { additionalVideoContext = video; } + + void DeleteOutput() override + { + BaseStreaming::DeleteOutput(); + enhancedBroadcastingContext.reset(); + } private: std::optional enhancedBroadcastingContext; diff --git a/obs-studio-server/source/osn-multitrack-video-configuration.cpp b/obs-studio-server/source/osn-multitrack-video-configuration.cpp index 6921c2ce6..41c712fb2 100644 --- a/obs-studio-server/source/osn-multitrack-video-configuration.cpp +++ b/obs-studio-server/source/osn-multitrack-video-configuration.cpp @@ -218,11 +218,8 @@ std::string MultitrackVideoAutoConfigURL(obs_service_t *service) return url; } -PostData constructGoLivePost(std::vector canvases, - std::string streamKey, - const std::optional &maximum_aggregate_bitrate, - const std::optional &maximum_video_tracks, - bool vod_track_enabled) +PostData constructGoLivePost(std::vector canvases, std::string streamKey, const std::optional &maximum_aggregate_bitrate, + const std::optional &maximum_video_tracks, bool vod_track_enabled) { PostData post_data{}; post_data.service = "IVS"; @@ -258,15 +255,13 @@ PostData constructGoLivePost(std::vector canvases, if (obs_get_video_info(&ovi)) preferences.composition_gpu_index = ovi.adapter; - - for (const auto& c : canvases) { + for (const auto &c : canvases) { if (!c) { blog(LOG_WARNING, "constructGoLivePost - empty canvas, skipping"); continue; } - preferences.canvases.emplace_back( - Canvas{c->output_width, c->output_height, c->base_width, c->base_height, {c->fps_num, c->fps_den}}); + preferences.canvases.emplace_back(Canvas{c->output_width, c->output_height, c->base_width, c->base_height, {c->fps_num, c->fps_den}}); } // TODO: remove diff --git a/obs-studio-server/source/osn-multitrack-video-configuration.hpp b/obs-studio-server/source/osn-multitrack-video-configuration.hpp index ca1a5cab6..4662a6744 100644 --- a/obs-studio-server/source/osn-multitrack-video-configuration.hpp +++ b/obs-studio-server/source/osn-multitrack-video-configuration.hpp @@ -15,7 +15,7 @@ std::string MultitrackVideoAutoConfigURL(obs_service_t *service); Config DownloadGoLiveConfig(std::string url, const PostData &post_data); -PostData constructGoLivePost(std::vector canvases, std::string streamKey, const std::optional &maximum_aggregate_bitrate, +PostData constructGoLivePost(std::vector canvases, std::string streamKey, const std::optional &maximum_aggregate_bitrate, const std::optional &maximum_video_tracks, bool vod_track_enabled); } \ No newline at end of file diff --git a/obs-studio-server/source/osn-multitrack-video.cpp b/obs-studio-server/source/osn-multitrack-video.cpp index 61435d9dd..c68e3dd95 100644 --- a/obs-studio-server/source/osn-multitrack-video.cpp +++ b/obs-studio-server/source/osn-multitrack-video.cpp @@ -5,7 +5,6 @@ #include "nodeobs_configManager.hpp" #include - namespace osn { bool IsMultitrackVideoEnabled() diff --git a/obs-studio-server/source/osn-output.cpp b/obs-studio-server/source/osn-output.cpp index 979290784..24b479c77 100644 --- a/obs-studio-server/source/osn-output.cpp +++ b/obs-studio-server/source/osn-output.cpp @@ -29,16 +29,12 @@ struct CallbackData { } // namespace -osn::Output::Output(const std::vector &signals) : - m_signals(signals) -{ -} +osn::Output::Output(const std::vector &signals) : m_signals(signals) {} -osn::Output::~Output() -{ -} +osn::Output::~Output() {} -void osn::Output::InitOutput(obs_output_t *output) { +void osn::Output::InitOutput(obs_output_t *output) +{ auto onStopped = [](void *data, calldata_t *) { osn::Output *context = reinterpret_cast(data); std::unique_lock lock(context->m_mtxOutputStop); @@ -149,36 +145,38 @@ void osn::Output::StartOutput() std::optional osn::Output::PopReceivedSignal() { - std::unique_lock ulock(m_signalsMtx); + std::unique_lock ulock(m_signalsMtx); if (m_signalsReceived.empty()) { return {}; } - const auto result = m_signalsReceived.front(); + const auto result = m_signalsReceived.front(); m_signalsReceived.pop(); - return result; + return result; } void osn::Output::SetCanvas(obs_video_info *canvas) { - m_canvas = canvas; + m_canvas = canvas; } obs_video_info *osn::Output::GetCanvas() { - return m_canvas; + return m_canvas; } const obs_video_info *osn::Output::GetCanvas() const { - return m_canvas; + return m_canvas; } -obs_output_t *osn::Output::GetOutput() { - return m_output; +obs_output_t *osn::Output::GetOutput() +{ + return m_output; } -const obs_output_t *osn::Output::GetOutput() const { - return m_output; +const obs_output_t *osn::Output::GetOutput() const +{ + return m_output; } \ No newline at end of file diff --git a/obs-studio-server/source/osn-output.hpp b/obs-studio-server/source/osn-output.hpp index 9aba541cd..f417dd68d 100644 --- a/obs-studio-server/source/osn-output.hpp +++ b/obs-studio-server/source/osn-output.hpp @@ -29,48 +29,47 @@ namespace osn { class Output { public: - struct SignalInfo { - std::string signal; - int code = 0; - std::string errorMessage; - }; + struct SignalInfo { + std::string signal; + int code = 0; + std::string errorMessage; + }; public: Output(const std::vector &signals); virtual ~Output(); - void ConnectSignals(); - void CreateOutput(const std::string &type, const std::string &name); - void SetOutput(obs_output_t *output); + void ConnectSignals(); + void CreateOutput(const std::string &type, const std::string &name); + void SetOutput(obs_output_t *output); virtual void DeleteOutput(); void StartOutput(); - // If no signal, will return an empty optional. Thread safe. - std::optional PopReceivedSignal(); + // If no signal, will return an empty optional. Thread safe. + std::optional PopReceivedSignal(); + void SetCanvas(obs_video_info *canvas); + obs_video_info *GetCanvas(); + const obs_video_info *GetCanvas() const; - void SetCanvas(obs_video_info *canvas); - obs_video_info *GetCanvas(); - const obs_video_info *GetCanvas() const; - - obs_output_t *GetOutput(); - const obs_output_t *GetOutput() const; + obs_output_t *GetOutput(); + const obs_output_t *GetOutput() const; private: - friend void OutputSignalCallback(void *data, calldata_t *params); + friend void OutputSignalCallback(void *data, calldata_t *params); - void InitOutput(obs_output_t *output); + void InitOutput(obs_output_t *output); - obs_video_info *m_canvas = nullptr; - obs_output_t *m_output = nullptr; + obs_video_info *m_canvas = nullptr; + obs_output_t *m_output = nullptr; - std::mutex m_signalsMtx; - std::queue m_signalsReceived; + std::mutex m_signalsMtx; + std::queue m_signalsReceived; std::condition_variable m_cvStop; std::mutex m_mtxOutputStop; - const std::vector m_signals; + const std::vector m_signals; }; } \ No newline at end of file diff --git a/obs-studio-server/source/osn-simple-recording.cpp b/obs-studio-server/source/osn-simple-recording.cpp index 13c2669fd..42bd29b46 100644 --- a/obs-studio-server/source/osn-simple-recording.cpp +++ b/obs-studio-server/source/osn-simple-recording.cpp @@ -387,7 +387,8 @@ void osn::ISimpleRecording::Start(void *data, const int64_t id, const std::vecto if (lastChar != '/' && lastChar != '\\') path += "/"; - path += GenerateSpecifiedFilename(format, recording->noSpace, recording->fileFormat, recording->GetCanvas()->base_width, recording->GetCanvas()->base_height); + path += GenerateSpecifiedFilename(format, recording->noSpace, recording->fileFormat, recording->GetCanvas()->base_width, + recording->GetCanvas()->base_height); if (!recording->overwrite) FindBestFilename(path, recording->noSpace); diff --git a/obs-studio-server/source/osn-streaming.cpp b/obs-studio-server/source/osn-streaming.cpp index 710ba1780..9bb37756f 100644 --- a/obs-studio-server/source/osn-streaming.cpp +++ b/obs-studio-server/source/osn-streaming.cpp @@ -33,7 +33,8 @@ osn::Streaming::~Streaming() } } -void osn::Streaming::DeleteOutput() { +void osn::Streaming::DeleteOutput() +{ Output::DeleteOutput(); } diff --git a/obs-studio-server/source/osn-streaming.hpp b/obs-studio-server/source/osn-streaming.hpp index 9afa67d53..b94109ec7 100644 --- a/obs-studio-server/source/osn-streaming.hpp +++ b/obs-studio-server/source/osn-streaming.hpp @@ -33,8 +33,7 @@ namespace osn { class Streaming : public Output { public: - Streaming() : Output({"start", "stop", "starting", "stopping", "activate", - "deactivate", "reconnect", "reconnect_success"}) + Streaming() : Output({"start", "stop", "starting", "stopping", "activate", "deactivate", "reconnect", "reconnect_success"}) { videoEncoder = nullptr; streamArchive = nullptr; From 2a373b3ecd02cc248a5ab23ed1fcb469608bcdad Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Wed, 28 Jan 2026 14:30:43 +0000 Subject: [PATCH 14/19] Skipping GPU-related tests on CI --- js/module.d.ts | 2 +- js/module.ts | 2 +- ...st_osn_enhanced_broadcasting_advanced_streaming.ts | 10 ++++++++++ ...test_osn_enhanced_broadcasting_simple_streaming.ts | 11 +++++++++++ tests/osn-tests/util/obs_handler.ts | 10 +++++++++- 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/js/module.d.ts b/js/module.d.ts index 31ea690c2..47e764f29 100644 --- a/js/module.d.ts +++ b/js/module.d.ts @@ -796,7 +796,7 @@ export interface IVideoEncoderFactory { create(id: string, name: string, settings?: ISettings): IVideoEncoder; } export interface IStreaming { - // Video encoder value is ignored in the Enhanced Broadcasting mode + // Video encoder value is ignored in the Enhanced Broadcasting mode, otherwise it should be set videoEncoder?: IVideoEncoder; service: IService; enforceServiceBitrate: boolean; diff --git a/js/module.ts b/js/module.ts index 4805a3408..01d0176cb 100644 --- a/js/module.ts +++ b/js/module.ts @@ -1707,7 +1707,7 @@ export interface IVideoEncoderFactory { } export interface IStreaming { - // Video encoder value is ignored in the Enhanced Broadcasting mode + // Video encoder value is ignored in the Enhanced Broadcasting mode, otherwise it should be set videoEncoder?: IVideoEncoder, service: IService, enforceServiceBitrate: boolean, diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts index 23e048f8b..5a2046688 100644 --- a/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts @@ -79,6 +79,11 @@ describe(testName, () => { this.skip(); } + if (obs.isCI()) { + // Skipping this test because CI server doesn't have GPU + this.skip(); + } + const stream = osn.EnhancedBroadcastingAdvancedStreamingFactory.create(); expect(stream).to.not.be.null; stream.service = osn.ServiceFactory.legacySettings; @@ -172,6 +177,11 @@ describe(testName, () => { this.skip(); } + if (obs.isCI()) { + // Skipping this test because CI server doesn't have GPU + this.skip(); + } + const stream = osn.EnhancedBroadcastingAdvancedStreamingFactory.create(); expect(stream).to.not.be.null; stream.service = osn.ServiceFactory.legacySettings; diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts index 7ceddef3c..86890d5e9 100644 --- a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts @@ -75,6 +75,12 @@ describe(testName, () => { if (obs.isDarwin()) { this.skip(); } + + if (obs.isCI()) { + // Skipping this test because CI server doesn't have GPU + this.skip(); + } + const stream = osn.EnhancedBroadcastingSimpleStreamingFactory.create(); // Note: no video encoder set, because it is automatically created by the enhanced broadcasting stream.service = osn.ServiceFactory.legacySettings; @@ -166,6 +172,11 @@ describe(testName, () => { this.skip(); } + if (obs.isCI()) { + // Skipping this test because CI server doesn't have GPU + this.skip(); + } + const stream = osn.EnhancedBroadcastingSimpleStreamingFactory.create(); expect(stream).to.not.be.null; stream.service = osn.ServiceFactory.legacySettings; diff --git a/tests/osn-tests/util/obs_handler.ts b/tests/osn-tests/util/obs_handler.ts index 12ae3af8d..2e4b426b8 100644 --- a/tests/osn-tests/util/obs_handler.ts +++ b/tests/osn-tests/util/obs_handler.ts @@ -82,6 +82,7 @@ export class OBSHandler { filterTypes: string[]; transitionTypes: string[]; os: string; + ci: boolean; userStreamKey: string; defaultVideoContext: osn.IVideo; @@ -90,6 +91,7 @@ export class OBSHandler { this.os = process.platform; this.osnTestName = testName; this.cacheUploader = new CacheUploader(testName, this.obsPath); + this.ci = process.env.CI === 'true'; this.startup(); if (needDefaultVideoContext) { this.createDefaultVideoContext(); @@ -308,7 +310,7 @@ export class OBSHandler { skipSource(inputType: string) { if (process.platform === 'darwin') { - if (inputType === 'browser_source' || + if (inputType === 'browser_source' || inputType === 'window_capture' || inputType === 'monitor_capture' || inputType === 'display_capture' || @@ -336,4 +338,10 @@ export class OBSHandler { // Wrapped this in a function- just incase we want to add more conditions later or disable only within the build agent. return this.os === 'darwin'; } + + // is the build server environment + isCI() + { + return this.ci; + } } From 0aa9291c7e752d85fecb0444ff2cd386da3ed0fd Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Wed, 28 Jan 2026 16:50:13 +0000 Subject: [PATCH 15/19] Added exceptions on stream start --- js/module.d.ts | 4 +- js/module.ts | 4 +- ...hanced-broadcasting-advanced-streaming.cpp | 2 +- ...enhanced-broadcasting-simple-streaming.cpp | 2 +- obs-studio-client/source/streaming.cpp | 3 +- .../source/osn-advanced-streaming.cpp | 4 ++ .../osn-multitrack-video-configuration.cpp | 22 ------ .../source/osn-simple-streaming.cpp | 4 ++ .../src/test_osn_advanced_streaming.ts | 57 +++++++++++++++ ...nhanced_broadcasting_advanced_streaming.ts | 5 +- ..._enhanced_broadcasting_simple_streaming.ts | 4 +- .../src/test_osn_simple_streaming.ts | 71 +++++++++++++++++++ 12 files changed, 148 insertions(+), 34 deletions(-) diff --git a/js/module.d.ts b/js/module.d.ts index 47e764f29..9066315bf 100644 --- a/js/module.d.ts +++ b/js/module.d.ts @@ -796,7 +796,7 @@ export interface IVideoEncoderFactory { create(id: string, name: string, settings?: ISettings): IVideoEncoder; } export interface IStreaming { - // Video encoder value is ignored in the Enhanced Broadcasting mode, otherwise it should be set + // Video encoder value is only ignored in the Enhanced Broadcasting mode, otherwise it should be set videoEncoder?: IVideoEncoder; service: IService; enforceServiceBitrate: boolean; @@ -806,7 +806,7 @@ export interface IStreaming { network: INetwork; video: IVideo; signalHandler: (signal: EOutputSignal) => void; - start(): void; + start(): void; // throws stop(force?: boolean): void; droppedFrames: number; totalFrames: number; diff --git a/js/module.ts b/js/module.ts index 01d0176cb..e87970a9f 100644 --- a/js/module.ts +++ b/js/module.ts @@ -1707,7 +1707,7 @@ export interface IVideoEncoderFactory { } export interface IStreaming { - // Video encoder value is ignored in the Enhanced Broadcasting mode, otherwise it should be set + // Video encoder value is ignored only in the Enhanced Broadcasting mode, otherwise it should be set videoEncoder?: IVideoEncoder, service: IService, enforceServiceBitrate: boolean, @@ -1717,7 +1717,7 @@ export interface IStreaming { network: INetwork, video: IVideo, signalHandler: (signal: EOutputSignal) => void, - start(): void, + start(): void, // throws stop(force?: boolean): void, droppedFrames: number; totalFrames: number; diff --git a/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp index 06a549e62..0744f9899 100644 --- a/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp +++ b/obs-studio-client/source/enhanced-broadcasting-advanced-streaming.cpp @@ -163,7 +163,7 @@ void osn::EnhancedBroadcastingAdvancedStreaming::SetAdditionalCanvas(const Napi: conn->call(className, "SetAdditionalVideoCanvas", {ipc::value(this->uid), ipc::value(canvas->canvasId)}); } -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + Napi::Value osn::EnhancedBroadcastingAdvancedStreaming::GetLegacySettings(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp index 641bbcb41..01d95d940 100644 --- a/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp +++ b/obs-studio-client/source/enhanced-broadcasting-simple-streaming.cpp @@ -160,7 +160,7 @@ void osn::EnhancedBroadcastingSimpleStreaming::SetAdditionalCanvas(const Napi::C conn->call(className, "SetAdditionalVideoCanvas", {ipc::value(this->uid), ipc::value(canvas->canvasId)}); } -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + Napi::Value osn::EnhancedBroadcastingSimpleStreaming::GetLegacySettings(const Napi::CallbackInfo &info) { auto conn = GetConnection(info); diff --git a/obs-studio-client/source/streaming.cpp b/obs-studio-client/source/streaming.cpp index c51b906a6..86c6c482b 100644 --- a/obs-studio-client/source/streaming.cpp +++ b/obs-studio-client/source/streaming.cpp @@ -290,7 +290,8 @@ void osn::Streaming::Start(const Napi::CallbackInfo &info) startWorker(info.Env(), this->cb.Value(), className, this->uid); - conn->call(className, "Start", {ipc::value(this->uid)}); + std::vector response = conn->call_synchronous_helper(className, "Start", {ipc::value(this->uid)}); + ValidateResponse(info, response); } void osn::Streaming::Stop(const Napi::CallbackInfo &info) diff --git a/obs-studio-server/source/osn-advanced-streaming.cpp b/obs-studio-server/source/osn-advanced-streaming.cpp index ac301c6c4..e01fc209d 100644 --- a/obs-studio-server/source/osn-advanced-streaming.cpp +++ b/obs-studio-server/source/osn-advanced-streaming.cpp @@ -377,6 +377,10 @@ void osn::IAdvancedStreaming::Start(void *data, const int64_t id, const std::vec PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid video encoder."); } + if (!streaming->GetCanvas()) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid main canvas."); + } + streaming->UpdateEncoders(); const char *type = OBS_service::getStreamOutputType(streaming->service); diff --git a/obs-studio-server/source/osn-multitrack-video-configuration.cpp b/obs-studio-server/source/osn-multitrack-video-configuration.cpp index 41c712fb2..a8d366ce4 100644 --- a/obs-studio-server/source/osn-multitrack-video-configuration.cpp +++ b/obs-studio-server/source/osn-multitrack-video-configuration.cpp @@ -264,28 +264,6 @@ PostData constructGoLivePost(std::vector canvases, std::string preferences.canvases.emplace_back(Canvas{c->output_width, c->output_height, c->base_width, c->base_height, {c->fps_num, c->fps_den}}); } - // TODO: remove - /* - const size_t contexts = obs_get_video_info_count(); - for (size_t i = 0; i < contexts; i++) { - if (obs_get_video_info_by_index(i, &ovi)) { - const bool isHorizontalCanvas = ovi.base_width >= ovi.base_height; - if (!dualStreamingMode && isHorizontalCanvas && serviceId != StreamServiceId::Main) { - blog(LOG_INFO, "constructGoLivePost - skipping horizontal canvas"); - continue; - } - - if (!dualStreamingMode && !isHorizontalCanvas && serviceId != StreamServiceId::Second) { - blog(LOG_INFO, "constructGoLivePost - skipping vertical canvas"); - continue; - } - - preferences.canvases.emplace_back( - Canvas{ovi.output_width, ovi.output_height, ovi.base_width, ovi.base_height, {ovi.fps_num, ovi.fps_den}}); - } - } - */ - obs_audio_info2 oai2; if (obs_get_audio_info2(&oai2)) { preferences.audio_samples_per_sec = oai2.samples_per_sec; diff --git a/obs-studio-server/source/osn-simple-streaming.cpp b/obs-studio-server/source/osn-simple-streaming.cpp index 442f1fef3..a5874fb51 100644 --- a/obs-studio-server/source/osn-simple-streaming.cpp +++ b/obs-studio-server/source/osn-simple-streaming.cpp @@ -353,6 +353,10 @@ void osn::ISimpleStreaming::Start(void *data, const int64_t id, const std::vecto PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid audio encoder."); } + if (!streaming->GetCanvas()) { + PRETTY_ERROR_RETURN(ErrorCode::InvalidReference, "Invalid main canvas."); + } + streaming->UpdateEncoders(); obs_encoder_set_audio(streaming->audioEncoder, obs_get_audio()); obs_output_set_audio_encoder(streaming->GetOutput(), streaming->audioEncoder, 0); diff --git a/tests/osn-tests/src/test_osn_advanced_streaming.ts b/tests/osn-tests/src/test_osn_advanced_streaming.ts index adc1f1d83..938e90a07 100644 --- a/tests/osn-tests/src/test_osn_advanced_streaming.ts +++ b/tests/osn-tests/src/test_osn_advanced_streaming.ts @@ -99,6 +99,63 @@ describe(testName, () => { osn.AdvancedStreamingFactory.destroy(stream); }); + it('Stream with missing video encoder', async function() { + if (obs.isDarwin()) { + this.skip(); + } + const stream = osn.AdvancedStreamingFactory.create(); + stream.service = osn.ServiceFactory.legacySettings; + stream.video = obs.defaultVideoContext; + const track1 = osn.AudioTrackFactory.create(160, 'track1'); + osn.AudioTrackFactory.setAtIndex(track1, 1); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + expect(() => { + stream.start(); + }).throw('Invalid video encoder'); + + + osn.AdvancedStreamingFactory.destroy(stream); + }); + + it('Stream with missing service', async function() { + if (obs.isDarwin()) { + this.skip(); + } + const stream = osn.AdvancedStreamingFactory.create(); + stream.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + stream.video = obs.defaultVideoContext; + const track1 = osn.AudioTrackFactory.create(160, 'track1'); + osn.AudioTrackFactory.setAtIndex(track1, 1); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + expect(() => { + stream.start(); + }).throw('Invalid service'); + + + osn.AdvancedStreamingFactory.destroy(stream); + }); + + it('Stream with missing canvas', async function() { + if (obs.isDarwin()) { + this.skip(); + } + const stream = osn.AdvancedStreamingFactory.create(); + stream.service = osn.ServiceFactory.legacySettings; + stream.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + const track1 = osn.AudioTrackFactory.create(160, 'track1'); + osn.AudioTrackFactory.setAtIndex(track1, 1); + + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + expect(() => { + stream.start(); + }).throw('Invalid main canvas'); + + osn.AdvancedStreamingFactory.destroy(stream); + }); + it('Start streaming', async function() { if (obs.isDarwin()) { this.skip(); diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts index 5a2046688..127ce4cb5 100644 --- a/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_advanced_streaming.ts @@ -71,7 +71,6 @@ describe(testName, () => { }); // TODO: more tests: - // - not set main canvas (error handling) // - vertical primary canvas it('Enhanced Broadcasting Advanced Streaming Single Canvas', async function() { @@ -80,7 +79,7 @@ describe(testName, () => { } if (obs.isCI()) { - // Skipping this test because CI server doesn't have GPU + // Skipping this test because CI server doesn't have GPU, but you can run it locally this.skip(); } @@ -178,7 +177,7 @@ describe(testName, () => { } if (obs.isCI()) { - // Skipping this test because CI server doesn't have GPU + // Skipping this test because CI server doesn't have GPU, but you can run it locally this.skip(); } diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts index 86890d5e9..776a87750 100644 --- a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts @@ -77,7 +77,7 @@ describe(testName, () => { } if (obs.isCI()) { - // Skipping this test because CI server doesn't have GPU + // Skipping this test because CI server doesn't have GPU, but you can run it locally this.skip(); } @@ -173,7 +173,7 @@ describe(testName, () => { } if (obs.isCI()) { - // Skipping this test because CI server doesn't have GPU + // Skipping this test because CI server doesn't have GPU, but you can run it locally this.skip(); } diff --git a/tests/osn-tests/src/test_osn_simple_streaming.ts b/tests/osn-tests/src/test_osn_simple_streaming.ts index 4ea648cf1..21e262a06 100644 --- a/tests/osn-tests/src/test_osn_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_simple_streaming.ts @@ -84,6 +84,77 @@ describe(testName, () => { osn.SimpleStreamingFactory.destroy(stream); }); + it('Stream with missing video encoder', async function() { + if (obs.isDarwin()) { + this.skip(); + } + const stream = osn.SimpleStreamingFactory.create(); + stream.service = osn.ServiceFactory.legacySettings; + stream.video = obs.defaultVideoContext; + stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + expect(() => { + stream.start(); + }).throw('Invalid video encoder'); + + + osn.SimpleStreamingFactory.destroy(stream); + }); + + it('Stream with missing audio encoder', async function() { + if (obs.isDarwin()) { + this.skip(); + } + const stream = osn.SimpleStreamingFactory.create(); + stream.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + stream.service = osn.ServiceFactory.legacySettings; + stream.video = obs.defaultVideoContext; + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + expect(() => { + stream.start(); + }).throw('Invalid audio encoder'); + + + osn.SimpleStreamingFactory.destroy(stream); + }); + + it('Stream with missing service', async function() { + if (obs.isDarwin()) { + this.skip(); + } + const stream = osn.SimpleStreamingFactory.create(); + stream.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + stream.video = obs.defaultVideoContext; + stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + expect(() => { + stream.start(); + }).throw('Invalid service'); + + + osn.SimpleStreamingFactory.destroy(stream); + }); + + it('Stream with missing canvas', async function() { + if (obs.isDarwin()) { + this.skip(); + } + const stream = osn.SimpleStreamingFactory.create(); + stream.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); + stream.service = osn.ServiceFactory.legacySettings; + stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.signalHandler = (signal) => {obs.signals.push(signal)}; + + expect(() => { + stream.start(); + }).throw('Invalid main canvas'); + + osn.SimpleStreamingFactory.destroy(stream); + }); + it('Start streaming', async function() { if (obs.isDarwin()) { this.skip(); From 3ca6806ab2cefe5692ca96a8f1ae1ec5ae44679c Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Wed, 18 Feb 2026 13:42:51 +0000 Subject: [PATCH 16/19] Tests fix --- ...est_osn_enhanced_broadcasting_simple_streaming.ts | 4 ++-- tests/osn-tests/src/test_osn_simple_streaming.ts | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts index 776a87750..4223bc061 100644 --- a/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_enhanced_broadcasting_simple_streaming.ts @@ -88,7 +88,7 @@ describe(testName, () => { stream.reconnect = osn.ReconnectFactory.create(); stream.network = osn.NetworkFactory.create(); stream.video = obs.defaultVideoContext; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-1"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; stream.start(); @@ -186,7 +186,7 @@ describe(testName, () => { stream.network = osn.NetworkFactory.create(); stream.video = obs.defaultVideoContext; stream.additionalVideo = secondContext; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-2"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; stream.start(); diff --git a/tests/osn-tests/src/test_osn_simple_streaming.ts b/tests/osn-tests/src/test_osn_simple_streaming.ts index 88997cc28..10a8b188f 100644 --- a/tests/osn-tests/src/test_osn_simple_streaming.ts +++ b/tests/osn-tests/src/test_osn_simple_streaming.ts @@ -91,7 +91,7 @@ describe(testName, () => { const stream = osn.SimpleStreamingFactory.create(); stream.service = osn.ServiceFactory.legacySettings; stream.video = obs.defaultVideoContext; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-1"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; expect(() => { @@ -127,7 +127,7 @@ describe(testName, () => { const stream = osn.SimpleStreamingFactory.create(); stream.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); stream.video = obs.defaultVideoContext; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-2"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; expect(() => { @@ -145,7 +145,7 @@ describe(testName, () => { const stream = osn.SimpleStreamingFactory.create(); stream.videoEncoder = osn.VideoEncoderFactory.create('obs_x264', 'video-encoder'); stream.service = osn.ServiceFactory.legacySettings; - stream.audioEncoder = osn.AudioEncoderFactory.create(); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-3"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; expect(() => { @@ -170,7 +170,7 @@ describe(testName, () => { stream.network = osn.NetworkFactory.create(); stream.video = obs.defaultVideoContext; - stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-1"); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-4"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; stream.start(); @@ -261,7 +261,7 @@ describe(testName, () => { stream.network = osn.NetworkFactory.create(); stream.video = obs.defaultVideoContext; - stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-2"); + stream.audioEncoder = osn.AudioEncoderFactory.create("ffmpeg_aac", "audio-encoder-simple-streaming-5"); stream.signalHandler = (signal) => {obs.signals.push(signal)}; stream.start(); @@ -282,7 +282,7 @@ describe(testName, () => { expect(signalInfo.code).to.equal(-3, GetErrorMessage(ETestErrorMsg.StreamOutput)); stream.service.update({ key: obs.userStreamKey }); - + const videoEncoder = stream.videoEncoder; const audioEncoder = stream.audioEncoder; osn.SimpleStreamingFactory.destroy(stream); From 33831334fbda242fbd650e7ff7a17fb00f3dfbf0 Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Wed, 18 Feb 2026 18:43:36 +0000 Subject: [PATCH 17/19] Introduced Connection Epoch concept to not finalize stale objects --- obs-studio-client/source/audio-encoder.cpp | 22 ++++++++++++++++------ obs-studio-client/source/audio-encoder.hpp | 3 ++- obs-studio-client/source/controller.cpp | 9 +++++++++ obs-studio-client/source/controller.hpp | 5 +++++ obs-studio-client/source/delay.cpp | 18 ++++++++++++++---- obs-studio-client/source/delay.hpp | 3 ++- obs-studio-client/source/network.cpp | 16 +++++++++++++--- obs-studio-client/source/network.hpp | 3 ++- obs-studio-client/source/reconnect.cpp | 18 ++++++++++++++---- obs-studio-client/source/reconnect.hpp | 3 ++- obs-studio-client/source/video-encoder.cpp | 20 +++++++++++++++----- obs-studio-client/source/video-encoder.hpp | 3 ++- 12 files changed, 96 insertions(+), 27 deletions(-) diff --git a/obs-studio-client/source/audio-encoder.cpp b/obs-studio-client/source/audio-encoder.cpp index d13e626e1..d12ffbab2 100644 --- a/obs-studio-client/source/audio-encoder.cpp +++ b/obs-studio-client/source/audio-encoder.cpp @@ -48,6 +48,7 @@ osn::AudioEncoder::AudioEncoder(const Napi::CallbackInfo &info) : Napi::ObjectWr size_t length = info.Length(); this->uid = 0; this->encoderInitialized = false; + this->connectionEpoch = 0; if (length <= 0 || !info[0].IsNumber()) { Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); @@ -56,6 +57,7 @@ osn::AudioEncoder::AudioEncoder(const Napi::CallbackInfo &info) : Napi::ObjectWr this->uid = (uint64_t)info[0].ToNumber().Int64Value(); this->encoderInitialized = true; + this->connectionEpoch = Controller::GetInstance().GetConnectionEpoch(); } Napi::Value osn::AudioEncoder::Create(const Napi::CallbackInfo &info) @@ -87,15 +89,23 @@ void osn::AudioEncoder::Finalize(Napi::Env env) if (!this->encoderInitialized) return; - auto conn = GetConnection(env); - if (!conn) + // If OBS was restarted/disconnected, skip IPC cleanup for this stale wrapper. + if (this->connectionEpoch != Controller::GetInstance().GetConnectionEpoch()) { + this->encoderInitialized = false; + this->uid = UINT64_MAX; return; + } - std::vector response = conn->call_synchronous_helper("AudioEncoder", "Finalize", {ipc::value(this->uid)}); + auto conn = Controller::GetInstance().GetConnection(); + if (!conn) { + this->encoderInitialized = false; + this->uid = UINT64_MAX; + return; + } + + conn->call_synchronous_helper("AudioEncoder", "Finalize", {ipc::value(this->uid)}); this->encoderInitialized = false; this->uid = UINT64_MAX; - if (!ValidateResponse(env, response)) - return; } void osn::AudioEncoder::Release(const Napi::CallbackInfo &info) @@ -160,4 +170,4 @@ void osn::AudioEncoder::SetBitrate(const Napi::CallbackInfo &info, const Napi::V return; conn->call("AudioEncoder", "SetBitrate", {ipc::value(this->uid), ipc::value(value.ToNumber().Uint32Value())}); -} \ No newline at end of file +} diff --git a/obs-studio-client/source/audio-encoder.hpp b/obs-studio-client/source/audio-encoder.hpp index 99e0141e2..609d58cc5 100644 --- a/obs-studio-client/source/audio-encoder.hpp +++ b/obs-studio-client/source/audio-encoder.hpp @@ -25,6 +25,7 @@ class AudioEncoder : public Napi::ObjectWrap { public: uint64_t uid; bool encoderInitialized; + uint64_t connectionEpoch; public: static Napi::FunctionReference constructor; @@ -40,4 +41,4 @@ class AudioEncoder : public Napi::ObjectWrap { Napi::Value GetBitrate(const Napi::CallbackInfo &info); void SetBitrate(const Napi::CallbackInfo &info, const Napi::Value &value); }; -} \ No newline at end of file +} diff --git a/obs-studio-client/source/controller.cpp b/obs-studio-client/source/controller.cpp index ee7dd2ccc..aa35cb11c 100644 --- a/obs-studio-client/source/controller.cpp +++ b/obs-studio-client/source/controller.cpp @@ -372,6 +372,8 @@ std::shared_ptr Controller::connect(const std::string &uri) } m_connection = cl; + // Bump epoch on successful connect to invalidate stale native wrappers. + m_connectionEpoch.fetch_add(1, std::memory_order_relaxed); return m_connection; } @@ -382,6 +384,8 @@ void Controller::disconnect() m_isServer = false; } m_connection = nullptr; + // Bump epoch on disconnect so finalizers skip IPC calls for old sessions. + m_connectionEpoch.fetch_add(1, std::memory_order_relaxed); } DWORD Controller::GetExitCode() @@ -394,6 +398,11 @@ std::shared_ptr Controller::GetConnection() return m_connection; } +uint64_t Controller::GetConnectionEpoch() const +{ + return m_connectionEpoch.load(std::memory_order_relaxed); +} + Napi::Value js_setServerPath(const Napi::CallbackInfo &info) { if (info.Length() == 0) { diff --git a/obs-studio-client/source/controller.hpp b/obs-studio-client/source/controller.hpp index 577b65196..818d79c7e 100644 --- a/obs-studio-client/source/controller.hpp +++ b/obs-studio-client/source/controller.hpp @@ -17,6 +17,7 @@ ******************************************************************************/ #pragma once +#include #include #include #include @@ -52,9 +53,13 @@ class Controller { void disconnect(); std::shared_ptr GetConnection(); + uint64_t GetConnectionEpoch() const; private: bool m_isServer = false; std::shared_ptr m_connection; ipc::ProcessInfo procId; + // Monotonic "epoch" for the IPC connection lifecycle. Helps to detect stale wrappers + // after disconnect/reconnect so finalizers can safely no-op. + std::atomic m_connectionEpoch{0}; }; diff --git a/obs-studio-client/source/delay.cpp b/obs-studio-client/source/delay.cpp index 0fb532ff8..8beb28caa 100644 --- a/obs-studio-client/source/delay.cpp +++ b/obs-studio-client/source/delay.cpp @@ -46,6 +46,7 @@ osn::Delay::Delay(const Napi::CallbackInfo &info) : Napi::ObjectWrap Napi::HandleScope scope(env); size_t length = info.Length(); this->uid = 0; + this->connectionEpoch = 0; if (length <= 0 || !info[0].IsNumber()) { Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); @@ -53,6 +54,7 @@ osn::Delay::Delay(const Napi::CallbackInfo &info) : Napi::ObjectWrap } this->uid = (uint64_t)info[0].ToNumber().Int64Value(); + this->connectionEpoch = Controller::GetInstance().GetConnectionEpoch(); } Napi::Value osn::Delay::Create(const Napi::CallbackInfo &info) @@ -73,12 +75,20 @@ Napi::Value osn::Delay::Create(const Napi::CallbackInfo &info) void osn::Delay::Finalize(Napi::Env env) { - auto conn = GetConnection(env); - if (!conn) + if (this->uid == UINT64_MAX) return; - if (this->uid == UINT64_MAX) + // If OBS was restarted/disconnected, skip IPC cleanup for this stale wrapper. + if (this->connectionEpoch != Controller::GetInstance().GetConnectionEpoch()) { + this->uid = UINT64_MAX; + return; + } + + auto conn = Controller::GetInstance().GetConnection(); + if (!conn) { + this->uid = UINT64_MAX; return; + } conn->call_synchronous_helper("Delay", "Destroy", {ipc::value(this->uid)}); @@ -152,4 +162,4 @@ void osn::Delay::SetPreserveDelay(const Napi::CallbackInfo &info, const Napi::Va return; conn->call_synchronous_helper("Delay", "SetPreserveDelay", {ipc::value(this->uid), ipc::value(value.ToBoolean().Value())}); -} \ No newline at end of file +} diff --git a/obs-studio-client/source/delay.hpp b/obs-studio-client/source/delay.hpp index 13092f19c..472e637a2 100644 --- a/obs-studio-client/source/delay.hpp +++ b/obs-studio-client/source/delay.hpp @@ -23,6 +23,7 @@ namespace osn { class Delay : public Napi::ObjectWrap { public: uint64_t uid; + uint64_t connectionEpoch; public: static Napi::FunctionReference constructor; @@ -38,4 +39,4 @@ class Delay : public Napi::ObjectWrap { Napi::Value GetPreserveDelay(const Napi::CallbackInfo &info); void SetPreserveDelay(const Napi::CallbackInfo &info, const Napi::Value &value); }; -} \ No newline at end of file +} diff --git a/obs-studio-client/source/network.cpp b/obs-studio-client/source/network.cpp index 47971b6c8..0df83e801 100644 --- a/obs-studio-client/source/network.cpp +++ b/obs-studio-client/source/network.cpp @@ -49,6 +49,7 @@ osn::Network::Network(const Napi::CallbackInfo &info) : Napi::ObjectWrapuid = UINT64_MAX; + this->connectionEpoch = 0; if (length <= 0 || !info[0].IsNumber()) { Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); @@ -56,6 +57,7 @@ osn::Network::Network(const Napi::CallbackInfo &info) : Napi::ObjectWrapuid = (uint64_t)info[0].ToNumber().Int64Value(); + this->connectionEpoch = Controller::GetInstance().GetConnectionEpoch(); } Napi::Value osn::Network::Create(const Napi::CallbackInfo &info) @@ -76,12 +78,20 @@ Napi::Value osn::Network::Create(const Napi::CallbackInfo &info) void osn::Network::Finalize(Napi::Env env) { - auto conn = GetConnection(env); - if (!conn) + if (this->uid == UINT64_MAX) return; - if (this->uid == UINT64_MAX) + // If OBS was restarted/disconnected, skip IPC cleanup for this stale wrapper. + if (this->connectionEpoch != Controller::GetInstance().GetConnectionEpoch()) { + this->uid = UINT64_MAX; return; + } + + auto conn = Controller::GetInstance().GetConnection(); + if (!conn) { + this->uid = UINT64_MAX; + return; + } conn->call_synchronous_helper("Network", "Destroy", {ipc::value(this->uid)}); diff --git a/obs-studio-client/source/network.hpp b/obs-studio-client/source/network.hpp index fbd343cbe..e21619e01 100644 --- a/obs-studio-client/source/network.hpp +++ b/obs-studio-client/source/network.hpp @@ -23,6 +23,7 @@ namespace osn { class Network : public Napi::ObjectWrap { public: uint64_t uid; + uint64_t connectionEpoch; public: static Napi::FunctionReference constructor; @@ -41,4 +42,4 @@ class Network : public Napi::ObjectWrap { Napi::Value GetEnableLowLatency(const Napi::CallbackInfo &info); void SetEnableLowLatency(const Napi::CallbackInfo &info, const Napi::Value &value); }; -} \ No newline at end of file +} diff --git a/obs-studio-client/source/reconnect.cpp b/obs-studio-client/source/reconnect.cpp index 95ecdb1be..9f29e9c31 100644 --- a/obs-studio-client/source/reconnect.cpp +++ b/obs-studio-client/source/reconnect.cpp @@ -46,6 +46,7 @@ osn::Reconnect::Reconnect(const Napi::CallbackInfo &info) : Napi::ObjectWrapuid = 0; + this->connectionEpoch = 0; if (length <= 0 || !info[0].IsNumber()) { Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); @@ -53,6 +54,7 @@ osn::Reconnect::Reconnect(const Napi::CallbackInfo &info) : Napi::ObjectWrapuid = (uint64_t)info[0].ToNumber().Int64Value(); + this->connectionEpoch = Controller::GetInstance().GetConnectionEpoch(); } Napi::Value osn::Reconnect::Create(const Napi::CallbackInfo &info) @@ -73,11 +75,19 @@ Napi::Value osn::Reconnect::Create(const Napi::CallbackInfo &info) void osn::Reconnect::Finalize(Napi::Env env) { - auto conn = GetConnection(env); - if (!conn) - return; - if (this->uid != UINT64_MAX) { + // If OBS was restarted/disconnected, skip IPC cleanup for this stale wrapper. + if (this->connectionEpoch != Controller::GetInstance().GetConnectionEpoch()) { + this->uid = UINT64_MAX; + return; + } + + auto conn = Controller::GetInstance().GetConnection(); + if (!conn) { + this->uid = UINT64_MAX; + return; + } + conn->call_synchronous_helper("Reconnect", "Destroy", {ipc::value(this->uid)}); this->uid = UINT64_MAX; } diff --git a/obs-studio-client/source/reconnect.hpp b/obs-studio-client/source/reconnect.hpp index fed6871ef..93c798ea4 100644 --- a/obs-studio-client/source/reconnect.hpp +++ b/obs-studio-client/source/reconnect.hpp @@ -23,6 +23,7 @@ namespace osn { class Reconnect : public Napi::ObjectWrap { public: uint64_t uid; + uint64_t connectionEpoch; public: static Napi::FunctionReference constructor; @@ -39,4 +40,4 @@ class Reconnect : public Napi::ObjectWrap { Napi::Value GetMaxRetries(const Napi::CallbackInfo &info); void SetMaxRetries(const Napi::CallbackInfo &info, const Napi::Value &value); }; -} \ No newline at end of file +} diff --git a/obs-studio-client/source/video-encoder.cpp b/obs-studio-client/source/video-encoder.cpp index 34c4e6a05..8e4cd187d 100644 --- a/obs-studio-client/source/video-encoder.cpp +++ b/obs-studio-client/source/video-encoder.cpp @@ -55,6 +55,7 @@ osn::VideoEncoder::VideoEncoder(const Napi::CallbackInfo &info) : Napi::ObjectWr size_t length = info.Length(); this->uid = UINT64_MAX; this->encoderInitialized = false; + this->connectionEpoch = 0; if (length <= 0 || !info[0].IsNumber()) { Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException(); @@ -63,6 +64,7 @@ osn::VideoEncoder::VideoEncoder(const Napi::CallbackInfo &info) : Napi::ObjectWr this->uid = (uint64_t)info[0].ToNumber().Int64Value(); this->encoderInitialized = true; + this->connectionEpoch = Controller::GetInstance().GetConnectionEpoch(); } Napi::Value osn::VideoEncoder::Create(const Napi::CallbackInfo &info) @@ -99,15 +101,23 @@ void osn::VideoEncoder::Finalize(Napi::Env env) if (!this->encoderInitialized) return; - auto conn = GetConnection(env); - if (!conn) + // If OBS was restarted/disconnected, skip IPC cleanup for this stale wrapper. + if (this->connectionEpoch != Controller::GetInstance().GetConnectionEpoch()) { + this->encoderInitialized = false; + this->uid = UINT64_MAX; + return; + } + + auto conn = Controller::GetInstance().GetConnection(); + if (!conn) { + this->encoderInitialized = false; + this->uid = UINT64_MAX; return; + } - std::vector response = conn->call_synchronous_helper("VideoEncoder", "Finalize", {ipc::value(this->uid)}); + conn->call_synchronous_helper("VideoEncoder", "Finalize", {ipc::value(this->uid)}); this->encoderInitialized = false; this->uid = UINT64_MAX; - if (!ValidateResponse(env, response)) - return; } Napi::Value osn::VideoEncoder::GetTypes(const Napi::CallbackInfo &info) diff --git a/obs-studio-client/source/video-encoder.hpp b/obs-studio-client/source/video-encoder.hpp index 62c553474..a057794b6 100644 --- a/obs-studio-client/source/video-encoder.hpp +++ b/obs-studio-client/source/video-encoder.hpp @@ -25,6 +25,7 @@ class VideoEncoder : public Napi::ObjectWrap { public: uint64_t uid; bool encoderInitialized; + uint64_t connectionEpoch; public: static Napi::FunctionReference constructor; @@ -47,4 +48,4 @@ class VideoEncoder : public Napi::ObjectWrap { Napi::Value GetProperties(const Napi::CallbackInfo &info); Napi::Value GetSettings(const Napi::CallbackInfo &info); }; -} \ No newline at end of file +} From e61ac277e09a2adc5af61fe257f495998f458bdd Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko Date: Thu, 19 Feb 2026 12:35:46 +0000 Subject: [PATCH 18/19] Minor comment update --- obs-studio-client/source/controller.cpp | 4 +++- obs-studio-client/source/controller.hpp | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/obs-studio-client/source/controller.cpp b/obs-studio-client/source/controller.cpp index aa35cb11c..3d78408c1 100644 --- a/obs-studio-client/source/controller.cpp +++ b/obs-studio-client/source/controller.cpp @@ -372,7 +372,9 @@ std::shared_ptr Controller::connect(const std::string &uri) } m_connection = cl; - // Bump epoch on successful connect to invalidate stale native wrappers. + // Note: this increment in the current implementation is not strictly required for the basic + // stale-after-reconnect case, but it is a useful safe guard for a possible future expansion. + // Bump epoch on successful connect to invalidate stale native wrappers, if any. m_connectionEpoch.fetch_add(1, std::memory_order_relaxed); return m_connection; } diff --git a/obs-studio-client/source/controller.hpp b/obs-studio-client/source/controller.hpp index 818d79c7e..8827e2a2d 100644 --- a/obs-studio-client/source/controller.hpp +++ b/obs-studio-client/source/controller.hpp @@ -53,6 +53,8 @@ class Controller { void disconnect(); std::shared_ptr GetConnection(); + + // Used to identify stale connections and properly implement Node.js finalizers uint64_t GetConnectionEpoch() const; private: From 49f9ae26338296fbe38da01aa7a5e085345bc9e6 Mon Sep 17 00:00:00 2001 From: mhoyer-streamlabs Date: Tue, 24 Feb 2026 14:07:32 -0600 Subject: [PATCH 19/19] Set video mix when duplicating encoder --- obs-studio-server/source/osn-simple-recording.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/obs-studio-server/source/osn-simple-recording.cpp b/obs-studio-server/source/osn-simple-recording.cpp index 5a739818a..c57fb6f9a 100644 --- a/obs-studio-server/source/osn-simple-recording.cpp +++ b/obs-studio-server/source/osn-simple-recording.cpp @@ -319,6 +319,7 @@ void osn::SimpleRecording::UpdateEncoders() if (obs_get_multiple_rendering()) { obs_encoder_t *videoEncDup = osn::IRecording::duplicate_encoder(videoEncoder); videoEncoder = videoEncDup; + obs_encoder_set_video_mix(videoEncoder, obs_video_mix_get(this->GetCanvas(), OBS_RECORDING_VIDEO_RENDERING)); } break; }

Wih*$X9z1QOmt z@p>8r4NKvCejScN25udwZQD{#(}lZKYdD}U47-Mh-wf zLo`FOeTJeB)cTspxa_%0nC!cm;_!1^)u04hcI}e#5~x;I@69vElI2YRvTAa(V2y9X zSi_2jQknWLPNNCuc|JlaDa>j4&vt)wVKnx^!P-dl^7{Z@^s*MPc26cJpU)BtdT(N3 zF%)LwdCVLuvLMLR6`ssnw5)s@+Yq;^02YLsKIig_OdnVj%qn5cDd%|NOPe%ph8R-> zv5YMYj2pjUw6gSzOP|Npjl8o+Om-7TTycAB)Bz{S*0S1wivGiL*w8V{&Dr5JZomH#clU(9WW$!fmO*< zncRVXg6|9%4sp!3c)T_m;%bS-jiW#qZoAaWev?R1B5#RsmM{k^;lg(r>G< z{C2NsMMWI5_Zt5GrXKL&cd)53^1pl5l;~;;G$+^hpiZJv`&%^*nEf=u&a`bDL%%6o zCUK@-iqO%>l;n@Z%Ftt9jaW60mKGUxX>m6Kx^y-!IOGSu;Oe@B?$pbrfj8H^-xPig z7tVAavl-bg>|;W9Hp3c!v;?Mozp}W25st26;CMs24~F)8W&(D(gi;XMIhKzCwEo9q zC$v?ta3N7FE3>~-o4r?g;Wp3={v;LgC>q=(Y4ivska3v_#4SddQEcpPPL1fB{rA zAG@l@CuaGg?R?BU0R3vzRTTzlF)K1?gc2#V$srK_ovA!tgn)33JKA+6`+Q35zY z37>^<8g_r_$N&JiZB<@LxWDAO8~Cpb2gf(gUNO7@V1 z({d>*>X8qgz8$z&IQ+E5#^-k46n9Tcm|4qzk$eL}Jx~eitcUxu`E)f{=7kaU#w{5& z#LpT)O%x>g8+f476~tTEwD2->iG1c41P5^0xFseOI90^sWS9>$g`lm%OfX*p&y501 z!URUDb?TgKkPh5*vp7N*w8_{il8(B<_##w{ta?t2k-_x#DLq=c;CD6mXJpec09Z1i zC^^piff)OTyA6A&SOO{boJCTpev_VOY`? zR{w#z=Xm|7=ImV5oCtt;zHXkeSaRVJJS_?{-G#)mZktNAjLMs;*XMlJJui) zpImkJz6Bow0dxhOTPn24>6G2-uguu2HDP1}EIOFjB~#eRpgz#*G~J;3=J{aHc3?re zjtf%$jShZap&}njQ&RYJokgOx~Q!DMwIb#D2pj^>mQeUi-qG6c)fIyTJ1FH z=7s0kg{pDQjHV@_)uG<^CzeNb2a7I6X?aJDV6RG94vjGsIs@ib{k|lr>ZvSDAh@&? z0n*oRj1&ZX9^(~l4syRhOb)vVOF9K`rwXZb&+7gGzBu*B?BM5CykvvhSI^&Y$DHj7 zX})5s%*=j_IUD86ZpedDP!nnWO%$!4c_b@~k>jG2)QO$v zZ3;n|0%(1>*+GUauZDMUoi!=b8bQsuJz%3ebrP&A)ykeA@VGCs4sJ4ZrGVjMsLIk0 zS}?}=ZK<~{2vXzaVgvMD&?WhW_nJ_0h`K=2)l@a=~u!mBo{;e`x zb$=KdYSABdVHn1BCzT8WfmLrva5SBiF|<=p`OJaE53hX2tS-V@GG6?9o&9bs^LRDCRwO>cEAVo@$3eOyEgc_J)6F3!{$YF#j}v<=FHHc89YpEb;hDQBw^l>Tj>}3pEu^0{~(18qly~&-Ixd#JM%U zy*{mOmo?y*gsHB@ab1DvzJENx(Em%(uSewqLMuA@RjT6FT+y5G*1)2`#4}6c#Tn;Z z2ZiuKV%dr0Ue7jGGg9ZN(u)DJ$|7cZQr!n<8$o-)Oj{R`k;u6v{w_9hrpI=*`AK$q z2@xLVM8Bn(0HF?OC~QE>5RuDQ)~?odZy=~XUlI?svZ`JiYPFfyjfk_!x{hHw;`sUv z_0taG!dSGr8~*vAyk>f@lHBOu8V-5T`dUezEXbC)5A{#+P9i+_!~eXihy@}J*Il_> z-1KN6Iffxu&&R+Z(spf(Q0~T>g<935ngKztqtO@u8I=&+or4h=Z{9RqW{=}eCibwI zcVi>Az>*Pqvs%y3rJUu7^de#)Ua80ANMrv@%lx&ev1(p*mrwwzxd&?@#D3`aL5fPL za?zJ3F>jM$Km*n6XFphM6X5|a488QQ&Cl3%2%%89y-V1jv}N65kd!S3>>tN&jn8j(;dtSj+=A|5NOn9&838oms0ynTyCM3S>A-&&RDJY_>X6!E zHF@CARX2J7+_%zeW4RTa&bEXkcUynHWFPMtS@}m!8xhvE*l;l&t-2;oO%MKea6kDZ zW;#hkeI4i$Xqq}Zy>F~3TueiA)H3aR-(Z6JM}MD`fP|=bp+a1m1bF!O8rROkw{ADe zhY!C*$1qR6ov}k#Q_eu7=|XAx7O6B7 z5~Z~Gp;+Ir=PdzmQh^D{ZRn!{C()6PQ6g@yG*ddd9Y^y!7%CK0$&RN<^@6H0+s$m-0r2;hopN0`pXg8Q?vLP{WLnN9kH!BH_ zE{y`24e=liL&v{jzx3?-*_RHe77<`uoUElW%1rQG;hu2E%e+`opyrAP1lOwR5?c5p zYO5t)5_#4QR5;}gN6?BwJ@*@!P|{D{v)^2|c~uNS57?_L4qaeEC4LF5FlxIJ5+HE% zP5aO%T;-uZQcrzDgHCro?PH1Ts*a9W(-foisDqOe0TCgT|Jn(T;#t1RuJ#D~H8Y+f zo7np$ilqp+X~bhY#x%v?4zQ?br2i?pJ;yKwFyNW|6Wa3Eh}Ok>R0+=f-qYZ6!7(G z+jh2g5kcVmY~N}Agb=4P>T5yNIg1Pfd1uBo0?j__;2xU(&8H%XK1zWdy=;Gs)#lFc z#C>nTkc7PG#ik4BW&Ea15n6_`4DI<1GD*W|#iy_jQTeqs)xvue6f_B0HX>58C>&?G zIKxPiz&V@biCN8*Jp$igOAcirdzHMu2}JQRLXXb`=9=h?3$*x5)nSr7QZ6uhh(^6g z3AFE%oUuGenZ#>3tGF;x&1Ko=cN4S^*|qFE62C#Rp)`%UvD%cXkZ;lr4-rOM)9eM80hBag zI%0a)Hmh~V_om@q8M~tV<{&?#jlbb4P;|-&&^SelM@4m>tOqu*#!^1Szjk-f4?H^1 zM4ivm&Y>W}!kf30<+9fLvo=-q*LOEDVS=#a2kXs-y~>Z7l~n4X3I1hIfO(Tdt<*gY>F1ibUqIXC8wmVIvr7k z)!z7n!^t%43yz+Ah0l~oVsEtzR0ler&OT1IdFjib3A46!SDXi1lO z#h$f+0b{h&DQ7>CbUla0^pa^fO1gzoC<(zr$Wg6fC7&I9crWKLKLN$N@01aAoKQo7)(?Enu;OgDi)=4z& zGjh&>EJKYZqK;Ui2w|wfY-y}mn@_M=t{l*Nb0&~!SIl)5wyKMo&rec1ky@y3BaS{Z zjw`a+ECQ=DOL;U306;pF>;*%Hjwqs-See4(y2C3*OzJbDPKg7tQ@z@2PfMBITtHPK=aoqtefE)oBG#J*#6@`T&H-G>D z3DvhNzcuIb09S~uGhv?2XQM-~e}9nd%AyI%QPk5fQ$m3ui`XXjE!jO_-5tj4h%k*C4XX7yCJiQo*-4;kP6+wxr;Tc+zf!)--IUG6me zBxTg4y!9w)&JwF$mDIt$bsvTM>;0cq)M7MG)4NU`zO>rgCLCKpPwjvx0agG@3mp@e z2LwQ8fDQlv4G#gIZ*)h0?zJXo|N2ch=co{Wq0le=x&)Vb4|;Bn&9_{Kp#BG~5z3}a zrvbD#O($g^*V-daD5E}ac@M_-&RY3-jD*z|TyF4ByUS)}EuHDGe`AC`MP=9NhUqYE zs!qC<*oy&UOdYp!xv#X}RaZ&oMTRnESZM)aZK-wJkmvEPx`-wg9fBqVJYVA|Pr$|g zA6BX`_w^tdSDc{2ThyN2pbca{Ei{K@d=ka9>k}whTg49p- zn1J?-7G4`ZN5)W%3izzwPQ~ybY)@_*1O%v3l80T4Rwfp$QrUa_+Mz7mmF&P1U|qyvhoUe4h0@aJN0n}3E3z;@VfgfXw;gweDXn@X=ut6=+h2nYMWc6 z)ou6cM-;#ckB0`T4o~T%8(ZEg@LhcD*YSo_7=qtE;YUqi67CBi5%e@BIt5UCOEl%XI6E-}2@2`(bX^(SP4rHZ#^gTSM;=WQLM9+ag0AJ^AD0b|Z;lP{;dbsg#_Hj_pT2M`2 zNY{`6f=AxOWj_-Xs`i~)8T~%9F3me%z0W8&entQ*LG{A*j}rzL4SW(CGPeD{J$y1Wo0wVGl{!t8nxrVLr)do*U%)Ulh^sB6>*R#lUPt*B4?)i>PRle<SJi2+I?_@HrL}$$`EuxMn{Md_s~T6HM$XMVyAZvpe4BowBO#Zn2#Y zN=9b!i@J4{I97ns!0h)_GUptgE+})!O$+z-^wRi9H^6Dn+U8O~0o@_RSCR+jU1(6= zKhV&VGcs5#+OG`=89j20zAhxAS{B^v*Y&Z)q6c>|2pj(`*?GFWmsu*F<|Ejv>hSQ< zyYR9rA}@Qy^15>TD5mR{Ui;f%6U~h`X!OHPVTN}>)jXY^YY#U+%727D)-@9G{>rDB zn!y56!MMsZY4K0^V0hnV3YAspWQDx_Gzz`|?QT2Wd~m_8>T7HC&3l7&C})ct)`g8_ z50WkVt;z-U7*Z9PE1X6)_t+S!Q%chblCz=z`&!oIo%M5G6+3-0nqgbE^%&!QHbdIF zFXQd=2#_SJe&7gU1oY4A5qzvBH^NhIO#Id^w#=qb;8S6)@%b2V6+Mvf7!ulbZ4VzU zt5Qn<9`ZH8gK!dZX{m`ynR}vAJ_nx)hhUAq?Kfh9N{qamMEj1a`)P5Ig$=3?2{(2k zFT;0xnQq;t5!)JKBk03dRttVUu25a0+OE3$dU@NR;HCONayb%64R~5}(j_ zr8z#VEP{J4O_AAIU8rJ##@XMCi~*3{#S7VQbF^vB<+{kie-qO<#mr@i`b3B@V=2u; zv}$x;Aw8e}BgGdOs7Ap+cSV>aD1lWSq#EAsDomBA$DGnKlRj86gBJFs{U83eS6Dqw zN4M7INgi94ma(PR$8JcI*%-@*BkWOAoVt(!TReV)s=VO&?Y0TkuWNZirji6d+komm zNefxUx><+hSYO&L59?SnQ3y(AHQST_~KH#`wq6lt3Y=m9tKi{SJ_ zy|j=DVX;zcul>Q$%w$X&+REf0E6&OB`?TiV9EhY{MVn?Tp+>nUK>;Xd^5qE{;`)AXojJn2=)9JFIp&I^n= zQMqY%B`!oDw#bvMlxV-U*t81gezxKX`b?lI%q9Hh>*d|+4p*?JO9GZR|M5Ms>^UOrvT`ZOy)LF@Sh#(0(RERn_Y?#CiNavtIdQRB(ZQ{>JDVqA@h;aDSOD6}CCx+D zSKOre&1Lx4NUsE0$mVuH__bfLX2$g@Db2_e@SEVKaXOy-wXQym03Y^zFKZ&+@Xad) z?QwoHJ8zE+baJAvnciz}SumwNxGO^-G0$5UjnaY1zkJ`K^n}DS_a*>As^{8~Cmw^) zopvf@1axjKJwu>sD(oqLFbQ$XD&8&(B0^JFJpMp#Xa04TFK@^~nC#ge&5WABVBaJ< zbr-KX_%1`bJH7le5y_%b-}-N2hed3rH9x4$?43Gfb)1aDa-2)`63I^|&B@`PKP%RR zzOItbFdGL>c|M1MQsFu2bV$1#vos{F_Vl?DFm{4x<+Aht;ak(?%y#Txp~jpR<=jbMbaH=1;t5^Snl}cc(=$|r{9b^S#D_Z=70wNF zzkwe#`Qq9$5(B30U07wF;73rzw}?vrga$nPbxJu<>&t`}`4#|AZ|m=&X!x3kU~1=0T{Y8;5mU0bM{ScmPBG>MWYnDIf%~afD3|C=r42{F>hN5f%a!0nDlAT-H#QF_Xg+A{8%v!6rLSl~O z=peLqciY(twlH#9`EZLXUe67{w|z$(o2H0`e$~5>H5##pqbERQgwB%(%^yaA3%rMu z?ARc>AV2&c*{A*9Lf2}&*ot^$R&m8P#FWoa)WH)yLEH7z*SH20Q}mb4PRJ1te{~*IF<&v4@j~tl>rR|8eWgxRc@b&kHScLj|j)gv8e7NKSCY;&=vn z*VP(`Y+pycaa?X6PS8G~F=FOF1M zE=>_+UhE1Tw-Qr$$5O)P6w3z~EJfqVcn*6rOhO#z>AYDa(l?Khhm&5H3kl3%mn61?Oj z1hIk;qFkvnw_agG>&yBvG5_402{&V=+@gnP72~G`^_#Xxj!P^oGyHiRvjM{#1~q?6 zZ%NWSM|H3V<$D$$)owI-(kyd9%LS1ysXu=pG-!q+iYbUTJ7ul{uMfrwBgOy$-S)b5 zMaakT>=37#;+xX#uigva@#8Mn5h2nlO(zRrGvW~*p->a0{t(CwWM@XVQ6*QoIy5aPlUrB z4JfSw5UP)t?W+xB7LGjguQNxtX}3zvTVb~<$Zs4uvmN{vs z+HmQ$GJxlmDm5r^8cY}Z*^v)F{Rp$Yhh>n8nv=r^>ec%K2S;<>l_Dox*a~)OaOMrI z`{fHd`@W9BDX@@&>a)AR02-_QO#K$CJmF*6V^^kI3QH4njnDLVu9gI^9>SgF-}Nk} z1%x2C0od2-?ZPj)FJz733s4lgHj}#pf72Gv1a0J?vvq(2QqHbG>t3o|hpI?f4?1o@ zbcu^58lU>61oEZ)?DVxmDNjjlQ{v5rluH8G4(2!maR?Ai5X!=9{Z`y|f`bVt*5|J_ zewWn|I9(w9w4@)gHOpvjQ@KOrqF?uMlb3WhqmUdY|v+ ztc@JBY4b@e2bL@g2rpZ%BPU6>NR1^yx1LMa*1d9g`J6?jvln`;_0X;9X?v4%RFEEe0#-IfQO@H{J zbdb&tlQ=cw=34t9daom!>+M$?--`qnNW?28=3Wzn6R+{lG1yJpnWd43vDrW%tI{ zDpCmQO#O{9eJ~_gxU4-}I7Gm0j&;=Ttg9P{w`Mg$5Oq}=xrUjLuh3|0v!;@B*61`c z5zYm5$#5zZtbX}K^ycX7fgJz=MB5IXf)WL1ArKW4MFxc z`u!$=vOv2ozD_GOnqFL+1Zgo(+XMR`myKi$k&hMGdp9GEAZ*(aPdHNKemlfuA?T_u zUOWEhF?DjGc_BE&cTc9Hi3QD|;f7d8u-1#$1tXjY<+;b#ckO5r zE$%gM(p^EtC*G+L2Mb-)Q75fymO6ppKmVCdpzA45P$=5*Oc3V)!U-z6Pf?aKk>1Sk zYVyfJ8(kQ>%itmwL%jbRMTXx}#aldDWwRI7e3D`UcicqwF`?`vGy8qNmv)Nwn=h$f z!hi-}ukR7*QK}uA-7Pv&v%jTle68nwWMlxEIKfn2P5NMhu3%3_EUV&>AdIc&T29bJ zY`u|hw;;Cx)9{bs`#J4KAW*l)39o(`;d}czqc&d?} z9u{*v(8AR4Hb`lq>Y#oS{Wt*B6h!b$`D51m^jSOh+NdaKqd73Q!8L6A*_clLiO>wC zb9-aP7N_r7ludq;uUL_S7T=nVNV)a>7Deu7@sz|*m|o&dSyE|>rcPxt$(e^dTJlA%)CDAjMK<*j$eXU zb6p6khq#9L?DkCL<{-55jaQ1R z{4ndZjtH8a)S1D)eMbnXiy~tN#Uew7>MaYPy&^LE3hM-RY5R%0 zr{A+HOJcngDCB7oA<&~JA9%Ar^Dwah=*BWgS<$380UYQ{)a_PMtr?|9vgnTWrnVr7 zVHa>9G5d+h--IE!&O9mNh~wFr&RL5Q?PM&rHt6!B?4*;iio6=&|d6I<8dIJ%UK`i0PDag?i}ZU|MwhQC z`!|Wo+GSZzCNHaK>C`)+R7&+m8h&T{L-IEq0awTqlG>4?TUmJmu{*GHx8aW;H9c49 zB<^;FTfAzXFle3gp-T~y6jl3ZmBPYZ<5HYsyyUKPuNzvS93?inum_n4|Ap^$2g7{u zvDi)bP-H-OhFV^fUI^m<*AiOg9j;4yx+J8NacKKreBy zq$+yCryswmU)!8}9K8xkWl8bd!{sf9V%3x?bO;Uokx@K8NoqnS4jZA5h@o_h5OZWC zmLEqOh&m1#4hM*aSZsrbLJ{IX74ARX8^=M((N|q)NSe9O>7OxkQwF32Dswk>s!5H= zYm(gw^CFwHd!ZSoFo=T#u@16D9tjt-I#Nx7mLP!AmcMmq#gea1f+4e<2(#dCD#r?e zGqgn7UqQo(O(u)kB7{oy)H>QLq((g$AkO`=mgo(np1+_EYbK$Y?$s&eT?W(in1@ayzcf?q{-G1LA$Yt^G*!~amCvk!A9Ut&lC-LZHo8!(%Q-_~GW;i>3WUmpYI$x`Dz)o%>jK)|t+_h=-Y=Z3 zpNSV!1+35?^5tTgCnIMcI(K_a0xb+=7{_4t$@knMx&w}QL=6^#<>y2Net*e_ z^u#LyjvX0}N?yDsRwNmnO5+Az2CitbB>bU&QKQ9s8XCKVaeGUL8uX%odbHHT6skMw zdjv*xpl@oBaDi@z8#w`JhnMx{Tn8~X$z)1gSKl{5e4m~*|IyRp&Em5%YYQWJ7x+Ks-zfV-3~dYVi8}&8ULwV5#T+VCQR4qpb-2kEn6=nEa^Ny) zQCYiBStREKI|Th6;FQZ?rRxo9&D{`LXP!^j(@f0Ep3@-D)EhbW(8pje_>gjP*IhaE z^m@wH6Nq;&%%=wdZShQmtk6 zn8v>{d{F_L$$=`s1-;s$9e;MD{mI zJzaK|d}lHwSdpd7h(K!KVifvgMO9olrc6@%^&_}cf}Bi$5z@z-tU@4h*mrX8=Zg?S z090qda1>2ED6p9?DB*W#p2Y?)QQvs7zT zv{r1bcZDkC2{I&@x!9~%V{fy=vnSe{Y+%3E@d4myd9}fcU`_xe0V#ms003(eL7R3- zs6lL*ObNf|2NyfqpN(5mxLB3ePGs_psdO=8IjG;2HNyownm-s*bs8E!g8I6~68psV zT3Kr~Ei4LaT*1BDNDmd9G6%L!R>q=$*VuUOb8ISetnXBJ0>f(cDA!3x-tG)wfZ7mS{6Fg)+ASonMG6x4F2d@6T22}k7n+mO*LSmW^51d(tA+mrnmWU)lV zs=H9OA=7vh(-Q5;!0GiOwwtiHBEwODFzu24twW=o=z;~z&VcxLmb~o19l&#QmT%Z! zugwjC-H)VMvaWecJBH$tTXJO-ueARzC@6wjkkmDj6oz+wYGodtN@)HO50Va#o2b|& z4S~Sn?&HnjQ-Vo;VDL2A;5FgK#)=covE66TUgt^;79*!ok40UA$3P!f4UIBVyV5;3Y2n` zLnllrNQF@A)bl15d+=+W3yp`5Fsoa@6d2k&$w-S6K1%A}o_T-}sVxhl*h~1vodaoR z0iw=sjeb-;ZqJrQ(1?Iw3WwLKg8_FS)0if2L|ojVGSxia5)TnY5nt?C^X7(kL{{sS zdYKjU((Is=q1Q|r4;bdT)dIIlB4281!MRGz z68`^J1R?0&q8oG^k*w|ymJaG}uTknO(q#mof-xZGcwNbgJ$4yIz>67F64e%inngu5Y@N%~RsBiR! zC2S?dhmJ!bN!r5SU8FC*msK8;e@y{G0sNiL)J8=ifn$=D3#ts7{U2&dg2O?)tX_w@ z;tv?2{_PV%l_9%h>;>!8YwOMCw+LCpE(2eB%M>Sl8Ys4qS3D>QHrR`1(( z8ooqDxsFbvp&fu|lB#dO{0I0LLvhB?KS&1IjfT_+^1ZO*B}aK4z<^>EUZhRgj4O1X zWHt%3o6A?B{sBC})B+$#HVM)23TXWGRNQy-si)-Lkb6&!2m|Wf?Idnr91!G8AaGA; zT*6qD*mSwRm%dT!sMa3?9yWU!9;g=nb1{bs~z2{(lMCdX@9$r`>Z9pA|lyPr4uq1gQj|NsjT4I8Nxi04L5j z?WnA{}c ze7%hYL73YbfoVY%1ct;~+p3|C5pXTy8@689mCb?AfCF%Wvf`xBU<>O9A7G06U9DN& zSw5>6Qng7!cUEG}OLf&(ptZNH5R&~vGmLfsTG3-Q11*l%za{qkSY|Ky&&yh%E&kdaoZ08&$l5mCHF24_?Et#~T&3sL-!boeh$$ zlK;SRw;1LT^G44~9U{(^!@-R0%D>5!=rLnx>7SL{!$VNd*0Ld24MA|_1$uh>R%IG} z#_DJJ3#LgRVQL|Ho2USb#Y}j9H5@yCEhlufQ}JUr9_~Wb6D*su zD2(KlG1Im=VeG)+i7LEj_1;CH^TmL@6A1zqxNmPJ9vVfLn-kz;O-0#~ z2lJ#$3z_%92(WvNrJs%8eBNILnCP;=a%TqooZ^T}_FGpNv~AebC9ZS3vXX>5Q2`Ak zMVdX9A0m1TFh2gW#dSf5#rvNwp@jw!oUYTF?}Eyj$&rLN-fip1Egx6g*%wj%Y1-y) zQ9=Y&5Vdl-c2?*Akl9dkkd2cs-YL8O?DlhB(-Lx|g%=V_PkZqmh{g< zH~|}h)iKAyByp!_OI;$`3YP%Tn~Xp)cVZd81~5(wS)gOSbHT~dDN_eQTJ_Xx?c*>I zrI_a6aZD-+e-jw4CDBL}ZUibc;&;(RIpiwks4o56m0ZD2Tm8l;eQ@HCp5?`*Wh2@B zji5prf@?L~nG=h@JuinWu`rj|^eDKh$|1`}r76K!(4Lg1mwBb!R~|0$odt6#Ocw|;H;@D4>={Ts(q-l&|HT_~Ai9y#ra2wM}s zzOG_lqH~U0Ga9*5R(Fsbm;nL<$S_r!N;5|AxM^$0Hss(bi$4+%i-Dg==k6V*;3|68o3IJ5AiSuVsagqR$${*=(%eMh9Y*Gs zz4_!!@l5OAE$l0`v!MtIU(;7wy71^_kmkv`DaREJVAT$HI3MyY-A(Sbx@KB(57V<( zFfOy(O|~ZcLzGx|#e3q<3s+uJE`(&s%wbK0}B&nFX#+P+UCs3jmKEk9X zS~fiN z2Wjd5?u8=3NI9qtAFQp#nYY_?r#syV#?Ri&UE5YVyYiIgOV1#Dah{!VE)O9Pd1kbz~wcx;3o!V3dpym8P|z!iS|T^#PQRhk2hyQ4PzWULJ=9pJss9Y-_+!B z{cU^zT|z>t$_HJ55eFsvP(SE$1&;h$%scxg&NGQN4R>rXxqf)40b(%d?a3E@n!?M7 zO8z6(^4J z5DzDmz?{IBWG#eCc8r%#MX=^TF0qVAYB(A+s8;GXii>|1Kf{~%LA0eDkvkx%m7d;C z6c)S=Yi7W-UBT*FVZl&vh>c|qqLd$f&Fn&;Z1*Y+3?H3V$hR1iNBB@ibk=+ zUxG!teZ{&P0suQn$ro>HdIc%1@It6RJL0F)nB8K{x?CNl0K!`0VHCt#YlvZ9LvUL?#&m07_1hK2ZSC?Zm}{2z`V@(R9e zSm3M5BeeP)?HedxH1FNwqE`JP4l>Kw^W|We6=}So0dlC35WMyOY%|Q!(jLp6E48xZ zE4UaUkS>#Hwn7^rj!UH>Gz!ISOk0ZmjtT;KU;+DeZdiav-Qbc=AVfRyrHNE^Jwic z!)W8ix1__C9scWHj29TnN7 zD8>M-@H?ZUXJTV>Xjhs8vix)be80rG^`^MpV?sDQ2-S{r`$WOxX9eL*@(NZWq0o3! znE1S3cp>vK+dYKgXeWo1zpkr^qzxL*#ks%be~e-0p8|Jg^cVVwP+)wt z4lJZ%WUcfZ)`LgxeMkIbh2h*k$ed$)eTg&HGuH+T$UXfp1dZ^Zc$1)8r@`rOwveBz zWJk2SmW9o6Q!N=0lWm&DEY1>@eKfLu8NP@R;KlHcU8fnxQ3T30WMvGp<9{~KVvsm| zJ|AcaM@seuqt!4$p(gSC45Kiwdff)zE~S7h-3$=hLR6umgVJ4q*i82SpAI7sG(mQk zV!jOqx_@Pf@WFkGUlIHwn*%V2lBWl-b70Q`Di086Y)y1^IRFyGwyd~9n+E78&B~ct zhzVaXpt~~^z}6hZH$adV%N{X^5E5K+ZHgee%1_v;-wUno^fi4~Ya8dK2woPboIyh1 z0_Bp2nex4f0U_C7_1RiPPFB={CvVf;WRb_1hVVs<0xF;rAMQg*A|{gMy-PQ#{gTGv zJ9Nv{G-8=Gm-VYxbBb2sN!*{bMp^fs6%EeivYg?pw?&kDrdE+}l0mqJKdYsM5zXr$ z$I$MnXmI|%HYD3nb(!@Tcriv_W)~J7g$T2hr-GQiD*L{S$d2E@CTa}%u;F{5MJQG+ z@oY0@++c>d1T0tu_EF;$GDx6m22%9GLv!1I_E1 zJ<>oiy#(xc-(f<^(0r>thypt{9@H=)^X*IGf1qTKIaCorO&a>rr$&INb^LR3IKV=c z#UZ*9gRK$>##p4la$NX2ht5fEv9_iOka9HXl5rX5QIc_-g8MSe=-~I%(FZ#{5u)i2 z-G&{P8CF?loQ5;}ZQtL^bZ1H@?(3BxM^YAbF5q~H|9yzYo`pj?Rh>L86LgQMmxt+V zTd8VoqsEK(suw%?q4cEn4zmkIYy6}G4Wps7-aF91$gFyvM$0R{U1dzHqCC%7FYtqx z`<~avYW)8hsbAc;_g$yD2YLz83=`5Oj&y|_%NXnODJsi{A9sb3e=66(&-k>eX+kZh zc~slOx*?na0aJ#6#8wq5xBf16U3&`h0LQB!y2Hzg7lAs9G7*K($^={DPhNQg)p(q* z!x=(GdivOwIF-%pg?Ga!f^BfAWJxuDF$c!i@gL7NWhJ*FZDpXimlfk(o_V;%2uF_Q zda-puX9VYY_g}DvM{FWlI~o= zuln7^+wJ0`#^~MsQmJMIEwFS@8Pm?9d#3IDAa9i?c!5bl0L=>ZOSolGAEZa%KgQp& zwAbTC?2|;q=ki1xgs|g#x!PsQn>0z?pUw~UELaojL79mga~VVS?6r?A&zppWWKj$J z76C}0d~hwxn^9|M*wYZdO^^?(;=S>c6Jiw#36eaI!0m&8JM?FuvxbtptO;Eyj0%V0 zu(&YDebv=W!WnnlvYAp1Bdx-B3o64@v-G~tWRn)X+|fe0>k%7V7ka0xu20?@^B2H$ zlXg;qbV|*X2BP-wg(gr-FnSI4n|0swonRcD>V1~H00g$Kmn1Qw9zm>Q!!zAdT-Ywx zsNQv%#|8ocTHsmeclT+owr#uF0|1Y`zdbi6>ojg3% z@+?8XHo^6CV%vMizLVq?w$sO$J!fd`fYw9_A`px5hb#NmIKM5Ba!z1;lSH%1Uuag; z+TTT;ac9jpvPFb3YG$PM5I7|P+0*mkG1&$=^~Eb)S%mge^?2Z(SIejZJ5cxCi+{B= zzLAvPBe@M_?OSwT25HGn0RTR0{-u?-yOJ0@_4nvl$8~y)x zVmAJE+9!_DqsU@i7n}8^(WMGck`@9iPLque4HC9)8}?5~PbOX}8b5bO6H^ELBm*@W zGR05=WjH%OM0dl-GSk-ux*;-8oMzhzP#V14-9Pw-_5v|-*$I!#C=XrVXoSGf~s4=blmPWf^(E)3CU0WIB{QzP6p zyzJ|?CKTUh2*V>_CUXHdpD@X+cCbvL4S()64qW}4YTrQVM2Rht0&H8{)~|>2U*5k} z^hiL3lGg~%9ZuFfE-L^jfoV?mXxLr;awmuGx&LsNjIjw-LWtz{_ufq;b+biuM-XZ> zgI&x3%}k>>`EL>iT5oNX9Jn&V(-0mUQp#bpk~`4Uu*^<1N*TR$%--wT3|c<6c)1()U;LZQz_DFWm6S$jBHp@B@Tw8GphkVw<7NSg&A@A2c!Gq&?i z!se0{>DcRdIZRi>Dnqm@Vo=rG&j{%BeU|IbobCh9o3>6Dq;7Q#mmLmn2{?0LG4Q)~ z+{;L=ujH6G`1&KOnj7{7;Fk$)9I}86lNMTQI|>itb53-KofM7h7a^zuu2|4-IwvK8k!aW9`&WB=Nu!0VaYVLqA{hXFZuZ%i4y2I?Q! zcejiksgsk#sQiBzLCken$y9@qiBH{#h}8+K--USQmeXY7JBt&CWr0%GFAQ%OD~!kn zuW`l+s=?jonn&hiMtFxHmYn^xz<)k2^6A};&hwFR+6rX=t}AaRQc2-S0X?&-!aiK+%?sDl1!s2UA4(sF1X2DSilIX>i1{u-;~~9V+zhmrguy zR5gCxH2GqFAjaCuYF0P4s_p5}3gC7dUbDq000$An(;k+f=IrrqNzL*V(XiVUaUhg=nSG52VhvSGoC_LYwmeu#8 z_Fc${&FyBJEkD@u(HfxED>c0%lcsxE=mTM>A+e*0DzV=ihvT8J2aSditP9}niL4Ph z!t2Nuu2~*;)n86`VY5H|e+ii;%pc#sh}g+vTZMAV_QDD>yp6wK8Z0;f1QC(Sh)jo_ z?w#QT)hn3XDKF#0ubam4JaWKX9ZQ_>9bCA@7h7{IGOI1F;xJ}aQ11-m65opOz4VC0 zbOzW&Tu~@1$TKf8)6R7yPo1Tp+{@rNjxG0NMM&lHe2ky!4R7>yRQG)_E}Iyqaxe0A zCL{ak=wxfWkcH#PsaF!GAq65$d#9;kS0m}ss45X^0Qcu}Stk-fXlc2WG(TeVk-4p} zz1kxmoNY|;FuZ9CiU)ByuW*@a4^^s&ZMT-{RN2jqlE8ZPt9%+JU3t!wgqJ-`6-QYc zQwY?Z*9QsQ>p?#y)6q4ellk29xU@k1q|kptQgoG>m|uoR9-FZ^$ch)gQl@LR^1cBAVis8yowK)a9hwM4*E*>_%dib z$rKncY-Wyst9lzy643^MC4<@Tg;wqKAKgqKvzIx$m3fMii~{!rMTjH>ZMvvst*8X5 z*pLZHA~-x^cehZDouGq{zS0$;_FYZfjp?+Ih!``qI;in2KnNteW?HQ(=$z;J(G~eA z-f^t^lG~)f02?1@vO@8DOF4cjlwGQOLU#rU11sL~jVZBdw=LZ3o7K=I#fG?U?sWFV zFV|}*9vq3@K($<}HrxubG=p4mIWb;$reVQn$0SGqSRldaRnlO}H>+O$c8Cvt9WF6s zqg4jaq8gnzevQES7-`N$_#U%tp5?bFP%)jH4wu5bLVj>k`bj(;NGe8QhI&Qv1JR{f z+)Sy4+RiCRh!MmB8YsQ`>I%u5w!>d9giDBHpiTn{g4)g++1Y4#X1Y~uS&}Z22B4IWr~bbRGWbSGaNNd&4=BhI{rb3dmaMXaTwAcBew(PH z&tAq;e4)#}N~s3%a=P{+NrQRfl@B}<8o-wlUKtSxfcJQ%(U0O;+72W*TCYaiXbbyg zsuaX8hY=-?Pmhc$aipuaPvE_@r9m4Hie#Hzb;bGTMK4AQ{zc$!g?HwB)__7gOg=yV ze-Z(%tGOStih}Bub-w+Mne>l4*|szl42al4@fd^SS;-3IfxP`2+y(n%-U6zc!Hxi! z$j$t4O^@p2f}Cj%19$c2hyuL{Fum%>ryysDL6tn1OVOeN1a1EDAjmv7{{RNR_TiR< zW(0Vzy)zlF^s+{MO=bRwbN4cNJklw}l&{*o_;vs`MUPkQW#mvCx*SwRsvZm%n#4HT z-(2+2N9S(?yuYE6%DwZYevzyOOp~_^EzH?iK*BYP!3Oo8u?f}{ zxyd~P9Px5AQPTNpMUMcS=uh~^skoPBEAj^EtzT_Wj z^tTEXk;UjvlsaH!Ay*?sM0i~1G3Kd@MsOg|>tSD(*w@H}j{XAOrRk?#pzmqg^iTcv z4ccfuQqsRRP(kEEy*r)LE2DRbr~uou7QrQSy!i%Z!Zl9(a#2@@HU2 zZgw6L7B_`4nQOjJ?Ajfry`{wzf}GgxP)6a?zWBew1iLjwpCrDh#s-c^Velp#vtTU`R*fue0d$G!Rd)Ji*WrEanN$9k&ExKHj(k| zJ$L;{z!Z0yZO;Z7&Co>pwNr}J-HtiO*JH$|&d=Sg4nu4N1@zanuVNh5ENk@=d zb$kRTX6eR9MbW+vM!rVdT+p!4o1mE>k?ugU}57``FcNxq85t(`@ z2uK5#gp}Ni1_sPbcL$c&A|PXbA`7GovdFJd!-(-`sMWyeSu(I9k;Ez~D>{$P`cO?( z(-;kZAC9%2o2f${1YIHaYW|N-3qErM*#XOvAPujp`)MCFRRVSyT1p=lg34e^t})ho zrqUnlPZ0hQ?TD$o)Wm&GHe(i|aL!r7Qk7!1%D^ z1sfNAWzgrdVQueIWX<69aT<+Y*I)G@x9kL`P@5biHL}TT#a?DeiyDFwkJgA01aQ=E zZ&*)0>|6#gDuWp7Rs5ALe(jskCdf?4!Rl@;S5y&fHptaU07OuU0ygd&MYD|L?pL)a zgS2Zfv;3~zkq*7$8^4Ur42E|!gg+^7J8))ShDb1G5S9bJjv+<^YP`9#?r)4Pedrq8 z@A;%T%I2BYx|l{l1aPEr$)s5Z7FDxI1Xo*M(sb05^lKRg{FRhRQ*^B>23rX^xWt*C zpn8CVMGQSP0kcf)n!gJB7ecV64(;*e>l38|U}|yDP`cNY2$Vb_rt+l3F0SBUSqs%; zX+}^i3!HK7z>b+v(R%F&z^HT@9Gi=heGv2H>(tsu_8@o$z?xnK69Wi-^ikw7s<(T; zeT^Ie6^paUy2nUtIxP)bj!6hQqee;F=w)Z36u84V-wt9MS*qS#_;X}v@WULQKCAu4 zg21~2w)7y3em<>}qi0l>>4hBzltBl!Wdnvs0me*?C49#E4lbJlI{Xd2 zek%M_Y#~v!+*5G}t>0f`A*)7*#|7EIJShpKplXJP7)NLSUmulUzVKuqQ|NUJv`=mm z5>NcOs!?3%&}4(m5p%m)(ixzaF31n(36Af;Ven?deywK;=3{E z+>o{`j3CgDd*CeX+{Gg&Pc4sM^w?|oy#N3cYz|;f9;yfCSr)!(okKT6jpOY0E*;hQ z01SSk^5{|qkTy)p%TsONB?*tL^+Z+399Q39Z^-4%b^!3D8OY)5G4k5rR10lXBy~&A)x48n3V(_GPYPI2hW}O zShHw&=PIu|18s<^++`nYcgAvK=l(JW#nnjs1yG9y$lIFHGw{eQh9kRrN;e-N%gTiI z?}JIA5K3uga8wTKlCnap=MpNAE9-l098^wa%Ov#D;jYDLJ4XuCyNWWaW>BNew_~W( zZ3%-X)7IURpa~U;X0lJul$VlAG*8RPM@svzPW2>7Kb7;?955 z!<2#rQ9)}npD~yA{B<3Dy%Hs+1pDT|Fi75#991&3*@<0d3m+99P-u#}@Tgr9n%19~ z+z3rRo|uLJg>xkkMcqK>Omxtaq)40)=+o`wn(zART{*1|_O{mhF~;oHV*g|!DO+DZ zj5XY)nTlRRQa(B-s8#1H6CE@!`&WWIR*FQ720U!;EY3QaLa zIQ_QLP#?6C2Ecw2v`D-`pHDvyOi!XLX32}d5*g?P0ZbLU2JTiD^g@p~*NfiM&1tZ3q7Ekc@J2Y99T?5&r zvnr7)qw^{?n@CEiy*I|6h4T~8(kjq-d}_+IvJu$|Q0fR~Rg}(icT<108XRwE5!}@!?TpChM4#^l z`qv`Ojg0`;D(6bRLw)AFbx@e)esHkrN2d-1gapiy{DL~Zks#{)fZ0P`Ng?@CkZ2&< zg!kHyf^%343-MV`bwN^H=fcTq@qi_=Y$BlDi;I2fK<;*7c{J*2l)Ef>bk*Gw{CzUFb?T8rJf0nAq7w>>acOc^# zF7#EOn1aEoPY^OQJR=cy9ItA={U0?!59m|Er##xwi;n-`IL2?Ed1(j~HeQKgai9%X zgV~3!{0KyPJth`u$d=L;)mMlG#5r$eIeBsg%CQxr!t2ZxO_{B1fY)?@#Y z0-|)=4U$Frkf?Wd&}QLjECT7!&o>kQ;-T}+i>c0}^tH6#;LlKe-EuHJ0#$~d5&z!G zxKk;zBY;SUM;S`}cg2Q1_K-8^A)kiJGH|kX{P?J;JV}!Oja8FZVOj3Tq}&dL(H6-n;U!(FL#DEk7O-AmjTVF`eL>zGz z8tKnCljysuB@^*Frd6b4Uzr6pZ?Mj_)(eb@5BnIJlwi$Foh|OB$`|ewU-T^xj50;$ z=Pc!td!FN{uw_ly)rrYI?*-_?%BPO=JWc^$)YUwQM8<`Njski(r`Wl{S@4q{ z^H3fI?}BP?4JDoiY8XU{=!k(+Is@+{cW2c#m1E`p3?QU{leASsDFApWf3>{ z{{E-8os4dR8l2iRNj+Fk7}Pp=3Gu5ruY{A~rDhAjlBKl-FrQtKrZn2{3NqVHk97=7 zMev$+DrO&&!^U{(Kb8*l_sq&~HBQYcJVat|`t%C-Z$ z@H2yXW;U+Vqg^<%lo>=K!_cuUpY`uf=tjCyfr$t|`*^ZoTcS@R2O|$FSp-@Ovx6=j z-;Sx8(01ie9x+4iEjki!X*Q?hdG+r)wxWaFDwj3 zGithm+GwyVXP0SM7X@d97t*Zltq|FeK);_gBW*JYF5v|u-`YYp+enAkC(`fhVh3;$ zo_UfTb@XGl>-S6%Wf9HW6^BB#QYLUe>^&bSnHD30kHF@TcDe&ZDwb+LE{((AMIKu= zV@J1};-3wO4%Nz;h8f&6q)#~4kg9a6`p$r3M8{olgLr|L)g7-0J0^xe(V2?ZUNAUF zH@Q2orFoFuYh>{*>!O-Yu`aX`YQt9telUER88tr13!q;2-Ms>fVrPC=h*jj-&=3j| zWmVVym!v5>Nt~GTpb+Y`xbd@?X5>X980A6%U6oE7(e(^mbH>+(+b6XoEHAP9)Af#e z%XTbNEr1mIX7UdH@H^y5Vm%V=)qpv z4YWx)>k8E0^&(kT@#!45FzbB$4Cv%PGt3_y@M!r|d2mgR|F^$sc}}E{a{k6gv9z5E zJVK6GMOzuKLeFS?wOkQx4P23q#{nm=-F%xs;`JW?BSIy<;QJVJpzTF@T?659YujLp z^K*ZPCe1`8gEM^wQBYilLpx=BK}Y%UR6bWSEFm02U~Wbjlf{&lBlr(eo{wTJMvBx& zR5Dev!aoz_O=u1Aa)2JB+bXCLi)N@O1Oco|nY=7&8ReG4XTCxE2<+ce|5D))J}C!F zgEo1x`aGIXO=aUU1gnLrEx0D4G`kES%as((JFRQsxD_n%NyJ`tX#A3O;t*evW13-| zHJ@(;8GADLZ`A2E$dh*cr{dTzTCw=^&h@DnebU3=WAL1P-g?0?JY$;5h;S^pv6Ued z8B5SL(9ZBjso9^7y)WUlRZz3VrY<4heFKl+%DGvRDmLV?iVirts|{^xvJb)V=eox> z)ZyGQUX=`iP|-Km4wfl6okZE8QiD~@C7&ko3Ii%TKAcyji#=208CXqG=Zhp>FByLd$9*rFKN>{k9ipLfGm^vcSF^ z?b`*b%x&4=HBTHyqajhJpC^x@^$XBDDNOUf9Fkb3fDr}%8IXYqz*c*Sz}-Aw74Wif zDOwz*y(U^cte*(8qA#zNVQvnFWhPyf(er$mG#Fj}G>+$g2iku{?*WEe^#7I`u>8}G z4L0JvA^Fz3wvn|@^3bEN?q`BL6NyFYm+g<*jaT2<)|GHTz_rW$2gH)6(Q=|-Vj^wp z!lk&(=l9qE;rR~=GIIlu36;^k5ee`-t?s9rSbpQqn>=gHvvEBVp8ED4cP_%l?mFK6&B-zw@M~ zpBxl@?jNST*%a;fMSlK1&mKcIDXno-*{6A&&xOyF-|%mg_w<_qkC@!xg{0jwv~i!( z2+&cYbTyIn^HATLJJV$~*eL<;Q8!vMb!t4ft;OeknVh0ChGdNs)#d*-BNA8D^!YE)fbt|EwmuH7G5 z${+x`Ve;ean$+ZwaOi0YlJpMr)_ToM+wWBoTZ5Zrv9ls+ue`CW-o?AW8LH^&`B#(( zVr_Oe%wq2VwI#&FJW!NNKnE1JF~{%OhuGiF_}%QPA^*$J>{nOr+0QNZ5nh@jD<5FqHbV zCT{UUYw=Qir7gwAk@9!8^hI;6OCrh1 z>B!=Ha1!eC;STy86)jZh4tWyTEKFhjX(INeqNRx|2q)cNsH71-rP*#DGb8NDGsR_S zi&lEe6iS%=<{n?!gXE(%bHHVhUzAv!xUjPpUN|-Ftl`XUuB?D7g*Qf42rbeH1 z{ay+NDAmd${o^dA%Nk_R-)=#mVNqz7?9omoaQKO5JeN&Il6KTx*g__DOxGPRlvFZ% z_ww5tLngOLM&sBaDdq9Y!bVvxGE>F}E=moLf}+2sw9+IjKt1<%ouu~}DB@dz2k)pd zVEDFjnHk!uoXu?bhMw|5Z!ag4mB^>L23Zs&_QYV3qsbhY)ozRP;T<;>PhriQ5;gv_ zB7m4|j5y(>cADVtO3FV$_OXUchpH|&j9p{jfhCOsVv%1tW5a<#x8F2e#N-YHrm@%r zlr)1w=N#>#Juh6#5A&aif)bO8$*qWy!9Yp8$RlW*DXlPiuHraP9%o-ui#LXSbcgoc z8fUEgQT$*AsRUI_qhJOV99Kl+eD~Tm3{lPqil1>bHTwa1MEUEZzvPEizHs`tjom3d zM`mzuF5 zH_{8Cs-QXP!sw#zP6yGwfyj0nb(6n7X_<>6A}`qEu2CiJh-n}CiACzc*5kIIWc&mL zMH~W9PWqdKWu(X$N1~kI(GiU zoF=V!g=YTCrjrKDSHN-5P3_pD+K&5KqT))2VDz}&X}ygOp>;R(!Hem&*d&FZ*?gmH zQv#m#rAG2#vZd^|!?j%j?V3%x%9&Eej#FjcsU%_(b_ zM4!Zsi8~B>n{8%}AXqFqnA~|Lh?<);KRFEn@E8Orv)`Zeh+3dSEV93M=l*p-!1mzJHa`!I;W#dV5E)YLJiJI_@G=g5rK z7$I4dU%BHp5P<0a%|RHcImyw~Rrh3nSli>u*20}VhtVUl zd>`+J%CGcO%GuafLvQ$70aWmMS7}6a3U%K8RTaI^+96rV-Ccp0JVepv5+5ZCb)8At z8;wpbO02Nh!tQDHda0c_`qU>bZs#tx{e^Lv&9d1-rrWj*Z!&QIdajjs`!OAPg>r5t z+1hj>hunx=zA+MYW|-rq72Z$L`f_7d^8ErZvVQc54o zfQ;t-ozGN$Ixt-+C$|ki9W$V{rF-p_;RG5+zCF%s_<1_^0J;TFgD-bXJNuNkMw5s; z%2F@{s;G7cJKIj1?s-UR@$(zSDe@Rxf5vSoqG%yMON~`Yo+c%!IXJLv*bGwl3MHB! zRD$7A%qP_7KDov58VW0TdT^@$P|v`E%Ojt!Vip2I7tcKKLfYj0wf2-;H#C1?|F*;E zO?@H_ZS7(a><(S(pt&OPqG`TetK)xad#PWIad_Mg~?kfHr z!i3LC{-@Yqap*7_P2^sKTq^@6daTbX!vl%_BlVxF(u%k1`E@8ic;u@J@)R)>nzq4f ze)~|@e+~lAn~r&nNr@0ieqgc^zfE`@vdrkbYQ8ZAU&bgV)ty^f!_2{PCTbrfo=tVa zk<`ONRo@-s4WEv!E3dD0akz)#fO;8{mg)|R9Uw>MnIPU!+9I^6d5UVb`b)Pmk4Jm`DqUdFqBubbjW>CM6UEo$7PN=!e8ScfwJEZ(^0H?Y0@z41y8xy;ed?B z?}DQB4mHgh6i&t+Dc$1js9)vFEf(}ED*hEo1C14k=|x64RFqjhPbvI} zE%9@i776JEdWNfkIRu*0YWw${wqn5B3Z=m@-;SuFhKDgw`i%i*u`4kMo=QX|2(&+v zZQ4D!1+3AmA&duI==ll)(a7g(kXxSX`@Q!)%(m0Vai(P*gH8kW#;qRtxAF9qd*7@k zCL3c_mbj_-o&rXA48ZC>=7O#Z!e;CU6CBd{i-8Khh%Xw-7{5Sal3XqQ56D0tGKLWT z=v&(ekD4)#9twyuPyO6|Eac7bg<2TuNgp+HT`n04_4qv!ww8gZ)Q^pyHaM7qNpF|G z5%6i(8d9NyUUHn2?Z3j}lwaANt6)*&*rz1c~V z8A3M%jJ!Y|^_h|`jncO2JaCe@r5%Uy{}V&4kO)KNMJS{zfFSq^*$QXO-n?vRy5c_YljU7iP9xFh2btGB*O4|0>FK6d<=M%Jcb z>?0(v7_^o z{KXU`fng)+_0^?Kue5KvG~2;n?dHghU3e0vaIUl(kS--Xb4VD{kd$rD;V82HzBLl3 z?~G*h)%P8|HANJE$~Ufbj#;EUqpvFi%B_}*aoH_W!kr3G*Q=!^R(YgN7s8_F%cNl2Nw_AzmhZ_qIswA)MCf?7%qvf|f z4O29&X8jy~9KC+uHc@%(BMI?id-*SBP&OxmuX4A|+D7TcQyOQ-mlSUVWnO^IQp$hI zH)XdtewUaTK1t)QnLUfCA{q;aWJkKG-=bs+e&L8SSe*+}g1@2XNbgKCL~TZ!nj!r% z+AuaGE+QWb_cTs6R_KZyzDv5UB~bk%(X%HNiWC(@0-a*}^E1Wn5xG!Orix#hAz;&{ z)@X}rmqZD9o)pb_L}KY!G`UwtznWE9@afmYoEJn;i|n5Y>l zS~iL7nLD@IY+EOB>Ly$M_B6fNCJJmItHHE~N$C5%ps+zkh-+CV@4y`MV@MVYrM@Z3 zxYV3p9{cbpnQAu=F_#1RJQk-GnB#T1JgS%CTbW)ewp@6ZNDKP`3U9r1_@~{;9&6w5 zBc~eu8t>i;19~l4I6iq}0~tEsljhXb8NW|1NRf(CiPh^}RC*~vbAn@6{0+G>HAn=& z9ltPu=k+)?veOm_y)zs$Nx_cpXcfP)kxIvB^3?WKuHXxG;1CpwY@o#DhpNrT1&%Nr=Ico0}C?5UV3K9v!*@WZGh)#H=<)k|HNv)lT2alLCuBSn1K0lQl zqC^{6g33C&DTs@l-)jgf)(^=lsM4@@*IPkBPz27^AF%mMGZ;@P{)qH@6!oK_xXrEZ zvrMJ*{0%Lb(9urC??|)V6#8TLuNgQFC5-(~vxEf)`2%oAjrcj-iVy+ahEmQUq z%g%-qKZT)skz3DoO@x(ZDwqF5RK!KPdQ9g7$|+|{uWLpZ=>7xk@Zck;0A*@Lxs?w_ zpv=Qg{z^doyTn>Qz8}o(Xwp)!SS_yU9Se*ax1*NZK0|a5l3>+kA{qA}+DL}|jfPPa z((Ac-ev7^()98bnx`n+&mSl}oi1RERYKk*XJMTG5KOAgm2T}=@9g zxY4M#L{?%-?vLABBGm-JSy5NBh-4@UNu8~9fB8I}g}~Xt0?&VU37cOzpclNUr6qe{ zdF0v7JSF08g~T*B7h}`KcM2qL2j=h*p|zMA`Og2=4EU_x6w$DNRyPmLB`%ernoOtk zTzR*=S`}q9*6X;x)c3GZVWMC~hD6`_FYA}$UHHVVSGHlvUnDfvUU#TOlPR#B$Vf(C zIJ{|uj)_TPpTp^J_phFEpU1%VD7QR>v zG#7L3!qg@kEaFj6mw_uVIuds|gOhpeCtdMO1!~+X&mWbkgLOE#wSjrco0vX)B@UeM zGwS)kPpT)m7(&I_Xq#NRj=`P!HJrO>NVr~~O6@c987Ep?T>6i1#maoeOO+$Z&9t(W zy)n-lVeRH7h(Y;Aq}t9e=lm)CpF}HEbAqnkwV|eQ`j4E{?7R(f3C|Y z7ukyKp1}8ex%21eP%UGDk(ahG7B@S49|(${vfQg3*Ld6{a6eK&Yg8JEQagk6{9Xn~ z`1W+1Ez`qlJ<;8k;z~nK=&2=mzIfNm56-`;mwkY6)*e05o|64VAIe9`1KL~=0S!6} zV$)Ka;e`1%9 zB2rJfGf0&oT$ZNBJ7y#cd;V7^ zu5kN_KThsZvXMH|^Y?A<@6WE?ul*M;J??YjxV?E7@HyIt7=*9+ zXSTu`PGQ!F);;iq6BHThmDYiq-z!;?LLrNzF+cuxZ?IlxS~>q*Bj6^mX4i+~_Xa*9 zwD?bcX5GjIB7LkVf*X!F6PF0w8r~(0E#CfOK`xKB-wkHE$Crh-Sw%nfYY(!W>n@JR z*GFfL>Bg@kyOYsb78<)Id46b>HJO}Zt?@VV=FD$xibVBisNE!`RRj9%l`NH4c!Jxh zWQ6$m72;2!dYjVRUc0a$i$hH9ReP9kM67*n!z(WEmyRF?b_}yj##}X|=PZ0fs^~Fl zEc7fmnq$cycvvo!R$yNmsF7L1ZaATYYU=aMVuZkY!Z3xiv>D%9TLBH4wOsI*3iAWE ztTf14rrjCaNZS}!m$QZRGe1Fo>yRhg0PW$bCAAId8L=&^kkD1@Fa50Uqyu+u7j%{XrOwg*xqy zzBTKtwB6t4;q-ae;l#zbhuuHX<^M{laEl3fLIl%NBA)3!#idLLGx*}fTf zj>}$5j}np23Ns?z4-I3e2-YpPBF1+xh7HiAQ-Cs z)Yqt`h>0bqW8T94gg&nZ(1==oz|iV zCFH$6^Aw8QvuI&ML<2f}CTPj>xBC%dkr(o|ALch{FIPnOYu&s? zf}kLzrm>i7c~2J(CGxr?awh*Cdw$fwi;HPr{JX_3i0${LeXWL!DpnxjSwF3eR#cI= zX)otVkny0Vuh|63w9W+&pyyG(!nxN5jaw;4X&hWOt^^#fD8f{hz*>1s%o){>;@{Sg z9^?m^0Hg_!^74V;u3FU}tr;vd$mc`N&yjDYf+`j)Nn`k=j})}DF$gxJpO`d8|CObm z5o})Ud%kqOnrDt;?UqrhTR&B2?wtd(G(oUEQLFbqY$$Ow6xNd|zUuHwl`njU5wUuo zvA8j~4}G?vlCF3E($k3X{`_5UZeO9v3X{r{gBCaDdxR=96uR9GfVaC8{wl;Xu8nse zVtL@1935&`$nYCnPCWGt8sL$k+|z~O{}DUvxwpR}`iNL~g#Aktvj~Y#vQ1jCK^qZ$ z=K2@kZyy76s!h>$gIAPHuAjbEfH)N*JDiOj$?kD03TF!QHk1rVsKb=q32FaKmY(tA ztu80wGd!YZ>F!ernJ;YzM5Ogg;OMKNNp(e*?{!RGC**O^>&-mSYp0)IqI`@80D`|{ z%%wIGXRSF>7%XE9nfnTJnT3N`r1LlA%%?izj$?cdgi@z%HTnQE{2z$?#bMToJHM|- zm#ePxTWw2nkGBb<-&`2iQAG1$5$wu^B}|vn>egSnMEHzMoJhI+qq7*Hgr3pp8+bz@ zAOxAOyQQw+sp!o9M$@fW=KqC!>mhb&<$mdpz@2k{OtqVXBzn)V8kpd;cW*+ZiM0A*0c> z(S?%x@C3!4rJRjzk`bym5o_5u*^|SVB8_Ey)b?^+no%m6QaN0eW@TCJT)4s& z5&(yNwo2PmL^K*L_pQipku2Ba0OVs-*VUQ_Dyi%ha)LUZn9=Dbe-{EFE%_K-m^*iK z-Na7{cyeO7d>eSt)XSrkq%f1dB(dCkf6GKj{ms}8GO=`oHV#z?zEDxZ-H zx(+*iuLg;~)^zsOhdd?j8T(g}hxmy0XtEMJKKha?bo?J zb}tf6W+TA15Ka-_th&f%cwLoc7>WyxRtlIkpI%vbQ*zCiciD6PJ8!FBZd74%-_G9C zK&-~3%#v<-$lDz(tTPC#^D=8&VgM~v(XPx4RMnbs$}s0ubTIZcAHX9q4(M+^M4by{ znB+55RiC?uRCu}9K+Z|_3$w)G?m-|kTJYt;(aw>LkZ)Axegb6DI{qsW_r+`Z_6R+X zR29%qlN!m9OCMs!nu(;ZQBVXo{LJ;iknogJjj`}~uD8;yLqP+AICAA-ymTfh%xZ{f zlTVeG?7mkobX*ju_z^rSJO)r$Ojv!xrK#m#d*1az{9PUXk$-E^2BB4pWqx) zvv~gWs9a|g?mIUpdymP-%hVQoS@1NkKG}`tvt_M#gFBMyQ;gwH%Ij5P`2nXskhcb{ zIl{!r?ML=vC#T*zA{bnrI4nrbsFa&IX>`%aQUj^b-e4}QeQ{L)?)LK_7?Dbnet8Pz zVDeA&GBOKaT{{&Ue2X_TnAm#@=aW{y8p1Ib8unk*!d<6IZ_Q)}S@VASZ`$tFzb=t2 zK}D7sN56N}UUA`chGJIjVwFqJRoLuewTn+!Et)jWY}L9CB*xWP{R>4wT|;zrvl`y! zwK@yMVn%d4U)8I!3ZES_gxxq2}!T7J?-SgK^B5DUpD|sWcQ5oVUB!Zmh;_=mSeE!yMmDz*vjA)~xBm#Hpb3EtC=;UkT)S99 z^A5U%RND`Y^rB6W&kC>YoQh(L;hzaAq=Op8*T=%D#_N~CB_p_!?i11-Y1K76ZMI7f z7>Gyzhs`HHufTk+6xc6$Vs>%rQ$}@CokG3%V^0&;dE5axhLvekP-!B3znB?Z|wn}VKt^T zIAlO@E{6RWTo234tYo<@k0^af@+pBYiAAM$KCi#a%dBKDu)}mq#%+e@k6q=`v=|%!_x@Dv^DXr z-D6h`0x#_kDxShqx`N({Yda?@@M3%`I{D}eA6kf|`#mMz3q|&Y!=g#d;$Bqu;m&G+>;7Lprt1F4ksj}YJhqR%*n z4XpipdzsxlJ;bhoBG#!bH9eIpoYN6r`J`#x3+`jU4f4qpR@XdXzH%C;1W*Q^qHl?q zFukL~k#bzW%^ir7rQt5jEXbQc@y9QJ89``z9netf1Ngtfm_AD-Nrm`{Yps(KLN&%G z(rX7r{>39wU*iR+cV2XK{{a!r{{_+{i;>bTJhM-b6Y5Dv@<~? zcij(o6_|ySNPaTsa5=1=4S^(i5*S;rmX$4CdczD+tK8-?(L>%J9LtlKZ=OrUlM`ko zCZ{70pq9y1Q!~zH9KDnY#`^smZjA)(Ejg)hk2=wc5ulCrnHH$eQr|jK95`aK??Q9x zq~mY=v@4)VO0qS08J=Acc69lOP@klD#*%D7=pwL+K?O3uL`=B6z(*736ss6M} zdIyEWTZncahWrE@w1XvEzms1hO0;;3*pA9NXZu1wvjM!_rlL}>52R@J2zi0*G9|?R zC6t-m$@vIRtyA%q(SO_bD4)Na$RS^$dBH4QRwS_;rqWq$m@R05hH~a0?>lEE=VGrN zyAGNx4P$mo>gIV_P<%Psjk;siGb)LdqDA_N*y8!$D`+(YZcmtUKc2h3>7!vo`2!Az z;{zRUi_vebb7PN;(Rkp_{fqwAGaGzHuJP+=f&3!5&>bif1TDnzg1F$8OMZWk^gi5sc0^y<_ud<=$zQ~cQV)wusqrDZOQ(oWb&4m3ald6~V57Q{) zTPxhrxvGOxTj1vMyk?Foi}HiVmMJV_fp-nGx&)~*~jfw2x* z(SmZi3cg!^k~)V$dH7z`C6YHqhij8c_FNxL&y)5J3o3Z3n-ynyIvNjbN=rGUr2JS( z61|!e*?y!(qY#+va&h{vW`Jx4S-1c}eC?$WQLPkgyhA5);gu66H~0X$+kx3nT(t12 z!UfK(NnbiPSq}g??}6&(fDAmf{6SJ|Ph(Od`qiV8))}A@wF`D(vv#&0S<(d)=}c(l zx(-PZiR!IL_7j%)@kr)tS1E5(Yu-d9x%;(o7jXbjK(N2TA=w658fWl= z1V09k!@rC#;wAr}Ha@gb2hT@JC8Vj!_9-S_P^+dv!nux_5qsSak3oIs#pXUON2Y1F zb^J_`Qem!TwT^Y2itHQAJnZTE>}Gr?BJ5>Rc;$r6ld}EK#l4|n>SsIKt zzkEl8oOXW_d0bJ}P%IxSmKu=~FB1L>$DUpj>_!~R)S2a>Vn}bvBBTP~F9Kj&*3U!D z!HmTw6t!myj^UIKyYFfHm@e%hckGn*OI$pzfwn4r6@E1!ydPoI^J+}p!%pt|zQx{*es1Z}cZ$m~F;OiUqU zEN#&Hu}M@ySkp{Y+cfP~ifs%?7`;pF`NiSjD63N7Zi-&)2?iv~cxD2jG;kMzT)n9i+j6zj7CrI9a-GGUT_S(|cg{sQEU| z-hu$#Jx2$SMe6wI3@|V$+0hc5h0(vg(6740i`cmg_L@vi^>a#vQ_5^{_#}rhiToiC zm=KNjG|YX$dtTk>BXU2?^LEWE-XFR5()iNq_+G&-*;U^L0-43gW#$@hVHHI;T&*oT zcybEvVNDYww!GdAp%nJjBDnM}uL7~~E=y?32Wgs@VM_mhZS@%oQRmiM6Y;d_zR8V} zxQ3oa=Vlp|IXD0KD2&t5X2bq)MY1zhBuv(tDZqG@_WQo+yE1?o*XyD zJPHek_oJg)Xru)cRo1f8o7WvSm${x6;p;xLk8BRLclLaBiyRptG)3MF!YZ-pmTKql z+{54B@QyD-S}YDTvrkmw7_?^05AsEi>Bu=@?xUiaK+Y3-YU+$|77WcJ4sSJgI|KHP z8Zh&~U*6Qgte?`z(yCjR(mb;SR~p#*N7tSx5Y}b4uk@T`N2HU_wI$b&K~>6xH_q;Y zvhC14*A7NM2H8GFo2=)j`e4YS>#*AAX!W$fATb-!Bjo=MH+I(TfGmk1UHyG1$AF@^ zgZUC_ECJNXLF1(j{NvZfVsKqXTo4!~x}=@8I-c?~4rRCj`VLy= zq6~9I;pyEqB7i2)PvoJ5YtIfsGTV!F#Ua2aobja<^G09`B=a68)xD=oVX}QM*BSA! zeDxk##Mto>6`TPYkXuP&cYgqPm$k;C17mec|8NZLfxb6mLL4(@ZR~+6B45n6m>6B! zJL%5j5RB3Ruk=XnHH8#Xh=EruZE2)fGy{WTzo+!lZ_Q&W^gNAj<4koNg?*_FNn5_y zuiR!}ND&E#mixhj^*ZP}al8lLCu}k^*2IYeq*kt686D*4cJvV~#%_ycNIl`ll^?Gl zjlMVwD8l?{ko>01MT~sdnc-}=hpU`3ocEbdo4oK|dX14gJRqnLCW@&QEH4g&qNq`3 zX3S6RWQP%-L^77>1&%;lGV)eVd6;FT7K7ZgdDsFnshR%rg*K4L>Ty<<-4zjOulxJ! zZp%Ymlp`gWMw1lNGPWP||Iy{;nEqEqKnd_|&(I?2a(vutHx zeVZHMB-i9Ia(sof0#!^CZ;(HPhi;s`#aA4{5(963*s9od)BI*ImPaFpoSI5&M6w4nIr5_)#soG=XYZ$4OiH5zD0xteVz;k8cWK?|5+jIti zGG>v=lUy7G_StLp_aHTCMG6=Ez!u*R=YT?1DRdLl0#5Fu6(W%2mH=_MBbYkar^3E# zsR8suR7t@)q9N$t$4)(!lw{Z)(@c8zT4tP#o`VYm1$Dno$P!d!$OL$ks1Cr_@jK-Ei$a9*!Kr`%@P=N+nG%qO@xy5D(qvQd^({q{+BC z7rgn>#?q^o?P6fMKWkK+19&EOd4_^DEj+2NnO;q9f-=NG0k8ho;2KiXBf`TGYmE46 zLU0&s?K_ei(;^nH!jk;f)E)I2sM0Q|W*{V0de2_w)0u9F`^M^2xS5fR~V!fd6 ztiug>hLf=rTNPU9WfOaB7Zh3J9uLq>kEtYZ=q7Q!Sf+OVy4y)_ZD=cJcqa)E%j_oA z(CZ}+#9GBy;^Y^6%U>8hc4yE~O@cP~7MPa(mf)O79MNq%@s*lY_MauDc3B1tLboRD z)Sg@&h`AC;arX@_dw&z>kX_niNfZp`W`AqQe791{lRv7vTQ*4vP2&TN^vh4;;aFkS z=?kzZQnRO2(Rpj(ixsr9Br&tyS3LP$p${~OuDXBQcIL?k`U>Uwa^kp6 z@lvPOGT}Q)>K_RvO7*GR^U|y{aj=LNQ)ey8JU+#8JnI&e{Zqk}WIDX6gU=$xdPJ?y ztKCph={RG>8pPa`sV_RaL&Wa|NbcI)`yRvvQ0qjW#=dqG(b=y{x$@_1%t6?GPg_j1=K>l4pmm6-y#_JwbC{b3pH(?arn~e^+qCqcJ zu>h5qkmyWeWSH222vdmLxLKR1+T8;X7E)jS&{4rkxtB&`0lYE|+eAi_L0eb;i`ODD zAJM4u`VO2>3HNdT3uoerl51Es)=aNqX=>_)8z5BbX9qXe7wdt*_v>X$wd5nJrRv_G zZp|Mk`a7$ddn|D8hZ45Sdgb!=Pve%aAXjj;hQB?Kl(vQ-Cs14OC*G1MN6dGI*H}Yx)r``tl`eg$i~nfz zR#{jG$cRQkBxc;(|1vIf0JS7!(dhNYn7BfAu1|qtTKR5I=E5*Il8$r65Uy=@?KKll zF{BJ(;f}(ok~1ZJAb1DKwrDT(4bp?YLN5TMEn@K*`0Bb=cyk`tvm>u+(+g{8!hn;G z(N5eye$KR)Eg7g?WoEAZ3qA!PY<({Y*5W z|K&zFK@fPE_KqIKGar$RRS|y3K@I&4S;%5R-vOf^Db}9J#9ZwXQVQtHXaSZVvNEva)b+>^v{<1 zJNO}q_AHs~3tTMT{2a@^Zrw1fD-1+)L0&hYCBOild@;1){mBYFVD$O1vPH3*fDfPR zpy}xfC#X+juiA7s$f+f-j=ga5X=HdXxR@aSKDX{)5Y71xSNur5cCC9KaeP4emy?sz zUAJ>j0XjLkrH|syBn%A_a#z^Z0W0I;9EU~*3jc6MpAm96fp3h+m9Dkiy?BDPR0<8C3Uq6uw1 zNW$#y<#E`4%^5k1LCTbUG2+3v9KU5rmi>i-q&Dq*FjDEyymgGBF7A2$n$fey1+A-Q`4lZd#Vg68BSjL z-e~*81uBs>P@e~kBX5~wogX8z{RRN>S>nBa<=WQc_-^fghR*i&xy;3XwyZcu_?)VzF{?j`v6@mDU?^(!F2)MR4b zq8kn-?daG`AR+n(vRf)PXup@hvYuzzY-(fdF&bO*HJ|#uwgRc&%X|D$8;WVe;0lJgaM1Ff zV$B1yA=HuuEz&Z(Hd)8B2T|5J?aZzyl3gU|lAcc=yFfS?-w)^QaP~J94@I zTZV)}2(ao13h_+plA&#T{pwYvM033Gzd`8wchPTHOUUv;z+HPOM$Mv86lAchCGz50 zDb=Ld?MLdlh&?x28$zP;y@7*vwDLX_x(pMuF!VUUq@uLz z+n*IZiHgz5F{}(Zh;n~Q0j!Oq_W%9LURv4yKt@^c&9tHXA>y8XRPN-LkM%JHHb;7uLRgm8&;@wSi0r{Lg0sCx8X$H+@vay05rxK5kd!KUOBAC!CpD$#F>27Jb#~|N2{yW3 z{*{3VMb48TH{%$a!A{0kn}mizw?dct9KP!l)ydm)%H5!`Kb{C_Tq>1v@Z|j}AgcN_!f0 z9%Cj=<1%9u5?UQ5aqE%gE`CPiO}zjmX&~LE1yX+w4xH^ygxSsnTdAe)cUwbAZQ+s% zQ>~DJCgfHb&7LIRTdOW!GAe;=QVRMIkzNV`25wAs4!r0lc~U@{W>jLa2~d zx{ow*fc2c}Zo(x7AbfuvZbPo?UTCmp*t!5HD}N0aSlY;2xcS&m4Dw{@%buTvTp4BD zf-1k~LbTA*0C)HtrZ4!_Oi;kGz_?zjKYoFjjx1$oU{Y=O7w-_ov(s#^%fD&txi!7o zEmDxwl<)!@&o`QrLiWOfcpEbWj$H^H+nr+G$nu;MhoL)IL9;BgrGXg_IqyGD#C5-~eQ7{aUmClegUrAu3= zz{(xSh2=J@Rs^#^e8V6=0#Y|M6=e+)s}E;m|s-h!hJ@_M+~ z;%g zmdu)kb9H9S|KLQclY+ohvaT3OrPnI6Nq|=qDLfYt?qgjr=}~nZvQ0_LBl-S!PCp=>|VZUh<9=_^lvbN zHgd84x}c}3At#L^e8{))gnCEG)3|DAmN+jY!FFRgC6HpfMRWgi5R&81eO)ZCZO%@r zgH8vWMmRC*JF@vrC1dFzGZnpB#rDX zV$Eqvua`DS7*S}2I3v#ZqbOTP`h;zZra9XKRoJr1uk5nXTyp%>SVI|gz=8s%0VH6+@*~qVpu7a3GBv^I^0X&a_x4_;l zP#jf!){xcxPH0d_6s!g&dFwH>(ny2A&d4s;L$I(p9%xC+EXFXY&Z4)h`#Xanc}g;z ze<3Le1iJZBfEPCz^$(~d$eZeWJ`&`H^xygoGRH1{2q|VkX}4|L8tfMgP|M+x2Idi3 z)3ldlIJ`wIA;kn=RNjh8vLOIXCk34(Hw?{2um5xq!3egx39I@*LBNDfs|e8OD-#ET z=w}KOX#~Jv7Z9kk0wQ3($tfGuug{H(SOj*CUph z;PBAL8JOkHuLlM0{zKNZmnd(fqOr%O$q5xLtOqsIt&Gp#qeI|I&4Xj0pS7~>3O!Xy z1}Bfe;hJv)l&A8R-UMgz-_bEzrSw2Hrcp^p?c@ZY0zet|RtEtXG#M7z8wCn#YhVBX z96Ymi=he?00OSYn&->rR^Y_})bk8JDX0s~NR0xV=X(@QB1)M;dGMSNht0ENAle><_ z&zNhPXs0($f+8@uMMNQqmWvQ_#}NWmIn>hfICHO>=R0M`<;6$dy>p3!Jf=`A3@W|0 zhk$A>v6`b8`$jL7{Jb=swI=8eO=HJ`dSlzK{k%W9(R@6d7uPj?CeS1=j0cell(V`9 zAQ=EV*g$IIh#UX_8UaC{ltmRRXYTOedAp6O)hNh2yyyZnWR4gID7Z2LW-eFETCgx! z+-HBRoFuRBrHs=3=OsYSVj54!a^SuQqRqGj<*3;9YH?$50Tkr0lXrtYsOYq|#D9dE z8D+DZ25sUCpMQua!Cd(^$4RlO68z1KH zMW1;d4!vlcv8hJ!ylwEmoqz*Axthzrr1ys+@>FuG-sCZhKOn)i?hLqQ&ou}brT|}N zeB?8E(EnT+)^kHqiaROD9Ja_3Sf*-lb+B4xAoB;4=R$bPeB)*r8%v zqpeN|%Qk&edMQxvru2Ykf<$P59VZ+>6ILJ@U`;XgkPaQNz;Up5WF#9A2~1D`%y=Tl{&lb?fl{^{8F zj}N{_Em)Gx<{MlE@J)q(ARj3Oak}15e~iBNg~k-k%ZjIsS90CdPh!yu4~gsB)Y$}@jiVuL;Z&y^3q5XyZQEo?AbMVQr(GgSdv;8aNPafz__BY;J@LX% z!Wd~Q*k(pE(Fk#zb8i0U{30={U!QJa-l&VYGXG3Czf<7b`)#WAj_-)29TmXii}WDW z!d{gflVz=O{lz?1a{Nqzz!!FAG0i+Krey#u$}P1Gjn%$Kk;a%?AgulNI+#P7s5|le z9K1(Dy`zb@!4V~|&2s*S%heMBLE~ZsaeC!BuGhtiK0bZDV*jhthLi;tNz~&3sB3lV zwi^KSHw)QJ8uz8W#SvVweay*NxweG%1G>%~kc$OJ{quWkbPDJe!%n+Lg7rZDSOT~F zUb|gVbS>~u#SfNaLavLY1Ny6|g+4}S*H`_coQi1#Sp2jt)b%=2KH|h(<=%ZWw&0?| z?JqG!j3F23kEGyr5Qy*-wyG_C$k-*#_Q`JaFpk1O$-P~}5qGp&?eDap9elh^U|6n= zsSu7XCDy=I)@Lc!8;F`Q%6rgAnik zOn==7OEA!-?}lbdPxtX!8ovH`uA?|9p1H`+4q4lwMisbZ4XYxnD|NTmZl=VT2++eG zj9gD**&8-A(}ytBRnKyCIt(FEfAdjrHO1dUiXfg3k3|Dw1nUEq&%{X#>BLU9;Iq9@ zUAi6f?iZ<7&Lg2jZ69NY>%Gb-u+~MweH(jusE+ig4#Q4vP@rgXaqbmSbOisB***WO znQyD7KA4@okrC7gr3pZM7Dp?u$gIV8!YevVwz4zVJykqrCXWnKPLr1w-F+S2A}1;PtEygY|0pt;zxv z3Q~p{w%xYogF06yP<9M`5VW~g68*iYq7%|+e1ar_?S8H$KQQ9QsCMQVc4Qt!Ufh{i z)`GulGFK;)hVX^x({(?)FFz2YXU9qF@_g2Fp7`Aw`%Qsv^xU3lZZFE;c=?%;`{P7* z+)Gck)&-=FSm7k+vL9 z>{@LT;K1bo*{snN!rLE^`_=m5Ks?Zu-sVp-`Tae+aK?7dhUB!@$;-1HU}P6RJdooW zgs@urSHk2Vd}$Hh=OtmU?V)xUB!W!lwQw;x+nj0N0w8VsvlE^)-nxlVh0#S27sV)3 zB*7)U4%yuj3SMty=*P{{5(*r8y$-9A1;tAmTRa3%O?jgvO3m_55SjQK$my~oFmR`RnedYJdWi6&+n7!05>Q2pMQ3;tuFT178)XZ}cbU8Y1; zJQ~6B`O%_hNV=;aSU=>zJ+^glh})E@j>9eVY70ndq(Z?2r$7e{U9IW~R^$$!W6OCY z9!Sr$yl&;rL!>Sr;aVL!T4u8g0FM4!L%q0K&lbOfe}N62b?C;@?us^rXL$@uHBe$2 zr1>7+pxpzE&N=-D24pE1=1ZnT5H%7$GYs1HCCz}WWbP$A? zN^tMWGd(Ja^$&-t6N0M(Pvx|qQd-w@Cddo~!t{DMOL*NxHt`<{$_Z10kaiAbtZU7O z3u!oN$ryZ!E=~vdT2bF7vA*vMUz1SF^6v!}8q$U*`2ZQGY7%}Bhf7ew7e?ZA@(l)9 zN(PcRcstf{^k_Yk*MovarXKOxjfK&$Wbl5Of3&i|voHw8iZF^_+LN4B%6i~Buw*%x$xL#Nr1fV zvEdB*gDiLAP;&>s)-pbHBAwS3Pk|>c9BZkzLekMjl1G~E*sTDJ(%*z~Lc5$13%hf5 zL`mo?4AY+{ewe7!W~Il55xK(O&S*I0<1||ZP-a7VBJ~+LOj6$!vUG2RyzV(-inUKk z(%lAz^P=>zcStUgl0Eu^?bkzCKD=Z>jy56^6BZ%e7qO@IQV-d)yPVN**XL(n3d>`J zvyl#Upw+YfAivP9x#vXlE+$?4Ir^7_zx9{xzNy&Osf;Ybyr-6A=3eM>V|6(IGR7uI z5V~{`p|}akc6oF~54PH&g>;>i{Db^| z_&)pBMGQ!yE%kZ|UZ_EbN(t!m9_eVxG9jnZt+Ci0Y2ccg9v&&)UL6ej`@J?zM+WHQ zz8nVrnsfPgjYc?Uxr-q~b0P+f$zHwZl3H0l0P$-*Bhe@XHSc0*q?^h=qq8v$N(7LG zG2i>L000>3HUdoN8^-<{v%S`RQ}Q@>W)%?{G7*>&&K3iX|gN!p(pN9b1T)z2B6 z7VdW-qz9|JhoedFZXz9hG(NGN<6Lnke%GIQIgj2vmnYqv#B{bqgh zpC>Af`N8KL+65Kc6kSnGX(xRE#)GDaO>zv+tCL2Uno^w8lP>eIpgD}gjk-MUdQfxD=n_L4tHS6f?~XLazsm)P^Ti`YE%7VlzUXyK5cKW6}^|KH99=Iqb_7 zGnqJ8!=Ya$`+6*E5Qkf!se4YSuAuClr9C3mpF zx{nQv`Cs}Y?%#p$yeM-y^)sB}of=_J_~$InRn)QxbX5F;HC5vhmW7>_yD>$EX6ySbyYrbVr*!hqXV9Rg}rkco#B+y6K6bxDieee46J>Jx-w`~=Z?Xw{dFvHX;Jni2aP%IvnFc@yzT-$Tkp8+4YN zIpR?(OVn6#3lBZKgc^b1U43^(HOJ4W&R#6|@fqFJMbf4Or47gBZz<0vvGG0rN&G|| zZvt?oxAOs3qp?-i36jk~^Q73=v$`Dedep#$>`0)ve!;02tz=&IQ3)~$D%48;pE0y!>u5mVOOOls#JHk372Mi=V#b; z=aSWkuIsirQ>1C_Vjk4}{C-nova_G4fO_!k;n?Zsb6NcfwzgO~rk%VmOQ2az`rKXf zRvV;|LAqrDk-twDQ+hLHw%7T<_cI!q+ZU~l;g9gPF;}Hz>Ii{0j297tqp0R5&}{W_ ziF9jS@ypvgHwX^zCqDPe%#*`XdZH9sdolF z2y1I-6mCH7s@}$zaxf3DMI#j{CY2%Az?|rkc$&#sw*un+Niho!*0C)2i~urUnsD9O zlgr5Dp!szjRx|5*)!v7S?>JT7(dtY{2+|-y^;?oKeNIjV;CfF9WD{pFmbVgg)A^mH zjq{|T1sVG~U(e8?SqjRxTyHQz?nP1r5p zkLCcHhNx<-PO;W}7mshp*40@x^2u{AErG7&>|?|TM}KtHOP(KsLlD?ls=-_##eQsB z>1Q?T-_mo3zGB*0g$SNsV(F2rWprs6l4-FtN@L9c%fP{yw+1A#^U?$cXfdg5{9nhfI zc+aNrpFvdC4CeMDRXhKI({J5=zx64|_vAOk)aCqq=)VzI{9j!@Ni^r2zR4k0|7gsC zHjv6yJ=sm0_avF_h=GMfzDf;WDAWS9@-HT>s;gcAM_O-d+ySxIwi$R1q@=x{uz5!O zaA~33{ix--Mol`cBvZg^>t+Rnil?%F6<$qnOfZ}DTg-OwEj(}+N+(!6M8$mL^xlCo z$JjU6MAxJAqB;vdUv!MtD=>{+c631RZnyDM>+q8lzl|u}_Nt9X!Ka0$ikLO%D+9Nn z!e-pOpF0BL8jzV)Fz(Y=&R~e1Jzi$=yP1$3C(zh2>7NNqb;d&(lFoS5{S+njYWUFE zM6`q1v&i2KZhER#gko4O{D{gEaXSuseSS{Vt`5WB6U5%it;bl48=S)qjF2XO+;itw zvvetrhKsrk&z7~Zr{|~6CHwD|vItcwk9B+%1nVb37pNb!DovbD0`EY`KgxmA)wbzH z>Mk=I!O>s?d2zO6sremx&*~m!DV!nXmf&{T?lzE9^b-)zv{Xs6jt6uz(h(U^KA}Wm zd;fVRiNd$89i8x9;`RFJm^>GHhbW+SsTuEEemH;MCM* z4jv3p0bthol5g8#T-?C^Q*D14z%MTH|3|(|xWX7E%Nr*?{G`4e4g0FZE zQ`G0)WH;(Ypd*FgTRHl7Hf#h1=Seb!ryUizX_C9LF{3#U3;#GuH&k zGxRgd9u>9w@0w{mV(hP((@@zjfNi&@Q0|riF1L(mGPrA<)&(ZaZxkgKR`g8m&0Eua^)fG^peofAIML z0{-j+Qm;>xTK#Ibv54BuyYKzT!Sg!eNl{ z*+b?7NkjU1kP4=tl(S#9^=JVGn_V26yCB>twFb=~yuHU|Y&?>>G~tyP0z9d)E0u-M ze6}RJ0|L5lRFABB=Q=xlBm*iz49HQLxRT{!4?hR z=KA?XcRp3w#pn-~6#xGG=Z>SpW0)*h)5O_-hNcBQ7Bs?(SJ$?J+f0YbmV_2HFTAI083jRkD0>RsGjOrt%; z>Y1T8Hv!QOk=|u#6Kli%N(HO7XV9bvYtEfVgOuOw1ZX$bEJRl_kvXV2QH-YW`{%4j zS^D)h@;tfWNwA=-Qs;K&0_2?x*DJ-H0-h(^@(hl_mnxPQ!Xh7xvx;bC2J|&1&uW~w z(26X98O4*hD0^4KT3IM7udi#irPEU?W>%~4#vD7O=2fN!nAKpVU;a-<;xMd7*Y$97 zTQ%i-PV%F{pS*(0niKHT5r}5ZXC4wLIu#ja>B%(55=koT!i5HOjhywM_>5`FNK_Osrs2d+1GMngL^Ujp7n%Uy6!!>6LQha04@aIE^S{wz8A~n@4 zV>D0Hvd?51`SL=(GC^TdwxiJlGqmkcI5T=nwRhgLB(s#LTaF&_+mN(W_G!zy?^sAQ z8x|Kn`&M>k4>Un9m5r33OErrv;Z8~7)?3BIjZbV<=HrYf_8tO%y1H|EG`dP;Pf zj(yd}(tl>flOLfPnZcX|XRjm-jopd;hr|#-h3-&-D)+R8lTPLk=eYD?oi}5h>NLyunS`bHQ`HE!fVr< zD;(NG)){WIqm!0c5;}1uh_p;p(s_VYV{BN?xzz6c;u$!Y0+Dyg!)JT2i%CyV?XsVw zVK31@Dz65!(#Y)r+F;70*Dc}Tiv>e+2{CNm3q~P{^leOS7>+Y~o7+dGAIC2};!DCz zz_~b^tB^Ayh$=VYVAIMfC1MtBn^0wPS9bARTqa7G*KB@EY!mz==ED+!wzNAKE&g7{ zV;99z>$#6|jdVGJNdSO!VN;DiVy&*T0v{FmqG9XLCJ2jl4vXZ$~4O*HO{Y~ zgWptJW{uWav4$Vz;nJrZ%-QQjVO}nNf4(8Bd2v=zHV@x(YhT>r=WO%1;ahQ?`D3_f z{eu6v#aO(z{}$2+jqVV-{v^f8R01G3Z~`;XA{+n!4W|L0vvfy)`8>)vPQ`DRY*4TN z1N2(~^u-V$r$P>|f(sE5j~VPRTFf1tnQqb+o`aeSF9{1QdRf`(=k7hJo}d6UZNXK&<XwKp750PQiL3;V!UO01L{882 z<70Y5KpB{~MZ?{-#=8g=?=;+DBB}lm?Uo1=&FNfR)DC<$n5S>*7?M|r@s7C0XaSLoHkh8#Ie#&C zkh^oc`?)~g%1?-gr>K@>&vR;mItzUqAV)XM*�ME2{QE2^6+}K)hgr#ntrRy#b)$ zKKuhMV6F9Jtdwf(l@t}L?O@kPe>9Klw5kK2Jhjb$Ne0#Gw-{=N(0a~=Se>*qq`0Ju zWP8E#6L&3hT26hF=>0?g9O)B8-a5y^IcLJaPL$T6|9|L110m@@^CZK`|-Mp_{R_LxGSTCz$F zFW%(Ri?6l{IOF_WLniZ}anGkLf7}AhnaNFu^_sHvF+}e4uWkh7ISHddOCIp0zD=j02}YDht6RHQTz@$Tn1Q+x=v42H@CHgekcz}Klic1mr;s!Lp=p{7JX%$t_+q)y*||&mJ|m5X~}{>PT66K&WFA{<9dG8eQAiX(4KkTK-%5 zOdEQ>5s6elwq7J?(?FmUe%*Dmzy-X4__(lr{^vchuzC8Gqg5}VH75-Hr%3HjTO{EZ zJGwQ52ijl+Midd(C?M}5+qlqrx2|03{gS_$xq+99z%XcXZLkOfzZnvJoDyNJFAIE) z4P?vjqtQqnRIOSuyT)Gi9(z;N9E!Pq-}#~f-()p}~w2c(gbYShCdOB^K5-~Sq3r=l< zyD5;BZ6G)G+&qEF=Y`WB(0H>!g7u~V|7_V>K;cSKQc)ApjCV+C76bZiOnimA>vAu% zIGB^cWK@69x4Ffy6Y_5glzMSehq2zW$wKSFZI=iN)oeFlbgWNqu;SsLn3@%0DI|lr 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Śo-|2%tls^RF%v_F@i=1B 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 z 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 hYRDlWxaVhX$O^Ogs=E%I5t5 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%0DjH?OfBxU{>Ed;d5+PkRFz%b&d)( z=*h`U+2<~Lg}khyu{2VWi1HrJh2nOLz4wf%*qepApn0&BH$7Q;?-7MJE(c_H18^7z z`BSJw(6%*XsDWY=*_^JWE*72x!ZpoKuY$-Om#f{dV6oFjubT4|^E}4L24&EOh=PJn z6(&2xV%)ozLKRrUE*KX_kJIs4yP@X0mw(gV&lYCFRuG0A73X5x8;2>0EGVU<*|}kh zeBcO+QIJI`hDwuC<~BqS^6*)ub$Edb6K;q=EDT0Q#N>ci^*M%PGwPMt3y!~9o-!>< z0!BjgPLGI(#I_EjIkzA3KZ||3y+Ww^&(vVQ#<<``GAX(+G0#1U>>gOF0CPd;wl{d4aSc@(UtwIpt^37 z#R+*)0=2=DhDt0(zq8xicC2bWDjOHjFobKa4Z{xrpabqb%@bn4^1E~iQgu|zDK3<2 zFa(5_U*N@`sY0Ebf{x^!YzHvLR@xIJlU_rK!>7zAt>QGv;{D6Gxnxg&T+FUuIw1fciLUJt+kCntkL{8Phv9_oZM z*Xi4UYEGQIO6TYI(RM*;fmT?1;P5xw2Sl+?58EL(p%XP;cEP>`p2)NjlpddDZ=Ec| z4@x|PC!kv`>ikizoLAGB2ZzhjCEZ{X3Cex`cJm{k8pLio0;_)xC3Z1NX>XYxTTQgIApE-abJp|l znJN|FI?MfVO{;UiYQV~aH~aJ2x3WIuNvW0kmxWzAJP$HTq&cgCgG9K2R6K6Xi%r_j zP<~G&kXZAV9TNyB4AMcISR=5bTtjmuYzn9&j*!fCP!R1j7MdCD<&TvFOUd>!_pV6s0KU-uzp4Boqr+f+frDK7DLAgn(qP|gxjM|Zf{E#4{1$^Iv<4!738g@{ zeygJ5K|YT)e#~{G>EnN90oR z`1rb(vdX2Z>s-y)ljHR1|1Tk~l~HP$I(({$!2(x)s35h74!*88A#)sismZpqWWaB7 z0CYW&YkQ*S4e2*)mA9*y>CXaLN0^}x9Vu)VjAs$zOPnkI$KK?!SjJ~Qs zab0?BVjEQ=rW-FD>liwWT8ktRW-VNAqvu0TVUW`4I-r^%C+R^Gl0<&j@b9c~t$g{o zIJ|U9-shd;S<5`S15~+hacAuv-)yd^enqe{_IS8RT98SY$v6DRs`Al&EQAxV`21`s z-|C79!j^z)c@#2opzF7rms@4CgD@aE9EGxt?3JlV$(f-+=sq|095Rp1z?YcWkKYS* zv7y=YOz)*}JHPReS}L4V-Vf1JGDnG4l@-6Xf*_9Fflv<%dcMYX+1I*Qe{)5pdE7x% zmj6i6$L>%Bhv{hlMNnmoR*kE6JO|bg{`JAQZ2;=m+|?8-4>Y=ifqUN51|5Id>W(UN zX2NOq+rzpfsFGXk6IH@hrH4-HxFA2DIpn}uG9q>xz;%}L{G&>WYd8@*@>OUz8|FH| z=wz;wHBzPd!;4y+^jLuI*KsA5lnxWcWPa_K1y-~N{(^ZOC>gB7=H z9q!CByuq@7L~=n!k)e4_?NCPNHjSd?&XY8 z_vTnKX!C{Lr`SKVxYtF9hUvIK*B4U6g%7MB){Z*b5^W7CR$7;j+#sX^ebUL5&tK^X z*4ug8k^m{eR9#eNX&AR4Qagy&&&8^6J%=T+rz}6sc0Q)hZwJ|*fs_-auQ#FsKl?0- zgb;$3>O)UJ1LC~=Nc}$%Bx1SNnoPdJHe(p^A`wwkPgZ{L6FMkbK_=0f=biBeLsDl? zNp4nTi&*tL>s0B*G#I(nIGP_Me3&~u3vvXZ;zMMKTL1M5QOXCn_x5A=z8qy%pi-|0Rl$46^4zT=Km=>5c@w|;@^;@cWLF_Ij=^MLm_!fgLmGVk*=0-1eN=Q673CmQaIdZ zrb&3Y6UkO>95`ws9~6=Ym6zo3atCQpjUO?lYX{#UrL;zZzm6JyX1RB$MllJnc5du4 z`MK8|Cm8IRk8bgw2_QcL+!kmIon*dk^aKQU#j)>9jo73mpQceCHuM8>q9{>8 z7vKdFO!4Bvzu0a7B@7UHz)~>#IB(^f<>TB{fOLK05=)0^zLbFWHPr+dV;r#fRzAMd zXYT#_DdD5$(mhW>v<`uZj3% zSm}|@4#2i`WTB9MC0}m5hhKHNE z6@o8jc)W^PVtt`57>;1!1Bimjr;bKJh@QVxBUgRTSVK0ydTyNMH$`)y9eFFBXSa2CxI- za2O4uSl9EX4+(S`_8)OV)PvPnN<*)&p@9&dQ?$RPRVIBshtGYieoCZVb$pFuGm?U} zOA(`mqcnHw$Jt1F$QI=^U7K$6k^e0ZTam1Ns1p^xqMv&0I;#5<|HrI8 zj@?`6C|Kv&*pp&S97K^r#1-@RKgRc46v~CQ6c}Qf4F07Jo{`oQVGkF`^0^gNA4G1; z)Fh6>lKw8_pgS=?pEEBFM-kMaWj}=7*7bDg;DKu}?rqe*tg^0N|Q5WR;f!H zr77mM^iV?;;&BTMS!WQC-xvFqLO|BhHb->i0GuZNw@o0k-g>Sh$)7*38lU=S164ZOkk0Wbbh3s`x|$qg=gS~WyG z1Dr!lM1f%yy9^CG`x)=zQ}Q`-ra#)XQSH3ypxdwYxQe%P$`BWM0D8z>YkTlc87If? zF`ONM6vx)~-OZBZbE$qfUW?JSIQq&*Yu-6)4-)G=3;ds{s=FF8?vcR0Gug&H@(7V* zTt}SQKZCH+;iuicdAld;%jq?}AAV%(Jbts1{L&6_a=gQg6{yyNdEme@eyP8EB+`d* zH$ncWmQr_Ga;{O2L!e&!*A!{(6U~OuMT_0kn!K>pg7g1c>fhHR;Gy(>7;BtDOIHv-=GpzPz_+qSnYYxz>FxPc?N@W@+&DfOcU)Cc)jz zoHf7H+;Ha0Cj2`ZsM27yWORTnu4RL{M{FyL)R0JlK1@(zO0XhtQ-CYc0ps2;dx^OPI$#fz}aK?23;` zgOJXW6MgYiv&S5uIVe`6d#*G#W)_!4ItQR2}MObU19x?D*kzy5IJ6(udl>TXE< zEvKs3$}{Y00`^+w&n9qbk7hhU>~NsP7{%y;;emL$o0YC0zhT!U%&BSIP6#Zw8TW}` zZQUMB{hf34O4qJ3m5NT5wQ)tHkP{ahXejWl07Y9~U1*R4ZPAuT>eP}V=#VYO?xAJh;1AEn*WU;L730x+x&wxK^8DL*5qP5jZxVGaMSUH%1x_1cOAyuOQ0pfVJ6Q8dzC{#7ThpF z;s54obuKgg;-vu+J*2dFhlP5)JYBtb2kT0JM-7}p4HLHRl*BewIZR8+U_%j;xvYto z`j2NYbSC%Di{ga{h1}d)I>El%m3FSrez6u9 zNpw50)*7(oT^j7@5Y)(^<@dZ+F3~xrz0*CBF`;mY8u9;^&;JJjC3YKS73cQOi{LS4 z=V)fNrff%bQ@<{Q=L(##aukLk!L6*N+Kb^cb;0Rgz^xrF@JPa4S9zEKtqt6H>Bz6< zJdzqH^S0o4mgAuo6tNM~p1B%dqqwib5#7e%TEVE!k{W@85zOwrA}o9<{lN=}@8v>R z&V(x*@M)`_9?b{Mbq|3(c(Sn+TfgT?4Y@@8kvDpBV0s=#d)ZRVCN+g!|JmmDQI~uu zm>%k}6FZf$vzOW?phoY-Q@Un>-P>tQ*3=ddB$XCR*e6b(HI+&ov+xskrye1B&^om* z_vs)d5x9Ge$Mv&D3@a>fp!liL9I-$5H5bCIk=J^P^*6ua8b)}N_U3XogF$7cZPkIK zuQ1KqlC-vCd8+uVeSm1dlX(9(Qm(?y2*oKh zhq7LF-}UR(mfwvF@@9q_PjkW7Z#82m(0H;pgOA(gCg|ME&!& zs^E*}X{dk>UT^o{u^b3=?$q3sK~VR<6qqZxDA6uBECvXCX)BAh7f82PaXm;|by=GYx1M*A9^nPVv0kWQ1%*Z*#v z^jcf)8mkopzRXzt$!)|3xx#jpQuvD^r%m}ro#|4LC5bM_k0=rOpZsriALtwsr=i4u z;sK0JWVJrmQ3a(JdW`=p?1AvqsbgA1U@66r$@>Quk(gF(2JgyLs$J zY`m1$aJIx(GX^T~hcPgxs%4$4jx=h)N9v5q^d<3IfC{9tlzjJ|IK*_oT4Dj-aW6^N zYPr^I-K-=_ID_o1%<`VP7jKqO!;@A(iZTDt*JCUA?3`Anm@$+3CEm!MKBymQ?|;yg zndRLfmWT+Un5cc4UN*faU={=i;gs>`+>6_Yf-fE9OTc>6yB;5pACJBUoa;LOp^;su zFqKvlIUC}7^dXGrYA3Ko3lg;(Shj7h2sM>LA~8a?t5j2NXtGc&>L6nf1|zZZjuWO? zVZ)4k789`%q)aWChi5NZxONXYc3ZWIqe01RTiK3(ci}%K0LHJ^+NUVJzl`GfThX}} zh9S0Iw3VrxcM2eWc%mW5u$l7^?B=8P}?} z2T^+AO^)DBtb^?v$L1SfX~_dvR9aJ2|Fe`XgC&B~S*nucLr<3xUM*`V$TqTb^|No? zjzbfg10^n9fbfF(4ajdG!u;Qc*{2KT{(A}GTW`&>!9P-aorp9USsJ|fcB?*@fbA1+ zr!l%Gr!`DSxGLs+=*4mlwWei)*3K&q%U}9w^Xo7c#!6l$#xrqZ%gTB5SZYJ==3Vgj zn(ru%o|NL}3QF3xo&nTSZsy1CMcSceF)m-UzSe@X_3pH{dIkD@ zSjkEsAIyB^ac?EELhX_R?0eC7VjsGV=`<>Z1kk*s5oC>j38`++PyiFDDMBrK*v}Jv zJRRVM-Ww-w^JKiBV2s30!(oqov9(?tXb!Vdn-~KfbHAeF? z9dNc#%CGCL~YLSd)@(V3eTJvZ-ERp zisjaXTpP5lIO0eIpz1XrN(9Lz&9r>J~yH)O{fyarnemHnchECiGMJU1CBzsEa_AflVmN^7sAxji{!i_-QwX>t1&z?X3k8 zie%CC!WPO%gDwet(|=9+S#E2t$2Hvw2L%H93ohj=S!5PPvG>$S7kcp6k|c7oKeF~@ zvsrBfqTCru8Nd72GWQ*OLyfkjOw+jH$22rXs8;XH)<(gMjyFKYE8$oXUGRTdn(klQ zcd7wiq@{AkR$^Vfr_Mx%*1@@fW~-HR;ywx#>mz8wU+y#|Q#pQUw?zPMBHaGzdsUbk zl_o**%5Jdq67D`aE6j60!#_?>xr8Gc*J3+_^9o9RhcizHTuY#eD*!upXqM9IvLWsZ zZ`OyR+JE0ZIUmj>0%Tvmtv8*1i%p8ifEmd{<6BD7mLwTb;wfkm#z%)Kk34n5$C5f{ zO`L*mL6!Rdwp(QF4eFFH*3HYl?K>cF&uJYufby;y==R#!ds`=Jp740IFuA)8RQq=a zBuTv=_f)2IXaXd`Maus5S=3zd8Er_G=8XTPFQ@jL2EdA4q6&1t=sh_ZZB9)@WUumm ztR4;s&Zis>bp%21;(xf6QR(0S(zFb{18>gtCJQL4D)%n9xTzTWcCKF+?%(M8eBk_v zu(FQ|7AN$QwB!QjqUi+pM@nV$skej{J@KA55%-QLiB~ff<47@W@>#1Tdu(*UY49lk zMoK>n)7)oe5Ay7xrp5^I7HQ^r@pD?l|JL0>RgGJ_JNNVKZzczi^DN)E8Zc?HVaBhX zjj;hbpLCQ5#V#{#$c(4x#w8bc>cPidL<7o$6WiB(enJrmwph3fk{7I;ad zP(TW^RSW^oaZmd0Sd3v4JY5CumaQ5R`=_g4QT8UOk1iXhH#q~)L%m4Rc{HNz7f)y2 zi(|D~m#pTJazXgW>YJ%_`neHr4wSqwN#?S{n;M6&V0GnM!iSB2c<9VoF-U9jBJ@x< zbad~g^t4#RKT>ugNEtt>YN>SCJggoh5Y5lwTPgK_*o56v4CP>tnD<6*{Pb#qFhH?On9AVJS3@owZO z(=DjGXzX;9mr1lXfmK^a2p6H<*E^ea;021b`? zD+;=o2-&Z~yIxh9jbstaxXrVr7kC zZo?JZilKl+aFq*yQDw=YM!8m+XqeC3;daxFW$)F>6HRZ* zXB}FQ)l5(0AXZ9vzi86zJT(uxDu25MrE~j;EKz6hz9V~0E6$7p@KPRcc`nPt&7H~kJ|Wun=|hnzu~z!2tm=d)>0BV7Tn6o1EDWmk&0`{V9Rsbc zh&!-3VU7ka^}Vz@amY+O-NYE03v2pWixs`~T0ku=JX}AP9(+adO!lpqw=VTiMMjQK=qu0 zFM;*q_Is@@*ZXulz?YjYnro6To7JTIJwT#&Oxh=j_=+n16;YI2G9c!NK=w5!hEURG z(4)TfmpenWOSIXPa~oE`)Xf+BN#;hobV^9bYc^(uBLZ2;fTO-pfChvYm+voO*|dSH zU@~)lr5@0R?EU##M`P`y;bD4`X@jXKchYsNAd(+QwShK(5ic(UI8#xDSssipFwU{> zrAKZZlCnq|19eVTV?kl1794`q&%Q?a450J$@0Mk7R^ZQ{yt1!g>`@)lMuZoKj&*=9 zPa47brRW!eGW3Eug>!Fyxc8s`ZU7U0uaa|wDCnDtvRJuMgCpa$6>Jw_eF)MaZmGiH zGgniHzV_a^DWj&|62TbJ3+>e^J*=*#wm6T(*;|S=bR$O9vU07e;%rzmf%9H57nhZr zf795$99LVa{jaEmUy|c{djWfTC$^Ktl4jaqGTeBE3_LBBe$!7z1gw06z>hJ32ebZ7 zsig5zBUqSCFt5Wha@f1Pip~yatcX5IGs?^SvtQ>dJyo}ZL_&)HwFVN4>yEhhVz)oQ zLJ^yY3YBI|@8a%K`~SZ-32g&2xW1fUe(cb?ZZJf42c(`{NuWG3HG zFd1PCCX64^Hx;%`cx;R$ND1yuJ&)hf3uw#I_LR#RYEpZu+pPe7?v$nasfV_O+k($4 zvSp5k_0vFuYQ353h~>KIMoAabKISs66~lWTgmbE~3Qrh=@J8$>76GV6>@_UVYXG|P z(mf0J8EOsFnDHiku4OedCtdIwrkifIYF-7SSEw}5sTTexl@Wer0cNS_=5@Hw4d$7! zrdy(IIreeMy^(hbw{!CmuCxhD9t%^MFxfRK-U@POybfk_C1~H+%)l>4ru)7DCdt*f z0%GtuOx>6)2)^jUoCYVR=mW>wS@x%j=qUPz?GgMW!E!wQRhASh6vCvPBj;9PawV72 z5%OzwJUtr~uxfNb&fU>7R*}cssrUF!wV2cX0CT&ARR8I(^ShYe`4RYS{vUx0U+WV= z=}U*it6r5Ca}ip&Kodhr3{Z)2=YCd^eN4}@HU2(}+#sb<+7%%}YfRthzO%lax ze&>*`91SBhlk#ai{z#Y|iwD+lmI9!Gy2y(y}!zm^I{J%$!q)Bdw1^B~Rv$ZY^9sL1JnyS}On@e+i%N&r!klipP z{fvm%!BvQ?_m1}9kNv-k{r#x1lo7zyjANt=Z2{GS{EU*u&VYYEgy^TApk*o3+DcNJ zwv0ydnR=mow5Q*811wDo^Yf&J%hoz-lZ~IU6a3!C^mqR=4f#iCKdt5o%sf)x@BIC|X|FMHtH=*+UKgUYeN^I92=HIUzf|$_ zyX&}BH;%oFWeq187$;6I;E#9O(N0jfK?@O%&Q7BgDCImZ#Zk2JVI~_SqF^B!$$$%F zRB{XoF>XY{hq)m}%o?$h;+LK^O~2|hCq;=xqfTpxN|>aUw#&i0CBEHvqKNAwzy<$Q zXK#8!*%n9 zjYaH3)6Z~?u#)|3aQ3?!H(?IC=IMo>jV%uQktyr#Ln*9!r7D;vcae<}44z(qNs592 zg&NzOQv0;k)G+qYB_~=Vlr5M$?SJBUijgNAgM;(v9LNm-1wxGl<65K{FyxC^>`z46 z=UXy;WYJ;|Mod%jbDzNxgk`tyi1k9_dOiy09p4O{=pf`G%JBvX$6mRVd2nv4m}2|b z(*j0qv1UkG@2j|NDcfSPK9%s2Ab_`2i;JlV9n?OxIw65cS4y-rPBG-h(<4*zbL$9D zWOU($jh+f-i|;#CuXvcWlz2)Q#@qQpFR#hSz$I0fS9=S+A!F4nH?=#pS}VI!@{-1E&{Z zKas>H?}o#4(Jpy#GQcErao;Bjs~nlL>;qi}F&H zW^U3uE=Se8`vtG3na;hQ{}a{!4jv^)zQz>PgcLigxAJ!fIHs3&p;t-OmEC%j&Mv*P z5^$NP6nA7W-5GJFq_i98Okeu40Mgi5Gy>B1fi0fQ5@(hxNP7W@UKb%5uw62Is5n52Nb*s-;<0ezoo#xSkHt|EG7EqP_gs{_C4Ld&4K{f?Ah= z%lpjNC?Ap2ly_?bdQ~L$6fC(l5xHQvD$#W44nev}YVOazLMQnrJjA(|| zJlfiiTLK>w;)4k)0)1mdOPvZZJIR7`%}rlDHuu1l$UI;lAekpc1axXC!o$5>bGWQT z(Vw6A*d{pQOu91Xgb?OH1l4ZhhFOr?zM_+>n?&Ra$*@s{IOk}L@O)btv!BBcXlkM^#WHCkF~_ zv<6u(eE^$8aK|Ny6JxI)d;Q9L>52JHK(~ozH0keVn+eP!yIG~C-aCyY0ZMjhzHLI? z`IC%$7#}WV^NU0%Qe^PXw_5W|Y^dkF(09z;)vjz5Bq-CrJFdxO&j@l?mqEu>xlr)3 zCy^`thutZys*qr7G=c0I1SH#Le1I#a>$*Dc!|d;aF<@oqVQ)#Fl+jFCA-zltZO|;@B|id_?g#a~m+T`pI^mrW)5-C;b0!c9 zrb%#0e8c{JRw*fQ3zSLThVoGKoA&y&Ux!l-N;6C{*Ql`>B$nzi9jX}H{8s1htJb{R zD>oSs&T`(L$yiaFhONh6kK`_|R6yD?^pgJSCSgQWlp>dsAV$5Zfni{`pip6(zoBtV zm?9E^nzum*r^)jQd-yGc|#cM=fw$@!i?@pKRBAJ$U>+ zOjt61@Z1fRIb~O^JZY7z{zKzQG!-N|AsBABt2%;#1|iI+AuK<~$UP~QUZY3~DvT=M zI{E=66Y2WI;~quGIvz3*T=-X!N}eWBF=B)liuX%k+h{>(o7BxPF~(e#=)!&w*BT@MfH)0APZe`~$QVM!R}>;hg0Sx3oxgkv>u7+{70|@lmr?+k zb}kHAPO%FX+)boW)nx1nQzilQiHf!9Ta?j343>c;&8G)rV}hJ3k|h*tT0(YWWv$l^ zifsC3xqDdW@0tUUSN%bibzQVl+&6`+Xp4i5JD16B9wnr7({Kdg7;G=+!??-%Y6^=T z*IS3PKVUA4kX6PQW?b8CTGpuKmRUhHIJb?N(^UE&4X5hx2pt@6oNox*dEy!fA3Nlz zKD)MRVV)I0XiJDAMx_+A*l@hX`9mf;j;k><5IFns zfC3jMf9t+$Qfa2WNh$oCzZ&I2902iqGgnkQ8!1rW1PYQOk1_oWw1jEFcU`)Jg$?Lb zO{lQ;`(kYaHfA0mHvnbKUm+VR>E|E9B{-)F|5X5zWEvQ-RsSD498!uAJXqev1ifA$ zf<<)$YbYp8j0Pb&zZhwzS5GuVLPf6*VdQ0dYWg4N-m2f+7Uj?zdCqIWU=8}#KoA$m zm?tx+c9$cg^&XGy=(T}aU?3cpHHBTYm~JC2TJsK>9luUJMiQ>Nzy#;SA6Gy6IZ9?7Me zJ=dnWmeA-kC1zUC5NC5qEN?4iA`)1!MP41Kxo`j+`Vzip7ANZ!Or67MKoF z|8+MPuozRq_maErpAkA}|1ri`6XI4$m)j(L9)CMX(`W2BKDkyU zdp&jbOR-Fuh)e?TOA6Q;?tCxbAbjQDB=zDJSwfjJwv{gBU;t)E(t7 zn}!sE@BNHvQQOV1L#onVn13>AJlp-?g9F(*lgHqY&Uu`-%iD@EK1Uq8DZh9aH)vxa zPm*jX&4@okb7Ie_cw91hg`kdE>2s&uK$7%Mo-j zBeP-BLBj>^Rllv31a0`En#a5C%-$`bEy(#lvX*j3_gz^7vIM7jrVmrSKVc`}FxF-o zx9}U=|G$E|rVKs!zY*;0hU|J>iNCXAm7s;{bW~&&(~6PF?EQ&uoUp&7`AuEznTtT) zoXY!KK0Hou`t>l6c=tBpVBNheUDC`ROLLO_tM`v7o4PAK&W&!LbdtaSmd|?^PqJrwL|(WC0?f1Y1CZ=(%MTr-%;FNv53cD_Hg;|4#Lx`tqaJa$ZRiRrV5Bnpfk9ZqzyRi^MbwKkBn484Ri4=OL5a zFyjFfAcL4W=>39|lyL#6wUwm_w+6vh9yHS6`Qy$8!0yW9DEdsIi5INPl}C_>MEbpz z_1zLDRS)`03AW_aLo7n5husowgW%65OziFl0Wx)TmP0HE+Cd6UlH#g~;|yKkH*UN` zLQdtu)m17I14MINs_GD`NizXH4JnJ!-LA`qGg^-@IDOfDsZrL6@(G5ceyuak6hflC z(MWBz&Iw6=fZrkZkbKj|tDk1U{6p=&C-H(hy;y$}4t9P8Ux$owCB1^+pRpSEx@Q?CQ=lBq{_6B+y*S zF^z@Qr}y%J{LPL0vDgxTrwDJt3(R|QeOj+nZp!fKUT-%Fswpi)|4~Eyc@F-Q#y^`p zgs(2Rkv2XAS0Nf;6J>c(rIVewcNJ`a6JuW0W1w8KYWc>j^x)e@N~{5+q^z3dbPJ zdvvEzIhp*nZ_qSkLM5~(+Magt>z?+M*0SX(SKuO3FF8lPjSn4wwL)gDJec%(Uv1Pf zZN^WkE(42l6o$ItB3lz8AMu8_gkE2f%~<_jE!#405Ex3?=W4jrJ=Te3%d5~oA_&de z;t`^Y13lt4zCLgtRyQG)`Lk(()5kQI_g!U(R@VONtqZdC@R*09h0E;$IVu3ahFX~l zeAD@2&t$4a`FrS8b%u2SULIy@8xd{T$c3awpFHpFdP#sRJ4H8#uiH(BbIEaaHnfQ^ zq>p`bgOSRDife!jFqEZcY@!Ej8X-io+Va(z04cK1U%0Id@KICe3VxEa4) zQZzj-Z$6H%CO%*^-?JMqr~d3;IqkmBx%RG5BDpLD^x1s*FbxF~OM zTGkxmI2ru9kAT;bU5h3<$hr4%XkSpy3#@yG2xT~k)S9!ioDiYaX^9^?E_kuSPy%Z4 zqHWqkh*~}!LuoarZsm@7lkVi!x+afy`pnh6=`8! zlmj)Bia;kheQeK~uuyIv%aBcFt9w9a{F!3QXB=MIQtmm80X7QrhLGg?g@(JYqhX#} z%6ekvp^am{a97bQncII{sBVJ2OLBj~&Ne4*0&rN1S~r;l7p}@w(4=mdHbq=B$Qg+} zb4YgWAVL9SYMP*N#D`g069FJ|Ez9^vH}iTfHDp3{47qHt2Ex(>D|$^BdiyTR6n%;i znUMN3j58K!*~H1Ks4x`_?F1Q$TzxGiXOE#)>Og~UbFCr}HHr^VGe=p=-c~PI?OMLv zQHR0ERy`lfz8Y51m>4qm1PYYDqPowyCT+s*P?^zi5S((0_06k?I*6-^O77-(Wn3h0 znxa3ThAd#E-8D1bO}MQ-&KCZY)vr9pz98wG*>t>>$~Eb_mlZ%+3q0kapDJicR1Gjo zMcV8+mDjx!_s6l@LJm^uf)#wsTC)!f^|ULN8J8WNKA`|o_mfH2={&rBXvht8xfqjn z7{#v1ElX256m&HVx_e)ra`+t+()J1tf3qrW8jz2Q&TBq-ZqL0T_v7X7zQ{za-o%Vx z@ovZjclcm{&1wOu4gPMO%B%B$8cyHyY{QwS3M&MP}=NcHGUvL6w?(0zrkC=i>36-G;@%p-gW5T%sh>6nSAe6ns2Zo494^ z-Z)qB>VEDQ?=Elx+a8f?ZtSQ$Ih;iS;)=X#XXDFHjTkJpnw%3wt|n-5J#Ye|CKoP* zg{46`qp`b1fN=b6SwrL!LxVlS0nl;1Z^KZ^K+aTN8-2{QThR5RqA!)!%j92Y|3uq~ zjV9q&0zBqBq3_^rjbYvU;r8g|caW8#uuR7A&u$xTh1?DaOvE(Z-(GiU(8tCd+wF#O z5Z2sF2W|JQLkoUUD_JS6tfi>hpz)+?pqPIoI$XUc+&+blE}! z`ww{Q5ZV%r#HW*7(H>yzvuOdN>sku(3(vqFFeNRuiR@0&j@fDnJ{IlSzESl)5phh) z!=X&OGQF!SOohS`6NZ&DK;FG)4w3id0TET8;G=8N;S$2=KJ8Pk7uiORvxz-OsXTZ^ zb4@v4m%y4$$>*h#=q>Co^_X?4h1smtn(4oVWocahi-bgxM7_1fKDU3 zdTX_OIP=JL0u|!~Ss}@5HSFk>ee)M&#Q~9iH(QDPK!Dx*5Zv-NV?FgkG9eTL=T^ETN5zW70!uzM#`$Eca zG3UP{Z-YVz4|6x!uD$?E8m4oo`U>NpzU#03wi07!!kC$;z;0I(WeZuC1O-{dE}W5t z!E4t-dqb1v>VWHCfK(=WD=#bvI8K}M0PZhNunr>I4)C@Ubqg`pvnPCTcv`Xe)SR-DZ zp-bdyJ1o(cH{|2uPhd?JRa+<#+x{#0g&eu)C8Nw+F$`sLbAC5Jv9285t<*zY67@@Y zMTj}=oji%mS5s6V5xpk<`1Q*wBB=%V&dDjM-5k!EJ zsXVk~^Bl&rmKsUrz9W@@)W9u&*5FFPZS; zEQphC2W(6FS|%2)Zu9RZPGxeEEzWHq#rCdw<5gKf5LUh4&QY@6prglke3I1<-*?aE zG;!*jvzfyuTO*3*)_dA>eaZY0$iaAq`1@G8jlk#yimR*1Cy%(}Ymg8IeS27enc`Et$xHu)QzYx>K=RXqK{nH%-f|;EXIMdiATONr?hhgF9MIU? z_ruu@$n8^~qSCyTLl3iFN&+$!eq?mk_ngc4nAVfXw=$YDqCit9PGY(nZEX}lWPkX{&+dFpyQJs{M- z&MDVZ1cvRIAxiJ`IBl+5e-IO*l6YY{a~%7IcT6VR~cDNcvS$a$Dlhb-W%#92lG9 z794ww3DAqcLd0X{@l2aEcQ7dd3vUM(BA)b>!p@#YNm%8gT_8IE^v*}UdTI>T2Ef$1 z({D@H^NF%+F6mW_ybRZwL4>dJT5PDQ!un1JPGGhgsTz-C0bn>l#n&5etwhDg{KPvj zg3s2A9QxsMXmet8o&OUCH2KQ#_dw(Xm3tLND&Wou0UZ++0`;) zy4`6WsBk5o0~(hQ5_DunBFW9G(&AUeAC?jGB7|-Ar*a<>_n-C`JLG8Z1+p8!k zkvX%{t$@;A5EXxPPFXQNbIfpLYTX5lcSVbjoL1qey38FTBl0Mz2W($vcpSwU97zag zCW5yCcAz~E+hDdcx(45w7w$j$MHdO`d-LTM{!kPV^Cz_eFn?g(VhF%hd~xMOoqPa` zgPr1#?i8CT5C-HdQZTOD+o&9&I>cV}AhZQs)j^U<<2#wbuYw9)^*uv(Cfp>l z)B$L0(mMM=c@R*-RH~ZKTWc*Ig)#ohs8?>h+s9q=Bt+I*BNrW$mMC=6AOOP%1shit zRK6>QAF~icN}r8_`_h50jbA^#0 zpKe2dJ?2Z`CEl$7>b9A;lA|ucUi)}+YvrJ*(kr6?pB+phg^%G=ES4@z#k++gkW zlr?KtJ%;dk5W#uL;8}~+0OqZ=1X1-a>uuFwm>2%V#G@I>?U;w^jE-G^E=#b{qK7uk zyZ$e9nFO>9i}l{aW|6)2AfjdjKEc&6jrrVC;Ka(`92vZl)oz00g+R;Y+Xr{ekl>v< zm$()Vg*v}7Uz)SNKE<&ozltgY-ajfCxN&Qu@VfevnD_HBk z?V(-Z|Dlav%70VsRDh^Uv*6KU$GpUKd;_xOU|iTu^y>*hiU6J+xhh|uB74IVjVNuX z401<+5#*NpmXR!Ld1NNzd<+AzN>!%0BANvDrzGpGw%&UKQ4({f-#1q033M+mLERzx zxeCb~rEYY;)`-8g?`LVQ-dRDK$)t`RJL#kxi|k%bcne!hX&1^34tQuEHZ#fN{1#pUTaZjhhdNr^rW{3;eAe`QQrR+$cPNA_FXT@dJWjE& z^JL)nOagP>)JuddOB4qj`(k<+r*749ga%3fO%ixZSpOiP0Wf89^_Lb@u+f;&g!L7T z2Uaab^T8DuiNP&$8ht!t@BC9mJ!?rRFpCG$dHPy) zS&`V*wW=y0HA3s~zLF~AC@G2bma4xtAq^lYUpz#-cgQw3`zS3w^`0*FYz4a3d`pN5V!Q%?^?61 zAPzP>oU4MwmKlf=swANrP|21~X*xO66S&HC83GBFSQK~vs-V$D*(LdHdwPy1*6B6~ zB^OmzA-hM8yY#q8t?K35L!qLL(R_Yfm~8&0qwBiXyQRB7Vo?b6y2Wtc+`(0-MrIS_ zcj^-rPkKVr$U8C!J@x%@Dk0s~zv;2V*RuV-1Q6Ywuv{4<*KjL`&iWOzM*?nZPuD+d zuJg%kbHzpi#YZ5HZnSt`DQC5LjBHb{7(%;jy?Fj+es^kLmm0NmI~;?FQ0dBi27^<3 z+`qN)2Cp9Q!Gl8nae)_f9>&nJI=Mm5tiN>^!IG$;W+o0Mqg(KPJa@r&qC{nr+15HP zICTV5XS*(2men-b6+d`Je5oLWf30da*dz9kXZ9*k1r@Tuyrl~}>HW}{82Joo9SIr) z@qb^k%kq_!Rfx2-DJNp+L*ZN8=QiT5dlxF_TscnI1;7D7>LN8jCxytg>A?DFLXqw? ze;|Ev%!cds)x_dE`qz)EaxX^YB$9-;zCA=5F6mnF0_Q_v1XsZAaRH1Y)O zoMnt5hJi;at5kntLPcnSB&Cf1+t-((HK;Nuw#S0%R2hP7x{j3<_{E-&EhqAjIhc1+ zIW+H@B^fVd8C-DZD|US?kYc8%*CAb#NB?xNf^Y#a48SM50!-1c903?KAr{mWg#^Mj z00007nWxMHMV({u~N$v`6_d+#IcbDSoK5ZM|_&2!h@@Ja9Wb zNyM&tebNxyZ01iL|5&#!y*Q4s^3E@SdfY-)>!WHTM)wHcf|YXpM@_*)8DMn24;wnf za2hTzTn(__gohNrOwkqnFvd%#*5B`EOvU>7%SLopy_K7DmZ%O8!G4llA zXs*82aVIiF9@ZU_LCyZy8%_4-6csh0u5fR}{VSfUAj&!4R>&c zalA7jl>dp$8RfvdJ_dU5vW&v%5-NX_$0Zf-xz|tYQ{=T z@k`$tLi;hrAX~a)SeCE%w@;E9fHvF}jZEevD*Zk2V6`nk)NDwd%+*3m-TiyzcK2u8 zvWzyL7zOT6i$;#Ep(bGfmWmsI`-c4$JTgi;yO*k>RqDor{XWUvZuU8P>4?vi>dxNj zI9xCP2Px5)p<5P)NVo!80+g=F;JpzQr{Q`&zv~>vn!CQejLVuPb6?!Vo@>3(6!_$K zJ)06tN{B3+?lmR7R+E={+xZsqk*24~X!%B6`DxX3YLNej-fj8KSXY`J?pNQYNanE6 z0Tm5o5(iI9Wgfr*kJqnQHvAOb4L128tr>-@8~^vP0`nG}B7sN$WeBJiEUfvpJHMt+ z1-yu~!h>{+=OhV)g^7&-kN8qw)FLQFv5$=XvSsJdptQUn1)KaMYTS8AyVp|>rwcp% zAq5a+h^$Nx`yMsT(ZsSU1FlqMCCF@eMJ|X8h{&zU-(sL2iCjFF?x-s#F)7&Yop3dd zjBxm-&a*B z?B>Slr|ffRl}Jhi&*(aC1>aIQ!E1LKJZsoWC$UJ(Qbe5t9`ZHKEfcUgQ0L)m*#<=F zZ7)FaV5S8kR7nNM&u~PVYc@+fk@K)29uS3}%WO#!U#pzf`3R8Oh6OYHkR3w4-usenujsgl^H-`zCj)rmgfGi-sM^^O6FCL6K~ z43H(+ELU=8wWh#ENRk5a%*M%YxYXB!CF~d%irG8Cy(9Eci3ACpT#gC|xT~DFcVTHk zqz1(q0$AmVyo@%Q-F0rcm{H+FkDnBN<4T77RzTh(@X=+~KnsCm>IgA_kh-W`fqfP|;rFD=k0p{eh#z+H+i{XI`YVfLA_J};yQ_eu| zwd1l#eK;xMHP$|g__^&mLP}sPcctW4q9tQ7&&g3!bH~Ztm#{lNuh`YtE!Ri2q0Niq z{N!bKvb@wV2%Dqn+ZN3;8FX=MwlaLIXCOZX1d1GUbOC0$c{DB`FhzS?Y3NZo?p8f` zHBrGur_hAP-@~cHzlDnHveY*%`8<*4udHf?E3Rc`Mw+7T8D!*dh#y3~>9P}Sgg358 zUo$k*)IRLW0OsQ$?GY@{TWqmBd8aKB#vJ@kNTdFXga)?6Vw(3$!SC1BayvH_x zUoVvNn8moYJOiva#4T=l5JYH9Go6ncrtrf4LRzxLEWG*B4E(!}ZdmomE=~S)=|&}Y z*(iYq@(x)rV+U2Zw(gm$o!=uKq}E9qgi^^k<&;|VC2?sb%?65zCTC-ypz+}Qtz#hc zIDHeb+5cYw8#^@mlGXmeso2W>B{ezmqY)Mm&o0q8!LQKtR5h=3+K(+V({xwc-OqQ} z{NVEqL)+a?iTZTaug!?dtl;VtM425gJX|{6%scNJDfzL}(z39!@KWBsbyvu8J`naJ7s35$_SyS?Ln4N{-g=)q7Npxgl~b2fSzNr8<$Up#ID*vH(5od$qz@VN1tb-Z&~H!F~% zy8G&DgS?T|xPkkaTnJ5o3N^-Y&BRZM7p}^+T_#=ejn{Zup9qx4=x9cm5pmzKwsFcy z4Ljo1^|BrnrdwVi;nam1XbwLLTT{rxHm=q^W$G^-6V*Sd-#0750l;ExX|?aR^!)4n zSnHEg`V%BC;9SG)@nEU5F3r@#)nnFQX^#%i0Ay|aI<`7>36Dhee?8Kkp(;MF?BHV( zSnA{go=&W#=S@$S5@#yb_2j2(=Rhux5anUyu>w(ugjZat)$z`=9yvvRIRAc7z89`8 zkuZxGs03~~Md<9ZB3GFhVBC8j^1L~CWBrPa6HBKWBl@3xoBG6_Om1~6bD`}God$=> z$`v~pjYqv!T>!`Z`j#`XG#v?Yad)fgpV`>>j@lr+Pk`e2?Gb4-_!Af*;&ePlcxS4< zpTq|SE4&-Q?#b74#H!drQC)HX#?ED)i#b&SCam}pZ)_rumBb~&3$W9gp8=yiA@*~A zau!L&4SGdB;7HaYmYO$J0^vmkD{uCGcUals(}PX?vt@us3vUG2+KCckHAR7)C$kiu z`2RI*k$#-0n^@nEQidWqMC_NdH!PIeKkB9%^^7G~69*pKA(V8N^_}=;m3+IbMji|S zB_B;86_b{V5mJvFQD(dC+9;eYG@eW?l?d+t$bRy+dwz9U9p`=1+WCSuk-8Po8Ahcu zOiE4*(G4P~6?4v$G!$l5&k>Y*C-GH(-LvQ!??hVRZ; z8k-)`i>F*!K}!aY36{|=+>x>vo|~|EK>_hGCAE@JAj?c>y^NgPo{7%m0VFpiLd27W zBR2UHjQJvXXq&D%3^y&NabyUJhBD*hR2ZDeh?X54I@Oq#M&7EwJs4GNW z^!W&VccPnTsZ@X$VJbAg2`9(~ZFH8EYzP{`8Z?%g=)<-@FV{WE8iOBt8PI2+lVa?4 zEH@DjTFAKcfG7#JKU_Tld9hWm(m09XEOOX*vc_t;M`)>sDr+>3>s4S6QbR5{=kyFu zVOG}F^_^hH_^#v@y;Lyr$5$sfEdXIL^wHan(yvD?+_e{AbM z@&);+#2J=#=XE8;_pCMbz-&?f-4IBlySW|CVs)aBkniQfi2YWi0YGQdw~WfHm7%f5 zW`ttB{p4R0=~Oi&JrguqUB}9T&}~jsRd^KmLGdVE1-1Jv`#gNQIhQ2a%uJCCa1I}g zetpW-*~Nc#+h`!Twx}qDK7Y*@#_MR%v6SdN+_EAaoQfbpU#GdpFym&@xI@=5RrD^t zT<33(6^CVZ3Hc(^(WJCG0J)UcDaFUu$l3kS18r#_XH8(>SFm zty3&j8C`<*Ratel+8PGw{mA0h3vFM(y?i5;hlSmOj>EG@4E| z^YX7FIbAnmyjmmyquJYmagD9`I*A46|Mb`lVcrpTN_Y=N^gam5>k~9H?^kjJ0Z$eQ zz-~NcEH%Vzw<;c60mBmVk6uxYRhRG@Lf30QTPq!_SBs5^Vs{efl(wv)tikBjO!RV} z=Q&6A-##KG>C^VxVvXrVsmfR>z9g1s_o$i)@fQ zdDq;%nisoZ&IriYNHY7G))=w;yon&*Cfed!v`m}GhkBF_hrE5~i{G<|q9l{N#*T;o z&{KzJGNKcJpg9Rrw$Rk{Spf$(?ld$vTQ@_+6bG>RM zrrAivFgm!Pl3jrK^nXP$gA}}qEM3@*#&DYukPJlOJ+lau=#BuY_KqBn$$1$r`Dh-EDxE|fBeb69+87s z`VBq)|CzTngVucb4FW3 z*98dWztqGQB>`;Fy1j81^)I*R?pt2>tZ;vm8vor|0O4usj1!Tqi+aayr%Lm1>7{|j z^H{SBE36`)MAMTRDsoqP91 zqknC4*H?t}BTV^a8WBJFBEjKRw|t2xG9(Z93y_thwS9DvFIx&Dr}$cnZZz96g>hZN z6T?eIM|mqS+^)+jolG2v#{~V;7lvQy>}nj6aBqlb$c-H#2_LUy$f6B?+ba=^<|d|W zU?~LRv!RN>wDhIzL=D$AuF=c}IitKlEyeN#kBuV#=Zl~5P3CxNMIP-su|Dv-q}W6y zcNy>vZ<}?AK&LPheCvwIhPZzN;qKs?d`c%R&FctV4;ex3gq4L7fibu4f_Q<|45HzB z@v1k?=h?t}qKWI7K;(*e&Y7m33m~5D2YJl(qJ1htCC{@YW`KSFO9i16G-)&UT7Lee zsjbno_$tVukGCYei{VRZVlVYVpPJ~ zUMLqezBycQvmYq62SZe3%psN+)l7%#T=GSaq^Nr9dhYKEg~l@eWFe zR+QM3+&r>x2~X^A=_6&_BRvJ#0HAsE4Q+ZU_e6F?j9N-3#H4uc_3 z4+B^SyPBOPg#1f&K*mOlUN<_Z%LeZ{^nd5bZh<{wEq$&XB$`Ile2#Ef?ezC_+H83S zrj(Q*24_ohy&FH0A5&l+Eu*|xn8mGEuYEXEOXuFpwd5u|c`v zI7iFBqADj%e^lu(J>Xsj`3QFk_W3!ld5Ks{Ip6~S)@dDt$*xMESlx%j3%!V(AXXxt zg(%Ff>gkiqst^9QX(Vw#6G96FS1#G{>7Y@hEfkxgvAd}Gge!P++VmdZs{@mWfS_FW z!SEn4W=e_!g;^v6dQ1DcUhMgYPUq^m9@e5OC>zCA6xx0%T$Mz%hb*u4hWdiW@-?!> zERkmp%`j!dMEe9+4u|-KNNT;T0J&a28c7cFL?|Z@2Er_^HgB(7z{RIz1}BoNJh!Gp zJ?^HJ!ok&U?cyqVu%v^fpi>)M=4c-}sj>M0B=8WcuCw@TP5 zXW2w;$Lu&Qx`8b6#!+bple8kNCyh>BQhvE%e; z>*R~K;;RRC4U3#h1H`wj*Gpc_EjTKb~wr@&MZ071=>OnlI{6F#U9hCop@L}4()HY zmGYEV&r>s*@ag)l7z{QliM~_pnVzLDsRep)fLd9sazpMwD2a*OIcY4WyUH9uN5qTO zo!aKIO#(VrS!k}0>;F5xbyTEN6r|5$8O=)9c}4A`7lF0A6P6ch%gcB>sKvErQ2+RTWVN4fW_)j$*iVy_bt`%+Q(y4OEZl0V_y9reyo%w#Tk?D(TW+hba z%IJd!M&jJyHvqa*IZj$63Y`*^Pik56y%g+AiY_R^mSel|2{Y~p_nl!+27#|M`R?Sl zBTkXn3Zc-bs2N@3`8T)~D3R*oQAn*tb?z?*g$&HBQwmsL^qM>uXYq$?nVBasv89t@ zk!I`CGu#^+CBI2S&;KjL75K#La+jJzow;i_YE4WHe)~==IN_!nU&J^7n z_>Ivmymh$+5={?m85_lltDSF}Db9q>W(kYBFApG}?OJ)A-Kys%>uKN*wL-n^zQsZ~ z?3$P9>Ppj(HQ^M29Dw4xilftB#r(DGlyayg9i2d{7_o2Huz=QgvgY4Vlpjn`+h$eelBOP+9##Bd*ZTPXDFZB6Q*Z@Z1UB$gQQmnn`0z884259-j77 zu)(o?QnH0}OjFLyjJ1@|L0l#B-wY|m4iOjD#*lzI7M&GUF<80oJd$d41M0H-+kBrO zj|7=pY96q~w1Hy$W<@QwGM=?&r<|wTD!RkTR$Rl;?@sjMabuo<+eP3iPR_amx0f3k zLczY}B3$C*`Pxa1)z}Kq8%W;kBFpIL@L%O(1 z-H{Jzh8CNeazsCW=%qhQ<{7ScVSb0T^XH|1ngHgs+S;=kd-17VeW^dVVxz$r`|KOi zDrdbLCLBg4qJH+6*f5t&rM5y!Dv^oU;{Eh5RJU;M9*CjCadIowmM+Q@M@KTu#Jv0+(hcgcMe{k2+m0)Pz>Dd^Jwmg)6#i>9wd zeLs3iAVp4OVz*H3{6L)5ZO#TiqFF5)vc{%F92H|KfqUGe9fs9y$zp6B_vKa6wcd;d zrsW_UV)=J8FBe2@y>|>8W~eUoi1szs2Ld0MRV8p1OFoGCGf_N~m4deBJ9T1`HFgp? zPzXwQA91{pX~o;j5xnlf|9O1+EFsQ2g0ZoJifr@b!@sY}1z*q2%L8>@fiCJH02A$e zqy_!C*rV z_w=X>`L(XO3$dBu)N9kNmh^1mb+I^V-)PH)T*ERJmhI~C4cQ8{{U6rW+4l`x; zDy6&udPUO~Sv^>r!RLbfzsME&_lUqroA1R^;_z&W$Wd^Vv{@5|5;lO8fNWoxKMW0V z+l;vJj5ewzYp!GDds~epo;oM^i*`-LMsLAi{RQik`ch+&ot*-sNeK*XD56QiA#zjj z$x?|$EVOxQ0HjE1`pf<%gVPLt)tj4MZ*JH)O(`e~quW${H#%MdF_MsXYkFFkP}JW% zpO}fa+R^6mpRXk3z(^<=E=^_rGHdBJ{K)YHeYrI~r0szL7&I=fG!l^1000HyE81F{ z^FMAn8z~s3B2Hsr6UgVsOsKOx+III!7L_DN*wu^~?Fh?@E%Wq-g~Ki^u|#HC%GuJ; zmyxA)K9Qkbb&+PA0g3|+Q?AjVa$#vFIM9sn+yB2?r;MeD+41W8K@?+=UOUCd_VPz} zO=-&8>Zv9nMya@>wacX)7}p)gC|*a$FR==H6|c_um2N^^e1(no+JHeoe_+TFwZ8O- z3jnQcAUFXSG$9t$6NQF^G_|k*00&ocrTxEu+l>u$aSjj^yO$GHd^z%AmaFCFs~!~N z3aG{ugbGzmo;a<_-5pTEnV7g$r?-U2%wzC6C~Za>V)SQFjA+17W@Bg7em>~de6{tF zz)$^qd@xo8$89hIjlw7Fczf!YDRzWDWQqc{Mg2Nxf593uY0_n4#hi3gQ4-cWz}O|l z@p*k)foA=SmC^PAJ|9!10seyQK#(Hre>J7D1i-s%k^_JM01rz6o}+X^AMVmbo5=`` zJoGAdEKDUZH~TD8^ntBs8rG!F3#RY|evt_$sR(xk?!r`!zsIb&>S^GWhYy4bqW*cL z(rTa}#LCdjUz`b5`S|el~H!fqjzh!h27lqfJd~#bc6-A-MA8i&$)b)%M$?YJ3SAa`xhxls-na!+%L)&c z)yGCMH3_69&X1%%ue$PRjmRc?JaHcvP@F=-b(X)5H;OekwaOTN-MHjfo|&QP^tsM8 z5p66F>~EKVIlNgmsNPUV7-xvUiQjm#J$gd;`fS9+ne{4)9gKIighQ+#D8SFn?8Znx zu-G#(@;AQ70Ja_K>wvXqIg?%&=Rika~z1mdai`*nzDPB{-=5B zayc=^FZm&UVbdfTMuUhlKM86Dg``2+u$&1()1q3CR-}MGQqTX%`A@>!W3(=%;a%{& zkg!F<1JZH`AsZP6_3mG5RR*79DtwDErbLTn6Cm{fi6)0=}rNbFpPq3Y%)rJ0l9}rG0cT z0`cxlv|vfS8HP#?IBvsJ=fxI~)iR==-+Zr41`_h<0$N&fC9=>(vAOZ3pQh)a;`sWU zo;^)si)&yye#cU)6$tHFToUH<%)DTd&SMy{fi+L0p!+_8uz_9+W_o+VPcX73Xo5g6 zuGV47mnbR_u91_l_sxH!Ji!oyu#fyeIT}8SOIH#hR-ELdF8!`mvv-r+Jiro(3JQ@X@xE0N zIqvOed<;m(;fQ3MPX!Gtp4J$Lf;o^ZFDcjqwCk$a`2_IWyI`+6;(vEB?W37R`)bI3Ds-a46{Jykr5bCZIRi&*)yR`cKNiVgyO&6@<|#LJoZihS`Uy1*9rt4J$uG3dj znywI}oKW$yrg?QLT+YhH#WTUyEE`4IcYb})9V=LG2ZO}VkL`jau`No=?Jw?|Zw-cX z&K-pK2?$1Hc`|&I&PIeqKfj%cz=3j%Di~hH&GeQwg(g|_%Im?e;zBTK{l6t=qKWjR zevu@qY55KHRN)192hbD|HAH8;jm}5o-9|_(kK@oLu$s>}hF4L!Q&w6WT62 znJ8Hhu>!q`Ivv{D!qH{{B;aNc^H;WRn3n=DuuP`88Qp??cy&j_*Sdri$=dhSn;Osf z*4jY=6ReUEHdY}5VHrlU9CyK%?J;Y+?gI@=x<%?3%q+-t`Gzb;AFlIoS%g#hYo~@sao(fuNZA5COA#bt zYHLzE#~ms0@>=xoNp-v~?l~icaPS81r_mgAil+y5tzU-6*7scV+LGDMBFVZ@{)#tY z(oKAxSIS<)sx@<_uUgN-k=)3GC|SSRMZHT#8T+PB=6(#=m>^O)BGc%kQWVT`HU~;g zGP_`TWkde0+tF3s(AXp3wt4ZbKrf#fP#B=NZ3=V=Hd1ZwiG+$sTlQT_(SKve=Rde9;rohiJ+$3rOus; zvx>Ci(}u-hSKgoxFFi@AYgh{ox~_^s*_UBGyk`ZTQ=ieQEPWjP%{nuO*k%}1k3#%N z6CS1~*Y}Y`V&y^~L4d}?oXM4~-mC<)ODmwqTkOC|WViIKz2_+fc@w!+6 zclLBk2Eus2tb&Aus`bg0966!dnXULaJxQA6TC0kLFK`g((7z7@G%7%JnP2clQZ|}J z&_GK9RCSf<3(gfEKQuwJ*0GY4M7WKfZCJV5xtWpbKH8nrJLUb>EI}~hXF9l<+Y`4T zIIlp9U|B4=LlH5y5xpeP>ifEq9;y|(!p+uv+=Gx7K{6*@0Tx$RaOjC)vFBUW6bwGQ zQTvUdTsPUww&*whw)1R8PnJI`CJ=LAi; zZV>tAEXuxD^3hi;L@>#2J+3a;Uq`KuTok4-g5D0Bx`BJnzHL~T01JM;a5oe>zOmQU zf!|n!4X*5&u+nlDM9OmJc(&=u3W3<3^ae@@a?C5SDw^V9hgn3RsI*!1{QahApF?;r zqOO#tYQz6E0&f}dlehTp!ZYjGGl^~!MF|B$-cKQG;yKyybQi$IrWz)ClVUC{sA>G7 zw@`aVqON;RWbW0My63VrTVd9+p!JY)EQHTBt1s|r_nY)g+bV>TrEx8KC`4V7J>`2? z*7UiK=;w&OB`5a^#?-b7hRd&0I%`c+%lt-LJy;wEHTdq}=n(aN;bieU{ zE&P+}_O09C>Z_Z{i3+VPj&Z9ti|-;$wSW(Upt2l5NiTSE``s7eHh&5mUV`AEG@+di zm9G;VR!QZB&eU$Ax*!B&x1x!>=k#$UoBz}hAI2}0PsGB|fKD%r_qJ^YJ(!t;R3%v$ zY=>{QWTr__y3HkJx?jo-7Lyun>lRM}Tb&qBYzh#qf4P;ERDp}sl+j-Fr@WGv(9lq*w!5tU@M7W7}kPa!VJZYp*)aC7e)@;||SK zQ_K%(IH>T(n6)5s2I0J;@Sdk4C+j1-eVCV;Q#EFci6*qt*N5Gr%^KnKYwyMhV10Xf z4(l0h>!3KRm0R?koyd|mJo0LJ^0FK(UA(TSx%~P{8d!ef+%S17(sa0@ZbJ9(w6#ef%1Z%t{LxdRG;4&t zE@3-HKR3zx)(2;{#oLVaV1i<8fz4Qz>gNN0FZa!BBjAj8<{4P8F`OPL4|W*9oU*Ea zFhs#E3xccFp|kkzj&wo@=Zb5?An4#zl<@?r_`Htr?;J8%1|T^!jouC(g^f{>BaKG0 z+351|@4t+Ys$`~^#;-1vY>##6P(r`=?dj9tZ`2A8Aw|1MY(*k)m>^`|)@`Y9WY(cL zNoNWwr>j%nWwV5ob)WVopJ~lQ^!#dm&}tS=j2atZs=A^jBVe3iMizLnrYtBvsa<$m z*N_4Ej!SYuC<^k3`GjUvw`~jHdboVYNO&`w-c5D;X;|ecX>M!)|MNT|Qs`Bd{8%Bz zHN_z%+__zBCkR))bg`uJPsI z8DIQTm*3b8brVQD;rVVfVV2E^S{%i_SD}pwo0tG$H2iANI>-do#lch!Zq0TUMU$sa zeXvnHc-4ZDR<2;sD{qmS+0~s^G`yjpew%U)(m9DwXIx*JGUEueUxcDMhKvz0hkjXp zD?ev7W@DB}R+c1hF*@}?m$7Qu*flO4KGy_pf_2E@MQCon!`BBc94s$VfycS8pt{#r zF@FUVj3)dc?Q**8ouH$@x!>PEq-m!jPbBd_xf?Eor3?)j7I4CjM0bJ)&d^_=J$ORS zyi?NK>P-O#@3weGBv@9y-Zlo|dl7*Eh=8j9y@1KJ8n8{yS=_o>R+^4tooMTgjNRNH zCh-Su5E>u?YK#5dd?4jLbbdz-6ucyJwF@m6=$m)&w-&c%5k}2s+BEby5ImF*9SuUw>%bw;lnrk`*j)c)5Es!hzDeZUQD!&q}KD z=h*=mG$|I=42cA%Gk^d92Tr8>drh~{@9WP6!?E633<(862|)zNRkdNn&1&ics;P>V zXm&_Yz-yy91xA#$?2`z&!tyxADDlvCLcr&Y14Udg#iRiN44NBU8wMTL(%fUloZmvh zSygULjW|vQ>zVJ_w?)jZW<4oJJC@ZeucsajTN5q1_=sxYzo^Aful4u0l)wN z5ZwWurD{SS@jr{tq&&LE?Rq)^dH?9&vN=d+Y>GSh1^AQH73()&Eh-zWA(b;7%Dai! z5pA6ZA$I5{!w)=2U|1s5C|KF%R~@2^s|>*Ign{l2Zb|;O^$&sIum5CdW$BVH(LAs? zI`Xj&@n6n;(pYFTsNJ=Lqz^bTDn3{@NewMUvgERgPwhCHNr^I_juH}TCNN^rOSu~_ z1g2nmxoiuqN6)){gCs1Bg63v+qSB0=85!i#&wkb{!Q4n|u+gnPk1=v-c(Mt>wmr!f z)KYF~04Yy_ath)ZDr`%Ie1opMXU^TQwBG0)wY}k~o~$F^z3u`9^thDdosUgP`gs!T zJk>&3LJJacL@XVbD3{i=gjIzxa5dWBRu;8>FjCNIWWCVZY@??yJhKo+_+SXsd%Z7D z$>3FdNU69#Mhy1Q`gIJe-z>)dJY0$yFO5nj?Cfe)z|!!c;kxT##u_8#kk$#TtR1P^ zlWU;Q0C0G`!2NLeE}6+9_Nr=VqbFPg?aDs;{VdnBzHfa!7ssvWTcdsAPzG5ytu`s2 z@2UCP0g+p~$%06B&F7QPwuo%Y;^bq=s&}Cr*(39FFJBwa2YhROgNU!|vwUzBbqpvg4zOar1>fVN!Sy-o($k!5$pBfDf;T_51xG z>xsA!u6+h+g&LBARKXb-&IE%hT8T388ByiLfWXAT`wQRQ^OoC>ocdTvCfq5O95L1N zcE0X(KX7{87CCPm;w4E|hpGa&l%s68;~a$)*tQvm=c;TyD+L!L`@Z=)>8N)SNd)|1 z$GHr!2U*(r*zb|I{{Y*Q{tzrYQ}Kf5VhbDzBpb=XnhQk-ZQR#PgUfC8epd-tgB^*m zvBYrXdx9>0tp9p@!Aug?er@IpG`w-aD2Ds-9=@wEL{@V0=ki}{oK7l9q#EOJtF~4^ z?R|Q;q|cKR#zFW7BbN;Zjb)<~TJ@0Zo4p@tn zQZ*;Hp5(c^+WhB$q86gaMyH{G~07FdF97|j3E^T&bD^h zW$)!PPQ{PbVOU#=hVffU^sX=ql2cvfl7x?ac)Ct{lz*c1-(*sTQTNvc|+^D^QspSB?^&c(1}->7QQA%~5T zG%!B10(Ojq?Q-kH#a1uMC8jc8gP>vgZHz^Zul?&3t6BbO_;V0So*;`;8WWz?huZO& z%N^Xmwo#moVONKfyspM!h+GWa$o0b&WumW-53J=Hw$y=Koq|g@gvHB_0NR*>s52$Z)Df89SK6LfNDgHt^LQFd%2>KqR*3f!La1AbDUf7 zvUPT*TPGo=a9}t-E6{zeM;fKIIOunaifE7eILx!b0!`uD-I zTbX%8SiCo4EF+@tM<uOb_6wM7DrVaxbsJi}*N zeIwp?Ojm#=_2d8>YC)2#s}T?J9x0O}p~L8YeoiT?j&xQ!_hi}x*IE&58FQ@4o^W`I z_Q7w_dXR($m-~&$KJ4~5Dy)3tn3$<$F>uV3nOMeoXHS6QkSZUeOS3D9NQbp14RPg` zs|&2{s&n7}wBBJLnLMS9h{%roUO{Wmv??fg=pgayPnKL25gj*;A)(EEM^eUu*KBg$ zK6!eK>A7OfbojDGZ9)sy&u|FLUpBwUlri?yww4}|mY&v5r=2~uK1i@kIa>kVAw z7r}zJ?L0A9Sd%TmkfJf2A8|yHnjO)P)0R6F-M;C{MY{G&B{6ePWP>3Rh#Cn~Dxzz( z*Tjq(7ERG*pyNfae{wol-U@*2xbZPM5DePzI*J(QM^UvYU8glfQ0-b&`lI7a$m-KG z@k6e+&`7P@WlID2mnj&pu7)zor{+N>fXE(NE<$x)MJi?R=i~e~t5@`kb-ET6_LQ&V z8umJ&&6v}hNn-?_a+yPxdg0zFn+gXY1KYXRAo}CJK7d5A-3t{N1|<*tK_h}R(vvu? zCzQ%1oEhn@&vMf+)Y9ULYYwIeI${h`aQ5n8Cb%E@G4i6)66GAZyFa;gKnHox$ZpVm zfXK-dF=$Ua4`<>R>to*=5V0PSYU+?&Y|L~JKtn_&RSF91Es}2ANBm&e|fnO)s+MqK7Skb}9R6~JBLw4S;W8>Dr?*+@;0W9LthEOZ%aQW&S))l*9# z?{}&$(E){Y1A6Vs#t)1j12&3`!|Y201~6w1A(Y zU(0)BQlh1fpcg4(pB8bQM9SIWH{sXLXkqY%1Ax=m&e^0lS$56{i|;#vwhXv$n=CUs z7mJf7|F+!$E=ry}>qtk==!M0%*@jKEUkb6M)IihaHw0{ciy12ce4+V6bv8=s-sldg zA@zJT%N5w<>&&Xx`|ZM0JhE+N=*;rmCgTzL(dPbo8Y>{Ce7*hj%DB=v7BTrpE{ba#P zEj*zDar=83twNv7k|SO+@5DQiEU)7!sT#8?=1eDq+ig)5dn2a@ z#b?#GP3vj*?%DydP-a+1S5aDYP)z+Z4gu-AHpwb-EKo58cidleKZOQf5GOKZl+O<% zn;Ze1w_)1-`ix=b-rgB!>*$bMUd=B)jt`+1A>0EQ@m3J`BebXS23v7PcT5Yc0Px#g zKntT=%*yu>K`Xgu?zZu|uYrz+BNOb^K>UgG+b8hv9`Vn=aZ#rI&)V%5v)HSxtV&_G zY{e*Km9@7$(B_QlrIN$fm$aK@y&JpB;r)&0f8FBfdJ_ID)9t>ODAi zg$#&tSX|2Yj!?57fD11b0#S-WT;$6nWcLueabH^e@NEclO}n2CvndwLV2dGi-oGfL z0L+uY#s$|Vp}OeE6yDN|S=2(qJ!Z0*yzj_CNEB@Pk+L8)M6(r3VT_`2ArC3(6*H+w%9hR515J zD&C_qWU;LRH5|LHorLs>lN|DhQs|}b_*M-w!0n9~BY@DC=8tHTq0BG4c*bQ({3Q!w zXLtrm-?o_2eYC>D_bcflvGLavVhGQ(*Q*{?_SQ&3cQkdpzv?Ft zMjBhduo4!Pm~~KJc{9DLvYAp1GVK9hd3zTLK0C;!8n7x5`UUoApaP5lTWd&U^h0;Q zrsVB^dO1|hv~8QjfAf2E=VFwsP$+KjG*7%H2RI=5vi)IU9lkO}pnn0Hw#<@)0^LP5 z+k}aO`P0B2W^}*TZ$9YJrCfmgBkRCa&;ep0 z`x?B^wp?+t_(2Pu7dbsU#9W+!oNMXgz`SRVBAe9519u3jMI9`_js$FbrDs|vfcT$R zwzo%?#4JV=D)CuK11isaXr}Wj_pY=dQ709t*yCrKAR9DooCL=nfk~CtmAVRa?%^Qm zND_eo7&Ivs))fUtgfxHv0OONdn%|lBug8m_&C56hg{}dkQUwT;lixQ@9_K!^vN9o+ z4NkP6VS z{n~@dUxSJ*`nTyn3$ui7EdU4-nC|==fx7`OTGj)A0T?tP7St34hJ!T#000M9b>*LL zs?TAzS)i0zs2s7M6CXtzA7?Bxf3=L^bOe5DH zel0qh@`ZB_%nSoZE$R_k3*3s8LdNPtK7I8t;|WF?DpNWHUMZ&6Ga@i3BSaeX1GFOs zOSy%%L8HP@!Gbu?>ldIND>iIU7Ixf2+N0JTjI{+gc;wMY2pr|zMJ zoAX3gd0I?j8|FggTfuZEqtTh%eZzVL`S@;pdh9EKyRE(pKbIUakn&u`Zz3v&&hcE2ogLyS}~E$9Q|J#3nP#5MEe$R~xE3_^4uEs`%+iN4&*l*nbFw$(?x!lc+SyEKtRe0uMrn={+=45ap$Rxp1*T zlLi;L7SG9jKVre?M?|+s#fGIgIG?X|Ik0;KYGrlzxk&=9n`?r{_eMMmcpU#^dH$>O z$_BgjTMS0)nsq%Z(^jhm)#d{CEC*ABJnm^Vyc;>98Et}}YKWSK81%iIot1s3hEEzPQn;z7 zZJrr151{d@u$1<$++n~}fo(_9a7r7hIA4xFX{ z1J>%cp#z4{c}o}J8^ED)tRU=tUNDn|eDD7&`U6M=eq^!&W5PW&=Y;sI@HmibvoV(E=`Ah^ zAUTrf?K<8(pSZ~^M04x@j^UH*R`VGtI&}P92{@9wY(j~Jg$vjn;vShV7KN>ev!Epq zNXg}4rS{qmpTB5>hnXY;rH$o=`>`sP_~wUnfPCHrPrbIe+5Tb zt72#%Q_K&Ob^KbbR0L%TWFex`{s$rGtt$|&mu6C&6#el+9ljP>`~aX_!NWo`>YDei zWP2_H-2~{)ty6$_vU+b5n7J5wf}Ao%G$M}l2~=CXr91_5yBw_=I6b$QV))@>l=bWu zjKGHXl5HV%Ucnj+?+>Jn4FcUadGFqVp^Wy%VpCc$t^Gh?t^wrbEliO9*PLcR0aS)j zBg-Yi6}<7SiC?VQgb_o^hpsRFtHi(8(`tm-ztMqm7_s%!=jwMRk*u$GBRFh~1D|K9 z(2m$4sl1?O!Ac{}Gi%+N_l53oYn=!cexN?iAs4=F#E=V=2z%f%0Z_j=2JMfYbb$h%@~;a`^Kw7P8U#tpU9GxOJ9uU}Ql%a>-)h^y7kP;5v(Q3Kts z+N&nZBTHnr035=BBo2a|a2^^My>4IUj;mJzrQ@i|2*vIO27#M;a)Qm~hQ!xjZOQ)t zAl22a+aQ3`0OVc1qBFrF_`-;AzApd1d{2jo^`Q2v?h|edeu5UvQBsvq%IXk?9vM^K z$n~s;p3-Tpy}9@QA;kU6W0SS$uO9vXA6q&LE$Y|1vz`0cQYf!!CKrio%>HUeDTLK4 zY8N2ML(FcLs<@?5Smw3-WgN_VET!)$H;&S%fi=?cD)bFdR!b z+d5!qZH-=+_dPv#dS7C)a|-FlWJlY%<4|q}r~j^6oJ&qAseEw>x{^ii4XP16ZhGMj z8jS~TE!&6RS49h7L(?fB?ZOb0aiwcnO!9m zm}9woo}~y*-1Dsr)aj$G8=?r)TmKY^(0Q_QdfEEpx!^Y=WD+MWnrb1}($YOXE+HVt zbbi3>P%ZbHd(yxTrS;EQ5D3(atRVa;;RlT}S5;roiMMv{B2w7NVbkN)nW)J+-9dqU ze8mBL0-l|u*G!X;5z{>u1KCBRrID&`rfZuJPF?tVNiY`4JeX|6-0^?EjQKAa6yz2^ z$t_3dg%D0_#DC6E1v3UaHM@bRZ20UyN@O?j<>ByRWTa`h+<^kxV+Ek(?8?&$6fCo% ztAAoNt|M1;t`6<<9)0vWFOFAKBvy)Nev?9~@^fHv+j8>k(bGGkhw)l(gT*7MH2dr5 zz^?U$3j*g=`P#YO+Y|I@DxmNnMe@<{F-w4a6a`@wb?SMqRdvByR6s;IMMpQqs&VnO zVs-#YqTVM^#jr?J2N-ic{(r+865;NgcA0}Kn7i*l)j5i)ty#E;%Rc{>PDW>TPJwkf z!Yop|ROIPpji^ro5Iqss+=&6{yBL;G<^RJ5rCiR(U2CU=;0-5`R9EJ=X*&)q{(OzP% z@{P=IpZ-&kQEJEIxFBLl6zVQnzibAhLzoo~1~&OoWS+Z6MFRt&cs(^$s$)jNw=dfd zo1)*a35YURsT)`EHw#_XkyOf5$ho_2fF(nI8fNt}F-_HfQ21z+Cwm!0D_Y1oDR;W$Kwa*xUh_5i~Rxl1&dHV%W{ zaRO6^j}Kf0%lXBver73}0FQjkE)#=mfrJhQ;q73%9;{1_3|5KUy^yMuvxSn^O=J!0 z2Mb`5vht}Cb$S8-fms^xU|GrFKg9vE#t_SPIB7k35|NEP=t*;InUIcqF5jfj1}`P2y>TV)o0f zzAXz!t=yF?tB>sEI+I@uE_MRquuCJndS>E{NH2CD1~du~Ke~R8Xu;WHbovdfSwHA$ z`hagqI~82X?KuT@Q8KussB;Gugu#o?u{FJ2PFVM|O1n@gDJ&9g0ct2PMrh_$w}|!) z^o%I_Z7xa%b&=uh+`Uvj;2WJ3?2!hiRoqc=Vw@S`Xp%OjjkPMGB??_gnM%m-7FLu5 zQx@~cXsc^HPf`lmSt-7lzE;mN=nk%@>>E`#8)za zn?%(}jwb^E*Se;w!SNXVdgQ1qRR!Hjgc10m-eVI?R(x799g zAc-&Vp2n7>(p%m6h4+i1fVA8;wym#^SLi&PUtd|Gg+3;`e)@sd(GQ> z@|6b#I&i+EuK1T{OMossWKj+*a|w$hcBy>>cxtwQqwHx0G3+lJV^}V^bo&Q15Y+>g_y%`XKu{72S7;pw*n+CEZ;oz3xJ(1w@{Wz~^{1 zURq!xt;q#tV(sZ{20fA3_Fp-8dT4Bd=%xo3=TxuVVFkcTud|(AR5M`yUF*g99&r-7 zC**R7=~$rMvK1UH_@b~s7?&XCCEKGyt?jJDVv=YADRrs#UY@B12p;o)nWP}a9CtvA z0+bFQIG%0H=2^TZF8}lPS|<8%#R`AN{Xl5-TTU%T@|nzsVZ#jFe#~cq3y!A@L7J8PY?856E1hQC;j0 zgngkToU(cq1BtvJWh}+J-Z~Q^`mXazy&*yLUzyxW`lL+h`^@dg#W>bSh`j(F?MfiW zKgsmLm~?XOav&@2ICh2@w%;y*hikx77*9k2m>wJrkD}9kGR-2A37z3(1Zmm7CUPT| z2>;9J?GxNE4lWni&^D2MvQ1P6`bLgi&0O9QTvyo6N+kr9`y_6myyVDRCM!TB207MXV$gGn1GvkiaxwB%F zo*J)@L-Eby%FJrJg57~7OJSZSX7TNNde|CA2D4GTukfs128tGH(Z zSCoMkjFZ;*Jd5VvnBYmt(RBJhu;bF9rFh2C$9F;VDzHa@KSCQwxn7eN*5y^IUH9$8 ze4o9C0xE)XB4iYGbP=SzW-1+WLhbnxUfd}|Y9GPiS0P!9!vLs08;sS`Gc)`Q8lSSj zwq)gd#ZGUKLn1JvJ;rcy0mzfO7q4m2*phs{?9iP62y2Elr5DUVsZT=~D*cVM(U&F0#%ssL@6 z`|b?Y(Dd9e&FQtjXZsdwL(wn$x^wcwb6SI)<0&GJr+Uzm#zJCbIP8%b%D0jw9j-CV7bd`){(rPjxs3l5WBPyU9Du# zuO8<5kU+oWO@#$Y;LJSctebN(UeAO`>Z*HuDV*MF`UEsz$S=0CAL_L-NP_-s%Qs^# zCKoSQg(|>z7OT~^Hnb&$!^vMDOmRD_`X&9b;;_+`VE8Vh!ak^5m&U~k! zPI*!$v_It3?U`dAnGp7BHZ3vI^QdoVPF4fq@D$b_OWgK;4vLk=K^CTcVcQaqq$N@; zKJ;-8kAxoNP4e00LKS>o!mX=oIEBE@ubba*9JX1ry99M-yE+sLEPVoj9$$ct@zM^j zX$OPmujw0Sh*4F5V~l;RqUHLfr*%4a~_%>UEV!!-54J@5dIrEn)mF+MzV*n&KO&}xl=Q@n45Cm zMVPEU=Eo#i)kQ6EDb@Ip=~#~m|1pxbOa)ISk2FY`&L(9atk*&5X(hT44HJt0QcNOpPwj5Y!8No<$&;XHI-1-I6 zge%4Qs!#dRK6)nMX@1UcZ>(ZoYLDldW7Pg2-RLDn@Do62&a28X?Jhnf2A}h(r8g~x zCfd{#FJ&;tL%ec^41cx)c6_KuV}JMO-mPdlu`(xkFgr9%rZZ>QOh$Y<%gJ2Sj3XA_gzhcg2(KgX&Ak$9vD;3ip_VD&7CPMB^eiPl-=rJX~L>m6?cU3vV*hz2G z;1+VhbHIPc5En(n=3k1zr!39$QSif$z!6TNpYRPDTDO7=Dj%>@YE;G!nS<4jZ#Oj7 z6%!^^N>*um{R$E9nGqws=T-VR^~gcAOR*efE@W=uAUn(WkB{d8|E7ENqx;r`MsNF3 z*IiyLs?lKKd#V*0{O;**6tfW2$6Sucixt>LijfPqKrT|*bL02#vxT`qC+R;9 ztfA*Dg~NDv#_Ay$4Q)te18eB10SsEgK6sX-#4ZWVvFNp}JeS4HJ}ZYKu(;UxRfoUp zT>0hS=i&5F0)h}ejn>HQ??=(T5_xta&G7ax$mgW6lTkPtUQF`nH1`I7p~?#>73cVi zm_#5eI7QW{086`t35DIHFv{qN(XRC7*O;u#m_uTRo3HoJCPPB11RjA-O}Soa8sqnu zEG)ehLEOz{%Oj$%{s~{S1>^u|elO|-rcdOKJBJ4%(N5UT(Y)qp(ZxOqnHEn45i0?T z=5h}?On=O*pOTtebM#HMY7Wrn4-_GR2oQ}k8(O19bo1(qr^R~~YX9u~S9XCV(U}0 z5!YYx3|G>1aT5bR#!b9m;Z4mQI{@B-Uo(yr0%6o@Q#a4r0wV+b!uMF`L@XJ{#+CU? z1dF)vyhZFPDoFsOU8MxHD_o;BduJg*Ppy4|QxG$*I07TRUK+OFfNKh@uUL^5I)-)_ z`r-T5F6Sr`=m>5itDKel6H|dmvc>d#`i>WSg%H3e)|#Ar5DiT}kXSI(p}TpRwChL% z_?-ahgHgh*wwhLm zv;C(|4TWp<*}y3^gPQdkbmmh!e>_~ar9c|mbDcyWbMv>pu~JlOVjBxtxyd1@#cmSc zz37esKuXlXc%kmPE2BB-ruS+w@v1^@00i_IzXic4v9R{tr~3n=+c{8#1#<@U^hvT? zs-0+L&mH1>GhU3{__#_w{_O3aXFe8!8nnO_^6*WB9}nGrNR;~{O|i8 zdrwEZwt+H)!Zj#Yv7s^y^pjeJS4wet^Bxb=$?S3`&I*6@jN`pxCgC#^Lg9GVpfW4S zzkQqO!}sow5bPh{cLO3}g_JYSiygj`eb}nn6ruEEAs3p~a@Y%!k+eOc32yPx_l9ur zPG}DH@AnYS-oWrlXK^0FTsG$PLknSJ7xe?4q7qw0f$g2esR z9GK|%6;Msobz15=2&sas77GK;3q)@c`)KF-1I2z{eU4|=Qn6-rlJx8`(dLgxG*`~| zx62d=5WYbtr{U^ZZznPo0xmXFyxM!xp!x{U-TFryPtrqZ%y)SjDn<+r{#cCd>z6^P za>$jD6g!$DR>o6omOF>UrRG`us6Xj7#Mb@{Ql=2ck0YfwOt;o-!1$1^G<3+WaYhk$ zoWB!pP)f(8$U%_2w{8}f7tuDD*OaaV^(4Wi7Z6B+zuU=0Xl1-4uCFfNCG<2x#CU!{fQ>X#)K3!pe2lO2F!L6&#W&lyt_yQRAkRGF*#2)?18wy9ympll z2AGk|l)AYoKsOoERAq)ZuU$3^W~&~WjP5%O5zN0-`T-?fD61xe#=_2Y zM#GCr7~Sil}U4XNG8E*I51QUb{%wxHw-!I1xvVL6WS$Z6wB!nEhT zInFg(OV)bjqpG~R*C80|ih2ROXxFOEs`83ViYIJ0MJRFddo4GWQi)mGBlrIe+~z=2 zi;dY;Y~NC=ycGkw942Q4hmrzTJ)6NXS5?cAwU{&rc^j0@lVcA{)h_Ckqrf|fh*TY> z+;U~VTs4Ph{YU;4`qr-xHF@|!s*(K$Dr)(#kO+=J13ymdGdDHQz6 z>4R?$)2NN%?1!WM63cW0zPz?`Vda^Jvlo<(7R`%Zm{P&_IvfCnRXx|Rz)->mExQAH zg+6yj%!ctwGavx?Dh5%`e&M0%>WfasZq=XcOkh&2AC*llr`LmKriDmwP>AtHdfWxB zjP+#VAt7Bzi>Wc~3=+xcj6#*OGR4*tio48{VTBP5YU|}po?Be}IdNyi4j`TXpJqxX z%kFj8>|u~g_0YrzQV}y8p`=puIS-50a9eJaIC#cL`Y;S^m}F|S4*af0TX7o>!p7W8iq0rJiwm zt}+!~PW^9-P0|Y7!3FeKbA^_7Efo~5pasCq+5Y!fOmpV*e5F5on0pG((6qgM3LF2n z<$%?$lxz$m&T}tsHvU|*<3Q;guBsqiIl=1yQYk|re!?Rylz!BoX7OIvy+kTA9H@HT zq}*31#|hVM(m6#WG07WK?DM|}V&kgBJ<3eP}31cr`VFN4F`wHD4E9&*?6+NCR)m z9`XOnP@rm%x zYI4!!`_ZPqnNS<#&5#)9Z@9)F{4qSYYwBYYc?_%S#tNLQKGLGF<_|2BLk59uCfx~l z=i+D+>B@++X1cDR_ritHML`Z1ggyG=3vvrDr7Ws!?#%>W&>MY_G9ASh4Tx^aY}Wnb zCrSx(QMePeM$8#&CYyK7)S7C$aec~PYV5AHRkpJpio2e*;yquwV#_>eJA`eJyB>~4 z9CaT@zhdknNbZO0Q@xNE7zBvGV=Gc+o#Z6pGjDPUM9joUtLDR@T^&(-{uG zwp>wkAb(JD=mxC*2_Q{ys5buwH>wQy9J+wT97XUF5Ue9vadR_aUC{%RkY3l4PDwtWWcjo*cAMN`c?Pm5fXDAL@=VO9 zLUh!dC@7cH6N)d8n)Rlhced)S-Zkibp^^aAh5mS1-x_E_$728m{ZvIXXa&JU%|VqP zDXVlI0Q5V56|WK6u3ktpEbWQ6zMM_aE^|_@M|}p{g`{B3S-%HJrR1cwy7DS6x^5-K zsolLsFspUcCnxtQa|me!j%@vw2HjN^0HL&n#dSK{KWbwKHw-o8o*BZMw%%h^BKBJE zb6y3lz6VPhuK0r@8?*N%zYKm>?>1-bDvRj1^qyk37Oh*~rq$>75XUB`G~KlL=0*Ce zV%Cda*_8q3b;y#2QnuVyeXbqeqY_)=Ge2mw#X6pP#i=E(!iF#L==jFWbBf!!T_2)ylW6s*UQJ;SU3X&Blq+5Bm zn4t6A5lQw*tJp7l*Zs6YAYG6|Dn@-72*`Zrs_x9T&9p)?2aKq z6&Q-gOZR4EIKHF-^tUR$GmQuMzXyvM)f9)t`lH%Hbtj#fq=2y)(e}tDoZ`v!53$yt zmFY4wpYmbMSvctE+F_Q#yNY`CaYswGEh9YF6wTjaB(jX#Zu&6V+(UlZp7=lE@9XSD zG4C$d6GXumbBc%(46V6hM^U6!$nq^3A`k2|1^gK?Qj@rL1Bu|_j|oB8bvamAuO_yo z@58%wnD}TcoE;Jb`6sW8Yjev1t{+z)UY8eO3we=DZD)jUng>MuF?Rit0A0t?2RuUy zbXDFatnk}?+5+{s>{CVeXBhIm3ifgFoQFEwltHH==D0kPL$b&fnyh@TE{N3@V%)mI zE+%i|aQxjvIr{@(naJ@|`4@z$_`OCbwR0B@?;gLbm(+yh6CApECGW{j;uro>-BLOcyvgU78fPUCKkh`A($QF@jeOi|uB1u^6$ni{? zk3uUQU|otjcM0S4?YG$bNxq1yveQanFnyj_TZC|;Tk7|*7H!nx2wRd;MKRbR_wy_maSs0a2yDFo2 z^0v<|oMD~Xp@!!d)hPXU0rH(}SpkVsRf*EL433z&AW3Ip8*+Ox0i7+tv@;)4i$3uy zFzLGHLw~L0ARf@2uGyW8khBob77(G}8x{{kPQL}uP#g&eZFj6U|8BLo1cKxDTmG#k zv4E?HVM_W7W1bQg=X4$bz9$=|mlv$u>-YAjGneQ@W9j+(@&$@evbue6mVXbZ{N>uz ztv;1Rx}1SbuT8%kCJ6&Q#;?s-GPutSyOG{Bks0nH&JM!_-L?$tK7+&qW?j?C|Db#_ zPYEx(k@$`Br_uYl&-eX32qGqW^caKXKEt~=g?b=qsjv({x_Fr9d^WK)hxE~F%_FGW z<#4s=Z8O6UX@_*Pcnq*N9Ep4v$Rmt&!o}Pcdr!4O0ekf|_%b8i9ZHd^bgz(I4&A7L`GDnI$RVnm_Guxorw0~4zOI|l2u{uT59ilB#x|nl<@Y} zcglbq_W&vs@q$@V?H&h%iuqUg-uHCS`g474UscwbLwIz6PowJ;|;abny9}FUe4z1Ev#22Zn|N`-bx#pvK&AT+1+HL!t7Lk8pv|2erZphJJ+Z^{~fDwYVR)pkb* zpQtZz(Ux5{PqEfu~4~KRewjrr<6!Lw=GAbLE`#I;?c6Js!}CcQnGpD+Tqxl z4UcHvPA&C~^e{EW1=V{UNE3IoyC@uO5%uKW<~~O-AK$B_=d;Y2^D4i%)y*lU))}kROwY3AZ4+$i$MpQr&F- zRL|mVz0UGtgb|qJJ`C;AwZ}!I^TgLV!@uPU)f8&rE$1K5+kdspOFVs?LVGoMUP_Rg zK#^GyqfD*+hfVXTha}r1Oih9E6sN&#^)gqBzRCNhO3%b#_y56um-Ae1Z+hcCF>`u( za91iDUJTW;7LBYN7g4`N69{Hvo%`SuW*olHO8ZJ#@7!7ZjwH+&DoJs;qqV7oY7ef2 z59c@c#|x$dw!1)k-sExDJEEx5Q2H>`>{}pZqo?l~Oy>NqwLJWpVjdlQ^Nj}I@?eUK zGN(&bS0tI@)Pa177u5`>wQ1_)3Ft^AEh@zBa95~K?Qk$G zC&e5kzun+$V{Xj*!g=@hwV60RG0N+Dodp$_(WZGg|1X$BMHvkciN`lBAM-;N1?!8j z?HkYD%_$O8*8~suf6t0cT2N0(LRS1|H=B3hBB&(EK|fmv$+6sna+H_C=A}eS!0RNa zdw|A;K*|Q;@VW2aLwF$-$Nkjw>I@q|k%$S{#mgglvE2AjH_M$n&3;3NH{d?j@t}&l zz%L(>FS|Dj3wG~OtHOO-Tx?RWkL;L}98L15!d;N+;PA~&G)WGBryv85n+jO-$)~=c z69;R^Iu9+C+W#PJnE4@JfmE&8RtR4e3#vWY^Y82~*5}U-<(@{5rB?s_;b@;}R+-$yw^gynUen>Frr; z%n%UuF$bJz;EuqE@+@8v9AXfRX(M*NG6AWIM}|e~GZHi$)I)CnepZB z8{&%Kn5P5OPfWCBasKWr8CH-7xgbUKUacTPeuDBhb}Z!A4g4yvdtob`Fu(PU&fz^nlEq83{UJ3bxP72)rc#m9AI7k>tuvlIDp&LUD-3^BtY|bUG9Aa`F zNMrlMa5-iAo2=Zfm&+>uAa<5B?QVT!*M9UPnA)-35$aI+oR48UEw6&SB!);JfIvMI zz&;8Oibbh-Y6zG@mD{HIWmkbGd%=&Tt*{1Kp>>^Q(>qE`F$34fG(;{iH1s`TjJ3yk zksW1H{XIp$ty{+TtF`9uV8c&Ge>GYH@(pmvW+Q^Jy_52k*KuCXGq=gxVw$X1>oQOW zXLQ9x?vCD;66*qVX+{haZ3!Lei$#S>kKNH$XRRr6^9S(dE);S^paKGqq`z{Xk0y3m z+}oH1trlB>r$ZCDoj@+n*;P6}+_aPMBjuKV_0nE>p(cWBU>y2N71i%cr*#xB9TEW< zYOl8ZTU@ga!pj{c3)sDmq*5QBylIT}rGG{1zx8uFT$#Zpg-U9!Qep8~ZC1mF^jH2XmC z#7&R{aR_B?h{M8}ra@35&k=tCB`Ef5qk3RFYag3sAM}1vT)*FdkNm072pIltH&iKW z_kXGlp~YuknB!KEmRhYJaHpk53fA9)$H6Di>vZ$8@qU>Qyrs~_E6QlFdFIQ@gE9Dh z@~GjkuPZF5Jqi~3hukA=0;X180#@Cvij7eQ7w6R$XfZV9&h^hE?T*>Hsz8~^GsbAH z*zxRj$a0wt7wi1Q9(~Ww00r3E%;Vjk25V7zw$;qe0HiNuwfJM?OrLcKJXK)`;Z@~N zFKz<4aM-KrJ1fV+o4oun`0h1XP{~-7SbS~%*Fy*hRv7U4pwk_T*rmJM2Vz@9p9EO` zk1GA>RY}b$2Nul3$d>>Uh++~OJ z3dHP$eYs+L>q@@`5pNMO>F_0w39M=GhKG=RU=7py5rt7@y<31#&wh{W#5DiG9tu%S zd4eD$IK6s~8}R+uNKmp4D8y|43%zaVZq3vw!kRrvjt}lM@NDLAk9;Gq3mV!si}zE# z;TB_|d}l(EpIj$P;pxI+n=Ea%4gjQPeTkE=L%^Y&Ksi3iy%!0{Bh)r{ia!h9NbhCf zrGUl;OvPSIO}D|KZl%GAqAqP~UH31h67A}vknml>$o&rP;e51{!TS0LH(=mojH&i| z)Guf4$Uw_M6nZ}mzP^+~C{xM@)pFi84yPANu!0(|BICB@)8QdE2| z-vnEdZ<1B(?=uls6RXdsE{ez)I%p0CIjn-s3JOQLp-cM(GLMFYL56Z-MWyc;%yQTo z3p&Ze12aAQpc4l`@;vtQ!x3*k78sKf4|6G~Ov$d3PdA@>*L)b`qPf&xmwEJ(O#)R*4kp=euMk2n5IGBgbk3KpfHox;%2s8; z)9waGU+fC^C0OsnV1EqH3jWdHA|dXUx&|t57x0%hb(bwA3MnJ&Q>i|gh0rSgT--!M z+SyR=@^0nN#!5uepnqIlS|8g6e!VS_5G^^y)gAa{laLqijK2~@bw|c(Zu({kLVIAI znQ`_^bu6E_*II#pF+R#Z)^~v|{(I^TMeogEbZLzehT<16Zu!f@{>72v^%GzXU5iYe~7iT9=w2pr%=Uh_(w=kcmrt@WmIXLVi_1E z@G&<TxCv|-z?KS7j*0z45G<1wkg?~?>oqrx))ky z-85yyoKw-*anY8zwk9!FEy}wZh?=+{!og>u+Eya`y8eGn>;d4l*hy^xC&lo}@fXBR zdbaSjU$~A#Ze*wiWBxy_^Lpc)GIP}MZN4s1orSU`v=cYokR=I>%_-X@jTb+Y+aWGN zd9YSA=v2I5mUo7{Uqyn$sL3pS2qJ_wavtsAk+MLOD+h{lWtyT+Jt3R)I9VvsF+z@6L2yrYC6|V+pk&R?h9`QcuFjjm3d2LbIiGsc^sd&p{hQvHS#p zXu%E$&vIZY!v|OHNaV=wN1fUDCUx?E?*e&j27djod?j;@%4ImT{;B?%*IMFhuwTS0L9ePA5_|(Ki$n zS-6Wz7O<7)P#x@{?6&VdLzz3vLW^b$(z0TiPk=sxUvJ26Skdk6=fbOhe((Snh^luq zQo)_EWt;8hD%|Qv&0DD;d1Xee`L#N-P?CkJr_;!-XnW$Hp() z*%GHl{%+q(0m6gf0PJeikbN6aSjl3M3BI=cAP=^Z1H?SnB~;}&)8X^GLfv=$L>q;%v-B_Erp zI&?B9qgkykqSu!p?MD$=58stVlJjoWMPa_36>(EY1eyI+OKeq43Kt3dp(TMbtHK~R z_fj{w0ouZV2QLJE>dZz%p9QhHPx(pv{~J6>)WOzCb~~rmuFU;9R2+Kbl<~LJ8m4?E zM#u+WP$KnmPi#nqm?>?3H45YLBw3-|hg%2snExZ#o-exwNbzExA|?t1dCZi4*AH~wtc>z_ z-!=64bHb=X9d{o=6%RsHmFg$N+#Z3k?Nd^M$7($y84Zn~g8l5vk7Ss8Q5XzBhE91$ z(ePXW1B7Uv9o};EKJl!>O}>tZt&(O_P6mqT95u078=K|#JuT1i;uAgrIR1M$C0}j9 zfl^sAlOWI(u0>tcYIu(~n@fg@_kNoF3er~#OB)4q)c#w}7cKG$s9}Xg3eZpIQ3GC{Y$t9(p3JV@ZUg$0SvU9HYv__3 zB%NHP|Jh)GoBH;8TXx8pI{1=E%uq%<*JQh>Fy%802#?Flq53X?mk9;w3V?3W;h?t&X@#tJ7*dm89fv1cI5q&t2DAy86tV8QY9x4*(=@eCi*lo_T zjimvHl9{cnwen`aqE>xI_Y_Rcq)VXye6^fvCQjTOzmeO;w(K;&wlG}M?=gLf z0TepVT9qSN{vbKV<$16E7XRV_2h3Cp8(r>$q1f6t05JE5pz7a7%eT~qpVYK2U{X=Y zJLFpxy1%ACptHKLWCg7TPp|rOiujv8phW-iJX+8W>F6xf^lEwR9%TU!p4zNc`;_5| zj&I3o%V#we#=y9z;%4Oz#CmKl7+Q1;GC!8__UX7@lAz*W>8*vkkXd?knMvDA+2t^~ zNQ}$#Xca%S8#83g5Q(8i+IIQqUSN!Q*v!YlO+I_JW_75RuhX(L z0Wp2NPpPoeuL8+NO`p(d;$w~gebIJRuQ7bvY5JJ+bUp#z!pyQw5eQhGBtXx?Buyj5 z>=x8~yT{?}@I1=kBI#`W7p=S2RttR+G)^%8L=pSPIdm(NF94~dhNOUsghF5)%xFo10mSYZe53p>%#6qk5Wo!;wI%8@H5n?DsopA(peNZgk*IK#q<;Q+)7` zJ|tOTI5Qwej(X*^x0MN1a0PMFgye7nnk)41s2jjC*&4S+!`Vn6%a>xi1tjG94ML z)-O75tazjFFZZ~j{FpdStnZzW#)Sz%dU}RAEAK+*SGd^p&fBju^P9O_Q_Sc6)dX2P(33+Zfg7IZGYAvEuu8K5IXqTN z5k~3Y2rGlChVQh4L+R#ZJ`?h7x)B$Nuo5t>CA+WT{J7X+B&Hc%f%AHdHT%q8Aos3c z?DnGSv^M1rKnnl#so$q|4#Sb8%|8oja^ok67lDFgG%Xy%A$1Mq;mEQs8kT(h(MsLa zvmHtup$#6v;RwgyBqzP4^<7O_XWm@2O3rYBCKM}EQ}?Gh06FW~s>S$0eWbYyryp#1 zyh?5L$MZ0mC(F{`xu20M?sZS5xweL!^8U=ZNCj~52yr#oX5Q}&l6>V`FM6aM z+pX#>FtVb)7K0~ats`yoIy$tz<0lGqp&*b+4)-c3n<(b>1|08XKInivLoBL&(j`;; zn!IKm?YoQybACU|UPA6r`2oWFH9+emsO&nJzdTB<;OkVQfRpEGrSTF8ZlKg?&Pgql z);JJ5x$a)NTD>q&E$D9WmumDyLA`pF;DX{Vv3_M?1# zo#^gqvdwn74?1g&Z^UvTCNL_`mhJUvOZ`GJmOkN#FPkR3xc{!X!u!)yw*v78y+rVT zx;^H*oB4CzGME!y^);;RL;7pB*M^+prm{_s?RcfkrA{ODlv$KmQ1r^x`!n8?5jK2bc04El{f-X z<&Bqyz`?io@5TisfLm?J*sRcN;CDL`(l)@yAOfb~=ImUTDpZ#W#^ei99;u@W@Wokv ziGYM_ew`Jqzqb}KE9%3j?jXB)9I^_w0gHyL6);!=RM8?(+f;ik(aV;eG#%uD@iYCQ zgzkG@LyV5_TPOmvvezTnu(W`&+npMIdC873_PP_1=V2~UcA`>__R7-JOtW5m3FES~ zL(LOLnvNO0-2I8vK{JPQizu_T3q;E|TVA?$h~tP@fy68{wh&w=WH_rW;hY3&L4pazU>47TA&QPXGm<0a1bQ*q$Vo;oOnWIs50RHxeK5y)FY(=%$_;<*39XBe zX?4U0u_n!YwOO3n0@bgmY;6?f!exhQg59cs;t9M1LfyXOvFWtW=K0sufdqa&qXjLO zW7gjjWKj!Z+#2oE8aWPqR1)Xd7l0Z{0L%+92-N<#z*GB?j$Q+M4)y-HaL(z%%xuu= zhQ@cYizVMwSv3TC2XQ=LY8??J*kcDa8f`!d(D_rtwSsi>PK~H8dCT z3{Dqc9&KDVBvK^L9atD6K&_V9lAD-s4gPGlU+ipvuq7$pwd-?Bbb8hp8Q{&kLqQqE z?^q&^@@ngD7DAcUIO>`unKt&7F9%W|#sjRDQ<1uiIyX+x@7` z&P{m2!_$^?%tynD4JCjm5?p;`&h*Vu8zm^~Eio3|v+v8Td%X71UP&(mSUn}^vWn-* zj6x2Na)ED@Sr6v<3gJA7$FG>E&iu;E0Hsk7Mb6f?s|LWJ7GQ;pbp$S5zl8>o8)5r! z7fbqgpmn6PNEXplPXa_n^ZZ5z=CzIVTg%h@Ij<{c)}R9~he8MC#&jtqSeVRBd|FJYntkwyzb%&o+p8<^-@x82bKv3K0)0|FB0SOZi82J z*+hT#UT7J!zpm;+5C>mBcaWm@>A7jaQri$J0g8%zrN1wy`iPOaW78h)9 zv?bHtTX-XKp3z9IA7`a zbOy?g`BH&#j? znk+hPEgOk6H|q`mk6BnL6dT!q{w`2}50noJfyKrA>9I4MUukwC(qN}Zd zIAIG`N>;CVbT4_MRzlI9M4(j(vjoIf+Zs|P<4e>3u&=dut7DwYWI)hX8EERPu^@nT z(_W@AHp~gr#ewn`a?H}Q4&$>YX?{AF^3?8|qkz;T7K~jf7jItR6f{+oPab!K*!^F< zXTEwm7~d`jtfbQKCfXy0+X>gKJLHpfUEIBDnBcJYjMfp|U-=jtUa06hzcKzJ-DchD zw9P3e(Z}6G80CwUWh?B1N(kAniTE_@0Uc1Y6;!i(&BQx!`fpzI6rL$o5CweHK&&?S zOKk~YaE>a_#Aw>hN0~s+jvy`kw*z=;W__=^VZ7d9ap!!Fcibx>lXxaW4fLyrGep^0 zOtTEfGI_Mg|Bsniu>U;cObtNTmbdzK-u(*cPLqc%6yhlW2hcHz?2rH9 zR)jk5WUybf(@=gN)1kVTTy1%K^qB-}+^ATRvXPn3I{g4G*NuHb{X|tF1S@IAJ$Clq zEMk8vOLu3MVgv$anx@Jo_{)h$+OsM9r}-GHm7Jp&Br$Of~|r2Q}x?G+uNmrA{O zG?s3|i6~ifDRz1s#+#M31n%GIeDNNjzCby`GvN#c`O^Xe>0-BrgU)JYjfGKgA=i=O?jLVkCWYtb*#%G zO$e0=%S1J3Ruu?rAJ!?`zN_$QDD==-SCqWnI8f|&Q+#TN8IxokL9$UUx39pyVTPt&sr^)1KBK9)M$Y$>Cj{{sNZ@_XTaypz8Rf(ip~&NK z6enQk{eOv@5RO;u6f|eP#Q3&b#~g$&$|JzkVY2`N<%_HX$RNi3l^$S@xA%r}9IWCV zN;1h**HIua2~?XLwJXK(tf4Z>ywfmwG3__wPmTNs`_wfN@X9!6c=8giA?7JXSZv6NoN#@hDMA~V0lvf;QqXw{J;BNdy zR>U+B&J;802yJ&!R&x!)CY7^8lp1;DER+~NAgAlqHSg?<Gl^ahwa>v2IgUbuiZ~ zc~Tz3$zYhW%6!nHDWUnN`3R4HHrT)x-TWIYB%e`Kka%c$`|Y6aZpc939G*Jqw&6@< z{0}6ai({VjzUuoNmn|1S-yRaRPzZ(+!^Ssk%JjnIN>58fqUZ(SMdufB71;OMuQ$iR z0Zcpju1MxN*=x1oE3|Dc^v;+p=Q3{>gVL$4YDE$V*-ksyPXdX(*s1wJho7u}qr5r& zR8HYIp9Wx@iNPz0qV~+NG|tuNWnk@eS`=nOa0}VzFkid;WEt(#u%vuroVVP1y&X<8 zJ}p5*l=bQ&A^Z_TN$+vui;#m`iv{^rITMO4Y1k2-pbq1r`SP05P+_DxV|K@^2zN!S zl5|K4VQ70@rb%z|R@z5)9fz`3q9&H47>F97$LJVw3V~?E&a&=uU?{P4fRlcrG>&rv zg_$%p;V~jV$&?w;_`Fm?ng>oJQDhkb_@q#zPhp@TMW`)=@!tqLOgWCjA2nD&5}I?y z6*8iKYI)l{5sW>YXb5^lrLHrb0&(S0oe>d%o9b|-KG?JF#gj1*@g zLG~x5Ih1`wjBFV(w_gtFq_SjoQ94^~j6;0WfQr=t#G1cTmWM}*GI`8FBjpYL%s#lx z^oz6t8y*_E6ez{(tum#P)YtH#L5ep!+AG!Y zm|K;UHEcG-iL$34jDfQz`bvI$2HL1~*1Ug9&<=N(A)mu=N;%?z=GZ>dOcKZ$Mkx5?a49B%*42hHg0cTczpQamp;CpfTWFRu0@6ETk@g-NK3!^h)#K*VFyHm+JIU!@!W=9PaofLB2XxVCTfu$YfE z5ZZ7mXN>hI`HTiwi$>u1EZMB;HNOPS-Eq61IAwieI>$R&2!SR^@rcf_uJApr* zvM&kC+s001*%e~{l&tY8C8m;=R}6Rbc<@W^qJ8$fDX1W2>EekP#6KtU0J(ixoC)hV zGLx<0dC?~N84$e0T+i1Vd`$|0-NMx;8m>*_7MsINWwL!=^$F#%OH~k1#Gc5@UnyQa z8o}(HfWJ2C*A89a?{WYY%O_FUp3*BXwcqQ3$?=Tfd=54JVNiSZK~eX(oaAxCPE0##1eQ7W7ErqFAk02yYwYhXkOVu+m}D1f>&3_Vz9bTDa;tz%&kJ&-4wK8u}wTVqA9ll*~$XUeF-Cwz_&>+unw zg7z9*OzDVum}@Y3xNF*^As5{_a=v!hMhfnCvBmpRI0)46)sXK>$X3? z0lKx+*(8w5{HHWV8g@Su>G;_-TdL4;HmldRE?ey51dURXFCSgE18m^chxl{N~Z zb3ZJ^DI6`Vm285Y#dQei)MA`12XPT)(Zo(52+D0H5hGk#^$J$w5;4p$NjwSjynJ3= zt6;rK+Lrn%8Su=(1VP&}#(MW+<4XYVN%NVJxSn3)DJR%<0;Bx8VnV9D=ueK!Z4y}x zIRfPES<|?{;!68trvp@QtTzkIGx+?CvSuigDL@}iUV9O_J5!>A3s;r8MJh;BR=e=O zo98LnJ5vm%U3NkLtZm+JpSr()&a3Znp9_%z!flv5lXLN&pR*iAiZJ7Pb>LFHTuQ0< ziEmU@itfEzcfY=y=zafW28u^yM*v4^l|-FN=G~4L4-kkq9INL_?A;@LO-oeX;)uRiK?#TE{bUUD`C@ZV<>huyJ=orNxvb^qbJ0E`N!N&KfrWF)Er?}*uwO#fU>E^ zdqd{s__;y#-3*oOa%sbG>+4W{oB(}_w%zndSecbXcvj1Poq3o(oRntRdLL(ZC~Y~H zMov28h$md)Bdzv3-$(Y!L;L(So_#=Uk z!eB~1nFry=^*fubVI}Q<%a6Z3*h*L}O$exVsp3t}=lBMej z^j&g}cLz~Ua&#LysYxczHlZv!N2oupb+^?CdCvGT)1N^qdw`j#CmZ0O1)|ES85*+tE+Jq!pw$ zc?$H)21;KqXEL2r4<8zVg%cf{8*v=T?oDhb0xv;p`|e_@2#n(|t_;(TUGaM9m7wxg z;JC|>q}wc|;;M-Y*q&frn<*qs^RTzf*(juAmy;oABL~iUhl_k;2)PzyJcg^=6q()R zb4er2Q=u~`XSq3EI%c~bPw)@f+oN0XAkvy%s$hM`qIH6)+vyZn9- z4iV=>hnjGH%s+^k%GUOqbP;evw2!<)MK7tyCm4=i)$}KLLkx zsXK}ijb=_{T=qf0Z64kdiQE$*-Nyp=Te1H)+s_)LDBbDQM(uN>V7y|up|7t{UhJjL z^Kd#YjmpRsXBm1?XJZAUU6vg)m5QU*MWXRQ06##$zm4B8p)BjwQV{^~9Hy~IOKf!4uf+9GE;Vvep>6ovQB=1>qtfiOwT+^YpI9iOC% z0PR9Mi!uDHqJ?deZMq!;AdJ#CHJKip$quJ)ZVs>b6s!6@hi{IDJYX`Zi$qPxEL>Yy z{4qr6z8$#i>s={_E6)W4*YVhju+682kTp&5w@Z-KpbJRd>+{!OPu=^!YfOV6e!jza zqA^wj=9jfrXQLUm0Ifq@C-%C5 z2>w#u=jD`t{)7TlJLQ77BP%|`UovS@ExAD7b%$`-GX|7;+W)-_z_Jc?))$KK&Yjq&1iNPAm! z-1j~DBkPt0jntNMN%rzw>4WXBo>Qyx$2N?r;AM7 zS4nGMC~N-&mpX?pux??UYKjEanVl}&nxlg1;2a>wZSAr0Q44I)-l=@7faC6%KdAU+ zfeNgpwO9KgZ>?=e!pQr@_c|Efp#Dm-sI6KPP>wOn|E0`AJ2`OYL5RYxOX@9P`ghg+ zdu^){)nq`UHs2>=Vz$jW^(c5X*Q0J}Hfi?o-Y~d+?{{L-i)N14S6;YADJ;wPB1VXH(U$}~djt=M%Ghwanby1^DO1=Dlhs^(dFaYPxlRv96e*y*%?{qv z(S7YN;hL7j4>#XDTn|?g$L7Zqfd<{4iZK|2!xnKmwDFyXWi77Xc5d1FxLJ|~su6dE zzGsAo@Hb7drrYq>SWIo|V=a%e*A;r>`6~>);^n9RIg38i6B}xg`X_Fld5}1t0iao0 z6pbKb#m6xuF`)BGb9ZV`Z7d$`9op?snl@aac<8=#@AgANO6PV%q=JpGjij>Z9Cj}L z^JeWgK;p4g%i!)whJLBFI4gk6@c?kMflvKob^cOb3xgrXdK zG@;(1+BQolIdLbxHco`vjj;T{rT1NOOOEvf(sCv7b5E#yc?!~bcJuOBAE+1>;Cs~f z%3wbEK%oR(wYEbqWC@&zPz%G5`v(}nV55`_M4lgoOdxoQKYg{}SQbCn?8 zy_0IpTyIYXD6};PE;(72Fe)SRhats?dMvhOok9{aXX)}Uta{hcVC}%sQmwFc7WguK zB?of|2n`rvDH_l(@85>)1AD0ThSo*^%yWnS84bf;=A$B_Pr{FLC$PqJ;Jy7! z4#)*^JQqkPO*<)m6l@kc?jH2K`G*rX4w}Y}$gd_;1BHcr(UdQV#jiY9BYXuQ*?<=V z9CC>{aIYEYlNEe2w;d1BJ z!|VHjhihS2gAArDPhncK(wTST30fmk-S zfzGk%Y@Cg3Qiy0^6OtFD`ecSL)GHAFoHU9=FdC5K@K^Tw)>1X_DPA$xfE`GW!W{}< zwtD+;CUI<1&xqhL$vstPqTxYyYKJ7dVB&t%U%S8<>pOVKXM8Bj+t)DnVlEgz=z<%? zEa}Ipz&K$?-5P~Ar*e#yH)*Q_+I5!?ROmWh)3)s&0Nq zeK{97zaDGKho^z_eQ<5UeEcV(S_Owhv8M&rB+r+F%1xHeK={6E#@9)A?@uRJV!UOd zGdD#Nx4J9$v|!zFMj{5Tv&HT*9}b;oV-P;3*unEQKFmW zboe zR(;FoLcgRG@!PKiD#y6x++y}qdh3Z%!q`9=ScVQxukKMxB4{Pq$=pt4wsK*gC8JZt zcDnaOE}80vJR08yQj}1?f@I#R`0l8gpf1EioJ4(+C@4Q%y4Afr-;#^$`uF`7zG=(56~oOz{v%jjmaw zokq!Q3<;gB*RzsX1H%&%i2k@crZ2iJw9@Dlm+w03V<)7CNPA>g)jwbF#GexRIKh`| z`CL}W^w#4y)uQXoXeBmqcq>T?a92T6JW}sfK*YfiE^vT%ip_XXw(R(~lI@5bUIpp! zZ0`ixtWV_|yaDJ8!3L^0+L1TRDcSgNnOag6gjh%%uE3>~#nY7ID)Ws%e09ab)p|jn z|6xX@ud4_GAXF@r8!6_1_}p5}DEA}J&H$WyR?1&H&oL0pz!Ae`zSmO6>ji-@EjZ=A z4v=QpM5j`jALIQ$qZe_f^fc#t+bMbU1;C^8Fv)HDK&ek_HxIiOeuMT9Yt>Ztwa*WX zmQfMiyZbYGE%MjnBDa~gqk~aU}7&1lvv?7rD(gp?^7k zUO?y3wtT(~h*O7wZOsoAm_5F{rzh-ju7xz#V}7th7=V*u!6xpMz|oCFNs(%5dQ3r8 zB}R0>OEs}+7u2X?#zD;XqRLj~%dDaw6m)Lc0Ir>BKvUSDxO3yoU?o0*%|ZzAm#fCH zcjXa;lj8*N1EEm+!5}pm94OZ>7zTXz zm>luS2A|WOD9y=UN>*QEw+CQS7ZP+fZl&tBjG@108^y7t*4Z3X^BI=gI1QT@h7tYVEqI$`?Qg z2I|U>Z2tr5PvfHKg`mli;<4lVM~E zYCozCx`Pyvyg+Al!zss1XW~@<-i={Y00FrsN^QG#V-T#yZ1EA?3brKG4BZYp`lq*; z^9TF-4|Ad5GmUxpnxfq-j$!}%?V{*98Kr581;$5Yi|Ug&h0%L?k57rOd$Dl|J9w}n zZbNcZ+MVJMcF!vjx8|wGFOldjljmxXDr^!zUT;dvCGLhO zl6AzL;0kODU`H42hQK&#`HC^`9Wc*eRn0Hjx}k}l-tGMNU173P%DmRZGm9q?{)`v|6+~rga-O@ zLv#=g9 zOXw#4NdSf4)>(&^ygCUTSf~CeK>lM_C89x92hTJ|sAO1aii_&%GR}(}Ke+Whai$j$ zNDvPMcd(<0LBxDxnTzA9-`MflUjL@i`S$SF4L*$-_t;a0b+!NDDNy&}{un)n@>y9* z-VwD$)z-JLjnp-Nx`V(dZVy?AR2)T9_H9MI7H&_T+OP?43j$^2bXmIP=CR~!G5E`| zNmfvG!{OK?A*ZvQ6)72iBld7IWB^oEx_EvT z##2QnjZo2;1;2jK#lO$H_Jt#a$k+Z%-y%WtKe56$FNN}LQov#I1e@kfJ15V}kif{e z7IUs=;y8JK^Jdr#oTdKCE166F-$|>-V0uW^vwHgulqshky1n+|QOPR!a8-j$K?#P7 zfgH=0CXv-lLCL2G@gsX$P@GVyaw(6jKisl!y|P;}s45Q+i;#152m@l0U6O5Ifp2TW zC0uWzP9Xyg#1WbeJ|8R4lfQ^FU=&&n2Yx0SHgZL#B?lcxNAbfv^#RJ0ietcE&9}6t zH^Y0SN?x3SRyJ26czSuE^9!Xp*#0UNMoE90VzPPGh*%T#P6pSv_C_=^+Pm)bR9m1b zi&<%TeIM^N zJCj|l1jv3xdykw8BigOC9CQ5~x;nHJ<2l7CyGqUt-}G=BbHJadA3g^O83|?4%}2AP z{VCfRkyK`3B)@jWPTOI8;Nb@O4UR%`uBoe~55#y~T&5c67)4164c`<7xQ6vF9Zguu zle$g~XBpmm_s6X8uql%HURycNl z_V|Z@(Kp2#9qid7g@5YQA?84C{8>BzSg)fin}cldT+-@C?6vxK6L@%0&k{ zHBuD|y#?TKBYQwo^ zNA5tTMQTEniQ-91+V3lIBb=!EsssYZ;gu+Z=qc5Cm^V0L3VQ6viyvP}<~H z&3He{?8Y=`_Q1o6oVNF>vBxLrnXRIb4*mvi6zU~*C%yDkK5!hGwqoZ`Zfbmo^46bZ zc3!pC9RfwxMXCS*)Z{|2_d z`AMjDxxwWr#&^jzjPb%{{`oiF1QIE)^+Y^-1hn!nC2B}(PZacpo->M+{vZI7JjWKskgoz2|+Xlg!|P$}=bUu@bM z>^y0n-R1-I?1HdqE+@ifF$owc^Sf){L_$N!tRD&KB?~5Y#Gr`XN~^N&+X2#eeI@;M zF#q2Pte*)eHg6L`u-1WAxBXq2DOR3S1#6@j@2LG;40bd8)bubf3i2|&GfZVP*Y&45eO{=ByHY$oE9slG>m_U&=MC!tszr7-?myAGWeR#kE> zb1%d#ZhRFfjo`FJ9pE&qu;5a31P?cANo zukEs7R}lAZidp6Mk~6M4{0G-NYLkrsoCMZ*=yxWL$iiBoTjRsmY&!qDsGF-C1ktxj zFNmyhXC-e@Pu}F6ou;XGgiKRq-Bxsvy0zr0Crfay#cn3K>27+s8; zkHqPPJ^kYWFOk6i>WG1NPVHDa-=ph5Ma=zX=+o30=dE}4JP!ZbK-PEI1QyMUYC=x! zb=l;P5HnyP=v;etrpgdpjCwcba2fee^*$gi(nUsMw^}z!#8MTg@r70UGt;X=sI6p7 zVX|>Rcd_aaUR)`vS$*m$Z99uYinM_`dDRaThwHA+Tn7>jusQLLV;?#a9A?1%v5KPg zsIuWgK(m|CqY)vcxmB0c>&n@YZqeHyNs+A1rAEHw>O$)7+f%{=Mno-UTG1e&2^{}3 zAnJf`(8}zR%a1&SVPu`q-)%K0;GkV4yu!` z55W0BBLx(R9$G_j`{X0x}OJn`NQz|Q;IkJQW8Zc5Bt`lp{BbrJU5lFa7Al+ zHSxlK$XJ2k z4W_suEfwggSTd+*?x~{3{ldF%1m5^o=nB;w;v))ZK)ux_`ZT@_^-eJ@;IY?Ddi5GrF|{zx@>{ETk{MD(SHg)-{gu7|07 z90CN`qI2x#F||1RuWEpq))lh(rz6MGTaUB}px={M|GK+2R`XZt%hvC|kp+n@eFt@q z9l?Oz=#P}xgC*phXP+#CgUSsY9*v6}m1?gxd&s)e$T55>(G`V^u^t zNHVhk+~Bubj%OakY}toal_%qf;5jq$F*PgVwpP6}mmNA?O9(yo(p&e%!2wJkKx7QM zvSZ2AWM<{Y95v)aN@=pE_?2-;r-GQ81e?~!XraUXH`qgLCt||LcCU^0Omi=8b(ZPK zwTcBi5m`T!RkK)mND_ekg-_mrmc6j-)kN(bn!Cf1^MisY%Y+7@LR>})07DY~kEy$Q(7r}&H zzLTX}tZ7AmH|ckHJG-Ouz*eJp8{U*A=Z3vo{a((kEV>B?xo{$itBlu@?(Esll2?() z(74Z+*PRpyFRKLe2z^pn(o}x4+>}NQikmJD?4oz{^e#pt|E<{P&+kvrv9E4%CwggHLt4}oLOs2{W|Z(SoiK1pYL_%b)c|@BC3H#ji%LNbEj>K8osexqErJ7=!=k5cr@|(|hMW z*{wC+L3es3jT6wV^4eq(rk1?wk-tIIHQc9RKjY&Mjx$?yMC)m_0 zAq>~mg|^NEFwKWmDA(QYM4*@hNEEN0yiIvliX<5Gmz~XEq?$TjId|r-m9Sij`WhsA z(>HU-u{F5+%jo@4=?28&I0MWjTfG;t^g+`T$^kznGU9Ved!LAgy8IK^VX6zg25*T= zhvCV7_sM|gJ*tGX;I2S3S|na@>N4~)wFTN?vcm@&eAtX%0%1-gE4BL0fDfH7 z{GfV#uQtahJJXsW=$AaRz~_brlj6wOW`aQ6SNdl$o%!NfX+I$KnJ|*OKH^1X=ec>R zgYwJCT+ZX@Uht)d)e8923%idf(4sd6Ne?{;rOKj@gw4)Kel+AtfGDqs+#DqIMKX7r zi9b^AKK&nr+To-mD0Ue$CGNHlQ{9Q`-PDr7AG-$RuN=rS^PU=zsg8tT+ILu(ex7Lg8}3%}$jP$0YV zMzcf@*p#;}$%WR4(i!;UtdnQnZpN>>7 zC42lmn8fsMxf~o=ZrZowVqn%#+lcsf0qq9AP8Gf~8!&ycBTokR`j3`U)h<~|pLkcW zR2gvK)yomrQdNVxp)(nmK^ONYM9!0vdI2^~hmv zN!5s7CN-Z<+N<7wvk%V0&WAQ6)A)LN?2NJj@EKaDXHO>JQL@OPH38#|nxbRgkt%=S z{+>i%wMT2faX%%dxHno6wIpE*G(%nTfiO+M{_NoTKo}MBrd@jRa4Ftdl-CNN0W(|O z9A?S|ARFXNPO}n0LcbW@T)LIQ?8<#u*>lj3;V2>Dt=$^Z0ERh$YOLo>cm|sZx*kZd zz$;fR9x%BO+9##R#aW_oi%~&>$2i$^@gv?v{XwXW)Z6ErX~6UBuY<#NsU+}qLd#oP z|Gx}(^SJ+gl9$TpmQ&YOKIv1U=$LAv1Id{^J-yV@?TM+3_)|wh=qRw zR;ApvXbBy{VVat}=6DjN?=SeFTL1Q{c&ei}f_GBRMh;%eT-XeWkW) z&rJJ6#xMx)pp3(^z!<9j?7edVfG&1(Cr2ofSfzAoBz|8py~q<{Q=5MEVrmr=T#iR7 zfMd&tC|ZtlMsZ@!1m`&AF7=9S4MTm-Ksd)PE-iW@fwnfT(yE!PPGd3p%^tG2g7|IK z7HLcR+lU>YN6aS}b5tB-6RIt)N8M7+Hu0#5J1-fvcy)Sc2HaEAcG| z3cFU|XbCD?*-$w>SouEtK%7mNfVEv_$ud<;Lz5VxLSpe9umG*WB&YeW8Z1|k5o)Mw zxHsf~tJv0wYW@uMbTwUM7yDGK&X~&%DFxIoBku(zP{PR`o$36@4VQK^s@Xhk>{4Ym z`LpQhSetYvAaH(n5dyG`K3&g4F%$>oI7@wRv~X>WIH*D17c8LgXz0j72nIAv97pM| z%TmMKZba5fv89E97QCcEYmte5-H{Z>uwEjQ{ApZ&mL-_P!ZalS7FkrwAf{c`#-NL} zFw8=osXv-mz}S+B)}7uqy@InoOyEuNeQ~2LMmFsTpl@=12D=iH@35;Z(l%8{)1_I4gdxupZvb8LzK>cMsgXP~mwK^KbO7hCFc!h9xtuG z_zvaT}AiqdTgk-zq0AR zlJ2`X_0gsjA=0$I_HpDmjK!3=!&wyoW4NUDd(os^6Bee7=Tfx!X@33N9%`#xxsH$8 zz;L}A93=3#7jESuYaGLAFl%w${~ROcW&77BISgfB;oLooxlJNs8X+x3l>=cZ2L5&d z8W4Jcf_x}LL0pt0g)I%@CDTO11Ef;sUZRE0&KQfcTAKkFG%l`W8K?jNdwL7Y@|wB% z&)4OlWuGizjtP-f+vcGejHUF^BS)YD*+8V`dJtg_E=0`=ceXM@0zp>@VMl~93S`2L zTK63chuRew)VAdM3M`q?qzF23{%Gbhl#YLudVC1VAz4(@Ki9ju(9p^#tu&m~t1Po) zcwH@ge6VH+>s(OiZR<8xd?Z%+u=G@IbK%Z2<||kdr(e)`=$)gFL-V(MC=u1!^Q6K+ z6B}(tu5Q2ufHTa9Z~+)JAr{p#6wm+w063SfH?MccsRqx!pxI!*XkF}ka`&sSz6pj+ zN;WdbJk0XA&|4xuNkhxVS{TaOvqPN{wJORN2c?4T&3K1TDT>y?$)5SzopdG1 zTz*tf*z*La4N#loza#p7)@iT?aD|=tA_2ls^n|7gI8pT7-H1sb8Us#80_V9kC=|K- zco|Yx{KzkH`$Z*hahvb(?FTOz!QBo8()Zgfr?zDL7OxfuT)jYIGA}Al$iG3b&)uxo zaKneH?t6w0k?M3PZhz!8x8dy4tv20#9xggZ3tyR4Dh}Stu+x}tsF;t@aE|752{N?_ zrH3*Eu0f;_OeT1zeM%?BqaQzTnlY#%27i!v@m)!b#^%wt{o;YOxh{1~KklVm6|EYTi zBTY~Vr4Gjwrdm3SO=dlnsj{B^Ofcc~uVxV2y+l7{R`K@vKy zxELgEyon|Ly^7kkD1;oaE%T|fyjcF4s_fW;+=wQ+bjc55GGo~7Dfj|6iP1NjaGrV^ zxYg#74CqB;S`V-6=a7RCA))?Tq4`Eo2loL-eUN}{(Xd-e(ieK*Pe);TB7=s}sLZm7 zTsL!xF|QS2eal=he2=`2-r5iW!|E}M5ahBwGYcN*8d~Ps#28o(O3Nr_cZor*=;#-7 zDC%9()jw7vdlXURD^TM3yuWu1s>>Fmhy%F7vZ%&^QRMCkqG=oU1Qcmf}bOm zl5=$eo6$Y8Nblm*Do1B#j_$+aYD)s)Miu9+5O5FKA52`|cl$lsbe&SsOeN)4WUw%5 zZif8JZLjYo_X&5!ZZqoW?u}qa>-Q`&RM-GHH{Lw80cejn5#{#8y2VY^Yzwm@Px1{F zC%&D{$>;#zK=*7N7ED^rlZ+wkf@PH9xFMI^gTnE?v2w&I(7-87Q+fiLp&%c!vX@~y zBdyDcONghgi-M|S#I3?us)KYVyMQ`0t{adIh>zPn9zXKN>ujGi_C@{`(x_AIn^@8&r zPM&H64azii-{AVJ!Cv$C*WQW?8_Uyk0@eF*Wtl4Ji_ep{a;~^y<~K`g2_M&VjA5~( z5j(13Eyg9mS=Iu%kMu%7zZ%xa(Ln3|e=2K@fKSP#Ogmvp$q_i$pIqfwARVooytQ+g zc%_!e7ZeCnt;FN4^q;{%0llTW5gW@l4X{~&X$)Z?a;CwL!?0SI^1w*}?Z5a{pA>#& zor}4bh-F?&K^9VS;ehkAC7kB1!zM4(tZOZDHu0na7r*zeySnq-@a9)!8Ff_FHWKp~AbVFeM~GSa=CJ{V<`uV&a;mnZ-q37#Z;p|l;Jl|%Jpsj7a` zs_EuxV2AK3BO6_28~#DRx1h~;;^i!-uUY>Nv8=ft3{_fsROTl>uSzqcI0>pU z6uDxL?rdM&;p_Up7_<+2Gz}N-b%sOW4e|vfi+%ckrH@7CCpmA~@y1v%^7Z#!BeQRD zCDW|e>>|2A-O3GGMcL!VNoI||c%$H48aFb|xi7++>8F;FlW$c}HR2G?I}|>+v&RNT zV}QcH?bkGA_s98KnQU>ELjK-T7ELzY+Rxy8$g0eY)E~SV>jjr?%$&4t!&yjVHek~P z5%y^!U75bBxwL}e4 zk0b-HXqdRQ##93iE)p1b{h|$`kHlaLH`Awb1S060c;s`O_E)4U8muBPfG2} zBf>(s>WDuKJJcd$5D;z5L%ZN?{wddi`ZS+0D-JBiuV*?-vO@ z4R~NBl++VBf?%238RX&M8o{d?;?2gLNB1#9`9^P1IZ~ivo#F!3&c*vk zBB}Dh?hNO1XO1-e>*!Y)+7n^rDlkVLf7 zXpA-V8Vr)tH2mAM;h4;OojVO@Bu+{E8+y*F`}5Mh1%^f|WUffGX{Q`8=08jAKDFZU zhhni&y(B{^J4XzZ~O;s@Bk2? zh5v}kd%B~^K8vNC7Th2`-VjgBK3_?-hh7oo%k+U9KRD0)YvUzRQcq!jVOm`oj{FZM z=BhRPfyGbLaHfFW7ryCbC<~bcpvfY+cXNj`ZO1RNx(qvBLfMChju4sHv?5LAVg8Dy z2O7aF$yj_T(9|=x*t78jF}en2`{UdKP6NL8A(OUH{i$dtF_b?exrNX06#~c#M31S^ zXz{<}U0Ie0(k*HWdyZNsRXw{ra2d0Q9Rvi~V?27Rg`c13DcRiMoz~H#*EfBpEXaV@ zj>NjQG}O1@-kY)vaLl$+?C(IBl1uxZ^vQr5!r@43ex?a^c^-=Ys3ZGN*+qifTfU)j zLkT=4Eds(6<^4x|!9rvwojXjv4y#Uk*&RR(yCac_j9Um;RkE4FytQKb{+O;Y!A%#@ zQB(n*CPG!GkV`Oeg3<9Ukq`kVq5GAcH{K1ZYwcA6_#)sJkgyr$YUZy1R3{_NA9>_b z(of8Z)B3B5y)1^Ek=&V;e?3?1_{yYq;hKdB zy^wLj)6_pksZ)=2=g~D|mYy_9emZB%dMP%A5{cK4k36#Je?udZu`;ygl()ydQXNo#s?azo2fdlZiHa}BR(M1evGGx1u%VZ8i99MBl>hym>SeK{Ko-Nw3(Dha$qjds+7to2p)J6??P!-$653f#>;@D2DU7Q|jkj~VrNCC0K^1?y5Tv-AB4y5( z*o;J>(b@JtSyGpD4BGW$+}MIIP*C!Nc~*NXhiR3hF-c~$>< zvNYtwy`hcF3!>+F#s`2!$gRB;o_KVywIkq0TI+!p3tJ9|Ht_#_Ww4J48@tNX+2F8^ zFD#?gtCrTMm@R^~QU@?U$A2kPB_3;57Fcb(kF9(Hw{qW+LN~F}<;zAfWKHbBXot4z z*CEIMtH^aibSfV?=kRk)2TJB^Pp=u+)pK}-l4igSJ`Horp2qD(%F;)R7$NXA6jK9{ zW_qpugb1Mp?eVUD6iGt5+<)u9qJ*Y+|jGRJG)SQJHx6n zr->UD+Df&wro5iggiBe*462gaEX;U;H37&m^WSx_AadS+o#FASyR*WoH>RS!`!7iO z3^wwP$6{6dTCZYl-vDolj{>&^MAJBR#lg}ekrLNj6@WZmq@;@$fC<({LxsI^^=UR0 zdZ>vALMw7AQ0#?oX=)14v+{ww^f%j2h}%ByxZqOT?C`D; zm`>~WusnWu<%GxZ-dL$0D)buO4@3n<@kD~qT#=y~11KW0wxxPK%OvEF_JhrNq87}c zt5?v&9|r*fOfmcB-G@Az=R0;}S*DzY4nF_I&xh7(8uz7e9M{MdT5Yc~j7@`6MF|Rw z>ylmpfAXDwg5OaLDk`wRl?ZSMt59GcQ5lwMSqvru@x;?F-N{Ak?3d+uzjGwquU70> zrX)N;A;|mpxwe!f{xz~rI|0|bGlIKyU9edndXiRQU?@`BtH5f|QHID|Tm<+%Uscx= z(yRY2cyrR6prjg_)4@5rkz&^&m&eHMy3oGfsF0!IL!GB{xpt$W#ODV|S$2#!7p)F= z_SB0t;{iEOr(2-Gw;&F=z|G~nG+GYbfb32%-P5{cJLVej5EeN|OdkJd_XIfPLE%J! zO2aY^`DH4(!kLoATF*f}EU*>d zgF$wL+lCaYA~&Mjwe~yhoQ_FW08hb5#rOy@vNBPnXY^Bb*YT} zt)T_GSVfq@it^0`5#U1HE0Z}+S(Y_LFNx-fI40n_1v*-F z;?K)?^)0TjZje(RxP%Kwk%EKNR`R;dtcDy*6LZIb3K~i`Hq>x41%|70u;EHLde3vS zHqd=AZ0UWclmORd+d?^ff&XQ6I!8Coge{~nLBbsAUu?W`r^K=saC(Z|Qq>1^cu`U4 zEIb*1ay8cxPB^oM6tRaf3~kwhRg0R7Gp;}oa7u5aH)iB^&o80}LMz2vJrBFoprKnQ`UF=_qhAHhC(5)^41Q54Qc=M#s zWT!Mj>y6ArRVM~!n|`*aLN#GmcBV16$9iKGzj_FL)m%997EV0~nzrU^|& zRpEPUthE=dWBDPIQ68X@2i2BQ6-kxt#{Y4t&U*5EDFT?F$GhJfqLshtnE{IK4J)gg zQ*Xzfyvb>+;LyfME6*bkF`9Q|K)jW2quMZjKK7LAeR^0EKsW$a1=5S04$@5a^?Rwo zJLa~eO7YXDQureacmOP#^^e7b|Ah=hH?I+2E-OUhCFkycRg(B72fw}NE>Wk6%>9@d zK3c{whX@$>!keZ%^Y(D5yyU|b^=1j?-BIkEm7Ko6hc4*nA4XDS14hh~Rtt7Ii55f! zmY@6QxMHL2>~!N~AQu#r10V!;?Y95#w;bogqBNHqYcVRS5wNhHsI1DYzp(I|4fAQ^ z@zh}!;f?(Dj&)NEH@7eqav4iry;B{bHHSHzd<+4hKH08V;82AH=v0%2r(NKYChQQS@od;5_2@eTqS#cX%QndjTAPW(CWgVSWTP(&TJ(mCOWUX>C)E{scWkV>(JP2CYm z=ug2mHPfD*gR3)oT?QAII5*V^3E(!)jtGDG^e*ilY4*VK3Ol*kU6R4Cgy9j>ddm%mBl7U`;P+G$_)@IPh+x*&S+3x&l>ln0CJ== z&M<^ATvJ-;9KMNKdAZSpn$=!k70hayUJc9Z2J46vfpEqMvM;1G~x}aAT6m z<=ZM&m?#%COHoTJ;2J}rSTm9kc<|HKl7M}fXQ z$JG#NE`~4E&*ATY8R4-MR)GE{5@5?sA}X6SFuAy@)7an)Db7PEsr%S!B?B^uQEF>t zc)|p>m-Jh{n>S{AN_pSGWxpmp1;E_1b+0cU_FFU9Uv*ntuxSrBP8<)mD znb$zv&Sp6J!asy`K0Hj^=wlkZKk9w9G)HDXRwo?nFm=H?E!_{Qy}g%oF>#g#cdr4x zR-|6tpXy-2Ma~L%&QPa~Pdi6sTQte=;hKuMp|Qv1B*@aRh@^Aq0(v<$#cQocYDSVO z6>4v)LA$*1>p6HgAIQUtFfGe(oEJ`pKhBKpRHH*@o*#fCMZ_0CCR8-a9|a ztdVNW^E8q@svnESnuRAKH)k&Ze7EWCwo^`;C{n`?c)O_sP?Rt_xaT^zpH==u-_UqhM4L87!l zPL6HJqg<)qX~u@UyrB2w;@(T5?*(}@uK^Vq>Ep+mDq{93gX z^Ue&$gJjC7aFPDUYrx`qReQKPVu6k@+qv{4a3i_~2yu7o_)lFBKjk{0&Vhz&82V=c zgw3*HR$HjSaD%DfKK6opK(}M}!5ytintvA)nBi>kb9{!S0HS{9^VHzA2|Pr2$uf7s z`^}DU?6IyE5;!O|bk~pa3*e3j&L5dPs#2LKh4lwM?!+;Vj5Ye!@hl5@Y&%^2_2esR zb7?f+>B|x%K01`AxB&D?7}qU(-*&b^I*|)Nue>;wS>?3BCqYyOP_0TDQadYi{SzP{rLalXY|bx<>+&ZG4(^>pxN1lK8?aNbJ}wKSEs zVPbwh+M~wkobyvQq*$!vjvPh{?3e#a3gEZ3S+t3C(b~mz4NW9tJkP z@GB#EcGc&>T|PlHYVRPvB?~4u%uM@2IArQ?5(9FIW|kafUmMmqNLfiZ>iir5qf^5; z{?9C=UOCgWvS~-Ok+YG{7$3bHb7m-ScCO#AqNq(->sq*EXAvz(YHJUJ4n)1jYFOMn zpJJp<_tq#Zys>m)P>wMN%`c|}aVNHp3~6*PN!`NlS&^)tMEb)a6*9kcr$~pA&7aik>%jfu++`vF zYLGdu;M)&!X**gp2H3v7Zm1(Kw1bRK9UeuYtAjHZ$g^k4cYPUnMk!>U!{O2~$Sw^; zn#q|KT7VtEbgt(#f@c#@S`>Ha(%aGfeEPh?Gv)0wNvn7g(O^cK$(|1A_x_8e=sEhQ z4sZr%m4Rm9Ruz*RunE42d0-m&rx~ZQ7rS&|8x3JVQU#kX!t$Cq;q)%?b!Dh?OYY<0 z)LyjDSXAMid`Y%v5n}^e9(Axh0_6;-ZTq1|5`Ms^r+(TIzt*q&6>g;v*^FiZq0`Te z3O(gkLG%981rXuzt52A1s)ueQ88~j?K*sJk#_b9+r`yUVJY!ANF6hn?RFH>_4`KcNXoq+vk(57)nC7tjvv!H|s~s3Y`z zsNf2v+_n*KqJEOYWaWpBIiu^WFe`fIvAiYt=BRrGq;bKa;INTd!y$SArJUgEHIslc zVSHeYCs50tBWk1Ckrp;%Qtcnh|KLlG$M)eWA{aI`H)&mrOeTkhT*G7u6-@3O?ktE(Hcyv;QZ*sdW4KEo8|0RxPu5AXmyexhSbhNrD?sScv5WzPcQg|D z5Syz_=Oj-$Pe-G>)r59*-3J;ts=^+CufR`H+I!m!JPa`hOZ|k$F!w2oI`8i87V+ zY*(f?jYoni+*N%-p>E$fDWv9`yX(PWHR<>cDbt-&dtj=aq@Bed{33EM^l?vZGI(rb zhfe^$?tD`SF6B-i)EZ(FQ@qvtD+t8<2^2tsF%jrUuQCP@@7TWcFOZzZ&s>&#vR)@o z9A{}Y%k<)3bJ1Ed;I@0<^^|3ji~xz_GJLbH>!bSmYQ{d<-|q%{oz4Eev|Nq@>W+}p z2!fYNTQnU-a>6)-i*;H>gkPgG-T4;_9b&4EWl&6vAn8Ph#OgQ@9z$lOpDYI;Rx&OX z*FYJNZBEAJJDH#n0^la{3Q!a12v$U}0_SX$?wsR6Z^lI#j}KAHnR z{3@YxMb{4U7x(-ze_~#ZiqlkKVZrw7CBXhG^;bRZM>_G{!9%!!1sCa~eNNM^IBueX zJ{JI*O?Vy5x=c8;a^iX1u*897Xo){iL>}2ir8DESnedK%A1t% zy0C7`J6$5C^v#FmvoEs3m9NAZ`i6~On<%0DPD2x+vPTk$0f;F_Z6)NK7JddnU>S#K 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