{"version":3,"file":"ng-web-apis-speech.mjs","sources":["../../../libs/speech/src/modules/speech-synthesis/text-to-speech.directive.ts","../../../libs/speech/src/modules/speech-synthesis/utterance.pipe.ts","../../../libs/speech/src/operators/confidence-above.ts","../../../libs/speech/src/operators/continuous.ts","../../../libs/speech/src/operators/final.ts","../../../libs/speech/src/operators/first-alternative.ts","../../../libs/speech/src/utils/is-said.ts","../../../libs/speech/src/operators/skip-until-said.ts","../../../libs/speech/src/operators/take-until-said.ts","../../../libs/speech/src/tokens/speech-recognition-max-alternatives.ts","../../../libs/speech/src/services/speech-recognition.service.ts","../../../libs/speech/src/tokens/speech-recognition-support.ts","../../../libs/speech/src/tokens/speech-synthesis-support.ts","../../../libs/speech/src/tokens/speech-synthesis-voices.ts","../../../libs/speech/src/ng-web-apis-speech.ts"],"sourcesContent":["import type {OnChanges} from '@angular/core';\nimport {Directive, EventEmitter, inject, Input, Output} from '@angular/core';\nimport {SPEECH_SYNTHESIS} from '@ng-web-apis/common';\n\n@Directive({\n    standalone: true,\n    selector: '[waTextToSpeech]',\n})\nexport class WaTextToSpeech implements OnChanges {\n    private readonly speechSynthesisRef = inject(SPEECH_SYNTHESIS);\n\n    @Input('waTextToSpeechPaused')\n    public paused = false;\n\n    @Output('waTextToSpeechError')\n    public readonly onerror = new EventEmitter<SpeechSynthesisErrorEvent>();\n\n    @Output('waTextToSpeechEnd')\n    public readonly onend = new EventEmitter<SpeechSynthesisEvent>();\n\n    @Output('waTextToSpeechMark')\n    public readonly onmark = new EventEmitter<SpeechSynthesisEvent>();\n\n    @Output('waTextToSpeechBoundary')\n    public readonly onboundary = new EventEmitter<SpeechSynthesisEvent>();\n\n    @Input()\n    public set waTextToSpeech(utterance: SpeechSynthesisUtterance) {\n        this.speechSynthesisRef.cancel();\n        this.speechSynthesisRef.pause();\n\n        utterance.onerror = (e) => this.onerror.emit(e);\n        utterance.onend = (e) => this.onend.emit(e);\n        utterance.onmark = (e) => this.onmark.emit(e);\n        utterance.onboundary = (e) => this.onboundary.emit(e);\n\n        this.speechSynthesisRef.speak(utterance);\n    }\n\n    public ngOnChanges(): void {\n        if (this.paused) {\n            this.speechSynthesisRef.pause();\n        } else {\n            this.speechSynthesisRef.resume();\n        }\n    }\n}\n\n/**\n * @deprecated: use {@link WaTextToSpeech}\n */\nexport const TextToSpeechDirective = WaTextToSpeech;\n","import type {PipeTransform} from '@angular/core';\nimport {Pipe} from '@angular/core';\n\nimport type {SpeechSynthesisUtteranceOptions} from '../../interfaces/speech-synthesis-utterance-options';\n\n@Pipe({\n    standalone: true,\n    name: 'waUtterance',\n})\nexport class UtterancePipe implements PipeTransform {\n    public transform(\n        text: string,\n        {\n            lang = '',\n            pitch = 1,\n            rate = 1,\n            volume = 1,\n            voice = null,\n        }: SpeechSynthesisUtteranceOptions | undefined = {},\n    ): SpeechSynthesisUtterance {\n        const utterance = new SpeechSynthesisUtterance(text);\n\n        utterance.lang = lang;\n        utterance.pitch = pitch;\n        utterance.rate = rate;\n        utterance.volume = volume;\n        utterance.voice = voice!; // Strange TS issue will not allow null here\n\n        return utterance;\n    }\n}\n","import type {MonoTypeOperatorFunction} from 'rxjs';\nimport {filter} from 'rxjs';\n\nexport function confidenceAbove(\n    threshold: number,\n): MonoTypeOperatorFunction<SpeechRecognitionAlternative> {\n    return filter(({confidence}) => confidence > threshold);\n}\n","import type {MonoTypeOperatorFunction} from 'rxjs';\nimport {scan} from 'rxjs';\n\nexport function continuous(): MonoTypeOperatorFunction<SpeechRecognitionResult[]> {\n    return scan(\n        (result: SpeechRecognitionResult[], current) => [\n            ...result.filter(({isFinal}) => isFinal),\n            ...current,\n        ],\n        [],\n    );\n}\n","import type {MonoTypeOperatorFunction} from 'rxjs';\nimport {map} from 'rxjs';\n\nexport function final(): MonoTypeOperatorFunction<SpeechRecognitionResult[]> {\n    return map((results) => results.filter(({isFinal}) => isFinal));\n}\n","import type {OperatorFunction} from 'rxjs';\nimport {map} from 'rxjs';\n\nexport function firstAlternative(): OperatorFunction<\n    SpeechRecognitionResult[],\n    SpeechRecognitionAlternative\n> {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n    return map((result) => result[0]?.[0]!);\n}\n","export function isSaid(phrase: string): (results: SpeechRecognitionResult[]) => boolean {\n    const lowercased = phrase.toLowerCase().trim();\n\n    return (results) =>\n        !!results.find(\n            (result) =>\n                result.isFinal &&\n                result[0]?.transcript.toLowerCase().trim() === lowercased,\n        );\n}\n","import type {MonoTypeOperatorFunction} from 'rxjs';\nimport {map, pipe, skipWhile} from 'rxjs';\n\nimport {isSaid} from '../utils/is-said';\n\nexport function skipUntilSaid(\n    text: string,\n): MonoTypeOperatorFunction<SpeechRecognitionResult[]> {\n    const predicate = isSaid(text);\n\n    return pipe(\n        skipWhile((results) => !predicate(results)),\n        map((value, index) => (index ? value : [])),\n    );\n}\n","import type {MonoTypeOperatorFunction} from 'rxjs';\nimport {takeWhile} from 'rxjs';\n\nimport {isSaid} from '../utils/is-said';\n\nexport function takeUntilSaid(\n    text: string,\n): MonoTypeOperatorFunction<SpeechRecognitionResult[]> {\n    const predicate = isSaid(text);\n\n    return takeWhile((results) => !predicate(results));\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const WA_SPEECH_RECOGNITION_MAX_ALTERNATIVES = new InjectionToken<number>(\n    '[WA_SPEECH_RECOGNITION_MAX_ALTERNATIVES]',\n    {\n        factory: () => 1,\n    },\n);\n\n/**\n * @deprecated: drop in v5.0, use {@link WA_SPEECH_RECOGNITION_MAX_ALTERNATIVES}\n */\nexport const SPEECH_RECOGNITION_MAX_ALTERNATIVES = WA_SPEECH_RECOGNITION_MAX_ALTERNATIVES;\n","import {inject, Injectable, LOCALE_ID, NgZone} from '@angular/core';\nimport {WA_SPEECH_RECOGNITION} from '@ng-web-apis/common';\nimport {Observable} from 'rxjs';\n\nimport {WA_SPEECH_RECOGNITION_MAX_ALTERNATIVES} from '../tokens/speech-recognition-max-alternatives';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class SpeechRecognitionService extends Observable<SpeechRecognitionResult[]> {\n    private readonly classRef = inject(WA_SPEECH_RECOGNITION);\n    private readonly lang = inject(LOCALE_ID, {optional: true});\n    private readonly maxAlternatives = inject(WA_SPEECH_RECOGNITION_MAX_ALTERNATIVES);\n    private readonly ngZone = inject(NgZone);\n\n    constructor() {\n        super((subscriber) => {\n            if (!this.classRef) {\n                subscriber.error(new Error('SpeechRecognition is not supported'));\n\n                return () => {};\n            }\n\n            // eslint-disable-next-line new-cap\n            const speechRecognition = new this.classRef();\n\n            speechRecognition.maxAlternatives = this.maxAlternatives;\n            speechRecognition.lang = this.lang ?? '';\n            speechRecognition.interimResults = true;\n            speechRecognition.onerror = (error: unknown) => subscriber.error(error);\n            speechRecognition.onend = () => subscriber.complete();\n            speechRecognition.onresult = ({results}: any) =>\n                this.ngZone.run(() =>\n                    subscriber.next(\n                        Array.from({length: results.length}, (_, i) => results[i]),\n                    ),\n                );\n\n            speechRecognition.start();\n\n            return () => speechRecognition.abort();\n        });\n    }\n}\n","import {inject, InjectionToken} from '@angular/core';\nimport {SPEECH_RECOGNITION} from '@ng-web-apis/common';\n\nexport const WA_SPEECH_RECOGNITION_SUPPORT = new InjectionToken<boolean>(\n    '[WA_SPEECH_RECOGNITION_SUPPORT]',\n    {\n        factory: () => !!inject(SPEECH_RECOGNITION),\n    },\n);\n\n/**\n * @deprecated: drop in v5.0, use {@link WA_SPEECH_RECOGNITION_SUPPORT}\n */\nexport const SPEECH_RECOGNITION_SUPPORT = WA_SPEECH_RECOGNITION_SUPPORT;\n","import {inject, InjectionToken} from '@angular/core';\nimport {SPEECH_SYNTHESIS} from '@ng-web-apis/common';\n\nexport const WA_SPEECH_SYNTHESIS_SUPPORT = new InjectionToken<boolean>(\n    '[WA_SPEECH_SYNTHESIS_SUPPORT]',\n    {\n        factory: () => !!inject(SPEECH_SYNTHESIS),\n    },\n);\n\n/**\n * @deprecated: drop in v5.0, use {@link WA_SPEECH_SYNTHESIS_SUPPORT}\n */\nexport const SPEECH_SYNTHESIS_SUPPORT = WA_SPEECH_SYNTHESIS_SUPPORT;\n","import {inject, InjectionToken} from '@angular/core';\nimport {SPEECH_SYNTHESIS} from '@ng-web-apis/common';\nimport type {Observable} from 'rxjs';\nimport {fromEvent, map, startWith} from 'rxjs';\n\nexport const WA_SPEECH_SYNTHESIS_VOICES = new InjectionToken<\n    Observable<readonly SpeechSynthesisVoice[]>\n>('[WA_SPEECH_SYNTHESIS_VOICES]', {\n    factory: () => {\n        const speechSynthesisRef = inject(SPEECH_SYNTHESIS);\n\n        return fromEvent(speechSynthesisRef, 'voiceschanged').pipe(\n            startWith(null),\n            map(() => speechSynthesisRef.getVoices()),\n        );\n    },\n});\n\n/**\n * @deprecated: drop in v5.0, use {@link WA_SPEECH_SYNTHESIS_VOICES}\n */\nexport const SPEECH_SYNTHESIS_VOICES = WA_SPEECH_SYNTHESIS_VOICES;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAIA,MAIa,cAAc,CAAA;AACN,IAAA,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAGxD,MAAM,GAAG,KAAK,CAAC;AAGN,IAAA,OAAO,GAAG,IAAI,YAAY,EAA6B,CAAC;AAGxD,IAAA,KAAK,GAAG,IAAI,YAAY,EAAwB,CAAC;AAGjD,IAAA,MAAM,GAAG,IAAI,YAAY,EAAwB,CAAC;AAGlD,IAAA,UAAU,GAAG,IAAI,YAAY,EAAwB,CAAC;IAEtE,IACW,cAAc,CAAC,SAAmC,EAAA;AACzD,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;AAEhC,QAAA,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEtD,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KAC5C;IAEM,WAAW,GAAA;QACd,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;AACnC,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;AACpC,SAAA;KACJ;wGArCQ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,CAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,kBAAkB;AAC/B,iBAAA,CAAA;8BAKU,MAAM,EAAA,CAAA;sBADZ,KAAK;uBAAC,sBAAsB,CAAA;gBAIb,OAAO,EAAA,CAAA;sBADtB,MAAM;uBAAC,qBAAqB,CAAA;gBAIb,KAAK,EAAA,CAAA;sBADpB,MAAM;uBAAC,mBAAmB,CAAA;gBAIX,MAAM,EAAA,CAAA;sBADrB,MAAM;uBAAC,oBAAoB,CAAA;gBAIZ,UAAU,EAAA,CAAA;sBADzB,MAAM;uBAAC,wBAAwB,CAAA;gBAIrB,cAAc,EAAA,CAAA;sBADxB,KAAK;;AAsBV;;AAEG;AACI,MAAM,qBAAqB,GAAG;;AC9CrC,MAIa,aAAa,CAAA;IACf,SAAS,CACZ,IAAY,EACZ,EACI,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,CAAC,EACT,IAAI,GAAG,CAAC,EACR,MAAM,GAAG,CAAC,EACV,KAAK,GAAG,IAAI,GAAA,GACiC,EAAE,EAAA;AAEnD,QAAA,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAErD,QAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB,QAAA,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,QAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB,QAAA,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1B,QAAA,SAAS,CAAC,KAAK,GAAG,KAAM,CAAC;AAEzB,QAAA,OAAO,SAAS,CAAC;KACpB;wGApBQ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;sGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,aAAa;AACtB,iBAAA,CAAA;;;ACLK,SAAU,eAAe,CAC3B,SAAiB,EAAA;AAEjB,IAAA,OAAO,MAAM,CAAC,CAAC,EAAC,UAAU,EAAC,KAAK,UAAU,GAAG,SAAS,CAAC,CAAC;AAC5D;;SCJgB,UAAU,GAAA;IACtB,OAAO,IAAI,CACP,CAAC,MAAiC,EAAE,OAAO,KAAK;AAC5C,QAAA,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAC,OAAO,EAAC,KAAK,OAAO,CAAC;AACxC,QAAA,GAAG,OAAO;KACb,EACD,EAAE,CACL,CAAC;AACN;;SCRgB,KAAK,GAAA;IACjB,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,OAAO,EAAC,KAAK,OAAO,CAAC,CAAC,CAAC;AACpE;;SCFgB,gBAAgB,GAAA;;AAK5B,IAAA,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC;AAC5C;;ACTM,SAAU,MAAM,CAAC,MAAc,EAAA;IACjC,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AAE/C,IAAA,OAAO,CAAC,OAAO,KACX,CAAC,CAAC,OAAO,CAAC,IAAI,CACV,CAAC,MAAM,KACH,MAAM,CAAC,OAAO;AACd,QAAA,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,UAAU,CAChE,CAAC;AACV;;ACJM,SAAU,aAAa,CACzB,IAAY,EAAA;AAEZ,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAE/B,IAAA,OAAO,IAAI,CACP,SAAS,CAAC,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAC3C,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAAM,KAAK,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAC9C,CAAC;AACN;;ACTM,SAAU,aAAa,CACzB,IAAY,EAAA;AAEZ,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAE/B,IAAA,OAAO,SAAS,CAAC,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD;;MCTa,sCAAsC,GAAG,IAAI,cAAc,CACpE,0CAA0C,EAC1C;AACI,IAAA,OAAO,EAAE,MAAM,CAAC;AACnB,CAAA,EACH;AAEF;;AAEG;AACI,MAAM,mCAAmC,GAAG;;ACNnD,MAGa,wBAAyB,SAAQ,UAAqC,CAAA;AAC9D,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACzC,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AAC3C,IAAA,eAAe,GAAG,MAAM,CAAC,sCAAsC,CAAC,CAAC;AACjE,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAEzC,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,CAAC,UAAU,KAAI;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;AAElE,gBAAA,OAAO,MAAO,GAAC,CAAC;AACnB,aAAA;;AAGD,YAAA,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AAE9C,YAAA,iBAAiB,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YACzD,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;AACzC,YAAA,iBAAiB,CAAC,cAAc,GAAG,IAAI,CAAC;AACxC,YAAA,iBAAiB,CAAC,OAAO,GAAG,CAAC,KAAc,KAAK,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxE,iBAAiB,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtD,iBAAiB,CAAC,QAAQ,GAAG,CAAC,EAAC,OAAO,EAAM,KACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MACZ,UAAU,CAAC,IAAI,CACX,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAC7D,CACJ,CAAC;YAEN,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAE1B,YAAA,OAAO,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC3C,SAAC,CAAC,CAAC;KACN;wGAjCQ,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAET,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;MCLY,6BAA6B,GAAG,IAAI,cAAc,CAC3D,iCAAiC,EACjC;IACI,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;AAC9C,CAAA,EACH;AAEF;;AAEG;AACI,MAAM,0BAA0B,GAAG;;MCV7B,2BAA2B,GAAG,IAAI,cAAc,CACzD,+BAA+B,EAC/B;IACI,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAC5C,CAAA,EACH;AAEF;;AAEG;AACI,MAAM,wBAAwB,GAAG;;MCR3B,0BAA0B,GAAG,IAAI,cAAc,CAE1D,8BAA8B,EAAE;IAC9B,OAAO,EAAE,MAAK;AACV,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAEpD,OAAO,SAAS,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC,IAAI,CACtD,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,MAAM,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAC5C,CAAC;KACL;AACJ,CAAA,EAAE;AAEH;;AAEG;AACI,MAAM,uBAAuB,GAAG;;ACrBvC;;AAEG;;;;"}