From e46acef4454e19d4f4452a98da4db6c8b06bb90a Mon Sep 17 00:00:00 2001 From: R Midhun Suresh Date: Tue, 7 Jul 2026 21:57:26 +0530 Subject: [PATCH] Implement tombstone tiles for calls in room and DM (#34141) * Implement tombstone tile view for a room * Implement tombstone tile view for a DM * Implement root call tile view * Export all the views * Add screenshots * Remove old view code * Implement vm for tombstone tile in a room * Implement vm for tombstone tile in a DM * Implement root tile vm * Use new tile in the event factory * Remove old vm * Exclude mock code from code checks --- apps/web/jest.config.ts | 2 + apps/web/src/events/EventTileFactory.tsx | 17 +- .../event-tile/call/CallTileViewModel.ts | 141 ----------------- .../call/RootCallTileViewModel.test.tsx | 100 ++++++++++++ .../event-tile/call/RootCallTileViewModel.ts | 69 +++++++++ .../timeline/event-tile/call/call-mocks.ts | 122 +++++++++++++++ .../room/timeline/event-tile/call/common.ts | 44 ++++++ .../DmTombstoneCallTileViewModel.test.tsx | 80 ++++++++++ .../tombstone/DmTombstoneCallTileViewModel.ts | 79 ++++++++++ .../RoomTombstoneCallTileViewModel.test.ts | 46 ++++++ .../RoomTombstoneCallTileViewModel.ts | 69 +++++++++ .../event-tile/call/tiles/tombstone/common.ts | 37 +++++ .../event-tiles/CallTileViewModel-test.ts | 145 ------------------ knip.ts | 1 + .../default-auto.png | Bin 20177 -> 0 bytes .../video-call-auto.png | Bin 20079 -> 0 bytes .../voice-call-auto.png | Bin 20178 -> 0 bytes .../default-auto.png | Bin 19644 -> 0 bytes .../video-call-auto.png | Bin 19595 -> 0 bytes .../voice-call-auto.png | Bin 19647 -> 0 bytes .../default-auto.png | Bin 0 -> 19630 bytes .../incoming-video-declined-auto.png | Bin 0 -> 20360 bytes .../incoming-voice-declined-auto.png} | Bin .../outgoing-video-declined-auto.png | Bin 0 -> 20065 bytes .../outgoing-voice-declined-auto.png | Bin 0 -> 20164 bytes .../video-ended-auto.png | Bin 0 -> 19577 bytes .../voice-ended-auto.png | Bin 0 -> 19630 bytes .../default-auto.png | Bin 0 -> 20359 bytes .../src/i18n/strings/en_EN.json | 5 + .../CallDeclinedTileView.stories.tsx | 71 --------- .../CallDeclinedTileView.test.tsx | 34 ---- .../CallDeclinedTile/CallDeclinedTileView.tsx | 55 ------- .../CallDeclinedTileView.test.tsx.snap | 97 ------------ .../CallStartedTileView.stories.tsx | 63 -------- .../CallStartedTileView.test.tsx | 29 ---- .../CallStartedTile/CallStartedTileView.tsx | 53 ------- .../CallStartedTileView.test.tsx.snap | 65 -------- .../event-tile/call/RootCallTileView.tsx | 47 ++++++ .../call/{common/types.ts => common.ts} | 21 +-- .../room/timeline/event-tile/call/index.ts | 7 +- .../common.module.css} | 0 .../dm/DmTombstoneCallTileView.stories.tsx | 102 ++++++++++++ .../dm/DmTombstoneCallTileView.test.tsx | 39 +++++ .../tombstone/dm/DmTombstoneCallTileView.tsx | 96 ++++++++++++ .../DmTombstoneCallTileView.test.tsx.snap | 129 ++++++++++++++++ .../RoomTombstoneCallTileView.stories.tsx | 45 ++++++ .../room/RoomTombstoneCallTileView.test.tsx | 22 +++ .../room/RoomTombstoneCallTileView.tsx | 49 ++++++ .../RoomTombstoneCallTileView.test.tsx.snap | 33 ++++ vitest.config.ts | 2 + 50 files changed, 1239 insertions(+), 777 deletions(-) delete mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/CallTileViewModel.ts create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/RootCallTileViewModel.test.tsx create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/RootCallTileViewModel.ts create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/call-mocks.ts create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/common.ts create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/DmTombstoneCallTileViewModel.test.tsx create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/DmTombstoneCallTileViewModel.ts create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/RoomTombstoneCallTileViewModel.test.ts create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/RoomTombstoneCallTileViewModel.ts create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/common.ts delete mode 100644 apps/web/test/viewmodels/event-tiles/CallTileViewModel-test.ts delete mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx/default-auto.png delete mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx/video-call-auto.png delete mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx/voice-call-auto.png delete mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx/default-auto.png delete mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx/video-call-auto.png delete mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx/voice-call-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/default-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/incoming-video-declined-auto.png rename packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/{CallDeclinedTile/CallDeclinedTileView.stories.tsx/call-declined-by-us-auto.png => tombstone/dm/DmTombstoneCallTileView.stories.tsx/incoming-voice-declined-auto.png} (100%) create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/outgoing-video-declined-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/outgoing-voice-declined-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/video-ended-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/voice-ended-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.stories.tsx/default-auto.png delete mode 100644 packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx delete mode 100644 packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.test.tsx delete mode 100644 packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.tsx delete mode 100644 packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/__snapshots__/CallDeclinedTileView.test.tsx.snap delete mode 100644 packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx delete mode 100644 packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.test.tsx delete mode 100644 packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.tsx delete mode 100644 packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/__snapshots__/CallStartedTileView.test.tsx.snap create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/RootCallTileView.tsx rename packages/shared-components/src/room/timeline/event-tile/call/{common/types.ts => common.ts} (50%) rename packages/shared-components/src/room/timeline/event-tile/call/{common/CallTileView.module.css => tombstone/common.module.css} (100%) create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.test.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/__snapshots__/DmTombstoneCallTileView.test.tsx.snap create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.stories.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.test.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/__snapshots__/RoomTombstoneCallTileView.test.tsx.snap diff --git a/apps/web/jest.config.ts b/apps/web/jest.config.ts index dd37e40b0f..2c302984af 100644 --- a/apps/web/jest.config.ts +++ b/apps/web/jest.config.ts @@ -62,6 +62,8 @@ const config: Config = { // Ignore vitest tests "!/src/**/*.test.{ts,tsx}", "!/src/test/**", + // Exclude mocks + "!/src/**/*-{mock,mocks}.{ts,tsx}", ], coverageReporters: ["text-summary", ["lcov", { projectRoot: "../../" }]], prettierPath: null, diff --git a/apps/web/src/events/EventTileFactory.tsx b/apps/web/src/events/EventTileFactory.tsx index 7c53a97736..c9d9a3c4b0 100644 --- a/apps/web/src/events/EventTileFactory.tsx +++ b/apps/web/src/events/EventTileFactory.tsx @@ -18,13 +18,12 @@ import { M_POLL_START, } from "matrix-js-sdk/src/matrix"; import { - CallDeclinedTileView, - CallStartedTileView, EncryptionEventView, HiddenBodyView, MJitsiWidgetEventView, MKeyVerificationRequestView, RoomAvatarEventView, + RootCallTileView, TextualEventView, ViewSourceEventView, useCreateAutoDisposedViewModel, @@ -57,7 +56,7 @@ import { TextualEventViewModel } from "../viewmodels/room/timeline/event-tile/Te import { HiddenBodyViewModel } from "../viewmodels/room/timeline/event-tile/body/HiddenBodyViewModel"; import { ViewSourceEventViewModel } from "../viewmodels/room/timeline/event-tile/body/ViewSourceEventViewModel"; import { ElementCallEventType } from "../call-types"; -import { CallTileViewModel } from "../viewmodels/room/timeline/event-tile/call/CallTileViewModel"; +import { RootCallTileViewModel } from "../viewmodels/room/timeline/event-tile/call/RootCallTileViewModel"; // Subset of EventTile's IProps plus some mixins export interface EventTileTypeProps extends Pick< @@ -189,8 +188,16 @@ function RoomAvatarEventWrappedView({ mxEvent, ref }: IBodyProps): JSX.Element { const RoomAvatarEventFactory: Factory = (ref, props) => ; function CallStartedTileViewWrapped({ mxEvent, getRelationsForEvent }: IBodyProps): JSX.Element { - const vm = useCreateAutoDisposedViewModel(() => new CallTileViewModel({ mxEvent, getRelationsForEvent })); - return vm.isCallDeclined ? : ; + const cli = useMatrixClientContext(); + const vm = useCreateAutoDisposedViewModel( + () => + new RootCallTileViewModel({ + mxEvent, + getRelationsForEvent, + cli, + }), + ); + return ; } export const CallStartedEventFactory: Factory = (ref, props) => { diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/CallTileViewModel.ts b/apps/web/src/viewmodels/room/timeline/event-tile/call/CallTileViewModel.ts deleted file mode 100644 index cfae52080b..0000000000 --- a/apps/web/src/viewmodels/room/timeline/event-tile/call/CallTileViewModel.ts +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2026 Element Creations Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -import { BaseViewModel, CallType, type CallTileViewSnapshot } from "@element-hq/web-shared-components"; -import { EventType, type MatrixEvent, MatrixEventEvent, RelationType } from "matrix-js-sdk/src/matrix"; - -import type { IRTCNotificationContent } from "matrix-js-sdk/src/matrixrtc"; -import SettingsStore from "../../../../../settings/SettingsStore"; -import { formatTime } from "../../../../../DateUtils"; -import defaultDispatcher from "../../../../../dispatcher/dispatcher"; -import type { SettingUpdatedPayload } from "../../../../../dispatcher/payloads/SettingUpdatedPayload"; -import type { ActionPayload } from "../../../../../dispatcher/payloads"; -import { Action } from "../../../../../dispatcher/actions"; -import type { GetRelationsForEvent } from "../../../../../components/views/rooms/EventTile"; -import { MatrixClientPeg } from "../../../../../MatrixClientPeg"; - -export interface CallTileViewModelProps { - /** - * Event of type `org.matrix.msc4075.rtc.notification`. - */ - mxEvent: MatrixEvent; - /** - * Helper to fetch related events from a given event. - */ - getRelationsForEvent?: GetRelationsForEvent; -} - -function getIntentFromEvent(event: MatrixEvent): CallTileViewSnapshot["type"] { - const content = event.getContent(); - const intentInContent = content["m.call.intent"]; - switch (intentInContent) { - case "audio": - return CallType.Voice; - case "video": - default: - return CallType.Video; - } -} - -function getTs(event: MatrixEvent): number { - if (event.getType() === EventType.RTCNotification) { - /** - * According to the spec: - * Receivers SHOULD use origin_server_ts if |sender_ts - origin_server_ts| > 20000 ms. - */ - const content = event.getContent(); - const senderTs = content["sender_ts"]; - const originServerTs = event.getTs(); - const ts = Math.abs(senderTs - originServerTs) > 20000 ? originServerTs : senderTs; - return ts; - } else return event.getTs(); -} - -function getTimeFromEvent(event: MatrixEvent, showTwelveHour: boolean): CallTileViewSnapshot["timestamp"] { - const ts = getTs(event); - const date = new Date(ts); - const timestamp = formatTime(date, showTwelveHour); - return timestamp; -} - -function generateSnapshot( - event: MatrixEvent, - getRelationsForEvent?: GetRelationsForEvent, -): { snapshot: CallTileViewSnapshot; declineEvent: MatrixEvent | null } { - const type = getIntentFromEvent(event); - const declineEvent = getDeclinedEvent(event, getRelationsForEvent); - let isCallDeclinedByUs: boolean | undefined; - if (declineEvent) { - isCallDeclinedByUs = declineEvent.getSender() === MatrixClientPeg.get()?.getUserId(); - } - const showTwelveHour = SettingsStore.getValue("showTwelveHourTimestamps"); - const timestamp = getTimeFromEvent(declineEvent ?? event, showTwelveHour); - return { snapshot: { type, timestamp, isCallDeclinedByUs }, declineEvent }; -} - -function isSettingsChangedPayload(payload: ActionPayload): payload is SettingUpdatedPayload { - return payload.action === Action.SettingUpdated; -} - -/** - * Get a declined event that is related to the given rtc notification event. - * @param event rtc notification event - */ -function getDeclinedEvent(event: MatrixEvent, getRelationsForEvent?: GetRelationsForEvent): MatrixEvent | null { - const eventId = event.getId(); - if (eventId && getRelationsForEvent) { - const relations = getRelationsForEvent(eventId, RelationType.Reference, EventType.RTCDecline)?.getRelations(); - if (relations) return relations[0]; - } - return null; -} - -/** - * Common view-model for call tiles; currently used to render: - * 1. A tile that indicates that a call occurred (call tombstone). - * 2. A tile that indicates that a call was declined. - */ -export class CallTileViewModel extends BaseViewModel { - /** - * The decline event associated with this call, if any. - */ - private declineEvent: MatrixEvent | null; - - public constructor(props: CallTileViewModelProps) { - const { declineEvent, snapshot } = generateSnapshot(props.mxEvent, props.getRelationsForEvent); - super(props, snapshot); - this.declineEvent = declineEvent; - - // Listen to the changes on settings so that we can update the timestamp format (12H vs 24H). - SettingsStore.monitorSetting("showTwelveHourTimestamps", null); - const token = defaultDispatcher.register(this.onAction); - this.disposables.track(() => { - defaultDispatcher.unregister(token); - }); - - // When a relation is added to the event, recompute the state. - this.disposables.trackListener(props.mxEvent, MatrixEventEvent.RelationsCreated, () => { - const { declineEvent, snapshot } = generateSnapshot(props.mxEvent, props.getRelationsForEvent); - this.declineEvent = declineEvent; - this.snapshot.set(snapshot); - }); - } - - private onAction = (payload: ActionPayload): void => { - if (!isSettingsChangedPayload(payload) || payload.settingName !== "showTwelveHourTimestamps") return; - const showTwelveHour = (payload.newValue as boolean) ?? false; - const timestamp = getTimeFromEvent(this.declineEvent ?? this.props.mxEvent, showTwelveHour); - this.snapshot.merge({ timestamp }); - }; - - /** - * Whether the call associated with this vm has been declined. - */ - public get isCallDeclined(): boolean { - return !!this.declineEvent; - } -} diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/RootCallTileViewModel.test.tsx b/apps/web/src/viewmodels/room/timeline/event-tile/call/RootCallTileViewModel.test.tsx new file mode 100644 index 0000000000..3f2004ae8e --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/RootCallTileViewModel.test.tsx @@ -0,0 +1,100 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +// @vitest-environment happy-dom + +import { it, describe, expect, vi } from "vitest"; +import { type EventTimeline, EventType, type MatrixEvent, type RoomState } from "matrix-js-sdk/src/matrix"; + +import { mkEvent, mkMessage, mkRoomMember, mkStubRoom, stubClient } from "../../../../../../test/test-utils"; +import { getMockedRtcNotificationEvent, MockedCall, MockedCallStore } from "./call-mocks"; +import { RootCallTileViewModel } from "./RootCallTileViewModel"; + +function getEvents(): MatrixEvent[] { + const message1 = mkMessage({ + room: "!my-room:m.org", + user: "@alice:m.org", + event: true, + msg: "hello", + }); + + const message2 = mkMessage({ + room: "!my-room:m.org", + user: "@bob:m.org", + event: true, + msg: "hello", + }); + + const oldRtcNotificationEvent = mkEvent({ + type: EventType.RTCNotification, + id: "old-event", + content: { + "m.call.intent": "video", + }, + user: "@alice:m.org", + event: true, + }); + + const latestRtcNotificationEvent = mkEvent({ + type: EventType.RTCNotification, + id: "new-event", + content: { + "m.call.intent": "video", + }, + user: "@bob:m.org", + event: true, + }); + return [message1, message2, oldRtcNotificationEvent, latestRtcNotificationEvent]; +} + +function getMocked(userIds: string[]) { + const cli = stubClient(); + const mxEvent = getMockedRtcNotificationEvent("audio", 100, 100); + mxEvent.getId = () => "new-event"; + + const call = MockedCall.create(); + const callStore = MockedCallStore.create(call); + + const members = userIds.map((id) => mkRoomMember("!my-room:m.org", id)); + + const room = mkStubRoom("!my-room:m.org", "My Room"); + cli.getRoom = () => room; + + vi.spyOn(room, "getMembers").mockReturnValue(members); + + const events = getEvents(); + vi.spyOn(room, "getLiveTimeline").mockImplementation(() => { + return { + getEvents: () => { + return events; + }, + getState: (): RoomState => { + return { + mayClientSendStateEvent: () => true, + } as unknown as RoomState; + }, + } as unknown as EventTimeline; + }); + + return { callStore, cli, mxEvent, call }; +} + +describe("RootCallTileViewModel", () => { + it("computes correct tileType for tombstone call in DM", () => { + const { cli, mxEvent } = getMocked(["@alice:m.org", "@bob:m.org"]); + const vm = new RootCallTileViewModel({ cli, mxEvent }); + + expect(vm.getSnapshot().tileType).toStrictEqual("tombstone-call-dm"); + }); + + it("computes correct tileType for tombstone call in Room", () => { + const { cli, mxEvent } = getMocked(["@alice:m.org", "@bob:m.org", "@jack:m.org"]); + const vm = new RootCallTileViewModel({ cli, mxEvent }); + + expect(vm.getSnapshot().tileType).toStrictEqual("tombstone-call-room"); + }); +}); diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/RootCallTileViewModel.ts b/apps/web/src/viewmodels/room/timeline/event-tile/call/RootCallTileViewModel.ts new file mode 100644 index 0000000000..bbc3cdeab3 --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/RootCallTileViewModel.ts @@ -0,0 +1,69 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { type MatrixClient, type MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { BaseViewModel, type RootCallTileViewSnapshot } from "@element-hq/web-shared-components"; + +import type { GetRelationsForEvent } from "../../../../../components/views/rooms/EventTile"; +import { DmTombstoneCallTileViewModel } from "./tiles/tombstone/DmTombstoneCallTileViewModel"; +import { RoomTombstoneCallTileViewModel } from "./tiles/tombstone/RoomTombstoneCallTileViewModel"; + +interface Props { + /** + * Event of type `org.matrix.msc4075.rtc.notification`. + */ + mxEvent: MatrixEvent; + + /** + * Helper to fetch related events from a given event. + */ + getRelationsForEvent?: GetRelationsForEvent; + + /** + * The {@link MatrixClient} object to access js-sdk API. + */ + cli: MatrixClient; +} + +function computeSnapshot(props: Props): RootCallTileViewSnapshot { + const cli = props.cli; + const notificationEvent = props.mxEvent; + + // Get the room where this call is taking place + const roomId = props.mxEvent.getRoomId(); + if (!roomId) throw new Error("Notification event does not have associated room-id"); + const room = cli.getRoom(roomId); + if (!room) throw new Error(`No room with id ${roomId}`); + + // This is the same logic used for hiding/showing the voice call button. + const isDmRoom = room.getMembers().length <= 2; + + if (isDmRoom) { + return { + tileType: "tombstone-call-dm", + tileViewModel: new DmTombstoneCallTileViewModel({ + mxEvent: notificationEvent, + getRelationsForEvent: props.getRelationsForEvent, + cli: props.cli, + }), + }; + } else + return { + tileType: "tombstone-call-room", + tileViewModel: new RoomTombstoneCallTileViewModel({ mxEvent: notificationEvent }), + }; +} + +/** + * The root call tile view model which decides what call tile should be rendered. + */ +export class RootCallTileViewModel extends BaseViewModel { + public constructor(props: Props) { + const snapshot = computeSnapshot(props); + super(props, snapshot); + } +} diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/call-mocks.ts b/apps/web/src/viewmodels/room/timeline/event-tile/call/call-mocks.ts new file mode 100644 index 0000000000..9a4a61b1db --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/call-mocks.ts @@ -0,0 +1,122 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { EventEmitter } from "events"; +import { type RoomMember, type MatrixEvent, EventType } from "matrix-js-sdk/src/matrix"; + +import { mkEvent } from "../../../../../../test/test-utils"; +import { type ElementCall } from "../../../../../models/Call"; +import type { CallStore } from "../../../../../stores/CallStore"; +import type { CallMembership, MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc"; + +export function getMockedRtcNotificationEvent( + intent: string, + senderTs: number, + serverTs: number, + sender: string = "@foo:m.org", +): MatrixEvent { + const mockEvent = mkEvent({ + type: "org.matrix.msc4075.rtc.notification", + user: sender, + content: { + "m.call.intent": intent, + "sender_ts": senderTs, + }, + ts: serverTs, + event: true, + room: "!my-room:m.org", + }); + return mockEvent; +} + +export function getMockedRtcDeclineEvent(rtcNotificationEvent: MatrixEvent, sender = "@foo:m.org"): MatrixEvent { + const mockEvent = mkEvent({ + type: EventType.RTCDecline, + user: sender, + content: { + "m.relates_to": { + rel_type: "m.reference", + event_id: rtcNotificationEvent.getId(), + }, + }, + ts: 924285416000, + event: true, + }); + return mockEvent; +} + +interface MockCallStoreType extends CallStore { + withActiveCall(): this; + isActiveCall: boolean; + call: ElementCall | null; +} + +export class MockedCallStore extends EventEmitter { + public isActiveCall: boolean = false; + + public constructor(public call: ElementCall | null) { + super(); + } + + public static create(call: ElementCall | null): MockCallStoreType { + return new MockedCallStore(call) as unknown as MockCallStoreType; + } + + public withActiveCall(): this { + this.isActiveCall = true; + return this; + } + + public getCall(): ElementCall | null { + return this.call; + } + + public getActiveCall(): ElementCall | null { + if (this.isActiveCall) return this.getCall(); + return null; + } +} + +interface MockCallType extends ElementCall { + withOldestMembershipTs(ts: number): this; + withParticipants(participants: RoomMember[]): this; +} + +export class MockedCall extends EventEmitter { + public participantMap = new Map>(); + public createdTs: number = Date.now(); + + public static create(): MockCallType { + return new MockedCall() as unknown as MockCallType; + } + + public withOldestMembershipTs(ts: number): this { + this.createdTs = ts; + return this; + } + + public withParticipants(participants: RoomMember[]): this { + for (const participant of participants) { + this.participantMap.set(participant, new Set()); + } + return this; + } + + public get participants(): Map> { + return this.participantMap; + } + + public get session(): MatrixRTCSession { + return { + getOldestMembership: (): CallMembership => { + return { + createdTs: () => this.createdTs, + } as CallMembership; + }, + } as MatrixRTCSession; + } +} diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/common.ts b/apps/web/src/viewmodels/room/timeline/event-tile/call/common.ts new file mode 100644 index 0000000000..ce2e390d9c --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/common.ts @@ -0,0 +1,44 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { CallType } from "@element-hq/web-shared-components"; +import { EventType, RelationType, type MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { type IRTCNotificationContent } from "matrix-js-sdk/src/matrixrtc"; + +import { type GetRelationsForEvent } from "../../../../../components/views/rooms/EventTile"; + +/** + * Find the call intent from a given rtc notification event. + * @param event Rtc notification event + */ +export function getIntentFromEvent(event: MatrixEvent): CallType { + const content = event.getContent(); + const intentInContent = content["m.call.intent"]; + switch (intentInContent) { + case "audio": + return CallType.Voice; + case "video": + default: + return CallType.Video; + } +} + +/** + * Get all declined events that is related to the given rtc notification event. + * @param event rtc notification event + */ +export function getDeclinedEvents( + event: MatrixEvent, + getRelationsForEvent?: GetRelationsForEvent, +): MatrixEvent[] | null { + const eventId = event.getId(); + if (eventId && getRelationsForEvent) { + const relations = getRelationsForEvent(eventId, RelationType.Reference, EventType.RTCDecline)?.getRelations(); + if (relations) return relations; + } + return null; +} diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/DmTombstoneCallTileViewModel.test.tsx b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/DmTombstoneCallTileViewModel.test.tsx new file mode 100644 index 0000000000..b6dde28979 --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/DmTombstoneCallTileViewModel.test.tsx @@ -0,0 +1,80 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +// @vitest-environment happy-dom + +import { it, describe, expect, vi } from "vitest"; +import { CallDirection, CallType } from "@element-hq/web-shared-components"; +import { EventType, MatrixEventEvent } from "matrix-js-sdk/src/matrix"; + +import { getMockedRtcDeclineEvent, getMockedRtcNotificationEvent } from "../../call-mocks"; +import { formatTime } from "../../../../../../../DateUtils"; +import { DmTombstoneCallTileViewModel } from "./DmTombstoneCallTileViewModel"; +import { stubClient } from "../../../../../../../../test/test-utils"; + +describe("DmTombstoneCallTileViewModel", () => { + it("should compute correct state on decline", () => { + const mxEvent = getMockedRtcNotificationEvent("video", 924285348000, 924285348000, "@alice:m.org"); + const declineEvent = getMockedRtcDeclineEvent(mxEvent, "@alice:m.org"); + const getRelationsForEvent = vi.fn(); + const cli = stubClient(); + const vm = new DmTombstoneCallTileViewModel({ mxEvent, getRelationsForEvent, cli }); + + // Without decline event, isCallDeclined = false + expect(vm.getSnapshot().isCallDeclined).toStrictEqual(false); + + // Decline event comes through + getRelationsForEvent.mockReturnValue({ + getRelations: () => [declineEvent], + }); + mxEvent.emit(MatrixEventEvent.RelationsCreated, "m.reference", EventType.RTCDecline); + + // Timestamp should be that of the decline event + expect(vm.getSnapshot().timestamp).toStrictEqual(formatTime(new Date(924285416000))); + // Call should be declined + expect(vm.getSnapshot().isCallDeclined).toStrictEqual(true); + }); + + it("should compute voice intent in state", () => { + const mxEvent = getMockedRtcNotificationEvent("audio", 1752583130365, 1752583130365); + + const getRelationsForEvent = vi.fn(); + const cli = stubClient(); + const vm = new DmTombstoneCallTileViewModel({ mxEvent, cli, getRelationsForEvent }); + const { type } = vm.getSnapshot(); + expect(type).toStrictEqual(CallType.Voice); + }); + + it("should compute video intent in state", () => { + const mxEvent = getMockedRtcNotificationEvent("video", 1752583130365, 1752583130365); + const getRelationsForEvent = vi.fn(); + const cli = stubClient(); + const vm = new DmTombstoneCallTileViewModel({ mxEvent, cli, getRelationsForEvent }); + const { type } = vm.getSnapshot(); + expect(type).toStrictEqual(CallType.Video); + }); + + describe("should compute callDirection", () => { + it("for outgoing", () => { + const mxEvent = getMockedRtcNotificationEvent("video", 1752583130365, 1752583130365, "@alice:m.org"); + const getRelationsForEvent = vi.fn(); + const cli = stubClient(); + vi.spyOn(cli, "getUserId").mockReturnValue("@alice:m.org"); + const vm = new DmTombstoneCallTileViewModel({ mxEvent, cli, getRelationsForEvent }); + expect(vm.getSnapshot().callDirection).toStrictEqual(CallDirection.Outgoing); + }); + + it("for incoming", () => { + const mxEvent = getMockedRtcNotificationEvent("video", 1752583130365, 1752583130365, "@bob:m.org"); + const getRelationsForEvent = vi.fn(); + const cli = stubClient(); + vi.spyOn(cli, "getUserId").mockReturnValue("@alice:m.org"); + const vm = new DmTombstoneCallTileViewModel({ mxEvent, cli, getRelationsForEvent }); + expect(vm.getSnapshot().callDirection).toStrictEqual(CallDirection.Incoming); + }); + }); +}); diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/DmTombstoneCallTileViewModel.ts b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/DmTombstoneCallTileViewModel.ts new file mode 100644 index 0000000000..1f331b6f51 --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/DmTombstoneCallTileViewModel.ts @@ -0,0 +1,79 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { CallDirection, type DmTombstoneCallTileViewSnapshot } from "@element-hq/web-shared-components"; +import { type MatrixClient, type MatrixEvent, MatrixEventEvent } from "matrix-js-sdk/src/matrix"; + +import SettingsStore from "../../../../../../../settings/SettingsStore"; +import type { GetRelationsForEvent } from "../../../../../../../components/views/rooms/EventTile"; +import { getTimeFromEvent } from "./common"; +import { + RoomTombstoneCallTileViewModel, + type RoomTombstoneCallTileViewModelProps, +} from "./RoomTombstoneCallTileViewModel"; +import { getDeclinedEvents, getIntentFromEvent } from "../../common"; + +export interface DmTombstoneCallTileViewModelProps extends RoomTombstoneCallTileViewModelProps { + /** + * Helper to fetch related events from a given event. + */ + getRelationsForEvent?: GetRelationsForEvent; + /** + * The {@link MatrixClient} object to access js-sdk API. + */ + cli: MatrixClient; +} + +function generateSnapshot(props: DmTombstoneCallTileViewModelProps): { + snapshot: DmTombstoneCallTileViewSnapshot; + declineEvent: MatrixEvent | null; +} { + const { mxEvent, getRelationsForEvent, cli } = props; + const type = getIntentFromEvent(mxEvent); + + // Find the mx-id of the user who started this call + const startedUserId = mxEvent.getSender(); + if (!startedUserId) { + throw new Error("RTCNotification event has no sender associated with it!"); + } + const callDirection = cli.getUserId() === startedUserId ? CallDirection.Outgoing : CallDirection.Incoming; + + const declineEvent = getDeclinedEvents(mxEvent, getRelationsForEvent)?.[0] ?? null; + const showTwelveHour = SettingsStore.getValue("showTwelveHourTimestamps"); + const timestamp = getTimeFromEvent(declineEvent ?? mxEvent, showTwelveHour); + return { snapshot: { timestamp, type, callDirection, isCallDeclined: !!declineEvent }, declineEvent }; +} + +/** + * View model for a tombstone call in a DM. + */ +export class DmTombstoneCallTileViewModel extends RoomTombstoneCallTileViewModel< + DmTombstoneCallTileViewSnapshot, + DmTombstoneCallTileViewModelProps +> { + /** + * The decline event associated with this call, if any. + */ + private declineEvent: MatrixEvent | null; + + public constructor(props: DmTombstoneCallTileViewModelProps) { + const { snapshot, declineEvent } = generateSnapshot(props); + super(props, snapshot); + this.declineEvent = declineEvent; + + // When a relation is added to the event, recompute the state. + this.disposables.trackListener(props.mxEvent, MatrixEventEvent.RelationsCreated, () => { + const { declineEvent, snapshot } = generateSnapshot(props); + this.declineEvent = declineEvent; + this.snapshot.set(snapshot); + }); + } + + protected getTimestamp(showTwelveHour: boolean): string { + return getTimeFromEvent(this.declineEvent ?? this.props.mxEvent, showTwelveHour); + } +} diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/RoomTombstoneCallTileViewModel.test.ts b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/RoomTombstoneCallTileViewModel.test.ts new file mode 100644 index 0000000000..2271294400 --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/RoomTombstoneCallTileViewModel.test.ts @@ -0,0 +1,46 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +// @vitest-environment happy-dom + +import { it, describe, expect, vi } from "vitest"; + +import { getMockedRtcNotificationEvent } from "../../call-mocks"; +import { RoomTombstoneCallTileViewModel } from "./RoomTombstoneCallTileViewModel"; +import SettingsStore from "../../../../../../../settings/SettingsStore"; +import { SettingLevel } from "../../../../../../../settings/SettingLevel"; +import { formatTime } from "../../../../../../../DateUtils"; + +describe("RoomTombstoneCallTileViewModel", () => { + it("should compute timestamp correctly", () => { + const mxEvent = getMockedRtcNotificationEvent("video", 924285348000, 924285348000); + const vm = new RoomTombstoneCallTileViewModel({ mxEvent }); + expect(vm.getSnapshot().timestamp).toStrictEqual(formatTime(new Date(924285348000))); + }); + + it("should calculate time string correctly when configured to use 12 hour format", async () => { + const mxEvent = getMockedRtcNotificationEvent("video", 924285348000, 924285348000); + await SettingsStore.setValue("showTwelveHourTimestamps", null, SettingLevel.DEVICE, true); + const vm = new RoomTombstoneCallTileViewModel({ mxEvent }); + const { timestamp } = vm.getSnapshot(); + + expect(timestamp).toStrictEqual(formatTime(new Date(924285348000), true)); + SettingsStore.reset(); + }); + + it("should change timestamp format when setting is modified", async () => { + await SettingsStore.setValue("showTwelveHourTimestamps", null, SettingLevel.DEVICE, false); + const mxEvent = getMockedRtcNotificationEvent("video", 924285348000, 924285348000); + const vm = new RoomTombstoneCallTileViewModel({ mxEvent }); + expect(vm.getSnapshot().timestamp).toStrictEqual(formatTime(new Date(924285348000))); + await SettingsStore.setValue("showTwelveHourTimestamps", null, SettingLevel.DEVICE, true); + await vi.waitFor(() => { + expect(vm.getSnapshot().timestamp).toStrictEqual(formatTime(new Date(924285348000), true)); + }); + SettingsStore.reset(); + }); +}); diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/RoomTombstoneCallTileViewModel.ts b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/RoomTombstoneCallTileViewModel.ts new file mode 100644 index 0000000000..eda4a3b9a8 --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/RoomTombstoneCallTileViewModel.ts @@ -0,0 +1,69 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { BaseViewModel, type RoomTombstoneCallTileViewSnapshot } from "@element-hq/web-shared-components"; +import { type MatrixEvent } from "matrix-js-sdk/src/matrix"; + +import SettingsStore from "../../../../../../../settings/SettingsStore"; +import defaultDispatcher from "../../../../../../../dispatcher/dispatcher"; +import type { SettingUpdatedPayload } from "../../../../../../../dispatcher/payloads/SettingUpdatedPayload"; +import type { ActionPayload } from "../../../../../../../dispatcher/payloads"; +import { Action } from "../../../../../../../dispatcher/actions"; +import type { GetRelationsForEvent } from "../../../../../../../components/views/rooms/EventTile"; +import { getTimeFromEvent } from "./common"; + +export interface RoomTombstoneCallTileViewModelProps { + /** + * Event of type `org.matrix.msc4075.rtc.notification`. + */ + mxEvent: MatrixEvent; + /** + * Helper to fetch related events from a given event. + */ + getRelationsForEvent?: GetRelationsForEvent; +} + +function generateSnapshot(event: MatrixEvent): RoomTombstoneCallTileViewSnapshot { + const showTwelveHour = SettingsStore.getValue("showTwelveHourTimestamps"); + const timestamp = getTimeFromEvent(event, showTwelveHour); + return { timestamp }; +} + +function isSettingsChangedPayload(payload: ActionPayload): payload is SettingUpdatedPayload { + return payload.action === Action.SettingUpdated; +} + +/** + * View model for a tombstone call in a room. + */ +export class RoomTombstoneCallTileViewModel< + T extends RoomTombstoneCallTileViewSnapshot = RoomTombstoneCallTileViewSnapshot, + P extends RoomTombstoneCallTileViewModelProps = RoomTombstoneCallTileViewModelProps, +> extends BaseViewModel { + public constructor(props: P, extraSnapshot: Partial = {}) { + const snapshot = { ...generateSnapshot(props.mxEvent), ...extraSnapshot }; + super(props, snapshot as T); + + // Listen to the changes on settings so that we can update the timestamp format (12H vs 24H). + SettingsStore.monitorSetting("showTwelveHourTimestamps", null); + const token = defaultDispatcher.register(this.onAction); + this.disposables.track(() => { + defaultDispatcher.unregister(token); + }); + } + + private onAction = (payload: ActionPayload): void => { + if (!isSettingsChangedPayload(payload) || payload.settingName !== "showTwelveHourTimestamps") return; + const showTwelveHour = (payload.newValue as boolean) ?? false; + const timestamp = this.getTimestamp(showTwelveHour); + this.snapshot.merge({ timestamp } as Partial); + }; + + protected getTimestamp(showTwelveHour: boolean): string { + return getTimeFromEvent(this.props.mxEvent, showTwelveHour); + } +} diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/common.ts b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/common.ts new file mode 100644 index 0000000000..8ab63b6132 --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/call/tiles/tombstone/common.ts @@ -0,0 +1,37 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ +import { EventType, type MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { type IRTCNotificationContent } from "matrix-js-sdk/src/matrixrtc"; + +import { formatTime } from "../../../../../../../DateUtils"; + +function getTs(event: MatrixEvent): number { + if (event.getType() === EventType.RTCNotification) { + /** + * According to the spec: + * Receivers SHOULD use origin_server_ts if |sender_ts - origin_server_ts| > 20000 ms. + */ + const content = event.getContent(); + const senderTs = content["sender_ts"]; + const originServerTs = event.getTs(); + const ts = Math.abs(senderTs - originServerTs) > 20000 ? originServerTs : senderTs; + return ts; + } else return event.getTs(); +} + +/** + * Get the time at which a call took place from a given rtc notification event. + * @param event The notification event + * @param showTwelveHour Whether the time is to be shown in 12 hour format + * @returns A formatted time string + */ +export function getTimeFromEvent(event: MatrixEvent, showTwelveHour: boolean): string { + const ts = getTs(event); + const date = new Date(ts); + const timestamp = formatTime(date, showTwelveHour); + return timestamp; +} diff --git a/apps/web/test/viewmodels/event-tiles/CallTileViewModel-test.ts b/apps/web/test/viewmodels/event-tiles/CallTileViewModel-test.ts deleted file mode 100644 index 9da5030d50..0000000000 --- a/apps/web/test/viewmodels/event-tiles/CallTileViewModel-test.ts +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright 2026 Element Creations Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -import { EventType, type MatrixEvent, MatrixEventEvent, RelationType } from "matrix-js-sdk/src/matrix"; -import { CallType } from "@element-hq/web-shared-components"; -import { waitFor } from "jest-matrix-react"; - -import { mkEvent, stubClient } from "../../test-utils"; -import { CallTileViewModel } from "../../../src/viewmodels/room/timeline/event-tile/call/CallTileViewModel"; -import SettingsStore from "../../../src/settings/SettingsStore"; -import { SettingLevel } from "../../../src/settings/SettingLevel"; -import { MatrixClientPeg } from "../../../src/MatrixClientPeg"; - -function getMockedRtcNotificationEvent(intent: string, senderTs: number, serverTs: number): MatrixEvent { - const mockEvent = mkEvent({ - type: EventType.RTCNotification, - user: "@foo:m.org", - content: { - "m.call.intent": intent, - "sender_ts": senderTs, - }, - ts: serverTs, - event: true, - }); - return mockEvent; -} - -function getMockedRtcDeclineEvent(rtcNotificationEvent: MatrixEvent, sender = "@foo:m.org"): MatrixEvent { - const mockEvent = mkEvent({ - type: EventType.RTCDecline, - user: sender, - content: { - "m.relates_to": { - rel_type: "m.reference", - event_id: rtcNotificationEvent.getId(), - }, - }, - ts: 924285416000, - event: true, - }); - return mockEvent; -} - -describe("CallTileViewModel", () => { - it("should set voice intent in state", () => { - const mxEvent = getMockedRtcNotificationEvent("audio", 1752583130365, 1752583130365); - const vm = new CallTileViewModel({ mxEvent }); - const { type } = vm.getSnapshot(); - expect(type).toStrictEqual(CallType.Voice); - }); - - it("should set video intent in state", () => { - const mxEvent = getMockedRtcNotificationEvent("video", 1752583130365, 1752583130365); - const vm = new CallTileViewModel({ mxEvent }); - const { type } = vm.getSnapshot(); - expect(type).toStrictEqual(CallType.Video); - }); - - it("should calculate time string correctly", () => { - const mxEvent = getMockedRtcNotificationEvent("video", 924285348000, 924285348000); - const vm = new CallTileViewModel({ mxEvent }); - const { timestamp } = vm.getSnapshot(); - expect(timestamp).toStrictEqual("17:55"); - }); - - it("should calculate time string correctly when configured to use 12 hour format", async () => { - const mxEvent = getMockedRtcNotificationEvent("video", 924285348000, 924285348000); - await SettingsStore.setValue("showTwelveHourTimestamps", null, SettingLevel.DEVICE, true); - const vm = new CallTileViewModel({ mxEvent }); - const { timestamp } = vm.getSnapshot(); - expect(timestamp).toStrictEqual("5:55 PM"); - SettingsStore.reset(); - }); - - it("should change timestamp format when setting is modified", async () => { - const mxEvent = getMockedRtcNotificationEvent("video", 924285348000, 924285348000); - const vm = new CallTileViewModel({ mxEvent }); - expect(vm.getSnapshot().timestamp).toStrictEqual("17:55"); - await SettingsStore.setValue("showTwelveHourTimestamps", null, SettingLevel.DEVICE, true); - await waitFor(() => { - expect(vm.getSnapshot().timestamp).toStrictEqual("5:55 PM"); - }); - SettingsStore.reset(); - }); - - describe("On call declined", () => { - it("should calculate isCallDeclined correctly", () => { - const mxEvent = getMockedRtcNotificationEvent("audio", 1752583130365, 1752583130365); - // When there's no decline event, isCallDeclined = false - const vm1 = new CallTileViewModel({ mxEvent, getRelationsForEvent: jest.fn() }); - expect(vm1.isCallDeclined).toStrictEqual(false); - - // When there's a decline event, isCallDeclined = true - const declineEvent = getMockedRtcDeclineEvent(mxEvent); - const getRelationsForEvent = jest.fn().mockReturnValue({ - getRelations: () => [declineEvent], - }); - const vm2 = new CallTileViewModel({ mxEvent, getRelationsForEvent }); - expect(vm2.isCallDeclined).toStrictEqual(true); - }); - - it("should calculate isCallDeclinedByUs correctly", () => { - const cli = stubClient(); - cli.getUserId = jest.fn().mockReturnValue("@bar:m.org"); - - const mxEvent = getMockedRtcNotificationEvent("audio", 924285348000, 924285348000); - const declineEvent: MatrixEvent[] = []; - const getRelationsForEvent = jest.fn().mockReturnValue({ - getRelations: () => declineEvent, - }); - - // Decline event sent by somebody else - declineEvent.push(getMockedRtcDeclineEvent(mxEvent)); - const vm = new CallTileViewModel({ mxEvent, getRelationsForEvent }); - expect(vm.getSnapshot().isCallDeclinedByUs).toStrictEqual(false); - - // Decline event sent by us - declineEvent.pop(); - declineEvent.push(getMockedRtcDeclineEvent(mxEvent, MatrixClientPeg.get()!.getUserId()!)); - const vm2 = new CallTileViewModel({ mxEvent, getRelationsForEvent }); - expect(vm2.getSnapshot().isCallDeclinedByUs).toStrictEqual(true); - }); - - it("should recompute state when call is declined", () => { - const mxEvent = getMockedRtcNotificationEvent("audio", 924285348000, 924285348000); - const declineEvent: MatrixEvent[] = []; - const getRelationsForEvent = jest.fn().mockReturnValue({ - getRelations: () => declineEvent, - }); - - // No decline event yet, so timestamp should be based on rtc notification event. - const vm = new CallTileViewModel({ mxEvent, getRelationsForEvent }); - expect(vm.getSnapshot().timestamp).toStrictEqual("17:55"); - - // Decline event arrives, timestamp should update to be that of the decline event. - declineEvent.push(getMockedRtcDeclineEvent(mxEvent)); - mxEvent.emit(MatrixEventEvent.RelationsCreated, RelationType.Reference, EventType.RTCDecline); - expect(vm.getSnapshot().timestamp).toStrictEqual("17:56"); - }); - }); -}); diff --git a/knip.ts b/knip.ts index d2053ace5c..893226ec41 100644 --- a/knip.ts +++ b/knip.ts @@ -57,6 +57,7 @@ export default { "!scripts/**!", "!src/test/**!", "!recorder-worklet-loader.cjs!", + "!src/**/*-{mock,mocks,snapshot,actions}.*!", ], ignoreDependencies: [ // False positive diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx/default-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx/default-auto.png deleted file mode 100644 index 1b6547d1ca05585812f8ada6d4ef34031348431f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20177 zcmaiccRbba`~Nwwjyh-@$*7D|lCs*U#H*=^qGg135sD(hIq!xh8qyG_QdXg1B;$nA zL_;cjMfTp~cfHm*$LH~VJbr(@Pq+JA<9S{8weI`8FPIt|jgy!nL8H;ety{Zl3yn64 zPop7u%+au7<2LyvjmDy_TeaNWo!(IF7OcAUwr)%2*!g3pBNJ5*u(n%QHYHy?pBAHC z7ae0i{Q{4D%f*--!Q0JejCLJok6zVh^ZtuqKS)y_EstjK11edimWwuiFaBPBPNF8b zukF55sb_Rua80j4XRd!?@#j}=MTWXXuAfrntlU4O)(kb}b`SMB$(8mO4tLAhj4c|~ zMDON!@|TqoO@Dl#lIIH@n{Mv^(&H}+__WM)?{6cA#C^YPQ{ywf1$%z+ ziqt(bpC;#|{i@P0?#th)zFU>`3_stqOj~y1n%ZrNgO_M@gu!I7Q4V~VEb&Co&2h)^ zz+SsTEgkX1IjDRow>oiWc_?Z1KhljrVexZk$ub6!~Vaq(j2jzVdTZ zowQw=gEeAyDd_BQYaDp}a~d6~6w_D3$zy!-CUeLAv|MU+GJla>j+Snz?B7`Z*acVY zZvgvga|tnEU+p#iKyQ1-m&6j;zfUUMyk9SLOP$C@*^JSouv|a!N$JulA3tjNF5cj1 z^X=Ks_zjo}*0Om^3Ayq%aSLy1?(Eynd;L2tMjTTStzj(Oi0xu5(JC8u`|+>UJ_P$0 z({&vhi%WN$%N^Acc_4W5uHHY1K{m0Th5ec1bW0Y#aeiasEo*SH=W6*)OQ&(Z-hG$K zFNcOMD|gSCUe(s;=~AD0!sE)`f+Js$1gKPyox(@FFz|jQP^l#{x--jRXfBX zvGHbkn}+OJx0GR(^18PL=bk1OrMSP2jSU?hc;d|Gj`0m@d~WpXc;d2^txGyubMGq~ zYNm7^Y1Yiu|5qhu=fA9byl(NrdAEYbWG}Pw8SE^7JEwS2u=}?Ul_iP;|9VnwUgbt- zw%fEkcq4ba`r;hL*1(pJ+fzMmzEGG+ncLu^){K!-ow6aDW9}o>jxkEXp&*=R=hPWq^aC*X_Mxtt_Q2PZ*p62)9hdB zneNps?&Q;N*_Z4Xa9vj0O5VHJHxw$ zD;gX8OKRbEr>hOL$r+BbbV@zm!yhw2;q~9o3vwkw^&7rd7aYwFmA|R^YEQ!sLlf=f zgLXY1xBIKdrZ==zbA7sAEXb5gb6<5bg;`cvFi@#HJSnZ!uvFcDu!dW@5O&;rZ8d*h^}|2g22S-O`Q@ z$2I=6JmZ#nayYK?`f$9v=et-jNn``F-F*FTrlHFY_w1!57HJ0E zMWtt~PZTZ)KGA2AS?VzyShlslLC)aB`|MA92K6U}jy1He8J;>`zopFim{a;-mrwDT zPX=vYS7z*rEz;GrazCoqoYJ0o$>zDeQ)qfn4Um~!J~{W)iJrFYX|h8DHIf;QuhSol zO{{)%bV9bG&x)RRy6M(wE+tO66MPl=KD3f_2w%6N0F%d~ads3V1i zF77|ZbdU7&9@10$NoS~sZ!6)A8u9Ti@pH{TmC+U`)a&iA-Hnhwkx%He~cTftu$g6uDj-?WzZ?D3J`)qiL3owml1d%j${>)u~J>0X)3m4{4w{%rSW z-gQh~r#H}UqnX?LBYZ-$*Ob()daXTsGHMLFZ@2g*rayA3>Q3!0E+13cZ`|{K`Is{r za$4#>=KUQIPI88-V>7}HP9B`)=hJ`JDDX|6kzwD_S>C$6(Kh{S+{-0xSUGw}miOfU zHk_bgGGF`BNYKwPK(9M?Z)Ixywhox2mRat7ch@mZHMq2YVUN^=Qti*T7pSEi&J8;I z%H{8w;|04kiaZLBl&ggHSj}3|YG`<@-#Nd+ensn^AECV!+cUo!8q7O2d`o)flf?-= zUM4er?k?!P;=QYR;PSnX-~E>UQ!6)-8+dxk;A5tG>M-K$8T;&YbDHO$ecOVU>IQ%B zpVYH@PKl~Rf1J^|itPJAMco(vy_CDM)O4VyUDnb;NvF{Dds}gMQ_qby&(=8S@{G3Z z$V(>9HUrt*i{AIQm*j$KJO$MTRvKs{Z~d1lduMGf7t8h9Hp@HfRc*9;^D^ZnVFOaN6%(wj zeKN1u4GjclRw}ngI9ET2&Rhbe*|wegypJC4J)XO)yUSps)w5G2xtXT)q#f?ziXrkL zJ#+lW>2@2$Xd7JH<@_hN$G6XOJNF(P+Gt}^_%E{j>+nE?bJ=p` z#nF#9|%0?C=IwOwzHO4KGS@37=YEgI_qR4DwY@KUv~`9KWKFXxNjX_w z?hgcdf9Fct$Hs4)_20>7-|m+5^tIgB)l%~BU+!2F?~mUzie$ErRW|H+`1bz&w4XLk zsV%K54ZcaX9`Myl_@kZTF`3F+);X+2#s^?X7hC&BZGVY!Z89b$%Z_-IAl* ztbD@jLwjbu&EUnjhQW%=UtV2BstvE|FJ zlzQaV_oi1hA=M>!>#i&+uv(ztS~eyVJc2o#RMlKwacO8`Nq30bm3w`mxqbf5e{+o` zvlaU@ojbbIrTz3P+RMYFy{(ky49(rzIwtC(oM+mp?zX-~KX*KIU);5IV18$|frn{Q zM@4#Iw#{&I!HrV4X0iH;u*QVqnZeFQ{uw(B4VMkHj2WKl*Z1eD9TY{g$Dhsj7+zg| zevX&+z|eq8#(&rSCu9$_cvgqMeEX)=)2F;WR5ALWjAzs47@Ll*!P^IvoW2&Aop3+a zI$u9r?tN}={?2OUpG)>Z!b)vES@Ww|-mvMY|G4ylx49qdO{|?)=rvsTJ=dNyxbNh> zF~~}Zq{~#n3B7^Xn(_RzWe=4*TUzdSrz}qS3!%=(&*Q}=9f|0YZqJwrJ6(3Ov~rZY z>`#wVnxfQu-bdX~R{6x0-!X;ml~*$MDEHr*o7f%MQRTAT#;enmQT?HLLchmZnQcr6 z=7o+gzQk=v@}qIn7{ROX9t11k*k{%wE%V=3mZg(5s?Ec-myi(cQq^BZ$y!NmU z|C3+8F}7KY`Rf`bDsNK6LRyf92NAxc#Alr){}Q(mrR|zoPV_(TO;97ESK{l@>Fx^W z!ij&O#)!u>+`**9{(iPR^yosf`)W#_fHcl{Of1{~_$enf&Mt-yP^IW(jkWZ6_vO?c zl)aB05ABU@3SSX2OjGT?(#6rsYPsbJsvF)Zw+B;VLOJ9rW^T;k&)^n1rK{*4%-@<3 z485O*W=hA!b-t-HgkH`;FCvF$#-;FAr+$82-dBIF&5fh`+cwqt&DkJLpPOzXr7l3G zNDtIjYpF@MnW$5Ea4_!MsBL4bZMfbohojFOS9-pt=S%Y(=B1c4og(M&U+xd68-Dbr zW&xA`Rn&xeJrn7{MOtz$qlr5|yX5%xr1E!nGXql{JRRp$#w2!4x!;ptI(>2wJ<0v~ zyVJ^(pc~hM+*)cK;tn01ui@bF`*TMBU;RDwYmQP`<$C2V6xq4yIVoYvrroOCs`}79rmG8j8WD)B}DqY5voS` z1a7j86ImQJuKPL;Ivyc?3;Sza3Wt`GasjhJKmw-@@1wE(k0-G>;d@(WVsSrAo##kS z5%{hM(&9S5gy{JHiAUTb{NdJelomqIosi-cCW(RZyM@ot|VeD_n{=6WF&{4>@<39dp>U zZl~&vq;UARvQ&9@xC}-aHz}By1yHa(V~(}(rRhi9Y8NPp{fWJf`x$Y*w!n0uXo_Pl zWV30yoT6W{IwIj36gmV79Xh12b`zQ^5FS%#9VoOedmi$S8G+3@$iH!Sf+RaR(3!Kv z=!MeGXxgrq*xr^ z%`W3eZa|=m(Xf%j4***SIBTm2Pcm;D-E*S+E|jKJk`pM98a^D{#&=W!;Z<5+ksd*s z>dr*@(Uv=_sLEZ@_qOzF0x57 zumaOU1%y|Twh$=9bEMY;7(59us>Eu0p+XTR{ErN#`3yE~JLAw~%7=h^9V>1ow+@V2 zr}If4pAsaWxdTs_>T)cOhFUzE(w`rJ#6Z+S6%oW)G3uu;SRle;fn1nPxjq$Tc4@&%bMN6=**cPr5^~;K_p6vfD0U9?p+LVkj0r0P_M> zduyD)+$4?$!Gb#lFrRW%iwq=Vr9=PMlZAb}GwK1ju*Qr?vGK3^^ckx|tN_kIU`;)|CO3Mvm z`j`>XN)V>9N=N9<5M;SJz*6T&qd@4qee_gmcHT80F)`%`Wi^?gVP>hYY1s=T1BE`r4!FzlegMbd;S}H9lxZ=60{l^jdrbbbO{JD=o2}n5Q9P1T6>}S`+wP zjO1y&4MI~k!g6CSD#l<|Y4Z%Jb?z*1vRUtVOjxMWfPp^20M!JJn%7OoV05cy@zjWQ z_H+n#5A4WZrb?AJ6<=os0e%Jg<|_$ps;2Ysym8(b@N=9YK^Z)34sR6f&w{j`ttYcc zpkkON?*zh_4!Wx-UVbjbFKjmNFwzQ!Y|UA-Pek#snY@w+2x$@75A_JS2)Xmt*BD$Uh2|at^ zxcI6WJUNl|>2U5;rk+2>teVD?6t1^I!fE}oYBiMI+B|P+ojVIy&dPo;3l_pOc*n?f z^a-H-{XEoje%`Aj zs2GwphqnUO!=ShfpQ|dYTC+5HItXJToH6OiH|7ft9W!e-PaW!BCjZ~(^^Zi*&YH;! z2?Hkyd-rGuAs4|nOC`WU6>&Z+Z8m2F+GABskJ6N)M#~B8iysv3A5dNW!c#KwlZWRk zSof>n%+w5X(JG&N3-;a$f0%HC@k8W+=UEtK~zN9-T>3k)F;IcJc2>(N_GiSVPcD5WAyik_jm<7JRsW8Cy!%(Tu(Rs~Z`y(->>U z^1T|%XNVdGu5Xi}68^}v!tYuIru+c5{cu@5ZN=6R#peyM?TyEee%@mIz>^!XAKeW? z?;d5Q&DCR=<2vK(>}4Qy>g~u|G;V@egFwcBFc7-x*CePgh^B)$Wow~7G(LW;4!hBW zY}P>9Y=$Oat*`$G&nVpeVhx0CzCoS(JtVX)=8W4vY8F7^{+Q8#$CeKe!#?<%j-qhy z6KlXoD}V|Lk0ZuVC~%jEJptTjf(kQF{}2v6xgLxs>)FbnLg>yqks_HJCH5pJ5LC$5 zTSUe%!e{Fk$1K;;a*jOcBhxw&oVc^aMvvv2#guQNI1;91r2_8n&j=mt#(fqNVHc>A4jM^d*a#uFTa-{9lF zub8i-u>LCc1jic0RtS$G69Vwv%m6<_AA{JBPv^@DeY~7uwVDkbuU_fzI^h71#$7HJ z92yT|ce*bUoK=kQkk~OpGg^*UMxRLG0P9<9Z_=znDzUzU6b1V*17-%f3s+K&%MQYfzv@t z0Hu=le4-U)=f!f`vHfgM5W8Q>K7dql?rY8hSkDuKVnx#IrwXMweL7>_2o+CK~EN%qnOBSQBQ^|`ZY zZsyAiMR0~ViaE7+R>;WuF9EnEJXB1Xw;dOOq|QD7n$-NOJHn#ZQ0+Hp67UKP(94N8 z;u+Ep2-CuQD7ABZ-YuDd+Un4=1xPQM#-_RL{(J`_G`|D!qv$73hvj|W`tZOV$w(oc z$8{}AYs!m@C-THh335!DtO~pBOUP=FaZ|hppA+1JY`s+X*f>g=6}Fh`X@e21gOfuj z5sGE=meCPKC`gtraX&)sWx8%fOQ9kK!fstlgn=0LD!N&K6dgT_1Sb=Uwjf4wNi?mf zb16D33TW*)6zI-Bctivslvj@wkLO#5rU|QH%mb!@@m6Mr6h#$`pn!D%j}FxzPvO*v zth<6gH~r$rZ?KKz7zw?g7*u|(>!K)70|4b+2lJ_A#~gwRTa)KTZbr9**Txv{Dg~mo zk2%C^92$2#1YJd?w4WF{JbR>%D6oqmTEAZAQ;d`4HZg1QdD#*;mTp6`G(Z(|3D@PQ zKPDmTKU#w}abVz|@2ycE_zzYKU3()k*Rc}oSk2+jhhfm|GtJo7NGeroJQbu8V*FA0 z5K++BYV_2Na4gk4gtKw{D<_$n1!rj~3Kw*RM1UIGi0dd;rl1xf2wu3`)@}gYF3tA8 z?kdc4m{Wk-)*;@B9tB#YcVjv!LT|j(d(^>n4FvZ@@=qx3#02njqMabc?f{9E{__FY zh<1Wh=O#GY21TOn3qg{p;`lOz+dY#)aHY9Lj1DpnT?T&H_U`16t4f7OG-q?y!Q_!q zp-Qr6kD)Kaz6lK|($Y4QYC@T;wU%fnAbD#GY`^yQt`O8MGN!t8mI^Vf$gZX3TleJ4h7u!fGR&Ws?n+xT~^+vtWp`NXy10 z5NmNu3TDBdAp+$hRdXrO$yqSJ0k$`+$su+F#N;fP@T(8&grF0%;6ZSJ!S#!=K{@#+ zd=_j=10iXe;Uhd8X2D};!W8sxwF9*o|JM1Hwq@!t9sgiOIvWYVY>6rvj#)704i(C9 z4m>PnNd4Wf^Gs5}6Z^0cPOFJi6xEFlH8e9dUT{! zGJ;B0fT%JA6XmtWP$Hq9k;8)QU26j8D)+-qi~=j16GeFwIR(asTF?y6P z$J5BSC@4V2*_}If46kBG7(0 z+t!I7^P2;7341qZ^(3!G~qEUJlFFi#ykPkmjzNNB)k!R9an*na-dY)Wbj zUzi0yJq$VF@Uo{=vqr#>&oocFNV8fTDK^5Z*=x8j5$DVQ9i~Dk&V)My^q=wW<;%5r z<`EnZDB5WHDfcw)%EV12tV#T74OG8I6)y9*RF6Su26JYlCE`DrHS@gbONHV`pb)=k zUnjz@2s8d40Sx(|f4-gtKC`Zqic=?9@F1Hd&0jBxhZ3yKAgdPh*`R;qA!7E8@|Msw zh#eO}|BK7D$X%?675pg}3&4zKl^Q9mYS&0RV{^B|U_5)f_*nvlxOQSzM%Wx4akhRg zn8kzmw$AkJtO%Hu#Yh!=6G#mo7FNT6Eq@F5ow8Wj zyAMZ1J4HHjgqbD7DP+Z|iGs*<#p27s&+A9FrhVZ4eGX6csh)#8{-)8OjYjNS@eYkL zeGyseAf?yKCcwn}g{0nTK{!H3fhk74Pr!u2yAJXkEmQ$*Djo0v*ewhGYtk0ncfj>s z#F16F=Rn)Bi3q(50dn2QBXbCbW#05$98EM6sArZXP^n@Pl7_AGP68$;U6xWAFj<>- zecoy-Y8K!FR9->~PRwu=G&$TRiP~V8MF9JRszzbo&AWtn%*=ZLb@KGIry^0K_9n-% z5WKIjGm(6NPAHZ>bdrO2fR7L&LkKzZfCdK1zVd6Z@Gh9tjaz2dS1%U7NbrFS*U_N|sCk%{F(h|s^PR)l8LPB!% z8Lf_KhS4GC!>b^{7|k2KTHw*de0Vp+oISVCED@XwVm>Sd*-L8N%GrX`33OC>cauPw zq`&v45FS9%pU$#YMx0$$HnT=J^p9zI4z!quqwFaMAXsn>fQCUp)RMPLM2G_nm=Qv} z3QqhS(ZyPTc`d6GPr5N&iJp)!O(7ssC>>|W)n?Wbr3a=L%7A6YN>hZ6oRqBfqm0iU z4}GlP;)wrX;gv)!_45nX6_~t!nKcQYll6+%o+tL7Uk3;A(3Hc(L0l|eOFZ>i1?7^F z4y&5P?SMA5%He5qWrmAuW#` zLIe&WlJ)Oq%ZOVv^48;0k^0vOqDG@`J=&!5#6{Mhfj8i{9>-XDA{`zRv|;)_fN|wF zSyO1S345Z!piQvLX6(!meF?tKwg7GZe4T|4kG@Hp;ywIzVxs9L3lQ6)eT!&&$k;8lHfB6s@72}WBOg$llZw!x zO)%q<10sRySe!lk{^rOM#vNdCKXBb*U!7=Kj{bnXKPop{EkV>p*4ZZjrY`YFe^dfF zOb!2`=j6c5g&%NZEe9<^qNqsATDuZPvU`l9U?bc*)KPqAKwMW_pnevE2|b0Vlj~cc zI5N9)(*lPH-H4DbegUj|Vcf=7r1=z(C_E@)4R6Q($Ga)B7UCC-=rs`g+8#5(!yMET zIRP(ewu0FCA0qD(X9(jv73rE00FPUOTUu_A4KIF1UmzzoSc2G|-ceLJim#g?ADUHY zYKAMukw=V_#}IiaR_1-ec|3(O!QwoWZc27c>cIyYTwFnD*Zne zwWUkWVj&!DM^2D7+X9)`EF|O)fi<)sgbgl0V|-zPX)meU0^|fH54Qtcq~kyYcAti0 zQH=ZqzNjpSExYFjgVG%JLbd_cav*llx;l~ku891c5pWg6{yH}v4`(Eucx2nB4KS9o z4@nl$n}cpeem_;A9njq}Ze+z`j+_=Ni`>>S@_`C#Erzx2T4NDE1)*I*Xx9S;uGL)v zf5b5O210+UG&|*joS^&>bYjC@tzM^iR46KqbYcEQV$B7i->~B0d#T7a0oL!quXFbJ zC1dnNUZLy-zdo>F{S_RePGlR2^)c{kmphMl5!eMHKMB6K!LM(RGha$#u?X3QV?6*a zGO$02x(%eBpxgwpZ|=#TL}ATuL1Jd0?Cl_S!G}63XFvfp7m1k`@C?Lmb&g*{=>hAu zNKOv;b&h9R@(4WAk>BwCtpUJc71!#V}asI5A^S*kVw z>Vo@r_EhJK9hVEpuH)d=O+QnP3yVZp--q1m*QU8SR!yO1Lb#{sip?Bd<~XHR@Ztuy z+7dRK=0Ej$IH4KkkFg+fv%{Fi&*Tv$k%obAjz`L!dK><2k^NQLfV6?#pcK_*5J+Q` z-E7}mz$AP>-AIs>lA!`~+mn+FUQ09?g!8zr0Zl$fEW*p1Pm=EBJIh*fEKKMPJqB^J zC>RS9U)Gdq!O{KyjD-o03li%v=7^4kiE~&yDR0q;u`nsuCNzD-SeWp|JVkDfo4V*& z7{eF_tjse4^++(`@YaYeQRFN&^rDHN#v)B>ayVb)K?67dxO3Bwq(z?ToC6};T{pq< zpRCReJeJ5|;hhFg9OE0a53!cZ!`@30D(ZsUI_6lzDA9F0{PGlEq;Ye=$L}eoz5`R_ zt)?#{t8Hs+=B@9Qibw85hAZJpOTeaX1EceZdWm{!!r{;wl&G*(HHWtnV^|9TW*K8x zaIC8|dDyQ}HKAk;TH;OyC+r+x?@UwOCCxZ{{qswIFxjxmsz_P z%&#w=H3A^k`{lO1N{q7VO(`o08{qxUEq=#zuYKh zEX6Qq8_}0hvNXZWyE(Ci*auAn@yG<8yMuzkwiZthap|?p^9qxpxdlfkgZu!d+-bM1@!DE`F>F=3An>A9BEfs-xtzS1=HU3p={I z&NRWL9W@Z{1JL`?V-l1?96VT#|r}K$bs-_5c2fF#eyFi zV`#SKe2)E0qmAE&{r>`(5qnXP0G%5y)EG2eArtD~1FfaWY*m z9(KJpt#)+6GcihD9P7^zjdMAbrt6WzLN5W&`3y*ZHt?GWHFThe#Gln+`}!&dJX0o` z3&P4=Z}1%N8^Lh!MBksV^TOfWsNMLEd;J=^;2BgOczu83G2&YH{04Lp!GezhSJcXw z%ulo!CP-5ehf^J zwE(V7HP}lbGBhym$i^wdtv;h{bH|7mB=8EQVIhoE^r!Pajl@x$`?VXUsJbtqjTX{j z&R_?)(v11rMa>KS+Xd*~KCsWt%2XBE3;qoeQ=fLzY|li~5w{eh;W&(GKc+MCAqt1j z2VD4j;Z~7%gx)Xo0(nS|N^8Dg=p8iS=LlG=gowT};}srM{s>2Dw(fw7`_k=rNEW_D zVP2jAK{l&~>}6oMM-2A3n;~6n7PB@X&v%3kAA2dvHs!*2js8GY0Ak&wIPASo6bwtE zkG>R~2O9nag@f*c^RVxRtnfUbyua=q7autoCRlXLDf|3CgJFWjAoGWh-^jr*#)6G-BStwh4Av97 zNCR>=g8uGfBIi?p;9Mh2!OE=fTeeE<7=d{{xM;qI#TArnJV?xW#~@4{+aft}5*aDuRI!qoQzM{gZ#F*3NAJ_O}eVjhi=a@Hnc#nq|<=Xw~GF+RnV2NePvz(-Yp8BrmzkggEl#TjB#yj zA8@di2~31OgzXQDbV#SC-ljm{g~!vfiPYm&@_(a}2W3wYlB`7?HsWy#;}1lZ!lQ}A z@CzflU91D%yb&*jb%fmv_ButHdMQls$Iajh|1%ZAOJNb~!1I)TYYFnDFqIPE?|B?F znx4cRau`|KFxG=}?mbxj=CKHE*v$i>*$GeINm5T2a8eLp!Anvb*Nl9k!k7ZNZ>n12 zG*QzqUjo>P_Z>|}yiuWXZ-S%UEIR`3&2^LzbZEpdIQ1Te5>N0*g+UI37vqF${W!)r ziYPS81kj)Fql~1PWO^xj~E6M>xOhisgc8AVjbS8{Le6$ zSf9Y{Ngg>2#@BhHxobu_kL$D){Fs!CNviNWxwqyY*2#*r1OS69fGXSiIzHZ!@)3*- z+=tVOV$zFWPv-%I0t;IJ)RxLzgh}-zSj?a!^WfCX+qirjOznxDgs|6I0DJA|``F2^ zn$4pwu~2<*VEq@S_{6trCQq55&xXrhy{MzJh=?P2tHOdGW+)V{`hh0_pu^_jPeRT^ z6!deRwVuj>VOl&7ppykxM%jzywh9Ur;%AEw;GjNKypkc%gBhmA+l|bF#5m8y=!j51 zX4nkg&-Z}H`!Qjn7hTM-X)K>W#Cc%BmXU5|&Nj8D#qbO^h&VeIN7jSt>*d3(vP53Z z0C(0^(B|vhHucrIB1~COu+jYNm7+eZMwLa@SE<1rfbK*wskJuf7~%SEsH*n_U%Ugg z`A)P^uznR1z}4|TTyEmQNq}a8V8f>Cg^I$h;cBvz7EwIISwY*SF%&#fr`jD zm{^xz!TUzj&l=Jm;ljkNYW_S+{3nwF8&8LTsG?+S@hB3@>H?UKg3*uW8Xb>hMo zX0Td-sn#eA{h!w<65y*6W?SGD>hjqbfuj-;7fJd7elX3+d18)_ zR-TDRkfW8g&`cR0wz^2P1A?b1VKd=vz0SN&vi_RKjKE*1P6X>pE8Gz@8;ugbu&eb$ zVBJGGn<%rwwXXQDAR2csh`rY++*zm}_AUjwRmAz@cQesjN~qB^j)K^&bam?INBG(O z!VF8lL<=4odmR6#04Fcz0W9i^goa^U1_38>+E<|U1cE)!uSDm`VJ)uSk?V8DqT zf;#ZfmksgHm=VJ1F^yXVhofrEV_T$AGJ*(B*y({Eh$GGy&CH;wJR;S*unfVIJLs>9vH{DsSd zO+OdNKM-`*i0UoOMly3UfQ@(OTle}-26?qUTS~U^h=bM51FN8 zl&RyiMKqGj`a0{m#7-WYwP16*;vVax=hh-3Th?w+5|MWEHa62TzGb4fx93_^T8EhG z_pFcAOQn1}67LT=L@aJQzf@9#bpM9ZzO+UrQ5B>SsFgB1J zvdmj5Z%XZ?Zt4I#h^N;$oA_VO?rzT9vZR4wr(1<>))7|1)S85a8I_n=AA?nPV;8lAypA#4g2{@AUS)iLtN z_3lcA<6R1#v%9w++1pc6e~+o#bIaaST&p3_{?nm%;eUV1xyX3ExRHT=h4}6t@%<0K z88$t?;<@l}Pr;o`dzn@BE`=lcALmeMvLd>w#05-N<#Y~^w$$Oi|GrCpof^5}A|C1W zm!GfP#HMhVihN3ZOkAEE{ZOKjTQ~db-ETc3NA`6G&PUh?LxQ|fNmgylyf?ukUHYp= z{;nORc2!GIdVF>uJvdc}mWZcw&i?PYh~NDXM_H6dPPwStC5%%aJ6@6B`)@xylJNgE zK{C;ARr+%Nq4g^HEf!aBKC~mRz1cKn^wE(Y=gc3~`@DPO`lGp1=X3roQH)H^3y}*( zC~n8b8T~O9x*7#zT|H9C+FzoY&WDHYtIiyl?d_fC^Pl{rzOj+Ez2TFlj=1@M_FO8J z-*a!9np3#`*zlK>siIzCrTJycEp+}|=>1vvTU4td`0$^=Tj52cU0$wL@!hk{b-#VN zZ2qlt^i)uhdqdT6g@WE^A&y!vOq}(bJ(_GXL*KCCwc{}^fGn4z>=a-`jXrsZKKN*U zRrszLgPVDt<(cZ4k8bI%v)a_1 zrkCpt6ntKy9^)AN<5`nm(fIm5Bd^pm#Zr=n&U+8k`Ne1M4b1B+&ws@Z>B^4Ut8+7R zK()JYJaqV^-{Zam7-dn@G{lO!OI%}DUNyxP3za+dj7)@Klccsiu=pV{e7+Dhhg&Pwd|9xn@Tg8m?9 z;H2|dbBb%tfm})DkxEWWTaxd`&rQq2XW4}+`Hh@%{rvBm(wJX;U;Ztdb|N!m^u^C1 z^-R0zgL@6us0aTrHM&q5MbSU_#$fD+MU(ybkE=gFS(qE_YX0X(n^vv&`n;y0W!D=< zzK;B?y_5NHLGbXJ263a%K7(Q#+1~}fKH8VW#H^V!>-WQ@$Ja{@2VYWr+S4W3|K+@e zM#K1+RP+qz23dg-(I?A$hc2c)o08TrRKKNZM0||d-5p{%ly5MyaHReCyW;0Fz2wF^ z+gpkw3j)eBE0&t-w^bF1rd&N}`ziRHS@E*ctFtl+0>7{S*z@aW>$#g+$3JXy)(9Rt z>?~RqzjSFuPn#>3qU-x)y}^%vvTCA|m6INpl{c9tkGgHodOo8iWuz%a;Y7@=;O%*! z@~aKb=(S#W_o}o0$M4*eHnux%20sRy^d58#Kkir9+11+FS3Yd^=|D_j@wdGrD@JY( zq|h_#{lFGLb5>WnaZ{qZ%Kj~qT&ZE^@#U~V;;mh_HE1#9aL1dLCMY_ykftBCJWnmY2rsO0TU)4;WZ zgIT3z&eOZMuljAVHDr(-bG-0(sBb`BxRkcqYq`9#GrD}IgWAsmPDK6EYxN$#>s54J z-mEN3v)%D`TyJEZlicik?|!?cDCJ1TJC0RZ1}pkM=^0myvffRVqz9i%ZSLFs?d{E`CsLu_+x_ao z&2=8NUbH_RHdqwq{5aRU^F&juh4QTE)g48}uHm6Ny5CI3nW4Wr50~v4)s;&gssA|a zKXSn;TB>w>u)TMvs>>ksvzb=itjGPWna8WTi=4IFRg|YT3=T=VMro{)3J+^CZC#zL z*WX*8@?Xty*%*UW!A*VPC;SS*x>btCL&j%^4vzMmh*9!E^1fDklqrAEZ+V@3@^I*% zJH4MPg8z~$EgJ4pDRT*Vz05%DS%cZwkk(^)r~YdSCzo3o%pd7UOb%bUVC2cV9kEk{ zRG%?#L00#AWf@yX-!cCWVO8RfrFOJEY5HpKDXGw}FB$r@#E;SU^^JIDedphDzDcfpF?c0Jf5-g+Rf=E#jQqBwpgjdUKm6${d01${aW3febRAYwo*t&l9v3jBXG zdvED^SKsXa<93g1Qtx0^wfi0Ur6psTpS22F-*~AdSNzI)GSnHDvj6Syr^o(V-;cyc zmFn+UqCaQJ?;5Z1s_9*KGOt+jMWeT>NsE}0}0bLoFc ztLguz_oX-Uc$-1nW!GQBKR-VGID078x43g4WaFpZEoX`?Du({PR5kp5Fe$%B)GM@0 zzbQL2G~iE5#pp=+ZF!GqIrc#Cx1zX>BaN42UmaB)WAtBFzW2_5(w+3be(!ptzUu1G z=qZcf;6E)z4Uc-7vl!o9(=U(h%3|Wy1gboSwbOss`Aih3kZpWE`LG~jtteO zyl;)FF9CO@6lvieWD!0zPW8~^7I@~y7w!%&@|yi8J8QViNoQ==7gN=dkk0w07caC0 zk!cHRz{nEXvzRr?p-;~?ou~*p@<*k7qw}+%p3&YXtucr~QG17%R=wP`#oJYMo9@Mk zRXGGXZVwyvElKcLqGqm9)ZG=Lmfw+f=VHZhfZ{?*QTKr!@n_CE^}jt>UUJ82yxhcq zHrlI{E8Y{@=}|JdkXE&Q*RLHO0YghH#A5>buNQNsgcK+o3X_X;ru=%YRk%{F=z@Dp zou7JU;qU5auHi~K;uayV%9}boG9>qoH^-wGegC)2s^naKY3r1be%Yq<`(e^k2VWSK zF0FIFqfuhMrb`h5|AnlUsWk&gm4xzOBlVxbXWO2cZ2Y9(_26Ae@_6vUy#BXk#r4DA z6^_)5%0K((pT|kn;?>V$Rwf6(x(!SQY~FsT?p$wDSXkKfwA{~oI)9eljVkhT7+KZX z6Fgv0ayw;ocWQ|3qZc#zSseTkv4K0NdL$}LFLf~fWTf(8{m#V0Wy+j-ub#TnPD;g!rwnq&Nk2 z-Lu#<>=<%gvP!Bauy4$@N!W0uC<3_^p1$PCHCFPdbvlutU+S*sj6=1$CW9wgX<3`%SJZ*5 z4=Cm|9BCTt{G61omNDo*^hC-oD95U7msG%u^~GzagsLrm)PJqlV4H)?lA`YwO`|;_ z76Ix0gYkRE4{LYsO$l!a4ffIQn9?Bbyt-Mu>4t2m^{ho<%WQs#r$s6R74EF~Ipq6s zM~eUIF`JRUJ1l}nxV=?n<6CEkwaj$d7TR!MAwBB+kx!xd-o*z?kKYdqHPjvoADu;7> z+u7PW1lAbvtf56?DDYLe#S*8JZNF)M9v123k36$WNjenl-w@QGH|BR*d3><+1f*+w zTYsfoJ+w~y%kpH2w&a1bpE^?XlXBkE`RKIQrG;ePb&Kv~lY+%Qf(g z1!A=URgO*NPQS0_{+^`FL`$LOWfk}}*ons5kXAZlvvgid^qP`MRd&l?*Z7zCmRu`x z(re9%7aYi78gD_~&~2yXrN;+oeRex$Ii}S3Myp=a!RMR2dUC6ha1>`68zDEPIWPXdwJ};M zvp7NA*Z2Gyl+eQ3DW_0Bv8pU@W=5{L+E|Cz+0$hd2i+ZQYo#P&Y7cfoX)LBG9ho7; zdv@nfUt74@Dm#Py`5$h%4xhL(K>M-kRM_qDvuplx;TQ3On%<{v_NUO!H^n*jp4DYJ zohJhN7Hq7)r_5PWoS7*h@?Zm53Sp|zLOb8mJ6My%GWh`X zAoe{nO!nS$KlE`8ut1*SSMwHw7B1GFDvgKKg`%l(SVj4I35!zE-J*tVhm$0!HZrh< zmk8SvH<;tQ;fM%FBn1A`ZiG;}jb5%6@Y5`B2{s!d#^8mlTYZMCQh``Sk@p+8VN_~f znEGDyNb)1r66yzuc`S<5)7IS+6f0t*OQjCIaqY82K9ktDOvH9iW1mmtToY1l7Q&^% z(bO-`bF!of+VLA+1G*K)Er>g<1KJ7XrEK1QU}(Qiv^1)|0_qvB=fHOA7fmW{AtUvy zV0$fWuQeko0+Pa_MADKl4&-gD${hA6aIJY7WPLipgS?H- zc%bUCmj?cl$qqk$Sl~0Mv;&M!=Xt$AeD9HrdHi#Li~F=AGffc6>{AtlMi9JKUf`t; zGkDj<9^s7=G}S^sI>$8DrKq~58&8xGf>5Ge80+I3*G*V&w+CFVygGGHG&P(!7(3<| zgTXuIwmKfsr7aTHbp&uhG*e_*%wy~s0=6VT8>KwIiow|r)Ln2-3g>YCq0<}x`Q(5Z z*a6W`WHUrF9dJoc?8FX0`e;W8jt!Yiwh`~}LR>K_Z?Fro9XvO{#Vs^r0fEa36&D4R z3&kCP%jHS|L%!nMlYt8xAl^pJ?iimTB!p(W0O8IB&6{gnMj{1gTZXe&idw6(DBJe# zn=d$r&ahT@$=(D)-LzW6P@s(H*`n5k(G-X5)L#PbQA^&$c}nxXa58c(K_hkvhYtMH zPp)vfrYfYmpcfB-{}orouT0BQ7B&JyY2g3A!y25g^zTAWi5CIV6}l6;-} zD&vhJWCpjIsnrNHo%fm+4K2M`Hl>#N-~fL+gL%oE7er5xWwNi_&yf}8e}TCFhg8_E zmitC%JA}0p$h!uS##_(2uvRLc(YuTd)7bXQvIrw3)ZGX5FZ*7&3;7B#|7uYGYBvqt zRCXU9Ezd0K*1p-Zba|9}0X-0LFbps9e ztf(&+e4XKAh7{ce1;6{VW`cs(NxS7+QS-V)KcW6h@P!%DZmTI;Z?Bv2DZu_ffQkaq z?`9LU{){LPyrsr1ja?-;fWdUz3RG;ZaiVuC^qv+R&N&HepL}w_h>gr?#Byc)56i^BaThad-ayz|<;J{U<4WVA2^AYIyXvC!uTq9#N9au*sfDQ>Oq3pe!7N~--WT;f_ zb8FQE3Xdew9?fOOuqm@D7F**9I?jkEZRpe{P)he%k-|y|$=f~Oxs=jX(!T^ojb;lP zG|4HAc7a)BMnzzI$qJz)olh;6UA%Du+INBVyZ`xl?NSorCm?mXK`Xn(|JAbUUS)tuOH_7cJRQwZ~=TC(!etk_5FA-)u@ zf&afgE9x3-jLl%bBG>PMmEJQqbi}y3#!kT3IT4_(5#iTY;AmfDyJPE+YSO%G`?e5X zKQ@xBgRZjzf$Smag`^K*7O}-(J@zP@l30A4|sO2^w6!YDduLRj2GliYT zxS_(Lq%2pDy!^muVaWqbaVEFVqZ+VN&XNdEu@J-(E3+2^J7GO~=ou$t40kVDerW_)C5lT<2OLH{21TVk_`#fRZ^}Xa4TJX&mjNAi5x|<$%(Cj(a$= zl4dK2+R&4uBsOgJ-N5Fh(lYo-$qUGA$`7R{zyVM>^Q-1Bi&&I4ogE=4N<2+k264_` zAl&7%Gd^P4$#bEVF0b0l)f9KuO(38)zYw*f&y@}Wb=*~ zKBo6YwGG*b5iCbb*j?c-({CyCF5z^8=GR@$HW%{Imlieproe9VGxqldyBW+pXRb#D zy)nbgp-6bSJ(YKXQoBXu0O{5+>XF}|)K8^@aBC&a?K8;xbM%qk=VXn6iHnm6oFt~) z$z4lNg^ZL^TlcwB zkWs^4pW1yu#k-a&VXy5d(;k>f^RDWlj0ywFok?3u>3+e@HX&%hG&e)sXAQ+KWJr(& zqvjnB!ka1?v5P$1#6Y&+DrW$s86S zR6$PW(T?wg2W2Rn3=pd0)q=;MLRd|KQbwgIfiADn4Ze$#fK<`@alt;)fMbKk9^qoE zldi-{G#@BfyGJxA1Z(X_*|Sl7WYMXg9I?YteIxQuOSo%hy9>{|TpjYPdNshjkl%wO z+|oj@6+Wnp2Z<_J%~t((RQMD}U^`!T)bm${z0lD*(0lS5nOqsVjovRLKsM$3Y+y5t zswBvq+987K(Z>Nc)?R8M=|&l+VR_e792N_zBf0(@Byv#90w)y83Br*q0FY!?l7mw} zr7J}-MlV4%YC-*hnh1vIF*X(mUH*oS+267~e70|Ba06k-W(YwRWzA*+MsACxUZHR< zgMMA!U0@;5L?n>5Xn|%FI9KuL^};Y2n;>`ZgZsKatc~YLB-;BJuXo&}=&GKTC0DSo zv8HeeCV5YleJf~EqqJHB;oFK8+vcVTd17#Z!@&NqhHjZDq9uImC1?R#H1{5bXWb!O z8?jGa(ttplryex=TZKy0g7K?4`+%Q)mIdHqI2T0T^F5YkA#5*<^21cojA}y~(;kRr zdv6@XxxcZ1>x3WVvIO;52IsOVMM;ql3J~@VE)-%u(T|8mCr^;SF=ub7c zI&f0|d=_Qk*_U}FbyV6tu~bm-P+&FmW}=Z0=)tr_b2ZsOB;}%&km9qT=CGR#ZImf} zhak5R0_N!)O>cQxFK_n}Ayj~CIgy`YyoKiQP9rRg$_UVK#^L2xKH-gJlF~h(;(K!r z&eNcN5U4FMWD5-0&YmKAV=mWR=+>{0DYnTRN~A!>ZEegapDP7^M`~UQoXXlm%_bF^ z(GQMipzX_I^n?g2#D)~oW8nYs?L_>5owAl#mIrN0AW}Et;$fVBjz66!uqT6%rqB=T z5d5**go4XME(A_X}`Qk`#JS(cf_hr~03mG?**j7y23Hcpk z!yKq>mYr;h^yWX^VVCzW1zfyZU+2-S@vae}XVAZGPS?S& zUT=R$#7Q@Eo;kL|Wdq={0f{F~C4rfRRX(S||HXK^iIBK(0!7ln&N!QZ_)UsJ6*lxD zp$};p2hF#*8@@u?nCirfq%Q)Ysy}@oC#=+Ia#^<75ZSVmY$s-Q?({{@8z~uy?~e+& zhXa|{5j(23;o6majYCl*%Dx%uZzoDa0#KLoYJ0UuGv|T5UiZZQSjMR#>VzZxg;_Cz#Ss%QBLqG-lRh6e4RNew&y3Mn3BQ(H$Ty;n)H3 zcH1?`+rV_UQ>&y|mJrb#;?sSFT#2FsPoC}$sCzukMyoWwKqgCjdlmxmg^z9d85jo4 z7~S2#l#+4v(`3PB6!l|BEmeE+9Lxy$#)K6jPj^}46$NRN#9PNrcaii7n3HcE@J4{Y z58wn@W&_#STZf_}PfT#DJ7DgCWTS;VUTokWA$mZzUWP525^$R64rF4PY6h5}`B;qY za@%2F@vNztgcDx?u6{vw7a^J2rH%L_q}z5lU9t8EK{;m~537Jz0ODF+o<_uN zNR>!GWF{P2xYPF20ltz~I#RF7vMSL8|6)Oi04bj>NCn*vRNVe)?n)sQual`fkPmF; zj~x-#aAX_ZuE%O|tkzAk7eMh0p^K5ai}?c10(!M1&&m zH*?^tyxRP{NP%#6gItH(uh*_p$y&$bzgEIQ2@rm-Ov{Ci)f`R1wUtMKG1?;yQD%D% zyPMBmHN4i<9Lz=AVUHGZy-18a;AoHjRcLb0=@xA#auYY`BYRpk)MEg1O=;-NJlLuR zoXa3tgks(Y%1;;(@Lqf#?}OnW z%@XO~z=G#a?Q5=TLJ0<^fbJs;o@iE;?!-XnK)=?xo)YajPfQpk3P*>YAj$LfaS=*W zQA#Vr0gx$MZBn*RY{FE75NhuCRF@A;C<^WXeRoDy^+dCUOJO%?E_nvgeydiBQ1t}C zJ_7U{UaB`i>f%MMBi%0JDTMCQWm9Z`Kh`!XR@|em?i$G8`t%d)P&H>6P?d=N%OIm) zX0~1fgO#O9EyQ7Y0rHn#=L4lvp3~kb$G)z7 zmd4j5lzy%lCvcLtyu8rEHRjE&SrBU2+V5oQg^h&*`53*?f6rO_`DA5+**ank+*r3* zZk{-$!h#H1JLgntI5L$MC{S(YKfq0s<%JDwq?$(d`LN`W5`B0HS`i>=v<|XR#e2gu zPN3XiWeKLkbh0;$-@l3Gj!U248^+gX(9%$EDbyRr*T2&`05sv=FuqKE09rw{$(&f zZ^bQ=2&c?UfT?Hy);kkB>k*K_MF;9enogWec?ua>ss5Z_(#C6%GlFwuAZW@eo|A!x z6??>&zrGKG#=h4kaj+0!gJ2I1C``LSy1NZ;TB5odVSy0YGqMS!yXoClyayj)f)FYW zjRx&|oP~t@=`SnCO|8$&cVcXx<9V}#5XTE78RLCUIS zzholTB9el283;PEvl7lh7JwHaIF0)t^zSP-`v4o=OnHxq{hZwp6n7h?c%xXmIq{tOb{py_+)~14YRGt&I&N>KK|DY}+`u=W)yd~&5Jf%?*$0U47o>T34L$Lm09W*I- zo=)Inlxo3)nTIb>bhrIw5+cAZbv-YE{uk79%V*rO6~Z*tmggP-?kwPq)r2}cbrUP! z7n+oYX>-VMfPsF=+$D>mTPId8xwo!R1bw3!o<20FAlH)? z6CzdL<-b2%-9Dk2z5_(N_8(`iC7+4P{-Z{;dZ&L#1j2u;(0_b?FCFtl?Ob6*K|~>#~8#< z)Sz!c*{ko;MMSDmQEjXg`U!7@eaZKxlGcA%RNEZrLo?m0iuV_g%k(|dypKb>5|$k= zKhWndGd8O>>d}-yt=FvBe^(IYS(-a|cRYdjx`bR$!EPoiYaRD6jGdI9aVQ})2Gi>H zTf8rnTC+*`uLVi(0`r;lM$z@Zv8fxr5Pm{p-FLN%dv*1Mr@0;Auy(|3J3K0`jWw+C z{g7G#(yHn3GlB^-C+NvjC3Zx?yz!Do{!9QQX!J(U*E`~YHsO(zaukl~*@h@5(D5U? zeU89){)z*I7~g`4lW5>uX=dILoNux>T&V|DPtfwJ3D2%N3!%Ar=z9X`s_`FD`q)5E zx8ut%K_48QH))4QyxOKFkE^6!V7=j*18{6jUllr{MM6|3-5#7m^KSE^Quu4|NBdEP zLG#x7nhvw9`Y}fVe-VcKA8aqbA-q z#Hh}Kqjl7PIq!D61(m*3K||gLGUe{CwZ3L-#81QrlnqyabYSlDe;#O)-%+lTc+aea z?rL7yyDI!8!4%2G4(GOjnUs1_y0AzFO4*JJoWbiRK_JFVC>)58wd;EY&!*Uz37ZGi zlkV3>!CWaeW`ejlK*uJf7aOc2)ra1{-sKwX-coW{7_~1d-17^;56Cf>3ad8)P1v{~ zCVSheA6QAt_y4=qDsNK~n?@dNAQ;9220owrw|4?~S9}HKuo8dU=-Jvwlo2@F@Wzb2 zZTPK6Pz5FTL#N*iywY#l41uUDL19lET?!O`QRnjC0y)DVr(sqw>KZs`4MEV7=ZsJu zHx%Rh_%kLHjtMY0Z|YJ43I}@sTI>tAAj(>8EFg9E#!@akl7hh)!YIw;XMzXGh2p8G zuD%1qe3#F!T!GXCTG|4{#Sr>khBKxJ7-1TlA%*lkP-N_VcTi}SiAwv%NcEWt+o!U^ zC!#IFdFUa>Zd-K-YufN3+0BaerIfqq+mRSypKv09{YaLIgCRC2%-46#wLmz#X`eYQ zP&k3%?S>ow4c`Wj8&JXsgs%>!p?=o?7=`m*?2=4$mw_7Rj@Quz#g&J4`TYAICTg@@bH#H zsNo5XpRkc+u$yE{b4=^e>32e8?V$DD4X^N?6gvG*+&T%Mn{;sXW&E~?jffIPIP|rs z{+7$g-WHvhKw(JC0q8hiWk~2at3=SrJ?M|o8=GqRJu;~Ol&JYK{Mle3J$AF>g+iYV zpA8mLG??eiddHs)<|`VUy?}1mu%4U^7GN67M&44jsm}9-#0%y&5BQ&VO!1mTyb%7- z&!>QSQ?{F*A*&4H2F1rA-1mo^<{pT%RNIT}ba00T;!URd6;}kGh6m zT}VJ^lM-$F3&jO1Gzh(K0+nj&g2`bNU;ZcxOYX2&SQ_ zd7I2UgzI;%4prS|G1TM|?yE_mVp2(6#~oTpZ|pF;Yb+!TDot8!o;+Kn-wM(;!L^Ke zU{b1or819h5)w6}55)7ws)a77d*(~zH2M7Th9UfB#5oIaVb32(9Sxd>+(XPOVlVfAQWPH$76PVU#c~|xQSbp_!UF&d90vW`RG##p8b`1O z`2PiF)S`6bl>k_j>~%o)y3M9G3tcAss~gtpAmz?|D`_7X+lAX`uK@E`CK|>Q=TXpK z6Hpw&(^dl5ngwiiKIZO#xyRA$#i;ltR2pXxD8R20Xx1`2yy?;`U@xtC`DQj$w}dpk}u{AFJ038WrKH1mN__!5qAzLd}5lO{Bn- zjqHM3cfDUF)aZk^+bVhjRLoc2=Liozp(DfTt^kdzca5+Cz{qgrNIa#s;Gq(qM~o5? zPAbh?e6)sq1jn^e2Nb<@xmz5cK=cpf43Kdq@8awYyoW-ghNB6hlLkb@L+=PCwjsEU`fUcGsFO2Cwsy81mz1O z1pgTlzZZ;J2b{AOkwW(idcpX*u|0xzRU)7sBYMHax(!lCX9)L#iFNcxixYam#5&BW zOzZ^{>+4x#i$sVyVLsmwq7m*#io@CvLF~q@0smQ(d49yi8BgM!&Owa66H`P!{{9JxvLj~I2FsKWFa5I*kg%9)t6Yykgcq?`C)lhuSl z=4Ob?ElDvQTcs`eKaBw~{0Bb!zZhc6hA`|s%@Q9p26B+O z0Mp!KThYnbW;si8K!c?OFkRho8*A|hMpI%h08H=mAs9MZxXNEeUS=1HK9IcR&e&cX$YLIKjK*r0sC{fdo_5`AcgfUA#6MX#{J8I)9TfnV>s zzxjGTC%4Q>aqXa#^~v~El}W>PYm54v#kG6?b;)X*@PDirfvy-@@o!gB%^K&E^ELY_ zhD_ZU`zb0lHvWybc0b;>T0&XZH}JYviof5VdB)3Sie;%ZI)lkV*cAA%e41roTUFBE z&0V>rH(jQ+S^6Jn&#jq1$G31>N|mf@R!?%$`-zf8NiIvJuG{gXgueM#u6*AKuiT5P zt9SgW(X_C6zVJy(Z{&baydI7IR@~PJTOQqqyMopd|NP(7zs=6MQPys+v_IN=*d3Tr zwh*>o?|_Q|^NQzl2D%zgS-Yldf86!Hec1b8+p+lw8(~P0!p@Rj7^vj?K*mDiux#zq z)V=Y}5vU4jOSnF`T-=+q6ji&7pNWXi^8j0ER7FmqsN;2X7UPH&Z>&A`%a5|P=)agv zm)UlrsB|r~36tus7;9-~4ED4y$*$=Lkvu)qE$!&>`s2|fbNvU4b93WUs%58){)xyv zn7#IJPG^*TRmt({c>%iJ>md5z;7nKfz3C&pS~)rARcHCxuKo6J z%ctB13mci5p4XwLoMmn0lB@i`d~eOl3LGd{krOziFx~Fy7uVg5w%(F&T8i^^Ck6ct z>*)2#NMGA^Qd;h0wRi1`D*vuL2fNwweeSuFSD%c?@^5q>7F7!I^XZ8B(HGcbmpEC~ z|GzC0?e|?%&hjiT%Xw_yRk5qk6W1N|bXY@e2Sm8c>HX4m;lGMh6J`#jHAimPTXbGY z(sqA%QjVCUm`~MHjVBszcD_w|3R4FM8jDr^A4%Mgxz*d1H1O-@sl#I(`AIFx_A-TQ zTK?=()g2q|%2gQckNKNXppw2e>d5D!oNAw1+pODd^@UpPizoD&S=ee@%t-rDyD*TR=J@N=P_NFZ%$`#B4@E)hqa9a^f`ZxTp{$Kwmv;v?C__Wb|wwPfNE< zuiU;M|E-osS}!m0`sG%%Xp2r)O18LC^s!^*jwgC@jYBk-*?7MRZy2f_dc8gKaH3?_ zuXv_T&p>W&Kwq^*R&7x(kLueJze>T{=lrKtqDB6Lrf==!j7N*67*B2w?8@5RvUIh0 z`_Y!H-9s^>&Yis%?8RlHY-R`LSJuwBX6^dw@4#@4(x>3Swy=%_pUh1EfZlJ};##fG z{4^R$qJzbcjfK~#`?X5zcoZuY>>XJpaw-r6yq`yRLKfZl-IlLb1xohNc; zC)Q{!vGMiLXpB0XyTv~Fuv>I?L}Qd^^TGOEMS-sU&1G3qql0B#IV$N{aS|yFuRSF5 z<^62>OH;C~vkn)w7fqftYxsA^!`0bKhwFlM#T5GM405_|kJ;a0WW8Z~SG$BJjTuNv zl-Z>(1RFfv9Z_v3(`K3RGsv*#(umFs@7f>g4PFZ0+SzKhbt@#?QO#-5e_fw-p5EOU zk)?L%O96L7Z$|&+g7uxwsjI6!xA?yOGOB$jqkeFASw!Z-s>4N@4aY{-e*E2dzq9d4 z2Y1q`7@Yyb25W2AEW_*B-_JF4J&=Up{vfG2?(tPs3wxKZY6Auj3npBdosijEQKSC& zw0fy;`ANl_hn{)#rv!~e{LTEds&PJ<%G@6Q86=)P(7LPPY2fU0 z#({3>t;tCaubEUj$C%fE3kN0yxUL7jIqpm1KobR{&MQjDdohpxZ&-srp7}@ zHM+{OMWYA0U*FLft#(t`KCvZw_-D+W{_3BJK|ieP->3#|*J!;eQos7Z=<+8T?^Bn2 zn1DrXB5O^ZYWZXLhM1ycrvAa>@OAK4J2k(CtBO1@@8#quu=-x%WbDCjBb^-luzG z*ro92>cOL#Kc0IpG}iicGWt|@l+U^W|Es~_$HqkJLhSbTfoWb8EYbCG)p*>usAG#= znrZoXs z)!m>Kk$v93=c`3<*Rkkc+5Gdy0nz<=N+)H^E${gL(|felu70Uopx%Iga`4MCtLJO? zkJRM%zPWPumw2K5-}j!Kq8?9cYlbqi+>(%<(D%Oea#+A8b;;rObLMtO8$2(@xMkZ8ym#;X-Ely- z>rql|pu*x>)e!r#p{r^B|M{hUKc~FD)6k{;x5=1}Z^NXBvexc%5f@wgJ}G9&dI!EK z$k*AP?H%>|?uPRpy0nEND8iECe9ylnsr~0n$K6IT)_YwF)P=Nv2NcqwzMgMl7S177W!eLXr`ZL<7pigHb;sg}OMt+(ZG z537bsrgZBhsOVg_bN`^)78K~%-@ysKIu>0wVallgu6-V(TkVU=>wnij9UH!$G)7fu zKUEcd`nx2O*}2Va@*9N*75f`+eb|zi*4&)*X_fV<*63v0)bAf2=lqjB=rs_SEvfY< zDZsL1D0P@UL08I1_lL#q?9ka7-oGE-be)=9-78h!FD-l0;Lvj~$s-RsUQ4#hozwL< zi`sdz^@_31{NYx&#$a*PjD>%mHrDKpxn;jgenzwNkX^A#;FEzo5v5c4+PzPA|EGRF z$FF9HvwWx9(>K2wLapVp-E4-{TiX5mf^rR&#ty{>TzmCyrm$z7(XVUzVLTk&J=IPmPN{>AnmJJfvIsyccS1LkMci4;k?`Tnrh>zu?58SdP^yGYwd(y#65Jjb?Y z1xEEBR|H9y*1A9ctE#8_`>gTx-Ea0wYL6Y&I{iIyt6WgStNvxp@5_P)O(&f?+V$&{ zfljl>?)=6q){|FnXWU`@db8Q>XxGf#FUMZ{1s~ASTHAB5h;cZ=UdR7$U8r2}=|L-> zTV6Rzl7p72dC~u@s@!w4qavWzWa5y4j%VfHP_|6As?D%l)VZFw;+AO`&9wU*U>eB}w0)g?4iGZzet2;3aAA)B4>SP2f4{ zwP|kU1N&7a-27V~=X~xvFS)m`A|NJds8Cf@YczjK!>bXUkH7o!ei!=v*A+eM+@}J2 zldRU>{YL41HGUCC-Qrf8+XwWx^F|e>h^wwu9sY4SJNUfnpmjfQsAh$CbC6D>ZqDy) zjrsD2yF+s?=?>dz3@53cmJS&@cr>Fwcjp_0*u{2#MnBjVv{+cXy!_r!ZqZp#65ZcV zt^a&pbzx|B=j24??Dh)r(l>^chceAH+O9{RToHKGslPLHbhUiv#oXKq=R`AkvB%w` z=W}-353KM1@#?@S5vAEPLk2q~KNuf8f8s~q=w~@yUGp!Gy=&ubvYQ@jB=&39+)a#e z=_~oZ-`7qxEV}3BiVwO^ygnb_n>$q7*Y>n_SzwOzY=yv)$M#ptqBH7J-QUGXPHBu9 zY5BWGl74!c`#=0d!YLHLAkP+mov-ujQoUlkpR;eZv$yh?e9wZJE==>Ru|6Axeo`+Z|VT65eT#)m7l3cWp^ z1xw}583&})I6dAS;XaE>3lP;f%QrB>2&dOQ2zwL#bhKTrZF)`5wSXKY-NCGmh9Y^( z(J^+!?7my*WGiOUd{R_ok;y@dibXeGdCZ+^B1Zhh;SrmXu`>tnf5M{KA$YIE@u1N< zG$f4C1_x@CD0=sLtQ}h*_VGqaj+k_9C*R>%0n}OOEFPV6w9A}v80`R4ArLFccN`bU z{DJ1A1ao{jTJ34dRo@D-4x1l+cOtj-yj-a6FHKTRnEzWWHj2VAr1?~N9PoYjLHU#> z^nM#HeSgbbnc`>2?+HPuX(AcfAG_f*;#D@Kp`GIPqGnBfhPdjk-X-mr;N-f< z8rovpjdh7Z+4BxPd!4rX)TE^fAF^p9#b)MHoV5?V>`2$WEtin-tHS-qwv>~94~(_n z+fQ-<_s>UP>3x$kz7Hqc@~NqlKFIs^RoB10>DIcxvL)wR=7sda$j7I?TLhioXEU+x z`+FzJfK9&LimN1jY6FZ@o&M{o&)K3P8KfC>M|I-=)#CHC!#--e*XI=Y-RMnQUOC#8 zY<<$q;^-!+qXmgiDK;6AT0X9pLDesFuHAHHCf6LgXUD3U+o{^4J18YFolg{y0#;3^ zel;n%#y>ZyVZqGqXRVRD3!_9Y`MeKB2wZlXz)pw$NFyWI|=_Q-7h5nUgvJdon zTqX7kJI!8r$*&JGJep#`(@8TS>rI|S0x z|CIv$snD8prqN3_@x^!WhUwml2jH75SL#Kkz}6 z0k*(*X%i`2Gc^!$E#;aiarUp%OYpNlQ5y8`@?1se&zeFtLy_k3z}CEdD&%fVM{C|F zY%zT!LYckslez$a3hAU3RGOX`gQu7C>Vg0O&MNvJLkC|F-dD>)Sby#=YWl@_EJ|oz zBjFK*u8x}>N&@J0+eK`R`P!o&3>ougv#+R`&l_hWeHM#ipmy@k7WX;h#=DmSF54RN z%IPI~Ld$U0(dl*TUPNtS&8CL)eF-{dF5tqt{za5|W*stFpw>h<8k1HZ7J;=ZWRkSV zEqEq?i^(As^nh`a>3_BmTTC|xT+9o-um!kBsak}_iVOx%vF;V&)Q&rNcGwJum4M4i zT?>qig0&;1lEl$1E-V3DwmOo#Q8;NLPXG+gVi11uwD@&=g}6FYWoeelB{s!I>i&NG zC}H1<)#F9dvG9udX47Y2HFX z$w43V*GD3xS;Z&W+5+(}sDS>ijv}yjiL!$ixdmr4=)ZaTQp{z&L@hCb558p*4*G}R z_rexHdT8eJaLpD^W3rX=UQEN4G&iO+Zm!oR$2PU^o?(Ln~?BGv|>Bt(@Q=j(q@ zEcG^M;RV8b#adnAE5z%dCCo#(aDY=6SQZF5HOjj%N|acXvIEZhNvYA@B^K2Ev4Rt6 zb#$qK`b5zm5i1F}O|eNy>Jg4e2uqCfZi4%?jpz6W5BILyu9ESfo4okzTA=0ccr_kh@YObVn}Ca2iy0?c=+vM3gAP8(qD3k&L;$SpWl zu&0&fQY<*@8ZelSn-GdCqhb|*I-Rj~ew{Y$ z6XcjryD9~B6i6v8lHs%yreCf6S7lMADHJQf{arvCmlv|Lck%{=*N!y>ZA{B5=!0_Z3;0KiN>dkS@YE+*-==T^ z=~04k#0>;f1n$*>wH^MY8t^?}2Bd(QyOTxH6}BqX1rWACOkr2k&%Ka%LA?So-(cJp zjwYZbv(g-wgy%~w!XbYS)1TLPlUgp3>cG;;MG)rVmC7)}khq!^OeVY1Bt?l78i^3; zHew@NV2Ldq$-uM|vx~P;ZKWNJVZ)-DLLt?UY(ui+!QtZnRz?XgTrK68Zc0sU6)nf} zKMCUuDMwAp>d*JK2^3UTz6F3(PuL| zgcHtbIA^C{yBM&MId$jxvLIccO4l!MIJYgdLDCJGjvHW+Q`HY);id$3A!z~^*wW>F zC4Pgjkb3~P0Cxk}YlFWves|z1+H?(D{)IA&lG5TvUNb1u2GRJ#DFr!74Y(B2dZV;8 zFpfxo91^A`e8vhXq#aX4SW~G~jmzs6o)8Fpo0c}08Oo-}7cJR|Cuux-xzYyDZbm2} zPV(n)PryMzbZAe#=2G%kN%fE*1G8YXpE1ltuGM{EE; zn=X^dxHe(u**fSrYYpI+c4;A5dWB`Nr@%P#9^m(5XNf+kV%Rfw1>|^$3n53;J_y2M z*h6-lXdW0cUu$N#P^t@yWFNZ+73sa%q2F=2h@pk39q9okgPI_KDH&~er=5PMK+5g9|6*=#Ww4?E7LMCDu+ zRISYC>{w+EwHY)i-vA4d1?apmKt$?eV9R%ExB=`sR+%qjMO zW%k|Hj4>0u~xWAr8-y>(DK+Z>|0!&l)?m$b^ z?=mJNiNKNpn8FPoVU@$4X(rP6{ID>9sW|B>mQv~8rxL!rX$!#QY!^oa+dWbylhFC| zz`9DSmy3|6u|m#-3gbJ#x~5T)g!y2gVp`H_D(x&-_v{p-ZvvPqq>_|5M?mZ&2Vy)i zE8-YM$|l)=2C+Z?FvagYi3A=gy(vJ6s?j4FH$GwyPMyAt()Tj>ioo&EID@o6CA?74 zeJQRRzBXeX*j8ypT)&tZ(RbkEJHWQ4k=LyDPBp>mTyy~lcxNHxoSnS&75zKY1g*63 z9XQ<(0J{Hu2;D)2Y?3ZHj$8(zFYh%)D-68pz~-~e0PC;sAKgR)XazHg$YfzjfOSX5 zRU^#Skupg$v2`|C1J-_laiu+1#7HiH$O(~ClO)kO^B{&P>8_tl$VhLNOG0C|C&aMB z*YD2eqtHAp3A&~m5W{Xr>=0r-o28N#bNoRC|9>9|7s+w5Np|L-g87dU2}~9O_c-Zy zF7v4xDQBCBv`&maoHkvJV*Kj#YT*L`xOW5YEJaTh;WZfZz{i!e(te4jC<>4703SEK zeY@i3v?Mv9@w4FLXC+Mr_7dW-CIJ3foAC>vQuWs z0qzlo%~;}UW+oA3PZ+c$QU9sET#w-nO~(vuop<2lh0eFrh{P2)HE9Yuz7Kr-!0H{7 z$-ui&E{O)?p5Wt$qvD8!00SGPP(Ql?K7M10xwXK@PfNSYaQs1R{{xR#kp2VnC(5`7 zmV(%&KfcPN`;fLAlzTU_m8#Jv+A^+Urf=r#qPZUpnItq7z7v)Kz2O(eEV7WoQ91;s zJ+yIGfFjv#V5=iWu$|GDk}cu1QbBe>SStXf=NzYCM4e_X$lAckQKD+Mdg-%yv9tt! zQSuHdn?lbgk+1;XYG5ETelBKF8rSR!KvCkU(GrMtmVJhgJy7A#$LN%GO<>e2i9zYHVa91~42VVTExz z_z`|6+o8f~18=Xs@zO}hC9f~3^NNAlMi;H0^A~{+z6jU3h+dbl%_duTxG9!*pHj75 z#DxrNIC{O{)csO^_-Vz4K$CA^?{6XA9dB&}?Eq*J1)4;~JWg3hk0RS|RFhv|fL{|z zXLCmBQG&{b6$Azt`==$0!udv*=Of*85;&W)%bYL6HebXwaBqcD@Ei<>8@6D9`{C4% z*|_r*&w(OHFSm3t_Rs4J>twJGP1j&{{LvP?8f027uEThOBSr|Nt?HfnR@{0_1_zDX zX$x5tACKl^xRK!Di8ay({|g04TT|Uje&JheMh%dLij-1S{jEh%QN!FLRR=)|{!0}+ zO4v?qI+jRtFKefa2m{KUNn1y0d&hlgNXUTB<|K$8(W3YS3<|1X6t`e7-jvCHo{#Ou zt$=m_5f9_bI%&6s#*3GM40|V(sc`1gW(&OF2s8$5H6Oi5m9g!NzmBw23Is(^k!y;2ZxbBL zssU>XItH#%EJD>rO9_NQOG@Xf%krU)zK3-TPQ5~}vm!Rlt)6rn?M1o()y{>j{t1V)p9e4tRN<=UVo-cFFpgT#J} zQS?O=)=m)mTh3)sR6X#v@2FT4N$aaE0D5J+FYfK0(#2T5gKEkS$eYA^g0K$@WgB6- z^X36bGxbaaAsI)Wj^8vCfL#kB$tDzvLKo^+K+<6|Oy4Z)CMfGRnIY9^Bg>)~EBzpw zSyb@P(k9C||A629<1Q~0EZN9rn$xXa0QR^1?L?fy_1vWAP`X&8Zr9l;0(~N&YchV$ zf~*`S$jTVl&{L&OeXAk2eZ0xmLQAjfP`}HLM&==0PdW%r3znmMN)=<37qR#iaFX|P z;ZzVk1+n$kIiL^c`%)0_{t~V?DJSO3fw}}K7jQiCBB{G4MTyQtk1AWR3Yf0$< zbd(F`PyuvmQq(vP2QGN|b=dWK#B=hH;=)eha2^8-y5KMxzc8q9Sr>*`P>eiiPGl&< z9e*P%z47|ZZ+R+0bHTYXVd>0^iU&nwi8zU$mlfbeEB2(iG}0!TW|8$y&Y3yecke2pC-${fc6<6Ep$bugffXMyo8 zwuzNH|1TC8-(m$#v3>4178u)N(>hiwCF*$6jPW)SgYiY{4srG+ul}1#kEST<~-tTV`)4dWl<8zy&LU4=B>o$TUZC z!45~@KpxRkCe9(B3*HG)%_7H9=(#Dz1p|XkuZx=(uSWzw)D=)J*yIi{m2)0G5C#V2 zg5w|qJ??pd7pA1HI~7d^7Sr4t?#l|gRWuh(7x^s4TP7Aaj$x!m^Vws0@ zMzm<7b#!&^tgM%V}1d)wP1LM*3x49VayeyI-~LcW;FMnhk~kh`ZnHI*di8;mvHLqU4cTUWzg$uF9={>@2yBK9tG>Q zh|N0gMi73Z%@)4Yu(kt}+E@w^sjS7B&*@`M-DJ$|eNL~dIO`(N9<|~!M&2y;Ugi!y zS%yKp4aP`X`I@xOwn43W$H9Kz=O5yw` z@P~=Jj1XH1n+lPhXvLNT_}M zA_^C&oQJUM!~3m5o(`9?HFJu&P!X|`lM1uHX;NaQs`Izx>PZIq*Lr@t{q7hOAO?BD+gS zmRKm`60FMy>5PvmbrOPgCPPf0%&J5m6kuHku}AR*(B{H(TXY2nCu%!siy5%%%zMc= zu>fs{IuUyB!}R;fnfQjBN%XaNzcv{RJ^4f>|K5Vpk0uAsFTmv2r&f#+2eF&d*wXQb zI3yP^3Wh62n*g!&ZTx7Lrp!GI+yZbIm6uag`9N?~#F}m(=RxQ5{mDYPkZVm#bFlz= zxvaKLfEn6cAT0r6y!cRrDm)BVU`RSO_3RX(OApLvj={>3cjALug}NMoh`91Nc$aM< zyo@9GJ9g!9O|0KYC=z~wRj?}$7F}@J0?$a8Y-=P12(D_`Vr^0-L<=TswRxlEq=iT~ z*_1eLgQYLlyhXQz$s|AQ0@2H*xe_B@7)MBcn7bbiQUkRdy+DI6ko+(=0ES2Yi6tc? z_+jQLAUxkppT=+SaDMm<#GH`*Q=9qc0_TVIA$u9Dlz2dRGAa+s4}S;C{D=&8!aV?2 zChRb*x<8e;iugDSE*&)<9*o5g;?H?pIc%JH1MvHXTqPpH&pBLi zbo`7l;ODkrF~xPv7G2c5BVj)@y3;qH1Y!Qc*onv^33 zs*5pWtaFBh76*Db6tpQ?;`vx#S9tu)X3z$1J>DB2Nl9JqMALE-EKv3DxPxC&r$VU%A%a=^Mdxu$D`eD#x9`BE1UyLI3Z5xMZ#vrTkf zb|@ukn4yltMq)a`xFE|O`u18=*f7uwL+R#wa!#rccCg83xYzx1!|YIa+&GHY5NvCB zam&+AM(jyGrW8&I9FCF&5AC1|!n+V`PvkfVeO%8J_}5mka_lW2I?jUoIgL-R9--}~ zi)cA%%djVa^`E9`SSI)+UQXC-6ExRGM~|Ve_Fz7=Ah>PjsQ}hGNCQ!`ePWbjVdgX3 zrhJLMgWjiM^S#6^(W`-7;7+?PY?tP1-Xm%WSlfWuHVYm}3b6KKSYAOkg4i2#OUS2* z=)PaYESCZwqLFyC`852KzmA#czLXG3RP`oxyig_gH5HYRWye^(_T$gQKCq~OHG7U` zxbPbE&*0ZzZrOebuN+758iHRNh8lN%5-k@hXiT& z-6Lixz*-W74%KW%9Z~2NO4vof`qM&nj8^$7Zb@MM4*a_CVB|5Jtu+&~#IfE7etlq- zNh^WrSB52q^36-=d!3;7+w5K-2`|Y8qR(VJM-^1{O3p z9|5J0lb&ef9tKnaP7{oR*rO{-$@14>6*V8N`k>NHmEK#*e`Ut&riH*TT;-)IUn%83 zkf3lL(K8IVday|F>3FO!z>%Xb5cB=I6lPm@m5#dXI}6XLqOts;6C_ z&Q3qbbru`|kiUry9k=Vd+hoy;odF~ZcFTG`>&1#j;kJt93`n@skq(Uq$>bDS?xI5$M(iOWW;K%-P$)NH|+aJ0$54`lH_pvj7RrP$+vCCYWP z2oMQc81ML@$AH2ZMC8-L_?MIPdDu17|3eGoxY^1U18puu3!~rwGj58M(S>PYLN0ac zi1#>J7)Qv5zNYq(FfEKlEGWd7$NB1E?t!j;ORnh%rER#IO85`<2g0P?~cT%304792U+LIIpwh)2@jgu|>xC`&C0plCJ4v3(wtb zskcZIu7Qr&$Gdw51Y<-_qFK^(RMHF2*)IR8}9yY(E< zt1r7;+`2fFjGv0!D~3RD%wvuN2w_d)?Du1`Bh)*wJ3T(8`xX{IqD0jXzZf6Q0|26c z_50l;WiiW<{)S&}wD0Ibf8I+BqEB}4%MBkrgyf-7KcG{~w*hLsv>E*3ie&<6>C|yF zB>q%}9~TqgbA})Y49)S!?!e?lx=C4lA)*EHa`1WlM$1iFcd!#+q;GMdGn&x-f<5rs=+9HU?26X>kh>2P?=}Rx>6EDZXhN zl1cv;YQF=YJ%k=J!IODL>=9X*F3SoQc1MII!ujSrjeTIX=S2KO5NPdVg?Uj59dxXS zXhdjm4zlt&mZHr@L%xjY2Q?!wdvN_hBN~yP@W1lVcbRvCE$DxlaIHdO2ye~++k!CP z6HuIplo<2PCV-9+!dysy zscwsvgd!wH2una6E_t_s|4U<3-8{_@vA-0`6btnKFF=udnF<0^Uq@kQQLr6D!tMlR zZR!nWAv*#B>o`xKLL1#oItg|VIHy60)7+WmZ)N!lpdZvuzyX^OqPIvic3l0k0z7BM zkj7@Hq0NLOR(lN7l`ly{Q-C)Ygp~)OvK-p(i5@(m_a|&58qQ6$i4o@Y(?v>1uWzyk z=xRUQz(irGP`?s~bpk*)!9()~e(s?Ao`ubDfEOpeCd>Fqhj@a*keCC|aem?4IrtxE zl?eKDk5do2)>qkV;5!I+7Bzh;OYH>+zw(y2kRLl*@dDviAKpg&cX(W~jFe9Lat6-e z8MX>uq!OsX!_bYjdX(AK#bU$=?w(<631a}_~8isz@xy@ z6icIvhR9OkWu~K1@MFQZ@efg`vYhF9B7H zq-f)E)R7$pR2ruq+^D|Q2B#eOZ&6rkmjRcl(dThofZY3|hatBSsvHBEBP1;YuSL<9 zqHIJ2loB~}jeo#nO?eftQ|v~d*WUiOSfCL41cgcq2cw2>w<2H0p>~QBd1AnYd%D!k z+nj}x8N!8H&1?y<%MwnS_$eez7`vW3s7|kI-WET;Oq3FvC&O0kHXZlGoG}lMl+yB8 z=JCx!riMxly43^S4+G(Np>O3+z!%$sC7mgaRZnjB_B+a}bwCd}0{e4KbsY5*0ew8Y6~r z$5KmU%b+uah+!O)3v=tNU<+Yl7`I5SXzDr2cw!jag2$y5Dvc+G@hyt8*(;pK6T|ox z-HIk-n&XLKbPEoHes>B_s(+#2H#z8mT@J_S$E^Dwu+8|Hb3Isj{njmJiyY9KO4NU_ zKkbB~!=mM&I*n{R@IP@r0OlVImu?#WAO+|$z&tok9l%!0U@P-6cLL0vkH1`kDk7m+ zN8T|Z0pOwm$>w+ngx&)u2brt`KL^!cDckz)*v^*BTxCR_Oe}!W>UqJK&auLM1 zn0jrtKJS%aDx6Q?f)mQhn(2em?!qq8yom!#PW{BhRrg$}#hQAc96m&D_>y)kJOJROAgd%x9H8UB) z3ieW%^g!4To~N|>EFxYC6OM_AF@Y98v2NnvbK%+pHeU$NdHGKGq?_Y|{0R{HM0xTI z)jHwd8qy;neBSIyo;m)B3eyo@Rk%h~o#rcpekeW-V4qIY9{)y#ZUydbeLMxtOlgbw z9U4Ifd!ybhc%;H4$zW_@;CI*H1uUNoM*RqVXw{8{Pyrc?4pTT8B1a71KSE?MK5iq@ zy@5TB493TY=|}X(lfn2nyi=Jvo(#sv*V4bYtRF`PFvaemar3S>`4de`PVKuDmgId(58CRG=1_%yLhMqR+$pwvDj%Y!rD)L$v>6)i{TDn&Gh}C4RD8MAC_!Lfe+;}<|8+TxEHc#ka4yBKGVeD4bBLC3*aUOrh5@7PxI2isA z&FXwu^Ol0qwH3ZTn9DU18ovuhzo&4CCQ3FV=ozL0E6(68+G=F+Y=03QhWc*{G?m22ZC~bQKV))2mA2{C*1kUa~3so*nFun*9 z+ajZF&{V!yIDpIK%I(iJvC^gf6IYnSm`|^OE@vwlw-PIMdJn zd9YF7OFLB^HqbOhhl3~-%Gg*(WcCdBFcEDrCs5Qs-(|SCmkh!P#c+d>e!_Z(biITL~qf*u=EeI{D8B07K%35ff$MT4@@I+}H zg{&2=+OrjDqka9Id!4)Q@B8}x^ZAUcYp!$7`z+Tv=Q{KJWn*PFMrxuIi^UpazG}rf z7Hfov#X<_WBVony=!7H|OO|E6V%Y|7_OGg=>AQFP%xevspk<QQ@(ai4R`-zrP|9o9JVq<7V>*t4S{JtH2+nny#cJg`J{!hnSUj+_& zebKDz4R@Cesqh?VeeUo?#=t#oWs7silA7F3-^t;Rds1cozw?>}_RWIXZ;iIsH)a1j zDPdY@eWl$r^Ni{3h-XLL2#e5@Q<6W;c#u&taeG~Mb?z56pNseSPq?x?l+R)#9QbhI zAJKhj<)Fu<_A0-UnnLRaM}?mA|CDCPnU~_)mQmO2*F46~V=!fOMTxxNlf>ld^cPWH zpde1SW@e>N>E~_D4xR(=lTTXemh*<<53k~jRYlOYJ&s^g( zeQjGs12T#wsYfs(!d>hP1wx|TQk7kz5pRd2yskGj-oQmvR16Kro{9hjZkl!REM@rlr-LQ8GaWEvadTa*X@yLh1(lT3XV_N>IYwRI(Y5 zAvbz(PC;^wPrY7+e^=GC_@|v+Us_K4w?%ag?(}|ZHxy9*ExNaTZJls)`s~U>`AZ9f z_F@3>}R90cKrOOq{cCz=UZK=^3cD@Eze6cWDMnK6KF6M#dB`Tr8IRK zWVh8AYtHp)eYVXqEA8`r&o?r8qqBx`qJ3NL8aeoMJgzI67O51U`aQMHL}qEfr`}Mu zT~U$^KsPV*6ivVHA921Gop(N^^Ns)D}Cx6 z>LmJFHfM|}bqw^^Yp%#Wo$o)`U=x|_-S)YDLF{3hCL= z{q*sQ*)ZyEWU3^(Qu4m8Yb4|Zs8{Co2;!=`$VKtJ>D-oSucN2@0|N9p|Nepq7| z-_>(5x_6CUi*vp8lJ8>(Q^(C{zGRH*I6=6_Q_W)oWnXgU&Fi(a?XCUT+E`;RpLz7n zkL`t)x{@_Z>TY|!jeEPW%162X(dOUqzcV%ragM%yuPa@%^v9^WkkXohzW%Z=R+A07 zIurMPaH%_!AMmj2&b}6On)QfLwQ7a|^=-S8t9;+KMmQTE>K{m)_oV#b+tw?04fP{h zs}yp>^uApw%)TERKe4l_>uFukB#+VgRb8j*PE1>}$o{~Kt96_hWNLuZOQ7dC48Al9pqoe%UQr zSu-MhN|cOHrl$r*YVpJ_vp>+I-P|6x2-1~ zj!LC9r<$iD{yu@$G+TN}+kHh3snvc<2(_}s1LKM@%@ zrCFWR>SFRIPslv{E3k8UZ+>2u)34b>s#M6ryiD+kQxf=V=gZ%P*=;#Phvs%0egDvS zDowdYL2F{);*{P;ho2pnsOw1ZUum1-w5)9JiH@9%t}11tBhTxXE1iw*f9{ZDnOr&X zzT>UIcOM+b<_5MDwKgeOUr+kp{W&E4TJO#nR(g$*UuTK_kEDg!s$mWv{FeSK9PC?~ zmHd2ybHoI#{ulF1I_A9ZYwAj`b`En4*j;v{!Y#YR&aK!lE4MknVIaNz(OX~R&4v#C z?{(?~qe4$Q8|_T4HY?uzdD_6Mf9hV$^LX#*FwUECR1oPcIE@WXooT#GC@+J#<*m6?@tz;Epa~YHfPEO4COZZCB)uMYu+|_ zu=VcMme~AWpZ(gQ&C!o@o9oj5e}uh58idYHr0uMuPv-8q9rK2c z#r@3f-q~a}Xj>8&(%-WX5>^0Nto6}BJ4gT7raat+9@~<1?$`0#^EdPKCIX)|_h5{Zcnmf79E~HUkwk%IOWFR*%zD z1^1Em#=*`Dt#3{^ zDumAU(XL!D?%dIeru>|to|#pV;QisX}?oXgbhix2TeM8E4as{yIeO@!OCFZS7O(HQ6Kt3yUnf3bdC*L zILbKomOtE{+mtLBvh`?WroqG|tjz}Ly$NGS=YRThedqQ+QLS-btfhv$8n)Mcw{wpj z+cCA+ct`xy3|)W2rvLJ*w_k-&xRF~ubkXszcrCxd%=|GPhF?4C9F4l`5_>``PF=Rv z*E#k}WoX|1hcCVt*O`Y{Pd#93oANU|u~5tU*Qt`F(HUmmeHGOo4el;^viHNy)^0UJ zonOgAf9H&BOqkYL{^wK1PKD^|p5WxuOFPS!{(9Q=CwpO6nd|z8j6*e8)=0Bk?s5EmydS`9ese!08 z=a$NV=yC0SpZC{K(d#^X__0sRH1!(4nxw+10o`@`qThEuThjPIAwKi>$JW!0@uU5k zdmfnI%^31;8LK?-^LX{Ne^XnJ4@r%h>MiPS`+HumPj|s6;{v~|KUM}og;qV=^y+i( zo^~Ag-0%5SO-82C==YFZOmO7Ek4JN?0}pP}t23ziHSo`a^NY(9k5)au`?G)E3-dt8}3_`eDEicHgP4j6arj3PZgD&-S}U z<$cksw;rgp#*)+qR1`{cx>T@rgr~gMEjRU=x=snlrP1CN58pWWyPP&NUv7 zWi4vGMEvWOIXVyjrqd(QaV*64D74TRd{i!AV@9(^9=aGi&?fp@%LF14<2MacM`&S|5gt%}VKh99)wS#EsFLM!X#2?3*;qYw0ynR!TN!5ZM+GY*&Do8i$ie=0xr zsI;=y=y136Wn~A#HM6ZM-1NttNw)6)XHcyGiy;xPOq{ozc2aVEbPel zJxA@SUH}EfXL+0VC~$z9S~`lml@kC+2Ao&Kd>) zdK5V_3w2rrdS9g%#sHw;6o0AYXkcE(qkc8THAX#Yj#KhQVE$saJ!u^zkZzLaQbSmV z_l1pO>ETa2Nx}0Gp7Jlx62Xk*NWg_7xIx-pl3K&pGbI3*dlBQq`MwN$;Ax)$Lp~FF zNb1Ds?j}`61pITec&w1`^)4hMr~z^W>!JuQ0`nIo zH7RPmf+T(ikgz$;XW5^=sUsF>k($$PgySMF%XdAVG@4K<{w+(c?Pb&-K|K9KH<7Bx zzlCNXn_@SjtoW;iJ7}e1A8f+Vsz$Ep@ZVcQXz8&JHx*aSWtr`ZQD=Y!K>$TrR!*zF zsQNAwn=WiOk>-j_3ZEvrvHKV{fI2CH{EACU<@Z{PtQcg^se}C72DlQ+WfR3!rQid| z|6xoV2E`tU2UZjbo4-MR>02u?NrW2gMk-$X1o;~;C5^@9k8u>8B}ky>LH_gCLP`05 zDkhF2c5DXuOAB2{Mg+c`2g@-MkAeBem$%}<3?t#RfnADqS|r)*6v>UQ6gBXQZKA6j z?xLAImM+J23j>%SInObI?_iPN_s21fTJVe$Q56Fosh;qHG8LS<&{6Pjz5+jd+!G^) z@;KZT(`9{F!P%?i7+^u*5%5`)|Hu}bQh?y9ek=)WuiYBs&TeF4F0=x+tt?&TVys20 z8OIdO<*`afyXYgFpR$P~X{v%=z`WNoZWUnufn#q;kthI%spQ74#MpMSWtUPUZUE-t zmmX{32aLBDDG?;l6M*@Nlu$B|jFj^vcI@4RvfN8bf0B#{200NcF%sti^YaQ76gAYz zh@A_h3W9)Y(4(ce&0=QAeWz8+Wh0s(tLCx_aok}Eu5*r=3YUVcOI-~p=5Xyj;vbCz zcZ@q&aSlHL1i;B`;wBBOXSv%|1~5!2|qE3=3kCm+IHVrp8Z3hu{8)Gc~4J`g$_JlO^SyJAF^2(KD z`4t^cCXt*wJ>@%N-`wi}nux3n60-rPK$K=xo=ROx8|UhA1(4BA0l23;s|ckys57+RoTJ$#l(q?#BseQ^X-0om^F+G zl*bi0RC7A1TL{;fpalG>B*tygMv)&bIiW>vk_Mo0&utzuM>?86!R9;=0_KFesh^HC$@;o%vq z+{JPoVxckPP(d_D)tdSys#6pR64xLGMuo+^RG5pqA#phTDH1du`5`R%VK76xyn;KR z@jICr7V-sH+a2c|HctWPogxDj(;L|WJYgdg)(oOII|~tnb5OZp8nqu)1kn|D+Hhdu zw^G3ba-BC0L=QEO!9_o)SfD_x%U%T0KWJYeME@;cKs0L4Sb*rRQ}2_aACxP=Z;cgd zJeHZRyaeU{WU{*hF7=%eXKzsal6A^OFw~1v(nW5s9;F>IU6->{|d`fHcOIqQybHV}ONf>iOZ(W|eE(f+Jx zqXbzmr`BuFoplVfcPQ9cuLHK%eOWh`Av)rmUdA8o;zwU(*#tU|heF&0|(PznQ zJn=WJU&5unz!{OxOBg``{BbX6cdyyyZQExvqYL^D_P#4zYquJ4VKioW2LYzvY>g0f zB644xSITAqOhe~3tm31;ke?(fkPIz{WN614EHOpXk=fMxZ78MgF3>oP!GxYeTu6T8 zLAweQL)YQ{h1w&eE$;*E?t5?Xn1BhLi~Pi-6nq7kzMB5)M8br2A+xdL&H~$K*RLnl z2Mb{cL`~jWVEe-}jc^(!R2Mm-dLf?AifI0|feLTf0ToE6#a3Y3_t;tLdcm9*^+WEp z%w*j)TGl~6o00rDA}S+mGdn%ynTmlfggxZJyE*X;?11TA!1OLtCC7heGj)Kj2BudR zu5(?3xG+K&Z$2>nP@oZpPDbuyG7}UoL;=&)@1Sx-OOZ~R$5rcq>4W>vf)a_6gV=w2 zHekI(|1ichs*H4!I+GsKWaxl*0GMuL&yJ=l4HD~2V0v)$VfbDlQbJ?>3hX*>$GICA2#1hOl;3;> zyRKhg?vLAx0#ZWKT>y5yaN@t42p@zpgTUGc?Aqu3da_xBIv^!D*1y0+ewp5%PD&_h zKsI4yf`RSe^~K~R0O^l90=C6l4{R4ca}jsRM4m|ej0*|CcFX?5MAX9RiiAjBKG=1h zZ~6_&4{<(+kf+fata_vE1JoVCm6ce~6+`s`FyhuuQLIXXT$(sxiK_tiDA$w0;_qR5 z7Xzb%izI^s$L>DmzxJ>sQvmsK>ucW>A#| zVavNTcr0iAO_p$glQ(-ab^bv}=MF_a$i(P4jc1pV=S%=wo*=W?6}J>8ZMHMfb4drY zNUx7IAn+ABvgBDQT9#7)+ZoOgLV22UQls%A6*ru;*tw9@tw32?y9&z1 zhNb-<-&*nt+*)A^T_Y*RfFbRTqQ0A;(VH*hnB@@nfuefTRhE7E^9~Ejud$%ET;g9& z?Q*3gy2!x2{u4-|VD?LAnAPu^17H}GKbv$&eC5H0gW%YQqT;LR`T~Rl=C8vM*JW(| zIK2v73sRq%?}~Ln|C83EJXU=rNWJ?bk;P%f1;M!@ zRC~&c_Q&B;3tl7DxPAqXK@K*V$k!F^U`XEcRz_PV``)|-53aXna_~@s^ zx5ygNZq0;v0p~c&{*~~tIdk!&#GA3AJJyav%&?-q3J%>{w%)EIic&xJ9aZpKRZF`B z1&MUZ@i9x$2EGynu3@5s?0oSlZxm$tZ^NGs%NcEM0|sBqbS(MkYs8mg`3eN;uq8hJ zSY5q_?Lb~K5}-E;8OKH(yBqufB3^$2WBv4}6guRvu5O0j#s8cR$M$QoNV(LPp&{6^ z>~YpFEy4)kpRXLyK={7~kYVXaqAQN?Kd4lo%tq#b&XnW>81{Q1njg$v1Nn=ZllL&h zA~@{}wt)Zts+%&*EWb|Ij+174Py9;;b4MCuo|)hg1Tcl7;W4CLmB;FOaV6J0m9ZCt z1@U}cI4|~S6@wL<6p*ibjBsEbr=7tHpY>}h#Fs$!6!G5ifO@WMKb92fOE;XSvD>H-pF~J(Lkkh&yUMfTY2zrl=j1 zEx<3pHBhqN4ezG=?>sklF(}c=6izW6H;vj3Nzq2M3aWM}l=EkOIYb#ZfcR0tX1+il zPS^LG%($BPkRG^1Lc$qUk-L_$9ZoWFs-7)T>+@HH7-$S}eeTyO{6p6+OdX~IA=DEo z<6i11uT>hRu?OIMo40yj4dc5r_iLL2#piWn1ooVEMk`CS0pz)Vri;V9Jx@rFA+eE# zkjyR=c4N;d8qzV5G~|0=`yS@#8+*Sah?QQ2Rl*J58L}q^JwFNy!XyU(KpSaDQ&k{~0 zBy*Al`DHchN%`BjF@zP5RtNdH-@Qorp+tAVkQO|H!2ImJJ#7^Qar`QfTKfw4kzzQb z=99JlXTfd5f^0TdTTM|Ms>b zT##nwWCOU^%&%AA6=d+GC=g+cZ93p0_>OhSy)>LWC=!A?@ZGvfd%SN@#Vxx^I)Qc) z;Ib%Enuy&{Uyyn-m6PS0eK0x24o z_foc)pFIZ8d#t^c4m^BxJyN2I3bnx9wagnCQP?JnuOwLnN-aIJPlMtbleI|0Db5#^ z>bo?Kkut*B9o(YKvn+dqdlJK}nrA9VLOjnMcVUJpmS85xKl5c$`YOf+2qJ02#blTs zIj2G?k!rc&x-*5m*zEJ6`GO~$UnXL;iefA~`fH;|bx(mLFBv_MXt z?9H-!ZJ^60Tl$ga8a|9)A$s~ABGUWbt#rJ^ztyX-w|_1><-m?fV(GE?IT|@Is&@Rz zBJtVS_AMa4T*%se%%gcW(ZF`}ovS~U5}A_?92f9K*KbMV1*x0|49w9gV7uyOi3;lE z#hxRkx)%kuS;dzyZdZ!P5*%p02b%9ww&E5Zq~J+iC_<=MQ|51#CNgbt4|ow^u6xgw z%;e}EupkI94-#lvlUPwb-~uq1%Jhd*XpbX%z;Qq|PP;;E=|m4$s0max_w|X{=HWfy zt#Gl~J%2(mhZBJwa8*2<9-mxApN@TSdWtsYBc6?47mIUxEYxXnK1+!lxMi0y>!QDL z77`+riT|ym7qAaPePBc1ZjQ{X+F>`wBDm^w-?$!t+eeRi^ZX0K|9dLV8oR~BHyE$r zIIxF2(u5%tlU@aG=6lAqYLNU0b%3gl3-PilxQA4eiK81BmYYijSs2=C z)Dkf4g`CZOLgf+iSix!$UZ$5r@=~FjtU?{?#U6ljgiy(+C>#;@{jbasLc)>?ew%hF zc^-|3KwhGKjnD)(n;f$v>0<TZ9nhZ@^yy&0+m;}O1I+_MIqHqHn%gJ$0mq1==a4UH}w(E+T za3>i)9c+S0S!*~IlEYZFK23gp8H@Bnvh;GYq$m=i7n}z38@0~iuI*{UVLZ7pE{tgnFBWTroEC4LKF=M$4SJHT#tMxIM0(8br) zg?kV=(4L%(88g`4Ruz_~fG?-i-=c>P@clDn{UZ_2c9nHJ?4NXWDwL)gy;z0(#E)6WsSZd&Y?QO#2voM9F4=* z>5eeL*D4eADz+}}2$TFep#Io#keQJkVRC&lx*IT`A?^s1>)3qCu#PafZh`6y?+BCY zD|t_s4C@FJ>*Gy@)hxp`67kFiBm7Ad>`!Ng-C1H6>EEA0>0cr(U9JxAr>_O2uMIIf zK$jx~Ol6?-GPT=Ahz2)?ZV>TdUIy_*OxDd{BL}2oh}_dS3q?)>C0jqg*%# z4X}4Hig?IqlZ+w9&;VVQ)xND{=N-oH2@{_Q+ErVu{f%_H1KgP782=x^9}B~;pQUmX zaumfJv}+!0`GHU$Y^;(jyUr490Jb-%-E|k+BzC`{*}!&o&U%>hp!YXPm1(*G+f6<9 zhIK&PBxh!Yup;`oI>R%O0q(hR{Ju}m7!SFa+4B%cqfbsxp`UT_@c0oDsKV{YZ0rY1!nT}St3YG-UeXq@wg%n&UlZE38}1J>`=b@1L{hqNt;H4Id;^7h^EC7kiFlr52;>;k)XUTo8Z>l&*% zY;mlAgI)g#zZXo&d`l_?v%@W5*IR-&uBRo>kxsb;SOeSkYO&Ov0UL9;DM9Ei}DQc(i=Md|H2!JEvZmcfu&M@3{2tNn? z4sd)QQ8JYfuOOQLAGRObXKcNp35`^1K|7lN1>{kOXsxy5-3>Y?zUCm3gLW;ruEq5v zBbqbryP35M5eaZzi7|Guv|eB~c3f-xTu2KZ_%w<~B>=rSoU?rzEM?t;W2n>$<3hMb z@S2^nW(3vzBo0Dh(4_U`bU#Ke2PgD^)IE7e3i5`}nLGfgALPb99h8V*>_?kH>Sl$K zX)qwk7>*P|-zSAX-Sr|%@Kj{Z`_wm^D0n{Edaws=KD=!!7g!GvqCRw(co z)($4Z%r~xL%{^v2m{?Zjo`hrPJ39!(Ey7a*BsU;a#p;&=gO#3~8Y+2(Ia#s*RJ5Qz-WAYLDxjX< zg|?uIvJb9UTVGYG0S6204??q+PcPmhhX(~OBLA0y5GRM(W|v6)%_P-1&~%tC*W}d-G-!+nbIt9=gWHOdR6=kelaJqpP9x#s8L2o;oJP+T9syzB&4noW>ocPw*e4ZpgC*DkGH%&7 znTfRyyF>n(1$3P)a_2K)x~(Go=mXa1!=EhH7$&+R=X=6hR#eTa31ZPfiVFg?gspd? zXRml#6|+%d7WACw1XY?x%!NhR1S%2~rZ3q*Bw3_iUj_zWPpy`FWr8X*j$Z?oe)nQG zeoYn;7Kj1o1f_`gETw2Tn&-g2N=LPKkl5xUU+_wC)mrpDc@q38m{a@7jr?WsKFJs| zI$i^Vh`OA+j1Zrv#KvbNSb`o9zvtv+swMb*o^Uy~r2!&U^N80PG=KA@W3bnb0Z`q5 zzP|WX7>z*g&w$^Ifn9jaR-@ek(sXPJcr-96bMu=$6ZGdQ!b@ymlKm_K&zHm`xTCk7 zU>T-dCodX676X8{Oz;45vBA~DRTK)0hYIb=UXG&=z&>b0m1#IC*hE7zW>}_j2r`mG zeR``QTi(dvQab^*&%3AqMI2E^kY>{h7g68ZgV=cMXC)hIaEgycL%5H&vBE50FkYgF z%ABb7FTt=DyO>lp)&9k-1W2qzr{Fup?O!+t{*Wi8#)NX+P?&ey>_Ai&hYjxL84qCvG9Mie+d$cIi@u*aL;W2Vk9o`(T{9BwxcQo zEb#i7Apgu0<8O`*BPGPy;fq+{=`35T^X8}~u|lvjehqY%-@X0B`7CQgyn+$dKqi!1C~0<0lS4+7KY010Ra7emY<27xilCL?={iEvPd8U)4- zh4_=4)J!G5O8ffZ^FK4erPLP0$R1zKyggATa@_rih7%)C<#6e7cdE=F2#d$vhmD^w z$K4Ae_*ZEX%yIWc)9KdE@NsvjG{_gx80eIV$K9z36gF}g^v)P}*G}atVf+Z8wn$-b zu%K=2+>F|-Ul(Q_sOYr@ddo|aP00Lat5Qe=ki9Y)J`N(fVm*V^UxD=HV7&Xa`bHP2Ix*+Dg8{CD4K=j z5%;qtU~VaGht-nUpR@rGj31!{FfXyoj<&;hsqA`yd;9a=P-!=o1G?htb4l+!Vci}X8 z%z-Ovd%ptzZ4!2%%{UxzIt|jC?%wT2O*RpH zdOcZQ!Kf7(U=R#6Tt zL~iU#b3%VCL6XD<%&hgmQuXR@(y!#u94vydq$FTF>DF5Ozu7{ZkNr}Sw+Gn%{sYf2 zsdKJyiY7vWFu8|+#f*{z<8u+`bHX}SaG>ez;o)K;XW|%GG3ApzA6i;=H!W?9XU= z2N_$aMzA~tE`{-zL#b^)l@J$_$J_ned=a|PX zDrN=-o;%QM?upT&Y7r8q41j6ijN&R@09#4Cf7LSRrEXvCG7|-3c}&+?L^h#Q7vGcY2H-!Rl)@67BI0slC6WSGg`p-y3mfD23aVx1x&2Z zVfV@NhP8l+b$_;j{O}eqv2MxsQw8lZTEN8m6hZq@xnV6}VqHdX5oU234Tcqw*zeUK z5jGx453Ay)jV=eQm*<>~-B3)*jGw`Shitt#pL>hPu@5uWFGN7|u=17S8lfLsNxTl_ zB+Kf6i_0ujXu&2PA2Hp`gdnW8L~l2MK-3?&rNK`fuoiIS8_Xny;vXSWEnq^1rEKDd zV&WDsu|9_FhtWmFEns4O3p*CWn$ZF#*708;UO3Na0Tb&1>^btU%xi~6uvkMwu~Lfv hvRJHbW* diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx/video-call-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx/video-call-auto.png deleted file mode 100644 index c1d96b394d958f72ebf6ab2a347ad7410d1d258c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19595 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 AZ2$lO diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx/voice-call-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx/voice-call-auto.png deleted file mode 100644 index 775a3b94cdbeb53da5c750b6a4663d96a886d7eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19647 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 rJ!rvTFouS7!#|vb4Z9D;6d$;2r#bmyc7@ diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/default-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/default-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..32dbc8d22b6e0837dcf811235bf7128e63592461 GIT binary patch literal 19630 zcmai6c|4Tu*Poe24Wf~?l%_?rSbAE>dOvO2NS2hWZA6wzC}F0Eo~O`WvP>&cD2Yg> zRC-!86)C$)M3%De@42^`+voFs-uIv1Z=TCFXZfCUo$H))o$0uxg_(@hWGNbrCbMSs z3M(3IjDSXC2w7uc#W`ToeHx8TTeISCn?U-ns(?p3cOKMfzc5LAxw0bj#`ye0&;9fN zQUYR}K8iFSBnOFsgAI>c|^-7ZD zUwY4Zq^HeTC1+gam{xiZH%MSytL8g__)p}o9>MbqCwG?DI6V6G_3oaaBFA;JXI1Zf ztrTW9+*YpYEn8L5n6Z7b@jja|aSKp5Kg4uMT2su0pPfzsCBm zW4W^m_Ef#jmrl$3`QvW-F};@so>M1sbTw-S5-R+0aJqRu&i>%@Jjyxdmy%r9v(-da6T5{uD4AcMasu#=iJm()}W;Buhc7wjjW!vv=_ZOzE`~ zh4awmv)a18G?T6qnT0j^Ey4Lk6*U7_e2d}(4tVz#nGVmX45$f?FS|k`v_bAOq-FwL z-jh&?{s)GwDsFi_)dNp$?M7S&hca}k2Ofux_X)13*^oE*F>&dPDebT9BJ$cE2bJGd zoMzN67~@*z)+RUnJ8^jDbF=s%qs}uC5j~H3#^euaJZ=rHJ&p+qX5lZStIEUwO;qVs ztzBHU`C6{`;NC)Wz32k9?&rr;y;Y)&TYG)qKfiE7=eKbAgz!+)Kgk(;zTC_BWbb)0 z)THaVN9r9V+2NNFg}iZ(_cdMlRO5W;=Z!i&<>3d}ZO_W`Cm6{Qwr8;$R|(RXSLJfL z9#jkBkowZP@6!_H(sG(&e=nb4Jm{<6 zGw2-gv3PJx&Ok!Y3)8lS=K^}*8I3)Qc2^B}^v?S*(9(0YI@YxJ$?^Qe(vMqAjSVaJ z7RA?v542k6%al0=IO_i}EIRfswC<&4eD;q2PFFXSe)P(&Qu5C4`qZ?uZSSWoZV@x1 z`>lFQ>JlXjMuu+WzuRPFTQofMQl~r0vHh~N-C?7ahPIG^jlC~ILox%ZcPAw-_}Tlu z#^7d8UtQwx9{q-f1`C59G8AWDAepSL#JlYMc=6$HjoS;;wR^ob_t$=Czg**_@Hq6t zE!S@+r%ihtTq#-iW9xah-2KG^w&~yDe|IJiOSXPB*ORO~YMNos zgADig9(5V-f^YTQ*xiOq+c0Kat%mX5h~GQ2%eUa&+*#p{BAybDj20Nj6XV9os^DdWUXY z2>At~{sA8l8-|=>=Bv5WAN}k~m-W2!a94VY?WQg2kGgF`Cnenf z*zKA$^?{6?(@;cv`{(RDWryB8%iz~}&wpGFALD%2`Lk=@ox&wsz2wp!|JZP)-z_H~ zDtJ#(rp9xjzuH4>}QGHEK@$sK?>ERVV1;&R*dfUR5Pv{Hm{pDt& zSZq3Sp{~SwL*o6G_<(A~6rTX+?t4RpWsm!Bw8w9clGT|O6kOqz9nrK|(W&OokE2h` zM!II!r8@U*`+T_Ld0pgPpR*cTe|6vN&n~L)&NJ8Vd-knR*<|EP`*6=tp?;IoyQ+nU zzcr7@MfLuwtE(^@anrdzGFaL1BJGbU5iRiJe9_!xsK{j3d{eC{rh}$MN7}Zl?o1t=!+1U-vB{*u>^a?;OK61@A|F=PidO zcezCmuGQ}z(1>W868ho#;v(hH@6Su7EtjYb?k>;IE|yG+Q_{};ey_TDV`6tzgG9c% zg<(sl@32m&Vv6(bYPZCO9+SMz53dV1ZS|V;0FY!j?Ld^cKciqoI3%2C11d4r!NH4+q@e%p=fR@18v+@7=JmuhwOfAR?_ zKEa8HUh0%56ROGP)iZhR?li7aExwAe5&Z zNG7XO%QE;{P_LY`l+G8o^bGf`(wmMwpNotP9<`iIm$|%Wu($n8W~iFdiD1t`;fIK) zhBbe(>$H4&o2%1JYxXsJeN4ODa`XzL{ZR8ARj1((!9kvCU8O$9Ob37FRyQ~OEY3S0 zX6lspC%9{iX|&9X4?~#&6^rBc7eB14+#kB2`|Y2md>?MAXPLd{TPKdw?|JX^qHhe> zC#KsDsf6AhdO7WNZvCm6sp+x~d!L`%?tG?3^^;Rj3ws&s-NEj(IxnB#{cXQ5ZJ4Gc zYtma-y8Db;>BH>meXo1nN()TW9`n+MIc38G)7aj*zi+lDga*3hG!}$T{j}95|98hD z>Jg*yhM6hO0VZGnb(Yo%eqWvMyf-Z^#blt?O!nuHlwVgwns>ps;*1xQQzP7rTK=o+ zSM`>P4yx>TeY?0U*`mc*EhO;EXFWk`w^L8YA{$zoQgv{d<5TU>?#_%IznYs0O?sZU zU;Fs3DSx=v)huje;BH~iNPKOyTK_|*Q>A@FMoyhigP*>8XRH&q_r)dGL}jDU+jr{= zR3Dc)y_2zR9O_q-m)39aE|tf9Z+%Xd-kW7J(%loTQ*Am} zF+Cz&E4y-rO_7C3y_sv#)CX;M9EUD{ZHjg@cer*azo(<8Y3R^_u5tHMXhZ!4#+r|s z1ZBs@sRim*8Y!I!_)`C_aHOxpRJx|Gb?+6a7p05W7%8m5ZfrbN;H_qc`2M*CA=qhJ zl<9A?eCPcp198q_O?LbVhlY5s;a=XW8a6Yk-@dnBuRzseY1f;KhRnn-1Lu4H+fY8| zaNX+~mh*7`d)GX#2jipd1L7YWPBx&~89w@v-aX-6)zFsht{tuIE!#J+M*P~R*WJAA zb4RvIt<-c|np(bIuu)4^S%T|1+f9Xq&d1ZVgPv5sllC!al&Nzz={%M3^Xr|$ z;~Mc(Oorc&C@-nl^RcP@dQpi+$wmq;RaPU}ZbVlIElZE4|htB)f(g(r=9{u!r`p>&mo$WQfxpv`YQ+xkp zyzB69i?3+=cqC*)T+5@OqQ_}zOWKCU)CaZ3`}%E&jmMa~GVa3C^KcdMtpmIduC#ST+~2o_MuQs&qA4LWqICTtq%+dZ z)R6Gp{sYao5`#8yk=u->86vx|mub-hC3bYV-FALZV^TNNc4&X^_ks}JDSbbqyN0dT z%!?YpTz)F+^J$SOH7q@8t#=yn9C5`gz5=0xK#EQe3=d1hQeciLeJYXK$upU?k}6IU z@hG!YvN0SZwO(m68e(UMew|82VWgj7fbQb0Vf?#kV4CZb;2u-9+F{?H*T+;cQhe_MwrnfxlmpeG0Xe zn)I`ZS;Lki#fE>mP)b6Q;@SNZ_7s%va;?zPleugZax}x`$@Q12vkOwKGR#aE2BRU_ z3ucdd`fnw(bGhie15(EsjP?~W>5|`P^5w-|&b-ND39OMv>Ii2X-B@gei`pF82EE^s zV89Pbmd2zV1t);YiTNh8Q0#3aO3Vok7tIk`g87RE+}DihicqAWf7%b!_t)yLz_(qW z#ovUn*3IV9jIyK2nvu7NX@mK7hZIZDF>xu6^lgqmy$igSKaEb$nWo+#7BA8c*$D~4 z91g8VvVIXooox!1^1NXQX6^8uxKX!54%22~40p|w#A{?PfM&$LaE9u52uF$ccQczi zPI12psW2wVtT{1TXcqg%{)1PJcuh&;DZxQfirHH6bQQ6Je@QnLl$&>Q%q_{}3#1|# z7LtI)PyJP#sq}Ni;X}Wt8x7kh#1t}F*E#%EVpTe%0SncoM}fp%>EtMq5?=?f(3!1) z9%gFr=$r>w%&RxT2(S~m{}8t#9fYK3#I40G@N5=e3AeyS;Ck^wCaM2kR`L;)#aJcK zfA)SlsXtQ2=+;2E0$s4Xu1A{K(}eNdcuBU36+%;+SPZrh*~V|W%LYav2wzz7P!yz4 z?k!TEy=H-L&N5LZyaWFhvXybIbtWx(ZsQ@b_VB0G%Q(Mjabb67kTPQ1ISe{o|H$<5 zjz^?Nt@C{V7oWKrFJ|-AsAR^^;Ls*qt#@GjW+jJ_AcFJK!AIy%;w-qxc!me=tSEim z9Ka>#(mePmyu+;$u{bu7&5hW$Uk=5^Pu<0tU?Io=Tr&2h;a6*m^ygDJ3zfeC7y7#! zgoc+H-FT3{20n1D?_n$orQ zG+rziHI}1AIp2sp?2gBkWG63vadRwAp^#fd18NF3=Gee>9Cx?6g+R~)_EeS zQH6BrZhCV$G`&}zd&R~Bf{k|kpB>EFo8foxZWC#$jjR=F+-tg4OhQInq8%I#t;lFa zmbfW{itPnrd!1EE*(x|B7LmnHwnk`a)*tPeP4XENDP$JISzLV7K8nUOVBQvE&JO{x zL#*dPC~{duw-ZUf2r$=s>ah_OTV<2r0KtNH6EMHIJB_A?q6m|Lxfl(TTgbL4YE3A3Qz#%AN^gurj6fmvNDG zuzj8IfjI6UF0<*0a_$?zMDNNisQO==U+b6(+fyr-jP__nhS!J!w?Zj<8U+pH8mRv4v%Ey?}WrR=Qf}RA^pL}m0Xi0An0fjp28o+Rkqo;hMv)~ei%%b^# z;rKlV8O(k;Us(}X-VX>mKTfuQzwsVQOo1jQ?n>@(TD-%*%tk5bUgo|dqmCDF^;%OA zf$dta+>YMHutj(kAfNHz4&mm<8BUl?Jb$3>pWm{Ipt@PR_7eI{du29vt48*8kr?O) zKfpWSiuVQ*Z{BH%PKbqOfS+0W1CeAL%bVOZNk0wP?B?S}ZUzEt<%K>;usLaP30x1N z6M-ycI0nq61sKx@s5o(vd5o#!YBwFaPpCkCg~jl_pvTK66~-XsF9uK-d#IW#wkL=P z!v`;j9bO(4{|eU9)5&84UvS?7;7zLZXR>Sr^YVrw1`O9JR^21wkbnh|!aL>*K&(7=0HpKC?{D*6T ziqD5TGp9pNlf)vXfGZ2@?4#gLg$gC4!km~)ZZ(S?xdNd@?O?wW9Rp5G5;u+YY$lxd zh0^EH=tPJdbD0}*6~wzXIbs_{YfelwvL~J;xNE+`SgbVa9FfRtdd?}e`NWM+lKKHs zH>julX096@Ox(bTZk_dBx3^QQ%kqQFD&Uq++i7Meg$_~#n~TO|81w#O`iZkEeh{cW zFew?lx>BOkjFg-m4yr#_QGk%cJ1pTxx@9Cdd(_T}O{j{zDH5G4@ck=hacE|X#^1o? zy+?A$*I5zP)WKvn^c8&R-y#F z`Z|bx{pdy|++yg)MG`jV94E*ms=p+kAe{r&OPD39Ss->-pn^ybbiW^STe=M`DtKAb z=+I)%oGdHID#33kvC(wzK^E~>-4tmu^ChhC9@63WCuS5Z^CPszwY>I`$2TwtwWIcg41Sm73DK{`*;N551;I91@vcGQ$(M<%}Hp~*t%J1O@c^|!+N21*; zVY3<~2VyJSye`UFc^4&0R&kLTAoh%-Rr2?IgshjYAHU_+Sqj>pnI&h=a%piT zISM#`f^Q(xDs=_T!fRWTI1r)oUtxO43YM4F&LHiJvk*eg=Adym3;#C3mSYe6%HLnN zyZ8?^y09|=rVhW7^QXD?l=Vmlfax&uYG%wa?p*QuGaWdOrZW{Ma@cv?ei8lCkPMws zIfEvq>~!uca{U%q_tyHg@hD8}Yus3Tofif$g&n(Lg9**Pz{PzTu?Lv!JFK*DdD;JR z4bc4@NG9|jo|=O{O~G-_=Ssmk)Wo#7uO+1UVEqOcqULHFgl6IA`$}Aw2v2eyC9gv* zkYs3hjtp-=K=^<=bQ-LCMlJEHSU*@#K$;9C1-CX>4vh{Y7X*>?oOI(js-uFa1`t-w zChaJSzo;#gx=%wN}V0Sohx3y4wp=l z-a@Dxg<0Go5&hE&AoP^WS78A!Iq*|<3oe6O78X^g(86%8F}|M{1_2-}BFPWKTA0SI z!ssLAfOUC?HBrV2&vS#(bGMn3V58_tlBH}$yQt;5+#&i_c zy4M6;dfdHfn7-+BptUF?@pF7Ax!#&J_w-@&gN47bKpZZO?sZbv5gb*5VS4~#!)vjU{m zO-k@^!{*RYSPSJZYS4O$e*?oB&KxHb*&LeN63Z5LvYBA6c>Rw&o7-{uRum-Gc%^~+(iZULEm5}Cuu;WH zaE{o|a{ym<&`8xm@l{zRSd6bDF96>cg{62gqq1J`1zYDp`K#a7*F^LQ8tnuJ(e;>o z5PK+cG3i+soduI%UGr~*rtSLbkf`#xxK6Nu!IY9?bEPNUUqTw5$$B%t)|ycd_OE|q zpM(p50lZ$Z{jnz8`pJ7eDdiBIF;8M`kUH(clD$Ke4hO=wF3v|e}VK9i1f&=eGFwwItzGVM z1F#SL`JnafgUy82o2S=mpiC7Ycq!}clOYvc=7Qc=6G7;SNoi!>jC^6_Y5*8OLHNY; zGAS+Jh8`@hX$P_ebQ_3-B-$CoASlXz#3}+$~7N9HLswjQ`teV*4|TFuAbo_ zSSX^x`vYhH&#tslIimvPjLJ*>&E+|k_qf$0jT>Ok8x~GAsMlE|Ww;L^Pk`Bz!ZNHn zJUg3@w^J-1z&+kQcmU67UdajPV9-LWQVx}-;Z|X;WeXvvXR^XLv^;6iiQlIzM2ova zKsNe`xZwb2sBQf( zlNV0F&8NE&TD8e_L~A}Knrnf{C{TbFj8r5k8E*=+6I10Q`0&r!;;#GZtq9s9xrkCZ z^_(J{m7=8{oskKeXa3h4M>;p0f=;H*dKX!sE;}WH3J0VI_6>k_L-$@vQV2qRU|-B$ zOAmCKp+O!|>}!ZDiF>1V~30y?TD~5;Yz+8l)GvUi~EF{L< zV9RbXR6>y=LnE(Pp&23{xV)8?GyqRv%;q zb6BZFJDK?7Rmjh-sTBII%puP>?r8mxu?%GI+vUJWp)|_40tB2Faj=+878iu6R3N)j zvw718T_7DkLu}XO;El`q5792Uqts`Sd${NWF8X?QSo=x7b6A>mo>0ZDf9Iymm@J{VA(xkLWjF)T<`k(x;3?snzrZ*Fs9RU3gc-a4oJ9Y8~!CHLBF3^9M$U*_YnlGLB~p6LLI7;hB_ziP7<$qi1$W_p<%2e7AAp1lqDi~Ll@L7>Q-4Aq(H zv#dp=)F}6{a=zY~AbjRy)Q-437%;=k$)@XQ-f^GDinRxT*+-E|y8hVdi^a5IJE8<6 zo^7`woAx-N5)BaBZTF2s61PWTZVzYCeyP?fzBav?LIx@^nnQMS7bMV*0x2=q$$+^k zk~IsYT_xvBl;FT~A@E$7wh8rcULDhcyinZNLyPgmr>7VJ7jX~R956R;vL{Z8s0Yk< z1ARc#* zG>G>`y;k%Tg&2bJhQ(Hv$7Z9KBzk1|6WcLZx&f;0w=HD#qv?o@z~39;UT6)g68HVW=(57%#=cz6QTgDOPIMb0xv&z z%Hsw~O&5y9=;?l4rUR6;51cRvR1Es$A3ML6R0ktw4-MR{^$#ZT6d56uFF@d>RX)gp z;LGBPUTtYSSx`n+=(UE67afE+jjKSJ7gcG%Uegvqb8-x(V%S{V=!K;r^^%Q5@2L^q zc3Z7#sED1S)hr% zEu-8x&U7f>;XNH7|lkwEnCml{HSL&Qqojj8o-dI;S$PFXElm%X@m(dFqd1xZFW$)QS@lff%I2D zYAN=_{!prs2+|z(Nr2(4rouARJbjXlL~{gkG+NZ|$sV|*q5+*1;4fxN*!2Vq2U(36 zs$U_m_;&fYsPlG9IvIWL*a*jSW7NuxB31DDo6R8hW{qpwxRp@8bEJ|lA1?HvP{Qb%b%bKCms}1(?YacZBiv zZOWEt;YsNTYA7M42UYZ)JVfcOc~cC zYD4@f54o7H!@yc98O{dOsCz0pJsG>8=lZS~D+kEjU2v4*Ek{jB4+ zE{q;RiQ$9LwZgOOxkxs{UnJvdc;L6#@0|kOe#DN^P4b-u7r%y~K{%RjU=;}NAy#lD zS|=owV;4W%o5Y=Y94fTq6D%S5N9Bd<7r%Nt!9_aVlF9A{@{#cg_+m+z()JS3R06V} zu?etN2C*-!X~Ob%oDMpE5_1Z~ey^K_g)@SFK4a5s$YY8<6LLr4;mG)MXC}=}&q{{O zOffow^^BtuwU;)v!{NaxK*WI$t5K|7R$Gud6Ig@Ler{#{_1z+WM0NTASbz9teK?5W zPdNvi10ZylWJ)5U%IHS@3+E8S1EHU=v*3Gp;eoHe1ivoc9+ivIvu1oE`R)L}c3Zgi zB!=A(V-s;c_JLpTkG<)HV-e5zg!8=wetk*C#*o0mn6U}PfHw#(GPo;cCZVAqnURKK zeICR_F_Y|C-1<1DnN4n;vr)#QyD@wTjdO)?FCI#o*V)L637s z;ZeZ&lBhv*Gup|}48G#jz8dB!L!uWZ$ z2E;n@0N{9VtrW`?$7|P0;p-eXfTQ7O(@D%s<7d=5VCyjt0ggUy7Ez3MYShk0*P(qz zD-L~OK!&k58nyZW?>~_K|ErQYTa**;QuYm_@vOiuR(4Dc;u*DZ%rT4lvD!xhVD>O>38ZH0_UM^OJBqbkM}e z^(8rnOZdoRVD>n3>ivbI=1e%ApmpX6BEu=n#5_SaAWbR7j6gdjva7{3fJYS!X?3r(nmuy!!! zD$MiJf#}oY|I-e}_pVhE!pH=r9gO?kPN~M&QSD$1H{J(k=hji}VEkw;WjqgwqZUVggJ13*(`#9qe z@lLxILi4(W$5@XX9u%rDlk%Pd*{43V7OZRpXY9l$ESN4mgvTK8t}zweD?o=gkJW~X zv|TFQh#rX7K%rhXL1b~(_c?qxRxeT%|h1Q3H5$F+<&Mg+HqXzFc z(|GOJWwcL0^cy0V8(i9>4^Pps0$;em^~S#dv+RuaS+YLFe~|+v%$tCQ^~y(JC``BO zI(+Ody!baXdg;&2L{QI>PDUGt3*j1FnAa<=2#{C?T+A+;pjWnOGIZ`mQFXOBlF$4B z7evE{y_8WCXf(5u{nTK)8YhB+2dFN=>+@9LHt6lcIyE9nJ2){1XvHoj_9D{g2Vxd< zro*Z=A{o&Sx~SmXx}6q`L)42`fKHm;iwI!;VGD@~K1}0};OV<(nE>|#^e(b-0d0OL zMH1FLcLR#6?T~sAhfD|>nSx%dQnXUABpYKckUIwYtD0fz!-PW$5gmVkLo|Hf8-u&e z>XisKBZ0WUC`+Kp^deII-_pt0mVSs-1IRup((=d~h6mheNGJryP>W*mrOr;`ra(Op zmtO1TSI0%tL7I+E0Ure+kGd}%HG~aQz&jA&is&YZwFDd?0Xtd-{XFj<#6?5gtE(+J zskAtL!D&)Pj0s;ITv@$Q>A_tphS1r7D)Sxho8?-D$EbUu5`3=GBx)jL%jEMes@ogL z+}^GG&SWr&GJTV;t;)O|2>T8_+i0|<4`XD$2q21s7^68xH=a| z)6QFOpJ*vfx(rHYETkdhI`%E$=`(G_od&Kz0M-!f(1y#vlRBoTvI=s{Rc{w_&6FHy zwDAkke=h*|G+GFXMeLSClvw`sA$E>)*%{~QF;S;l<#q+Fzs9;15 zVctfF$Qvab@rOhiD8^*Vy-kxl7 z+}%s+vp7$M?c}&SS!NK7#pCXy#!sl@?u#^Bc9JYcjk}w(M6I1s7W7e2tZZ-hOXE*S9(L=TKL|kQDeb(qeQ)ya|~>KjHgA~8V}w>tVN+ww8}?!r&4SLr<%b_ z9^=b2Svxw!uZMULIPTV8RMPBZc!5om`)CD^9HTJr0vGK%WPcJKIk0krke&~rImh2h z8vYH26fQhMkQ^34$kMywVGgv%>(s6#S@4bl&tooHSU0qgm2-?h0p@~em2r3Q*&wvy zAkv4)(4ADR&qA|n&`6lh?Z6a+I+Ef0@hMtMVg%mk)Q(4YxWnz_P5+`K!hFA^KEyem zKXCPrYY|tFF1zT76FI_I;5s?$Bn7OCb8C%xO90y?SuJ=E82=;h9K$JVKJ=Q$dmEC< zU_vD`%R^a$mdh35ZXGI;0Xq`rm4yXbVn_fRJ{uD5guhcMzZikN#A`<Rr<*%k;%ye|?{M7Og$+_m14w?icfs6^3r@2mskjxsY zaa*YPSsp`r9Hj(R?+^)*h0zbfBS;cGCwzDhB^;whz~(ltoY6q%vPs%-C;tno{QLPq zELnXJe=G-ItLS>5%ByEka$UANWRl+TmB&VN3-OujX~8Rmp5yO_U-gMF66H$&Iau27T< zOLT(2Yw=M(dnc#as=p$C^lXX{s_n`?mV&4t!SRcPLmlNRY)=~=6^L2MIFJt;3Hrwp$*Re}30@st$R-4Xs+-l{RaGF@9l?;JR( z5>UPDss6Va*bgRgCj&0LNYEzo*eSa?qnlz5pp8R^rMWhvpK=a32B1yuDa}ao=eRf> zm@uYI`DRnHV)SH6Bs^C{`RTrbqyR5Ta7ms)s##>HdJfeF@nDdR;Hz+Wuc<|U#r#h^ zmvR@Xo4XrU2jeb6HiCIf5Sw}I`U=ATh(<6n8N{Bv--?VaL?f6O3Z6qLkBLYlWnI8#WR0zz-W@=FAplX)p_H`fFZjbZX-hUV z%BKAG{V>-&i|X)^P%}gYnWU^EYY}|^3LP-I=?sa9k7b!&ms=oT=sZpImM9Mu9Q=r4D*5wLvA#*r1nZO*FtLvP0+HGR#@Cab1^+PjP3#?^(P$$h k^|Fr@;lo(8d>BKsTlTGQ#@V*@utHn2(qcv0GM6L&13>OstN;K2 literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/incoming-video-declined-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/incoming-video-declined-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..af03c8bfb9a2c5fe6e623921a8794491b54bae15 GIT binary patch literal 20360 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

C{uV8 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/video-ended-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/video-ended-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..b794c3cc367677928fb51f3797b1fa4eb8d171ff GIT binary patch literal 19577 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/voice-ended-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx/voice-ended-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..32dbc8d22b6e0837dcf811235bf7128e63592461 GIT binary patch literal 19630 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.stories.tsx/default-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.stories.tsx/default-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1c0066eecaae43e02e0bdbcd6fe81e766ffcad GIT binary patch literal 20359 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/src/i18n/strings/en_EN.json b/packages/shared-components/src/i18n/strings/en_EN.json index dded80a263..51a7aa1296 100644 --- a/packages/shared-components/src/i18n/strings/en_EN.json +++ b/packages/shared-components/src/i18n/strings/en_EN.json @@ -231,6 +231,11 @@ "call_declined": "Call declined", "call_declined_by_us": "You declined a call" }, + "tombstone": { + "room": { + "title": "Group call ended" + } + }, "video_call_title": "Video call", "voice_call_title": "Voice call" }, diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx b/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx deleted file mode 100644 index a2dd9f855a..0000000000 --- a/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.stories.tsx +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2026 Element Creations Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -import React from "react"; - -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { useMockedViewModel } from "../../../../../core/viewmodel"; -import { withViewDocs } from "../../../../../../.storybook/withViewDocs"; -import { CallType, type CallTileViewSnapshot } from "../common/types"; -import { CallDeclinedTileView } from "./CallDeclinedTileView"; - -const CallDeclinedTileViewWrapperImpl = ({ ...rest }: CallTileViewSnapshot): React.ReactNode => { - const vm = useMockedViewModel(rest, {}); - return ; -}; - -const CallDeclinedTileViewWrapper = withViewDocs(CallDeclinedTileViewWrapperImpl, CallDeclinedTileView); - -const meta = { - title: "Timeline/Timeline Event/Call/CallDeclinedTileView", - component: CallDeclinedTileViewWrapper, - tags: ["autodocs"], - argTypes: { - type: { - options: [CallType.Video, CallType.Voice], - control: { type: "select" }, - }, - timestamp: { - control: { type: "text" }, - }, - }, - args: { - type: CallType.Voice, - timestamp: "12:36", - isCallDeclinedByUs: false, - }, - parameters: { - design: { - type: "figma", - url: "https://www.figma.com/design/rTaQE2nIUSLav4Tg3nozq7/Compound-Web-Components?node-id=11217-3914&t=jv0JnUoKJUW1Ko96-4", - }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Default: Story = {}; - -export const VoiceCall: Story = { - args: { - type: CallType.Voice, - }, -}; - -export const VideoCall: Story = { - args: { - type: CallType.Video, - }, -}; - -export const CallDeclinedByUs: Story = { - args: { - type: CallType.Voice, - isCallDeclinedByUs: true, - }, -}; diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.test.tsx b/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.test.tsx deleted file mode 100644 index 6fe6250d34..0000000000 --- a/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.test.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2026 Element Creations Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -import { composeStories } from "@storybook/react-vite"; -import { describe, expect, it } from "vitest"; -import React from "react"; -import { render } from "@test-utils"; - -import * as Stories from "./CallDeclinedTileView.stories"; - -const { VideoCall, VoiceCall, CallDeclinedByUs } = composeStories(Stories); - -describe("CallDeclinedTileView", () => { - describe("renders the tile", () => { - it("voice call", () => { - const { container } = render(); - expect(container).toMatchSnapshot(); - }); - - it("video call", () => { - const { container } = render(); - expect(container).toMatchSnapshot(); - }); - - it("call declined by us", () => { - const { container } = render(); - expect(container).toMatchSnapshot(); - }); - }); -}); diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.tsx b/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.tsx deleted file mode 100644 index f62a124852..0000000000 --- a/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/CallDeclinedTileView.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2026 Element Creations Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -import React from "react"; -import { - VideoCallDeclinedSolidIcon, - VoiceCallDeclinedSolidIcon, -} from "@vector-im/compound-design-tokens/assets/web/icons"; -import classnames from "classnames"; - -import { useViewModel, type ViewModel } from "../../../../../core/viewmodel"; -import { Flex } from "../../../../../core/utils/Flex"; -import styles from "../common/CallTileView.module.css"; -import { useI18n } from "../../../../../core/i18n/i18nContext"; -import { type CallTileViewSnapshot, CallType } from "../common/types"; - -export type CallDeclinedTileViewModel = ViewModel; - -export interface CallDeclinedTileViewProps { - vm: CallDeclinedTileViewModel; - className?: string; -} - -function getIconForCallType(type: CallType): React.ReactNode { - switch (type) { - case CallType.Video: - return ; - case CallType.Voice: - return ; - } -} - -/** - * View for a timeline tile that indicates that a call was declined. - */ -export function CallDeclinedTileView({ vm, className }: CallDeclinedTileViewProps): React.ReactNode { - const { translate: _t } = useI18n(); - const { type, timestamp, isCallDeclinedByUs } = useViewModel(vm); - const classNames = classnames(className, styles.container); - return ( - - {getIconForCallType(type)} -

-
{timestamp}
- - ); -} diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/__snapshots__/CallDeclinedTileView.test.tsx.snap b/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/__snapshots__/CallDeclinedTileView.test.tsx.snap deleted file mode 100644 index ae94ca0ecf..0000000000 --- a/packages/shared-components/src/room/timeline/event-tile/call/CallDeclinedTile/__snapshots__/CallDeclinedTileView.test.tsx.snap +++ /dev/null @@ -1,97 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`CallDeclinedTileView > renders the tile > call declined by us 1`] = ` -
-
- - - -
- You declined a call -
-
- 12:36 -
-
-
-`; - -exports[`CallDeclinedTileView > renders the tile > video call 1`] = ` -
-
- - - -
- Call declined -
-
- 12:36 -
-
-
-`; - -exports[`CallDeclinedTileView > renders the tile > voice call 1`] = ` -
-
- - - -
- Call declined -
-
- 12:36 -
-
-
-`; diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx deleted file mode 100644 index e3bed927c6..0000000000 --- a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2026 Element Creations Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -import React from "react"; - -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { CallStartedTileView } from "./CallStartedTileView"; -import { useMockedViewModel } from "../../../../../core/viewmodel"; -import { withViewDocs } from "../../../../../../.storybook/withViewDocs"; -import { CallType, type CallTileViewSnapshot } from "../common/types"; - -const CallStartedTileViewWrapperImpl = ({ ...rest }: CallTileViewSnapshot): React.ReactNode => { - const vm = useMockedViewModel(rest, {}); - return ; -}; - -const CallStartedTileViewWrapper = withViewDocs(CallStartedTileViewWrapperImpl, CallStartedTileView); - -const meta = { - title: "Timeline/Timeline Event/Call/CallStartedTileView", - component: CallStartedTileViewWrapper, - tags: ["autodocs"], - argTypes: { - type: { - options: [CallType.Video, CallType.Voice], - control: { type: "select" }, - }, - timestamp: { - control: { type: "text" }, - }, - }, - args: { - type: CallType.Voice, - timestamp: "12:36", - }, - parameters: { - design: { - type: "figma", - url: "https://www.figma.com/design/rTaQE2nIUSLav4Tg3nozq7/Compound-Web-Components?node-id=11217-3901&t=OvT1LOc5wH4kXt0a-4", - }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Default: Story = {}; - -export const VoiceCall: Story = { - args: { - type: CallType.Voice, - }, -}; - -export const VideoCall: Story = { - args: { - type: CallType.Video, - }, -}; diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.test.tsx b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.test.tsx deleted file mode 100644 index f885b7aa18..0000000000 --- a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.test.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2026 Element Creations Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -import { composeStories } from "@storybook/react-vite"; -import { describe, expect, it } from "vitest"; -import React from "react"; -import { render } from "@test-utils"; - -import * as Stories from "./CallStartedTileView.stories"; - -const { VideoCall, VoiceCall } = composeStories(Stories); - -describe("CallStartedTileView", () => { - describe("renders the tile", () => { - it("voice call", () => { - const { container } = render(); - expect(container).toMatchSnapshot(); - }); - - it("video call", () => { - const { container } = render(); - expect(container).toMatchSnapshot(); - }); - }); -}); diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.tsx b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.tsx deleted file mode 100644 index a6c2a5fdae..0000000000 --- a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.tsx +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2026 Element Creations Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -import React from "react"; -import { VideoCallSolidIcon, VoiceCallSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; -import classnames from "classnames"; - -import { useViewModel, type ViewModel } from "../../../../../core/viewmodel"; -import { Flex } from "../../../../../core/utils/Flex"; -import styles from "../common/CallTileView.module.css"; -import { useI18n } from "../../../../../core/i18n/i18nContext"; -import { type CallTileViewSnapshot, CallType } from "../common/types"; - -export type CallStartedTileViewModel = ViewModel; - -export interface CallStartedTileViewProps { - vm: CallStartedTileViewModel; - className?: string; -} - -function getIconForCallType(type: CallType): React.ReactNode { - switch (type) { - case CallType.Video: - return ; - case CallType.Voice: - return ; - } -} - -/** - * View for a timeline tile that indicates the start of an element call. - */ -export function CallStartedTileView({ vm, className }: CallStartedTileViewProps): React.ReactNode { - const { translate: _t } = useI18n(); - const { type, timestamp } = useViewModel(vm); - const classNames = classnames(className, styles.container); - return ( - - {getIconForCallType(type)} -
- {type === CallType.Voice - ? _t("timeline|call_tile|voice_call_title") - : _t("timeline|call_tile|video_call_title")} -
- -
{timestamp}
-
- ); -} diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/__snapshots__/CallStartedTileView.test.tsx.snap b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/__snapshots__/CallStartedTileView.test.tsx.snap deleted file mode 100644 index 83ed1ca614..0000000000 --- a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/__snapshots__/CallStartedTileView.test.tsx.snap +++ /dev/null @@ -1,65 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`CallStartedTileView > renders the tile > video call 1`] = ` -
-
- - - -
- Video call -
-
- 12:36 -
-
-
-`; - -exports[`CallStartedTileView > renders the tile > voice call 1`] = ` -
-
- - - -
- Voice call -
-
- 12:36 -
-
-
-`; diff --git a/packages/shared-components/src/room/timeline/event-tile/call/RootCallTileView.tsx b/packages/shared-components/src/room/timeline/event-tile/call/RootCallTileView.tsx new file mode 100644 index 0000000000..dadf9ac9c9 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/RootCallTileView.tsx @@ -0,0 +1,47 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import React from "react"; + +import { useViewModel, type ViewModel } from "../../../../core/viewmodel"; +import { + RoomTombstoneCallTileView, + type RoomTombstoneCallTileViewModel, +} from "./tombstone/room/RoomTombstoneCallTileView"; +import { DmTombstoneCallTileView, type DmTombstoneCallTileViewModel } from "./tombstone/dm/DmTombstoneCallTileView"; + +/** + * Map from tile type to view model. + */ +interface TileTypeToViewModelMap { + "tombstone-call-room": RoomTombstoneCallTileViewModel; + "tombstone-call-dm": DmTombstoneCallTileViewModel; +} + +export interface RootCallTileViewSnapshot { + tileType: Type; + tileViewModel: TileTypeToViewModelMap[Type]; +} + +export type RootCallTileViewModel = ViewModel; + +interface Props { + vm: RootCallTileViewModel; +} + +/** + * Root view for a call tile in the timeline. + */ +export function RootCallTileView({ vm }: Props): React.ReactNode { + const { tileType, tileViewModel } = useViewModel(vm); + switch (tileType) { + case "tombstone-call-room": + return ; + case "tombstone-call-dm": + return ; + } +} diff --git a/packages/shared-components/src/room/timeline/event-tile/call/common/types.ts b/packages/shared-components/src/room/timeline/event-tile/call/common.ts similarity index 50% rename from packages/shared-components/src/room/timeline/event-tile/call/common/types.ts rename to packages/shared-components/src/room/timeline/event-tile/call/common.ts index 087c3b45bf..d5b25a7957 100644 --- a/packages/shared-components/src/room/timeline/event-tile/call/common/types.ts +++ b/packages/shared-components/src/room/timeline/event-tile/call/common.ts @@ -20,20 +20,9 @@ export const enum CallType { } /** - * The snapshot that both the call started and call declined tiles expect. + * Whether the call is incoming or outgoing. */ -export type CallTileViewSnapshot = { - /** - * What type of call this tile needs to render for. - */ - type: CallType; - /** - * Time when this call was started. - */ - timestamp: string; - /** - * Whether this call was declined by our user. - * Undefined if not rendering a declined call tile. - */ - isCallDeclinedByUs?: boolean; -}; +export const enum CallDirection { + Incoming = "Incoming", + Outgoing = "Outgoing", +} diff --git a/packages/shared-components/src/room/timeline/event-tile/call/index.ts b/packages/shared-components/src/room/timeline/event-tile/call/index.ts index 0cca79e866..6a710d4e67 100644 --- a/packages/shared-components/src/room/timeline/event-tile/call/index.ts +++ b/packages/shared-components/src/room/timeline/event-tile/call/index.ts @@ -5,6 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -export * from "./CallStartedTile/CallStartedTileView"; -export * from "./CallDeclinedTile/CallDeclinedTileView"; -export * from "./common/types"; +export * from "./tombstone/room/RoomTombstoneCallTileView"; +export * from "./tombstone/dm/DmTombstoneCallTileView"; +export * from "./RootCallTileView"; +export * from "./common"; diff --git a/packages/shared-components/src/room/timeline/event-tile/call/common/CallTileView.module.css b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/common.module.css similarity index 100% rename from packages/shared-components/src/room/timeline/event-tile/call/common/CallTileView.module.css rename to packages/shared-components/src/room/timeline/event-tile/call/tombstone/common.module.css diff --git a/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx new file mode 100644 index 0000000000..06c691503b --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.stories.tsx @@ -0,0 +1,102 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import React from "react"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { DmTombstoneCallTileView, type DmTombstoneCallTileViewSnapshot } from "./DmTombstoneCallTileView"; +import { useMockedViewModel } from "../../../../../../core/viewmodel"; +import { withViewDocs } from "../../../../../../../.storybook/withViewDocs"; +import { CallDirection, CallType } from "../../common"; + +const RoomTombstoneCallTileViewWrapperImpl = (snapshot: DmTombstoneCallTileViewSnapshot): React.ReactNode => { + const vm = useMockedViewModel(snapshot, {}); + return ; +}; + +const RoomTombstoneCallTileViewWrapper = withViewDocs(RoomTombstoneCallTileViewWrapperImpl, DmTombstoneCallTileView); + +const meta = { + title: "Timeline/Timeline Event/Call/Tombstone/DmTombstoneCallTileView", + component: RoomTombstoneCallTileViewWrapper, + tags: ["autodocs"], + argTypes: { + timestamp: { + control: { type: "text" }, + }, + callDirection: { + options: [CallDirection.Incoming, CallDirection.Outgoing], + control: { type: "radio" }, + }, + + type: { + options: [CallType.Voice, CallType.Video], + control: { type: "radio" }, + }, + }, + args: { + timestamp: "12:36", + callDirection: CallDirection.Incoming, + isCallDeclined: false, + type: CallType.Voice, + }, + parameters: { + design: { + type: "figma", + url: "https://www.figma.com/design/rTaQE2nIUSLav4Tg3nozq7/Compound-Web-Components?node-id=11217-3905&t=iEfhUcFrV01fQeyQ-4", + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; + +export const VoiceEnded: Story = { + args: { + type: CallType.Voice, + }, +}; + +export const VideoEnded: Story = { + args: { + type: CallType.Video, + }, +}; + +export const IncomingVoiceDeclined: Story = { + args: { + type: CallType.Voice, + callDirection: CallDirection.Incoming, + isCallDeclined: true, + }, +}; + +export const IncomingVideoDeclined: Story = { + args: { + type: CallType.Video, + callDirection: CallDirection.Incoming, + isCallDeclined: true, + }, +}; + +export const OutgoingVoiceDeclined: Story = { + args: { + type: CallType.Voice, + callDirection: CallDirection.Outgoing, + isCallDeclined: true, + }, +}; + +export const OutgoingVideoDeclined: Story = { + args: { + type: CallType.Video, + callDirection: CallDirection.Outgoing, + isCallDeclined: true, + }, +}; diff --git a/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.test.tsx b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.test.tsx new file mode 100644 index 0000000000..083b022354 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.test.tsx @@ -0,0 +1,39 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { composeStories } from "@storybook/react-vite"; +import { describe, expect, it } from "vitest"; +import React from "react"; +import { render } from "@test-utils"; + +import * as Stories from "./DmTombstoneCallTileView.stories"; + +const { IncomingVideoDeclined, OutgoingVideoDeclined, VideoEnded, VoiceEnded } = composeStories(Stories); + +describe("DmTombstoneCallTileView", () => { + describe("renders the tile", () => { + it("IncomingVideoDeclined", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + + it("OutgoingVideoDeclined", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + + it("VideoEnded", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + + it("VoiceEnded", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + }); +}); diff --git a/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.tsx b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.tsx new file mode 100644 index 0000000000..0ee38f97d9 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/DmTombstoneCallTileView.tsx @@ -0,0 +1,96 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import React from "react"; +import { + VideoCallSolidIcon, + VideoCallDeclinedSolidIcon, + VoiceCallDeclinedSolidIcon, + VoiceCallSolidIcon, +} from "@vector-im/compound-design-tokens/assets/web/icons"; +import classnames from "classnames"; + +import { useViewModel, type ViewModel } from "../../../../../../core/viewmodel"; +import { Flex } from "../../../../../../core/utils/Flex"; +import styles from "../common.module.css"; +import { useI18n } from "../../../../../../core/i18n/i18nContext"; +import { CallDirection, CallType } from "../../common"; +import { type RoomTombstoneCallTileViewSnapshot } from "../room/RoomTombstoneCallTileView"; + +export interface DmTombstoneCallTileViewSnapshot extends RoomTombstoneCallTileViewSnapshot { + /** + * What type of call this tile needs to render for. + */ + type: CallType; + + /** + * Whether this is an incoming or outgoing call. + */ + callDirection: CallDirection; + + /** + * Whether this call was declined. + */ + isCallDeclined: boolean; +} + +export type DmTombstoneCallTileViewModel = ViewModel; + +export interface DmTombstoneCallTileViewProps { + vm: DmTombstoneCallTileViewModel; + + /** + * Additional class names for this component. + */ + className?: string; +} + +function getIcon(type: CallType, isCallDeclined: boolean): React.ReactNode { + const VideoIcon = isCallDeclined ? VideoCallDeclinedSolidIcon : VideoCallSolidIcon; + const VoiceIcon = isCallDeclined ? VoiceCallDeclinedSolidIcon : VoiceCallSolidIcon; + switch (type) { + case CallType.Video: + return ; + case CallType.Voice: + return ; + } +} + +/** + * Renders the tombstone content for a tile in a DM. + */ +export function DmTombstoneCallTileView({ vm, className }: DmTombstoneCallTileViewProps): React.ReactNode { + const snapshot = useViewModel(vm); + const { type, timestamp, isCallDeclined } = snapshot; + const classNames = classnames(className, styles.container); + return ( + + {getIcon(type, isCallDeclined)} +
+ {isCallDeclined ? : } +
+ +
{timestamp}
+
+ ); +} + +function NormalContent(props: { snapshot: DmTombstoneCallTileViewSnapshot }): React.ReactNode { + const { type } = props.snapshot; + const { translate: _t } = useI18n(); + return type === CallType.Voice + ? _t("timeline|call_tile|voice_call_title") + : _t("timeline|call_tile|video_call_title"); +} + +function DeclinedContent(props: { snapshot: DmTombstoneCallTileViewSnapshot }): React.ReactNode { + const { callDirection } = props.snapshot; + const { translate: _t } = useI18n(); + return callDirection === CallDirection.Incoming + ? _t("timeline|call_tile|declined|call_declined_by_us") + : _t("timeline|call_tile|declined|call_declined"); +} diff --git a/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/__snapshots__/DmTombstoneCallTileView.test.tsx.snap b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/__snapshots__/DmTombstoneCallTileView.test.tsx.snap new file mode 100644 index 0000000000..f69892bb48 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/dm/__snapshots__/DmTombstoneCallTileView.test.tsx.snap @@ -0,0 +1,129 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`DmTombstoneCallTileView > renders the tile > IncomingVideoDeclined 1`] = ` +
+
+ + + +
+ You declined a call +
+
+ 12:36 +
+
+
+`; + +exports[`DmTombstoneCallTileView > renders the tile > OutgoingVideoDeclined 1`] = ` +
+
+ + + +
+ Call declined +
+
+ 12:36 +
+
+
+`; + +exports[`DmTombstoneCallTileView > renders the tile > VideoEnded 1`] = ` +
+
+ + + +
+ Video call +
+
+ 12:36 +
+
+
+`; + +exports[`DmTombstoneCallTileView > renders the tile > VoiceEnded 1`] = ` +
+
+ + + +
+ Voice call +
+
+ 12:36 +
+
+
+`; diff --git a/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.stories.tsx b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.stories.tsx new file mode 100644 index 0000000000..94807886f8 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.stories.tsx @@ -0,0 +1,45 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import React from "react"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { RoomTombstoneCallTileView, type RoomTombstoneCallTileViewSnapshot } from "./RoomTombstoneCallTileView"; +import { useMockedViewModel } from "../../../../../../core/viewmodel"; +import { withViewDocs } from "../../../../../../../.storybook/withViewDocs"; + +const RoomTombstoneCallTileViewWrapperImpl = ({ ...rest }: RoomTombstoneCallTileViewSnapshot): React.ReactNode => { + const vm = useMockedViewModel(rest, {}); + return ; +}; + +const RoomTombstoneCallTileViewWrapper = withViewDocs(RoomTombstoneCallTileViewWrapperImpl, RoomTombstoneCallTileView); + +const meta = { + title: "Timeline/Timeline Event/Call/Tombstone/RoomTombstoneCallTileView", + component: RoomTombstoneCallTileViewWrapper, + tags: ["autodocs"], + argTypes: { + timestamp: { + control: { type: "text" }, + }, + }, + args: { + timestamp: "12:36", + }, + parameters: { + design: { + type: "figma", + url: "https://www.figma.com/design/rTaQE2nIUSLav4Tg3nozq7/Compound-Web-Components?node-id=11217-3902&t=oRWAGiwV5pUV4OFF-4", + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.test.tsx b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.test.tsx new file mode 100644 index 0000000000..3d3bbfc1cd --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.test.tsx @@ -0,0 +1,22 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { composeStories } from "@storybook/react-vite"; +import { describe, expect, it } from "vitest"; +import React from "react"; +import { render } from "@test-utils"; + +import * as Stories from "./RoomTombstoneCallTileView.stories"; + +const { Default } = composeStories(Stories); + +describe("RoomTombstoneCallTileView", () => { + it("renders the tile", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.tsx b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.tsx new file mode 100644 index 0000000000..063b5414dc --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/RoomTombstoneCallTileView.tsx @@ -0,0 +1,49 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import React from "react"; +import { VideoCallDeclinedSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; +import classnames from "classnames"; + +import { useViewModel, type ViewModel } from "../../../../../../core/viewmodel"; +import { Flex } from "../../../../../../core/utils/Flex"; +import styles from "../common.module.css"; +import { useI18n } from "../../../../../../core/i18n/i18nContext"; + +export type RoomTombstoneCallTileViewSnapshot = { + /** + * Time when this call was started. + */ + timestamp: string; +}; + +export type RoomTombstoneCallTileViewModel = ViewModel; + +export interface CallStartedTileViewProps { + vm: RoomTombstoneCallTileViewModel; + + /** + * Additional class names for this component. + */ + className?: string; +} + +/** + * Renders the tombstone content for a call in a room. + */ +export function RoomTombstoneCallTileView({ vm, className }: CallStartedTileViewProps): React.ReactNode { + const { translate: _t } = useI18n(); + const { timestamp } = useViewModel(vm); + const classNames = classnames(className, styles.container); + return ( + + +
{_t("timeline|call_tile|tombstone|room|title")}
+
{timestamp}
+
+ ); +} diff --git a/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/__snapshots__/RoomTombstoneCallTileView.test.tsx.snap b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/__snapshots__/RoomTombstoneCallTileView.test.tsx.snap new file mode 100644 index 0000000000..44e3034915 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/call/tombstone/room/__snapshots__/RoomTombstoneCallTileView.test.tsx.snap @@ -0,0 +1,33 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`RoomTombstoneCallTileView > renders the tile 1`] = ` +
+
+ + + +
+ Group call ended +
+
+ 12:36 +
+
+
+`; diff --git a/vitest.config.ts b/vitest.config.ts index b93610dfac..0be7b66ecb 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -58,6 +58,8 @@ export default defineConfig({ "**/*.{stories,test}.{ts,tsx}", // Exclude test utilities "**/src/test/**", + // Exclude mocks + "**/src/**/*-{mock,mocks}.{ts,tsx}", // Exclude type definition files "**/*.d.ts", // Exclude playwright-common as it is just test utilities