From fab0d802b707df75f1200a603e60cf7be0ad84fc Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 3 Mar 2025 18:05:42 +0000 Subject: [PATCH 01/23] WIP w/ channel view model --- .../ChatChannel/ChatChannelView.swift | 1 + .../ChatChannel/ChatChannelViewModel.swift | 8 ++ .../Composer/MessageComposerView.swift | 11 +- .../Composer/MessageComposerViewModel.swift | 128 ++++++++++++++---- 4 files changed, 122 insertions(+), 26 deletions(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift index 4a5de0ac..9461dd9a 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift @@ -117,6 +117,7 @@ public struct ChatChannelView: View, KeyboardReadable { editedMessage: $viewModel.editedMessage, onMessageSent: viewModel.scrollToLastMessage ) + .environmentObject(viewModel) .opacity(( utils.messageListConfig.messagePopoverEnabled && messageDisplayInfo != nil && !viewModel .reactionsShown && viewModel.channel?.isFrozen == false diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift index f9376c7b..20b2376d 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift @@ -98,6 +98,8 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource { } } + @Published public var draftMessage: DraftMessage? + @Published public var quotedMessage: ChatMessage? { didSet { if oldValue != nil && quotedMessage == nil { @@ -494,6 +496,12 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource { messages = channelDataSource.messages firstUnreadMessageId = channelDataSource.firstUnreadMessageId checkNameChange() + + if let messageController { + draftMessage = messageController.message?.draftReply + } else { + draftMessage = channelController.channel?.draftMessage + } } @objc public func onViewDissappear() { diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift index 13fe5c97..5a521907 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift @@ -20,7 +20,7 @@ public struct MessageComposerView: View, KeyboardReadable private var channelConfig: ChannelConfig? @Binding var quotedMessage: ChatMessage? @Binding var editedMessage: ChatMessage? - + private let recordingViewHeight: CGFloat = 80 public init( @@ -46,6 +46,7 @@ public struct MessageComposerView: View, KeyboardReadable } @StateObject var viewModel: MessageComposerViewModel + @EnvironmentObject var channelViewModel: ChatChannelViewModel var onMessageSent: () -> Void @@ -214,6 +215,14 @@ public struct MessageComposerView: View, KeyboardReadable viewModel.selectedRangeLocation = editedMessage?.text.count ?? 0 } } + .onChange(of: channelViewModel.draftMessage) { _ in + guard let draft = channelViewModel.draftMessage else { return } + viewModel.fillDraftMessage(draft) + quotedMessage = draft.quotedMessage + } + .onDisappear(perform: { + viewModel.updateDraftMessage(quotedMessage: quotedMessage) + }) .accessibilityElement(children: .contain) } } diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 9f683b01..a7e3d708 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -152,6 +152,7 @@ open class MessageComposerViewModel: ObservableObject { public let channelController: ChatChannelController public var messageController: ChatMessageController? + public var quotedMessage: Binding? public var waveformTargetSamples: Int = 100 public internal(set) var pendingAudioRecording: AddedVoiceRecording? @@ -203,13 +204,17 @@ open class MessageComposerViewModel: ObservableObject { private var canAddAdditionalAttachments: Bool { totalAttachmentsCount < chatClient.config.maxAttachmentCountPerMessage } - + + // TODO: Alternative: Add Binding here and populate draft message here + // Then, it is not required the envObject(channelViewModel) public init( channelController: ChatChannelController, - messageController: ChatMessageController? + messageController: ChatMessageController?, + quotedMessage: Binding? = nil ) { self.channelController = channelController self.messageController = messageController + self.quotedMessage = quotedMessage listenToCooldownUpdates() NotificationCenter.default.addObserver( self, @@ -218,7 +223,76 @@ open class MessageComposerViewModel: ObservableObject { object: nil ) } - + + public func fillDraftMessage(_ message: DraftMessage) { + text = message.text // TODO: Command + mentionedUsers = message.mentionedUsers + showReplyInChannel = message.showReplyInChannel + addedAssets = message.attachments.filter { + $0.type == .image || $0.type == .video + }.compactMap { attachment in + if let imageAttachment = attachment.attachment(payloadType: ImageAttachmentPayload.self), + let imageData = try? Data(contentsOf: imageAttachment.imageURL), + let image = UIImage(data: imageData) { + return AddedAsset( + image: image, + id: imageAttachment.id.rawValue, + url: imageAttachment.imageURL, + type: .image, + extraData: imageAttachment.extraData ?? [:] + ) + } else if let videoAttachment = attachment.attachment(payloadType: VideoAttachmentPayload.self), + let videoThumbnailUrl = videoAttachment.thumbnailURL, + let videoThumbnailData = try? Data(contentsOf: videoThumbnailUrl), + let image = UIImage(data: videoThumbnailData) { + // TODO: Generate video thumbnail + return AddedAsset( + image: image, + id: videoAttachment.id.rawValue, + url: videoAttachment.videoURL, + type: .video, + extraData: videoAttachment.extraData ?? [:] + ) + } + return nil + } + } + + public func updateDraftMessage( + quotedMessage: ChatMessage?, + isSilent: Bool = false, + extraData: [String: RawJSON] = [:] + ) { + let attachments = try? inputAttachmentsAsPayloads() + let mentionedUserIds = mentionedUsers.map(\.id) + let availableCommands = channelController.channel?.config.commands ?? [] + let command = availableCommands.first { composerCommand?.id == "/\($0.name)" } + + if let messageController = messageController { + messageController.updateDraftReply( + text: messageText, + isSilent: isSilent, + attachments: attachments ?? [], + mentionedUserIds: mentionedUserIds, + quotedMessageId: quotedMessage?.id, + showReplyInChannel: showReplyInChannel, + command: command, + extraData: extraData + ) + return + } + + channelController.updateDraftMessage( + text: messageText, + isSilent: isSilent, + attachments: attachments ?? [], + mentionedUserIds: mentionedUserIds, + quotedMessageId: quotedMessage?.id, + command: command, + extraData: extraData + ) + } + public func sendMessage( quotedMessage: ChatMessage?, editedMessage: ChatMessage?, @@ -254,27 +328,7 @@ open class MessageComposerViewModel: ObservableObject { } do { - var attachments = try addedAssets.map { try $0.toAttachmentPayload() } - attachments += try addedFileURLs.map { url in - _ = url.startAccessingSecurityScopedResource() - return try AnyAttachmentPayload(localFileURL: url, attachmentType: .file) - } - attachments += try addedVoiceRecordings.map { recording in - _ = recording.url.startAccessingSecurityScopedResource() - var localMetadata = AnyAttachmentLocalMetadata() - localMetadata.duration = recording.duration - localMetadata.waveformData = recording.waveform - return try AnyAttachmentPayload( - localFileURL: recording.url, - attachmentType: .voiceRecording, - localMetadata: localMetadata - ) - } - - attachments += addedCustomAttachments.map { attachment in - attachment.content - } - + let attachments = try inputAttachmentsAsPayloads() if let messageController = messageController { messageController.createNewReply( text: messageText, @@ -524,7 +578,31 @@ open class MessageComposerViewModel: ObservableObject { self?.imageAssets = assets } } - + + private func inputAttachmentsAsPayloads() throws -> [AnyAttachmentPayload] { + var attachments = try addedAssets.map { try $0.toAttachmentPayload() } + attachments += try addedFileURLs.map { url in + _ = url.startAccessingSecurityScopedResource() + return try AnyAttachmentPayload(localFileURL: url, attachmentType: .file) + } + attachments += try addedVoiceRecordings.map { recording in + _ = recording.url.startAccessingSecurityScopedResource() + var localMetadata = AnyAttachmentLocalMetadata() + localMetadata.duration = recording.duration + localMetadata.waveformData = recording.waveform + return try AnyAttachmentPayload( + localFileURL: recording.url, + attachmentType: .voiceRecording, + localMetadata: localMetadata + ) + } + + attachments += addedCustomAttachments.map { attachment in + attachment.content + } + return attachments + } + private func checkForMentionedUsers( commandId: String?, extraData: [String: Any] From 8ddbf9ea09bc55f4d4dc4167e13f2c71c3969392 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 3 Mar 2025 18:27:57 +0000 Subject: [PATCH 02/23] WIP without channel view model env object --- DemoAppSwiftUI/AppleMessageComposerView.swift | 3 ++- .../ChatChannel/ChatChannelViewModel.swift | 8 ------ .../Composer/MessageComposerView.swift | 9 ++----- .../Composer/MessageComposerViewModel.swift | 25 ++++++++++++++++--- .../StreamChatSwiftUI/ViewModelsFactory.swift | 10 +++++--- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/DemoAppSwiftUI/AppleMessageComposerView.swift b/DemoAppSwiftUI/AppleMessageComposerView.swift index 2f1972c7..234a1e7f 100644 --- a/DemoAppSwiftUI/AppleMessageComposerView.swift +++ b/DemoAppSwiftUI/AppleMessageComposerView.swift @@ -42,7 +42,8 @@ struct AppleMessageComposerView: View, KeyboardReadable { channelConfig = channelController.channel?.config let vm = viewModel ?? ViewModelsFactory.makeMessageComposerViewModel( with: channelController, - messageController: messageController + messageController: messageController, + quotedMessage: quotedMessage ) _viewModel = StateObject( wrappedValue: vm diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift index 20b2376d..f9376c7b 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift @@ -98,8 +98,6 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource { } } - @Published public var draftMessage: DraftMessage? - @Published public var quotedMessage: ChatMessage? { didSet { if oldValue != nil && quotedMessage == nil { @@ -496,12 +494,6 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource { messages = channelDataSource.messages firstUnreadMessageId = channelDataSource.firstUnreadMessageId checkNameChange() - - if let messageController { - draftMessage = messageController.message?.draftReply - } else { - draftMessage = channelController.channel?.draftMessage - } } @objc public func onViewDissappear() { diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift index 5a521907..37b1ea5c 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift @@ -37,7 +37,8 @@ public struct MessageComposerView: View, KeyboardReadable _viewModel = StateObject( wrappedValue: viewModel ?? ViewModelsFactory.makeMessageComposerViewModel( with: channelController, - messageController: messageController + messageController: messageController, + quotedMessage: quotedMessage ) ) _quotedMessage = quotedMessage @@ -46,7 +47,6 @@ public struct MessageComposerView: View, KeyboardReadable } @StateObject var viewModel: MessageComposerViewModel - @EnvironmentObject var channelViewModel: ChatChannelViewModel var onMessageSent: () -> Void @@ -215,11 +215,6 @@ public struct MessageComposerView: View, KeyboardReadable viewModel.selectedRangeLocation = editedMessage?.text.count ?? 0 } } - .onChange(of: channelViewModel.draftMessage) { _ in - guard let draft = channelViewModel.draftMessage else { return } - viewModel.fillDraftMessage(draft) - quotedMessage = draft.quotedMessage - } .onDisappear(perform: { viewModel.updateDraftMessage(quotedMessage: quotedMessage) }) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index a7e3d708..36f1dde0 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -122,7 +122,17 @@ open class MessageComposerViewModel: ObservableObject { } } } - + + @Published public var draftMessage: DraftMessage? { + didSet { + if let draftMessage = draftMessage { + DispatchQueue.main.async { + self.fillDraftMessage(draftMessage) + } + } + } + } + @Published public var filePickerShown = false @Published public var cameraPickerShown = false @Published public var errorShown = false @@ -205,8 +215,6 @@ open class MessageComposerViewModel: ObservableObject { totalAttachmentsCount < chatClient.config.maxAttachmentCountPerMessage } - // TODO: Alternative: Add Binding here and populate draft message here - // Then, it is not required the envObject(channelViewModel) public init( channelController: ChatChannelController, messageController: ChatMessageController?, @@ -215,7 +223,15 @@ open class MessageComposerViewModel: ObservableObject { self.channelController = channelController self.messageController = messageController self.quotedMessage = quotedMessage + + if let messageController { + draftMessage = messageController.message?.draftReply + } else { + draftMessage = channelController.channel?.draftMessage + } + listenToCooldownUpdates() + NotificationCenter.default.addObserver( self, selector: #selector(applicationWillEnterForeground), @@ -227,6 +243,7 @@ open class MessageComposerViewModel: ObservableObject { public func fillDraftMessage(_ message: DraftMessage) { text = message.text // TODO: Command mentionedUsers = message.mentionedUsers + quotedMessage?.wrappedValue = message.quotedMessage showReplyInChannel = message.showReplyInChannel addedAssets = message.attachments.filter { $0.type == .image || $0.type == .video @@ -712,7 +729,7 @@ open class MessageComposerViewModel: ObservableObject { } .store(in: &cancellables) } - + private func checkChannelCooldown() { let duration = channelController.channel?.cooldownDuration ?? 0 if duration > 0 && timer == nil && !isSlowModeDisabled { diff --git a/Sources/StreamChatSwiftUI/ViewModelsFactory.swift b/Sources/StreamChatSwiftUI/ViewModelsFactory.swift index 334532a4..e5ac1d98 100644 --- a/Sources/StreamChatSwiftUI/ViewModelsFactory.swift +++ b/Sources/StreamChatSwiftUI/ViewModelsFactory.swift @@ -4,6 +4,7 @@ import Foundation import StreamChat +import SwiftUI /// Factory used to create view models. public class ViewModelsFactory { @@ -64,16 +65,19 @@ public class ViewModelsFactory { /// Makes the message composer view model. /// - Parameters: - /// - channelController: the channel controller. + /// - channelController: the channel controller. /// - messageController: optional message controller (used in threads). + /// - quotedMessage: the quoted message. /// - Returns: `MessageComposerViewModel`. public static func makeMessageComposerViewModel( with channelController: ChatChannelController, - messageController: ChatMessageController? + messageController: ChatMessageController?, + quotedMessage: Binding? = nil ) -> MessageComposerViewModel { MessageComposerViewModel( channelController: channelController, - messageController: messageController + messageController: messageController, + quotedMessage: quotedMessage ) } From 4043f060f968cc2736f470de569b13004fe77823 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Wed, 5 Mar 2025 15:25:20 +0000 Subject: [PATCH 03/23] Fill the draft attachments to the composer --- .../ChatChannel/Composer/ComposerModels.swift | 56 +++++++++++++++++++ .../Composer/MessageComposerViewModel.swift | 45 +++++++-------- 2 files changed, 75 insertions(+), 26 deletions(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/ComposerModels.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/ComposerModels.swift index afb470c7..be0dee00 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/ComposerModels.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/ComposerModels.swift @@ -2,6 +2,7 @@ // Copyright © 2025 Stream.io Inc. All rights reserved. // +import AVFoundation import StreamChat import SwiftUI @@ -52,6 +53,48 @@ extension AddedAsset { } } +extension AnyChatMessageAttachment { + func toAddedAsset() -> AddedAsset? { + if let imageAttachment = attachment(payloadType: ImageAttachmentPayload.self), + let imageData = try? Data(contentsOf: imageAttachment.imageURL), + let image = UIImage(data: imageData) { + return AddedAsset( + image: image, + id: imageAttachment.id.rawValue, + url: imageAttachment.imageURL, + type: .image, + extraData: imageAttachment.extraData ?? [:] + ) + } else if let videoAttachment = attachment(payloadType: VideoAttachmentPayload.self), + let thumbnail = imageThumbnail(for: videoAttachment.payload) { + return AddedAsset( + image: thumbnail, + id: videoAttachment.id.rawValue, + url: videoAttachment.videoURL, + type: .video, + extraData: videoAttachment.extraData ?? [:] + ) + } + return nil + } + + private func imageThumbnail(for videoAttachmentPayload: VideoAttachmentPayload) -> UIImage? { + if let thumbnailURL = videoAttachmentPayload.thumbnailURL, let data = try? Data(contentsOf: thumbnailURL) { + return UIImage(data: data) + } + let asset = AVURLAsset(url: videoAttachmentPayload.videoURL, options: nil) + let imageGenerator = AVAssetImageGenerator(asset: asset) + imageGenerator.appliesPreferredTrackTransform = true + guard let cgImage = try? imageGenerator.copyCGImage( + at: CMTimeMake(value: 0, timescale: 1), + actualTime: nil + ) else { + return nil + } + return UIImage(cgImage: cgImage) + } +} + /// Type of asset added to the composer. public enum AssetType { case image @@ -92,3 +135,16 @@ public struct AddedVoiceRecording: Identifiable, Equatable { self.waveform = waveform } } + +extension AnyChatMessageAttachment { + func toAddedVoiceRecording() -> AddedVoiceRecording? { + guard let voiceAttachment = attachment(payloadType: VoiceRecordingAttachmentPayload.self) else { return nil } + guard let duration = voiceAttachment.duration else { return nil } + guard let waveform = voiceAttachment.waveformData else { return nil } + return AddedVoiceRecording( + url: voiceAttachment.voiceRecordingURL, + duration: duration, + waveform: waveform + ) + } +} diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 36f1dde0..d2e6f7bf 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -245,33 +245,26 @@ open class MessageComposerViewModel: ObservableObject { mentionedUsers = message.mentionedUsers quotedMessage?.wrappedValue = message.quotedMessage showReplyInChannel = message.showReplyInChannel - addedAssets = message.attachments.filter { - $0.type == .image || $0.type == .video - }.compactMap { attachment in - if let imageAttachment = attachment.attachment(payloadType: ImageAttachmentPayload.self), - let imageData = try? Data(contentsOf: imageAttachment.imageURL), - let image = UIImage(data: imageData) { - return AddedAsset( - image: image, - id: imageAttachment.id.rawValue, - url: imageAttachment.imageURL, - type: .image, - extraData: imageAttachment.extraData ?? [:] - ) - } else if let videoAttachment = attachment.attachment(payloadType: VideoAttachmentPayload.self), - let videoThumbnailUrl = videoAttachment.thumbnailURL, - let videoThumbnailData = try? Data(contentsOf: videoThumbnailUrl), - let image = UIImage(data: videoThumbnailData) { - // TODO: Generate video thumbnail - return AddedAsset( - image: image, - id: videoAttachment.id.rawValue, - url: videoAttachment.videoURL, - type: .video, - extraData: videoAttachment.extraData ?? [:] - ) + message.attachments.forEach { attachment in + switch attachment.type { + case .image, .video: + guard let addedAsset = attachment.toAddedAsset() else { break } + addedAssets.append(addedAsset) + case .file: + guard let url = attachment.attachment(payloadType: FileAttachmentPayload.self)?.assetURL else { + break + } + addedFileURLs.append(url) + case .voiceRecording: + guard let addedVoiceRecording = attachment.toAddedVoiceRecording() else { break } + addedVoiceRecordings.append(addedVoiceRecording) + case .linkPreview, .audio, .giphy, .unknown: + break + default: + guard let anyAttachmentPayload = [attachment].toAnyAttachmentPayload().first else { break } + let customAttachment = CustomAttachment(id: attachment.id.rawValue, content: anyAttachmentPayload) + addedCustomAttachments.append(customAttachment) } - return nil } } From 6e93ef99e624950ad0efaea6abb5510fc4aaf377 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Wed, 5 Mar 2025 17:21:18 +0000 Subject: [PATCH 04/23] Fix commands not showing in draft message --- .../Composer/MessageComposerViewModel.swift | 35 +++++++++++++++++-- .../InstantCommands/GiphyCommandHandler.swift | 2 +- .../TwoStepMentionCommand.swift | 2 +- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index d2e6f7bf..4de23677 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -115,7 +115,7 @@ open class MessageComposerViewModel: ObservableObject { didSet { if oldValue?.id != composerCommand?.id && composerCommand?.displayInfo?.isInstant == true { - clearText() + clearCommandText() } if oldValue != nil && composerCommand == nil { pickerTypeState = .expanded(.none) @@ -241,7 +241,7 @@ open class MessageComposerViewModel: ObservableObject { } public func fillDraftMessage(_ message: DraftMessage) { - text = message.text // TODO: Command + text = message.text mentionedUsers = message.mentionedUsers quotedMessage?.wrappedValue = message.quotedMessage showReplyInChannel = message.showReplyInChannel @@ -750,7 +750,36 @@ open class MessageComposerViewModel: ObservableObject { self?.text = "" } } - + + /// Same as clearText() but it just clears the command id. + private func clearCommandText() { + guard let command = composerCommand else { return } + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in + guard let currentText = self?.text else { return } + if let value = self?.getValueOfCommand(currentText) { + self?.text = value + return + } + self?.text = "" + } + } + + private func getValueOfCommand(_ currentText: String) -> String? { + let pattern = "/\\S+\\s+(.*)" + if let regex = try? NSRegularExpression(pattern: pattern) { + let range = NSRange(currentText.startIndex.. Bool { if !canAddAdditionalAttachments { return false diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/Suggestions/InstantCommands/GiphyCommandHandler.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/Suggestions/InstantCommands/GiphyCommandHandler.swift index 10c90dc9..0159bb37 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/Suggestions/InstantCommands/GiphyCommandHandler.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/Suggestions/InstantCommands/GiphyCommandHandler.swift @@ -38,7 +38,7 @@ public struct GiphyCommandHandler: CommandHandler { } public func canHandleCommand(in text: String, caretLocation: Int) -> ComposerCommand? { - if text == id { + if text.hasPrefix(id) { return ComposerCommand( id: id, typingSuggestion: TypingSuggestion( diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/Suggestions/InstantCommands/TwoStepMentionCommand.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/Suggestions/InstantCommands/TwoStepMentionCommand.swift index a1bebbcb..b4675304 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/Suggestions/InstantCommands/TwoStepMentionCommand.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/Suggestions/InstantCommands/TwoStepMentionCommand.swift @@ -41,7 +41,7 @@ open class TwoStepMentionCommand: CommandHandler { } open func canHandleCommand(in text: String, caretLocation: Int) -> ComposerCommand? { - if text == id { + if text.hasPrefix(id) { return ComposerCommand( id: id, typingSuggestion: TypingSuggestion( From a0154f24edbf552bceffe84a01a709d49fd38cd3 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 6 Mar 2025 01:08:38 +0000 Subject: [PATCH 05/23] Add draft previews to channel list item and thread list item --- DemoAppSwiftUI/PinChannelHelpers.swift | 11 +++++++- .../ChatChannelList/ChatChannelListItem.swift | 19 ++++++++++++-- .../ChatThreadList/ChatThreadListItem.swift | 26 +++++++++++++++++-- .../StreamChatSwiftUI/Generated/L10n.swift | 4 +++ .../Resources/en.lproj/Localizable.strings | 2 ++ 5 files changed, 57 insertions(+), 5 deletions(-) diff --git a/DemoAppSwiftUI/PinChannelHelpers.swift b/DemoAppSwiftUI/PinChannelHelpers.swift index 2cb7ba94..495d1bf2 100644 --- a/DemoAppSwiftUI/PinChannelHelpers.swift +++ b/DemoAppSwiftUI/PinChannelHelpers.swift @@ -85,7 +85,16 @@ struct DemoAppChatChannelListItem: View { TypingIndicatorView() } } - SubtitleText(text: injectedChannelInfo?.subtitle ?? channel.subtitleText) + if let draftText = channel.draftMessageText { + HStack(spacing: 2) { + Text("Draft:") + .font(fonts.caption1).bold() + .foregroundColor(Color(colors.highlightedAccentBackground)) + SubtitleText(text: draftText) + } + } else { + SubtitleText(text: injectedChannelInfo?.subtitle ?? channel.subtitleText) + } Spacer() } .accessibilityIdentifier("subtitleView") diff --git a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift index 27ca4a9b..b1a95348 100644 --- a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift @@ -106,7 +106,16 @@ public struct ChatChannelListItem: View { TypingIndicatorView() } } - SubtitleText(text: injectedChannelInfo?.subtitle ?? channel.subtitleText) + if let draftText = channel.draftMessageText { + HStack { + Text("\(L10n.Message.Preview.draft):") + .font(fonts.caption1).bold() + .foregroundColor(Color(colors.highlightedAccentBackground)) + SubtitleText(text: draftText) + } + } else { + SubtitleText(text: injectedChannelInfo?.subtitle ?? channel.subtitleText) + } Spacer() } .accessibilityIdentifier("subtitleView") @@ -288,7 +297,13 @@ extension ChatChannel { let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter return messageFormatter.format(previewMessage) } - + + public var draftMessageText: String? { + guard let draftMessage = draftMessage else { return nil } + let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter + return messageFormatter.formatContent(for: ChatMessage(draftMessage)) + } + public var lastMessageText: String? { guard let latestMessage = latestMessages.first else { return nil } let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter diff --git a/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift b/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift index 60a0a071..52df9920 100644 --- a/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift @@ -24,7 +24,8 @@ public struct ChatThreadListItem: View { replyAuthorUrl: viewModel.latestReplyAuthorImageURL, replyAuthorIsOnline: viewModel.isLatestReplyAuthorOnline, replyMessageText: viewModel.latestReplyMessageText, - replyTimestampText: viewModel.latestReplyTimestampText + replyTimestampText: viewModel.latestReplyTimestampText, + draftText: viewModel.draftReplyText ) } } @@ -77,6 +78,13 @@ public struct ChatThreadListItemViewModel { ) } + /// The formatted draft reply text. + public var draftReplyText: String? { + guard let draftMessage = thread.parentMessage.draftReply else { return nil } + let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter + return messageFormatter.formatContent(for: ChatMessage(draftMessage)) + } + /// The number of unread replies. public var unreadRepliesCount: Int { let currentUserRead = thread.reads.first( @@ -126,6 +134,7 @@ struct ChatThreadListItemContentView: View { var replyAuthorIsOnline: Bool var replyMessageText: String var replyTimestampText: String + var draftText: String? var body: some View { VStack(alignment: .leading, spacing: 8) { @@ -175,11 +184,24 @@ struct ChatThreadListItemContentView: View { .foregroundColor(Color(colors.text)) .font(fonts.subheadlineBold) HStack { - SubtitleText(text: replyMessageText) + if let draftText { + HStack { + draftPrefixView + SubtitleText(text: draftText) + } + } else { + SubtitleText(text: replyMessageText) + } Spacer() SubtitleText(text: replyTimestampText) } } } } + + var draftPrefixView: some View { + Text("\(L10n.Message.Preview.draft):") + .font(fonts.caption1).bold() + .foregroundColor(Color(colors.highlightedAccentBackground)) + } } diff --git a/Sources/StreamChatSwiftUI/Generated/L10n.swift b/Sources/StreamChatSwiftUI/Generated/L10n.swift index 545b91c6..9baa3b94 100644 --- a/Sources/StreamChatSwiftUI/Generated/L10n.swift +++ b/Sources/StreamChatSwiftUI/Generated/L10n.swift @@ -502,6 +502,10 @@ internal enum L10n { internal static var resultsTitle: String { L10n.tr("Localizable", "message.polls.toolbar.results-title") } } } + internal enum Preview { + /// Draft + internal static var draft: String { L10n.tr("Localizable", "message.preview.draft") } + } internal enum Reactions { /// You internal static var currentUser: String { L10n.tr("Localizable", "message.reactions.currentUser") } diff --git a/Sources/StreamChatSwiftUI/Resources/en.lproj/Localizable.strings b/Sources/StreamChatSwiftUI/Resources/en.lproj/Localizable.strings index 3c1369c2..c967e774 100644 --- a/Sources/StreamChatSwiftUI/Resources/en.lproj/Localizable.strings +++ b/Sources/StreamChatSwiftUI/Resources/en.lproj/Localizable.strings @@ -176,6 +176,8 @@ "message.bounce.title" = "Message was bounced"; +"message.preview.draft" = "Draft"; + "current-selection" = "%d of %d"; "attachment.max-size-exceeded" = "Attachment size exceed the limit."; From d136a4ef77e1c84dacc887126d86c7f5db3766de Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 6 Mar 2025 12:30:03 +0000 Subject: [PATCH 06/23] Delete draft message when publishing message or erasing input --- .../Composer/MessageComposerViewModel.swift | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 4de23677..d16acba3 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -54,6 +54,7 @@ open class MessageComposerViewModel: ObservableObject { selectedRangeLocation = 0 suggestions = [String: Any]() mentionedUsers = Set() + deleteDraftMessage() } } } @@ -273,6 +274,9 @@ open class MessageComposerViewModel: ObservableObject { isSilent: Bool = false, extraData: [String: RawJSON] = [:] ) { + guard sendButtonEnabled else { + return + } let attachments = try? inputAttachmentsAsPayloads() let mentionedUserIds = mentionedUsers.map(\.id) let availableCommands = channelController.channel?.config.commands ?? [] @@ -303,6 +307,18 @@ open class MessageComposerViewModel: ObservableObject { ) } + private func deleteDraftMessage() { + guard draftMessage != nil else { + return + } + + if let messageController = messageController { + messageController.deleteDraftReply() + } else { + channelController.deleteDraftMessage() + } + } + public func sendMessage( quotedMessage: ChatMessage?, editedMessage: ChatMessage?, @@ -377,7 +393,9 @@ open class MessageComposerViewModel: ObservableObject { } } } - + + deleteDraftMessage() + clearInputData() } catch { errorShown = true From dc51245b42dd38f95a133f25efcc62de84376d37 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 6 Mar 2025 13:00:48 +0000 Subject: [PATCH 07/23] Add draftMessagesEnabled flag --- DemoAppSwiftUI/AppDelegate.swift | 3 ++- .../ChatChannel/Composer/MessageComposerViewModel.swift | 2 +- .../ChatChannel/MessageList/MessageListConfig.swift | 9 ++++++++- .../ChatChannelList/ChatChannelListItem.swift | 2 +- .../ChatThreadList/ChatThreadListItem.swift | 1 + 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/DemoAppSwiftUI/AppDelegate.swift b/DemoAppSwiftUI/AppDelegate.swift index 93975c3b..bf416b83 100644 --- a/DemoAppSwiftUI/AppDelegate.swift +++ b/DemoAppSwiftUI/AppDelegate.swift @@ -69,7 +69,8 @@ class AppDelegate: NSObject, UIApplicationDelegate { bouncedMessagesAlertActionsEnabled: true, skipEditedMessageLabel: { message in message.extraData["ai_generated"]?.boolValue == true - } + }, + draftMessagesEnabled: true ), composerConfig: ComposerConfig(isVoiceRecordingEnabled: true) ) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index d16acba3..2cba42ea 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -274,7 +274,7 @@ open class MessageComposerViewModel: ObservableObject { isSilent: Bool = false, extraData: [String: RawJSON] = [:] ) { - guard sendButtonEnabled else { + guard utils.messageListConfig.draftMessagesEnabled && sendButtonEnabled else { return } let attachments = try? inputAttachmentsAsPayloads() diff --git a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageListConfig.swift b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageListConfig.swift index ce19ad88..118fd314 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageListConfig.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageListConfig.swift @@ -33,7 +33,8 @@ public struct MessageListConfig { markdownSupportEnabled: Bool = true, userBlockingEnabled: Bool = false, bouncedMessagesAlertActionsEnabled: Bool = true, - skipEditedMessageLabel: @escaping (ChatMessage) -> Bool = { _ in false } + skipEditedMessageLabel: @escaping (ChatMessage) -> Bool = { _ in false }, + draftMessagesEnabled: Bool = false ) { self.messageListType = messageListType self.typingIndicatorPlacement = typingIndicatorPlacement @@ -60,6 +61,7 @@ public struct MessageListConfig { self.userBlockingEnabled = userBlockingEnabled self.bouncedMessagesAlertActionsEnabled = bouncedMessagesAlertActionsEnabled self.skipEditedMessageLabel = skipEditedMessageLabel + self.draftMessagesEnabled = draftMessagesEnabled } public let messageListType: MessageListType @@ -92,6 +94,11 @@ public struct MessageListConfig { public let bouncedMessagesAlertActionsEnabled: Bool public let skipEditedMessageLabel: (ChatMessage) -> Bool + + /// A boolean value indicating if draft messages should be enabled. + /// + /// If enabled, the SDK will save the message content as a draft when the user navigates away from the composer. + public let draftMessagesEnabled: Bool } /// Contains information about the message paddings. diff --git a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift index b1a95348..8d388654 100644 --- a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift @@ -106,7 +106,7 @@ public struct ChatChannelListItem: View { TypingIndicatorView() } } - if let draftText = channel.draftMessageText { + if utils.messageListConfig.draftMessagesEnabled, let draftText = channel.draftMessageText { HStack { Text("\(L10n.Message.Preview.draft):") .font(fonts.caption1).bold() diff --git a/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift b/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift index 52df9920..3b895703 100644 --- a/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift @@ -80,6 +80,7 @@ public struct ChatThreadListItemViewModel { /// The formatted draft reply text. public var draftReplyText: String? { + guard utils.messageListConfig.draftMessagesEnabled else { return nil } guard let draftMessage = thread.parentMessage.draftReply else { return nil } let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter return messageFormatter.formatContent(for: ChatMessage(draftMessage)) From 978994128628d4559ee8e2a034dffbb80f923c87 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 6 Mar 2025 13:31:03 +0000 Subject: [PATCH 08/23] Update composer draft message when draft is updated from event --- .../Composer/MessageComposerViewModel.swift | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 2cba42ea..e5d06463 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -160,9 +160,10 @@ open class MessageComposerViewModel: ObservableObject { } @Published public var audioRecordingInfo = AudioRecordingInfo.initial - + public let channelController: ChatChannelController public var messageController: ChatMessageController? + public let eventsController: EventsController public var quotedMessage: Binding? public var waveformTargetSamples: Int = 100 public internal(set) var pendingAudioRecording: AddedVoiceRecording? @@ -219,10 +220,12 @@ open class MessageComposerViewModel: ObservableObject { public init( channelController: ChatChannelController, messageController: ChatMessageController?, + eventsController: EventsController? = nil, quotedMessage: Binding? = nil ) { self.channelController = channelController self.messageController = messageController + self.eventsController = eventsController ?? channelController.client.eventsController() self.quotedMessage = quotedMessage if let messageController { @@ -231,6 +234,8 @@ open class MessageComposerViewModel: ObservableObject { draftMessage = channelController.channel?.draftMessage } + self.eventsController.delegate = self + listenToCooldownUpdates() NotificationCenter.default.addObserver( @@ -828,3 +833,15 @@ open class MessageComposerViewModel: ObservableObject { } } } + +extension MessageComposerViewModel: EventsControllerDelegate { + public func eventsController(_ controller: EventsController, didReceiveEvent event: any Event) { + if let event = event as? DraftUpdatedEvent, event.cid == channelController.cid { + if let messageController = messageController, messageController.messageId == event.draftMessage.threadId { + draftMessage = event.draftMessage + return + } + draftMessage = event.draftMessage + } + } +} From 4829f77117743b3cf190ec6ad229296e9915b43c Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 6 Mar 2025 15:23:03 +0000 Subject: [PATCH 09/23] Fix forgotten env object from channel view model --- Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift index 9461dd9a..4a5de0ac 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelView.swift @@ -117,7 +117,6 @@ public struct ChatChannelView: View, KeyboardReadable { editedMessage: $viewModel.editedMessage, onMessageSent: viewModel.scrollToLastMessage ) - .environmentObject(viewModel) .opacity(( utils.messageListConfig.messagePopoverEnabled && messageDisplayInfo != nil && !viewModel .reactionsShown && viewModel.channel?.isFrozen == false From ce87d7e255e5534fd6cf1550e74fd692a7f4db5f Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 6 Mar 2025 23:13:35 +0000 Subject: [PATCH 10/23] Remove unnecessary deleteDraftMessage call since publishing a message will clear the text, which will delete the draft --- .../ChatChannel/Composer/MessageComposerViewModel.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index e5d06463..486837e2 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -399,8 +399,6 @@ open class MessageComposerViewModel: ObservableObject { } } - deleteDraftMessage() - clearInputData() } catch { errorShown = true From f57903a26f8954533cd7c6e0de50834a1ca7e12d Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 6 Mar 2025 23:13:56 +0000 Subject: [PATCH 11/23] Simplify the composer view model draft update event logic --- .../ChatChannel/Composer/MessageComposerViewModel.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 486837e2..0e831168 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -834,12 +834,12 @@ open class MessageComposerViewModel: ObservableObject { extension MessageComposerViewModel: EventsControllerDelegate { public func eventsController(_ controller: EventsController, didReceiveEvent event: any Event) { - if let event = event as? DraftUpdatedEvent, event.cid == channelController.cid { - if let messageController = messageController, messageController.messageId == event.draftMessage.threadId { + if let event = event as? DraftUpdatedEvent { + let isFromSameThread = messageController?.messageId == event.draftMessage.threadId + let isFromSameChannel = channelController.cid == event.cid && messageController == nil + if isFromSameThread || isFromSameChannel { draftMessage = event.draftMessage - return } - draftMessage = event.draftMessage } } } From 47c0a027836ab985d4f0bdecbdb4e41075176e72 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 6 Mar 2025 23:26:03 +0000 Subject: [PATCH 12/23] Add Message Composer View Model Tests --- .../Mocks/ChatMessageControllerSUI_Mock.swift | 26 ++- .../ChatChannelDataSource_Tests.swift | 13 ++ .../MessageComposerViewModel_Tests.swift | 210 +++++++++++++++++- 3 files changed, 247 insertions(+), 2 deletions(-) diff --git a/StreamChatSwiftUITests/Infrastructure/Mocks/ChatMessageControllerSUI_Mock.swift b/StreamChatSwiftUITests/Infrastructure/Mocks/ChatMessageControllerSUI_Mock.swift index ed1f430c..67abb741 100644 --- a/StreamChatSwiftUITests/Infrastructure/Mocks/ChatMessageControllerSUI_Mock.swift +++ b/StreamChatSwiftUITests/Infrastructure/Mocks/ChatMessageControllerSUI_Mock.swift @@ -13,7 +13,7 @@ public class ChatMessageControllerSUI_Mock: ChatMessageController { currentUserId: UserId = "ID", cid: ChannelId? = nil, messageId: String = "MockMessage" - ) -> ChatMessageController_Mock { + ) -> ChatMessageControllerSUI_Mock { if let authenticationRepository = chatClient.authenticationRepository as? AuthenticationRepository_Mock { authenticationRepository.mockedCurrentUserId = currentUserId } @@ -59,6 +59,30 @@ public class ChatMessageControllerSUI_Mock: ChatMessageController { override public func synchronize(_ completion: ((Error?) -> Void)? = nil) { synchronize_callCount += 1 } + + var updateDraftReply_callCount = 0 + var updateDraftReply_text: String? + + override public func updateDraftReply( + text: String, + isSilent: Bool = false, + attachments: [AnyAttachmentPayload] = [], + mentionedUserIds: [UserId] = [], + quotedMessageId: MessageId? = nil, + showReplyInChannel: Bool = false, + command: Command? = nil, + extraData: [String: RawJSON] = [:], + completion: ((Result) -> Void)? = nil + ) { + updateDraftReply_callCount += 1 + updateDraftReply_text = text + } + + var deleteDraftReply_callCount = 0 + + override public func deleteDraftReply(completion: (((any Error)?) -> Void)? = nil) { + deleteDraftReply_callCount += 1 + } } public extension ChatMessageControllerSUI_Mock { diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelDataSource_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelDataSource_Tests.swift index 685d08e8..37e4da92 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelDataSource_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelDataSource_Tests.swift @@ -210,6 +210,19 @@ class ChatChannelDataSource_Tests: StreamChatTestCase { return threadDataSource } + private func makeMessageThreadDataSource( + messages: [ChatMessage], + messageController: ChatMessageControllerSUI_Mock + ) -> MessageThreadDataSource { + let channelController = makeChannelController(messages: messages) + let threadDataSource = MessageThreadDataSource( + channelController: channelController, + messageController: messageController + ) + + return threadDataSource + } + private func makeChannelController(messages: [ChatMessage]) -> ChatChannelController_Mock { let channelController = ChatChannelTestHelpers.makeChannelController( chatClient: chatClient, diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift index c8a27d51..1085ada8 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift @@ -5,6 +5,7 @@ @testable import StreamChat @testable import StreamChatSwiftUI @testable import StreamChatTestTools +import SwiftUI import XCTest class MessageComposerViewModel_Tests: StreamChatTestCase { @@ -692,8 +693,215 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { XCTAssert(viewModel.audioRecordingInfo == .initial) } - // MARK: - private + // MARK: - Draft Message Tests + + func test_messageComposerVM_updateDraftMessage() { + // Given + let channelController = makeChannelController() + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: nil + ) + let quotedMessage = ChatMessage.mock(id: .unique, cid: .unique, text: "Quoted message", author: .mock(id: .unique)) + + // When + viewModel.text = "Draft text" + viewModel.updateDraftMessage(quotedMessage: quotedMessage) + + // Then + XCTAssertEqual(channelController.updateDraftMessage_text, "Draft text") + XCTAssertEqual(channelController.updateDraftMessage_callCount, 1) + } + + func test_messageComposerVM_updateDraftReply() { + // Given + let channelController = makeChannelController() + let messageController = ChatMessageControllerSUI_Mock.mock( + chatClient: chatClient, + cid: .unique, + messageId: .unique + ) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: messageController + ) + let quotedMessage = ChatMessage.mock(id: .unique, cid: .unique, text: "Quoted message", author: .mock(id: .unique)) + + // When + viewModel.text = "Draft reply" + viewModel.updateDraftMessage(quotedMessage: quotedMessage) + + // Then + XCTAssertEqual(messageController.updateDraftReply_text, "Draft reply") + XCTAssertEqual(messageController.updateDraftReply_callCount, 1) + } + + func test_messageComposerVM_whenTextErased_shouldDeleteDraftMessage() { + // Given + let channelController = makeChannelController() + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: nil + ) + let draftMessage = DraftMessage.mock(text: "text") + + // When + viewModel.draftMessage = draftMessage + viewModel.text = "" + + // Then + XCTAssertEqual(channelController.deleteDraftMessage_callCount, 1) + } + + func test_messageComposerVM_whenTextErased_deleteDraftReply() { + // Given + let channelController = makeChannelController() + let messageController = ChatMessageControllerSUI_Mock.mock( + chatClient: chatClient, + cid: .unique, + messageId: .unique + ) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: messageController + ) + let draftMessage = DraftMessage.mock(text: "reply") + + // When + viewModel.draftMessage = draftMessage + viewModel.text = "" + + // Then + XCTAssertEqual(messageController.deleteDraftReply_callCount, 1) + } + + func test_messageComposerVM_whenMessagePublished_deleteDraftMessage() { + // Given + let channelController = makeChannelController() + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: nil + ) + let draftMessage = DraftMessage.mock(text: "text") + + // When + viewModel.draftMessage = draftMessage + viewModel.sendMessage(quotedMessage: nil, editedMessage: nil) {} + + // Then + // Sending a message will clear the input, deleting the draft message. + XCTAssertEqual(channelController.deleteDraftMessage_callCount, 1) + } + + func test_messageComposerVM_whenMessagePublished_deleteDraftReply() { + // Given + let channelController = makeChannelController() + let messageController = ChatMessageControllerSUI_Mock.mock( + chatClient: chatClient, + cid: .unique, + messageId: .unique + ) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: messageController + ) + let draftMessage = DraftMessage.mock(text: "reply") + + // When + viewModel.draftMessage = draftMessage + viewModel.sendMessage(quotedMessage: nil, editedMessage: nil) {} + + // Then + XCTAssertEqual(messageController.deleteDraftReply_callCount, 1) + } + + func test_messageComposerVM_draftMessageUpdatedEvent() throws { + // Given + let channelController = makeChannelController() + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: nil + ) + viewModel.draftMessage = .mock(text: "Draft") + + // When + let draftMessage = DraftMessage.mock(text: "Draft from event") + let cid = try XCTUnwrap(channelController.cid) + let event = DraftUpdatedEvent(cid: cid, channel: .mock(cid: cid), draftMessage: draftMessage, createdAt: .unique) + viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) + + // Then + XCTAssertEqual(viewModel.draftMessage?.text, "Draft from event") + } + func test_messageComposerVM_draftReplyUpdatedEvent() throws { + // Given + let channelController = makeChannelController() + let messageController = ChatMessageControllerSUI_Mock.mock( + chatClient: chatClient, + cid: channelController.cid!, + messageId: .unique + ) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: messageController + ) + viewModel.draftMessage = .mock(text: "Draft") + + // When + let draftMessage = DraftMessage.mock( + threadId: messageController.messageId, + text: "Draft reply from event" + ) + let cid = try XCTUnwrap(channelController.cid) + let event = DraftUpdatedEvent(cid: cid, channel: .mock(cid: cid), draftMessage: draftMessage, createdAt: .unique) + viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) + + // Then + XCTAssertEqual(viewModel.draftMessage?.text, "Draft reply from event") + } + + func test_messageComposerVM_draftReplyUpdatedEventFromOtherThread_shouldNotUpdate() throws { + // Given + let channelController = makeChannelController() + let messageController = ChatMessageControllerSUI_Mock.mock( + chatClient: chatClient, + cid: channelController.cid!, + messageId: .unique + ) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: messageController + ) + viewModel.draftMessage = .mock(text: "Draft") + + // When + let draftMessage = DraftMessage.mock( + threadId: .unique, + text: "Draft reply from event" + ) + let cid = try XCTUnwrap(channelController.cid) + let event = DraftUpdatedEvent(cid: cid, channel: .mock(cid: cid), draftMessage: draftMessage, createdAt: .unique) + viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) + + // Then + XCTAssertEqual(viewModel.draftMessage?.text, "Draft") + } + + // MARK: - private + + private func makeComposerDraftsViewModel( + channelController: ChatChannelController, + messageController: ChatMessageController? + ) -> MessageComposerViewModel { + let viewModel = MessageComposerViewModel( + channelController: channelController, + messageController: messageController + ) + viewModel.utils = .init(messageListConfig: .init(draftMessagesEnabled: true)) + return viewModel + } + private func makeComposerViewModel() -> MessageComposerViewModel { MessageComposerTestUtils.makeComposerViewModel(chatClient: chatClient) } From 23f57c50ffb7d1af4bc4d2aa4983899b95832799 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 7 Mar 2025 01:21:52 +0000 Subject: [PATCH 13/23] Add composer view test coverage --- .../MessageComposerView_Tests.swift | 152 +++++++++++++++++- ...serView_draftWithCommand.default-light.png | Bin 0 -> 7916 bytes ..._draftWithFileAttachment.default-light.png | Bin 0 -> 11816 bytes ...draftWithImageAttachment.default-light.png | Bin 0 -> 60184 bytes ...draftWithVideoAttachment.default-light.png | Bin 0 -> 34434 bytes ...VoiceRecordingAttachment.default-light.png | Bin 0 -> 15241 bytes 6 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithCommand.default-light.png create mode 100644 StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithFileAttachment.default-light.png create mode 100644 StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithImageAttachment.default-light.png create mode 100644 StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithVideoAttachment.default-light.png create mode 100644 StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithVoiceRecordingAttachment.default-light.png diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift index 3d14cbb4..6cdc882c 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift @@ -16,7 +16,10 @@ class MessageComposerView_Tests: StreamChatTestCase { override func setUp() { super.setUp() let utils = Utils( - messageListConfig: MessageListConfig(becomesFirstResponderOnOpen: true), + messageListConfig: MessageListConfig( + becomesFirstResponderOnOpen: true, + draftMessagesEnabled: true + ), composerConfig: ComposerConfig(isVoiceRecordingEnabled: true) ) streamChat = StreamChat(chatClient: chatClient, utils: utils) @@ -439,4 +442,151 @@ class MessageComposerView_Tests: StreamChatTestCase { streamChat?.appearance.colors.staticColorText = .black AssertSnapshot(view, variants: .onlyUserInterfaceStyles, size: size, suffix: "themed") } + + // MARK: - Drafts + + // Note: For some reason the text is not rendered in the composer, + // Maybe it's because of the `UITextView` that is used in the `InputTextView`. + // Either way, the test of the content is covered. + + func test_composerView_draftWithImageAttachment() throws { + let size = CGSize(width: defaultScreenSize.width, height: 200) + let mockDraftMessage = DraftMessage.mock( + attachments: [ + .dummy( + type: .image, + payload: try JSONEncoder().encode( + ImageAttachmentPayload( + title: nil, + imageRemoteURL: TestImages.yoda.url, + file: .init(type: .jpeg, size: 10, mimeType: nil) + ) + ) + ), + .dummy( + type: .image, + payload: try JSONEncoder().encode( + ImageAttachmentPayload( + title: nil, + imageRemoteURL: TestImages.chewbacca.url, + file: .init(type: .jpeg, size: 10, mimeType: nil) + ) + ) + ) + ] + ) + + let view = makeComposerView(with: mockDraftMessage) + .frame(width: size.width, height: size.height) + + AssertSnapshot(view, variants: [.defaultLight], size: size) + } + + func test_composerView_draftWithVideoAttachment() throws { + let size = CGSize(width: defaultScreenSize.width, height: 200) + let mockDraftMessage = DraftMessage.mock( + attachments: [ + .dummy( + type: .video, + payload: try JSONEncoder().encode( + VideoAttachmentPayload( + title: nil, + videoRemoteURL: TestImages.yoda.url, + thumbnailURL: TestImages.yoda.url, + file: .init(type: .mov, size: 10, mimeType: nil), + extraData: nil + ) + ) + ) + ] + ) + + let view = makeComposerView(with: mockDraftMessage) + .frame(width: size.width, height: size.height) + + AssertSnapshot(view, variants: [.defaultLight], size: size) + } + + func test_composerView_draftWithFileAttachment() throws { + let size = CGSize(width: defaultScreenSize.width, height: 200) + let mockDraftMessage = DraftMessage.mock( + attachments: [ + .dummy( + type: .file, + payload: try JSONEncoder().encode( + FileAttachmentPayload( + title: "Test", + assetRemoteURL: .localYodaQuote, + file: .init(type: .txt, size: 10, mimeType: nil), + extraData: nil + ) + ) + ) + ] + ) + let view = makeComposerView(with: mockDraftMessage) + .frame(width: size.width, height: size.height) + + AssertSnapshot(view, variants: [.defaultLight], size: size) + } + + func test_composerView_draftWithVoiceRecordingAttachment() throws { + let url: URL = URL(fileURLWithPath: "/tmp/\(UUID().uuidString)") + let duration: TimeInterval = 100 + let waveformData: [Float] = .init(repeating: 0.5, count: 10) + try Data(count: 1024).write(to: url) + defer { try? FileManager.default.removeItem(at: url) } + + let size = CGSize(width: defaultScreenSize.width, height: 200) + let mockDraftMessage = DraftMessage.mock( + attachments: [ + .dummy( + type: .voiceRecording, + payload: try JSONEncoder().encode( + VoiceRecordingAttachmentPayload( + title: "Audio", + voiceRecordingRemoteURL: url, + file: .init(type: .aac, size: 120, mimeType: "audio/aac"), + duration: duration, + waveformData: waveformData, + extraData: nil + ) + ) + ) + ] + ) + let view = makeComposerView(with: mockDraftMessage) + .frame(width: size.width, height: size.height) + + AssertSnapshot(view, variants: [.defaultLight], size: size) + } + + func test_composerView_draftWithCommand() throws { + let size = CGSize(width: defaultScreenSize.width, height: 100) + let mockDraftMessage = DraftMessage.mock( + text: "/giphy test" + ) + + let view = makeComposerView(with: mockDraftMessage) + .frame(width: size.width, height: size.height) + + AssertSnapshot(view, variants: [.defaultLight], size: size) + } + + private func makeComposerView(with draftMessage: DraftMessage) -> some View { + let factory = DefaultViewFactory.shared + let channelController = ChatChannelTestHelpers.makeChannelController(chatClient: chatClient) + let viewModel = MessageComposerViewModel(channelController: channelController, messageController: nil) + viewModel.fillDraftMessage(draftMessage) + + var quotedMessage: ChatMessage? + return MessageComposerView( + viewFactory: factory, + viewModel: viewModel, + channelController: channelController, + quotedMessage: .init(get: { quotedMessage }, set: { quotedMessage = $0 }), + editedMessage: .constant(nil), + onMessageSent: {} + ) + } } diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithCommand.default-light.png b/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithCommand.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..0078f32a26aff63202836916333817e1b4c51f1d GIT binary patch literal 7916 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 literal 0 HcmV?d00001 diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithFileAttachment.default-light.png b/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithFileAttachment.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..bd8fdb57f579c693116c7b7023348fccdf63bf59 GIT binary patch literal 11816 zcmeHtcUTkA*JeV1(5n>bhzLmU9U>@IdM8woCSd5rP=bJ<(v&VO2#89R-diXF0-^Wb zd+%+dzi)S+-RJvr|J=!Q=bV{y?mOq+J7;p|z4KmMQ<<26jsO4v5UZ*@)dc{64jBD6 z9xi6z9u1Gd2%v|qvI3x}k6{CI5Nd0zYNw$Ac#P5U060Jj0O+p^<_7@M0dW550Du~h z{(tGZK+ga2!2$rn9Rb+?W9O!PNdQ2|@z@HzE@2e|iHQkf8sm1AhOlM#;cz zixK#)DkdHP03qey0t9?Xqs5$LaD1wzkCB)Q{@Y$+_MDjVS7HjS=CiLt@)${{`t*su zFK{~@9DC28s#6fUYPOoDcJImOj?imIn9stx}{Quzp54$Be z0(fj0bi*D_nxv|85ZKi-$5G>l^EnP$V>QL|eM#ZIHu&uj&_;gN8%MHr)e2tnBv64n zxCHn36Pt2Q$@izh5|)RA1i3HofLz?%l<^)}MBhOiN?$4G>g1B!Kwb2oU+;)f17A59pCCF4$%`6ACVz{V zMmz1$8A0g8dbO-5Tr0p)U12s+l1BRaDvpjn)NZ&&Kj@^;rx$zVWN{{_yGmyL$;z#N zU;uVMdYs8BP#IhV}#Y+E?fZtpakr*-yN%aVOhKgL%?e zYvyq&`BMs4b|m>6!7#FCq;QZa;T_HPh%|bs%=~3Y*wR*z|Iy*$%Z1jk!=0+RZl~gg zN6h~F!I4a|rk~^D47^7c9(xnehw`>s6X+L}cm-~=&r3nrlm}%{dm_KJ@ysgl?eCOU zA1aUP1xUSd$Kh))?@B7!`_=Jp2TNftMcN-*Jf3r zD-^YxIQ@5x*3lFiMkRz&pRlg$AH)@uZI|jfXWQH_V`UW`@MA9)ZfKKfGz30dOZuj6)Ka8R|%R;!iOQ4+pgCq$Z1^4IfHqQ!ZjTn<}zS-Cs=o{7s8p$}SN#unt|H#WY^z8w_@-)-21sz|$mN`Z%9$u_v zI%)ZJ$8#Mn$7#Kpd|=4P$XJLl^Sb?=S@^~6-M?|=7ied}%vI9)s2)zS#;G{=4|zcu_LTQ4^{mp}Q3mYUjUm#Iod+t6SJ8X7SGi>&O7 z_coR!$rOXUuU4v<#urhiReba0ZDI)BQstYIS35b+zlf-sRyuD43o9@pE}*am_KOPx z6kUnIctMjJ8!`ZOKNk}TV0>=b>bnA6BQoRDr>rCStbzrABY;i`7s78*KVJOlT$p9} z36s~>Xu^=Dw1(L0Y1(7VlY{vr>1sErdg~WG#x`HctciWm z?Ck7sw#g?;I*=N5hJ~i8nwpwaGl)XEysq78BDYX-WcmxVZ#H$ajre$DGu=-i0G(fE zo%hb?@^TR_o`UOs(YnTSZe?0rQebo0@u`4oDxMa$;FB#uS54oN>Xq_DXq8U*?fvW$ zkjQ3~awIzHgm!ky;Uhkh9#*e|3LN=G-?tr-TfY+yD;I9nCO$`VOGeyq0l5$bSl z*Ky>8+d6CGbR*}rsb6z83zuaQX(p5ix>!jv&8vJp^Rtt#q~qxW&z@!mrsGstqhCCj zm@&B5w125V1ENfZOb0MMroEDi28uL$7sTS$Bj?A=ebO7fMAQh4m);lV7uBlCb0Q8! zokrK8-5!0C%8I*-ANdn~<^qh!+y$?I5zGO{pUk``Y~4HV+pnWLwkOI?c=M~kQD8DF z?frK;J{!47YN=u_&ioP*ea~pjb7ZZ`p{TwGjS z{+9ZBu!+2jpApf~SXPEPM?A9{iMPiXVQ&mpuSdslQN0DN*)830$A*6Ea2c>gCcLC=^$?ne$BqiU5@mePG@2dp}NS@1=yKZ@1|#&>XiUyI8<=OS0PhC{~F? zq@&|YJ2^c)H!7TTY#z7dm*?)Z30e3%rsfc(`;W-7Y)114dXuFlc!stg5TFe>SR*Nt zy}ny*Z%ND|Divy_7NSkc>>M3L9S7SeEAI>2Me?C2P0uxO>-Up;VNW9fOoUeWFxpsb z*9A#7CsaAT(8~ziJSw!)SP>QN%;m|J>`o$&$=4X1m{~r5Y*gJ&<&>xN^V1X$E7`zn zU-M}EM`@I6A!E+6)R7D;{7u*H2?2$j3*NnobPI$ze^SErk(7Xv86N1eNx}|x ziQXeHkWmM5nz_14SdhhuT4vK7p`f7f+@^LFQ};qKMhLRq1C%_dB!b*8reh*N;;mF+ zjY5d3zHr`cm-V+1ywQsheKGOqwX=+a9%(;A*=aRPbG0i^8e!8=`L7~!<;Igys8<~( zxeXjcO8#I{Cu>Vn_C&wtbkgbMZ9oR(8qE^iSV*NG`@-L8a z?5Z^JY1fdVxpGH6suE%b3GJk&o6{*F?``9TsFHUh0su`~x@Z_6itvfY$=B34Ejg1u znWN{7mDT&LgkJQ|@eIIdiM8$oZdt)s$6b@8&Xnj~tY2s6#!ZTySxIMtf#?as?GY!M*i=X!@`LJKY#%jO~Y6GoQZ^aN`I!#$Vh-+_tyJZt@# z#ZTTFNquE3<#^7CYV+y6-I=TyayigXde4nYE?85#E2>$gn<23#+9nLaDj|nO$Ha`$ zyj|%@+A4*}I@J5L9D|&EHTS>9D*4R%t!>a=exTz1S$pJk_ ze$FR4`~YAi`6?jo7jb(1UgK3c32Pau&qHiU6*2`H|Iy*)hpzteCHSPmo6cE!Z!8{E z+QJ85KXsGB)$K+188z*6mypU(z0_rCx)wQR8r;1V*So?S5dOlLLG$I#hg(s#_(kd$sm`e)MWJRi_ye+t%g z<2^&NVazG~@gQ38Q$(^vU-(?;#{@@^jj|*W{h`Q;*&Um*csEvx0wss$a9msR`m-+& z9|e3mApc%;1ur3LN?|IO{e~hzYXZc{Dxhp@;=;nh>o`{vj6?DCv0x_$-??BQ7vPnK z0ahfeW`)|El(YtO`$=KHJ>_pa|Jtb%sT}1VDoRHGl!ta+`M!J7Kyi%xt#MEjW_pB^ zg$Ee&odA^7{HCRaqNpU8qrF;iXz+wYV?7#dI!Sg!vxy`ZCBO>24&nD?mIju%M9loP zNwgZYGUYsErK9#-!Gq)bkJDsuBg{?lG0)a*ISf$rIMSJ8r_q~JLL8vltv)SK1z0|8h=w|0Q0(vk2*c6AVK?%V{2hw zLdl@dIzkyEcDh4wL|Q=+Y)6Ti0@3$quPzy}%ViPiuU;`CcjhDF7?BNGblrP@li$&mxP6ZmxdYtR zSA^s%CoAGO{$Jks4p?7m#wwOSZGFL#2fC12<he)dE>P6Uo8K6o!Je+H(6u;>J``fIWG41 z`0hFNkrrGi+~MFRFT{Tu)CQDVxP7Oqr#=WGX0I7x(>0vGi*ea#Pxs}I7AlrZp+sxa zRu+>=L!@uA)mj@)*w=G6X2h<(yHC|-_s0zvG(N0yW)eYu{HXp=T3Y$^?k0w7R)C9h zoFfHZmZRU0KT+4`&(Af%KjqVw-^46+d6MyscuW-hW0D7coBiSMm^>gw_tL2-#Hzpe zX!rRXlC7qa8bGy9$?W{#eQ&BEulR}FsOp($>@tTbHqrWrLxPkh*B{3p=r|j$I@J2* zKrb)4MVauH0=kb@`4gEMY;ug|f+4O_Ai-ExuqhCqe&zr4fabe4tRqni5(!u!1MW9iLUF*yT?z6Vodl?*n{=~Twml2 zD8396;$brJ&B$iO;7%v!M1y^C;N5Xzp>&RU_}<8w8Xj!6)LhDYhZQb#wizUqB5U7> z>*u&JkRbxNvFUd>5xUFX`qOi=6X~>58#QQdj_p4pjk!^n6Umni8CfusV)59)5|F3n z>tL-|+AzEhcr?t|NT})3@lhL?L?eK+7j_)ZE*B40*m$M`k{(*bWcWt4`YxPC? znGL)RD_{dRyTRa~uuK!!b!WIRX!a$N(d;Wg38C0cRZsLP%4At)tC z>#EbWojUd1D6ndDJ#fEibPUxt>?}Om23J3*e{1x!?GplZyUw)Bxx!q98yf3pff+gFfrf|5Bni3+l}X3rAmEeQT11ANM>G+GjKZ7a_n$_b z9815*i^>m(Xer38+_dm)*vbDH{wKW&VBf`|Yjj z8=6uL-bUHxD7O+UA&R|J5O{@;^SUTzj;HPiYW`mDvR((1t0UntIKVip2Y#7~;lu z=^O80mYxrl{Opf2EtThqd-@XA_Wqv_5rix9ao-4K)`gg3;_|p4K@*i_k*NZz@Y;>X z%L5vIOHI8d^BaVRIpks+;`1DmzU#4h{;7{)a|g<*nyMoc59vo9vMm0I5MTQl$SNcB z;<#U`^UcjWjmdl^&fJm`mB3rC4@3rWDWh}kE^jB+0nQ^_*h+tA&2IF&{09vpZ03Xd z*Agq(ic&i5WqN|YBm&f$OIj7#JyvE|^lyFC_^qN`IY!5Zm7+g0EWJ zt9(eTT2r6FLm#=;a}C)U36i80esVBBzfM!8u*(O4<3I7!Q-t(g?fJ=g3&OQSG|}D=yYLU?3+C?dHfJq zOy@T;>vjH`*fM!9oF}8wi#ZKt)K^hKTop1FrV^JDSGahFNorgNU$@@^5hAv78BO-> z-4deYwA@YomI^gooD5nfN8<^HVHncpB{z`K8u1SJa_zivB+u>q9qH^^u!Q)^5>zf; zeSPI~I%RSrIhq`A9rXD1Cag3Tm*!1K_H(Wwh!>#JZ+>2$a^Uuq4Ko3_xx*|J+}%Mu zoVfvjdwYLZ33k#a;tWOtJAZU5GJUS)|M4)PTb)U-=1xI3;peiP?VB!}pO=ruq;uS1 zuRlY*PCg+1gy7+Q{rUhe0`CLMS1b}FA`(l8Q|LYVxDD+oE=IiAeOa*TGk)btV!t87Ztm@;VBtG7|=$e*60 zS0jkfc#*nNM3dRMS`lw(WwtTYE1e2PSHb4I8O>#*UEK1vi~$3*4%f8J)coZ>tEH;I zS{WFW4oy3cM)Qu%4kS21e!J4cst5g#ok-I7EjB%?Ue9!|2;if$Y0Wni4J}-%g z@e{L|6Qg!*TIuS07X?;$p$MiGgdJr6_|fjj*jOeUvCOEg#^3BnG))g0XQ(uC`L2Ut z0wKgg?pM2^ye>KXg6^q>j46P?mv5pN(ksu3%5H0FQ6=&UP zJH8n+Fu;se4&a519oT$=NJ>E_3IgvTaU6iAh*8=IPa-@tR(Yhb?viuj*f;m3gUf#w zYNROc14hu_dP|YR5-VLDOI>35{MdhM{a?1!m5LwJzA`@lEI1BP!77~y%+-1%*hDq` zN)LQXdp8OH8(W{9pUY!$rhan_-rq~wunhi-Tc}SZN-x7%Cd0YxQsKX`m6=$ic1Lx3 z(EK+|i07b>;g~9DB>O*XHnix5hKAk2T=k-|vZ0xJzp@1-wG=Q3gDVZ6nS<{{?_q>~ zQT?Kf4Ftgyf@pMK`2el+E=-m3`U&6u)j6G`8aJ({CA&hxBr~q9eR^^dR$ApUHHvmW zqKz0N_}%OmYspJG&sy&tQ&n?b{z--VhDMu;Q)(k0 zFYi^291c{9GL!skRE8`Z3)ysgxpjpMcJuM_%8g`>U2?-Pth@#JM#bK;va(@tqe9b_ z**9CfRZe4k;y%06v38infZgAp*uq4bfxpQNSu-)@QFW5Vo33=+Lv+{t=ZL@q~;Kvv75yZNI6(=)FCz!wIhb zI`$TaP~m>)7vGQtIAW!RddJV|>-|Xz0)?@Qqcv~|baE(9tBzegG1N1Mz4-L>RNo@e zaB38*0wCJ~AjW>AmBCPNOH`NU6V6I`o4mX<a*JLAkr%@i|^_AtWxP?Z1 z%17}H;reDLHVPvF50_4Y4ICrKEyx{l9aM{pCGl!O%nhwRE4i)H%ZD zy?WnZXxELw+$Tnx>XOYFr&EfbuLoi)V{s8f99l95Pkom-bMyNuNOEx2r2w@@wI2E2 z(q}$p=~p3{B*ohv(M}_Lo`$@UTV?%ngt0AX;24H@3Q<RXjw`UaMp>Eq&r-3}d+`YY5DloWv9X+tiZ2-e2Iv8~ zE_FnOZRM~vG*pym%=UZDf3RDQT~YGFyAf0sjxA!X9}?^x5i|$Hl2ABbf%l*XEcl>UQlP>>@ zKh{PIp(x2#YTweX(^4%5Tv(#Fj{UrH?M$5yxcEK%f1JA?;JNUuo^=+!GQm zKni=DW2;2G|46=-DODWCx9oH_e=|h#u`@3E)O4;Sx38QzeOt~23i{oCqfd;4%Rrd| zdu!xx672h$=FF$A6Hj&p$CymE7#!(qwkLehvQ3`3(AsM%pXK!fa;kJfbY_P8ZgB@3 zc&)d2CL4KY8|*<>r$a-TJP zk+ofH*(66RkLUntt#;l_pJD#w-yPA5IpghDk@_T#LM-@jiMRJ#x#EoZigys?oaAR3 zSmTE;2}^v}9~LhyP=mf41{VUqQ~@E*E*h^7bbHHiYujdnrAcY6@CpiLSTq^ZXvHrM z=HXX6RgBC`KbVgi4?=4)okDpX=-*J53h+;FCOFeCkPR*rQjV=@1p9yXs*ro|@P(J! zYSztYu$Kj7Pj+eAQf~1+$R6PaO-XQ)BX+FGBkwtl@u``UlWH%VE14)XscN}dT~OWq zy*8pKC5&{O&%CaJm7K-ibt#_jUmW(X&^fB~$ojSYz(E3G2c4Y4##RwDonDv^NAMKq zTZG_m69OV%F0+7c5SQM?o@P$GjuTUA3>8ypUF0|Sxl?sSo=1dp8+*pqg(@Fs2G;>G$fvi&#uv`yb40LXOv?oIP#m*-j1q+(k z4+4XZ+qT$U4xpge73-I7uk4bL_gRVI#@c)Voqivm9I?jx1Di&|c~5d@yF4agvMM%5 zCe#YwyO$L?&K4F91wWZEm??ss2)*(&eS81R zv+!v~(m7CQ;f{XeXTAmSk+KvGX*NeEX*z^}sV^ySk!G99=b^RpoQFq`_B9REQr79;>gT7Y>iuKd1{uHAhy3>BC}umBhwsQty!5yGXP-M&>{4df=5OE{z~i4Y7G%ud=9erF1_!pLEw#?Z8p5Cdxwx!q z=Xw`YlO*#ye{gU__K+;xO9uL)8344hy6$r73V?Lx*90u9S)kaSH||b}TIp}fxJ@m` z*SnuV<(%K+Q+of3i5%{Qtdlx z(`C&CTHsjPCxd;qI|H}OBzxDo#Xmx`ZYrbK(LGox${N*cWQrBu?bkUg9JtPY=Y2P` z-yLY8HMRCBOfg|Iu0C)R3c08mbgU`$J5v;JJ zxA56fb>JktuW3I+*tIe&pfBM#CxB_$peHPa&b}|uoE!}%Ve%fb^HW(hevI|y{hWyB zP}X6M#jejT%>KetZl_6ZhhZURxwT>WiA6%9X_&+-QQvs203a|2pNpL0ftiAF*dFdm z{hJfzfUE5Lmv;DW`!>~XF3Jr#sgH+Gl6ObZFA67=%C3!#^zy>x#1D z0lt%z35$00+y?ijIJrD?VpL%G<1u^M5{z`k)2ZVu>>yXiJ)PuHIo@_yz8ofm)r(7gEYpk6wp8gEK{K{m5I2W$W@M85R zKhkO#h)AL9F)F~<&JeMUhSt0>KetgenWa$Mh{Z=w|7NChY-3jc%0u^ag5j-#ED|ZR zbl=EsY21I5eN{d&-Wi4AU>nY^H4pU-u2O&+yHV#J*`ow6^suLGwGU|HFBJlG@&yqt zHcKNsg10p~-@-AJE8m}RJ53Q*;unM4Wf`(Qa(V>~#xZ7yRXYpe2%M2E(o-nTeZ0$o z4+w2;7S7D-j?WX76YyDH>oK07l1!1D!ZY{lk8umikFT|Jhr5f3ZzUlC&*J8ulpxu*=5k!(E^eN)rxc4 z=7C!Dtcd|nrB40(!nAc@l+|@ddi2T$H|h5prr6`8+mT4%d}MYQuTxhML>=&Dbzb%8 zRZem_K!=#cQ|qXMSnT7Dp)`$zbf1!CcOtM{wZAirENS$fOoK-GIrp7Ikb^)13AAto z{KTf&c(RfKxxs)d=E0e=UPKzvdlac8Z8hAu*+DJ#-sMHM!}r`bIHnZnQ8TH`%nyg~ zKwOa4D`1^eHbrC(w893EiaITM;!K`;FF8t=ZK_fP8K=R~*slEawvtB+W>I)Ha$2O>j&hdwwCd-VVZ1EIpj z0?AuO2mh@( z0QP@$wBPxE4ypI?Zv8(T1O@(|J3?XpR~u*v1^urK82FDF77?l0J41Ak(sBX-kg@(V zfPmC=y!VqtR$moV-}(Co{?}ppPO0C=fB5@I8aDyMp#lKHfNx(#RNa9mZScvuH$L?l z=aImhQ!{hdqp`7(+qD+;w!1aDBZMzszQBHf`4m8%^J9$#Peqn%0k4XsfE>j5Q|3ee z_mjq6Ur2{M5n<-}YsM=19ILUJ@#mi-`txtRDq|yK>1_Lg;~u`dZ(P!^6b-_T$Y1_L z(qnWs?Bxd(5}p+Y8Ddso{)I*ck5s5dJVhbrAKy8Z@l$)~bxHh2DZ-0_>1$0Ps!yQFt^ z0Qn?NHS0_`AMPgWJHLS}uNrJE-u4>am^>6SJK=Z#l$7mwzIkCc5!bk$PzoG%5KU3R zLDzlm^j_|%gyfd+zcEuOj8PrhcLx3tdY)7;?RUI9Uuft=M7QKSUW$_Q9DO&|P}cKf zy{jYcp{)Ha{fGr?*}`63V}A*KF(s)Te0l7!=^)5EO_qNpUjE3PjZ+JU`}$%0!9wV% ziNx#qiq~(RWHhBgRge5{X>)~K2nEMbbOId_gBr8)a{zg~!DqJx&oD{BN|WHvW~~)p zUlp@20}&r!{^@5DI%J{;|1#~FI~O>qYcn{%>5osE7kGYcbXq=+q~+pr93iKo zGT`C)w7c_|kg;u&QdnkN$y&o7CMjWFA!xb4Ti?#al&9IMd4oEd%57CrZ?{@7?sI1J za$P9&axWkC_8`;t^b7Z9O=vym?$tNxdK7hPStei1DWA(i+FsT|_Smb{?s#;f(jcvz z1{IUzak@5-F)zweQKr<#I_jRCCANGhMnjBzQF|V5HYc@ePu;z)Y9yD1B`e%p5a;Pq z^>}>p;+em^2+dMYMp$LIl@@WQc;H+`EmN`%m~|v3$nmwc#4S|P#fXVq0rdgM!MbGp z$%XQAw)@oFPm06Cx38vVM@CL<%>VTg{j4%)1Z5U3&>A5`_2?h`kPM{sRA?mWT-&RJd_kDHB%d;g`+Uw(WbHnR5m1RXEM zUr>Wi!64u7vCxmVz~?*t({Xgi)6cc1{!-v*S^K6Jy+2sn&)p*Qw%l6P#SZCWbh=Tr z@}nx4BYUB;Se&E|xS9=&R-gM@SJEylL)(+8f~n5t5b4!g0*=QD4{)?;pW}r0@X0I@ zZ7PWjW-sf^RSNNyqeiyzw$dbTTE#?$F_h> z2N>>$&Gt6q@F!)Z6cdr18ey9jfL{64Jg?#h24gKIgm+=A(PKD;_tEh4(#B5X+c_!; z$9y2@^~DgK<-h&4Oi^)#rzFe$p~Y`)HW^h&OODjh6bWbTPbA9h>WD-wIOU~^dfcxR zF|Sz6Ez&LU6X3&E!)(y}TFmIb9DTWeo+e`#_iOMMStTcD+9yB>uNFzd+AYyS7M+AyqBT3AJA9dapEjH2~KFHn~fTpME ztXF%|>+{!>MZ24MT+673hvK4vCeMv-*E&g7_Lh~(d>7zo34*1OS!O}vz2cBBD#L{h zrnM(TOq0&~ildmmfS^NCPT1L##?TJMN(&;T*V%|^#-GbyLZK!i$AoP8RjFM97tFz* zSSTT^ivwHR#UF~RcBVosy*N`-d~oC+u!LUZLwmK8GvuU}*l!}-C>WeGhF;7;;AltX zs5C1E=B+}rFy)qRW}hebvktEYqbkmA0Hx2@4K~xeJh#^nsm=Ma|M^6lEkmmyI$1?A z^(M;teqOx)&Hf4yt>)zu*4zNhMR&Yss1Z)p(1XlD$5(oA)9opFj5z1^dT zNB-f|3O6)1dQQ^G(PFXl2;l5_;jdV#e>#J>Ssgc(JV*(*V7y+L!Oo7n4M#DH4h>y` z%t>7(&WvQXrM!AVF2Wd4SI)&A6@ZW!lHb1zWEh)j$6p+4UvAH$&xAM|i9r5qyN+*d zT!qkX+=C>h(aEXo?{z!omZ(Q=Mtbe)9Iza@GnEN03j}}s%^kgLbiV5FwWVrds%SB5 z#Qh@IR>>H*$ssVnf{ZHTT@ZKE0 zzMT8s2E*1Sgx@CA{Y!ZwaW=G|orTM0IBhS@(c>m<;wLDJE~sCfZxO6n#OKL`u`u12 z@B*OH3#{hqsO5&Dwo{wl`JU&uR4{mf7W}<-28NJeHibx2Qhr^1uveLBc^5591S2E#3i-qP@+9d#F`>f^7k>Zqk-vn^ZQY^N%A8juWKcRB7#~%jIoS+oVTk*G$5j3$I;Gdf}9N?HTPp+d5b3{v0*?m;xqL2GkNmBJEJc+a<56Dbq z;^&HP$l_cI2+S<6^w+BJAk>LB?;K#>dTXLSWm}4+_HCKPuHW^JZ zffu^B2z1RyyVpe^L7gInwE_K$?IE*0UfO1iSf>fkNQNkXdCO1(osD)Z9S~{J$a~hV!j&W;V9g*uA)iUOH#77oxJSUyE2h8*x6OG z`(K<6GQyX+`?@BIqCev9Lw~$SsoWd0DROXbfaS&LR)XsNy3Z#~H;8h*4J4TtR+{{h zSXCiPbp_!;-`Tos#bR|>X)-^KE{sd`x zWOy|F`FW47zrWT?_vhd2y!lA#nJ7*nkq+BP zYD7yFc-m&poJ3Juw6bWIQ6q@00<>E!RRw?Y>s*Rvs3#++9mjoM4K7t1e|F{)L(o+* zZn!5kWJ+Ilo%V7!a~~LDFw=b z;b7~lp0s~eX%|J?T3WD3@P=L}%G6k;CKF_4dHF-pX3Dy%Md9JBYVk?MwcOda1s_iJ z=kv}5Sf$U~U7Z#A0(!QwF-~4|xG(F8j|W>1;t(bhuWV_!CC{YpUf*+aHdR~Ml>16X zY}5$w(OP>YvYO6qy@+Q|16PDs<@saJ+0@$n+PYd#h4NYXkLj8!0$F^vk*I@u62%tq zwmvz-XyMtW(V>zxt%KYR2?==FZUROp$d0!Dt2UQAYWJDcw^7kia}pBQb!8=9S>`bV-y2ibZupa ze!awbe9ItO9+P03w#voN26WVesX_6jHJr(zztAzuUshP}%1&@R!h9Z!Gfwr1gr9G*k2`oc_f#Ptf{#*k1%nD_)mb!>X+$4$? z>4wHe?Ghiw*#mEQb72w57d}4llRgS2e5>vkQtL7HB%7$ zwHZ@KsN{(ir<9Cg7wphLg~iiRoQBI=H3RK^dU>MpMtQP%3|4P*?ss^Zr&AGJNTY1o z{wmv5W3n3cu(J;T9*E^dbnF+=ud+yecfRLa7-N}+0F9&dVt&aP>Q}@miKG%(H*>{% z^)%c;aOciUZh3M4wgsebbL2$$O*u>;{z&d|E{wMs&B?8C>9x+QM*Y$u7}I>5LGfqHMf5oTmL z%+~!dVd_?@0q(5x@H1d0ag-%#V{_*6hr~z8Z#BcyMV5)7xS<>oPsIPK;ITZqly;pj{Zkygi0LlWaHxwNQj-Zt_tZ8NF9`W1|;+a7S*n?*w%5EK=11 zw8uC6@^T}l0X31Th9^<%(DYFF6#>Og_txSC)M9giJkWaPCQQ@a6p)Q}sgvIwp`Cfd zW%G#E6nA8G+>9vnpMO9xuOkXkJW`d4RzLLR^Ar0fiquMU%#THq@<^+{)tmp zlQ6G8f_QlU+jrqpZ6ZeK_*!+Hg0K#-?@v%egXr1zZG-u7AD^TptH+>*9LjO16$^2C z;=}_vQf)Rz_6-AEv#oBxnT~RyOrgec_a>aSzDAM9{pfx)LpPgwM(7Vt7aYETu3Z-q zh`3(XDmcA#L;)=Zmw3(=CK8zdnH?V4#0a$biGgK}ujFRb)Q^2HPD9QRGukt8R~PiO zN#Q||*h$a@qqS!G#@1``#r;R!BzEMM!9JEEN@*`EZxz=PGJ5VZBx1ESML-puG_maONe4F-p9;F6r7&=R`&R=k!! zCK<0a4tH)rhS4kI&>UPTgB+Y6MvPa_lG-X`I&oSKmAl2qaFHgjg>PN2Or4{`a5c5D zfztA3d7#Z&b~`p@#lNdPgtms>oR8=SBp`4Bz}^j|%eCvcx1O17d7;CvgN>Juk2pkKTf0Oqjq~t! z*?vA45sOHQ5PNBPSxr;(q-c*EC}6aeCy4G|C_3@H)v;H_UUNP&i)x`^i5k$kY(eS# zl>R}FuTH83aD5j0U5~#&%8ikFUhH_e)hNjA;@pFAsHy^Eoj zb9M#3j7^{_nM7?fMVVSzM|O?oam!F`;*$mYgY(DX8^GiB+y@2-&6INdUG?7|i5xMf z0cNZ@%>Eex;vz_TG(6)sMf;4lzZcy%=~6Gs2LZ*1adp7F7RAj3_woGp^vu9S|1F-w z%X}2YST2s^%;Dr9x-OPl5KNH3{PxVWH_HdopT@$N4B$#J)w-?%x| zIT@+qMl#OmUCB7#1xl~-R!ZOk4vq`^U6xOb1=^bQ+!)Je`%E3^OMV_+eiL8ftX5rK z7UQ+o6y1l}T_q2%3p$Cy@pn}t9CzEbxvKKkkZt4zTIEhn^)UX@B@Hr{QVBR`!wPlh0;H4VpVDnk_?KxAO=6e3kR)pL?Rpw{Oyk zuLe8N*I=lKp~%K&{`h!H%zpDQ4w}UH)JG^toVKRs@B;;%Nv_~oHxeXCJRVcs>$A)slUgbqr zJo(2oxYsG$4XVOe{4R%27O!^Z67|(I9|p6Jn3CrAO!ug#m6xP~2rX$BRR4hV0VqE* zCUcV&j=7Stn?CX0)OM|I&xnk@`0~$n2u+x$dmaHkzu|>+Xq%Q9N=z>-c&Yu+Z5D~gdc{| z{13&ddI= zIbVP|B_N(3Q(`&Yem!*xcOL&uAW&7N%(bOwz{_YrxQxV(ju1_k&7MwlbOTE|ZWVpB zl8u=m#BYEb8D1T6BrDxp-qDXR)W`QP>$uy97FB6-N1{OsiCC~UU>PQ&hW1~@V6L5n zTr@R3nG?BGrZbwAhrVqL)G-uAeb>*#Z#0Wdyu;gfE6d)^(~XD;!EfPB4(2gv(>6NO z*&hv7>90S_{B}~5>~>_m9r<2M|gH4b(da%r)l;0qH*Ms&_lc=BR6S^c2+@@M!n4LPToOg)jW#yq}}I%HN_2U-znDZI z_gi#X`6ThxP_4ZzOh`s$O~A#TyrHc5z%CY&%S|oy1e(=)(GSMF1GD}r=7*V28z=Kx zu(Vt-haA-Z230@RV=KjoF6o9OxW?(M?i5*9=KdxGTvGF&-E#ZzQ@i5JOGuHc{W5oB z&u&GoW_{Ipvbiq8e0->h4<+>wt@S>@qL;GFqO$s){?-3%I0#LVWlv<#^H3mG5|`6& zd;qirgr44A^Z%VX3-k633D6HdaQ9^{3RG16Cnbw0VdVR|iMiW}02(91(F6M1_SjQ2 zwDZGH=nEf%h%y%iFPmjU zr7!4zDXE0$e&`Qy5fmU2oqLIp;3WwZZ^FlB!uTppp=kl-FNdEfOy`{ls07|)3qzvs zgdj0sXbGedAQU1RzqGW}gS6CXcCl-eGg2kO2n8{)D z(f4+vhjt0BP7VLorPIwV|B23PBCOyLcU)n12V&Q9Gjiunx&hBQ$0^-y*j%zjU1W3 z*v28)$9q~7Wf~RmNg9XWRkrE0Dj4Tg2(9sNJdGiBB>Gwv=}n2?jfiqw@W>|u*br(o1gJO2pD(&TrXaknAV-de z@CWJy^@=n9l5-;XSe6iMBY`%)597>K!gnyJgzZ9j+^?m^)p&2$MPu zPms^9g{{I*2zh%}+v(0$5Egzs7%UgN*(o6K*)01g;G~|BxjdO)IBqvt?lk0l70BxI z-6yiWwp@-WbG^c%!TD%&*2VL?MUwuSfU*Mcs^z1a;V)J0j{^d~O0E||d3_-JiatK) z2tM1@e;(%&ux=tjao2mV#h$MH2m&28dHTzI^7bc$g-MJ=xlDGD`JU2}0X&-dj4K(J zoA}SCC*jr}AiWc$i#(-%tb?aXSuqM^3~eK6pWu?enwoX0gddgjl!t$Ma=S_j9J(n1 zR@ZJP@8)rm(ks_}PC@*Z&966g9Z~&P--NT?S18@+*dIcF=Y|Z!#O|zUU2j7-_r}v6 zs(PcNCAEGLfGzn6I<%~Zmf2-=KvI190L)QU@P$iu&H7Gw@zD{dm+2a0&4=j@tP^1y zhT1|;@bLl5p{ou1BPGoKk4pVYYfSR5HZ(&`f$^oZ0KGwKN=58_!${4aOfk16PWLqC z1G&d3s6yoNarw;SVeb4R`v^57To+eONGCo%nw0vl@X_L$LL-mBjkTqfXDTfqJUYn? zL&Hi=EV(4FV2y~^e1%>Vx`5SGUXK>hN8y#KO%#|I>MIf)h;J>82cZw~gr955i_wO_ z+JI?Cf&0rKnoat7)HbAhqu=!)`vSApZmNiKBxIUNo8New2v+(O`^g@XM=xl^gj z>z@-yn0+kg4Zu2w-LJS|vh`FaXv#gi5q@rQ{Xee!VI9%99odAr3l z2Y+BObpjk^j6`>-_q8ihmp-s)XE-|U_3DnF+iQN7XNuN!sb2N6`2I}sbUci1@Eo8; zRL}IdWYE9;V4Av0g)kxFPvD?h?lJCv_rpj%7`M-sQwj~ph1~3c*zO{hn(xsgiPBG1 zzsFu=N{ESFQ+(+Cs}A52ZO> ziEs{4lmc7TaL^)(XU?eEscVh=0ZhBg|;f`m=qs#6zrFcGF{`0&XLGvM?@L67AU1jOeY>4f4n~pHn z3()RJ?%W*P%-gF|DwpcZN%*Nie!$g4uOUP5-0UuqVE0$FiLhm7>0!3{LzdTDBSNvO zEV%QVhpE!SA-dkcsrM~}!5GSxDXfM?ZE7(0U3@lxN>3&JUh2taII-r2X`J!N>8)vh zXMX;bmt>p@_<{&i+r@*8Ks!>E4{YJ89c8;Uk-JwM23w&IEdowI$#jdk2E+F)dnLaZ z_J|4TBM&_s1YrQ?z=wFT_jnkQVIbHGlqJF4y9jD&4kTE)worO#*sd|B1loCANS$Gf zyqFaMGz0{!^3-rpU|3>~vX?7Jo+Igm`O5TP1L5c{pe+dpZU6Dj&q| zjegaU<2?qOD9b`(9y|KjC3WFh^9^O}yBpxjTOMhx5}?kEjmz=fq@VBDGt(ugehc(csM^%HSrOB`9yB5@SjS7zsi5VXm(lV1gHqC-N1$i z)4N_Iom9?eHc9(E$7B-yUy-h*KG>t@><7S_@HYJ^d7JnS_EDCFkRNpfEy9ZoQZgSZ zV16{;W-sFv*(Mo*CH%>{nMf*)LMZ}AY2Xx=#4%!6mGGfxlbIO>xZ0YIvc@F0Xzr1h z$2Y{|GGPcmC3X>rx^UYeT4Wkz1=nsW2c+nTkmf&BR<4mnO$#3z9^7HOL&8@6kPeBF z5KnV#aM^Meqx-DWInxj+8mRdF9Uh`)%_8v$zC%wCH+zhp&-5&PaV-BTc9DQFT}~;@ zv3{ocxUwyAE?u>4Qs{GZW*?1r^ebpBtVX1{67*;SWY;3<@Ubef)1R+MQ))7Rod~;lM7&zGn|)=aVV@RUQ3O z3@Ro&IdiqZ37eH2o&6RdgMYi!%HtH};pg*EynI7iIl^7yDX&c=3BURCaRf2Rd_D;t zLQ?(k_ai;~MyewR^FF*7TAmkZsSPr|{0P>=odTQT4uEB^!u4#r6V25Yn)g6DhLzOu zg{(E7jVF6@TgkHeKS!y>0wUmu6d&@WL-_CeglANn+A0?b3!r)wkZ8DSHsX98G*#5G zx;*11f5xwfxX_7F3p5A7zLAS2XBf?aE!imxj$C3GkT>8(`7dHFOk4W=Te zA}(;Ab;d7WPm~R5kVvcEJ@#)j>G=Yoxf5PG>c~e7TWf1am>*9}Yq`d2h5qLsOt2MK z&BJ{$)_c^(`%x!cn_h2;R_lvJ+!$=8*mNWfO(N!hwT!_34H9%KT5GbcUh7qOeSG~% zy^SdBN&o6x*zRqIYl7!bf)rtKSSNs`*ryjY#d(n$?z{b)rFCAh&A~U!BsN)YE2=Vm z{!EjC33$*@nJfi$UO8|tZ1B@+qdF4m9}6@8=flg&R9<yZ9BRmka?d^q>cGMAq!6+*Ur1=Q_UN;RDqwC&44t!Yy4Q{h5=W&*|au zO@Bjqija@AVDIqxaj++UrULCjZWf6=udtV=Kas?0s@n;zaSMculL7*8+q9L@&>~!c z2*A&@Mk8Btby^s5CO5bL5y%X(NSB0;cIu$4l;qq8{ehXq94RJWFd05_SH;myOw11b z)#S|Z6+cBg(vTt9k!!d|Z4zvaJHZm)fPBEa))N?FMr{c{(JDx)X6NgKu)r5npTfmj z#XF_kly#W5MZry@3a|`n(V~db>xOuhC6~o~Ak&Fjszlv(F(hrM zm%^_V85t>mv%#a&aP<2Z<4i4PkLmy~Ci+{@<+g(>fvYru2IA_v8K6r9cj`SSAqD@6 zekFo%bhHWIomI^Flp>-S^Wgn3Xf_OPuPTm=h;#)Ah})mw!&%DVN6)eCvmgI5bzN|` z^(ogE7Z-AJt;y8X7(SL&GBJutwHU^AL+#HZ3DSTBh+h?l@oew@lHl%=sFBs*yuI45 zhq1Y8=lPbtDDm-Ii=dllK8dDs(Xal$wc)^z1PG#hpUn;9C=m~TSEXsDThe-W%$PupNNp41%{M`wlN)D6 zBLL!X2IfBWUSZtx`v}k;K4TuRhz;F00!P2E%glMMzsTHHu<0(J%S;x@&X^6B^)0M? z)fe4q#hL#z!NlE?VG&oE=Oc6L0xU8bVj+#=mcj09nR{DJgQ zlmdU+qlUU^1)3`K?-=Q)K*Pnny1IX>b+d$W<+BVFtXG?9eXL|^O!Qivjc{-K6*pv} z*uxj&YiW)uS@dBy3@BB0=!&kBPFQBH=EwTa7FKpTAG#7$KYxI>`l*#yWD?9Cjzl;9 z`6(e=?mTFNV5x+2^_lar&c;$IZ5f&U&qTj>*qmp)rqqydUsY}Qp;!?k3g6X7wB26f zae0k+I!30aA&ZY1Lu3gKAvk$z#X=0?g)gIp&Tz%P=j~B#o3ddp*O31!+i?c_L^CYl zep>DhmqBSa7bhAM_$yS;Zw7LXAC{!!XTfVZbTJAH!>m-hOsNLnF2L&hK7&0}M!;tC zQOwB&Q3MJIt8{weoSyEPOXZA zOR5B$<4*Y6A|vmm!0Smq*n`>#tcy9>3~_;$HH^mIf?QbSFtS0{2)8$YC9zHE7=QCt z_z4bIVUwoh4_w2&GmU(*dTFT2w&ymSD8L@*BIV%%ue0Ltc8eBn9aw+eKSU**Lb-F_ zrOQ_4iGDAVZxMcFY_CqNk>KFi|J5B38Th)VyV}#c~yFLL*Q5V!MIY<@nCPGnR%>T!P6>3jb(K$S+-;`x3goBQnvxw z>=_*_p1~@Ibmdv?NHiJ%0+j4*C9Z2Nj-4#C7{q&^t@6d6eSPLxASt@7%;Zb=K9F8* zX-rN(3bsqpk)D((o|}KDjm6g<6X!`g{ZllB-1zbic5tBlLoB9nsLp>##;N`TU$uLu zeHmNRWk^E6_v{qMUdLls`|3rSTg_}MRO>hciharKvN(idp7d`sL# zO5E6%RKAfSnm8Vij7Ss{*Wu7EF%%~vxwNI@tj(af_G`12uv(hx(qG z3PFep>nay@LLFiWU=qh~@wcOn_=k@~M6pUZVTWWe)9-o+cOa{(6?0cirqj2fi+u2l z=R5X=0P2X*YZfZ*lz3+gyXpEb2x4zEGIVh3{*Fmu{>Vr~F8i*pTqaei+FS@_dcTOa zl@#YG1;@qn`kME&!1l?T_L(sozTZQS{id*HwLP|$nmB91Y#SM18E@Syx>{3(0w;^J z^;ca2nfYuY?FoV1IH9#Y2}&l?KhKyaY<5T8R^>zOFnTEoNim&rTJbLecC&DVO?JvaW#f2R!jih~C4Ju@7G|o}mjzyR(;+j5YPkUW3WB zv4>(moF=hR{C5yda-FG+nfz(0K&`LU{_Z4m zqCkAS@2&I9<2v7esu5@#PAaHDciH(KMmwo(JNGYF;Uid8iYLT~(I}6N$xJY$dHV+2 z4VOMuvm;#~$l+^jlXBwjm)7O^Zw0}e08_V^OZ@Fv7JHw6%r4LIj&fMCDmHg8a~gSsWLR79sq>KV~;~8`&YnXS)yG_{)U6= zkAS67v_IX6KOUA^=Yo`nHvtWI6%uCiI?&%P8E^fFeH-?il0V{pGF&w+9jH%{^iwsQ z&(8y2{!kw@6dX^yY+D)kmQnnXy^J>T3_$8ga&tT25pK)H!kd~s3#Va$kba!Ll6j zAkKdTX?;uN#CDF$gx$J}vvzxl2)5JFEN{`eqZ}Hu*Y8X=sAx%4Kh&2Vw9m|#xS8H+ z?j)e)0M}+IU&05%vl+>C`8jXKyTs%s;CRL0Ib zH*6C_lgy=k2M^}!L+3I8GVA$~ zpB)GCj(}Xo8#!g4DR}7kH201BHaJWDw-JC??H7$z>(>?oP-D4s3*p2n(gMK3pObsp z3wCf!3IpH>7_~u}xN)DHrM4XIrRKB=rboe@0DFQ8M5g}bDqWp}QvdQV5EQ(ld>Hb@ ziynhPwlzAs!i2izNR#pI7{k2)i1bR}@4BK_@CoMAdSWK76Td?|Urg2b8LgGhl8=Vc zf3~W4^n#a823ZyMLI9}E;ihh8v6jExdLEttxArw`3Ndap-L&TA4=M`&yw(tQhRxYt z_e6=^eQQ&06*d|ERGrwKZ64WgeYP8Fi`t6m<$Y#aOS1bdza()ErdW(pY5H#PJD>VS z8QiB}(Uc~cHn<3@vII+KmB!rY%cd5KHp+X#U6A#z?K0yh);9Z=0Eon1BWRacy1Cxkhk#Lz`=I|M=Q|xZ7bgdM{ZO<_RHdt>HgdogLc;MvE zbmKHw=()+D1w#E!+n6!@-qsKl(lwVOtC#D80Et6Fr{Dg9yyx=G7V^As0`66#5)l3G zZb6@~qCiDk-Y|ZM{D(h;WXYfDhkg$(n@L~}CtqkA!DnWItWGd$*obgYEl~%+ht&AE zMz*j)^#c3a#6e2q1yEufx!XXvr%S0UHe_f-L}V!UtI^Nm18=g(-LCw1+#v`0lJe4r z_xci8y%edIoyW%4G=^#Gp#%oRS7U1!n;cjHdt#>fF>%gfk<8r1neNbTxTg~j=C>~Z z5_76PQLr~^+=UK5GD@*3B6F3ydM#ixVp{BFKA9X?Kkvz7q)A|acpD0AMjOy+Z=gA_ zgR}1%I?KU*dOoWfH>5%ay?zI>vw6Oq^?5Auw=2pFwP`Ev8j*DSpJ~E=ISlzed#x;I z!q`Q5l8+fn6iIpB_*aaK-Komj2j3dKpp=41EOL#0_DNZbiP(XShyHk!c0}y^(}5xG z>?l;tT@%@J_fcq&R@yW9|9kuOs$~oU}8ICVlZ`n z{D)4rTKl+cn&}eY@+uAk& z0b{kkTY;FpNez)^i8$tRWV&OC0BrmBL8FCF;8^X{ywnLJWT(0wYvKE8X&=OB3I z(p%w#ygQ8=F16h5#Z!i{FsB1phr%cd7DUN1l6<{2gr22eqasJ;#^$A9m>yT}U{gbOSpJ zGuXzg0HITv!$YNQ(273Qi=8JvKKnBz@&hqtRSJyvEiZk|M_;VnXMOKZZgi=%x_6)@ z(M0qUD87rH&j!(3`_bsbge3gh;O)pDs^#+m3Z=?uul=pDTd-6I9e`duFCFgSklzyO z;+QKO9M3cS{kB?PaLwtHI0FkA#KHAZ2Ve<5MTGs(xkv`-;x0v~ohQD{<-wybB~R-w zoA?sYU0ypV47^q}A3iASJu-~qN4}liq|?ZilFMlJ=lssGQ%&o;W6G0fPDN} z>@|FBCm%B{7c(Ib1{y9L`0zlkdjyD_|syK0>T0^tSs61Gs(?tgH=LKk~WO8)#AmIlaRr2#D4%(g@0<;Ff*lS8Y&O*4k0QDvo zxef0oU3G$r@JIBmhXSu~VF5EC;%hY2MrtBt45=E3#xi`de`(zq5r>+A#WN zw4W0P@*a`-;Hc;sEcb;|U54G6YUIk$e{{_Pd=~o8fX-f8x?n4nDb#Dc3JDw?3ZtAP zHKR&4ILP`m0q3lW?X<3{JKls6m2mPYU?dB#>dA+e)2MB@1Gm!;uNhj8aO(ZD zgvTzsIi8PZ6Z0MrLZ1FlqhzHsVzq1yGJ z-3RI^YU{etd3-9%dt12~q-ni~KK3q=4Yh|&ws53^- zxoA%>r(O?Vpzr09HmSPA53O#e+RVH+gm8q=|^mBQmon)7>O70Aot%{ zp4W5UyZf>*oe1L|_51`{QB6$LPlA(j0#uK>e*o|!s)lt9^KYvt5O&&r!Txz&C>0FI zf&bOr+?5bRrRN{Wj?of>22`#g73DXlU4*exFEgg~Ci5rx5iT#%W~yC+1@B}$)vAFBCw0I6buc*u>*WZG2-v_ek3Ru6{#xa@_l!%*siu~nK#T{Bi?^ac!IQX*+ z+cE54&f@-DSW69a9wr?7XrX8gH=i2nD|`PLUX;B+@kFjxACGpJ_1ZVy^;s+|_Ls^$ z4l7Vijp{K!On{dJ#dXSVEv}wgE)`9TM>5fg%|+>Wo~MK8N}&fV`TPc5)-rxC*7zKp z`-Dc^ncJdf!IU*6X)1K5x&%5GYwotVz%G) zbE(Q0O{jzmzAoKbAjS(IfH3KA4>D?;&)Ufnyj60FYxexp3@6I5-;21yb5!qHr*vgicmq^l6PQ5o) zogAu0!QRT7%_zLu{WJ&oeCMQTI8H|V?n~XgAOiIgY|_h~*lwVur3`I0Dwu3bFg~v^q}`&VKio;c2$opq0JKOfKE^>_3yM zGDo!*vf1kMj~q4Bl5r+l1X!c$lKRaAFC(fjRbi40?#V-^UGf`MOK~NffuXs7#0x&U zbHu%lnya1URGBhm95D9(Y7cPDaT6FYT zkCWEmYG`T(f1nq6oWdO;cyKLQ`)JZ7&PpiUcx^JJa@Rae_5C@!UWG@!WMQMsy={@o z;{7kY5PkqOmq1D5 z$E;BRZ#+w}Ya%j4L{w#>KzFq>^S$3d&KW07jA7Tw#EGLfIzouE!%hfAT~RN$bp6I~ zt`>cxq(F*M!!HfU6A>D7d!O$p|2$xG>E~=r4sk&0I1oDetNsK9ROF2G#|?Zd9gU>~9UlaFlvM8vti_Vxw(_UpP?s9l60 zg#+$!j{oJhblRo=mb2WFc7|N%@4@TMNR_CUf=u*sRJfkKK5LKisd=2^d^lt>89wj9 zcUDVm2DX+D2A=@EY9HH6u~pxqtSI7uAK(dxHKETJR2D%4*KA~c7hLVeR51af-eZCg zSKvyuwb;vXc+7kkXl>WZGD0eAk!or2(2q^T_Tpguop02oD#tW3IYbcjJxYD@_x0aF zrBh;y@Wn!k1P@IDd{u0)3-OSrhg^kv%p(`;*w0wHbOPlQdZ%3fby*hL<_}L}(ycX0 z6X1P2VJE@_;w_}htgNk)&xi+cC_R#IjZ_R!V#T=1lX!Q+vVeS@Zi?(P%F8+5{T84;4I%b>D zS78DsUSbL?;Yf9dlofS-C}y2F^#a};%)^MOT0D@shTD_Q(n|mbH9aL*gpH7pFKR^x%JP(n2}Vr|6v8!VZ%wG^Ua&_Vs*s-&bJ#ZS zYT4W3^OrpDSkj-}p(ZXEL^UYCt!HXH)-&$s%8MYNS{n0XeTzshq9*indh%90B(Si@o$c%(6Qh16;Up?#FpLk9p#lHR8J{aI@%H%l& zKn@+xsyYqb`gvp;a_gvi{_y%2j}GqF@6=W}XgwDx2;8t|cn$$Fz)s*Oe3p4D+F`dXVh%=AHS4I-G9Ck6an!@mM*fJ>>*X)nq@S?$Q)79ERFr*IZ93z|_U%q{TZSCua%BqOLp z|M$ND`g1Aof6OXHkwQdxhYOgYX*g5rNKi!8DDZ^Ik#vAdb{xL(M@f6(<-yNJFXg8% zO5+(g?)zoSTGGO?=jYc^<~m;#7w2B50FbQy)AP;l#lYl(OCdYqjIQK!D%`cSs2C?j9t#yIbS#?i$?P-5r|X!L9M&?iQeNyS#UweV+3N z>O(!NYK}Q<#k!R+>2b%#dJ;p zCgxRDA>YjPv;aQ1ChodF<6>nb|9JeW{(@+0{+-p8v+{Lz<`cp=Kf79?Lc19P)N%YE zO048ZU?T@pWoeNPKERnC3iUG;7lERV153A@!!rG$ZQx|HYvRtB6cAV!cO-A=^I!-3C0gtmaQYSf89l|sU>@C~S>D~Q z4%PaP>M*eCJI6F-I)|{1mWROO)H%S*RBkQs<}ZjfrkYVyZI~!}pcZ+ezhT;lcICZ2KLf;PUHx6e(_j&;b5eB@rO}&cc!A|`@10F^dN;?jPuse4fHg~eaH`}zdMD`w`88Hd$(MZM9{&?#?VGW#DN|`+)^1f z&E-&i#5YBmPvtOL@LqmcuBg8Jg#4TrCC3UzC|yYU0uCKyZfr&0nyrpt=W8Oh!TZ4w zzAW8VQ{j(XKlD!sX>_h8@~|+#vRvW98g|R3s%9R-Le62o;~|H?Q82@>a8gOVo=$DVnz@;Iin5zszz5ePA zHe*m238DK8>F(?mOAb=ayzxvv2^aWQHlP8F1CPhuHI0F}8mr_79dUo30 zZXqezg)klMJTKOZj*+%e$6<8@-U{M=+fAo;EDJ%XH`0M3r-$- z5#7?5eZ7IF6l#6nOpxLG=Z;nZ19*!?7jqLVhr`6lZL0i?$UI_Kr!p#B^!h(Imd#H7 zNGpjPrii@#3!=#nQBW)4xF3p82gK8p?Z4UINBZXYv6JI&Tu*J_2L z#tGu!bGnJK1ySEbpwy~w8DX}RCKR%x@7u&*xUbMW%#`t3{cYe?Twk>QCNWhZGU27o zo|d>CutE?5zPYj=>Vw&iZf$O{qD5rrnp8fw(F*2ej6rvW2VtW=RMW<7 z5m6y!6`0K)8G&w}tRZKIdGji9YjwjHJsNdA4~5z60Mk9Yq1awxRa^Rfm1w6WP! z)P~ws%;dj~1bRHNb~!jnS^4c3%9$-_Fpz2ekPS&1QnrMtCm-Fwn+q81!;4J3q>kf5 zTubiI`Dg4oi4$S7?;TSKd%#idM|SRWKpjA-l8-LsUberTg88ZC5}cmTf@OBrTK!dQ z@FV;T9!9gE+I+0BeA<_3;wWG%-O>Dtoy}sq?ovzAeh)R7!K0Dj5F|^K%z<4jcz0_t ze}X$@vw%BoH4hAc5Cb4~03S4{?%)83ME*WC?vEEsn-GMMEA34hqR~=_$ zL~wNo*kfnt*Vvd9<@nk<1~Ij8k~Hv+qq ze6>&7aG^9uqVv_HLQD%jrZDt~9sv~=Vf#G5fJ0)w&!j29%A3~0RIZvd>46tJM~{=@_%M}+UWURy0qc>qwe=> zeD~XV+3f*WE;zc*S6#v97|!=DVcca^ud~Ht#(`tUs8!>KB3KxgIj)vT0vq@GV}Z}k z&<8oEqs(&B(-r5?$FbZ}5DY(=oIJ+q!R}k6sCeH+pwG?g_^^+-)kP$12tIbZbh-yj%vT)*+AFh{yJ)DPN)=d6N6DMveGSD^lBQqgwI)$5@_w-N z^y-E(T^5YKcSk-w?ax7;D3Ty%hObW>2(oa@;?t~pi)@fIzZlnU+4z4fzYpP47fwnu z5XyeP1l5vJtm*6hSOR4PEPDCN{xm%fLj8S25H~cNZb<^w_h{-~UAz=tv2RPxV!o@{&P zWx+-OPr5Y9SW21eBk;Uz8`=Jcz5kvsBoe?#DXeZ0KSVes8L6#s_<4*QIU5CRG`l2P zE=ae|sR$p?WG1Hxo<3%T_i$>Ll_htzWTrKZ4@|B8)hEoCGhB_uH$q|N-o}e4{CNX~ z!ndZX5giuaHOSmk{kJGwc$XVl-L2w_B0~P^zg)@1L8Te2h(7=}OTEbymKuF_83jR? zypNM0WUTPJYV-B2?Wqr~r=YIq^*3tQD~0dda+d4;EAC0{v-?T6B-3KBf_~*Q>1G+9 zkawWn^Mu>F(=^Vy+hzyoxj+x}+(!&LzF>2ioTPJIu(ftseLXy>MwwesBXx!jCRh4* z5UjIRhm8ixC9*`iRx_6TTmS19Tu`DIf(1c76<3;-u2_Rf!u(#6ayXa%kGL<-Z;q`d z*_b*stDQL5>%y(lNcgl(!)^a^N(=jUN%=k+iZJ)@39SC*go2#!7562f97Pi5Z2vW@ z$QOJ*RxNQbW{ASBs%%aje`gPJHaf@GD289+WL^D9)s*KF?<05CbM!@;h;~h6?gz!H}GV>R_sa4iPwQ=k9g2eQEpX?DVS0UEr~m&W)Vh_UB4|rv;xSPAD`$&PnyLTu zYFsGRz06zX-VTlqM5d{l<~9-xg5 zu*{}>VHfF-EiZlSguOlC*=|hw$IA>tzVKTIMXyG(RM)I^qW*D$zG<8O0 zU=rJp>y}8{)}_Lvo#b!+B%%Yw71K&_rAX=GMNLQ)*X7GWrD zIi~bdnJ$Bev^1UkMEYe#>$!q7{yS5&7tDLZQ2My|y%Mb~34{Bas02!P)1*pzzM63S zX3eI#`Zm{^ts}&}k-M<_>(dM_0!Fv_m}lXJx2^8|tR0_;a^7=Q-RtAWRQm+^ND}O) znh!Yu=Q!<`B?Lc0-DjvUEht&H1GM)x(DNbK;fl%1QHW@UYI}(t2{DK)95xQE3F6Ib z!NWjL@WDW;GPR;4pdL0r3*S`(drORGNJ@Mh4w(k)^Bya)63*{ zZ9{y;d;b`;9a{r>yJG;Ifm}g%cTKKr0o`x0&Mt$lgf27tGAaH4L#wQagwX8M$(hTww zcA#z%j=b#>$PBZ^>qZyCpB($INA=$+~R4P^J#Gp-#-N{w1*2 z<4oDdqRcR>q*HC z3#4_ZDpxAHrLf{*KOh;-f6Nr>S6(lFFk_r?d-RzS~}6G>Bf(*2nbDzcIZpOH8PKeZlg zNT%O_0za!ssJ{3?fk{BjstqDDn`Jz1Vr!CDqs@#ATki_-%Q0YF0)}f&ro31+{=CFq zu1J@GP#Y2-DQ_P?D-;xf%P zu4U#7Hj8KCliD42#fvuC#mh)K9G((gskI~p*n|?+>!k=QAm>&$1CVN(ZVQ2MojbsH zUGMOyHwJjzKd!Kpn#1PO7yA?Bc*wu*u;H^l>g|6KYYVz(<8$53;cK><@hF4*j&;jw z@z}aW2uk})T%ih7n><#HH& zc+z;PadeiG{N`nxB>e-eU0jhVgmX6OlN4Sa?6%|?d3#pZsh)_&*QF} z*R<9zw3gAl`(S5r^z%R5iz(I#H2~`zm8&~3hQDIwYhIinX25u zu3ywcL{^9wzmJAl2jb=Hk@AY5PY~>@#+Q8QyNmFsu>xm4!B}EB!lg~{(AP|d!QwJZ zRwM7LN4~EJ!-?IW(foxH{wmS4O^^DgdHzlN!$q&p11ax*9!R@Azx-Xy)%_+ea21-> za=Npx-Dvg6!FujmZJ^orS@nFCP4fAkVUZ;HUl@Z*i_^dl1|2SSy2Y3|tyQ4a^F`=N zi+x6I`?f5gOHE_btMyL5NqzO6ezBDy$)yjZl=)Y`=+m*C*$hz)-e&P>J<&z?p{`9* z4ai~`&UU?CwR1|V%$jktWLm(Zv-^5y_i53+r_%pvrs^pz?{@*|D}=-MGJN{Dgv)L= zIL>x%fop2%@i1;y3)pPEa3Uem#A#1baegQ#!7+DfJZ*E{Zo!ymo103HAH$`PfO7J? z4hGal@D^>al5afepXxryp5O#oux(b|mmY*}y@gER{j@P8B6)YPNms%aClEn*Mh;y0 z`3H$|yCJURGm!soa_s=4hE%=cMiOUcB7*2R6nlz(gK0;hrvc4O&i;_=?$_)`md=&` zwC;jPTDU$V|C=*vZS|7ep33Inr}{;g_eGvPbp;yeW*%Oo2<@J@D|RzhY=J~ymh9}q ziclB)KXi7}G6nC>5rx=3Z!fau@_khoh}Jq~d46D{NpZ(I+nD1%@f6LkoLT{S@*Y|z z`Ihez(hI|ew)8M>&PP5PsOjP2G_R#VDMnZok>?nv+e2vHBtus*eldR!NA)%@KeL@Y zx}*QBt^Jsgj3mZr^4NE4SlkpyNx96Q22y&I+Fs9zd>glL201OA$5sYnq>w$on_QFP zajk@Kxi4li*7Eihrm6Zs-%MvHS57vqJ!bmd0Rs5JE7Rx(c&mvdiiHWM+$!T{x{`1Q z^C!#9Ho*Svor%}!W$ygAy*-f_0Ro2Jv3xlxb#>+4g-GNy6^P+xvq_}sv#Y=}8kAe3)q?v7 z7Xg~H)P zZXsPiRA(zQ)c7L?o~}}&K3wF#PTS3>B;%+Jl#P|!6Eomy(sfSfFvF?uvb0JbdNDe; zl62kusE-prdW{})6`%_AEYV8N^;Q~No&Y75)xIDz9KJ3Uw4Zih5NT}{?2=d(n|=`w zXp-|!5hMB&KA6fw2747>a<5;gFiN-kHotOY_7Nr)75GR1{%5L1{SXpO04w=AMj}kT zYl@mu=yeepaslkZoC|0D9awyS)Rq>L23UCz0gY-~TAaahm})yX=IP?1iY!co1_ZZB zDMl(PUl_{7%|?<+x%--&UZ!ZPVUThMUzcf1X04ZMZ@q4EfRNb&NyvWM#nRmL#$>yi z`50 zS&=F(3(o1sBTq9|TaS7tvs@ly2wU!7@U@w1GnQuIII@4&`GR< z67wPZhtl+qptRk9dv=nnpEFZ?E5>q0>lJb(nH!p=ma5u}7PSkh4dPxFVmbPMd9hm7 zMAZyAXgshRyQehdP)|Wx6uiP_+hVFX`ak^R&XbMpixh^#!t&J%0&3!h_?1s6XBzAn zp#*NC7`#o0S|!OdaAP*Us^Y*|=Bk!(p!nq~ETJ@wx3rCy&X3JaDM4yt%a|F|D@e4J zs!-(qlI+Q&kt3OU+LA=^2PXw65N25n4RWUcJj)MGE!1y}zmClN)UfaLv+YJXKXG&q zORTD?M8lFR^Alty(mheYc@_!;h%SmCGeA($NP)6!;vtg4#WfN8kt6XUZXT?-V$+n7 zoY=R;iNLC`Jl}ZRKuuwL_71%4DysT@!>$0&ylg6q^OL6_KyixakUkItQHuKO_b)#% zJ|kcW2M9-GH$f3HZ~b5%syL(7s69EaxH!JZSkL8I^`1J*J*O3Ve$=Z3RVk#QHSN~i zDuxSfkQaEnUWShQZd^Y5X zY^@oY&cP+TfW@zZwJRI?6|1B~^F>UxM;pPIpyzEC-+vE58^1Zq8Tg{qT3Mr>v8tLV z#UHP>GX;hbweXBi+3Np!d07s*Tz?-y9*wvLL-p2|3d&Jnvsme7)er=LtnIr{b8Y5G zl8L=hIV$~CSl|+P2-u9%!?K18IEFSi4ct(t_@~&b4_a4RIuwD^_Op|G2d;XHNp*}T z8@pnlJG;)U{^P9P~0(?%*@M%VQsb{o#%X`7p zVE7Xb2ag!I0&UQf71kaQt;ST|jxz9adO`#S{LGU5V`arct~pqAln)_bR@zXBFlOxQ zpnHQd)as{)gCC-mtiF25ghvJZM|t!;gE-7nlFNw*id4=$)RH<#8ad}M4$mFb1Ktg^ zK`afbuq-sYWYuW>2VI)MTCpc`ZR9ujHwgGsgyc}C$T}Fu<)zozXu@m-yKm#>SGbdY z-|#cZk>0q&_Vf8>N=o5bJT^Q+#jKM-@{&pC#W>Je7&GGc;2|fxfA+}D>V)`YVZ(Of zQSO+yyKeG$l-xA^cPKbf^iH^Ps)GA~7E`a{El!5(d_3sob^0V=tkIY(xb(>ij_P%^ zXqa})`$;8f3@N~G%J5;;;KCUm%!$W953q%m8W3kXfH@t6=k6Uva1CXP6(mF=BXsbq zd|<9{0ux(!+iGECj#0vZYh{gPka&(|uV|ncHtu!|dUoSV6!^vOe}Uj-Uxk)b97FJJ4f`yj04{1& zcBI44PTHtYK4?s;0Z^NTkx@BN9xJ^C^c0av4we&4sY?BBa~YNwD;$XlpH8)1FUzUY z(pF_QHWgl^Km5&+eC!ueOS7v+XBAuMH_cQpSN3A|T|=9HS>YSY+E+*Ebbx7orz}i> znT!fI)jhl9FDdo9aqJdxbe1Be0O!_MEMs}98}GXl`H%KsE)_YWqo&bnJ67T_!J8R* zF=ue7N6lZkXQ#CY(i|w^>450mlJ9FFJTI}4-zG)uG@#Sr8-C@&y#J1`s_RfBP8I(e zLpwM0OC{)?$mYsCD0V;MIcd0QqwaF|4i{_K09`l>VFeX+C6Z=E5l>=a8U$kyqremcl?_kNiK(e1f8oC5 z_>3gk*~uX*L= zS}{g|w}yOjRt!d!9dhh8Pi9(9^$0-V$~Rx}lX4WL%M&T$jqGBR)j1bqs{3<>IY-En zB&z!HzXV>&GY&8*13`#7k4H#dc)~NWxH){+tZ%(Keg;(PFVyfydbvmU*LRrwI6GwZ zZ{A_VG;d&>R-6S1+BK)xp3dvwuH^m8Quf(r!l_{7u7#c>j|fAWmp*qETh-1TQbs8-PV3S*2nj8 zmN|l6@MchMU-y81t+9lr+RHmgcF^umf;v@f%v+xkgf~(ANnrq*NIE8XDsqZUnaZDM zj!QwIaO&ht&ZHYKPzi5I-zQTB?aD5PAyyblqqXJ63i!Y=(9bb|jtGi;SMA-nY$nq&)!AZIHV); z=KaLYJ)CE5L&q=!PRH~&shz?t63k$M6cWPxvk56RwY_p*85n{cVvy@ivf%qmt>0bM z@Ke>MPp!f0E$}E+XjZ|`k}tuPd5W-G6DaQrW;j_>LzM%U3&{3aS1EtyzYeGT$`y#bxy{s5oEDzIKXi(QhLXaT zR9;}DT%`tk_Dw9juo}IJ+uCzp*Sk3YIYQ$MN=ipQWv+@QK`PO znVOvuG<6PM;C1yVi6zx5kqNlgS!z34Tc{!6Z&UADZFDu1`yFdLHGeh5pR=J?$oBk@ z6Ns2YM8DJ^mcr}RE+H94!0ysM%F2VrEPw`>G7q{Su2$2LOn9kpSS?^^%Zq0Fg1WhM zHEp9RGI;gR;@7n$9#1k!`7GeUjKEqMYTII-(A;Y(z+~#iRfBUYOJcs#40PuPZG&6& z>EG0qqcY{xn9W+ErymKRHK{+nf55?ah%AGBUJ7ycH-C>f?QMgaZ+y#GdggR;=c$rT ze93I(Cj>pl=rO11P#m?;wgq-sO7*DF*@#d1Vux}e2OeW+-jf9O38QALkLvy8KwnZ?}~kTw4fK27Ks>7Y~>Z}c%S81xcAgmEF!nWR_@3pf&?%3BEO^uJ z#Nz_668Ll8j^u(HNV(Y#z{W1CXr>o~g{7gTmr^m)O4TOFz-#+pE@KyXT^yPiyOyg~ z-QjNg26nx!AMszeB+~#JH%~{=CSDKAU)Fu=(PCRwfOTy~h=HfD&0cq@RzL%U0Ig!% zobiRGGUafE+JzYRyVH$lAmm^*+~w>H^;{4D|XBp^+kx5Frb2T1~OLCA}=n+gsy;4UY###U9a$TKy(XH zLmhSk^FM$MD@xujWG$zE$2IgdsD^9bjL!+H0m-K>*Pq~V{>@Plx@_wkzN1ZUA=Y%wW$KP(x*{sW{<_HTp)%eVcc*^)e(@J zCx_Iu(IpJTRFoQ|we2i&sV?zzdCMm#@UNTQBWeaUq{?iP3!&{5EE6iXM*7;sJE4s* zIc&O40z!3=mR)Z?h8tI91VHXER?g2bY2IdqM!IHr!?XhsAmGmgw11AmvmA5AH?07F zRL;lhlEq4dMiu9f9D)MQvEMZiw;Z$+R0CoI)W36MiJ{1h36b3B#BQI2GeV3g7oSj6 ziBwXcK8K6AJ~S3Z1dB1k7-}$-%n<51e>;ip({;}o)2kLW7GDa{F2X@5R&}Fvv&RW0 zVQUUNnt=j<+-PWHVUtu(c+h+~@)aCy8C0ddRfLCH^cFc1F^XEUqfwpucvv)1v*&~) zN%qt}1T3eX9omyf792#peN4LE>*w}YSmAfrk94c<^%{P1^R)JJr&llI~rZDS)E z)HI^8EfZoLp1K%iV!nSmX?e$fTGHqrr57!LXtH1pD;Dkar&yVgTEr1h`&eBs2SL8| z%TBu8D`npIsHa_g0q-?pUZ=E)oV^ZA+B>nS-)-&tS=SRQFKRkYj94!|zWk}z1!@ig z4hK_W&Pz99?v9_nfL+G&(DQV4-n+V4)L(Q0!Bx$`2zu1^oj}Z(J*Vo$(YY$uyAOkS zj`i$gleNp6EM~smxN*afF{uzZwL)(pVI{I~&jZcNGT>o8!Hbx%(#)zBD!Z!LK41G4 zo;yADz5#0uZNZ50$S*Z1r_&m%cXSXc^cNM?NC|s;2$^kk|I=GF8pK`MG5?5JAmkk~ z@Li85*#bc(>b6y#-X)le3dy~^Dngj)m!z|53VPJp6iEj@%96yK{LNGL6}=DD7X`jM z*JWqe-O(WKMI6{6j6y+7-)7!k5}EcEH;UDY(EE1Ezp?#VggC*mvJ*`UI3_WA*@hHB z37r3KzTt$-AW;=Grpuk)n_`@pi}p;Yeh2OI+pHvv?1~=T2ym#oN*$>`PlgYr*O{(m znQuSfRCrds0xKwc<=ZmFW(22)31Vxq#EqS~TOC=etd+b&5<@hk6RMT`LX?Kp5QKpu z8Kzf6Kjq8QH8rQrl-dJmR_GCdy8#>k;&VP2Y9ofx=3yCpgj#7+B}`(`;E0|SXaw7P zDx|)=eOWSo!+(jMh{oCo1%uy0#^r@5v6(1I-El-~qs>QfB-3GJNDYGGXJ;MWQY0-s zEskouqiEBwRy@^EytI}H5YmN@sV1wHYt{}idi zq>QEC*8s261{kT31=iO)$&ROM?I5?hdll7qLIMZKq)2p&wQB;#Rw7^3jas-0D`|yZ z6ij}2Vae2{nog14d|Km=VMJ)leN^z^j-hVoHgEQR*&8xb&{Iw`X3P!Qbz7?i<&l)+ zcQ^UUn-(?HFWN(K%ClWF*H6ZFQ{bsLIa^TtgL}au|qFrY-+k zU^&FeIZsmdw`sM)%y{M`X&mjMJ{#|nT9g?=&xv(Rpd4UuMp#k?g(?z}CgP=v^!@uq z;io0w*dkxI>ilG~oX|E)Bsl|kHUz+yIV*Y3Xd+xZ2( zq4bpM(jxniEi?5k1%gI6(Iuia6(OrPg<6D_Ta#whP2WkdcnU@7> zGC5)NUZ8OwH5eq^@2EZt`tLPfr>$0tv%Sv z0d_Ie%Sz=;nRo(eso>=^G0nfF#~t)kM!0#N2t6wV{t;L+W1%sq~u?=Q?hp_6+&A!TvEE`!bC^N$}E)93s{`GRZ2^M5}?ZzN-g z>Ku2sc5tRt>B;nTi3(B{uKp$$sj1_X&MG^Hh#G`6;r&wIkD{&tjHK-+(j^?!OkfF> z3^JK{9+m9X4^s2wvj*v3jrNy<%qaAQ#gK|xL0uHs2*BuwlC+7vS~KbO15==NLcH{%^T)m^ywDN$wlXSAA~IrNnqY2hGywP& zo^Zh(9N+|F*Qb5Uyl_uiJIIkv zYv}t)4dBQUOtkB$5JPgyi?WJo76Z%8v#f)ia;2@7R;g?e@v`4HM)z6K$S6KareBLv z!h%P|#fYRpX!#Rv$s-N9WyS1{qQ?(!Lp(>S^+~aegd-C%z2qYkg+JvjYaPXU>}J&m zhT0i{#g>c3Uz`pHb|kR-PSD$HKzPm;tRC=+ne`XLY*$4>7NumcFr>T)2S#M{N}J ztRhPjMiqBZt#w+TZ_6H3oi#aCp|rEd_OurGpHzS;kiD%v==%==`caO4s++!i{8#H9R|a}4vSXS zo4+nYJzey9P=|D!^insH4~i2f_qhSv%h?vNVG#D~@kv$&Y7G@Ci|&B!R@8G};PadA z%(yLtHr>lsEZNMHCIfE3PE<8Uk?j;~YB@jeRtSQ9;)(=@azl$aXpsn;M^L2?x&#tW zi&12oDK^wkq}`zYjJi_#GA3qUa${lB6dzL5BkKn8GY#a@qh_kel5StH!{7c{E$8Y> z9grXd^JVq_{ZXEP9N-pkm*Px8lDy0~kI5=@hw*X!L%1P6Ws-btGQo?5p%$wocJklF zBFc)slbpk+Fxt`fscmV>l%yZfzahpu@UnYHKF~b}qK*^k%-O_!pI#4F|AS217mpv1 zsfZhy`+Ylo48!6q9RW}1h=7PgfAJFmg-MS7dZH~<`fL>SK2&mO!1Z+@dP;I=l_3uR zg;Z-~J`=v&+;KE(6q-4_ZhZE&nSM}m`6^c$30NqBOV~7z+Cc(`+lYN2`|aMa|MOYP zfCVxsg$9+V0HboJQYwH~bu?omO4=c5@{~F{yo-m~Um&BhGSm-L|MAS;wDc66&eQD_r)wKY+@?vsw@q zax4TBcsC^8pVc(TPIzk?-}TzoEyve|d?#IQ`m4=O$j2w6rSRR=Z_ht{qn{bF(vAA3 zYpRSO+V2lgPIuEXNW$DbBOR>F_>2Z*kl5d<%}MUfjDHauPqkp%TFF8s1A;7Y1KLxZ z{_c)T13k^e&+O3FE-VN`!ORj%no-RC_*PSF@fl$$RjRN)Z_IHOWe zT<`(l8bu!J)&zgRH=^3)`&Jf*FKf)OP3&Re-vVV^vSIVJ=`c?U2t4&kh;A~s!~-6n zW%6f*D`VieS%}8AOwq&cGJb$Q-QoYdYidFIC)l(m&d1XAJ1*-+xumQlu099>#I=ya zC^k%`l}mZTzt(jh8NxFqH?b zw-)o91AUTXA}v9pY8R!}0{x4$#$dS*HU#dgOv}ReZIQ$Id{&;>Hsz)G;VyT_Xu+N? zjUEpdX@gyt7lh1n1Ak8yAx|f&T<4YvbC8bB1I4n+HZP@}@*JVF5)4 z%+Y`LLTtvU%;h{&`iz1ukRP_le!Zm)ZXpG{x&8AdvGcqDc+uJt9HhfZDP&1Wfi(k` zWx*rABw`8RHRt?(O|@g~iy#qM$>|}E#WFL5yD_s%ehttANPV=SnJJQ#P#8HZ6^xvU zek_w!K`8$EsdYOUAw}CEFbIL}B8OHcp)GDtcyj)}c&=jP1w8t}JNXG&$97*)S-lyf zapy`K(hEAi3coQC!$1_uj|M6f|V)}}G zzx%s=S|#94VvZ0GY9XQZ$1*IKMHkl8x$vh6K28jSCrW^?mqW~j{>7g!ngut{RxbG1 zL$=Apmr4n@M?31i9!6Cp`pczMOP#mJExu15mu9>|X0Uy)wzazaouv-r+^yaX>8Pry zdC)_I=1gPBl-LmbI0Nc-`RTGVzgIZwkZJwh0JK#6VNHD$XN#~h`*~X(dCCXH&e};w z{Kb@(ub*PIihMMZW=_q1@tI9-RSfEHFU9H+PJsg2swiZE(@7%T2R@BqA^a5D#oso6 zsxjHSY*aGOKIZ$UQE_*jLclRK7PbsTUx#QxL*|xKO+EZZKy?&iMdV$|ScUC=@Qd!uzOxhSs9Vz!ZMHG%#BfjL&!XXzBMBh_wKoA_{~KoIo&N)w zjDz0pR0cmJx}=I{mSJ{+_L#K`S7A@c$P&jG^ppwIF$>YBBTODG-Pl5tk4rR9)42=y zq_@0Km~ojKa2o09;j*IvK%`fw2#v-gx?r&>S-r}3>hdT>DoMV&7{?RrEd|{!U}~Rf}*GHdOh3k4ne18VwC{6_Mq#)I(eJ^P74*JG3;C3 zR4L-a<%JA%KHu)I!+_lC<+;JZ8^CTdsR0Bc+rxYCs4Qn6y-UC{^-_VNP13O+e*Wo z;lL|>CKR<0`&lr!8fZD6ddw|yfAVUf_;nXw*zd>W!hqa1Z`9DMV2ehZRdB?c%dBf} zH`T^Z-;QW7)oNu>RUVO5lb04F$)xjwlCT>Z?{Vx8cvsP+!wO9)H$@`&;x7|7l=HBHEhQ64O@_UhZTV|x z>*Bya8uiuZlxvxGZ~2ap$FImldp=qej6(h_UBU$9-DdyKW=Dmwz=HrgjP(tdsz*>{ zHzRwvSEz^6xS8UY1=e-vQdpeCHj6r=Ln)nlVYy~rftn&r7zQ($-e+nZ3)IqC=<-+} zoXGL55)HuY;2+DLH#7kRuk4U;q(>yXk%rX#$XlfPFgUI6Oh;%ie`I`#0M_u2 zu!*i`G0muNo-8U!ReU0f7f9H|r$6Ds>eN$zSj#x4))L##1rz>>^kdG?6XLI)zC=Bm z&2=wMr&ecM;d7QMC3}jYyO?x(zcmnT)-Rfm*iqKfggBXP(aE_wR}|875Vh*P(Wwv zM{{|LbUx*^EH*Ch0W^uXMk0q<6C;6fxuq{^qL&tP$ z4r}_n|Gj?AR*>qGwLJRW$a#F=j>RvNE6o7VpzjdYIO84+}A|1+?{j@iLLZN^BCf)<047gh<|S>UvgJeFe-G22SJNXqBZoVy2Mbt z*}y5OBL3|v0V$Ci(NweE<#G1}GwC~1-fMIGC3PDD+7~vJW{!rcyBmwE z{H{MS6V{SDYPe9J;Cc^dB7x#Wr#9K12Oj^CQU6WF%{6ItCV;2AZ~O&Rt9fNt4~@2g z%h2&vD)objKl|jAs#=MrMQk3#RMV;wF5|n<1_Av2S(Urvc~1VnTT~R9dv*9DmjW2A zi79HvHB~7uU0wu_25MG}(YXi{-bqRC-#i~EtxYiTv|2@c$_sa_IB&EqI%r8h;1PnT zky9cuF7-IoM}cefgGbKv$l!AN;1Bw!Gu}XSS7ySY8RnwFP9${LP>NrsR;?QEiARBe z1|VCPmcNDf@5;CBQw6Q^*iXQgVWUP7G2hVH)m>Od9Ms=fNwPxhV_x!m*oq`yu%t{y z_bJeE>n*OiCn+(#2wF69N8SYmN1I>pLmSWr-ch&->;3*OmjDgr#XnVX_19}y>6R_i z(({2CfFI8p>1ZBB!s3Kn;YfZvMu%lJ`)eoMuA`Vg^=GC;(t;xdS`=8#j3r5i6|O}9 zhyIA5Fv-foHURJ2oYtyZR@H+VsS||Oftt>?W$3HO$St3h|F|n*!Ke~F{%bU<7{2_`Cx|M|Mz$9WUNf z#c0!e=t8G3uQ>n$?BVw}$JD!&j+3G(Q-R{dQ{x3?J>cX0=arrDTGR6A&&0v<9&Hps zm%+ClV(gOjaGI!@6x(X57!n+go}uuDlCIeNm!tb6dtQIbGwE_XHs-cMF+cNX1`*kD zs{T>kzY*jJoq`3w9+Q0v$Y{5pe-@2vKcYwKb*5W$Eu#=l8`sl>Fi30wPugv61NOQ$ ziRkB(VySZ&DbqBMB*U-mJuAi}+u8}ZH5%~h+lFO#s|iYXRLh$gw*L-@ zfqe#AvgG@VLZ?#2cdXj4uwU~2KLD*jQom^p#o&TkWdnS48q&Nto0-alQuCaR?HgC& zOv1RVP<9;JutfSnA{0mP3xNK1?0YV5dG0u9Lvf5BGuCpvK60c5pht}Wj9(qaF_NkI zHRz2I$nKsVuMHcaS6(*YJ%XC3iBJjT0J8)vC_x)-02)Kfa`ebWW^u?-#iFpaGDZ8E z3$&{=Ue%F+von%6TWsa%eq8~n`Qwq>jUFa{au-r*?nosuZ#m)bHDOD%F)c&`Owv~x z;`HIpe7)OWsSQvnOQ1PyZJ|4`^|}GXhQ=_53%s@?)0aJ$tmz3@lDlgF&5e3^ahvX7 zxjqUgUnb|{d~Y4JMU&nhYSb4uJN1Lx-TM07y%s9tD$j9wPpOWRde=)X$rkwbLz|Z~ zO)uAHZ*}R%4-Vn9m!4 zX0cd@B4b;E1F|~!T%tbX2t4wqM=*Hy>ljaH2WO#IPP$wzlDRug0XoT)d;^uowHjZ5 z+8wL7Gs+K7ecB#FHP%vHL&CR)F#ZmJ^VfUR^y{G_eFojKo$0v^>0Sj3;%IczrU@km ziQHY5f^XNl>Ea3}n!#8lKr0Y7CFQgU7ti327a2%_gX^GVZq- zGs{Mtk49Y*2|#C)?w3m}f$ek?;7>p1h_TRdF8b!v1pVKSnWSG(9M1(1f7^@v%K>Pn z=T~1H!PE>u!^MpOyk8$ZN@D@)*O;VVeR&jF%)|8Z%dctV=;4~d2htu3t`Cd2AX+s7 zSny?`q-bx*)nM~-buEiUkLpfTD+0dA{(|)((XE%ttk0 zJwf?cysyCZc#<*N@)o zp^vX0(&x8^^!}w@{o=`0eSYtvl0v-6cNm39#dI=0otQ0?^JEhcKaPqeV~n6&m&@w! zIzfN)8R0$v^EaO)|LbA-nfZAdlVF%;Wb z&N$s!?GMMyRLdf`FLk8pFtYtwB0PtM|1kTz@SnN1!uq(nj-meW1SD6|09$!36w!VCA06 zgzcyQFqEgC?M>JF&E9GYovkgQHcDs0O#}E{=qfDswz4b`-&(bpWhO?LFkFrB*2~yW zWb>Sz=(tw}GmZPt(xE)2Xn_AlxtC6$`ECj2%8DiPDxW#p8Vg9nO&769Hm%}yEH_PH z)2t~|G=cx`KA33!{=Fa^g)uJx`rDB2Ir;f>2hfwp!95##1D^TcOwfkTcy+j588+O) zKaYmu7zZaeZsaJIh=vAXx*qnLUVdeSUIL_FdTBUd{VLq`tMJw%?w?0e#D^s*S z*+*r*j(m`5iKfyh*enA{4x7hgOy&gOLJN3pn7h`-`cTERR1LTf>moeV%=ep;0<|MO zNV~EEbf7SlOWjbWzewHh$kw~$F!$23k`wPCceu|f(}v66cb>L41HLCV=mv>)?+~2- z4i#6INsv3$Ri%r&8+4#;nY!u{Ez|OsclYSwo9%kZS+9$wz7 zkKWv;ll!;Hk7T$7q^8Z8Jb{MuiI$qBSp@UU0Gwx%6lYW)QvvJ$QGosi3El4i;NN|k z%8~M~;0#bd{TZNbfcn!cee+eSE^dTw0I1$+3eg8`VS0>G;#`TR`cpA{tPg>2j?sg* zU?$oSt&LfXmU)r-QA8A>g6Kkl(d09WJdBy>lIi-x37AdZMJCQX&*`trj}wtEoO>ca zYeb2W<2(n22I>%KjNA1-x>n()qoxWg+n)CC2>9=CebyeU`|Sa$4RKX{_$6fhd#56~&7k`};tb2v*xmVKq%cVmP# zTIYGnV|m=m1m1xYaa+8L-X?8vJ&ok`+`p1V^P0f9+QFi7eS|$>|MPG*&c@8Lz>=nC z+EylU1-S#W&Oeh2tp_ibgwF{U|H+s6+yV4ds-7l|8mkGYHVinS|V|lA@Hz^p*7~R44m}xaLpe(Ld*S;S!D#OGb2Rp$$r|H=%Wo}dbGtX(N-pC z^Rv#h05Tr}u_62E5Gs*#m0`No8m~v)%k_wf*H9Ph%91pIq2>xpzKcDjx=cpKMOseY zW|BSymwaqTm4@0Yv^%l7qSNGLhKz#p(<=R>m$NkHZ+o9UH zyiGs*a8OU)+@(*i_aU$A(wjt~Ufzpt`owmAZ-YKOw@a7zt>JOj>)OypChTtA9NGX# z_vrmM2bB^TKvM_0Zvc7*xx)sWXA*5Wop7ERy`Q8`q-k%j2}Sq3RG)OjQuOKzK-&^}vVPW^qJd>jm_}wpe|YQH2Qu|J zlle_*R3Jz|`8|L3 z2Q$VaGi74`<>e5ItMIoU1?hK2)$w9U_$NW|f94-PcL4py7@A1{=!qyd%yc{&I>X57 zUL9s8Xfq+333`-9z6QMkK#%2i1I%O4Mw`O`_P7zR>D5<;X%dz7MTGtzYtB|rS)5v8 z+?iwuZ%56LjDjH=#fJMEOpuhcPG-`c`PwioqoHGGRtZl>+>V4bc5yJ0AWYFSI4W9 z>94akOg)VW8rn!4X+wr;bCCb>`)?oL#G-E>Q}1S7+rLWhooM6O!g8=yo2sJKwK_>} z9ck3<;|+TJ<~DutcCYRZtziN;VBP}dQLodxYIOT3O)Gu1s6y&>YiN^>Qfhm7pjAgZ zSZb20cX>~p-aNcT`AOlH2J)#;8PixinaTMnt?_$+CM13e|9=0kCg^_w=zpa%e)lBl zDIf#P2ArQBe+>M8gO~K%|jMvr;oO9g@jSY9Jd;M zi7$1{<6d2haVFN8 z#&`@|1Pm4v2nVbRV86$>kJd^ee9w*zK*6fT>Obo&5$_VEBr$=8-h<4`%t0y}^ zJ21JllSH=(706lwn3@UZF~>TBnA+o935WO4UfhF+2~s*+5w5$`P~Gmx)8+PD?I;h` zM!;YLMw*soVQN|ys)pP!T^-n@pWi>l1l^%q1ohuNw$8FRe3vrW)4M96HF9(YY2SNf zL*F~qsE+~Y_gFN(b8J1gQ-cNg4s9v1C_GM})gIbf%I_3ej{SVy*H)sQR&?CE>zKB8 z=q!MpLvq|qC=A0hPX(L}onek?946{=I^g^Us)1*HVE>@vu+SCI7y9h!^lX6n4~J!9 z{ugjIAPqoU!unYj0?fbrB+hc^i&VY4cZv3KMRIkOkKStZ14#XmpIK{PCJ~|V%*NQU zHO`KJBiE;GCvg0R!U&~o)f@Ss7XY1vfhe5J+xApMQ?qUjX!95I`@OHWgqt61x#-phs#X06pyY6ZF$5 z`YAvg)yAmd!!&yMa8w(C+cK1i!~1+=*Tw7`7#)xyFyA%j6nvd{|KNBNdNZ%G~i(2l9`l0F?0sJ^Y5o-1I+&(oS`^A zVd}H|4m>pUhfyRLkpAXzqJE3J@a7Iqa76?kA)mWa>xs(3pH#Ye+KXDFe90`uSWmK~ zz@?yVUWx>5@$~U>n>J2fvjJuSX_U(=+#Y&%B_}Y zloWRAfd@VVK;GbICkx%wj}5$r4Dm8j=FS#*=q!@Ev!#x@f?fO;c^}Zj3ULIul)L4YzGW znjYa$NCwXm0@a=FY6g@%L}w~-Ew_`vEAH?ox^i-y`^nw- zYDbj*>R=|kc7TOP&UCl7EI3mL`R~O1l8Y|h1S_qHwnYKL@-PNf5hsgEet#v8(@BQM zi9CC)2_d(G%;|2f67tC9HjB>91U>b{o28)*1-bTwKF#F&g*Xx&w3bOc*3nAs)joQs z&*Pcz*PmlTe%52Yn4rJ?#S#E>!u{j=ekhYcSAIFEpTe$7I07#{jn zmVhHHQ#2rs@?zwxFDt-hk#?6Q>rio=wpqY=38kL4EQly?C8{)LK1Hs8vlZYomgV6% z4)Wq%GK#m}IX2U!C1M>Vi)t`xasn$p13Ilwr&{~&MnY02vv6A@E z3WAST0@wz$YbXV%WAon(rP31aY5Ce3>8=fc^cE)a?JOVnpkvU5~G! z+_>7SAH9DZez_Y3#ya@pMs&{wI!#l`xxP|eAFN@bF4Bdb3P3wUUG?d3*y*ax4b}Rp z1g)>2U8XW!@pL)*684jm;H3t_mpYqLbQ5Xck3Tx1|M>My{lhQr=!Z|v=$#uob^TJC zE}q`1-W{tI8@d#E9h8RwW)_8pzc(tGXMOmd0y4A)OTcFW^e0do90r)5E)NYI0#I}O z?g?D9x&31^T_@-_??h>Lae$5#lHp9I#sHO7+mWdykQx_5Bxo-3w&3}b6*PCMqUj1; z25@`Ngo_5alW_|+`p(g|FcRy~A)jUvFDDCQ`QmA`YZDm?rEwiVd%rc1l)NR#`5Z8j zFx|o#S9u$S#{yzXO(B3S(Wd}3;C`jlMf=ItC?&)whv#k!M>&F)dLvH4t5r+%s{`5k zX0%eopX`=#OLlL}s6A`IZORbbdlG=*0RR8qN6C!<06+jqL_t*ToduX4)!F`2Ebh8lcXxMpm+Z#f-Q7Kb zK!o5BEI1TOfwokj#i8!r{_9Yeul>H3-2dM*n>TDi!X}V}4W0M8&NcIn&zU**xzGK` zbW<1mz4iM)>OcSa&lyWgOo+y0#%oZ&-n#Pgt8~>B-F5jDS5dm_W0%={4_(Ic%PzlC z-LLGSo~-M^d__XI?wH@81LKOcr7B$ua$_|h>{8 zH)Z*c)Viu{UDJ}Mt#zr|){v#`4cW|RYFmAlcDLj^Wk+L<)|Mx0ael1k=0s~|W|*d> z1v_PWdWbWfkrApnSrM9-6QxB3aavlGpyee=T2YeBe7qJH#A-=loE9>_q%=vJ8#8pn zoN7I|eVUH$nWd+XY}N~p?$f7^tkoBeuG8o4UZcH>%5}%q(YkYci#~pEhW0P5*2;-o z>-z_-1|P z(QP`kZ>kR5G)?zDzFxQ7wNzWSw`%RG2CZ3Ir_uF!8q%wWhW72P2%iy(r{3P{S=lQJ2jY@^reb&P#%KWAU|vHjkDwNd|h)#j^o?3D)T zTW$LMfppzGHd!~e#puS-aoSSiuO-=j%JdzmQBfn*5IR(`L;5MtcaWB6`)f?ha4kz6 zsrhNX+FlZ<{nf#GXj-y%*MzDma=7+Y`RlRSsru~79DQ+pv7TDOGZ+=2^#vR^J%H!u zr{z4uYipx)&-ifNIWbuW8kwJvs9W23_PK$okMhxsi~wyd4%UX^aNW=nqidD!vMgLX%7QdAJ6y~21NHFiB;7hbUTX@2baz{V_HbS6%fmGz zE0p;N&Emb8kfrZ#&(;E!&DdTube<{re4Yk8?O3T zZ;ekJq4F@VPM=q2&+|g8w>IzoPG1AvPQUoWTiO{w7le3gTynTlg9Fs#%I>-XFg_Ka zudwA;8hH26m6!EUZECD;o>8wu6RNbKJWI2)aL#M zE>rK1eN2g7L$#(dOM3w4%{3Vm1LbT7pm#Rq%0St`dUH*h)|4h{0l+&eBSMpsf;1t~ zkEy>Vrvw7dA)1;RM57JW-0Vm#$cxcJfP4XfynyMPoJh@Nzo{u9nv@u*@yR|Kn-s`B zhG-5zzM(B!2bR=o*ZdmYwQGhRKfFMnI6PlBZD`Tnh2=W5re23PHfzhAQf*(*pysk< z6{d$PB|1=nBZnzIHc$il_f*dwbW~SeuKs`z#={S+)=&w`V)HMnd^1)y=!#n$V%-wG)t>jH>#yFPOB!A=!TV}b#Os#rwv{X z=mNZe@i9PFuQ$I7ppU&;qqkqH0ek^x2gIA5?QGj)uNk;|N*&wPI@`X@w*P*)O*c$W z(cR;DzO9j(3R>~t_SS@GT#~m&Mf<6Z=eH;)L@V=xbls>}y|lSRKfI|`kIYHY)z#6Ok?yOR zd11PHYK)c@1#4ANxYKdmKRs2SUzMpttx;N)7oZ2HC24C}gcbw(yBcCRFP%zx7}x5h z#W_LRTT4eyXS6ggR133$Sx*O&9i(yT5n7ZPqE_xHhIhIw#7jv&Llrn=paO>u?DTnE z2mtQvm@Yt{8E-E+fX?$9u4343RYZ_{2KU$HmtU?c0Agd$AG^%Jx(A@$LziD=(<_u6 z8KV8u44ligwmM6*(qc6Z7Typ_;|=yvu`$b$L*(7NhkC%AdtY{$Vnz(s;vyJxW0p2o zWx%*Io#}>(G;OTre{Hrl)ud}pc?!%o9>9;*Bmj0i0NWfnQZ2DQbO3%Do!}4X1_98) zngzR=lM}AFd9dg_fEuPfJ0o0^lL9m@fo0yeA@KKQ8K>2v}RUd$P(7-*!xOYwZ9sRW3_NXj&?3@)EGtui7>mBYbNN%BkOd-U8{8D{tY^K z>k_TnJWAKywoC_ZU#@K%#_0O_bz0k$sdP(wS=wM7oo7T9ZjxR(}X_-SRXpH^jiYj;H;EO@vM)Q0Ki z<|rM3@!kqcog6zv>#O4Q`u18qzp7Y|&PdWNqr;N5vaSS z#p#K;ak_bQsBUV7T^B~EG1{Bw7oZllotGY@1!+FIrXgA{Zpznp4>syk%d&La=xA*# ziBKCre;u8{VL*NENqw}hYweN$VjD*93bxj zy*hnfojuPBvEBvfj}SnodJk0!fSTp+rSu?Q4TKq9hP=`3@^=8*7#ysSWWUVSq z(FU0G>e5uLC{EV$;v`D4mcVZ31I*J>!!(*k))M2VQIuwexJ}W%P8r4WaS0)sm=X+t z2Wfg*C=4nL#vBIA3(~|yf3?PVsR>rp6g5(f5dbs5QV}v-B|$?~2~aly+>>Br>&E12 zc^lU;rAXTsR_ic8xp7{#>S18{X+esO7^ncD(Ky6Q!d7h1lM{4(bC5P7Z?ppXOA7*ZXjGhbRD~hU1#1bwUd6l8 z8XH6h@2?d_L7GjcPzO24MRuB)7N#Y+zM29#s0<&f$f5le=RZV=zC${FUKav@J3FQe z&>tayju}2sk?4vMgZn9dB=cUw)c301>h`g#90qOrbGL5Yl^*J^YsOXR+O`TUW7t0} zjh8(tNHt-;DhHU0c#-3M25V?{v}$CHJ}~Dr-{CZ%L~W_b)!K>_KsigR$}#}tRP^OU z)+I2Ej6n;G0&K%HB`H|r;)4KXKh=bLb8K&bf28Wd0O_azjiLdy#)YUYA&^EK=*SqP|Esa-YZVccYs$xK)GAB$m`Qd6nlWZ!9Lh6W77L9jM&)(|U{R;KzafSLJ;dH;e zn??@qt2Bn=4Mj1UGBI131>y4Y?yLU&uTnt30998+XvMNJ-F??09ld+4rcKP!@;OD? zziYB?yKM>jcD#H$gL$xRk;42D1@AcE%bZ;$1COF)Zpa&)<=+3dB z=*|gRpU3DV)n6Y+bAD<;y6&2qq{EFt+Fll>#o2&8&t(kHXJvku2yvcM6U=#XdLYt=ua@P8AxVU_Z@VT(pI(}-kIzli(Mc(~eH=P*afn7Ss(Nr~ zj&26v$1uN`k<@Kt6ZMrHmHOm@G~G2Jo^7MGqA*m~Hq%k&1Ovq0T9F^3De1xJ*}R(^ zXE8F_JVs<=0q-*2kK%AYEy@qmiUQt6MqwF#$bc~KvB+(e=+R}NUWytvSfRrQclx|K z1Jet!-UaB75I~R3h*J_0L_oiO3LQ8=30^}KG zNgCjspm`V-XQLrc2k6HmXN*Y*hBYG-z?y3!eN-Mgl4Fm6{UT9>!)A~gngEO@8q6q@ zFVHXB0Q1&3WDuCsC}fbau`uUIz!^ECnnqLuuvaiG^dG8x^uv7Lp)hHV32-;W`)ejf z#BEc{HE%+pk{HtFa~;(*OatW>0J)_sTBFKi)rL-N|BJIjndiA_gy?f9R!JaR> z41gZcQ>ih?M6mDq0Pob%=^9;z+|it^oioaG`Y0=U3lRItj?+c(`2Z*g07(22?yR^}+QMUv1u~$susMnJ_iXG`- zTKq6A$n-;NHhmdJ3HVM+V8~w@q@y!3b>GAo-O-9sa7LE)RwG})dT&F!eqw$G2ERn@ zt`5^2QQN?&v^z0I(xFuPEnnNc%D>q8p7%6Nni{!nG)>1l;#cXTu zPi~+W?`M#-2eD2mtQvm@YtngaCR~WwzEf zm-4a=*T`Od6f~f}B8Lr-58esgx?LsTAw#ueY=!oXDa1=60pm@C8Y28vX~w`HhJb)y z)bJtd*S$Mnbs4(z6^b4@L{qa8wH0l7Yh@-w%M1*Esg9hnq%aw9j>FO(ttrSE;}b*G z5{JeaVFoB~l>^EK%$`yKP#cr3F;F$xBH9N)_NDltP1E>cu8kPz8Uf}pF(cFh3#-P` zZU9{w>;-!sssg_u%0L(VDi8^*HX3{}0=1nZhp9;ZdExhh5~smPB}V@Zr!D`GXe zD&a&KQ=RAlbYW(wd`Aq@$1r+!Lyzxy)ny7B*3x*}D#%{mJsVMkAmP8jsD zS76pwP6Fs^K)Su04A9N`_e-O+y(M0&@UYm7_ri@$QM#om1kE`>V=d^D?6+8 z(7YU;eJFMXAJ{DCV&C;hD0^z6b@#+1hyA{|u~6T*x=L^Cgbgpw0C1zw#$y2EKtOhw z4vvl2D_cu3N=E5$Yq%bqo~5r}H%edLQ>&v>l5}lTBoamt9vRWv0st@13sfDWum(y? zf`NRX7BNZ~m+X)16{ux&7HiFjhz33X9(gIZx;j8@M;gAS_ zmGaINg!s7teP%4|l4~wGBcbVO%c@{O;~P{Q7AUXYz2!TgpTdR=RwlB>+D2U8n)6^d z(Q1ne1tP(`qxN&~!93?nH(hA0Xe?f|q|%pHIRxa$D2ns8j4j7=Xe zHK8L^gT7pgoY4?ILZhRGqa*q{+F=#T%K_pd|G_Zl!45#@Am8M94_6_EQDf3&fO>P1 zujUuWX<}sx3^-0rWq71i#5v$RwkAmi&TW8oLs6tM8RBL|`KviAQcIiCbS)km53Xy` zr+19gGn?D=_^Kw|y`WA90po4;Ia*$X)|`c|o))bM325thf;2}3BHPdrai7*%6bFpN z02PU$G#Ah*?Xbb|d#do9L7KP?cf&XKwCFRdi}cLmbUm{acggy2O-G}j80&}U zMVRiH7_aN918{W<HR=)K#} zf*+loqc88M)%OoK>-#sf=qtM`_3ZL2JvcQ%H(>H5+2Er4^i?wFL|cxTMc@Ws7=<9eWt>##xc=nBvfHUm5jQ6o3(go-)iNf!3 zQI{M*`@xjUBYk!Cgc@xhQ>k2-aSqI2Yz8lSD|#euakDT6wnPR2qzn;lJ(7kQ149Q5 zRBw!jS6+4nu5?!@uzx>|ON-Rj#sclag>EaZbZha{SXP*%+33s@6GH%IqzssEBj>CI zoXdiJ0n8C9K(8+HXUe=u5ru$tQ2=1dv^2qZ)JHS0}Ja7YV`K{WUUxOCpN8Ew=SyF11lT!2w?p1iYDE^q)vw>;gW}k$_BPy0?3=2 z-$d?nG;FOEKxpA!n`z88@-W$@oDL|*XOMHxb8{1P?Zi^uF{eRyo)v=zh>vT{CRum@ z`q<0(GrwHN&1>jr#lZjoLQ{uN?H{CzloJdBF7E z@ll$V?2XG@qP}{tMW0(!q!+eS>E&(px(h=PC4bAzn`B}IG;#q=M z&lFtmre_2r&jf2K(#uq&jkeTCV4(q z3PHCXodOfA!=Jf6R~swSv4$t1HzzrOH3=!htmJhD%rM|elQDSNi|`(K2cX;M^8wHT zzxHAv?I{lH1ysuooB_EKN;%#cRl!35ZZCit_bk|4BMr!ayEI@ZjCqJMF@&ZJ@2{jG zeUv<`pVGYsD#L5AvH|ac;Gs@qY=u$H#7Ng%ma1kL|HSH4Ep5e!HKSCw0m64KuGP&m z%XG~c{J3!qTv-y2HvqvD=5w7Kp$W(|V_;aLkZPJRoHn6#HgKJdu>5A&Rx7%COE~PF z4k-_vzl!1VhPqtcx41?3F0I#{_+{VBxjNGqJ>cvBEt;|E#(Mc=_H4}Az}W-PCTaZV zRhBWe{cO3j4M8gA2W{RRFWgp+VGJYOjC6f{Z-YL*G+&FeMrvzClwR6ar%x`-(Q7-Z z9SPxXB!uYz-?(^hMn}Qg4P(Bg1y?%s={fkS*G3G{j!}vFI+Df<8;bS#%oNyljP?^K zVw&&vk^o%lqV(MQB7OHzgMM=JXc+KVf?4um*ooRl5XmHbu*cw*XTV&BH_2)=>`yJp z)hl>sJTW^N7rHDxw-$H12?>tj(d-bD=u9S1%y>8pnPy2YL;%~u;=EuL#o{KHTcozO^)p-9Ijn!f(Y~{Y= zAtwcphKhvfPM=q2&+|g8cQxoU_YIdEKnEaaqyl1-0GjDU6fTGHZf?lO=|2gth)`99 z1ptIT%EFSJfJ6|EzU%{2?%%x!E@s^w?KxynKeZ*rXf+IU3&6Y*FO5YGFvrqpA~iNH zh=2fpfY}f2+H__NfV}X9FlG-pJ4QSVc?HNO1->@?Z)efQpxfCr+A)oy1ZG@}4(P}r z0CWXFTp2VNkRE|c7%~R{-2{X70JMR97P@f?z?_7EFL5X!ZD4Ic?LA02bN~ft+?8nC zqca(@mh9MX0>Q=P+N+gR+*fE_=8z3+Ww%!2fHo%G-0o*!{ zQ^)YP4t7-sFgFr;*Bmlbt;jEpmP&1|NY)qDR_Hlg-*z{~ zXm-MIePTg@KDD%fXuv|ixk{g3laC7?fj>wa7T|IF*f3p-k#HaGY%9{dait4H5*Vp3 zZK&28o67Yt9v=5kih~W~c~KCcnXu5Cn!@$swqkvAe}leveFL&ai@vZrSNBeg)f&LG z7U`)Km&v-QVfeQDYd=i-IoSKNtJ3wr&t`TW6Z3I#`}lujWv%>KsP3^ zX)XrNG5F2TAgF0NBcurLk($`psEVv?rAI`ejeBVcoorEJ0y2h=GUzy?0{oRmsURA* zh>kxVU*|B$NZQE3&giGwMq7B8Wb^(d`r{{E-`wf*x)1=|*)d&!{s;kdAV$GNfN^|k zw4)u*%tL=mkHj6#2k`R3ct{BH$l(eDn0?uHXrJEdj~{SvN*{ctV@3?sXux@SNhV>| zNrYX;YgRVEoEAX?3B|jDp(EgI?rmj&XfcMxLXKOAPjx<8a2{Z6#bk#($J2s90G1m_ zn^tV4fMW7T5&M)rkd#oF6eKqz{)Ruw1G*dx)A zF*E_n_2$M02-gC})!dhzyB-GC5Hc9{JOp4Kq!#9z@ufC!ZerUK?m3iTmtwB<;J6aq zHM{@_I*R+8MHWuNH~LPzHa_g|*{v>Ik4{V0(+gnWlVY{KHc}1QVag8+!oX`j%NTlLzzuY+ zO9%&Vh{HgPjMNN+pOY1?qQJorjX>VvzKRTh9AxL?MwzXQxMVFVj=}dl0vW4brRmv9 z1EiAz1CP(R5J& z_ZSRd%W<7sjc@c441wmIVc^^b%WT33SQidBBWaXy%p%i-0jUCBat|mQ7@rQPO_M&s zs*leXv9HM*o?^OmC5@;Y7HkH=T6E}Etm_Uy8<6`UW1u;E*mKN~zKR}nyb!7zHH6Ly zxuc4xwN)5GcTXtOp0S16HM&510Omcd`GlZnBH83PlFcGIujwg7*qJ{zntTiQ)=YSN zqcLbYpf;HMXtdXHcsxviZH)z(+l+O=*6O+cl;K35^|)L$1os>okNe%Ua@{h$0`^>` z{rulO>MQ`-@@AX^KpT_x$Q_R4;Q?|3=vOOX(8i)`^wy^u_1O)zounSTG^^(_!NGOi$Mr zR%PqydC5*ku&5wZr3rCLj!RcPUKrETakqrcmQeSz2*obL0Gm8)2=1PJGzTB&B1STe z1jWn*xTEp!&rXO}c}9VXl9Dy0AXROd3987+$M?NRMQK^ei%(Hzc!ZL}!;}@Ds1#(3 zB(DLGm!U{{gK#w+tOW02N`Z+d;te#uyi((8$!GE&d2T+ebuK`ElmL3jFnND*`e09cR#{_l|;5nUSyr_qrS!R@!j}9YaSHL5CCCzqf)hjwS=n<6u#n zngHi9$Qo_=+KI7mH#tFeG-2ed&(N;sY`jy{#2J*Gt4m|t0uK@N~4a)rd8KZiTU z&xr)fOv1}x3ev|^rqgi)oQPZCXgmQ-;;7`h!v^)ya6DdW7*!k?Q%rzGv2L7NhJ;e7 zYsZ#x{EAK+yj~+B(DB$fS$95(8NUSZQjWd&?jn}yC5(p{72if4dHW6I5VYuDKUu10 z*OcpN{EfHb_q-hW;vS@lhsn+HnH9N6A9(l)N>ni^_f-qdWfKv1C8Xn zz;L)MBSed`L&?jL4qMOH^DFZ(3X=4Sz>*x?ISVs$H5L27mJ)p4GZR&r7^At^0a~+C z0M%@T1E%wlH%2FV6Xn-Oi*bw0VssUU-6S^1U#Zd2Do1i_#*-)~F-=*?nJP)iQc)@Z zosy&cgmmSzJU1y-5y*K-fVBBPr(>gu9MMlvBl;^A7u3`M0-b8=kvK+m`n*02kahw3 zBLvW4zW#)F_tKy%DOUl$$LcB1X103}t2ntb#F@;)-XIL>@1BzA<2mNfidR`6gc&P{X91Wz0L?8?1LE zkK+Js+nN#4ih;bz9L4532V=HrnHdZzm1xsd0Cg?i9VS0C5!6zH^s(tbd7H!OQ&ZMs&Wy)VimR2}!bxrCk1CKP>kaxi%(f;7qewb7^Z z2n!BC-WX1BOJjT}K|iIs3Ga>TClUYzbHBQ+MAuEK>$Jh^%VXb>Gdi&0cLB5kaVO=N zG4U509R~f2r)%_y6@>tD3_j47b0buDPmafEhs3ZX+wsD94CCB#bY$}zeg$xTdMQCi zxXUfg^=BXQvB0dK!B6^0B#FDmh3YWj)Ke0W1pvuZB02Avnxbd%&@dOhPp`eTr z#wR(!FB|Zc-dGeyo)!XB78Q`GE{PEGXu`1loID_rBgv+R{Bd|xD8^_%%2Ra)0aT6~XD|%6AFh7^D#E}Ri3Aq~aC_4!d-d<5;6VfU??vW7Ks?wV?~Pz( zz?zdogOwQ_soc02WyC}&aM(}<(V<7tx#tD>;oZcxyn~6u1}Q%(QjMi$XxgovJ}(!b z&kU9y#+pmcNSGX#04wf6cy|vpf;2QP^%G`wtzGv&Vpi+I?vO+D<`0NTT( zI~osdy)o$%Y?^=?$E$;B8Ip+u(13H5F=zv5yeR6q1`824zv?`gkQoKT2lbF|uPb2C zeF%&R(I(sgcQ)q&%sJXslcgPaW?0!q>eMX&^iCv?y=cOg0`r?jm>o!Roe=zG z(TB)ncVI%P!_se?v;>b2bLu2{_yOw@u=BrBwfVsYws6#b}A% zdpl`6SLJyTXc9~SNQ54ro}`b@$vF!|GsWGYEFyk1!LDKZtoOp*h-w6QkYmC!Mw%Y(WZ>oyN z1&%bK)6#VP=tw82QB^3<8+$@7Bappl(6bApl!XR8IhFhw@sUbP$WnfGxh9Z0bS9bS zQv3$0#Jq&i{38M8^x!~+Gg9&$*q7u+{p3Gz5LxNGkUfyTV8>y@`UB7bN`eH$^R6WV z!cpkWVaO#G${m6SP%>_%DZXCH3iMMJOuRTTSvkpg`n0$j^oIemALN{u96*So(pRy~gv-EI_Ycey(O;2yby zp>Dg|UAr5dxj&h_;TQ=4Xp2ZRfHtp=5&$}j#u+lOm;C!)$vFpWF0N$T0p#6{xlX#% zEwvfig#U7TN!6C>be6-O0q8xW3gk(JYB{UdRb@IrydL+%O?Y8!1?0EGzBj?VR|C*a zF6w-8P!k9-kIZ`0VbYTU=xX%WgkgQ;M^Ys(@_4l2x_A)H`QT{saf~gX1ITxD?mJh{ z>lC1meP>MvfJWvp|L5bN+;Q42Wt0QdWyi}Yp#4I*{_|3!{`p#|p4nE2|8g{pHbK|a z5lxpfQfv9YkMy5U%t}S7h$EUWNlz|B*1`2|7LvoK$y9fERJ3Mc7&JFF%Tl*@Tm}Ff zryB_@*-Q@RabyIn#3Q4U5yWcpYFLoUgEJBwpg%e}QFm~@&86tw_$4nQT5$#unF}o> zoP5yB$s)Ij{LYDhWx7uvvL8l}-ZTtd7^7=?JSlI}RhU+!@}wk9C8fYLe4lf1ol68r zEf^>m4~!%q*gL^iVaO{!xRd$}=qo=mHby`)lKe3W0>}ZR3=JQNyJZaL!hn7p%HB8SMrD&?EX{1&4{|<8D`n;jbBuxsIV_HNaekzi%O)8Tt4$ z=OSHX0k{q@Go;U;qyfq)7+b8^ya9D8py>d%>BG#Yv&>kwY0w?LIUH7P4BDg**mkb5 zZ;qc2_**Halp=Q+NE<*`BXu-j95R5e#FZ}}K#qVphYakA@iP#^R*tTQHSee+?I}Lb z8!J<_4%agKIKT!%t?j>o^NvQ?brZ~*ZMOry8)4OJkV6)e_-TF)zRzgwb8*RANQzVY zsKET37~BexIG9>SzWJFjJwlnMkFI>rDq&d4UOc^VpVtiQM7c%QN&0u{<~U*wG-48#6I1~~e16d;{OzKw(cUj<@wNybK! zA07lKk5Dw{j0TLO@!rTn{xEqZd?@cKzS8MSiQ2-=j8(Q`3KqUeQ7wG zTl8-trdCj@rU+U}dpe-z#MEkwQ$tlxRjDZmm6&55qFUOTY0(;64pnmzvrtNnp-4y& zLkVJ@iQ(q_pZh%b)BS!w-1p=AtoPY_t-bbduXjzG*Q=fBR?PO_R^VP4GuI8=9<=S& z8OkoxS*;Z_;m+gMZc$Iki8I`~&A$C@o$toK0sReoj$WbcPCzI&bDH zd`KH^T_?r79a=tr%pip*&4aYS~EPzX}mTL^t--uZ~u!z{}de-76 z1@`Ca4U~=Xhjg@-V17Y&KFZUt%T9G@foyF>K$B_dSQs;tM;p(Mo$F@Ff)0v`vUW~ ze(Q?-6Y$xQ14dbK=OMKzp2s|}OcVcxrblLunxm#}Ov*aJ|?<2+H zS0tnSN=4V7+q{dpFYMbgrBxfWi`k4$)r*|AU?=Ezdr(C0rD=Wz&fQjaHx}IL;wKQ+6?6kby-4mku(?SCU0^ILQ@@922&YqKPOE_QdBOAD5{$suQZV@6Vr_m5UkKD3j{&Tec8K}RJ$?yEvKuUvb~3pfV3q_LNFfDkE(avL5MJd&^exBU zRSbN&XrB5bqbpFA3r{w9^(~$j{TJeTFlF=ctoy{v&R=TaN9Pl6p^hDx?NZ0O9T-yp zt*J39G!)P!Rni5Vov13j&y0 zB}nV@P9<q%DbQ-+yv9!EoBX@?_Xz1lWd~bt~Eo?$l&e|{Dh{%()Wg>IN)ca*B zkJ8=64x+yvtnPxrEYVb2<;S|e>=tAZ@MJFeE>*+&SE|C~eKG%$m}|YJ%DGjnc~NKd zW$F610*c^M3`^Xt!T1Mvx~w_ng)SiulH6K^4lY5@T!KrVLs%z#X=)VsfqT2qt)AGr zdCA>Re(^TwjW0LHer{JMe^*$#Q)@@^uL!M|w4^tUiLo6StRUW*36l;#*t^8sxux=1 zNO?^Jt|rNLiCNiO(w|L=nu??adS-}>GV?KU;-SR%F8U&xBN7(5+DRR@((%|6tfCit%UfCW~p`k-)STLwjHFG=B- zw7rOl{3#+b&md1)c^xN@LX36b%+%u))=^cRh9GCen&A*|2b_jWegI1F)wmr8@=@rx z19Ij97|?{-d}O>6q;RT8HT7F!nRTDaY95buve@w=Po%KUc9i#8WWA!sDZwowAQnI0Bt5b`83#c1M8@fbL%Ql#Yk!5 zF=FITf^*DnK{Mwz@a_?C!4?|`Oiam#r#Clor#55sukEc&dJtoeM|sO!c<*~Ua3$Y_ z{SxZD%@FR1Yr?i~+<`~$qP&;?eQ`{UzTq&|!~VW&;l5x^>>o|Hw>wb^4B)RbdEA$| zUGE9A4_%qyrE9{J6UT);e+d}?UT`j}-{oDW=EYui{vAD7B+I`WLNdHH*4pfsfIwK; z15B}#%RL+Whi~T`CZ7uBQY>?KTHdoZs@g9AUK((Sz7zQIm6cr!6gKZ!S14*`nxFp? zy^mrmw_0)sgDSl*OM!oAZwAU;U{s@3NHo9J!7nH z0k@`)1FwQ}lr1j(cmrhIw>^r!^F#mk%&&I+g+90l=M~y3wyPouJYre`QqwvuWJvBM zDdnTdSPVsL{$-6@*Gy%owNU!K2EZ{NXd(M#yFio}c8!{)i!TCnSi`?o3^y$f=F z`S^N~g{I{5h=Mm}oGH$d*}B(EWAdYnrPm$51C_n>G*R#m{W1c!yDLLIh1vfI%lJ(r zS6Ev-CU)Y7F+%c=NcUpd7UO8zisAlFFn3A8~;hFRDx{)mAay~%$ zi9=!xr%BwR{6d5N?LZ@FOP?yBbIUWrXzrrFtF(*BW#IK+x?B&WJRHFn<@5wZeZ|gf zbOol~gPPXd=vp{%rtFNl1UJd(=Dzq#`Eu$Y*G{(H@%{DYeV(PuHZY%Lh3~*W`gxpk z0J4Nf-`y;E`PgmysyioMa>AZs>~tjuUeJQRj*93ml>K)3*H*O_ElwAyF84gIUjxoL z^ar6Io&S7z>=5T1T+ml89M#U(gA3sM+znWkI@AC6E6vjxnzlBBhDo%jV&+3CFk$6n z;kjSpi}#-;r^H&hB-m`9@rPdX1mpqTHQMf9d#jYf`nQG-9q0gZ^Yn_?WP73V#H<=)xbGM^J>*kA4ws4J95wvJ(ci}mQ!z~Fp|}OOn+Or+iC&Z z#&I&=`==XF&Am?BiV|}_U!M`)=l}IHgHvk0hx#YqTDPT5w0ZUW_hBr&4d}+JQzlpW z>(^skXGzRB#LUQq{jSV3UPC;=jbKRP8JM3$itH{Wn13=LDzPsj#KJ|`eg+Euu(>!lnPqezkIO3ES4G)(Wf!4lR_O{rU zl_X!2VIDRJW|quaDTnO_5E1|!QP_QRS7Gm`?mUO;wxO{>j*uTg%oqxS-(7It?Uu& z!>Kx3Td+=LDKv)zHkI)vEA6hQL+q^Rw!zeLIWmuX8#$Dtc;HSypJ+Uz@9SWj`O_=; z4*w$S=HO3SBFI5?Fx2ub>-ejp@xOHZLqn71XD|v816zxQ)4_Q8mu2Czc6M2U!AiD# zHog^Lx1KkVR{ta|FZ9uE33R~1ha;Oeb{_0qJF=f;O)iBjw9f)2-l0t6=^3w6AUZXW zD+a_@Yb#fdLiLyxHDgXnsQPyqP$-amC!t1V>fR4hPoMXnEj{-jYV7e!wgl!6ce0`e ze`H%utWj9S{$2IY%o``e7NL*Q}#vASJ z;7bfQ2=w+jUYoJf_`3x>GnEhbHD)E6A_a09uKlpX^RXr+w7r_jP{yt_VGjZw;_HG5 z?iVi-Nh6(0g3Z`R@m!YbNdsz0LM79>fS|Wx3t-5u zZvUG*?#4ir-npxgpXPHzb{*5Ti?3%|O}nGw+9btIcJ!8M5=BKCQt&%uh<2p0@ zPdL^?JNYLwUrkpe06tL4sHe@@q@PJJE9}V|mZ~P5_(?xGIVo!n>|J;jNBL~P;Q8gB9HZxfE50tE36Y$YUs+I*2uEYsLs1j< zpE~51Rw#?JB)({A{%GsWmV+5}lQR;<&v__Kksd41+V+yG2D02&sIXT7M!@%(N9Tms zI)J6K`^7}H7GI6S^}8B3@-IC%1T`YRmxR3R8DDrJP#}LKTUMFeCK|~BSCZpaWQpsn z9_SVx=ei;55u1FaOGgxRIZJAHXPq4zBoJ9Z^ce3Q$md$rNNVKxku#XX*tr;gHw~vc zrE7%kg=8PLbGR+Lx8*q=sKZ3TR8S6;nb#xekSwTl!9q&=p-EZy#Uq%F4f*kBxgR+z zuF~ELM<3m{WP;zDCw%w5Jk|LAYm>!trM#TjTJ*W`l{=gpyu?c^cLkGrPY#LFn)=x8 zOU<*joP=2Dg~akd9-SXbW&Yx{xb#b5spPV~$7N`?h-}T{ExtELs2gc8y^;~kUk?n1 zSzDS_dVZ8B?teG<+WoZ+fE{a)6Blbsl(6k`5#Hekm?lfIprny4F)FB1&v_Oh=SfjP z2bS7=+x4w4lT!QHvG4gJG%ue+*xmf(C3Eu&5F5-dnPntx$9iAaMnmh;K=$kcAm(F` zH&3$iqn9k(+lcs(DH=vWhs>2p019###&+g`{OE%# zZ9nASm2h!@DRiZqLt0yakyh??iaR-B(75U?$&v*gq z!`Bu@>?MmkT=Q7Y;abu}zf3MA!awaBBTDYwVj0gTQT9Y4gq@-kma}djVfpn0BYT;80KDvk|yLftexOjIv~ z-C{SmA|+tEH#7}%IM-kC_R-(85BD{z`D^Vl^#H-<#+F9CJ5|M>A0u9f{*##*@9zEj z{+vVM+0%Iq09otLCqlE7{_q@O@0OHDNRO_o@qN`em0SscXrvV%Gx)sF!{=|2W|^UV z(tmql2nb@RiB?KH(!V0zy1jr(I^k$7ogHnyr8REXWr_`D0guN-oakSbDQMphs8M_Y z!_IBdd|dht9uN3213WwfSsW)pR_j@zM+#`0%A|Jroo|LFQoSlM0x^^N64Ixi2VW&E z-h6d5@IA&=2qU{hPihHC7WG=_Drd}Kjwn}vbHBtqV2QyJoKX2`B! zYs^-Ae!x@r4JUXRBl1aRy7iy2dfe+Hkv?@E9d}T%`Rv6Ca7lppZK;m9g3W3VMpBRe zC2_shP{^68LceCWJAyFLqSuj@H)(?4;FOxcvo@qGmRia~O1@c~qO#Y; zu;kFM8>Y#?Dwjd&(=t%njkf2SQ#M)WO3BQupl?OL=jVF17iGoaaB~>UfS{;Wu!ukT zT0;%C?hFl%hzki(U-dDwCEcj~W6^$*?d@#3--V>d+E@>|L(|IPm*QvZP$PCO;zg=TuEPJ&X|71OUBv3lz{^s-I8)y8Q z>zg25_A1MahX}PuB4>$S$5V5GC4WZV^syqhuhs3W_iuy49qj}$Mm(D%th}+^22%5G@w>{?TZ1#Qy(g0?(i8-(__2FKVz4q&(ry!H9;6iH45$MayNduRE- z&;N&}8T5P`>H%bqSmWtC*fI9uV`dOqC~D$=55c7Qe|{RLLZI#J(<9{ZAqh`(4`Wy! z(``=c7j)3H;MrK!?P!~$nJ?K5%&LJsvX$*_Bj~2isSwMy#K}5`=JtRt8HY|Mmf4gU zrK>Eqgo6$@Q}My3;hSY)$3@<&$n22aFIl9m%?2|e&W1zy6w7v)h|cNpS{P}EWV43d zqG|1^hwL>_N6hhu|4anXGI^dh?~+}GxUZk?*5F;}#FE2hq;}9?|JVp5FDS&VU~q#e z?L#~`2fq>PuBLOe!kn=5!z1eHvCV|fkP*yhA>m~0^kgj$b9%Cecl3IrFc~Ko&!6fe z3IOmw`mZ%_U%KJ+*onmHepF>9ls>$oamxMvlsRiP`YA2!gjNhB?<&r_GyLN)`GwEp z^}biQZe|cFn`oh^OypRh89aNU5*@SzBZR?A(X$6(OT(}>?URl8Lz?z!0JAB67W4O4 zI}>NE+4()F!rQ-eq_lH&#fRib@?L5RjGHxfVm4CIbpk%*-czZ#h$0D zet3A{1|$J8JJ}r4V7A(@rq#4Vw3OX#+M5j8d214UN3MDQOKIJ_C^9{QgLjF!NQZCH zU@@?R;ggElv-Tqq2~41$*ZK*zE#i8IB36$?;7=x zSYuo-R0M}-p%Hst`|EZ{=^5bdqE0>Wfc8442DgStT6P#SVF+wh(!9GyUCU_8lYz9R zX|{NS)1OUPM!8^|Fs_dhM(7yQa~hxlNs%~S(5pX~|F1^c5>6}&-6=|rn;Ro$T0hfS z`5!fbaH7V(|Fr8NmJ`}ni!Y`hRh$Vq4CfFZ@N3?J>gB3<$TyKkKcf-0NF7J4tIlqp zd*~1_x-VUou8Kd1t&CN;XX)qKoYNNR0Cko9Qtl{zDO%wQnUqD7k4=g?(z*u(bK` z1+v|+F5;oAz=;glAG~`F4SUW$~bclQ7p!$=}&(*+6DC4z|wa2cqj*8CrEnkh4 z3VlQ{69;G}&sN7eA~$8a8kwsjTcYjt=S|x)O-d%Ln&+oZ56B)jsWaH`SWK>DZsXG+ z8cdTGwpvHa=r2NOj^a9uOPB$w>WOHKVAkwYJ$q<)cnz=^gEi6EXn(td%S5kg$ zk%?E*Ig9{oufb*p3_ae=v|hCID?F{wq;oeOn7iz>C6Vk4AuZ!*nB&rh{nqtL3@#QO zREpnX8z8C~!Q{)hlX+wKAPb^TgCe)Y*Kg%0JiMi|A%IAb0gZabB#Hy&;VS+J5__b~ zy-_dFSx||YGOB?c)S#%~Oi+lOgLsGxRnrwq#vR@dEtccrpQl$$#nI9DYFE-yD*kBh zt*f$pHT|d;sWp3DaqLGLs*_P2kn9xGM-CZNhU|~|$~A2#wSD5w(ImZ~RUMWys%QU$ z3QYy_I%@XgvrfdV_}IrN%dM{p>$usE%NxUHCYfrbND0KLuY|bfB(9RNqX9`LD^rdw zH3N3N3sTu7vkx;Sd3Eq?xZ=QvqRoKbk6w+2_Alo4!z^nKFLvRY((vZijPGuB$Kn&A zG}Dmdbn1ytftD;b^dRcdFzhd^^*6Y!72bw?>ay5XRxOlXyZdM^5i(u zjD!<#;*#3Q>}Xr$_3?g}XQkW}Zei~ChI=cVEm;WiFrWvP8Ap$u&N@5b8w#@I)uA}I zU`M^npamU|G<(T9q$)pjw`vrvoOKgM}K4;BlQ}zwiqfhCO$lj6M{}2VGjN)*FpZl77KZUBjR-S0??wbWpO?OtKMr1;cA!`zO1ks!o_NW_w zBJF-vW7kQcq4SjL|J2Hrk?~+IgBQ!}_B|pz=Tgod*)fA^0%C#TUFSM%`+|PF>$A+= zQwj$CJ!GZXS-w~Z2$5k&)8w)6^AR}aeFw)K?XiOt&k{v-sP3x&i8q^byaX;hzrvWV z51TAA;L2jG_=`jMMwLJ1*-Isqg{-*BjzmD)gd3n#EE%TU5DM}ssyW>|J;`n>EisNg z2o$c$?16oeDu^*$9(PLE0aQV$Y4sy(i&>_ft{9pe^x^7$aX(v*%>iF=0N<#6?ydpS zVwAXB5hC|zZL|XMti~nP+JAB6d_llwp$YvHohN%gtW*)nHlT9XBk(%F??m%Ap1OLZ z^dIk%XhznG{A^#%l&~{8TuLf!n7!q9@*Cvhx`o_Q>{1GxP=C3VH!I1bPibD$ z^VLjutwb+Ft?RvVLl25>0>~(z#oW$mm-O22@obk|hjTOrs$|2_?oJ`a$S4NV82VGF@+#pDssLrx{YW7^@Kxkt8AcRJg0!R?(>;$XS4yNRf)q*Ggp>Jy?ZM+|-!8!SQk%E`O^$OkB*J8d zewK`CKBY~oM^>O3vcZv79RXn_D8#}hu+aGy59htVrzwWdt0uYYWp!e^3-9Ly3SrL|K z?^%Yj2JekWu?*}r-+e7T9b zEDm?GAuRVfuzc}`pB2e-65Ag+FD_-?iRs{k^XzHT!7;`)<35zQn*m5N)mtq6lML#6 zbmuQ;(k!qcjuJ4xl2%Z-pGg=Q!|FPJEr*jij|-L0JSHF{#KnNNc)TN^E{Th$=z zkby5UeH)$VtTrJ#BYv9alRwAoWUpF0ZOU4@I;)-vZ&JEVCI=(6IimX8 zHuWG-1qm9stny47s?(N%Y|G%z(9~w0Vg-)B#oFR9T4D2r8?)I*#b(&h*&dsr-3ja; z^&=RYv-c4W60%u@)LL3QmASC&1jnK4tZyCU&JvjVJX!%`WXipr4Q|p{^}KmqM_4~S z&mk$H>#|Hy+QgJ$@nnd&&~8Am@J^5le-v9ACf(<6Ad1_)7dTBgb?$_=iT`(uuKMJ- zb;7c>6~QO#dfJ0jkWb`i%Kj+CIM5RweZ6wvv zj%-`(It-I<_Dla;yTfQ*s<}p@j@6E33g*ZfM9`{Jv5rZ6_pYg|S)AN_h|J#N9w?G$ z`J^!5z_S&8vP8lMu)NYf9p@r@W+>y=XNt%neXZx|{Z9F2*yd6G&g|388b6n!=Ld6M zWh=Q{Vyl%+>jWZ-pEwU^WSY*TjrS)p`ds`zE2_fM{n9E+n5@+S_@fTgwHbA^Ov`e> zha2$HL09+Sf8?6CKM~R7LOG4oFO{pG^|Cy^aKRf$adbG_LNr?Xh=e~e4?DIDO1e}N zZne)oL#(jul$eLxq9>RNgWpr)XK6oP7f|%@1$;VC3=9Gc&?x%*9|>9oD-ETX`(dZi z7uTmdwLZsM?mBPn7VQix5@5ZD?lI>`sL{_P;Hvil=InqFrLX^sXXt5^c2m#yQ@iH7 zt98%Mc~ir=ws@Xe)~Ha&)-)%U0Sj7{d2%86rqLr8;HQ7FY`Tw6<0mVw&%0zv;w9v(}Gg^WF|eC-D@3%!s#)tT+zov6+u-h82E5TCtLk~O+o z3^=rp45WNGUL=HJFwRE_4S!2{m9>Qk3e7;}kH^S|V<(2q3*Db5pXkjOdeSC%)p8nL z=++b7)HdVqd6goUGfKt#&*q@@9w>P!BwZe>TfYC?okvLEChL{j&Sluzhk{tkbZv@_ zxpB(yhPWGkOKWs%2rAT6c2LRg3_tv-uewynHI#4Y;Rkt4a(TE~>5={OAdsUNZ3zj} z#+RnK4Ug-FZO>-IP6p=Bqmv?Ceyh08$!Z@TSh%bd5Ifa@RV%1A@X*VfkAH*`*vQdS z>?O5Wk7hutrZFinRRc{Knj~Oee5a2|FV~<^6s}{&t{;AlweV?9_u{*I5MQvZI)$!| z#O{iX7Jr*BwGaJ0zmNVoj~+Yt`@a26wJ@pX3AEMoBF{QPTZp*CAEsj$jb;QN_4X{Y z^6(WN*_?J2ZJ8F*yufr9xXkE*q+Db}8Q1ky`1*7+XnreLN<)1%R7t@rZ_tD@($ zHJr9hIfVC4CaDdM=-=f0YSSX!y}c9HsU%is!V0;q=AmgcttPcK@P$x0)h5@g^;b#F z9)ss;dL<5t9w2|IHV{hFyt31ppQ@ze*N7Ra>3!o|=UB3b`}`r~?@qI2`~^#zU=7c> z-_-ad(1fv3C7T{dPOesW4Jz#z=S%D-9O<#=5KJ(&dY-N=CBPc?dSmWdzyv1iblx)w_E4s@~nzy{o!xO}LVR6e2^s*JR_3KSFo{9gZq0QY|Hi}8$o2LLA( zDN(3jW1z$LhafXe8FP7gDEjw00u&H{1qJgD%KHxrKm-N+w+;pM1wj1&)>Qzs|HXlZ zf(o^Sg8eU!_B;INl727mz5fegAb|h#MhNu(U<1GqnE$Cm{rRUGHi*pZ9UwYLYdJwd zA!Gkj08nWe1n-R?OL0ZDclbWwznAIzo%X%_1K*2EKKgOi92Ar=l#IBDnj7Gx4c-}d zfARDjy7=D1dB*d+jl%z+?f#Q6jxsFtq$g(EJz8O4bak}tN(;&Sf@6EHqaCP-J4V$m z{&_Y1`ER`UeO6xAXI3iT*7o2&aD~Mvozvb(s?#2q&a-#cejEB+whL@Ir6CF67-1z* zYNNg7TV;7>O^n}vTQ&U}d|>A=tNv*?o1!!XJbijKE?@m01i;c0s-{#YFZ3K{lWeRX z@Sx=;vf6d{pXc{3K=3iwzi-x*+V~^@jR!fOV(wpJI!5@n3m&9m{lCNbx7;9T`nAh; z5Lh?bD=eIfCE%l7R%?|7nYe|aUlXkjMFSvEi5VJJ5- ze1&^!TlaH+)AiLq#>%$ScZ@0nQ6W7b@ zxo;?GV>d6{oc%_}J{QDEVLxk3Br}qi#^t1b($8@RT~K@0Z`+|2;?W zvWH^wl{L6C_gNvY%pNT5q(5dXqsY)QeqjQD}wP_$&zMp z!uzi`l?Ro;uX{Q3oW9=Dn*5?-B$#+fhAU`@;SvrGH?~qrN+1gV@Z+I3P=)5a^v~Kd;wq>WuoAekbK1UP^uy2L(o1h5|E|^OqCi{TcwdxI}$P zx}Z4-WUV&G^0|yOSeg6o$hV$cKh{=|)^YmGIexm_Gt<^Gr&k6^6m#b*akd!K6}R!i z+dNRJD-`9}d^i_=A~xhqbj5}M4=2Jt!u%SgAjT2BrSBugvJV=4Uv!6^g`{1t$u8M)HGCr%>jK8UdF`0xnUmCLRt)}YGzNYb6?l>!JY!ZHVCzP zzijNDBI`)gD)8UL0WD?aeQ7!XnajKb6&>kh{w-J&zqjZoUzdNij*>06y3BL=S&CLR zM{wHvGI+@&tQ*tq+7$0o2ZONE!VCkrX+NU*cd^Eh>%ydeSWqxz8+m1&Z8%GB94(k* zQ@_6TJwX?vNznK6ac|TRprs-+S-DQ* zThhAh_4%LQwk5m7uW%zyFMDCX8?)OO02L~eI%c*Rf=*q2nQEnoqD(I9YLnC%l?H1F zb6hIRd&lzGTCS3DOk-i48w=FJ*h!pH+-e-NRU5LwHf#3n?DMlVJbu8HV@h)J0F1Z! zi+l9Y?s4V>!?z`;c6|!u-)n-cwv?3BAUlXj@W4Eb4$yduyFws_zu0fz=~+M21S12O8rX7Q z1ba3w;0nvYRCed?wvRTa2)AG3YxF=G#HRIAN~KFstUb$SiAcLW+Fh#Q-PIk9TL&7~ zcV;_2D5K3yX*oG@50BrNmzS4ek&#lGnn9a<$YY~Duyy1Dj$8TXJFvEIZQ70Y2Hp(` zCIwEbLy>Q!??jA$>1v)tzZhQsn?=t_`gUU=Pm2@!1P_yNK>nFVFcJ|2cZsNCY14D}{G0#W^9UNVxOil9vI~f@uU9!~F zRB3s62?e_|t_>S{%jvxfbc7m}3r1Y;p6eUQ{qx({W8HZk`&aL0%%)?UI*;MC5nrF3 zDU*xaB6$o933ARwU{@XD&MpxluAFLKnjPBiI|V+=LG_O*`WD?yJaK`d`3WU4>HOyY zn!<0qA2!6yPPP?sS4@Q-o~FKC6l@jnCW*cgjZi~wQz%>8PGRdv^z|uVtsnqBm|p!G zU&4U8Gp^8@(4viFMV)SZyEDOll}332gAVr1jD&=!^73+D!1XNzFQ0*)9z`dwIbzN* zhj8d;`&&@$*}5nFgF?Gg<}vSnMTfl*^mh`-=#N!m??cqyhp$zj^&HzR@ z(V3e9pe}a%-qq89^Ezy;zO`LXP<2N+QmKnjdnj{aHF{V11$ETu1x14Q0e~+6DTTC> z>lDsj3%xzaUNuG7uARM84ws3=(`^c$+D*PG4QUa!cAKZen#I-Sy8m`_?@Zp%(}_gn z`PjkHk?RBndrW1BkdW}t*jPK9_3GD@D!lv_*W>=z%g@5L+8}Dk{)lZAlx@iY-y7;d zM&n!iE5eG4A1C&LJ?w$LH#~L}Y;KMQqD84C<<7avVw&Ns3jM>f-wJ51@Q8EM>lG>s za)O|TbJGs{i%gv*8Hu^n)INln;$*vL8HJhNL~3Dk(>Ab(lr0OrtuUdjHJ~H~(R>_2 zO^ZBY(4!USN^5+5S(zMA6InLT)xFqCtGBIR<%(N93?#i z1FA%3Qc}obt;P1AACw1+wM76+kyhK~2I((fSk>O;=GkJ|JxO*3*Hc!-z&Q!kFQ>Jq z=Q~P=cYdB$TRqtsVczOkm19tSco;Mf`v4(?lir0K4X{kDvtR7zL9$PJMi4>}c^+HdeEbnie@J7Ly#+ijk^d!sU?_;Tbg)zD zQt5+pLo^In2&3*h**WRL;Zdw}ymAmH{=VJLM&{&5QAcRI)Fi6JS%FLk)*=kJvB>rg znK$qyG4Q$sj%5qQ#*pyo2iDHbALkb*2G9tnKUbLPdIbQ%!&^<;>+fo{eP}J|>l%QU zKVT@u5TzlwtN#s~0;PrNMLQ@&{K6Hs`{ai_X0U@NyS)^J8s>H-S#1xgO<;7vOvFZ~a7dC!Q0WGdA)~EGSB%R;lihM)Am-3~uoLl* zoSZO2@sMCbOj~q+N}DibWC>Amf-OQsBiG*05OQj61d0_qNF~`zn-=-jnTS$L9;(P{ zL_`xu&T@Y^&j^xev&*r0&NDPe4wIYp>YjdWCj+x~LkP}|!P^yn>+@L)Tv)p2#GXe$ zLwXC1dPgH>VZ4UmO~uTQ+tz{v`&;5F#+Y+Vi2bfeXlMww55>D4aDgnLsTzc}v>D`@ zQgO)o$wg?2G=x@^nU^1j6%#WoGDH(**Gb|8zai)HFa^@=4cnM|5OR$M8$Fw;RUXr4)%=4O5Y&K zFSS`D?2QVou=wQU@A4wZtpQHn-U5QJH>zF_o1qU!WtAwJjn?yL#4O1Hr2K9yuQsvP z^h>byr6~3;S6bsbe(kgNozTw6&~*?(Q5Pc7i^WCD3ilwmMM%?IwF4mDiaDYx#spJR zR2(Nh&*X=kFoTM*3E~O3x5j~zccxk&rwcR)C-Ni52%+c-m8MC|c7;>jF-)y4p;nkt zSatJhD(`kzrRwf0!dw)&AekH_RLMnZApk?x1w>{i_1P!`kHkM}LE5yJg_$R9A_fa0 zhJlL{b^+xJy#!AYREr7C;a_oj=*?eZj;kNkfPVgLZSWw-se!NrPKRal@&?Ped34YA z;T9B_&37^!jAio8Ut}=rHW@Au71DTb^&+aNtLy1}C3O}P>uH46<{YR{5IlBAo@jhG zBK_Wv?k5dP*N|0VX}%L!Eu_ChT{r%tRhJE!g4Lo&OKJm{uvH)E88e1>ksMX#qXm`kXiz|N$5J%$u3xS3KGe5$`L$iAgQ4^LGlj~K-kvx4=?_RXUsmcsLt`% zh-uf;Iyun?QZL4|V=2d1hwirW{2gK~P>btncUK_%WQi(Gj|E;`GLw$^!$h0seS1=0 z4xsmN+QI=UeyCMOVmLM_{_D!oPHk2rly}*>U!wVZ02GM`B!swBV~wrLQ}0g%LXL3~ zDpoIm3-x!f!^J4T^3yJ=0e*<0+=iqw6+>=GNmA6glO33#$Mkz@gqwC+}@XOvzp&H#dmYd_kI z#8fF?a-uJyBc+p3{3#Idi}?9|6mRF{64Z(3cJuhrfR{0+ajMlytAijj*7R=z&&jPLz9}Jk&#T^t_0$E}=C32)1e}&+Czxw4EdU+R1 z7ksVM*R1s_xg<0zN>NIR|Nl}qofOAqBgrmOG2ygl67qe8eS)Ts(G6(?E-IazX|`;_ zM5SZTo9ULwmNE<9?_=p9il}yyI8sH}$2EogP*7zQvSbt^MmJ0R1S;y)_MI07?QqZV zywcd(NGC?Vz#$NM!J|@o2`9kPT#ozOc5d{aT$)TgOuJ&EMNp2&+seK-i{v8GAIen;2i2B_&jta)dB@m_D8 zC9&9~N(Z7OV@U;2JjFOeHyBy0g{zvH76^n_s?0f5nlib4lH4S9!#Z*fRv&rfZfyWd z0p}GPo_z13_1#U;zyaWiIMP_FE(vqdAy10O>y+oVwxqZ2(mN)E?77Mbr^9$b*BV+q z^?UG#WjWHqFTt+ibTjdB!Zlwy{!x?@_EE{L9+3%?Fb4soIWn-!XkbaKIMU_<5?UD1 zRV9#Ts3F@Wt@6VAPQ*lvazz20P@|EeDC*5Gd(z!&e(dTtaby)}WcF+KTq>7X?#h2Y zLV(}3s6zC*mpvGRwJ1u0Y~W^n^l{qkv^fv!)Uh7haf5-ysVo5R=Nl1aF;U6)$AJltT>CszewYZBxguIG2D`c5?3%~yIo z1mjd@kUT~x%j}p^k4mpv>(Esg^^P&Zv;$hM#D#$;_7rqI=1p-yapHXW2ofdLFG~kS za*h|{Pe3ankA4v!LAgrRLfBcb+D8h4@a`Zt92y#)4^)T}gNU@!Q5*?X98n7c~9N=_7#yKVE(me@oQ=##@9I_NWs zHZh|yFAYFBw^l1|{>gcbSL9d+O%cM@ZJa=HPd~cx1)md2P0+W9#i1J#WsNQ))2%1~ z3=9%51|lV!sukGhC!fk; zkqJ$V*d>l^`M=Bp^T91OM%;!36wAHI4KbncqK}JHJQJFK=JBVxW%8)723|S3$_wr! zQa{LeeF|xWdDK>X<8t7mfz-zUkJA6k)tOS)8>7|jMN}$ih zIuy-fl0<;I>&RJ`{AvJurlsSiqAFifka(kyI9LOekn@mG^AznCVA}g#Ut3!bl%EL$ zgS4tK=b@OCkl(I+ejbn@he79kNJ0{fXm=uDroPGpg4Kz?%oZvWru%)8i`WIK5RxfR2$dp-}#Jo&PS01O2yF4^_o~$O7h#HPLS<` zSY;_c@&8fk=ehhrD-$lFWd-{3a|?_vKK%sopmLrDV@unnaR!sqR6Th%Q+B><)LtqR zLt9~6*11Y@Ks{;UeWk}j%sCbSl+Gi}!} zVO#Ui;wmcbc1{CplSE^TzkCx7PQ^9I>`H?!(f8XxiHqb>%)!X;B-R)Eo}7H!5XE2P z-~ZSCe-v(UN~2K}Nyw`0po|ntk}$>&dgZ>)f?sy>sCBV`;_F_t^hH>M%P(mHT4;T6 zh1O~aEQO{-%q8g7@zbc!fi{56FdsRNA{Ak^FDBU7J zd!d^88G{ySO!)$pM8#&G%oagw@ zc2ne*5olWsHfIJ`F(({4)j&<9Rx77qhzQF{3}8&v@q?XqFq^I*iBn0^iRBoY>bS-1 zJRCw;J3k-2Tr)aJ1F^I}s!V9Xdh#+M7u?bji))06$?!3v`?JQ!p-@7ATA=}jyI9PT z!9Ltwy75N@bqQp)h36%#KUMBcC#6M>>nU0dX``7F??Rw575^}->mV)VY;b5E(t1q3 zrRR80^oe$MWMWTf4?y3J`oQ2pbTA+Sh~{jqCHXL5m*Nb*jJ0o|L}w%ci!SZ91ib}W zt++drv~*!od0?ho*uW$n;(z~Utp2s z>=!-zr7%k)O?^df+({5iLZMX72R1ldLRed?X+N@x7?c1-j3iN9X&|^u3pZdWM0&4N zmouFMcW}5cAPIUrI`T6)owRk;C-ts?B(?gFyM7Q4JA|`Mc|VQIaIa&p_FwG58nUW5 zPE{&?No2oHqCeX8T-2ls=0P!~i&u?qu?}zh?0k+CJ1^P7*CW`Gps_ZLOC^gb$3n$} z0Smh8}nq4GdLD?~(XP3$E9{qyA0k!&x z4=quvj(4h9yd>!QkYQix$Cu1Bzob42;bp`laJvP)Q+(~Bgd&nQo{Y>l6kPkdAJdFF zqKA$ubpiEP$%&y%7oSb=fp~Ubq6SQ7g`IpaH{;Dh=RAX7!Xux)x@D}brT8zZ$RTItQ+|$ zO2L|pL6L`huE<~yQ|Xc~ zBFIxlR!QO#nUZe%{of2@kB0}6BJdzU3pxYT1v(UIr&VV=*@o~ZKZIYZWulco1LpSCdJ3WORufo?mSLUCS%nF}Q17a$)(7aCRK46~ z^Z&iM2opnN7baxJWVfQ!4sFe99(qtBMB?Pu{XZQ7XnrL5ZBUIjMgL^5pj2i?!3%eQ znv{$bUENSgr6G|5(qW{>#e9@D6A~YKf_#}1PK!{_?_Na!bCrUb(RU?1F%Eo!zOqEb zccXBB|063dfp?wvlM=yVmtFO?^jqa%poU|_WOU3$>~`?SOqg%YLjp-{@6utHiJJlR z%45t8{v#r&jj_lWH%JXh94{v&y$V!6VsiP_O(@bHU}%?|=r=UtRwrLXuV79MFOvOX zIlymDLKMcUM*4=(EOn;}-<6f&gY3`vNBxtZ@_%{KvSqX7zi1_7cm8hFl84P?uh91XFUBSiJtEg7lBPpX>L$cymBx=7jd?W1x$?-Oc??yZn?A14;UHgaRdb zDOK;`We$KXt)-~87P0?{+`bI0tO&!(Dme8bmz*ji8ACyMAlJkPs{##mMwyUpR-t)< z=wm`a(l-wHyE?r^$}}0OY>ZF&28_6w*u!;vd+f*)(2b?IX30B_I>0(Xqy>2KBq@3T z-2u%-?I88wzF$7nsvsLCiPKL+@EJUy;>E_y0%2kaKA5~h7i{L7ubPU_=G(#^oP+?6 zo4A!c0_a-6c!keFCSc<)hPX^B^-wX%vsep#CTw(q);`vRv@iba5`wJ*SnV+oQ>_JX z7+GpymC`sBUuBoz?cRP-=9}Jfi*tIYH$s@QQ=4rc`BOFhIo!M}vQ@L|lYU}wXoO+Wy^%7rKaEV({6gAoez}f#UZiy7KNwWHEP15bqw9YFGcXwxJ+fE&UWCixy}U zx2}OkxC}iMDp?T$A9D=4t`x~E62a$-J9Y+g>SE4OujrZvg$$>`(y4U2MOr`Xp1r-_?ZK*aVm4cqDGn|C(5}f@t{%*_w~e^is9l0AeheF zr7|*yi)>)L@cC-0wjjmbNNKTYF-3-RWK@CwmvrUScdLwCQO)5-KP`5m*ni@d`zW9Mm(8( z?I@%6D%N@&`0aczT#=hx@8S#+zogO45q}}F?$xmqROqy$deu+YajFU9*MA;q zafTL^VXqGaLUx2HL>R1dWPLvSAOGoP0oay;7mn zBN^gSF#qKQcN(dS#$Gy|xhN+SopRM|uO&A+4O;CS{#h4M!@>f3X%TVk zlR~Q^mE7@%FeWYz+7xkNb1cEf@Jm<>z7}O5^2|`0(yc!EtBw6HdlZ7-bvg1|<|u`@ zA0@C{!w(XY#W!lSFsDyUg=k@wcUj7ub>v^S5$7J148~lyB3FV8=?yt&V)vf0GIrgy z2qx;WL++3K+ezpr3fSRKuT@dYC^JWsr`%bkw}3P;cacxL47b1hHZduOI|KSnR2s->3% znV>Y9(LB6zlb4i=ex(QRN-)?mh2jQ(v1j|t(=<}Rs}O0PNS2ds>8Ggf4$9c>6J@Kr zIa3K1^K{*4W>DN1l-+lDT%l`yJt}*+`KfsEyzU)d+5Uvo@pQuWazaD46?m^d5UD5> z4YT|mVs|AzqnPe@$U&*39zXnQDrBimzYA+aV{Y%vl;78NAWmiQLXwkVc30?kY!g~tpltI3Pd_wAbO;ytUV=fV8# z`rNnQ-shg}s)fM!_{By~ru`%t`4*6B#fP^~x(T84b4TK?a7 z`MG@a=h~g)(&-XfACH)G1<8s0)B+1(HPFm2K0rR-sJNan6fmj8-$(w;BxREE6>*8LUMEeI&p0 z1ki*Lk_l#wgqtsAv|DH^qibVE!ZcP-%S(79fkhk7O;307+>xtM=C&|sLLO??)_-(gZ;PD_wCjG z;p95@;tk!P(^JR`?`syHANIb+)nk(N|^0?$orx>IEBL-Y6-uW7$z_?C6b9u7sl7@27;VISs~KSxP*yh zW{UGosfGle9e5x}WqF{VVyyYGnN_YNk1K10l=A5Xkv|5pwW{FKZC_ae|Fcd(0wKMa zN5U1`Z61wU2a}m^u}(Sw z%$H6)38QgVNrVQhEz799DpKzs)yPfbk?=#y_pPA*B5C4-R%$jatC48%%(zFepHIYA zgm6Red|CMSWbdpSNfN*tm1U1pdbM*Znde(%e6msnZQpvu|91cPjV5q@5toEQWaPs<;#FQRJN<|n#gy&XP6OT9z%eiTR{c#DChm~H) zVu+NP+f2(*ZPD^TCm|YOmU)+pg(>!)4UkTu#K3+W zN`KD|u*!`P(@cn$#3fZI`;d}K>@U~xlL#*Z7myJ*yQhdNU&Ua-9bH?r;{;We0HsRk z@@x|jJH(n*0`_muARX>Wt@>VsYFI>NELC)+cCywABJ;iBeR~k{4HWu&ivDmozTQ3g zv#i?mR(fXiIGWJO)6mMBORn@d;Bhz<;&}X#QI8K!b}r^U!I5LZvku@HGt$?;TEF0K ziiULc!eK;oP^$=@cZmwwk&AwODhm8E3$t1-vA?yGn{O8t)?l3 zbeVfxLLE*WB{zX|rKXW^+FZy`8W7BptGNH9rS|g)Uw^IoOS2eQ3t_~H`AEu)NjUV{ zQGK<9#)*2i+H3x^YiXHbgE$bGPfeeRp?7>ZF_q-kNHALWgR;QI6LB))-Z%gA18?>x1FM@FVo21duHGeul+U$XAyM>V+5SKRu4YPVx$}UfMS;mGX9SIM zvQU?0YV3(=6ybA0L3Ew_(e5F6j+7Q>@+9V?Xm8n2lk+W1?tWV#FK0o8O#KM&0X(Cr z15(LDcb^Y!<{lfsa8PUh>SS}&BE_ny{7wH55c_f>r`~PzNT&7r&g|tPaNrWn`)qzq z@Jovsag3g3ShOd#;nIU{u2#0=ZZ z0{`J??8M*wIF+D=KO;u;8HSm145D$IV)F4gg}@KO>4MH5;JZF+w*DAoj0P`}PEwQ- zsj2#krbR4_8`Kt7eTC1d=#nT%El`!PnDk{bg$p#f!&w3h+Gq_u!oj?7KQ}faQ)}FJ zrJoB#C<^+*2)!L1yY0W0xxF01Xf~Mh_bVJpHzk_9`pblEOM4%F z9NHaLi=<5C5wuwHWNl5A z_~#q*25(S8&oAz+Z(}~XP5flb_tBm4RGF;Sk~(r}y1ld_-rh8fnk%8D?&NqCqyZ9T zA&%=ICMOG@ZuYcH#aw(^XmaY;G6TyCNX7nj-dp9LRcX)gL(k}qCli!MMWuZ4rfB?Zu# z6L@9CZn5RX{X>YW%F8VXY;eiOudNgdE%k86b6-uK%GXlF)degrl^Asop>7&rZs8z} zXW7vld_~56S4NtwwopzfCWgpHvqr{fxE-h!q|PR5F0`DZ#8G)5HLv5q0fbG(i}?;8 z|G($if02D(#>d}N)!Kt&g}g!MuMga7ZuVqZ?nX>8*%^NQiJ2@doMdcP5iIr|z@+ix zh}$waqvJy5g=TAL*V9ZMb{zGBL;1v*YCH&2<%EGm4u7119=Zlatv$Rwd{&Lbc!>RP?Z^6|isxIpvN>?rysvM#F zUdWj{cu4uzKx&V5&rk`aoO!S&&lm=l*DbXUfyk|q>tOnl##RiC}P)T zS5sRjWVV*i@HoDGq1ukN!Jaf+Z@H}6;vVN@K|ivBuL=G6xH^*FXSscmfWJIL)uXyu zm61(clYUJ_J@dBt?HQ-zpXkB?w>D@Hv?IGaqkb4vXM+YaMMqahVH_>_GFT&`xm3O= zHIVq(4LA27 zo;E2Jt_MG3Klv9k4s{+S{=C>h_Pji5!M_|C9&otrqjcN6t##WO5@a;s!`m)$-r_Zx z)Le$|Y57XQ&KS^EqK9E)LipWI(57qi!fZSakom1Dl%+g#5q;b0x8dANS20!b{Ao&f z+W@`^F&kgQX?F0b>_Cn1M-)4SiV5xI&2rX)f&ytdh3)q!fK`?s>agV2OlpDKmgVU@ zu=TNvhyVJ?N7uuZDh8AuRWHkD^f>aFee757Sg>A|rv#ae!6Mo699kErdGN`SAZZKY zzMiMK;jsc5+F5G&D*V17Sw)hIj@4wt$MA;uPj*M07VZ;xf6hTW|EfgWT3{onv}ujO z$gzC*%xs8dmP+cok`U4E2Jv+iN50P(InFRc+RuK=pu|RHu}hx%ONFZ_kE-2iDi>@B7+bS3mDB4*$B5C<=Cv zDYiL)6g%9YE8DIS*7p3CyG&$RYTIe{5NnV_jh$oZZ;s}06~=zKRdIOwHT|Xx@-EH$ zfW0wZ@_Q?_L%>IkhEe}B!8Wx^=Lt}(%0>)zOrRY*R)00rdmwqzym+A7Qo!hX50YP_ zu+pYUWjXMog?gYp8?7GGRsJ!mufHJB;c`nw*Q*H=-C!*$Qqi{eFfy{r<<*ceO*c%Q zZOAc>v;PO~t0Q<+3ADf+z&T7H#zD65HL@qvVjF`^`i?9uvJHMug@<9!a6iXm#EQTe zXFY%Fc}!!76xp3oc$Eioc54Fu*Jp;r`-9Y(UcHVH#mvQYI`&h9g%u${FDpv{>~u9v z?Pe{^5{UavWpEI4WXRApw9sy7GsC~21e1|oMznFu`G$79ccNV#^pQ9;`Z#&(;Bs|D zOE5Osz!Q$l>jux~Es|`TtK$*)b`iQ>gLHxHbz8)IvG=UFwYAOXu)DbJ_Ba{|`sf8p z&RPgew3akkYxP<9?MQDW<(5W^UMRr^`^eC7#NfpCc7NsEL${39*Cf4oP<>h5P2 zUm5e>2w4zEdZF=kdvhHZo|3?L-(8PWmC?JVXn-PuH~lK=y^@l+CDC_2pu1y=a;6m2 zOv!7w9>2+5ZH)yF#NQZXNOw4#bm4YzC2cqd1#(O?RJ*%Mfpq7Pr8Mq)s&93_U%P?K z-fnZ+emY)EpwOT2)Cmz)#WoDBiRqG>{$4jKT%6QjZ2Ha%hr-C_;rvm`aUx-07P=0& zf4;S4{Lk|8>L&(8C0r1EbhtZvz`!e05|DHf?1p_Cu59m<7-V!T>?n6lDUb_4R?7&< z!fifSuSW@lckSItqtI+_jp6CFcH9lecH7S^dx*_$i^=|bMe=fjZ_j4`$l>)eovf*O z^%?ilto7zehH~xi0lm*-SuEo5{bgQu>zDCI=$K5c$m>|!f(XH&;jj0`1MP6^b}7>7 zhIkFi!13&rP}JBjmOtH;Q=O*#p3i$;D@er=?mJ5L`0`6qG4God_dm?Ac-xLX$&92C zL|51AO%(VFO3Ix?J(fvTvzURd3usIRMa|t=B25nK#x&K}ahH=&yEmES(wDh#Y0wn9 zCVQqGvXp#ICU?1CFOW|71jy3AqV{L;tU8)53WIDxA)yU1J%gEEqh~~*buLV)JH_tJ zz!zMt-`C#PFMoNY!%D#B*q+`zOx- zSnR6d)RHy4pQ48vbqM>TPD76_VOWgC$)Z4$=s)|>MSB?O`*)|Sd`4|f)>}~a$rht% zve!cK^?4$=)_KD31^E>(vbwC#NxK;A$+~Bgzfa}a_LfND*U|>*Gw0M>N^#8D6G|Dz zbd~l`F4Wm#p^;|C4lAB^vyEr>QpTPS{7|*7b{W?#9g*O6HxfV-tb;yoR2c9VLv}n_ z`1~})=IC+mWn-1%cPW58S;QD!A+Wu$_fu8R5mL>~fwek3&FXFn)LqD67i-|W&?$+;EXe@WEIws?5mLp3k zgSOw4;)cA(f4G<1ln=P}r(Ejs=qccxV5*wmBM4>QOnd{E$YC}d1iQcx7IAF>*j`><-SLr<(YQTQ9~9hFp|L8?Evo- zKF@yBedLiO$92=!k1JLkKIFE2HmKQQP0z+*ZgigmWW3f77Z^x3M(%3zpX;{5t0-UO zK(*FtshTxj;BZ#XwnVmjY}Y<$utQJGlg;a+U2 z$1`hf`p70mos9nndh9*?)HPSi=>7MTf|51yeS`Xc#Kq@@{$EZbisng@+8*pf42zU` zI`kg5qkVBk5^6KMDV$u9%^)wXoCZOq=W~H;j_+(86x@Y(7QkzD(%jzQ?IqL zSaAu`mX_V(txp-5$D+#dqgQ9n#5F$`xP|8WWz1gVK-;m#oT5kbv5CIed`8YL_!={l z23a$SxPGtI-+I(aXCD{ZEYM<9L=3pwu#(3sy9n>5xT}1ToFWE{2Ji~UDv162>nW>! zwl&Qq&lV(VDavAPE(J>2RX_6R2Zw9j5fmbId@`QXRbP8On93Ru1>%eK{X5$IZ>p8$6L4CTe=%wOdBE55;~!7jj>Hf-q1hWoh;KqkVewg#Q`isjHNg3OTQHT^M@Biq z9#Rr97H2unn**JwyUbc;wXwI60#@2zUqnN*2oD5V$OPbaO)wa+XvR)rj!H6>1q#^A znTetjgI=jQwU>UId}ugHk$cXA8=ilU^4^=UUZ-{YO({&1_#8HMP)D;1@_ z!?yNF?3tzhHq`et-S;Gm&9{uJh~^$ao3!(-6CgUe0iJabgn>f9)dpTJbt%(qD3jI4 z%Tw(u!_s7X@m8mygCV3xQUKPelL8ueP@Xfk-0kub=eK{KY! zm|(9K%Zb}YG-lljvj48x$hiHx&$atg3S_pDjc6zaFu{vEHOs@#jX zt2Hrch`RLY6uzj|%7Neu;+E;%y2h?KX3^Z#PMx~inED7Q-Bw08p6$*tMFCb^czV&P5%)KY(YrWckbv&w2KX`nV8LLm4Xx<@j>Xy;D@0pG8P zz;F_lGxl4Q*TVy?gkHQn$3HQ~ zfXEKMZp}L5YiBdb5bPS&RI8*xLRA8F61GWuVb&*f#{RG$i3B{q<9FA02{_APdw`2w z!33Oj1c9OWCKx6M#otiKbiy%b6AARD(eh}JrgnqAeFBV1K6{;?waKz3j6SHp>2)|D z?0q5@K|mj{3D8vTFr`)h?kktI2=lY(JC~u5yX1FHt}URI`Pb6pyW-TfaF#5;Yq>?f zVfxN(5R~pZHx}`Hbl$1Tc#O;K2rp&=aNomb)7E7|r^6fRXdhjKPRLh96Qf28M@@QN z%ZW*2*NU{q&D^2afu6Ai2rip>{vZ1nXu$^E`m(^jo*qn=VLj1@>}Ug?NiUeLC59vR zEBSR8WCXh_E$V)g@+FGcAQ&?b@c`2+s?>!bhqqV}kmxKJ;=ohtizsq;Bv!@<+LL5X#WJ_5mCB>go%R}o5I)?kn)OQblFWPir# zbf&frt4yRmvpUQ1i8gT^rN9V8db5}-6OQjd*7M!HS^Zf^2mhkMMOO%)=SZlnJf@8F z%SGbf45XQfIo@6Hw?5qfyspNuA6T6lvdv=ds$s6HJo%Qxr{)&ARIcRttWf(}qXSdY z4{XP^*g*mwxD?^GGA29{Uy0z&oKjW3cE6FOHC72+*GKY**m>X-^>4j|tp^9xG&tIq zIs7XNLe`KFU_yL=nwN9qDa>fk&|oguQC7x@(3}x@pzB{tcf1P zS|iGW(qUF}?k<6-#*#wd$I`Euus2@4Y;+KJe6g@j=BGV zCX|m<7v;9N>cCYu?O(Ee_tXHr2mYJi0}yOKSv?v4Y%^AM+CwdJ23w0$_cPot5ef>+ z^q>C%D5J4Bydy6ch#TSGwlXJWpAf6aoD5ARIb}_22(*d$0egoa>Ve|VnUy4U+jMvH zYnip}7YUnCsS;ZuQV$$%9$%t^g-7>p>d7PK=%6a)iZasdHYcX!4k+QMwTLBfvZB1nxlJ+Jd%LGGA| z(1GX;vC5w=N%{l3N8JIyL3g}(!gt8*Br|%T)I`jtFCfr8=a4HGC)3l+5Y7K}qMfJ7 zBj*RMKL>YhEgpVK@a0D~zN~E=t;#GNfBf-ZoecP2H%Fzow&0Upw=!w&wg)Qpds~>Z zx~~;MovC@z3-$J-%$k{T83bKguBM9?#odEDAqnoTjT7A6wQ+ZM z5;O!4?(XjH&{&YhB}j00xt;$zf3=pMCqb*)-bbIt|B2ir1tDu`^M1ypJ! zbn>7nTqm^4&B2eY`;b0c=R{Zx%H1hkXNxne=@kr#a{q*gI)Vc-Ljn%GQ4Z2L=Q;`s z{R#F*ovHdz73EPjx_6^-d6WC0z)vL`FRn~{#pLaQS(~>Uc0aasQ0!?iV;QC~K%Yik zqnI-ML#xzCU5^we6~V}`?Dx0Puc)FJY7Z#Ue|KH5Y8&-Y_^^lcH9fvccEq9ex5mIG zh1*FbWkKSd#}hWO(p2>?xtY_RC)tk6G}OGkZT@OZ*}@$NfX;T*bEEZ8IbYxw`}}q` zaA6D8j^_y`)zLsV9vH_olqj9DGhUbMwRghZ>EuBjAi?{7f|z=lLD3V#BJ2&TB15gsa{ zF>w{N4ot|+S21ucU#YD0%n>0dcu?i0hz4uU46N9IsdmVZopwq;|Kk^NL~~n0noui~ zA`9U+yhibegTh=`U++IE3YK#vWCjV}LmLoxCv{Ui8aO*X@t`CmoWXHkmskfDmN-`f z_O%Z1r1A?H}pXgx27@GnOI!{IBw`5(g@#Ht|GVds;qDq%2P zCF!IBWiD8rK3$=}v^1>%31}w6E3Is=hqA2N>-qE_;^p-8tPk0cD=?S9ul1(T)WiKw zq(YO~YJDXgf)rbcZ2{kh+z)&VVGS#9%@$%jTJE*Fig6$Wv?Yp5ei$E!bgliNLne;A zQFoIoJx6f1EHTHpxLOpZ%!hxggtSBzm`KNb$uY3k`IU0cDiQt$nq zgweLlT}@qGNfa%Y@x_=N@t9o|sh!YBmmH4l^(ga%^$&p*i4%w=j!WIeL0HHZLnzD~7B|BrTG^{NBI*7~t0GJN$YB(9VWMzusp)gQd=!B&ZY{&`{4xte2M#pS; zd46ejZk@F04Yj)qGydp=r{|Be*Gl{d8{>`NuzbxQeyU-{XORX4$)O^Vn$6HH9I=P8 zvNIQtnR+2Ckl>&@m+M>~kMPK7ROr*V#VRCoFD|+j#cgSp^O5K2li_1b$HCoag6;7)_%I)#YI38{0}7i@ zjU<=*dsz=J($l76mBb+S4}+w@;^i^l)TTUW(E-;x(N@d!JQw`jP;ly#qLSkAE&djh z$R=t~u}{E-C{4K~%*q&%Ls&~m1?n2|5x4pr=Eixy;bfK5`>Xxd$qI3^vQo#i1I>VIBdVl$As) zJN#F@d<>oJh?hrEg?(zQw@`GQi51=*)=ddG^KeYk|AHLxB8~|dz}6u4v0x1g|1_NN zY2JA(v+Hw|&IjiWLJ-cm+)Zqb#d%yw-0$r&@djtFTkRAprGETkREI1MEG-PsNW9T< zIA+f3Ae<&dlG#ZJ1^ z(>#fj#ip2Gr$2Kwxj{4!`Fgx(HEHkl0ncuUqi~F8HeVzJ)cEbf-6SDu-`tJXQk)MJ zv_Xz^neX!@H?)&cM2{d%pr`kL+^4(i+mBr0BW z11ci6MX0hti%sY=g;T$O*p2^v)0aw$LeE!9e_I+{R}qKnNzrBDB20W2)uqcJy2Fv3 znCeTD(i!7iz^j(SKs-T^8wf_Y%b$DSlc_%w1Yc@)yB&kUmo~8~=bLP1|K7aJT8ic? z)jS}sK1~308055bl*BXj>g)?UW-nmc+WMOE zRG`<88-=BUYI5zJvCfUa!4;9II8Sm&f0ETFj?>m>N42GsyW!7;{n1!*RwXiap$yw< zVQYlyKa6-*iOE>vUIvTTk2tF-i% zW&0UG2$_}W&?{48$cpx)upyYlQ2T!VRq*CKt@B40Tl{A?g+f-*tvHLiTFuh7{V&2W zPr-=f63=Vqc3E7wzQuRLKZS=%=@f^9{y5$Ik!MW4G2yVb4Rd9kxqn;y=Hl6ZI0sir zq#QR4ovaP+fRppVH^KJxVLba8iKjl}Q(0$3#C^vy!mUYj222^XzT0bMuMsd@=OwOD zy&P}XX6+{MXvp3Fi1-MyFCT`#8|59*Q6#7NrZgibT<^h-QCZmsW9d}+CD+Jeb*_cE zX7@?$g7Dc=aFP!e{?Z^?%53P5gMQ%0`O~x}XA``)-64Ok>jdVFXH!z2RA|ty$r%ZpO%XcT$4R#@JL{$kTv&On?3qs?kL6O}NIX>7^jo zZ!HA&=$Olbf{IVt%3stUvS{s%7iL8LQwL50>&yWP0J_=o&HLzD-!f-6330o5!LKrh(6p%;f#EpNMHb$nB~2S_?~tYv)CD4zVT$z<$(RBD zu}@kY4CWsY$?q}f2Ffn&ovj^!o%Ig98+@GTseBJD8B=l1ptHE)vSh2w4e|`j+uq>M zcG9{$Q1g+jukkg3FNdlaH>ZV11`%>6=&x&aLos`#q?vI=i2`QpCx%`pGmL`XjTkk6 zdX#hFZXzwr$vhZ>NfImX$w6@vo6A2YpvHO&{suA2o$=rz-bopImXqwr0bAbEv1%WJ z=BZw4#8fk{8hSH?D=1x}U}3`u7msCPg`hj9NI?8%SM^)vbl}0e=zpX~%3OaPrb7tz z!V_jGT(;ev#KNu>Ylaj{eP-B7+_(dK5XH4uSu=vf9#d#0{JxpTWpL)HGfXLfP;bOrc6%9>=*< z2%V@+kz{57e|Mm35ZP~lo?k0RqsFhro*#E0TAmR=6wns(`VpI?xS+mGUy|qJGR3N| z&4+7C(>#E4S7$gV_A5f=R0U8@b`;S(GSHE_L&K7l8)6vBVD~%lb`-{J>q1BI%kxZx zOe0ss)+e>+Y%|A0pyFgd3EYhW+sF?7ybuH2+?8FEW5&1}3g}<>Rml4PCHv|1M zeL;+jeYSYtW3=+qCSFNn%)f@i!6I}Pp3R=OoF`~H#KCAJh=`%c2b7B27SKl^X!jb5 z|Bx87!O(CGswbIgu%~E1n0AfC5RXzT#N6bj?YVY5eZ3Y-P3aGXWno!mwe!3jqr-JV z&VKZWi={!w>F0v%4EV1&12fd1xVSnG+*+t1(31B?AfWTS1M@VkZ}uxIBvjGzWat|w z57(BoEvR!O5?#k9L2Mdoe=E}75W+;|w=lu?wfWt2@Y7ztq(wp8Kp+L;-$y#jIT=rX zhHDr!)CDX2x~pZ~XMENMv>QW#IF3zMZ@NoKltYfP;R)q#g#yKRI`1c`{Q5Hwc*u2> zqC-=L{^B*#S#JIQqBzhL(%{m7b#O9l6XJ_Me_(FJxO?qB8CgA07CT?tWx~tBZ&Pb~ zNoZ%pisOp>X3^x&<|+@2Ii6T^w2ZIJT%Z8>->bYl%@bUJj)82pSIU-lUi}&G&JPu= zUvnK0tVCD-zqf@xPAbHHS=Ji7ZS&nu+C-|;A=fR?E8#&N#a!F+ynqLYQo-cczPGVg zCofgU%CjYWcY9Y>W{zy9I1!%meb8(k?Uzh(edL4ZGae`dB8n)yo8%TXI-a|l!S-PL zx?&?X=&3^ud4>Y039z)8j#hu08UE3-k{Nx+>_XBfGg%#a8=Zb3NmtC25)*z$)RkKe zu+>((95~wNvr$WTAe)CPO3eqm(jI^A)gliT^XWaSN+VWc$GX}-i1GG)h*};EozIkp zW<>W5lQX>ImeLu=9UP%%lo&OHVX2B!0|TU1YqAr6X3CM(rxupEJ$cp6zU0<9P~yuU zh9H38=0yZb9PG5*ic^Ju#pZdqx~#@;@`nQa-k9I6o+)-}i~@o-{htt+bJoMZ7a-LC z77CFRt*%`Al!Sa_jHw032D7FQVdZ(xdcORZ770}|!V)nSI$4TFkzD8Oakbc-O7IHI z20EB&lV0Uf{GrTE%*#i1wlw4gcmc-e%5pI-PcoyyVdv)i zx=M_SyXrHbt0NjcT`h$pq$oUr<$v?*l7v zh223_W`J|ZJp$z^RxnU$?tA-*LChRwfOc2rk)26Gw7&`Q{M<%1mFJ-}X)E^yOBmZr z6hgr)0Z*I(5BoBL?%qP=LOp~B=jlTpEB*cp$_~1spc^_Lm<)! zH}4Rs%=h=-k1&r=Q0&+L>P@Fvh<=(2ufy2p=h$MDu>GTyzARryF~EsL{Toq1^)O*w z62-baR_nUJst%iq=D07` zpth`;;Q)$&8@OoPNZY7BLJQ$R@*(Rsu zcD@2D)K-Z&!XfVGG<5|-nw=0+l~~{m3KN+`BaiHNHXOb4kZ!+6lIXyU^qtN=T=>ga ztoZGkIBtCGa@mL-d-dvLT^A*W0Ll&@dGzU{^Rn7ctD>xMcbaN0J6?f~kdWa(rF8v0DcDVEb);BBsYaq`gQ&e9w-ec?QIG)!{ zHIvsN&8qWFejBeJSWrK3NlM@Ol-_P#B?8?RwKhP5ym((}@Q0z$)?5pZ-+Clf+T)%7 z{WzoT10T2dwZTT|WQNfz-%QyXxQgfAJV=q41BRpDAB)fDlaJeJTm!NhP$Z}7(E$FO z{BWfW(S;h;`7y+glqn}hfyh~#lp?0y81qm3_23^i@~8Jt2es4KNw8UIeM`$0dSvaKeklU0@+DawVAwIbCd_p7jFz*7v--+TZlW~NS zyzzZ&UmcNV z_&&0o+_u~$h`4lS7}UYchj_1FPnv2^-`DNR;pFBo%na6#sgj$k-OYr-Er~Q!ZN&UI z9N%BMEsjmfivs&}FELH-r{aDb^5)-O5Ln}Ybbl{mZArVxBtK-)VYz)2onpMb_UQ!B z34;j;fX((fb6E3#A8LJhy5;q;L%$<82y;J1QTd4%*0fjF>NcfL%15&V_2fGk7JT7} z_14|V8sw1Ha*8qYLC7FMtVsa8L~<7TTp*Xq%$q@(;v-zqV7wkWa~90J&M8Q88DQq* zWGEb$1T+@+AjOx2H$~9!>eE&-kN1#{O4_@iBAo3&^ik%!KU*V$9zfXbG^gM1=e0{G z6(1tAMdz`QGI8ZDafNW~KE&PlZC7;-g@$ZdOo`s%{fzoJCWsMBDSU*9L_8@)q~n}K z;ev?|_9CntG0_UyPvm_I)Kbr(m?YQ#o@67D@}WHgEw;8|WR}w)(iwHZv?S-TFLmUj z#V#pT*k@-^d0ibk%~Fmq{8r0Yj5&mH2H_v99mCA*b>X;GWNPH12jS_qc>$ke=tvpL z98y0_UVj`hvB@Qng%MO4S3fzA%fBSoq~CiXqB3J;Fy(|ki+xlvs|&(1AmqTf9_V6Y z_>F1-?LeEquKWi;8r}`p5KqEB()w{>6#=2onSoQ*s`+&H!~G2 z56gs9Ks_c-K_~X%G0Z!gIM!4k!iTaIwX(zY$om4*v+u&|?fJkZ5Ml47AzYJO4>^AB z_0JdQvr6Q&YzhR&^8iBbe1SRk5wpi}dAn5}^rf}VV2=@9bG!(Xu_OJH4lj5NQXzth z5+xDqKiYo~y$D4};MY%py-@A2(EPpblrIrCq32rxNaP^rmb}B&DjxoU0VWk8JP%mKENOy)P4O<7F!wSJSuY|Dq7DH zrTS{^4o4ZsJ&~K;HQVqEKAhjRyD12t?~hcH59Qd>ovhcU{Yz41%yB$4^hXLb&MP@i}y}@}wgW<2^K>@8FsiwsUcZbv4%tAri z+k5}N#r5%#$LhBdjX7DuG(*G?`L>GXg-LGwIF*G2R?KSeb!;UmA6IpDvP4<59G*ob zS2{NN^d;V1nwTk8rt$^VjYL9HCg-V=`Op>L9z8Wco1G0#5BZ>cQoAxw)=+$*lbb8b z38Rl)lb*RaQZOesM@GO*cN8L@x&o&@#TRfkN+^)|OfGdR7u`QX=G{mf1yfWQS)hI= zIr>$eYH}jPDijWB`JeaD@nL25;?Y?!r4Z0ssAG@Pm+kX6_?H@Ea-sIr#yNtA{Sfii+?yCI4{ziB6ohu6mfIzMPl&>{ieYhUV@)5%S z%tAhd7Q!YH$@q5U%hxC1X~S7uJby+TH&PA%x7Ej=Ex^Z1n7qr6?hH^1)uN>^a9a`W zJT)$+U(bmsoocxomHfHYWY-SXsvtMx6^-zp@z+d6jYRBlN_e-KdesPDkk3#Ah$Hr9 z%_47X2)9~I8+P6d4tPD*Jzq}3dhT9!ocB_Du0C_Aj?9`D)&mBqCZ zdjy7;$rfh~<_1Zu@IgNDP2=gPA4=XdrJBQ;NP^)CXXwY|(L_vapvKu@+1ym7&rGd(>-^g5itETe!~~BqXcLMBp2U5EIZ3E2wE})@%}XD^GdLpK~eviWD3% z19@;8%3_&s9C&|m%a6sR9L!yHh^ctLKg;IV62&B{ABnto|@eTOrvKf%!aloH`> zicS5s7$`vn5EsFarVBQhhXV1_70aRWmFirYD|l$x%eapw-ddOYf5e6 z>2!(a_pq4Jq^I9xi~4F2l8(YF$309d_H&kc6T00;Fab*8s!}neF^h3QuGA6<6sAwF zhETxqC7xW&sRMhGnh;uSB9y$bH;a2NJjxr%R0o@QdxgS8{E5=f3Lw#eE)lb8JosTl zroiBb)YsHH7bhws+M&M*w8ft}7zA)C#&K#LMTx6FhQ;TkMo$nFo4s=mJ9BV4DcG=T zvfcTVnN|<@t0-nz5-+&ZRsH&?nTgMKQX6!j^EKH>{?6H@)|a0{#qP}TtXeADJ_JB^*Xk1XGrj(!T> z-1q28%86=KSo@5q&y}eU(-k1w_w&WlB~pT}$mPFcnu!ywkixlP<29mN^$EvyJHz#n z4x@A{6Nu^7;+IOJiNP2_$=tLy9NH_z-uC$oo7FJO^q=urx4JpwS8Hb~glC4JP8==( zXY0Qe@fSM^hm*U|E%-p^>Gh6}iox*2KaZIWS(7t-xklRWuVbbq-wk13VJT_^qId-? zKGyb4AglnEm?wtN8C;zGtPz+qa)Mtu647(@L`2_ajBpTU+-uc<`RmX=xD4>($iqYl zm5l|Sf`O*21@wN$`s!+5x*u*nR8GqD=NP_BA!m?*J24VVeX z&h#cH$(FZ#(C6&)EC)dQSX;upU927`Ef4j@+7iXfv(7Kp<}rRe zX2)>$Q7VJJ!8CYn9=s(H`R|1>XT&2+;RIw+3Z}64*ht^R5eLkS-&as=jz$l1{9^dV z>b&+IflA9aGsCxOrBNdECaAx;oD^{y`5elu=xpe$!DMg^j6cqC^5ll>O5DVhlEc#r zw82^hxqJ61bJfb9P3Q-XaY}y{*xj^bUK=V9X`BSv<-SW_=+l! zJ;nrO|H6t$&GFq2Q^2&-m&U?u_}!43De;+!Rc|-bsG`soiix!XM@44as-903mtT6Q z(xjapExrCwLFr4WE73ZYQtP)^T^B39!r7iU3O3w?>Q}6O6tPX{u5EA!jqmcYEQ>EK zNGZOzJ6}S7)bh|5b-A21{?)3srJd|V+6>WmX>}?t>yGubsD2&5m0Zq~m?D8)t*sm; z9(F`telpcIt381-i}wMnp0({M2R`v*%gATJpooP(;VBfmT)8Qs@j>hRxM~RF8RfwJ48U5f;)yNl>V-;rNRrQ zFEePJ&v|)l6s_p=gx{S3x+^+mMA)bQ2&T#7t1^Xg<&{aulM}pecScrtv}K{Ov(Kfa!(V_?rZ zMYhN7Z;T}YXrGp)!Twnj1Yzkx$^*KPGvKfF-@{=|=kKaa zV^nX;O_q3X*ExYpI^O3Is7U3a--y@<>nc0d(lS(G23~$wWLM=@Fu+%cpV|5D3W#+4 z4qMlVoGnt5nb@eMM@F`4`ih&2w~!z!GBP_%$Wcqs`Q#x<`i!D8E-d1KHR_8(qrINx zFcm9`x0_m__Nm!Y+EsXg1G=k)6WK$n^r)fzXV(StAV~xGnY@6txvWFI{G6Wt+&$Cr zRx)c;xODfmE=K5hs^n+3f(VeKo!Z=r!mD2GGtb>F+vonAAjOe{vXgi-9~>j7?-Z!M?H=sr8;SGB8#LfQia%*=-!{Eae~xty0nTL`LKMIOIE;Vlgzcvv>+6Gq!+7=L*$*8)Sn~; zQHR9OZLoI7Wt~(A0-4epeGER4+Y_`jRvI>n7t`>7VJ@`UNFQ-fBD(J6W57vH-(DPn z=B_JiDuzGE3Rho}RA1EhMBMI3FZU5T{c*i~Ie!H=EIjgPMkjs+vLGmVD($@rgQ}!V z<5G|Jn=pH=P3xMUGK*9^8kL#-5-jdxhU@P*y|K=gwl%?0pO$)x%hSQe`IKnM74@xj^gEMf`}fh@xKJ)iJT| z)7|!zM-KC>6lV~T4En@gG(#?vywHcjtATI%VI2M>QCDGbw=IV?RaAX-V0qdFZh_e( zgTme)OXO8qtA1|_q4@SB-4PbD2q<0*$xZE&>!9&IdvBY3aybjKNYrI>JqiTn5yggE zXlOA{egUmtAdC#ldZ5s)N|oX5{zU=Qb#gz153EqJ)J4hCtV@azsLQb7@6%fmh&gG- zyW97d&hDoF;fQXm@<(QGJdwoq5Dht75I0IYcsdB$ZJ^M`GbrGG-E(`aMEzoV{mm$lP45d6Y!AyHyvv=NNVJzA=KCp&>|jRcc7>^y1tqTCDmg+n_E3eT32O_hM>{bcW6fVxm>9M0 zCW6!RKuSE$g$8<*)Gtz7y^ZF&v8^(PxHBDBBV$ zl#VD{>-k$_&8f~L+CXLXkBdR;qKo9WVTNBa<&o7D@D3kQ4_u`;Jl>{^J!wNNu=nW= zp@?#U@slbJnH=|14Y|jREF~g}c`WJ>h3Stq>^kdXG>1t&By~aKLw`>$O4Svb!L^^` z>!xLgZn_qNEG$_84R~T)WP&KJMdjks4fjGUgBR2YyUT?e(Lv-2$~gmXwR-{+n;W1X z-Lkq2JZE6@ExX^Y(SooDGZ@A$#P*&+Z~GaJ7b~_kCRXpFhpSBtJrQC#Zde86NXqU4 zM+f{!!C_`t$<@ic6-{H5z45Ik-Bm8KgR!+{neP%;)&Yi|0eH#tA}G)UF;UNXgTFNBP*^d?l%GhVO1H zFMb9EbWJ^Mig7O>7i3ADtXjU~C&nL{@KMuLJQ>C#LVZ{>h6DF~GJ>T6-e!gDQGGSR z4;=G3P3Y;yGyr{2S5yAXGP7v`Dq>_k4S-D1{c0JF3wpv$PQM>eT}GHuRQE`;OAW#= ztm)V%_TU;9hUoOs>jT6*1^f83DbcrDiM`=)CZXknxhOHVd_w8~J)`-W-m zimjLlCMR^*TDrbL$x?)MBo@6UDUq2>QFz#LK=t?m6BmbQ$`qUmr8u&cU4# zqONi0^3(%3C1Ev4<2A4dO@`+POQc{AUl%y+)y?Qk$*#$kjrE$mbi+@LbebO$LK31ES( z8`oi;Dr&m>`-D1>a6&X^G(M`o!rNessNFtcH^0fNj)&9e5B?}xio9=U0!h{(Sy-sQ+HsZ>J(%{lOuAkqZ}u=ruKh$6*CGz&&0-$YTS~B z)x4NsW+3!v;ZNU`l}B%R*_SOpkcIIhphd3R3y>;?wp~Iv`*`gGrM$R`tz< zZZG1j1-kJ=GTE0^E=Z%Oj2fX~P@;ZCpWLDD*5}HFx*iG>?JT6dUlzh}^^i6!);WE4 zRnmKvpT4g4Vi1ez4N5v$?$q1ZircjEgM*sw&_E6Cutmw(1E0Q*sJPo0hE?L~ehgNh zyK2^eP9Miy%vNgZ$eC*LWdG#gZ^PLEz1M;PR(T^8^X5MN?xMLdMX3+GXwcacM`Z5_=m`uxDgae7<0{!%b2K72k1*D2S%-3Si)~xF({Y;rXNq{I7g0X zWqw$~f2NkcxxIi1=}7XoNqzLXbYrcnbEroDDr&LVP@F4U~p9D+P<}KO&y7 zIdPA-4dp8$JrZ#`?KnFuRS{Y`9%`)>){fmQZ$cVhC~faM>uzjMXH#xf zekuYJ@VobnP@t8j-e0QT_BXG-`uGv%SznxU9IZnR~VIoJ0kzd}r${@3b>%z~3t+>M1{BsVU`}3iwenaga zxDXDh{gCu|=fVzr1C^x3{(Egw(|_AS01mP(Sh^oz9D5$WoORw>svFdzaJafAkP`)` z)tO;)n(_+SKqTz|(ChJJm>M*wizh}tqyl>N+m(603*wWSa9fj_?65>LX32xmBGpj# zTKVT&IxWksp!H;C$zWVR9fZ$}kPYAm7x=ha*7z3a)DgtPem(&d@b_QGe2$ zw>2D=qE;PoeQa`ax8zJD!%bF&Cb;6zdt6*nSVqmtNnPO7_vcHk4RQ4O!DE*G=*q_M8~+V& z1l?OA)*z4k`hh~|M!L)@UEWxfGeY`SzWZ6ImEcju0)&}=W1q-s0dgtxf95TAYPQ+7 zi@Rc9^+3C||Nohn7;lYD-O2T=0J;%2AxjD!Qg%Sko#L1&hs0I?GkWw~g>AcqelY2t zMe`})5#;Uuuk&)!x0;o1?XOAyXDq}bB#@B-%+>g3J~Z?K^28z;{owNO2EOqLyH&Q| zkfY`QI+ zB@%cwMg!r zPKgDL31@e8`wQt>PP>vHd9_kPKsQ^hYX>NM|^~#>+NGYiCiugD&qgC69{&7# zzgeU90PjL~Mke5){dbteaWIl1K)d7gcF8E-_pA+3N$3{$?tIg+%Jt7EcIVBUT+{KP zD89LQg%#jmKNPMd{m`Db+nU9PdpaxVljc>2fwT1vriC8IO<}={URZQ7rIGgg4PWO0 zbe^rYgY1D|Sj5WH>h>f0<4&W%S9g7%zeS7QRz~qcciLIU3r&BCJcT`%zV|VqpH6D24@s&)#Do-)9crE-VdM7I1WU`}eEZ7Ms$-7<(CDt+a=BXsVr>wc z9>ahL=NKO^R;B1__BniAFQc4zE6oS^Ur+JuLVzn>dn%|HR~1DVO>xFF%E+xS;PZfc z0aSdwX1l(Q^KRQJ>Y~!UdX9fB9k=2GUkcz!pk=Skn|>o==q;Rs8xZRa-)>3(I;-|8 zjb(lIjX4<(?PDRyab?%D&A#_%O~y1^N1s1G82FwxE#AKFu>{t|vD6-ACaHUu*)Db` zAwmQMbE@16zqt!*8G09SDfKQ*7+>#C;Tywm9#?mOLK-Rycs9HS__dhc7it15PQ}Gf zuYrK)^kf3vX^@s4-SGx3CPb3ahQY|an?KID=D5Y^=St6&@>0G#oYQ(DDof|g(};>u z_b=~L#JT^hR>(r6=bp~#bzWrLF!w&>sL*+8zFzJ1uVs_O_S30jpslDByusGfWqhC= z9ls9J-P`Sw?vaAcWOhj&ZZoxAz)b;#&a=ylEfcHlrjqbuVN+EQBjw-LxaXfyNjuMv z(}9M-?yk7E@rj?0TcMaoi~x_5v?ATp+ssIxJS1K2!A5=M-*tuMr?-HoL+WF}(_O&Z z!|vk51RF(T_3yHu!|*l+(T4bU0XH9KqeU+8jc;N8HJY+bwH2yze7BvQarR{*&`$<7 zU*V;(v>)d4r^KC&;c4jykB`e9t~F(y#h)emGZT+T&BVzNE&`2zbCIvwQR0_|`BorScoc%8n#_$k&kJH?u;YW25~9JFq@+G21% zw>iaEY}EFUrdQ96h*S}3T4Y*}pCL);xvyUn$f;S$P&8yNnR3Bkdld3^VhHZ99Pk!3=1+IxG9{Sa%+;+=BEgL=+clz*ZSqI{nLgrJ6_Eevb zy}F1~xv04+j_3GL19Z>-mgF?6H$d6vRK%6N%-q`a1U|2B+PvE@A1{k{d6{1y=0q)O zNW^Ycy^h_ro_9an+}k=*-_{)0zIs)a95n%>1 zf{yvjL7BhQ`|?z$8dIt|@MhY9SNF%jz)*(jH@0fw09eDP^@=Hew?wGdiXN!9CZDi%<@J_1Wbw{f80coQx!7D>G0Ifrf~FO9^Z{F~<6{B6IB31@28#=?_A0(IvH(1KexQ zOa85o%^kHq_IQRqkH4wbtwfGtBC{t@i^V{n!;Jh2wkHlnG6C-3xttMPw<f z0N+@pew&YVktyUTx*R8q?Nnr%47hugB|@F?N%)#v5i)z3*_6Fi^OAJ5&<=VhhSTYa zvCGk&{XEX0Lwq+OHnPw)@3$JNDOq~Q0J)4Q$OCB|obpb`v;e+VO!Dm0Ot|@3eAw1k zfpr$sUCoXrN1LpkNALWM5z3$CLt0@%*GW)w-*U^LxgL zwZgN=9*qeCUT>EKNBUX5p>#&6&iM6-Q)0j1I#^0OAChuT6KURc-{AbXO3I=fJtmD) z(HM_-6vos&M%{^nTH->vi<=sUR|9_zDTphJQnaTDuNaq*bhb*r>g~qQ>Hx`<>tK^! z4MBX_ud76OTY*50ONirvFWhTa3^t%QSd1{#9uEXl@I%g{yYC>$DDCG3L7mU_qBrb~ z(<2Ctab<$)Z%1#3{ElsV_^5Yxazh{`j+53P%`VLnZ?4{|QXs9Icv-i_uMzvE`1#vs zNMyw%((`=w+!X0`dmlL1K7QIXuRz8}m#gvNs6Ml)AUarUrdBwzfCDr&}u($}_ zxRHW#tEwJ`4&SGQ_Yv->VfMy?XDWR1;uQRW;`70v{)g7Qv}Wm4@9+bx5G4kBlNwZ)u2WGkj{MhM!;TTr&|~4$u--+ z9iruPHkXtr1H0Xz?3JYlEL5?Wp<5?EmsOw>WMA;9SZ-op4AyBv-`py3h+C9der5wEc)dJb7E7|Iuia+y%&tEZrIXW-%7>axM!h{6n^`Ey+I_u}o8@YD; zoN!LZ&D-7d_f0oe-}HNIj-&EMw|6|37WeM2H#m`%%8Ex97`Z)hKArb&>x!jrYzh!R zD6?JQTJl6+QM`6nlm$IEPKz(mR}2U{`gRMsfz(D^7v(O}f!Tc9*`pCZk7~{hX^pa| zEl$kRO`gLV$6v+*@FR&;N7RR}Yqooy-!*Asc}g4G;)k6M%@1~4U#56Ahu`1s0lI;k zHMttu8{YRqBMM6V0jls-Y5j`V!PJ-wJuGEA$Xq`_d`Nz(n2;FZF3&&fWN8kPA2grh z>%O`sFy#lrL{VtL7rvDpZpPV^@B5M`%i>?Tw>?!w7%ub(e9lqP&uZFFjkWlBUw|%kAc>iCDVu%?N{PgB z6c38X!=DM8vu{GgOM*-lm`5vGa&PKv52;IUQ7jLb2D^?u*IBXwdm277B%a!lzISb# zrq9*UzuXSF5f4+48f;@DCrKN;x0Ef4E2ASSaT9x{CN`Th17ndJDhOuqdbcbVtpC`E zh^ffz-o1Rt1=;Ho&)Di9myU~oNuz=Twu?3w#2yaf0pGK@${)u{viq`MrEOBVEdLY+ z3D4t?(BuRJgtV-rP%yhXkP(pXZ)CsuR`4SyKPJ8sH}YC)Rs0E%D;Gb+l`3(T3_*t}pooQm#hZE0dDW*+-=5i2<(-5u8JX`cNZ)5xILf!G%l01cYhB~+_wPyYTB zNP0wqIx|w;F;*_%+>P%&FU?{>!7I(uVtm^9@?5NhVrB35g{1t@>pW0-JvyBZx1>Zl z&5!GGMKc>Z`F8kCaZ$Mlb)jw!xmikbs&jr>d2b;8&H8adb;@Rgsptib0sg%6S$JZf z*JUgjjpQ}IE>*X~umH;cONP(!r10Axj$LsMjJ7J=kFMnVhM93dk++6%AG5%EmK7H@ z$GwD)TyaL84e)#A_Rkl)B#sUIayFAaVNX|iDnW}8M^=C2-BJq8{)#DZMh5r)4GIAR zSG}uG*sIw$myPt!7{@M&Awd}R!u2#MFl)}M0J^Fx=lhw|X~hqo&jahYrOj%&lU=O$ z`9+X-u}{8Kdu$pygD53GtsDn7?BwBnV3HHhZX8a2durh!-fI##kWPfEioN9#H=Ox< zRJ$oGDuh%#8wD*U2iiQcr)ixRS{2q`l(C8 z&uwgd^2kXva~G#kQSO8{Bm*%vncZJYs#yuNa0jln1KFkR4V$hHvY}GRw?S31ZLPtjbx46zTI)+1z zWV-TKzxyr-7+66)@{wi%lmm@i#k2YUtnU4kJvWSx&fZow$BaKCb;hk7uaCWYn=KOX zT1#Q_f3^SqPbCHBsBQ_Fc6R+o%L{r8Yfn#{bS+-_v8S}d94>`3W^2FSS#f67n|WC} z1&<4_eY}=q-mq<%v;gdk!<~O5Jq$&Cw?fCmAO*=c=>w zEVzAcuR(fJ(E*@Pqm^X>L#(>>nHG?&8v89jJ_(2IbE^~29f4>lEdnkM_A8sg36k~U z+cH-MxVGK;`=L3V5Dl-M0O#xGzA+F6$yI2jPVZ~(NxKHV(!#*I{grWs+LFV1wDgMj{q9Fj};MXbbGeNQko;chF znYXQ2|IAFN29SfVpX4)6g!pG0$h_R=aWjk!AsRpqUN>1b?GVuc@W;MS>GAPf?K3qP OfWXt$&t;ucLK6TsTYHcI literal 0 HcmV?d00001 diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithVoiceRecordingAttachment.default-light.png b/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_draftWithVoiceRecordingAttachment.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..41c8e7b2aa97221b4491b24eb220a55015592f7f GIT binary patch literal 15241 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 Date: Fri, 7 Mar 2025 16:37:36 +0000 Subject: [PATCH 14/23] Improve the composer view model code by having a fillDraftMessage and a computed draftMessage property --- .../Composer/MessageComposerView.swift | 3 ++ .../Composer/MessageComposerViewModel.swift | 39 ++++++-------- .../MessageComposerViewModel_Tests.swift | 52 ++++++++++++++----- .../MessageComposerView_Tests.swift | 9 ++-- 4 files changed, 64 insertions(+), 39 deletions(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift index 37b1ea5c..201e1da1 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift @@ -215,6 +215,9 @@ public struct MessageComposerView: View, KeyboardReadable viewModel.selectedRangeLocation = editedMessage?.text.count ?? 0 } } + .onAppear(perform: { + viewModel.fillDraftMessage() + }) .onDisappear(perform: { viewModel.updateDraftMessage(quotedMessage: quotedMessage) }) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 0e831168..8761a6a7 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -124,14 +124,11 @@ open class MessageComposerViewModel: ObservableObject { } } - @Published public var draftMessage: DraftMessage? { - didSet { - if let draftMessage = draftMessage { - DispatchQueue.main.async { - self.fillDraftMessage(draftMessage) - } - } + public var draftMessage: DraftMessage? { + if let messageController { + return messageController.message?.draftReply } + return channelController.channel?.draftMessage } @Published public var filePickerShown = false @@ -228,12 +225,6 @@ open class MessageComposerViewModel: ObservableObject { self.eventsController = eventsController ?? channelController.client.eventsController() self.quotedMessage = quotedMessage - if let messageController { - draftMessage = messageController.message?.draftReply - } else { - draftMessage = channelController.channel?.draftMessage - } - self.eventsController.delegate = self listenToCooldownUpdates() @@ -246,7 +237,12 @@ open class MessageComposerViewModel: ObservableObject { ) } - public func fillDraftMessage(_ message: DraftMessage) { + /// Populates the draft message in the composer with the current controller's draft information. + public func fillDraftMessage() { + guard let message = draftMessage else { + return + } + text = message.text mentionedUsers = message.mentionedUsers quotedMessage?.wrappedValue = message.quotedMessage @@ -274,6 +270,7 @@ open class MessageComposerViewModel: ObservableObject { } } + /// Updates the draft message locally and on the server. public func updateDraftMessage( quotedMessage: ChatMessage?, isSilent: Bool = false, @@ -775,14 +772,12 @@ open class MessageComposerViewModel: ObservableObject { /// Same as clearText() but it just clears the command id. private func clearCommandText() { guard let command = composerCommand else { return } - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in - guard let currentText = self?.text else { return } - if let value = self?.getValueOfCommand(currentText) { - self?.text = value - return - } - self?.text = "" + let currentText = text + if let value = getValueOfCommand(currentText) { + text = value + return } + text = "" } private func getValueOfCommand(_ currentText: String) -> String? { @@ -838,7 +833,7 @@ extension MessageComposerViewModel: EventsControllerDelegate { let isFromSameThread = messageController?.messageId == event.draftMessage.threadId let isFromSameChannel = channelController.cid == event.cid && messageController == nil if isFromSameThread || isFromSameChannel { - draftMessage = event.draftMessage + fillDraftMessage() } } } diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift index 1085ada8..fee74d99 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift @@ -695,6 +695,26 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { // MARK: - Draft Message Tests + func test_messageComposerVM_command() { + // Given + let draftMessage = DraftMessage.mock(text: "/giphy text") + let channelController = makeChannelController() + channelController.channel_mock = .mock( + cid: channelController.cid!, + config: ChannelConfig(commands: [Command(name: "giphy", description: "", set: "", args: "")]), + draftMessage: draftMessage + ) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: nil + ) + viewModel.fillDraftMessage() + + // When + XCTAssertEqual(viewModel.composerCommand?.id, "/giphy") + XCTAssertEqual(viewModel.text, "text") + } + func test_messageComposerVM_updateDraftMessage() { // Given let channelController = makeChannelController() @@ -738,15 +758,15 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { func test_messageComposerVM_whenTextErased_shouldDeleteDraftMessage() { // Given + let draftMessage = DraftMessage.mock(text: "text") let channelController = makeChannelController() + channelController.channel_mock = .mock(cid: channelController.cid!, draftMessage: draftMessage) let viewModel = makeComposerDraftsViewModel( channelController: channelController, messageController: nil ) - let draftMessage = DraftMessage.mock(text: "text") // When - viewModel.draftMessage = draftMessage viewModel.text = "" // Then @@ -761,14 +781,14 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { cid: .unique, messageId: .unique ) + let draftMessage = DraftMessage.mock(text: "reply") + messageController.message_mock = .mock(draftReply: draftMessage) let viewModel = makeComposerDraftsViewModel( channelController: channelController, messageController: messageController ) - let draftMessage = DraftMessage.mock(text: "reply") // When - viewModel.draftMessage = draftMessage viewModel.text = "" // Then @@ -778,14 +798,14 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { func test_messageComposerVM_whenMessagePublished_deleteDraftMessage() { // Given let channelController = makeChannelController() + let draftMessage = DraftMessage.mock(text: "text") + channelController.channel_mock = .mock(cid: channelController.cid!, draftMessage: draftMessage) let viewModel = makeComposerDraftsViewModel( channelController: channelController, messageController: nil ) - let draftMessage = DraftMessage.mock(text: "text") // When - viewModel.draftMessage = draftMessage viewModel.sendMessage(quotedMessage: nil, editedMessage: nil) {} // Then @@ -801,14 +821,14 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { cid: .unique, messageId: .unique ) + let draftMessage = DraftMessage.mock(text: "reply") + messageController.message_mock = .mock(draftReply: draftMessage) let viewModel = makeComposerDraftsViewModel( channelController: channelController, messageController: messageController ) - let draftMessage = DraftMessage.mock(text: "reply") // When - viewModel.draftMessage = draftMessage viewModel.sendMessage(quotedMessage: nil, editedMessage: nil) {} // Then @@ -818,20 +838,21 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { func test_messageComposerVM_draftMessageUpdatedEvent() throws { // Given let channelController = makeChannelController() + channelController.channel_mock = .mock(cid: .unique, draftMessage: .mock(text: "Draft")) let viewModel = makeComposerDraftsViewModel( channelController: channelController, messageController: nil ) - viewModel.draftMessage = .mock(text: "Draft") // When let draftMessage = DraftMessage.mock(text: "Draft from event") + channelController.channel_mock = .mock(cid: .unique, draftMessage: draftMessage) let cid = try XCTUnwrap(channelController.cid) let event = DraftUpdatedEvent(cid: cid, channel: .mock(cid: cid), draftMessage: draftMessage, createdAt: .unique) viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) // Then - XCTAssertEqual(viewModel.draftMessage?.text, "Draft from event") + XCTAssertEqual(viewModel.text, "Draft from event") } func test_messageComposerVM_draftReplyUpdatedEvent() throws { @@ -842,23 +863,24 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { cid: channelController.cid!, messageId: .unique ) + messageController.message_mock = .mock(draftReply: .mock(text: "Draft")) let viewModel = makeComposerDraftsViewModel( channelController: channelController, messageController: messageController ) - viewModel.draftMessage = .mock(text: "Draft") // When let draftMessage = DraftMessage.mock( threadId: messageController.messageId, text: "Draft reply from event" ) + messageController.message_mock = .mock(draftReply: draftMessage) let cid = try XCTUnwrap(channelController.cid) let event = DraftUpdatedEvent(cid: cid, channel: .mock(cid: cid), draftMessage: draftMessage, createdAt: .unique) viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) // Then - XCTAssertEqual(viewModel.draftMessage?.text, "Draft reply from event") + XCTAssertEqual(viewModel.text, "Draft reply from event") } func test_messageComposerVM_draftReplyUpdatedEventFromOtherThread_shouldNotUpdate() throws { @@ -869,23 +891,25 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { cid: channelController.cid!, messageId: .unique ) + messageController.message_mock = .mock(draftReply: .mock(text: "Draft")) let viewModel = makeComposerDraftsViewModel( channelController: channelController, messageController: messageController ) - viewModel.draftMessage = .mock(text: "Draft") + viewModel.fillDraftMessage() // When let draftMessage = DraftMessage.mock( threadId: .unique, text: "Draft reply from event" ) + messageController.message_mock = .mock(draftReply: draftMessage) let cid = try XCTUnwrap(channelController.cid) let event = DraftUpdatedEvent(cid: cid, channel: .mock(cid: cid), draftMessage: draftMessage, createdAt: .unique) viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) // Then - XCTAssertEqual(viewModel.draftMessage?.text, "Draft") + XCTAssertEqual(viewModel.text, "Draft") } // MARK: - private diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift index 6cdc882c..d1f965d3 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift @@ -576,15 +576,18 @@ class MessageComposerView_Tests: StreamChatTestCase { private func makeComposerView(with draftMessage: DraftMessage) -> some View { let factory = DefaultViewFactory.shared let channelController = ChatChannelTestHelpers.makeChannelController(chatClient: chatClient) + channelController.channel_mock = .mock( + cid: .unique, + config: ChannelConfig(commands: [Command(name: "giphy", description: "", set: "", args: "")]), + draftMessage: draftMessage + ) let viewModel = MessageComposerViewModel(channelController: channelController, messageController: nil) - viewModel.fillDraftMessage(draftMessage) - var quotedMessage: ChatMessage? return MessageComposerView( viewFactory: factory, viewModel: viewModel, channelController: channelController, - quotedMessage: .init(get: { quotedMessage }, set: { quotedMessage = $0 }), + quotedMessage: .constant(nil), editedMessage: .constant(nil), onMessageSent: {} ) From 5975ef691b57776f78151a103e520d50267b202b Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 7 Mar 2025 17:21:57 +0000 Subject: [PATCH 15/23] Add test coverage to previews --- .../ChatChannelList/ChatChannelListItem.swift | 2 +- .../ChatThreadList/ChatThreadListItem.swift | 2 +- .../ChatChannelListItemView_Tests.swift | 43 +++++++++++++++++- .../test_channelListItem_draftMessage.1.png | Bin 0 -> 18725 bytes ...lListItem_draftMessageWithAttachment.1.png | Bin 0 -> 22995 bytes .../ChatThreadListItemView_Tests.swift | 27 +++++++++++ ...test_threadListItem_whenDraftMessage.1.png | Bin 0 -> 39866 bytes ...stItem_whenDraftMessageHasAttachment.1.png | Bin 0 -> 44038 bytes 8 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_draftMessage.1.png create mode 100644 StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_draftMessageWithAttachment.1.png create mode 100644 StreamChatSwiftUITests/Tests/ChatThreadList/__Snapshots__/ChatThreadListItemView_Tests/test_threadListItem_whenDraftMessage.1.png create mode 100644 StreamChatSwiftUITests/Tests/ChatThreadList/__Snapshots__/ChatThreadListItemView_Tests/test_threadListItem_whenDraftMessageHasAttachment.1.png diff --git a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift index 8d388654..3c83737c 100644 --- a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift @@ -107,7 +107,7 @@ public struct ChatChannelListItem: View { } } if utils.messageListConfig.draftMessagesEnabled, let draftText = channel.draftMessageText { - HStack { + HStack(spacing: 2) { Text("\(L10n.Message.Preview.draft):") .font(fonts.caption1).bold() .foregroundColor(Color(colors.highlightedAccentBackground)) diff --git a/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift b/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift index 3b895703..5cce918f 100644 --- a/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift @@ -186,7 +186,7 @@ struct ChatThreadListItemContentView: View { .font(fonts.subheadlineBold) HStack { if let draftText { - HStack { + HStack(spacing: 2) { draftPrefixView SubtitleText(text: draftText) } diff --git a/StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListItemView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListItemView_Tests.swift index 6c62321b..14bad175 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListItemView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListItemView_Tests.swift @@ -18,8 +18,9 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { streamChat?.utils.channelHeaderLoader.placeholder2 = circleImage streamChat?.utils.channelHeaderLoader.placeholder3 = circleImage streamChat?.utils.channelHeaderLoader.placeholder4 = circleImage + streamChat?.utils.messageListConfig = .init(draftMessagesEnabled: true) } - + func test_channelListItem_audioMessage() throws { // Given let message = try mockAudioMessage(text: "Audio", isSentByCurrentUser: true) @@ -202,6 +203,46 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) } + func test_channelListItem_draftMessage() throws { + // Given + let message = DraftMessage.mock(text: "Draft message") + let channel = ChatChannel.mock(cid: .unique, previewMessage: .mock(), draftMessage: message) + + // When + let view = ChatChannelListItem( + channel: channel, + channelName: "Test", + avatar: .circleImage, + onlineIndicatorShown: true, + onItemTap: { _ in } + ) + .frame(width: defaultScreenSize.width) + + // Then + assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) + } + + func test_channelListItem_draftMessageWithAttachment() throws { + // Given + let message = DraftMessage.mock(text: "Draft message", attachments: [.dummy(payload: try JSONEncoder().encode( + ImageAttachmentPayload(title: "Test", imageRemoteURL: .localYodaImage, file: .init(url: .localYodaImage)) + ))]) + let channel = ChatChannel.mock(cid: .unique, previewMessage: .mock(), draftMessage: message) + + // When + let view = ChatChannelListItem( + channel: channel, + channelName: "Test", + avatar: .circleImage, + onlineIndicatorShown: true, + onItemTap: { _ in } + ) + .frame(width: defaultScreenSize.width) + + // Then + assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) + } + // MARK: - private private func mockAudioMessage(text: String, isSentByCurrentUser: Bool) throws -> ChatMessage { diff --git a/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_draftMessage.1.png b/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_draftMessage.1.png new file mode 100644 index 0000000000000000000000000000000000000000..d07c04904bc8c6af29f0894a732ff5cfd6a396b9 GIT binary patch literal 18725 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 WjyO{&@SlQ^l;qU!m&lks|9=2f_K4~L literal 0 HcmV?d00001 diff --git a/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_draftMessageWithAttachment.1.png b/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_draftMessageWithAttachment.1.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ecb2b2bacba01e028df74985fcfb83c82c7dd5 GIT binary patch literal 22995 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 Co)^jh literal 0 HcmV?d00001 diff --git a/StreamChatSwiftUITests/Tests/ChatThreadList/ChatThreadListItemView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatThreadList/ChatThreadListItemView_Tests.swift index d2de6ac9..19dd5a40 100644 --- a/StreamChatSwiftUITests/Tests/ChatThreadList/ChatThreadListItemView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatThreadList/ChatThreadListItemView_Tests.swift @@ -23,6 +23,7 @@ final class ChatThreadListItemView_Tests: StreamChatTestCase { streamChat?.utils.channelHeaderLoader.placeholder2 = circleImage streamChat?.utils.channelHeaderLoader.placeholder3 = circleImage streamChat?.utils.channelHeaderLoader.placeholder4 = circleImage + streamChat?.utils.messageListConfig = .init(draftMessagesEnabled: true) currentUser = ChatUser.mock(id: StreamChatTestCase.currentUserId, name: "Vader", imageURL: nil) @@ -130,6 +131,32 @@ final class ChatThreadListItemView_Tests: StreamChatTestCase { assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) } + + func test_threadListItem_whenDraftMessage() { + let thread = mockThread + .with(parentMessage: .mock(text: "Parent", draftReply: .mock(text: "Draft message"))) + + let view = ChatThreadListItem(thread: thread) + .frame(width: defaultScreenSize.width) + + assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) + } + + func test_threadListItem_whenDraftMessageHasAttachment() throws { + let message = DraftMessage.mock(text: "Draft message", attachments: [.dummy(payload: try JSONEncoder().encode( + ImageAttachmentPayload(title: "Test", imageRemoteURL: .localYodaImage, file: .init(url: .localYodaImage)) + ))]) + let thread = mockThread + .with(parentMessage: .mock( + text: "Parent", + draftReply: message + )) + + let view = ChatThreadListItem(thread: thread) + .frame(width: defaultScreenSize.width) + + assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) + } } extension ChatThreadListItem { diff --git a/StreamChatSwiftUITests/Tests/ChatThreadList/__Snapshots__/ChatThreadListItemView_Tests/test_threadListItem_whenDraftMessage.1.png b/StreamChatSwiftUITests/Tests/ChatThreadList/__Snapshots__/ChatThreadListItemView_Tests/test_threadListItem_whenDraftMessage.1.png new file mode 100644 index 0000000000000000000000000000000000000000..585e909106cf21f9cea042f2dba3a523e6e074fd GIT binary patch literal 39866 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 Ll+_AvSqJ|EIDh*h literal 0 HcmV?d00001 From 76cb87c5583304a83f4bc21f906f476ea6b2e45f Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 7 Mar 2025 17:24:24 +0000 Subject: [PATCH 16/23] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5ee8be0..d8b03ef5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### ✅ Added - Feature rich markdown rendering with AttributedString [#757](https://github.com/GetStream/stream-chat-swiftui/pull/757) - Add `Fonts.title2` for supporting markdown headers [#757](https://github.com/GetStream/stream-chat-swiftui/pull/757) +- Add support for Draft Messages when `Utils.messageListConfig.draftMessagesEnabled` is `true` [#775](https://github.com/GetStream/stream-chat-swiftui/pull/775) ### 🔄 Changed - Uploading a HEIC photo from the library is now converted to JPEG for better compatibility [#767](https://github.com/GetStream/stream-chat-swiftui/pull/767) From 767eedb72db4e925cd2aa6dea4484c3b1c291c93 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 10 Mar 2025 12:35:56 +0000 Subject: [PATCH 17/23] Fix snapshot tests --- ...test_threadListItem_whenDraftMessage.1.png | Bin 39866 -> 40168 bytes ...stItem_whenDraftMessageHasAttachment.1.png | Bin 44038 -> 44339 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/StreamChatSwiftUITests/Tests/ChatThreadList/__Snapshots__/ChatThreadListItemView_Tests/test_threadListItem_whenDraftMessage.1.png b/StreamChatSwiftUITests/Tests/ChatThreadList/__Snapshots__/ChatThreadListItemView_Tests/test_threadListItem_whenDraftMessage.1.png index 585e909106cf21f9cea042f2dba3a523e6e074fd..6c062c06dfe428c677ceb11270a888998d073d54 100644 GIT binary patch delta 23841 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 delta 23889 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 delta 29403 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 ifu;U`^Z Date: Thu, 13 Mar 2025 18:17:22 +0000 Subject: [PATCH 18/23] Fix broken compilation caused by new formatter --- .../StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift | 2 +- .../StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift index 3914a122..e36f5de9 100644 --- a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift @@ -301,7 +301,7 @@ extension ChatChannel { public var draftMessageText: String? { guard let draftMessage = draftMessage else { return nil } let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter - return messageFormatter.formatContent(for: ChatMessage(draftMessage)) + return messageFormatter.formatContent(for: ChatMessage(draftMessage), in: self) } public var lastMessageText: String? { diff --git a/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift b/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift index 4fdaceff..28a313fb 100644 --- a/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatThreadList/ChatThreadListItem.swift @@ -83,7 +83,7 @@ public struct ChatThreadListItemViewModel { guard utils.messageListConfig.draftMessagesEnabled else { return nil } guard let draftMessage = thread.parentMessage.draftReply else { return nil } let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter - return messageFormatter.formatContent(for: ChatMessage(draftMessage)) + return messageFormatter.formatContent(for: ChatMessage(draftMessage), in: thread.channel) } /// The number of unread replies. From 84168e5d26424134a96175e043700fcd5fb5d7f7 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 24 Mar 2025 16:53:38 +0000 Subject: [PATCH 19/23] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aaf02ba3..c9a7e44c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### ✅ Added - Add avatar customization in add users popup [#787](https://github.com/GetStream/stream-chat-swiftui/pull/787) +- Add support for Draft Messages when `Utils.messageListConfig.draftMessagesEnabled` is `true` [#775](https://github.com/GetStream/stream-chat-swiftui/pull/775) +- Add draft preview in Channel List and Thread List if drafts are enabled [#775](https://github.com/GetStream/stream-chat-swiftui/pull/775) # [4.74.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.74.0) _March 14, 2025_ @@ -14,7 +16,6 @@ _March 14, 2025_ - Add `Fonts.title2` for supporting markdown headers [#757](https://github.com/GetStream/stream-chat-swiftui/pull/757) - Add `resignsFirstResponderOnScrollDown` to `MessageListConfig` [#769](https://github.com/GetStream/stream-chat-swiftui/pull/769) - Show auto-translated message translations ([learn more](https://getstream.io/chat/docs/ios-swift/translation/#enabling-automatic-translation)) [#776](https://github.com/GetStream/stream-chat-swiftui/pull/776) -- Add support for Draft Messages when `Utils.messageListConfig.draftMessagesEnabled` is `true` [#775](https://github.com/GetStream/stream-chat-swiftui/pull/775) ### 🐞 Fixed - Show typing suggestions for names containing whitespace [#781](https://github.com/GetStream/stream-chat-swiftui/pull/781) ### 🔄 Changed From c7a1158a2f6d41791d944cf738e34000e8ed45e4 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 24 Mar 2025 18:02:17 +0000 Subject: [PATCH 20/23] Clear composer input data if draft was deleted from other device --- .../Composer/MessageComposerViewModel.swift | 8 +++ .../MessageComposerViewModel_Tests.swift | 68 +++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 1d639869..87917f0b 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -836,5 +836,13 @@ extension MessageComposerViewModel: EventsControllerDelegate { fillDraftMessage() } } + + if let event = event as? DraftDeletedEvent { + let isFromSameThread = messageController?.messageId == event.threadId + let isFromSameChannel = channelController.cid == event.cid && messageController == nil + if isFromSameThread || isFromSameChannel { + clearInputData() + } + } } } diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift index fee74d99..74b75a90 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift @@ -912,6 +912,74 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { XCTAssertEqual(viewModel.text, "Draft") } + func test_messageComposerVM_draftMessageDeletedEvent() throws { + // Given + let channelController = makeChannelController() + channelController.channel_mock = .mock(cid: .unique, draftMessage: .mock(text: "Draft")) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: nil + ) + + // When + channelController.channel_mock = .mock(cid: .unique, draftMessage: nil) + let cid = try XCTUnwrap(channelController.cid) + let event = DraftDeletedEvent(cid: cid, threadId: nil, createdAt: .unique) + viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) + + // Then + XCTAssertEqual(viewModel.text, "") + } + + func test_messageComposerVM_draftReplyDeletedEvent() throws { + // Given + let channelController = makeChannelController() + let messageController = ChatMessageControllerSUI_Mock.mock( + chatClient: chatClient, + cid: channelController.cid!, + messageId: .unique + ) + messageController.message_mock = .mock(draftReply: .mock(text: "Draft")) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: messageController + ) + + // When + messageController.message_mock = .mock(draftReply: nil) + let cid = try XCTUnwrap(channelController.cid) + let event = DraftDeletedEvent(cid: cid, threadId: messageController.messageId, createdAt: .unique) + viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) + + // Then + XCTAssertEqual(viewModel.text, "") + } + + func test_messageComposerVM_draftReplyDeletedEventFromOtherThread_shouldNotUpdate() throws { + // Given + let channelController = makeChannelController() + let messageController = ChatMessageControllerSUI_Mock.mock( + chatClient: chatClient, + cid: channelController.cid!, + messageId: .unique + ) + messageController.message_mock = .mock(draftReply: .mock(text: "Draft")) + let viewModel = makeComposerDraftsViewModel( + channelController: channelController, + messageController: messageController + ) + viewModel.fillDraftMessage() + + // When + messageController.message_mock = .mock(draftReply: nil) + let cid = try XCTUnwrap(channelController.cid) + let event = DraftDeletedEvent(cid: cid, threadId: .unique, createdAt: .unique) + viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) + + // Then + XCTAssertEqual(viewModel.text, "Draft") + } + // MARK: - private private func makeComposerDraftsViewModel( From 963141c792e586bcab34f18fb6b06d02c197b140 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 25 Mar 2025 16:29:30 +0000 Subject: [PATCH 21/23] Fix delete draft request being fired multiple times --- .../ChatChannel/Composer/MessageComposerViewModel.swift | 5 ++++- .../Tests/ChatChannel/MessageComposerViewModel_Tests.swift | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 87917f0b..bf40a232 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -54,7 +54,10 @@ open class MessageComposerViewModel: ObservableObject { selectedRangeLocation = 0 suggestions = [String: Any]() mentionedUsers = Set() - deleteDraftMessage() + + if oldValue != "" { + deleteDraftMessage() + } } } } diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift index 74b75a90..3a88216a 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift @@ -765,6 +765,7 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { channelController: channelController, messageController: nil ) + viewModel.text = "text" // When viewModel.text = "" @@ -787,6 +788,7 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { channelController: channelController, messageController: messageController ) + viewModel.text = "reply" // When viewModel.text = "" @@ -804,6 +806,7 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { channelController: channelController, messageController: nil ) + viewModel.text = "text" // When viewModel.sendMessage(quotedMessage: nil, editedMessage: nil) {} @@ -827,6 +830,7 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { channelController: channelController, messageController: messageController ) + viewModel.text = "reply" // When viewModel.sendMessage(quotedMessage: nil, editedMessage: nil) {} From 359333564a46dc15721577ddeb88418dfb1cbab2 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 25 Mar 2025 16:44:11 +0000 Subject: [PATCH 22/23] Fix not removing attachments from the previous draft --- .../ChatChannel/Composer/MessageComposerViewModel.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index bf40a232..fecee286 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -250,6 +250,12 @@ open class MessageComposerViewModel: ObservableObject { mentionedUsers = message.mentionedUsers quotedMessage?.wrappedValue = message.quotedMessage showReplyInChannel = message.showReplyInChannel + + addedAssets.removeAll() + addedFileURLs.removeAll() + addedVoiceRecordings.removeAll() + addedCustomAttachments.removeAll() + message.attachments.forEach { attachment in switch attachment.type { case .image, .video: From 0eccc107d27c1c4d947ed14277d91f5add175421 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 25 Mar 2025 17:07:32 +0000 Subject: [PATCH 23/23] Only delete draft message if content is all empty --- .../ChatChannel/Composer/MessageComposerViewModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index fecee286..abefa83b 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -55,7 +55,7 @@ open class MessageComposerViewModel: ObservableObject { suggestions = [String: Any]() mentionedUsers = Set() - if oldValue != "" { + if oldValue != "" && !sendButtonEnabled { deleteDraftMessage() } }