@webex/plugin-meetings 3.12.0-next.10 → 3.12.0-next.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/aiEnableRequest/index.js +1 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/controls-options-manager/constants.js +11 -1
  5. package/dist/controls-options-manager/constants.js.map +1 -1
  6. package/dist/controls-options-manager/index.js +23 -21
  7. package/dist/controls-options-manager/index.js.map +1 -1
  8. package/dist/controls-options-manager/util.js +91 -0
  9. package/dist/controls-options-manager/util.js.map +1 -1
  10. package/dist/hashTree/hashTreeParser.js +36 -20
  11. package/dist/hashTree/hashTreeParser.js.map +1 -1
  12. package/dist/interpretation/index.js +1 -1
  13. package/dist/interpretation/siLanguage.js +1 -1
  14. package/dist/locus-info/index.js +38 -14
  15. package/dist/locus-info/index.js.map +1 -1
  16. package/dist/meeting/util.js +1 -0
  17. package/dist/meeting/util.js.map +1 -1
  18. package/dist/types/controls-options-manager/constants.d.ts +6 -1
  19. package/dist/types/hashTree/hashTreeParser.d.ts +12 -2
  20. package/dist/types/locus-info/index.d.ts +8 -3
  21. package/dist/webinar/index.js +1 -1
  22. package/package.json +13 -13
  23. package/src/controls-options-manager/constants.ts +14 -1
  24. package/src/controls-options-manager/index.ts +26 -19
  25. package/src/controls-options-manager/util.ts +81 -1
  26. package/src/hashTree/hashTreeParser.ts +39 -22
  27. package/src/locus-info/index.ts +48 -24
  28. package/src/meeting/util.ts +1 -0
  29. package/test/unit/spec/controls-options-manager/index.js +114 -6
  30. package/test/unit/spec/controls-options-manager/util.js +165 -0
  31. package/test/unit/spec/hashTree/hashTreeParser.ts +59 -32
  32. package/test/unit/spec/locus-info/index.js +47 -22
  33. package/test/unit/spec/meeting/utils.js +4 -0
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_loggerProxy","_interopRequireDefault","_eventsScope","_constants","_infoUtils","_fullState","_selfUtils","_hostUtils","_controlsUtils","_embeddedAppsUtils","_mediaSharesUtils","_parser","_metrics","_constants2","_hashTreeParser2","_interopRequireWildcard","_types","_utils","_util","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t2","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","enumerable","push","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","_n","F","s","done","value","TypeError","a","u","next","return","_arrayLikeToArray","toString","slice","name","_Array$from","test","Array","LocusDtoTopLevelKeys","LocusObjectStateAfterUpdates","unchanged","removed","updated","getReplaceInfoFromSelf","self","deviceUrl","_device$replaces","device","MeetingsUtil","getThisDevice","replaces","undefined","findLocusUrlInAnyHashTreeParser","meetingCollection","locusUrl","_i","_arr","_values","getAll","_meeting$locusInfo","_meeting$locusInfo$ha","meeting","locusInfo","hashTreeParsers","findMeetingForHashTreeMessage","message","_message$locusStateEl","_message$locusStateEl2","foundMeeting","locusStateElements","find","el","isSelf","data","createLocusFromHashTreeMessage","locus","participants","url","metadata","_iterator","_step","_loop","element","type","htMeta","elementId","toLowerCase","ObjectType","locusObjectData","ObjectTypeToLocusKeyMap","locusDtoKey","_assign","participant","mediaShare","mediaShares","embeddedApp","embeddedApps","control","controls","links","info","fullState","err","LocusInfo","exports","_EventsScope","updateMeeting","webex","meetingId","_this","_classCallCheck2","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","_map","hashTreeObjectId2ParticipantId","_inherits2","_createClass2","key","doLocusSync","isLocusUrlChanged","_this$locusParser$wor","_this2","isDelta","meetingDestroyed","workingCopy","syncUrl","LoggerProxy","logger","concat","meetingRequest","getLocusDTO","catch","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","LOCUS_DELTA_SYNC_FAILED","correlationId","reason","errorName","stack","code","statusCode","meetings","destroy","MEETING_REMOVED_REASON","LOCUS_DTO_SYNC_FAILED","then","res","isEmpty","body","baseSequence","handleLocusDelta","onFullLocus","LOCUS_SYNC_HANDLING_FAILED","finally","resume","applyLocusDeltaData","action","_LocusDeltaParser$loc","loci","DESYNC","USE_CURRENT","USE_INCOMING","WAIT","LOCUS_URL_CHANGED","onDeltaLocus","_this3","onDeltaAction","parsedLoci","onDeltaEvent","init","created","scheduledMeeting","aclUrl","sequence","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","updateLocusUrl","ControlsUtils","isMainSessionDTO","updateFullState","updateMeetingInfo","updateEmbeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","updateLinks","createHashTreeParser","_ref","_this$webex$config$me","initialLocus","replacedAt","parser","HashTreeParser","webexRequest","request","bind","locusInfoUpdateCallback","updateFromHashTree","debugId","split","pop","substring","excludedDataSets","config","_iterator2","_step2","_step2$value","_slicedToArray2","existingLocusUrl","existingEntry","state","stop","warn","initializedFromHashTree","clear","_initialSetup","_asyncToGenerator2","_regenerator","mark","_callee","_data$locus","_data$locus$links","_data$locus$links$res","_data$locus$links$res2","_data$hashTreeMessage","_metadataObject$data","metadataObject","hashTreeParser","_hashTreeParser","_t","wrap","_context","prev","trigger","hashTreeMessage","isMetadata","visibleDataSets","Error","dataSets","initializeFromMessage","abrupt","resources","initializeFromGetLociResponse","initialSetup","_x","handleLocusAPIResponse","responseBody","_responseBody$locus","isWrapped","hashTreeParserEntry","sendClassicVsHashTreeMismatchMetric","handleLocusUpdate","updateLocusFromHashTreeObject","object","_this4","_locus$self","addParticipantObject","obj","id","version","locusObjectFromData","_object$data$floor","_object$data$floor2","_object$data$floor2$b","_locus$mediaShares","floor","disposition","beneficiary","existingMediaShare","ms","_locus$mediaShares2","_locus$embeddedApps","existingEmbeddedApp","_locus$embeddedApps2","participantId","jsSdkMeta","removedParticipantIds","delete","identity","_keys","controlKey","_locus$info","_object$data$controls","_object$data$controls2","_object$data$controls3","isWebinar","role","roles","SELF_ROLES","ATTENDEE","hasRole","classicVsHashTreeMismatchMetricCounter","LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH","handleHashTreeParserSwitch","_message$locusStateEl3","_message$locusStateEl4","entry","internal","_message$locusStateEl5","_metadata$data","_metadata$data$visibl","handleMessage","replacedEntry","handleHashTreeMessage","eventType","LOCUSEVENT","HASH_TREE_DATA_UPDATED","parserSwitched","updateType","_this5","LocusInfoUpdateType","OBJECTS_UPDATED","forceReplaceMembers","locusObjectStateAfterUpdates","updatedObjects","_object$data","LOCUS_HASH_TREE_UNSUPPORTED_OPERATION","cloneDeep","_stringify","map","hasData","MEETING_ENDED","SELF_REMOVED","parse","size","stateElementsMessage","getTheLocusToUpdate","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","emitScoped","scope","eventName","args","emit","onFullLocusWithHashTrees","debugText","onFullLocusCommon","onFullLocusClassic","isNewFullLocus","error","_this$participants","_this6","_locus$jsSdkMeta","_participant$htMeta","isReplaceMembers","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","_this$parsedLocus$ful","_this$parsedLocus$ful2","_CALL_","_SIP_BRIDGE_","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","ensureSelfParticipantExists","_isArray","selfExists","some","_locus$jsSdkMeta2","mergeParticipants","updatesApplied","_locus$jsSdkMeta3","_locus$self2","_locus$self3","updateCreated","updateReplaces","updateAclUrl","updateBasequence","updateSequence","compareAndUpdate","getLocusPartner","_USER_","partner","_this$parsedLocus$ful3","_this$parsedLocus$ful4","_this$parsedLocus$ful5","_this$parsedLocus$ful6","_SPACE_SHARE_","LOCUS","STATE","INACTIVE","newMetrics","submitClientEvent","options","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_INACTIVE_TERMINATING","compareSelfAndHost","compareHostAndSelf","_this$parsedLocus$hos","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","isReplace","_this$parsedLocus$con","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","_iterator3","_step3","_participant$person","LOCUSINFO","PARTICIPANT_REASON_CHANGED","displayName","person","primaryDisplayString","isEqual","_ControlsUtils$getCon","getControls","_ControlsUtils$getCon2","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasHesiodLLMIdChanged","hasAiSummaryNotificationChanged","hasTranscribeSpokenLanguageChanged","hasManualCaptionChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","hasInterpretationChanged","hasWebcastChanged","hasMeetingFullChanged","hasPracticeSessionEnabledChanged","hasStageViewChanged","hasAnnotationControlChanged","hasRemoteDesktopControlChanged","hasPollingQAControlChanged","hasAutoEndMeetingChanged","current","CONTROLS_MUTE_ON_ENTRY_CHANGED","muteOnEntry","CONTROLS_SHARE_CONTROL_CHANGED","shareControl","CONTROLS_DISALLOW_UNMUTE_CHANGED","disallowUnmute","CONTROLS_REACTIONS_CHANGED","reactions","CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED","viewTheParticipantList","CONTROLS_RAISE_HAND_CHANGED","raiseHand","CONTROLS_VIDEO_CHANGED","video","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","_current$transcribe","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","hesiodLlmId","CONTROLS_MEETING_HESIOD_LLM_ID_UPDATED","CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED","aiSummaryNotification","spokenLanguage","CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED","enabled","manualCaptionControl","CONTROLS_MEETING_MANUAL_CAPTION_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","CONTROLS_MEETING_BREAKOUT_UPDATED","interpretation","CONTROLS_MEETING_INTERPRETATION_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","CONTROLS_WEBCAST_CHANGED","webcastControl","CONTROLS_MEETING_FULL_CHANGED","meetingFull","CONTROLS_PRACTICE_SESSION_STATUS_UPDATED","practiceSession","CONTROLS_STAGE_VIEW_UPDATED","videoLayout","CONTROLS_ANNOTATION_CHANGED","annotationControl","CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED","rdcControl","CONTROLS_POLLING_QA_CHANGED","pollingQAControl","CONTROLS_AUTO_END_MEETING_WARNING_CHANGED","autoEndMeetingWarning","_this$links","_this$links2","_ref2","services","LINKS_SERVICES","LINKS_RESOURCES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","_this$parsedLocus$sel","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","MEETING_INFO_UPDATED","isInitializing","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","forceUpdate","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","_this$parsedLocus$ful7","_this$parsedLocus$inf","parsedSelves","getSelves","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","brbChanged","SELF_MEETING_BRB_CHANGED","brb","selfIdChanged","SELF_ID_CHANGED","interpretationChanged","SELF_MEETING_INTERPRETATION_CHANGED","selfParticipantId","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","_parsedSelves$previou","_parsedSelves$current","SELF_ROLES_CHANGED","oldRoles","newRoles","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","hasUserEnteredLobby","SELF_UNADMITTED_GUEST","hasUserBeenAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","_parsedSelves$current2","_parsedSelves$current3","_parsedSelves$current4","MEDIA_STATUS_CHANGE","audioStatus","currentMediaStatus","audio","videoStatus","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","isMainLocus","LOCUS_INFO_UPDATE_URL","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","_this$fullState","_this$mainSessionLocu","_this$mainSessionLocu2","isActive","ACTIVE","INITIALIZING","includes","clearMainSessionLocusCache","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","_this7","locusClone","assignWith","objValue","srcValue","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual, assignWith, cloneDeep, isEmpty} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n _SPACE_SHARE_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n Enum,\n SELF_ROLES,\n} from '../constants';\n\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport HashTreeParser, {\n DataSet,\n HashTreeMessage,\n LocusInfoUpdateType,\n Metadata,\n} from '../hashTree/hashTreeParser';\nimport {HashTreeObject, ObjectType, ObjectTypeToLocusKeyMap} from '../hashTree/types';\nimport {isMetadata, isSelf} from '../hashTree/utils';\nimport {Links, LocusDTO, ReplacesInfo} from './types';\nimport MeetingsUtil from '../meetings/util';\nimport {MEETING_KEY} from '../meetings/meetings.types';\nimport MeetingCollection from '../meetings/collection';\n\nexport type LocusLLMEvent = {\n data: {\n eventType: typeof LOCUSEVENT.HASH_TREE_DATA_UPDATED;\n stateElementsMessage: HashTreeMessage;\n };\n};\n\n// list of top level keys in Locus DTO relevant for Hash Tree DTOs processing\n// it does not contain fields specific to classic Locus DTOs like sequence or baseSequence\nconst LocusDtoTopLevelKeys = [\n 'controls',\n 'fullState',\n 'embeddedApps',\n 'host',\n 'info',\n 'links',\n 'mediaShares',\n 'meetings',\n 'participants',\n 'replaces',\n 'self',\n 'sequence',\n 'syncUrl',\n 'url',\n 'htMeta', // only exists when hash trees are used\n];\n\nexport type LocusApiResponseBody =\n | {\n dataSets?: DataSet[];\n locus: LocusDTO; // this LocusDTO here might not be the full one (for example it won't have all the participants, but it should have self)\n metadata?: Metadata;\n }\n | LocusDTO; // when we invoke APIs on the whole Locus like \"mute all\" backend returns the whole Locus in the response like this\n\nconst LocusObjectStateAfterUpdates = {\n unchanged: 'unchanged',\n removed: 'removed',\n updated: 'updated',\n} as const;\n\ntype LocusObjectStateAfterUpdates = Enum<typeof LocusObjectStateAfterUpdates>;\n\nexport type HashTreeParserEntry = {\n parser: HashTreeParser;\n replacedAt?: string;\n initializedFromHashTree: boolean;\n};\n\n/**\n * Gets the replacement information\n *\n * @param {any} self - \"self\" object from Locus DTO\n * @param {string} deviceUrl - The URL of the user's device\n * @returns {any} The replace information if available, otherwise undefined\n */\nfunction getReplaceInfoFromSelf(self: any, deviceUrl: string): ReplacesInfo | undefined {\n if (self) {\n const device = MeetingsUtil.getThisDevice({self}, deviceUrl);\n\n if (device?.replaces?.length > 0) {\n return device.replaces[0];\n }\n }\n\n return undefined;\n}\n\n/**\n * Finds a meeting by its locus URL in meeting collection. It checks all HashTreeParsers of all meetings in the collection.\n *\n * @param {MeetingCollection} meetingCollection - The collection of meetings to search\n * @param {string} locusUrl - The locus URL to search for\n * @returns {any} The meeting if found, otherwise undefined\n */\nfunction findLocusUrlInAnyHashTreeParser(\n meetingCollection: MeetingCollection,\n locusUrl: string\n): any {\n for (const meeting of Object.values(meetingCollection.getAll()) as any[]) {\n if (meeting?.locusInfo?.hashTreeParsers?.has(locusUrl)) {\n return meeting;\n }\n }\n\n return undefined;\n}\n\n/**\n * Finds a meeting for a given hash tree message.\n *\n * @param {HashTreeMessage} message - The hash tree message to find the meeting for\n * @param {MeetingCollection} meetingCollection - The collection of meetings to search\n * @param {string} deviceUrl - The URL of the user's device\n * @returns {any} The meeting if found, otherwise undefined\n */\nexport function findMeetingForHashTreeMessage(\n message: HashTreeMessage,\n meetingCollection: MeetingCollection,\n deviceUrl: string\n): any {\n let foundMeeting = findLocusUrlInAnyHashTreeParser(meetingCollection, message.locusUrl);\n\n if (foundMeeting) {\n return foundMeeting;\n }\n\n // if we haven't found anything, it may mean that message has a new locusUrl\n // check if it indicates that it replaces some existing current locusUrl (this is indicated in \"self\")\n const self = message.locusStateElements?.find((el) => isSelf(el))?.data;\n const replaces = getReplaceInfoFromSelf(self, deviceUrl);\n\n if (replaces?.locusUrl) {\n foundMeeting = findLocusUrlInAnyHashTreeParser(meetingCollection, replaces.locusUrl);\n\n return foundMeeting;\n }\n\n return undefined;\n}\n\n/**\n * Creates a locus object from the objects received in a hash tree message. It usually will be\n * incomplete, because hash tree messages only contain the parts of locus that have changed,\n * and some updates come separately over Mercury or LLM in separate messages.\n *\n * @param {HashTreeMessage} message hash tree message to created the locus from\n * @returns {Object} the created locus object and metadata if present\n */\nexport function createLocusFromHashTreeMessage(message: HashTreeMessage): {\n locus: LocusDTO;\n metadata?: Metadata;\n} {\n const locus: LocusDTO = {\n participants: [],\n url: message.locusUrl,\n };\n let metadata: Metadata | undefined;\n\n if (!message.locusStateElements) {\n return {locus, metadata};\n }\n\n for (const element of message.locusStateElements) {\n if (!element.data) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const type = element.htMeta.elementId.type.toLowerCase();\n\n switch (type) {\n case ObjectType.locus: {\n // spread locus object data onto the top level, but remove keys managed by other ObjectTypes\n const locusObjectData = {...element.data};\n\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n delete locusObjectData[locusDtoKey];\n });\n\n Object.assign(locus, locusObjectData);\n break;\n }\n case ObjectType.participant:\n locus.participants.push(element.data);\n break;\n case ObjectType.mediaShare:\n if (!locus.mediaShares) {\n locus.mediaShares = [];\n }\n locus.mediaShares.push(element.data);\n break;\n case ObjectType.embeddedApp:\n if (!locus.embeddedApps) {\n locus.embeddedApps = [];\n }\n locus.embeddedApps.push(element.data);\n break;\n case ObjectType.control:\n if (!locus.controls) {\n locus.controls = {};\n }\n Object.assign(locus.controls, element.data);\n break;\n case ObjectType.links:\n case ObjectType.info:\n case ObjectType.fullState:\n case ObjectType.self: {\n const locusDtoKey = ObjectTypeToLocusKeyMap[type];\n locus[locusDtoKey] = element.data;\n break;\n }\n case ObjectType.metadata:\n // metadata is not part of Locus DTO\n metadata = {...element.data, htMeta: element.htMeta} as Metadata;\n break;\n default:\n break;\n }\n }\n\n return {locus, metadata};\n}\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n participants: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n roles: any;\n mediaShares: any;\n url: any;\n links?: Links;\n mainSessionLocusCache: any;\n self: any;\n hashTreeParsers: Map<string, HashTreeParserEntry>;\n hashTreeObjectId2ParticipantId: Map<number, string>; // mapping of hash tree object ids to participant ids\n classicVsHashTreeMismatchMetricCounter = 0;\n\n /**\n * Constructor\n * @param {function} updateMeeting callback to update the meeting object from an object\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n this.hashTreeParsers = new Map();\n this.hashTreeObjectId2ParticipantId = new Map();\n }\n\n /**\n * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.\n * WARNING: This function must not be used for hash tree based Locus meetings.\n *\n * @param {Meeting} meeting\n * @param {boolean} isLocusUrlChanged\n * @param {Locus} locus\n * @returns {undefined}\n */\n private doLocusSync(meeting: any, isLocusUrlChanged: boolean, locus: any) {\n let url;\n let isDelta = false;\n let meetingDestroyed = false;\n\n if (isLocusUrlChanged) {\n // for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,\n // so use the main session locus url to get the full locus(full participants list in the response).\n // for the locus url changed case from main session to breakout, we don't need to care about it here,\n // because it is a USE_INCOMING case, it will not be executed here.\n url = locus.url;\n } else if (this.locusParser.workingCopy?.syncUrl) {\n url = this.locusParser.workingCopy.syncUrl;\n isDelta = true;\n } else {\n url = meeting.locusUrl;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> doing Locus sync (getting ${\n isDelta ? 'delta' : 'full'\n } DTO)`\n );\n\n // return value ignored on purpose\n meeting.meetingRequest\n .getLocusDTO({url})\n .catch((e) => {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n\n isDelta = false;\n\n // Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case\n if (e.statusCode !== 403) {\n return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw err;\n });\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n }\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw e;\n })\n .then((res) => {\n if (isEmpty(res.body)) {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from full DTO sync request'\n );\n }\n\n return;\n }\n\n if (isDelta) {\n if (res.body.baseSequence) {\n meeting.locusInfo.handleLocusDelta(res.body, meeting);\n\n return;\n }\n // in some cases Locus might return us full DTO even when we asked for a delta\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got full DTO when we asked for delta'\n );\n }\n meeting.locusInfo.onFullLocus('classic Locus sync', res.body);\n })\n .catch((e) => {\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (${e.toString()})`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_SYNC_HANDLING_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n })\n .finally(() => {\n if (!meetingDestroyed) {\n // Notify parser to resume processing delta events.\n // Any deltas in the queue that have now been superseded by this sync will simply be ignored\n this.locusParser.resume();\n }\n });\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;\n const isLocusUrlChanged = action === LOCUS_URL_CHANGED;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n case WAIT:\n // do nothing\n break;\n case DESYNC:\n case LOCUS_URL_CHANGED:\n this.doLocusSync(meeting, isLocusUrlChanged, locus);\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n this.updateLocusCache(locus);\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants, []);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls, locus.self);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateLinks(locus.links);\n }\n\n /**\n * Creates a HashTreeParser instance for a given locusUrl and stores it in the map.\n * @param {Object} params\n * @param {string} params.locusUrl - the locus URL used as the map key\n * @param {Object} params.initialLocus - initial locus data\n * @param {Object} params.metadata - hash tree metadata\n * @param {string} params.replacedAt - timestamp from Locus indicating when the replacement happened\n * @returns {HashTreeParser} the newly created parser\n */\n private createHashTreeParser({\n locusUrl,\n initialLocus,\n metadata,\n replacedAt,\n }: {\n locusUrl: string;\n initialLocus: {\n dataSets: Array<DataSet>;\n locus: any;\n };\n metadata: Metadata;\n replacedAt?: string;\n }): HashTreeParser {\n const parser = new HashTreeParser({\n initialLocus,\n metadata,\n webexRequest: this.webex.request.bind(this.webex),\n locusInfoUpdateCallback: this.updateFromHashTree.bind(this, locusUrl),\n debugId: `HT-${locusUrl.split('/').pop().substring(0, 4)}`,\n excludedDataSets: this.webex.config.meetings.locus?.excludedDataSets,\n });\n\n // When a new HashTreeParser is created, previous one should be stopped.\n // Locus will only be sending us updates for the current one.\n for (const [existingLocusUrl, existingEntry] of this.hashTreeParsers) {\n if (existingEntry.parser.state !== 'stopped') {\n existingEntry.parser.stop();\n if (replacedAt) {\n existingEntry.replacedAt = replacedAt;\n } else {\n LoggerProxy.logger.warn(\n `Locus-info:index#createHashTreeParser --> no replacedAt timestamp provided for new HashTreeParser with locusUrl ${locusUrl}, replacing ${existingLocusUrl}`\n );\n }\n }\n }\n\n this.hashTreeParsers.set(locusUrl, {parser, initializedFromHashTree: false});\n this.hashTreeObjectId2ParticipantId.clear();\n\n return parser;\n }\n\n /**\n * @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object\n * @returns {undefined}\n * @memberof LocusInfo\n */\n async initialSetup(\n data:\n | {\n trigger: 'join-response';\n locus: LocusDTO;\n dataSets?: DataSet[];\n metadata?: Metadata;\n }\n | {\n trigger: 'locus-message';\n locus?: LocusDTO;\n hashTreeMessage?: HashTreeMessage;\n }\n | {\n trigger: 'get-loci-response';\n locus?: LocusDTO;\n }\n ) {\n switch (data.trigger) {\n case 'locus-message':\n if (data.hashTreeMessage) {\n // we need the Metadata object to be in the received message, because it contains visibleDataSets\n // and these are needed to initialize all the hash trees\n const metadataObject = data.hashTreeMessage.locusStateElements?.find((el) =>\n isMetadata(el)\n );\n\n if (!metadataObject?.data?.visibleDataSets) {\n // this is a common case (not an error)\n // it happens for example after we leave the meeting and still get some heartbeats or delayed messages\n LoggerProxy.logger.info(\n `Locus-info:index#initialSetup --> cannot initialize HashTreeParser, Metadata object with visibleDataSets is missing in the message`\n );\n\n // throw so that handleLocusEvent() catches it and destroys the partially created meeting object\n throw new Error('Metadata object with visibleDataSets is missing in the message');\n }\n\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from message'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n const hashTreeParser = this.createHashTreeParser({\n locusUrl: data.hashTreeMessage.locusUrl,\n initialLocus: {\n locus: null,\n dataSets: data.hashTreeMessage.dataSets,\n },\n metadata: {\n htMeta: metadataObject.htMeta,\n visibleDataSets: metadataObject.data.visibleDataSets,\n },\n });\n\n // now handle the message - that should populate all the visible datasets\n await hashTreeParser.initializeFromMessage(data.hashTreeMessage);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus('classic locus message', data.locus, undefined);\n }\n break;\n case 'join-response':\n this.updateLocusCache(data.locus);\n this.onFullLocus('join response', data.locus, undefined, data.dataSets, data.metadata);\n break;\n case 'get-loci-response':\n if (data.locus?.links?.resources?.visibleDataSets?.url) {\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from get-loci-response'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n const hashTreeParser = this.createHashTreeParser({\n locusUrl: data.locus.url,\n initialLocus: {\n locus: null,\n dataSets: [], // empty, because we don't have them yet\n },\n metadata: null, // get-loci-response doesn't contain Metadata object\n });\n\n // now initialize all the data\n await hashTreeParser.initializeFromGetLociResponse(data.locus);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus('classic get-loci-response', data.locus, undefined);\n }\n }\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * Handles HTTP response from Locus API call.\n * @param {Meeting} meeting meeting object\n * @param {LocusApiResponseBody} responseBody body of the http response from Locus API call\n * @returns {void}\n */\n handleLocusAPIResponse(meeting, responseBody: LocusApiResponseBody): void {\n const isWrapped = 'locus' in responseBody;\n const locusUrl = isWrapped ? responseBody.locus?.url : responseBody.url;\n const hashTreeParserEntry = locusUrl && this.hashTreeParsers.get(locusUrl);\n if (hashTreeParserEntry) {\n if (isWrapped) {\n if (!responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `expected hash tree dataSets in API response but they are missing`\n );\n // continuing as we can still manage without responseBody.dataSets, but this is very suspicious\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#handleLocusAPIResponse --> passing Locus API response to HashTreeParser: ',\n responseBody\n );\n // update the data in our hash trees\n hashTreeParserEntry.parser.handleLocusUpdate(responseBody);\n } else {\n // LocusDTO without wrapper - pass it through as if it had no dataSets\n hashTreeParserEntry.parser.handleLocusUpdate({locus: responseBody});\n }\n } else {\n if (isWrapped && responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `unexpected hash tree dataSets in API response`\n );\n }\n // classic Locus delta\n const locus = isWrapped ? responseBody.locus : responseBody;\n this.handleLocusDelta(locus, meeting);\n }\n }\n\n /**\n * @param {HashTreeObject} object data set object\n * @param {any} locus\n * @returns {void}\n */\n updateLocusFromHashTreeObject(object: HashTreeObject, locus: LocusDTO): LocusDTO {\n const type = object.htMeta.elementId.type.toLowerCase();\n\n const addParticipantObject = (obj: HashTreeObject) => {\n if (!locus.participants) {\n locus.participants = [];\n }\n locus.participants.push(obj.data);\n this.hashTreeObjectId2ParticipantId.set(obj.htMeta.elementId.id, obj.data.id);\n };\n\n switch (type) {\n case ObjectType.locus: {\n if (!object.data) {\n // not doing anything here, as we need Locus to always be there (at least some fields)\n // and that's already taken care of in updateFromHashTree()\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object removed, version=${object.htMeta.elementId.version}`\n );\n\n return locus;\n }\n // replace the main locus\n\n // The Locus object we receive from backend has empty participants array,\n // and may have (although it shouldn't) other fields that are managed by other ObjectTypes\n // like \"fullState\" or \"info\", so we're making sure to delete them here\n const locusObjectFromData = object.data;\n\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n delete locusObjectFromData[locusDtoKey];\n });\n\n locus = {...locus, ...locusObjectFromData};\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object updated to version=${object.htMeta.elementId.version}`\n );\n break;\n }\n case ObjectType.mediaShare:\n if (object.data) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${\n object.htMeta.elementId.id\n } name='${object.data.name}' updated ${\n object.data.name === 'content'\n ? `floor=${object.data.floor?.disposition}, ${object.data.floor?.beneficiary?.id}`\n : ''\n } version=${object.htMeta.elementId.version}`\n );\n const existingMediaShare = locus.mediaShares?.find(\n (ms) => ms.htMeta.elementId.id === object.htMeta.elementId.id\n );\n\n if (existingMediaShare) {\n Object.assign(existingMediaShare, object.data);\n } else {\n locus.mediaShares = locus.mediaShares || [];\n locus.mediaShares.push(object.data);\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${object.htMeta.elementId.id} removed, version=${object.htMeta.elementId.version}`\n );\n locus.mediaShares = locus.mediaShares?.filter(\n (ms) => ms.htMeta.elementId.id !== object.htMeta.elementId.id\n );\n }\n break;\n case ObjectType.embeddedApp:\n if (object.data) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> embeddedApp id=${object.htMeta.elementId.id} url='${object.data.url}' updated version=${object.htMeta.elementId.version}:`,\n object.data\n );\n const existingEmbeddedApp = locus.embeddedApps?.find(\n (ms) => ms.htMeta.elementId.id === object.htMeta.elementId.id\n );\n\n if (existingEmbeddedApp) {\n Object.assign(existingEmbeddedApp, object.data);\n } else {\n locus.embeddedApps = locus.embeddedApps || [];\n locus.embeddedApps.push(object.data);\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> embeddedApp id=${object.htMeta.elementId.id} removed, version=${object.htMeta.elementId.version}`\n );\n locus.embeddedApps = locus.embeddedApps?.filter(\n (ms) => ms.htMeta.elementId.id !== object.htMeta.elementId.id\n );\n }\n break;\n case ObjectType.participant:\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> participant id=${\n object.htMeta.elementId.id\n } ${object.data ? 'updated' : 'removed'} version=${object.htMeta.elementId.version}`\n );\n if (object.data) {\n addParticipantObject(object);\n } else {\n const participantId = this.hashTreeObjectId2ParticipantId.get(object.htMeta.elementId.id);\n\n if (!locus.jsSdkMeta) {\n locus.jsSdkMeta = {removedParticipantIds: []};\n }\n locus.jsSdkMeta.removedParticipantIds.push(participantId);\n this.hashTreeObjectId2ParticipantId.delete(object.htMeta.elementId.id);\n }\n // Create self from the participant if it matches self identity and is being moved.\n // We need this, because participant update comes in LLM message often before the self update from Mercury.\n // Other parts of the code detect move only by looking at self, while some other parts of the SDK/webapp code\n // look at participant for roles etc, so if participant is updated but not self, then it looks like we our lost roles temporarily\n // (until self is updated)\n // This will be fixed properly in SPARK-790239\n if (\n object.data &&\n object.data.identity === locus.self?.identity &&\n object.data.state === 'LEFT' &&\n object.data.reason === 'MOVED'\n ) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> FOUND a match for MOVED self in participant object ${object.htMeta.elementId.id}`\n );\n Object.assign(locus[ObjectTypeToLocusKeyMap[ObjectType.self]], object.data);\n }\n break;\n case ObjectType.control:\n if (object.data) {\n Object.keys(object.data).forEach((controlKey) => {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> control ${controlKey} updated:`,\n object.data[controlKey]\n );\n if (!locus.controls) {\n locus.controls = {};\n }\n locus.controls[controlKey] = object.data[controlKey];\n });\n } else {\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> control object update without data - this is not expected!`\n );\n }\n break;\n case ObjectType.links:\n case ObjectType.info:\n case ObjectType.fullState:\n case ObjectType.self:\n if (!object.data) {\n // self without data is handled inside HashTreeParser and results in LocusInfoUpdateType.MEETING_ENDED, so we should never get here\n // all other types info, fullstate, etc - Locus should never send them without data\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received ${type} object without data, this is not expected! version=${object.htMeta.elementId.version}`\n );\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> ${type} object updated to version ${object.htMeta.elementId.version}`\n );\n const locusDtoKey = ObjectTypeToLocusKeyMap[type];\n locus[locusDtoKey] = object.data;\n\n /* Hash tree based webinar attendees don't receive a Participant object for themselves from Locus,\n but a lot of existing code in SDK and web app expects a member object for self to exist,\n so whenever SELF changes for a webinar attendee, we copy it into a participant object.\n We can do it, because SELF has always all the same properties as a participant object.\n */\n if (\n type === ObjectType.self &&\n locus.info?.isWebinar &&\n object.data.controls?.role?.roles?.find(\n (r) => r.type === SELF_ROLES.ATTENDEE && r.hasRole\n )\n ) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> webinar attendee: creating participant object from self`\n );\n addParticipantObject(object);\n }\n }\n break;\n case ObjectType.metadata:\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> metadata object updated to version ${object.htMeta.elementId.version}`\n );\n // we don't use hash tree metadata right now for anything, it's mainly used internally by HashTreeParser\n break;\n default:\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received unsupported object type ${type}`\n );\n break;\n }\n\n return locus;\n }\n\n /**\n * Sends a metric when we receive something from Locus that uses hash trees while we\n * expect classic deltas or the other way around.\n * @param {Meeting} meeting\n * @param {string} message\n * @returns {void}\n */\n sendClassicVsHashTreeMismatchMetric(meeting: any, message: string) {\n LoggerProxy.logger.warn(\n `Locus-info:index#sendClassicVsHashTreeMismatchMetric --> classic vs hash tree mismatch! ${message}`\n );\n\n // we don't want to flood the metrics system\n if (this.classicVsHashTreeMismatchMetricCounter < 5) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH, {\n correlationId: meeting.correlationId,\n message,\n });\n this.classicVsHashTreeMismatchMetricCounter += 1;\n }\n }\n\n /**\n * Checks if the hash tree message should trigger a switch to a different HashTreeParser\n *\n * @param {HashTreeMessage} message incoming hash tree message\n * @returns {boolean} true if the message was handled as a parser switch, false otherwise\n */\n private handleHashTreeParserSwitch(message: HashTreeMessage): boolean {\n const entry = this.hashTreeParsers.get(message.locusUrl);\n\n const self = message.locusStateElements?.find((el) => isSelf(el))?.data;\n const replaces = getReplaceInfoFromSelf(\n self,\n // @ts-ignore\n this.webex.internal.device.url\n );\n\n if (!entry) {\n // Metadata object that contains information about visible datasets is needed to initialize the HashTreeParser,\n // but it's buried inside the message, we need to find it and pass it to HashTreeParser constructor\n const metadata = message.locusStateElements?.find((el) => isMetadata(el));\n\n if (metadata?.data?.visibleDataSets?.length > 0) {\n LoggerProxy.logger.info(\n `Locus-info:index#handleHashTreeParserSwitch --> no hash tree parser found for locusUrl ${message.locusUrl}, creating a new one`\n );\n\n const parser = this.createHashTreeParser({\n locusUrl: message.locusUrl,\n initialLocus: {\n locus: null,\n dataSets: message.dataSets,\n },\n metadata: {\n htMeta: metadata.htMeta,\n visibleDataSets: metadata.data.visibleDataSets,\n },\n replacedAt: replaces?.replacedAt,\n });\n\n // handle the message with the new parser\n parser.handleMessage(message);\n }\n\n return true;\n }\n if (entry.parser.state === 'stopped') {\n // the message matches a stopped parser, we need to check if maybe this is a new \"replacement\" and we need to re-activate the parser\n // this happens when you move from breakout A -> breakout B -> back to breakout A\n if (replaces) {\n if (replaces.replacedAt > (entry.replacedAt || '')) {\n LoggerProxy.logger.info(\n `Locus-info:index#handleHashTreeParserSwitch --> resuming a HashTreeParser for locusUrl=${message.locusUrl}, which replaces ${replaces.locusUrl}`\n );\n const replacedEntry = this.hashTreeParsers.get(replaces.locusUrl);\n\n if (replacedEntry) {\n replacedEntry.replacedAt = replaces.replacedAt;\n entry.initializedFromHashTree = false;\n this.hashTreeObjectId2ParticipantId.clear();\n\n replacedEntry.parser.stop();\n entry.parser.resume(message);\n } else {\n LoggerProxy.logger.warn(\n `Locus-info:index#handleHashTreeParserSwitch --> the parser that is supposed to be replaced with the currently resumed parser is not found, locusUrl=${replaces.locusUrl}`\n );\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#handleHashTreeParserSwitch --> received message for stopped HashTreeParser with locusUrl ${message.locusUrl}, but replaces info provided is not newer, so not re-activating the parser`\n );\n }\n\n return true;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#handleHashTreeParserSwitch --> received message for stopped HashTreeParser with locusUrl ${message.locusUrl}, but no replaces info provided, so not re-activating the parser`\n );\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Handles a hash tree message received from Locus.\n *\n * @param {Meeting} meeting - The meeting object\n * @param {eventType} eventType - The event type\n * @param {HashTreeMessage} message incoming hash tree message\n * @returns {void}\n */\n private handleHashTreeMessage(meeting: any, eventType: LOCUSEVENT, message: HashTreeMessage) {\n if (eventType !== LOCUSEVENT.HASH_TREE_DATA_UPDATED) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected ${LOCUSEVENT.HASH_TREE_DATA_UPDATED}`\n );\n\n return;\n }\n\n const parserSwitched = this.handleHashTreeParserSwitch(message);\n\n if (parserSwitched) {\n return;\n }\n\n const entry = this.hashTreeParsers.get(message.locusUrl);\n\n entry.parser.handleMessage(message);\n }\n\n /**\n * Callback registered with HashTreeParser to receive locus info updates.\n * Updates our locus info based on the data parsed by the hash tree parser.\n *\n * @param {string} locusUrl - the locus URL for which the update is received\n * @param {LocusInfoUpdateType} updateType - The type of update received.\n * @param {Object} [data] - Additional data for the update, if applicable.\n * @returns {void}\n */\n private updateFromHashTree(\n locusUrl: string,\n updateType: LocusInfoUpdateType,\n data?: {updatedObjects: HashTreeObject[]}\n ) {\n switch (updateType) {\n case LocusInfoUpdateType.OBJECTS_UPDATED: {\n // initialize our new locus\n let locus: LocusDTO = {\n participants: [],\n jsSdkMeta: {\n removedParticipantIds: [],\n forceReplaceMembers: false,\n },\n };\n\n // first go over all the updates and check what happens with the main locus object\n let locusObjectStateAfterUpdates: LocusObjectStateAfterUpdates =\n LocusObjectStateAfterUpdates.unchanged;\n data.updatedObjects.forEach((object) => {\n if (object.htMeta.elementId.type.toLowerCase() === ObjectType.locus) {\n if (locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.updated) {\n // this code doesn't supported it right now,\n // cases for \"updated\" followed by \"removed\", or multiple \"updated\" would need more handling\n // but these should never happen\n LoggerProxy.logger.warn(\n `Locus-info:index#updateFromHashTree --> received multiple LOCUS objects in one update, this is unexpected!`\n );\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.LOCUS_HASH_TREE_UNSUPPORTED_OPERATION,\n {\n locusUrl: object.data?.url || this.url,\n message: object.data\n ? 'multiple LOCUS object updates'\n : 'LOCUS object update followed by removal',\n }\n );\n }\n if (object.data) {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.updated;\n } else {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.removed;\n }\n }\n });\n\n const hashTreeParserEntry = this.hashTreeParsers.get(locusUrl);\n\n if (!hashTreeParserEntry.initializedFromHashTree) {\n // this is the first time we're getting an update for this locusUrl,\n // so it's probably a move to/from breakout. We need to start from a clean state,\n // so empty locus and we rely on Locus giving us sufficient data in the updates to populate it.\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> first INITIAL update for locusUrl ${locusUrl}, starting from empty state`\n );\n hashTreeParserEntry.initializedFromHashTree = true;\n locus.jsSdkMeta.forceReplaceMembers = true;\n } else if (\n // if Locus object is unchanged or removed, we need to keep using the existing locus\n // because the rest of the locusInfo code expects locus to always be present (with at least some of the fields)\n // if it gets updated, we only need to have the fields that are not part of \"locus\" object (like \"info\" or \"mediaShares\")\n // so that when Locus object gets updated, if the new one is missing some field, that field will\n // be removed from our locusInfo\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.unchanged ||\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.removed\n ) {\n // copy over all of existing locus except participants\n LocusDtoTopLevelKeys.forEach((key) => {\n if (key !== 'participants') {\n locus[key] = cloneDeep(this[key]);\n }\n });\n } else {\n // initialize only the fields that are not part of main \"Locus\" object\n // (except participants, which need to stay empty - that means \"no participant changes\")\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n if (locusDtoKey !== 'participants') {\n locus[locusDtoKey] = cloneDeep(this[locusDtoKey]);\n }\n });\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> LOCUS object is ${locusObjectStateAfterUpdates}, all updates: ${JSON.stringify(\n data.updatedObjects.map((o) => ({\n type: o.htMeta.elementId.type,\n id: o.htMeta.elementId.id,\n hasData: !!o.data,\n }))\n )}`\n );\n // now apply all the updates from the hash tree onto the locus\n data.updatedObjects.forEach((object) => {\n locus = this.updateLocusFromHashTreeObject(object, locus);\n });\n\n // update our locus info with the new locus\n this.onDeltaLocus(locus);\n\n break;\n }\n\n case LocusInfoUpdateType.MEETING_ENDED: {\n const meeting = this.webex.meetings.meetingCollection.get(this.meetingId);\n\n if (meeting) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> received signal that meeting ended, destroying meeting ${this.meetingId}`\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.SELF_REMOVED);\n }\n }\n }\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n if (this.hashTreeParsers.size > 0) {\n this.handleHashTreeMessage(\n meeting,\n data.eventType,\n data.stateElementsMessage as HashTreeMessage\n );\n } else {\n const {eventType} = data;\n\n if (eventType === LOCUSEVENT.HASH_TREE_DATA_UPDATED) {\n // this can happen when we get an event before join http response\n // it's OK to just ignore it\n LoggerProxy.logger.info(\n `Locus-info:index#parse --> received locus hash tree event before hashTreeParser is created`\n );\n\n return;\n }\n\n const locus = this.getTheLocusToUpdate(data.locus);\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n locus.jsSdkMeta = {removedParticipantIds: []};\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(`classic locus event ${eventType}`, locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(locus, meeting);\n }\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * Function for handling full locus when it's using hash trees (so not the \"classic\" one).\n *\n * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes\n * @param {object} locus locus object\n * @param {object} metadata locus hash trees metadata\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {void}\n */\n private onFullLocusWithHashTrees(\n debugText: string,\n locus: any,\n metadata: Metadata,\n eventType?: string,\n dataSets?: Array<DataSet>\n ) {\n if (!this.hashTreeParsers.has(locus.url)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus (${debugText}) --> creating hash tree parser for locusUrl=${locus.url}`\n );\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus (${debugText}) --> dataSets:`,\n dataSets,\n ' and locus:',\n locus,\n ' and metadata:',\n metadata\n );\n this.createHashTreeParser({\n locusUrl: locus.url,\n initialLocus: {locus, dataSets},\n metadata,\n });\n // we have a full locus to start with, so we consider Locus info to be \"initialized\"\n this.hashTreeParsers.get(locus.url).initializedFromHashTree = true;\n this.onFullLocusCommon(locus, eventType);\n } else {\n // in this case the Locus we're getting is not necessarily the full one\n // so treat it like if we just got it in any api response\n\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus (${debugText}) --> hash tree parser already exists, handling it like a normal API response`\n );\n this.handleLocusAPIResponse(undefined, {dataSets, locus, metadata});\n }\n }\n\n /**\n * Function for handling full locus when it's the \"classic\" one (not hash trees)\n *\n * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusClassic(debugText: string, locus: any, eventType?: string) {\n if (!this.locusParser.isNewFullLocus(locus)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus (${debugText}) --> ignoring old full locus DTO, eventType=${eventType}`\n );\n\n return;\n }\n this.onFullLocusCommon(locus, eventType);\n }\n\n /**\n * updates the locus with full locus object\n * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @param {object} metadata locus hash trees metadata\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(\n debugText: string,\n locus: any,\n eventType?: string,\n dataSets?: Array<DataSet>,\n metadata?: Metadata\n ) {\n if (!locus) {\n LoggerProxy.logger.error(\n `Locus-info:index#onFullLocus (${debugText}) --> object passed as argument was invalid, continuing.`\n );\n }\n\n if (dataSets) {\n if (!metadata) {\n throw new Error(\n `Locus-info:index#onFullLocus (${debugText}) --> hash tree metadata is missing with full Locus`\n );\n }\n // this is the new hashmap Locus DTO format (only applicable to webinars for now)\n this.onFullLocusWithHashTrees(debugText, locus, metadata, eventType, dataSets);\n } else {\n this.onFullLocusClassic(debugText, locus, eventType);\n }\n }\n\n /**\n * Common part of handling full locus, used by both classic and hash tree based locus handling\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusCommon(locus: any, eventType?: string) {\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.participants?.forEach((participant) => {\n // participant.htMeta is set only for hash tree based locus\n if (typeof participant.htMeta?.elementId.id === 'number') {\n this.hashTreeObjectId2ParticipantId.set(participant.htMeta.elementId.id, participant.id);\n }\n });\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState?.type === _CALL_ ||\n this.parsedLocus.fullState?.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * Makes sure that passed in locus object has a participant object for self.\n *\n * @param {LocusDTO} locus The locus object to check and modify if needed\n * @returns {void}\n */\n ensureSelfParticipantExists(locus: any) {\n const {self} = locus;\n\n // sanity check, this should never fail\n if (!self?.identity || !Array.isArray(locus.participants)) {\n LoggerProxy.logger.warn(\n `Locus-info:index#ensureSelfParticipantExists --> locus object is missing required fields, cannot ensure self participant exists. self?.identity=\"${self?.identity}\"`\n );\n\n return;\n }\n\n const selfExists = locus.participants.some(\n (participant) => participant.identity === self.identity\n );\n\n if (!selfExists) {\n locus.participants.push({...self});\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n const isReplaceMembers =\n locus.jsSdkMeta?.forceReplaceMembers !== undefined\n ? locus.jsSdkMeta.forceReplaceMembers\n : ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n\n if (isReplaceMembers) {\n // when we're moving between breakouts, Locus sometimes doesn't send us\n // any participants at all for a few seconds\n // Web app relies on having at least the self participant always there\n // so we copy self into participants if it's not there.\n this.ensureSelfParticipantExists(locus);\n }\n this.mergeParticipants(this.participants, locus.participants);\n const updatesApplied = this.updateLocusInfo(locus);\n\n if (updatesApplied) {\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\n }\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return false;\n }\n\n this.updateControls(locus.controls, locus.self);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateReplaces(locus.replaces);\n this.updateSelf(locus.self);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateLinks(locus.links);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n\n return true;\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState?.type === _CALL_ ||\n this.parsedLocus.fullState?.type === _SIP_BRIDGE_ ||\n this.parsedLocus.fullState?.type === _SPACE_SHARE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState?.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self &&\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * update meeting's members\n * @param {Object} participants new participants object\n * @param {Array} removedParticipantIds list of removed participants\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, removedParticipantIds?: string[], isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n removedParticipantIds,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n isReplace,\n }\n );\n\n if (participants && Array.isArray(participants) && participants.length > 0) {\n for (const participant of participants) {\n if (participant && participant?.reason === 'FAILURE') {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED,\n {\n displayName: participant?.person?.primaryDisplayString,\n }\n );\n }\n }\n }\n }\n\n /**\n * @param {Object} controls\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object, self: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasHesiodLLMIdChanged,\n hasAiSummaryNotificationChanged,\n hasTranscribeSpokenLanguageChanged,\n hasManualCaptionChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\n hasInterpretationChanged,\n hasWebcastChanged,\n hasMeetingFullChanged,\n hasPracticeSessionEnabledChanged,\n hasStageViewChanged,\n hasAnnotationControlChanged,\n hasRemoteDesktopControlChanged,\n hasPollingQAControlChanged,\n hasAutoEndMeetingChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasMuteOnEntryChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,\n {state: current.muteOnEntry}\n );\n }\n\n if (hasShareControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,\n {state: current.shareControl}\n );\n }\n\n if (hasDisallowUnmuteChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,\n {state: current.disallowUnmute}\n );\n }\n\n if (hasReactionsChanged || hasReactionDisplayNamesChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,\n {state: current.reactions}\n );\n }\n\n if (hasViewTheParticipantListChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,\n {state: current.viewTheParticipantList}\n );\n }\n\n if (hasRaiseHandChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,\n {state: current.raiseHand}\n );\n }\n\n if (hasVideoChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,\n {state: current.video}\n );\n }\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasHesiodLLMIdChanged) {\n const {hesiodLlmId} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_HESIOD_LLM_ID_UPDATED,\n {\n hesiodLlmId,\n }\n );\n }\n\n if (hasAiSummaryNotificationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED,\n {\n aiSummaryNotification: current.transcribe.aiSummaryNotification,\n }\n );\n }\n\n if (hasTranscribeSpokenLanguageChanged) {\n const {spokenLanguage} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,\n {\n spokenLanguage,\n }\n );\n }\n\n if (hasManualCaptionChanged) {\n const {enabled} = current.manualCaptionControl;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED,\n {\n enabled,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n\n breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(\n self,\n this.webex.internal.device.url\n );\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasInterpretationChanged) {\n const {interpretation} = current;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n {\n interpretation,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n if (hasWebcastChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,\n {state: current.webcastControl}\n );\n }\n\n if (hasMeetingFullChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,\n {state: current.meetingFull}\n );\n }\n\n if (hasPracticeSessionEnabledChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,\n {state: current.practiceSession}\n );\n }\n\n if (hasStageViewChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,\n {state: current.videoLayout}\n );\n }\n\n if (hasAnnotationControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED,\n {state: current.annotationControl}\n );\n }\n\n if (hasRemoteDesktopControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED,\n {state: current.rdcControl}\n );\n }\n\n if (hasPollingQAControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,\n {state: current.pollingQAControl}\n );\n }\n\n if (hasAutoEndMeetingChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,\n {state: current.autoEndMeetingWarning}\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * Updates links and emits appropriate events if services or resources have changed\n * @param {Object} links\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLinks(links?: Links) {\n const {services, resources} = links || {};\n\n if (services && !isEqual(this.links?.services, services)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n\n if (resources && !isEqual(this.links?.resources, resources)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_RESOURCES,\n {\n resources,\n }\n );\n }\n\n this.links = links;\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if ((info && !isEqual(this.info, info)) || (!isEqual(this.roles, roles) && info)) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {\n isInitializing: !self, // if self is undefined, then the update is caused by locus init\n }\n );\n }\n this.roles = roles;\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @param {boolean} forceUpdate force to update the mediaShares\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object, forceUpdate = false) {\n if (mediaShares && (!isEqual(this.mediaShares, mediaShares) || forceUpdate)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n forceUpdate,\n }\n );\n }\n }\n\n /**\n * @param {Object} replaces\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplaces(replaces: object) {\n if (replaces && !isEqual(this.replaces, replaces)) {\n this.replaces = replaces;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the new locus.self\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any) {\n if (self) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(\n this.parsedLocus.self,\n self,\n this.webex.internal.device.url,\n this.participants // using this.participants instead of locus.participants here, because with delta DTOs locus.participants will only contain a small subset of participants\n );\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState?.type, this.parsedLocus.info?.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(this.participants, self),\n this.parsedLocus.fullState?.type,\n this.parsedLocus.info?.sipUri\n );\n\n if (result?.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.brbChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED,\n {\n brb: parsedSelves.current.brb,\n }\n );\n }\n\n if (parsedSelves.updates.selfIdChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ID_CHANGED,\n {\n selfId: parsedSelves.current.selfId,\n }\n );\n }\n\n if (parsedSelves.updates.interpretationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,\n {\n interpretation: parsedSelves.current.interpretation,\n selfParticipantId: parsedSelves.current.selfId,\n }\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n\n if (parsedSelves.updates.isRolesChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,\n {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}\n );\n }\n\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.hasUserEnteredLobby) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.hasUserBeenAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @param {Boolean} isMainLocus\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string, isMainLocus = true) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n {url, isMainLocus}\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * check the locus is main session's one or not, if is main session's, update main session cache\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusCache(locus: any) {\n const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);\n if (isMainSessionDTO) {\n this.updateMainSessionLocusCache(locus);\n }\n }\n\n /**\n * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)\n * if join breakout from main session, main session is not active for the attendee and remove main session locus cache\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this, newLocus);\n\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n const isMainSessionDTO =\n this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);\n\n if (isMainSessionDTO) {\n const isActive =\n [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(\n this.fullState?.state\n ) && !this.mainSessionLocusCache?.self?.removed;\n\n if (!isActive) {\n this.clearMainSessionLocusCache();\n }\n }\n\n return newLocus;\n }\n\n /**\n * merge participants by participant id\n * @param {Array} participants\n * @param {Array} sourceParticipants\n * @returns {Array} merged participants\n * @memberof LocusInfo\n */\n // eslint-disable-next-line class-methods-use-this\n mergeParticipants(participants, sourceParticipants) {\n if (!sourceParticipants || !sourceParticipants.length) return participants;\n if (!participants || !participants.length) {\n return sourceParticipants;\n }\n sourceParticipants.forEach((participant) => {\n const existIndex = participants.findIndex((p) => p.id === participant.id);\n if (existIndex > -1) {\n participants.splice(existIndex, 1, participant);\n } else {\n participants.push(participant);\n }\n });\n\n return participants;\n }\n\n /**\n * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout\n * @param {Object} mainLocus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMainSessionLocusCache(mainLocus: any) {\n if (!mainLocus) {\n return;\n }\n const locusClone = cloneDeep(mainLocus);\n if (this.mainSessionLocusCache) {\n // shallow merge and do special merge for participants\n assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {\n if (key === 'participants') {\n return this.mergeParticipants(objValue, srcValue);\n }\n\n return srcValue || objValue;\n });\n } else {\n this.mainSessionLocusCache = locusClone;\n }\n }\n\n /**\n * clear main session cache\n * @returns {undefined}\n * @memberof LocusInfo\n */\n clearMainSessionLocusCache() {\n this.mainSessionLocusCache = null;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,YAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAmBA,IAAAK,UAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,UAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,UAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,UAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,cAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,kBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,iBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,OAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,QAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,WAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,gBAAA,GAAAC,uBAAA,CAAAhB,OAAA;AAMA,IAAAiB,MAAA,GAAAjB,OAAA;AACA,IAAAkB,MAAA,GAAAlB,OAAA;AAEA,IAAAmB,KAAA,GAAAjB,sBAAA,CAAAF,OAAA;AAA4C,SAAAgB,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAN,uBAAA,YAAAA,wBAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,gBAAAW,OAAA,CAAAX,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAM,GAAA,CAAAZ,CAAA,UAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,GAAAM,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,cAAAO,GAAA,IAAAf,CAAA,gBAAAe,GAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,GAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,sBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,GAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,GAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,GAAA,IAAAf,CAAA,CAAAe,GAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,WAAAnB,CAAA,EAAAK,CAAA,EAAAN,CAAA,WAAAM,CAAA,OAAAe,gBAAA,CAAAX,OAAA,EAAAJ,CAAA,OAAAgB,2BAAA,CAAAZ,OAAA,EAAAT,CAAA,EAAAsB,yBAAA,KAAAC,kBAAA,CAAAlB,CAAA,EAAAN,CAAA,YAAAqB,gBAAA,CAAAX,OAAA,EAAAT,CAAA,EAAAwB,WAAA,IAAAnB,CAAA,CAAAoB,KAAA,CAAAzB,CAAA,EAAAD,CAAA;AAAA,SAAAuB,0BAAA,cAAAtB,CAAA,IAAA0B,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAZ,IAAA,CAAAO,kBAAA,CAAAG,OAAA,iCAAA1B,CAAA,aAAAsB,yBAAA,YAAAA,0BAAA,aAAAtB,CAAA;AAAA,SAAA6B,QAAA9B,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAA8B,aAAA,CAAA/B,CAAA,OAAAgC,6BAAA,QAAA1B,CAAA,GAAA0B,6BAAA,CAAAhC,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAA2B,MAAA,WAAA9B,CAAA,WAAAgB,gCAAA,CAAAnB,CAAA,EAAAG,CAAA,EAAA+B,UAAA,OAAAjC,CAAA,CAAAkC,IAAA,CAAAT,KAAA,CAAAzB,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAAmC,cAAApC,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAkC,SAAA,CAAAC,MAAA,EAAAnC,CAAA,UAAAF,CAAA,WAAAoC,SAAA,CAAAlC,CAAA,IAAAkC,SAAA,CAAAlC,CAAA,QAAAA,CAAA,OAAA2B,OAAA,CAAAS,MAAA,CAAAtC,CAAA,OAAAuC,OAAA,WAAArC,CAAA,QAAAsC,gBAAA,CAAA/B,OAAA,EAAAV,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAuC,iCAAA,GAAAC,wBAAA,CAAA3C,CAAA,EAAA0C,iCAAA,CAAAzC,CAAA,KAAA6B,OAAA,CAAAS,MAAA,CAAAtC,CAAA,GAAAuC,OAAA,WAAArC,CAAA,IAAAe,sBAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAgB,gCAAA,CAAAlB,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AAAA,SAAA4C,2BAAAzC,CAAA,EAAAH,CAAA,QAAAC,CAAA,yBAAA4C,OAAA,IAAA1C,CAAA,CAAA2C,gBAAA,KAAA3C,CAAA,qBAAAF,CAAA,QAAA8C,eAAA,CAAA5C,CAAA,MAAAF,CAAA,GAAA+C,2BAAA,CAAA7C,CAAA,MAAAH,CAAA,IAAAG,CAAA,uBAAAA,CAAA,CAAAmC,MAAA,IAAArC,CAAA,KAAAE,CAAA,GAAAF,CAAA,OAAAgD,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAA9C,CAAA,WAAAA,EAAA,WAAA6C,EAAA,IAAA9C,CAAA,CAAAmC,MAAA,KAAAc,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAAlD,CAAA,CAAA8C,EAAA,UAAAjD,CAAA,WAAAA,EAAAG,CAAA,UAAAA,CAAA,KAAAK,CAAA,EAAA0C,CAAA,gBAAAI,SAAA,iJAAAhD,CAAA,EAAAiD,CAAA,OAAAC,CAAA,gBAAAL,CAAA,WAAAA,EAAA,IAAAlD,CAAA,GAAAA,CAAA,CAAAgB,IAAA,CAAAd,CAAA,MAAAC,CAAA,WAAAA,EAAA,QAAAD,CAAA,GAAAF,CAAA,CAAAwD,IAAA,WAAAF,CAAA,GAAApD,CAAA,CAAAiD,IAAA,EAAAjD,CAAA,KAAAH,CAAA,WAAAA,EAAAG,CAAA,IAAAqD,CAAA,OAAAlD,CAAA,GAAAH,CAAA,KAAAK,CAAA,WAAAA,EAAA,UAAA+C,CAAA,YAAAtD,CAAA,CAAAyD,MAAA,IAAAzD,CAAA,CAAAyD,MAAA,oBAAAF,CAAA,QAAAlD,CAAA;AAAA,SAAA0C,4BAAA7C,CAAA,EAAAoD,CAAA,QAAApD,CAAA,2BAAAA,CAAA,SAAAwD,iBAAA,CAAAxD,CAAA,EAAAoD,CAAA,OAAAtD,CAAA,MAAA2D,QAAA,CAAA3C,IAAA,CAAAd,CAAA,EAAA0D,KAAA,6BAAA5D,CAAA,IAAAE,CAAA,CAAAsB,WAAA,KAAAxB,CAAA,GAAAE,CAAA,CAAAsB,WAAA,CAAAqC,IAAA,aAAA7D,CAAA,cAAAA,CAAA,GAAA8D,WAAA,CAAA5D,CAAA,oBAAAF,CAAA,+CAAA+D,IAAA,CAAA/D,CAAA,IAAA0D,iBAAA,CAAAxD,CAAA,EAAAoD,CAAA;AAAA,SAAAI,kBAAAxD,CAAA,EAAAoD,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAApD,CAAA,CAAAmC,MAAA,MAAAiB,CAAA,GAAApD,CAAA,CAAAmC,MAAA,YAAAtC,CAAA,MAAAI,CAAA,GAAA6D,KAAA,CAAAV,CAAA,GAAAvD,CAAA,GAAAuD,CAAA,EAAAvD,CAAA,IAAAI,CAAA,CAAAJ,CAAA,IAAAG,CAAA,CAAAH,CAAA,UAAAI,CAAA;AAW5C;AACA;AACA,IAAM8D,oBAAoB,GAAG,CAC3B,UAAU,EACV,WAAW,EACX,cAAc,EACd,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,KAAK,EACL,QAAQ,CAAE;AAAA,CACX;AAQa;;AAEd,IAAMC,4BAA4B,GAAG;EACnCC,SAAS,EAAE,WAAW;EACtBC,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAU;AAUV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,sBAAsBA,CAACC,IAAS,EAAEC,SAAiB,EAA4B;EACtF,IAAID,IAAI,EAAE;IAAA,IAAAE,gBAAA;IACR,IAAMC,MAAM,GAAGC,aAAY,CAACC,aAAa,CAAC;MAACL,IAAI,EAAJA;IAAI,CAAC,EAAEC,SAAS,CAAC;IAE5D,IAAI,CAAAE,MAAM,aAANA,MAAM,wBAAAD,gBAAA,GAANC,MAAM,CAAEG,QAAQ,cAAAJ,gBAAA,uBAAhBA,gBAAA,CAAkBpC,MAAM,IAAG,CAAC,EAAE;MAChC,OAAOqC,MAAM,CAACG,QAAQ,CAAC,CAAC,CAAC;IAC3B;EACF;EAEA,OAAOC,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,+BAA+BA,CACtCC,iBAAoC,EACpCC,QAAgB,EACX;EACL,SAAAC,EAAA,MAAAC,IAAA,GAAsB,IAAAC,OAAA,CAAA3E,OAAA,EAAcuE,iBAAiB,CAACK,MAAM,CAAC,CAAC,CAAC,EAAAH,EAAA,GAAAC,IAAA,CAAA9C,MAAA,EAAA6C,EAAA,IAAW;IAAA,IAAAI,kBAAA,EAAAC,qBAAA;IAArE,IAAMC,OAAO,GAAAL,IAAA,CAAAD,EAAA;IAChB,IAAIM,OAAO,aAAPA,OAAO,gBAAAF,kBAAA,GAAPE,OAAO,CAAEC,SAAS,cAAAH,kBAAA,gBAAAC,qBAAA,GAAlBD,kBAAA,CAAoBI,eAAe,cAAAH,qBAAA,eAAnCA,qBAAA,CAAqC5E,GAAG,CAACsE,QAAQ,CAAC,EAAE;MACtD,OAAOO,OAAO;IAChB;EACF;EAEA,OAAOV,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASa,6BAA6BA,CAC3CC,OAAwB,EACxBZ,iBAAoC,EACpCR,SAAiB,EACZ;EAAA,IAAAqB,qBAAA,EAAAC,sBAAA;EACL,IAAIC,YAAY,GAAGhB,+BAA+B,CAACC,iBAAiB,EAAEY,OAAO,CAACX,QAAQ,CAAC;EAEvF,IAAIc,YAAY,EAAE;IAChB,OAAOA,YAAY;EACrB;;EAEA;EACA;EACA,IAAMxB,IAAI,IAAAsB,qBAAA,GAAGD,OAAO,CAACI,kBAAkB,cAAAH,qBAAA,wBAAAC,sBAAA,GAA1BD,qBAAA,CAA4BI,IAAI,CAAC,UAACC,EAAE;IAAA,OAAK,IAAAC,aAAM,EAACD,EAAE,CAAC;EAAA,EAAC,cAAAJ,sBAAA,uBAApDA,sBAAA,CAAsDM,IAAI;EACvE,IAAMvB,QAAQ,GAAGP,sBAAsB,CAACC,IAAI,EAAEC,SAAS,CAAC;EAExD,IAAIK,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEI,QAAQ,EAAE;IACtBc,YAAY,GAAGhB,+BAA+B,CAACC,iBAAiB,EAAEH,QAAQ,CAACI,QAAQ,CAAC;IAEpF,OAAOc,YAAY;EACrB;EAEA,OAAOjB,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASuB,8BAA8BA,CAACT,OAAwB,EAGrE;EACA,IAAMU,KAAe,GAAG;IACtBC,YAAY,EAAE,EAAE;IAChBC,GAAG,EAAEZ,OAAO,CAACX;EACf,CAAC;EACD,IAAIwB,QAA8B;EAElC,IAAI,CAACb,OAAO,CAACI,kBAAkB,EAAE;IAC/B,OAAO;MAACM,KAAK,EAALA,KAAK;MAAEG,QAAQ,EAARA;IAAQ,CAAC;EAC1B;EAAC,IAAAC,SAAA,GAAA/D,0BAAA,CAEqBiD,OAAO,CAACI,kBAAkB;IAAAW,KAAA;EAAA;IAAA,IAAAC,KAAA,YAAAA,MAAA,EAAE;MAAA,IAAvCC,OAAO,GAAAF,KAAA,CAAAvD,KAAA;MAChB,IAAI,CAACyD,OAAO,CAACT,IAAI,EAAE;QACjB;QAAA;MAEF;MAEA,IAAMU,IAAI,GAAGD,OAAO,CAACE,MAAM,CAACC,SAAS,CAACF,IAAI,CAACG,WAAW,CAAC,CAAC;MAExD,QAAQH,IAAI;QACV,KAAKI,iBAAU,CAACZ,KAAK;UAAE;YACrB;YACA,IAAMa,eAAe,GAAAhF,aAAA,KAAO0E,OAAO,CAACT,IAAI,CAAC;YAEzC,IAAAhB,OAAA,CAAA3E,OAAA,EAAc2G,8BAAuB,CAAC,CAAC7E,OAAO,CAAC,UAAC8E,WAAW,EAAK;cAC9D,OAAOF,eAAe,CAACE,WAAW,CAAC;YACrC,CAAC,CAAC;YAEF,IAAAC,OAAA,CAAA7G,OAAA,EAAc6F,KAAK,EAAEa,eAAe,CAAC;YACrC;UACF;QACA,KAAKD,iBAAU,CAACK,WAAW;UACzBjB,KAAK,CAACC,YAAY,CAACrE,IAAI,CAAC2E,OAAO,CAACT,IAAI,CAAC;UACrC;QACF,KAAKc,iBAAU,CAACM,UAAU;UACxB,IAAI,CAAClB,KAAK,CAACmB,WAAW,EAAE;YACtBnB,KAAK,CAACmB,WAAW,GAAG,EAAE;UACxB;UACAnB,KAAK,CAACmB,WAAW,CAACvF,IAAI,CAAC2E,OAAO,CAACT,IAAI,CAAC;UACpC;QACF,KAAKc,iBAAU,CAACQ,WAAW;UACzB,IAAI,CAACpB,KAAK,CAACqB,YAAY,EAAE;YACvBrB,KAAK,CAACqB,YAAY,GAAG,EAAE;UACzB;UACArB,KAAK,CAACqB,YAAY,CAACzF,IAAI,CAAC2E,OAAO,CAACT,IAAI,CAAC;UACrC;QACF,KAAKc,iBAAU,CAACU,OAAO;UACrB,IAAI,CAACtB,KAAK,CAACuB,QAAQ,EAAE;YACnBvB,KAAK,CAACuB,QAAQ,GAAG,CAAC,CAAC;UACrB;UACA,IAAAP,OAAA,CAAA7G,OAAA,EAAc6F,KAAK,CAACuB,QAAQ,EAAEhB,OAAO,CAACT,IAAI,CAAC;UAC3C;QACF,KAAKc,iBAAU,CAACY,KAAK;QACrB,KAAKZ,iBAAU,CAACa,IAAI;QACpB,KAAKb,iBAAU,CAACc,SAAS;QACzB,KAAKd,iBAAU,CAAC3C,IAAI;UAAE;YACpB,IAAM8C,WAAW,GAAGD,8BAAuB,CAACN,IAAI,CAAC;YACjDR,KAAK,CAACe,WAAW,CAAC,GAAGR,OAAO,CAACT,IAAI;YACjC;UACF;QACA,KAAKc,iBAAU,CAACT,QAAQ;UACtB;UACAA,QAAQ,GAAAtE,aAAA,CAAAA,aAAA,KAAO0E,OAAO,CAACT,IAAI;YAAEW,MAAM,EAAEF,OAAO,CAACE;UAAM,EAAa;UAChE;QACF;UACE;MACJ;IACF,CAAC;IAxDD,KAAAL,SAAA,CAAAxD,CAAA,MAAAyD,KAAA,GAAAD,SAAA,CAAAvG,CAAA,IAAAgD,IAAA;MAAA,IAAAyD,KAAA,IAGI;IAAS;EAqDZ,SAAAqB,GAAA;IAAAvB,SAAA,CAAA3G,CAAA,CAAAkI,GAAA;EAAA;IAAAvB,SAAA,CAAAnG,CAAA;EAAA;EAED,OAAO;IAAC+F,KAAK,EAALA,KAAK;IAAEG,QAAQ,EAARA;EAAQ,CAAC;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA,IAMqByB,SAAS,GAAAC,OAAA,CAAA1H,OAAA,0BAAA2H,YAAA;EA+B5B;AACF;AACA;AACA;AACA;AACA;AACA;EACE,SAAAF,UAAYG,aAAa,EAAEC,KAAK,EAAEC,SAAS,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAAhI,OAAA,QAAAyH,SAAA;IAC3CM,KAAA,GAAArH,UAAA,OAAA+G,SAAA;IAAQ,IAAA1F,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA;IAX2C;IAAA,IAAAhG,gBAAA,CAAA/B,OAAA,EAAA+H,KAAA,4CACZ,CAAC;IAWxCA,KAAA,CAAKE,WAAW,GAAG;MACjBC,MAAM,EAAE;IACV,CAAC;IACDH,KAAA,CAAKF,KAAK,GAAGA,KAAK;IAClBE,KAAA,CAAKI,UAAU,GAAG,KAAK;IACvBJ,KAAA,CAAKK,qBAAqB,GAAG,CAAC,CAAC;IAC/BL,KAAA,CAAKD,SAAS,GAAGA,SAAS;IAC1BC,KAAA,CAAKH,aAAa,GAAGA,aAAa;IAClCG,KAAA,CAAKM,WAAW,GAAG,IAAIC,eAAgB,CAAC,CAAC;IACzCP,KAAA,CAAK9C,eAAe,GAAG,IAAAsD,IAAA,CAAAvI,OAAA,CAAQ,CAAC;IAChC+H,KAAA,CAAKS,8BAA8B,GAAG,IAAAD,IAAA,CAAAvI,OAAA,CAAQ,CAAC;IAAC,OAAA+H,KAAA;EAClD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE,IAAAU,UAAA,CAAAzI,OAAA,EAAAyH,SAAA,EAAAE,YAAA;EAAA,WAAAe,aAAA,CAAA1I,OAAA,EAAAyH,SAAA;IAAAkB,GAAA;IAAAhG,KAAA,EASA,SAAQiG,WAAWA,CAAC7D,OAAY,EAAE8D,iBAA0B,EAAEhD,KAAU,EAAE;MAAA,IAAAiD,qBAAA;QAAAC,MAAA;MACxE,IAAIhD,GAAG;MACP,IAAIiD,OAAO,GAAG,KAAK;MACnB,IAAIC,gBAAgB,GAAG,KAAK;MAE5B,IAAIJ,iBAAiB,EAAE;QACrB;QACA;QACA;QACA;QACA9C,GAAG,GAAGF,KAAK,CAACE,GAAG;MACjB,CAAC,MAAM,KAAA+C,qBAAA,GAAI,IAAI,CAACT,WAAW,CAACa,WAAW,cAAAJ,qBAAA,eAA5BA,qBAAA,CAA8BK,OAAO,EAAE;QAChDpD,GAAG,GAAG,IAAI,CAACsC,WAAW,CAACa,WAAW,CAACC,OAAO;QAC1CH,OAAO,GAAG,IAAI;MAChB,CAAC,MAAM;QACLjD,GAAG,GAAGhB,OAAO,CAACP,QAAQ;MACxB;MAEA4E,oBAAW,CAACC,MAAM,CAAC/B,IAAI,+DAAAgC,MAAA,CAEnBN,OAAO,GAAG,OAAO,GAAG,MAAM,UAE9B,CAAC;;MAED;MACAjE,OAAO,CAACwE,cAAc,CACnBC,WAAW,CAAC;QAACzD,GAAG,EAAHA;MAAG,CAAC,CAAC,CAClB0D,KAAK,CAAC,UAACnK,CAAC,EAAK;QACZ,IAAI0J,OAAO,EAAE;UACXI,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,+EACF,CAAC;UAEDoC,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACC,uBAAuB,EAAE;YACvEC,aAAa,EAAE/E,OAAO,CAAC+E,aAAa;YACpC/D,GAAG,EAAHA,GAAG;YACHgE,MAAM,EAAEzK,CAAC,CAAC6F,OAAO;YACjB6E,SAAS,EAAE1K,CAAC,CAAC8D,IAAI;YACjB6G,KAAK,EAAE3K,CAAC,CAAC2K,KAAK;YACdC,IAAI,EAAE5K,CAAC,CAAC4K;UACV,CAAC,CAAC;UAEFlB,OAAO,GAAG,KAAK;;UAEf;UACA,IAAI1J,CAAC,CAAC6K,UAAU,KAAK,GAAG,EAAE;YACxB,OAAOpF,OAAO,CAACwE,cAAc,CAACC,WAAW,CAAC;cAACzD,GAAG,EAAEhB,OAAO,CAACP;YAAQ,CAAC,CAAC,CAACiF,KAAK,CAAC,UAACjC,GAAG,EAAK;cAChF4B,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,oFACF,CAAC;cACDyB,MAAI,CAAClB,KAAK,CAACuC,QAAQ,CAACC,OAAO,CAACtF,OAAO,EAAEuF,iCAAsB,CAACC,qBAAqB,CAAC;cAClFtB,gBAAgB,GAAG,IAAI;cACvB,MAAMzB,GAAG;YACX,CAAC,CAAC;UACJ;UACA4B,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,6GACF,CAAC;QACH,CAAC,MAAM;UACL8B,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,oFACF,CAAC;QACH;QACAyB,MAAI,CAAClB,KAAK,CAACuC,QAAQ,CAACC,OAAO,CAACtF,OAAO,EAAEuF,iCAAsB,CAACC,qBAAqB,CAAC;QAClFtB,gBAAgB,GAAG,IAAI;QACvB,MAAM3J,CAAC;MACT,CAAC,CAAC,CACDkL,IAAI,CAAC,UAACC,GAAG,EAAK;QACb,IAAI,IAAAC,eAAO,EAACD,GAAG,CAACE,IAAI,CAAC,EAAE;UACrB,IAAI3B,OAAO,EAAE;YACXI,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,wGACF,CAAC;UACH,CAAC,MAAM;YACL8B,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,iFACF,CAAC;UACH;UAEA;QACF;QAEA,IAAI0B,OAAO,EAAE;UACX,IAAIyB,GAAG,CAACE,IAAI,CAACC,YAAY,EAAE;YACzB7F,OAAO,CAACC,SAAS,CAAC6F,gBAAgB,CAACJ,GAAG,CAACE,IAAI,EAAE5F,OAAO,CAAC;YAErD;UACF;UACA;UACAqE,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,uEACF,CAAC;QACH;QACAvC,OAAO,CAACC,SAAS,CAAC8F,WAAW,CAAC,oBAAoB,EAAEL,GAAG,CAACE,IAAI,CAAC;MAC/D,CAAC,CAAC,CACDlB,KAAK,CAAC,UAACnK,CAAC,EAAK;QACZ8J,oBAAW,CAACC,MAAM,CAAC/B,IAAI,iJAAAgC,MAAA,CAC2HhK,CAAC,CAAC4D,QAAQ,CAAC,CAAC,MAC9J,CAAC;QAEDwG,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACmB,0BAA0B,EAAE;UAC1EjB,aAAa,EAAE/E,OAAO,CAAC+E,aAAa;UACpC/D,GAAG,EAAHA,GAAG;UACHgE,MAAM,EAAEzK,CAAC,CAAC6F,OAAO;UACjB6E,SAAS,EAAE1K,CAAC,CAAC8D,IAAI;UACjB6G,KAAK,EAAE3K,CAAC,CAAC2K,KAAK;UACdC,IAAI,EAAE5K,CAAC,CAAC4K;QACV,CAAC,CAAC;MACJ,CAAC,CAAC,CACDc,OAAO,CAAC,YAAM;QACb,IAAI,CAAC/B,gBAAgB,EAAE;UACrB;UACA;UACAF,MAAI,CAACV,WAAW,CAAC4C,MAAM,CAAC,CAAC;QAC3B;MACF,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAtC,GAAA;IAAAhG,KAAA,EAOA,SAAAuI,mBAAmBA,CAACC,MAAc,EAAEtF,KAAU,EAAEd,OAAY,EAAE;MAC5D,IAAAqG,qBAAA,GAAqE9C,eAAgB,CAAC+C,IAAI;QAAnFC,MAAM,GAAAF,qBAAA,CAANE,MAAM;QAAEC,WAAW,GAAAH,qBAAA,CAAXG,WAAW;QAAEC,YAAY,GAAAJ,qBAAA,CAAZI,YAAY;QAAEC,IAAI,GAAAL,qBAAA,CAAJK,IAAI;QAAEC,iBAAiB,GAAAN,qBAAA,CAAjBM,iBAAiB;MACjE,IAAM7C,iBAAiB,GAAGsC,MAAM,KAAKO,iBAAiB;MAEtD,QAAQP,MAAM;QACZ,KAAKK,YAAY;UACfzG,OAAO,CAACC,SAAS,CAAC2G,YAAY,CAAC9F,KAAK,CAAC;UACrC;QACF,KAAK0F,WAAW;QAChB,KAAKE,IAAI;UACP;UACA;QACF,KAAKH,MAAM;QACX,KAAKI,iBAAiB;UACpB,IAAI,CAAC9C,WAAW,CAAC7D,OAAO,EAAE8D,iBAAiB,EAAEhD,KAAK,CAAC;UACnD;QACF;UACEuD,oBAAW,CAACC,MAAM,CAAC/B,IAAI,yEAAAgC,MAAA,CACmD6B,MAAM,CAChF,CAAC;MACL;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAxC,GAAA;IAAAhG,KAAA,EAQA,SAAAkI,gBAAgBA,CAAChF,KAAU,EAAEd,OAAY,EAAE;MAAA,IAAA6G,MAAA;MACzC;MACA,IAAI,CAAC,IAAI,CAACvD,WAAW,CAACwD,aAAa,EAAE;QACnC;QACA;QACA,IAAI,CAACxD,WAAW,CAACwD,aAAa,GAAG,UAACV,MAAM,EAAEW,UAAU,EAAK;UACvDF,MAAI,CAACV,mBAAmB,CAACC,MAAM,EAAEW,UAAU,EAAE/G,OAAO,CAAC;QACvD,CAAC;MACH;MACA;MACA,IAAI,CAACsD,WAAW,CAAC0D,YAAY,CAAClG,KAAK,CAAC;IACtC;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA8C,GAAA;IAAAhG,KAAA,EAKA,SAAAqJ,IAAIA,CAAA,EAAkB;MAAA,IAAjBnG,KAAU,GAAAlE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA0C,SAAA,GAAA1C,SAAA,MAAG,CAAC,CAAC;MAClB,IAAI,CAACsK,OAAO,GAAGpG,KAAK,CAACoG,OAAO,IAAI,IAAI;MACpC,IAAI,CAACC,gBAAgB,GAAGrG,KAAK,CAACd,OAAO,IAAI,IAAI;MAC7C,IAAI,CAACX,QAAQ,GAAGyB,KAAK,CAACzB,QAAQ,IAAI,IAAI;MACtC,IAAI,CAAC+H,MAAM,GAAGtG,KAAK,CAACsG,MAAM,IAAI,IAAI;MAClC,IAAI,CAACvB,YAAY,GAAG/E,KAAK,CAAC+E,YAAY,IAAI,IAAI;MAC9C,IAAI,CAACwB,QAAQ,GAAGvG,KAAK,CAACuG,QAAQ,IAAI,IAAI;MACtC,IAAI,CAACtG,YAAY,GAAGD,KAAK,CAACC,YAAY,IAAI,IAAI;;MAE9C;AACJ;AACA;AACA;AACA;AACA;AACA;;MAEI,IAAI,CAACuG,gBAAgB,CAACxG,KAAK,CAAC;MAC5B;MACA;MACA,IAAI,CAACyG,kBAAkB,CAACzG,KAAK,CAACC,YAAY,EAAE,EAAE,CAAC;MAC/C;MACA,IAAI,CAACyG,qBAAqB,CAAC1G,KAAK,CAAC2G,eAAe,EAAE3G,KAAK,CAACyB,IAAI,CAAC;MAC7D,IAAI,CAACmF,cAAc,CAAC5G,KAAK,CAACuB,QAAQ,EAAEvB,KAAK,CAAC/B,IAAI,CAAC;MAC/C,IAAI,CAAC4I,cAAc,CAAC7G,KAAK,CAACE,GAAG,EAAE4G,sBAAa,CAACC,gBAAgB,CAAC/G,KAAK,CAAC,CAAC;MACrE,IAAI,CAACgH,eAAe,CAAChH,KAAK,CAAC0B,SAAS,CAAC;MACrC,IAAI,CAACuF,iBAAiB,CAACjH,KAAK,CAACyB,IAAI,CAAC;MAClC,IAAI,CAACyF,kBAAkB,CAAClH,KAAK,CAACqB,YAAY,CAAC;MAC3C;MACA,IAAI,CAAC8F,UAAU,CAACnH,KAAK,CAAC/B,IAAI,CAAC;MAC3B,IAAI,CAACmJ,cAAc,CAACpH,KAAK,CAACqH,IAAI,CAAC;MAC/B,IAAI,CAACC,iBAAiB,CAACtH,KAAK,CAACmB,WAAW,CAAC;MACzC,IAAI,CAACoG,WAAW,CAACvH,KAAK,CAACwB,KAAK,CAAC;IAC/B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAsB,GAAA;IAAAhG,KAAA,EASA,SAAQ0K,oBAAoBA,CAAAC,IAAA,EAaT;MAAA,IAAAC,qBAAA;MAAA,IAZjB/I,QAAQ,GAAA8I,IAAA,CAAR9I,QAAQ;QACRgJ,YAAY,GAAAF,IAAA,CAAZE,YAAY;QACZxH,QAAQ,GAAAsH,IAAA,CAARtH,QAAQ;QACRyH,UAAU,GAAAH,IAAA,CAAVG,UAAU;MAUV,IAAMC,MAAM,GAAG,IAAIC,wBAAc,CAAC;QAChCH,YAAY,EAAZA,YAAY;QACZxH,QAAQ,EAARA,QAAQ;QACR4H,YAAY,EAAE,IAAI,CAAC/F,KAAK,CAACgG,OAAO,CAACC,IAAI,CAAC,IAAI,CAACjG,KAAK,CAAC;QACjDkG,uBAAuB,EAAE,IAAI,CAACC,kBAAkB,CAACF,IAAI,CAAC,IAAI,EAAEtJ,QAAQ,CAAC;QACrEyJ,OAAO,QAAA3E,MAAA,CAAQ9E,QAAQ,CAAC0J,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAC,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE;QAC1DC,gBAAgB,GAAAd,qBAAA,GAAE,IAAI,CAAC1F,KAAK,CAACyG,MAAM,CAAClE,QAAQ,CAACvE,KAAK,cAAA0H,qBAAA,uBAAhCA,qBAAA,CAAkCc;MACtD,CAAC,CAAC;;MAEF;MACA;MAAA,IAAAE,UAAA,GAAArM,0BAAA,CACgD,IAAI,CAAC+C,eAAe;QAAAuJ,MAAA;MAAA;QAApE,KAAAD,UAAA,CAAA9L,CAAA,MAAA+L,MAAA,GAAAD,UAAA,CAAA7O,CAAA,IAAAgD,IAAA,GAAsE;UAAA,IAAA+L,YAAA,OAAAC,eAAA,CAAA1O,OAAA,EAAAwO,MAAA,CAAA7L,KAAA;YAA1DgM,gBAAgB,GAAAF,YAAA;YAAEG,aAAa,GAAAH,YAAA;UACzC,IAAIG,aAAa,CAAClB,MAAM,CAACmB,KAAK,KAAK,SAAS,EAAE;YAC5CD,aAAa,CAAClB,MAAM,CAACoB,IAAI,CAAC,CAAC;YAC3B,IAAIrB,UAAU,EAAE;cACdmB,aAAa,CAACnB,UAAU,GAAGA,UAAU;YACvC,CAAC,MAAM;cACLrE,oBAAW,CAACC,MAAM,CAAC0F,IAAI,oHAAAzF,MAAA,CAC8F9E,QAAQ,kBAAA8E,MAAA,CAAeqF,gBAAgB,CAC5J,CAAC;YACH;UACF;QACF;MAAC,SAAAnH,GAAA;QAAA+G,UAAA,CAAAjP,CAAA,CAAAkI,GAAA;MAAA;QAAA+G,UAAA,CAAAzO,CAAA;MAAA;MAED,IAAI,CAACmF,eAAe,CAAC7E,GAAG,CAACoE,QAAQ,EAAE;QAACkJ,MAAM,EAANA,MAAM;QAAEsB,uBAAuB,EAAE;MAAK,CAAC,CAAC;MAC5E,IAAI,CAACxG,8BAA8B,CAACyG,KAAK,CAAC,CAAC;MAE3C,OAAOvB,MAAM;IACf;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA/E,GAAA;IAAAhG,KAAA;MAAA,IAAAuM,aAAA,OAAAC,kBAAA,CAAAnP,OAAA,eAAAoP,YAAA,CAAApP,OAAA,CAAAqP,IAAA,CAKA,SAAAC,QACE3J,IAeK;QAAA,IAAA4J,WAAA,EAAAC,iBAAA,EAAAC,qBAAA,EAAAC,sBAAA;QAAA,IAAAC,qBAAA,EAAAC,oBAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,eAAA,EAAAC,EAAA;QAAA,OAAAZ,YAAA,CAAApP,OAAA,CAAAiQ,IAAA,WAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAnN,IAAA;YAAA;cAAAiN,EAAA,GAEGrK,IAAI,CAACyK,OAAO;cAAAF,QAAA,CAAAnN,IAAA,GAAAiN,EAAA,KACb,eAAe,OAAAA,EAAA,KA2Cf,eAAe,OAAAA,EAAA,KAIf,mBAAmB;cAAA;YAAA;cAAA,KA9ClBrK,IAAI,CAAC0K,eAAe;gBAAAH,QAAA,CAAAnN,IAAA;gBAAA;cAAA;cACtB;cACA;cACM8M,cAAc,IAAAF,qBAAA,GAAGhK,IAAI,CAAC0K,eAAe,CAAC9K,kBAAkB,cAAAoK,qBAAA,uBAAvCA,qBAAA,CAAyCnK,IAAI,CAAC,UAACC,EAAE;gBAAA,OACtE,IAAA6K,iBAAU,EAAC7K,EAAE,CAAC;cAAA,CAChB,CAAC;cAAA,IAEIoK,cAAc,aAAdA,cAAc,gBAAAD,oBAAA,GAAdC,cAAc,CAAElK,IAAI,cAAAiK,oBAAA,eAApBA,oBAAA,CAAsBW,eAAe;gBAAAL,QAAA,CAAAnN,IAAA;gBAAA;cAAA;cACxC;cACA;cACAqG,oBAAW,CAACC,MAAM,CAAC/B,IAAI,qIAEvB,CAAC;;cAED;cAAA,MACM,IAAIkJ,KAAK,CAAC,gEAAgE,CAAC;YAAA;cAGnFpH,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,wEACF,CAAC;cACD;cACMwI,cAAc,GAAG,IAAI,CAACzC,oBAAoB,CAAC;gBAC/C7I,QAAQ,EAAEmB,IAAI,CAAC0K,eAAe,CAAC7L,QAAQ;gBACvCgJ,YAAY,EAAE;kBACZ3H,KAAK,EAAE,IAAI;kBACX4K,QAAQ,EAAE9K,IAAI,CAAC0K,eAAe,CAACI;gBACjC,CAAC;gBACDzK,QAAQ,EAAE;kBACRM,MAAM,EAAEuJ,cAAc,CAACvJ,MAAM;kBAC7BiK,eAAe,EAAEV,cAAc,CAAClK,IAAI,CAAC4K;gBACvC;cACF,CAAC,CAAC,EAEF;cAAAL,QAAA,CAAAnN,IAAA;cAAA,OACM+M,cAAc,CAACY,qBAAqB,CAAC/K,IAAI,CAAC0K,eAAe,CAAC;YAAA;cAAAH,QAAA,CAAAnN,IAAA;cAAA;YAAA;cAEhE;cACA,IAAI,CAACsJ,gBAAgB,CAAC1G,IAAI,CAACE,KAAK,CAAC;cACjC,IAAI,CAACiF,WAAW,CAAC,uBAAuB,EAAEnF,IAAI,CAACE,KAAK,EAAExB,SAAS,CAAC;YAAC;cAAA,OAAA6L,QAAA,CAAAS,MAAA;YAAA;cAInE,IAAI,CAACtE,gBAAgB,CAAC1G,IAAI,CAACE,KAAK,CAAC;cACjC,IAAI,CAACiF,WAAW,CAAC,eAAe,EAAEnF,IAAI,CAACE,KAAK,EAAExB,SAAS,EAAEsB,IAAI,CAAC8K,QAAQ,EAAE9K,IAAI,CAACK,QAAQ,CAAC;cAAC,OAAAkK,QAAA,CAAAS,MAAA;YAAA;cAAA,OAAApB,WAAA,GAGnF5J,IAAI,CAACE,KAAK,cAAA0J,WAAA,gBAAAC,iBAAA,GAAVD,WAAA,CAAYlI,KAAK,cAAAmI,iBAAA,gBAAAC,qBAAA,GAAjBD,iBAAA,CAAmBoB,SAAS,cAAAnB,qBAAA,gBAAAC,sBAAA,GAA5BD,qBAAA,CAA8Bc,eAAe,cAAAb,sBAAA,eAA7CA,sBAAA,CAA+C3J,GAAG;gBAAAmK,QAAA,CAAAnN,IAAA;gBAAA;cAAA;cACpDqG,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,kFACF,CAAC;cACD;cACMwI,eAAc,GAAG,IAAI,CAACzC,oBAAoB,CAAC;gBAC/C7I,QAAQ,EAAEmB,IAAI,CAACE,KAAK,CAACE,GAAG;gBACxByH,YAAY,EAAE;kBACZ3H,KAAK,EAAE,IAAI;kBACX4K,QAAQ,EAAE,EAAE,CAAE;gBAChB,CAAC;gBACDzK,QAAQ,EAAE,IAAI,CAAE;cAClB,CAAC,CAAC,EAEF;cAAAkK,QAAA,CAAAnN,IAAA;cAAA,OACM+M,eAAc,CAACe,6BAA6B,CAAClL,IAAI,CAACE,KAAK,CAAC;YAAA;cAAAqK,QAAA,CAAAnN,IAAA;cAAA;YAAA;cAE9D;cACA,IAAI,CAACsJ,gBAAgB,CAAC1G,IAAI,CAACE,KAAK,CAAC;cACjC,IAAI,CAACiF,WAAW,CAAC,2BAA2B,EAAEnF,IAAI,CAACE,KAAK,EAAExB,SAAS,CAAC;YAAC;cAG3E;cACA,IAAI,CAAC8D,UAAU,GAAG,IAAI;YAAC;YAAA;cAAA,OAAA+H,QAAA,CAAApB,IAAA;UAAA;QAAA,GAAAQ,OAAA;MAAA,CACxB;MAAA,SA3FKwB,YAAYA,CAAAC,EAAA;QAAA,OAAA7B,aAAA,CAAAlO,KAAA,OAAAW,SAAA;MAAA;MAAA,OAAZmP,YAAY;IAAA;IA6FlB;AACF;AACA;AACA;AACA;AACA;IALE;EAAA;IAAAnI,GAAA;IAAAhG,KAAA,EAMA,SAAAqO,sBAAsBA,CAACjM,OAAO,EAAEkM,YAAkC,EAAQ;MAAA,IAAAC,mBAAA;MACxE,IAAMC,SAAS,GAAG,OAAO,IAAIF,YAAY;MACzC,IAAMzM,QAAQ,GAAG2M,SAAS,IAAAD,mBAAA,GAAGD,YAAY,CAACpL,KAAK,cAAAqL,mBAAA,uBAAlBA,mBAAA,CAAoBnL,GAAG,GAAGkL,YAAY,CAAClL,GAAG;MACvE,IAAMqL,mBAAmB,GAAG5M,QAAQ,IAAI,IAAI,CAACS,eAAe,CAAC9E,GAAG,CAACqE,QAAQ,CAAC;MAC1E,IAAI4M,mBAAmB,EAAE;QACvB,IAAID,SAAS,EAAE;UACb,IAAI,CAACF,YAAY,CAACR,QAAQ,EAAE;YAC1B,IAAI,CAACY,mCAAmC,CACtCtM,OAAO,oEAET,CAAC;YACD;UACF;UACAqE,oBAAW,CAACC,MAAM,CAAC/B,IAAI,CACrB,4FAA4F,EAC5F2J,YACF,CAAC;UACD;UACAG,mBAAmB,CAAC1D,MAAM,CAAC4D,iBAAiB,CAACL,YAAY,CAAC;QAC5D,CAAC,MAAM;UACL;UACAG,mBAAmB,CAAC1D,MAAM,CAAC4D,iBAAiB,CAAC;YAACzL,KAAK,EAAEoL;UAAY,CAAC,CAAC;QACrE;MACF,CAAC,MAAM;QACL,IAAIE,SAAS,IAAIF,YAAY,CAACR,QAAQ,EAAE;UACtC,IAAI,CAACY,mCAAmC,CACtCtM,OAAO,iDAET,CAAC;QACH;QACA;QACA,IAAMc,KAAK,GAAGsL,SAAS,GAAGF,YAAY,CAACpL,KAAK,GAAGoL,YAAY;QAC3D,IAAI,CAACpG,gBAAgB,CAAChF,KAAK,EAAEd,OAAO,CAAC;MACvC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA4D,GAAA;IAAAhG,KAAA,EAKA,SAAA4O,6BAA6BA,CAACC,MAAsB,EAAE3L,KAAe,EAAY;MAAA,IAAA4L,MAAA;QAAAC,WAAA;MAC/E,IAAMrL,IAAI,GAAGmL,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACF,IAAI,CAACG,WAAW,CAAC,CAAC;MAEvD,IAAMmL,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,GAAmB,EAAK;QACpD,IAAI,CAAC/L,KAAK,CAACC,YAAY,EAAE;UACvBD,KAAK,CAACC,YAAY,GAAG,EAAE;QACzB;QACAD,KAAK,CAACC,YAAY,CAACrE,IAAI,CAACmQ,GAAG,CAACjM,IAAI,CAAC;QACjC8L,MAAI,CAACjJ,8BAA8B,CAACpI,GAAG,CAACwR,GAAG,CAACtL,MAAM,CAACC,SAAS,CAACsL,EAAE,EAAED,GAAG,CAACjM,IAAI,CAACkM,EAAE,CAAC;MAC/E,CAAC;MAED,QAAQxL,IAAI;QACV,KAAKI,iBAAU,CAACZ,KAAK;UAAE;YACrB,IAAI,CAAC2L,MAAM,CAAC7L,IAAI,EAAE;cAChB;cACA;cACAyD,oBAAW,CAACC,MAAM,CAAC/B,IAAI,qFAAAgC,MAAA,CAC+DkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CACrH,CAAC;cAED,OAAOjM,KAAK;YACd;YACA;;YAEA;YACA;YACA;YACA,IAAMkM,mBAAmB,GAAGP,MAAM,CAAC7L,IAAI;YAEvC,IAAAhB,OAAA,CAAA3E,OAAA,EAAc2G,8BAAuB,CAAC,CAAC7E,OAAO,CAAC,UAAC8E,WAAW,EAAK;cAC9D,OAAOmL,mBAAmB,CAACnL,WAAW,CAAC;YACzC,CAAC,CAAC;YAEFf,KAAK,GAAAnE,aAAA,CAAAA,aAAA,KAAOmE,KAAK,GAAKkM,mBAAmB,CAAC;YAC1C3I,oBAAW,CAACC,MAAM,CAAC/B,IAAI,uFAAAgC,MAAA,CACiEkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CACvH,CAAC;YACD;UACF;QACA,KAAKrL,iBAAU,CAACM,UAAU;UACxB,IAAIyK,MAAM,CAAC7L,IAAI,EAAE;YAAA,IAAAqM,kBAAA,EAAAC,mBAAA,EAAAC,qBAAA,EAAAC,kBAAA;YACf/I,oBAAW,CAACC,MAAM,CAAC/B,IAAI,qEAAAgC,MAAA,CAEnBkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE,aAAAvI,MAAA,CAClBkI,MAAM,CAAC7L,IAAI,CAACvC,IAAI,gBAAAkG,MAAA,CACxBkI,MAAM,CAAC7L,IAAI,CAACvC,IAAI,KAAK,SAAS,YAAAkG,MAAA,EAAA0I,kBAAA,GACjBR,MAAM,CAAC7L,IAAI,CAACyM,KAAK,cAAAJ,kBAAA,uBAAjBA,kBAAA,CAAmBK,WAAW,QAAA/I,MAAA,EAAA2I,mBAAA,GAAKT,MAAM,CAAC7L,IAAI,CAACyM,KAAK,cAAAH,mBAAA,wBAAAC,qBAAA,GAAjBD,mBAAA,CAAmBK,WAAW,cAAAJ,qBAAA,uBAA9BA,qBAAA,CAAgCL,EAAE,IAC9E,EAAE,eAAAvI,MAAA,CACIkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CAC7C,CAAC;YACD,IAAMS,kBAAkB,IAAAJ,kBAAA,GAAGtM,KAAK,CAACmB,WAAW,cAAAmL,kBAAA,uBAAjBA,kBAAA,CAAmB3M,IAAI,CAChD,UAACgN,EAAE;cAAA,OAAKA,EAAE,CAAClM,MAAM,CAACC,SAAS,CAACsL,EAAE,KAAKL,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE;YAAA,CAC/D,CAAC;YAED,IAAIU,kBAAkB,EAAE;cACtB,IAAA1L,OAAA,CAAA7G,OAAA,EAAcuS,kBAAkB,EAAEf,MAAM,CAAC7L,IAAI,CAAC;YAChD,CAAC,MAAM;cACLE,KAAK,CAACmB,WAAW,GAAGnB,KAAK,CAACmB,WAAW,IAAI,EAAE;cAC3CnB,KAAK,CAACmB,WAAW,CAACvF,IAAI,CAAC+P,MAAM,CAAC7L,IAAI,CAAC;YACrC;UACF,CAAC,MAAM;YAAA,IAAA8M,mBAAA;YACLrJ,oBAAW,CAACC,MAAM,CAAC/B,IAAI,qEAAAgC,MAAA,CAC+CkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE,wBAAAvI,MAAA,CAAqBkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CACpJ,CAAC;YACDjM,KAAK,CAACmB,WAAW,IAAAyL,mBAAA,GAAG5M,KAAK,CAACmB,WAAW,cAAAyL,mBAAA,uBAAjBA,mBAAA,CAAmBlR,MAAM,CAC3C,UAACiR,EAAE;cAAA,OAAKA,EAAE,CAAClM,MAAM,CAACC,SAAS,CAACsL,EAAE,KAAKL,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE;YAAA,CAC/D,CAAC;UACH;UACA;QACF,KAAKpL,iBAAU,CAACQ,WAAW;UACzB,IAAIuK,MAAM,CAAC7L,IAAI,EAAE;YAAA,IAAA+M,mBAAA;YACftJ,oBAAW,CAACC,MAAM,CAAC/B,IAAI,sEAAAgC,MAAA,CACgDkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE,YAAAvI,MAAA,CAASkI,MAAM,CAAC7L,IAAI,CAACI,GAAG,wBAAAuD,MAAA,CAAqBkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,QAC3KN,MAAM,CAAC7L,IACT,CAAC;YACD,IAAMgN,mBAAmB,IAAAD,mBAAA,GAAG7M,KAAK,CAACqB,YAAY,cAAAwL,mBAAA,uBAAlBA,mBAAA,CAAoBlN,IAAI,CAClD,UAACgN,EAAE;cAAA,OAAKA,EAAE,CAAClM,MAAM,CAACC,SAAS,CAACsL,EAAE,KAAKL,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE;YAAA,CAC/D,CAAC;YAED,IAAIc,mBAAmB,EAAE;cACvB,IAAA9L,OAAA,CAAA7G,OAAA,EAAc2S,mBAAmB,EAAEnB,MAAM,CAAC7L,IAAI,CAAC;YACjD,CAAC,MAAM;cACLE,KAAK,CAACqB,YAAY,GAAGrB,KAAK,CAACqB,YAAY,IAAI,EAAE;cAC7CrB,KAAK,CAACqB,YAAY,CAACzF,IAAI,CAAC+P,MAAM,CAAC7L,IAAI,CAAC;YACtC;UACF,CAAC,MAAM;YAAA,IAAAiN,oBAAA;YACLxJ,oBAAW,CAACC,MAAM,CAAC/B,IAAI,sEAAAgC,MAAA,CACgDkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE,wBAAAvI,MAAA,CAAqBkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CACrJ,CAAC;YACDjM,KAAK,CAACqB,YAAY,IAAA0L,oBAAA,GAAG/M,KAAK,CAACqB,YAAY,cAAA0L,oBAAA,uBAAlBA,oBAAA,CAAoBrR,MAAM,CAC7C,UAACiR,EAAE;cAAA,OAAKA,EAAE,CAAClM,MAAM,CAACC,SAAS,CAACsL,EAAE,KAAKL,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE;YAAA,CAC/D,CAAC;UACH;UACA;QACF,KAAKpL,iBAAU,CAACK,WAAW;UACzBsC,oBAAW,CAACC,MAAM,CAAC/B,IAAI,sEAAAgC,MAAA,CAEnBkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE,OAAAvI,MAAA,CACxBkI,MAAM,CAAC7L,IAAI,GAAG,SAAS,GAAG,SAAS,eAAA2D,MAAA,CAAYkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CACpF,CAAC;UACD,IAAIN,MAAM,CAAC7L,IAAI,EAAE;YACfgM,oBAAoB,CAACH,MAAM,CAAC;UAC9B,CAAC,MAAM;YACL,IAAMqB,aAAa,GAAG,IAAI,CAACrK,8BAA8B,CAACrI,GAAG,CAACqR,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE,CAAC;YAEzF,IAAI,CAAChM,KAAK,CAACiN,SAAS,EAAE;cACpBjN,KAAK,CAACiN,SAAS,GAAG;gBAACC,qBAAqB,EAAE;cAAE,CAAC;YAC/C;YACAlN,KAAK,CAACiN,SAAS,CAACC,qBAAqB,CAACtR,IAAI,CAACoR,aAAa,CAAC;YACzD,IAAI,CAACrK,8BAA8B,CAACwK,MAAM,CAACxB,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE,CAAC;UACxE;UACA;UACA;UACA;UACA;UACA;UACA;UACA,IACEL,MAAM,CAAC7L,IAAI,IACX6L,MAAM,CAAC7L,IAAI,CAACsN,QAAQ,OAAAvB,WAAA,GAAK7L,KAAK,CAAC/B,IAAI,cAAA4N,WAAA,uBAAVA,WAAA,CAAYuB,QAAQ,KAC7CzB,MAAM,CAAC7L,IAAI,CAACkJ,KAAK,KAAK,MAAM,IAC5B2C,MAAM,CAAC7L,IAAI,CAACoE,MAAM,KAAK,OAAO,EAC9B;YACAX,oBAAW,CAACC,MAAM,CAAC/B,IAAI,0GAAAgC,MAAA,CACoFkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACsL,EAAE,CACrI,CAAC;YACD,IAAAhL,OAAA,CAAA7G,OAAA,EAAc6F,KAAK,CAACc,8BAAuB,CAACF,iBAAU,CAAC3C,IAAI,CAAC,CAAC,EAAE0N,MAAM,CAAC7L,IAAI,CAAC;UAC7E;UACA;QACF,KAAKc,iBAAU,CAACU,OAAO;UACrB,IAAIqK,MAAM,CAAC7L,IAAI,EAAE;YACf,IAAAuN,KAAA,CAAAlT,OAAA,EAAYwR,MAAM,CAAC7L,IAAI,CAAC,CAAC7D,OAAO,CAAC,UAACqR,UAAU,EAAK;cAC/C/J,oBAAW,CAACC,MAAM,CAAC/B,IAAI,+DAAAgC,MAAA,CACyC6J,UAAU,gBACxE3B,MAAM,CAAC7L,IAAI,CAACwN,UAAU,CACxB,CAAC;cACD,IAAI,CAACtN,KAAK,CAACuB,QAAQ,EAAE;gBACnBvB,KAAK,CAACuB,QAAQ,GAAG,CAAC,CAAC;cACrB;cACAvB,KAAK,CAACuB,QAAQ,CAAC+L,UAAU,CAAC,GAAG3B,MAAM,CAAC7L,IAAI,CAACwN,UAAU,CAAC;YACtD,CAAC,CAAC;UACJ,CAAC,MAAM;YACL/J,oBAAW,CAACC,MAAM,CAAC0F,IAAI,gHAEvB,CAAC;UACH;UACA;QACF,KAAKtI,iBAAU,CAACY,KAAK;QACrB,KAAKZ,iBAAU,CAACa,IAAI;QACpB,KAAKb,iBAAU,CAACc,SAAS;QACzB,KAAKd,iBAAU,CAAC3C,IAAI;UAClB,IAAI,CAAC0N,MAAM,CAAC7L,IAAI,EAAE;YAChB;YACA;YACAyD,oBAAW,CAACC,MAAM,CAAC0F,IAAI,gEAAAzF,MAAA,CAC0CjD,IAAI,0DAAAiD,MAAA,CAAuDkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CAC3J,CAAC;UACH,CAAC,MAAM;YAAA,IAAAsB,WAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;YACLnK,oBAAW,CAACC,MAAM,CAAC/B,IAAI,uDAAAgC,MAAA,CACiCjD,IAAI,iCAAAiD,MAAA,CAA8BkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CACzH,CAAC;YACD,IAAMlL,WAAW,GAAGD,8BAAuB,CAACN,IAAI,CAAC;YACjDR,KAAK,CAACe,WAAW,CAAC,GAAG4K,MAAM,CAAC7L,IAAI;;YAEhC;AACV;AACA;AACA;AACA;YACU,IACEU,IAAI,KAAKI,iBAAU,CAAC3C,IAAI,KAAAsP,WAAA,GACxBvN,KAAK,CAACyB,IAAI,cAAA8L,WAAA,eAAVA,WAAA,CAAYI,SAAS,KAAAH,qBAAA,GACrB7B,MAAM,CAAC7L,IAAI,CAACyB,QAAQ,cAAAiM,qBAAA,gBAAAC,sBAAA,GAApBD,qBAAA,CAAsBI,IAAI,cAAAH,sBAAA,gBAAAC,sBAAA,GAA1BD,sBAAA,CAA4BI,KAAK,cAAAH,sBAAA,eAAjCA,sBAAA,CAAmC/N,IAAI,CACrC,UAAC/F,CAAC;cAAA,OAAKA,CAAC,CAAC4G,IAAI,KAAKsN,qBAAU,CAACC,QAAQ,IAAInU,CAAC,CAACoU,OAAO;YAAA,CACpD,CAAC,EACD;cACAzK,oBAAW,CAACC,MAAM,CAAC/B,IAAI,6GAEvB,CAAC;cACDqK,oBAAoB,CAACH,MAAM,CAAC;YAC9B;UACF;UACA;QACF,KAAK/K,iBAAU,CAACT,QAAQ;UACtBoD,oBAAW,CAACC,MAAM,CAAC/B,IAAI,0FAAAgC,MAAA,CACoEkI,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACuL,OAAO,CAC1H,CAAC;UACD;UACA;QACF;UACE1I,oBAAW,CAACC,MAAM,CAAC0F,IAAI,wFAAAzF,MAAA,CACkEjD,IAAI,CAC7F,CAAC;UACD;MACJ;MAEA,OAAOR,KAAK;IACd;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA8C,GAAA;IAAAhG,KAAA,EAOA,SAAA0O,mCAAmCA,CAACtM,OAAY,EAAEI,OAAe,EAAE;MACjEiE,oBAAW,CAACC,MAAM,CAAC0F,IAAI,4FAAAzF,MAAA,CACsEnE,OAAO,CACpG,CAAC;;MAED;MACA,IAAI,IAAI,CAAC2O,sCAAsC,GAAG,CAAC,EAAE;QACnDpK,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACmK,mCAAmC,EAAE;UACnFjK,aAAa,EAAE/E,OAAO,CAAC+E,aAAa;UACpC3E,OAAO,EAAPA;QACF,CAAC,CAAC;QACF,IAAI,CAAC2O,sCAAsC,IAAI,CAAC;MAClD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAnL,GAAA;IAAAhG,KAAA,EAMA,SAAQqR,0BAA0BA,CAAC7O,OAAwB,EAAW;MAAA,IAAA8O,sBAAA,EAAAC,sBAAA;MACpE,IAAMC,KAAK,GAAG,IAAI,CAAClP,eAAe,CAAC9E,GAAG,CAACgF,OAAO,CAACX,QAAQ,CAAC;MAExD,IAAMV,IAAI,IAAAmQ,sBAAA,GAAG9O,OAAO,CAACI,kBAAkB,cAAA0O,sBAAA,wBAAAC,sBAAA,GAA1BD,sBAAA,CAA4BzO,IAAI,CAAC,UAACC,EAAE;QAAA,OAAK,IAAAC,aAAM,EAACD,EAAE,CAAC;MAAA,EAAC,cAAAyO,sBAAA,uBAApDA,sBAAA,CAAsDvO,IAAI;MACvE,IAAMvB,QAAQ,GAAGP,sBAAsB,CACrCC,IAAI;MACJ;MACA,IAAI,CAAC+D,KAAK,CAACuM,QAAQ,CAACnQ,MAAM,CAAC8B,GAC7B,CAAC;MAED,IAAI,CAACoO,KAAK,EAAE;QAAA,IAAAE,sBAAA,EAAAC,cAAA,EAAAC,qBAAA;QACV;QACA;QACA,IAAMvO,QAAQ,IAAAqO,sBAAA,GAAGlP,OAAO,CAACI,kBAAkB,cAAA8O,sBAAA,uBAA1BA,sBAAA,CAA4B7O,IAAI,CAAC,UAACC,EAAE;UAAA,OAAK,IAAA6K,iBAAU,EAAC7K,EAAE,CAAC;QAAA,EAAC;QAEzE,IAAI,CAAAO,QAAQ,aAARA,QAAQ,wBAAAsO,cAAA,GAARtO,QAAQ,CAAEL,IAAI,cAAA2O,cAAA,wBAAAC,qBAAA,GAAdD,cAAA,CAAgB/D,eAAe,cAAAgE,qBAAA,uBAA/BA,qBAAA,CAAiC3S,MAAM,IAAG,CAAC,EAAE;UAC/CwH,oBAAW,CAACC,MAAM,CAAC/B,IAAI,2FAAAgC,MAAA,CACqEnE,OAAO,CAACX,QAAQ,yBAC5G,CAAC;UAED,IAAMkJ,MAAM,GAAG,IAAI,CAACL,oBAAoB,CAAC;YACvC7I,QAAQ,EAAEW,OAAO,CAACX,QAAQ;YAC1BgJ,YAAY,EAAE;cACZ3H,KAAK,EAAE,IAAI;cACX4K,QAAQ,EAAEtL,OAAO,CAACsL;YACpB,CAAC;YACDzK,QAAQ,EAAE;cACRM,MAAM,EAAEN,QAAQ,CAACM,MAAM;cACvBiK,eAAe,EAAEvK,QAAQ,CAACL,IAAI,CAAC4K;YACjC,CAAC;YACD9C,UAAU,EAAErJ,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEqJ;UACxB,CAAC,CAAC;;UAEF;UACAC,MAAM,CAAC8G,aAAa,CAACrP,OAAO,CAAC;QAC/B;QAEA,OAAO,IAAI;MACb;MACA,IAAIgP,KAAK,CAACzG,MAAM,CAACmB,KAAK,KAAK,SAAS,EAAE;QACpC;QACA;QACA,IAAIzK,QAAQ,EAAE;UACZ,IAAIA,QAAQ,CAACqJ,UAAU,IAAI0G,KAAK,CAAC1G,UAAU,IAAI,EAAE,CAAC,EAAE;YAClDrE,oBAAW,CAACC,MAAM,CAAC/B,IAAI,2FAAAgC,MAAA,CACqEnE,OAAO,CAACX,QAAQ,uBAAA8E,MAAA,CAAoBlF,QAAQ,CAACI,QAAQ,CACjJ,CAAC;YACD,IAAMiQ,aAAa,GAAG,IAAI,CAACxP,eAAe,CAAC9E,GAAG,CAACiE,QAAQ,CAACI,QAAQ,CAAC;YAEjE,IAAIiQ,aAAa,EAAE;cACjBA,aAAa,CAAChH,UAAU,GAAGrJ,QAAQ,CAACqJ,UAAU;cAC9C0G,KAAK,CAACnF,uBAAuB,GAAG,KAAK;cACrC,IAAI,CAACxG,8BAA8B,CAACyG,KAAK,CAAC,CAAC;cAE3CwF,aAAa,CAAC/G,MAAM,CAACoB,IAAI,CAAC,CAAC;cAC3BqF,KAAK,CAACzG,MAAM,CAACzC,MAAM,CAAC9F,OAAO,CAAC;YAC9B,CAAC,MAAM;cACLiE,oBAAW,CAACC,MAAM,CAAC0F,IAAI,wJAAAzF,MAAA,CACkIlF,QAAQ,CAACI,QAAQ,CAC1K,CAAC;YACH;UACF,CAAC,MAAM;YACL4E,oBAAW,CAACC,MAAM,CAAC/B,IAAI,8GAAAgC,MAAA,CACwFnE,OAAO,CAACX,QAAQ,+EAC/H,CAAC;UACH;UAEA,OAAO,IAAI;QACb;QAEA4E,oBAAW,CAACC,MAAM,CAAC/B,IAAI,8GAAAgC,MAAA,CACwFnE,OAAO,CAACX,QAAQ,qEAC/H,CAAC;QAED,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAmE,GAAA;IAAAhG,KAAA,EAQA,SAAQ+R,qBAAqBA,CAAC3P,OAAY,EAAE4P,SAAqB,EAAExP,OAAwB,EAAE;MAC3F,IAAIwP,SAAS,KAAKC,qBAAU,CAACC,sBAAsB,EAAE;QACnD,IAAI,CAACxD,mCAAmC,CACtCtM,OAAO,SAAAuE,MAAA,CACAqL,SAAS,iBAAArL,MAAA,CAAcsL,qBAAU,CAACC,sBAAsB,CACjE,CAAC;QAED;MACF;MAEA,IAAMC,cAAc,GAAG,IAAI,CAACd,0BAA0B,CAAC7O,OAAO,CAAC;MAE/D,IAAI2P,cAAc,EAAE;QAClB;MACF;MAEA,IAAMX,KAAK,GAAG,IAAI,CAAClP,eAAe,CAAC9E,GAAG,CAACgF,OAAO,CAACX,QAAQ,CAAC;MAExD2P,KAAK,CAACzG,MAAM,CAAC8G,aAAa,CAACrP,OAAO,CAAC;IACrC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAwD,GAAA;IAAAhG,KAAA,EASA,SAAQqL,kBAAkBA,CACxBxJ,QAAgB,EAChBuQ,UAA+B,EAC/BpP,IAAyC,EACzC;MAAA,IAAAqP,MAAA;MACA,QAAQD,UAAU;QAChB,KAAKE,oCAAmB,CAACC,eAAe;UAAE;YACxC;YACA,IAAIrP,KAAe,GAAG;cACpBC,YAAY,EAAE,EAAE;cAChBgN,SAAS,EAAE;gBACTC,qBAAqB,EAAE,EAAE;gBACzBoC,mBAAmB,EAAE;cACvB;YACF,CAAC;;YAED;YACA,IAAIC,4BAA0D,GAC5D3R,4BAA4B,CAACC,SAAS;YACxCiC,IAAI,CAAC0P,cAAc,CAACvT,OAAO,CAAC,UAAC0P,MAAM,EAAK;cACtC,IAAIA,MAAM,CAAClL,MAAM,CAACC,SAAS,CAACF,IAAI,CAACG,WAAW,CAAC,CAAC,KAAKC,iBAAU,CAACZ,KAAK,EAAE;gBACnE,IAAIuP,4BAA4B,KAAK3R,4BAA4B,CAACG,OAAO,EAAE;kBAAA,IAAA0R,YAAA;kBACzE;kBACA;kBACA;kBACAlM,oBAAW,CAACC,MAAM,CAAC0F,IAAI,6GAEvB,CAAC;kBACDrF,gBAAO,CAACC,oBAAoB,CAC1BC,mBAAkB,CAAC2L,qCAAqC,EACxD;oBACE/Q,QAAQ,EAAE,EAAA8Q,YAAA,GAAA9D,MAAM,CAAC7L,IAAI,cAAA2P,YAAA,uBAAXA,YAAA,CAAavP,GAAG,KAAIiP,MAAI,CAACjP,GAAG;oBACtCZ,OAAO,EAAEqM,MAAM,CAAC7L,IAAI,GAChB,+BAA+B,GAC/B;kBACN,CACF,CAAC;gBACH;gBACA,IAAI6L,MAAM,CAAC7L,IAAI,EAAE;kBACfyP,4BAA4B,GAAG3R,4BAA4B,CAACG,OAAO;gBACrE,CAAC,MAAM;kBACLwR,4BAA4B,GAAG3R,4BAA4B,CAACE,OAAO;gBACrE;cACF;YACF,CAAC,CAAC;YAEF,IAAMyN,mBAAmB,GAAG,IAAI,CAACnM,eAAe,CAAC9E,GAAG,CAACqE,QAAQ,CAAC;YAE9D,IAAI,CAAC4M,mBAAmB,CAACpC,uBAAuB,EAAE;cAChD;cACA;cACA;cACA5F,oBAAW,CAACC,MAAM,CAAC/B,IAAI,8EAAAgC,MAAA,CACwD9E,QAAQ,gCACvF,CAAC;cACD4M,mBAAmB,CAACpC,uBAAuB,GAAG,IAAI;cAClDnJ,KAAK,CAACiN,SAAS,CAACqC,mBAAmB,GAAG,IAAI;YAC5C,CAAC,MAAM;YACL;YACA;YACA;YACA;YACA;YACAC,4BAA4B,KAAK3R,4BAA4B,CAACC,SAAS,IACvE0R,4BAA4B,KAAK3R,4BAA4B,CAACE,OAAO,EACrE;cACA;cACAH,oBAAoB,CAAC1B,OAAO,CAAC,UAAC6G,GAAG,EAAK;gBACpC,IAAIA,GAAG,KAAK,cAAc,EAAE;kBAC1B9C,KAAK,CAAC8C,GAAG,CAAC,GAAG,IAAA6M,iBAAS,EAACR,MAAI,CAACrM,GAAG,CAAC,CAAC;gBACnC;cACF,CAAC,CAAC;YACJ,CAAC,MAAM;cACL;cACA;cACA,IAAAhE,OAAA,CAAA3E,OAAA,EAAc2G,8BAAuB,CAAC,CAAC7E,OAAO,CAAC,UAAC8E,WAAW,EAAK;gBAC9D,IAAIA,WAAW,KAAK,cAAc,EAAE;kBAClCf,KAAK,CAACe,WAAW,CAAC,GAAG,IAAA4O,iBAAS,EAACR,MAAI,CAACpO,WAAW,CAAC,CAAC;gBACnD;cACF,CAAC,CAAC;YACJ;YAEAwC,oBAAW,CAACC,MAAM,CAAC/B,IAAI,4DAAAgC,MAAA,CACsC8L,4BAA4B,qBAAA9L,MAAA,CAAkB,IAAAmM,UAAA,CAAAzV,OAAA,EACvG2F,IAAI,CAAC0P,cAAc,CAACK,GAAG,CAAC,UAAC9V,CAAC;cAAA,OAAM;gBAC9ByG,IAAI,EAAEzG,CAAC,CAAC0G,MAAM,CAACC,SAAS,CAACF,IAAI;gBAC7BwL,EAAE,EAAEjS,CAAC,CAAC0G,MAAM,CAACC,SAAS,CAACsL,EAAE;gBACzB8D,OAAO,EAAE,CAAC,CAAC/V,CAAC,CAAC+F;cACf,CAAC;YAAA,CAAC,CACJ,CAAC,CACH,CAAC;YACD;YACAA,IAAI,CAAC0P,cAAc,CAACvT,OAAO,CAAC,UAAC0P,MAAM,EAAK;cACtC3L,KAAK,GAAGmP,MAAI,CAACzD,6BAA6B,CAACC,MAAM,EAAE3L,KAAK,CAAC;YAC3D,CAAC,CAAC;;YAEF;YACA,IAAI,CAAC8F,YAAY,CAAC9F,KAAK,CAAC;YAExB;UACF;QAEA,KAAKoP,oCAAmB,CAACW,aAAa;UAAE;YACtC,IAAM7Q,OAAO,GAAG,IAAI,CAAC8C,KAAK,CAACuC,QAAQ,CAAC7F,iBAAiB,CAACpE,GAAG,CAAC,IAAI,CAAC2H,SAAS,CAAC;YAEzE,IAAI/C,OAAO,EAAE;cACXqE,oBAAW,CAACC,MAAM,CAAC/B,IAAI,mGAAAgC,MAAA,CAC6E,IAAI,CAACxB,SAAS,CAClH,CAAC;cACD,IAAI,CAACD,KAAK,CAACuC,QAAQ,CAACC,OAAO,CAACtF,OAAO,EAAEuF,iCAAsB,CAACuL,YAAY,CAAC;YAC3E;UACF;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAlN,GAAA;IAAAhG,KAAA,EAMA,SAAAmT,KAAKA,CAAC/Q,OAAY,EAAEY,IAAS,EAAE;MAC7B,IAAI,IAAI,CAACV,eAAe,CAAC8Q,IAAI,GAAG,CAAC,EAAE;QACjC,IAAI,CAACrB,qBAAqB,CACxB3P,OAAO,EACPY,IAAI,CAACgP,SAAS,EACdhP,IAAI,CAACqQ,oBACP,CAAC;MACH,CAAC,MAAM;QACL,IAAOrB,SAAS,GAAIhP,IAAI,CAAjBgP,SAAS;QAEhB,IAAIA,SAAS,KAAKC,qBAAU,CAACC,sBAAsB,EAAE;UACnD;UACA;UACAzL,oBAAW,CAACC,MAAM,CAAC/B,IAAI,6FAEvB,CAAC;UAED;QACF;QAEA,IAAMzB,KAAK,GAAG,IAAI,CAACoQ,mBAAmB,CAACtQ,IAAI,CAACE,KAAK,CAAC;QAClDuD,oBAAW,CAACC,MAAM,CAAC/B,IAAI,oDAAAgC,MAAA,CAAoDqL,SAAS,CAAE,CAAC;QAEvF9O,KAAK,CAACiN,SAAS,GAAG;UAACC,qBAAqB,EAAE;QAAE,CAAC;QAE7C,QAAQ4B,SAAS;UACf,KAAKC,qBAAU,CAACsB,gBAAgB;UAChC,KAAKtB,qBAAU,CAACuB,gBAAgB;UAChC,KAAKvB,qBAAU,CAACwB,gBAAgB;UAChC,KAAKxB,qBAAU,CAACyB,uBAAuB;UACvC,KAAKzB,qBAAU,CAAC0B,yBAAyB;UACzC,KAAK1B,qBAAU,CAAC2B,uBAAuB;UACvC,KAAK3B,qBAAU,CAAC4B,yBAAyB;UACzC,KAAK5B,qBAAU,CAAC6B,YAAY;UAC5B,KAAK7B,qBAAU,CAAC8B,mBAAmB;UACnC,KAAK9B,qBAAU,CAAC+B,4BAA4B;UAC5C,KAAK/B,qBAAU,CAACgC,yBAAyB;UACzC,KAAKhC,qBAAU,CAACiC,oBAAoB;UACpC,KAAKjC,qBAAU,CAACkC,aAAa;UAC7B,KAAKlC,qBAAU,CAACmC,cAAc;YAC5B,IAAI,CAACjM,WAAW,wBAAAxB,MAAA,CAAwBqL,SAAS,GAAI9O,KAAK,EAAE8O,SAAS,CAAC;YACtE;UACF,KAAKC,qBAAU,CAACoC,UAAU;YACxB,IAAI,CAACnM,gBAAgB,CAAChF,KAAK,EAAEd,OAAO,CAAC;YACrC;UAEF;YACE;YACA;YACA,IAAI,CAAC8F,gBAAgB,CAAChF,KAAK,EAAEd,OAAO,CAAC;QACzC;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA4D,GAAA;IAAAhG,KAAA,EAOA,SAAAsU,UAAUA,CAACC,KAAW,EAAEC,SAAkB,EAAEC,IAAU,EAAE;MACtD,OAAO,IAAI,CAACC,IAAI,CAACH,KAAK,EAAEC,SAAS,EAAEC,IAAI,CAAC;IAC1C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAzO,GAAA;IAAAhG,KAAA,EAUA,SAAQ2U,wBAAwBA,CAC9BC,SAAiB,EACjB1R,KAAU,EACVG,QAAkB,EAClB2O,SAAkB,EAClBlE,QAAyB,EACzB;MACA,IAAI,CAAC,IAAI,CAACxL,eAAe,CAAC/E,GAAG,CAAC2F,KAAK,CAACE,GAAG,CAAC,EAAE;QACxCqD,oBAAW,CAACC,MAAM,CAAC/B,IAAI,kCAAAgC,MAAA,CACYiO,SAAS,mDAAAjO,MAAA,CAAgDzD,KAAK,CAACE,GAAG,CACrG,CAAC;QACDqD,oBAAW,CAACC,MAAM,CAAC/B,IAAI,kCAAAgC,MAAA,CACYiO,SAAS,sBAC1C9G,QAAQ,EACR,aAAa,EACb5K,KAAK,EACL,gBAAgB,EAChBG,QACF,CAAC;QACD,IAAI,CAACqH,oBAAoB,CAAC;UACxB7I,QAAQ,EAAEqB,KAAK,CAACE,GAAG;UACnByH,YAAY,EAAE;YAAC3H,KAAK,EAALA,KAAK;YAAE4K,QAAQ,EAARA;UAAQ,CAAC;UAC/BzK,QAAQ,EAARA;QACF,CAAC,CAAC;QACF;QACA,IAAI,CAACf,eAAe,CAAC9E,GAAG,CAAC0F,KAAK,CAACE,GAAG,CAAC,CAACiJ,uBAAuB,GAAG,IAAI;QAClE,IAAI,CAACwI,iBAAiB,CAAC3R,KAAK,EAAE8O,SAAS,CAAC;MAC1C,CAAC,MAAM;QACL;QACA;;QAEAvL,oBAAW,CAACC,MAAM,CAAC/B,IAAI,kCAAAgC,MAAA,CACYiO,SAAS,kFAC5C,CAAC;QACD,IAAI,CAACvG,sBAAsB,CAAC3M,SAAS,EAAE;UAACoM,QAAQ,EAARA,QAAQ;UAAE5K,KAAK,EAALA,KAAK;UAAEG,QAAQ,EAARA;QAAQ,CAAC,CAAC;MACrE;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA2C,GAAA;IAAAhG,KAAA,EAQA,SAAQ8U,kBAAkBA,CAACF,SAAiB,EAAE1R,KAAU,EAAE8O,SAAkB,EAAE;MAC5E,IAAI,CAAC,IAAI,CAACtM,WAAW,CAACqP,cAAc,CAAC7R,KAAK,CAAC,EAAE;QAC3CuD,oBAAW,CAACC,MAAM,CAAC/B,IAAI,kCAAAgC,MAAA,CACYiO,SAAS,mDAAAjO,MAAA,CAAgDqL,SAAS,CACrG,CAAC;QAED;MACF;MACA,IAAI,CAAC6C,iBAAiB,CAAC3R,KAAK,EAAE8O,SAAS,CAAC;IAC1C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAhM,GAAA;IAAAhG,KAAA,EAUA,SAAAmI,WAAWA,CACTyM,SAAiB,EACjB1R,KAAU,EACV8O,SAAkB,EAClBlE,QAAyB,EACzBzK,QAAmB,EACnB;MACA,IAAI,CAACH,KAAK,EAAE;QACVuD,oBAAW,CAACC,MAAM,CAACsO,KAAK,kCAAArO,MAAA,CACWiO,SAAS,6DAC5C,CAAC;MACH;MAEA,IAAI9G,QAAQ,EAAE;QACZ,IAAI,CAACzK,QAAQ,EAAE;UACb,MAAM,IAAIwK,KAAK,kCAAAlH,MAAA,CACoBiO,SAAS,wDAC5C,CAAC;QACH;QACA;QACA,IAAI,CAACD,wBAAwB,CAACC,SAAS,EAAE1R,KAAK,EAAEG,QAAQ,EAAE2O,SAAS,EAAElE,QAAQ,CAAC;MAChF,CAAC,MAAM;QACL,IAAI,CAACgH,kBAAkB,CAACF,SAAS,EAAE1R,KAAK,EAAE8O,SAAS,CAAC;MACtD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAhM,GAAA;IAAAhG,KAAA,EAMA,SAAQ6U,iBAAiBA,CAAC3R,KAAU,EAAE8O,SAAkB,EAAE;MAAA,IAAAiD,kBAAA;QAAAC,MAAA;QAAAC,gBAAA;MACxD,IAAI,CAAC5L,gBAAgB,GAAGrG,KAAK,CAACd,OAAO,IAAI,IAAI;MAC7C,IAAI,CAACe,YAAY,GAAGD,KAAK,CAACC,YAAY;MACtC,CAAA8R,kBAAA,OAAI,CAAC9R,YAAY,cAAA8R,kBAAA,uBAAjBA,kBAAA,CAAmB9V,OAAO,CAAC,UAACgF,WAAW,EAAK;QAAA,IAAAiR,mBAAA;QAC1C;QACA,IAAI,SAAAA,mBAAA,GAAOjR,WAAW,CAACR,MAAM,cAAAyR,mBAAA,uBAAlBA,mBAAA,CAAoBxR,SAAS,CAACsL,EAAE,MAAK,QAAQ,EAAE;UACxDgG,MAAI,CAACrP,8BAA8B,CAACpI,GAAG,CAAC0G,WAAW,CAACR,MAAM,CAACC,SAAS,CAACsL,EAAE,EAAE/K,WAAW,CAAC+K,EAAE,CAAC;QAC1F;MACF,CAAC,CAAC;MACF,IAAMmG,gBAAgB,GAAGrL,sBAAa,CAACsL,oBAAoB,CAAC,IAAI,CAAC7Q,QAAQ,EAAEvB,KAAK,CAACuB,QAAQ,CAAC;MAC1F,IAAI,CAAC8Q,eAAe,CAACrS,KAAK,CAAC;MAC3B,IAAI,CAACyG,kBAAkB,CACrBzG,KAAK,CAACC,YAAY,GAAAgS,gBAAA,GAClBjS,KAAK,CAACiN,SAAS,cAAAgF,gBAAA,uBAAfA,gBAAA,CAAiB/E,qBAAqB,EACtCiF,gBACF,CAAC;MACD,IAAI,CAACG,eAAe,CAAC,CAAC;MACtB,IAAI,CAACC,mBAAmB,CAACzD,SAAS,CAAC;MACnC,IAAI,CAAC5H,kBAAkB,CAAClH,KAAK,CAACqB,YAAY,CAAC;MAC3C;MACA,IAAI,CAACmB,WAAW,CAACa,WAAW,GAAGrD,KAAK;IACtC;;IAEA;IACA;AACF;AACA;AACA;AACA;IACE;EAAA;IAAA8C,GAAA;IAAAhG,KAAA,EACA,SAAAyV,mBAAmBA,CAACzD,SAAiB,EAAE;MAAA,IAAA0D,qBAAA,EAAAC,sBAAA;MACrC,IACE,EAAAD,qBAAA,OAAI,CAACpQ,WAAW,CAACV,SAAS,cAAA8Q,qBAAA,uBAA1BA,qBAAA,CAA4BhS,IAAI,MAAKkS,iBAAM,IAC3C,EAAAD,sBAAA,OAAI,CAACrQ,WAAW,CAACV,SAAS,cAAA+Q,sBAAA,uBAA1BA,sBAAA,CAA4BjS,IAAI,MAAKmS,uBAAY,EACjD;QACA;QACA,IAAI7D,SAAS,KAAKC,qBAAU,CAACiC,oBAAoB,EAAE;UACjD;UACA,IAAI,CAACI,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACC,eAAe,EACtB;YACEC,cAAc,EAAE,IAAI;YACpBC,cAAc,EAAE;UAClB,CACF,CAAC;QACH;QACA;QACA,IAAInE,SAAS,KAAKC,qBAAU,CAACsB,gBAAgB,EAAE;UAC7C;UACA,IAAI,CAACe,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACC,eAAe,EACtB;YACEC,cAAc,EAAE,KAAK;YACrBC,cAAc,EAAE;UAClB,CACF,CAAC;QACH;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAnQ,GAAA;IAAAhG,KAAA,EAMA,SAAAoW,2BAA2BA,CAAClT,KAAU,EAAE;MACtC,IAAO/B,IAAI,GAAI+B,KAAK,CAAb/B,IAAI;;MAEX;MACA,IAAI,EAACA,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEmP,QAAQ,KAAI,CAAC,IAAA+F,QAAA,CAAAhZ,OAAA,EAAc6F,KAAK,CAACC,YAAY,CAAC,EAAE;QACzDsD,oBAAW,CAACC,MAAM,CAAC0F,IAAI,sJAAAzF,MAAA,CAC+HxF,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmP,QAAQ,OACpK,CAAC;QAED;MACF;MAEA,IAAMgG,UAAU,GAAGpT,KAAK,CAACC,YAAY,CAACoT,IAAI,CACxC,UAACpS,WAAW;QAAA,OAAKA,WAAW,CAACmM,QAAQ,KAAKnP,IAAI,CAACmP,QAAQ;MAAA,CACzD,CAAC;MAED,IAAI,CAACgG,UAAU,EAAE;QACfpT,KAAK,CAACC,YAAY,CAACrE,IAAI,CAAAC,aAAA,KAAKoC,IAAI,CAAC,CAAC;MACpC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA6E,GAAA;IAAAhG,KAAA,EAKA,SAAAgJ,YAAYA,CAAC9F,KAAU,EAAE;MAAA,IAAAsT,iBAAA;MACvB,IAAMnB,gBAAgB,GACpB,EAAAmB,iBAAA,GAAAtT,KAAK,CAACiN,SAAS,cAAAqG,iBAAA,uBAAfA,iBAAA,CAAiBhE,mBAAmB,MAAK9Q,SAAS,GAC9CwB,KAAK,CAACiN,SAAS,CAACqC,mBAAmB,GACnCxI,sBAAa,CAACsL,oBAAoB,CAAC,IAAI,CAAC7Q,QAAQ,EAAEvB,KAAK,CAACuB,QAAQ,CAAC;MAEvE,IAAI4Q,gBAAgB,EAAE;QACpB;QACA;QACA;QACA;QACA,IAAI,CAACe,2BAA2B,CAAClT,KAAK,CAAC;MACzC;MACA,IAAI,CAACuT,iBAAiB,CAAC,IAAI,CAACtT,YAAY,EAAED,KAAK,CAACC,YAAY,CAAC;MAC7D,IAAMuT,cAAc,GAAG,IAAI,CAACnB,eAAe,CAACrS,KAAK,CAAC;MAElD,IAAIwT,cAAc,EAAE;QAAA,IAAAC,iBAAA;QAClB,IAAI,CAAChN,kBAAkB,CACrBzG,KAAK,CAACC,YAAY,GAAAwT,iBAAA,GAClBzT,KAAK,CAACiN,SAAS,cAAAwG,iBAAA,uBAAfA,iBAAA,CAAiBvG,qBAAqB,EACtCiF,gBACF,CAAC;MACH;MACA,IAAI,CAACG,eAAe,CAAC,CAAC;IACxB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAxP,GAAA;IAAAhG,KAAA,EAKA,SAAAuV,eAAeA,CAACrS,KAAK,EAAE;MAAA,IAAA0T,YAAA,EAAAC,YAAA;MACrB,IAAI,EAAAD,YAAA,GAAA1T,KAAK,CAAC/B,IAAI,cAAAyV,YAAA,uBAAVA,YAAA,CAAYxP,MAAM,MAAK,OAAO,IAAI,EAAAyP,YAAA,GAAA3T,KAAK,CAAC/B,IAAI,cAAA0V,YAAA,uBAAVA,YAAA,CAAY3K,KAAK,MAAK,MAAM,EAAE;QAClE;QACA;QACA;QACA,OAAO,KAAK;MACd;MAEA,IAAI,CAACpC,cAAc,CAAC5G,KAAK,CAACuB,QAAQ,EAAEvB,KAAK,CAAC/B,IAAI,CAAC;MAC/C,IAAI,CAACyI,qBAAqB,CAAC1G,KAAK,CAAC2G,eAAe,EAAE3G,KAAK,CAACyB,IAAI,CAAC;MAC7D,IAAI,CAACmS,aAAa,CAAC5T,KAAK,CAACoG,OAAO,CAAC;MACjC,IAAI,CAACY,eAAe,CAAChH,KAAK,CAAC0B,SAAS,CAAC;MACrC,IAAI,CAAC0F,cAAc,CAACpH,KAAK,CAACqH,IAAI,CAAC;MAC/B,IAAI,CAACR,cAAc,CAAC7G,KAAK,CAACE,GAAG,EAAE4G,sBAAa,CAACC,gBAAgB,CAAC/G,KAAK,CAAC,CAAC;MACrE,IAAI,CAACiH,iBAAiB,CAACjH,KAAK,CAACyB,IAAI,EAAEzB,KAAK,CAAC/B,IAAI,CAAC;MAC9C,IAAI,CAACqJ,iBAAiB,CAACtH,KAAK,CAACmB,WAAW,CAAC;MACzC,IAAI,CAAC0S,cAAc,CAAC7T,KAAK,CAACzB,QAAQ,CAAC;MACnC,IAAI,CAAC4I,UAAU,CAACnH,KAAK,CAAC/B,IAAI,CAAC;MAC3B,IAAI,CAAC6V,YAAY,CAAC9T,KAAK,CAACsG,MAAM,CAAC;MAC/B,IAAI,CAACyN,gBAAgB,CAAC/T,KAAK,CAAC+E,YAAY,CAAC;MACzC,IAAI,CAACiP,cAAc,CAAChU,KAAK,CAACuG,QAAQ,CAAC;MACnC,IAAI,CAACW,kBAAkB,CAAClH,KAAK,CAACqB,YAAY,CAAC;MAC3C,IAAI,CAACkG,WAAW,CAACvH,KAAK,CAACwB,KAAK,CAAC;MAC7B,IAAI,CAACyS,gBAAgB,CAAC,CAAC;MACvB;;MAEA,OAAO,IAAI;IACb;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAnR,GAAA;IAAAhG,KAAA,EAMA,SAAAoX,eAAeA,CAACjU,YAAwB,EAAEhC,IAAS,EAAE;MACnD,IAAI,CAACgC,YAAY,IAAIA,YAAY,CAAClE,MAAM,KAAK,CAAC,EAAE;QAC9C,OAAO,IAAI;MACb;MAEA,OACEkE,YAAY,CAACN,IAAI,CACf,UAACsB,WAAW;QAAA,OACVhD,IAAI,IACJgD,WAAW,CAACmM,QAAQ,KAAKnP,IAAI,CAACmP,QAAQ,KACrCnN,YAAY,CAAClE,MAAM,IAAI,CAAC,IAAKkF,WAAW,CAACT,IAAI,KAAK2T,iBAAM,IAAI,CAAClT,WAAW,CAACnD,OAAQ,CAAC;MAAA;MACrF;MACF,CAAC,IAAI,IAAI,CAACsW,OAAO;IAErB;;IAEA;IACA;AACF;AACA;AACA;EAHE;IAAAtR,GAAA;IAAAhG,KAAA,EAIA,SAAAwV,eAAeA,CAAA,EAAG;MAAA,IAAA+B,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;MAChB,IACE,EAAAH,sBAAA,OAAI,CAACjS,WAAW,CAACV,SAAS,cAAA2S,sBAAA,uBAA1BA,sBAAA,CAA4B7T,IAAI,MAAKkS,iBAAM,IAC3C,EAAA4B,sBAAA,OAAI,CAAClS,WAAW,CAACV,SAAS,cAAA4S,sBAAA,uBAA1BA,sBAAA,CAA4B9T,IAAI,MAAKmS,uBAAY,IACjD,EAAA4B,sBAAA,OAAI,CAACnS,WAAW,CAACV,SAAS,cAAA6S,sBAAA,uBAA1BA,sBAAA,CAA4B/T,IAAI,MAAKiU,wBAAa,EAClD;QACA;QACA,IAAML,OAAO,GAAG,IAAI,CAACF,eAAe,CAAC,IAAI,CAACjU,YAAY,EAAE,IAAI,CAAChC,IAAI,CAAC;QAElE,IAAI,CAAC8D,aAAa,CAAC;UAACqS,OAAO,EAAPA;QAAO,CAAC,CAAC;;QAE7B;;QAEA;QACA;;QAEA;;QAEA,IAAI,IAAI,CAAC1S,SAAS,IAAI,IAAI,CAACA,SAAS,CAACsH,KAAK,KAAK0L,gBAAK,CAACC,KAAK,CAACC,QAAQ,EAAE;UACnE;UACArR,oBAAW,CAACC,MAAM,CAAC0F,IAAI,CACrB,2EACF,CAAC;;UAED;UACA,IAAI,CAAClH,KAAK,CAACuM,QAAQ,CAACsG,UAAU,CAACC,iBAAiB,CAAC;YAC/CvX,IAAI,EAAE,0BAA0B;YAChCwX,OAAO,EAAE;cACP9S,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UAEF,IAAI,CAACmP,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACkC,eAAe,EACtB;YACE9Q,MAAM,EAAE+Q,8BAAmB,CAACC,aAAa;YACzCC,WAAW,EAAE;UACf,CACF,CAAC;QACH,CAAC,MAAM,IACLf,OAAO,CAACpL,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACC,IAAI,IAC3C,IAAI,CAAClT,WAAW,CAACnE,IAAI,KACpB,IAAI,CAACmE,WAAW,CAACnE,IAAI,CAAC+K,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACE,QAAQ,IAC5D,IAAI,CAACnT,WAAW,CAACnE,IAAI,CAAC+K,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACG,QAAQ,IAC7D,IAAI,CAACpT,WAAW,CAACnE,IAAI,CAAC+K,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACI,MAAM,CAAC,EAC9D;UACA;UACA,IAAI,CAACzT,KAAK,CAACuM,QAAQ,CAACsG,UAAU,CAACC,iBAAiB,CAAC;YAC/CvX,IAAI,EAAE,0BAA0B;YAChCwX,OAAO,EAAE;cACP9S,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UACF,IAAI,CAACmP,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACkC,eAAe,EACtB;YACE9Q,MAAM,EAAE+Q,8BAAmB,CAACS,YAAY;YACxCP,WAAW,EACT,IAAI,CAAC/S,WAAW,CAACnE,IAAI,CAAC0X,UAAU,IAAI,IAAI,CAACvT,WAAW,CAACnE,IAAI,CAAC0X,UAAU,CAAC3M,KAAK,KAAK4M;UACnF,CACF,CAAC;QACH,CAAC,MAAM,IACL,IAAI,CAACxT,WAAW,CAACnE,IAAI,IACrB,IAAI,CAACmE,WAAW,CAACnE,IAAI,CAAC+K,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACC,IAAI,KACxDlB,OAAO,CAACpL,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACC,IAAI,IAC1ClB,OAAO,CAACpL,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACE,QAAQ,IAC/CnB,OAAO,CAACpL,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACG,QAAQ,IAC/CpB,OAAO,CAACpL,KAAK,KAAKoM,wBAAa,CAACC,MAAM,CAACQ,IAAI,CAAC,CAAC;QAAA,EAC/C;UACA;UACA,IAAI,CAAC7T,KAAK,CAACuM,QAAQ,CAACsG,UAAU,CAACC,iBAAiB,CAAC;YAC/CvX,IAAI,EAAE,0BAA0B;YAChCwX,OAAO,EAAE;cACP9S,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UAEF,IAAI,CAACmP,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACkC,eAAe,EACtB;YACE9Q,MAAM,EAAE+Q,8BAAmB,CAACa,SAAS;YACrCX,WAAW,EAAE;UACf,CACF,CAAC;QACH;MACF,CAAC,MAAM,IAAI,EAAAX,sBAAA,OAAI,CAACpS,WAAW,CAACV,SAAS,cAAA8S,sBAAA,uBAA1BA,sBAAA,CAA4BhU,IAAI,MAAKuV,oBAAS,EAAE;QACzD,IACE,IAAI,CAACrU,SAAS,KACb,IAAI,CAACA,SAAS,CAACsH,KAAK,KAAK0L,gBAAK,CAACC,KAAK,CAACC,QAAQ;QAC5C;QACA,IAAI,CAAClT,SAAS,CAACsH,KAAK,KAAK0L,gBAAK,CAACC,KAAK,CAACqB,WAAW,CAAC,EACnD;UACAzS,oBAAW,CAACC,MAAM,CAAC0F,IAAI,CACrB,uFACF,CAAC;;UAED;UACA,IAAI,CAAClH,KAAK,CAACuM,QAAQ,CAACsG,UAAU,CAACC,iBAAiB,CAAC;YAC/CvX,IAAI,EAAE,0BAA0B;YAChCwX,OAAO,EAAE;cACP9S,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UACF,IAAI,CAACmP,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACkC,eAAe,EACtB;YACE9Q,MAAM,EAAEO,iCAAsB,CAACwR,4BAA4B;YAC3Dd,WAAW,EAAE;UACf,CACF,CAAC;QACH;QACA;QACA;QAAA,KACK,IAAI,IAAI,CAAC/S,WAAW,CAACnE,IAAI,IAAI,IAAI,CAACmE,WAAW,CAACnE,IAAI,CAACH,OAAO,EAAE;UAC/D;UACA,IAAI,CAACsT,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACkC,eAAe,EACtB;YACE9Q,MAAM,EAAEO,iCAAsB,CAACuL,YAAY;YAC3CmF,WAAW,EAAE;UACf,CACF,CAAC;QACH;MACF,CAAC,MAAM;QACL5R,oBAAW,CAACC,MAAM,CAAC0F,IAAI,CAAC,+DAA+D,CAAC;MAC1F;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAApG,GAAA;IAAAhG,KAAA,EAMA,SAAAmX,gBAAgBA,CAAA,EAAG;MACjB;MACA;MACA,IACE,IAAI,CAAC1R,qBAAqB,CAAC2T,kBAAkB,IAC7C,IAAI,CAAC3T,qBAAqB,CAAC4T,kBAAkB,EAC7C;QACA,IAAI,CAACD,kBAAkB,CAAC,CAAC;MAC3B;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAApT,GAAA;IAAAhG,KAAA,EAKA,SAAAoZ,kBAAkBA,CAAA,EAAG;MAAA,IAAAE,qBAAA;MACnB;MACA,IACE,IAAI,CAAChU,WAAW,CAACnE,IAAI,IACrB,IAAI,CAACmE,WAAW,CAACnE,IAAI,CAACoY,YAAY,OAAAD,qBAAA,GAAK,IAAI,CAAChU,WAAW,CAACiF,IAAI,cAAA+O,qBAAA,uBAArBA,qBAAA,CAAuBE,MAAM,KACpE,IAAI,CAAClU,WAAW,CAACnE,IAAI,CAACsY,SAAS,EAC/B;QACA,IAAI,CAACnF,UAAU,CACb;UACEwB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAAC0D,0BAA0B,EACjC;UACEC,aAAa,EAAE;QACjB,CACF,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAACrF,UAAU,CACb;UACEwB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAAC0D,0BAA0B,EACjC;UACEC,aAAa,EAAE;QACjB,CACF,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA3T,GAAA;IAAAhG,KAAA,EAQA,SAAA2J,kBAAkBA,CAACxG,YAAoB,EAAEiN,qBAAgC,EAAEwJ,SAAmB,EAAE;MAAA,IAAAC,qBAAA;MAC9F,IAAI,CAACvF,UAAU,CACb;QACEwB,IAAI,EAAE,YAAY;QAClBC,QAAQ,EAAE;MACZ,CAAC,EACDC,iBAAM,CAAC8D,8BAA8B,EACrC;QACE3W,YAAY,EAAZA,YAAY;QACZiN,qBAAqB,EAArBA,qBAAqB;QACrB2J,WAAW,EAAE,IAAI,CAACzU,WAAW,CAACb,QAAQ,MAAAoV,qBAAA,GAAI,IAAI,CAACvU,WAAW,CAACb,QAAQ,CAACuV,MAAM,cAAAH,qBAAA,uBAAhCA,qBAAA,CAAkCI,UAAU;QACtFV,YAAY,EAAE,IAAI,CAACjU,WAAW,CAACnE,IAAI,IAAI,IAAI,CAACmE,WAAW,CAACnE,IAAI,CAACoY,YAAY;QACzEW,MAAM,EAAE,IAAI,CAAC5U,WAAW,CAACnE,IAAI,IAAI,IAAI,CAACmE,WAAW,CAACnE,IAAI,CAAC+Y,MAAM;QAC7DV,MAAM,EAAE,IAAI,CAAClU,WAAW,CAACiF,IAAI,IAAI,IAAI,CAACjF,WAAW,CAACiF,IAAI,CAACiP,MAAM;QAC7DI,SAAS,EAATA;MACF,CACF,CAAC;MAED,IAAIzW,YAAY,IAAI,IAAAkT,QAAA,CAAAhZ,OAAA,EAAc8F,YAAY,CAAC,IAAIA,YAAY,CAAClE,MAAM,GAAG,CAAC,EAAE;QAAA,IAAAkb,UAAA,GAAA5a,0BAAA,CAChD4D,YAAY;UAAAiX,MAAA;QAAA;UAAtC,KAAAD,UAAA,CAAAra,CAAA,MAAAsa,MAAA,GAAAD,UAAA,CAAApd,CAAA,IAAAgD,IAAA,GAAwC;YAAA,IAA7BoE,WAAW,GAAAiW,MAAA,CAAApa,KAAA;YACpB,IAAImE,WAAW,IAAI,CAAAA,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEiD,MAAM,MAAK,SAAS,EAAE;cAAA,IAAAiT,mBAAA;cACpD,IAAI,CAAC/F,UAAU,CACb;gBACEwB,IAAI,EAAE,YAAY;gBAClBC,QAAQ,EAAE;cACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACuE,0BAA0B,EAC3C;gBACEC,WAAW,EAAErW,WAAW,aAAXA,WAAW,wBAAAkW,mBAAA,GAAXlW,WAAW,CAAEsW,MAAM,cAAAJ,mBAAA,uBAAnBA,mBAAA,CAAqBK;cACpC,CACF,CAAC;YACH;UACF;QAAC,SAAA7V,GAAA;UAAAsV,UAAA,CAAAxd,CAAA,CAAAkI,GAAA;QAAA;UAAAsV,UAAA,CAAAhd,CAAA;QAAA;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA6I,GAAA;IAAAhG,KAAA,EAMA,SAAA8J,cAAcA,CAACrF,QAAgB,EAAEtD,IAAY,EAAE;MAC7C,IAAIsD,QAAQ,IAAI,CAAC,IAAAkW,eAAO,EAAC,IAAI,CAAClW,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAACa,WAAW,CAACb,QAAQ,GAAGuF,sBAAa,CAACmJ,KAAK,CAAC1O,QAAQ,CAAC;QACzD,IAAAmW,qBAAA,GAgCI5Q,sBAAa,CAAC6Q,WAAW,CAAC,IAAI,CAACpW,QAAQ,EAAEA,QAAQ,CAAC;UAAAqW,sBAAA,GAAAF,qBAAA,CA/BpDG,OAAO;UACLC,mBAAmB,GAAAF,sBAAA,CAAnBE,mBAAmB;UACnBC,yBAAyB,GAAAH,sBAAA,CAAzBG,yBAAyB;UACzBC,0BAA0B,GAAAJ,sBAAA,CAA1BI,0BAA0B;UAC1BC,oBAAoB,GAAAL,sBAAA,CAApBK,oBAAoB;UACpBC,qBAAqB,GAAAN,sBAAA,CAArBM,qBAAqB;UACrBC,+BAA+B,GAAAP,sBAAA,CAA/BO,+BAA+B;UAC/BC,kCAAkC,GAAAR,sBAAA,CAAlCQ,kCAAkC;UAClCC,uBAAuB,GAAAT,sBAAA,CAAvBS,uBAAuB;UACvBC,uBAAuB,GAAAV,sBAAA,CAAvBU,uBAAuB;UACvBC,kBAAkB,GAAAX,sBAAA,CAAlBW,kBAAkB;UAClBC,sBAAsB,GAAAZ,sBAAA,CAAtBY,sBAAsB;UACtBC,qBAAqB,GAAAb,sBAAA,CAArBa,qBAAqB;UACrBC,sBAAsB,GAAAd,sBAAA,CAAtBc,sBAAsB;UACtBC,wBAAwB,GAAAf,sBAAA,CAAxBe,wBAAwB;UACxBC,mBAAmB,GAAAhB,sBAAA,CAAnBgB,mBAAmB;UACnBC,8BAA8B,GAAAjB,sBAAA,CAA9BiB,8BAA8B;UAC9BC,gCAAgC,GAAAlB,sBAAA,CAAhCkB,gCAAgC;UAChCC,mBAAmB,GAAAnB,sBAAA,CAAnBmB,mBAAmB;UACnBC,eAAe,GAAApB,sBAAA,CAAfoB,eAAe;UACfC,wBAAwB,GAAArB,sBAAA,CAAxBqB,wBAAwB;UACxBC,iBAAiB,GAAAtB,sBAAA,CAAjBsB,iBAAiB;UACjBC,qBAAqB,GAAAvB,sBAAA,CAArBuB,qBAAqB;UACrBC,gCAAgC,GAAAxB,sBAAA,CAAhCwB,gCAAgC;UAChCC,mBAAmB,GAAAzB,sBAAA,CAAnByB,mBAAmB;UACnBC,2BAA2B,GAAA1B,sBAAA,CAA3B0B,2BAA2B;UAC3BC,8BAA8B,GAAA3B,sBAAA,CAA9B2B,8BAA8B;UAC9BC,0BAA0B,GAAA5B,sBAAA,CAA1B4B,0BAA0B;UAC1BC,wBAAwB,GAAA7B,sBAAA,CAAxB6B,wBAAwB;UAE1BC,OAAO,GAAAhC,qBAAA,CAAPgC,OAAO;QAGT,IAAIjB,qBAAqB,EAAE;UACzB,IAAI,CAACrH,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAAC6G,8BAA8B,EAC/C;YAAC3Q,KAAK,EAAE0Q,OAAO,CAACE;UAAW,CAC7B,CAAC;QACH;QAEA,IAAIlB,sBAAsB,EAAE;UAC1B,IAAI,CAACtH,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAAC+G,8BAA8B,EAC/C;YAAC7Q,KAAK,EAAE0Q,OAAO,CAACI;UAAY,CAC9B,CAAC;QACH;QAEA,IAAInB,wBAAwB,EAAE;UAC5B,IAAI,CAACvH,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACiH,gCAAgC,EACjD;YAAC/Q,KAAK,EAAE0Q,OAAO,CAACM;UAAc,CAChC,CAAC;QACH;QAEA,IAAIpB,mBAAmB,IAAIC,8BAA8B,EAAE;UACzD,IAAI,CAACzH,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACmH,0BAA0B,EAC3C;YAACjR,KAAK,EAAE0Q,OAAO,CAACQ;UAAS,CAC3B,CAAC;QACH;QAEA,IAAIpB,gCAAgC,EAAE;UACpC,IAAI,CAAC1H,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACqH,2CAA2C,EAC5D;YAACnR,KAAK,EAAE0Q,OAAO,CAACU;UAAsB,CACxC,CAAC;QACH;QAEA,IAAIrB,mBAAmB,EAAE;UACvB,IAAI,CAAC3H,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACuH,2BAA2B,EAC5C;YAACrR,KAAK,EAAE0Q,OAAO,CAACY;UAAS,CAC3B,CAAC;QACH;QAEA,IAAItB,eAAe,EAAE;UACnB,IAAI,CAAC5H,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACyH,sBAAsB,EACvC;YAACvR,KAAK,EAAE0Q,OAAO,CAACc;UAAK,CACvB,CAAC;QACH;QAEA,IAAI1C,mBAAmB,IAAIC,yBAAyB,EAAE;UACpD,IAAI/O,KAAK,GAAG,IAAI;UAEhB,IAAI+O,yBAAyB,EAAE;YAC7B,IAAI2B,OAAO,CAAC5C,MAAM,CAAC2D,MAAM,EAAE;cACzBzR,KAAK,GAAG0R,0BAAe,CAACC,MAAM;YAChC,CAAC,MAAM;cACL;cACA3R,KAAK,GAAG0Q,OAAO,CAAC5C,MAAM,CAAC8D,SAAS,GAAGF,0BAAe,CAACG,OAAO,GAAGH,0BAAe,CAAC7E,IAAI;YACnF;UACF,CAAC,MAAM,IAAIiC,mBAAmB,EAAE;YAC9B9O,KAAK,GAAG0Q,OAAO,CAAC5C,MAAM,CAAC8D,SAAS,GAAGF,0BAAe,CAACI,SAAS,GAAGJ,0BAAe,CAAC7E,IAAI;UACrF;UAEA,IAAI,CAACzE,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACiI,0BAA0B,EAC3C;YACE/R,KAAK,EAALA,KAAK;YACL+N,UAAU,EAAE2C,OAAO,CAAC5C,MAAM,CAACC,UAAU;YACrCiE,YAAY,EAAEtB,OAAO,CAAC5C,MAAM,CAACkE;UAC/B,CACF,CAAC;QACH;QAEA,IAAIhD,0BAA0B,EAAE;UAC9B,IAAOiD,mBAAmB,GAAIvB,OAAO,CAACwB,gBAAgB,CAA/CD,mBAAmB;UAE1B,IAAI,CAAC7J,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACqI,kCAAkC,EACnD;YACEF,mBAAmB,EAAnBA;UACF,CACF,CAAC;QACH;QAEA,IAAIhD,oBAAoB,EAAE;UACxB,IAAAmD,mBAAA,GAAgC1B,OAAO,CAAC2B,UAAU;YAA3CC,YAAY,GAAAF,mBAAA,CAAZE,YAAY;YAAEC,OAAO,GAAAH,mBAAA,CAAPG,OAAO;UAE5B,IAAI,CAACnK,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC0I,mCAAmC,EACpD;YACEF,YAAY,EAAZA,YAAY;YACZC,OAAO,EAAPA;UACF,CACF,CAAC;QACH;QAEA,IAAIrD,qBAAqB,EAAE;UACzB,IAAOuD,WAAW,GAAI/B,OAAO,CAAC2B,UAAU,CAAjCI,WAAW;UAElB,IAAI,CAACrK,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC4I,sCAAsC,EACvD;YACED,WAAW,EAAXA;UACF,CACF,CAAC;QACH;QAEA,IAAItD,+BAA+B,EAAE;UACnC,IAAI,CAAC/G,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC6I,wCAAwC,EACzD;YACEC,qBAAqB,EAAElC,OAAO,CAAC2B,UAAU,CAACO;UAC5C,CACF,CAAC;QACH;QAEA,IAAIxD,kCAAkC,EAAE;UACtC,IAAOyD,cAAc,GAAInC,OAAO,CAAC2B,UAAU,CAApCQ,cAAc;UAErB,IAAI,CAACzK,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACgJ,sDAAsD,EACvE;YACED,cAAc,EAAdA;UACF,CACF,CAAC;QACH;QAEA,IAAIxD,uBAAuB,EAAE;UAC3B,IAAO0D,OAAO,GAAIrC,OAAO,CAACsC,oBAAoB,CAAvCD,OAAO;UAEd,IAAI,CAAC3K,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACmJ,uCAAuC,EACxD;YACEF,OAAO,EAAPA;UACF,CACF,CAAC;QACH;QAEA,IAAIxD,kBAAkB,EAAE;UACtB,IAAO2D,QAAQ,GAAIxC,OAAO,CAAnBwC,QAAQ;UAEfA,QAAQ,CAACC,cAAc,GAAGC,kBAAS,CAACC,yBAAyB,CAC3Dpe,IAAI,EACJ,IAAI,CAAC+D,KAAK,CAACuM,QAAQ,CAACnQ,MAAM,CAAC8B,GAC7B,CAAC;UACD,IAAI,CAACkR,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACwJ,iCAAiC,EAClD;YACEJ,QAAQ,EAARA;UACF,CACF,CAAC;QACH;QAEA,IAAIjD,wBAAwB,EAAE;UAC5B,IAAOsD,cAAc,GAAI7C,OAAO,CAAzB6C,cAAc;UACrB,IAAI,CAACnL,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC0J,uCAAuC,EACxD;YACED,cAAc,EAAdA;UACF,CACF,CAAC;QACH;QAEA,IAAIjE,uBAAuB,EAAE;UAC3B,IAAOmE,aAAa,GAAI/C,OAAO,CAAxB+C,aAAa;UAEpB,IAAI,CAAC1a,aAAa,CAAC;YAAC0a,aAAa,EAAbA;UAAa,CAAC,CAAC;UAEnC,IAAI,CAACrL,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC4J,gCAAgC,EACjD;YACED,aAAa,EAAbA;UACF,CACF,CAAC;QACH;;QAEA;QACA;QACA,IAAIjE,sBAAsB,EAAE;UAC1B,IAAOmE,YAAY,GAAIjD,OAAO,CAAvBiD,YAAY;UAEnB,IAAI,CAAC5a,aAAa,CAAC;YAAC6a,kBAAkB,EAAED;UAAY,CAAC,CAAC;UAEtD,IAAI,CAACvL,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC+J,qCAAqC,EACtD;YACE;YACAC,aAAa,EAAEH;UACjB,CACF,CAAC;QACH;QAEA,IAAIzD,iBAAiB,EAAE;UACrB,IAAI,CAAC9H,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACiK,wBAAwB,EACzC;YAAC/T,KAAK,EAAE0Q,OAAO,CAACsD;UAAc,CAChC,CAAC;QACH;QAEA,IAAI7D,qBAAqB,EAAE;UACzB,IAAI,CAAC/H,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACmK,6BAA6B,EAC9C;YAACjU,KAAK,EAAE0Q,OAAO,CAACwD;UAAW,CAC7B,CAAC;QACH;QAEA,IAAI9D,gCAAgC,EAAE;UACpC,IAAI,CAAChI,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACqK,wCAAwC,EACzD;YAACnU,KAAK,EAAE0Q,OAAO,CAAC0D;UAAe,CACjC,CAAC;QACH;QAEA,IAAI/D,mBAAmB,EAAE;UACvB,IAAI,CAACjI,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACuK,2BAA2B,EAC5C;YAACrU,KAAK,EAAE0Q,OAAO,CAAC4D;UAAW,CAC7B,CAAC;QACH;QAEA,IAAIhE,2BAA2B,EAAE;UAC/B,IAAI,CAAClI,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAACyK,2BAA2B,EAC5C;YAACvU,KAAK,EAAE0Q,OAAO,CAAC8D;UAAiB,CACnC,CAAC;QACH;QAEA,IAAIjE,8BAA8B,EAAE;UAClC,IAAI,CAACnI,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAAC2K,uCAAuC,EACxD;YAACzU,KAAK,EAAE0Q,OAAO,CAACgE;UAAU,CAC5B,CAAC;QACH;QAEA,IAAIlE,0BAA0B,EAAE;UAC9B,IAAI,CAACpI,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAAC6K,2BAA2B,EAC5C;YAAC3U,KAAK,EAAE0Q,OAAO,CAACkE;UAAgB,CAClC,CAAC;QACH;QAEA,IAAInE,wBAAwB,EAAE;UAC5B,IAAI,CAACrI,UAAU,CACb;YAACwB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDuE,oBAAS,CAACtE,MAAM,CAAC+K,yCAAyC,EAC1D;YAAC7U,KAAK,EAAE0Q,OAAO,CAACoE;UAAqB,CACvC,CAAC;QACH;QAEA,IAAI,CAACvc,QAAQ,GAAGA,QAAQ;MAC1B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAuB,GAAA;IAAAhG,KAAA,EAMA,SAAA4J,qBAAqBA,CAACC,eAAuB,EAAElF,IAAS,EAAE;MACxD,IAAIkF,eAAe,IAAI,CAAC,IAAA8Q,eAAO,EAAC,IAAI,CAAC9Q,eAAe,EAAEA,eAAe,CAAC,EAAE;QACtE,IAAI,CAACA,eAAe,GAAGA,eAAe;QACtC,IAAI,CAAC5E,aAAa,CAAC;UAAC4E,eAAe,EAAfA;QAAe,CAAC,CAAC;MACvC,CAAC,MAAM,IACLlF,IAAI,IACJA,IAAI,CAACkF,eAAe,IACpB,CAAC,IAAA8Q,eAAO,EAAC,IAAI,CAAC9Q,eAAe,EAAElF,IAAI,CAACkF,eAAe,CAAC,EACpD;QACA,IAAI,CAACA,eAAe,GAAGlF,IAAI,CAACkF,eAAe;QAC3C,IAAI,CAAC5E,aAAa,CAAC;UAAC4E,eAAe,EAAElF,IAAI,CAACkF;QAAe,CAAC,CAAC;MAC7D;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA7D,GAAA;IAAAhG,KAAA,EAKA,SAAA8W,aAAaA,CAACxN,OAAe,EAAE;MAC7B,IAAIA,OAAO,IAAI,CAAC,IAAAqR,eAAO,EAAC,IAAI,CAACrR,OAAO,EAAEA,OAAO,CAAC,EAAE;QAC9C,IAAI,CAACA,OAAO,GAAGA,OAAO;MACxB;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAtD,GAAA;IAAAhG,KAAA,EAMA,SAAAyK,WAAWA,CAAC/F,KAAa,EAAE;MAAA,IAAAuc,WAAA,EAAAC,YAAA;MACzB,IAAAC,KAAA,GAA8Bzc,KAAK,IAAI,CAAC,CAAC;QAAlC0c,QAAQ,GAAAD,KAAA,CAARC,QAAQ;QAAEnT,SAAS,GAAAkT,KAAA,CAATlT,SAAS;MAE1B,IAAImT,QAAQ,IAAI,CAAC,IAAAzG,eAAO,GAAAsG,WAAA,GAAC,IAAI,CAACvc,KAAK,cAAAuc,WAAA,uBAAVA,WAAA,CAAYG,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACxD,IAAI,CAAC9M,UAAU,CACb;UACEwB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACqL,cAAc,EAC/B;UACED,QAAQ,EAARA;QACF,CACF,CAAC;MACH;MAEA,IAAInT,SAAS,IAAI,CAAC,IAAA0M,eAAO,GAAAuG,YAAA,GAAC,IAAI,CAACxc,KAAK,cAAAwc,YAAA,uBAAVA,YAAA,CAAYjT,SAAS,EAAEA,SAAS,CAAC,EAAE;QAC3D,IAAI,CAACqG,UAAU,CACb;UACEwB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACsL,eAAe,EAChC;UACErT,SAAS,EAATA;QACF,CACF,CAAC;MACH;MAEA,IAAI,CAACvJ,KAAK,GAAGA,KAAK;IACpB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAsB,GAAA;IAAAhG,KAAA,EAKA,SAAAkK,eAAeA,CAACtF,SAAiB,EAAE;MACjC,IAAIA,SAAS,IAAI,CAAC,IAAA+V,eAAO,EAAC,IAAI,CAAC/V,SAAS,EAAEA,SAAS,CAAC,EAAE;QACpD,IAAM2c,MAAM,GAAGC,kBAAS,CAACC,YAAY,CAAC,IAAI,CAAC7c,SAAS,EAAEA,SAAS,CAAC;QAEhE,IAAI,CAACK,aAAa,CAACsc,MAAM,CAAC3E,OAAO,CAAC;QAElC,IAAI2E,MAAM,CAACxG,OAAO,CAAC2G,qBAAqB,EAAE;UACxC,IAAI,CAACpN,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC2L,+BAA+B,EAChD;YACEC,aAAa,EAAEL,MAAM,CAACM,QAAQ,IAAIN,MAAM,CAACM,QAAQ,CAACC,YAAY;YAC9DC,YAAY,EAAER,MAAM,CAAC3E,OAAO,CAACkF;UAC/B,CACF,CAAC;QACH;QAEA,IAAIP,MAAM,CAACxG,OAAO,CAACiH,oBAAoB,EAAE;UACvC,IAAI,CAAC1N,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACiM,sBAAsB,EACvC;YACEve,IAAI,EAAE6d,MAAM,CAAC3E,OAAO,CAAClZ;UACvB,CACF,CAAC;QACH;QACA,IAAI,CAAC4B,WAAW,CAACV,SAAS,GAAG2c,MAAM,CAAC3E,OAAO;QAC3C,IAAI,CAAChY,SAAS,GAAGA,SAAS;MAC5B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAoB,GAAA;IAAAhG,KAAA,EAOA,SAAAsK,cAAcA,CAACC,IAAY,EAAE;MAC3B,IAAIA,IAAI,IAAI,CAAC,IAAAoQ,eAAO,EAAC,IAAI,CAACpQ,IAAI,EAAEA,IAAI,CAAC,EAAE;QACrC,IAAM2X,WAAW,GAAGC,kBAAS,CAACC,QAAQ,CAAC,IAAI,CAAC7X,IAAI,EAAEA,IAAI,CAAC;QAEvD,IAAI,CAACtF,aAAa,CAACid,WAAW,CAACtF,OAAO,CAAC;QACvC,IAAI,CAACtX,WAAW,CAACiF,IAAI,GAAG2X,WAAW,CAACtF,OAAO;QAC3C,IAAIsF,WAAW,CAACnH,OAAO,CAACsH,SAAS,EAAE;UACjC,IAAI,CAAC5c,qBAAqB,CAAC2T,kBAAkB,GAAG,IAAI;UACpD,IAAI,CAAC9E,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACsM,sBAAsB,EAC7B;YACEC,OAAO,EAAEL,WAAW,CAACtF,OAAO;YAC5B4F,OAAO,EAAEN,WAAW,CAACL;UACvB,CACF,CAAC;QACH;QACA,IAAI,CAACtX,IAAI,GAAGA,IAAI;MAClB,CAAC,MAAM;QACL,IAAI,CAAC9E,qBAAqB,CAAC2T,kBAAkB,GAAG,KAAK;MACvD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAApT,GAAA;IAAAhG,KAAA,EAMA,SAAAmK,iBAAiBA,CAACxF,IAAY,EAAExD,IAAa,EAAE;MAAA,IAAAshB,qBAAA;MAC7C,IAAM1R,KAAK,GAAG5P,IAAI,GAAGme,kBAAS,CAACoD,QAAQ,CAACvhB,IAAI,CAAC,GAAG,EAAAshB,qBAAA,OAAI,CAACnd,WAAW,CAACnE,IAAI,cAAAshB,qBAAA,uBAArBA,qBAAA,CAAuB1R,KAAK,KAAI,EAAE;MAClF,IAAKpM,IAAI,IAAI,CAAC,IAAAgW,eAAO,EAAC,IAAI,CAAChW,IAAI,EAAEA,IAAI,CAAC,IAAM,CAAC,IAAAgW,eAAO,EAAC,IAAI,CAAC5J,KAAK,EAAEA,KAAK,CAAC,IAAIpM,IAAK,EAAE;QAChF,IAAMge,QAAQ,GAAGrD,kBAAS,CAACqD,QAAQ,CAACxhB,IAAI,IAAI,IAAI,CAACmE,WAAW,CAACnE,IAAI,CAAC;QAClE,IAAMyhB,UAAU,GAAGC,kBAAS,CAACC,QAAQ,CAAC,IAAI,CAACxd,WAAW,CAACX,IAAI,EAAEA,IAAI,EAAEoM,KAAK,EAAE4R,QAAQ,CAAC;QAEnF,IAAIC,UAAU,CAAC7H,OAAO,CAACgI,QAAQ,EAAE;UAC/B,IAAI,CAACzO,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACgN,cAAc,EAC/Bre,IACF,CAAC;QACH;QACA,IAAIie,UAAU,CAAC7H,OAAO,CAACkI,UAAU,EAAE;UACjC,IAAI,CAAC3O,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACkN,gBAAgB,EACjCve,IACF,CAAC;QACH;QAEA,IAAI,CAACA,IAAI,GAAGA,IAAI;QAChB,IAAI,CAACW,WAAW,CAACX,IAAI,GAAGie,UAAU,CAAChG,OAAO;QAC1C;QACA,IAAI,CAAC3X,aAAa,CAAC2d,UAAU,CAAChG,OAAO,CAAC;QAEtC,IAAI,CAACtI,UAAU,CACb;UACEwB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACmN,oBAAoB,EACrC;UACEC,cAAc,EAAE,CAACjiB,IAAI,CAAE;QACzB,CACF,CAAC;MACH;MACA,IAAI,CAAC4P,KAAK,GAAGA,KAAK;IACpB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA/K,GAAA;IAAAhG,KAAA,EAKA,SAAAoK,kBAAkBA,CAAC7F,YAAoB,EAAE;MACvC;MACA,IAAI8e,0BAAiB,CAACC,UAAU,CAAC,IAAI,CAAC/e,YAAY,EAAEA,YAAY,CAAC,EAAE;QACjE;MACF;MAEA,IAAMgf,kBAAkB,GAAGF,0BAAiB,CAAClQ,KAAK,CAAC5O,YAAY,CAAC;MAEhE,IAAI,CAACU,aAAa,CAAC;QAACV,YAAY,EAAEgf;MAAkB,CAAC,CAAC;MAEtD,IAAI,CAACjP,UAAU,CACb;QACEwB,IAAI,EAAE,YAAY;QAClBC,QAAQ,EAAE;MACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACwN,qBAAqB,EACtCD,kBACF,CAAC;MACD,IAAI,CAAChf,YAAY,GAAGA,YAAY;IAClC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAyB,GAAA;IAAAhG,KAAA,EAQA,SAAAwK,iBAAiBA,CAACnG,WAAmB,EAAuB;MAAA,IAArBof,WAAW,GAAAzkB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA0C,SAAA,GAAA1C,SAAA,MAAG,KAAK;MACxD,IAAIqF,WAAW,KAAK,CAAC,IAAAsW,eAAO,EAAC,IAAI,CAACtW,WAAW,EAAEA,WAAW,CAAC,IAAIof,WAAW,CAAC,EAAE;QAC3E,IAAMC,iBAAiB,GAAGC,yBAAgB,CAACC,cAAc,CAAC,IAAI,CAACvf,WAAW,EAAEA,WAAW,CAAC;QAExF,IAAI,CAACY,aAAa,CAACye,iBAAiB,CAAC9G,OAAO,CAAC;QAC7C,IAAI,CAACtX,WAAW,CAACjB,WAAW,GAAGqf,iBAAiB,CAAC9G,OAAO;QACxD,IAAI,CAACvY,WAAW,GAAGA,WAAW;QAC9B,IAAI,CAACiQ,UAAU,CACb;UACEwB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAAC6N,8BAA8B,EACrC;UACEjH,OAAO,EAAE8G,iBAAiB,CAAC9G,OAAO;UAClCiF,QAAQ,EAAE6B,iBAAiB,CAAC7B,QAAQ;UACpC4B,WAAW,EAAXA;QACF,CACF,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAzd,GAAA;IAAAhG,KAAA,EAKA,SAAA+W,cAAcA,CAACtV,QAAgB,EAAE;MAC/B,IAAIA,QAAQ,IAAI,CAAC,IAAAkZ,eAAO,EAAC,IAAI,CAAClZ,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MAC1B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAuE,GAAA;IAAAhG,KAAA,EAOA,SAAAqK,UAAUA,CAAClJ,IAAS,EAAE;MACpB,IAAIA,IAAI,EAAE;QAAA,IAAA2iB,sBAAA,EAAAC,qBAAA;QACR;QACA,IAAMC,YAAY,GAAG1E,kBAAS,CAAC2E,SAAS,CACtC,IAAI,CAAC3e,WAAW,CAACnE,IAAI,EACrBA,IAAI,EACJ,IAAI,CAAC+D,KAAK,CAACuM,QAAQ,CAACnQ,MAAM,CAAC8B,GAAG,EAC9B,IAAI,CAACD,YAAY,CAAC;QACpB,CAAC;QAED,IAAI,CAAC8B,aAAa,CAAC+e,YAAY,CAACpH,OAAO,CAAC;QACxC,IAAI,CAACtX,WAAW,CAACnE,IAAI,GAAG6iB,YAAY,CAACpH,OAAO;QAE5C,IAAMnZ,OAAO,GAAG,IAAI,CAAC6B,WAAW,CAACC,MAAM,CAAC,IAAI,CAACD,WAAW,CAACC,MAAM,CAACtG,MAAM,GAAG,CAAC,CAAC;QAE3E,IAAIwE,OAAO,KAAKugB,YAAY,CAACpH,OAAO,CAAC1Q,KAAK,EAAE;UAC1C,IAAI,CAAC5G,WAAW,CAACC,MAAM,CAACzG,IAAI,CAACklB,YAAY,CAACpH,OAAO,CAAC1Q,KAAK,CAAC;QAC1D;;QAEA;QACA;QACA,IAAMqV,MAAM,GAAGjC,kBAAS,CAAC4E,SAAS,CAChC,IAAI,CAAC9M,eAAe,CAAC,IAAI,CAACjU,YAAY,EAAEhC,IAAI,CAAC,GAAA2iB,sBAAA,GAC7C,IAAI,CAACxe,WAAW,CAACV,SAAS,cAAAkf,sBAAA,uBAA1BA,sBAAA,CAA4BpgB,IAAI,GAAAqgB,qBAAA,GAChC,IAAI,CAACze,WAAW,CAACX,IAAI,cAAAof,qBAAA,uBAArBA,qBAAA,CAAuBI,MACzB,CAAC;QAED,IAAI5C,MAAM,aAANA,MAAM,eAANA,MAAM,CAAE4C,MAAM,EAAE;UAClB,IAAI,CAAClf,aAAa,CAACsc,MAAM,CAAC;QAC5B;QAEA,IAAIyC,YAAY,CAACjJ,OAAO,CAACqJ,gBAAgB,EAAE;UACzC,IAAI,CAAC3e,qBAAqB,CAAC4T,kBAAkB,GAAG,IAAI;QACtD,CAAC,MAAM;UACL,IAAI,CAAC5T,qBAAqB,CAAC4T,kBAAkB,GAAG,KAAK;QACvD;QAEA,IAAI2K,YAAY,CAACjJ,OAAO,CAACsJ,aAAa,EAAE;UACtC,IAAI,CAAC/P,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACsO,+BAA+B,EAChD;YAACC,MAAM,EAAEP,YAAY,CAACpH,OAAO,CAAC2H;UAAM,CACtC,CAAC;QACH;QAEA,IAAIP,YAAY,CAACjJ,OAAO,CAACyJ,gBAAgB,EAAE;UACzC,IAAI,CAAClQ,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACyO,8BAA8B,EAC/C;YAACC,gBAAgB,EAAEV,YAAY,CAACpH,OAAO,CAAC8H;UAAgB,CAC1D,CAAC;QACH;QAEA,IAAIV,YAAY,CAACjJ,OAAO,CAAC4J,UAAU,EAAE;UACnC,IAAI,CAACrQ,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC4O,wBAAwB,EACzC;YACEC,GAAG,EAAEb,YAAY,CAACpH,OAAO,CAACiI;UAC5B,CACF,CAAC;QACH;QAEA,IAAIb,YAAY,CAACjJ,OAAO,CAAC+J,aAAa,EAAE;UACtC,IAAI,CAACxQ,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC+O,eAAe,EAChC;YACE7K,MAAM,EAAE8J,YAAY,CAACpH,OAAO,CAAC1C;UAC/B,CACF,CAAC;QACH;QAEA,IAAI8J,YAAY,CAACjJ,OAAO,CAACiK,qBAAqB,EAAE;UAC9C,IAAI,CAAC1Q,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACiP,mCAAmC,EACpD;YACExF,cAAc,EAAEuE,YAAY,CAACpH,OAAO,CAAC6C,cAAc;YACnDyF,iBAAiB,EAAElB,YAAY,CAACpH,OAAO,CAAC1C;UAC1C,CACF,CAAC;QACH;QAEA,IAAI8J,YAAY,CAACjJ,OAAO,CAACoK,yBAAyB,EAAE;UAClD,IAAI,CAAC7Q,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACoP,4BAA4B,EAC7C;YAAChe,MAAM,EAAEjG,IAAI,CAACiG;UAAM,CACtB,CAAC;QACH;QAEA,IAAI4c,YAAY,CAACjJ,OAAO,CAACqJ,gBAAgB,EAAE;UACzC,IAAI,CAAC9P,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACqP,sBAAsB,EACvClkB,IACF,CAAC;QACH;QAEA,IAAI6iB,YAAY,CAACjJ,OAAO,CAACuK,cAAc,EAAE;UAAA,IAAAC,qBAAA,EAAAC,qBAAA;UACvC,IAAI,CAAClR,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACyP,kBAAkB,EACnC;YAACC,QAAQ,GAAAH,qBAAA,GAAEvB,YAAY,CAACnC,QAAQ,cAAA0D,qBAAA,uBAArBA,qBAAA,CAAuBxU,KAAK;YAAE4U,QAAQ,GAAAH,qBAAA,GAAExB,YAAY,CAACpH,OAAO,cAAA4I,qBAAA,uBAApBA,qBAAA,CAAsBzU;UAAK,CAChF,CAAC;QACH;QAEA,IAAIiT,YAAY,CAACjJ,OAAO,CAAC6K,2BAA2B,EAAE;UACpD,IAAI,CAACtR,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC+J,qCAAqC,EACtD;YACE8F,KAAK,EAAE7B,YAAY,CAACpH,OAAO,CAACkJ;YAC5B;UACF,CACF,CAAC;QACH;QACA,IAAI9B,YAAY,CAACjJ,OAAO,CAACgL,gCAAgC,EAAE;UACzD,IAAI,CAACzR,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACgQ,qBAAqB,EACtC;YACEH,KAAK,EAAE7B,YAAY,CAACpH,OAAO,CAACqJ,WAAW;YACvCjG,aAAa,EAAEgE,YAAY,CAACpH,OAAO,CAACoD;UACtC,CACF,CAAC;QACH;QACA,IAAIgE,YAAY,CAACjJ,OAAO,CAACmL,sBAAsB,EAAE;UAC/C,IAAI,CAAC5R,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACmQ,+BAA+B,EAChD;YACEN,KAAK,EAAE7B,YAAY,CAACpH,OAAO,CAACqJ,WAAW;YACvCjG,aAAa,EAAEgE,YAAY,CAACpH,OAAO,CAACoD;UACtC,CACF,CAAC;QACH;QACA,IAAIgE,YAAY,CAACjJ,OAAO,CAACqL,iCAAiC,EAAE;UAC1D,IAAI,CAAC9R,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACqQ,sBAAsB,EACvC,CAAC,CACH,CAAC;QACH;QACA,IAAIrC,YAAY,CAACjJ,OAAO,CAACuL,mBAAmB,EAAE;UAC5C,IAAI,CAAChS,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACuQ,qBAAqB,EACtCplB,IACF,CAAC;QACH;QACA,IAAI6iB,YAAY,CAACjJ,OAAO,CAACyL,mBAAmB,EAAE;UAC5C,IAAI,CAAClS,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACyQ,mBAAmB,EACpCtlB,IACF,CAAC;QACH;QAEA,IAAI6iB,YAAY,CAACjJ,OAAO,CAAC2L,eAAe,EAAE;UACxC,IAAI,CAACpS,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC;UACD;UACAuE,oBAAS,CAACtE,MAAM,CAAC2Q,gBAAgB,EACjCrH,kBAAS,CAACsH,cAAc,CAACzlB,IAAI,CAAC0lB,aAAa,CAC7C,CAAC;QACH;QAEA,IACE7C,YAAY,CAACjJ,OAAO,CAAC+L,gBAAgB,IACrC9C,YAAY,CAACjJ,OAAO,CAACgM,gBAAgB,IACrC/C,YAAY,CAACjJ,OAAO,CAACiM,gBAAgB,EACrC;UAAA,IAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;UACA,IAAI,CAAC7S,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACoR,mBAAmB,EACpC;YACEC,WAAW,GAAAJ,sBAAA,GAAEjD,YAAY,CAACpH,OAAO,CAAC0K,kBAAkB,cAAAL,sBAAA,uBAAvCA,sBAAA,CAAyCM,KAAK;YAC3DC,WAAW,GAAAN,sBAAA,GAAElD,YAAY,CAACpH,OAAO,CAAC0K,kBAAkB,cAAAJ,sBAAA,uBAAvCA,sBAAA,CAAyCxJ,KAAK;YAC3D+J,WAAW,GAAAN,sBAAA,GAAEnD,YAAY,CAACpH,OAAO,CAAC0K,kBAAkB,cAAAH,sBAAA,uBAAvCA,sBAAA,CAAyCO;UACxD,CACF,CAAC;QACH;QAEA,IAAI1D,YAAY,CAACjJ,OAAO,CAAC4M,eAAe,EAAE;UACxC,IAAI,CAACrT,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC4R,cACnB,CAAC;QACH;QAEA,IAAI5D,YAAY,CAACjJ,OAAO,CAAC8M,mCAAmC,EAAE;UAC5D,IAAI,CAACvT,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAAC8R,wCAAwC,EACzD;YAACC,4BAA4B,EAAE/D,YAAY,CAACpH,OAAO,CAACmL;UAA4B,CAClF,CAAC;QACH;QAEA,IAAI/D,YAAY,CAACjJ,OAAO,CAACiN,uBAAuB,EAAE;UAChD,IAAI,CAAC1T,UAAU,CACb;YACEwB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuE,oBAAS,CAACtE,MAAM,CAACiS,8BAA8B,EAC/C;YAACC,gBAAgB,EAAElE,YAAY,CAACpH,OAAO,CAACsL;UAAgB,CAC1D,CAAC;QACH;QAEA,IAAI,CAAC5T,UAAU,CACb;UACEwB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAACmS,sBAAsB,EAC7B;UACEC,OAAO,EAAEpE,YAAY,CAACnC,QAAQ;UAC9BwG,OAAO,EAAErE,YAAY,CAACpH;QACxB,CACF,CAAC;QACD,IAAI,CAACtX,WAAW,CAACnE,IAAI,GAAG6iB,YAAY,CAACpH,OAAO;QAC5C;QACA,IAAI,CAACzb,IAAI,GAAGA,IAAI;MAClB,CAAC,MAAM;QACL,IAAI,CAACsE,qBAAqB,CAAC4T,kBAAkB,GAAG,KAAK;MACvD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAArT,GAAA;IAAAhG,KAAA,EAOA,SAAA+J,cAAcA,CAAC3G,GAAW,EAAsB;MAAA,IAApBklB,WAAW,GAAAtpB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA0C,SAAA,GAAA1C,SAAA,MAAG,IAAI;MAC5C,IAAIoE,GAAG,IAAI,IAAI,CAACA,GAAG,KAAKA,GAAG,EAAE;QAC3B,IAAI,CAACA,GAAG,GAAGA,GAAG;QACd,IAAI,CAAC6B,aAAa,CAAC;UAACpD,QAAQ,EAAEuB;QAAG,CAAC,CAAC;QACnC,IAAI,CAACkR,UAAU,CACb;UACEwB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAACuS,qBAAqB,EAC5B;UAACnlB,GAAG,EAAHA,GAAG;UAAEklB,WAAW,EAAXA;QAAW,CACnB,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAtiB,GAAA;IAAAhG,KAAA,EAKA,SAAAgX,YAAYA,CAACxN,MAAc,EAAE;MAC3B,IAAIA,MAAM,IAAI,CAAC,IAAAmR,eAAO,EAAC,IAAI,CAACnR,MAAM,EAAEA,MAAM,CAAC,EAAE;QAC3C,IAAI,CAACA,MAAM,GAAGA,MAAM;MACtB;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAxD,GAAA;IAAAhG,KAAA,EAKA,SAAAiX,gBAAgBA,CAAChP,YAAoB,EAAE;MACrC,IAAIA,YAAY,IAAI,CAAC,IAAA0S,eAAO,EAAC,IAAI,CAAC1S,YAAY,EAAEA,YAAY,CAAC,EAAE;QAC7D,IAAI,CAACA,YAAY,GAAGA,YAAY;MAClC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAjC,GAAA;IAAAhG,KAAA,EAKA,SAAAkX,cAAcA,CAACzN,QAAgB,EAAE;MAC/B,IAAIA,QAAQ,IAAI,CAAC,IAAAkR,eAAO,EAAC,IAAI,CAAClR,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MAC1B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAzD,GAAA;IAAAhG,KAAA,EAMA,SAAA0J,gBAAgBA,CAACxG,KAAU,EAAE;MAC3B,IAAM+G,gBAAgB,GAAGD,sBAAa,CAACC,gBAAgB,CAAC/G,KAAK,CAAC;MAC9D,IAAI+G,gBAAgB,EAAE;QACpB,IAAI,CAACue,2BAA2B,CAACtlB,KAAK,CAAC;MACzC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA8C,GAAA;IAAAhG,KAAA,EAOA,SAAAsT,mBAAmBA,CAACmV,QAAa,EAAE;MACjC,IAAMC,YAAY,GAAG1e,sBAAa,CAAC2e,sBAAsB,CAAC,IAAI,EAAEF,QAAQ,CAAC;MAEzE,IAAIC,YAAY,CAACE,cAAc,IAAI,IAAI,CAACC,qBAAqB,EAAE;QAC7D,OAAO,IAAAhW,iBAAS,EAAC,IAAI,CAACgW,qBAAqB,CAAC;MAC9C;MACA,IAAM5e,gBAAgB,GACpB,IAAI,CAAC4e,qBAAqB,IAAI7e,sBAAa,CAACC,gBAAgB,CAAC,IAAI,CAAC4e,qBAAqB,CAAC;MAE1F,IAAI5e,gBAAgB,EAAE;QAAA,IAAA6e,eAAA,EAAAC,qBAAA,EAAAC,sBAAA;QACpB,IAAMC,QAAQ,GACZ,CAACrR,gBAAK,CAACC,KAAK,CAACqR,MAAM,EAAEtR,gBAAK,CAACC,KAAK,CAACsR,YAAY,EAAEvR,gBAAK,CAACC,KAAK,CAACqB,WAAW,CAAC,CAACkQ,QAAQ,EAAAN,eAAA,GAC9E,IAAI,CAAClkB,SAAS,cAAAkkB,eAAA,uBAAdA,eAAA,CAAgB5c,KAClB,CAAC,IAAI,GAAA6c,qBAAA,GAAC,IAAI,CAACF,qBAAqB,cAAAE,qBAAA,gBAAAC,sBAAA,GAA1BD,qBAAA,CAA4B5nB,IAAI,cAAA6nB,sBAAA,eAAhCA,sBAAA,CAAkChoB,OAAO;QAEjD,IAAI,CAACioB,QAAQ,EAAE;UACb,IAAI,CAACI,0BAA0B,CAAC,CAAC;QACnC;MACF;MAEA,OAAOZ,QAAQ;IACjB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;IACE;EAAA;IAAAziB,GAAA;IAAAhG,KAAA,EACA,SAAAyW,iBAAiBA,CAACtT,YAAY,EAAEmmB,kBAAkB,EAAE;MAClD,IAAI,CAACA,kBAAkB,IAAI,CAACA,kBAAkB,CAACrqB,MAAM,EAAE,OAAOkE,YAAY;MAC1E,IAAI,CAACA,YAAY,IAAI,CAACA,YAAY,CAAClE,MAAM,EAAE;QACzC,OAAOqqB,kBAAkB;MAC3B;MACAA,kBAAkB,CAACnqB,OAAO,CAAC,UAACgF,WAAW,EAAK;QAC1C,IAAMolB,UAAU,GAAGpmB,YAAY,CAACqmB,SAAS,CAAC,UAACC,CAAC;UAAA,OAAKA,CAAC,CAACva,EAAE,KAAK/K,WAAW,CAAC+K,EAAE;QAAA,EAAC;QACzE,IAAIqa,UAAU,GAAG,CAAC,CAAC,EAAE;UACnBpmB,YAAY,CAACumB,MAAM,CAACH,UAAU,EAAE,CAAC,EAAEplB,WAAW,CAAC;QACjD,CAAC,MAAM;UACLhB,YAAY,CAACrE,IAAI,CAACqF,WAAW,CAAC;QAChC;MACF,CAAC,CAAC;MAEF,OAAOhB,YAAY;IACrB;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA6C,GAAA;IAAAhG,KAAA,EAMA,SAAAwoB,2BAA2BA,CAACmB,SAAc,EAAE;MAAA,IAAAC,MAAA;MAC1C,IAAI,CAACD,SAAS,EAAE;QACd;MACF;MACA,IAAME,UAAU,GAAG,IAAAhX,iBAAS,EAAC8W,SAAS,CAAC;MACvC,IAAI,IAAI,CAACd,qBAAqB,EAAE;QAC9B;QACA,IAAAiB,kBAAU,EAAC,IAAI,CAACjB,qBAAqB,EAAEgB,UAAU,EAAE,UAACE,QAAQ,EAAEC,QAAQ,EAAEhkB,GAAG,EAAK;UAC9E,IAAIA,GAAG,KAAK,cAAc,EAAE;YAC1B,OAAO4jB,MAAI,CAACnT,iBAAiB,CAACsT,QAAQ,EAAEC,QAAQ,CAAC;UACnD;UAEA,OAAOA,QAAQ,IAAID,QAAQ;QAC7B,CAAC,CAAC;MACJ,CAAC,MAAM;QACL,IAAI,CAAClB,qBAAqB,GAAGgB,UAAU;MACzC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA7jB,GAAA;IAAAhG,KAAA,EAKA,SAAAqpB,0BAA0BA,CAAA,EAAG;MAC3B,IAAI,CAACR,qBAAqB,GAAG,IAAI;IACnC;EAAC;AAAA,EA5iFoCoB,oBAAW","ignoreList":[]}
1
+ {"version":3,"names":["_lodash","require","_loggerProxy","_interopRequireDefault","_eventsScope","_constants","_infoUtils","_fullState","_selfUtils","_hostUtils","_controlsUtils","_embeddedAppsUtils","_mediaSharesUtils","_parser","_metrics","_constants2","_hashTreeParser2","_interopRequireWildcard","_types","_utils","_util","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t2","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","enumerable","push","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","_n","F","s","done","value","TypeError","a","u","next","return","_arrayLikeToArray","toString","slice","name","_Array$from","test","Array","LocusDtoTopLevelKeys","LocusObjectStateAfterUpdates","unchanged","removed","updated","getReplaceInfoFromSelf","self","deviceUrl","_device$replaces","device","MeetingsUtil","getThisDevice","replaces","undefined","findLocusUrlInAnyHashTreeParser","meetingCollection","locusUrl","_i","_arr","_values","getAll","_meeting$locusInfo","_meeting$locusInfo$ha","meeting","locusInfo","hashTreeParsers","findMeetingForHashTreeMessage","message","_message$locusStateEl","_message$locusStateEl2","foundMeeting","locusStateElements","find","el","isSelf","data","createLocusFromHashTreeMessage","locus","participants","url","metadata","_iterator","_step","_loop","element","type","htMeta","elementId","toLowerCase","ObjectType","locusObjectData","ObjectTypeToLocusKeyMap","locusDtoKey","_assign","participant","mediaShare","mediaShares","embeddedApp","embeddedApps","control","controls","links","info","fullState","err","LocusInfo","exports","_EventsScope","updateMeeting","webex","meetingId","_this","_classCallCheck2","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","_map","hashTreeObjectId2ParticipantId","_inherits2","_createClass2","key","doLocusSync","isLocusUrlChanged","_this$locusParser$wor","_this2","isDelta","meetingDestroyed","workingCopy","syncUrl","LoggerProxy","logger","concat","meetingRequest","getLocusDTO","catch","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","LOCUS_DELTA_SYNC_FAILED","correlationId","reason","errorName","stack","code","statusCode","meetings","destroy","MEETING_REMOVED_REASON","LOCUS_DTO_SYNC_FAILED","then","res","isEmpty","body","baseSequence","handleLocusDelta","onFullLocus","LOCUS_SYNC_HANDLING_FAILED","finally","resume","applyLocusDeltaData","action","_LocusDeltaParser$loc","loci","DESYNC","USE_CURRENT","USE_INCOMING","WAIT","LOCUS_URL_CHANGED","onDeltaLocus","_this3","onDeltaAction","parsedLoci","onDeltaEvent","init","created","scheduledMeeting","aclUrl","sequence","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","updateLocusUrl","ControlsUtils","isMainSessionDTO","updateFullState","updateMeetingInfo","updateEmbeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","updateLinks","createHashTreeParser","_ref","_locusUrl$split","_locusUrl$split$pop","_this$webex$config$me","initialLocus","replacedAt","parser","HashTreeParser","webexRequest","request","bind","locusInfoUpdateCallback","updateFromHashTree","debugId","split","pop","substring","excludedDataSets","config","_iterator2","_step2","_step2$value","_slicedToArray2","existingLocusUrl","existingEntry","state","stop","warn","initializedFromHashTree","clear","_initialSetup","_asyncToGenerator2","_regenerator","mark","_callee","_data$locus","_data$locus$links","_data$locus$links$res","_data$locus$links$res2","_data$hashTreeMessage","_metadataObject$data","metadataObject","hashTreeParser","_hashTreeParser","_t","wrap","_context","prev","trigger","hashTreeMessage","isMetadata","visibleDataSets","Error","dataSets","initializeFromMessage","abrupt","resources","initializeFromGetLociResponse","initialSetup","_x","handleLocusAPIResponse","responseBody","_responseBody$locus","isWrapped","hashTreeParserEntry","sendClassicVsHashTreeMismatchMetric","handleLocusUpdate","updateLocusFromHashTreeObject","object","_this4","_locus$self","addParticipantObject","obj","id","version","locusObjectFromData","_object$data$floor","_object$data$floor2","_object$data$floor2$b","_locus$mediaShares","floor","disposition","beneficiary","existingMediaShare","ms","_locus$mediaShares2","_locus$embeddedApps","existingEmbeddedApp","_locus$embeddedApps2","participantId","jsSdkMeta","removedParticipantIds","delete","identity","_keys","controlKey","_locus$info","_object$data$controls","_object$data$controls2","_object$data$controls3","isWebinar","role","roles","SELF_ROLES","ATTENDEE","hasRole","classicVsHashTreeMismatchMetricCounter","LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH","handleHashTreeParserSwitch","_message$locusStateEl3","_message$locusStateEl4","entry","internal","_message$locusStateEl5","_metadata$data","_metadata$data$visibl","handleMessage","replacedEntry","handleHashTreeMessage","eventType","LOCUSEVENT","HASH_TREE_DATA_UPDATED","parserSwitched","update","_this5","updateType","LocusInfoUpdateType","OBJECTS_UPDATED","forceReplaceMembers","locusObjectStateAfterUpdates","updatedObjects","_object$data","LOCUS_HASH_TREE_UNSUPPORTED_OPERATION","cloneDeep","_stringify","map","hasData","MEETING_ENDED","SELF_REMOVED","parse","size","stateElementsMessage","getTheLocusToUpdate","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","emitScoped","scope","eventName","args","emit","onFullLocusWithHashTrees","debugText","onFullLocusCommon","onFullLocusClassic","isNewFullLocus","error","_this$participants","_this6","_locus$jsSdkMeta","_participant$htMeta","isReplaceMembers","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","_this$parsedLocus$ful","_this$parsedLocus$ful2","_CALL_","_SIP_BRIDGE_","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","ensureSelfParticipantExists","_isArray","selfExists","some","_locus$jsSdkMeta2","mergeParticipants","updatesApplied","_locus$jsSdkMeta3","_locus$self2","_locus$self3","updateCreated","updateReplaces","updateAclUrl","updateBasequence","updateSequence","compareAndUpdate","getLocusPartner","_USER_","partner","_this$parsedLocus$ful3","_this$parsedLocus$ful4","_this$parsedLocus$ful5","_this$parsedLocus$ful6","_SPACE_SHARE_","LOCUS","STATE","INACTIVE","newMetrics","submitClientEvent","options","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_INACTIVE_TERMINATING","compareSelfAndHost","compareHostAndSelf","_this$parsedLocus$hos","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","isReplace","_this$parsedLocus$con","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","_iterator3","_step3","_participant$person","LOCUSINFO","PARTICIPANT_REASON_CHANGED","displayName","person","primaryDisplayString","isEqual","_ControlsUtils$getCon","getControls","_ControlsUtils$getCon2","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasHesiodLLMIdChanged","hasAiSummaryNotificationChanged","hasTranscribeSpokenLanguageChanged","hasManualCaptionChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","hasInterpretationChanged","hasWebcastChanged","hasMeetingFullChanged","hasPracticeSessionEnabledChanged","hasStageViewChanged","hasAnnotationControlChanged","hasRemoteDesktopControlChanged","hasPollingQAControlChanged","hasAutoEndMeetingChanged","current","CONTROLS_MUTE_ON_ENTRY_CHANGED","muteOnEntry","CONTROLS_SHARE_CONTROL_CHANGED","shareControl","CONTROLS_DISALLOW_UNMUTE_CHANGED","disallowUnmute","CONTROLS_REACTIONS_CHANGED","reactions","CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED","viewTheParticipantList","CONTROLS_RAISE_HAND_CHANGED","raiseHand","CONTROLS_VIDEO_CHANGED","video","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","_current$transcribe","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","hesiodLlmId","CONTROLS_MEETING_HESIOD_LLM_ID_UPDATED","CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED","aiSummaryNotification","spokenLanguage","CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED","enabled","manualCaptionControl","CONTROLS_MEETING_MANUAL_CAPTION_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","CONTROLS_MEETING_BREAKOUT_UPDATED","interpretation","CONTROLS_MEETING_INTERPRETATION_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","CONTROLS_WEBCAST_CHANGED","webcastControl","CONTROLS_MEETING_FULL_CHANGED","meetingFull","CONTROLS_PRACTICE_SESSION_STATUS_UPDATED","practiceSession","CONTROLS_STAGE_VIEW_UPDATED","videoLayout","CONTROLS_ANNOTATION_CHANGED","annotationControl","CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED","rdcControl","CONTROLS_POLLING_QA_CHANGED","pollingQAControl","CONTROLS_AUTO_END_MEETING_WARNING_CHANGED","autoEndMeetingWarning","_this$links","_this$links2","_ref2","services","LINKS_SERVICES","LINKS_RESOURCES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","_this$parsedLocus$sel","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","MEETING_INFO_UPDATED","isInitializing","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","forceUpdate","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","_this$parsedLocus$ful7","_this$parsedLocus$inf","parsedSelves","getSelves","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","brbChanged","SELF_MEETING_BRB_CHANGED","brb","selfIdChanged","SELF_ID_CHANGED","interpretationChanged","SELF_MEETING_INTERPRETATION_CHANGED","selfParticipantId","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","_parsedSelves$previou","_parsedSelves$current","SELF_ROLES_CHANGED","oldRoles","newRoles","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","hasUserEnteredLobby","SELF_UNADMITTED_GUEST","hasUserBeenAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","_parsedSelves$current2","_parsedSelves$current3","_parsedSelves$current4","MEDIA_STATUS_CHANGE","audioStatus","currentMediaStatus","audio","videoStatus","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","isMainLocus","LOCUS_INFO_UPDATE_URL","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","_this$fullState","_this$mainSessionLocu","_this$mainSessionLocu2","isActive","ACTIVE","INITIALIZING","includes","clearMainSessionLocusCache","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","_this7","locusClone","assignWith","objValue","srcValue","cleanUp","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual, assignWith, cloneDeep, isEmpty} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n _SPACE_SHARE_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n Enum,\n SELF_ROLES,\n} from '../constants';\n\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport HashTreeParser, {\n DataSet,\n HashTreeMessage,\n LocusInfoUpdate,\n LocusInfoUpdateType,\n Metadata,\n} from '../hashTree/hashTreeParser';\nimport {HashTreeObject, ObjectType, ObjectTypeToLocusKeyMap} from '../hashTree/types';\nimport {isMetadata, isSelf} from '../hashTree/utils';\nimport {Links, LocusDTO, ReplacesInfo} from './types';\nimport MeetingsUtil from '../meetings/util';\nimport {MEETING_KEY} from '../meetings/meetings.types';\nimport MeetingCollection from '../meetings/collection';\n\nexport type LocusLLMEvent = {\n data: {\n eventType: typeof LOCUSEVENT.HASH_TREE_DATA_UPDATED;\n stateElementsMessage: HashTreeMessage;\n };\n};\n\n// list of top level keys in Locus DTO relevant for Hash Tree DTOs processing\n// it does not contain fields specific to classic Locus DTOs like sequence or baseSequence\nconst LocusDtoTopLevelKeys = [\n 'controls',\n 'fullState',\n 'embeddedApps',\n 'host',\n 'info',\n 'links',\n 'mediaShares',\n 'meetings',\n 'participants',\n 'replaces',\n 'self',\n 'sequence',\n 'syncUrl',\n 'url',\n 'htMeta', // only exists when hash trees are used\n];\n\nexport type LocusApiResponseBody =\n | {\n dataSets?: DataSet[];\n locus: LocusDTO; // this LocusDTO here might not be the full one (for example it won't have all the participants, but it should have self)\n metadata?: Metadata;\n }\n | LocusDTO; // when we invoke APIs on the whole Locus like \"mute all\" backend returns the whole Locus in the response like this\n\nconst LocusObjectStateAfterUpdates = {\n unchanged: 'unchanged',\n removed: 'removed',\n updated: 'updated',\n} as const;\n\ntype LocusObjectStateAfterUpdates = Enum<typeof LocusObjectStateAfterUpdates>;\n\nexport type HashTreeParserEntry = {\n parser: HashTreeParser;\n replacedAt?: string;\n initializedFromHashTree: boolean;\n};\n\n/**\n * Gets the replacement information\n *\n * @param {any} self - \"self\" object from Locus DTO\n * @param {string} deviceUrl - The URL of the user's device\n * @returns {any} The replace information if available, otherwise undefined\n */\nfunction getReplaceInfoFromSelf(self: any, deviceUrl: string): ReplacesInfo | undefined {\n if (self) {\n const device = MeetingsUtil.getThisDevice({self}, deviceUrl);\n\n if (device?.replaces?.length > 0) {\n return device.replaces[0];\n }\n }\n\n return undefined;\n}\n\n/**\n * Finds a meeting by its locus URL in meeting collection. It checks all HashTreeParsers of all meetings in the collection.\n *\n * @param {MeetingCollection} meetingCollection - The collection of meetings to search\n * @param {string} locusUrl - The locus URL to search for\n * @returns {any} The meeting if found, otherwise undefined\n */\nfunction findLocusUrlInAnyHashTreeParser(\n meetingCollection: MeetingCollection,\n locusUrl: string\n): any {\n for (const meeting of Object.values(meetingCollection.getAll()) as any[]) {\n if (meeting?.locusInfo?.hashTreeParsers?.has(locusUrl)) {\n return meeting;\n }\n }\n\n return undefined;\n}\n\n/**\n * Finds a meeting for a given hash tree message.\n *\n * @param {HashTreeMessage} message - The hash tree message to find the meeting for\n * @param {MeetingCollection} meetingCollection - The collection of meetings to search\n * @param {string} deviceUrl - The URL of the user's device\n * @returns {any} The meeting if found, otherwise undefined\n */\nexport function findMeetingForHashTreeMessage(\n message: HashTreeMessage,\n meetingCollection: MeetingCollection,\n deviceUrl: string\n): any {\n let foundMeeting = findLocusUrlInAnyHashTreeParser(meetingCollection, message.locusUrl);\n\n if (foundMeeting) {\n return foundMeeting;\n }\n\n // if we haven't found anything, it may mean that message has a new locusUrl\n // check if it indicates that it replaces some existing current locusUrl (this is indicated in \"self\")\n const self = message.locusStateElements?.find((el) => isSelf(el))?.data;\n const replaces = getReplaceInfoFromSelf(self, deviceUrl);\n\n if (replaces?.locusUrl) {\n foundMeeting = findLocusUrlInAnyHashTreeParser(meetingCollection, replaces.locusUrl);\n\n return foundMeeting;\n }\n\n return undefined;\n}\n\n/**\n * Creates a locus object from the objects received in a hash tree message. It usually will be\n * incomplete, because hash tree messages only contain the parts of locus that have changed,\n * and some updates come separately over Mercury or LLM in separate messages.\n *\n * @param {HashTreeMessage} message hash tree message to created the locus from\n * @returns {Object} the created locus object and metadata if present\n */\nexport function createLocusFromHashTreeMessage(message: HashTreeMessage): {\n locus: LocusDTO;\n metadata?: Metadata;\n} {\n const locus: LocusDTO = {\n participants: [],\n url: message.locusUrl,\n };\n let metadata: Metadata | undefined;\n\n if (!message.locusStateElements) {\n return {locus, metadata};\n }\n\n for (const element of message.locusStateElements) {\n if (!element.data) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const type = element.htMeta.elementId.type.toLowerCase();\n\n switch (type) {\n case ObjectType.locus: {\n // spread locus object data onto the top level, but remove keys managed by other ObjectTypes\n const locusObjectData = {...element.data};\n\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n delete locusObjectData[locusDtoKey];\n });\n\n Object.assign(locus, locusObjectData);\n break;\n }\n case ObjectType.participant:\n locus.participants.push(element.data);\n break;\n case ObjectType.mediaShare:\n if (!locus.mediaShares) {\n locus.mediaShares = [];\n }\n locus.mediaShares.push(element.data);\n break;\n case ObjectType.embeddedApp:\n if (!locus.embeddedApps) {\n locus.embeddedApps = [];\n }\n locus.embeddedApps.push(element.data);\n break;\n case ObjectType.control:\n if (!locus.controls) {\n locus.controls = {};\n }\n Object.assign(locus.controls, element.data);\n break;\n case ObjectType.links:\n case ObjectType.info:\n case ObjectType.fullState:\n case ObjectType.self: {\n const locusDtoKey = ObjectTypeToLocusKeyMap[type];\n locus[locusDtoKey] = element.data;\n break;\n }\n case ObjectType.metadata:\n // metadata is not part of Locus DTO\n metadata = {...element.data, htMeta: element.htMeta} as Metadata;\n break;\n default:\n break;\n }\n }\n\n return {locus, metadata};\n}\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n participants: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n roles: any;\n mediaShares: any;\n url: any;\n links?: Links;\n mainSessionLocusCache: any;\n self: any;\n hashTreeParsers: Map<string, HashTreeParserEntry>;\n hashTreeObjectId2ParticipantId: Map<number, string>; // mapping of hash tree object ids to participant ids\n classicVsHashTreeMismatchMetricCounter = 0;\n\n /**\n * Constructor\n * @param {function} updateMeeting callback to update the meeting object from an object\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n this.hashTreeParsers = new Map();\n this.hashTreeObjectId2ParticipantId = new Map();\n }\n\n /**\n * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.\n * WARNING: This function must not be used for hash tree based Locus meetings.\n *\n * @param {Meeting} meeting\n * @param {boolean} isLocusUrlChanged\n * @param {Locus} locus\n * @returns {undefined}\n */\n private doLocusSync(meeting: any, isLocusUrlChanged: boolean, locus: any) {\n let url;\n let isDelta = false;\n let meetingDestroyed = false;\n\n if (isLocusUrlChanged) {\n // for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,\n // so use the main session locus url to get the full locus(full participants list in the response).\n // for the locus url changed case from main session to breakout, we don't need to care about it here,\n // because it is a USE_INCOMING case, it will not be executed here.\n url = locus.url;\n } else if (this.locusParser.workingCopy?.syncUrl) {\n url = this.locusParser.workingCopy.syncUrl;\n isDelta = true;\n } else {\n url = meeting.locusUrl;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> doing Locus sync (getting ${\n isDelta ? 'delta' : 'full'\n } DTO)`\n );\n\n // return value ignored on purpose\n meeting.meetingRequest\n .getLocusDTO({url})\n .catch((e) => {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n\n isDelta = false;\n\n // Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case\n if (e.statusCode !== 403) {\n return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw err;\n });\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n }\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw e;\n })\n .then((res) => {\n if (isEmpty(res.body)) {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from full DTO sync request'\n );\n }\n\n return;\n }\n\n if (isDelta) {\n if (res.body.baseSequence) {\n meeting.locusInfo.handleLocusDelta(res.body, meeting);\n\n return;\n }\n // in some cases Locus might return us full DTO even when we asked for a delta\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got full DTO when we asked for delta'\n );\n }\n meeting.locusInfo.onFullLocus('classic Locus sync', res.body);\n })\n .catch((e) => {\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (${e.toString()})`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_SYNC_HANDLING_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n })\n .finally(() => {\n if (!meetingDestroyed) {\n // Notify parser to resume processing delta events.\n // Any deltas in the queue that have now been superseded by this sync will simply be ignored\n this.locusParser.resume();\n }\n });\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;\n const isLocusUrlChanged = action === LOCUS_URL_CHANGED;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n case WAIT:\n // do nothing\n break;\n case DESYNC:\n case LOCUS_URL_CHANGED:\n this.doLocusSync(meeting, isLocusUrlChanged, locus);\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n this.updateLocusCache(locus);\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants, []);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls, locus.self);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateLinks(locus.links);\n }\n\n /**\n * Creates a HashTreeParser instance for a given locusUrl and stores it in the map.\n * @param {Object} params\n * @param {string} params.locusUrl - the locus URL used as the map key\n * @param {Object} params.initialLocus - initial locus data\n * @param {Object} params.metadata - hash tree metadata\n * @param {string} params.replacedAt - timestamp from Locus indicating when the replacement happened\n * @returns {HashTreeParser} the newly created parser\n */\n private createHashTreeParser({\n locusUrl,\n initialLocus,\n metadata,\n replacedAt,\n }: {\n locusUrl: string;\n initialLocus: {\n dataSets: Array<DataSet>;\n locus: any;\n };\n metadata: Metadata | null;\n replacedAt?: string;\n }): HashTreeParser {\n const parser = new HashTreeParser({\n initialLocus,\n metadata,\n webexRequest: this.webex.request.bind(this.webex),\n locusInfoUpdateCallback: this.updateFromHashTree.bind(this, locusUrl),\n debugId: `HT-${locusUrl.split('/')?.pop()?.substring(0, 4)}`,\n excludedDataSets: this.webex.config.meetings.locus?.excludedDataSets,\n });\n\n // When a new HashTreeParser is created, previous one should be stopped.\n // Locus will only be sending us updates for the current one.\n for (const [existingLocusUrl, existingEntry] of this.hashTreeParsers) {\n if (existingEntry.parser.state !== 'stopped') {\n existingEntry.parser.stop();\n if (replacedAt) {\n existingEntry.replacedAt = replacedAt;\n } else {\n LoggerProxy.logger.warn(\n `Locus-info:index#createHashTreeParser --> no replacedAt timestamp provided for new HashTreeParser with locusUrl ${locusUrl}, replacing ${existingLocusUrl}`\n );\n }\n }\n }\n\n this.hashTreeParsers.set(locusUrl, {parser, initializedFromHashTree: false});\n this.hashTreeObjectId2ParticipantId.clear();\n\n return parser;\n }\n\n /**\n * @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object\n * @returns {undefined}\n * @memberof LocusInfo\n */\n async initialSetup(\n data:\n | {\n trigger: 'join-response';\n locus: LocusDTO;\n dataSets?: DataSet[];\n metadata?: Metadata;\n }\n | {\n trigger: 'locus-message';\n locus?: LocusDTO;\n hashTreeMessage?: HashTreeMessage;\n }\n | {\n trigger: 'get-loci-response';\n locus?: LocusDTO;\n }\n ) {\n switch (data.trigger) {\n case 'locus-message':\n if (data.hashTreeMessage) {\n // we need the Metadata object to be in the received message, because it contains visibleDataSets\n // and these are needed to initialize all the hash trees\n const metadataObject = data.hashTreeMessage.locusStateElements?.find((el) =>\n isMetadata(el)\n );\n\n if (!metadataObject?.data?.visibleDataSets) {\n // this is a common case (not an error)\n // it happens for example after we leave the meeting and still get some heartbeats or delayed messages\n LoggerProxy.logger.info(\n `Locus-info:index#initialSetup --> cannot initialize HashTreeParser, Metadata object with visibleDataSets is missing in the message`\n );\n\n // throw so that handleLocusEvent() catches it and destroys the partially created meeting object\n throw new Error('Metadata object with visibleDataSets is missing in the message');\n }\n\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from message'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n const hashTreeParser = this.createHashTreeParser({\n locusUrl: data.hashTreeMessage.locusUrl,\n initialLocus: {\n locus: null,\n dataSets: data.hashTreeMessage.dataSets,\n },\n metadata: {\n htMeta: metadataObject.htMeta,\n visibleDataSets: metadataObject.data.visibleDataSets,\n },\n });\n\n // now handle the message - that should populate all the visible datasets\n await hashTreeParser.initializeFromMessage(data.hashTreeMessage);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus('classic locus message', data.locus, undefined);\n }\n break;\n case 'join-response':\n this.updateLocusCache(data.locus);\n this.onFullLocus('join response', data.locus, undefined, data.dataSets, data.metadata);\n break;\n case 'get-loci-response':\n if (data.locus?.links?.resources?.visibleDataSets?.url) {\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from get-loci-response'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n const hashTreeParser = this.createHashTreeParser({\n locusUrl: data.locus.url as string,\n initialLocus: {\n locus: null,\n dataSets: [], // empty, because we don't have them yet\n },\n metadata: null, // get-loci-response doesn't contain Metadata object\n });\n\n // now initialize all the data\n await hashTreeParser.initializeFromGetLociResponse(data.locus);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus('classic get-loci-response', data.locus, undefined);\n }\n }\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * Handles HTTP response from Locus API call.\n * @param {Meeting} meeting meeting object\n * @param {LocusApiResponseBody} responseBody body of the http response from Locus API call\n * @returns {void}\n */\n handleLocusAPIResponse(meeting, responseBody: LocusApiResponseBody): void {\n const isWrapped = 'locus' in responseBody;\n const locusUrl = isWrapped ? responseBody.locus?.url : responseBody.url;\n const hashTreeParserEntry = locusUrl && this.hashTreeParsers.get(locusUrl);\n if (hashTreeParserEntry) {\n if (isWrapped) {\n if (!responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `expected hash tree dataSets in API response but they are missing`\n );\n // continuing as we can still manage without responseBody.dataSets, but this is very suspicious\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#handleLocusAPIResponse --> passing Locus API response to HashTreeParser: ',\n responseBody\n );\n // update the data in our hash trees\n hashTreeParserEntry.parser.handleLocusUpdate(responseBody);\n } else {\n // LocusDTO without wrapper - pass it through as if it had no dataSets\n hashTreeParserEntry.parser.handleLocusUpdate({locus: responseBody});\n }\n } else {\n if (isWrapped && responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `unexpected hash tree dataSets in API response`\n );\n }\n // classic Locus delta\n const locus = isWrapped ? responseBody.locus : responseBody;\n this.handleLocusDelta(locus, meeting);\n }\n }\n\n /**\n * @param {HashTreeObject} object data set object\n * @param {any} locus\n * @returns {void}\n */\n updateLocusFromHashTreeObject(object: HashTreeObject, locus: LocusDTO): LocusDTO {\n const type = object.htMeta.elementId.type.toLowerCase();\n\n const addParticipantObject = (obj: HashTreeObject) => {\n if (!locus.participants) {\n locus.participants = [];\n }\n locus.participants.push(obj.data);\n this.hashTreeObjectId2ParticipantId.set(obj.htMeta.elementId.id, obj.data.id);\n };\n\n switch (type) {\n case ObjectType.locus: {\n if (!object.data) {\n // not doing anything here, as we need Locus to always be there (at least some fields)\n // and that's already taken care of in updateFromHashTree()\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object removed, version=${object.htMeta.elementId.version}`\n );\n\n return locus;\n }\n // replace the main locus\n\n // The Locus object we receive from backend has empty participants array,\n // and may have (although it shouldn't) other fields that are managed by other ObjectTypes\n // like \"fullState\" or \"info\", so we're making sure to delete them here\n const locusObjectFromData = object.data;\n\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n delete locusObjectFromData[locusDtoKey];\n });\n\n locus = {...locus, ...locusObjectFromData};\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object updated to version=${object.htMeta.elementId.version}`\n );\n break;\n }\n case ObjectType.mediaShare:\n if (object.data) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${\n object.htMeta.elementId.id\n } name='${object.data.name}' updated ${\n object.data.name === 'content'\n ? `floor=${object.data.floor?.disposition}, ${object.data.floor?.beneficiary?.id}`\n : ''\n } version=${object.htMeta.elementId.version}`\n );\n const existingMediaShare = locus.mediaShares?.find(\n (ms) => ms.htMeta.elementId.id === object.htMeta.elementId.id\n );\n\n if (existingMediaShare) {\n Object.assign(existingMediaShare, object.data);\n } else {\n locus.mediaShares = locus.mediaShares || [];\n locus.mediaShares.push(object.data);\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${object.htMeta.elementId.id} removed, version=${object.htMeta.elementId.version}`\n );\n locus.mediaShares = locus.mediaShares?.filter(\n (ms) => ms.htMeta.elementId.id !== object.htMeta.elementId.id\n );\n }\n break;\n case ObjectType.embeddedApp:\n if (object.data) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> embeddedApp id=${object.htMeta.elementId.id} url='${object.data.url}' updated version=${object.htMeta.elementId.version}:`,\n object.data\n );\n const existingEmbeddedApp = locus.embeddedApps?.find(\n (ms) => ms.htMeta.elementId.id === object.htMeta.elementId.id\n );\n\n if (existingEmbeddedApp) {\n Object.assign(existingEmbeddedApp, object.data);\n } else {\n locus.embeddedApps = locus.embeddedApps || [];\n locus.embeddedApps.push(object.data);\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> embeddedApp id=${object.htMeta.elementId.id} removed, version=${object.htMeta.elementId.version}`\n );\n locus.embeddedApps = locus.embeddedApps?.filter(\n (ms) => ms.htMeta.elementId.id !== object.htMeta.elementId.id\n );\n }\n break;\n case ObjectType.participant:\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> participant id=${\n object.htMeta.elementId.id\n } ${object.data ? 'updated' : 'removed'} version=${object.htMeta.elementId.version}`\n );\n if (object.data) {\n addParticipantObject(object);\n } else {\n const participantId = this.hashTreeObjectId2ParticipantId.get(object.htMeta.elementId.id);\n\n if (!locus.jsSdkMeta) {\n locus.jsSdkMeta = {removedParticipantIds: []};\n }\n locus.jsSdkMeta.removedParticipantIds.push(participantId);\n this.hashTreeObjectId2ParticipantId.delete(object.htMeta.elementId.id);\n }\n // Create self from the participant if it matches self identity and is being moved.\n // We need this, because participant update comes in LLM message often before the self update from Mercury.\n // Other parts of the code detect move only by looking at self, while some other parts of the SDK/webapp code\n // look at participant for roles etc, so if participant is updated but not self, then it looks like we our lost roles temporarily\n // (until self is updated)\n // This will be fixed properly in SPARK-790239\n if (\n object.data &&\n object.data.identity === locus.self?.identity &&\n object.data.state === 'LEFT' &&\n object.data.reason === 'MOVED'\n ) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> FOUND a match for MOVED self in participant object ${object.htMeta.elementId.id}`\n );\n Object.assign(locus[ObjectTypeToLocusKeyMap[ObjectType.self]], object.data);\n }\n break;\n case ObjectType.control:\n if (object.data) {\n Object.keys(object.data).forEach((controlKey) => {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> control ${controlKey} updated:`,\n object.data[controlKey]\n );\n if (!locus.controls) {\n locus.controls = {};\n }\n locus.controls[controlKey] = object.data[controlKey];\n });\n } else {\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> control object update without data - this is not expected!`\n );\n }\n break;\n case ObjectType.links:\n case ObjectType.info:\n case ObjectType.fullState:\n case ObjectType.self:\n if (!object.data) {\n // self without data is handled inside HashTreeParser and results in LocusInfoUpdateType.MEETING_ENDED, so we should never get here\n // all other types info, fullstate, etc - Locus should never send them without data\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received ${type} object without data, this is not expected! version=${object.htMeta.elementId.version}`\n );\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> ${type} object updated to version ${object.htMeta.elementId.version}`\n );\n const locusDtoKey = ObjectTypeToLocusKeyMap[type];\n locus[locusDtoKey] = object.data;\n\n /* Hash tree based webinar attendees don't receive a Participant object for themselves from Locus,\n but a lot of existing code in SDK and web app expects a member object for self to exist,\n so whenever SELF changes for a webinar attendee, we copy it into a participant object.\n We can do it, because SELF has always all the same properties as a participant object.\n */\n if (\n type === ObjectType.self &&\n locus.info?.isWebinar &&\n object.data.controls?.role?.roles?.find(\n (r) => r.type === SELF_ROLES.ATTENDEE && r.hasRole\n )\n ) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> webinar attendee: creating participant object from self`\n );\n addParticipantObject(object);\n }\n }\n break;\n case ObjectType.metadata:\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> metadata object updated to version ${object.htMeta.elementId.version}`\n );\n // we don't use hash tree metadata right now for anything, it's mainly used internally by HashTreeParser\n break;\n default:\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received unsupported object type ${type}`\n );\n break;\n }\n\n return locus;\n }\n\n /**\n * Sends a metric when we receive something from Locus that uses hash trees while we\n * expect classic deltas or the other way around.\n * @param {Meeting} meeting\n * @param {string} message\n * @returns {void}\n */\n sendClassicVsHashTreeMismatchMetric(meeting: any, message: string) {\n LoggerProxy.logger.warn(\n `Locus-info:index#sendClassicVsHashTreeMismatchMetric --> classic vs hash tree mismatch! ${message}`\n );\n\n // we don't want to flood the metrics system\n if (this.classicVsHashTreeMismatchMetricCounter < 5) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH, {\n correlationId: meeting.correlationId,\n message,\n });\n this.classicVsHashTreeMismatchMetricCounter += 1;\n }\n }\n\n /**\n * Checks if the hash tree message should trigger a switch to a different HashTreeParser\n *\n * @param {HashTreeMessage} message incoming hash tree message\n * @returns {boolean} true if the message was handled as a parser switch, false otherwise\n */\n private handleHashTreeParserSwitch(message: HashTreeMessage): boolean {\n const entry = this.hashTreeParsers.get(message.locusUrl);\n\n const self = message.locusStateElements?.find((el) => isSelf(el))?.data;\n const replaces = getReplaceInfoFromSelf(\n self,\n // @ts-ignore\n this.webex.internal.device.url\n );\n\n if (!entry) {\n // Metadata object that contains information about visible datasets is needed to initialize the HashTreeParser,\n // but it's buried inside the message, we need to find it and pass it to HashTreeParser constructor\n const metadata = message.locusStateElements?.find((el) => isMetadata(el));\n\n if (metadata && metadata.data?.visibleDataSets?.length > 0) {\n LoggerProxy.logger.info(\n `Locus-info:index#handleHashTreeParserSwitch --> no hash tree parser found for locusUrl ${message.locusUrl}, creating a new one`\n );\n\n const parser = this.createHashTreeParser({\n locusUrl: message.locusUrl,\n initialLocus: {\n locus: null,\n dataSets: message.dataSets,\n },\n metadata: {\n htMeta: metadata.htMeta,\n visibleDataSets: metadata.data.visibleDataSets,\n },\n replacedAt: replaces?.replacedAt,\n });\n\n // handle the message with the new parser\n parser.handleMessage(message);\n }\n\n return true;\n }\n if (entry.parser.state === 'stopped') {\n // the message matches a stopped parser, we need to check if maybe this is a new \"replacement\" and we need to re-activate the parser\n // this happens when you move from breakout A -> breakout B -> back to breakout A\n if (replaces) {\n if (replaces.replacedAt > (entry.replacedAt || '')) {\n LoggerProxy.logger.info(\n `Locus-info:index#handleHashTreeParserSwitch --> resuming a HashTreeParser for locusUrl=${message.locusUrl}, which replaces ${replaces.locusUrl}`\n );\n const replacedEntry = this.hashTreeParsers.get(replaces.locusUrl);\n\n if (replacedEntry) {\n replacedEntry.replacedAt = replaces.replacedAt;\n entry.initializedFromHashTree = false;\n this.hashTreeObjectId2ParticipantId.clear();\n\n replacedEntry.parser.stop();\n entry.parser.resume(message);\n } else {\n LoggerProxy.logger.warn(\n `Locus-info:index#handleHashTreeParserSwitch --> the parser that is supposed to be replaced with the currently resumed parser is not found, locusUrl=${replaces.locusUrl}`\n );\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#handleHashTreeParserSwitch --> received message for stopped HashTreeParser with locusUrl ${message.locusUrl}, but replaces info provided is not newer, so not re-activating the parser`\n );\n }\n\n return true;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#handleHashTreeParserSwitch --> received message for stopped HashTreeParser with locusUrl ${message.locusUrl}, but no replaces info provided, so not re-activating the parser`\n );\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Handles a hash tree message received from Locus.\n *\n * @param {Meeting} meeting - The meeting object\n * @param {eventType} eventType - The event type\n * @param {HashTreeMessage} message incoming hash tree message\n * @returns {void}\n */\n private handleHashTreeMessage(meeting: any, eventType: LOCUSEVENT, message: HashTreeMessage) {\n if (eventType !== LOCUSEVENT.HASH_TREE_DATA_UPDATED) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected ${LOCUSEVENT.HASH_TREE_DATA_UPDATED}`\n );\n\n return;\n }\n\n const parserSwitched = this.handleHashTreeParserSwitch(message);\n\n if (parserSwitched) {\n return;\n }\n\n const entry = this.hashTreeParsers.get(message.locusUrl);\n\n // the check is just for typescript, the case of no entry in hashTreeParsers is handled in handleHashTreeParserSwitch() above\n if (entry) {\n entry.parser.handleMessage(message);\n }\n }\n\n /**\n * Callback registered with HashTreeParser to receive locus info updates.\n * Updates our locus info based on the data parsed by the hash tree parser.\n *\n * @param {string} locusUrl - the locus URL for which the update is received\n * @param {LocusInfoUpdate} update - Details about the update.\n * @returns {void}\n */\n private updateFromHashTree(locusUrl: string, update: LocusInfoUpdate) {\n switch (update.updateType) {\n case LocusInfoUpdateType.OBJECTS_UPDATED: {\n // initialize our new locus\n let locus: LocusDTO = {\n participants: [],\n jsSdkMeta: {\n removedParticipantIds: [],\n forceReplaceMembers: false,\n },\n };\n\n // first go over all the updates and check what happens with the main locus object\n let locusObjectStateAfterUpdates: LocusObjectStateAfterUpdates =\n LocusObjectStateAfterUpdates.unchanged;\n update.updatedObjects.forEach((object) => {\n if (object.htMeta.elementId.type.toLowerCase() === ObjectType.locus) {\n if (locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.updated) {\n // this code doesn't supported it right now,\n // cases for \"updated\" followed by \"removed\", or multiple \"updated\" would need more handling\n // but these should never happen\n LoggerProxy.logger.warn(\n `Locus-info:index#updateFromHashTree --> received multiple LOCUS objects in one update, this is unexpected!`\n );\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.LOCUS_HASH_TREE_UNSUPPORTED_OPERATION,\n {\n locusUrl: object.data?.url || this.url,\n message: object.data\n ? 'multiple LOCUS object updates'\n : 'LOCUS object update followed by removal',\n }\n );\n }\n if (object.data) {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.updated;\n } else {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.removed;\n }\n }\n });\n\n const hashTreeParserEntry = this.hashTreeParsers.get(locusUrl);\n\n if (!hashTreeParserEntry) {\n LoggerProxy.logger.warn(\n `Locus-info:index#updateFromHashTree --> no HashTreeParser found for locusUrl ${locusUrl} when trying to apply updates from hash tree`\n );\n\n return;\n }\n\n if (!hashTreeParserEntry.initializedFromHashTree) {\n // this is the first time we're getting an update for this locusUrl,\n // so it's probably a move to/from breakout. We need to start from a clean state,\n // so empty locus and we rely on Locus giving us sufficient data in the updates to populate it.\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> first INITIAL update for locusUrl ${locusUrl}, starting from empty state`\n );\n hashTreeParserEntry.initializedFromHashTree = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n locus.jsSdkMeta!.forceReplaceMembers = true;\n } else if (\n // if Locus object is unchanged or removed, we need to keep using the existing locus\n // because the rest of the locusInfo code expects locus to always be present (with at least some of the fields)\n // if it gets updated, we only need to have the fields that are not part of \"locus\" object (like \"info\" or \"mediaShares\")\n // so that when Locus object gets updated, if the new one is missing some field, that field will\n // be removed from our locusInfo\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.unchanged ||\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.removed\n ) {\n // copy over all of existing locus except participants\n LocusDtoTopLevelKeys.forEach((key) => {\n if (key !== 'participants') {\n (locus as Record<string, any>)[key] = cloneDeep((this as Record<string, any>)[key]);\n }\n });\n } else {\n // initialize only the fields that are not part of main \"Locus\" object\n // (except participants, which need to stay empty - that means \"no participant changes\")\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n if (locusDtoKey !== 'participants') {\n (locus as Record<string, any>)[locusDtoKey] = cloneDeep(\n (this as Record<string, any>)[locusDtoKey]\n );\n }\n });\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> LOCUS object is ${locusObjectStateAfterUpdates}, all updates: ${JSON.stringify(\n update.updatedObjects.map((o) => ({\n type: o.htMeta.elementId.type,\n id: o.htMeta.elementId.id,\n hasData: !!o.data,\n }))\n )}`\n );\n // now apply all the updates from the hash tree onto the locus\n update.updatedObjects.forEach((object) => {\n locus = this.updateLocusFromHashTreeObject(object, locus);\n });\n\n // update our locus info with the new locus\n this.onDeltaLocus(locus);\n\n break;\n }\n\n case LocusInfoUpdateType.MEETING_ENDED: {\n const meeting = this.webex.meetings.meetingCollection.get(this.meetingId);\n\n if (meeting) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> received signal that meeting ended, destroying meeting ${this.meetingId}`\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.SELF_REMOVED);\n }\n }\n }\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n if (this.hashTreeParsers.size > 0) {\n this.handleHashTreeMessage(\n meeting,\n data.eventType,\n data.stateElementsMessage as HashTreeMessage\n );\n } else {\n const {eventType} = data;\n\n if (eventType === LOCUSEVENT.HASH_TREE_DATA_UPDATED) {\n // this can happen when we get an event before join http response\n // it's OK to just ignore it\n LoggerProxy.logger.info(\n `Locus-info:index#parse --> received locus hash tree event before hashTreeParser is created`\n );\n\n return;\n }\n\n const locus = this.getTheLocusToUpdate(data.locus);\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n locus.jsSdkMeta = {removedParticipantIds: []};\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(`classic locus event ${eventType}`, locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(locus, meeting);\n }\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * Function for handling full locus when it's using hash trees (so not the \"classic\" one).\n *\n * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes\n * @param {object} locus locus object\n * @param {object} metadata locus hash trees metadata\n * @param {DataSet[]} dataSets\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusWithHashTrees(\n debugText: string,\n locus: any,\n metadata: Metadata,\n dataSets: Array<DataSet>,\n eventType?: string\n ) {\n if (!this.hashTreeParsers.has(locus.url)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus (${debugText}) --> creating hash tree parser for locusUrl=${locus.url}`\n );\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus (${debugText}) --> dataSets:`,\n dataSets,\n ' and locus:',\n locus,\n ' and metadata:',\n metadata\n );\n this.createHashTreeParser({\n locusUrl: locus.url,\n initialLocus: {locus, dataSets},\n metadata,\n });\n // we have a full locus to start with, so we consider Locus info to be \"initialized\"\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.hashTreeParsers.get(locus.url)!.initializedFromHashTree = true;\n this.onFullLocusCommon(locus, eventType);\n } else {\n // in this case the Locus we're getting is not necessarily the full one\n // so treat it like if we just got it in any api response\n\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus (${debugText}) --> hash tree parser already exists, handling it like a normal API response`\n );\n this.handleLocusAPIResponse(undefined, {dataSets, locus, metadata});\n }\n }\n\n /**\n * Function for handling full locus when it's the \"classic\" one (not hash trees)\n *\n * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusClassic(debugText: string, locus: any, eventType?: string) {\n if (!this.locusParser.isNewFullLocus(locus)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus (${debugText}) --> ignoring old full locus DTO, eventType=${eventType}`\n );\n\n return;\n }\n this.onFullLocusCommon(locus, eventType);\n }\n\n /**\n * updates the locus with full locus object\n * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @param {object} metadata locus hash trees metadata\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(\n debugText: string,\n locus: any,\n eventType?: string,\n dataSets?: Array<DataSet>,\n metadata?: Metadata\n ) {\n if (!locus) {\n LoggerProxy.logger.error(\n `Locus-info:index#onFullLocus (${debugText}) --> object passed as argument was invalid, continuing.`\n );\n }\n\n if (dataSets) {\n if (!metadata) {\n throw new Error(\n `Locus-info:index#onFullLocus (${debugText}) --> hash tree metadata is missing with full Locus`\n );\n }\n // this is the new hashmap Locus DTO format (only applicable to webinars for now)\n this.onFullLocusWithHashTrees(debugText, locus, metadata, dataSets, eventType);\n } else {\n this.onFullLocusClassic(debugText, locus, eventType);\n }\n }\n\n /**\n * Common part of handling full locus, used by both classic and hash tree based locus handling\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusCommon(locus: any, eventType?: string) {\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.participants?.forEach((participant) => {\n // participant.htMeta is set only for hash tree based locus\n if (typeof participant.htMeta?.elementId.id === 'number') {\n this.hashTreeObjectId2ParticipantId.set(participant.htMeta.elementId.id, participant.id);\n }\n });\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState?.type === _CALL_ ||\n this.parsedLocus.fullState?.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * Makes sure that passed in locus object has a participant object for self.\n *\n * @param {LocusDTO} locus The locus object to check and modify if needed\n * @returns {void}\n */\n ensureSelfParticipantExists(locus: any) {\n const {self} = locus;\n\n // sanity check, this should never fail\n if (!self?.identity || !Array.isArray(locus.participants)) {\n LoggerProxy.logger.warn(\n `Locus-info:index#ensureSelfParticipantExists --> locus object is missing required fields, cannot ensure self participant exists. self?.identity=\"${self?.identity}\"`\n );\n\n return;\n }\n\n const selfExists = locus.participants.some(\n (participant) => participant.identity === self.identity\n );\n\n if (!selfExists) {\n locus.participants.push({...self});\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n const isReplaceMembers =\n locus.jsSdkMeta?.forceReplaceMembers !== undefined\n ? locus.jsSdkMeta.forceReplaceMembers\n : ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n\n if (isReplaceMembers) {\n // when we're moving between breakouts, Locus sometimes doesn't send us\n // any participants at all for a few seconds\n // Web app relies on having at least the self participant always there\n // so we copy self into participants if it's not there.\n this.ensureSelfParticipantExists(locus);\n }\n this.mergeParticipants(this.participants, locus.participants);\n const updatesApplied = this.updateLocusInfo(locus);\n\n if (updatesApplied) {\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\n }\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return false;\n }\n\n this.updateControls(locus.controls, locus.self);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateReplaces(locus.replaces);\n this.updateSelf(locus.self);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateLinks(locus.links);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n\n return true;\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState?.type === _CALL_ ||\n this.parsedLocus.fullState?.type === _SIP_BRIDGE_ ||\n this.parsedLocus.fullState?.type === _SPACE_SHARE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState?.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self &&\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * update meeting's members\n * @param {Object} participants new participants object\n * @param {Array} removedParticipantIds list of removed participants\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, removedParticipantIds?: string[], isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n removedParticipantIds,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n isReplace,\n }\n );\n\n if (participants && Array.isArray(participants) && participants.length > 0) {\n for (const participant of participants) {\n if (participant && participant?.reason === 'FAILURE') {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED,\n {\n displayName: participant?.person?.primaryDisplayString,\n }\n );\n }\n }\n }\n }\n\n /**\n * @param {Object} controls\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object, self: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasHesiodLLMIdChanged,\n hasAiSummaryNotificationChanged,\n hasTranscribeSpokenLanguageChanged,\n hasManualCaptionChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\n hasInterpretationChanged,\n hasWebcastChanged,\n hasMeetingFullChanged,\n hasPracticeSessionEnabledChanged,\n hasStageViewChanged,\n hasAnnotationControlChanged,\n hasRemoteDesktopControlChanged,\n hasPollingQAControlChanged,\n hasAutoEndMeetingChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasMuteOnEntryChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,\n {state: current.muteOnEntry}\n );\n }\n\n if (hasShareControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,\n {state: current.shareControl}\n );\n }\n\n if (hasDisallowUnmuteChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,\n {state: current.disallowUnmute}\n );\n }\n\n if (hasReactionsChanged || hasReactionDisplayNamesChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,\n {state: current.reactions}\n );\n }\n\n if (hasViewTheParticipantListChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,\n {state: current.viewTheParticipantList}\n );\n }\n\n if (hasRaiseHandChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,\n {state: current.raiseHand}\n );\n }\n\n if (hasVideoChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,\n {state: current.video}\n );\n }\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasHesiodLLMIdChanged) {\n const {hesiodLlmId} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_HESIOD_LLM_ID_UPDATED,\n {\n hesiodLlmId,\n }\n );\n }\n\n if (hasAiSummaryNotificationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED,\n {\n aiSummaryNotification: current.transcribe.aiSummaryNotification,\n }\n );\n }\n\n if (hasTranscribeSpokenLanguageChanged) {\n const {spokenLanguage} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,\n {\n spokenLanguage,\n }\n );\n }\n\n if (hasManualCaptionChanged) {\n const {enabled} = current.manualCaptionControl;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED,\n {\n enabled,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n\n breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(\n self,\n this.webex.internal.device.url\n );\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasInterpretationChanged) {\n const {interpretation} = current;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n {\n interpretation,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n if (hasWebcastChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,\n {state: current.webcastControl}\n );\n }\n\n if (hasMeetingFullChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,\n {state: current.meetingFull}\n );\n }\n\n if (hasPracticeSessionEnabledChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,\n {state: current.practiceSession}\n );\n }\n\n if (hasStageViewChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,\n {state: current.videoLayout}\n );\n }\n\n if (hasAnnotationControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED,\n {state: current.annotationControl}\n );\n }\n\n if (hasRemoteDesktopControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED,\n {state: current.rdcControl}\n );\n }\n\n if (hasPollingQAControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,\n {state: current.pollingQAControl}\n );\n }\n\n if (hasAutoEndMeetingChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,\n {state: current.autoEndMeetingWarning}\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * Updates links and emits appropriate events if services or resources have changed\n * @param {Object} links\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLinks(links?: Links) {\n const {services, resources} = links || {};\n\n if (services && !isEqual(this.links?.services, services)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n\n if (resources && !isEqual(this.links?.resources, resources)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_RESOURCES,\n {\n resources,\n }\n );\n }\n\n this.links = links;\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if ((info && !isEqual(this.info, info)) || (!isEqual(this.roles, roles) && info)) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {\n isInitializing: !self, // if self is undefined, then the update is caused by locus init\n }\n );\n }\n this.roles = roles;\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @param {boolean} forceUpdate force to update the mediaShares\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object, forceUpdate = false) {\n if (mediaShares && (!isEqual(this.mediaShares, mediaShares) || forceUpdate)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n forceUpdate,\n }\n );\n }\n }\n\n /**\n * @param {Object} replaces\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplaces(replaces: object) {\n if (replaces && !isEqual(this.replaces, replaces)) {\n this.replaces = replaces;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the new locus.self\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any) {\n if (self) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(\n this.parsedLocus.self,\n self,\n this.webex.internal.device.url,\n this.participants // using this.participants instead of locus.participants here, because with delta DTOs locus.participants will only contain a small subset of participants\n );\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState?.type, this.parsedLocus.info?.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(this.participants, self),\n this.parsedLocus.fullState?.type,\n this.parsedLocus.info?.sipUri\n );\n\n if (result?.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.brbChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED,\n {\n brb: parsedSelves.current.brb,\n }\n );\n }\n\n if (parsedSelves.updates.selfIdChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ID_CHANGED,\n {\n selfId: parsedSelves.current.selfId,\n }\n );\n }\n\n if (parsedSelves.updates.interpretationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,\n {\n interpretation: parsedSelves.current.interpretation,\n selfParticipantId: parsedSelves.current.selfId,\n }\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n\n if (parsedSelves.updates.isRolesChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,\n {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}\n );\n }\n\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.hasUserEnteredLobby) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.hasUserBeenAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @param {Boolean} isMainLocus\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string, isMainLocus = true) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n {url, isMainLocus}\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * check the locus is main session's one or not, if is main session's, update main session cache\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusCache(locus: any) {\n const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);\n if (isMainSessionDTO) {\n this.updateMainSessionLocusCache(locus);\n }\n }\n\n /**\n * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)\n * if join breakout from main session, main session is not active for the attendee and remove main session locus cache\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this, newLocus);\n\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n const isMainSessionDTO =\n this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);\n\n if (isMainSessionDTO) {\n const isActive =\n [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(\n this.fullState?.state\n ) && !this.mainSessionLocusCache?.self?.removed;\n\n if (!isActive) {\n this.clearMainSessionLocusCache();\n }\n }\n\n return newLocus;\n }\n\n /**\n * merge participants by participant id\n * @param {Array} participants\n * @param {Array} sourceParticipants\n * @returns {Array} merged participants\n * @memberof LocusInfo\n */\n // eslint-disable-next-line class-methods-use-this\n mergeParticipants(participants, sourceParticipants) {\n if (!sourceParticipants || !sourceParticipants.length) return participants;\n if (!participants || !participants.length) {\n return sourceParticipants;\n }\n sourceParticipants.forEach((participant) => {\n const existIndex = participants.findIndex((p) => p.id === participant.id);\n if (existIndex > -1) {\n participants.splice(existIndex, 1, participant);\n } else {\n participants.push(participant);\n }\n });\n\n return participants;\n }\n\n /**\n * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout\n * @param {Object} mainLocus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMainSessionLocusCache(mainLocus: any) {\n if (!mainLocus) {\n return;\n }\n const locusClone = cloneDeep(mainLocus);\n if (this.mainSessionLocusCache) {\n // shallow merge and do special merge for participants\n assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {\n if (key === 'participants') {\n return this.mergeParticipants(objValue, srcValue);\n }\n\n return srcValue || objValue;\n });\n } else {\n this.mainSessionLocusCache = locusClone;\n }\n }\n\n /**\n * clear main session cache\n * @returns {undefined}\n * @memberof LocusInfo\n */\n clearMainSessionLocusCache() {\n this.mainSessionLocusCache = null;\n }\n\n /**\n * Cleans up all hash tree parsers and clears internal maps.\n * @returns {void}\n * @memberof LocusInfo\n */\n cleanUp() {\n this.hashTreeParsers.forEach((entry) => {\n entry.parser.cleanUp();\n });\n this.hashTreeParsers.clear();\n this.hashTreeObjectId2ParticipantId.clear();\n }\n}\n"],"mappings":"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","ignoreList":[]}