{"version":3,"file":"ejflab-front-lib.mjs","sources":["../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/PromiseEmitter.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/audio.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/indicator.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/modalError.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/auth.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/http.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/alert/alert.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/alert/alert.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/services/config.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/translate.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/translate.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/generic/generic.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/generic/generic.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/services/modal.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/adduserrolepopup/adduserrolepopup.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/adduserrolepopup/adduserrolepopup.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/authorizationpopup/authorizationpopup.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/authorizationpopup/authorizationpopup.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/services/backendPage.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/authorization.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/console.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/call.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/dictate-service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/file.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/flowchart.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/gce.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/imagedetection.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/imagiation.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/localfilejson.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/localfile.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/localpage.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/localtuple.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/loginpopup/loginpopup.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/loginpopup/loginpopup.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/services/login.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/mail.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/microsoftAuth.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/minio.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/mongo.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/myaudio.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/opencv.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/fecha-card.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/card/card.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/card/card.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/multiplepages/multiplepages.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/multiplepages/multiplepages.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/imagepicker/imagepicker.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/imagepicker/imagepicker.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/pagepopup/pagepopup.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/pagepopup/pagepopup.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/services/page.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/payupopup/payupopup.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/payupopup/payupopup.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/services/payu.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/picture360.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/tuple.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/userpopup/userpopup.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/userpopup/userpopup.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/services/user.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/services/webcam.service.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/interceptors/JwtInterceptor.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/CameraPermissionWatcher.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/MicrophonePermissionWatcher.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/processors/BaseProcesor.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/processors/SendLiveChangesProcessor.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/RTCCom.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/context.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/base.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/baseMs.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/blobeditor/blobeditor.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/blobeditor/blobeditor.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/canvaseditor/canvaseditor.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/canvaseditor/canvaseditor.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/confirm/confirm.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/confirm/confirm.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/fileordevicepopup/fileordevicepopup.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/fileordevicepopup/fileordevicepopup.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/filepicker/filepicker.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/filepicker/filepicker.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/indicator/indicator.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/indicator/indicator.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/prejson/prejson.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/prejson/prejson.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/scrollfile/scrollfile.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/scrollfile/scrollfile.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/sort-by-name.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/scrollfiles/scrollfiles.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/scrollfiles/scrollfiles.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/scrollnav/scrollnav.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/scrollnav/scrollnav.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/statusbar/statusbar.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/statusbar/statusbar.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/txtfileeditor/txtfileeditor.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/txtfileeditor/txtfileeditor.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/components/webcam/webcam.component.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/webcam/webcam.component.html","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/epoch2date.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/json-color.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/json2svg.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/interpolate.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/since.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/pipes/age.pipe.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/directives/NgInit.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/directives/MoveNextByEnter.directive.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/EmitterThen.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/VideoWebStream.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/processors/EchoLogProcessor.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/processors/ReceiveLiveChangesProcessor.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/processors/RemoveUserProcessor.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/processors/SetModelProcessor.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/components/base/processors/UpdateUserListProcessor.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/validators/MultipleEmailValidator.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/adapters/date-adapters.ts","../../../projects/ejflab-front-lib/src/lib/mycommon/mycommon.module.ts","../../../projects/ejflab-front-lib/src/public-api.ts","../../../projects/ejflab-front-lib/src/ejflab-front-lib.ts"],"sourcesContent":["import { EventEmitter } from '@angular/core';\n\nexport class PromiseEmitter {\n  promise: Promise<any>;\n  emmiter: EventEmitter<any> = new EventEmitter();\n  isResolved: boolean = false;\n  constructor() {\n    this.promise = new Promise((resolve) => {\n      this.emmiter.subscribe((data) => {\n        if (this.isResolved) {\n          // Could lost reference if some one ales had it\n          this.promise = Promise.resolve(data);\n        } else {\n          resolve(data);\n        }\n      });\n    });\n  }\n\n  resolve(data?: any) {\n    this.emmiter.emit(data);\n  }\n\n  async then() {\n    return this.promise;\n  }\n}\n","import { Injectable } from \"@angular/core\";\nimport { PromiseEmitter } from '../components/base/PromiseEmitter';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AudioService {\n\n    static audioContext: AudioContext | null = null;\n    static promise = new PromiseEmitter();\n\n    constructor() { }\n\n    static async createSafeAudioContext() {\n        if (!AudioService.audioContext) {\n            AudioService.audioContext = new (window.AudioContext || (window as any).webkitAudioContext)();\n        }\n        if (AudioService.audioContext.state === 'suspended') {\n            await AudioService.audioContext.resume();\n        }\n        AudioService.promise.resolve(AudioService.audioContext);\n    }\n\n    static async getAudioContext(): Promise<AudioContext> {\n        return AudioService.promise.promise;\n    }\n}","import { EventEmitter, Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\ninterface WaitPayload {\n  done: number;\n  autor: Wait;\n}\n\nexport interface IndicatorPayload {\n  esperas: Array<Wait>;\n  loading: boolean;\n}\n\nexport interface IndicatorDetail {\n  description: string;\n  html?: boolean;\n}\n\nexport class Wait {\n  desc: string | undefined;\n  detail?: IndicatorDetail;\n  evento: EventEmitter<WaitPayload>;\n  subscription: Subscription;\n  constructor(escucha: Function, desc?: string | IndicatorDetail) {\n    this.evento = new EventEmitter();\n    if (typeof desc == \"string\") {\n      this.desc = desc;\n    } else if (desc) {\n      this.desc = desc.description;\n      this.detail = desc;\n    }\n    this.subscribe(escucha);\n  }\n  unsubscribe() {\n    this.subscription.unsubscribe();\n  }\n  private subscribe(escucha: Function) {\n    this.subscription = this.evento.subscribe(escucha);\n  }\n  done() {\n    this.evento.emit({ done: 100, autor: this });\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class IndicatorService {\n  evento: EventEmitter<IndicatorPayload>;\n  esperas: Array<Wait> = [];\n  constructor() {\n    this.evento = new EventEmitter<IndicatorPayload>();\n  }\n  private escucha(evento: WaitPayload) {\n    if (evento.done == 100) {\n      const indice = this.esperas.indexOf(evento.autor);\n      if (indice >= 0) {\n        this.esperas.splice(indice, 1);\n        evento.autor.unsubscribe();\n        this.notify();\n      }\n    }\n  }\n  private notify() {\n    const loading = this.esperas.length > 0;\n    this.evento.emit({ esperas: this.esperas, loading });\n  }\n  subscribe(escucha: Function): Subscription {\n    return this.evento.subscribe(escucha);\n  }\n  start(desc?: string | IndicatorDetail): Wait {\n    const escuchaThis = this.escucha.bind(this);\n    let wait;\n    wait = new Wait(escuchaThis, desc);\n    this.esperas.push(wait);\n    this.notify();\n    return wait;\n  }\n  wait(promesa: Promise<any>) {\n    const luego = this.start();\n    promesa.finally(() => {\n      luego.done();\n    });\n  }\n\n  getTasks() {\n    // return only tasks with detail to show\n    return this.esperas.filter((task) => {\n      return !!task.detail;\n    });\n  }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AlertComponent } from '../components/alert/alert.component';\n\nexport abstract class ErrorManager {\n  abstract errorToMessage(error: Error): Promise<{ title: string, txt: string }>;\n}\n\nexport class ErrorManagerDefault extends ErrorManager {\n  override async errorToMessage(error: Error): Promise<{ title: string; txt: string; }> {\n    return { title: \"Oops!\", txt: error.message };\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ModalErrorService {\n  defaultErrorManager = new ErrorManagerDefault();\n  constructor(\n    public dialog: MatDialog,\n    @Optional() @Inject('errorManager') private errorManager: ErrorManager,\n  ) { }\n\n  async error(error: Error) {\n\n    let message = {};\n    if (this.errorManager) {\n      // Provided\n      message = await this.errorManager.errorToMessage(error);\n    } else {\n      // Default\n      message = await this.defaultErrorManager.errorToMessage(error);\n    }\n    const dialogRef = this.dialog.open(AlertComponent, {\n      data: message,\n    });\n    return new Promise((resolve) => {\n      dialogRef.afterClosed().subscribe((result) => {\n        resolve(result);\n      });\n    });\n  }\n}\n","import { Injectable, EventEmitter } from '@angular/core';\nimport {\n  Auth,\n  createUserWithEmailAndPassword,\n  GoogleAuthProvider,\n  signInWithEmailAndPassword,\n  signInWithPopup,\n  signOut,\n  User,\n  getIdToken,\n} from '@angular/fire/auth';\nimport { LoginData } from '../interfaces/login-data.interface';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthService {\n  evento: EventEmitter<User | null>;\n  promesa: Promise<User | null> = Promise.resolve(null);\n\n  constructor(private auth: Auth) {\n    this.evento = new EventEmitter<User | null>();\n    auth.onAuthStateChanged((user) => {\n      if (user) {\n        this.promesa = Promise.resolve(user);\n        getIdToken(user)\n          .then((token) => {\n            this.setCookie('yo', token, 1);\n          })\n          .catch(() => {\n            this.setCookie('yo', '', 0);\n          });\n        this.evento.emit(user);\n      } else {\n        this.promesa = Promise.resolve(null);\n        this.setCookie('yo', '', 0);\n        this.evento.emit(null);\n      }\n    });\n  }\n\n  getLoginEvent() {\n    return this.evento;\n  }\n\n  setCookie(cname: string, cvalue: string, exdays: number) {\n    const d = new Date();\n    d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n    let expires = 'expires=' + d.toUTCString();\n    document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\n  }\n\n  async getIdToken() {\n    let user = await this.getCurrentUser();\n    if (user != null) {\n      return getIdToken(user);\n    } else {\n      return null;\n    }\n  }\n\n  getCurrentUser() {\n    return this.promesa;\n  }\n\n  login({ email, password }: LoginData) {\n    return signInWithEmailAndPassword(this.auth, email, password);\n  }\n\n  register({ email, password }: LoginData) {\n    return createUserWithEmailAndPassword(this.auth, email, password);\n  }\n\n  loginWithGoogle() {\n    return signInWithPopup(this.auth, new GoogleAuthProvider());\n  }\n\n  async logout() {\n    await signOut(this.auth);\n    this.promesa = Promise.resolve(null);\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, of } from 'rxjs';\nimport { HttpOptionsData } from '../interfaces/login-data.interface';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { MyUtilities } from '@ejfdelgado/ejflab-common/src/MyUtilities';\nimport { IndicatorService, Wait } from './indicator.service';\nimport { AuthService } from '../services/auth.service';\nimport { Buffer } from 'buffer';\nimport { MyDatesFront } from '@ejfdelgado/ejflab-common/src/MyDatesFront';\nimport { FileSaveResponseData } from './fileInterface';\nimport { ModalErrorService } from './modalError.service';\n\nconst DEFAULT_PAGE_SIZE = 30;\n\nconst MAPEO_MIME_TIMES: { [key: string]: string } = {\n  'image/bmp': 'bmp',\n  'image/gif': 'gif',\n  'image/jpeg': 'jpeg',\n  'image/tiff': 'tiff',\n  'image/png': 'png',\n};\n\nconst EXTENSION_FALLBACK = 'jpg';\n\nfunction checkMaxFileSize(myBlob: Blob, MAX_MB: number) {\n  if (myBlob.size > 1024 * 1024 * MAX_MB) {\n    throw new Error(`La imagen es muy grande, se espera menor a ${MAX_MB}MB`);\n  }\n}\n\nexport interface LoadFileData {\n  folder?: string | null; // predeterminado es general\n  fileName?: string | null; // overwrite the path and file name\n  sizebig?: string | null; // 1024\n  sizesmall?: string | null; //256\n  foldertype?: string | null; //FIRST_YEAR_MONTH|FIRST_EMAIL|own\n  isprivate?: string | null;\n  isplainfile?: string | null;\n  erasefile?: string | null;\n}\n\nexport interface PagingData {\n  limit: number;\n  offset?: number;\n  page?: number;\n  orderColumn?: string;\n  direction: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HttpService {\n  static CACHE: { [key: string]: any } = {};\n  constructor(\n    private http: HttpClient,\n    private indicatorSrv: IndicatorService,\n    private modalSrv: ModalErrorService,\n    private auth: AuthService,\n  ) { }\n\n  getServerTime() {\n    return MyDatesFront.getServerTime();\n  }\n\n  async postWithFile(\n    myFile: string,\n    subUrl: string,\n    extra: any = null,\n    options?: HttpOptionsData,\n    loadOptions?: LoadFileData\n  ) {\n    let wait: Wait | null = null;\n    if (!options || options.showIndicator !== false) {\n      wait = this.indicatorSrv.start();\n    }\n    try {\n      const UPLOAD_URL = MyUtilities.removeRepeatedSlash(`${MyConstants.resolveDomain(subUrl)}${subUrl}`);\n      const accessToken = await this.auth.getIdToken();\n      const extraText = Buffer.from(JSON.stringify(extra)).toString('base64');\n      let extension: string | null = null;\n      const mimeParts = /data:([^;]+)/gi.exec(myFile);\n      if (mimeParts != null) {\n        extension = MAPEO_MIME_TIMES[mimeParts[1]];\n      }\n      if (!extension) {\n        extension = EXTENSION_FALLBACK;\n      }\n      const blob = await this.b64toBlob(myFile);\n      checkMaxFileSize(blob, MyConstants.BUCKET.MAX_MB);\n      const promesa = new Promise<FileSaveResponseData>((resolve, reject) => {\n        const req = new XMLHttpRequest();\n        req.open('POST', UPLOAD_URL, true);\n        req.setRequestHeader('Authorization', `Bearer ${accessToken}`);\n        if (typeof loadOptions?.fileName == 'string') {\n          req.setRequestHeader('filename', loadOptions.fileName);\n        } else {\n          req.setRequestHeader('filename', `miarchivo.${extension}`);\n        }\n        const HEADERS_PASS = [\n          'folder',\n          'sizebig',\n          'sizesmall',\n          'foldertype',\n          'isplainfile',\n          'isprivate',\n          'erasefile',\n        ];\n        if (loadOptions) {\n          const temp: any = loadOptions;\n          for (let i = 0; i < HEADERS_PASS.length; i++) {\n            const header = HEADERS_PASS[i];\n            if (typeof temp[header] == 'string' || temp[header] != null) {\n              req.setRequestHeader(header, temp[header]);\n            }\n          }\n        }\n        req.setRequestHeader('extra', extraText);\n        req.onload = (event) => {\n          const jsonResponse = JSON.parse(req.responseText);\n          const status = req.status;\n          if (status >= 400 && status <= 599) {\n            reject(jsonResponse);\n          } else {\n            resolve(jsonResponse);\n          }\n        };\n        req.onerror = (e: ProgressEvent) => {\n          reject({ message: 'Error guardando archivo' });\n        };\n        req.send(blob);\n      });\n      promesa.finally(() => {\n        if (wait != null) {\n          wait.done();\n        }\n      });\n      return promesa;\n    } catch (err) {\n      if (wait != null) {\n        wait.done();\n      }\n      throw err;\n    }\n  }\n\n  async getAll<Type>(\n    path: string,\n    options?: HttpOptionsData\n  ): Promise<Array<Type>> {\n    const params = {\n      max: options?.pageSize ? options?.pageSize : DEFAULT_PAGE_SIZE,\n      offset: 0,\n    };\n    let total: Array<Type> = [];\n    let actual: any | null;\n    let prefijo = '?';\n    let added: number = 0;\n    if (path.indexOf('?') >= 0) {\n      prefijo = '&';\n    }\n    let myUrl = MyUtilities.removeRepeatedSlash(path);\n    do {\n      actual = await this.get<any | null>(\n        `${myUrl}${prefijo}offset=${params.offset}&max=${params.max}`,\n        options\n      );\n      if (actual != null) {\n        let arreglo = actual;\n        if (typeof options?.key == 'string') {\n          const partes = options?.key?.split('.');\n          for (let i = 0; i < partes.length; i++) {\n            const parte = partes[i];\n            arreglo = arreglo[parte];\n            if ([null, undefined].indexOf(arreglo) >= 0) {\n              throw new Error(\n                `La ruta ${options?.key} no se encontró en la respuesta.`\n              );\n            }\n          }\n        }\n        if (arreglo instanceof Array) {\n          added = arreglo.length;\n          for (let i = 0; i < added; i++) {\n            total.push(arreglo[i]);\n          }\n          params.offset += added;\n        }\n      }\n    } while (actual != null && added > 0);\n    return total;\n  }\n\n  async get<Type>(\n    path: string,\n    options?: HttpOptionsData\n  ): Promise<Type | null> {\n    let wait = null;\n    if (!options || options.showIndicator !== false) {\n      wait = this.indicatorSrv.start();\n    }\n    let myUrl = `${MyConstants.resolveDomain(path)}/${path}`;\n    myUrl = MyUtilities.removeRepeatedSlash(myUrl);\n    let cacheKey: string | null = null;\n    if (options?.useCache === true) {\n      cacheKey = myUrl; // TODO include POST payload MD5\n    }\n    try {\n      let first: Observable<any> = of(null);\n\n      if (options?.useCache === true && cacheKey != null) {\n        if (cacheKey in HttpService.CACHE) {\n          const cached: any = HttpService.CACHE[cacheKey];\n          if (options?.isBlob === true) {\n            return Promise.resolve(cached);\n          } else {\n            return Promise.resolve(JSON.parse(JSON.stringify(cached)));\n          }\n        }\n      }\n      if (options?.isBlob === true) {\n        first = this.http.get(myUrl, {\n          responseType: 'blob',\n        });\n      } else if (options?.rawString === true) {\n        first = this.http.get(myUrl, {\n          responseType: 'text',\n        });\n      } else {\n        first = this.http.get<Type>(myUrl);\n      }\n\n      const respuesta = await new Promise<Type | null>((resolve, reject) => {\n        first\n          .pipe(\n            catchError((error) => {\n              if (!options || options.showError !== false) {\n                if (error.error) {\n                  this.modalSrv.error(error.error);\n                } else {\n                  this.modalSrv.error(error);\n                }\n              }\n              reject(error);\n              return of(null);\n            })\n          )\n          .subscribe((data) => {\n            if (options?.useCache === true && cacheKey != null) {\n              HttpService.CACHE[cacheKey] = data;\n            }\n            resolve(data);\n          });\n      });\n      return respuesta;\n    } catch (err) {\n      throw err;\n    } finally {\n      if (wait != null) {\n        wait.done();\n      }\n    }\n  }\n  async post<Type>(\n    path: string,\n    payload: any,\n    options?: HttpOptionsData\n  ): Promise<Type | null> {\n    return this.generic(path, payload, options, 'post');\n  }\n\n  async put<Type>(\n    path: string,\n    payload: any,\n    options?: HttpOptionsData\n  ): Promise<Type | null> {\n    return this.generic(path, payload, options, 'put');\n  }\n\n  async generic<Type>(\n    path: string,\n    payload: any,\n    options?: HttpOptionsData,\n    method: string = 'post'\n  ): Promise<Type | null> {\n    let wait = null;\n    if (!options || options.showIndicator !== false) {\n      wait = this.indicatorSrv.start();\n    }\n    const headers: { [key: string]: string } = {\n      'x-avoid-token': 'no',\n    };\n    if (options?.avoidToken === true) {\n      headers['x-avoid-token'] = 'yes';\n    }\n    if (options?.contentType) {\n      headers['Content-Type'] = options?.contentType;\n    }\n    try {\n      const respuesta = await new Promise<Type | null>((resolve, reject) => {\n        let basicRequest;\n        if (method == 'post') {\n          basicRequest = this.http.post<Type>(\n            MyUtilities.removeRepeatedSlash(`${MyConstants.resolveDomain(path)}${path}`),\n            payload,\n            {\n              headers: headers,\n            }\n          );\n        } else if (method == 'put') {\n          basicRequest = this.http.put<Type>(\n            MyUtilities.removeRepeatedSlash(`${MyConstants.resolveDomain(path)}${path}`),\n            payload,\n            {\n              headers: headers,\n            }\n          );\n        } else {\n          throw new Error(`Method ${method} does not exists`);\n        }\n\n        basicRequest\n          .pipe(\n            catchError((error) => {\n              if (!options || options.showError !== false) {\n                if (error.error) {\n                  this.modalSrv.error(error.error);\n                } else {\n                  this.modalSrv.error(error);\n                }\n              }\n              reject(error);\n              return of(null);\n            })\n          )\n          .subscribe((data) => {\n            resolve(data);\n          });\n      });\n      return respuesta;\n    } catch (err) {\n      throw err;\n    } finally {\n      if (wait != null) {\n        wait.done();\n      }\n    }\n  }\n  async delete<Type>(\n    path: string,\n    options?: HttpOptionsData\n  ): Promise<Type | null> {\n    let wait = null;\n    if (!options || options.showIndicator !== false) {\n      wait = this.indicatorSrv.start();\n    }\n    try {\n      const respuesta = await new Promise<Type | null>((resolve, reject) => {\n        this.http\n          .delete<Type>(MyUtilities.removeRepeatedSlash(`${MyConstants.resolveDomain(path)}${path}`), {})\n          .pipe(\n            catchError((error) => {\n              if (!options || options.showError !== false) {\n                if (error.error) {\n                  this.modalSrv.error(error.error);\n                } else {\n                  this.modalSrv.error(error);\n                }\n              }\n              reject(error);\n              return of(null);\n            })\n          )\n          .subscribe((data: any) => {\n            resolve(data);\n          });\n      });\n      return respuesta;\n    } catch (err) {\n      throw err;\n    } finally {\n      if (wait != null) {\n        wait.done();\n      }\n    }\n  }\n\n  async b64toBlob(b64Data: string) {\n    const base64Response = await fetch(b64Data);\n    const blob = await base64Response.blob();\n    return blob;\n  }\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { HttpService } from '../../services/http.service';\nimport { MyTemplate } from '@ejfdelgado/ejflab-common/src/MyTemplate';\n\nexport interface AlertDataButton {\n  class?: string;\n  color?: string;// deprecated\n  label?: string;\n  action?: Function;\n  icon?: string;\n}\n\nexport interface AlertData {\n  title?: string;\n  txt?: string;\n  isUrl?: boolean;\n  ishtml?: boolean;\n  buttons?: Array<AlertDataButton>;\n  payload?: any;\n  autoCloseMilis?: number;\n  translateFolder?: string | null;\n  model?: any;\n  imageUrl?: string;\n}\n\n@Component({\n  selector: 'app-alert',\n  templateUrl: './alert.component.html',\n  styleUrls: ['./alert.component.css'],\n})\nexport class AlertComponent implements OnInit {\n  text: string;\n  title: string;\n  buttons?: Array<AlertDataButton>;\n  imageUrl?: string;\n  constructor(\n    public dialogRef: MatDialogRef<AlertComponent>,\n    private readonly httpSrv: HttpService,\n    @Inject(MAT_DIALOG_DATA) public data: AlertData\n  ) {\n    this.title = typeof data.title == 'string' ? data.title : 'Información';\n    this.buttons = data.buttons;\n    this.imageUrl = data.imageUrl;\n    if (!this.buttons) {\n      this.buttons = [];\n      /*\n      this.buttons = [\n        {\n          color: 'primary',\n          label: 'Aceptar',\n          action: this.aceptar.bind(this),\n        },\n      ];\n      */\n    }\n    this.loadTemplate();\n  }\n\n  ngOnInit(): void { }\n\n  async loadTemplate() {\n    if (typeof this.data.txt == 'string') {\n      if (this.data.isUrl) {\n        const temp = await this.httpSrv.get<string>(this.data.txt, {\n          showIndicator: true,\n          rawString: true,\n          useCache: true,\n        });\n        if (temp != null) {\n          this.text = temp;\n        } else {\n          this.text = this.data.txt;\n        }\n      } else {\n        this.text = this.data.txt;\n      }\n      if (typeof this.data.payload == 'object' && this.data.payload !== null) {\n        const renderer = new MyTemplate();\n        this.text = renderer.render(this.text, this.data.payload);\n      }\n    } else {\n      this.text = 'Sin detalle';\n    }\n  }\n\n  async genericAction(detail: AlertDataButton) {\n    if (typeof detail.action == 'function') {\n      const response = detail.action(this.data);\n      if (response instanceof Promise) {\n        const datoRespondido = await response;\n      }\n      this.dialogRef.close(true);\n    }\n  }\n\n  async aceptar(data: AlertData) { }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">{{ title }}</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<div mat-dialog-content>\n    <div class=\"alert_image_container\" *ngIf=\"imageUrl !== undefined\">\n        <img src=\"{{ imageUrl }}\" />\n    </div>\n    <div *ngIf=\"data.ishtml\" [innerHtml]=\"text\"></div>\n    <div *ngIf=\"!data.ishtml\">{{ text }}</div>\n    <div class=\"bottom_buttons\">\n        <button class=\"btn\" [ngClass]=\"button.class ? button.class : 'btn-primary'\" (click)=\"genericAction(button)\"\n            *ngFor=\"let button of buttons; index as i;\">\n            <mat-icon *ngIf=\"button.icon\">{{ button.icon }}</mat-icon>&nbsp;{{ button.label }}\n        </button>\n    </div>\n</div>","import { Injectable } from '@angular/core';\nimport { IndicatorService } from './indicator.service';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class ConfigService {\n\n    COOKIE_NAME = 'noglang';\n    COOKIE_NAME_LOG = 'loglevel';\n    keyPromises: any = {};\n    renderer: any;\n\n    constructor(\n        private activity: IndicatorService,\n    ) {\n\n    }\n\n    setLogLevel(val: string) {\n        this.setCookie(this.COOKIE_NAME_LOG, val, 1000);\n        this.activity.start();\n        window.location.reload();\n    }\n\n    getLogLevel() {\n        //error warning info\n        let currentLogLevel = 'error';\n        const urlParams = new URLSearchParams(window.location.search);\n        const queryParamLanguage = urlParams.get('loglevel');\n        if (queryParamLanguage) {\n            currentLogLevel = queryParamLanguage;\n            this.setCookie(this.COOKIE_NAME_LOG, currentLogLevel, 1000);\n        } else {\n            currentLogLevel = this.getCookie(this.COOKIE_NAME_LOG) || 'error';\n        }\n        return currentLogLevel;\n    }\n\n    setLanguage(lang: string, reload: boolean = true) {\n        this.setCookie(this.COOKIE_NAME, lang, 1000);\n        if (reload) {\n            this.activity.start();\n            window.location.reload();\n        }\n    }\n\n    setCookie(cname: string, cvalue: string, exdays: number = 365) {\n        const d = new Date();\n        d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n        let expires = 'expires=' + d.toUTCString();\n        document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\n    }\n\n    getCookie(cname: string) {\n        let name = cname + '=';\n        let decodedCookie = decodeURIComponent(document.cookie);\n        let ca = decodedCookie.split(';');\n        for (let i = 0; i < ca.length; i++) {\n            let c = ca[i];\n            while (c.charAt(0) == ' ') {\n                c = c.substring(1);\n            }\n            if (c.indexOf(name) == 0) {\n                return c.substring(name.length, c.length);\n            }\n        }\n        return '';\n    }\n\n    getCurrentLanguage() {\n        let currentLang = 'en';\n        const urlParams = new URLSearchParams(window.location.search);\n        const queryParamLanguage = urlParams.get('l');\n        if (queryParamLanguage) {\n            currentLang = queryParamLanguage;\n            this.setCookie(this.COOKIE_NAME, currentLang, 1000);\n        } else {\n            currentLang = this.getCookie(this.COOKIE_NAME) || 'en';\n        }\n        return currentLang;\n    }\n}","import { Inject, Injectable } from '@angular/core';\nimport { SimpleObj } from '@ejfdelgado/ejflab-common/src/SimpleObj';\nimport { HttpService } from './http.service';\nimport { MyTemplate } from '@ejfdelgado/ejflab-common/src/MyTemplate';\nimport { ConfigService } from './config.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TranslateService {\n  COOKIE_NAME = 'noglang';\n  keyPromises: any = {};// this is the cache\n  renderer: any;\n  constructor(\n    private httpService: HttpService,\n    private configService: ConfigService,\n    @Inject('appVersion') public appVersion: string = \"default\",\n  ) {\n    this.renderer = new MyTemplate();\n  }\n\n  setLanguage(lang: string) {\n    this.configService.setLanguage(lang);\n  }\n\n  async loadLanguageDB(args: unknown[]) {\n    // Read query param\n    const currentLang = this.configService.getCurrentLanguage();\n    const key = `${args[0]}/${currentLang}`;\n    let promesa = this.keyPromises[key];\n    if (!promesa) {\n      this.keyPromises[key] = this.httpService.get(`assets/lang/${key}.json?v=${this.appVersion}`);\n      promesa = this.keyPromises[key];\n    }\n    const valor = await promesa;\n    return valor;\n  }\n\n  /**\n   * \n   * @param key \n   * @param args Can be a string, referencing the folder name in assets/lang/FOLDER/en.json or a JSON object {es: {}, en: {}}\n   * @returns \n   */\n  async translate(key: string, args: unknown[]) {\n    const def: any = key;\n    if (args.length > 0) {\n      let valor: any = {};\n      const args0: any = args[0];\n      if (typeof args0 == 'string') {\n        valor = await this.loadLanguageDB(args);\n      } else if (\n        args0 !== undefined &&\n        args0 !== null &&\n        typeof args0 == 'object'\n      ) {\n        const currentLang = this.configService.getCurrentLanguage();\n        if (currentLang in args0) {\n          valor = args0[currentLang];\n        }\n      }\n      let raw = SimpleObj.getValue(valor, key, def);\n      if (args.length >= 2) {\n        raw = this.renderer.render(raw, args[1]);\n      }\n      return raw;\n    } else {\n      return def;\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../services/translate.service';\nimport { MyTemplate } from '@ejfdelgado/ejflab-common/src/MyTemplate';\n\n@Pipe({\n  name: 'translate',\n})\nexport class TranslatePipe implements PipeTransform {\n  static renderer = new MyTemplate();\n  constructor(private translateSrv: TranslateService) {}\n  transform(value: string, ...args: unknown[]): Promise<unknown> {\n    if (args[1]) {\n      return new Promise(async (resolve, reject) => {\n        try {\n          let rendered = await this.translateSrv.translate(value, args);\n          rendered = TranslatePipe.renderer.render(rendered, args[1]);//creo esta linea sobra\n          resolve(rendered);\n        } catch (err) {\n          reject(err);\n        }\n      });\n    } else {\n      return this.translateSrv.translate(value, args);\n    }\n  }\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface GenericChoiceData {\n  txt: string;\n  val: string;\n  icon?: string;\n  class?: string;\n}\n\nexport interface GenericData {\n  txt?: string;\n  ishtml?: boolean;\n  title?: string;\n  timeout?: number;\n  choices?: Array<GenericChoiceData>;\n  callback?: string;\n  translateFolder?: any\n  model?: any;\n  imageUrl?: string;\n}\n\n@Component({\n  selector: 'app-generic',\n  templateUrl: './generic.component.html',\n  styleUrls: ['./generic.component.css'],\n})\nexport class GenericComponent implements OnInit {\n  text: string = 'Sin detalle';\n  title: string = 'Pop Up';\n  imageUrl?: string;\n  timeout: number = 0; // means no timeout\n  choices: Array<GenericChoiceData> = [];\n  callback: string = '';\n  translateFolder: string | null = null;\n  model: any = null;\n  constructor(\n    public dialogRef: MatDialogRef<GenericComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: GenericData\n  ) {\n    if (typeof data.txt == 'string') {\n      this.text = data.txt;\n    }\n    if (typeof data.title == 'string') {\n      this.title = data.title;\n    }\n    if (typeof data.timeout == 'number') {\n      this.timeout = data.timeout;\n    }\n    if (data.choices instanceof Array) {\n      this.choices = data.choices;\n    }\n    if (typeof data.callback == 'string') {\n      this.callback = data.callback;\n    }\n    if (typeof data.translateFolder == 'string') {\n      this.translateFolder = data.translateFolder;\n    }\n    if (typeof data.imageUrl == 'string') {\n      this.imageUrl = data.imageUrl;\n    }\n    this.model = data.model;\n  }\n\n  ngOnInit(): void {\n    // Si hay timeout, se configura\n    if (this.timeout > 0) {\n      setTimeout(() => {\n        this.dialogRef.close({\n          callback: this.callback,\n          choice: '', //Empty choice...\n        });\n      }, this.timeout);\n    }\n  }\n\n  selectChoice(choice: string) {\n    this.dialogRef.close({\n      callback: this.callback,\n      choice,\n    });\n  }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">{{ title | translate:translateFolder:model | async }}</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<div mat-dialog-content>\n    <div class=\"alert_image_container\" *ngIf=\"imageUrl !== undefined\">\n        <img src=\"{{ imageUrl }}\" />\n    </div>\n    <p *ngIf=\"!!data.ishtml\" [innerHtml]=\"text | translate:translateFolder:model | async\"></p>\n    <p *ngIf=\"!data.ishtml\">{{ text | translate:translateFolder:model | async }}</p>\n</div>\n<div mat-dialog-actions class=\"bottom_buttons\">\n    <button *ngFor=\"let someChoice of choices\" class=\"btn\"\n        [ngClass]=\"someChoice.class ? someChoice.class : 'btn-primary'\" (click)=\"selectChoice(someChoice.val)\">\n        <mat-icon *ngIf=\"someChoice.icon\" class=\"peque\">{{ someChoice.icon }}</mat-icon>\n        <span>{{ someChoice.txt | translate:translateFolder:model | async }}</span>\n    </button>\n</div>","import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AlertComponent, AlertData } from '../components/alert/alert.component';\nimport {\n  ConfirmComponent,\n  ConfirmData,\n} from '../components/confirm/confirm.component';\nimport {\n  GenericComponent,\n  GenericData,\n} from '../components/generic/generic.component';\nimport { ConfigService } from './config.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ModalService {\n  TRANSLATION: any = {\n    'en': {\n      \"yes\": \"Yes\",\n      \"no\": \"No\",\n      \"ok\": \"Ok\",\n      \"ups\": \"Oops!\",\n    },\n    'es': {\n      \"yes\": \"Sí\",\n      \"no\": \"No\",\n      \"ok\": \"Ok\",\n      \"ups\": \"Ups!\",\n    },\n  }\n  constructor(\n    public dialog: MatDialog,\n    private configService: ConfigService,\n  ) { }\n\n  translate(key: string) {\n    let lang = this.configService.getCurrentLanguage();\n    if (!(lang in this.TRANSLATION)) {\n      lang = 'es';\n    }\n    return this.TRANSLATION[lang][key];\n  }\n\n  async alert(payload: AlertData) {\n    const homologation: GenericData = {\n      txt: payload.txt,\n      ishtml: payload.ishtml,\n      title: payload.title,\n      translateFolder: payload.translateFolder,\n      model: payload.model,\n      choices: [\n        {\n          txt: this.translate('ok'),\n          val: '0'\n        }\n      ],\n    };\n    return this.generic(homologation);\n  }\n\n  async error(error: Error, errorId?: string) {\n    let errorMessage = \"Error: \";\n    if (typeof errorId == \"string\") {\n      errorMessage += errorId + \", \";\n    }\n    if (typeof error == \"string\") {\n      errorMessage += error;\n    } else if (typeof error.message == \"string\") {\n      errorMessage += error.message;\n    } else {\n      errorMessage += error.stack;\n    }\n    const dialogRef = this.dialog.open(AlertComponent, {\n      data: {\n        title: this.translate('ups'),\n        txt: errorMessage,\n        buttons: [\n          { label: this.translate('ok') }\n        ]\n      },\n    });\n    return new Promise((resolve) => {\n      dialogRef.afterClosed().subscribe((result) => {\n        resolve(result);\n      });\n    });\n  }\n\n  async confirm(payload: ConfirmData): Promise<boolean | null> {\n    const homologation: GenericData = {\n      txt: payload.txt,\n      title: payload.title,\n      translateFolder: payload.translateFolder,\n      imageUrl: payload.imageUrl,\n      model: payload.model,\n      choices: [\n        { txt: this.translate('no'), val: '0', icon: \"close\", class: \"btn-secondary\" },\n        { txt: this.translate('yes'), val: '1', icon: \"check\" },\n      ],\n    };\n    const choice: any = await this.generic(homologation);\n    if (choice) {\n      if (choice.choice === '1') {\n        return true;\n      } else if (choice.choice === '0') {\n        return false;\n      } else {\n        return null;\n      }\n    } else {\n      // Case when close window\n      return null;\n    }\n  }\n\n  async generic(payload: GenericData) {\n    const dialogRef = this.dialog.open(GenericComponent, {\n      data: payload,\n      disableClose: true, //Force pick a choice\n    });\n    return new Promise((resolve) => {\n      dialogRef.afterClosed().subscribe((result) => {\n        resolve(result);\n      });\n    });\n  }\n  genericComplete(payload: GenericData) {\n    const dialogRef = this.dialog.open(GenericComponent, {\n      data: payload,\n      disableClose: true, //Force pick a choice\n    });\n    return {\n      ref: dialogRef,\n      promise: new Promise((resolve) => {\n        dialogRef.afterClosed().subscribe((result) => {\n          resolve(result);\n        });\n      }),\n    };\n  }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { ModalService } from '../../services/modal.service';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { AuthorizationData } from '../authorizationpopup/authorizationpopup.component';\n\n@Component({\n  selector: 'app-adduserrolepopup',\n  templateUrl: './adduserrolepopup.component.html',\n  styleUrls: ['./adduserrolepopup.component.css'],\n})\nexport class AdduserrolepopupComponent implements OnInit {\n  form: FormGroup;\n  losRoles = MyConstants.ROLES;\n\n  constructor(\n    private dialogRef: MatDialogRef<AdduserrolepopupComponent>,\n    private fb: FormBuilder,\n    private modalSrv: ModalService\n  ) {}\n\n  ngOnInit(): void {\n    this.form = this.fb.group({\n      who: ['', [Validators.required, Validators.maxLength(128)]],\n      role: ['', [Validators.required]],\n    });\n  }\n\n  get who() {\n    return this.form.get('who');\n  }\n\n  get role() {\n    return this.form.get('role');\n  }\n\n  cancelar() {\n    this.dialogRef.close();\n  }\n\n  getMaxLengthMessage(label: string, error: any | null): string {\n    if (error && error.maxlength) {\n      return `Máximo ${error.maxlength.requiredLength} letras. Actualmente hay ${error.maxlength.actualLength}.`;\n    }\n    return '';\n  }\n\n  async guardar() {\n    const valores: AuthorizationData = {\n      who: this.form.value.who,\n      role: this.form.value.role,\n      version: 1,\n    };\n    if (this.form.valid) {\n      this.dialogRef.close(valores);\n    } else {\n      this.modalSrv.alert({\n        title: 'Ups...',\n        txt: 'Verifica tus datos antes de continuar.',\n      });\n    }\n  }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">Agregar Usuario</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<mat-dialog-content class=\"mat-typography con_form\">\n    <p class=\"texto_descripcion\">Escribe el nombre del usuario y el rol</p>\n    <form class=\"form-container layout_columna\" [formGroup]=\"form\" (ngSubmit)=\"guardar()\">\n        <mat-form-field class=\"form-control\">\n            <mat-label>Usuario</mat-label>\n            <input matInput formControlName=\"who\" type=\"text\" required />\n            <mat-error *ngIf=\"who?.hasError('required')\">\n                El usuario es requerido.\n            </mat-error>\n            <mat-error *ngIf=\"who?.hasError('maxlength')\">\n                {{ getMaxLengthMessage(\"\", who?.errors) }}\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field>\n            <mat-label>Rol</mat-label>\n            <select matNativeControl formControlName=\"role\" required>\n                <option *ngFor=\"let unRol of losRoles\" [ngValue]=\"unRol.id\">{{unRol.txt}}</option>\n            </select>\n            <mat-error *ngIf=\"role?.hasError('required')\">\n                El rol es requerido.\n            </mat-error>\n        </mat-form-field>\n    </form>\n</mat-dialog-content>\n<div mat-dialog-actions class=\"bottom_buttons\">\n    <button class=\"btn btn-secondary\" (click)=\"cancelar()\" type=\"button\">\n        <mat-icon>close</mat-icon>\n        Cancelar\n    </button>\n    <button class=\"btn btn-primary\" (click)=\"guardar()\">\n        <mat-icon>check</mat-icon>\n        Agregar\n    </button>\n</div>","import { Component, OnInit } from '@angular/core';\nimport {\n  FormArray,\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  Validators,\n} from '@angular/forms';\nimport {\n  MatDialog,\n  MatDialogRef,\n  MAT_DIALOG_DATA,\n} from '@angular/material/dialog';\nimport { ModalService } from '../../services/modal.service';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { AdduserrolepopupComponent } from '../adduserrolepopup/adduserrolepopup.component';\nimport { Inject } from '@angular/core';\nimport {\n  AuthorizationService,\n  PermisionData,\n} from '../../services/authorization.service';\n\nexport interface AuthorizationData {\n  who: string;\n  role: string;\n  version: number;\n}\n\n@Component({\n  selector: 'app-authorizationpopup',\n  templateUrl: './authorizationpopup.component.html',\n  styleUrls: ['./authorizationpopup.component.css'],\n})\nexport class AuthorizationpopupComponent implements OnInit {\n  form: FormGroup;\n  permisos: Array<AuthorizationData> = [];\n  losRoles = MyConstants.ROLES;\n  pageCreator: string;\n  pageId: string;\n  pendientesBorrar: Array<AuthorizationData> = [];\n  permisoPublicoInicial: string | null;\n\n  constructor(\n    private dialogRef: MatDialogRef<AuthorizationpopupComponent>,\n    private fb: FormBuilder,\n    private modalSrv: ModalService,\n    public dialog: MatDialog,\n    public authSrv: AuthorizationService,\n    @Inject(MAT_DIALOG_DATA) public data: any\n  ) {\n    this.form = new FormGroup({\n      formPublic: this.fb.group({\n        publicrole: ['', []],\n      }),\n      formArrayName: this.fb.array([]),\n    });\n\n    this.pageCreator = this.data.usr;\n    this.pageId = this.data.id;\n\n    this.buildForm();\n  }\n\n  buildForm(): void {\n    const controlArray = this.form.get('formArrayName') as FormArray;\n    controlArray.clear();\n\n    for (let i = 0; i < this.permisos.length; i++) {\n      controlArray.push(\n        this.fb.group({\n          role: new FormControl({\n            value: this.permisos[i].role,\n            disabled: false,\n          }),\n        })\n      );\n    }\n  }\n\n  async ngOnInit(): Promise<void> {\n    // Cargar el modelo de base de datos\n    const respuesta = await this.authSrv.readAll(this.pageId);\n    for (let i = 0; i < respuesta.length; i++) {\n      const actual = respuesta[i];\n      if (actual.who == '') {\n        const controlGroup = this.form.get('formPublic') as FormGroup;\n        controlGroup.get('publicrole')?.setValue(actual.role);\n        this.permisoPublicoInicial = actual.role;\n      } else {\n        this.permisos.push({\n          role: actual.role,\n          who: actual.who,\n          version: 0,\n        });\n      }\n    }\n    this.buildForm();\n  }\n\n  get publicrole() {\n    const controlGroup = this.form.get('formPublic') as FormGroup;\n    return controlGroup.get('publicrole');\n  }\n\n  async agregarUsuario() {\n    //Abre un popup para invitar\n    const dialogRef = this.dialog.open(AdduserrolepopupComponent);\n    const response = await new Promise<AuthorizationData>((resolve) => {\n      dialogRef.afterClosed().subscribe((result) => {\n        resolve(result);\n      });\n    });\n    if (response !== undefined) {\n      response.who = response.who.toLowerCase().trim();\n      //Lo agrega\n      for (let i = 0; i < this.permisos.length; i++) {\n        const actual = this.permisos[i];\n        if (actual.who == response.who) {\n          this.modalSrv.alert({\n            txt: `El usuario ${actual.who} ya existe, puedes editarlo más abajo.`,\n          });\n          return;\n        }\n      }\n      //chequea que el usuario no esté ya en la lista\n      this.permisos.unshift(response);\n      this.buildForm();\n    }\n  }\n\n  async borrarUsuario(i: number, usuario: AuthorizationData) {\n    const decision = await this.modalSrv.confirm({\n      title: 'Borrar usuario',\n      txt: `¿Seguro que deseas borrar a ${usuario.who}?`,\n    });\n    if (!decision) {\n      return;\n    }\n    const sacado = this.permisos.splice(i, 1)[0];\n    this.pendientesBorrar.push(sacado);\n  }\n\n  cancelar() {\n    this.dialogRef.close(false);\n  }\n\n  definirModificado(permiso: AuthorizationData) {\n    permiso.version = 1;\n  }\n\n  async guardar() {\n    try {\n      const value = this.form.value;\n\n      const data: { id: string; lista: Array<PermisionData> } = {\n        id: this.pageId,\n        lista: [],\n      };\n      const publicrole: string | null | undefined =\n        value?.formPublic?.publicrole;\n      if (\n        typeof publicrole == 'string' &&\n        publicrole.length > 0 &&\n        this.permisoPublicoInicial != publicrole\n      ) {\n        data.lista.push({\n          who: '',\n          auth: MyConstants.getAuthByRole(publicrole),\n          role: publicrole,\n        });\n      }\n      const permisos = this.permisos;\n      for (let i = 0; i < permisos.length; i++) {\n        const permiso = permisos[i];\n        if (permiso.version > 0) {\n          const arregloFormulario = value.formArrayName;\n          const theRole = arregloFormulario[i].role;\n          data.lista.push({\n            who: permiso.who,\n            auth: MyConstants.getAuthByRole(theRole),\n            role: theRole,\n          });\n        }\n      }\n      // Agrego los que se deben borrar\n      for (let i = 0; i < this.pendientesBorrar.length; i++) {\n        const pendiente = this.pendientesBorrar[i];\n        data.lista.push({\n          who: pendiente.who,\n          auth: [],\n          erase: true,\n          role: '',\n        });\n      }\n      if (data.lista.length == 0) {\n        this.dialogRef.close();\n      } else {\n        try {\n          await this.authSrv.save(data);\n          this.modalSrv.alert({ title: 'Ok!', txt: 'Guardado correctamente' });\n          this.dialogRef.close();\n          this.pendientesBorrar = [];\n        } catch (err) {}\n      }\n    } catch (err: any) {\n      this.modalSrv.alert({ title: 'Ups', txt: err.message });\n    }\n  }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">Editar Permisos</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<mat-dialog-content class=\"mat-typography con_form\">\n    <p class=\"texto_descripcion\">Define quién puede leer, editar o administrar.</p>\n    <form class=\"form-container layout_columna\" [formGroup]=\"form\" (ngSubmit)=\"guardar()\">\n        <div class=\"list_container\">\n            <button mat-raised-button type=\"button\" color=\"primary\" (click)=\"agregarUsuario()\">\n                Agregar Usuario\n            </button>\n            <div class=\"my_pair_element\" [formArrayName]=\"'formPublic'\">\n                <mat-form-field>\n                    <mat-label>Rol Público</mat-label>\n                    <select matNativeControl formControlName=\"publicrole\">\n                        <option *ngFor=\"let unRol of losRoles\" [ngValue]=\"unRol.id\">{{unRol.txt}}</option>\n                    </select>\n                </mat-form-field>\n            </div>\n            <div [formArrayName]=\"'formArrayName'\">\n                <div class=\"my_pair_element\" *ngFor=\"let permiso of permisos; index as i;\">\n                    <div class=\"the_identity\">\n                        <span>{{ permiso.who }}</span>\n                    </div>\n                    <div class=\"the_role\" [formGroupName]=\"i\">\n                        <mat-form-field>\n                            <mat-label>Rol</mat-label>\n                            <select matNativeControl formControlName=\"role\" (change)=\"definirModificado(permiso)\"\n                                required>\n                                <option *ngFor=\"let unRol of losRoles\" [ngValue]=\"unRol.id\">{{unRol.txt}}</option>\n                            </select>\n                        </mat-form-field>\n                    </div>\n                    <div class=\"the_button\" (click)=\"borrarUsuario(i, permiso)\">\n                        <mat-icon>delete</mat-icon>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </form>\n</mat-dialog-content>\n<div mat-dialog-actions class=\"bottom_buttons\">\n    <button class=\"btn btn-secondary\" (click)=\"cancelar()\" type=\"button\">\n        <mat-icon>close</mat-icon>\n        Cancelar\n    </button>\n    <button class=\"btn btn-primary\" (click)=\"guardar()\" type=\"button\">\n        <mat-icon>check</mat-icon>\n        Guardar\n    </button>\n</div>","import { EventEmitter, Injectable } from '@angular/core';\nimport { PageData } from '../interfaces/login-data.interface';\nimport { HttpService } from './http.service';\nimport { MyDates } from '@ejfdelgado/ejflab-common/src/MyDates';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BackendPageService {\n  evento: EventEmitter<PageData | null>;\n  pageKeys: any = null;\n  pageKeysEvent: EventEmitter<any>;\n  pageKeysTimeoutId: any = null;\n  constructor(private httpSrv: HttpService) {\n    this.evento = new EventEmitter();\n    this.pageKeysEvent = new EventEmitter();\n    this.evento.subscribe((myPage) => {\n      if (myPage) {\n        const pageId = myPage.id;\n        if (pageId && this.pageKeysTimeoutId == null) {\n          this.startReadingPageKeys(pageId);\n        }\n      }\n    });\n  }\n\n  async getPageKeys() {\n    const prioritize = (objeto: any) => {\n      const epoch = this.httpSrv.getServerTime();\n      const { actual, siguiente } = MyDates.getDates(epoch);\n      const respuesta = [];\n      if (actual in objeto) {\n        respuesta.push(objeto[actual]);\n      }\n      if (siguiente in objeto) {\n        respuesta.push(objeto[siguiente]);\n      }\n      return respuesta;\n    };\n    return new Promise((resolve) => {\n      if (this.pageKeys == null) {\n        const subscription = this.pageKeysEvent.subscribe((pageKeys) => {\n          resolve(prioritize(pageKeys));\n          subscription.unsubscribe();\n        });\n      } else {\n        resolve(prioritize(this.pageKeys));\n      }\n    });\n  }\n\n  async startReadingPageKeys(pageId: string) {\n    const epoch = this.httpSrv.getServerTime();\n    const { actual, siguiente, anterior, deadline } = MyDates.getDates(epoch);\n    if (this.pageKeys == null || !(siguiente in this.pageKeys)) {\n      this.pageKeys = await this.httpSrv.get<any>(`srv/${pageId}/keys`, {\n        showIndicator: false,\n        showError: false,\n      });\n      this.pageKeysEvent.emit(this.pageKeys);\n      // Dice cuando se debe volver a invocar\n      if (this.pageKeysTimeoutId != null) {\n        clearTimeout(this.pageKeysTimeoutId);\n      }\n      const startReadingPageKeysThis = this.startReadingPageKeys.bind(this);\n      this.pageKeysTimeoutId = setTimeout(startReadingPageKeysThis, deadline);\n    }\n  }\n\n  async getCurrentPage(): Promise<PageData | null> {\n    if (location.pathname == '/') {\n      //The home has no Page representation in DB\n      this.evento.emit(null);\n      return null;\n    } else {\n      const actual = await this.httpSrv.get<PageData>('srv/pg');\n      this.evento.emit(actual);\n      return actual;\n    }\n  }\n\n  async savePage(id: string, datos: PageData): Promise<PageData | null> {\n    let actual: PageData | null = null;\n    const payload = {\n      datos,\n    };\n    const URL = `srv/${id}/pg`;\n    if (datos.image) {\n      const image = datos.image;\n      delete datos.image;\n      await this.httpSrv.postWithFile(\n        image,\n        URL,\n        payload,\n        {},\n        {\n          folder: 'page',\n          fileName: `/${id}/front.jpg`,\n          foldertype: 'own',\n          sizebig: '512',\n          sizesmall: '256',\n        }\n      );\n    } else {\n      actual = await this.httpSrv.post<PageData>(URL, payload);\n      this.evento.emit(actual);\n    }\n    return actual;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { User } from '@angular/fire/auth';\nimport { MatDialog } from '@angular/material/dialog';\nimport { PageData } from '../interfaces/login-data.interface';\n\nimport { AuthService } from './auth.service';\nimport { BackendPageService } from './backendPage.service';\nimport { HttpService } from './http.service';\nimport { ModalService } from './modal.service';\nimport { AuthorizationpopupComponent } from '../components/authorizationpopup/authorizationpopup.component';\n\nexport interface PermisionData {\n  who: string;\n  auth: Array<string>;\n  erase?: boolean;\n  role: string;\n}\n\nexport interface AuthorizationPostData {\n  id: string;\n  lista: Array<PermisionData>;\n}\n\nexport interface AuthorizationGetData {\n  act: number;\n  role: string;\n  cre: number;\n  who: string;\n  rsc: string;\n  auth: Array<string>;\n  id: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthorizationService {\n  constructor(\n    private authService: AuthService,\n    private modalService: ModalService,\n    public dialog: MatDialog,\n    public pageService: BackendPageService,\n    private httpSrv: HttpService\n  ) {}\n\n  async readAll(id: string): Promise<Array<AuthorizationGetData>> {\n    const response = await this.httpSrv.getAll<AuthorizationGetData>(\n      `srv/${id}/auth`,\n      {\n        key: 'payload',\n      }\n    );\n    return response;\n  }\n\n  async save(payload: AuthorizationPostData) {\n    await this.httpSrv.post(`srv/${payload.id}/auth`, payload, {\n      showIndicator: true,\n      showError: true,\n    });\n  }\n\n  async edit() {\n    const promesas = [];\n    promesas.push(this.authService.getCurrentUser());\n    promesas.push(this.pageService.getCurrentPage());\n    const respuestas = await Promise.all<any>(promesas);\n\n    let page: PageData | null = null;\n    let usuario: User | null = null;\n    [usuario, page] = respuestas;\n\n    if (!usuario) {\n      this.modalService.alert({ txt: 'No hay usuario autenticado' });\n      return;\n    }\n    if (!page) {\n      this.modalService.alert({ txt: 'No hay página que editar' });\n      return;\n    }\n    this.dialog.open(AuthorizationpopupComponent, { data: page });\n  }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ConfigService } from \"./config.service\";\n\n/*\n\n?loglevel=info\n\nimport { ConsoleService } from 'ejflab-front-lib';\n\nconstructor(\n    private consoleSrv: ConsoleService\n) {\n    this.consoleSrv.info(\"This is an info...\");\n    this.consoleSrv.warning(\"This is an warning...\");\n    this.consoleSrv.error(\"This is an error...\");  \n}\n\n\n*/\n@Injectable({\n    providedIn: 'root',\n})\nexport class ConsoleService {\n    static traceMiddleware: { [key: string]: Function } = {};\n    constructor(\n        private configService: ConfigService,\n    ) {\n\n    }\n    static setTraceErrorMiddleware(key: string, extra: Function) {\n        ConsoleService.traceMiddleware[key] = extra;\n    }\n    info(...args: any) {\n        this.log(...args);\n    }\n    log(...args: any) {\n        const level = this.configService.getLogLevel();\n        if ([\"info\"].indexOf(level) >= 0) {\n            console.log(...args);\n        }\n    }\n    warn(...args: any) {\n        this.warning(...args);\n    }\n    warning(...args: any) {\n        const level = this.configService.getLogLevel();\n        if ([\"warning\", \"info\"].indexOf(level) >= 0) {\n            console.warn(...args);\n        }\n        for (let key in ConsoleService.traceMiddleware) {\n            if (typeof ConsoleService.traceMiddleware[key] == \"function\") {\n                ConsoleService.traceMiddleware[key](key, \"warning\", ...args);\n            }\n        }\n    }\n    error(...args: any) {\n        const level = this.configService.getLogLevel();\n        if ([\"error\", \"warning\", \"info\"].indexOf(level) >= 0) {\n            console.error(...args);\n        }\n        for (let key in ConsoleService.traceMiddleware) {\n            if (typeof ConsoleService.traceMiddleware[key] == \"function\") {\n                ConsoleService.traceMiddleware[key](key, \"error\", ...args);\n            }\n        }\n    }\n}","import { Injectable } from '@angular/core';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { ModalService } from './modal.service';\nimport { ConsoleService } from './console.service';\nimport { io, Socket } from 'socket.io-client';\n\ninterface ServerToClientEvents {\n  [key: string]: (message: any) => void;\n}\n\ninterface ClientToServerEvents {\n  [key: string]: (message: any) => void;\n}\n\nexport interface ConnectionDataOptions {\n  room: string;\n  uuid: string | null;\n  model?: string;\n}\n\nexport class CallServiceInstance {\n  instanceId: string;\n  socketId?: string | null = null;\n  socket: Socket<ServerToClientEvents, ClientToServerEvents> | null;\n  removeInstance: Function;\n  consoleSrv: ConsoleService;\n\n  constructor(\n    instanceId: string,\n    removeInstance: Function,\n    consoleSrv: ConsoleService\n  ) {\n    this.instanceId = instanceId;\n    this.removeInstance = removeInstance;\n    this.consoleSrv = consoleSrv;\n  }\n\n  async waitUntilConnection() {\n    return new Promise((resolve, reject) => {\n      if (this.socket) {\n        this.socket.on('connect', () => {\n          if (this.socket) {\n            this.socketId = this.socket.id;\n            resolve(this.socket);\n          }\n        });\n        this.socket.on('connect_error', (err) => {\n          reject(err);\n        });\n        if (this.socket.connected) {\n          resolve(this.socket);\n        }\n      }\n    });\n  }\n\n  async beginConnection(\n    opts: ConnectionDataOptions,\n    waitUntilConnection = true\n  ): Promise<Socket> {\n    if (this.socket) {\n      // Firs disconnect!\n      return this.socket;\n    }\n    const optsAny: any = opts;\n    const path = `${MyConstants.SOCKET_IO_ROOT}socket.io`;\n    let uri = MyConstants.SRV_ROOT;\n    if (uri.startsWith('/')) {\n      uri = '/';\n    }\n    this.socket = io(uri, {\n      path: path,\n      extraHeaders: optsAny,\n    });\n    if (waitUntilConnection) {\n      await this.waitUntilConnection();\n    }\n    return this.socket;\n  }\n\n  async endConnection() {\n    if (!this.socket) {\n      return;\n    }\n    this.consoleSrv.log(`endConnection! ${this.instanceId}`);\n    this.socket.disconnect();\n    this.socket = null;\n    this.removeInstance(this.instanceId);\n  }\n\n  async emitEvent(eventName: string, payload: any) {\n    if (!this.socket) {\n      return;\n    }\n    this.socket.emit(eventName, payload);\n  }\n\n  unregisterAllProcessors(eventName?: string) {\n    //this.consoleSrv.log(`unregisterAllProcessors...`);\n    if (!this.socket) {\n      this.consoleSrv.log(`unregisterAllProcessors... no socket`);\n      return;\n    }\n    this.socket.removeAllListeners(eventName);\n    //this.consoleSrv.log(`unregisterAllProcessors... OK`);\n  }\n\n  registerProcessor(eventName: string, processor: (message: any) => void) {\n    if (!this.socket) {\n      return;\n    }\n    this.socket.on(eventName, processor);\n  }\n\n  registerProcessorOnce(eventName: string, processor: (message: any) => void) {\n    if (!this.socket) {\n      return;\n    }\n    this.socket.once(eventName, processor);\n  }\n\n  getSocketId() {\n    if (this.socket) {\n      return this.socket.id;\n    } else {\n      return null;\n    }\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CallService {\n  instances: { [key: string]: CallServiceInstance } = {};\n  constructor(\n    private modalSrv: ModalService,\n    private consoleSrv: ConsoleService,\n  ) { }\n\n  getInstance(room?: string) {\n    if (!room) {\n      room = 'public';\n    }\n    let oldInstance = this.instances[room];\n    if (!oldInstance) {\n      const removeInstanceThis = this.removeInstance.bind(this);\n      oldInstance = new CallServiceInstance(room, removeInstanceThis, this.consoleSrv);\n      this.instances[room] = oldInstance;\n    }\n    return oldInstance;\n  }\n\n  removeInstance(instanceId: string) {\n    delete this.instances[instanceId];\n  }\n\n  isConnectedToRoom(instanceId: string) {\n    let oldInstance = this.instances[instanceId];\n    if (!oldInstance) {\n      return false;\n    }\n    return oldInstance.socket?.connected === true;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DictateService {\n  // Defaults\n  readonly SERVER = MyConstants.getSpeechToTextServer();\n  // Send blocks 4 x per second as recommended in the server doc.\n  readonly INTERVAL = 250;\n  // Path to worker javascript\n  readonly WORKER_PATH = 'assets/workers/recorder-worker.js';\n\n  // Error codes (mostly following Android error names and codes)\n  readonly ERR_NETWORK = 2;\n  readonly ERR_AUDIO = 3;\n  readonly ERR_SERVER = 4;\n  readonly ERR_CLIENT = 5;\n\n  // Event codes\n  readonly MSG_WAITING_MICROPHONE = 1;\n  readonly MSG_MEDIA_STREAM_CREATED = 2;\n  readonly MSG_INIT_RECORDER = 3;\n  readonly MSG_RECORDING = 4;\n  readonly MSG_SEND = 5;\n  readonly MSG_SEND_EMPTY = 6;\n  readonly MSG_SEND_EOS = 7;\n  readonly MSG_WEB_SOCKET = 8;\n  readonly MSG_WEB_SOCKET_OPEN = 9;\n  readonly MSG_WEB_SOCKET_CLOSE = 10;\n  readonly MSG_STOP = 11;\n  readonly MSG_SERVER_CHANGED = 12;\n\n  private config: any;\n  private audioContext: any;\n  private worker: any;\n  private ws: any;\n  private intervalKey: any;\n  private paused: any;\n\n  constructor() {}\n\n  init(cfg: any) {\n    console.log('Starting speech to text client');\n    this.config = cfg || {};\n    this.config.server = this.config.server || this.SERVER;\n    this.config.audioSourceId = this.config.audioSourceId;\n    this.config.interval = this.config.interval || this.INTERVAL;\n    this.config.onReadyForSpeech =\n      this.config.onReadyForSpeech || function () {};\n    this.config.onEndOfSpeech = this.config.onEndOfSpeech || function () {};\n    this.config.onResults = this.config.onResults || function (data: any) {};\n    this.config.onPartialResults =\n      this.config.onPartialResults || function (data: any) {};\n    this.config.onEndOfSession = this.config.onEndOfSession || function () {};\n    this.config.onEvent =\n      this.config.onEvent || function (e: any, data: any) {};\n    this.config.onError =\n      this.config.onError || function (e: any, data: any) {};\n\n    this.paused = true;\n\n    var audioSourceConstraints = {};\n    this.config.onEvent(\n      this.MSG_WAITING_MICROPHONE,\n      'Waiting for approval to access your microphone ...'\n    );\n\n    try {\n      this.audioContext = new AudioContext();\n\n      navigator.mediaDevices\n        .getUserMedia({ audio: true })\n        .then(this.startUserMedia.bind(this))\n        .catch((error) => {\n          this.config.onError(\n            this.ERR_CLIENT,\n            'No live audio input in this browser: ' + error\n          );\n        });\n    } catch (e: any) {\n      // Firefox 24: TypeError: AudioContext is not a constructor\n      // Set media.webaudio.enabled = true (in about:this.config) to fix this.\n      this.config.onError(\n        this.ERR_CLIENT,\n        'Error initializing Web Audio browser: ' + e + ' ' + e.stack\n      );\n    }\n\n    try {\n      this.createWebSocket();\n    } catch (e: any) {\n      this.config.onError(\n        this.ERR_CLIENT,\n        'No web socket support in this browser!' + e + ' ' + e.stack\n      );\n    }\n  }\n\n  isInitialized() {\n    return this.ws != null;\n  }\n\n  pause() {\n    this.paused = true;\n  }\n\n  resume() {\n    this.paused = false;\n  }\n\n  isRunning() {\n    return this.paused;\n  }\n\n  // Cancel everything without waiting on the server\n  cancel() {\n    // Stop the regular sending of audio (if present)\n    clearInterval(this.intervalKey);\n    if (this.worker) {\n      this.pause();\n      this.clearWorker();\n      this.config.onEvent(this.MSG_STOP, 'Stopped recording');\n    }\n    if (this.ws) {\n      this.ws.close();\n      this.ws = null;\n    }\n  }\n\n  public startUserMedia(stream: any) {\n    var input = this.audioContext.createMediaStreamSource(stream);\n    this.config.onEvent(this.MSG_MEDIA_STREAM_CREATED, 'Media stream created');\n    //Firefox loses the audio input stream every five seconds\n    // To fix added the input to window.source\n    (<any>window).source = input;\n\n    // make the analyser available in window context\n    (<any>window).userSpeechAnalyser = this.audioContext.createAnalyser();\n    input.connect((<any>window).userSpeechAnalyser);\n\n    this.initWorker(input);\n    this.config.onEvent(this.MSG_INIT_RECORDER, 'Recorder initialized');\n  }\n\n  private socketSend(blob: any) {\n    if (this.paused) return;\n    if (this.ws) {\n      var state = this.ws.readyState;\n      if (state == 1) {\n        // If blob is an audio blob\n        if (blob instanceof Blob) {\n          if (blob.size > 0) {\n            this.ws.send(blob);\n            this.config.onEvent(\n              this.MSG_SEND,\n              'Send: blob: ' + blob.type + ', ' + blob.size\n            );\n          } else {\n            this.config.onEvent(\n              this.MSG_SEND_EMPTY,\n              'Send: blob: ' + blob.type + ', EMPTY'\n            );\n          }\n          // Otherwise it's the EOS tag (string)\n        } else {\n          this.ws.send(blob);\n          this.config.onEvent(this.MSG_SEND_EOS, 'Send tag: ' + blob);\n        }\n      } else {\n        this.config.onError(\n          this.ERR_NETWORK,\n          'WebSocket: readyState!=1: ' + state + ': failed to send: ' + blob\n        );\n      }\n    } else {\n      this.config.onError(\n        this.ERR_CLIENT,\n        'No web socket connection: failed to send: ' + blob\n      );\n    }\n  }\n\n  private createWebSocket() {\n    this.ws = new WebSocket(this.config.server);\n\n    this.ws.onmessage = (e: any) => {\n      var data = e.data;\n      this.config.onEvent(this.MSG_WEB_SOCKET, data);\n      if (data instanceof Object && !(data instanceof Blob)) {\n        this.config.onError(\n          this.ERR_SERVER,\n          'WebSocket: onEvent: got Object that is not a Blob'\n        );\n      } else if (data instanceof Blob) {\n        this.config.onError(this.ERR_SERVER, 'WebSocket: got Blob');\n      } else {\n        var res = JSON.parse(data);\n        if (res.continue) {\n          // do nothing\n        } else if (res.partial) {\n          this.config.onPartialResults(res.partial);\n        } else if (res.text) {\n          this.config.onResults(res.text);\n        }\n      }\n    };\n\n    // Start recording only if the socket becomes open\n    this.ws.onopen = (e: any) => {\n      this.intervalKey = setInterval(() => {\n        this.exportWorkerData();\n      }, this.config.interval);\n\n      // Start recording\n      this.resume();\n      this.config.onReadyForSpeech();\n      this.config.onEvent(\n        this.MSG_WEB_SOCKET_OPEN,\n        'Opened the socket successfully'\n      );\n    };\n\n    // This can happen if the blob was too big\n    // E.g. \"Frame size of 65580 bytes exceeds maximum accepted frame size\"\n    // Status codes\n    // http://tools.ietf.org/html/rfc6455#section-7.4.1\n    // 1005:\n    // 1006:\n    this.ws.onclose = (e: any) => {\n      var code = e.code;\n      var reason = e.reason;\n      var wasClean = e.wasClean;\n      // The server closes the connection (only?)\n      // when its endpointer triggers.\n      this.config.onEndOfSession();\n      this.config.onEvent(\n        this.MSG_WEB_SOCKET_CLOSE,\n        e.code + '/' + e.reason + '/' + e.wasClean\n      );\n    };\n\n    this.ws.onerror = (e: any) => {\n      var data = e.data;\n      this.config.onError(this.ERR_NETWORK, data);\n    };\n  }\n\n  private initWorker(source: any) {\n    var node = source.context.createScriptProcessor(4096, 1, 1);\n    this.worker = new Worker(this.WORKER_PATH);\n\n    this.worker.onmessage = (e: any) => {\n      if (this.paused) return;\n\n      var blob = e.data;\n      this.socketSend(blob);\n    };\n\n    node.onaudioprocess = (e: any) => {\n      if (this.paused) return;\n\n      this.worker.postMessage({\n        command: 'record',\n        buffer: [e.inputBuffer.getChannelData(0)],\n      });\n    };\n\n    this.worker.postMessage({\n      command: 'init',\n      config: {\n        sampleRate: source.context.sampleRate,\n      },\n    });\n\n    source.connect(node);\n    node.connect(source.context.destination); //TODO: this should not be necessary (try to remove it)\n  }\n\n  private clearWorker() {\n    this.worker.postMessage({ command: 'clear' });\n  }\n\n  private exportWorkerData() {\n    this.worker.postMessage({ command: 'exportData' });\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { catchError, of, Subscription } from 'rxjs';\nimport { HttpOptionsData } from '../interfaces/login-data.interface';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { MyRoutes } from '@ejfdelgado/ejflab-common/src/MyRoutes';\nimport {\n  FileRequestData,\n  FileSaveData,\n  FileSaveResponseData,\n  FileServiceI,\n} from './fileInterface';\nimport { HttpService } from './http.service';\n\nexport interface frameVideoDetailRequestData {\n  duration: number;\n  audioUrl: string;\n  imageUrl: string;\n  key: string;\n}\n\nexport interface frameVideoRequestData {\n  frames: Array<frameVideoDetailRequestData>;\n  width: number;\n  height: number;\n  key: string;\n  download?: boolean;\n}\n\nexport interface FileResponseData {\n  canceled?: boolean;\n  base64: string | Array<string>;\n  fileName: string | Array<string>;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FileService implements FileServiceI {\n  evento: EventEmitter<FileRequestData>;\n  eventResponse: EventEmitter<FileResponseData>;\n  callback: Function | null = null;\n  constructor(private httpSrv: HttpService, private httpClient: HttpClient) {\n    this.evento = new EventEmitter<FileRequestData>();\n    this.eventResponse = new EventEmitter<FileResponseData>();\n\n    this.eventResponse.subscribe((response: FileResponseData) => {\n      if (this.callback) {\n        this.callback(response);\n      }\n    });\n  }\n\n  subscribe(escucha: Function): Subscription {\n    return this.evento.subscribe(escucha);\n  }\n\n  sendResponse(response: FileResponseData) {\n    this.eventResponse.emit(response);\n  }\n\n  getLastCallback(): Function | null {\n    return this.callback;\n  }\n\n  sendRequest(request: FileRequestData, callback: Function): void {\n    // Connect to other callback\n    this.callback = callback;\n    this.evento.emit(request);\n  }\n\n  async readPlainText(url: string): Promise<string> {\n    const theUrl = MyConstants.getCompleteUrl(url);\n    const respuesta = await new Promise<string>((resolve, reject) => {\n      this.httpClient\n        .get(theUrl, { responseType: 'text' })\n        .pipe(\n          catchError((error) => {\n            return of('');\n          })\n        )\n        .subscribe((data) => {\n          resolve(data);\n        });\n    });\n    return respuesta;\n  }\n\n  async delete(url: string): Promise<void> {\n    const partes = MyRoutes.splitPageData(location.pathname);\n    const options: HttpOptionsData = {\n      showIndicator: true,\n    };\n    const isFakeUrl = url.startsWith('blob:');\n    if (!isFakeUrl) {\n      await this.httpSrv.delete(url, options);\n    }\n  }\n\n  async makePublic(key: string) {\n    const idPage = this.getIdPage();\n    const URL = `srv/${idPage}/makefilepub`;\n    const options: HttpOptionsData = {\n      showIndicator: true,\n    };\n    const response: any = await this.httpSrv.post(URL, { key }, options);\n    return response;\n  }\n\n  async generateGif(payload: frameVideoRequestData) {\n    const idPage = this.getIdPage();\n    const URL = `srv/${idPage}/makegif`;\n    const options: HttpOptionsData = {\n      showIndicator: true,\n    };\n    const response: any = await this.httpSrv.post(URL, payload, options);\n    return response;\n  }\n\n  getIdPage() {\n    const idPage = document\n      .getElementById('meta_page_id')\n      ?.getAttribute('content');\n    if (!idPage) {\n      throw Error('No se encontró el id de la página actual.');\n    }\n    return idPage;\n  }\n\n  async save(\n    payload: FileSaveData,\n    options1?: HttpOptionsData\n  ): Promise<FileSaveResponseData> {\n    const idPage = this.getIdPage();\n    const partes = MyRoutes.splitPageData(location.pathname);\n    const pageType = partes.pageType;\n    const URL = `srv/${idPage}/file`;\n    const options: HttpOptionsData = {\n      showIndicator: true,\n    };\n    if (options1) {\n      options.showIndicator = options1.showIndicator;\n    }\n    const response: FileSaveResponseData = await this.httpSrv.postWithFile(\n      payload.base64,\n      URL,\n      {},\n      options,\n      {\n        folder: `srv/pg${pageType}/`,\n        fileName: `/${idPage}/${payload.fileName}`,\n        foldertype: 'OWN',\n        isplainfile: payload.isImage === true ? '0' : '1',\n        isprivate: payload.isPublic === true ? '0' : '1',\n        erasefile: payload.erasefile,\n      }\n    );\n    return response;\n  }\n\n  async listLocalFiles(path: string) {\n    const URL = `srv/local/ls`;\n    const options: HttpOptionsData = {\n      showIndicator: true,\n      avoidToken: true,\n    };\n    const response: any = await this.httpSrv.post(URL, { path }, options);\n    return response;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\nimport { Buffer } from 'buffer';\nimport { v4 as uuidv4 } from 'uuid';\nimport { encode, decode } from \"@msgpack/msgpack\";\nimport { FlowChartRef } from '../components/base/context.component';\n\nexport interface FlowchartProcessRequestData {\n  loadingIndicator?: boolean,\n  channel: string,\n  room: string,\n  processorMethod: string,\n  namedInputs: { [key: string]: any },\n  id?: string,\n  data: { [key: string]: any },\n  dbData?: { [key: string]: any },\n}\n\nexport interface FlowchartProcessorDetailData {\n  data: any,\n}\n\nexport interface FlowchartGenericResponseData {\n  status: string,\n  message?: string,\n  response?: FlowchartProcessorDetailData | any,\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FlowchartService {\n  constructor(private httpService: HttpService) { }\n\n  async loadFlowchart(payload: FlowChartRef) {\n    const response = await this.httpService.post<FlowchartGenericResponseData>(\n      `srv/flowchart/load`,\n      payload,\n      {\n        showIndicator: true,\n      }\n    );\n    return response;\n  }\n\n  async process(\n    payload: FlowchartProcessRequestData,\n    rawJson: boolean = false\n  ) {\n    if (!payload.id) {\n      payload.id = uuidv4().replace(/-/g, '_');\n    }\n    if (!payload.room) {\n      payload.room = uuidv4().replace(/-/g, '_');\n    }\n    let response: any = null;\n    if (rawJson == true) {\n      response = await this.httpService.post<FlowchartGenericResponseData>(\n        `srv/flowchart/processor_process_json`,\n        payload,\n        {\n          showIndicator: true,\n        }\n      );\n    } else {\n      const encoded = encode(payload);\n      const buffer = Buffer.from(encoded);\n      const binaryData = new Blob([buffer]);\n      response = await this.httpService.post<FlowchartGenericResponseData>(\n        `srv/flowchart/processor_process`,\n        binaryData,\n        {\n          showIndicator: !(payload.loadingIndicator === false),\n          contentType: 'application/octet-stream',\n        }\n      );\n    }\n    //console.log(JSON.stringify(response, null, 4));\n    return response;\n  }\n\n  async introspect(payload: any) {\n    const response = await this.httpService.post<FlowchartGenericResponseData>(\n      `srv/flowchart/introspect`,\n      payload,\n      {\n        showIndicator: false,\n      }\n    );\n    return response;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\nimport { IndicatorService } from './indicator.service';\nimport { ModalService } from './modal.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class GceService {\n  constructor(\n    private httpService: HttpService,\n    private indicatorSrv: IndicatorService,\n    private modalSrv: ModalService\n  ) {}\n  async readAll(): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/imagiation/jobs/readall`,\n      {},\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudieron leer los servidores');\n    }\n    return response;\n  }\n\n  async iterateGce(name: string): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/imagiation/jobs/iterate`,\n      {\n        name,\n      },\n      {\n        showIndicator: false,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo avanzar la ejecución');\n    }\n    return response;\n  }\n\n  async readCurrentState(name: string): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/instances/state`,\n      {\n        name,\n      },\n      {\n        showIndicator: false,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo leer el estado');\n    }\n    return response;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport * as tf from '@tensorflow/tfjs';\nimport { Buffer } from 'buffer';\nimport { IndicatorService } from './indicator.service';\nimport { ModalService } from './modal.service';\n\nexport interface ImageDetectionData {\n  boxes_data: Array<number>;\n  scores_data: Array<number>;\n  classes_data: Array<number>;\n  ratios: Array<number>;\n}\n\nexport interface ImageSimpleDetData {\n  tag: number;\n  minX: number;\n  minY: number;\n  width: number;\n  height: number;\n  score: number;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ImagedetectionService {\n  modelMaps: { [key: string]: any } = {};\n  constructor(\n    private indicatorSrv: IndicatorService,\n    private modalSrv: ModalService\n  ) {}\n\n  async detect(\n    modelId: string,\n    source: any,\n    numClass: number,\n    showBussy: boolean = false,\n    showErrors: boolean = false\n  ): Promise<Array<ImageSimpleDetData> | null> {\n    let response = null;\n    let indicador = null;\n    if (showBussy) {\n      indicador = this.indicatorSrv.start();\n    }\n    try {\n      const modelUrl = this.completeImagePath(\n        Buffer.from(modelId, 'base64').toString('utf8')\n      );\n\n      let localModel = this.modelMaps[modelUrl];\n\n      if (!localModel) {\n        localModel = await this.prepareModel(modelUrl);\n        this.modelMaps[modelUrl] = localModel;\n      }\n\n      response = await this.processInputSource(source, localModel, numClass);\n    } catch (err: any) {\n      if (showErrors) {\n        this.modalSrv.error(err);\n      } else {\n        console.log(err);\n      }\n    }\n    if (indicador) {\n      indicador.done();\n    }\n    return response;\n  }\n\n  async processInputSource(\n    source: any,\n    localModel: any,\n    numClass: any\n  ): Promise<Array<ImageSimpleDetData> | null> {\n    const inputs: any = localModel.inputs;\n    if (inputs) {\n      const inputShape = localModel.inputs[0].shape;\n      const [modelWidth, modelHeight] = inputShape.slice(1, 3); // get model width and height\n\n      const [input, xRatio, yRatio] = this.preprocess(\n        source,\n        modelWidth,\n        modelHeight\n      );\n      const res: any = localModel.execute(input); // inference model\n\n      const transRes = res.transpose([0, 2, 1]); // transpose result [b, det, n] => [b, n, det]\n      const boxes: any = tf.tidy(() => {\n        const w = transRes.slice([0, 0, 2], [-1, -1, 1]); // get width\n        const h = transRes.slice([0, 0, 3], [-1, -1, 1]); // get height\n        const x1 = tf.sub(transRes.slice([0, 0, 0], [-1, -1, 1]), tf.div(w, 2)); // x1\n        const y1 = tf.sub(transRes.slice([0, 0, 1], [-1, -1, 1]), tf.div(h, 2)); // y1\n        return tf\n          .concat(\n            [\n              y1,\n              x1,\n              tf.add(y1, h), //y2\n              tf.add(x1, w), //x2\n            ],\n            2\n          )\n          .squeeze();\n      }); // process boxes [y1, x1, y2, x2]\n\n      const [scores, classes] = tf.tidy(() => {\n        // class scores\n        const rawScores = transRes\n          .slice([0, 0, 4], [-1, -1, numClass])\n          .squeeze(0); // #6 only squeeze axis 0 to handle only 1 class models\n        return [rawScores.max(1), rawScores.argMax(1)];\n      }); // get max scores and classes index\n\n      const nms = await tf.image.nonMaxSuppressionAsync(\n        boxes,\n        scores,\n        500,\n        0.45,\n        0.2\n      ); // NMS to filter boxes\n\n      const boxes_data = this.mapToArray(boxes.gather(nms, 0).dataSync()); // indexing boxes by nms index\n      const scores_data = this.mapToArray(scores.gather(nms, 0).dataSync()); // indexing scores by nms index\n      const classes_data = this.mapToArray(classes.gather(nms, 0).dataSync()); // indexing classes by nms index\n      tf.dispose([res, transRes, boxes, scores, classes, nms]); // clear memory\n      const response = {\n        boxes_data,\n        scores_data,\n        classes_data,\n        ratios: [xRatio, yRatio],\n      };\n      const detecciones: Array<ImageSimpleDetData> = [];\n      this.processDetectedData(\n        response,\n        modelWidth,\n        modelHeight,\n        (\n          currentLabel: number,\n          minX: number,\n          minY: number,\n          width: number,\n          height: number,\n          score: number\n        ) => {\n          detecciones.push({\n            tag: currentLabel,\n            minX,\n            minY,\n            width,\n            height,\n            score,\n          });\n        }\n      );\n\n      return detecciones;\n    }\n    return null;\n  }\n\n  processDetectedData(\n    data: ImageDetectionData,\n    widthP: number,\n    heightP: number,\n    callback: Function\n  ) {\n    const scores_data = data.scores_data;\n    const boxes_data = data.boxes_data;\n    const ratios = data.ratios;\n    const classes_data = data.classes_data;\n\n    for (let i = 0; i < scores_data.length; ++i) {\n      const currentLabel = classes_data[i];\n      let [y1, x1, y2, x2] = boxes_data.slice(i * 4, (i + 1) * 4);\n      x1 *= ratios[0];\n      x2 *= ratios[0];\n      y1 *= ratios[1];\n      y2 *= ratios[1];\n      const width = x2 - x1;\n      const height = y2 - y1;\n      callback(\n        currentLabel,\n        x1 / widthP,\n        y1 / heightP,\n        width / widthP,\n        height / heightP,\n        scores_data[i]\n      );\n    }\n  }\n\n  mapToArray(mapa: any) {\n    const llaves = Object.keys(mapa);\n    const ans = [];\n    for (let i = 0; i < llaves.length; i++) {\n      const llaveStr = llaves[i];\n      const llaveInt = parseInt(llaveStr);\n      ans[llaveInt] = mapa[llaveStr];\n    }\n    return ans;\n  }\n\n  preprocess(source: any, modelWidth: any, modelHeight: any) {\n    let xRatio, yRatio; // ratios for boxes\n\n    const input = tf.tidy(() => {\n      const img = tf.browser.fromPixels(source);\n\n      // padding image to square => [n, m] to [n, n], n > m\n      const [h, w] = img.shape.slice(0, 2); // get source width and height\n      const maxSize = Math.max(w, h); // get max size\n      const imgPadded: any = img.pad([\n        [0, maxSize - h], // padding y [bottom only]\n        [0, maxSize - w], // padding x [right only]\n        [0, 0],\n      ]);\n\n      xRatio = maxSize / w; // update xRatio\n      yRatio = maxSize / h; // update yRatio\n\n      return tf.image\n        .resizeBilinear(imgPadded, [modelWidth, modelHeight]) // resize frame\n        .div(255.0) // normalize\n        .expandDims(0); // add batch\n    });\n\n    return [input, xRatio, yRatio];\n  }\n\n  async prepareModel(model: string) {\n    const modelInstance = await tf.loadGraphModel(model);\n    return modelInstance;\n  }\n\n  completeImagePath(path: string, suffix = '/best_web_model/model.json') {\n    // Convert to tflite\n    const replaced = path.replace(/\\/best\\.pt/, suffix);\n    return MyConstants.SRV_ROOT + replaced + '?authcookie=1&max_age=604800';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\nexport enum JobWorker {\n  local = 'local',\n  predefined = 'predefined',\n  paid1 = 'paid1',\n}\n\nexport enum JobState {\n  pending = 'pending',\n  running = 'running',\n  done = 'done',\n  fail = 'fail',\n  abort = 'abort',\n}\n\nexport interface TrainingJob extends ImagiationDataQuery {\n  id?: string;\n  pg?: string;\n  created?: number;\n  updated?: number;\n  started?: number;\n  ended?: number;\n  hours?: number;\n  state?: JobState;\n  progress?: number;\n  owner?: string;\n  workerType?: JobWorker;\n  pageType: string;\n  // Yolo\n  parentModel?: string;\n  epochs: number;\n  imageSize: number;\n  // Outputs\n  log?: string;\n  numImages?: number;\n  numTags?: number;\n}\n\nexport interface ImageShoot {\n  id?: string;\n  created?: number;\n  updated?: number;\n  tags: Array<Array<number>>;\n  author?: string;\n  pg: string;\n  urlBig: string;\n  urlThumbnail: string;\n  tagCount: number;\n  tagList: Array<number>;\n}\n\nexport interface PlayDetectionData {\n  id?: string;\n  pg?: string;\n  created?: number;\n  name: string;\n  modelId: string;\n  numClasses: number;\n  delayMillis: number;\n  facingMode: string;\n  configs: Array<any>;\n  lat: number;\n  lon: number;\n}\n\nexport interface ImagiationData {\n  status: string;\n  image: ImageShoot | Array<ImageShoot>;\n}\n\nexport interface ImagiationDataArray {\n  status: string;\n  images: Array<ImageShoot>;\n}\n\nexport interface JobsDataArray {\n  status: string;\n  jobs: Array<TrainingJob>;\n}\n\nexport interface TheTagData {\n  [key: string]: {\n    txt: string;\n    ref?: string | null;\n  };\n}\n\nexport interface TagsData {\n  status: string;\n  tag: TheTagData;\n}\n\nexport interface ImagiationDataQuery {\n  offset: number;\n  min_offset: number;\n  max: number;\n  max_date: number;\n  min_date: number;\n  max_count: number;\n}\n\nexport interface JobDataQuery {\n  offset: number;\n  max: number;\n}\n\nexport interface TryStartJobData {\n  status: string;\n  response?: {\n    status: string;\n    instanceId?: string;\n    currentJobs?: number;\n    maxJobs?: number;\n  };\n}\n\nexport interface WatchServerData {\n  status: string;\n  response: {\n    status: string;\n    instanceId: string;\n    currentJobs: number;\n    maxJobs: number;\n  };\n}\n\nexport interface StatValsData {\n  count: number;\n}\n\nexport interface StatisticData {\n  founds: { [key: string]: StatValsData };\n  confId: string;\n  confName: string;\n  big: string;\n  t: number;\n  thumb: string;\n  pg: string;\n  lon: number;\n  lat: number;\n  id: string;\n}\n\nexport interface StatisticResponseData {\n  status: string;\n  images: Array<any>;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ImageiationService {\n  constructor(private httpService: HttpService) {}\n\n  inferPageId(image: ImageShoot | Array<ImageShoot>) {\n    let pageId = null;\n    if (image instanceof Array) {\n      if (image.length == 0) {\n        return null;\n      }\n      pageId = image[0].pg;\n    } else {\n      pageId = image.pg;\n    }\n    return pageId;\n  }\n\n  async savePhoto(\n    image: ImageShoot | Array<ImageShoot>\n  ): Promise<ImagiationData> {\n    const payload = {\n      image,\n    };\n    const pageId = this.inferPageId(image);\n    if (pageId == null) {\n      return {\n        status: 'ok',\n        image: [],\n      };\n    }\n    const response = await this.httpService.post<ImagiationData>(\n      `srv/imagiation/${pageId}/imagesw`,\n      payload,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo guardar la foto');\n    }\n    return response;\n  }\n\n  async deletePhotos(\n    image: ImageShoot | Array<ImageShoot>\n  ): Promise<ImagiationData> {\n    const pageId = this.inferPageId(image);\n    if (pageId == null) {\n      return {\n        status: 'ok',\n        image: [],\n      };\n    }\n    const payload = {\n      image,\n    };\n    const response = await this.httpService.post<ImagiationData>(\n      `srv/imagiation/${pageId}/imagesd`,\n      payload,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudieron leer las fotos');\n    }\n    return response;\n  }\n\n  async pagePhotos(\n    pageId: string,\n    query: ImagiationDataQuery\n  ): Promise<ImagiationDataArray> {\n    const response = await this.httpService.post<ImagiationDataArray>(\n      `srv/imagiation/${pageId}/imagesr`,\n      query,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudieron leer las fotos');\n    }\n    return response;\n  }\n\n  async tagsRead(pageId: string): Promise<TagsData> {\n    const response = await this.httpService.post<TagsData>(\n      `srv/imagiation/${pageId}/tagsr`,\n      {},\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudieron leer los tags');\n    }\n    return response;\n  }\n\n  async tagsWrite(pageId: string, tag: TheTagData): Promise<TagsData> {\n    const response = await this.httpService.post<TagsData>(\n      `srv/imagiation/${pageId}/tagsw`,\n      { tag },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudieron escribir los tags');\n    }\n    return response;\n  }\n\n  async pageJobs(pageId: string, query: JobDataQuery): Promise<JobsDataArray> {\n    const response = await this.httpService.post<JobsDataArray>(\n      `srv/imagiation/${pageId}/jobsr`,\n      query,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudieron leer las tareas programadas');\n    }\n    return response;\n  }\n\n  async saveJob(\n    pageType: string,\n    pageId: string,\n    job: TrainingJob\n  ): Promise<JobsDataArray> {\n    const response = await this.httpService.post<JobsDataArray>(\n      `srv/${pageType}/${pageId}/jobsw`,\n      { job },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo escribir la tarea programada');\n    }\n    return response;\n  }\n\n  async tryStartJob(pageId: string, jobId: string): Promise<TryStartJobData> {\n    const response = await this.httpService.post<TryStartJobData>(\n      `srv/imagiation/${pageId}/startjob`,\n      { jobId },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo intentar ejecutar el entrenamiento');\n    }\n    return response;\n  }\n\n  async readJob(pageId: string, jobId: string): Promise<JobsDataArray> {\n    const response = await this.httpService.post<JobsDataArray>(\n      `srv/imagiation/${pageId}/jobr`,\n      { jobId },\n      {\n        showIndicator: false,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo leer el detalle');\n    }\n    return response;\n  }\n\n  async watchServer(): Promise<WatchServerData> {\n    const response = await this.httpService.post<WatchServerData>(\n      `srv/imagiation/watch`,\n      {},\n      {\n        showIndicator: false,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo leer el estado del servidor');\n    }\n    return response;\n  }\n\n  async saveConfig(\n    pageType: string,\n    pageId: string,\n    conf: PlayDetectionData\n  ): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/${pageType}/${pageId}/confsw`,\n      { conf },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo escribir la configuración');\n    }\n    return response;\n  }\n\n  async deleteConfig(pageId: string, conf: PlayDetectionData): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/imagiation/${pageId}/confsd`,\n      { confId: conf.id },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo borrar la configuración');\n    }\n    return response;\n  }\n\n  async readConfig(pageId: string, confId: string): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/imagiation/${pageId}/confsr`,\n      { confId: confId },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo leer la configuración');\n    }\n    return response;\n  }\n\n  async pageConf(\n    pageId: string,\n    query: JobDataQuery\n  ): Promise<Array<PlayDetectionData>> {\n    const response = await this.httpService.post<any>(\n      `srv/imagiation/${pageId}/confsp`,\n      query,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudieron leer las configuraciones');\n    }\n    return response.confs;\n  }\n\n  async storeStatistic(pageId: string, data: any): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/imagiation/${pageId}/statistic`,\n      data,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo crear la estadística');\n    }\n    return response;\n  }\n\n  async pageStatistics(\n    pageId: string,\n    query: ImagiationDataQuery\n  ): Promise<StatisticResponseData> {\n    const response = await this.httpService.post<StatisticResponseData>(\n      `srv/imagiation/${pageId}/statisticsr`,\n      query,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudieron leer las estadísticas');\n    }\n    return response;\n  }\n\n  async deleteStatistic(pageId: string, statId: string): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/imagiation/${pageId}/statisticd`,\n      { statId },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo borrar la estadística');\n    }\n    return response;\n  }\n}\n","import { Buffer } from 'buffer';\nimport { HttpService } from './http.service';\nimport { MyRoutes } from '@ejfdelgado/ejflab-common/src/MyRoutes';\nimport { FileSaveData, FileSaveResponseData } from './fileInterface';\n\nexport class LocalFileJson {\n  FILE_NAME: string;\n  constructor(public httpSrv: HttpService) {}\n  getRelativePath() {\n    // Later here can access pageid to be relative to the current page Id\n    const partes = MyRoutes.splitPageData(location.pathname);\n    const pageType = partes.pageType;\n    const pageId = '0';\n    return `srv${pageType}/${pageId}`;\n  }\n  async delete(): Promise<void> {\n    const path = this.getRelativePath();\n    await this.httpSrv.delete(`${path}/${this.FILE_NAME}`, {\n      avoidToken: true,\n    });\n  }\n  async read(): Promise<any> {\n    const respuesta = await this.httpSrv.get(\n      `${this.getRelativePath()}/${this.FILE_NAME}`,\n      {\n        avoidToken: true,\n        rawString: true,\n        showError: false,\n      }\n    );\n    if (respuesta == null) {\n      // No existe y se crea predeterminado {}\n      const defaultContent = {};\n      await this.save(defaultContent);\n      return defaultContent;\n    } else {\n      return JSON.parse(respuesta as string);\n    }\n  }\n  async save(data: any): Promise<FileSaveResponseData> {\n    const path = this.getRelativePath();\n    const payload: FileSaveData = {\n      fileName: `${path}/${this.FILE_NAME}`,\n      base64: Buffer.from(JSON.stringify(data), 'utf8').toString('base64'),\n    };\n    const response = await this.httpSrv.post(payload.fileName, payload, {\n      avoidToken: true,\n    });\n    return response as FileSaveResponseData;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { MyRoutes } from '@ejfdelgado/ejflab-common/src/MyRoutes';\nimport {\n  FileRequestData,\n  FileSaveData,\n  FileSaveResponseData,\n  FileServiceI,\n} from './fileInterface';\nimport { HttpService } from './http.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LocalFileService implements FileServiceI {\n  constructor(private httpSrv: HttpService) {}\n  getRelativePath() {\n    // Later here can access pageid to be relative to the current page Id\n    const partes = MyRoutes.splitPageData(location.pathname);\n    const pageType = partes.pageType;\n    const pageId = '0';\n    return `srv${pageType}/${pageId}/localfile`;\n  }\n  async delete(url: string): Promise<void> {\n    const path = this.getRelativePath();\n    await this.httpSrv.delete(`${path}/${url.replace(/^[/]+/, '')}`, {\n      avoidToken: true,\n    });\n  }\n  async readPlainText(url: string): Promise<string> {\n    const respuesta = await this.httpSrv.get(\n      `${this.getRelativePath()}/${url.replace(/^[/]+/, '')}`,\n      {\n        avoidToken: true,\n        rawString: true,\n      }\n    );\n    return respuesta as string;\n  }\n  async save(payload: FileSaveData): Promise<FileSaveResponseData> {\n    const path = this.getRelativePath();\n    payload.fileName = `${path}/${payload.fileName.replace(/^[/]+/, '')}`;\n    const response = await this.httpSrv.post(path, payload, {\n      avoidToken: true,\n    });\n    return response as FileSaveResponseData;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\nimport { LocalFileJson } from './localfilejson';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LocalPageService extends LocalFileJson {\n  constructor(public override httpSrv: HttpService) {\n    super(httpSrv);\n    this.FILE_NAME = 'localpage.json';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\nimport { LocalFileJson } from './localfilejson';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LocalTupleService extends LocalFileJson {\n  constructor(public override httpSrv: HttpService) {\n    super(httpSrv);\n    this.FILE_NAME = 'localtuple.json';\n  }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { AuthService } from '../../services/auth.service';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ModalService } from '../../services/modal.service';\nimport { IndicatorService } from '../../services/indicator.service';\n\n@Component({\n  selector: 'app-loginpopup',\n  templateUrl: './loginpopup.component.html',\n  styleUrls: ['./loginpopup.component.css'],\n})\nexport class LoginpopupComponent implements OnInit {\n  currentView = 'inicio';\n  form: FormGroup;\n  constructor(\n    private modalService: ModalService,\n    private readonly authService: AuthService,\n    public dialogRef: MatDialogRef<LoginpopupComponent>,\n    private fb: FormBuilder,\n    private indicator: IndicatorService\n  ) {}\n\n  ngOnInit(): void {\n    this.form = this.fb.group({\n      email: ['', [Validators.required, Validators.email]],\n      password: ['', Validators.required],\n    });\n  }\n\n  get email() {\n    return this.form.get('email');\n  }\n\n  get password() {\n    return this.form.get('password');\n  }\n\n  mostrarFormulario() {\n    this.currentView = 'formulario';\n  }\n\n  loginWithGoogle(event: any) {\n    const wait = this.indicator.start();\n    this.authService\n      .loginWithGoogle()\n      .then(() => {\n        this.dialogRef.close();\n        // Force reload...\n        location.reload();\n      })\n      .catch((e) => {\n        const errorCode = e.code;\n        const MAPEO: { [key: string]: string } = {\n          'auth/account-exists-with-different-credential':\n            'El usuario ya existe pero con otra cuenta.',\n          'auth/auth-domain-config-required':\n            'Configuración de dominio requerida',\n          'auth/cancelled-popup-request': 'Se canceló la ventana emergente.',\n          'auth/operation-not-allowed': 'Operación no permitida',\n          'auth/operation-not-supported-in-this-environment':\n            'Operación no soportada en este ambiente.',\n          'auth/popup-blocked': 'Se bloqueó la ventana emergente.',\n          'auth/popup-closed-by-user': 'Se cerró la ventana emergente.',\n          'auth/unauthorized-domain': 'Dominio no autorizado',\n          'auth/too-many-requests':\n            'Demasiados intentos fallidos, tal vez se inhabilitó la cuenta.',\n        };\n        if (errorCode in MAPEO) {\n          const mensaje: string = MAPEO[errorCode];\n          this.modalService.error(new Error(mensaje));\n        } else {\n          this.modalService.error(e);\n        }\n      })\n      .finally(() => {\n        wait.done();\n      });\n  }\n\n  ingresar(event?: any) {\n    const wait = this.indicator.start();\n    this.authService\n      .login(this.form.value)\n      .then(() => {\n        this.dialogRef.close();\n      })\n      .catch((e) => {\n        const errorCode = e.code;\n        const MAPEO: { [key: string]: string } = {\n          'auth/invalid-email': 'Correo inválido.',\n          'auth/user-disabled': 'Usuario inhabilitado.',\n          'auth/user-not-found': 'Usuario no existe.',\n          'auth/wrong-password': 'Contraseña incorrecta.',\n          'auth/too-many-requests':\n            'Demasiados intentos fallidos, tal vez se inhabilitó la cuenta.',\n          'auth/network-request-failed':\n            'Fallo de internet, reintenta más tarde.',\n        };\n        if (errorCode in MAPEO) {\n          const mensaje: string = MAPEO[errorCode];\n          this.modalService.error(new Error(mensaje));\n        } else {\n          this.modalService.error(e);\n        }\n      })\n      .finally(() => {\n        wait.done();\n      });\n  }\n\n  crearCuenta(event: any) {\n    const wait = this.indicator.start();\n    this.authService\n      .register(this.form.value)\n      .then(() => {\n        this.dialogRef.close();\n      })\n      .catch((e) => {\n        const errorCode = e.code;\n        const MAPEO: { [key: string]: string } = {\n          'auth/email-already-in-use':\n            'Ya hay un usuario creado con ese correo.',\n          'auth/invalid-email': 'Correo inválido.',\n          'auth/operation-not-allowed':\n            'Correo inhabilitado para crear cuenta.',\n          'auth/weak-password':\n            'La contraseña no es lo suficientemente fuerte.',\n          'auth/too-many-requests':\n            'Demasiados intentos fallidos, tal vez se inhabilitó la cuenta.',\n        };\n        if (errorCode in MAPEO) {\n          const mensaje: string = MAPEO[errorCode];\n          this.modalService.error(new Error(mensaje));\n        } else {\n          this.modalService.error(e);\n        }\n      })\n      .finally(() => {\n        wait.done();\n      });\n  }\n\n  regresar() {\n    this.currentView = 'inicio';\n  }\n\n  onSubmit() {\n    this.ingresar();\n  }\n}\n","<div mat-dialog-title *ngIf=\"currentView == 'inicio'\">\n    <header>\n        <h1 class=\"centrado\">Inicia sesión para continuar</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<mat-dialog-content class=\"mat-typography\" *ngIf=\"currentView == 'inicio'\">\n    <p class=\"texto_descripcion\">Personaliza esta aplicación web para cuando regreses.</p>\n    <div class=\"form-container layout_columna\">\n        <button mat-raised-button (click)=\"loginWithGoogle($event)\">\n            <img class=\"icono_oauthprovider\" src=\"/assets/img/google-small.png\" alt=\"google\"> Iniciar sesión con Google\n        </button>\n        <div class=\"o_intermedia\">\n            <span>o si quieres</span>\n        </div>\n        <button mat-raised-button color=\"primary\" (click)=\"mostrarFormulario()\">\n            Iniciar sesión con email\n        </button>\n    </div>\n</mat-dialog-content>\n\n<div mat-dialog-title *ngIf=\"currentView == 'formulario'\">\n    <h1 class=\"centrado\">Iniciar sesión con email</h1>\n    <span class=\"boton_cerrar\" [mat-dialog-close]>\n        <mat-icon>close</mat-icon>\n    </span>\n</div>\n<mat-dialog-content class=\"mat-typography con_form\" *ngIf=\"currentView == 'formulario'\">\n    <p class=\"texto_descripcion\">Personaliza esta aplicación web para cuando regreses.</p>\n    <form class=\"form-container layout_columna\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n        <mat-form-field class=\"form-control\">\n            <mat-label>Correo</mat-label>\n            <input matInput formControlName=\"email\" type=\"text\" required />\n            <mat-error *ngIf=\"email?.hasError('required')\">\n                El correo es requerido\n            </mat-error>\n            <mat-error *ngIf=\"email?.hasError('email')\">\n                El correo no es válido\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field class=\"form-control\">\n            <mat-label>Contraseña</mat-label>\n            <input matInput formControlName=\"password\" type=\"password\" required />\n            <mat-error *ngIf=\"password?.hasError('required')\">\n                Se requiere la contraseña\n            </mat-error>\n        </mat-form-field>\n\n        <button mat-raised-button color=\"primary\" type=\"button\" [disabled]=\"form.invalid\" (click)=\"ingresar($event)\">\n            Ingresar\n        </button>\n        <button mat-raised-button color=\"accent\" type=\"button\" [disabled]=\"form.invalid\" (click)=\"crearCuenta($event)\">\n            Crear cuenta\n        </button>\n        <button mat-raised-button type=\"button\" (click)=\"regresar()\">\n            Cancelar\n        </button>\n    </form>\n</mat-dialog-content>","import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { AuthService } from './auth.service';\nimport { ModalService } from './modal.service';\nimport { LoginpopupComponent } from '../components/loginpopup/loginpopup.component';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LoginService {\n  constructor(\n    private authService: AuthService,\n    private modalService: ModalService,\n    public dialog: MatDialog\n  ) {}\n\n  /**\n   * <button type=\"button\" (click)=\"login()\">Login</button>\n   */\n  async login() {\n    const usuario = await this.authService.getCurrentUser();\n    if (usuario) {\n      this.modalService.alert({ txt: 'Ya hay un usuario autenticado' });\n    } else {\n      this.dialog.open(LoginpopupComponent);\n    }\n  }\n\n  /**\n   * <button type=\"button\" (click)=\"logout()\" *ngIf=\"currentUser !== null\">Logout</button>\n   */\n  async logout() {\n    const usuario = await this.authService.getCurrentUser();\n    if (usuario) {\n      this.authService\n        .logout()\n        .then(() => {\n          location.reload();\n        })\n        .catch(this.modalService.error);\n    } else {\n      this.modalService.alert({ txt: 'No hay usuario autenticado' });\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\nexport interface MailSendData {\n  template: string;\n  params: any;\n  to: Array<string>;\n  subject: string;\n  replyTo?: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MailService {\n  constructor(private httpService: HttpService) {}\n\n  async send(data: MailSendData) {\n    await this.httpService.post(\n      'srv/email/send',\n      { body: data },\n      {\n        showIndicator: true,\n      }\n    );\n  }\n}\n","import { Injectable, EventEmitter, Inject, InjectionToken } from '@angular/core';\nimport * as msal from '@azure/msal-browser';\nimport { Subscription } from 'rxjs';\n\nexport interface UserMicrosoft {\n  username: string;\n  homeAccountId: string;\n  name?: string;\n  idToken?: string;\n  groups: string[];\n}\n\nexport interface GetAccountOptionData {\n  forceRefresh?: boolean,\n  refreshTokenExpirationOffsetSeconds?: number,\n}\n\nexport const MS_LOGIN_MODE = new InjectionToken<string>('msLoginMode', {\n  providedIn: 'root',\n  factory: () => 'select_account',//select_account, none\n});\n\n// https://graph.microsoft.com/v1.0/me/photos/648x648/$value\n// https://graph.microsoft.com/v1.0/users/EJDelgado@NogalesPsychological.com/photo/$value\n// https://entra.microsoft.com/\n// https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/initialization.md\n@Injectable({\n  providedIn: 'root',\n})\nexport class MicrosoftAuthService {\n  pca: Promise<msal.IPublicClientApplication>;\n  accessToken: string | null;\n  idToken: string | null;\n  currentUser: UserMicrosoft | null = null;\n  currentAccount: msal.AccountInfo | null = null;\n  evento: EventEmitter<UserMicrosoft | null> = new EventEmitter();\n  pathChangedEvent: EventEmitter<string> = new EventEmitter();\n\n  constructor(\n    @Inject('msTenant') private tenant: string,\n    @Inject('msClientId') private clientId: string,\n    @Inject('msGroupIdMap') private groupIdMap: { [key: string]: string },\n    @Inject('msCacheLocation') private cacheLocation: string,\n    @Inject(MS_LOGIN_MODE) private loginMode: string,\n  ) {\n    this.createMicrosoftAuth();\n  }\n\n  onAuthStateChanged(fun: Function): Subscription {\n    fun(this.currentUser);\n    return this.evento.subscribe((dato) => {\n      fun(dato);\n    });\n  }\n\n  async createMicrosoftAuth() {\n    const msalConfig = {\n      auth: {\n        clientId: this.clientId,\n        authority: `https://login.microsoftonline.com/${this.tenant}/v2.0`,\n        //authority: `https://sts.windows.net/${this.tenant}`,\n        redirectUri: window.location.href.replace(/#.*$/, ''),\n      },\n      cache: {\n        cacheLocation: this.cacheLocation,\n      },\n    };\n    this.pca = msal.createStandardPublicClientApplication(msalConfig);\n    const msalInstance = await this.pca;\n    // Acá se debe dar cuenta si está ya logeado alguien\n    /*\n    const accounts = msalInstance.getAllAccounts();\n    let current = null;\n    if (accounts.length > 0) {\n      current = accounts[0];\n    }\n    */\n    try {\n      this.currentAccount = msalInstance.getActiveAccount();\n      if (this.currentAccount) {\n        await this.getSessionToken();\n      }\n    } catch (error: any) {\n      if (error.name == \"InteractionRequiredAuthError\") {\n        // force logout and reload\n        const promises = [];\n        promises.push(this.logout());\n        promises.push(new Promise<void>((resolve) => {\n          requestAnimationFrame(() => {\n            resolve();\n          })\n        }));\n        Promise.race(promises).finally(() => {\n          location.reload();\n        });\n      } else {\n        throw error; // Unexpected error\n      }\n    }\n  }\n\n  public async assignCurrentUserFromAccount(response: any) {\n    this.idToken = response.idToken;\n    this.accessToken = response.accessToken;\n    const account = response.account;\n    const msalInstance = await this.pca;\n    msalInstance.setActiveAccount(account);\n    const { username, homeAccountId, name, idToken } = account;\n    this.currentUser = {\n      username,\n      homeAccountId,\n      name,\n      idToken,\n      groups: [],\n    };\n    // get groups\n    const groups = response.idTokenClaims?.groups;\n    if (groups instanceof Array) {\n      this.currentUser.groups = groups.map((idGroup: string) => {\n        if (idGroup in this.groupIdMap) {\n          return this.groupIdMap[idGroup];\n        }\n        return idGroup;\n      });\n    }\n    this.restoreHash();\n    this.evento.emit(this.currentUser);\n  }\n\n  async bindEvents() {\n    const msalInstance = await this.pca;\n    const callbackId = msalInstance.addEventCallback(\n      (message: msal.EventMessage) => {\n        const status =\n          msal.EventMessageUtils.getInteractionStatusFromEvent(message);\n        if (status === msal.InteractionStatus.None) {\n          console.log(message.payload);\n        }\n      }\n    );\n    //console.log(callbackId);\n  }\n\n  public async refreshActiveAccount(redirectIdNoUser?: string, minutes?: number): Promise<boolean> {\n    const options: GetAccountOptionData = {\n      forceRefresh: true,\n    };\n    const response = await this.getActiveAccount(options);\n    if (response) {\n      await this.assignCurrentUserFromAccount(response);\n    }\n    if (!this.currentUser) {\n      if (redirectIdNoUser) {\n        window.location.href = redirectIdNoUser;\n      }\n      return false;\n    } else {\n      return true;\n    }\n  }\n\n  public async getActiveAccount(options: GetAccountOptionData | null = null): Promise<msal.AuthenticationResult | null> {\n    let defaults = {\n      forceRefresh: false,\n      refreshTokenExpirationOffsetSeconds: 32400, // 9 hours * 60 minutes * 60 seconds = 7200 seconds\n    };\n    if (typeof options == \"object\") {\n      defaults = Object.assign(defaults, options);\n    }\n    const msalInstance = await this.pca;\n    //const accounts = msalInstance.getAllAccounts();\n    this.currentAccount = msalInstance.getActiveAccount();\n    if (!this.currentAccount) {\n      return null;\n    }\n    const request = {\n      scopes: ['User.Read'],\n      account: this.currentAccount,\n      forceRefresh: defaults.forceRefresh,\n      refreshTokenExpirationOffsetSeconds: defaults.refreshTokenExpirationOffsetSeconds\n    };\n    const response = await msalInstance.acquireTokenSilent(request);\n    return response;\n  }\n\n  public async getSessionToken(type = \"session\"): Promise<string> {\n    const response = await this.getActiveAccount();\n    if (!response) {\n      return '';\n    }\n    this.idToken = response.idToken;\n    this.accessToken = response.accessToken;\n    if (type == \"session\") {\n      return response.accessToken;\n    } else {\n      return response.idToken;\n    }\n  }\n\n  async logoutSimple(): Promise<any> {\n    const msalInstance = await this.pca;\n    await msalInstance.logoutRedirect({\n      onRedirectNavigate: () => {\n        // Prevent the redirect\n        return false;\n      },\n      account: this.currentAccount,\n    });\n    this.currentUser = null;\n    this.evento.emit(null);\n  }\n\n  async logout(): Promise<any> {\n    const msalInstance = await this.pca;\n    await msalInstance.logoutPopup();\n    this.currentUser = null;\n    this.evento.emit(null);\n  }\n\n  hideHash() {\n    const parts = /^[^#]+#(.+)$/.exec(location.href);\n    if (parts) {\n      const hash = parts[1];\n      if (hash.length > 0) {\n        sessionStorage.setItem(\"NOGALES_HASH\", hash);\n        location.hash = '';\n      }\n    }\n  }\n\n  restoreHash() {\n    const hash = sessionStorage.getItem(\"NOGALES_HASH\");\n    if (hash && hash.length > 0) {\n      sessionStorage.setItem(\"NOGALES_HASH\", \"\");\n      location.hash = hash;\n      //this.router.navigate(hash.split(\"/\"));\n      this.pathChangedEvent.emit(hash);\n      return true;\n    }\n    return false;\n  }\n\n  async login(force: boolean = false): Promise<any> {\n    this.hideHash();\n    if (this.currentUser == null || force) {\n      const msalInstance = await this.pca;\n      let loginMode = \"none\";\n      if (this.loginMode && this.loginMode.length > 0) {\n        loginMode = this.loginMode;\n      }\n      const urlParams = new URLSearchParams(window.location.search);\n      const mode = urlParams.get('mode');\n      if (mode && mode.length > 0) {\n        loginMode = mode;\n      }\n      const response = await msalInstance.loginPopup({\n        scopes: ['User.Read.All'],\n        prompt: loginMode,\n      });\n      await this.assignCurrentUserFromAccount(response);\n      return response;\n    } else {\n      return this.currentUser;\n    }\n  }\n\n  getRoomNameFromUser(user: UserMicrosoft): string | null {\n    const { username } = user;\n    const partes = /^([^@]+)@/i.exec(username);\n    if (partes == null) {\n      return null;\n    }\n    return partes[1].toLocaleLowerCase().replace(/[^a-z0-9\\-]/g, '_');\n  }\n\n  getRoomNameFromPath(): string | null {\n    const pathname = location.pathname;\n    const partes = /room\\/([^\\/]+)$/.exec(pathname);\n    if (partes) {\n      return partes[1];\n    }\n    return null;\n  }\n\n  isUserInGroupInternal(user: UserMicrosoft | null, groups: string[], and: boolean) {\n    if (!user) {\n      return false;\n    }\n    const currentGroups = user.groups;\n    const notMeet = groups.filter((group: string) => {\n      if (currentGroups.indexOf(group) >= 0) {\n        return false;\n      }\n      return true;\n    });\n    if (and) {\n      //All must have\n      return notMeet.length == 0;\n    } else {\n      // At least one\n      return notMeet.length < groups.length;\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\nimport { Buffer } from 'buffer';\nimport { encode, decode } from \"@msgpack/msgpack\";\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MinioService {\n  constructor(private httpService: HttpService) {}\n  async getFileBytes(oneFile: File) {\n    const reader = new FileReader();\n    return new Promise((resolve, reject) => {\n      reader.onload = function () {\n        const arrayBuffer: any = this.result;\n        const array = new Uint8Array(arrayBuffer);\n        resolve(array);\n      };\n      reader.readAsArrayBuffer(oneFile);\n    });\n  }\n  async uploadFiles(\n    bucketName: string,\n    folderPath: string,\n    files: Array<File> | FileList\n  ) {\n    const payload: any = [];\n    //Remove / at begining and at end...\n    folderPath = folderPath.replace(/^\\s*[\\\\\\/]/, '').replace(/[\\\\\\/]\\s*$/, '');\n    for (let i = 0; i < files.length; i++) {\n      const oneFile: File = files[i];\n      const myBytes = await this.getFileBytes(oneFile);\n      payload.push({\n        bytes: myBytes,\n        objectPath: `${folderPath}/${oneFile.name}`,\n        metadata: {\n          'Content-Type': oneFile.type,\n        },\n      });\n    }\n    const encoded = encode(payload);\n    const buffer = Buffer.from(encoded);\n    const binaryData = new Blob([buffer]);\n    const response = await this.httpService.post<any>(\n      `srv/minio/${bucketName}/write`,\n      binaryData,\n      {\n        showIndicator: true,\n        contentType: 'application/octet-stream',\n      }\n    );\n    return response;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\nexport interface MongoWriteData {\n  database: string;\n  collection: string;\n  payload: any;\n}\n\nexport interface MongoWhereData {\n  key: string;\n  oper: string;\n  value: any;\n}\n\nexport interface MongoReadData {\n  database: string;\n  where: string;\n}\n\nexport interface MongoUpdateData {\n  database: string;\n  where: string;\n  update: any;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MongoService {\n  constructor(private httpService: HttpService) {}\n  async write(data: MongoWriteData): Promise<any> {\n    const response = await this.httpService.post<MongoWriteData>(\n      `srv/mongo/${data.database}/${data.collection}/write`,\n      data.payload,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error(\"Can't write\");\n    }\n    return response;\n  }\n\n  async read(data: MongoReadData): Promise<any> {\n    const response = await this.httpService.post<MongoReadData>(\n      `srv/mongo/${data.database}/read`,\n      {\n        where: data.where,\n      },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error(\"Can't write\");\n    }\n    return response;\n  }\n\n  async delete(data: MongoReadData): Promise<any> {\n    const response = await this.httpService.post<MongoReadData>(\n      `srv/mongo/${data.database}/delete`,\n      {\n        where: data.where,\n      },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error(\"Can't delete\");\n    }\n    return response;\n  }\n\n  async update(data: MongoUpdateData): Promise<any> {\n    const response = await this.httpService.post<MongoUpdateData>(\n      `srv/mongo/${data.database}/update`,\n      {\n        where: data.where,\n        update: data.update,\n      },\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error(\"Can't update\");\n    }\n    return response;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport * as RecordRTC from 'recordrtc';\nimport moment from 'moment';\nimport { Observable, Subject } from 'rxjs';\n\ninterface RecordedAudioOutput {\n  blob: Blob;\n  title: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MyAudioService {\n  private stream: MediaStream | null = null;\n  private recorder: RecordRTC.StereoAudioRecorder | null = null;\n  private interval: any;\n  private startTime: moment.Moment | null = null;\n  private _recorded = new Subject<RecordedAudioOutput>();\n  private _recordingTime = new Subject<string>();\n  private _recordingFailed = new Subject<string>();\n\n  getRecordedBlob(): Observable<RecordedAudioOutput> {\n    return this._recorded.asObservable();\n  }\n\n  getRecordedTime(): Observable<string> {\n    return this._recordingTime.asObservable();\n  }\n\n  recordingFailed(): Observable<string> {\n    return this._recordingFailed.asObservable();\n  }\n\n  startRecording() {\n    if (this.recorder) {\n      // It means recording is already started or it is already recording something\n      return;\n    }\n\n    this._recordingTime.next('00:00');\n    navigator.mediaDevices\n      .getUserMedia({ audio: true })\n      .then((s: MediaStream) => {\n        this.stream = s;\n        this.record();\n      })\n      .catch((error) => {\n        this._recordingFailed.error(error);\n      });\n  }\n\n  abortRecording() {\n    this.stopMedia();\n  }\n\n  private record() {\n    if (this.stream == null) {\n      return;\n    }\n    const options: any = {\n      type: 'audio',\n      mimeType: 'audio/webm',\n      //desiredSampRate: 22050,\n      //sampleRate: 22050,//22050 44100 to 96000\n      numberOfAudioChannels: 1,\n    };\n    console.log(`Recording with ${JSON.stringify(options)}`);\n    this.recorder = new RecordRTC.StereoAudioRecorder(this.stream, options);\n\n    this.recorder.record();\n    this.startTime = moment();\n    this.interval = setInterval(() => {\n      const currentTime = moment();\n      const diffTime = moment.duration(currentTime.diff(this.startTime));\n      const time =\n        this.toString(diffTime.minutes()) +\n        ':' +\n        this.toString(diffTime.seconds());\n      this._recordingTime.next(time);\n    }, 1000);\n  }\n\n  private toString(value: any) {\n    let val = value;\n    if (!value) val = '00';\n    if (value < 10) val = '0' + value;\n    return val;\n  }\n\n  stopRecording() {\n    if (this.recorder) {\n      this.recorder.stop(\n        (blob) => {\n          if (this.startTime) {\n            const mp3Name = encodeURIComponent(\n              'audio_' + new Date().getTime() + '.mp3'\n            );\n            this.stopMedia();\n            this._recorded.next({ blob: blob, title: mp3Name });\n          }\n        }\n        /*() => {\n          this.stopMedia();\n          this._recordingFailed.next();\n        }*/\n      );\n    }\n  }\n\n  private stopMedia() {\n    if (this.recorder) {\n      this.recorder = null;\n      clearInterval(this.interval);\n      this.startTime = null;\n      if (this.stream) {\n        this.stream.getAudioTracks().forEach((track) => track.stop());\n        this.stream = null;\n      }\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ModalService } from './modal.service';\nimport { HttpService } from './http.service';\n\nexport interface SolvePnPData {\n  v2: Array<Array<number>>;\n  v3: Array<Array<number>>;\n  size: Array<Array<number>>;\n  focal: Array<Array<number>>;\n  aux?: Array<Array<number>>;\n  rvec?: Array<Array<number>>;\n  tvec?: Array<Array<number>>;\n  t?: Array<Array<number>>;\n  points3d?: Array<Array<number>>;\n  points2d?: Array<Array<number>>;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class OpenCVService {\n  constructor(\n    private modalService: ModalService,\n    private httpService: HttpService\n  ) {}\n\n  //await OpenCVService.solvePnP({\"v2\": [[282, 274], [397, 227], [577, 271], [462, 318], [270, 479], [450, 523], [566, 475]], \"v3\": [[0.5, 0.5, -0.5], [0.5, 0.5, 0.5], [-0.5, 0.5, 0.5], [-0.5, 0.5, -0.5], [0.5, -0.5, -0.5], [-0.5, -0.5, -0.5], [-0.5, -0.5, 0.5]]});\n  async solvePnP(payload: SolvePnPData): Promise<SolvePnPData | null> {\n    const options = {\n      showIndicator: true,\n    };\n    const response = await this.httpService.post<SolvePnPData>(\n      `srv/opencv/solvepnp`,\n      { payload },\n      options\n    );\n    return response;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MyDatesFront } from '@ejfdelgado/ejflab-common/src/MyDatesFront';\n\n@Pipe({\n  name: 'fechaCard',\n})\nexport class FechaCardPipe implements PipeTransform {\n  transform(value: number | undefined, ...args: unknown[]): unknown {\n    if (typeof value == 'number') {\n      return MyDatesFront.formatDateCompleto(new Date(value * 1000), args);\n    }\n    return null;\n  }\n}\n","import { Component, HostBinding, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { CardComponentData } from '../../interfaces/login-data.interface';\n\n@Component({\n  selector: 'app-card',\n  templateUrl: './card.component.html',\n  styleUrls: ['./card.component.css'],\n  host: { class: 'box' },\n})\nexport class CardComponent implements OnInit {\n  @HostBinding('class.small') isSmall: boolean = false;\n  @HostBinding('class.big') isBig: boolean = false;\n  @HostBinding('class.big1') isBig1: boolean = false;\n  @HostBinding('class.big2') isBig2: boolean = false;\n  @HostBinding('class.big3') isBig3: boolean = false;\n  @Input() data: CardComponentData;\n  icons: { [key: string]: string } = {\n    game: 'sports_esports',\n  };\n\n  constructor(private readonly router: Router) {}\n  ngOnInit(): void {}\n\n  ngOnChanges(changes: any) {\n    if (changes.data) {\n      const bigColumn = changes.data.currentValue.bigColumn;\n      this.isSmall = false;\n      this.isBig = false;\n      this.isBig1 = false;\n      this.isBig2 = false;\n      this.isBig3 = false;\n      switch (bigColumn) {\n        case 0:\n          this.isSmall = true;\n          break;\n        case 1:\n          this.isBig = true;\n          this.isBig1 = true;\n          break;\n        case 2:\n          this.isBig = true;\n          this.isBig2 = true;\n          break;\n        case 3:\n          this.isBig = true;\n          this.isBig3 = true;\n          break;\n      }\n    }\n  }\n\n  getIcon(icon: string | undefined | null): string {\n    if (typeof icon == 'string') {\n      return this.icons[icon];\n    }\n    return 'sports_esports';\n  }\n\n  navegar(data: CardComponentData) {\n    if (typeof data.action == 'function') {\n      data.action(data);\n    } else if (typeof data.href == 'string') {\n      this.router.navigate([data.href]);\n    }\n  }\n}\n","<div class=\"box\" [ngClass]=\"{'small': isSmall}\">\n    <div class=\"box_image\" (click)=\"navegar(data)\" [ngStyle]=\"{'background' : 'url('+data.imageUrl+')'}\"></div>\n    <div class=\"box_texto\">\n        <div class=\"box_icon\" *ngIf=\"data.icon\">\n            <mat-icon>{{getIcon(data.icon)}}</mat-icon>\n        </div>\n        <div class=\"profile_icon\" *ngIf=\"data.profile\" [ngStyle]=\"{'background' : 'url('+data.profile+')'}\">\n        </div>\n        <div class=\"box_titulo\">\n            <div class=\"mi_menu\" *ngIf=\"data.menu\">\n                <div class=\"menu_icon_parent\" [matMenuTriggerFor]=\"mainMenu\" aria-label=\"Menú\">\n                    <div class=\"menu_icon\">\n                        <mat-icon>menu</mat-icon>\n                    </div>\n                </div>\n                <mat-menu #mainMenu=\"matMenu\">\n                    <ng-container *ngFor=\"let oneItem of data.menu; index as i;\">\n                        <button mat-menu-item *ngIf=\"!oneItem.onlyOwner || data.owner\" (click)=\"oneItem.action(data);\">\n                            <mat-icon>{{ oneItem.icono }}</mat-icon>\n                            <span>{{ oneItem.texto }}</span>\n                        </button>\n                    </ng-container>\n                </mat-menu>\n            </div>\n            <div class=\"solo_texto\" (click)=\"navegar(data)\">\n                <div *ngIf=\"data.act\" class=\"solo_fecha\">{{ data.act | fechaCard }}</div>\n                <div>{{ data.title }}</div>\n            </div>\n        </div>\n    </div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport {\n  PageIteratorData,\n  PageService,\n} from '../../services/page.service';\nimport { MyRoutes } from '@ejfdelgado/ejflab-common/src/MyRoutes';\nimport { AuthService } from '../../services/auth.service';\nimport { User } from '@angular/fire/auth';\nimport { ModalService } from '../../services/modal.service';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport {\n  CardComponentData,\n  PageData,\n} from '../../interfaces/login-data.interface';\n\n@Component({\n  selector: 'app-multiplepages',\n  templateUrl: './multiplepages.component.html',\n  styleUrls: ['./multiplepages.component.css'],\n})\nexport class MultiplepagesComponent implements OnInit {\n  form: FormGroup;\n  cardInicial: CardComponentData;\n  paginas: Array<CardComponentData> = [];\n  iterador: PageIteratorData | null = null;\n  onlyMyPages: boolean = true;\n  AHORA = new Date().getTime();\n  constructor(\n    private fb: FormBuilder,\n    private pageSrv: PageService,\n    private authSrv: AuthService,\n    private modalSrv: ModalService,\n    private clipboard: Clipboard\n  ) {\n    const crearNuevaPaginaThis = this.crearNuevaPagina.bind(this);\n    this.cardInicial = {\n      title: 'Crear nueva',\n      imageUrl: '/assets/img/add.jpg',\n      action: crearNuevaPaginaThis,\n    };\n  }\n\n  ngOnInit(): void {\n    this.form = this.fb.group({\n      busqueda: [''],\n    });\n    this.buscar();\n    this.authSrv.getLoginEvent().subscribe((user: User | null) => {\n      this.addOwnership(user);\n    });\n  }\n\n  get busqueda() {\n    return this.form.get('busqueda');\n  }\n\n  abrirEnPestaniaNueva(data: CardComponentData) {\n    const URL = `${location.origin}${data.href}`;\n    window.open(URL, '_blank');\n  }\n\n  copiarUrlPortapapeles(data: CardComponentData) {\n    const URL = `${location.origin}${data.href}`;\n    this.clipboard.copy(URL);\n    this.modalSrv.alert({ title: 'Ok!', txt: 'Enlace copiado' });\n  }\n\n  async crearNuevaPagina() {\n    const dato = await this.pageSrv.createNew();\n    const partes = MyRoutes.splitPageData(location.pathname);\n    const URL = `${location.origin}${partes.pageType}/${dato.id}`;\n    window.open(URL, '_self');\n  }\n\n  setOnlyMyPagesOn() {\n    if (!this.onlyMyPages) {\n      this.onlyMyPages = true;\n      this.buscar();\n    }\n  }\n  setOnlyMyPagesOff() {\n    if (this.onlyMyPages) {\n      this.onlyMyPages = false;\n      this.buscar();\n    }\n  }\n\n  async actionMenuBorrar(item: CardComponentData) {\n    const response = await this.modalSrv.confirm({\n      title: '¿Está seguro?',\n      txt: 'Esta acción no se puede deshacer.',\n    });\n    if (!response) {\n      return;\n    }\n    await this.pageSrv.delete(item);\n    const indice = this.paginas.indexOf(item);\n    if (indice >= 0) {\n      this.paginas.splice(indice, 1);\n      const currentPageId = document\n        .getElementById('meta_page_id')\n        ?.getAttribute('content');\n      if (currentPageId == item.id) {\n        // Force reload\n        location.reload();\n      }\n    }\n  }\n\n  addOwnership(user: User | null) {\n    const idUserActual = user?.email;\n    for (let i = 0; i < this.paginas.length; i++) {\n      const actual = this.paginas[i];\n      actual.owner = idUserActual == actual.usr;\n    }\n  }\n\n  async buscar(iniciar = true) {\n    const promesaUser = this.authSrv.getCurrentUser();\n    const busqueda = this.form.value.busqueda;\n    if (iniciar || this.iterador == null) {\n      if (this.onlyMyPages) {\n        this.iterador = this.pageSrv.getReaderMines(busqueda);\n      } else {\n        this.iterador = this.pageSrv.getReaderAll(busqueda);\n      }\n    }\n    const datos: Array<PageData> = await this.iterador.next();\n    const fetch: Array<CardComponentData> = [];\n    const partes = MyRoutes.splitPageData(location.pathname);\n    for (let i = 0; i < datos.length; i++) {\n      const dato = datos[i];\n\n      const imageRef =\n        MyConstants.BUCKET.URL_BASE +\n        '/' +\n        MyConstants.BUCKET.PUBLIC +\n        '/' +\n        MyConstants.USER.DEFAULT_FOLDER +\n        '/' +\n        dato.usr +\n        MyConstants.USER.DEFAULT_FILE +\n        '?t=' +\n        this.AHORA;\n\n      const nuevo: CardComponentData = {\n        imageUrl: dato.img,\n        title: dato.tit,\n        href: `${partes.pageType}/${dato.id}`,\n        profile: imageRef,\n        act: dato.act,\n        usr: dato.usr,\n        id: dato.id,\n        owner: false,\n      };\n      fetch.push(nuevo);\n    }\n    const actionMenuBorrarThis = this.actionMenuBorrar.bind(this);\n    const copiarUrlPortapapelesThis = this.copiarUrlPortapapeles.bind(this);\n\n    if (iniciar) {\n      this.paginas.splice(0, this.paginas.length);\n    }\n    for (let i = 0; i < fetch.length; i++) {\n      const actual = fetch[i];\n      actual.action = this.abrirEnPestaniaNueva;\n      actual.bigColumn = 0;\n      // iconos buscar en https://fonts.google.com/icons\n      actual.menu = [\n        {\n          action: this.abrirEnPestaniaNueva,\n          texto: 'Abrir',\n          icono: 'open_in_new',\n          onlyOwner: false,\n        },\n        {\n          action: copiarUrlPortapapelesThis,\n          texto: 'Copiar enlace',\n          icono: 'share',\n          onlyOwner: false,\n        },\n        {\n          action: actionMenuBorrarThis,\n          texto: 'Borrar',\n          icono: 'close',\n          onlyOwner: true,\n        },\n      ];\n      this.paginas.push(actual);\n    }\n    const user = await promesaUser;\n    this.addOwnership(user);\n  }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">Buscar páginas</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<mat-dialog-content class=\"mat-typography con_form\">\n    <p class=\"texto_descripcion\">Encuentra aquí las páginas creadas.</p>\n    <form class=\"form-container layout_columna\" [formGroup]=\"form\" (ngSubmit)=\"buscar()\">\n        <mat-form-field class=\"form-control\">\n            <mat-label>Búsqueda</mat-label>\n            <input matInput formControlName=\"busqueda\" type=\"text\" />\n            <button type=\"button\" matSuffix mat-icon-button aria-label=\"Buscar\" (click)=\"buscar()\">\n                <mat-icon>search</mat-icon>\n            </button>\n        </mat-form-field>\n        <p class=\"controles_textos\">\n            <span (click)=\"setOnlyMyPagesOn()\" [ngClass]=\"{'active': onlyMyPages, 'inactive': !onlyMyPages}\">Solo\n                mias</span>\n            <span (click)=\"setOnlyMyPagesOff()\"\n                [ngClass]=\"{'active': !onlyMyPages, 'inactive': onlyMyPages}\">Todas</span>\n        </p>\n    </form>\n    <div class=\"contenedor\">\n        <div class=\"paginas_scroll\">\n            <div class=\"wrapper\">\n                <app-card [data]=\"cardInicial\"></app-card>\n                <app-card *ngFor=\"let oneCard of paginas; index as i;\" [data]=\"oneCard\"\n                    class=\"multiplepages\"></app-card>\n                <div class=\"contenedor_ver_mas\" (click)=\"buscar(false)\">\n                    <span>Ver más</span>\n                </div>\n            </div>\n        </div>\n    </div>\n</mat-dialog-content>","import { HttpClient } from '@angular/common/http';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport {\n  BehaviorSubject,\n  map,\n  Observable,\n  of,\n  Subscription,\n  switchMap,\n} from 'rxjs';\nimport { FileBase64Data } from '../base/base.component';\nimport { FileResponseData, FileService } from '../../services/file.service';\nimport { FileRequestData, FileSaveData } from '../../services/fileInterface';\nimport { ModalService } from '../../services/modal.service';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\n\nexport interface ImagepickerOptionsData {\n  isRounded?: boolean;\n  isEditable?: boolean;\n  useBackground?: boolean;\n  defaultImage?: string;\n  useRoot?: string;\n  autosave?: boolean;\n  askType?: string; //fileimage fileimage-photo photo\n  defaultFileName?: string | null;\n  imageStyle?: { [key: string]: string };\n}\n\n@Component({\n  selector: 'app-imagepicker',\n  templateUrl: './imagepicker.component.html',\n  styleUrls: ['./imagepicker.component.css'],\n})\nexport class ImagepickerComponent implements OnInit, OnDestroy, OnChanges {\n  @Input() options: ImagepickerOptionsData;\n  @Input() url: string | null;\n  @Output() urlChange = new EventEmitter<string | null>();\n  @Input() fileName: string;\n  @Output() eventSave = new EventEmitter<FileBase64Data>();\n  private src$: BehaviorSubject<string | null> | null = null;\n  background: SafeUrl | null = null;\n  private backgroundSubscription: Subscription | null = null;\n  dataUrl$: Observable<SafeUrl> | null = null;\n  constructor(\n    private httpClient: HttpClient,\n    private domSanitizer: DomSanitizer,\n    public fileService: FileService,\n    public modalService: ModalService\n  ) { }\n\n  ngOnInit(): void { }\n\n  ngOnDestroy(): void {\n    if (this.backgroundSubscription != null) {\n      this.backgroundSubscription.unsubscribe();\n    }\n  }\n\n  ngOnChanges(changes: any) {\n    if (changes.url) {\n      if (typeof changes.url.currentValue == 'string') {\n        if (this.src$ == null) {\n          this.src$ = new BehaviorSubject<string | null>(this.url);\n          this.dataUrl$ = this.src$.pipe(\n            switchMap((url) => this.loadImage(url))\n          );\n          this.backgroundSubscription = this.dataUrl$.subscribe((url) => {\n            if (this.options.useBackground) {\n              this.background = url;\n            } else {\n              this.background = null;\n            }\n          });\n        }\n      }\n      if (this.src$ != null) {\n        this.src$.next(changes.url.currentValue);\n      }\n    }\n  }\n\n  public async saveFile(options: FileSaveData, suffix: string = '') {\n    try {\n      const response = await this.fileService.save(options);\n      response.key = response.key + '?t=' + new Date().getTime() + suffix;\n      return response;\n    } catch (err: any) {\n      this.modalService.error(err);\n      throw err;\n    }\n  }\n\n  async processFile(responseData: FileResponseData) {\n    if (responseData.base64 instanceof Array) {\n      // pass\n    } else {\n      // Pese a que responseData tiene fileName, no se usa, sino el local\n      if (this.options.autosave === true) {\n        const response = await this.saveFile({\n          base64: responseData.base64,\n          fileName: this.fileName,\n        });\n        this.url = response.key;\n        this.urlChange.emit(this.url);\n      } else {\n        this.eventSave.emit({\n          base64: responseData.base64,\n          name: this.fileName,\n          type: 'image',\n        });\n      }\n      if (this.src$ != null) {\n        this.src$.next(responseData.base64);\n      }\n    }\n  }\n\n  askForImage() {\n    // fileimage fileimage-photo photo\n    const options: FileRequestData = {\n      type: typeof this.options.askType == \"string\" ? this.options.askType : 'fileimage-photo',\n      defaultFileName: this.options.defaultFileName,\n    };\n    const processFileThis = this.processFile.bind(this);\n    this.fileService.sendRequest(options, processFileThis);\n  }\n\n  private loadImage(url: string | null): Observable<SafeUrl> {\n    if (url == null) {\n      if (typeof this.options.defaultImage == 'string') {\n        return of(this.options.defaultImage);\n      } else {\n        return of(MyConstants.PAGE.NO_IMAGE);\n      }\n    } else {\n      if (\n        /^https?:\\/\\/storage\\.googleapis\\.com/i.exec(url) != null ||\n        /^data:image/i.exec(url) != null\n      ) {\n        return of(url);\n      } else {\n        let theUrl = url;\n        if (typeof this.options.useRoot == 'string') {\n          theUrl = this.options.useRoot + url.replace(/^\\/+/, '');\n        }\n        return (\n          this.httpClient\n            // load the image as a blob\n            .get(theUrl, { responseType: 'blob' })\n            // create an object url of that blob that we can use in the src attribute\n            .pipe(\n              map((e) => {\n                return this.domSanitizer.bypassSecurityTrustUrl(\n                  URL.createObjectURL(e)\n                );\n              })\n            )\n        );\n      }\n    }\n  }\n\n  getImageStyle() {\n    if (this.options.imageStyle) {\n      return this.options.imageStyle;\n    } else {\n      return {};\n    }\n  }\n}\n","<div class=\"myImage\" [ngClass]=\"{'rounded': options.isRounded}\" (click)=\"options.isEditable ? askForImage() : ''\">\n    <div *ngIf=\"background != null\" class=\"blur\" [ngStyle]=\"{'background' : 'url('+background+')'}\"></div>\n    <img *ngIf=\"dataUrl$ != null\" [src]=\"dataUrl$|async\" [ngStyle]=\"getImageStyle()\" />\n</div>","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { ImagepickerOptionsData } from '../imagepicker/imagepicker.component';\nimport { BackendPageService } from '../../services/backendPage.service';\nimport { ModalService } from '../../services/modal.service';\nimport { PageService } from '../../services/page.service';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { FileBase64Data } from '../base/base.component';\nimport { PageData } from '../../interfaces/login-data.interface';\n\n@Component({\n  selector: 'app-pagepopup',\n  templateUrl: './pagepopup.component.html',\n  styleUrls: ['./pagepopup.component.css'],\n})\nexport class PagepopupComponent implements OnInit {\n  form: FormGroup;\n  pageData: PageData;\n  changedImageValue: string;\n  ahora: number;\n  imageOptions: ImagepickerOptionsData = {\n    isEditable: true,\n    isRounded: false,\n    useBackground: true,\n    defaultImage: MyConstants.PAGE.DEFAULT_IMAGE,\n  };\n  constructor(\n    private dialogRef: MatDialogRef<PagepopupComponent>,\n    private fb: FormBuilder,\n    private backendPageSrv: BackendPageService,\n    private pageSrv: PageService,\n    private modalSrv: ModalService\n  ) {\n    this.ahora = new Date().getTime();\n  }\n\n  ngOnInit(): void {\n    this.form = this.fb.group({\n      title: ['', [Validators.required, Validators.maxLength(64)]],\n      description: ['', [Validators.maxLength(512)]],\n    });\n    this.backendPageSrv\n      .getCurrentPage()\n      .then((data: PageData | null) => {\n        if (!data) {\n          this.dialogRef.close(false);\n          return;\n        }\n        this.pageData = data;\n        this.form.setValue({\n          title: data.tit,\n          description: data.desc,\n        });\n      })\n      .catch((err) => {});\n  }\n\n  get title() {\n    return this.form.get('title');\n  }\n\n  get description() {\n    return this.form.get('description');\n  }\n\n  changedImage(imagenBase64: FileBase64Data) {\n    if (imagenBase64.base64) {\n      this.changedImageValue = imagenBase64.base64;\n    }\n  }\n\n  getPageImage(): string | null {\n    if (\n      this.pageData &&\n      typeof this.pageData.img == 'string' &&\n      this.pageData.img.length > 0\n    ) {\n      return this.pageData.img + `?t=${this.ahora}`;\n    }\n    return null;\n  }\n\n  getMaxLengthMessage(label: string, error: any | null): string {\n    if (error && error.maxlength) {\n      return `Máximo ${error.maxlength.requiredLength} letras. Actualmente hay ${error.maxlength.actualLength}.`;\n    }\n    return '';\n  }\n\n  cancelar() {\n    this.dialogRef.close(false);\n  }\n\n  async guardar() {\n    const valores = {\n      tit: this.form.value.title,\n      desc: this.form.value.description,\n      image: this.changedImageValue,\n    };\n    if (this.pageData.id) {\n      try {\n        await this.backendPageSrv.savePage(this.pageData.id, valores);\n        await this.modalSrv.alert({\n          title: 'Listo',\n          txt: 'Guardado correctamente',\n        });\n        this.dialogRef.close(false);\n      } catch (err: any) {\n        this.modalSrv.alert({\n          title: 'Ups!',\n          txt: err.message,\n        });\n      }\n    }\n  }\n\n  async rotateKey1() {\n    const response = await this.modalSrv.confirm({\n      title: '¿Desea rotar la llave principal?',\n      txt: 'Esta acción no se puede deshacer.',\n    });\n    if (!response) {\n      return;\n    }\n    const pageData: any = this.pageData;\n    await this.pageSrv.rotate1(pageData);\n    await this.modalSrv.alert({\n      title: 'Listo',\n      txt: 'Generación exitosa',\n    });\n  }\n\n  async rotateKey2() {\n    const response = await this.modalSrv.confirm({\n      title: '¿Desea rotar el par de llaves pública/privada?',\n      txt: 'Esta acción no se puede deshacer.',\n    });\n    if (!response) {\n      return;\n    }\n    const pageData: any = this.pageData;\n    await this.pageSrv.rotate2(pageData);\n    await this.modalSrv.alert({\n      title: 'Listo',\n      txt: 'Generación exitosa',\n    });\n  }\n\n  async rotateKey3() {\n    const response = await this.modalSrv.confirm({\n      title: '¿Desea rotar el par de llaves pública/privada inverso?',\n      txt: 'Esta acción no se puede deshacer.',\n    });\n    if (!response) {\n      return;\n    }\n    const pageData: any = this.pageData;\n    await this.pageSrv.rotate3(pageData);\n    await this.modalSrv.alert({\n      title: 'Listo',\n      txt: 'Generación exitosa',\n    });\n  }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">Editar página</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<mat-dialog-content class=\"mat-typography con_form\">\n    <p class=\"texto_descripcion\">Personaliza esta aplicación web para cuando regreses.</p>\n    <form class=\"form-container layout_columna\" [formGroup]=\"form\" (ngSubmit)=\"guardar()\">\n        <mat-form-field class=\"form-control\">\n            <mat-label>Título</mat-label>\n            <input matInput formControlName=\"title\" type=\"text\" required />\n            <mat-error *ngIf=\"title?.hasError('required')\">\n                El título es requerido.\n            </mat-error>\n            <mat-error *ngIf=\"title?.hasError('maxlength')\">\n                {{ getMaxLengthMessage(\"\", title?.errors) }}\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field class=\"example-full-width\">\n            <mat-label>Descripción</mat-label>\n            <textarea matInput formControlName=\"description\" placeholder=\"Recuerdame...\" cdkTextareaAutosize\n                #autosize=\"cdkTextareaAutosize\" cdkAutosizeMinRows=\"3\" cdkAutosizeMaxRows=\"8\"></textarea>\n            <mat-error *ngIf=\"description?.hasError('maxlength')\">\n                {{ getMaxLengthMessage(\"\", description?.errors) }}\n            </mat-error>\n        </mat-form-field>\n        <app-imagepicker [options]=\"imageOptions\" (eventSave)=\"changedImage($event)\" [url]=\"getPageImage()\">\n        </app-imagepicker>\n    </form>\n</mat-dialog-content>\n<div mat-dialog-actions class=\"bottom_buttons\">\n    <button class=\"btn btn-primary\" (click)=\"rotateKey1()\">\n        <mat-icon>password</mat-icon>\n    </button>\n    <button class=\"btn btn-primary\" (click)=\"rotateKey2()\">\n        <mat-icon>key</mat-icon> #1\n    </button>\n    <button class=\"btn btn-primary\" (click)=\"rotateKey3()\">\n        <mat-icon>key</mat-icon> #2\n    </button>\n    <button class=\"btn btn-secondary\" (click)=\"cancelar()\">\n        <mat-icon>close</mat-icon>\n        Cancelar\n    </button>\n    <button class=\"btn btn-primary\" (click)=\"guardar()\">\n        <mat-icon>check</mat-icon>\n        Guardar\n    </button>\n</div>","import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MultiplepagesComponent } from '../components/multiplepages/multiplepages.component';\nimport { PagepopupComponent } from '../components/pagepopup/pagepopup.component';\nimport {\n  CardComponentData,\n  PageData,\n} from '../interfaces/login-data.interface';\nimport { AuthService } from './auth.service';\nimport { HttpService } from './http.service';\nimport { ModalService } from './modal.service';\n\nexport interface PageIteratorData {\n  next: Function;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PageService {\n  constructor(\n    private authService: AuthService,\n    private modalService: ModalService,\n    private dialog: MatDialog,\n    private httpService: HttpService\n  ) {}\n\n  async edit() {\n    const usuario = await this.authService.getCurrentUser();\n    if (usuario) {\n      this.dialog.open(PagepopupComponent);\n    } else {\n      this.modalService.alert({ txt: 'No hay usuario autenticado' });\n    }\n  }\n\n  getReaderMines(q: string): PageIteratorData {\n    return this.getReader(q, 'srv/pg/mines');\n  }\n  getReaderAll(q: string): PageIteratorData {\n    return this.getReader(q, 'srv/pg/all');\n  }\n  async createNew(): Promise<PageData> {\n    const payload = {};\n    const response = await this.httpService.post<PageData>(\n      `srv/pg/new`,\n      payload,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw Error('No se pudo crear la página');\n    }\n    return response;\n  }\n  async deleteAllTuples(page: CardComponentData): Promise<boolean> {\n    let response = { count: 0 };\n    do {\n      response = await this.httpService.delete<any>(`srv/${page.id}/tup`, {\n        showIndicator: true,\n      });\n    } while (typeof response.count == 'number' && response.count > 0);\n    return true;\n  }\n  async rotate1(page: CardComponentData): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/${page.id}/rotate1`,\n      {\n        showIndicator: true,\n      }\n    );\n    return true;\n  }\n  async rotate2(page: CardComponentData): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/${page.id}/rotate2`,\n      {\n        showIndicator: true,\n      }\n    );\n    return true;\n  }\n  async rotate3(page: CardComponentData): Promise<any> {\n    const response = await this.httpService.post<any>(\n      `srv/${page.id}/rotate3`,\n      {\n        showIndicator: true,\n      }\n    );\n    return true;\n  }\n  async delete(page: CardComponentData): Promise<boolean> {\n    const response = await this.httpService.delete<null>(`srv/${page.id}/pg`, {\n      showIndicator: true,\n    });\n    return true;\n  }\n  getReader(q: string, prefix: string): PageIteratorData {\n    let offset = 0;\n    const max = 30;\n    const partes = /^(\\/[^/]+)/.exec(location.pathname);\n    if (partes == null) {\n      throw Error('El path está mal');\n    }\n    const path = partes[0];\n    return {\n      next: async (): Promise<Array<PageData>> => {\n        const response = await this.httpService.get<Array<PageData>>(\n          `${prefix}?offset=${offset}&max=${max}&q=${encodeURIComponent(\n            q\n          )}&path=${encodeURIComponent(path)}`,\n          { showIndicator: true }\n        );\n        if (response != null) {\n          offset += response.length;\n          return response;\n        }\n        return [];\n      },\n    };\n  }\n\n  async multiple() {\n    const usuario = await this.authService.getCurrentUser();\n    if (usuario) {\n      this.dialog.open(MultiplepagesComponent, {\n        panelClass: 'search-pages-dialog-container',\n      });\n    } else {\n      this.modalService.alert({ txt: 'No hay usuario autenticado' });\n    }\n  }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport {\n  MatDialog,\n  MatDialogRef,\n  MAT_DIALOG_DATA,\n} from '@angular/material/dialog';\nimport { ModalService } from '../../services/modal.service';\nimport { Inject } from '@angular/core';\nimport { PayuService, SecretsWriteData } from '../../services/payu.service';\n\nexport interface PayuConfigData {\n  payu_api_key: string;\n  payu_api_login: string;\n  payu_pub_key: string;\n  payu_merchant_id: string;\n  payu_account_id: string;\n}\n\n@Component({\n  selector: 'app-payupopup',\n  templateUrl: './payupopup.component.html',\n  styleUrls: ['./payupopup.component.css'],\n})\nexport class PayupopupComponent implements OnInit {\n  form: FormGroup;\n\n  constructor(\n    private dialogRef: MatDialogRef<PayupopupComponent>,\n    private fb: FormBuilder,\n    private modalSrv: ModalService,\n    private payuSrv: PayuService,\n    @Inject(MAT_DIALOG_DATA) public data: PayuConfigData\n  ) {}\n\n  ngOnInit(): void {\n    this.form = this.fb.group({\n      payu_api_key: [this.data.payu_api_key, [Validators.required]],\n      payu_api_login: [this.data.payu_api_login, [Validators.required]],\n      payu_pub_key: [this.data.payu_pub_key, [Validators.required]],\n      payu_account_id: [this.data.payu_account_id, [Validators.required]],\n      payu_merchant_id: [this.data.payu_merchant_id, [Validators.required]],\n    });\n  }\n\n  cancelar() {\n    this.dialogRef.close();\n  }\n\n  get payu_api_key() {\n    return this.form.get('payu_api_key');\n  }\n\n  get payu_api_login() {\n    return this.form.get('payu_api_login');\n  }\n\n  get payu_pub_key() {\n    return this.form.get('payu_pub_key');\n  }\n\n  get payu_account_id() {\n    return this.form.get('payu_account_id');\n  }\n\n  get payu_merchant_id() {\n    return this.form.get('payu_merchant_id');\n  }\n\n  async guardar() {\n    const valores: SecretsWriteData = {\n      payu_api_key: this.form.value.payu_api_key,\n      payu_api_login: this.form.value.payu_api_login,\n      payu_pub_key: this.form.value.payu_pub_key,\n      payu_account_id: this.form.value.payu_account_id,\n      payu_merchant_id: this.form.value.payu_merchant_id,\n    };\n    if (this.form.valid) {\n      // Se envia a guardar al servicio\n      await this.payuSrv.saveSecrets(valores);\n      this.dialogRef.close(valores);\n    } else {\n      this.modalSrv.alert({\n        title: 'Ups...',\n        txt: 'Verifica tus datos antes de continuar.',\n      });\n    }\n  }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">Configurar PayU</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<mat-dialog-content class=\"mat-typography con_form\">\n    <p class=\"texto_descripcion\">Tu información será cifrada en reposo y en tránsito.</p>\n    <form class=\"form-container layout_columna\" [formGroup]=\"form\" (ngSubmit)=\"guardar()\">\n        <mat-form-field class=\"form-control\">\n            <mat-label>API KEY</mat-label>\n            <input matInput formControlName=\"payu_api_key\" type=\"text\" required />\n            <mat-error *ngIf=\"payu_api_key?.hasError('required')\">\n                El API KEY es requerido.\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field class=\"form-control\">\n            <mat-label>API LOGIN</mat-label>\n            <input matInput formControlName=\"payu_api_login\" type=\"text\" required />\n            <mat-error *ngIf=\"payu_api_login?.hasError('required')\">\n                El API LOGIN es requerido.\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field class=\"form-control\">\n            <mat-label>Llave pública</mat-label>\n            <input matInput formControlName=\"payu_pub_key\" type=\"text\" required />\n            <mat-error *ngIf=\"payu_pub_key?.hasError('required')\">\n                El Llave pública es requerido.\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field class=\"form-control\">\n            <mat-label>Account Id</mat-label>\n            <input matInput formControlName=\"payu_account_id\" type=\"text\" required />\n            <mat-error *ngIf=\"payu_account_id?.hasError('required')\">\n                El Account Id es requerido.\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field class=\"form-control\">\n            <mat-label>Merchant Id</mat-label>\n            <input matInput formControlName=\"payu_merchant_id\" type=\"text\" required />\n            <mat-error *ngIf=\"payu_merchant_id?.hasError('required')\">\n                El Merchant Id es requerido.\n            </mat-error>\n        </mat-form-field>\n    </form>\n</mat-dialog-content>\n<div mat-dialog-actions class=\"bottom_buttons\">\n    <button class=\"btn btn-secondary\" (click)=\"cancelar()\" type=\"button\">\n        Cancelar\n    </button>\n    <button class=\"btn btn-primary\" (click)=\"guardar()\">\n        Guardar\n    </button>\n</div>","import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { PayupopupComponent } from '../components/payupopup/payupopup.component';\nimport { AuthService } from './auth.service';\nimport { ModalService } from './modal.service';\nimport { HttpService } from './http.service';\n\nexport interface SecretsReadData {\n  key: Array<string>;\n}\n\nexport interface SecretsWriteData {\n  [key: string]: string | null;\n}\n\nexport interface SecretListData {\n  key: string;\n  val: string | null;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PayuService {\n  constructor(\n    private authService: AuthService,\n    private modalService: ModalService,\n    public dialog: MatDialog,\n    private httpService: HttpService\n  ) {}\n\n  async loadSecrets(payload: SecretsReadData): Promise<SecretsWriteData> {\n    const response = await this.httpService.post<Array<SecretListData>>(\n      `srv/sec/r`,\n      payload,\n      {\n        showIndicator: true,\n      }\n    );\n    if (response == null) {\n      throw new Error('No se puede realizar la consulta.');\n    }\n    const ans: SecretsWriteData = {};\n    for (let i = 0; i < response.length; i++) {\n      const actual = response[i];\n      if (actual) {\n        ans[actual.key] = actual.val;\n      }\n    }\n    return ans;\n  }\n\n  async saveSecrets(payload: SecretsWriteData) {\n    const response = await this.httpService.post<any>(\n      `srv/sec/w`,\n      { map: payload },\n      {\n        showIndicator: true,\n      }\n    );\n    //console.log(response);\n  }\n\n  async getPubKey(payload: any) {\n    const response = await this.httpService.post<any>(`srv/sec/pub`, payload, {\n      showIndicator: true,\n    });\n    //console.log(response);\n  }\n\n  async openConfiguration() {\n    try {\n      const oldValues = await this.loadSecrets({\n        key: [\n          'payu_api_key',\n          'payu_api_login',\n          'payu_pub_key',\n          'payu_account_id',\n          'payu_merchant_id',\n        ],\n      });\n      const dialogRef = this.dialog.open(PayupopupComponent, {\n        data: oldValues,\n      });\n      return new Promise((resolve) => {\n        dialogRef.afterClosed().subscribe((result) => {\n          resolve(result);\n        });\n      });\n    } catch (err: any) {\n      this.modalService.alert({ txt: err.message });\n      return null;\n    }\n  }\n}\n","export class Picture360Service {\n  static facePositions = {\n    pz: { x: 1, y: 1 },\n    nz: { x: 3, y: 1 },\n    px: { x: 2, y: 1 },\n    nx: { x: 0, y: 1 },\n    py: { x: 1, y: 0 },\n    ny: { x: 1, y: 2 },\n  };\n  static mimeType: { [key: string]: string } = {\n    jpg: 'image/jpeg',\n    png: 'image/png',\n  };\n  static async load360ImageService(globalOptions = {}) {\n    const settings = Object.assign(\n      {\n        cubeRotation: 180,\n        interpolation: 'lanczos',\n        format: 'jpg',\n        size: 200,\n        path: '/360cube',\n      },\n      globalOptions\n    );\n\n    const canvas = document.createElement('canvas');\n    canvas.classList.add('invisible');\n    const ctx = canvas.getContext('2d');\n\n    document.body.appendChild(canvas);\n\n    async function loadImageExternal(file: any) {\n      const promesa = new Promise((resolve, reject) => {\n        if (!file || !ctx) {\n          resolve(null);\n          return;\n        }\n        const img = new Image();\n        img.addEventListener('load', async () => {\n          const { width, height } = img;\n          canvas.width = width;\n          canvas.height = height;\n          ctx.drawImage(img, 0, 0);\n          const data = ctx.getImageData(0, 0, width, height);\n\n          const respuesta = await processImage(data);\n          resolve(respuesta);\n        });\n        img.src = URL.createObjectURL(file);\n      });\n      promesa.then(() => {\n        document.body.removeChild(canvas);\n      });\n      return promesa;\n    }\n\n    async function processImage(data: ImageData) {\n      const promesas = [];\n      for (let [faceName, position] of Object.entries(\n        Picture360Service.facePositions\n      )) {\n        promesas.push(renderFace(data, faceName, position));\n      }\n      const total: any = {};\n      const resultado = await Promise.all(promesas);\n      for (let i = 0; i < resultado.length; i++) {\n        const unResultado: any = resultado[i];\n        total[unResultado.k] = unResultado.v;\n      }\n      return total;\n    }\n\n    async function renderFace(data: ImageData, faceName: any, position: any) {\n      return new Promise((resolve1, reject1) => {\n        const options = {\n          data: data,\n          face: faceName,\n          rotation: (Math.PI * settings.cubeRotation) / 180,\n          interpolation: settings.interpolation,\n        };\n\n        const worker = new Worker('/assets/workers/convert.js');\n\n        const loadImage = async (algo: any) => {\n          if (!ctx) {\n            resolve1(null);\n            return;\n          }\n          console.log(algo);\n          //{ data: imageData }\n          const imageData: any = {};\n          canvas.width = imageData.width;\n          canvas.height = imageData.height;\n          ctx.putImageData(imageData, 0, 0);\n\n          const blob = await new Promise((resolve, reject) => {\n            canvas.toBlob(\n              resolve,\n              Picture360Service.mimeType[settings.format],\n              0.95\n            );\n          });\n\n          /*\n          const url = await ModuloArchivos.uploadFile({\n            data: blob,\n            own: false,\n            path: `${settings.path}/${faceName}.${settings.format}`,\n          });\n          const ans: any = {};\n          ans.k = faceName;\n          ans.v = url.pub;\n          resolve1(ans);\n          */\n        };\n\n        worker.onmessage = loadImage;\n        worker.postMessage(\n          Object.assign({}, options, {\n            maxWidth: settings.size,\n            interpolation: 'linear',\n          })\n        );\n      });\n    }\n\n    //const file = await ModuloArchivos.askForFile();\n    //return await loadImageExternal(file);\n  }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MyTuples } from '@ejfdelgado/ejflab-common/src/MyTuples';\nimport { AuthService } from './auth.service';\nimport { HttpService } from './http.service';\nimport { ModalService } from './modal.service';\nimport {\n  Firestore,\n  collectionData,\n  collection,\n  query,\n  where,\n  DocumentData,\n} from '@angular/fire/firestore';\nimport { Observable } from 'rxjs';\nimport { BackendPageService } from './backendPage.service';\nimport { ModuloDatoSeguroFront } from '@ejfdelgado/ejflab-common/src/ModuloDatoSeguroFront';\n\nexport interface TupleTempData {\n  pg: string;\n  body?: any;\n  cifrado?: string;\n  t: number;\n  who: string;\n}\n\nexport interface TupleData {\n  status: string;\n  body?: any;\n  t?: number;\n}\n\nexport interface TupleResponseDetailData {\n  v: any;\n  act: number;\n  cre: number;\n  pg: string;\n  id: string;\n}\n\nexport interface TupleResponseData {\n  payload: Array<TupleResponseDetailData>;\n  t: number;\n}\n\nexport class TupleServiceInstance {\n  evento = new EventEmitter<TupleData>();\n  model: any | null = null;\n  builder: any;\n  myLiveChanges: any;\n  constructor(\n    private id: string,\n    private writer: Function,\n    private httpService: HttpService,\n    private firestore: Firestore,\n    private backendPageService: BackendPageService\n  ) {\n    this.myLiveChanges = {};\n    this.evento = new EventEmitter<TupleData>();\n    this.builder = MyTuples.getBuilder();\n    this.builder.setProcesor(writer);\n    this.builder.addActivityListener((status: any) => {\n      if (status === true) {\n        this.evento.emit({ status: 'save_wip' });\n      } else if (status === false) {\n        this.evento.emit({ status: 'save_done' });\n      }\n    });\n\n    // Se debe suscribir a firebase en un modelo público para tomar los cambios que se ha perdido...\n    // https://firebase.google.com/docs/firestore/query-data/queries?hl=es-419\n    const subscription = this.evento.subscribe((evento) => {\n      if (evento.status == 'read_first' && evento.t) {\n        subscription.unsubscribe();\n        let maxTime = evento.t;\n        let lastMaxTime = 0;\n        const checkNews = (cutTime: number, label: string) => {\n          lastMaxTime = cutTime;\n          //console.log(`checkNews ${label} cutTime:${cutTime}`);\n          const myCollection = collection(firestore, 'pro-tuple-temp');\n          const consulta = query(\n            myCollection,\n            where('pg', '==', this.id),\n            where('t', '>', cutTime)\n          );\n\n          let changes: Observable<DocumentData[]> = collectionData(consulta);\n\n          const secondSubscription = changes.subscribe(\n            async (data: Array<any>) => {\n              if (data.length > 0) {\n                let llaves = null;\n                secondSubscription.unsubscribe();\n                for (let i = 0; i < data.length; i++) {\n                  const actual: TupleTempData = data[i];\n                  const llave = `${actual.t}-${actual.who}`;\n                  if (!(llave in this.myLiveChanges)) {\n                    if (!actual.body) {\n                      // Se asume cifrado\n                      if (llaves == null) {\n                        llaves = await backendPageService.getPageKeys();\n                      }\n                      actual.body =\n                        ModuloDatoSeguroFront.decifrarConListaDeLlaves(\n                          actual.cifrado,\n                          llaves\n                        );\n                    }\n                    if (actual.body) {\n                      actual.body.t = actual.t;\n                      this.myLiveChanges[llave] = actual.body;\n                    }\n                  }\n                  if (actual.t > maxTime) {\n                    maxTime = actual.t;\n                  }\n                }\n                this.applyNewChanges();\n                checkNews(maxTime, 'inside');\n              }\n            }\n          );\n        };\n        checkNews(evento.t, 'outside');\n      }\n    });\n\n    setTimeout(() => {\n      this.read();\n    }, 0);\n  }\n\n  setBlackKeyPatterns(lista: Array<any>) {\n    this.builder.setBlackKeyPatterns(lista);\n  }\n\n  fastMapListenerKeys: Array<string> = [];\n  mapListener: { [key: string]: Array<Function> } = {};\n  addListener(key: string, callback: Function) {\n    if (!(key in this.mapListener)) {\n      this.mapListener[key] = [];\n    }\n    const indice = this.mapListener[key].indexOf(callback);\n    if (indice < 0) {\n      this.mapListener[key].push(callback);\n    }\n    this.fastMapListenerKeys = Object.keys(this.mapListener);\n  }\n\n  removeListener(key: string, callback?: Function) {\n    if (!(key in this.mapListener)) {\n      return;\n    }\n    if (callback) {\n      const indice = this.mapListener[key].indexOf(callback);\n      if (indice >= 0) {\n        this.mapListener[key].splice(indice, 1);\n        if (this.mapListener[key].length == 0) {\n          delete this.mapListener[key];\n        }\n      }\n    } else {\n      delete this.mapListener[key];\n    }\n    this.fastMapListenerKeys = Object.keys(this.mapListener);\n  }\n\n  removeAllListener() {\n    this.mapListener = {};\n  }\n\n  notifyObservers(someKey: string, someValue: any) {\n    const arreglo = this.mapListener[someKey];\n    for (let j = 0; j < arreglo.length; j++) {\n      const someFun = arreglo[j];\n      someFun(someKey, someValue);\n    }\n  }\n\n  applyNewChanges() {\n    if (this.model == null) {\n      return;\n    }\n    const notifyObserversThis = this.notifyObservers.bind(this);\n    // Convertir el modelo en una lista ordenada de lo más viejo a lo más nuevo\n    const lista = [];\n    const llaves = Object.keys(this.myLiveChanges);\n    if (llaves.length == 0) {\n      return;\n    }\n    for (let i = 0; i < llaves.length; i++) {\n      const llave = llaves[i];\n      const actual = this.myLiveChanges[llave];\n      lista.push(actual);\n    }\n    lista.sort((a: any, b: any): number => {\n      const resta = a.t - b.t;\n      return resta;\n    });\n    let changeCount = 0;\n    for (let i = 0; i < lista.length; i++) {\n      const differences = lista[i];\n      if (!this.builder.isOwnChange(differences)) {\n        this.model = this.builder.affect(\n          differences,\n          this.fastMapListenerKeys,\n          notifyObserversThis\n        );\n        changeCount++;\n      }\n    }\n    if (changeCount > 0) {\n      this.evento.emit({ status: 'news', body: this.model });\n    }\n    this.myLiveChanges = {};\n  }\n\n  async read() {\n    this.evento.emit({ status: 'read_wip' });\n    const request = {\n      offset: 0,\n      max: 60,\n      id: this.id,\n    };\n\n    let response: TupleResponseData | null = null;\n    do {\n      response = await this.httpService.get<TupleResponseData>(\n        `srv/${request.id}/tup?offset=${request.offset}&max=${request.max}`,\n        { showIndicator: true }\n      );\n      if (request.offset == 0 && response != null) {\n        this.evento.emit({ status: 'read_first', t: response.t });\n      }\n      if (response != null && response.payload.length > 0) {\n        const tuplas = MyTuples.convertFromBD(response.payload);\n        this.builder.build(tuplas);\n        request.offset += response.payload.length;\n      }\n    } while (response != null && response.payload.length > 0);\n    this.model = this.builder.end();\n    this.applyNewChanges();\n    this.evento.emit({ status: 'read_done', body: this.model });\n  }\n  save(model: any) {\n    const notifyObserversThis = this.notifyObservers.bind(this);\n    this.builder.trackDifferences(\n      model,\n      this.fastMapListenerKeys,\n      notifyObserversThis\n    );\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TupleService {\n  constructor(\n    private authService: AuthService,\n    private modalService: ModalService,\n    private httpService: HttpService,\n    public dialog: MatDialog,\n    private firestore: Firestore,\n    private backendPageService: BackendPageService\n  ) {}\n\n  getReader(pageId: string): TupleServiceInstance {\n    const writer = async (batch: any): Promise<any> => {\n      //console.log(`Guardando ${pageId} con ${batch} ...`);\n      await this.httpService.post(\n        `srv/${pageId}/tup`,\n        {\n          body: batch,\n          live: '1',\n          secret: '1',\n        },\n        { showIndicator: false }\n      );\n      //console.log(`Guardando ${pageId} con ${batch} ok`);\n    };\n    return new TupleServiceInstance(\n      pageId,\n      writer,\n      this.httpService,\n      this.firestore,\n      this.backendPageService\n    );\n  }\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ModalService } from '../../services/modal.service';\nimport { MyUserData, MyUserOptionsData } from '../../services/user.service';\nimport { ImagepickerOptionsData } from '../imagepicker/imagepicker.component';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { FileBase64Data } from '../base/base.component';\n\nexport interface UserPopUpData {\n  newImage?: string;\n  changed: boolean;\n  old: MyUserData;\n  new: MyUserData;\n}\n\n@Component({\n  selector: 'app-userpopup',\n  templateUrl: './userpopup.component.html',\n  styleUrls: ['./userpopup.component.css'],\n})\nexport class UserpopupComponent implements OnInit {\n  form: FormGroup;\n  options: MyUserOptionsData = {\n    editPhone: true,\n    editEmail: true,\n    editName: true,\n  };\n  imageOptions: ImagepickerOptionsData = {\n    isEditable: true,\n    isRounded: true,\n    useBackground: false,\n    defaultImage: MyConstants.USER.DEFAULT_IMAGE,\n  };\n  ahora = new Date().getTime();\n  respuesta: UserPopUpData;\n  constructor(\n    private dialogRef: MatDialogRef<UserpopupComponent>,\n    private fb: FormBuilder,\n    private modalSrv: ModalService,\n    @Inject(MAT_DIALOG_DATA) public data: MyUserData\n  ) {\n    if (data.options) {\n      this.options = data.options;\n    }\n    this.respuesta = {\n      old: data,\n      changed: false,\n      new: {\n        name: data.name,\n        email: data.email, // No se debe poder cambiar si es el id...\n        phone: data.phone,\n      },\n    };\n  }\n\n  get name() {\n    return this.form.get('name');\n  }\n\n  get email() {\n    return this.form.get('email');\n  }\n\n  get phone() {\n    return this.form.get('phone');\n  }\n\n  cancelar() {\n    this.dialogRef.close(false);\n  }\n\n  ngOnInit(): void {\n    this.form = this.fb.group({});\n\n    if (this.options.editName) {\n      this.form.addControl(\"name\", this.fb.control(this.data.name, [Validators.required, Validators.maxLength(512)]));\n    }\n    if (this.options.editEmail) {\n      this.form.addControl(\"email\", this.fb.control(this.data.email, [Validators.maxLength(512)]));\n    }\n    if (this.options.editPhone) {\n      this.form.addControl(\"phone\", this.fb.control(this.data.phone, [Validators.maxLength(512)]));\n    }\n  }\n\n  getMaxLengthMessage(label: string, error: any | null): string {\n    if (error && error.maxlength) {\n      return `Máximo ${error.maxlength.requiredLength} letras. Actualmente hay ${error.maxlength.actualLength}.`;\n    }\n    return '';\n  }\n\n  changedImage(imagenBase64: FileBase64Data) {\n    if (imagenBase64.base64) {\n      this.respuesta.newImage = imagenBase64.base64;\n    }\n  }\n\n  getImage(): string | null {\n    if (typeof this.data.picture == 'string' && this.data.picture.length > 0) {\n      return this.data.picture + `?t=${this.ahora}`;\n    }\n    return null;\n  }\n\n  async guardar() {\n    if (this.form.valid) {\n      // Si ha cambiado la imagen\n      if (typeof this.respuesta.newImage == 'string') {\n        this.respuesta.changed = true;\n      }\n\n      const llaves = [];\n      if (this.options.editName) {\n        this.respuesta.new.name = this.form.value.name;\n        llaves.push(\"name\");\n      }\n      if (this.options.editEmail) {\n        this.respuesta.new.email = this.form.value.email;\n        llaves.push(\"email\");\n      }\n      if (this.options.editPhone) {\n        this.respuesta.new.phone = this.form.value.phone;\n        llaves.push(\"phone\");\n      }\n\n      this.respuesta.new.picture = this.respuesta.old.picture;\n      this.respuesta.new.created = this.respuesta.old.created;\n\n      // o si alguno de los campos ha cambiado\n      if (!this.respuesta.changed) {\n        for (let i = 0; i < llaves.length; i++) {\n          const llave = llaves[i];\n          const nuevo: any = this.respuesta.new;\n          const viejo: any = this.respuesta.old;\n          if (nuevo[llave] != viejo[llave]) {\n            this.respuesta.changed = true;\n          }\n        }\n      }\n      this.dialogRef.close(this.respuesta);\n    } else {\n      this.modalSrv.alert({\n        title: 'Ups...',\n        txt: 'Verifica tus datos antes de continuar.',\n      });\n    }\n  }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">Editar usuario</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<mat-dialog-content class=\"mat-typography con_form\">\n    <p class=\"texto_descripcion\">Actualiza tus datos.</p>\n    <form class=\"form-container layout_columna\" [formGroup]=\"form\" (ngSubmit)=\"guardar()\">\n        <app-imagepicker [options]=\"imageOptions\" (eventSave)=\"changedImage($event)\" [url]=\"getImage()\">\n        </app-imagepicker>\n        <mat-form-field class=\"form-control\" *ngIf=\"options.editName === true\">\n            <mat-label>Nombre</mat-label>\n            <input matInput formControlName=\"name\" type=\"text\" required />\n            <mat-error *ngIf=\"name?.hasError('required')\">\n                El nombre es requerido.\n            </mat-error>\n            <mat-error *ngIf=\"name?.hasError('maxlength')\">\n                {{ getMaxLengthMessage(\"\", name?.errors) }}\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field class=\"form-control\" *ngIf=\"options.editEmail === true\">\n            <mat-label>Correo</mat-label>\n            <input matInput formControlName=\"email\" type=\"text\" />\n            <mat-error *ngIf=\"email?.hasError('maxlength')\">\n                {{ getMaxLengthMessage(\"\", email?.errors) }}\n            </mat-error>\n        </mat-form-field>\n        <mat-form-field class=\"form-control\" *ngIf=\"options.editPhone === true\">\n            <mat-label>Celular</mat-label>\n            <input matInput formControlName=\"phone\" type=\"text\" />\n            <mat-error *ngIf=\"phone?.hasError('maxlength')\">\n                {{ getMaxLengthMessage(\"\", phone?.errors) }}\n            </mat-error>\n        </mat-form-field>\n    </form>\n</mat-dialog-content>\n<div mat-dialog-actions class=\"bottom_buttons\">\n    <button class=\"btn btn-secondary\" (click)=\"cancelar()\">\n        <mat-icon>close</mat-icon>\n        Cancelar\n    </button>\n    <button class=\"btn btn-primary\" (click)=\"guardar()\">\n        <mat-icon>check</mat-icon>\n        Guardar\n    </button>\n</div>","import { EventEmitter, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n  UserpopupComponent,\n  UserPopUpData,\n} from '../components/userpopup/userpopup.component';\nimport { HttpOptionsData } from '../interfaces/login-data.interface';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { AuthService } from './auth.service';\nimport { HttpService, LoadFileData } from './http.service';\nimport { ModalService } from './modal.service';\n\nexport interface MyUserOptionsData {\n  editName: boolean;\n  editEmail: boolean;\n  editPhone: boolean;\n};\n\nexport interface MyUserData {\n  id?: string;\n  created?: number;\n  name: string;\n  email: string | null;\n  phone: string | null;\n  picture?: string;\n  updated?: number;\n  options?: MyUserOptionsData;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MyUserService {\n  usuarioActual: MyUserData | null | undefined = undefined;\n  eventoUsuario: EventEmitter<MyUserData> = new EventEmitter<MyUserData>();\n  constructor(\n    private auth: AuthService,\n    private httpSrv: HttpService,\n    private modalService: ModalService,\n    private dialog: MatDialog\n  ) {\n    this.auth.getLoginEvent().subscribe((user) => {\n      if (user != null) {\n        if (MyUserService.isAnonymousPath()) {\n          this.usuarioActual = null;\n        } else {\n          const consultaUsuario = this.httpSrv.get<MyUserData>('srv/usr/me', {\n            showError: false,\n          });\n          consultaUsuario.then((usuario) => {\n            if (usuario) {\n              this.usuarioActual = usuario;\n              this.eventoUsuario.emit(usuario);\n            } else {\n              this.usuarioActual = null;\n            }\n          });\n        }\n      } else {\n        this.usuarioActual = null;\n      }\n    });\n  }\n\n  static isAnonymousPath() {\n    const lista = MyConstants.ANONYMOUS_PATHS;\n    const currentPath = location.pathname;\n    for (let i = 0; i < lista.length; i++) {\n      if (currentPath.endsWith(lista[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  async getCurrentUser(): Promise<MyUserData | null> {\n    if (this.usuarioActual !== undefined) {\n      return JSON.parse(JSON.stringify(this.usuarioActual));\n    } else {\n      return new Promise((resolve) => {\n        const subscripcion = this.eventoUsuario.subscribe((usuario) => {\n          resolve(JSON.parse(JSON.stringify(usuario)));\n          subscripcion.unsubscribe();\n        });\n      });\n    }\n  }\n\n  async edit(options?: MyUserOptionsData) {\n    const usuario = await this.getCurrentUser();\n    if (usuario) {\n      const URL = 'srv/usr/me';\n      if (options) {\n        usuario.options = options;\n      }\n      const dialogRef = await this.dialog.open(UserpopupComponent, {\n        data: usuario,\n        panelClass: 'edit-user-dialog-container',\n      });\n      dialogRef\n        .afterClosed()\n        .subscribe(async (result: UserPopUpData | undefined) => {\n          if (result && result.changed) {\n            const options: HttpOptionsData = {\n              showIndicator: true,\n              showError: true,\n            };\n            try {\n              let actualizado: any = null;\n              if (result.newImage) {\n                const fileOptions: LoadFileData = {\n                  folder: MyConstants.USER.DEFAULT_FOLDER,\n                  fileName: MyConstants.USER.DEFAULT_FILE,\n                  foldertype: 'own',\n                  sizebig: '512',\n                  sizesmall: '128',\n                };\n                actualizado = await this.httpSrv.postWithFile(\n                  result.newImage,\n                  URL,\n                  { datos: result.new },\n                  options,\n                  fileOptions\n                );\n              } else {\n                actualizado = await this.httpSrv.post(\n                  URL,\n                  { datos: result.new },\n                  options\n                );\n              }\n              this.usuarioActual = actualizado;\n              this.eventoUsuario.emit(actualizado);\n              this.modalService.alert({\n                title: 'Listo!',\n                txt: 'Guardados tus datos.',\n              });\n            } catch (err) { }\n          }\n        });\n    } else {\n      this.modalService.alert({ txt: 'No hay usuario autenticado' });\n    }\n  }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nexport interface WebcamRequestData {}\n\nexport interface WebcamResponseData {\n  canceled?: boolean;\n  base64: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class WebcamService {\n  evento: EventEmitter<WebcamRequestData>;\n  eventResponse: EventEmitter<WebcamResponseData>;\n  constructor() {\n    this.evento = new EventEmitter<WebcamRequestData>();\n    this.eventResponse = new EventEmitter<WebcamResponseData>();\n  }\n\n  subscribe(escucha: Function): Subscription {\n    return this.evento.subscribe(escucha);\n  }\n\n  sendResponse(response: WebcamResponseData) {\n    this.eventResponse.emit(response);\n  }\n\n  async openWebcam(request: WebcamRequestData): Promise<WebcamResponseData> {\n    return new Promise((resolve, reject) => {\n      this.evento.emit(request);\n      const subscripcion = this.eventResponse.subscribe(\n        (response: WebcamResponseData) => {\n          resolve(response);\n          subscripcion.unsubscribe();\n        }\n      );\n    });\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n  HttpRequest,\n  HttpHandler,\n  HttpEvent,\n  HttpInterceptor,\n} from '@angular/common/http';\nimport { from, Observable } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ActivatedRoute } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\nimport { MicrosoftAuthService } from '../services/microsoftAuth.service';\nimport { jwtDecode } from \"jwt-decode\";\n\nconst URLS_NO_TOKEN = ['https://storage.googleapis.com'];\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class JwtInterceptor implements HttpInterceptor {\n  constructor(\n    private route: ActivatedRoute,\n    private auth: AuthService,\n    private msAuth: MicrosoftAuthService,\n    @Inject('authProvider') private authProvider: string,\n  ) { }\n\n  isTokenExpired(token: string, minutes: number = 0) {\n    const response: any = {\n      with: true,\n      without: true,\n      correct: false,\n    };\n    try {\n      const decodedToken = jwtDecode(token);\n      if (decodedToken && decodedToken.exp) {\n        const expirationTime = decodedToken.exp * 1000;\n        const now = Date.now();\n        response.with = now > (expirationTime - minutes * 60 * 1000);\n        response.without = now > expirationTime;\n        response.correct = true;\n      }\n    } catch (err) {\n      //\n    }\n    return response;\n  }\n\n  intercept(\n    request: HttpRequest<any>,\n    next: HttpHandler\n  ): Observable<HttpEvent<any>> {\n    const avoidToken: any = request.headers.get('x-avoid-token');\n    let promesaToken: Promise<string | null> = Promise.resolve(null);\n    if (avoidToken != \"yes\") {\n      if (this.authProvider == \"microsoft\") {\n        promesaToken = this.msAuth.getSessionToken(\"id\");\n      } else if (this.authProvider == \"google\") {\n        promesaToken = this.auth.getIdToken();\n      }\n    }\n\n    return from(promesaToken).pipe(\n      switchMap((token) => {\n        //console.log(`auth ${request.url} ${token ? token.substring(0, 10) : \"null\"}`);\n        if (token == null) {\n          const headers = request.headers.append('HTTP_REFERER', location.href);\n          const requestClone = request.clone({\n            headers,\n          });\n          return next.handle(requestClone);\n        } else {\n          // could check if it is expired...\n          const expired = this.isTokenExpired(token, 30);\n          if (expired) {\n            if (expired.without === true) {\n              // Nothing to do, it is expired at all\n              if (this.authProvider == \"microsoft\") {\n                // Assure destroy the session\n                if (expired.correct) {\n                  // Only reload if there was session before\n                  this.msAuth.refreshActiveAccount().then(() => {\n                    window.location.reload();\n                  }).catch((err) => {\n                    console.error(err);\n                  });\n                }\n              }\n            } else if (expired.with === true && expired.correct) {\n              // Could refresh it\n              if (this.authProvider == \"microsoft\") {\n                console.log(\"Refresing token\");\n                this.msAuth.refreshActiveAccount();\n              }\n            }\n          }\n          const url = request.url;\n          const partes = /^(https?:\\/\\/[^\\/]+)/.exec(url);\n          let addAuthorization = true;\n          if (partes != null) {\n            const dominio = partes[1];\n            if (URLS_NO_TOKEN.indexOf(dominio) >= 0) {\n              addAuthorization = false;\n            }\n          }\n\n          let headers = request.headers\n            .append('X-Referer', location.href)\n            .append('X-Host', location.origin);\n\n          if (addAuthorization) {\n            headers = headers.append('Authorization', 'Bearer ' + token);\n          }\n\n          const requestClone = request.clone({\n            headers,\n          });\n\n          return next.handle(requestClone);\n        }\n      })\n    );\n  }\n}\n","export type PermissionVideoStateType = \"granted\" | \"denied\" | \"prompt\";\n\nexport class CameraPermissionWatcher {\n    private status: PermissionVideoStateType | null = null;\n    private listeners: ((state: PermissionVideoStateType) => void)[] = [];\n\n    constructor() {\n        this.init();\n    }\n\n    private async init() {\n        let hasPermissionAPI = false;\n        if (\"permissions\" in navigator && navigator.permissions.query) {\n            hasPermissionAPI = true;\n            try {\n                const perm = await navigator.permissions.query({ name: \"camera\" as PermissionName });\n\n                this.status = perm.state as PermissionVideoStateType;\n                this.notify(this.status);\n\n                // Listen for changes (works in Chrome, Edge, Firefox)\n                perm.onchange = () => {\n                    this.status = perm.state as PermissionVideoStateType;\n                    this.notify(this.status);\n                };\n\n                return;\n            } catch {\n                console.warn(\"Permissions API not supported for camera.\");\n            }\n        }\n\n        // Fallback for Safari: no Permissions API → detect only when requesting\n        this.tryGetUserMedia();\n        /*\n        if (!hasPermissionAPI) {\n            const MAX_COUNT = 30 * 1;//1 minute\n            let counter = 2;\n            const repeatedFunction = () => {\n                setTimeout(async () => {\n                    await this.tryGetUserMedia();\n                    if (counter < MAX_COUNT) {\n                        counter++;\n                        repeatedFunction();\n                    }\n                }, 3000);\n            };\n            repeatedFunction();\n        }\n        */\n    }\n\n    private async tryGetUserMedia() {\n        let status: PermissionVideoStateType | null = null;\n        try {\n            await navigator.mediaDevices.getUserMedia({ video: true });\n            status = \"granted\";\n        } catch (err: any) {\n            if (err.name === \"NotAllowedError\" || err.name === \"PermissionDeniedError\") {\n                status = \"denied\";\n            } else {\n                status = \"prompt\"; // e.g., before user decides\n            }\n        }\n        /*\n        if (status != this.status) {\n            this.status = status;\n            this.notify(this.status);\n        }\n        */\n        this.status = status;\n        this.notify(this.status);\n    }\n\n    onChange(callback: (state: PermissionVideoStateType) => void) {\n        this.listeners.push(callback);\n        if (this.status) callback(this.status); // fire immediately with current status\n    }\n\n    private notify(state: PermissionVideoStateType) {\n        this.listeners.forEach(cb => cb(state));\n    }\n}\n","export type PermissionStateCustom = \"granted\" | \"denied\" | \"prompt\";\n\nexport class MicrophonePermissionWatcher {\n    private status: PermissionStateCustom | null = null;\n    private listeners: ((state: PermissionStateCustom) => void)[] = [];\n\n    constructor() {\n        this.init();\n    }\n\n    async init() {\n        let hasPermissionAPI = false;\n        if (\"permissions\" in navigator && navigator.permissions.query) {\n            hasPermissionAPI = true;\n            try {\n                const perm = await navigator.permissions.query({ name: \"microphone\" as PermissionName });\n\n                this.status = perm.state as PermissionStateCustom;\n                this.notify(this.status);\n\n                // Listen for changes (works in Chrome, Edge, Firefox)\n                perm.onchange = () => {\n                    this.status = perm.state as PermissionStateCustom;\n                    this.notify(this.status);\n                };\n\n                return;\n            } catch {\n                console.warn(\"Permissions API not supported for microphone.\");\n            }\n        }\n\n        // Fallback for Safari: no Permissions API → detect only when requesting\n        this.tryGetUserMedia();\n        /*\n        if (!hasPermissionAPI) {\n            const MAX_COUNT = 30 * 1;//1 minute\n            let counter = 2;\n            const repeatedFunction = () => {\n                setTimeout(async () => {\n                    await this.tryGetUserMedia();\n                    if (counter < MAX_COUNT) {\n                        counter++;\n                        repeatedFunction();\n                    }\n                }, 3000);\n            };\n            repeatedFunction();\n        }\n        */\n    }\n\n    private async tryGetUserMedia() {\n        let status: PermissionStateCustom | null = null;\n        try {\n            await navigator.mediaDevices.getUserMedia({ audio: true });\n            status = \"granted\";\n        } catch (err: any) {\n            if (err.name === \"NotAllowedError\" || err.name === \"PermissionDeniedError\") {\n                status = \"denied\";\n            } else {\n                status = \"prompt\"; // e.g., before user decides\n            }\n        }\n        /*\n        if (status != this.status) {\n            this.status = status;\n            this.notify(this.status);\n        }\n        */\n        this.status = status;\n        this.notify(this.status);\n    }\n\n    onChange(callback: (state: PermissionStateCustom) => void) {\n        this.listeners.push(callback);\n        if (this.status) callback(this.status); // fire immediately with current status\n    }\n\n    private notify(state: PermissionStateCustom) {\n        this.listeners.forEach(cb => cb(state));\n    }\n}\n","import { ContextComponent } from '../context.component';\n\nexport abstract class BaseProcesor {\n  context: ContextComponent;\n  constructor(context: ContextComponent) {\n    this.context = context;\n  }\n  abstract execute(args: any): void;\n}\n","import { ChangesData, ContextComponent } from '../context.component';\nimport { BaseProcesor } from './BaseProcesor';\n\nexport class SendLiveChangesProcessor extends BaseProcesor {\n  constructor(context: ContextComponent) {\n    super(context);\n  }\n  async execute(changes: ChangesData) {\n    const instance = this.context.getCallServiceInstance();\n    changes.orig = instance.getSocketId();\n    instance.emitEvent('clientChange', {\n      changes,\n    });\n  }\n}\n","import { Buffer } from 'buffer';\nimport { EventEmitter } from '@angular/core';\nimport { PromiseEmitter } from './PromiseEmitter';\nimport { CallServiceInstance } from '../../services/call.service';\nimport { MultiScaleMediaStream } from './VideoWebStream';\nimport { MyCookies } from '@ejfdelgado/ejflab-common/src/MyCookies';\nimport { ConsoleService } from '../../services/console.service';\n\nexport interface PeerStream {\n  stream: MediaStream | null;\n}\n\nexport interface PeerDataChannel {\n  peerConn: RTCPeerConnection;\n  channels: { [key: string]: RTCDataChannel };\n  streams: {\n    audio: PeerStream;\n    video: Array<PeerStream>;\n  };\n}\n\nexport interface PeerOutputElements {\n  audio?: HTMLAudioElement;\n  video?: HTMLVideoElement;\n}\n\nexport interface StreamActiveData {\n  type: string;\n  socketId: string;\n  stream: MediaStream,\n  id?: number;\n}\n\nexport class RTCCom {\n  static peers: { [key: string]: PeerDataChannel } = {};\n  static peersElements: { [key: string]: PeerOutputElements } = {};\n  static callServiceInstance: CallServiceInstance;\n  static rtcConfig: PromiseEmitter = new PromiseEmitter();\n  static dataChannelEvents: EventEmitter<any> = new EventEmitter();\n  static mustUpdate: EventEmitter<void> = new EventEmitter();\n  static mediaStreams: MultiScaleMediaStream | null = null;\n  static callMadeConfigured: EventEmitter<void> = new EventEmitter();\n  static streamActive: EventEmitter<StreamActiveData> = new EventEmitter();\n  static consoleSrv: ConsoleService;\n\n  static setConsoleSrv(consoleSrv: ConsoleService) {\n    RTCCom.consoleSrv = consoleSrv;\n  }\n\n  static async init(callServiceInstance: CallServiceInstance, config: { [key: string]: any } = {}) {\n    this.rtcConfig = new PromiseEmitter();\n    this.callServiceInstance = callServiceInstance;\n    // Configuración de una sola vez\n    this.oneTimeConfiguration();\n    this.callServiceInstance.emitEvent('askiceservers', config);\n  }\n\n  static unregisterAudioVideoElement(socketId: string) {\n    delete this.peersElements[socketId];\n  }\n\n  static getPeerHtmlElements(socketId: string) {\n    return this.peersElements[socketId];\n  }\n\n  static registerAudioElement(\n    socketId: string,\n    audioElement: HTMLAudioElement\n  ) {\n    if (!(socketId in this.peersElements)) {\n      this.peersElements[socketId] = {};\n    }\n    this.peersElements[socketId].audio = audioElement;\n  }\n\n  static registerVideoElement(\n    socketId: string,\n    videoElement: HTMLVideoElement\n  ) {\n    if (!(socketId in this.peersElements)) {\n      this.peersElements[socketId] = {};\n    }\n    this.peersElements[socketId].video = videoElement;\n  }\n\n  static hasConnectionWith(socketId: string): boolean {\n    const value = socketId in this.peers;\n    return value;\n  }\n\n  static onDataChannel(callback: Function) {\n    return this.dataChannelEvents.subscribe(callback);\n  }\n\n  static async disconnectAll() {\n    const peerIds = Object.keys(this.peers);\n    for (let i = 0; i < peerIds.length; i++) {\n      const peerId = peerIds[i];\n      RTCCom.closeChannelWith(peerId);\n    }\n  }\n\n  static async closeChannelWith(remoteSocketId: string) {\n    const peerData = this.peers[remoteSocketId];\n    if (!peerData) {\n      return;\n    }\n    try {\n      peerData.peerConn.close();\n    } catch (err) {\n      RTCCom.consoleSrv.error(`Error closing ${remoteSocketId} peerConn`);\n    }\n    try {\n\n      peerData.streams.audio.stream?.getTracks().forEach(function (track) {\n        track.stop();\n      });\n    } catch (err) {\n      RTCCom.consoleSrv.error(`Error closing ${remoteSocketId} audio stream`);\n    }\n    try {\n      const videos = peerData.streams.video;\n      videos.forEach((someVideo) => {\n        someVideo.stream?.getTracks().forEach(function (track) {\n          track.stop();\n        });\n      });\n    } catch (err) {\n      RTCCom.consoleSrv.error(`Error closing ${remoteSocketId} video stream`);\n    }\n    delete this.peers[remoteSocketId];\n  }\n\n  static isHealthyConnection(remoteSocketId: string) {\n    if (!(remoteSocketId in this.peers)) {\n      return false;\n    }\n    const dataChannel = this.peers[remoteSocketId];\n    const connectionState = dataChannel.peerConn.connectionState;\n    if (connectionState == 'connected') {\n      // If it is connected\n      // then the health depends on the video and audio streams\n      const videoStream1: MediaStream | null =\n        dataChannel.streams.video[0].stream;\n      const videoStream2: MediaStream | null =\n        dataChannel.streams.video[1].stream;\n      const audioStream: MediaStream | null = dataChannel.streams.audio.stream;\n      if (!videoStream1 || !audioStream || !videoStream2) {\n        return false;\n      }\n      if (!videoStream1.active || !videoStream2.active || !audioStream.active) {\n        return false;\n      }\n    } else if (['connecting', 'new'].indexOf(connectionState) >= 0) {\n      // It is a normal state\n      return true;\n    } else if (['disconnected', 'failed', 'closed'].indexOf(connectionState) >= 0) {\n      return false;\n    }\n    return true;\n  }\n\n  static async openChannelWith(\n    remoteSocketId: string,\n    channelLabels: Array<string> = []\n  ) {\n    RTCCom.consoleSrv.log(`rtcDetail: openChannelWith(${remoteSocketId})`);\n    // Espero la configuración\n    const config = await this.rtcConfig.then();\n    // Se crea el webrtc\n    const peerConn = new RTCPeerConnection(config);\n\n    // Se registra el peer\n    this.peers[remoteSocketId] = {\n      peerConn,\n      channels: {},\n      streams: { audio: { stream: null }, video: [] },\n    };\n\n    // I start the communication\n    await this.commonConfiguration(peerConn, remoteSocketId);\n\n    // Creo el datachannel text\n    for (let i = 0; i < channelLabels.length; i++) {\n      const channelLabel = channelLabels[i];\n      const dataChannel = peerConn.createDataChannel(channelLabel);\n      this.onDataChannelCreated(dataChannel, remoteSocketId);\n    }\n\n    // Creo la oferta\n    peerConn\n      .createOffer()\n      .then(function (offer) {\n        return peerConn.setLocalDescription(offer);\n      })\n      .then(() => {\n        RTCCom.consoleSrv.log(`rtcDetail: send callUser`);\n        this.callServiceInstance.emitEvent('callUser', {\n          offer: peerConn.localDescription,\n          to: remoteSocketId,\n        });\n      })\n      .catch(this.logError);\n  }\n\n  static oneTimeConfiguration() {\n    RTCCom.consoleSrv.log('oneTimeConfiguration');\n    // Escucho cuando alguien me llama\n    const callServiceInstance = this.callServiceInstance;\n    const socketId = callServiceInstance.getSocketId();\n\n    this.callServiceInstance.unregisterAllProcessors('oniceservers');\n    this.callServiceInstance.unregisterAllProcessors('callMade');\n    this.callServiceInstance.unregisterAllProcessors('onicecandidate');\n    this.callServiceInstance.unregisterAllProcessors('answerMade');\n\n    this.callServiceInstance.registerProcessor(\n      'oniceservers',\n      async (message: any) => {\n        message.offerToReceiveAudio = true;\n        message.offerToReceiveVideo = true;\n        this.rtcConfig.resolve(message);\n      }\n    );\n    callServiceInstance.registerProcessor('callMade', async (message: any) => {\n      // Se configura el secundario\n      const { offer, socket } = message;\n      RTCCom.consoleSrv.log(`callMade(${socket})`);\n      const config = await this.rtcConfig.then();\n      // Se crea el webrtc\n      const peerConn = new RTCPeerConnection(config);\n      // Se registra\n      this.peers[socket] = {\n        peerConn,\n        channels: {},\n        streams: { audio: { stream: null }, video: [] },\n      };\n      // Quien recibe el llamado\n      await this.commonConfiguration(peerConn, socket);\n      // Se escucha ondatachannel\n      peerConn.ondatachannel = (event) => {\n        this.onDataChannelCreated(event.channel, socket);\n      };\n      // Se envía la respuesta\n      RTCCom.consoleSrv.log(`rtcDetail: me: ${socketId} remote: ${socket}`);\n      RTCCom.consoleSrv.log(`rtcDetail: callMade -> peerConn.setRemoteDescription with state ${peerConn.signalingState}`);\n      await peerConn.setRemoteDescription(new RTCSessionDescription(offer));\n      const answer = await peerConn.createAnswer();\n      await peerConn.setLocalDescription(new RTCSessionDescription(answer));\n\n      RTCCom.consoleSrv.log('rtcDetail: Sends makeAnswer!');\n      callServiceInstance.emitEvent('makeAnswer', {\n        answer,\n        to: socket,\n      });\n      this.callMadeConfigured.emit();\n    });\n\n    // Escucho los ice candidates\n    callServiceInstance.registerProcessor('onicecandidate', (message: any) => {\n      const remoteSocketId = message.from;\n      const peer = this.peers[remoteSocketId];\n      if (peer) {\n        peer.peerConn.addIceCandidate(\n          new RTCIceCandidate({\n            candidate: message.candidate,\n            sdpMLineIndex: message.label,\n            sdpMid: message.id,\n          })\n        );\n      } else {\n        RTCCom.consoleSrv.log(`onicecandidate No peer found for ${remoteSocketId}`);\n      }\n    });\n\n    // Receiving the answer\n    callServiceInstance.registerProcessor(\n      'answerMade',\n      async (message: any) => {\n        const { socket, answer } = message;\n        if (socketId == socket) {\n          // Ignore call me with me\n          return;\n        }\n        //RTCCom.consoleSrv.log(`Me ${socketId} incomming ${socket}`);\n        const peer = this.peers[socket];\n        if (peer) {\n          RTCCom.consoleSrv.log(`rtcDetail: me: ${socketId} remote: ${socket}`);\n          RTCCom.consoleSrv.log(`rtcDetail: answerMade -> peerConn.setRemoteDescription with state ${peer.peerConn.signalingState}`);\n          await peer.peerConn.setRemoteDescription(\n            new RTCSessionDescription(answer)\n          );\n        } else {\n          RTCCom.consoleSrv.log(`rtcDetail: answerMade No peer found for ${socket}`);\n        }\n      }\n    );\n  }\n\n  static onStatusChange(updateFun: Function) {\n    return this.mustUpdate.subscribe(updateFun);\n  }\n\n  static async handleDisconnection(socketId: string) {\n    await RTCCom.closeChannelWith(socketId);\n    this.mustUpdate.emit();\n  }\n\n  static setOnlineStatus(status: string) {\n    //RTCCom.consoleSrv.log(`RTCPeer Conection ${status}`);\n    RTCCom.consoleSrv.log(`rtcDetail: Conection ${status}`);\n  }\n\n  static sendBuffer(dataChannel: RTCDataChannel, buffer: Buffer) {\n    let CHUNK_LEN = 64000;\n    let len = buffer.byteLength;\n    let n = (len / CHUNK_LEN) | 0;\n    //RTCCom.consoleSrv.log('Sending a total of ' + len + ' byte(s)');\n    dataChannel.send(`${len}`);\n    // split the photo and send in chunks of about 64KB\n    for (var i = 0; i < n; i++) {\n      var start = i * CHUNK_LEN,\n        end = (i + 1) * CHUNK_LEN;\n      //RTCCom.consoleSrv.log(start + ' - ' + (end - 1));\n      dataChannel.send(buffer.subarray(start, end));\n    }\n\n    // send the reminder, if any\n    if (len % CHUNK_LEN) {\n      //RTCCom.consoleSrv.log('last ' + (len % CHUNK_LEN) + ' byte(s)');\n      dataChannel.send(buffer.subarray(n * CHUNK_LEN));\n    }\n  }\n\n  static send(socketId: string, label: string, message: string | Buffer) {\n    const peer = this.peers[socketId];\n    if (peer) {\n      const dataChannel = peer.channels[label];\n      if (dataChannel) {\n        if (dataChannel.readyState !== 'closed') {\n          //RTCCom.consoleSrv.log(`Sending ${message}`);\n          if (typeof message == 'string') {\n            const buf = Buffer.from(message, 'utf8');\n            this.sendBuffer(dataChannel, buf);\n          } else {\n            this.sendBuffer(dataChannel, message);\n          }\n        } else {\n          RTCCom.consoleSrv.log(`dataChannel.readyState = ${dataChannel.readyState}`);\n        }\n      } else {\n        RTCCom.consoleSrv.log(`Channel labeled ${label} does not exists`);\n      }\n    } else {\n      RTCCom.consoleSrv.log(`There is not connection with ${socketId}`);\n    }\n  }\n\n  static logError(err: any) {\n    if (!err) return;\n    if (typeof err === 'string') {\n      RTCCom.consoleSrv.warn(err);\n    } else {\n      RTCCom.consoleSrv.warn(err.toString(), err);\n    }\n  }\n\n  static onDataChannelCreated(channel: RTCDataChannel, remoteSocketId: string) {\n    const label = channel.label;\n    this.peers[remoteSocketId].channels[label] = channel;\n    channel.onopen = () => {\n      RTCCom.consoleSrv.log(`Channel ${label} opened`);\n    };\n\n    channel.onclose = () => {\n      RTCCom.consoleSrv.log(`Channel ${label} closed`);\n      this.handleDisconnection(remoteSocketId);\n    };\n\n    const receiver = (buff: any) => {\n      //RTCCom.consoleSrv.log(`receiver!`);\n      this.dataChannelEvents.emit({\n        data: buff,\n        label,\n        socketId: remoteSocketId,\n      });\n    };\n\n    if (navigator.userAgent.indexOf('Firefox') != -1) {\n      channel.onmessage = this.receiveDataFirefoxFactory(receiver);\n    } else {\n      channel.onmessage = this.receiveDataChromeFactory(receiver);\n    }\n  }\n\n  static receiveDataChromeFactory(callback: Function) {\n    let buf: any, count: any;\n\n    return function onmessage(event: any) {\n      if (typeof event.data === 'string') {\n        buf = new Uint8ClampedArray(parseInt(event.data));\n        count = 0;\n        //RTCCom.consoleSrv.log('Expecting a total of ' + buf.byteLength + ' bytes');\n        return;\n      }\n\n      let data = new Uint8ClampedArray(event.data);\n      buf.set(data, count);\n\n      count += data.byteLength;\n      //RTCCom.consoleSrv.log('count: ' + count);\n\n      if (count === buf.byteLength) {\n        // we're done: all data chunks have been received\n        //RTCCom.consoleSrv.log('Done. Rendering photo.');\n        callback(buf);\n      }\n    };\n  }\n\n  static receiveDataFirefoxFactory(callback: Function) {\n    var count: any, total: any, parts: any;\n\n    return function onmessage(event: any) {\n      if (typeof event.data === 'string') {\n        total = parseInt(event.data);\n        parts = [];\n        count = 0;\n        RTCCom.consoleSrv.log('Expecting a total of ' + total + ' bytes');\n        return;\n      }\n\n      parts.push(event.data);\n      count += event.data.size;\n      RTCCom.consoleSrv.log(\n        'Got ' + event.data.size + ' byte(s), ' + (total - count) + ' to go.'\n      );\n\n      if (count === total) {\n        RTCCom.consoleSrv.log('Assembling payload');\n        var buf = new Uint8ClampedArray(total);\n        var compose = function (i: any, pos: any) {\n          var reader = new FileReader();\n          reader.onload = function () {\n            const result: any = this.result;\n            buf.set(new Uint8ClampedArray(result), pos);\n            if (i + 1 === parts.length) {\n              RTCCom.consoleSrv.log('Done. Rendering photo.');\n              callback(buf);\n            } else {\n              compose(i + 1, pos + result.byteLength);\n            }\n          };\n          reader.readAsArrayBuffer(parts[i]);\n        };\n        compose(0, 0);\n      }\n    };\n  }\n\n  static async setMediaStream(mediaStreams: MultiScaleMediaStream | null) {\n    this.mediaStreams = mediaStreams;\n  }\n\n  static removeAllTracks(remoteSocketId: string) {\n    const peer = this.peers[remoteSocketId];\n    if (peer) {\n      const senders = peer.peerConn.getSenders();\n      RTCCom.consoleSrv.log(`Clean ${senders.length} tracks for ${remoteSocketId}`);\n      senders.forEach((sender) => {\n        peer.peerConn.removeTrack(sender);\n      });\n    }\n  }\n\n  static getPeerStream(remoteSocketId: string) {\n    const peerData = this.peers[remoteSocketId];\n    return peerData;\n  }\n\n  static async publishMyLocalMediaStream(remoteSocketId: string) {\n    // WTF SEND STREAMS\n    const peer = this.peers[remoteSocketId];\n    if (this.mediaStreams && peer) {\n      this.removeAllTracks(remoteSocketId);\n      const addSingleStream = (mediaStream: MediaStream) => {\n        mediaStream.getTracks().forEach((track: MediaStreamTrack) => {\n          const sender: RTCRtpSender = peer.peerConn.addTrack(\n            track,\n            mediaStream\n          );\n        });\n      };\n      // Publish all tracks\n      const mediaStreams: any = this.mediaStreams;\n      const llaves = ['small', 'big', 'audio'];\n      for (let i = 0; i < llaves.length; i++) {\n        const key = llaves[i];\n        const currentMediaStream = mediaStreams[key];\n        RTCCom.consoleSrv.log(\n          `STREAM SEND: socketId: ${remoteSocketId} key: ${key} ${RTCCom.printMediaStream(\n            currentMediaStream\n          )}`\n        );\n        addSingleStream(currentMediaStream);\n      }\n    } else {\n      RTCCom.consoleSrv.log(\n        `ERROR: Can't publish media source because mediaStream OK? ${!!this\n          .mediaStreams} peer OK? ${!!peer}`\n      );\n    }\n  }\n\n  static async commonConfiguration(\n    peerConn: RTCPeerConnection,\n    remoteSocketId: string\n  ) {\n    // Agrego el track de video y audio si lo hay\n    await this.publishMyLocalMediaStream(remoteSocketId);\n    // Publico los icecandidates\n    peerConn.onicecandidate = (args: RTCPeerConnectionIceEvent) => {\n      if (args.candidate) {\n        this.callServiceInstance.emitEvent('onicecandidate', {\n          candidate: args.candidate.candidate,\n          label: args.candidate.sdpMLineIndex,\n          id: args.candidate.sdpMid,\n          to: remoteSocketId,\n        });\n      }\n    };\n    peerConn.ontrack = (information: RTCTrackEvent) => {\n      const {\n        track,\n        streams: [stream],\n      } = information;\n      // WTF RECEIVE STREAMS\n      const peerRef = this.peers[remoteSocketId];\n      if (stream.getAudioTracks().length > 0) {\n        RTCCom.consoleSrv.log(\n          `STREAM RECEIVE: socketId: ${remoteSocketId} key:audio ${RTCCom.printMediaStream(\n            stream\n          )}`\n        );\n        peerRef.streams.audio.stream = stream;\n        // bind events with event emmiter\n        const emitFunction = () => {\n          // Emit Event\n          RTCCom.streamActive.emit({\n            type: 'audio',\n            socketId: remoteSocketId,\n            stream\n          });\n        };\n        stream.addEventListener('active', emitFunction);\n        emitFunction();\n      } else if (stream.getVideoTracks().length > 0) {\n        peerRef.streams.video.push({\n          stream: stream,\n        });\n        const emitFunction = () => {\n          // Emit Event\n          RTCCom.streamActive.emit({\n            type: 'video',\n            id: peerRef.streams.video.length,\n            socketId: remoteSocketId,\n            stream\n          });\n        };\n        stream.addEventListener('active', emitFunction);\n        emitFunction();\n        RTCCom.consoleSrv.log(\n          `STREAM RECEIVE: socketId: ${remoteSocketId} key:video#${peerRef.streams.video.length\n          } ${RTCCom.printMediaStream(stream)}`\n        );\n        // TODO clean old/closed streams\n      }\n\n      //track.onunmute = () => {\n      const trackIndex = 0; //1 = big, 0 = small\n      this.connectStreamToHtmlElement(remoteSocketId, trackIndex);\n      //};\n    };\n    //\n    peerConn.onconnectionstatechange = (ev: any) => {\n      switch (peerConn.connectionState) {\n        case 'new':\n        case 'connecting':\n          this.setOnlineStatus(`Connecting... ${remoteSocketId}`);\n          break;\n        case 'connected':\n          this.setOnlineStatus(`Online ${remoteSocketId}`);\n          // succeed\n          this.mustUpdate.emit();\n          break;\n        case 'disconnected':\n          this.setOnlineStatus(`Disconnecting... ${remoteSocketId}`);\n          this.handleDisconnection(remoteSocketId);\n          break;\n        case 'closed':\n          this.setOnlineStatus(`Offline ${remoteSocketId}`);\n          this.handleDisconnection(remoteSocketId);\n          break;\n        case 'failed':\n          this.setOnlineStatus(`Error ${remoteSocketId}`);\n          this.handleDisconnection(remoteSocketId);\n          break;\n        default:\n          this.setOnlineStatus(`Unknown ${remoteSocketId}`);\n          break;\n      }\n    };\n  }\n\n  static isMobile() {\n    if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/Android/i)) {\n      return true;\n    }\n    return false;\n  }\n\n  // RTCCom.assignSrc()\n  static assignSrc(htmlElement: any, mediaStream: any) {\n    if (\"srcObject\" in htmlElement) {\n      htmlElement.srcObject = mediaStream;\n    } else {\n      htmlElement.src = URL.createObjectURL(mediaStream);\n    }\n  }\n\n  static removeMuteAudio(audioElement: any) {\n    setTimeout(() => {\n      audioElement.muted = false;\n      audioElement.removeAttribute(\"muted\");\n    }, 300);\n  }\n\n  static audioHtmlConnectFun: Function | null = null;\n  static setAudioHtmlConnectHook(external: Function) {\n    RTCCom.audioHtmlConnectFun = external;\n  }\n\n  static connectStreamToHtmlElement(remoteSocketId: string, videoId?: number) {\n    RTCCom.consoleSrv.log(`connectStreamToHtmlElement(${remoteSocketId})`);\n    if (!(remoteSocketId in this.peersElements)) {\n      RTCCom.consoleSrv.log(\n        `ERROR: No ${remoteSocketId} in this.peersElements ${Object.keys(\n          this.peersElements\n        ).join(', ')}`\n      );\n      return;\n    }\n    const { audio, video } = this.peersElements[remoteSocketId];\n    const peerRef = this.peers[remoteSocketId];\n    if (!peerRef) {\n      RTCCom.consoleSrv.log(`ERROR: No ${remoteSocketId} in this.peers`);\n      return;\n    }\n\n    if (RTCCom.audioHtmlConnectFun) {\n      RTCCom.audioHtmlConnectFun(RTCCom, remoteSocketId, peerRef.streams.audio.stream, audio);\n    } else {\n      if (peerRef.streams.audio.stream) {\n        if (audio) {\n          RTCCom.consoleSrv.log(\n            `STREAM ASSIGN: socketId: ${remoteSocketId} ${RTCCom.printMediaStream(\n              peerRef.streams.audio.stream\n            )}`\n          );\n          RTCCom.assignSrc(audio, peerRef.streams.audio.stream);\n          RTCCom.removeMuteAudio(audio);\n          let speakerSelected = 'default';\n          if (!RTCCom.isMobile()) {\n            speakerSelected = MyCookies.getCookie('default_audio_output', 'default');\n          }\n          if (typeof audio.setSinkId === 'function') {\n            try {\n              RTCCom.consoleSrv.log('Audio output set to ' + speakerSelected);\n              audio.setSinkId(speakerSelected);\n            } catch (err) {\n              //RTCCom.consoleSrv.error('Failed to set sink ID:', err);\n            }\n          }\n        } else {\n          RTCCom.consoleSrv.log(`ERROR: ${remoteSocketId} has no audio element`);\n        }\n      } else {\n        RTCCom.consoleSrv.log(\n          `ERROR: ${remoteSocketId} has no peerRef.streams.audio.stream`\n        );\n      }\n    }\n\n    if (videoId === undefined) {\n      if (video) {\n        if (peerRef.streams.video.length > 0) {\n          if (!video.srcObject) {\n            video.srcObject = peerRef.streams.video[0].stream;\n          } else {\n            const actual = peerRef.streams.video.filter((element) => {\n              return element.stream == video.srcObject;\n            })[0];\n            const actualIndex = peerRef.streams.video.indexOf(actual);\n            let nextIndex = actualIndex + 1;\n            if (nextIndex >= peerRef.streams.video.length) {\n              nextIndex = 0;\n            }\n            video.srcObject = peerRef.streams.video[nextIndex].stream;\n          }\n        } else {\n          RTCCom.consoleSrv.log(\n            `ERROR: ${remoteSocketId} has video length = ${peerRef.streams.video.length}`\n          );\n        }\n      } else {\n        RTCCom.consoleSrv.log(`ERROR: ${remoteSocketId} has no video element`);\n      }\n    } else {\n      if (peerRef.streams.video.length > videoId) {\n        const currentStream = peerRef.streams.video[videoId];\n        if (video) {\n          RTCCom.consoleSrv.log(\n            `STREAM ASSIGN: socketId: ${remoteSocketId} ${RTCCom.printMediaStream(\n              currentStream.stream\n            )}`\n          );\n          RTCCom.assignSrc(video, currentStream.stream);\n        } else {\n          RTCCom.consoleSrv.log(`ERROR: ${remoteSocketId} has no video element`);\n        }\n      } else {\n        RTCCom.consoleSrv.log(\n          `ERROR: ${remoteSocketId} has no index ${videoId} because has length ${peerRef.streams.video.length}`\n        );\n      }\n    }\n  }\n\n  // RTCCom.printMediaStream()\n  static printMediaStream(stream: MediaStream | null) {\n    if (!stream) {\n      return 'null';\n    } else {\n      return `Stream: ${stream.id} ${stream.active}${stream.getAudioTracks().length > 0 ? ' AUDIO' : ''\n        }${stream.getVideoTracks().length > 0 ? ' VIDEO' : ''}`;\n    }\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  ViewChildren,\n} from '@angular/core';\nimport { FlowchartService } from '../../services/flowchart.service';\nimport { CallService } from '../../services/call.service';\nimport { MyTuples } from '@ejfdelgado/ejflab-common/src/MyTuples';\nimport { SendLiveChangesProcessor } from './processors/SendLiveChangesProcessor';\nimport { Socket } from 'socket.io-client';\nimport { MyCookies } from '@ejfdelgado/ejflab-common/src/MyCookies';\nimport { ImagiationDataQuery } from '../../services/imagiation.service';\nimport { MyDatesFront } from '@ejfdelgado/ejflab-common/src/MyDatesFront';\nimport { PromiseEmitter } from './PromiseEmitter';\nimport { ModalService } from '../../services/modal.service';\nimport { RTCCom } from './RTCCom';\nimport { ModuloSonido } from '@ejfdelgado/ejflab-common/src/ModuloSonido';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { ConsoleService } from '../../services/console.service';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport interface FlowChartRef {\n  room?: string;\n  names: { [key: string]: string };\n  multiples: { [key: string]: string };\n  dataVal?: { [key: string]: any };\n  dataPath: { [key: string]: string };\n  conf: { sleep: number; debug: boolean };\n  autoStart?: boolean;\n}\n\nexport interface LiveModelConfigData {\n  roomName: string;\n  MAX_SEND_SIZE: number;\n  LOW_PRESSURE_MS: number;\n  BACK_OFF_MULTIPLIER: number;\n}\n\nexport interface ChangesData {\n  r: string;\n  t: string;\n  orig?: string | null;\n  '+': Array<{ k: string; v: string }>;\n  '-': Array<{ k: string; v: string }>;\n  '*': Array<{ k: string; v: string }>;\n  total: number;\n}\n\n@Component({\n  selector: 'app-context-component',\n  template: ` <div></div> `,\n  styles: [],\n})\nexport abstract class ContextComponent implements OnInit, OnDestroy {\n  @ViewChildren('remote_video') remoteVideoRefs: QueryList<ElementRef>;\n  @ViewChildren('remote_audio') remoteAudioRefs: QueryList<ElementRef>;\n  log: Array<string> = [];\n  errors: Array<string> = [];\n  socketId?: string | null = null;\n  userList: Array<string> = [];\n  builder: any;\n  livemodel: any = {};\n  connectionState: string = 'offline';\n  builderConfig: LiveModelConfigData = {\n    roomName: 'public',\n    MAX_SEND_SIZE: 1000,\n    LOW_PRESSURE_MS: 100,\n    BACK_OFF_MULTIPLIER: 100,\n  };\n  querySearchParams: ImagiationDataQuery = {\n    max: 10,\n    min_offset: 0,\n    offset: 0,\n    max_date: 0,\n    min_date: 0,\n    max_count: 0,\n  };\n  disconnectPromise: PromiseEmitter | null = null;\n\n  constructor(\n    public flowchartSrv: FlowchartService,\n    public callService: CallService,\n    public modalService: ModalService,\n    public cdr: ChangeDetectorRef,\n    public consoleSrv: ConsoleService,\n  ) {\n    const urlParams = new URLSearchParams(window.location.search);\n    // Override room from query param\n    this.builderConfig.roomName = this.readQueryParam(\n      urlParams,\n      'room',\n      'text',\n      'public'\n    );\n  }\n\n  ngOnInit(): void {\n    this.setModel({});\n  }\n\n  getRoot() {\n    return MyConstants.SRV_ROOT;\n  }\n\n  abstract bindEvents(): any;\n\n  async processOutgoingChanges(payload: ChangesData) {\n    new SendLiveChangesProcessor(this).execute(payload);\n  }\n\n  trackChanges(filterRoutes: Array<string>) {\n    const differences1: ChangesData = this.builder.trackDifferences(\n      this.livemodel,\n      [],\n      null,\n      filterRoutes\n    );\n    //this.consoleSrv.log(JSON.stringify(differences1, null, 4));\n    if (differences1.total > 0) {\n      differences1.orig = this.socketId;\n      this.builder.affect(differences1);\n    }\n  }\n\n  getCallServiceInstance() {\n    const roomName = this.builderConfig.roomName;\n    //this.consoleSrv.log(`getCallServiceInstance for ${roomName}`);\n    return this.callService.getInstance(roomName);\n  }\n\n  async socketIoReconnect(config?: LiveModelConfigData) {\n    await this.socketIoDisconnect();\n    setTimeout(async () => {\n      await this.socketIoConnect(config);\n    }, 0);\n  }\n\n  async socketIoConnect(config?: LiveModelConfigData, model?: any) {\n    if (config) {\n      this.builderConfig = config;\n    }\n    try {\n      const waitUntilConnection = false;\n      const socket = await this.getCallServiceInstance().beginConnection(\n        {\n          room: this.builderConfig.roomName,\n          uuid: this.getSessionStorageValue('ANONYMOUS_USER'),\n          model: model ? JSON.stringify(model) : undefined,\n        },\n        waitUntilConnection\n      );\n      if (this.socketId === null) {\n        this.bindEvents();\n        this.bindBasic(socket);\n      }\n      await this.getCallServiceInstance().waitUntilConnection();\n      this.connectionState = 'online';\n      this.getCallServiceInstance().emitEvent('askRoom', {\n        room: this.builderConfig.roomName,\n      });\n    } catch (err: any) {\n      this.connectionState = 'offline';\n    }\n  }\n\n  bindBasic(socket: Socket) {\n    const instance = this.getCallServiceInstance();\n    socket.on('connect', () => {\n      this.disconnectPromise = new PromiseEmitter();\n      this.consoleSrv.log(\n        `context: ${new Date()} connect to ${this.builderConfig.roomName\n        } with ${socket.id}`\n      ); // OK\n      this.connectionState = 'online';\n      this.socketId = socket.id;\n      instance.emitEvent('getModel', {});\n    });\n    socket.on('disconnect', () => {\n      if (this.disconnectPromise) {\n        this.disconnectPromise.resolve({});\n      }\n      this.consoleSrv.log(\n        `context: ${new Date()} disconnect from ${this.builderConfig.roomName}`\n      ); // OK\n      this.connectionState = 'offline';\n      this.socketId = null;\n    });\n    socket.on('reconnect', () => {\n      this.consoleSrv.log('context: reconnect...'); //Not fired\n      this.connectionState = 'online';\n      this.socketId = socket.id;\n      instance.emitEvent('getModel', {});\n    });\n    socket.on('reconnecting', (nextRetry) => {\n      this.consoleSrv.log('context: reconnecting...'); //Not fired\n      this.connectionState = 'reconnecting';\n      this.socketId = null;\n    });\n    socket.on('reconnect_failed', () => {\n      this.consoleSrv.log('context: reconnect_failed...'); //Not fired\n      this.connectionState = 'offline';\n      this.socketId = null;\n    });\n    socket.on('flowchartLoaded', () => {\n      this.onFlowChartLoaded();\n    });\n    socket.on('flowchartUnloaded', () => {\n      this.onFlowChartUnloaded();\n      this.errors = [];\n      this.cdr.detectChanges();\n    });\n    socket.on('myerror', (errorDate) => {\n      const date = MyDatesFront.formatDateCompleto(new Date());\n      const nuevo: Array<string> = [date + ': ' + errorDate.message];\n      Array.prototype.push.apply(nuevo, this.errors);\n      this.errors = nuevo;\n    });\n  }\n\n  async onFlowChartLoaded() { }\n\n  async onFlowChartUnloaded() { }\n\n  async socketIoDisconnect() {\n    this.consoleSrv.log('socketIoDisconnect');\n    const instance = this.getCallServiceInstance();\n    if (!instance) {\n      return;\n    }\n    instance.unregisterAllProcessors();\n    instance.endConnection();\n    this.userList = [];\n    this.socketId = null;\n    this.log = [];\n    if (this.disconnectPromise) {\n      await this.disconnectPromise.then;\n    }\n  }\n\n  setModel(model: any) {\n    this.livemodel = model;\n    this.builder = MyTuples.getBuilder(this.builderConfig);\n    const processOutgoingChangesThis = this.processOutgoingChanges.bind(this);\n    this.builder.setProcesor(processOutgoingChangesThis);\n    this.builder.build(this.livemodel);\n    this.builder.end();\n  }\n\n  loadFlowChart(flowChartRef: FlowChartRef) {\n    this.getCallServiceInstance().emitEvent('loadFlowchart', flowChartRef);\n    this.errors = [];\n  }\n\n  async destroyModel() {\n    const response = await this.modalService.confirm({\n      title: '¿Está seguro?',\n      txt: 'Esta acción no se puede deshacer.',\n    });\n    if (!response) {\n      return;\n    }\n    this.getCallServiceInstance().emitEvent('destroyModel', {});\n  }\n\n  async connectToRoomName(roomName: string, disconnect: boolean = true) {\n    //this.consoleSrv.log(`Disconnect from ${this.builderConfig.roomName}`);\n    if (this.callService.isConnectedToRoom(roomName)) {\n      // Already connected\n      if (disconnect === true) {\n        // Force disconnection\n        await this.socketIoDisconnect();\n      }\n    } else {\n      // Disconnect from wherever it is connected\n      await this.socketIoDisconnect();\n    }\n    this.builderConfig = {\n      roomName,\n      MAX_SEND_SIZE: 1000,\n      LOW_PRESSURE_MS: 100,\n      BACK_OFF_MULTIPLIER: 100,\n    };\n    //this.consoleSrv.log(`Connect to ${roomName}`);\n    await this.socketIoConnect(this.builderConfig);\n  }\n\n  setSessionStorageValue(key: string, value: string) {\n    sessionStorage.setItem(key, value);\n  }\n\n  getSessionStorageValue(key: string) {\n    return sessionStorage.getItem(key);\n  }\n\n  setCookie(cname: string, cvalue: string, exdays: number = 10000) {\n    return MyCookies.setCookie(cname, cvalue, exdays);\n  }\n\n  getCookie(cname: string) {\n    return MyCookies.getCookie(cname);\n  }\n\n  deleteCookie(cname: string) {\n    return MyCookies.deleteCookie(cname);\n  }\n\n  async ngOnDestroy() {\n    await this.socketIoDisconnect();\n  }\n\n  readQueryParam(\n    urlParams: URLSearchParams,\n    name: string,\n    type: string,\n    defValue: any\n  ) {\n    let val = defValue;\n    const raw = urlParams.get(name);\n    if (type == 'number') {\n      if (raw != null) {\n        val = parseInt(raw);\n        if (isNaN(val)) {\n          val = defValue;\n        }\n      }\n    } else {\n      val = raw;\n    }\n    if (!val) {\n      val = defValue;\n    }\n    return val;\n  }\n\n  readQueryparams() {\n    const urlParams = new URLSearchParams(window.location.search);\n    this.querySearchParams.min_offset = this.readQueryParam(\n      urlParams,\n      'min_offset',\n      'number',\n      0\n    );\n    this.querySearchParams.max_count = this.readQueryParam(\n      urlParams,\n      'max_count',\n      'number',\n      0\n    );\n    this.querySearchParams.max = this.readQueryParam(\n      urlParams,\n      'max',\n      'number',\n      10\n    );\n    const max_date = this.readQueryParam(urlParams, 'max_date', 'number', 0);\n    if (max_date > 0) {\n      this.querySearchParams.max_date =\n        MyDatesFront.AAAAMMDDhhmmss2unixUTC(max_date);\n    }\n    const min_date = this.readQueryParam(urlParams, 'min_date', 'number', 0);\n    if (min_date > 0) {\n      this.querySearchParams.min_date =\n        MyDatesFront.AAAAMMDDhhmmss2unixUTC(min_date);\n    }\n  }\n\n  downloadTextAsFile(filename: string, text: string) {\n    var element = document.createElement('a');\n    element.setAttribute(\n      'href',\n      'data:text/plain;charset=utf-8,' + encodeURIComponent(text)\n    );\n    element.setAttribute('download', filename);\n    element.style.display = 'none';\n    document.body.appendChild(element);\n    element.click();\n    document.body.removeChild(element);\n  }\n\n  async blob2Base64(blob: Blob): Promise<string> {\n    let reader = new FileReader();\n    reader.readAsDataURL(blob);\n    return new Promise((resolve, reject) => {\n      reader.onloadend = () => {\n        const base64String = reader.result?.toString();\n        if (base64String) {\n          resolve(base64String);\n        } else {\n          reject(Error('El base 64 es vacío'));\n        }\n      };\n      reader.onerror = (err) => {\n        reject(err);\n      };\n    });\n  }\n\n  registerVideoElements() {\n    this.remoteVideoRefs.toArray().forEach((videoRef) => {\n      //this.consoleSrv.log(videoRef);\n      const socketIdRef = videoRef.nativeElement.getAttribute('data-socket-id');\n      this.consoleSrv.log(\n        `registerVideoElements(${socketIdRef}, ${videoRef.nativeElement})`\n      );\n      RTCCom.registerVideoElement(socketIdRef, videoRef.nativeElement);\n    });\n  }\n\n  registerAudioElements() {\n    this.remoteAudioRefs.toArray().forEach((audioRef) => {\n      //this.consoleSrv.log(audioRef);\n      const socketIdRef = audioRef.nativeElement.getAttribute('data-socket-id');\n      this.consoleSrv.log(\n        `registerAudioElements(${socketIdRef}, ${audioRef.nativeElement})`\n      );\n      RTCCom.registerAudioElement(socketIdRef, audioRef.nativeElement);\n    });\n  }\n\n  sleep(min: number, max?: number): Promise<void> {\n    return new Promise((resolve) => {\n      let millis = min;\n      if (typeof max == 'string') {\n        millis = Math.ceil(Math.random() * Math.abs(max - min) + min);\n      }\n      setTimeout(() => {\n        resolve();\n      }, millis);\n    });\n  }\n\n  playSound(argumento: string, loop = false, volume = 1) {\n    ModuloSonido.play(`${MyConstants.SRV_ROOT}assets/sounds/${argumento}`, loop, volume);\n  }\n\n  getSessionUID() {\n    const keyName = 'SESSION_UUID';\n    let oldValue = this.getSessionStorageValue(keyName);\n    if (!oldValue) {\n      const randomId = uuidv4().replace(/-/g, '_');\n      oldValue = `RAND_${randomId}`;\n      this.setSessionStorageValue(keyName, oldValue);\n    }\n    return oldValue;\n  }\n}\n","import { Buffer } from 'buffer';\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Auth, User } from '@angular/fire/auth';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { AuthService } from '../../services/auth.service';\nimport { BackendPageService } from '../../services/backendPage.service';\nimport { FileService } from '../../services/file.service';\nimport { ModalService } from '../../services/modal.service';\nimport {\n  TupleService,\n  TupleServiceInstance,\n} from '../../services/tuple.service';\nimport {\n  WebcamRequestData,\n  WebcamResponseData,\n  WebcamService,\n} from '../../services/webcam.service';\nimport { IdGen } from '@ejfdelgado/ejflab-common/src/IdGen';\nimport { MyDatesFront } from '@ejfdelgado/ejflab-common/src/MyDatesFront';\nimport { FileSaveData } from '../../services/fileInterface';\nimport { ContextComponent } from './context.component';\nimport { FlowchartService } from '../../services/flowchart.service';\nimport { CallService } from '../../services/call.service';\nimport { PageData } from '../../interfaces/login-data.interface';\nimport { ConsoleService } from '../../services/console.service';\n\nexport interface FileBase64Data {\n  base64?: string;\n  name: string;\n  type: string;\n  key?: string;\n}\n\n@Component({\n  selector: 'app-base',\n  template: ` <div></div> `,\n  styles: [],\n})\nexport abstract class BaseComponent\n  extends ContextComponent\n  implements OnInit, OnDestroy {\n  tupleModel: any | null = null;\n  page: PageData | null = null;\n  currentUser: User | null = null;\n  loginSubscription: Subscription | null = null;\n  pageSubscription: Subscription | null = null;\n  tupleSubscription: Subscription | null = null;\n  tupleServiceInstance: TupleServiceInstance | null;\n  saveState: string | null = null;\n\n  constructor(\n    public override flowchartSrv: FlowchartService,\n    public override callService: CallService,\n    public route: ActivatedRoute,\n    public pageService: BackendPageService,\n    public override cdr: ChangeDetectorRef,\n    public authService: AuthService,\n    public dialog: MatDialog,\n    public tupleService: TupleService,\n    public fileService: FileService,\n    public override modalService: ModalService,\n    public webcamService: WebcamService,\n    public auth: Auth,\n    public override consoleSrv: ConsoleService,\n  ) {\n    super(flowchartSrv, callService, modalService, cdr, consoleSrv);\n  }\n\n  private setCurrentUser(user: User | null) {\n    this.currentUser = user;\n    this.cdr.detectChanges();\n  }\n\n  async openWebcam(request: WebcamRequestData): Promise<WebcamResponseData> {\n    return this.webcamService.openWebcam(request);\n  }\n\n  async generateId(): Promise<string> {\n    const time = MyDatesFront.getServerTime();\n    let respuesta: string | null = await IdGen.nuevo(time);\n    if (respuesta) {\n      return respuesta;\n    } else {\n      return '';\n    }\n  }\n\n  private updateDinamicallyOgData(page: PageData | null) {\n    if (page != null) {\n      if (page.tit) {\n        document.title = page.tit;\n        // document.getElementById('meta_page_id')?.getAttribute(\"content\");\n        const metaPageId = document.getElementById('meta_page_id');\n        if (metaPageId && typeof page.id == 'string') {\n          metaPageId.setAttribute('content', page.id);\n        }\n      }\n    }\n  }\n\n  public async saveTextFile(options: FileSaveData, suffix: string = '') {\n    options.base64 =\n      'data:text/plain;base64,' +\n      Buffer.from(options.base64, 'utf8').toString('base64');\n    return this.saveFile(options);\n  }\n\n  public async saveFile(options: FileSaveData, suffix: string = '') {\n    try {\n      const response = await this.fileService.save(options);\n      response.key = response.key + '?t=' + new Date().getTime() + suffix;\n      return response;\n    } catch (err: any) {\n      this.modalService.error(err);\n      throw err;\n    }\n  }\n\n  public addKeyListener(key: string, callback: Function) {\n    if (this.tupleServiceInstance) {\n      this.tupleServiceInstance.addListener(key, callback);\n    } else {\n      throw new Error('No puede configurar el evento');\n    }\n  }\n\n  public removeKeyListener(key: string, callback?: Function) {\n    if (this.tupleServiceInstance) {\n      this.tupleServiceInstance.removeListener(key, callback);\n    } else {\n      throw new Error('No puede configurar el evento');\n    }\n  }\n\n  public saveTuple() {\n    if (this.tupleServiceInstance) {\n      this.tupleServiceInstance.setBlackKeyPatterns([\n        /models\\.[^.]+\\.videoUrl$/,\n      ]);\n      this.tupleServiceInstance.save(this.tupleModel);\n    }\n  }\n\n  getPageTitle() {\n    if (this.page) {\n      return this.page.tit ? this.page.tit : 'Título';\n    } else {\n      return 'Título';\n    }\n  }\n\n  usePage(): boolean {\n    return true;\n  }\n\n  override async ngOnInit(): Promise<void> {\n    super.ngOnInit();\n    const updateDinamicallyOgDataThis = this.updateDinamicallyOgData.bind(this);\n    this.pageSubscription = this.pageService.evento.subscribe(\n      updateDinamicallyOgDataThis\n    );\n\n    this.auth.onAuthStateChanged(async (user) => {\n      if (user == null) {\n        this.page = null;\n        this.setCurrentUser(null);\n      } else {\n        const promesas: Array<Promise<any>> = [];\n        if (this.usePage()) {\n          promesas.push(this.pageService.getCurrentPage());\n        } else {\n          promesas.push(new Promise((resolve) => {\n            resolve({});\n          }));\n        }\n        promesas.push(this.authService.getCurrentUser());\n\n        const respuestas = await Promise.all(promesas);\n        this.page = respuestas[0];\n        this.setCurrentUser(respuestas[1]);\n        this.loginSubscription = this.authService\n          .getLoginEvent()\n          .subscribe((user: User | null) => {\n            this.setCurrentUser(user);\n          });\n        this.route.params.subscribe((params) => {\n          let pageId = null;\n          if ('id' in params) {\n            pageId = params['id'];\n          } else {\n            if (this.page && this.page.id) {\n              pageId = this.page.id;\n            }\n          }\n          if (pageId) {\n            // Try to read tuples, should be optional\n            this.tupleServiceInstance = this.tupleService.getReader(pageId);\n            this.tupleSubscription = this.tupleServiceInstance.evento.subscribe(\n              (evento) => {\n                //console.log(JSON.stringify(evento));\n                if (evento.status == 'read_wip') {\n                  // Show read indicator\n                  this.saveState = 'processing';\n                } else if (evento.status == 'read_done') {\n                  // Stop read indicator\n                  this.tupleModel = evento.body;\n                  this.onTupleReadDone();\n                  this.saveState = 'done';\n                } else if (evento.status == 'news') {\n                  // Stop read indicator\n                  this.tupleModel = evento.body;\n                  this.onTupleNews();\n                } else if (evento.status == 'save_wip') {\n                  // Show write indicator\n                  this.saveState = 'processing';\n                } else if (evento.status == 'save_done') {\n                  // Stop write indicator\n                  this.saveState = 'done';\n                  this.onTupleWriteDone();\n                }\n              }\n            );\n          }\n        });\n      }\n    });\n  }\n\n  onTupleReadDone() {\n    // detect changes\n    this.cdr.detectChanges();\n  }\n\n  onTupleNews() {\n    // detect changes\n    this.cdr.detectChanges();\n  }\n\n  onTupleWriteDone() { }\n\n  override async ngOnDestroy() {\n    await super.ngOnDestroy();\n    if (this.loginSubscription) {\n      this.loginSubscription.unsubscribe();\n    }\n    if (this.pageSubscription) {\n      this.pageSubscription.unsubscribe();\n    }\n    if (this.tupleSubscription) {\n      this.tupleSubscription.unsubscribe();\n    }\n  }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CallService } from '../../services/call.service';\nimport { FlowchartService } from '../../services/flowchart.service';\nimport {\n  MicrosoftAuthService,\n  UserMicrosoft,\n} from '../../services/microsoftAuth.service';\nimport { ContextComponent } from './context.component';\nimport { ModalService } from '../../services/modal.service';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ConsoleService } from '../../services/console.service';\n\n@Component({\n  selector: 'app-base',\n  template: ` <div></div> `,\n  styles: [],\n})\nexport abstract class BaseMsComponent\n  extends ContextComponent\n  implements OnInit, OnDestroy {\n  currentUser: UserMicrosoft | null = null;\n  currentUserUID: string = '';\n  userSubscription: Subscription | null = null;\n  srcImageBlob: any;\n  constructor(\n    public override flowchartSrv: FlowchartService,\n    public override callService: CallService,\n    public authSrv: MicrosoftAuthService,\n    public override modalService: ModalService,\n    public override cdr: ChangeDetectorRef,\n    public override consoleSrv: ConsoleService,\n  ) {\n    super(flowchartSrv, callService, modalService, cdr, consoleSrv);\n  }\n  override async ngOnInit(): Promise<void> {\n    super.ngOnInit();\n    this.userSubscription = this.authSrv.onAuthStateChanged(\n      (user: UserMicrosoft | null) => {\n        this.currentUser = user;\n        //this.getAvatarImage(user);\n      }\n    );\n  }\n  override async ngOnDestroy() {\n    await super.ngOnDestroy();\n    if (this.userSubscription) {\n      this.userSubscription.unsubscribe();\n    }\n  }\n  async logout() {\n    await this.authSrv.logout();\n  }\n\n  async login(force: boolean = false) {\n    await this.authSrv.login(force);\n  }\n\n  async getCurrentUserUID() {\n    const keyName = 'ANONYMOUS_USER';\n    if (this.currentUser == null) {\n      // Ask the cookie\n      let oldValue = this.getSessionStorageValue(keyName);\n      if (!oldValue) {\n        // If not cookie, create id and store it in the cookie\n        let roomName = this.authSrv.getRoomNameFromPath();\n        if (!roomName) {\n          roomName = 'public';\n        }\n        const randomId = uuidv4().replace(/-/g, '_');\n        oldValue = `pat_${roomName}_${randomId}`;\n        this.setSessionStorageValue(keyName, oldValue);\n      }\n      // Return cookie value\n      this.currentUserUID = oldValue;\n      return oldValue;\n    } else {\n      this.currentUserUID =\n        'sig_' + this.authSrv.getRoomNameFromUser(this.currentUser);\n      this.setSessionStorageValue(keyName, this.currentUserUID);\n      return this.currentUserUID;\n    }\n  }\n\n  getCurrentSrcImage() {\n    if (this.srcImageBlob) {\n      return this.srcImageBlob;\n    } else {\n      return this.getRoot() + `assets/img/avatar.svg`;\n    }\n  }\n\n  async getAvatarImage(user: UserMicrosoft | null) {\n    if (!user) {\n      this.srcImageBlob = null;\n      return;\n    }\n    const username = user.username;\n    const sessionToken = await this.authSrv.getSessionToken();\n\n    // ProfilePhoto.Read.All\n    // ShowProfilePicToGuestUsers\n\n    //const src = `https://graph.microsoft.com/v1.0/users/${username}/photo/$value`;\n    const src = `https://graph.microsoft.com/v1.0/users/EJDelgado@NogalesPsychological.com/photo/$value`;\n    //const src = `https://graph.microsoft.com/v1.0/me/photo/$value`;\n    const options = {\n      headers: {\n        Authorization: `Bearer ${sessionToken}`,\n      },\n    };\n\n    const promise = new Promise((resolve, reject) => {\n      fetch(src, options)\n        .then((res) => res.blob())\n        .then((blob) => {\n          resolve(URL.createObjectURL(blob));\n        })\n        .catch((err) => {\n          reject(err);\n        });\n    });\n    this.srcImageBlob = await promise;\n    return promise;\n  }\n\n  isUserInAllGroup(groups: string[]) {\n    return this.authSrv.isUserInGroupInternal(this.currentUser, groups, true);\n  }\n\n  isUserInSomeGroup(groups: string[]) {\n    return this.authSrv.isUserInGroupInternal(this.currentUser, groups, false);\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Buffer } from 'buffer';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ModalService } from '../../services/modal.service';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { FileBase64Data } from '../base/base.component';\nimport { FileResponseData, FileService } from '../../services/file.service';\nimport { FileSaveData } from '../../services/fileInterface';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\n\nexport interface BlobOptionsData {\n  useRoot?: string;\n  isEditable?: boolean;\n  autosave?: boolean;\n  isPublic?: boolean;\n  isFake?: boolean;\n}\n\n@Component({\n  selector: 'app-blobeditor',\n  templateUrl: './blobeditor.component.html',\n  styleUrls: ['./blobeditor.component.css'],\n})\nexport class BlobeditorComponent implements OnInit {\n  @Input() options: BlobOptionsData;\n  @Input() subFolder?: string;\n  @Input() url: string | null;\n  @Output() urlChange = new EventEmitter<string | null>();\n  @Output() eventSave = new EventEmitter<FileBase64Data>();\n  constructor(\n    private httpClient: HttpClient,\n    private clipboard: Clipboard,\n    private modalSrv: ModalService,\n    public fileService: FileService\n  ) {}\n\n  ngOnInit(): void {}\n\n  makePublic() {\n    //console.log(`this.url=${this.url}`);\n  }\n\n  async download() {\n    const theUrl = MyConstants.getCompleteUrl(this.url + '&download=1');\n    if (theUrl) {\n      window.open(theUrl, '_blank');\n    }\n  }\n\n  async share() {\n    const theUrl = MyConstants.getCompleteUrl(this.url);\n    if (theUrl) {\n      this.clipboard.copy(theUrl);\n      this.modalSrv.alert({ title: 'Ok!', txt: 'Enlace copiado' });\n    }\n  }\n\n  getFileName() {\n    if (!this.url) {\n      return '';\n    } else {\n      const partes = /[^/]+$/g.exec(this.url);\n      if (partes != null) {\n        return partes[0].replace(/[?].*$/, '');\n      } else {\n        return '';\n      }\n    }\n  }\n\n  public async saveFile(options: FileSaveData, suffix: string = '') {\n    try {\n      const response = await this.fileService.save(options);\n      response.key = response.key + '?t=' + new Date().getTime() + suffix;\n      return response;\n    } catch (err: any) {\n      this.modalSrv.error(err);\n      throw err;\n    }\n  }\n\n  askForFile() {\n    const processFileThis = this.processFile.bind(this);\n    this.fileService.sendRequest({ type: 'file' }, processFileThis);\n  }\n  getSubFolder(): string {\n    if (typeof this.subFolder == 'string') {\n      // Se asegura que no comience con slash y que termine con slash y que no tenga backslash\n      return (\n        this.subFolder\n          .replace(/[\\\\]/, '/')\n          .replace(/^[/]/, '')\n          .replace(/[/]$/, '')\n          .replace(/[/]{2,}/, '/') + '/'\n      );\n    } else {\n      return '';\n    }\n  }\n  async processFile(responseData: FileResponseData) {\n    const simpleFun = async (\n      responseDatabase64: string,\n      responseDatafileName: string\n    ) => {\n      if (this.options.isFake) {\n        // Convert base64 to blob Url\n        const indice = responseDatabase64.indexOf(';base64,');\n        let mimeType = responseDatabase64.substring(0, indice);\n        mimeType = mimeType.replace(/^data:/, '');\n        const base64 = responseDatabase64.substring(indice + 8);\n        const buff = Buffer.from(base64, 'base64');\n        const blob = new Blob([buff], { type: mimeType });\n        const nextUrl = URL.createObjectURL(blob);\n        if (typeof this.url == 'string' && this.url.startsWith('blob:')) {\n          URL.revokeObjectURL(this.url);\n        }\n        this.url = nextUrl;\n        this.urlChange.emit(this.url);\n      } else {\n        if (this.options.autosave === true) {\n          const response = await this.saveFile({\n            base64: responseDatabase64,\n            fileName: this.getSubFolder() + responseDatafileName,\n            erasefile: this.url, // send old file\n            isPublic: this.options.isPublic,\n          });\n          this.url = response.key;\n          this.urlChange.emit(this.url);\n        } else {\n          this.eventSave.emit({\n            base64: responseDatabase64,\n            name: responseDatafileName,\n            type: 'blob',\n          });\n        }\n      }\n    };\n    if (responseData.base64 instanceof Array) {\n      const fileNamesArray: any = responseData.fileName;\n      for (let i = 0; i < responseData.base64.length; i++) {\n        const responseDatabase64 = responseData.base64[i];\n        const responseDatafileName = fileNamesArray[i];\n        await simpleFun(responseDatabase64, responseDatafileName);\n      }\n    } else {\n      const responseDatafileName: any = responseData.fileName;\n      await simpleFun(responseData.base64, responseDatafileName);\n    }\n  }\n}\n","<div class=\"menu_container\">\n    <div class=\"generic_icon\" [matMenuTriggerFor]=\"myMenu\" aria-label=\"Menú\">\n        <mat-icon>menu</mat-icon>\n    </div>\n    <mat-menu #myMenu=\"matMenu\">\n        <button *ngIf=\"url != null\" (click)=\"share()\" mat-menu-item>\n            <mat-icon>share</mat-icon>\n            <span>Copiar enlace</span>\n        </button>\n        <button *ngIf=\"url != null\" (click)=\"download()\" mat-menu-item>\n            <mat-icon>download</mat-icon>\n            <span>Descagar archivo</span>\n        </button>\n        <button (click)=\"askForFile()\" mat-menu-item>\n            <mat-icon>upload_file</mat-icon>\n            <span>Subir archivo</span>\n        </button>\n    </mat-menu>\n    <div class=\"etiqueta_archivo\">{{ getFileName() }}</div>\n</div>","import { HttpClient } from '@angular/common/http';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { map, Observable, of } from 'rxjs';\nimport { FileService } from '../../services/file.service';\nimport { FileRequestData } from '../../services/fileInterface';\nimport { IndicatorService } from '../../services/indicator.service';\nimport { ModalService } from '../../services/modal.service';\n\nexport interface KeyUrlPairData {\n  key: string;\n  url: string;\n}\n\nexport interface UrlBlobPairData {\n  blob: Blob;\n  url: string;\n}\n\nexport interface CanvasOptionsData {\n  width: number;\n  height: number;\n  useRoot?: string;\n}\n\nexport interface StrokeOptionsData {\n  lineCap?: CanvasLineCap;\n  lineJoin?: CanvasLineJoin;\n  strokeStyle?: string;\n  lineWidth?: number;\n}\n\nexport interface StrokeOptionsMenuData {\n  txt: string;\n  icon: string;\n  option: StrokeOptionsData;\n}\n\nexport interface ImagesUrlData {\n  sketch?: string;\n  actor?: string;\n  background?: string;\n  merged?: string;\n}\n\nexport interface ImagesChangedData {\n  sketch?: boolean;\n  actor?: boolean;\n  background?: boolean;\n}\n\nexport interface PickedData {\n  color: Uint8ClampedArray;\n  hsv?: Array<number>;\n  hsl?: Array<number>;\n  x: number;\n  y: number;\n}\n\nexport interface SeedData {\n  x: number;\n  y: number;\n}\n\n@Component({\n  selector: 'app-canvaseditor',\n  templateUrl: './canvaseditor.component.html',\n  styleUrls: ['./canvaseditor.component.css'],\n})\nexport class CanvaseditorComponent implements OnInit, OnChanges {\n  static MAX_UNDO_SIZE = 6;\n  static HUE_SIMILITUD_360 = 10;\n  static SAT_MIN = 0.4;\n  static VAL_MIN = 0.3;\n  static MAPEO_MODES: any = {\n    edit_sketch: 'sketch',\n    edit_actor: 'actor',\n    edit_background: 'background',\n  };\n  @Input() options: CanvasOptionsData;\n  @Input() defaultFileName: ImagesUrlData;\n  @Input() defaultUrl: ImagesUrlData;\n  @Input() url: ImagesUrlData | undefined;\n  @Output() urlChange = new EventEmitter<ImagesUrlData>();\n\n  @ViewChild('eventsContainer') eventsContainerRef: ElementRef;\n\n  @ViewChild('canvas') canvasRef: ElementRef;\n  private canvas: HTMLCanvasElement;\n  private context: CanvasRenderingContext2D | null;\n\n  @ViewChild('canvasGreen') canvasGreenRef: ElementRef;\n  private canvasGreen: HTMLCanvasElement;\n  private contextGreen: CanvasRenderingContext2D | null;\n\n  @ViewChild('canvasBackground') canvasBackgroundRef: ElementRef;\n  private canvasBackground: HTMLCanvasElement;\n  private contextBackground: CanvasRenderingContext2D | null;\n\n  @ViewChild('canvasMerged') canvasMergedRef: ElementRef;\n  private canvasMerged: HTMLCanvasElement;\n  private contextMerged: CanvasRenderingContext2D | null;\n\n  threshold = 40;\n  isWorkingHard = false;\n  mode: string = 'none';\n  private isDragging: boolean;\n\n  private pickedPoint: PickedData | null = null;\n  private clickX: number[] = [];\n  private clickY: number[] = [];\n  private clickDrag: boolean[] = [];\n  private snapshots: Map<string, Array<Blob>> = new Map();\n\n  private changes: ImagesChangedData = {\n    actor: false,\n    background: false,\n    sketch: false,\n  };\n\n  menuSize: Array<StrokeOptionsMenuData> = [\n    {\n      txt: 'Pequeño',\n      option: { lineWidth: 3 },\n      icon: 'looks_one',\n    },\n    {\n      txt: 'Mediano',\n      option: { lineWidth: 10 },\n      icon: 'looks_two',\n    },\n    {\n      txt: 'Grande',\n      option: { lineWidth: 20 },\n      icon: 'looks_3',\n    },\n  ];\n\n  menuColors: Array<StrokeOptionsMenuData> = [\n    {\n      txt: 'Negro',\n      option: { strokeStyle: '#000000' },\n      icon: 'radio_button_checked',\n    },\n    {\n      txt: 'Amarillo',\n      option: { strokeStyle: '#FCFF26' },\n      icon: 'radio_button_checked',\n    },\n    {\n      txt: 'Azul',\n      option: { strokeStyle: '#265BFF' },\n      icon: 'radio_button_checked',\n    },\n    {\n      txt: 'Rojo',\n      option: { strokeStyle: '#FF2626' },\n      icon: 'radio_button_checked',\n    },\n    {\n      txt: 'Verde',\n      option: { strokeStyle: '#26FF26' },\n      icon: 'radio_button_checked',\n    },\n    {\n      txt: 'Blanco',\n      option: { strokeStyle: '#FFFFFF' },\n      icon: 'radio_button_checked',\n    },\n  ];\n\n  lastStrokeColor: StrokeOptionsData;\n  lastStrokeSize: StrokeOptionsData;\n  lastTool: string;\n\n  constructor(\n    private modalSrv: ModalService,\n    public fileService: FileService,\n    private httpClient: HttpClient,\n    private indicatorSrv: IndicatorService\n  ) {\n    this.lastStrokeColor = this.menuColors[0].option;\n    this.lastStrokeSize = this.menuSize[0].option;\n  }\n\n  ngOnInit(): void {\n    setTimeout(() => {\n      this.canvas = this.canvasRef.nativeElement;\n      this.canvas.width = this.options.width;\n      this.canvas.height = this.options.height;\n      this.context = this.canvas.getContext('2d');\n\n      this.canvasGreen = this.canvasGreenRef.nativeElement;\n      this.canvasGreen.width = this.options.width;\n      this.canvasGreen.height = this.options.height;\n      this.contextGreen = this.canvasGreen.getContext('2d');\n\n      this.canvasBackground = this.canvasBackgroundRef.nativeElement;\n      this.canvasBackground.width = this.options.width;\n      this.canvasBackground.height = this.options.height;\n      this.contextBackground = this.canvasBackground.getContext('2d');\n\n      this.canvasMerged = this.canvasMergedRef.nativeElement;\n      this.canvasMerged.width = this.options.width;\n      this.canvasMerged.height = this.options.height;\n      this.contextMerged = this.canvasMerged.getContext('2d');\n\n      if (!this.context) {\n        return;\n      }\n\n      this.setStrokeOptions({\n        lineCap: 'round',\n        lineJoin: 'round',\n      });\n\n      this.lastTool = 'lapiz';\n      this.setStrokeOptions(this.menuSize[0].option);\n      this.setStrokeOptions(this.lastStrokeColor);\n\n      this.createUserEvents();\n    }, 0);\n  }\n\n  noPropagar(e: any) {\n    e.stopPropagation();\n    e.preventDefault();\n  }\n\n  async askForImage(type: string) {\n    const options: FileRequestData = {\n      type: 'photo',\n    };\n    this.fileService.sendRequest(options, async (response: any) => {\n      await this.localLoadImages(response.base64, type);\n      if (type == 'actor') {\n        this.changes.actor = true;\n      } else if (type == 'background') {\n        this.changes.background = true;\n      }\n    });\n  }\n\n  drawImageScaled(\n    img: HTMLImageElement,\n    ctx: CanvasRenderingContext2D,\n    clear = true\n  ) {\n    let canvas = ctx.canvas;\n    // Sin esto, se borra todo\n    ctx.globalCompositeOperation = 'source-over';\n    let hRatio = canvas.width / img.width;\n    let vRatio = canvas.height / img.height;\n    let ratio = Math.max(hRatio, vRatio);\n    let centerShift_x = (canvas.width - img.width * ratio) / 2;\n    let centerShift_y = (canvas.height - img.height * ratio) / 2;\n    if (clear) {\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n    }\n    ctx.drawImage(\n      img,\n      0,\n      0,\n      img.width,\n      img.height,\n      centerShift_x,\n      centerShift_y,\n      img.width * ratio,\n      img.height * ratio\n    );\n  }\n\n  async getImageElementFromUrl(url: string): Promise<HTMLImageElement> {\n    const newImg = document.createElement('img');\n    return new Promise<HTMLImageElement>((resolve, reject) => {\n      newImg.onload = () => {\n        resolve(newImg);\n      };\n      newImg.src = url;\n    });\n  }\n\n  async localLoadImages(url: string, type: string) {\n    const localUrl = await this.remoteUrlToLocalUrl(url);\n    const newImg: HTMLImageElement = await this.getImageElementFromUrl(\n      localUrl\n    );\n    if (type == 'sketch' && this.context) {\n      this.drawImageScaled(newImg, this.context);\n    } else if (type == 'actor' && this.contextGreen) {\n      this.drawImageScaled(newImg, this.contextGreen);\n    } else if (type == 'background' && this.contextBackground) {\n      this.drawImageScaled(newImg, this.contextBackground);\n    }\n  }\n\n  ngOnChanges(changes: any) {\n    if (changes.url && changes.url.currentValue) {\n      const actual: ImagesUrlData = changes.url.currentValue;\n      if (actual.sketch) {\n        this.localLoadImages(actual.sketch, 'sketch').then(() => {\n          this.takeSnapshot('sketch');\n        });\n      }\n      if (actual.actor) {\n        this.localLoadImages(actual.actor, 'actor').then(() => {\n          this.takeSnapshot('actor');\n        });\n      }\n      if (actual.background) {\n        this.localLoadImages(actual.background, 'background').then(() => {\n          this.takeSnapshot('background');\n        });\n      }\n    }\n  }\n\n  private remoteUrlToLocalUrl(url: string): Promise<string> {\n    if (\n      /^https?:\\/\\/storage\\.googleapis\\.com/i.exec(url) != null ||\n      /^data:image/i.exec(url) != null ||\n      /^blob:/i.exec(url) != null\n    ) {\n      return Promise.resolve(url);\n    }\n    if (!url) {\n      return Promise.resolve('');\n    }\n    let theUrl = url;\n    if (typeof this.options.useRoot == 'string') {\n      theUrl = this.options.useRoot + url.replace(/^\\/+/, '');\n    }\n    return new Promise<string>((resolve, reject) => {\n      this.httpClient\n        .get(theUrl, { responseType: 'blob' })\n        .pipe(\n          map((e) => {\n            return URL.createObjectURL(e);\n          })\n        )\n        .subscribe((response) => {\n          resolve(response);\n        });\n    });\n  }\n\n  async blob2Base64(blob: Blob): Promise<string> {\n    return new Promise((resolve) => {\n      const reader = new FileReader();\n      reader.addEventListener('load', async (event: any) => {\n        const base64 = event.target.result;\n        resolve(base64);\n      });\n      if (blob instanceof Blob) {\n        reader.readAsDataURL(blob);\n      }\n    });\n  }\n\n  async guardarInterno(\n    type: string,\n    blob: Blob | null,\n    fileName: string,\n    oldUrl?: string | null\n  ) {\n    if (!blob) {\n      return;\n    }\n    if (!this.url) {\n      this.url = {};\n    }\n    const response = await this.fileService.save({\n      fileName,\n      base64: await this.blob2Base64(blob),\n      erasefile: oldUrl,\n    });\n    if (type == 'actor') {\n      this.url.actor = response.key + '?t=' + new Date().getTime();\n    } else if (type == 'sketch') {\n      this.url.sketch = response.key + '?t=' + new Date().getTime();\n    } else if (type == 'background') {\n      this.url.background = response.key + '?t=' + new Date().getTime();\n    } else if (type == 'merged') {\n      this.url.merged = response.key + '?t=' + new Date().getTime();\n    }\n  }\n\n  getImageBlobFromCanvas(type: string): Promise<UrlBlobPairData | null> {\n    return new Promise<UrlBlobPairData | null>((resolve, reject) => {\n      let localCanvas = null;\n      let mimeType = 'image/png';\n      let quality = 0.5;\n      if (type == 'sketch') {\n        localCanvas = this.canvas;\n      } else if (type == 'actor') {\n        localCanvas = this.canvasGreen;\n      } else if (type == 'background') {\n        localCanvas = this.canvasBackground;\n        mimeType = 'image/jpeg';\n      } else if (type == 'merged') {\n        localCanvas = this.canvasMerged;\n        mimeType = 'image/jpeg';\n      }\n      if (localCanvas) {\n        localCanvas.toBlob(\n          (temp) => {\n            // Resolve something different\n            if (temp) {\n              resolve({\n                blob: temp,\n                url: URL.createObjectURL(temp),\n              });\n            } else {\n              resolve(null);\n            }\n          },\n          mimeType,\n          quality\n        );\n      }\n    });\n  }\n\n  async guardar() {\n    const fileNames = this.defaultFileName;\n    const promesas = [];\n    const urlsMerge: Array<KeyUrlPairData> = [];\n    if (this.changes.background || this.changes.actor || this.changes.sketch) {\n      promesas.push(\n        new Promise<void>(async (resolve, reject) => {\n          const temp = await this.getImageBlobFromCanvas('background');\n          try {\n            if (fileNames.background && temp) {\n              urlsMerge.push({ key: 'background', url: temp.url });\n              if (this.changes.background) {\n                await this.guardarInterno(\n                  'background',\n                  temp.blob,\n                  fileNames.background,\n                  this.url?.background\n                );\n                this.changes.background = false;\n              }\n            }\n            resolve();\n          } catch (err) {\n            reject();\n          }\n        })\n      );\n\n      promesas.push(\n        new Promise<void>(async (resolve, reject) => {\n          const temp = await this.getImageBlobFromCanvas('actor');\n          try {\n            if (fileNames.actor && temp) {\n              urlsMerge.push({ key: 'actor', url: temp.url });\n              if (this.changes.actor) {\n                await this.guardarInterno(\n                  'actor',\n                  temp.blob,\n                  fileNames.actor,\n                  this.url?.actor\n                );\n                this.changes.actor = false;\n              }\n            }\n            resolve();\n          } catch (err) {\n            reject();\n          }\n        })\n      );\n      promesas.push(\n        new Promise<void>(async (resolve, reject) => {\n          const temp = await this.getImageBlobFromCanvas('sketch');\n          try {\n            if (fileNames.sketch && temp) {\n              urlsMerge.push({ key: 'sketch', url: temp.url });\n              if (this.changes.sketch) {\n                await this.guardarInterno(\n                  'sketch',\n                  temp.blob,\n                  fileNames.sketch,\n                  this.url?.sketch\n                );\n                this.changes.sketch = false;\n              }\n            }\n            resolve();\n          } catch (err) {\n            reject();\n          }\n        })\n      );\n      await Promise.all(promesas);\n      const ORDEN = ['background', 'actor', 'sketch'];\n      urlsMerge.sort((a: KeyUrlPairData, b: KeyUrlPairData): number => {\n        const oa = ORDEN.indexOf(a.key);\n        const ob = ORDEN.indexOf(a.key);\n        return oa - ob;\n      });\n      if (urlsMerge.length > 0) {\n        // Se actualiza el canvas merge\n        await this.mergeImages(urlsMerge);\n        // Se debe guardar el merged\n        const temp = await this.getImageBlobFromCanvas('merged');\n        if (fileNames.merged && temp) {\n          await this.guardarInterno(\n            'merged',\n            temp.blob,\n            fileNames.merged,\n            this.url?.merged\n          );\n        }\n      }\n    }\n\n    this.changeToMode('none');\n    if (promesas.length > 0) {\n      this.urlChange.emit(this.url);\n    }\n  }\n\n  async mergeImages(lista: Array<KeyUrlPairData>) {\n    const contexto = this.contextMerged;\n    const canvas = this.canvasMerged;\n    if (contexto == null) {\n      return;\n    }\n    const promesasImgElements = [];\n    for (let i = 0; i < lista.length; i++) {\n      const urlLocal = lista[i];\n      promesasImgElements.push(this.getImageElementFromUrl(urlLocal.url));\n    }\n\n    const elementos = await Promise.all(promesasImgElements);\n    contexto.clearRect(0, 0, canvas.width, canvas.height);\n    for (let i = 0; i < elementos.length; i++) {\n      const unEleImg = elementos[i];\n      this.drawImageScaled(unEleImg, contexto, false);\n    }\n  }\n\n  useTool(tool: string) {\n    this.lastTool = tool;\n    if (tool == 'lapiz') {\n      this.setStrokeOptions(this.lastStrokeColor);\n      this.setStrokeOptions(this.lastStrokeSize);\n    } else if (tool == 'borrador') {\n      this.setStrokeOptions({\n        strokeStyle: 'rgba(0,0,0,1.0)',\n        lineWidth: 20,\n      });\n    }\n  }\n\n  setStrokeSize(options: StrokeOptionsData) {\n    this.setStrokeOptions(options);\n    this.lastStrokeSize = options;\n  }\n\n  setStrokeColor(options: StrokeOptionsData) {\n    this.setStrokeOptions(options);\n    this.lastStrokeColor = options;\n  }\n\n  setStrokeOptions(options: StrokeOptionsData) {\n    if (!this.context) {\n      return;\n    }\n    if (options.lineCap) {\n      this.context.lineCap = options.lineCap;\n    }\n    if (options.lineJoin) {\n      this.context.lineJoin = options.lineJoin;\n    }\n    if (options.strokeStyle) {\n      this.context.strokeStyle = options.strokeStyle;\n    }\n    if (options.lineWidth) {\n      this.context.lineWidth = options.lineWidth;\n    }\n  }\n\n  private createUserEvents() {\n    if (!this.eventsContainerRef) {\n      return;\n    }\n    const eventsContainerRef = this.eventsContainerRef.nativeElement;\n    eventsContainerRef.addEventListener('mousedown', this.pressEventHandler);\n    eventsContainerRef.addEventListener('mousemove', this.dragEventHandler);\n    eventsContainerRef.addEventListener('mouseup', this.releaseEventHandler);\n    eventsContainerRef.addEventListener('mouseout', this.cancelEventHandler);\n\n    eventsContainerRef.addEventListener('touchstart', this.pressEventHandler);\n    eventsContainerRef.addEventListener('touchmove', this.dragEventHandler);\n    eventsContainerRef.addEventListener('touchend', this.releaseEventHandler);\n    eventsContainerRef.addEventListener('touchcancel', this.cancelEventHandler);\n  }\n\n  private redraw() {\n    let clickX = this.clickX;\n    let context = this.context;\n    if (!context) {\n      return;\n    }\n    let clickDrag = this.clickDrag;\n    let clickY = this.clickY;\n    for (let i = 0; i < clickX.length; ++i) {\n      if (this.lastTool == 'lapiz') {\n        context.globalCompositeOperation = 'source-over';\n      } else if (this.lastTool == 'borrador') {\n        context.globalCompositeOperation = 'destination-out';\n      }\n      context.beginPath();\n      if (clickDrag[i] && i) {\n        context.moveTo(clickX[i - 1], clickY[i - 1]);\n      } else {\n        context.moveTo(clickX[i] - 1, clickY[i]);\n      }\n      context.lineTo(clickX[i], clickY[i]);\n      context.stroke();\n    }\n    this.changes.sketch = true;\n    context.closePath();\n  }\n\n  private addClick(x: number, y: number, dragging: boolean) {\n    this.clickX.push(x);\n    this.clickY.push(y);\n    this.clickDrag.push(dragging);\n  }\n\n  async clearCanvas(option: string) {\n    const response = await this.modalSrv.confirm({\n      title: '¿Está seguro?',\n      txt: 'Esta acción no se puede deshacer.',\n    });\n    if (!response) {\n      return;\n    }\n    let contexto = null;\n    const MAP: any = {\n      sketch: this.context,\n      actor: this.contextGreen,\n      background: this.contextBackground,\n    };\n    contexto = MAP[option];\n    if (!contexto) {\n      return;\n    }\n    contexto.clearRect(0, 0, this.options.width, this.options.height);\n    if (option == 'sketch') {\n      this.changes.sketch = true;\n    } else if (option == 'actor') {\n      this.changes.actor = true;\n    } else if (option == 'background') {\n      this.changes.background = true;\n    }\n    this.takeSnapshot(option);\n  }\n\n  private getGlobalOffset(el: HTMLElement) {\n    let x = 0;\n    let y = 0;\n    x += el.offsetLeft;\n    y += el.offsetTop;\n    if (el.offsetParent) {\n      const response = this.getGlobalOffset(el.offsetParent as HTMLElement);\n      x += response.x;\n      y += response.y;\n    }\n    return {\n      x,\n      y,\n    };\n  }\n\n  private getCoordinatesFromEvent(e: MouseEvent | TouchEvent) {\n    const source = e.target || e.srcElement;\n    const touchEvent = e as TouchEvent;\n    const mouseEvent = e as MouseEvent;\n    const scalingFactor = this.canvas.width / this.canvas.clientWidth;\n    let mouseX = touchEvent.changedTouches\n      ? touchEvent.changedTouches[0].pageX\n      : mouseEvent.pageX;\n    let mouseY = touchEvent.changedTouches\n      ? touchEvent.changedTouches[0].pageY\n      : mouseEvent.pageY;\n    if (source) {\n      const el = source as HTMLElement;\n      const response = this.getGlobalOffset(el);\n      mouseX -= response.x;\n      mouseY -= response.y;\n    }\n\n    mouseX *= scalingFactor;\n    mouseY *= scalingFactor;\n    return {\n      mouseX,\n      mouseY,\n    };\n  }\n\n  private startPaint(mouseX: number, mouseY: number) {\n    this.clickX = [];\n    this.clickY = [];\n    this.clickDrag = [];\n    this.addClick(mouseX, mouseY, false);\n    this.redraw();\n  }\n\n  private pickColor(mouseX: number, mouseY: number) {\n    if (!this.contextGreen) {\n      return;\n    }\n    try {\n      const pixel = this.contextGreen.getImageData(mouseX, mouseY, 1, 1);\n      this.pickedPoint = {\n        color: pixel.data,\n        x: mouseX,\n        y: mouseY,\n      };\n    } catch (err) {\n      console.log(err);\n    }\n  }\n\n  rgb2hsv(r: number, g: number, b: number) {\n    let v = Math.max(r, g, b),\n      c = v - Math.min(r, g, b);\n    let h =\n      c && (v == r ? (g - b) / c : v == g ? 2 + (b - r) / c : 4 + (r - g) / c);\n    return [60 * (h < 0 ? h + 6 : h), v && c / v, v];\n  }\n\n  rgb2hsl(r: number, g: number, b: number) {\n    let v = Math.max(r, g, b),\n      c = v - Math.min(r, g, b),\n      f = 1 - Math.abs(v + v - c - 1);\n    let h =\n      c && (v == r ? (g - b) / c : v == g ? 2 + (b - r) / c : 4 + (r - g) / c);\n    return [60 * (h < 0 ? h + 6 : h), f ? c / f : 0, (v + v - c) / 2];\n  }\n\n  private floodfill(point: SeedData, isEmpty: Function, setPixel: Function) {\n    const stack = Array();\n    stack.push(point); // Push the seed\n    while (stack.length > 0) {\n      var currPoint = stack.pop();\n      if (isEmpty(currPoint)) {\n        // Check if the point is not filled\n        setPixel(currPoint);\n\n        stack.push({ x: currPoint.x + 1, y: currPoint.y });\n        stack.push({ x: currPoint.x, y: currPoint.y + 1 });\n        stack.push({ x: currPoint.x - 1, y: currPoint.y });\n        stack.push({ x: currPoint.x, y: currPoint.y - 1 });\n\n        stack.push({ x: currPoint.x + 1, y: currPoint.y + 1 });\n        stack.push({ x: currPoint.x - 1, y: currPoint.y - 1 });\n        stack.push({ x: currPoint.x + 1, y: currPoint.y - 1 });\n        stack.push({ x: currPoint.x - 1, y: currPoint.y + 1 });\n      }\n    }\n  }\n\n  private pixelBelong(seed: PickedData, actual: PickedData, threshold: number) {\n    if (seed.hsv && actual.hsv) {\n      const diffHue = Math.abs(seed.hsv[0] - actual.hsv[0]);\n      const diffSat = Math.abs(seed.hsv[1] - actual.hsv[1]);\n      const diffVal = Math.abs(seed.hsv[2] - actual.hsv[2]);\n      let condicionHue =\n        diffHue < CanvaseditorComponent.HUE_SIMILITUD_360 * threshold * 2;\n      let condifcionSat = true;\n      let condifcionVal = true;\n      condifcionSat = diffSat < threshold / 2;\n      condifcionVal = diffVal < threshold / 2;\n      return condicionHue && condifcionSat && condifcionVal;\n    }\n    return false;\n  }\n\n  private doSeedPointRegionGrow(context: CanvasRenderingContext2D) {\n    if (this.pickedPoint) {\n      const pickedPoint: PickedData = this.pickedPoint;\n      const data = pickedPoint.color;\n      pickedPoint.hsv = this.rgb2hsv(\n        data[0] / 255,\n        data[1] / 255,\n        data[2] / 255\n      );\n      if (\n        !(\n          pickedPoint.hsv[1] > CanvaseditorComponent.SAT_MIN &&\n          pickedPoint.hsv[2] > CanvaseditorComponent.VAL_MIN\n        )\n      ) {\n        this.modalSrv.alert({\n          title: 'Ups!',\n          txt: `Debes seleccionar una región con más color. Sat:${pickedPoint.hsv[1].toFixed(\n            2\n          )}. Val:${pickedPoint.hsv[2].toFixed(2)}`,\n        });\n        return;\n      }\n\n      //const hsl = this.rgb2hsl(data[0] / 255, data[1] / 255, data[2] / 255);\n      //const rgba = `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${data[3] / 255})`;\n      //console.log(rgba);\n      //console.log(hsv);\n      //console.log(hsl);\n      const actualThreshold = this.threshold / 100;\n      this.floodfill(\n        { x: pickedPoint.x, y: pickedPoint.y },\n        (point: SeedData) => {\n          //pixel belong?\n          const pixel = context.getImageData(point.x, point.y, 1, 1);\n          if (pixel.data[3] == 0) {\n            return false;\n          }\n          const actual: PickedData = {\n            color: pixel.data,\n            x: point.x,\n            y: point.y,\n          };\n          actual.hsv = this.rgb2hsv(\n            pixel.data[0] / 255,\n            pixel.data[1] / 255,\n            pixel.data[2] / 255\n          );\n          return this.pixelBelong(pickedPoint, actual, actualThreshold);\n        },\n        (point: SeedData) => {\n          var id = context.createImageData(1, 1);\n          var d = id.data;\n          d[0] = 0;\n          d[1] = 0;\n          d[2] = 0;\n          d[3] = 0;\n          context.putImageData(id, point.x, point.y);\n        }\n      );\n      this.takeSnapshot();\n      this.pickedPoint = null;\n    }\n  }\n\n  private pressEventHandler = (e: MouseEvent | TouchEvent) => {\n    if (this.isWorkingHard) {\n      return;\n    }\n    const { mouseX, mouseY } = this.getCoordinatesFromEvent(e);\n    this.isDragging = true;\n    if (this.mode == 'edit_actor') {\n      this.pickColor(mouseX, mouseY);\n    } else if (this.mode == 'edit_sketch') {\n      this.startPaint(mouseX, mouseY);\n    }\n  };\n\n  private dragEventHandler = (e: MouseEvent | TouchEvent) => {\n    if (this.isDragging) {\n      const { mouseX, mouseY } = this.getCoordinatesFromEvent(e);\n      if (this.mode == 'edit_actor') {\n        this.pickColor(mouseX, mouseY);\n        e.preventDefault();\n      } else if (this.mode == 'edit_sketch') {\n        this.addClick(mouseX, mouseY, true);\n        this.redraw();\n        e.preventDefault();\n      }\n    }\n  };\n\n  private releaseEventHandler = () => {\n    if (this.mode == 'edit_actor') {\n      if (this.isWorkingHard) {\n        return;\n      }\n      this.isWorkingHard = true;\n      setTimeout(() => {\n        if (this.contextGreen) {\n          this.doSeedPointRegionGrow(this.contextGreen);\n          setTimeout(() => {\n            this.isWorkingHard = false;\n          }, 100);\n        }\n      }, 100);\n    } else if (this.mode == 'edit_sketch') {\n      this.redraw();\n      this.takeSnapshot('sketch');\n    }\n    this.isDragging = false;\n  };\n\n  changeToMode(mode: string) {\n    this.mode = mode;\n    const type = CanvaseditorComponent.MAPEO_MODES[mode];\n    const listaSketch = this.snapshots.get('sketch');\n    const listaActor = this.snapshots.get('actor');\n    const listaBackground = this.snapshots.get('background');\n    if (listaSketch && listaSketch.length > 0) {\n      listaSketch.splice(0, listaSketch.length);\n    }\n    if (listaActor && listaActor.length > 0) {\n      listaActor.splice(0, listaActor.length);\n    }\n    if (listaBackground && listaBackground.length > 0) {\n      listaBackground.splice(0, listaBackground.length);\n    }\n    this.takeSnapshot(type);\n  }\n  private cancelEventHandler = () => {\n    if (this.mode == 'edit_actor') {\n      this.pickedPoint = null;\n    } else if (this.mode == 'edit_sketch') {\n    }\n    this.isDragging = false;\n  };\n  private async takeSnapshot(type: string | null = null) {\n    if (type == null) {\n      type = CanvaseditorComponent.MAPEO_MODES[this.mode];\n    }\n    if (type == null) {\n      return;\n    }\n    const blob = await this.getImageBlobFromCanvas(type);\n    if (blob) {\n      if (!this.snapshots.has(type)) {\n        this.snapshots.set(type, []);\n      }\n      const lista = this.snapshots.get(type);\n      if (lista) {\n        const diferencia =\n          lista.length + 1 - CanvaseditorComponent.MAX_UNDO_SIZE;\n        if (diferencia >= 0) {\n          lista.splice(1, diferencia - 1);\n        }\n        lista.push(blob.blob);\n      }\n    }\n  }\n  canUndo() {\n    const type = CanvaseditorComponent.MAPEO_MODES[this.mode];\n    const lista = this.snapshots.get(type);\n    if (!lista) {\n      return false;\n    }\n    return lista.length > 1;\n  }\n  acceptImage() {\n    if (this.mode == 'edit_actor') {\n      this.changes.actor = true;\n      this.changeToMode('none');\n    }\n  }\n  cancelImage() {\n    if (this.mode == 'edit_actor') {\n      this.undoImage(true);\n      this.changeToMode('none');\n    }\n  }\n  async undoImage(first = false): Promise<void> {\n    const type = CanvaseditorComponent.MAPEO_MODES[this.mode];\n    const lista = this.snapshots.get(type);\n    if (!lista) {\n      return;\n    }\n    if (lista.length > 1) {\n      lista.splice(lista.length - 1, 1);\n    }\n    let lastBlob = lista[lista.length - 1];\n    if (first) {\n      lastBlob = lista[0];\n    }\n    const url = URL.createObjectURL(lastBlob);\n    await this.localLoadImages(url, type);\n  }\n}\n","<div class=\"main_container\">\n    <div class=\"menu_container_parent\">\n        <div class=\"menu_container\">\n            <div class=\"local_icon generic_icon\" (click)=\"noPropagar($event)\" [matMenuTriggerFor]=\"myMenu\"\n                aria-label=\"Menú\">\n                <mat-icon>menu</mat-icon>\n            </div>\n            <mat-menu #myMenu=\"matMenu\">\n                <button (click)=\"guardar()\" mat-menu-item>\n                    <mat-icon>save</mat-icon>\n                    <span>Guardar</span>\n                </button>\n                <button mat-menu-item [matMenuTriggerFor]=\"myMenuUpload\">\n                    <mat-icon>cloud_upload</mat-icon>\n                    <span>Cargar</span>\n                </button>\n                <mat-menu #myMenuUpload=\"matMenu\">\n                    <button mat-menu-item (click)=\"askForImage('actor')\">\n                        <mat-icon>accessibility_new</mat-icon>\n                        <span>Actor</span>\n                    </button>\n                    <button mat-menu-item (click)=\"askForImage('background')\">\n                        <mat-icon>wallpaper</mat-icon>\n                        <span>Fondo</span>\n                    </button>\n                </mat-menu>\n                <button mat-menu-item [matMenuTriggerFor]=\"myMenuMagic\">\n                    <mat-icon>auto_fix_normal</mat-icon>\n                    <span>Editar</span>\n                </button>\n                <mat-menu #myMenuMagic=\"matMenu\">\n                    <button mat-menu-item (click)=\"changeToMode('edit_sketch')\">\n                        <mat-icon>gesture</mat-icon>\n                        <span>Editar trazos</span>\n                    </button>\n                    <button mat-menu-item (click)=\"changeToMode('edit_actor')\">\n                        <mat-icon>accessibility_new</mat-icon>\n                        <span>Editar Actor</span>\n                    </button>\n                </mat-menu>\n                <button mat-menu-item [matMenuTriggerFor]=\"myMenuTool\">\n                    <mat-icon>waving_hand</mat-icon>\n                    <span>Herramienta</span>\n                </button>\n                <mat-menu #myMenuTool=\"matMenu\">\n                    <button mat-menu-item (click)=\"useTool('lapiz')\">\n                        <mat-icon>edit</mat-icon>\n                        <span>Lapiz</span>\n                    </button>\n                    <button mat-menu-item (click)=\"useTool('borrador')\">\n                        <mat-icon>cleaning_services</mat-icon>\n                        <span>Borrador</span>\n                    </button>\n                </mat-menu>\n                <button mat-menu-item [matMenuTriggerFor]=\"myMenuTamanio\">\n                    <mat-icon>line_weight</mat-icon>\n                    <span>Tamaño</span>\n                </button>\n                <mat-menu #myMenuTamanio=\"matMenu\">\n                    <button *ngFor=\"let mySize of menuSize\" (click)=\"setStrokeSize(mySize.option)\" mat-menu-item>\n                        <mat-icon [ngStyle]=\"{'color': mySize.option.strokeStyle}\">{{ mySize.icon }}</mat-icon>\n                        <span>{{ mySize.txt }}</span>\n                    </button>\n                </mat-menu>\n                <button mat-menu-item [matMenuTriggerFor]=\"myMenuColor\">\n                    <mat-icon>palette</mat-icon>\n                    <span>Color</span>\n                </button>\n                <mat-menu #myMenuColor=\"matMenu\">\n                    <button *ngFor=\"let myColor of menuColors\" (click)=\"setStrokeColor(myColor.option)\" mat-menu-item>\n                        <mat-icon [ngStyle]=\"{'color': myColor.option.strokeStyle}\">{{ myColor.icon }}</mat-icon>\n                        <span>{{ myColor.txt }}</span>\n                    </button>\n                </mat-menu>\n                <button mat-menu-item [matMenuTriggerFor]=\"myMenuDelete\">\n                    <mat-icon>delete</mat-icon>\n                    <span>Borrar</span>\n                </button>\n                <mat-menu #myMenuDelete=\"matMenu\">\n                    <button mat-menu-item (click)=\"clearCanvas('sketch')\">\n                        <mat-icon>gesture</mat-icon>\n                        <span>Borrar Trazo</span>\n                    </button>\n                    <button mat-menu-item (click)=\"clearCanvas('actor')\">\n                        <mat-icon>accessibility_new</mat-icon>\n                        <span>Borrar Actor</span>\n                    </button>\n                    <button mat-menu-item (click)=\"clearCanvas('background')\">\n                        <mat-icon>wallpaper</mat-icon>\n                        <span>Borrar Fondo</span>\n                    </button>\n                </mat-menu>\n            </mat-menu>\n        </div>\n        <div class=\"menu_container_others\">\n            <mat-slider min=\"0\" max=\"100\" step=\"1\" [(ngModel)]=\"threshold\" *ngIf=\"['edit_actor'].indexOf(mode) >= 0\">\n            </mat-slider>\n            <div class=\"other_icon generic_icon\" aria-label=\"Menú\" (click)=\"acceptImage()\"\n                *ngIf=\"['edit_actor'].indexOf(mode) >= 0\">\n                <mat-icon>done</mat-icon>\n            </div>\n            <div class=\"other_icon generic_icon\" aria-label=\"Menú\" (click)=\"cancelImage()\"\n                *ngIf=\"['edit_actor'].indexOf(mode) >= 0\">\n                <mat-icon>close</mat-icon>\n            </div>\n            <div class=\"other_icon generic_icon\" aria-label=\"Menú\" (click)=\"undoImage()\" *ngIf=\"canUndo()\">\n                <mat-icon>undo</mat-icon>\n            </div>\n        </div>\n    </div>\n    <div #eventsContainer class=\"canvas_container\" [ngClass]=\"{'ocupado': isWorkingHard}\">\n        <canvas width=\"1\" height=\"2\" #canvasMerged class=\"back invisible\">\n        </canvas>\n        <canvas width=\"1\" height=\"2\" #canvasBackground class=\"back\" [ngClass]=\"{'invisible': (mode=='edit_actor')}\">\n        </canvas>\n        <canvas width=\"1\" height=\"2\" #canvasGreen class=\"green back\">\n        </canvas>\n        <canvas width=\"1\" height=\"2\" #canvas class=\"front\" [ngClass]=\"{'transparente': (mode=='edit_actor')}\">\n        </canvas>\n    </div>\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface ConfirmData {\n  txt?: string;\n  title?: string;\n  translateFolder?: string | null;\n  model?: any;\n  imageUrl?: string;\n}\n\n@Component({\n  selector: 'app-confirm',\n  templateUrl: './confirm.component.html',\n  styleUrls: ['./confirm.component.css'],\n})\nexport class ConfirmComponent implements OnInit {\n  text: string;\n  title: string;\n  imageUrl?: string;\n  constructor(\n    public dialogRef: MatDialogRef<ConfirmComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: ConfirmData\n  ) {\n    this.text = typeof data.txt == 'string' ? data.txt : 'Sin detalle';\n    this.title = typeof data.title == 'string' ? data.title : 'Confirmación';\n    this.imageUrl = data.imageUrl;\n  }\n\n  ngOnInit(): void { }\n\n  cancelar() {\n    this.dialogRef.close(false);\n  }\n\n  aceptar() {\n    this.dialogRef.close(true);\n  }\n}\n","<div mat-dialog-title>\n    <header>\n        <h1 class=\"centrado\">{{ title }}</h1>\n        <span class=\"boton_cerrar\" [mat-dialog-close]>\n            <mat-icon>close</mat-icon>\n        </span>\n    </header>\n</div>\n<div mat-dialog-content>\n    <div class=\"alert_image_container\" *ngIf=\"imageUrl !== undefined\">\n        <img src=\"{{ imageUrl }}\" />\n    </div>\n    <p>{{ text }}</p>\n    <div class=\"bottom_buttons\">\n        <button class=\"btn btn-secondary\" (click)=\"cancelar()\">\n            <mat-icon>close</mat-icon>\n            Cancelar\n        </button>\n        <button class=\"btn btn-primary\" (click)=\"aceptar()\">\n            <mat-icon>check</mat-icon>\n            Aceptar\n        </button>\n    </div>\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FileResponseData, FileService } from '../../services/file.service';\nimport { FileRequestData } from '../../services/fileInterface';\nimport { WebcamService } from '../../services/webcam.service';\nimport { IdGen } from '@ejfdelgado/ejflab-common/src/IdGen';\n\n@Component({\n  selector: 'app-fileordevicepopup',\n  templateUrl: './fileordevicepopup.component.html',\n  styleUrls: ['./fileordevicepopup.component.css'],\n})\nexport class FileordevicepopupComponent implements OnInit {\n  constructor(\n    private fileSrv: FileService,\n    private dialogRef: MatDialogRef<FileordevicepopupComponent>,\n    private webcamSrv: WebcamService,\n    @Inject(MAT_DIALOG_DATA) public data: FileRequestData\n  ) {}\n  lastCallback: Function | null;\n  ngOnInit(): void {}\n\n  async usePhoto() {\n    const respuesta = await this.webcamSrv.openWebcam({});\n    if (!respuesta.canceled) {\n      let fileName = this.data.defaultFileName;\n      if (!fileName) {\n        fileName = IdGen.nuevo(new Date().getTime()) + '.jpg';\n      }\n      this.fileSrv.sendResponse({\n        fileName: fileName,\n        base64: respuesta.base64,\n        canceled: false,\n      });\n      this.dialogRef.close();\n    }\n  }\n\n  async processFile(responseData: FileResponseData) {\n    if (this.lastCallback) {\n      // podria ser const response = await\n      this.lastCallback(responseData);\n      // .close(response);\n      this.dialogRef.close();\n    }\n  }\n\n  useImageFile() {\n    const processFileThis = this.processFile.bind(this);\n    this.lastCallback = this.fileSrv.getLastCallback();\n    const options: FileRequestData = {\n      type: 'fileimage',\n      defaultFileName: this.data.defaultFileName,\n    };\n    this.fileSrv.sendRequest(options, processFileThis);\n  }\n}\n","<div class=\"my_container\">\n    <div class=\"my_option\" (click)=\"usePhoto()\">\n        <mat-icon>photo_camera</mat-icon>\n        <p>Capturar una imagen</p>\n    </div>\n    <div class=\"my_option\" (click)=\"useImageFile()\">\n        <mat-icon>folder_open</mat-icon>\n        <p>Buscar un archivo</p>\n    </div>\n</div>","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FileService } from '../../services/file.service';\nimport { WebcamService } from '../../services/webcam.service';\nimport { FileordevicepopupComponent } from '../fileordevicepopup/fileordevicepopup.component';\nimport { IdGen } from '@ejfdelgado/ejflab-common/src/IdGen';\nimport { FileRequestData } from '../../services/fileInterface';\n\n@Component({\n  selector: 'app-filepicker',\n  templateUrl: './filepicker.component.html',\n  styleUrls: ['./filepicker.component.css'],\n})\nexport class FilepickerComponent implements OnInit {\n  @ViewChild('imageInput') imageInput: ElementRef;\n  imageInputBinded = false;\n  lastDefaultFileName?: string | null = null;\n  constructor(\n    private fileSrv: FileService,\n    private dialog: MatDialog,\n    private webcamSrv: WebcamService\n  ) {}\n\n  ngOnInit(): void {\n    const openFileRequestThis = this.openFileRequest.bind(this);\n    this.fileSrv.subscribe(openFileRequestThis);\n  }\n\n  private async openFileRequest(payload: FileRequestData) {\n    // file, fileimage, photo, fileimage-photo\n    this.lastDefaultFileName = payload.defaultFileName;\n    const nativeElement = this.imageInput.nativeElement;\n    nativeElement.value = '';\n    if (payload.type == 'file') {\n      // Open file picker image\n      nativeElement.accept = '';\n      if (typeof payload.mimeType == 'string') {\n        nativeElement.accept = payload.mimeType;\n      }\n      nativeElement.click();\n    } else if (payload.type == 'fileimage') {\n      // Open file picker general file\n      nativeElement.accept = 'image/*';\n      nativeElement.click();\n    } else if (payload.type == 'fileaudio') {\n      // Open file picker general file\n      nativeElement.accept = 'audio/*';\n      nativeElement.click();\n    } else if (payload.type == 'fileimage-photo') {\n      // Open modal (photo/file)\n      this.dialog.open(FileordevicepopupComponent, {\n        data: {\n          type: 'image',\n          defaultFileName: payload.defaultFileName,\n        },\n      });\n    } else if (payload.type == 'photo') {\n      // Open photo\n      const respuesta = await this.webcamSrv.openWebcam({});\n      if (!respuesta.canceled) {\n        let fileName = payload.defaultFileName;\n        if (!fileName) {\n          fileName = IdGen.nuevo(new Date().getTime()) + '.jpg';\n        }\n        this.fileSrv.sendResponse({\n          fileName: fileName,\n          base64: respuesta.base64,\n          canceled: false,\n        });\n      }\n    }\n  }\n\n  async processFile(textInput: any) {\n    const getBase64 = async (file: File) => {\n      return new Promise((resolve, reject) => {\n        const reader = new FileReader();\n        reader.addEventListener('load', async (event: any) => {\n          const base64 = event.target.result;\n          resolve({\n            base64,\n            fileName: file.name,\n          });\n        });\n        reader.addEventListener('error', (event) => {\n          reject(event);\n        });\n        if (file instanceof Blob) {\n          reader.readAsDataURL(file);\n        }\n      });\n    };\n\n    const files = textInput.files;\n    const promesas = [];\n    for (let i = 0; i < files.length; i++) {\n      promesas.push(getBase64(files[i]));\n    }\n\n    try {\n      const resultados: any = await Promise.all(promesas);\n      let base64: any;\n      let fileName: any;\n      if (resultados.length == 1) {\n        base64 = resultados[0].base64;\n        fileName = this.lastDefaultFileName\n          ? this.lastDefaultFileName\n          : resultados[0].fileName;\n      } else {\n        base64 = resultados.map((el: any) => el.base64);\n        fileName = resultados.map((el: any) => {\n          return this.lastDefaultFileName\n            ? this.lastDefaultFileName\n            : el.fileName;\n        });\n      }\n      this.fileSrv.sendResponse({\n        canceled: false,\n        base64: base64,\n        fileName: fileName,\n      });\n    } catch (err) {}\n  }\n}\n","<input class=\"esconder\" #imageInput type=\"file\" multiple (change)=\"processFile(imageInput)\">","import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\nimport {\n  IndicatorPayload,\n  IndicatorService,\n} from '../../services/indicator.service';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\nimport { MyUtilities } from '@ejfdelgado/ejflab-common/src/MyUtilities';\nimport { Wait } from \"../../services/indicator.service\";\n\n@Component({\n  selector: 'app-indicator',\n  templateUrl: './indicator.component.html',\n  styleUrls: ['./indicator.component.css'],\n})\nexport class IndicatorComponent implements OnInit {\n  isLoading: boolean = false;\n  tasks: Array<Wait> = [];\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private indicatorSrv: IndicatorService\n  ) { }\n\n  ngOnInit(): void {\n    const actualizarEstadoThis = this.actualizarEstado.bind(this);\n    this.indicatorSrv.subscribe(actualizarEstadoThis);\n  }\n\n  private actualizarEstado(payload: IndicatorPayload) {\n    this.isLoading = payload.loading;\n    this.tasks = this.indicatorSrv.getTasks();\n    this.cdr.detectChanges();\n  }\n\n  getIconImage() {\n    return MyUtilities.removeRepeatedSlash(\n      MyConstants.SRV_ROOT + '/assets/img/loading2.gif'\n    );\n  }\n}\n","<div class=\"btp-overlay\" *ngIf=\"isLoading\">\n    <div class=\"loading_indicator_container\">\n        <div>\n            <img src=\"{{ getIconImage() }}\" alt=\"sistema ocupado\">\n            <div class=\"messages\">\n                <p class=\"message\" *ngFor=\"let task of tasks\">{{ task.detail?.description }}</p>\n            </div>\n        </div>\n    </div>\n</div>","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'app-prejson',\n  templateUrl: './prejson.component.html',\n  styleUrls: ['./prejson.component.css'],\n})\nexport class PrejsonComponent implements OnInit {\n  @Input('model')\n  model: any;\n  constructor() {}\n\n  ngOnInit(): void {}\n}\n","<div class=\"theparent\">\n    <pre>{{ model | json }}</pre>\n</div>","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewContainerRef,\n} from '@angular/core';\n\nexport interface ElementItemData {\n  url: string;\n  name: string;\n  date?: number;\n  checked?: boolean;\n  otherData?: any;\n}\n\nexport interface ElementPairItemData {\n  key: string;\n  value: ElementItemData;\n}\n\n@Component({\n  selector: 'app-scrollfile',\n  templateUrl: './scrollfile.component.html',\n  styleUrls: ['./scrollfile.component.css'],\n})\nexport class ScrollfileComponent implements OnInit {\n  @Input('elemento')\n  elemento: ElementPairItemData;\n  @Output('deleteFile')\n  deleteFile: EventEmitter<ElementPairItemData> = new EventEmitter();\n  @Output('openFile')\n  openFile: EventEmitter<ElementPairItemData> = new EventEmitter();\n  @Output('onBlur')\n  onBlur: EventEmitter<any> = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit(): void {}\n\n  toggleCheck(ele: ElementPairItemData): void {\n    if (ele.value.checked === true) {\n      ele.value.checked = false;\n    } else {\n      ele.value.checked = true;\n    }\n  }\n\n  downloadFile(ele: ElementPairItemData): void {\n    // Download file\n    console.log('TODO download');\n  }\n}\n","<mat-icon>description</mat-icon>\n<span class=\"noselect nombre\" [(ngModel)]=\"elemento.value.name\" contenteditable (blur)=\"onBlur.emit($event)\"></span>\n<button (click)=\"openFile.emit(elemento)\">\n    <mat-icon>edit</mat-icon>\n</button>\n<button (click)=\"toggleCheck(elemento)\">\n    <mat-icon>{{ elemento.value.checked ? \"check_circle\" : \"radio_button_unchecked\" }}</mat-icon>\n</button>\n<button (click)=\"downloadFile(elemento)\">\n    <mat-icon>download</mat-icon>\n</button>\n<button (click)=\"deleteFile.emit(elemento)\">\n    <mat-icon>delete_forever</mat-icon>\n</button>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'sortByName',\n})\nexport class SortByNamePipe implements PipeTransform {\n  transform(value: any[], arg1?: any, arg2?: any): any[] {\n    if (value instanceof Array) {\n      const attr = arg1 ? arg1 : 'name';\n      const ord = arg2 ? arg2 : 'asc';\n      if (ord == 'asc') {\n        return value.sort((a, b) => {\n          return ('' + a.value[attr]).localeCompare(b.value[attr]);\n        });\n      } else {\n        return value.sort((a, b) => {\n          return ('' + b.value[attr]).localeCompare(a.value[attr]);\n        });\n      }\n    } else {\n      return [];\n    }\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport {\n  ElementItemData,\n  ElementPairItemData,\n} from '../scrollfile/scrollfile.component';\n\nexport interface ScrollFilesActionData {\n  callback: Function;\n  label: string;\n  icon: string;\n}\n\n@Component({\n  selector: 'app-scrollfiles',\n  templateUrl: './scrollfiles.component.html',\n  styleUrls: ['./scrollfiles.component.css'],\n})\nexport class ScrollfilesComponent implements OnInit {\n  @Input()\n  archivos: { [key: string]: ElementItemData };\n  @Input()\n  actions: Array<ScrollFilesActionData>;\n  @Output('deleteFile')\n  deleteFile: EventEmitter<ElementPairItemData> = new EventEmitter();\n  @Output('openFile')\n  openFile: EventEmitter<ElementPairItemData> = new EventEmitter();\n\n  constructor(public cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {}\n\n  noneFun(): void {}\n\n  onBlurContentEditable() {\n    const temp = this.archivos;\n    this.archivos = {};\n    setTimeout(() => {\n      this.archivos = temp;\n    }, 0);\n  }\n}\n","<div class=\"parent_1\">\n    <div class=\"parent_scroll_container\">\n        <div class=\"scroll_container\">\n            <app-scrollfile (deleteFile)=\"deleteFile.emit($event)\" (openFile)=\"openFile.emit($event)\"\n                (onBlur)=\"onBlurContentEditable()\" *ngFor=\"let elemento of archivos | keyvalue | sortByName\"\n                [elemento]=\"elemento\"></app-scrollfile>\n        </div>\n    </div>\n    <div class=\"footer\">\n        <button *ngFor=\"let action of actions\" (click)=\"action.callback()\" mat-menu-item>\n            <mat-icon>{{ action.icon }}</mat-icon>\n            <span>{{ action.label }}</span>\n        </button>\n    </div>\n</div>","import {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { MyColor } from '@ejfdelgado/ejflab-common/src/MyColor';\n\nexport interface ScrollNavData {\n  testName: string;\n  elwidth: number;\n  startix: number;\n}\n\n@Component({\n  selector: 'app-scrollnav',\n  templateUrl: './scrollnav.component.html',\n  styleUrls: ['./scrollnav.component.css'],\n})\nexport class ScrollnavComponent implements OnInit, AfterViewInit {\n  @ViewChild('scroll_parent') scrollParentEl: ElementRef;\n  public model: ScrollNavData;\n  @Input()\n  data: Array<any>;\n  @Input()\n  columnName: string;\n  @Output('showPose')\n  showPose: EventEmitter<any> = new EventEmitter();\n  @Output('markCurrentFileAsChanged')\n  markCurrentFileAsChanged: EventEmitter<any> = new EventEmitter();\n  public currentClass: any = {\n    number: 0,\n    color: '#FFFFFF',\n  };\n  public PLAY_STATE_VISUAL: any = {\n    play: { text: 'Pause', icon: 'pause' },\n    pause: { text: 'Play', icon: 'play_arrow' },\n  };\n  public TEST_STATE_VISUAL: any = {\n    test_show: { text: 'Hide', icon: 'visibility' },\n    test_hide: { text: 'Show', icon: 'visibility_off' },\n  };\n  public playState: any = {\n    state: 'pause',\n  };\n  public testState: any = {\n    state: 'test_hide',\n  };\n  public dragging: any = {\n    target: null,\n    startv: null,\n    startx: null,\n    deltax: null,\n    starty: null,\n    deltay: null,\n  };\n  public scroll: any = {\n    left: 0,\n    leftPer: 0,\n    realIndex: 0,\n    realIndexPer: 0,\n    spaceWidth: null,\n    xLeft: null,\n    scrollWidth: 150,\n    amount1: 1,\n    amount2: 10,\n    amount3: 100,\n    nshow: 10, // Cuantos pasos muestro en un momento dado\n  };\n  public window: Array<any>;\n  static STEP_COLORS: any = MyColor.getStepColors(32);\n  constructor(public cdr: ChangeDetectorRef) {\n    this.model = {\n      testName: 'test',\n      elwidth: 5,\n      startix: 0,\n    };\n    this.data = [];\n    this.window = [];\n  }\n\n  public detectChanges() {\n    this.cdr.detectChanges();\n  }\n\n  computeCurrentColorClass() {\n    this.currentClass.color =\n      ScrollnavComponent.STEP_COLORS[this.currentClass.number];\n  }\n\n  currentClassChanged(arg: any) {\n    if (arg < 0) {\n      setTimeout(() => {\n        this.currentClass.number = 0;\n        this.computeCurrentColorClass();\n        this.detectChanges();\n      }, 0);\n    } else {\n      setTimeout(() => {\n        this.computeCurrentColorClass();\n      }, 0);\n    }\n  }\n\n  togglePlayPause() {\n    if (this.playState.state == 'pause') {\n      this.playState.state = 'play';\n    } else {\n      this.playState.state = 'pause';\n    }\n  }\n\n  toggleTest() {\n    if (this.testState.state == 'test_show') {\n      this.testState.state = 'test_hide';\n    } else {\n      this.testState.state = 'test_show';\n    }\n  }\n\n  ngOnInit(): void {}\n\n  public getStepValue(step: any, columnName: string) {\n    const ans = step[columnName];\n    if (['number', 'string'].indexOf(typeof ans) >= 0) {\n      return ans;\n    }\n    return '';\n  }\n\n  public getStepColor(step: any, columnName: string) {\n    const ans = step[columnName];\n    if (['number', 'string'].indexOf(typeof ans) >= 0) {\n      return ScrollnavComponent.STEP_COLORS[ans];\n    }\n    return 'rgba(0, 0, 0, 0)';\n  }\n\n  public computeDimensions() {\n    //console.log(`computeDimensions ${this.data.length}`);\n    const scrollEl = this.scrollParentEl.nativeElement;\n    const bounds = scrollEl.getBoundingClientRect();\n    this.scroll.xLeft = bounds.left;\n    this.scroll.spaceWidth = bounds.width;\n    this.clampNShow();\n  }\n\n  ngAfterViewInit(): void {\n    this.computeDimensions();\n    this.computeWindow();\n  }\n\n  @HostListener('window:resize', ['$event'])\n  onResize(event: any) {\n    this.computeDimensions();\n    this.computeWindow();\n  }\n\n  @HostListener('mousemove', ['$event'])\n  onMouseMove(ev: any) {\n    if (this.dragging.target == 'scroll') {\n      this.scroll.left =\n        this.dragging.startv + (ev.screenX - this.dragging.startx);\n      this.clampScroll();\n      this.computeRealIndexFromLeft();\n      this.computeWindow();\n    } else if (this.dragging.target == 'steps') {\n      const delta = ev.screenX - this.dragging.startx;\n      const selectedStep = this.getRealStep(delta);\n      this.assignCurrentClassToStep(selectedStep);\n    } else if (this.dragging.target == 'stepplay') {\n      const delta = ev.screenX - this.dragging.startx;\n      const selectedStep = this.getRealStep(delta);\n      this.showPose.emit(selectedStep);\n    }\n  }\n\n  assignCurrentClassToStep(selectedStep: any) {\n    selectedStep[this.columnName] = this.currentClass.number;\n    this.markCurrentFileAsChanged.emit();\n  }\n\n  getRealStep(delta: number) {\n    const startv = this.dragging.startv;\n    const xLeft = this.scroll.xLeft;\n    const spaceWidth = this.scroll.spaceWidth;\n    const nshow = this.scroll.nshow;\n\n    const realX = startv - xLeft + delta;\n    const custoWidth = spaceWidth / nshow;\n    let myVal = Math.floor(realX / custoWidth) + this.scroll.realIndex;\n    if (myVal < 0) {\n      myVal = 0;\n    }\n    if (myVal >= this.data.length) {\n      myVal = this.data.length - 1;\n    }\n    return this.data[myVal];\n  }\n\n  zoomInOut(deltaY: number) {\n    if (this.data.length == 0) {\n      return;\n    }\n    if (deltaY < 0) {\n      // zoom out\n      this.scroll.nshow -= 1;\n    } else {\n      // zoom in\n      this.scroll.nshow += 1;\n    }\n    if (this.scroll.nshow < 1) {\n      this.scroll.nshow = 1;\n    }\n    this.clampNShow();\n    //this.cdr.detectChanges();\n    // Debo recalcular real index dado el scroll left\n    this.computeRealIndexFromLeft();\n    this.computeWindow();\n  }\n\n  clampNShow() {\n    const max = Math.min(this.scroll.spaceWidth, this.data.length);\n    if (this.scroll.nshow > max || this.scroll.nshow == 0) {\n      // One step per pixel\n      this.scroll.nshow = max;\n    }\n  }\n\n  onMouseWheel(ev: WheelEvent) {\n    if (ev.shiftKey) {\n      this.zoomInOut(ev.deltaY);\n    } else {\n      this.moveInTimeLocalReal(this.scroll.amount1, ev.deltaY);\n    }\n  }\n\n  mouseDownScroll(ev: MouseEvent) {\n    this.dragging.target = 'scroll';\n    this.dragging.startv = this.scroll.left;\n    this.dragging.startx = ev.screenX;\n  }\n\n  mouseUpScroll(ev: MouseEvent) {\n    this.resetDragging();\n  }\n\n  mouseDownSteps(ev: MouseEvent) {\n    if (ev.shiftKey) {\n      this.dragging.target = 'steps';\n    } else {\n      this.dragging.target = 'stepplay';\n    }\n    //Options to get starting x point: .pageX .x .clientX\n    this.dragging.startv = ev.x;\n    this.dragging.startx = ev.screenX;\n\n    if (this.dragging.target == 'steps') {\n      const selectedStep = this.getRealStep(0);\n      this.assignCurrentClassToStep(selectedStep);\n    }\n  }\n\n  mouseUpSteps(ev: MouseEvent) {\n    this.resetDragging();\n  }\n\n  resetDragging() {\n    this.dragging = {\n      target: null,\n      startv: null,\n      startx: null,\n      deltax: null,\n      starty: null,\n      deltay: null,\n    };\n  }\n\n  moveInTimeLocalReal(amount: number, deltaY: number) {\n    if (deltaY < 0) {\n      // move back\n      this.scroll.realIndex = this.scroll.realIndex + amount;\n    } else {\n      // move forward\n      this.scroll.realIndex = this.scroll.realIndex - amount;\n    }\n    this.clampRealIndex();\n    // define left from real index\n    const maxScroll = this.scroll.spaceWidth - this.scroll.scrollWidth;\n    this.scroll.left = this.scroll.realIndexPer * maxScroll;\n    this.clampScroll();\n    this.computeWindow();\n  }\n\n  moveInTimeLocal(amount: number, deltaY: number) {\n    if (deltaY < 0) {\n      // move back\n      this.scroll.left = this.scroll.left + amount;\n    } else {\n      // move forward\n      this.scroll.left = this.scroll.left - amount;\n    }\n    this.clampScroll();\n    // define real index from left\n    this.computeRealIndexFromLeft();\n    this.computeWindow();\n  }\n\n  computeRealIndexFromLeft() {\n    if (this.data.length == 0) {\n      return;\n    }\n    const maxRealIndex = this.data.length - this.scroll.nshow;\n    this.scroll.realIndex = Math.floor(maxRealIndex * this.scroll.leftPer);\n  }\n\n  moveInTime(ev: WheelEvent) {\n    if (ev.shiftKey) {\n      this.moveInTimeLocal(this.scroll.amount3, ev.deltaY);\n    } else {\n      this.moveInTimeLocal(this.scroll.amount2, ev.deltaY);\n    }\n  }\n\n  clampRealIndex() {\n    if (this.data.length == 0) {\n      return;\n    }\n    if (this.scroll.realIndex < 0) {\n      this.scroll.realIndex = 0;\n    }\n    const max = this.data.length - this.scroll.nshow;\n    if (this.scroll.realIndex > max) {\n      this.scroll.realIndex = max;\n    }\n    if (max == 0) {\n      this.scroll.realIndexPer = 0;\n    } else {\n      this.scroll.realIndexPer = this.scroll.realIndex / max;\n    }\n  }\n\n  clampScroll() {\n    if (this.scroll.left < 0) {\n      this.scroll.left = 0;\n    }\n    const max = this.scroll.spaceWidth - this.scroll.scrollWidth;\n    if (this.scroll.left > max) {\n      this.scroll.left = max;\n    }\n    if (max == 0) {\n      this.scroll.leftPer = 0;\n    } else {\n      this.scroll.leftPer = this.scroll.left / max;\n    }\n  }\n\n  public computeWindow() {\n    //console.log(`computeWindow ${this.data.length}`);\n    if (this.data.length == 0) {\n      return;\n    }\n    setTimeout(() => {\n      const total = this.data.length;\n      if (total <= this.scroll.nshow) {\n        this.window = this.data;\n      } else {\n        this.window = this.data.filter((el, ix) => {\n          return (\n            ix >= this.scroll.realIndex &&\n            ix < this.scroll.realIndex + this.scroll.nshow\n          );\n        });\n      }\n    }, 0);\n  }\n}\n","<div class=\"grandparent no_caret\">\n    <div class=\"container_play\">\n        <button class=\"play_pause\" (click)=\"togglePlayPause()\" mat-menu-item>\n            <mat-icon>{{ PLAY_STATE_VISUAL[playState.state].icon }}</mat-icon>\n            <span>{{ PLAY_STATE_VISUAL[playState.state].text }}</span>\n        </button>\n        <button class=\"play_pause\" (click)=\"toggleTest()\" mat-menu-item>\n            <mat-icon>{{ TEST_STATE_VISUAL[testState.state].icon }}</mat-icon>\n            <span>{{ TEST_STATE_VISUAL[testState.state].text }}</span>\n        </button>\n    </div>\n    <div class=\"parent1\">\n        <div class=\"parent no_caret\">\n            <div *ngIf=\"testState.state == 'test_show'\" class=\"detail_in no_caret\" (wheel)=\"onMouseWheel($event)\"\n                (mousedown)=\"mouseDownSteps($event)\" (mouseup)=\"mouseUpSteps($event)\">\n                <div class=\"my_step no_caret white_subtitle\" *ngFor=\"let step of window\"\n                    [ngStyle]=\"{'background-color': getStepColor(step, model.testName)}\">\n                    <div>{{getStepValue(step, model.testName)}}</div>\n                </div>\n            </div>\n            <div class=\"detail_in no_caret\" (wheel)=\"onMouseWheel($event)\" (mousedown)=\"mouseDownSteps($event)\"\n                (mouseup)=\"mouseUpSteps($event)\">\n                <div class=\"my_step no_caret white_subtitle\" *ngFor=\"let step of window\"\n                    [ngStyle]=\"{'background-color': getStepColor(step, columnName)}\">\n                    <div>{{getStepValue(step, columnName)}}</div>\n                </div>\n            </div>\n            <div class=\"detail_out no_caret\" #scroll_parent (wheel)=\"moveInTime($event)\">\n                <div class=\"my_scroll no_caret\" (mousedown)=\"mouseDownScroll($event)\" (mouseup)=\"mouseUpScroll($event)\"\n                    [ngStyle]=\"{'left': scroll.left+'px', 'width': scroll.scrollWidth+'px'}\">\n                    &nbsp;</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"container_label\">\n        <input min=\"0\" step=\"1\" type=\"number\" [ngStyle]=\"{'background-color': currentClass.color}\"\n            class=\"white_subtitle\" (ngModelChange)=\"currentClassChanged($event)\" [(ngModel)]=\"currentClass.number\" />\n    </div>\n</div>","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AuthorizationService } from '../../services/authorization.service';\nimport { BackendPageService } from '../../services/backendPage.service';\nimport { LoginService } from '../../services/login.service';\nimport { ModalService } from '../../services/modal.service';\nimport { PageService } from '../../services/page.service';\nimport { MyUserData, MyUserOptionsData, MyUserService } from '../../services/user.service';\nimport { MyRoutes } from '@ejfdelgado/ejflab-common/src/MyRoutes';\n\nimport { Auth, User } from '@angular/fire/auth';\nimport { PageData } from '../../interfaces/login-data.interface';\nimport { Subscription } from 'rxjs';\n\nexport interface StatusBarOptionsData {\n  editDocument?: boolean;\n  editDocumentPermissions?: boolean;\n  deleteDocument?: boolean;\n  createDocument?: boolean;\n  searchDocuments?: boolean;\n  displayUserName?: boolean;\n}\n\nexport interface OptionData {\n  icon: string;\n  label: string;\n  action: Function;\n}\n\n@Component({\n  selector: 'app-statusbar',\n  templateUrl: './statusbar.component.html',\n  styleUrls: ['./statusbar.component.css'],\n})\nexport class StatusbarComponent implements OnInit, OnDestroy {\n  @Input('title')\n  title: string | null;\n  @Input() options: StatusBarOptionsData = {\n    createDocument: true,\n    deleteDocument: true,\n    editDocument: true,\n    editDocumentPermissions: true,\n    searchDocuments: true,\n    displayUserName: false,\n  };\n  @Input() textStyle: { [key: string]: string } = {\n    \"color\": \"#000000\",\n  };\n  @Input() backgroundStyle: { [key: string]: string } = {\n    \"background-color\": \"#eef7ff\",\n  };\n  @Input() userOptions: MyUserOptionsData = {\n    editEmail: true,\n    editName: true,\n    editPhone: true,\n  };\n  @Input('extraOptions')\n  extraOptions: Array<OptionData> = [];\n  @Input('saveState') saveState: string | null = null;\n  user: User | null = null;\n  dbUser: MyUserData | null = null;\n  dbUserSubscription: Subscription | null = null;\n  updateCount: number = 0;\n\n  constructor(\n    private loginSrv: LoginService,\n    private pageSrv: PageService,\n    private authorizationSrv: AuthorizationService,\n    private backendPageSrv: BackendPageService,\n    private usrSrv: MyUserService,\n    private modalSrv: ModalService,\n    private auth: Auth,\n  ) {\n    auth.onAuthStateChanged((user) => {\n      if (user) {\n        this.user = user;\n      } else {\n        this.user = null;\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    this.dbUserSubscription = this.usrSrv.eventoUsuario.subscribe((dbUser) => {\n      this.dbUser = dbUser;\n      this.updateCount = Date.now();\n    });\n  }\n\n  async editPage() {\n    this.pageSrv.edit();\n  }\n\n  async deleteAllTuples() {\n    const responseConfirm = await this.modalSrv.confirm({\n      title: '¿Está seguro?',\n      txt: 'Esta acción no se puede deshacer.',\n    });\n    if (!responseConfirm) {\n      return;\n    }\n    this.backendPageSrv\n      .getCurrentPage()\n      .then(async (data: PageData | null) => {\n        if (data) {\n          await this.pageSrv.deleteAllTuples({ id: data.id });\n          window.location.reload();\n        }\n      })\n      .catch((err) => {\n        this.modalSrv.error(err);\n      });\n  }\n\n  async editPagePermisions() {\n    this.authorizationSrv.edit();\n  }\n\n  async createNewPage() {\n    const dato = await this.pageSrv.createNew();\n    const partes = MyRoutes.splitPageData(location.pathname);\n    const URL = `${location.origin}${partes.pageType}/${dato.id}`;\n    window.open(URL, '_self');\n  }\n\n  async lookMyPages() {\n    this.pageSrv.multiple();\n  }\n\n  async goToHome() { }\n\n  async logoutAndGoToHome() {\n    await this.loginSrv.logout();\n  }\n\n  async editUser() {\n    this.usrSrv.edit(this.userOptions);\n  }\n\n  async logout() {\n    this.loginSrv.logout();\n  }\n\n  async login() {\n    this.loginSrv.login();\n  }\n\n  getUserName() {\n    if (this.dbUser?.name) {\n      return this.dbUser?.name;\n    }\n    if (this.user?.displayName) {\n      return this.user.displayName;\n    }\n    return \"\";\n  }\n\n  getPhoto() {\n    if (this.dbUser?.picture) {\n      return this.dbUser.picture + `?t=${this.updateCount}`;\n    }\n    if (this.user?.photoURL) {\n      return this.user.photoURL + `?t=${this.updateCount}`;\n    }\n    return \"\";\n  }\n\n  async ngOnDestroy() {\n    if (this.dbUserSubscription) {\n      this.dbUserSubscription.unsubscribe();\n    }\n  }\n}\n","<div class=\"top_menu\" [ngStyle]=\"backgroundStyle\">\n    <div class=\"relleno\">\n        <div class=\"usuario_container\">\n            <div class=\"menu_icon_user_parent\" [matMenuTriggerFor]=\"mainMenu\" aria-label=\"Menú principal\">\n                <div class=\"menu_icon_user white\">\n                    <mat-icon>menu</mat-icon>\n                </div>\n            </div>\n            <mat-menu #mainMenu=\"matMenu\">\n                <button mat-menu-item (click)=\"editPage()\" *ngIf=\"options?.editDocument === true\">\n                    <mat-icon>edit</mat-icon>\n                    <span>Editar documento</span>\n                </button>\n                <button mat-menu-item (click)=\"editPagePermisions()\" *ngIf=\"options?.editDocumentPermissions === true\">\n                    <mat-icon>lock</mat-icon>\n                    <span>Editar permisos del documento</span>\n                </button>\n                <button mat-menu-item (click)=\"deleteAllTuples()\" *ngIf=\"options?.deleteDocument === true\">\n                    <mat-icon>delete</mat-icon>\n                    <span>Borrar datos de página</span>\n                </button>\n                <button mat-menu-item (click)=\"createNewPage()\" *ngIf=\"options?.createDocument === true\">\n                    <mat-icon>add</mat-icon>\n                    <span>Crear nuevo documento</span>\n                </button>\n                <button mat-menu-item (click)=\"lookMyPages()\" *ngIf=\"options?.searchDocuments === true\">\n                    <mat-icon>search</mat-icon>\n                    <span>Ver mis documentos</span>\n                </button>\n                <button *ngFor=\"let item of extraOptions\" mat-menu-item (click)=\"item.action()\">\n                    <mat-icon>{{ item.icon }}</mat-icon>\n                    <span>{{ item.label }}</span>\n                </button>\n            </mat-menu>\n\n        </div>\n        <div *ngIf=\"title != undefined && title != null && title.length > 0\" class=\"relleno mi_titulo\"\n            [ngStyle]=\"textStyle\">{{\n            title }}</div>\n        <div *ngIf=\"options.displayUserName === true && user\" class=\"relleno mi_nombre\" [ngStyle]=\"textStyle\">{{\n            getUserName() }}</div>\n    </div>\n    <div *ngIf=\"saveState !== null\" class=\"usuario_container\">\n        <div class=\"menu_icon_user_parent\">\n            <!--div class=\"save_status\">\n                <mat-icon>save</mat-icon>\n            </div-->\n            <div *ngIf=\"saveState == 'processing'\" class=\"save_status rotating\">\n                <mat-icon>settings</mat-icon>\n            </div>\n            <div *ngIf=\"saveState == 'done'\" class=\"save_status scaling\">\n                <mat-icon>done</mat-icon>\n            </div>\n        </div>\n    </div>\n    <div class=\"usuario_container\">\n        <div class=\"menu_icon_user_parent\" [matMenuTriggerFor]=\"userMenu\" aria-label=\"Menú de usuario\">\n            <div *ngIf=\"user == null\" class=\"menu_icon_user white\">\n                <mat-icon>person</mat-icon>\n            </div>\n            <div *ngIf=\"user !== null\" class=\"menu_icon_user background_photo\"\n                [ngStyle]=\"{'background-image': 'url(' + getPhoto() + ')'}\">\n\n            </div>\n        </div>\n        <mat-menu #userMenu=\"matMenu\">\n            <button *ngIf=\"user == null\" mat-menu-item (click)=\"login()\">\n                <mat-icon>login</mat-icon>\n                <span>Iniciar sesión</span>\n            </button>\n            <button *ngIf=\"user !== null\" mat-menu-item (click)=\"editUser()\">\n                <mat-icon>edit</mat-icon>\n                <span>Editar usuario</span>\n            </button>\n            <button *ngIf=\"user !== null\" mat-menu-item (click)=\"logout()\">\n                <mat-icon>logout</mat-icon>\n                <span>Cerrar sesión</span>\n            </button>\n        </mat-menu>\n    </div>\n</div>","import { HttpClient } from '@angular/common/http';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Buffer } from 'buffer';\nimport { catchError, of } from 'rxjs';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { ModalService } from '../../services/modal.service';\nimport { FileBase64Data } from '../base/base.component';\nimport { FileService } from '../../services/file.service';\nimport { FileSaveData } from '../../services/fileInterface';\nimport { MyConstants } from '@ejfdelgado/ejflab-common/src/MyConstants';\n\nexport interface TxtOptionsData {\n  encoding?: string;\n  maxHeight?: string;\n  height?: string;\n  useRoot?: string;\n}\n\n@Component({\n  selector: 'app-txtfileeditor',\n  templateUrl: './txtfileeditor.component.html',\n  styleUrls: ['./txtfileeditor.component.css'],\n})\nexport class TxtfileeditorComponent implements OnInit, OnDestroy, OnChanges {\n  @Input() options: TxtOptionsData;\n  @Input() url: string;\n  @Output() urlChange = new EventEmitter<string | null>();\n  @Input() fileName: string;\n  @Output() eventSave = new EventEmitter<FileBase64Data>();\n  readonly control = new FormControl({\n    value: '',\n    disabled: false,\n  });\n  constructor(\n    private httpClient: HttpClient,\n    private clipboard: Clipboard,\n    private modalSrv: ModalService,\n    public fileService: FileService\n  ) {}\n\n  ngOnInit(): void {}\n\n  ngOnDestroy(): void {}\n\n  ngOnChanges(changes: any) {\n    if (changes.url) {\n      const url = changes.url.currentValue;\n      if (typeof url == 'string' && url.length > 0) {\n        this.control.disable();\n        this.leer(url).finally(() => {\n          this.control.enable();\n        });\n      }\n    }\n  }\n\n  getStyles(): { [klass: string]: any } {\n    const response: { [klass: string]: any } = {\n      'max-height': '100%',\n      height: '100%',\n    };\n    const PASS_THROUGH = [\n      { in: 'maxHeight', out: 'max-height' },\n      { in: 'height', out: 'height' },\n    ];\n    const localOptions: any = this.options;\n    for (let i = 0; i < PASS_THROUGH.length; i++) {\n      const actual = PASS_THROUGH[i];\n      if (actual.in in localOptions) {\n        response[actual.out] = localOptions[actual.in];\n      }\n    }\n    return response;\n  }\n\n  htmlToText(html: string) {\n    const tmp = document.createElement('DIV');\n    tmp.setAttribute('style', 'white-space: pre;');\n    console.log(html);\n    html = html.replace(/<br\\/?>/g, '\\\\n');\n    console.log(html);\n    tmp.innerHTML = html;\n    let salida = tmp.textContent || tmp.innerText || '';\n    salida = salida.replace(/\\\\n/g, '\\n');\n    return salida;\n  }\n\n  public async saveFile(options: FileSaveData, suffix: string = '') {\n    try {\n      const response = await this.fileService.save(options);\n      response.key = response.key + '?t=' + new Date().getTime() + suffix;\n      return response;\n    } catch (err: any) {\n      this.modalSrv.error(err);\n      throw err;\n    }\n  }\n\n  async guardar() {\n    const actual = this.control.value;\n    if (typeof actual == 'string') {\n      //let base64 = Buffer.from(this.htmlToText(actual), 'utf8').toString('base64');\n      let base64 = Buffer.from(actual, 'utf8').toString('base64');\n      base64 = `data:text/plain;base64,${base64}`;\n      const response = await this.saveFile(\n        {\n          base64: base64,\n          fileName: this.fileName,\n        },\n        '&encoding=utf8'\n      );\n      this.url = response.key;\n      this.urlChange.emit(this.url);\n    }\n  }\n\n  async download() {\n    const theUrl = MyConstants.getCompleteUrl(this.url + '&download=1');\n    if (theUrl != null) {\n      window.open(theUrl, '_blank');\n    }\n  }\n\n  async share() {\n    const theUrl = MyConstants.getCompleteUrl(this.url);\n    if (theUrl != null) {\n      this.clipboard.copy(theUrl);\n      this.modalSrv.alert({ title: 'Ok!', txt: 'Enlace copiado' });\n    }\n  }\n\n  getValue() {\n    return this.control.value;\n  }\n\n  async setValueAndSave(texto: string): Promise<void> {\n    return new Promise((resolve, reject) => {\n      this.control.setValue(texto);\n      const guardarThis = this.guardar.bind(this);\n      setTimeout(async () => {\n        try {\n          await guardarThis();\n          resolve();\n        } catch (err) {\n          reject(err);\n        }\n      }, 0);\n    });\n  }\n\n  processFile(textInput: any) {\n    const file: File = textInput.files[0];\n    const reader = new FileReader();\n    reader.addEventListener('load', (event: any) => {\n      let temp = event.target.result;\n      temp = temp.replace(/^.*base64,/, '');\n      const texto = Buffer.from(temp, 'base64').toString('utf8');\n      this.control.setValue(texto);\n    });\n    if (file instanceof Blob) {\n      reader.readAsDataURL(file);\n    }\n  }\n\n  async leer(url: string) {\n    const theUrl = MyConstants.getCompleteUrl(url);\n    if (theUrl == null) {\n      throw new Error('No puede leer una url nula');\n    }\n    const respuesta = await new Promise<string>((resolve, reject) => {\n      this.httpClient\n        .get(theUrl, { responseType: 'text' })\n        .pipe(\n          catchError((error) => {\n            return of('');\n          })\n        )\n        .subscribe((data) => {\n          resolve(data);\n        });\n    });\n    this.control.setValue(respuesta);\n  }\n}\n","<div class=\"parent_container\" [ngStyle]=\"getStyles()\">\n    <div class=\"txt_container\" [ngStyle]=\"getStyles()\">\n        <!--p class=\"mi_texto\" [formControl]=\"control\" contenteditable></p-->\n        <textarea class=\"mi_texto\" [formControl]=\"control\"></textarea>\n        <div class=\"menu_container\">\n            <div class=\"generic_icon\" [matMenuTriggerFor]=\"myMenu\" aria-label=\"Menú\">\n                <mat-icon>menu</mat-icon>\n            </div>\n            <mat-menu #myMenu=\"matMenu\">\n                <button (click)=\"guardar()\" mat-menu-item>\n                    <mat-icon>save</mat-icon>\n                    <span>Guardar</span>\n                </button>\n                <button (click)=\"share()\" mat-menu-item>\n                    <mat-icon>share</mat-icon>\n                    <span>Copiar enlace</span>\n                </button>\n                <button (click)=\"download()\" mat-menu-item>\n                    <mat-icon>download</mat-icon>\n                    <span>Descagar archivo</span>\n                </button>\n                <button (click)=\"!control.disabled ? textInput.click() : ''\" mat-menu-item>\n                    <mat-icon>upload_file</mat-icon>\n                    <span>Subir archivo</span>\n                </button>\n            </mat-menu>\n        </div>\n        <input class=\"esconder\" #textInput type=\"file\" accept=\"text/*\" (change)=\"processFile(textInput)\">\n    </div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { WebcamImage, WebcamInitError } from 'ngx-webcam';\nimport { Observable, Subject } from 'rxjs';\nimport { ModalService } from '../../services/modal.service';\nimport { WebcamRequestData, WebcamService } from '../../services/webcam.service';\n\n@Component({\n  selector: 'app-webcam',\n  templateUrl: './webcam.component.html',\n  styleUrls: ['./webcam.component.css'],\n})\nexport class WebcamComponent implements OnInit {\n  isActive: boolean = false;\n  private mySwitchCamera: Subject<boolean | string> = new Subject();\n  private trigger: Subject<any> = new Subject();\n  public webcamImage!: WebcamImage;\n  private nextWebcam: Subject<any> = new Subject();\n  // https://www.npmjs.com/package/ngx-webcam\n  videoOptions: MediaTrackConstraints = {\n    //aspectRatio: 1,\n    autoGainControl: true,\n    noiseSuppression: true,\n    echoCancellation: true,\n  };\n  sysImage = '';\n  step = 1;\n  constructor(\n    private webcamSrv: WebcamService,\n    private modalSrv: ModalService\n  ) {}\n\n  ngOnInit(): void {\n    const openWebcamCaptureThis = this.openWebcamCapture.bind(this);\n    this.webcamSrv.subscribe(openWebcamCaptureThis);\n  }\n\n  private openWebcamCapture(payload: WebcamRequestData) {\n    this.isActive = true;\n    this.step = 1;\n    this.sysImage = '';\n  }\n\n  cancelCapture() {\n    this.webcamSrv.sendResponse({\n      canceled: true,\n      base64: '',\n    });\n    this.isActive = false;\n  }\n\n  switchImage() {\n    this.mySwitchCamera.next(true);\n  }\n\n  dischargeImage() {\n    this.step = 1;\n    this.sysImage = '';\n  }\n\n  acceptImage() {\n    this.webcamSrv.sendResponse({\n      canceled: false,\n      base64: this.sysImage,\n    });\n    this.isActive = false;\n  }\n\n  public getSnapshot(): void {\n    this.trigger.next(void 0);\n    this.step = 2;\n  }\n  public captureImg(webcamImage: WebcamImage): void {\n    this.webcamImage = webcamImage;\n    this.sysImage = webcamImage!.imageAsDataUrl;\n  }\n  public get invokeObservable(): Observable<any> {\n    return this.trigger.asObservable();\n  }\n  public get switchCamera(): Observable<any> {\n    return this.mySwitchCamera.asObservable();\n  }\n  public get nextWebcamObservable(): Observable<any> {\n    return this.nextWebcam.asObservable();\n  }\n\n  public handleInitError(error: WebcamInitError): void {\n    if (\n      error.mediaStreamError &&\n      error.mediaStreamError.name === 'NotAllowedError'\n    ) {\n      this.modalSrv.alert({\n        title: 'Ups!',\n        txt: 'No se permitió el acceso a la cámara',\n      });\n    }\n  }\n}\n","<div class=\"contenedor_webcam\" *ngIf=\"isActive\">\n    <div class=\"webcam-wrapper\" *ngIf=\"step == 2\">\n        <img [src]=\"webcamImage.imageAsDataUrl\" />\n    </div>\n    <webcam *ngIf=\"step == 1\" [trigger]=\"invokeObservable\" [allowCameraSwitch]=\"false\" [mirrorImage]=\"'never'\"\n        [imageQuality]=\"1\" [switchCamera]=\"switchCamera\" [videoOptions]=\"videoOptions\"\n        (imageCapture)=\"captureImg($event)\" (initError)=\"handleInitError($event)\">\n    </webcam>\n    <div class=\"first_step\" *ngIf=\"step == 1\">\n        <div class=\"overlay\">\n            <div class=\"my_header\">\n                <div class=\"igual_ancho right\">\n                    <mat-icon class=\"\" (click)=\"cancelCapture()\">close</mat-icon>\n                </div>\n            </div>\n            <div class=\"body\"></div>\n            <div class=\"my_footer\">\n                <div class=\"igual_ancho\">\n\n                </div>\n                <div class=\"igual_ancho center\">\n                    <div class=\"boton_rec\" (click)=\"getSnapshot()\"></div>\n                </div>\n                <div class=\"igual_ancho right\">\n                    <mat-icon class=\"\" (click)=\"switchImage()\">autorenew</mat-icon>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"first_step\" *ngIf=\"step == 2\">\n        <div class=\"overlay\">\n            <div class=\"my_header\">\n                <div class=\"igual_ancho right\">\n                    <mat-icon class=\"\" (click)=\"cancelCapture()\">close</mat-icon>\n                </div>\n            </div>\n            <div class=\"body\"></div>\n            <div class=\"my_footer\">\n                <div class=\"igual_ancho center\">\n                    <mat-icon class=\"red_icon\" (click)=\"dischargeImage()\">close</mat-icon>\n                </div>\n                <div class=\"igual_ancho center\">\n                    <mat-icon class=\"green_icon\" (click)=\"acceptImage()\">done</mat-icon>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { MyDatesFront } from '@ejfdelgado/ejflab-common/src/MyDatesFront';\n\n// https://www.npmjs.com/package/dateformat\n\n// <td>{{ variable | epoch2date:'mmm d yyyy' }}</td>\n\n@Pipe({\n  name: 'epoch2date',\n})\nexport class Epoch2datePipe implements PipeTransform {\n  transform(value: number | undefined, ...args: unknown[]): unknown {\n    if (typeof value == 'number') {\n      return MyDatesFront.formatDateCompleto(new Date(value), ...args);\n    }\n    return null;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport sortify from '@ejfdelgado/ejflab-common/src/sortify';\n\n@Pipe({\n  name: 'jsonColor',\n})\nexport class JsonColorPipe implements PipeTransform {\n  replacer(match: any, pIndent: any, pKey: any, pVal: any, pEnd: any): any {\n    var key = '<span class=json-key>';\n    var val = '<span class=json-value>';\n    var str = '<span class=json-string>';\n    var r = pIndent || '';\n    if (pKey) r = r + key + pKey.replace(/[\": ]/g, '') + '</span>: ';\n    if (pVal) r = r + (pVal[0] == '\"' ? str : val) + pVal + '</span>';\n    return r + (pEnd || '');\n  }\n\n  transform(value: any): any {\n    var jsonLine = /^(\\s*)(\"[\\w]+\": )?(\"[^\"]*\"|[\\w.+-]*)?([,[{])?$/gm;\n    if (!value) {\n      return '';\n    }\n    return sortify(value, 3)\n      .replace(/&/g, '&amp;')\n      .replace(/\\\\\"/g, '&quot;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(jsonLine, this.replacer);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'json2svg',\n})\nexport class Json2svg implements PipeTransform {\n  transform(value: any): string {\n    let respuesta = '';\n    return respuesta;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MyTemplate } from '@ejfdelgado/ejflab-common/src/MyTemplate';\n\n@Pipe({\n  name: 'interpolate',\n})\nexport class InterpolatePipe implements PipeTransform {\n  static renderer = new MyTemplate();\n  constructor() {}\n  transform(value: string, ...args: unknown[]): string {\n    return InterpolatePipe.renderer.render(value, args[0]);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../services/translate.service';\n\n@Pipe({\n  name: 'since'\n})\nexport class SincePipe implements PipeTransform {\n  constructor(private translateSrv: TranslateService) { }\n  transform(valueOriginal: any, ...args: unknown[]): Promise<unknown> {\n    return new Promise(async (resolve, reject) => {\n      if (typeof valueOriginal == 'number') {\n        const actual = new Date().getTime();\n        const signedValue = actual - valueOriginal;\n        const value = Math.abs(signedValue);\n        const map: any = {\n          'original': valueOriginal,\n          'actual': actual,\n          'seconds': 0,\n          'minutes': 0,\n          'hours': 0,\n          'type': 'seconds',\n        };\n        map['seconds'] = Math.floor(value / 1000);\n        if (map['seconds'] > 60) {\n          map['minutes'] = Math.floor(map['seconds'] / 60);\n          map['seconds'] = map['seconds'] % 60;\n          map['type'] = 'minutes';\n        }\n        if (map['minutes'] > 60) {\n          map['hours'] = Math.floor(map['minutes'] / 60);\n          map['minutes'] = map['minutes'] % 60;\n          map['type'] = 'hours';\n        }\n        let translateFolder: any = 'nogales';\n        if (args && args.length > 0) {\n          translateFolder = args[0];\n        }\n        if (args && args.length > 1 && typeof args[1] == \"string\") {\n          map['type'] = args[1];\n        }\n        map[\"hours2\"] = (map[\"hours\"]/100).toFixed(2).split(\".\")[1];\n        map[\"minutes2\"] = (map[\"minutes\"]/100).toFixed(2).split(\".\")[1];\n        map[\"seconds2\"] = (map[\"seconds\"]/100).toFixed(2).split(\".\")[1];\n        const rendered = await this.translateSrv.translate(`since.${map['type']}`, [translateFolder, map]);\n        resolve(rendered);\n      } else {\n        resolve('-');\n      }\n    });\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../services/translate.service';\nimport { MyDatesFront } from '@ejfdelgado/ejflab-common/src/MyDatesFront';\n\n@Pipe({\n  name: 'age',\n  standalone: false\n})\nexport class AgePipe implements PipeTransform {\n  constructor(private translateSrv: TranslateService) { }\n  transform(value: unknown, ...args: unknown[]): Promise<unknown> {\n    let level = typeof (args[1]) == \"number\" ? args[1] : 0;\n    if ([0, 1, 2].indexOf(level) < 0) {\n      level = 0;\n    }\n    return new Promise(async (resolve, reject) => {\n      const model = MyDatesFront.age(value);\n      if (model) {\n        const rendered = await this.translateSrv.translate(`pipes.age.${level}`, [args[0], model]);\n        resolve(rendered);\n      } else {\n        resolve(null);\n      }\n    });\n  }\n}\n","import { Directive, Input } from '@angular/core';\n\n/*\nRemember use is as follow:\n[ngInit]=\"bindDragEventsThis\"\n\n1. Don't call the function!\n2. Use this binding bindDragEventsThis = bindDragEvents.bind(this);\n*/\n@Directive({\n  selector: '[ngInit]',\n  exportAs: 'ngInit',\n})\nexport class NgInit {\n  @Input() values: any = {};\n\n  @Input() ngInit: any;\n  ngOnInit() {\n    if (this.ngInit) {\n      this.ngInit(this.values);\n    }\n  }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n    selector: '[appMoveNextByEnter]'\n})\nexport class MoveNextByEnterDirective {\n    @Input() appMoveNextByEnter: string; // Optional: pass next field ID\n\n    constructor(private el: ElementRef) { }\n\n    @HostListener('keydown.enter', ['$event'])\n    onEnter(event: KeyboardEvent) {\n        event.preventDefault();\n\n        const form = this.el.nativeElement.form;\n        const inputs = Array.from(form.querySelectorAll('input, select, textarea'));\n        const index = inputs.indexOf(this.el.nativeElement);\n\n        if (index < inputs.length - 1) {\n            const nextInput = inputs[index + 1] as HTMLElement;\n            nextInput.focus();\n        }\n    }\n}","import { EventEmitter } from '@angular/core';\n\nexport class EmitterThen<Type> {\n  lastData: any = undefined;\n  emmiter: EventEmitter<Type> = new EventEmitter();\n  constructor() {}\n\n  update(data: Type) {\n    this.emmiter.emit(data);\n    this.lastData = data;\n  }\n\n  async then(myFun: Function) {\n    if (this.lastData) {\n      myFun(this.lastData);\n    }\n    return this.emmiter.subscribe((next: Type) => {\n      myFun(next);\n    });\n  }\n}\n","import { EventEmitter } from '@angular/core';\nimport { EmitterThen } from './EmitterThen';\nimport { MyCookies } from '@ejfdelgado/ejflab-common/src/MyCookies';\nimport { ConsoleService } from '../../services/console.service';\nimport { AudioService } from '../../services/audio.service';\nimport { MicrophonePermissionWatcher } from \"./MicrophonePermissionWatcher\";\nimport { CameraPermissionWatcher } from \"./CameraPermissionWatcher\";\n\ndeclare var MediaStreamTrackProcessor: any;\ndeclare var MediaStreamTrackGenerator: any;\ndeclare var TransformStream: any;\ndeclare var VideoFrame: any;\n\nexport interface BackgroundImageOptions {\n  useBackgroundImage: boolean;\n  imageMode: 'default' | 'custom';\n  customImageUrl?: string;\n  fitMode: 'cover' | 'contain' | 'stretch';\n  blurAmount: number;\n}\n\nexport interface GetUserMediaData {\n  forceRecreate?: boolean;\n  useBlur?: boolean;\n  useGPU?: boolean;\n  blurEngine?: string;\n  blurAmount?: number;\n  softEdge?: boolean;\n  backgroundImage?: string;\n  useEchoCancellation?: boolean;\n  noiseSuppression?: boolean;\n  autoGainControl?: boolean;\n  backgroundOptions?: BackgroundImageOptions;\n}\n\nexport interface SelectedDeviceData {\n  audio: string | null;\n  video: string | null;\n  speaker: string | null;\n}\n\nexport interface DevicesData {\n  audios: Array<DeviceOption>;\n  videos: Array<DeviceOption>;\n  speaker: Array<DeviceOption>;\n}\n\nexport interface DeviceOption {\n  txt: string;\n  id: string;\n}\n\nexport interface MultiScaleMediaStream {\n  big: MediaStream;\n  small: MediaStream;\n  audio: MediaStream;\n  bigIsMock?: boolean;\n  smallIsMock?: boolean;\n  audioIsMock?: boolean;\n}\n\nfunction scaleSource(sw: number, sh: number, dw: number, dh: number) {\n  const hRatio = dw / sw;\n  const vRatio = dh / sh;\n  const ratio = Math.max(hRatio, vRatio);\n  const x = (sw - dw / ratio) / 2;\n  const y = (sh - dh / ratio) / 2;\n  return { x, y, w: sw - x * 2, h: sh - y * 2, ratio };\n}\n\nexport class VideoWebStream {\n  static TUMBNAIL_HEIGHT = 155;\n  streams: MultiScaleMediaStream | null = null;\n  analyser: AnalyserNode | null = null;\n  audioContext: AudioContext | null = null;\n  dataArray: Uint8Array | null = null;\n  microphone: MediaStreamAudioSourceNode | null = null;\n  volumeMeterTimer: NodeJS.Timeout | null = null;\n  currentDevices: SelectedDeviceData = {\n    audio: null,\n    video: null,\n    speaker: null,\n  };\n  devices: DevicesData = {\n    audios: [],\n    videos: [],\n    speaker: [],\n  };\n  emitterDevices: EmitterThen<DevicesData> = new EmitterThen();\n  emitterStreams: EventEmitter<MultiScaleMediaStream | null> =\n    new EventEmitter();\n  volumeEmitter: EventEmitter<number> = new EventEmitter();\n  lastUpdatedVideoDevice: string | null = null;\n  lastUpdatedAudioDevice: string | null = null;\n  static hooks: { [key: string]: Function } = {};\n  static lastDevices: DevicesData | null = null;\n  micWatcher = new MicrophonePermissionWatcher();\n  camWatcher = new CameraPermissionWatcher();\n  lastPermissionVideoState: string | null = null;\n  lastPermissionAudioState: string | null = null;\n\n  static registerHook(name: string, fun: Function) {\n    VideoWebStream.hooks[name] = fun;\n  }\n\n  constructor(public consoleSrv: ConsoleService) {\n\n    this.micWatcher.onChange((currentPermission) => {\n      this.lastPermissionAudioState = currentPermission;\n    });\n    this.camWatcher.onChange((currentPermission) => {\n      this.lastPermissionVideoState = currentPermission;\n    });\n\n    this.emitterDevices.then((devices: DevicesData) => {\n      this.autoSelectMicrophoneAndVideoDevice(devices);\n      VideoWebStream.lastDevices = devices;\n    });\n    this.emitterStreams.subscribe((stream) => {\n      this.updateSelectedDevice(stream);\n      this.updateVolumeMeter(stream?.audio);\n    });\n\n    navigator.mediaDevices.ondevicechange = async (event) => {\n      this.askAgainGetDevices();\n    };\n    this.askAgainGetDevices();\n\n    // Just try...\n    this.startAudioContext().then(() => {\n    }).catch((err: any) => { });\n  }\n\n  async startAudioContext() {\n    this.audioContext = null;\n    const ac = await AudioService.getAudioContext();\n    this.audioContext = ac;\n  }\n\n  async hasMicrophonePermission() {\n    // First try Permissions API if available\n    if (navigator.permissions && navigator.permissions.query) {\n      try {\n        const result = await navigator.permissions.query({ name: 'microphone' as PermissionName });\n\n        if (result.state === 'granted') {\n          return \"granted\";\n        } else if (result.state === 'denied') {\n          return \"denied\";\n        } else {\n          return \"prompt\"; // not decided yet\n        }\n      } catch (err) {\n        // Some browsers throw if not supported (like Safari)\n        console.warn(\"Permissions API not fully supported:\", err);\n      }\n    }\n\n    // Fallback: try requesting microphone access (needed on Safari)\n    try {\n      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      stream.getTracks().forEach(track => track.stop()); // stop immediately\n      return \"granted\";\n    } catch (err: any) {\n      if (err.name === \"NotAllowedError\" || err.name === \"PermissionDeniedError\") {\n        return \"denied\";\n      }\n      return \"prompt\"; // e.g., if browser requires user gesture before prompting\n    }\n  }\n\n  getAnalyser(): boolean {\n    if (!this.audioContext) {\n      return false;\n    }\n    this.analyser = this.audioContext.createAnalyser();\n    this.analyser.fftSize = 256;\n    this.dataArray = new Uint8Array(this.analyser.frequencyBinCount);\n    return true;\n  }\n\n  updateVolumeMeter(audio?: MediaStream) {\n    if (!audio) {\n      return;\n    }\n    this.getAnalyser();\n    if (!this.audioContext || !this.analyser || !this.dataArray) {\n      return;\n    }\n\n    if (this.volumeMeterTimer) {\n      clearInterval(this.volumeMeterTimer);\n    }\n\n    if (this.microphone) {\n      this.microphone.disconnect();\n    }\n    // Create a source from the microphone input\n    this.microphone = this.audioContext.createMediaStreamSource(audio);\n    // Connect the source to the analyser\n    this.microphone.connect(this.analyser);\n    let processing = false;\n    const updateVolumeMeter = () => {\n      if (processing) {\n        return;\n      }\n      processing = true;\n      if (this.audioContext && this.analyser && this.dataArray) {\n        this.analyser.getByteFrequencyData(this.dataArray as any);\n        // Calculate the average volume level\n        let sum = 0;\n        for (let i = 0; i < this.dataArray.length; i++) {\n          sum += this.dataArray[i];\n        }\n        const volume = sum / this.dataArray.length;\n        const percentage = (volume / 255) * 100;\n        const enhanced = (200 * Math.atan(percentage / 10)) / Math.PI;\n        const classification = 10 * Math.ceil(enhanced / 10);\n        this.volumeEmitter.emit(classification);\n      }\n      processing = false;\n    };\n\n    // Start the volume meter\n    this.volumeMeterTimer = setInterval(() => {\n      updateVolumeMeter();\n    }, 100);\n  }\n\n  autoReloadDevices(): EmitterThen<DevicesData> {\n    return this.emitterDevices;\n  }\n\n  async askAgainGetDevices() {\n    const nextDevices = await this.getDevices();\n    this.emitterDevices.update(nextDevices);\n    if ((nextDevices.audios.length == 0 && this.lastPermissionAudioState != \"denied\")\n      || (nextDevices.videos.length == 0 && this.lastPermissionVideoState != \"denied\")) {\n      setTimeout(() => {\n        this.askAgainGetDevices();\n      }, 1000);\n    }\n  }\n\n  async getDevices(): Promise<DevicesData> {\n    await navigator.mediaDevices.getUserMedia({ audio: true });\n    // AFAICT in Safari this only gets default devices until gUM is called :/\n    let deviceInfos: MediaDeviceInfo[] =\n      await navigator.mediaDevices.enumerateDevices();\n    const videos: Array<DeviceOption> = [];\n    const audios: Array<DeviceOption> = [];\n    const speaker: Array<DeviceOption> = [];\n    deviceInfos = deviceInfos.filter((deviceInfo) => {\n      return !!deviceInfo.deviceId;\n    });\n    for (const deviceInfo of deviceInfos) {\n      if (deviceInfo.kind === 'audioinput') {\n        const deviceOption: DeviceOption = {\n          id: deviceInfo.deviceId,\n          txt: deviceInfo.label || `Microphone ${audios.length + 1}`,\n        };\n        audios.push(deviceOption);\n      } else if (deviceInfo.kind === 'videoinput') {\n        const deviceOption: DeviceOption = {\n          id: deviceInfo.deviceId,\n          txt: deviceInfo.label || `Camera ${videos.length + 1}`,\n        };\n        videos.push(deviceOption);\n      }\n      if (deviceInfo.kind === 'audiooutput') {\n        const deviceOption: DeviceOption = {\n          id: deviceInfo.deviceId,\n          txt: deviceInfo.label || `Speaker ${speaker.length + 1}`,\n        };\n        speaker.push(deviceOption);\n      }\n    }\n    this.devices = { videos, audios, speaker };\n    this.autoFixSelectedSpeaker();\n    return this.devices;\n  }\n\n  sleep(millis: number): Promise<void> {\n    return new Promise((resolve) => {\n      setTimeout(() => {\n        resolve();\n      }, millis);\n    });\n  }\n\n  async waitUntilActive(stream: MediaStream) {\n    return new Promise<void>(async (resolve) => {\n      do {\n        await this.sleep(100);\n      } while (!stream.active);\n      resolve();\n    });\n  }\n\n  stopStream() {\n    const streams: any = this.streams;\n    if (streams) {\n      const llaves = Object.keys(streams);\n      for (let i = 0; i < llaves.length; i++) {\n        const llave = llaves[i];\n        streams[llave].getTracks().forEach((track: MediaStreamTrack) => {\n          track.stop();\n        });\n      }\n    }\n  }\n\n  async getUserMedia(payload?: GetUserMediaData): Promise<MultiScaleMediaStream> {\n    if (\"getUserMedia\" in VideoWebStream.hooks) {\n      return await VideoWebStream.hooks[\"getUserMedia\"](this, payload);\n    }\n    const audioSource = this.currentDevices.audio;\n    const videoSource = this.currentDevices.video;\n    //this.logCurrentDevices();\n    if (\n      this.lastUpdatedVideoDevice != videoSource ||\n      this.lastUpdatedAudioDevice != audioSource\n    ) {\n      this.stopStream();\n    } else {\n      if (this.streams) {\n        this.emitterStreams.emit(this.streams);\n        return this.streams;\n      }\n    }\n    try {\n      const constraintsVideo = {\n        video: { deviceId: videoSource ? { exact: videoSource } : undefined },\n      };\n      const constraintsAudio = {\n        audio: { deviceId: audioSource ? { exact: audioSource } : undefined },\n      };\n      const stream = await navigator.mediaDevices.getUserMedia(\n        constraintsVideo\n      );\n      const streamAudio = await navigator.mediaDevices.getUserMedia(\n        constraintsAudio\n      );\n\n      // Wait until active\n      await this.waitUntilActive(stream);\n      await this.waitUntilActive(streamAudio);\n\n      const videoTrack: any = stream.getVideoTracks()[0];\n      const { width, height } = videoTrack.getSettings();\n\n      // https://mediastreamtrack.glitch.me/script.js\n      const trackProcessor = new MediaStreamTrackProcessor({\n        track: videoTrack,\n      });\n      const trackGenerator = new MediaStreamTrackGenerator({\n        kind: 'video',\n        label: 'small',\n      });\n      const profileHeight = VideoWebStream.TUMBNAIL_HEIGHT;\n      const scale = profileHeight / height;\n      const profileWidth = scale * width;\n\n      const transformer = new TransformStream({\n        async transform(videoFrame: any, controller: any) {\n          const resize = scaleSource(\n            width,\n            height,\n            profileWidth,\n            profileHeight\n          );\n\n          const bitmap = await window.createImageBitmap(\n            videoFrame,\n            resize.x,\n            resize.y,\n            resize.w,\n            resize.h,\n            {\n              resizeWidth: profileWidth,\n              resizeHeight: profileHeight,\n            }\n          );\n          const timestamp = videoFrame.timestamp;\n          videoFrame.close();\n          const next = new VideoFrame(bitmap, { timestamp });\n          controller.enqueue(next);\n        },\n      });\n\n      trackProcessor.readable\n        .pipeThrough(transformer)\n        .pipeTo(trackGenerator.writable); // pipe the video stream through the transformer function\n\n      const processedStream = new MediaStream();\n      processedStream.addTrack(trackGenerator);\n\n      const response: MultiScaleMediaStream = {\n        big: stream,\n        small: processedStream,\n        audio: streamAudio,\n      };\n      this.streams = response;\n      this.emitterStreams.emit(response);\n\n      this.lastUpdatedVideoDevice = videoSource;\n      this.lastUpdatedAudioDevice = audioSource;\n\n      return response;\n    } catch (err) {\n      this.clearStream();\n      throw err;\n    }\n  }\n\n  clearStream() {\n    this.stopStream();\n    this.streams = null;\n    this.emitterStreams.emit(null);\n  }\n\n  logCurrentDevices() {\n    const audioSource = this.currentDevices.audio;\n    const videoSource = this.currentDevices.video;\n    this.consoleSrv.log(\n      `VideoWebStream.logCurrentDevices... video:${videoSource} audio:${audioSource}`\n    );\n  }\n\n  useSpeakerDevice(outputDevice: string) {\n    this.consoleSrv.log(`useSpeakerDevice ${outputDevice}`);\n    this.currentDevices.speaker = outputDevice;\n    this.storeCustomSelectedDevices();\n  }\n\n  useAudioDevice(audioDevice: string) {\n    this.consoleSrv.log(`useAudioDevice ${audioDevice}`);\n    this.currentDevices.audio = audioDevice;\n    this.storeCustomSelectedDevices();\n  }\n\n  useVideoDevice(videoDevice: string) {\n    this.consoleSrv.log(`useVideoDevice ${videoDevice}`);\n    this.currentDevices.video = videoDevice;\n    this.storeCustomSelectedDevices();\n  }\n\n  updateSelectedDevice(streams: MultiScaleMediaStream | null) {\n    //this.logCurrentDevices();\n    if (!streams) {\n      this.currentDevices.audio = null;\n      this.currentDevices.video = null;\n    } else {\n      this.currentDevices.audio = [...this.devices.audios].filter((option) => {\n        const audioTrack = streams.audio.getAudioTracks()[0];\n        const response = option.txt === audioTrack.label;\n        return response;\n      })[0]?.id;\n      this.currentDevices.video = [...this.devices.videos].filter((option) => {\n        const videoTrack = streams.big.getVideoTracks()[0];\n        const response = (option.txt === videoTrack.label || option.txt === (videoTrack as any).customLabel);\n        return response;\n      })[0]?.id;\n    }\n    this.storeCustomSelectedDevices();\n    //this.logCurrentDevices();\n  }\n\n  storeCustomSelectedDevices() {\n    let audioInput = '';\n    let videoInput = '';\n    let audioOutput = '';\n    const microphoneDevice = this.searchMicrophoneDevice(\n      this.devices,\n      this.currentDevices.audio\n    );\n    const videoDevice = this.searchVideoDevice(\n      this.devices,\n      this.currentDevices.video\n    );\n    const speakerDevice = this.searchSpeakerDevice(\n      this.devices,\n      this.currentDevices.speaker\n    );\n    //this.consoleSrv.log('storeCustomSelectedDevices');\n    //this.consoleSrv.log(microphoneDevice);\n    //this.consoleSrv.log(videoDevice);\n    //this.consoleSrv.log(speakerDevice);\n    if (microphoneDevice) {\n      audioInput = microphoneDevice.txt;\n    }\n    if (videoDevice) {\n      videoInput = videoDevice.txt;\n    }\n    if (speakerDevice) {\n      audioOutput = speakerDevice.txt;\n    }\n    const DAYS = 365;\n    MyCookies.setCookie('default_audio_input', audioInput, DAYS);\n    MyCookies.setCookie('default_video', videoInput, DAYS);\n    MyCookies.setCookie('default_audio_output', audioOutput, DAYS);\n  }\n\n  searchSpeakerDevice(\n    devices: DevicesData,\n    query: string | null,\n    type: string = 'id'\n  ) {\n    const current = devices.speaker.filter((device) => {\n      return query == (device as any)[type];\n    });\n    if (current.length == 0) {\n      return null;\n    } else {\n      return current[0];\n    }\n  }\n\n  searchMicrophoneDevice(\n    devices: DevicesData,\n    query: string | null,\n    type: string = 'id'\n  ) {\n    const current = devices.audios.filter((device) => {\n      return query == (device as any)[type];\n    });\n    if (current.length == 0) {\n      return null;\n    } else {\n      return current[0];\n    }\n  }\n\n  searchVideoDevice(\n    devices: DevicesData,\n    query: string | null,\n    type: string = 'id'\n  ) {\n    const current = devices.videos.filter((device) => {\n      return query == (device as any)[type];\n    });\n    if (current.length == 0) {\n      return null;\n    } else {\n      return current[0];\n    }\n  }\n\n  autoFixSelectedSpeaker() {\n    if (!this.currentDevices.speaker) {\n      if (this.devices.speaker.length > 0) {\n        // Search in cookie\n        const oldValue = MyCookies.getCookie('default_audio_output');\n        const oldDevice = this.searchSpeakerDevice(\n          this.devices,\n          oldValue,\n          'txt'\n        );\n        if (oldDevice) {\n          this.currentDevices.speaker = oldDevice.id;\n        } else {\n          this.currentDevices.speaker = this.devices.speaker[0].id;\n          this.storeCustomSelectedDevices();\n        }\n      }\n    }\n  }\n\n  static isMobile() {\n    if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/Android/i)) {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Select cold cookie selected value, or first if exist at least 1\n   * @param devices\n   */\n  autoSelectMicrophoneAndVideoDevice(devices: DevicesData) {\n    //this.logCurrentDevices();\n    // Setup audio input microphone\n    if (devices.audios.length > 0) {\n      if (!this.currentDevices.audio) {\n        const oldValue = MyCookies.getCookie('default_audio_input');\n        const oldDevice = this.searchMicrophoneDevice(devices, oldValue, 'txt');\n        if (oldDevice) {\n          this.currentDevices.audio = oldDevice.id;\n        }\n      }\n      const currentAudio = this.searchMicrophoneDevice(\n        devices,\n        this.currentDevices.audio\n      );\n      if (!currentAudio) {\n        this.currentDevices.audio = devices.audios[0].id;\n      }\n    } else {\n      this.currentDevices.audio = null;\n    }\n    // Setup video\n    if (devices.videos.length > 0) {\n      if (!this.currentDevices.video) {\n        const oldValue = MyCookies.getCookie('default_video');\n        const oldDevice = this.searchVideoDevice(devices, oldValue, 'txt');\n        if (oldDevice) {\n          this.currentDevices.video = oldDevice.id;\n        }\n        // if it is mobile \n        if (!this.currentDevices.video && VideoWebStream.isMobile()) {\n          // Try to find front camera\n          const frontCameras = devices.videos.filter((oneDevice) => {\n            return /front/ig.test(oneDevice.txt);\n          });\n          if (frontCameras.length > 0) {\n            this.currentDevices.video = frontCameras[0].id;\n          }\n        }\n      }\n      const currentVideo = this.searchVideoDevice(\n        devices,\n        this.currentDevices.video\n      );\n      if (!currentVideo) {\n        this.currentDevices.video = devices.videos[0].id;\n      }\n    } else {\n      this.currentDevices.video = null;\n    }\n    this.storeCustomSelectedDevices();\n    //this.logCurrentDevices();\n  }\n\n  handleError(error: any) {\n    this.consoleSrv.error('Error: ', error);\n  }\n\n  setVideoEnabled(videoState: boolean) {\n    if (\"setVideoEnabled\" in VideoWebStream.hooks) {\n      return VideoWebStream.hooks[\"setVideoEnabled\"](this, videoState);\n    }\n\n    if (this.streams?.big) {\n      this.streams?.big.getVideoTracks().forEach((track) => {\n        track.enabled = videoState;\n      });\n    }\n    if (this.streams?.small) {\n      this.streams?.small.getVideoTracks().forEach((track) => {\n        track.enabled = videoState;\n      });\n    }\n  }\n}\n","import { BaseProcesor } from './BaseProcesor';\nimport { ContextComponent } from '../context.component';\n\nexport class EchoLogProcessor extends BaseProcesor {\n  MAX_ELEMENTS = 10;\n  constructor(context: ContextComponent) {\n    super(context);\n  }\n  async execute(args: any) {\n    this.context.log.unshift(args.message);\n    if (this.context.log.length > this.MAX_ELEMENTS) {\n      this.context.log.splice(\n        this.MAX_ELEMENTS,\n        this.context.log.length - this.MAX_ELEMENTS\n      );\n    }\n    this.context.log = [...this.context.log];\n  }\n}\n","import { ChangesData, ContextComponent } from '../context.component';\nimport { BaseProcesor } from './BaseProcesor';\n\nexport class ReceiveLiveChangesProcessor extends BaseProcesor {\n  constructor(context: ContextComponent) {\n    super(context);\n  }\n  async execute(changes: ChangesData) {\n    if (changes.orig !== this.context.socketId) {\n      this.context.livemodel = this.context.builder.affect(changes);\n    }\n  }\n}\n","import { ContextComponent } from '../context.component';\nimport { RTCCom } from '../RTCCom';\nimport { BaseProcesor } from './BaseProcesor';\n\nexport class RemoveUserProcessor extends BaseProcesor {\n  constructor(context: ContextComponent) {\n    super(context);\n  }\n  async execute(args: any) {\n    const index = this.context.userList.indexOf(args.socketId);\n    if (index >= 0) {\n      this.context.userList.splice(index, 1);\n      RTCCom.closeChannelWith(args.socketId);\n      RTCCom.unregisterAudioVideoElement(args.socketId);\n    }\n  }\n}\n","import { BaseProcesor } from './BaseProcesor';\nimport { ContextComponent } from '../context.component';\n\nexport class SetModelProcessor extends BaseProcesor {\n  constructor(context: ContextComponent) {\n    super(context);\n  }\n  async execute(args: any) {\n    const { model } = args;\n    //console.log(`SetModelProcessor ${JSON.stringify(model)}`);\n    this.context.setModel(model);\n  }\n}\n","import { ContextComponent } from '../context.component';\nimport { BaseProcesor } from './BaseProcesor';\n\nexport class UpdateUserListProcessor extends BaseProcesor {\n  constructor(context: ContextComponent) {\n    super(context);\n  }\n  async execute(args: any) {\n    if (this.context.userList instanceof Array) {\n      this.context.userList.splice(0, this.context.userList.length);\n    }\n    this.context.userList.push(...args.socketIds);\n    this.context.cdr.detectChanges();\n    requestAnimationFrame(() => {\n      //console.log(JSON.stringify(this.context.userList, null, 4));\n      this.context.registerVideoElements();\n      this.context.registerAudioElements();\n    });\n  }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function multipleEmailValidator(max: number): ValidatorFn {\n  return (control: AbstractControl): { [key: string]: any } | null => {\n    let emails = control.value ? control.value.split(',') : [];\n    const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$/;\n    const invalidEmails = emails.filter(\n      (email: string) => !emailPattern.test(email.trim())\n    );\n    if (invalidEmails.length) {\n      return invalidEmails.length\n        ? { invalidEmail: { value: invalidEmails.join(',') } }\n        : null;\n    } else {\n      emails = emails.filter((email: string) => email.trim());\n      return emails.length > max\n        ? { maxEmails: { value: emails.length } }\n        : null;\n    }\n  };\n}\n","import { Injectable } from '@angular/core';\nimport { MatDateFormats, NativeDateAdapter } from '@angular/material/core';\nimport { MyDates } from '@ejfdelgado/ejflab-common/src/MyDates';\n\nexport const CUSTOM_DATE_FORMATS: MatDateFormats = {\n    parse: {\n        dateInput: { month: 'short', year: 'numeric', day: 'numeric' }\n    },\n    display: {\n        dateInput: 'input',\n        monthYearLabel: { year: 'numeric', month: 'short' },\n        dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\n        monthYearA11yLabel: { year: 'numeric', month: 'long' },\n    }\n};\n\n// extend NativeDateAdapter's format method to specify the date format.\n@Injectable()\nexport class MMDDYYYYAdapter extends NativeDateAdapter {\n    epochToText(value: number | null) {\n        if (!value) { return ''; }\n        const siguiente = new Date(value);\n        const anio1 = siguiente.getFullYear();\n        const mes1 = siguiente.getMonth() + 1;\n        const dia1 = siguiente.getDate();\n        return `${MyDates.lPad2(mes1)}/${MyDates.lPad2(dia1)}/${anio1}`;\n    }\n\n    textToEpoch(value: string): number | null {\n        const partes = /(\\d{1,2})[\\/]?(\\d{1,2})[\\/]?(\\d{4})/.exec(value);\n        if (partes) {\n            return new Date(parseInt(partes[3]), parseInt(partes[1]) - 1, parseInt(partes[2])).getTime();\n        } else {\n            return null;\n        }\n    }\n    override format(date: Date, displayFormat: Object): string {\n        if (displayFormat === 'input') {\n            return this.epochToText(date.getTime());\n        } else {\n            return date.toDateString();\n        }\n    }\n    override parse(value: any, parseFormat: string): Date | null {\n        const epoch = this.textToEpoch(value);\n        if (epoch) {\n            return new Date(epoch);\n        }\n        return null;\n    }\n}\n\n@Injectable()\nexport class YYYYMMDDAdapter extends NativeDateAdapter {\n    epochToText(value: number | null) {\n        if (!value) { return ''; }\n        const siguiente = new Date(value);\n        const anio1 = siguiente.getFullYear();\n        const mes1 = siguiente.getMonth() + 1;\n        const dia1 = siguiente.getDate();\n        return `${anio1}/${MyDates.lPad2(mes1)}/${MyDates.lPad2(dia1)}`;\n    }\n\n    textToEpoch(value: string): number | null {\n        const partes = /(\\d{4})[\\/]?(\\d{1,2})[\\/]?(\\d{1,2})/.exec(value);\n        if (partes) {\n            return new Date(parseInt(partes[1]), parseInt(partes[2]) - 1, parseInt(partes[3])).getTime();\n        } else {\n            return null;\n        }\n    }\n    override format(date: Date, displayFormat: Object): string {\n        if (displayFormat === 'input') {\n            return this.epochToText(date.getTime());\n        } else {\n            return date.toDateString();\n        }\n    }\n    override parse(value: any, parseFormat: string): Date | null {\n        const epoch = this.textToEpoch(value);\n        if (epoch) {\n            return new Date(epoch);\n        }\n        return null;\n    }\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ContenteditableValueAccessorModule } from '@tinkoff/angular-contenteditable-accessor';\nimport { WebcamModule } from 'ngx-webcam';\n// Material\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatSliderModule } from '@angular/material/slider';\n// Components\nimport { CardComponent } from './components/card/card.component';\nimport { ImagepickerComponent } from './components/imagepicker/imagepicker.component';\nimport { StatusbarComponent } from './components/statusbar/statusbar.component';\nimport { TxtfileeditorComponent } from './components/txtfileeditor/txtfileeditor.component';\nimport { BlobeditorComponent } from './components/blobeditor/blobeditor.component';\nimport { FileordevicepopupComponent } from './components/fileordevicepopup/fileordevicepopup.component';\nimport { FilepickerComponent } from './components/filepicker/filepicker.component';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { CanvaseditorComponent } from './components/canvaseditor/canvaseditor.component';\nimport { ScrollnavComponent } from './components/scrollnav/scrollnav.component';\nimport { ScrollfilesComponent } from './components/scrollfiles/scrollfiles.component';\nimport { PrejsonComponent } from './components/prejson/prejson.component';\nimport { ScrollfileComponent } from './components/scrollfile/scrollfile.component';\nimport { AdduserrolepopupComponent } from './components/adduserrolepopup/adduserrolepopup.component';\nimport { AlertComponent } from './components/alert/alert.component';\nimport { AuthorizationpopupComponent } from './components/authorizationpopup/authorizationpopup.component';\nimport { ConfirmComponent } from './components/confirm/confirm.component';\nimport { GenericComponent } from './components/generic/generic.component';\nimport { IndicatorComponent } from './components/indicator/indicator.component';\nimport { LoginpopupComponent } from './components/loginpopup/loginpopup.component';\nimport { MultiplepagesComponent } from './components/multiplepages/multiplepages.component';\nimport { PagepopupComponent } from './components/pagepopup/pagepopup.component';\nimport { PayupopupComponent } from './components/payupopup/payupopup.component';\nimport { UserpopupComponent } from './components/userpopup/userpopup.component';\nimport { WebcamComponent } from './components/webcam/webcam.component';\n// Pipes\nimport { FechaCardPipe } from './pipes/fecha-card.pipe';\nimport { SortByNamePipe } from './pipes/sort-by-name.pipe';\nimport { JsonColorPipe } from './pipes/json-color.pipe';\nimport { Json2svg } from './pipes/json2svg.pipe';\nimport { Epoch2datePipe } from './pipes/epoch2date.pipe';\nimport { TranslatePipe } from './pipes/translate.pipe';\nimport { InterpolatePipe } from './pipes/interpolate.pipe';\n// Directives\nimport { NgInit } from './directives/NgInit';\nimport { MoveNextByEnterDirective } from './directives/MoveNextByEnter.directive';\nimport { MMDDYYYYAdapter } from './adapters/date-adapters';\nimport { SincePipe } from './pipes/since.pipe';\nimport { AgePipe } from './pipes/age.pipe';\n\n@NgModule({\n  declarations: [\n    // Components\n    CardComponent,\n    ImagepickerComponent,\n    StatusbarComponent,\n    TxtfileeditorComponent,\n    BlobeditorComponent,\n    FilepickerComponent,\n    FileordevicepopupComponent,\n    CanvaseditorComponent,\n    ScrollnavComponent,\n    ScrollfilesComponent,\n    PrejsonComponent,\n    AdduserrolepopupComponent,\n    AlertComponent,\n    AuthorizationpopupComponent,\n    ConfirmComponent,\n    GenericComponent,\n    IndicatorComponent,\n    LoginpopupComponent,\n    MultiplepagesComponent,\n    PagepopupComponent,\n    PayupopupComponent,\n    UserpopupComponent,\n    WebcamComponent,\n    ScrollfileComponent,\n    // Pipes\n    SortByNamePipe,\n    JsonColorPipe,\n    FechaCardPipe,\n    Epoch2datePipe,\n    TranslatePipe,\n    Json2svg,\n    InterpolatePipe,\n    SincePipe,\n    AgePipe,\n    // Directives\n    NgInit,\n    MoveNextByEnterDirective,\n    // Adapters\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    ContenteditableValueAccessorModule,\n    WebcamModule,\n    MatIconModule,\n    MatDialogModule,\n    MatMenuModule,\n    MatInputModule,\n    MatFormFieldModule,\n    MatButtonModule,\n    MatToolbarModule,\n    MatIconModule,\n    MatProgressBarModule,\n    MatSliderModule,\n  ],\n  exports: [\n    // Components\n    CardComponent,\n    ImagepickerComponent,\n    StatusbarComponent,\n    TxtfileeditorComponent,\n    BlobeditorComponent,\n    FilepickerComponent,\n    FileordevicepopupComponent,\n    CanvaseditorComponent,\n    ScrollnavComponent,\n    ScrollfilesComponent,\n    PrejsonComponent,\n    AdduserrolepopupComponent,\n    AlertComponent,\n    AuthorizationpopupComponent,\n    ConfirmComponent,\n    GenericComponent,\n    IndicatorComponent,\n    LoginpopupComponent,\n    MultiplepagesComponent,\n    PagepopupComponent,\n    PayupopupComponent,\n    UserpopupComponent,\n    WebcamComponent,\n    ScrollfileComponent,\n    // Pipes\n    SortByNamePipe,\n    JsonColorPipe,\n    FechaCardPipe,\n    Epoch2datePipe,\n    TranslatePipe,\n    Json2svg,\n    InterpolatePipe,\n    SincePipe,\n    AgePipe,\n    // Directives\n    NgInit,\n    MoveNextByEnterDirective,\n  ],\n  providers: [\n    SortByNamePipe,\n    JsonColorPipe,\n    FechaCardPipe,\n    Epoch2datePipe,\n    TranslatePipe,\n    Json2svg,\n    InterpolatePipe,\n    SincePipe,\n    AgePipe,\n    { provide: 'msCacheLocation', useValue: 'sessionStorage' }\n  ],\n})\nexport class MycommonModule { }\n","/// <reference path=\"./index.d.ts\" />\n/*\n * Public API Surface of ejflab-front-lib\n */\n\n// Services\nexport * from './lib/mycommon/services/audio.service';\nexport * from './lib/mycommon/services/authorization.service';\nexport * from './lib/mycommon/services/auth.service';\nexport * from './lib/mycommon/services/backendPage.service';\nexport * from './lib/mycommon/services/call.service';\nexport * from './lib/mycommon/services/console.service';\nexport * from './lib/mycommon/services/dictate-service';\nexport * from './lib/mycommon/services/fileInterface';\nexport * from './lib/mycommon/services/file.service';\nexport * from './lib/mycommon/services/flowchart.service';\nexport * from './lib/mycommon/services/gce.service';\nexport * from './lib/mycommon/services/http.service';\nexport * from './lib/mycommon/services/imagedetection.service';\nexport * from './lib/mycommon/services/imagiation.service';\nexport * from './lib/mycommon/services/indicator.service';\nexport * from './lib/mycommon/services/localfilejson';\nexport * from './lib/mycommon/services/localfile.service';\nexport * from './lib/mycommon/services/localpage.service';\nexport * from './lib/mycommon/services/localtuple.service';\nexport * from './lib/mycommon/services/login.service';\nexport * from './lib/mycommon/services/mail.service';\nexport * from './lib/mycommon/services/microsoftAuth.service';\nexport * from './lib/mycommon/services/minio.service';\nexport * from './lib/mycommon/services/modal.service';\nexport * from './lib/mycommon/services/modalError.service';\nexport * from './lib/mycommon/services/mongo.service';\nexport * from './lib/mycommon/services/myaudio.service';\nexport * from './lib/mycommon/services/opencv.service';\nexport * from './lib/mycommon/services/page.service';\nexport * from './lib/mycommon/services/payu.service';\nexport * from './lib/mycommon/services/picture360.service';\nexport * from './lib/mycommon/services/translate.service';\nexport * from './lib/mycommon/services/tuple.service';\nexport * from './lib/mycommon/services/user.service';\nexport * from './lib/mycommon/services/webcam.service';\nexport * from './lib/mycommon/services/config.service';\n\n// Extra\nexport * from './lib/mycommon/interceptors/JwtInterceptor';\nexport * from './lib/mycommon/components/base/CameraPermissionWatcher';\nexport * from './lib/mycommon/components/base/MicrophonePermissionWatcher';\n\n// Components\nexport * from './lib/mycommon/components/adduserrolepopup/adduserrolepopup.component';\nexport * from './lib/mycommon/components/alert/alert.component';\nexport * from './lib/mycommon/components/authorizationpopup/authorizationpopup.component';\nexport * from './lib/mycommon/components/base/base.component';\nexport * from './lib/mycommon/components/base/baseMs.component';\nexport * from './lib/mycommon/components/base/context.component';\nexport * from './lib/mycommon/components/blobeditor/blobeditor.component';\nexport * from './lib/mycommon/components/canvaseditor/canvaseditor.component';\nexport * from './lib/mycommon/components/card/card.component';\nexport * from './lib/mycommon/components/confirm/confirm.component';\nexport * from './lib/mycommon/components/fileordevicepopup/fileordevicepopup.component';\nexport * from './lib/mycommon/components/filepicker/filepicker.component';\nexport * from './lib/mycommon/components/generic/generic.component';\nexport * from './lib/mycommon/components/imagepicker/imagepicker.component';\nexport * from './lib/mycommon/components/indicator/indicator.component';\nexport * from './lib/mycommon/components/loginpopup/loginpopup.component';\nexport * from './lib/mycommon/components/multiplepages/multiplepages.component';\nexport * from './lib/mycommon/components/pagepopup/pagepopup.component';\nexport * from './lib/mycommon/components/payupopup/payupopup.component';\nexport * from './lib/mycommon/components/prejson/prejson.component';\nexport * from './lib/mycommon/components/scrollfile/scrollfile.component';\nexport * from './lib/mycommon/components/scrollfiles/scrollfiles.component';\nexport * from './lib/mycommon/components/scrollnav/scrollnav.component';\nexport * from './lib/mycommon/components/statusbar/statusbar.component';\nexport * from './lib/mycommon/components/txtfileeditor/txtfileeditor.component';\nexport * from './lib/mycommon/components/userpopup/userpopup.component';\nexport * from './lib/mycommon/components/webcam/webcam.component';\n\n// Pipes\nexport * from './lib/mycommon/pipes/epoch2date.pipe';\nexport * from './lib/mycommon/pipes/fecha-card.pipe';\nexport * from './lib/mycommon/pipes/json-color.pipe';\nexport * from './lib/mycommon/pipes/json2svg.pipe';\nexport * from './lib/mycommon/pipes/sort-by-name.pipe';\nexport * from './lib/mycommon/pipes/translate.pipe';\nexport * from './lib/mycommon/pipes/interpolate.pipe';\nexport * from './lib/mycommon/pipes/since.pipe';\nexport * from './lib/mycommon/pipes/age.pipe';\n\n// Directives\nexport * from './lib/mycommon/directives/NgInit';\nexport * from './lib/mycommon/directives/MoveNextByEnter.directive';\n\n// Interfaces\nexport * from './lib/mycommon/components/base/VideoWebStream';\nexport * from './lib/mycommon/components/base/RTCCom';\nexport * from './lib/mycommon/components/base/PromiseEmitter';\nexport * from './lib/mycommon/components/base/EmitterThen';\nexport * from './lib/mycommon/components/base/processors/BaseProcesor';\nexport * from './lib/mycommon/components/base/processors/EchoLogProcessor';\nexport * from './lib/mycommon/components/base/processors/ReceiveLiveChangesProcessor';\nexport * from './lib/mycommon/components/base/processors/RemoveUserProcessor';\nexport * from './lib/mycommon/components/base/processors/SendLiveChangesProcessor';\nexport * from './lib/mycommon/components/base/processors/SetModelProcessor';\nexport * from './lib/mycommon/components/base/processors/UpdateUserListProcessor';\n\nexport * from './lib/mycommon/validators/MultipleEmailValidator';\nexport * from './lib/mycommon/interfaces/login-data.interface';\n\n// Adapters\nexport * from './lib/mycommon/adapters/date-adapters';\n\n// Modules\nexport * from './lib/mycommon/mycommon.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.IndicatorService","i3.ModalErrorService","i4.AuthService","i3","i4","i1.IndicatorService","i1.TranslateService","i2","i4.TranslatePipe","i2.ConfigService","i3.ModalService","i5","i6","i7","i8","i9","i1.HttpService","i1.AuthService","i2.ModalService","i4.BackendPageService","i5.HttpService","i1.ConfigService","i1.ModalService","i2.ConsoleService","uuidv4","i2.AuthService","i5.IndicatorService","i10","i2.HttpService","i5.FechaCardPipe","i2.PageService","i3.AuthService","i4.ModalService","i11","i12.CardComponent","i3.FileService","i3.BackendPageService","i4.PageService","i5.ModalService","i11.ImagepickerComponent","i4.HttpService","i3.HttpService","i6.BackendPageService","i8.ImagepickerComponent","switchMap","i1.FlowchartService","i2.CallService","i4.ConsoleService","i5.AuthService","i7.TupleService","i8.FileService","i9.ModalService","i10.WebcamService","i12.ConsoleService","i3.MicrosoftAuthService","i5.ConsoleService","i4.FileService","i2.FileService","i4.IndicatorService","i1.FileService","i3.WebcamService","i4.ScrollfileComponent","i5.SortByNamePipe","i1.LoginService","i3.AuthorizationService","i5.MyUserService","i6.ModalService","i1.WebcamService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAEa,cAAc,CAAA;AAIzB,IAAA,WAAA,GAAA;AAFA,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAChD,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAE1B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YACrC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC9B,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;;oBAEnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACtC;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,OAAO,CAAC,IAAU,EAAA;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzB;AAED,IAAA,MAAM,IAAI,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AACF;;MCpBY,YAAY,CAAA;aAEd,IAAY,CAAA,YAAA,GAAwB,IAAxB,CAA6B,EAAA;AACzC,IAAA,SAAA,IAAA,CAAA,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC,EAAA;AAEtC,IAAA,WAAA,GAAA,GAAiB;IAEjB,aAAa,sBAAsB,GAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAC5B,YAAA,YAAY,CAAC,YAAY,GAAG,KAAK,MAAM,CAAC,YAAY,IAAK,MAAc,CAAC,kBAAkB,GAAG,CAAC;SACjG;QACD,IAAI,YAAY,CAAC,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE;AACjD,YAAA,MAAM,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;SAC5C;QACD,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;KAC3D;IAED,aAAa,eAAe,GAAA;AACxB,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;KACvC;+GAnBQ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFT,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAET,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;MCaY,IAAI,CAAA;IAKf,WAAY,CAAA,OAAiB,EAAE,IAA+B,EAAA;AAC5D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;AACjC,QAAA,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SAClB;aAAM,IAAI,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;AAC7B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACzB;IACD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KACjC;AACO,IAAA,SAAS,CAAC,OAAiB,EAAA;QACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACpD;IACD,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;KAC9C;AACF,CAAA;MAKY,gBAAgB,CAAA;AAG3B,IAAA,WAAA,GAAA;QADA,IAAO,CAAA,OAAA,GAAgB,EAAE,CAAC;AAExB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAoB,CAAC;KACpD;AACO,IAAA,OAAO,CAAC,MAAmB,EAAA;AACjC,QAAA,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,IAAI,MAAM,IAAI,CAAC,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC/B,gBAAA,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;SACF;KACF;IACO,MAAM,GAAA;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;KACtD;AACD,IAAA,SAAS,CAAC,OAAiB,EAAA;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACvC;AACD,IAAA,KAAK,CAAC,IAA+B,EAAA;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC;QACT,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACb;AACD,IAAA,IAAI,CAAC,OAAqB,EAAA;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,OAAO,CAAC,OAAO,CAAC,MAAK;YACnB,KAAK,CAAC,IAAI,EAAE,CAAC;AACf,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;;QAEN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAClC,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;+GA3CU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MC1CqB,YAAY,CAAA;AAEjC,CAAA;AAEK,MAAO,mBAAoB,SAAQ,YAAY,CAAA;IAC1C,MAAM,cAAc,CAAC,KAAY,EAAA;QACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;KAC/C;AACF,CAAA;MAKY,iBAAiB,CAAA;IAE5B,WACS,CAAA,MAAiB,EACoB,YAA0B,EAAA;QAD/D,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACoB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAHxE,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;KAI3C;IAEL,MAAM,KAAK,CAAC,KAAY,EAAA;QAEtB,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;YAErB,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SACzD;aAAM;;YAEL,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAChE;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;AACjD,YAAA,IAAI,EAAE,OAAO;AACd,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;gBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAzBU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,2CAIN,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAJzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAKI,QAAQ;;0BAAI,MAAM;2BAAC,cAAc,CAAA;;;MCLzB,WAAW,CAAA;AAItB,IAAA,WAAA,CAAoB,IAAU,EAAA;QAAV,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;AAF9B,QAAA,IAAA,CAAA,OAAO,GAAyB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAGpD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAe,CAAC;AAC9C,QAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,KAAI;YAC/B,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrC,UAAU,CAAC,IAAI,CAAC;AACb,qBAAA,IAAI,CAAC,CAAC,KAAK,KAAI;oBACd,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACjC,iBAAC,CAAC;qBACD,KAAK,CAAC,MAAK;oBACV,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9B,iBAAC,CAAC,CAAC;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxB;iBAAM;gBACL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxB;AACH,SAAC,CAAC,CAAC;KACJ;IAED,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAED,IAAA,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,MAAc,EAAA;AACrD,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACrB,QAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACtD,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3C,QAAA,QAAQ,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,SAAS,CAAC;KACpE;AAED,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AACvC,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;SACzB;aAAM;AACL,YAAA,OAAO,IAAI,CAAC;SACb;KACF;IAED,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED,IAAA,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAa,EAAA;QAClC,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KAC/D;AAED,IAAA,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAa,EAAA;QACrC,OAAO,8BAA8B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KACnE;IAED,eAAe,GAAA;QACb,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAC;KAC7D;AAED,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACtC;+GAhEU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACFD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,gBAAgB,GAA8B;AAClD,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,SAAS,gBAAgB,CAAC,MAAY,EAAE,MAAc,EAAA;IACpD,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE;AACtC,QAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,CAAA,EAAA,CAAI,CAAC,CAAC;KAC3E;AACH,CAAC;MAwBY,WAAW,CAAA;aACf,IAAK,CAAA,KAAA,GAA2B,EAA3B,CAA8B,EAAA;AAC1C,IAAA,WAAA,CACU,IAAgB,EAChB,YAA8B,EAC9B,QAA2B,EAC3B,IAAiB,EAAA;QAHjB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAChB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAmB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAa;KACtB;IAEL,aAAa,GAAA;AACX,QAAA,OAAO,YAAY,CAAC,aAAa,EAAE,CAAC;KACrC;AAED,IAAA,MAAM,YAAY,CAChB,MAAc,EACd,MAAc,EACd,KAAA,GAAa,IAAI,EACjB,OAAyB,EACzB,WAA0B,EAAA;QAE1B,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE;AAC/C,YAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SAClC;AACD,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,mBAAmB,CAAC,CAAG,EAAA,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA,CAAE,CAAC,CAAC;YACpG,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACjD,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACxE,IAAI,SAAS,GAAkB,IAAI,CAAC;YACpC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,YAAA,IAAI,SAAS,IAAI,IAAI,EAAE;gBACrB,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C;YACD,IAAI,CAAC,SAAS,EAAE;gBACd,SAAS,GAAG,kBAAkB,CAAC;aAChC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,MAAM,KAAI;AACpE,gBAAA,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;gBACjC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBACnC,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAU,OAAA,EAAA,WAAW,CAAE,CAAA,CAAC,CAAC;AAC/D,gBAAA,IAAI,OAAO,WAAW,EAAE,QAAQ,IAAI,QAAQ,EAAE;oBAC5C,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;iBACxD;qBAAM;oBACL,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAa,UAAA,EAAA,SAAS,CAAE,CAAA,CAAC,CAAC;iBAC5D;AACD,gBAAA,MAAM,YAAY,GAAG;oBACnB,QAAQ;oBACR,SAAS;oBACT,WAAW;oBACX,YAAY;oBACZ,aAAa;oBACb,WAAW;oBACX,WAAW;iBACZ,CAAC;gBACF,IAAI,WAAW,EAAE;oBACf,MAAM,IAAI,GAAQ,WAAW,CAAC;AAC9B,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,wBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/B,wBAAA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;4BAC3D,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;yBAC5C;qBACF;iBACF;AACD,gBAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACzC,gBAAA,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,KAAI;oBACrB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAClD,oBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC1B,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE;wBAClC,MAAM,CAAC,YAAY,CAAC,CAAC;qBACtB;yBAAM;wBACL,OAAO,CAAC,YAAY,CAAC,CAAC;qBACvB;AACH,iBAAC,CAAC;AACF,gBAAA,GAAG,CAAC,OAAO,GAAG,CAAC,CAAgB,KAAI;AACjC,oBAAA,MAAM,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;AACjD,iBAAC,CAAC;AACF,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,CAAC,OAAO,CAAC,MAAK;AACnB,gBAAA,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,IAAI,CAAC,IAAI,EAAE,CAAC;iBACb;AACH,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,OAAO,CAAC;SAChB;QAAC,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;AACD,YAAA,MAAM,GAAG,CAAC;SACX;KACF;AAED,IAAA,MAAM,MAAM,CACV,IAAY,EACZ,OAAyB,EAAA;AAEzB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,EAAE,QAAQ,GAAG,iBAAiB;AAC9D,YAAA,MAAM,EAAE,CAAC;SACV,CAAC;QACF,IAAI,KAAK,GAAgB,EAAE,CAAC;AAC5B,QAAA,IAAI,MAAkB,CAAC;QACvB,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,KAAK,GAAW,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC1B,OAAO,GAAG,GAAG,CAAC;SACf;QACD,IAAI,KAAK,GAAG,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,GAAG;YACD,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CACrB,CAAA,EAAG,KAAK,CAAA,EAAG,OAAO,CAAA,OAAA,EAAU,MAAM,CAAC,MAAM,QAAQ,MAAM,CAAC,GAAG,CAAE,CAAA,EAC7D,OAAO,CACR,CAAC;AACF,YAAA,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,IAAI,OAAO,GAAG,MAAM,CAAC;AACrB,gBAAA,IAAI,OAAO,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE;oBACnC,MAAM,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,wBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,wBAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,wBAAA,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;4BAC3C,MAAM,IAAI,KAAK,CACb,CAAA,QAAA,EAAW,OAAO,EAAE,GAAG,CAAkC,gCAAA,CAAA,CAC1D,CAAC;yBACH;qBACF;iBACF;AACD,gBAAA,IAAI,OAAO,YAAY,KAAK,EAAE;AAC5B,oBAAA,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AACvB,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;wBAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxB;AACD,oBAAA,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;iBACxB;aACF;SACF,QAAQ,MAAM,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE;AACtC,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,MAAM,GAAG,CACP,IAAY,EACZ,OAAyB,EAAA;QAEzB,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE;AAC/C,YAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SAClC;AACD,QAAA,IAAI,KAAK,GAAG,CAAG,EAAA,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;AACzD,QAAA,KAAK,GAAG,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAkB,IAAI,CAAC;AACnC,QAAA,IAAI,OAAO,EAAE,QAAQ,KAAK,IAAI,EAAE;AAC9B,YAAA,QAAQ,GAAG,KAAK,CAAC;SAClB;AACD,QAAA,IAAI;AACF,YAAA,IAAI,KAAK,GAAoB,EAAE,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,OAAO,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClD,gBAAA,IAAI,QAAQ,IAAI,WAAW,CAAC,KAAK,EAAE;oBACjC,MAAM,MAAM,GAAQ,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAChD,oBAAA,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI,EAAE;AAC5B,wBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;qBAChC;yBAAM;AACL,wBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;qBAC5D;iBACF;aACF;AACD,YAAA,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI,EAAE;gBAC5B,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAC3B,oBAAA,YAAY,EAAE,MAAM;AACrB,iBAAA,CAAC,CAAC;aACJ;AAAM,iBAAA,IAAI,OAAO,EAAE,SAAS,KAAK,IAAI,EAAE;gBACtC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAC3B,oBAAA,YAAY,EAAE,MAAM;AACrB,iBAAA,CAAC,CAAC;aACJ;iBAAM;gBACL,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAO,KAAK,CAAC,CAAC;aACpC;YAED,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,KAAI;gBACnE,KAAK;AACF,qBAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;oBACnB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;AAC3C,wBAAA,IAAI,KAAK,CAAC,KAAK,EAAE;4BACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBAClC;6BAAM;AACL,4BAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBAC5B;qBACF;oBACD,MAAM,CAAC,KAAK,CAAC,CAAC;AACd,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,iBAAC,CAAC,CACH;AACA,qBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;oBAClB,IAAI,OAAO,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClD,wBAAA,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;qBACpC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,GAAG,CAAC;SACX;gBAAS;AACR,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;SACF;KACF;AACD,IAAA,MAAM,IAAI,CACR,IAAY,EACZ,OAAY,EACZ,OAAyB,EAAA;AAEzB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;KACrD;AAED,IAAA,MAAM,GAAG,CACP,IAAY,EACZ,OAAY,EACZ,OAAyB,EAAA;AAEzB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KACpD;IAED,MAAM,OAAO,CACX,IAAY,EACZ,OAAY,EACZ,OAAyB,EACzB,MAAA,GAAiB,MAAM,EAAA;QAEvB,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE;AAC/C,YAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SAClC;AACD,QAAA,MAAM,OAAO,GAA8B;AACzC,YAAA,eAAe,EAAE,IAAI;SACtB,CAAC;AACF,QAAA,IAAI,OAAO,EAAE,UAAU,KAAK,IAAI,EAAE;AAChC,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC;SAClC;AACD,QAAA,IAAI,OAAO,EAAE,WAAW,EAAE;AACxB,YAAA,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC;SAChD;AACD,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,KAAI;AACnE,gBAAA,IAAI,YAAY,CAAC;AACjB,gBAAA,IAAI,MAAM,IAAI,MAAM,EAAE;oBACpB,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAC3B,WAAW,CAAC,mBAAmB,CAAC,CAAA,EAAG,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAE,CAAA,CAAC,EAC5E,OAAO,EACP;AACE,wBAAA,OAAO,EAAE,OAAO;AACjB,qBAAA,CACF,CAAC;iBACH;AAAM,qBAAA,IAAI,MAAM,IAAI,KAAK,EAAE;oBAC1B,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1B,WAAW,CAAC,mBAAmB,CAAC,CAAA,EAAG,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAE,CAAA,CAAC,EAC5E,OAAO,EACP;AACE,wBAAA,OAAO,EAAE,OAAO;AACjB,qBAAA,CACF,CAAC;iBACH;qBAAM;AACL,oBAAA,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAA,gBAAA,CAAkB,CAAC,CAAC;iBACrD;gBAED,YAAY;AACT,qBAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;oBACnB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;AAC3C,wBAAA,IAAI,KAAK,CAAC,KAAK,EAAE;4BACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBAClC;6BAAM;AACL,4BAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBAC5B;qBACF;oBACD,MAAM,CAAC,KAAK,CAAC,CAAC;AACd,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,iBAAC,CAAC,CACH;AACA,qBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;oBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,GAAG,CAAC;SACX;gBAAS;AACR,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;SACF;KACF;AACD,IAAA,MAAM,MAAM,CACV,IAAY,EACZ,OAAyB,EAAA;QAEzB,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE;AAC/C,YAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SAClC;AACD,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,KAAI;AACnE,gBAAA,IAAI,CAAC,IAAI;AACN,qBAAA,MAAM,CAAO,WAAW,CAAC,mBAAmB,CAAC,CAAA,EAAG,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAG,EAAA,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9F,qBAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;oBACnB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;AAC3C,wBAAA,IAAI,KAAK,CAAC,KAAK,EAAE;4BACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBAClC;6BAAM;AACL,4BAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBAC5B;qBACF;oBACD,MAAM,CAAC,KAAK,CAAC,CAAC;AACd,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,iBAAC,CAAC,CACH;AACA,qBAAA,SAAS,CAAC,CAAC,IAAS,KAAI;oBACvB,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,GAAG,CAAC;SACX;gBAAS;AACR,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;SACF;KACF;IAED,MAAM,SAAS,CAAC,OAAe,EAAA;AAC7B,QAAA,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC;KACb;+GAnVU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCrBY,cAAc,CAAA;AAKzB,IAAA,WAAA,CACS,SAAuC,EAC7B,OAAoB,EACL,IAAe,EAAA;QAFxC,IAAS,CAAA,SAAA,GAAT,SAAS,CAA8B;QAC7B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACL,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAW;AAE/C,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;AACxE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAClB;;;;;;;;AAQE;SACH;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAED,IAAA,QAAQ,MAAY;AAEpB,IAAA,MAAM,YAAY,GAAA;QAChB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,gBAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACzD,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,oBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;iBAClB;qBAAM;oBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;iBAC3B;aACF;iBAAM;gBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;aAC3B;AACD,YAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACtE,gBAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;AAClC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3D;SACF;aAAM;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;SAC3B;KACF;IAED,MAAM,aAAa,CAAC,MAAuB,EAAA;AACzC,QAAA,IAAI,OAAO,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE;YACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,YAAA,IAAI,QAAQ,YAAY,OAAO,EAAE;AAC/B,gBAAA,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC;aACvC;AACD,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC5B;KACF;AAED,IAAA,MAAM,OAAO,CAAC,IAAe,KAAK;AAjEvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,sEAQf,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AARd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,iDC/B3B,60BAoBM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDWO,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACE,WAAW,EAAA,QAAA,EAAA,60BAAA,EAAA,CAAA;;0BAYlB,MAAM;2BAAC,eAAe,CAAA;;;MEjCd,aAAa,CAAA;AAOtB,IAAA,WAAA,CACY,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;QANtC,IAAW,CAAA,WAAA,GAAG,SAAS,CAAC;QACxB,IAAe,CAAA,eAAA,GAAG,UAAU,CAAC;QAC7B,IAAW,CAAA,WAAA,GAAQ,EAAE,CAAC;KAOrB;AAED,IAAA,WAAW,CAAC,GAAW,EAAA;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtB,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;KAC5B;IAED,WAAW,GAAA;;QAEP,IAAI,eAAe,GAAG,OAAO,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,kBAAkB,EAAE;YACpB,eAAe,GAAG,kBAAkB,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;SAC/D;aAAM;YACH,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC;SACrE;AACD,QAAA,OAAO,eAAe,CAAC;KAC1B;AAED,IAAA,WAAW,CAAC,IAAY,EAAE,MAAA,GAAkB,IAAI,EAAA;QAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtB,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;SAC5B;KACJ;AAED,IAAA,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,SAAiB,GAAG,EAAA;AACzD,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACrB,QAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACtD,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3C,QAAA,QAAQ,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,SAAS,CAAC;KACtE;AAED,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC;QACvB,IAAI,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACd,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACvB,gBAAA,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACtB;YACD,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACtB,gBAAA,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;aAC7C;SACJ;AACD,QAAA,OAAO,EAAE,CAAC;KACb;IAED,kBAAkB,GAAA;QACd,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,kBAAkB,EAAE;YACpB,WAAW,GAAG,kBAAkB,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;SACvD;aAAM;YACH,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;SAC1D;AACD,QAAA,OAAO,WAAW,CAAC;KACtB;+GA3EQ,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;MCIY,gBAAgB,CAAA;AAI3B,IAAA,WAAA,CACU,WAAwB,EACxB,aAA4B,EACP,aAAqB,SAAS,EAAA;QAFnD,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QACP,IAAU,CAAA,UAAA,GAAV,UAAU,CAAoB;QAN7D,IAAW,CAAA,WAAA,GAAG,SAAS,CAAC;AACxB,QAAA,IAAA,CAAA,WAAW,GAAQ,EAAE,CAAC;AAOpB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;KAClC;AAED,IAAA,WAAW,CAAC,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACtC;IAED,MAAM,cAAc,CAAC,IAAe,EAAA;;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC;QACxC,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,YAAA,EAAe,GAAG,CAAW,QAAA,EAAA,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC,CAAC;AAC7F,YAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SACjC;AACD,QAAA,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;AAC5B,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;;;AAKG;AACH,IAAA,MAAM,SAAS,CAAC,GAAW,EAAE,IAAe,EAAA;QAC1C,MAAM,GAAG,GAAQ,GAAG,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,IAAI,KAAK,GAAQ,EAAE,CAAC;AACpB,YAAA,MAAM,KAAK,GAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;gBAC5B,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACzC;iBAAM,IACL,KAAK,KAAK,SAAS;AACnB,gBAAA,KAAK,KAAK,IAAI;AACd,gBAAA,OAAO,KAAK,IAAI,QAAQ,EACxB;gBACA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;AAC5D,gBAAA,IAAI,WAAW,IAAI,KAAK,EAAE;AACxB,oBAAA,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;iBAC5B;aACF;AACD,YAAA,IAAI,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACpB,gBAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1C;AACD,YAAA,OAAO,GAAG,CAAC;SACZ;aAAM;AACL,YAAA,OAAO,GAAG,CAAC;SACZ;KACF;AA5DU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,oEAOjB,YAAY,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAPX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAQI,MAAM;2BAAC,YAAY,CAAA;;;MCTX,aAAa,CAAA;AACjB,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC,EAAA;AACnC,IAAA,WAAA,CAAoB,YAA8B,EAAA;QAA9B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;KAAI;AACtD,IAAA,SAAS,CAAC,KAAa,EAAE,GAAG,IAAe,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;YACX,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAI;AAC3C,gBAAA,IAAI;AACF,oBAAA,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9D,oBAAA,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5D,OAAO,CAAC,QAAQ,CAAC,CAAC;iBACnB;gBAAC,OAAO,GAAG,EAAE;oBACZ,MAAM,CAAC,GAAG,CAAC,CAAC;iBACb;AACH,aAAC,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SACjD;KACF;+GAjBU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA,EAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AAClB,iBAAA,CAAA;;;MCqBY,gBAAgB,CAAA;IAS3B,WACS,CAAA,SAAyC,EAChB,IAAiB,EAAA;QAD1C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAgC;QAChB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAa;QAVnD,IAAI,CAAA,IAAA,GAAW,aAAa,CAAC;QAC7B,IAAK,CAAA,KAAA,GAAW,QAAQ,CAAC;AAEzB,QAAA,IAAA,CAAA,OAAO,GAAW,CAAC,CAAC;QACpB,IAAO,CAAA,OAAA,GAA6B,EAAE,CAAC;QACvC,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;QACtB,IAAe,CAAA,eAAA,GAAkB,IAAI,CAAC;QACtC,IAAK,CAAA,KAAA,GAAQ,IAAI,CAAC;AAKhB,QAAA,IAAI,OAAO,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;SACtB;AACD,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SACzB;AACD,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;AACnC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAC7B;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,YAAY,KAAK,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAC7B;AACD,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC/B;AACD,QAAA,IAAI,OAAO,IAAI,CAAC,eAAe,IAAI,QAAQ,EAAE;AAC3C,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;SAC7C;AACD,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC/B;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;KACzB;IAED,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;YACpB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,EAAE;AACX,iBAAA,CAAC,CAAC;AACL,aAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SAClB;KACF;AAED,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM;AACP,SAAA,CAAC,CAAC;KACJ;AAtDU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,8CAWjB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAXd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,mDC3B7B,2hCAqBM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDMO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,2hCAAA,EAAA,CAAA;;0BAepB,MAAM;2BAAC,eAAe,CAAA;;;MEtBd,YAAY,CAAA;IAevB,WACS,CAAA,MAAiB,EAChB,aAA4B,EAAA;QAD7B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QAChB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;AAhBtC,QAAA,IAAA,CAAA,WAAW,GAAQ;AACjB,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,OAAO;AACf,aAAA;AACD,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA;SACF,CAAA;KAII;AAEL,IAAA,SAAS,CAAC,GAAW,EAAA;QACnB,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACnD,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;YAC/B,IAAI,GAAG,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;KACpC;IAED,MAAM,KAAK,CAAC,OAAkB,EAAA;AAC5B,QAAA,MAAM,YAAY,GAAgB;YAChC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACzB,oBAAA,GAAG,EAAE,GAAG;AACT,iBAAA;AACF,aAAA;SACF,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;KACnC;AAED,IAAA,MAAM,KAAK,CAAC,KAAY,EAAE,OAAgB,EAAA;QACxC,IAAI,YAAY,GAAG,SAAS,CAAC;AAC7B,QAAA,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAE;AAC9B,YAAA,YAAY,IAAI,OAAO,GAAG,IAAI,CAAC;SAChC;AACD,QAAA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YAC5B,YAAY,IAAI,KAAK,CAAC;SACvB;AAAM,aAAA,IAAI,OAAO,KAAK,CAAC,OAAO,IAAI,QAAQ,EAAE;AAC3C,YAAA,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC;SAC/B;aAAM;AACL,YAAA,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC;SAC7B;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;AACjD,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC5B,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAChC,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;gBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,OAAO,CAAC,OAAoB,EAAA;AAChC,QAAA,MAAM,YAAY,GAAgB;YAChC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,YAAA,OAAO,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;AAC9E,gBAAA,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;AACxD,aAAA;SACF,CAAC;QACF,MAAM,MAAM,GAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;AACzB,gBAAA,OAAO,IAAI,CAAC;aACb;AAAM,iBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;AAChC,gBAAA,OAAO,KAAK,CAAC;aACd;iBAAM;AACL,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;aAAM;;AAEL,YAAA,OAAO,IAAI,CAAC;SACb;KACF;IAED,MAAM,OAAO,CAAC,OAAoB,EAAA;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACnD,YAAA,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;gBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD,IAAA,eAAe,CAAC,OAAoB,EAAA;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACnD,YAAA,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC,CAAC;QACH,OAAO;AACL,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;gBAC/B,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;oBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC;SACH,CAAC;KACH;+GA5HU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCHY,yBAAyB,CAAA;AAIpC,IAAA,WAAA,CACU,SAAkD,EAClD,EAAe,EACf,QAAsB,EAAA;QAFtB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAyC;QAClD,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;AALhC,QAAA,IAAA,CAAA,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;KAMzB;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAClC,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAC9B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACxB;IAED,mBAAmB,CAAC,KAAa,EAAE,KAAiB,EAAA;AAClD,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE;AAC5B,YAAA,OAAO,CAAU,OAAA,EAAA,KAAK,CAAC,SAAS,CAAC,cAAc,CAA4B,yBAAA,EAAA,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC;SAC5G;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,OAAO,GAAsB;AACjC,YAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;AACxB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;AAC1B,YAAA,OAAO,EAAE,CAAC;SACX,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC/B;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,GAAG,EAAE,wCAAwC;AAC9C,aAAA,CAAC,CAAC;SACJ;KACF;+GAlDU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,4DCZtC,ssDAyCM,EAAA,MAAA,EAAA,CAAA,qbAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD7BO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,ssDAAA,EAAA,MAAA,EAAA,CAAA,qbAAA,CAAA,EAAA,CAAA;;;MEyBrB,2BAA2B,CAAA;IAStC,WACU,CAAA,SAAoD,EACpD,EAAe,EACf,QAAsB,EACvB,MAAiB,EACjB,OAA6B,EACJ,IAAS,EAAA;QALjC,IAAS,CAAA,SAAA,GAAT,SAAS,CAA2C;QACpD,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACvB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACjB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAsB;QACJ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;QAb3C,IAAQ,CAAA,QAAA,GAA6B,EAAE,CAAC;AACxC,QAAA,IAAA,CAAA,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;QAG7B,IAAgB,CAAA,gBAAA,GAA6B,EAAE,CAAC;AAW9C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC;AACxB,YAAA,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,gBAAA,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;aACrB,CAAC;YACF,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACjC,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAE3B,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,SAAS,GAAA;QACP,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAc,CAAC;QACjE,YAAY,CAAC,KAAK,EAAE,CAAC;AAErB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBACZ,IAAI,EAAE,IAAI,WAAW,CAAC;oBACpB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;AAC5B,oBAAA,QAAQ,EAAE,KAAK;iBAChB,CAAC;AACH,aAAA,CAAC,CACH,CAAC;SACH;KACF;AAED,IAAA,MAAM,QAAQ,GAAA;;AAEZ,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE;gBACpB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAc,CAAC;AAC9D,gBAAA,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC;aAC1C;iBAAM;AACL,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;AACf,oBAAA,OAAO,EAAE,CAAC;AACX,iBAAA,CAAC,CAAC;aACJ;SACF;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAc,CAAC;AAC9D,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACvC;AAED,IAAA,MAAM,cAAc,GAAA;;QAElB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,KAAI;YAChE,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;gBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,YAAA,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;;AAEjD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE;AAC9B,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClB,wBAAA,GAAG,EAAE,CAAA,WAAA,EAAc,MAAM,CAAC,GAAG,CAAwC,sCAAA,CAAA;AACtE,qBAAA,CAAC,CAAC;oBACH,OAAO;iBACR;aACF;;AAED,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;AAED,IAAA,MAAM,aAAa,CAAC,CAAS,EAAE,OAA0B,EAAA;QACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3C,YAAA,KAAK,EAAE,gBAAgB;AACvB,YAAA,GAAG,EAAE,CAAA,4BAAA,EAA+B,OAAO,CAAC,GAAG,CAAG,CAAA,CAAA;AACnD,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACpC;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED,IAAA,iBAAiB,CAAC,OAA0B,EAAA;AAC1C,QAAA,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;KACrB;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAE9B,YAAA,MAAM,IAAI,GAAgD;gBACxD,EAAE,EAAE,IAAI,CAAC,MAAM;AACf,gBAAA,KAAK,EAAE,EAAE;aACV,CAAC;AACF,YAAA,MAAM,UAAU,GACd,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC;YAChC,IACE,OAAO,UAAU,IAAI,QAAQ;gBAC7B,UAAU,CAAC,MAAM,GAAG,CAAC;AACrB,gBAAA,IAAI,CAAC,qBAAqB,IAAI,UAAU,EACxC;AACA,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACd,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC;AAC3C,oBAAA,IAAI,EAAE,UAAU;AACjB,iBAAA,CAAC,CAAC;aACJ;AACD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;AACvB,oBAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC;oBAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;wBACd,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,wBAAA,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;AACxC,wBAAA,IAAI,EAAE,OAAO;AACd,qBAAA,CAAC,CAAC;iBACJ;aACF;;AAED,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,GAAG,EAAE,SAAS,CAAC,GAAG;AAClB,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,IAAI,EAAE,EAAE;AACT,iBAAA,CAAC,CAAC;aACJ;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;aACxB;iBAAM;AACL,gBAAA,IAAI;oBACF,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAC;AACrE,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;iBAC5B;AAAC,gBAAA,OAAO,GAAG,EAAE,GAAE;aACjB;SACF;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;SACzD;KACF;AA9KU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,4JAe5B,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAfd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,8DCjCxC,yhFAsDM,EAAA,MAAA,EAAA,CAAA,m0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDrBO,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,yhFAAA,EAAA,MAAA,EAAA,CAAA,m0BAAA,CAAA,EAAA,CAAA;;0BAmB/B,MAAM;2BAAC,eAAe,CAAA;;;MExCd,kBAAkB,CAAA;AAK7B,IAAA,WAAA,CAAoB,OAAoB,EAAA;QAApB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QAHxC,IAAQ,CAAA,QAAA,GAAQ,IAAI,CAAC;QAErB,IAAiB,CAAA,iBAAA,GAAQ,IAAI,CAAC;AAE5B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YAC/B,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;gBACzB,IAAI,MAAM,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE;AAC5C,oBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;iBACnC;aACF;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,MAAM,UAAU,GAAG,CAAC,MAAW,KAAI;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;AAC3C,YAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;aAChC;AACD,YAAA,IAAI,SAAS,IAAI,MAAM,EAAE;gBACvB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;aACnC;AACD,YAAA,OAAO,SAAS,CAAC;AACnB,SAAC,CAAC;AACF,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;gBACzB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AAC7D,oBAAA,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC9B,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,iBAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aACpC;AACH,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,oBAAoB,CAAC,MAAc,EAAA;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;AAC3C,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1E,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAM,CAAO,IAAA,EAAA,MAAM,OAAO,EAAE;AAChE,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAEvC,YAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE;AAClC,gBAAA,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;aACtC;YACD,MAAM,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;SACzE;KACF;AAED,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI,QAAQ,CAAC,QAAQ,IAAI,GAAG,EAAE;;AAE5B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,YAAA,OAAO,IAAI,CAAC;SACb;aAAM;YACL,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAW,QAAQ,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzB,YAAA,OAAO,MAAM,CAAC;SACf;KACF;AAED,IAAA,MAAM,QAAQ,CAAC,EAAU,EAAE,KAAe,EAAA;QACxC,IAAI,MAAM,GAAoB,IAAI,CAAC;AACnC,QAAA,MAAM,OAAO,GAAG;YACd,KAAK;SACN,CAAC;AACF,QAAA,MAAM,GAAG,GAAG,CAAO,IAAA,EAAA,EAAE,KAAK,CAAC;AAC3B,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACf,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,OAAO,KAAK,CAAC,KAAK,CAAC;AACnB,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAC7B,KAAK,EACL,GAAG,EACH,OAAO,EACP,EAAE,EACF;AACE,gBAAA,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,CAAI,CAAA,EAAA,EAAE,CAAY,UAAA,CAAA;AAC5B,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CACF,CAAC;SACH;aAAM;AACL,YAAA,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAW,GAAG,EAAE,OAAO,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B;AACD,QAAA,OAAO,MAAM,CAAC;KACf;+GApGU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MC6BY,oBAAoB,CAAA;IAC/B,WACU,CAAA,WAAwB,EACxB,YAA0B,EAC3B,MAAiB,EACjB,WAA+B,EAC9B,OAAoB,EAAA;QAJpB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC3B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACjB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAoB;QAC9B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;KAC1B;IAEJ,MAAM,OAAO,CAAC,EAAU,EAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CACxC,CAAA,IAAA,EAAO,EAAE,CAAA,KAAA,CAAO,EAChB;AACE,YAAA,GAAG,EAAE,SAAS;AACf,SAAA,CACF,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,IAAI,CAAC,OAA8B,EAAA;AACvC,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAO,IAAA,EAAA,OAAO,CAAC,EAAE,CAAO,KAAA,CAAA,EAAE,OAAO,EAAE;AACzD,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,IAAI,GAAA;QACR,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAM,QAAQ,CAAC,CAAC;QAEpD,IAAI,IAAI,GAAoB,IAAI,CAAC;QACjC,IAAI,OAAO,GAAgB,IAAI,CAAC;AAChC,QAAA,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC;QAE7B,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAC/D,OAAO;SACR;QACD,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAC7D,OAAO;SACR;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KAC/D;+GA7CU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAf,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAgB,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AChCD;;;;;;;;;;;;;;;AAeE;MAIW,cAAc,CAAA;aAChB,IAAe,CAAA,eAAA,GAAgC,EAAhC,CAAmC,EAAA;AACzD,IAAA,WAAA,CACY,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;KAGvC;AACD,IAAA,OAAO,uBAAuB,CAAC,GAAW,EAAE,KAAe,EAAA;AACvD,QAAA,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KAC/C;IACD,IAAI,CAAC,GAAG,IAAS,EAAA;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;KACrB;IACD,GAAG,CAAC,GAAG,IAAS,EAAA;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC9B,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;SACxB;KACJ;IACD,IAAI,CAAC,GAAG,IAAS,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;KACzB;IACD,OAAO,CAAC,GAAG,IAAS,EAAA;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;SACzB;AACD,QAAA,KAAK,IAAI,GAAG,IAAI,cAAc,CAAC,eAAe,EAAE;YAC5C,IAAI,OAAO,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE;AAC1D,gBAAA,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;aAChE;SACJ;KACJ;IACD,KAAK,CAAC,GAAG,IAAS,EAAA;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;SAC1B;AACD,QAAA,KAAK,IAAI,GAAG,IAAI,cAAc,CAAC,eAAe,EAAE;YAC5C,IAAI,OAAO,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE;AAC1D,gBAAA,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;aAC9D;SACJ;KACJ;+GA3CQ,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;MCDY,mBAAmB,CAAA;AAO9B,IAAA,WAAA,CACE,UAAkB,EAClB,cAAwB,EACxB,UAA0B,EAAA;QAR5B,IAAQ,CAAA,QAAA,GAAmB,IAAI,CAAC;AAU9B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;AAED,IAAA,MAAM,mBAAmB,GAAA;QACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAK;AAC7B,oBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;wBACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/B,wBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACtB;AACH,iBAAC,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,KAAI;oBACtC,MAAM,CAAC,GAAG,CAAC,CAAC;AACd,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACzB,oBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACtB;aACF;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,eAAe,CACnB,IAA2B,EAC3B,mBAAmB,GAAG,IAAI,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;;YAEf,OAAO,IAAI,CAAC,MAAM,CAAC;SACpB;QACD,MAAM,OAAO,GAAQ,IAAI,CAAC;AAC1B,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,WAAW,CAAC,cAAc,WAAW,CAAC;AACtD,QAAA,IAAI,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,GAAG,GAAG,GAAG,CAAC;SACX;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AACpB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,YAAY,EAAE,OAAO;AACtB,SAAA,CAAC,CAAC;QACH,IAAI,mBAAmB,EAAE;AACvB,YAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAClC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAED,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;SACR;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAkB,eAAA,EAAA,IAAI,CAAC,UAAU,CAAE,CAAA,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACtC;AAED,IAAA,MAAM,SAAS,CAAC,SAAiB,EAAE,OAAY,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;SACR;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KACtC;AAED,IAAA,uBAAuB,CAAC,SAAkB,EAAA;;AAExC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,oCAAA,CAAsC,CAAC,CAAC;YAC5D,OAAO;SACR;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;;KAE3C;IAED,iBAAiB,CAAC,SAAiB,EAAE,SAAiC,EAAA;AACpE,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;SACR;QACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;KACtC;IAED,qBAAqB,CAAC,SAAiB,EAAE,SAAiC,EAAA;AACxE,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;SACR;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;KACxC;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SACvB;aAAM;AACL,YAAA,OAAO,IAAI,CAAC;SACb;KACF;AACF,CAAA;MAKY,WAAW,CAAA;IAEtB,WACU,CAAA,QAAsB,EACtB,UAA0B,EAAA;QAD1B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;QAHpC,IAAS,CAAA,SAAA,GAA2C,EAAE,CAAC;KAIlD;AAEL,IAAA,WAAW,CAAC,IAAa,EAAA;QACvB,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,GAAG,QAAQ,CAAC;SACjB;QACD,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1D,YAAA,WAAW,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACjF,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;SACpC;AACD,QAAA,OAAO,WAAW,CAAC;KACpB;AAED,IAAA,cAAc,CAAC,UAAkB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KACnC;AAED,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QAClC,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;KAC/C;+GA9BU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MC9HY,cAAc,CAAA;AAmCzB,IAAA,WAAA,GAAA;;AAjCS,QAAA,IAAA,CAAA,MAAM,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;;QAE7C,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAC;;QAEf,IAAW,CAAA,WAAA,GAAG,mCAAmC,CAAC;;QAGlD,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;QAChB,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;QACd,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;QACf,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;;QAGf,IAAsB,CAAA,sBAAA,GAAG,CAAC,CAAC;QAC3B,IAAwB,CAAA,wBAAA,GAAG,CAAC,CAAC;QAC7B,IAAiB,CAAA,iBAAA,GAAG,CAAC,CAAC;QACtB,IAAa,CAAA,aAAA,GAAG,CAAC,CAAC;QAClB,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;QACb,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;QACnB,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;QACjB,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;QACnB,IAAmB,CAAA,mBAAA,GAAG,CAAC,CAAC;QACxB,IAAoB,CAAA,oBAAA,GAAG,EAAE,CAAC;QAC1B,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;QACd,IAAkB,CAAA,kBAAA,GAAG,EAAE,CAAC;KASjB;AAEhB,IAAA,IAAI,CAAC,GAAQ,EAAA;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,gBAAgB;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,YAAA,GAAc,CAAC;AACjD,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,YAAA,GAAc,CAAC;AACxE,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,UAAU,IAAS,EAAA,GAAI,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC1B,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,UAAU,IAAS,EAAG,GAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,YAAA,GAAc,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,OAAO;YACjB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,CAAM,EAAE,IAAS,EAAG,GAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,OAAO;YACjB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,CAAM,EAAE,IAAS,EAAG,GAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,sBAAsB,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,sBAAsB,EAC3B,oDAAoD,CACrD,CAAC;AAEF,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAEvC,YAAA,SAAS,CAAC,YAAY;AACnB,iBAAA,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,UAAU,EACf,uCAAuC,GAAG,KAAK,CAChD,CAAC;AACJ,aAAC,CAAC,CAAC;SACN;QAAC,OAAO,CAAM,EAAE;;;AAGf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,UAAU,EACf,wCAAwC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAC7D,CAAC;SACH;AAED,QAAA,IAAI;YACF,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;QAAC,OAAO,CAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,UAAU,EACf,wCAAwC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAC7D,CAAC;SACH;KACF;IAED,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;KACxB;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;KACpB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACrB;IAED,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;;IAGD,MAAM,GAAA;;AAEJ,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;SACzD;AACD,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;SAChB;KACF;AAEM,IAAA,cAAc,CAAC,MAAW,EAAA;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,CAAC;;;AAGrE,QAAA,MAAO,CAAC,MAAM,GAAG,KAAK,CAAC;;QAGvB,MAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;AACtE,QAAA,KAAK,CAAC,OAAO,CAAO,MAAO,CAAC,kBAAkB,CAAC,CAAC;AAEhD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;KACrE;AAEO,IAAA,UAAU,CAAC,IAAS,EAAA;QAC1B,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;AACxB,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACX,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;AAC/B,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;;AAEd,gBAAA,IAAI,IAAI,YAAY,IAAI,EAAE;AACxB,oBAAA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACjB,wBAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,QAAQ,EACb,cAAc,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAC9C,CAAC;qBACH;yBAAM;AACL,wBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,cAAc,EACnB,cAAc,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CACvC,CAAC;qBACH;;iBAEF;qBAAM;AACL,oBAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;iBAC7D;aACF;iBAAM;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,WAAW,EAChB,4BAA4B,GAAG,KAAK,GAAG,oBAAoB,GAAG,IAAI,CACnE,CAAC;aACH;SACF;aAAM;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,UAAU,EACf,4CAA4C,GAAG,IAAI,CACpD,CAAC;SACH;KACF;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAM,KAAI;AAC7B,YAAA,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,IAAI,YAAY,MAAM,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC,EAAE;gBACrD,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,UAAU,EACf,mDAAmD,CACpD,CAAC;aACH;AAAM,iBAAA,IAAI,IAAI,YAAY,IAAI,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;aAC7D;iBAAM;gBACL,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3B,gBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;;iBAEjB;AAAM,qBAAA,IAAI,GAAG,CAAC,OAAO,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBAC3C;AAAM,qBAAA,IAAI,GAAG,CAAC,IAAI,EAAE;oBACnB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBACjC;aACF;AACH,SAAC,CAAC;;QAGF,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAM,KAAI;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAK;gBAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,aAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;;YAGzB,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,mBAAmB,EACxB,gCAAgC,CACjC,CAAC;AACJ,SAAC,CAAC;;;;;;;QAQF,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAM,KAAI;AAC3B,YAAA,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;AAClB,YAAA,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AACtB,YAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;;;AAG1B,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,oBAAoB,EACzB,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,CAC3C,CAAC;AACJ,SAAC,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAM,KAAI;AAC3B,YAAA,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC9C,SAAC,CAAC;KACH;AAEO,IAAA,UAAU,CAAC,MAAW,EAAA;AAC5B,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAM,KAAI;YACjC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;AAExB,YAAA,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxB,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAM,KAAI;YAC/B,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;AAExB,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtB,gBAAA,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC1C,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtB,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,MAAM,EAAE;AACN,gBAAA,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU;AACtC,aAAA;AACF,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC1C;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;KAC/C;IAEO,gBAAgB,GAAA;QACtB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;KACpD;+GAxRU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCiCY,WAAW,CAAA;IAItB,WAAoB,CAAA,OAAoB,EAAU,UAAsB,EAAA;QAApD,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QAAU,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QADxE,IAAQ,CAAA,QAAA,GAAoB,IAAI,CAAC;AAE/B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAmB,CAAC;AAClD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,EAAoB,CAAC;QAE1D,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,QAA0B,KAAI;AAC1D,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACzB;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,SAAS,CAAC,OAAiB,EAAA;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACvC;AAED,IAAA,YAAY,CAAC,QAA0B,EAAA;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACnC;IAED,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,WAAW,CAAC,OAAwB,EAAE,QAAkB,EAAA;;AAEtD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC3B;IAED,MAAM,aAAa,CAAC,GAAW,EAAA;QAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9D,YAAA,IAAI,CAAC,UAAU;iBACZ,GAAG,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACrC,iBAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAChB,aAAC,CAAC,CACH;AACA,iBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,MAAM,CAAC,GAAW,EAAA;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,MAAM,OAAO,GAAoB;AAC/B,YAAA,aAAa,EAAE,IAAI;SACpB,CAAC;QACF,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACzC;KACF;IAED,MAAM,UAAU,CAAC,GAAW,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,GAAG,GAAG,CAAO,IAAA,EAAA,MAAM,cAAc,CAAC;AACxC,QAAA,MAAM,OAAO,GAAoB;AAC/B,YAAA,aAAa,EAAE,IAAI;SACpB,CAAC;AACF,QAAA,MAAM,QAAQ,GAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;AACrE,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,WAAW,CAAC,OAA8B,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,GAAG,GAAG,CAAO,IAAA,EAAA,MAAM,UAAU,CAAC;AACpC,QAAA,MAAM,OAAO,GAAoB;AAC/B,YAAA,aAAa,EAAE,IAAI;SACpB,CAAC;AACF,QAAA,MAAM,QAAQ,GAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACrE,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,SAAS,GAAA;QACP,MAAM,MAAM,GAAG,QAAQ;aACpB,cAAc,CAAC,cAAc,CAAC;AAC/B,cAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,KAAK,CAAC,2CAA2C,CAAC,CAAC;SAC1D;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,MAAM,IAAI,CACR,OAAqB,EACrB,QAA0B,EAAA;AAE1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,GAAG,GAAG,CAAO,IAAA,EAAA,MAAM,OAAO,CAAC;AACjC,QAAA,MAAM,OAAO,GAAoB;AAC/B,YAAA,aAAa,EAAE,IAAI;SACpB,CAAC;QACF,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;SAChD;AACD,QAAA,MAAM,QAAQ,GAAyB,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CACpE,OAAO,CAAC,MAAM,EACd,GAAG,EACH,EAAE,EACF,OAAO,EACP;YACE,MAAM,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAG,CAAA,CAAA;AAC5B,YAAA,QAAQ,EAAE,CAAI,CAAA,EAAA,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAE,CAAA;AAC1C,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,WAAW,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG;AACjD,YAAA,SAAS,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG;YAChD,SAAS,EAAE,OAAO,CAAC,SAAS;AAC7B,SAAA,CACF,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,cAAc,CAAC,IAAY,EAAA;QAC/B,MAAM,GAAG,GAAG,CAAA,YAAA,CAAc,CAAC;AAC3B,QAAA,MAAM,OAAO,GAAoB;AAC/B,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,UAAU,EAAE,IAAI;SACjB,CAAC;AACF,QAAA,MAAM,QAAQ,GAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;AACtE,QAAA,OAAO,QAAQ,CAAC;KACjB;+GAlIU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAT,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCNY,gBAAgB,CAAA;AAC3B,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAAK;IAEjD,MAAM,aAAa,CAAC,OAAqB,EAAA;AACvC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,kBAAA,CAAoB,EACpB,OAAO,EACP;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,OAAO,CACX,OAAoC,EACpC,UAAmB,KAAK,EAAA;AAExB,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;AACf,YAAA,OAAO,CAAC,EAAE,GAAGiB,EAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC1C;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACjB,YAAA,OAAO,CAAC,IAAI,GAAGA,EAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC5C;QACD,IAAI,QAAQ,GAAQ,IAAI,CAAC;AACzB,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACpC,CAAA,oCAAA,CAAsC,EACtC,OAAO,EACP;AACE,gBAAA,aAAa,EAAE,IAAI;AACpB,aAAA,CACF,CAAC;SACH;aAAM;AACL,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACpC,CAAA,+BAAA,CAAiC,EACjC,UAAU,EACV;gBACE,aAAa,EAAE,EAAE,OAAO,CAAC,gBAAgB,KAAK,KAAK,CAAC;AACpD,gBAAA,WAAW,EAAE,0BAA0B;AACxC,aAAA,CACF,CAAC;SACH;;AAED,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,UAAU,CAAC,OAAY,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,wBAAA,CAA0B,EAC1B,OAAO,EACP;AACE,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CACF,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB;+GA3DU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCtBY,UAAU,CAAA;AACrB,IAAA,WAAA,CACU,WAAwB,EACxB,YAA8B,EAC9B,QAAsB,EAAA;QAFtB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;KAC5B;AACJ,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,2BAAA,CAA6B,EAC7B,EAAE,EACF;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACnD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,UAAU,CAAC,IAAY,EAAA;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,2BAAA,CAA6B,EAC7B;YACE,IAAI;SACL,EACD;AACE,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAC;SAChD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,gBAAgB,CAAC,IAAY,EAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,mBAAA,CAAqB,EACrB;YACE,IAAI;SACL,EACD;AACE,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC1C;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;+GAlDU,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAhB,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCmBY,qBAAqB,CAAA;IAEhC,WACU,CAAA,YAA8B,EAC9B,QAAsB,EAAA;QADtB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QAHhC,IAAS,CAAA,SAAA,GAA2B,EAAE,CAAC;KAInC;AAEJ,IAAA,MAAM,MAAM,CACV,OAAe,EACf,MAAW,EACX,QAAgB,EAChB,SAAA,GAAqB,KAAK,EAC1B,aAAsB,KAAK,EAAA;QAE3B,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SACvC;AACD,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAChD,CAAC;YAEF,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,CAAC,UAAU,EAAE;gBACf,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;aACvC;AAED,YAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;SACxE;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aAC1B;iBAAM;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAClB;SACF;QACD,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,IAAI,EAAE,CAAC;SAClB;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,kBAAkB,CACtB,MAAW,EACX,UAAe,EACf,QAAa,EAAA;AAEb,QAAA,MAAM,MAAM,GAAQ,UAAU,CAAC,MAAM,CAAC;QACtC,IAAI,MAAM,EAAE;YACV,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,YAAA,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzD,YAAA,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAC7C,MAAM,EACN,UAAU,EACV,WAAW,CACZ,CAAC;YACF,MAAM,GAAG,GAAQ,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAE3C,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAA,MAAM,KAAK,GAAQ,EAAE,CAAC,IAAI,CAAC,MAAK;gBAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,gBAAA,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,gBAAA,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,gBAAA,OAAO,EAAE;AACN,qBAAA,MAAM,CACL;oBACE,EAAE;oBACF,EAAE;oBACF,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;oBACb,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACd,iBAAA,EACD,CAAC,CACF;AACA,qBAAA,OAAO,EAAE,CAAC;aACd,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAK;;gBAErC,MAAM,SAAS,GAAG,QAAQ;AACvB,qBAAA,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACpC,qBAAA,OAAO,CAAC,CAAC,CAAC,CAAC;AACd,gBAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAC/C,KAAK,EACL,MAAM,EACN,GAAG,EACH,IAAI,EACJ,GAAG,CACJ,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxE,YAAA,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,YAAA,MAAM,QAAQ,GAAG;gBACf,UAAU;gBACV,WAAW;gBACX,YAAY;AACZ,gBAAA,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;aACzB,CAAC;YACF,MAAM,WAAW,GAA8B,EAAE,CAAC;YAClD,IAAI,CAAC,mBAAmB,CACtB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,CACE,YAAoB,EACpB,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,MAAc,EACd,KAAa,KACX;gBACF,WAAW,CAAC,IAAI,CAAC;AACf,oBAAA,GAAG,EAAE,YAAY;oBACjB,IAAI;oBACJ,IAAI;oBACJ,KAAK;oBACL,MAAM;oBACN,KAAK;AACN,iBAAA,CAAC,CAAC;AACL,aAAC,CACF,CAAC;AAEF,YAAA,OAAO,WAAW,CAAC;SACpB;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,mBAAmB,CACjB,IAAwB,EACxB,MAAc,EACd,OAAe,EACf,QAAkB,EAAA;AAElB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AAEvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC3C,YAAA,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,YAAA,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;YACvB,QAAQ,CACN,YAAY,EACZ,EAAE,GAAG,MAAM,EACX,EAAE,GAAG,OAAO,EACZ,KAAK,GAAG,MAAM,EACd,MAAM,GAAG,OAAO,EAChB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;SACH;KACF;AAED,IAAA,UAAU,CAAC,IAAS,EAAA;QAClB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,EAAE,CAAC;AACf,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;SAChC;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,UAAU,CAAC,MAAW,EAAE,UAAe,EAAE,WAAgB,EAAA;AACvD,QAAA,IAAI,MAAM,EAAE,MAAM,CAAC;AAEnB,QAAA,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,MAAK;YACzB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;;AAG1C,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,YAAA,MAAM,SAAS,GAAQ,GAAG,CAAC,GAAG,CAAC;AAC7B,gBAAA,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;AAChB,gBAAA,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;gBAChB,CAAC,CAAC,EAAE,CAAC,CAAC;AACP,aAAA,CAAC,CAAC;AAEH,YAAA,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;AACrB,YAAA,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;YAErB,OAAO,EAAE,CAAC,KAAK;iBACZ,cAAc,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACpD,iBAAA,GAAG,CAAC,KAAK,CAAC;AACV,iBAAA,UAAU,CAAC,CAAC,CAAC,CAAC;AACnB,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC;IAED,MAAM,YAAY,CAAC,KAAa,EAAA;QAC9B,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,OAAO,aAAa,CAAC;KACtB;AAED,IAAA,iBAAiB,CAAC,IAAY,EAAE,MAAM,GAAG,4BAA4B,EAAA;;QAEnE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACpD,QAAA,OAAO,WAAW,CAAC,QAAQ,GAAG,QAAQ,GAAG,8BAA8B,CAAC;KACzE;+GAtNU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAa,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ICtBW,UAIX;AAJD,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAJW,SAAS,KAAT,SAAS,GAIpB,EAAA,CAAA,CAAA,CAAA;IAEW,SAMX;AAND,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,QAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EANW,QAAQ,KAAR,QAAQ,GAMnB,EAAA,CAAA,CAAA,CAAA;MA0IY,kBAAkB,CAAA;AAC7B,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAAI;AAEhD,IAAA,WAAW,CAAC,KAAqC,EAAA;QAC/C,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AACrB,gBAAA,OAAO,IAAI,CAAC;aACb;AACD,YAAA,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACtB;aAAM;AACL,YAAA,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;SACnB;AACD,QAAA,OAAO,MAAM,CAAC;KACf;IAED,MAAM,SAAS,CACb,KAAqC,EAAA;AAErC,QAAA,MAAM,OAAO,GAAG;YACd,KAAK;SACN,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,OAAO;AACL,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,KAAK,EAAE,EAAE;aACV,CAAC;SACH;AACD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,CAAU,QAAA,CAAA,EAClC,OAAO,EACP;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC3C;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,YAAY,CAChB,KAAqC,EAAA;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,OAAO;AACL,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,KAAK,EAAE,EAAE;aACV,CAAC;SACH;AACD,QAAA,MAAM,OAAO,GAAG;YACd,KAAK;SACN,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,CAAU,QAAA,CAAA,EAClC,OAAO,EACP;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAC9C;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,UAAU,CACd,MAAc,EACd,KAA0B,EAAA;AAE1B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,CAAU,QAAA,CAAA,EAClC,KAAK,EACL;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAC9C;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,QAAQ,CAAC,MAAc,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,CAAQ,MAAA,CAAA,EAChC,EAAE,EACF;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAC7C;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,SAAS,CAAC,MAAc,EAAE,GAAe,EAAA;AAC7C,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,eAAA,EAAkB,MAAM,CAAQ,MAAA,CAAA,EAChC,EAAE,GAAG,EAAE,EACP;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACjD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,QAAQ,CAAC,MAAc,EAAE,KAAmB,EAAA;AAChD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,CAAQ,MAAA,CAAA,EAChC,KAAK,EACL;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC3D;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,OAAO,CACX,QAAgB,EAChB,MAAc,EACd,GAAgB,EAAA;AAEhB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAO,IAAA,EAAA,QAAQ,IAAI,MAAM,CAAA,MAAA,CAAQ,EACjC,EAAE,GAAG,EAAE,EACP;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,yCAAyC,CAAC,CAAC;SACxD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,WAAW,CAAC,MAAc,EAAE,KAAa,EAAA;AAC7C,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,eAAA,EAAkB,MAAM,CAAW,SAAA,CAAA,EACnC,EAAE,KAAK,EAAE,EACT;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,+CAA+C,CAAC,CAAC;SAC9D;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,OAAO,CAAC,MAAc,EAAE,KAAa,EAAA;AACzC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,eAAA,EAAkB,MAAM,CAAO,KAAA,CAAA,EAC/B,EAAE,KAAK,EAAE,EACT;AACE,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC3C;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,oBAAA,CAAsB,EACtB,EAAE,EACF;AACE,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAC;SACvD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,UAAU,CACd,QAAgB,EAChB,MAAc,EACd,IAAuB,EAAA;AAEvB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAO,IAAA,EAAA,QAAQ,IAAI,MAAM,CAAA,OAAA,CAAS,EAClC,EAAE,IAAI,EAAE,EACR;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACrD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,YAAY,CAAC,MAAc,EAAE,IAAuB,EAAA;QACxD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,eAAA,EAAkB,MAAM,CAAS,OAAA,CAAA,EACjC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EACnB;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACnD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,UAAU,CAAC,MAAc,EAAE,MAAc,EAAA;AAC7C,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,SAAS,EACjC,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACjD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,QAAQ,CACZ,MAAc,EACd,KAAmB,EAAA;AAEnB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,CAAS,OAAA,CAAA,EACjC,KAAK,EACL;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,yCAAyC,CAAC,CAAC;SACxD;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC;KACvB;AAED,IAAA,MAAM,cAAc,CAAC,MAAc,EAAE,IAAS,EAAA;AAC5C,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,CAAY,UAAA,CAAA,EACpC,IAAI,EACJ;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAC;SAChD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,cAAc,CAClB,MAAc,EACd,KAA0B,EAAA;AAE1B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAkB,eAAA,EAAA,MAAM,CAAc,YAAA,CAAA,EACtC,KAAK,EACL;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACrD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,eAAe,CAAC,MAAc,EAAE,MAAc,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,eAAA,EAAkB,MAAM,CAAa,WAAA,CAAA,EACrC,EAAE,MAAM,EAAE,EACV;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACjD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;+GArSU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCnJY,aAAa,CAAA;AAExB,IAAA,WAAA,CAAmB,OAAoB,EAAA;QAApB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;KAAI;IAC3C,eAAe,GAAA;;QAEb,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,QAAA,OAAO,CAAM,GAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,MAAM,EAAE,CAAC;KACnC;AACD,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACpC,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,CAAC,SAAS,EAAE,EAAE;AACrD,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC,CAAC;KACJ;AACD,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CACtC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,EAAE,EAC7C;AACE,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;;YAErB,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,YAAA,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAChC,YAAA,OAAO,cAAc,CAAC;SACvB;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAmB,CAAC,CAAC;SACxC;KACF;IACD,MAAM,IAAI,CAAC,IAAS,EAAA;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACpC,QAAA,MAAM,OAAO,GAAiB;AAC5B,YAAA,QAAQ,EAAE,CAAG,EAAA,IAAI,IAAI,IAAI,CAAC,SAAS,CAAE,CAAA;AACrC,YAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACrE,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;AAClE,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,QAAgC,CAAC;KACzC;AACF;;MCrCY,gBAAgB,CAAA;AAC3B,IAAA,WAAA,CAAoB,OAAoB,EAAA;QAApB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;KAAI;IAC5C,eAAe,GAAA;;QAEb,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,QAAA,OAAO,CAAM,GAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,MAAM,YAAY,CAAC;KAC7C;IACD,MAAM,MAAM,CAAC,GAAW,EAAA;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACpC,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;AAC/D,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC,CAAC;KACJ;IACD,MAAM,aAAa,CAAC,GAAW,EAAA;QAC7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CACtC,CAAA,EAAG,IAAI,CAAC,eAAe,EAAE,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA,CAAE,EACvD;AACE,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CACF,CAAC;AACF,QAAA,OAAO,SAAmB,CAAC;KAC5B;IACD,MAAM,IAAI,CAAC,OAAqB,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACpC,QAAA,OAAO,CAAC,QAAQ,GAAG,CAAG,EAAA,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;AACtE,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;AACtD,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,QAAgC,CAAC;KACzC;+GAhCU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACLK,MAAO,gBAAiB,SAAQ,aAAa,CAAA;AACjD,IAAA,WAAA,CAA4B,OAAoB,EAAA;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QADW,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;AAE9C,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;KACnC;+GAJU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACCK,MAAO,iBAAkB,SAAQ,aAAa,CAAA;AAClD,IAAA,WAAA,CAA4B,OAAoB,EAAA;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QADW,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;AAE9C,QAAA,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;KACpC;+GAJU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCMY,mBAAmB,CAAA;IAG9B,WACU,CAAA,YAA0B,EACjB,WAAwB,EAClC,SAA4C,EAC3C,EAAe,EACf,SAA2B,EAAA;QAJ3B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QACjB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QAClC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAmC;QAC3C,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAPrC,IAAW,CAAA,WAAA,GAAG,QAAQ,CAAC;KAQnB;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AACpD,YAAA,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACpC,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC/B;AAED,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KAClC;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;KACjC;AAED,IAAA,eAAe,CAAC,KAAU,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,eAAe,EAAE;aACjB,IAAI,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;;YAEvB,QAAQ,CAAC,MAAM,EAAE,CAAC;AACpB,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,CAAC,KAAI;AACX,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;AACzB,YAAA,MAAM,KAAK,GAA8B;AACvC,gBAAA,+CAA+C,EAC7C,4CAA4C;AAC9C,gBAAA,kCAAkC,EAChC,oCAAoC;AACtC,gBAAA,8BAA8B,EAAE,kCAAkC;AAClE,gBAAA,4BAA4B,EAAE,wBAAwB;AACtD,gBAAA,kDAAkD,EAChD,0CAA0C;AAC5C,gBAAA,oBAAoB,EAAE,kCAAkC;AACxD,gBAAA,2BAA2B,EAAE,gCAAgC;AAC7D,gBAAA,0BAA0B,EAAE,uBAAuB;AACnD,gBAAA,wBAAwB,EACtB,gEAAgE;aACnE,CAAC;AACF,YAAA,IAAI,SAAS,IAAI,KAAK,EAAE;AACtB,gBAAA,MAAM,OAAO,GAAW,KAAK,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;aAC7C;iBAAM;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC5B;AACH,SAAC,CAAC;aACD,OAAO,CAAC,MAAK;YACZ,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,SAAC,CAAC,CAAC;KACN;AAED,IAAA,QAAQ,CAAC,KAAW,EAAA;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aACtB,IAAI,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACzB,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,CAAC,KAAI;AACX,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;AACzB,YAAA,MAAM,KAAK,GAA8B;AACvC,gBAAA,oBAAoB,EAAE,kBAAkB;AACxC,gBAAA,oBAAoB,EAAE,uBAAuB;AAC7C,gBAAA,qBAAqB,EAAE,oBAAoB;AAC3C,gBAAA,qBAAqB,EAAE,wBAAwB;AAC/C,gBAAA,wBAAwB,EACtB,gEAAgE;AAClE,gBAAA,6BAA6B,EAC3B,yCAAyC;aAC5C,CAAC;AACF,YAAA,IAAI,SAAS,IAAI,KAAK,EAAE;AACtB,gBAAA,MAAM,OAAO,GAAW,KAAK,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;aAC7C;iBAAM;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC5B;AACH,SAAC,CAAC;aACD,OAAO,CAAC,MAAK;YACZ,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,SAAC,CAAC,CAAC;KACN;AAED,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aACzB,IAAI,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACzB,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,CAAC,KAAI;AACX,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;AACzB,YAAA,MAAM,KAAK,GAA8B;AACvC,gBAAA,2BAA2B,EACzB,0CAA0C;AAC5C,gBAAA,oBAAoB,EAAE,kBAAkB;AACxC,gBAAA,4BAA4B,EAC1B,wCAAwC;AAC1C,gBAAA,oBAAoB,EAClB,gDAAgD;AAClD,gBAAA,wBAAwB,EACtB,gEAAgE;aACnE,CAAC;AACF,YAAA,IAAI,SAAS,IAAI,KAAK,EAAE;AACtB,gBAAA,MAAM,OAAO,GAAW,KAAK,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;aAC7C;iBAAM;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC5B;AACH,SAAC,CAAC;aACD,OAAO,CAAC,MAAK;YACZ,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,SAAC,CAAC,CAAC;KACN;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;KAC7B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;+GAzIU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAM,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAsB,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,sDCZhC,qyFA4DqB,EAAA,MAAA,EAAA,CAAA,goBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwB,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDhDR,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,qyFAAA,EAAA,MAAA,EAAA,CAAA,goBAAA,CAAA,EAAA,CAAA;;;MEEf,YAAY,CAAA;AACvB,IAAA,WAAA,CACU,WAAwB,EACxB,YAA0B,EAC3B,MAAiB,EAAA;QAFhB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC3B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;KACtB;AAEJ;;AAEG;AACH,IAAA,MAAM,KAAK,GAAA;QACT,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACxD,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,+BAA+B,EAAE,CAAC,CAAC;SACnE;aAAM;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SACvC;KACF;AAED;;AAEG;AACH,IAAA,MAAM,MAAM,GAAA;QACV,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACxD,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,WAAW;AACb,iBAAA,MAAM,EAAE;iBACR,IAAI,CAAC,MAAK;gBACT,QAAQ,CAAC,MAAM,EAAE,CAAC;AACpB,aAAC,CAAC;AACD,iBAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAC;SAChE;KACF;+GAlCU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAV,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAf,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCKY,WAAW,CAAA;AACtB,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAAI;IAEhD,MAAM,IAAI,CAAC,IAAkB,EAAA;AAC3B,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,gBAAgB,EAChB,EAAE,IAAI,EAAE,IAAI,EAAE,EACd;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;KACH;+GAXU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAa,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCIY,aAAa,GAAG,IAAI,cAAc,CAAS,aAAa,EAAE;AACrE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,gBAAgB;AAChC,CAAA,EAAE;AAEH;AACA;AACA;AACA;MAIa,oBAAoB,CAAA;IAS/B,WAC8B,CAAA,MAAc,EACZ,QAAgB,EACd,UAAqC,EAClC,aAAqB,EACzB,SAAiB,EAAA;QAJpB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACZ,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QACd,IAAU,CAAA,UAAA,GAAV,UAAU,CAA2B;QAClC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAQ;QACzB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAQ;QAVlD,IAAW,CAAA,WAAA,GAAyB,IAAI,CAAC;QACzC,IAAc,CAAA,cAAA,GAA4B,IAAI,CAAC;AAC/C,QAAA,IAAA,CAAA,MAAM,GAAuC,IAAI,YAAY,EAAE,CAAC;AAChE,QAAA,IAAA,CAAA,gBAAgB,GAAyB,IAAI,YAAY,EAAE,CAAC;QAS1D,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,kBAAkB,CAAC,GAAa,EAAA;AAC9B,QAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YACpC,GAAG,CAAC,IAAI,CAAC,CAAC;AACZ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,mBAAmB,GAAA;AACvB,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,SAAS,EAAE,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAO,KAAA,CAAA;;AAElE,gBAAA,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AACtD,aAAA;AACD,YAAA,KAAK,EAAE;gBACL,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,aAAA;SACF,CAAC;QACF,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,qCAAqC,CAAC,UAAU,CAAC,CAAC;AAClE,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;;AAEpC;;;;;;AAME;AACF,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;AACtD,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;aAC9B;SACF;QAAC,OAAO,KAAU,EAAE;AACnB,YAAA,IAAI,KAAK,CAAC,IAAI,IAAI,8BAA8B,EAAE;;gBAEhD,MAAM,QAAQ,GAAG,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;oBAC1C,qBAAqB,CAAC,MAAK;AACzB,wBAAA,OAAO,EAAE,CAAC;AACZ,qBAAC,CAAC,CAAA;iBACH,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAK;oBAClC,QAAQ,CAAC,MAAM,EAAE,CAAC;AACpB,iBAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,MAAM,KAAK,CAAC;aACb;SACF;KACF;IAEM,MAAM,4BAA4B,CAAC,QAAa,EAAA;AACrD,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AACjC,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;AACpC,QAAA,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG;YACjB,QAAQ;YACR,aAAa;YACb,IAAI;YACJ,OAAO;AACP,YAAA,MAAM,EAAE,EAAE;SACX,CAAC;;AAEF,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;AAC9C,QAAA,IAAI,MAAM,YAAY,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAe,KAAI;AACvD,gBAAA,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AAC9B,oBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;iBACjC;AACD,gBAAA,OAAO,OAAO,CAAC;AACjB,aAAC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACpC;AAED,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;QACpC,MAAM,UAAU,GAAG,YAAY,CAAC,gBAAgB,CAC9C,CAAC,OAA0B,KAAI;YAC7B,MAAM,MAAM,GACV,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;YAChE,IAAI,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;AAC1C,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAC9B;AACH,SAAC,CACF,CAAC;;KAEH;AAEM,IAAA,MAAM,oBAAoB,CAAC,gBAAyB,EAAE,OAAgB,EAAA;AAC3E,QAAA,MAAM,OAAO,GAAyB;AACpC,YAAA,YAAY,EAAE,IAAI;SACnB,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;SACnD;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,gBAAgB,EAAE;AACpB,gBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,gBAAgB,CAAC;aACzC;AACD,YAAA,OAAO,KAAK,CAAC;SACd;aAAM;AACL,YAAA,OAAO,IAAI,CAAC;SACb;KACF;AAEM,IAAA,MAAM,gBAAgB,CAAC,OAAA,GAAuC,IAAI,EAAA;AACvE,QAAA,IAAI,QAAQ,GAAG;AACb,YAAA,YAAY,EAAE,KAAK;YACnB,mCAAmC,EAAE,KAAK;SAC3C,CAAC;AACF,QAAA,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAE;YAC9B,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC7C;AACD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;;AAEpC,QAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,CAAC,WAAW,CAAC;YACrB,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,mCAAmC,EAAE,QAAQ,CAAC,mCAAmC;SAClF,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAChE,QAAA,OAAO,QAAQ,CAAC;KACjB;AAEM,IAAA,MAAM,eAAe,CAAC,IAAI,GAAG,SAAS,EAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,EAAE,CAAC;SACX;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;AACxC,QAAA,IAAI,IAAI,IAAI,SAAS,EAAE;YACrB,OAAO,QAAQ,CAAC,WAAW,CAAC;SAC7B;aAAM;YACL,OAAO,QAAQ,CAAC,OAAO,CAAC;SACzB;KACF;AAED,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;QACpC,MAAM,YAAY,CAAC,cAAc,CAAC;YAChC,kBAAkB,EAAE,MAAK;;AAEvB,gBAAA,OAAO,KAAK,CAAC;aACd;YACD,OAAO,EAAE,IAAI,CAAC,cAAc;AAC7B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxB;AAED,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;AACpC,QAAA,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxB;IAED,QAAQ,GAAA;QACN,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,gBAAA,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AAC7C,gBAAA,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;aACpB;SACF;KACF;IAED,WAAW,GAAA;QACT,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC3C,YAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;;AAErB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,MAAM,KAAK,CAAC,KAAA,GAAiB,KAAK,EAAA;QAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,KAAK,EAAE;AACrC,YAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;YACpC,IAAI,SAAS,GAAG,MAAM,CAAC;AACvB,YAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,gBAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;aAC5B;YACD,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,SAAS,GAAG,IAAI,CAAC;aAClB;AACD,YAAA,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC;gBAC7C,MAAM,EAAE,CAAC,eAAe,CAAC;AACzB,gBAAA,MAAM,EAAE,SAAS;AAClB,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;AAClD,YAAA,OAAO,QAAQ,CAAC;SACjB;aAAM;YACL,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;KACF;AAED,IAAA,mBAAmB,CAAC,IAAmB,EAAA;AACrC,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3C,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;KACnE;IAED,mBAAmB,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACnC,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,qBAAqB,CAAC,IAA0B,EAAE,MAAgB,EAAE,GAAY,EAAA;QAC9E,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAa,KAAI;YAC9C,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAA,OAAO,KAAK,CAAC;aACd;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC,CAAC;QACH,IAAI,GAAG,EAAE;;AAEP,YAAA,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;SAC5B;aAAM;;AAEL,YAAA,OAAO,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SACvC;KACF;+GAjRU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAUrB,UAAU,EACV,EAAA,EAAA,KAAA,EAAA,YAAY,aACZ,cAAc,EAAA,EAAA,EAAA,KAAA,EACd,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAdZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAWI,MAAM;2BAAC,UAAU,CAAA;;0BACjB,MAAM;2BAAC,YAAY,CAAA;;0BACnB,MAAM;2BAAC,cAAc,CAAA;;0BACrB,MAAM;2BAAC,iBAAiB,CAAA;;0BACxB,MAAM;2BAAC,aAAa,CAAA;;;MCnCZ,YAAY,CAAA;AACvB,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAAI;IAChD,MAAM,YAAY,CAAC,OAAa,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,MAAM,CAAC,MAAM,GAAG,YAAA;AACd,gBAAA,MAAM,WAAW,GAAQ,IAAI,CAAC,MAAM,CAAC;AACrC,gBAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC1C,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,aAAC,CAAC;AACF,YAAA,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;KACJ;AACD,IAAA,MAAM,WAAW,CACf,UAAkB,EAClB,UAAkB,EAClB,KAA6B,EAAA;QAE7B,MAAM,OAAO,GAAQ,EAAE,CAAC;;AAExB,QAAA,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC5E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,OAAO,GAAS,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,UAAU,EAAE,CAAG,EAAA,UAAU,IAAI,OAAO,CAAC,IAAI,CAAE,CAAA;AAC3C,gBAAA,QAAQ,EAAE;oBACR,cAAc,EAAE,OAAO,CAAC,IAAI;AAC7B,iBAAA;AACF,aAAA,CAAC,CAAC;SACJ;AACD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAa,UAAA,EAAA,UAAU,CAAQ,MAAA,CAAA,EAC/B,UAAU,EACV;AACE,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,WAAW,EAAE,0BAA0B;AACxC,SAAA,CACF,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB;+GA5CU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCsBY,YAAY,CAAA;AACvB,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAAI;IAChD,MAAM,KAAK,CAAC,IAAoB,EAAA;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAa,UAAA,EAAA,IAAI,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,QAAQ,EACrD,IAAI,CAAC,OAAO,EACZ;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;SAC5B;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,IAAI,CAAC,IAAmB,EAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAa,UAAA,EAAA,IAAI,CAAC,QAAQ,OAAO,EACjC;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,EACD;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;SAC5B;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,MAAM,CAAC,IAAmB,EAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAa,UAAA,EAAA,IAAI,CAAC,QAAQ,SAAS,EACnC;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,EACD;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;SAC7B;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,MAAM,CAAC,IAAqB,EAAA;AAChC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAa,UAAA,EAAA,IAAI,CAAC,QAAQ,SAAS,EACnC;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,EACD;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;SAC7B;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;+GA/DU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCfY,cAAc,CAAA;AAH3B,IAAA,WAAA,GAAA;QAIU,IAAM,CAAA,MAAA,GAAuB,IAAI,CAAC;QAClC,IAAQ,CAAA,QAAA,GAAyC,IAAI,CAAC;QAEtD,IAAS,CAAA,SAAA,GAAyB,IAAI,CAAC;AACvC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAuB,CAAC;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAU,CAAC;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAU,CAAC;AAqGlD,KAAA;IAnGC,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;KACtC;IAED,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;KAC3C;IAED,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;KAC7C;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;YAEjB,OAAO;SACR;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,QAAA,SAAS,CAAC,YAAY;AACnB,aAAA,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7B,aAAA,IAAI,CAAC,CAAC,CAAc,KAAI;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;KACN;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEO,MAAM,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;YACvB,OAAO;SACR;AACD,QAAA,MAAM,OAAO,GAAQ;AACnB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,QAAQ,EAAE,YAAY;;;AAGtB,YAAA,qBAAqB,EAAE,CAAC;SACzB,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAE,CAAA,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExE,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAK;AAC/B,YAAA,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;AAC7B,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACnE,MAAM,IAAI,GACR,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACjC,GAAG;gBACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAChC,EAAE,IAAI,CAAC,CAAC;KACV;AAEO,IAAA,QAAQ,CAAC,KAAU,EAAA;QACzB,IAAI,GAAG,GAAG,KAAK,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK;YAAE,GAAG,GAAG,IAAI,CAAC;QACvB,IAAI,KAAK,GAAG,EAAE;AAAE,YAAA,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;AAClC,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,CAAC,IAAI,KAAI;AACP,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,MAAM,OAAO,GAAG,kBAAkB,CAChC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CACzC,CAAC;oBACF,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;iBACrD;aACF;AACD;;;AAGG;aACJ,CAAC;SACH;KACF;IAEO,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACpB;SACF;KACF;+GA3GU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCQY,aAAa,CAAA;IACxB,WACU,CAAA,YAA0B,EAC1B,WAAwB,EAAA;QADxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAC9B;;IAGJ,MAAM,QAAQ,CAAC,OAAqB,EAAA;AAClC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,aAAa,EAAE,IAAI;SACpB,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,mBAAA,CAAqB,EACrB,EAAE,OAAO,EAAE,EACX,OAAO,CACR,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB;+GAjBU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAM,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCbY,aAAa,CAAA;AACxB,IAAA,SAAS,CAAC,KAAyB,EAAE,GAAG,IAAe,EAAA;AACrD,QAAA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;AAC5B,YAAA,OAAO,YAAY,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;SACtE;AACD,QAAA,OAAO,IAAI,CAAC;KACb;+GANU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA,EAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AAClB,iBAAA,CAAA;;;MCKY,aAAa,CAAA;AAWxB,IAAA,WAAA,CAA6B,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAVf,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;QAC3B,IAAK,CAAA,KAAA,GAAY,KAAK,CAAC;QACtB,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;QACxB,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;QACxB,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;AAEnD,QAAA,IAAA,CAAA,KAAK,GAA8B;AACjC,YAAA,IAAI,EAAE,gBAAgB;SACvB,CAAC;KAE6C;AAC/C,IAAA,QAAQ,MAAW;AAEnB,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;YAChB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,QAAQ,SAAS;AACf,gBAAA,KAAK,CAAC;AACJ,oBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,MAAM;AACR,gBAAA,KAAK,CAAC;AACJ,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,MAAM;AACR,gBAAA,KAAK,CAAC;AACJ,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,MAAM;AACR,gBAAA,KAAK,CAAC;AACJ,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,MAAM;aACT;SACF;KACF;AAED,IAAA,OAAO,CAAC,IAA+B,EAAA;AACrC,QAAA,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACzB;AACD,QAAA,OAAO,gBAAgB,CAAC;KACzB;AAED,IAAA,OAAO,CAAC,IAAuB,EAAA;AAC7B,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB;AAAM,aAAA,IAAI,OAAO,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE;YACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACnC;KACF;+GAvDU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA7B,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,iSCV1B,qjDA8BM,EAAA,MAAA,EAAA,CAAA,mxDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAyB,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDpBO,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAGd,IAAA,EAAA,EAAE,KAAK,EAAE,KAAK,EAAE,EAAA,QAAA,EAAA,qjDAAA,EAAA,MAAA,EAAA,CAAA,mxDAAA,CAAA,EAAA,CAAA;6EAGM,OAAO,EAAA,CAAA;sBAAlC,WAAW;uBAAC,aAAa,CAAA;gBACA,KAAK,EAAA,CAAA;sBAA9B,WAAW;uBAAC,WAAW,CAAA;gBACG,MAAM,EAAA,CAAA;sBAAhC,WAAW;uBAAC,YAAY,CAAA;gBACE,MAAM,EAAA,CAAA;sBAAhC,WAAW;uBAAC,YAAY,CAAA;gBACE,MAAM,EAAA,CAAA;sBAAhC,WAAW;uBAAC,YAAY,CAAA;gBAChB,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;MEMK,sBAAsB,CAAA;IAOjC,WACU,CAAA,EAAe,EACf,OAAoB,EACpB,OAAoB,EACpB,QAAsB,EACtB,SAAoB,EAAA;QAJpB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACtB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAT9B,IAAO,CAAA,OAAA,GAA6B,EAAE,CAAC;QACvC,IAAQ,CAAA,QAAA,GAA4B,IAAI,CAAC;QACzC,IAAW,CAAA,WAAA,GAAY,IAAI,CAAC;AAC5B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAQ3B,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG;AACjB,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,QAAQ,EAAE,qBAAqB;AAC/B,YAAA,MAAM,EAAE,oBAAoB;SAC7B,CAAC;KACH;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,QAAQ,EAAE,CAAC,EAAE,CAAC;AACf,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,IAAiB,KAAI;AAC3D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KAClC;AAED,IAAA,oBAAoB,CAAC,IAAuB,EAAA;QAC1C,MAAM,GAAG,GAAG,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;AAC7C,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KAC5B;AAED,IAAA,qBAAqB,CAAC,IAAuB,EAAA;QAC3C,MAAM,GAAG,GAAG,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC;KAC9D;AAED,IAAA,MAAM,gBAAgB,GAAA;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,MAAM,GAAG,GAAG,CAAG,EAAA,QAAQ,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,EAAE,CAAC;AAC9D,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KAC3B;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,MAAM,EAAE,CAAC;SACf;KACF;IACD,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,MAAM,EAAE,CAAC;SACf;KACF;IAED,MAAM,gBAAgB,CAAC,IAAuB,EAAA;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3C,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,GAAG,EAAE,mCAAmC;AACzC,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAA,IAAI,MAAM,IAAI,CAAC,EAAE;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,aAAa,GAAG,QAAQ;iBAC3B,cAAc,CAAC,cAAc,CAAC;AAC/B,kBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;AAC5B,YAAA,IAAI,aAAa,IAAI,IAAI,CAAC,EAAE,EAAE;;gBAE5B,QAAQ,CAAC,MAAM,EAAE,CAAC;aACnB;SACF;KACF;AAED,IAAA,YAAY,CAAC,IAAiB,EAAA;AAC5B,QAAA,MAAM,YAAY,GAAG,IAAI,EAAE,KAAK,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,GAAG,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC;SAC3C;KACF;AAED,IAAA,MAAM,MAAM,CAAC,OAAO,GAAG,IAAI,EAAA;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1C,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;aACvD;iBAAM;gBACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;aACrD;SACF;QACD,MAAM,KAAK,GAAoB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,KAAK,GAA6B,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAEtB,YAAA,MAAM,QAAQ,GACZ,WAAW,CAAC,MAAM,CAAC,QAAQ;gBAC3B,GAAG;gBACH,WAAW,CAAC,MAAM,CAAC,MAAM;gBACzB,GAAG;gBACH,WAAW,CAAC,IAAI,CAAC,cAAc;gBAC/B,GAAG;AACH,gBAAA,IAAI,CAAC,GAAG;gBACR,WAAW,CAAC,IAAI,CAAC,YAAY;gBAC7B,KAAK;gBACL,IAAI,CAAC,KAAK,CAAC;AAEb,YAAA,MAAM,KAAK,GAAsB;gBAC/B,QAAQ,EAAE,IAAI,CAAC,GAAG;gBAClB,KAAK,EAAE,IAAI,CAAC,GAAG;gBACf,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAE,CAAA;AACrC,gBAAA,OAAO,EAAE,QAAQ;gBACjB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,gBAAA,KAAK,EAAE,KAAK;aACb,CAAC;AACF,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACnB;QACD,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExE,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC7C;AACD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACxB,YAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC1C,YAAA,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;;YAErB,MAAM,CAAC,IAAI,GAAG;AACZ,gBAAA;oBACE,MAAM,EAAE,IAAI,CAAC,oBAAoB;AACjC,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,SAAS,EAAE,KAAK;AACjB,iBAAA;AACD,gBAAA;AACE,oBAAA,MAAM,EAAE,yBAAyB;AACjC,oBAAA,KAAK,EAAE,eAAe;AACtB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,SAAS,EAAE,KAAK;AACjB,iBAAA;AACD,gBAAA;AACE,oBAAA,MAAM,EAAE,oBAAoB;AAC5B,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA;aACF,CAAC;AACF,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3B;AACD,QAAA,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACzB;+GA5KU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA9B,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA+B,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAArB,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,yDCtBnC,qtDAqCqB,EAAA,MAAA,EAAA,CAAA,yqCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDfR,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,qtDAAA,EAAA,MAAA,EAAA,CAAA,yqCAAA,CAAA,EAAA,CAAA;;;MEwBlB,oBAAoB,CAAA;AAU/B,IAAA,WAAA,CACU,UAAsB,EACtB,YAA0B,EAC3B,WAAwB,EACxB,YAA0B,EAAA;QAHzB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC3B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAXzB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAiB,CAAC;AAE9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAkB,CAAC;QACjD,IAAI,CAAA,IAAA,GAA0C,IAAI,CAAC;QAC3D,IAAU,CAAA,UAAA,GAAmB,IAAI,CAAC;QAC1B,IAAsB,CAAA,sBAAA,GAAwB,IAAI,CAAC;QAC3D,IAAQ,CAAA,QAAA,GAA+B,IAAI,CAAC;KAMvC;AAEL,IAAA,QAAQ,MAAY;IAEpB,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,EAAE;AACvC,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;SAC3C;KACF;AAED,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,IAAI,OAAO,CAAC,GAAG,EAAE;YACf,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,QAAQ,EAAE;AAC/C,gBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;oBACrB,IAAI,CAAC,IAAI,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAC5B,SAAS,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CACxC,CAAC;AACF,oBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC5D,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC9B,4BAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;yBACvB;6BAAM;AACL,4BAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;yBACxB;AACH,qBAAC,CAAC,CAAC;iBACJ;aACF;AACD,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;aAC1C;SACF;KACF;AAEM,IAAA,MAAM,QAAQ,CAAC,OAAqB,EAAE,SAAiB,EAAE,EAAA;AAC9D,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;AACpE,YAAA,OAAO,QAAQ,CAAC;SACjB;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAA,MAAM,GAAG,CAAC;SACX;KACF;IAED,MAAM,WAAW,CAAC,YAA8B,EAAA;AAC9C,QAAA,IAAI,YAAY,CAAC,MAAM,YAAY,KAAK,EAAE;;SAEzC;aAAM;;YAEL,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;AAClC,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;oBACnC,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC/B;iBAAM;AACL,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,IAAI,EAAE,IAAI,CAAC,QAAQ;AACnB,oBAAA,IAAI,EAAE,OAAO;AACd,iBAAA,CAAC,CAAC;aACJ;AACD,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACrC;SACF;KACF;IAED,WAAW,GAAA;;AAET,QAAA,MAAM,OAAO,GAAoB;YAC/B,IAAI,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,iBAAiB;AACxF,YAAA,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;SAC9C,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;KACxD;AAEO,IAAA,SAAS,CAAC,GAAkB,EAAA;AAClC,QAAA,IAAI,GAAG,IAAI,IAAI,EAAE;YACf,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,QAAQ,EAAE;gBAChD,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;aACtC;iBAAM;gBACL,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACtC;SACF;aAAM;AACL,YAAA,IACE,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI;gBACzD,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAChC;AACA,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;aAChB;iBAAM;gBACL,IAAI,MAAM,GAAG,GAAG,CAAC;gBACjB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,EAAE;AAC3C,oBAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;iBACzD;gBACD,QACE,IAAI,CAAC,UAAU;;qBAEZ,GAAG,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;;AAErC,qBAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,oBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAC7C,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CACvB,CAAC;iBACH,CAAC,CACH,EACH;aACH;SACF;KACF;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SAChC;aAAM;AACL,YAAA,OAAO,EAAE,CAAC;SACX;KACF;+GAvIU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAnC,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA4B,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,2MC1CjC,mVAGM,EAAA,MAAA,EAAA,CAAA,gbAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDuCO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,mVAAA,EAAA,MAAA,EAAA,CAAA,gbAAA,CAAA,EAAA,CAAA;6JAKlB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBACE,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;ME/BI,kBAAkB,CAAA;IAW7B,WACU,CAAA,SAA2C,EAC3C,EAAe,EACf,cAAkC,EAClC,OAAoB,EACpB,QAAsB,EAAA;QAJtB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkC;QAC3C,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAc,CAAA,cAAA,GAAd,cAAc,CAAoB;QAClC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;AAXhC,QAAA,IAAA,CAAA,YAAY,GAA2B;AACrC,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa;SAC7C,CAAC;QAQA,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;KACnC;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,YAAA,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,cAAc;AAChB,aAAA,cAAc,EAAE;AAChB,aAAA,IAAI,CAAC,CAAC,IAAqB,KAAI;YAC9B,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5B,OAAO;aACR;AACD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACjB,KAAK,EAAE,IAAI,CAAC,GAAG;gBACf,WAAW,EAAE,IAAI,CAAC,IAAI;AACvB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,KAAM,GAAC,CAAC,CAAC;KACvB;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC/B;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;KACrC;AAED,IAAA,YAAY,CAAC,YAA4B,EAAA;AACvC,QAAA,IAAI,YAAY,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC;SAC9C;KACF;IAED,YAAY,GAAA;QACV,IACE,IAAI,CAAC,QAAQ;AACb,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,QAAQ;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAC5B;YACA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAA,GAAA,EAAM,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC;SAC/C;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,mBAAmB,CAAC,KAAa,EAAE,KAAiB,EAAA;AAClD,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE;AAC5B,YAAA,OAAO,CAAU,OAAA,EAAA,KAAK,CAAC,SAAS,CAAC,cAAc,CAA4B,yBAAA,EAAA,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC;SAC5G;AACD,QAAA,OAAO,EAAE,CAAC;KACX;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;AAC1B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;YACjC,KAAK,EAAE,IAAI,CAAC,iBAAiB;SAC9B,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACpB,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC9D,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,GAAG,EAAE,wBAAwB;AAC9B,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC7B;YAAC,OAAO,GAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClB,oBAAA,KAAK,EAAE,MAAM;oBACb,GAAG,EAAE,GAAG,CAAC,OAAO;AACjB,iBAAA,CAAC,CAAC;aACJ;SACF;KACF;AAED,IAAA,MAAM,UAAU,GAAA;QACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3C,YAAA,KAAK,EAAE,kCAAkC;AACzC,YAAA,GAAG,EAAE,mCAAmC;AACzC,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;AACD,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,QAAQ,CAAC;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,oBAAoB;AAC1B,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,UAAU,GAAA;QACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3C,YAAA,KAAK,EAAE,gDAAgD;AACvD,YAAA,GAAG,EAAE,mCAAmC;AACzC,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;AACD,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,QAAQ,CAAC;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,oBAAoB;AAC1B,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,UAAU,GAAA;QACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3C,YAAA,KAAK,EAAE,wDAAwD;AAC/D,YAAA,GAAG,EAAE,mCAAmC;AACzC,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;AACD,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,QAAQ,CAAC;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,oBAAoB;AAC1B,SAAA,CAAC,CAAC;KACJ;+GAnJU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,qDChB/B,2zEAmDM,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1B,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0B,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,KAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDnCO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,2zEAAA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA,CAAA;;;MEOd,WAAW,CAAA;AACtB,IAAA,WAAA,CACU,WAAwB,EACxB,YAA0B,EAC1B,MAAiB,EACjB,WAAwB,EAAA;QAHxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACjB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAC9B;AAEJ,IAAA,MAAM,IAAI,GAAA;QACR,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACxD,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACtC;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAC;SAChE;KACF;AAED,IAAA,cAAc,CAAC,CAAS,EAAA;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;KAC1C;AACD,IAAA,YAAY,CAAC,CAAS,EAAA;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;KACxC;AACD,IAAA,MAAM,SAAS,GAAA;QACb,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,UAAA,CAAY,EACZ,OAAO,EACP;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC3C;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IACD,MAAM,eAAe,CAAC,IAAuB,EAAA;AAC3C,QAAA,IAAI,QAAQ,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC5B,QAAA,GAAG;AACD,YAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAM,CAAO,IAAA,EAAA,IAAI,CAAC,EAAE,MAAM,EAAE;AAClE,gBAAA,aAAa,EAAE,IAAI;AACpB,aAAA,CAAC,CAAC;AACL,SAAC,QAAQ,OAAO,QAAQ,CAAC,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE;AAClE,QAAA,OAAO,IAAI,CAAC;KACb;IACD,MAAM,OAAO,CAAC,IAAuB,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAO,IAAA,EAAA,IAAI,CAAC,EAAE,UAAU,EACxB;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACb;IACD,MAAM,OAAO,CAAC,IAAuB,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAO,IAAA,EAAA,IAAI,CAAC,EAAE,UAAU,EACxB;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACb;IACD,MAAM,OAAO,CAAC,IAAuB,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAO,IAAA,EAAA,IAAI,CAAC,EAAE,UAAU,EACxB;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACb;IACD,MAAM,MAAM,CAAC,IAAuB,EAAA;AAClC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAO,CAAO,IAAA,EAAA,IAAI,CAAC,EAAE,KAAK,EAAE;AACxE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC;KACb;IACD,SAAS,CAAC,CAAS,EAAE,MAAc,EAAA;QACjC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACjC;AACD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,YAAqC;AACzC,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CACzC,CAAG,EAAA,MAAM,CAAW,QAAA,EAAA,MAAM,QAAQ,GAAG,CAAA,GAAA,EAAM,kBAAkB,CAC3D,CAAC,CACF,CAAS,MAAA,EAAA,kBAAkB,CAAC,IAAI,CAAC,CAAE,CAAA,EACpC,EAAE,aAAa,EAAE,IAAI,EAAE,CACxB,CAAC;AACF,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,oBAAA,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;AAC1B,oBAAA,OAAO,QAAQ,CAAC;iBACjB;AACD,gBAAA,OAAO,EAAE,CAAC;aACX;SACF,CAAC;KACH;AAED,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACxD,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACvC,gBAAA,UAAU,EAAE,+BAA+B;AAC5C,aAAA,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAC;SAChE;KACF;+GAjHU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAtB,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAf,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAqC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCMY,kBAAkB,CAAA;IAG7B,WACU,CAAA,SAA2C,EAC3C,EAAe,EACf,QAAsB,EACtB,OAAoB,EACI,IAAoB,EAAA;QAJ5C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkC;QAC3C,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACI,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAgB;KAClD;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC7D,YAAA,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjE,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC7D,YAAA,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACnE,YAAA,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACtE,SAAA,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACxB;AAED,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;KACtC;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KACxC;AAED,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;KACtC;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;KACzC;AAED,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;KAC1C;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,OAAO,GAAqB;AAChC,YAAA,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;AAC1C,YAAA,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc;AAC9C,YAAA,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;AAC1C,YAAA,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe;AAChD,YAAA,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB;SACnD,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;;YAEnB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC/B;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,GAAG,EAAE,wCAAwC;AAC9C,aAAA,CAAC,CAAC;SACJ;KACF;AA/DU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,0HAQnB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AARd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,qDCxB/B,shFAuDM,EAAA,MAAA,EAAA,CAAA,qbAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA5B,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD/BO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,shFAAA,EAAA,MAAA,EAAA,CAAA,qbAAA,CAAA,EAAA,CAAA;;0BAYtB,MAAM;2BAAC,eAAe,CAAA;;;METd,WAAW,CAAA;AACtB,IAAA,WAAA,CACU,WAAwB,EACxB,YAA0B,EAC3B,MAAiB,EAChB,WAAwB,EAAA;QAHxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC3B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QAChB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAC9B;IAEJ,MAAM,WAAW,CAAC,OAAwB,EAAA;AACxC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,SAAA,CAAW,EACX,OAAO,EACP;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;AACF,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QACD,MAAM,GAAG,GAAqB,EAAE,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,MAAM,EAAE;gBACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;aAC9B;SACF;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,WAAW,CAAC,OAAyB,EAAA;AACzC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,CAAA,SAAA,CAAW,EACX,EAAE,GAAG,EAAE,OAAO,EAAE,EAChB;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF,CAAC;;KAEH;IAED,MAAM,SAAS,CAAC,OAAY,EAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAM,CAAA,WAAA,CAAa,EAAE,OAAO,EAAE;AACxE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CAAC,CAAC;;KAEJ;AAED,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;AACvC,gBAAA,GAAG,EAAE;oBACH,cAAc;oBACd,gBAAgB;oBAChB,cAAc;oBACd,iBAAiB;oBACjB,kBAAkB;AACnB,iBAAA;AACF,aAAA,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACrD,gBAAA,IAAI,EAAE,SAAS;AAChB,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;gBAC7B,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;oBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,YAAA,OAAO,IAAI,CAAC;SACb;KACF;+GAtEU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAf,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAqC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCtBY,iBAAiB,CAAA;AACrB,IAAA,SAAA,IAAA,CAAA,aAAa,GAAG;QACrB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAClB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAClB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAClB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAClB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAClB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;KACnB,CAAC,EAAA;AACK,IAAA,SAAA,IAAA,CAAA,QAAQ,GAA8B;AAC3C,QAAA,GAAG,EAAE,YAAY;AACjB,QAAA,GAAG,EAAE,WAAW;KACjB,CAAC,EAAA;AACF,IAAA,aAAa,mBAAmB,CAAC,aAAa,GAAG,EAAE,EAAA;AACjD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B;AACE,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,aAAa,EAAE,SAAS;AACxB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,UAAU;SACjB,EACD,aAAa,CACd,CAAC;QAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAEpC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,eAAe,iBAAiB,CAAC,IAAS,EAAA;YACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,gBAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;oBACjB,OAAO,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO;iBACR;AACD,gBAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AACxB,gBAAA,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAW;AACtC,oBAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;AAC9B,oBAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,oBAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;oBACvB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,oBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEnD,oBAAA,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;oBAC3C,OAAO,CAAC,SAAS,CAAC,CAAC;AACrB,iBAAC,CAAC,CAAC;gBACH,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACtC,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,CAAC,IAAI,CAAC,MAAK;AAChB,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACpC,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,OAAO,CAAC;SAChB;QAED,eAAe,YAAY,CAAC,IAAe,EAAA;YACzC,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,YAAA,KAAK,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAC7C,iBAAiB,CAAC,aAAa,CAChC,EAAE;AACD,gBAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;aACrD;YACD,MAAM,KAAK,GAAQ,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,gBAAA,MAAM,WAAW,GAAQ,SAAS,CAAC,CAAC,CAAC,CAAC;gBACtC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;aACtC;AACD,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,eAAe,UAAU,CAAC,IAAe,EAAE,QAAa,EAAE,QAAa,EAAA;YACrE,OAAO,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAI;AACvC,gBAAA,MAAM,OAAO,GAAG;AACd,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,YAAY,IAAI,GAAG;oBACjD,aAAa,EAAE,QAAQ,CAAC,aAAa;iBACtC,CAAC;AAEF,gBAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAExD,gBAAA,MAAM,SAAS,GAAG,OAAO,IAAS,KAAI;oBACpC,IAAI,CAAC,GAAG,EAAE;wBACR,QAAQ,CAAC,IAAI,CAAC,CAAC;wBACf,OAAO;qBACR;AACD,oBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;oBAElB,MAAM,SAAS,GAAQ,EAAE,CAAC;AAC1B,oBAAA,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAC/B,oBAAA,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;oBACjC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAElC,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACjD,wBAAA,MAAM,CAAC,MAAM,CACX,OAAO,EACP,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC3C,IAAI,CACL,CAAC;AACJ,qBAAC,CAAC,CAAC;AAEH;;;;;;;;;;AAUE;AACJ,iBAAC,CAAC;AAEF,gBAAA,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC7B,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE;oBACzB,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,oBAAA,aAAa,EAAE,QAAQ;AACxB,iBAAA,CAAC,CACH,CAAC;AACJ,aAAC,CAAC,CAAC;SACJ;;;KAIF;;;MCnFU,oBAAoB,CAAA;IAK/B,WACU,CAAA,EAAU,EACV,MAAgB,EAChB,WAAwB,EACxB,SAAoB,EACpB,kBAAsC,EAAA;QAJtC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAQ;QACV,IAAM,CAAA,MAAA,GAAN,MAAM,CAAU;QAChB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;AAThD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAa,CAAC;QACvC,IAAK,CAAA,KAAA,GAAe,IAAI,CAAC;QAyFzB,IAAmB,CAAA,mBAAA,GAAkB,EAAE,CAAC;QACxC,IAAW,CAAA,WAAA,GAAuC,EAAE,CAAC;AAhFnD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAa,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,MAAW,KAAI;AAC/C,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;aAC1C;AAAM,iBAAA,IAAI,MAAM,KAAK,KAAK,EAAE;gBAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;aAC3C;AACH,SAAC,CAAC,CAAC;;;QAIH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACpD,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY,IAAI,MAAM,CAAC,CAAC,EAAE;gBAC7C,YAAY,CAAC,WAAW,EAAE,CAAC;AAC3B,gBAAA,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;gBACvB,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,gBAAA,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,KAAa,KAAI;oBACnD,WAAW,GAAG,OAAO,CAAC;;oBAEtB,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;oBAC7D,MAAM,QAAQ,GAAG,KAAK,CACpB,YAAY,EACZ,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAC1B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CACzB,CAAC;AAEF,oBAAA,IAAI,OAAO,GAA+B,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAEnE,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAC1C,OAAO,IAAgB,KAAI;AACzB,wBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;4BACnB,IAAI,MAAM,GAAG,IAAI,CAAC;4BAClB,kBAAkB,CAAC,WAAW,EAAE,CAAC;AACjC,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,gCAAA,MAAM,MAAM,GAAkB,IAAI,CAAC,CAAC,CAAC,CAAC;gCACtC,MAAM,KAAK,GAAG,CAAA,EAAG,MAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAA,CAAE,CAAC;gCAC1C,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE;AAClC,oCAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;AAEhB,wCAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,4CAAA,MAAM,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,CAAC;yCACjD;AACD,wCAAA,MAAM,CAAC,IAAI;4CACT,qBAAqB,CAAC,wBAAwB,CAC5C,MAAM,CAAC,OAAO,EACd,MAAM,CACP,CAAC;qCACL;AACD,oCAAA,IAAI,MAAM,CAAC,IAAI,EAAE;wCACf,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;wCACzB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;qCACzC;iCACF;AACD,gCAAA,IAAI,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE;AACtB,oCAAA,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;iCACpB;6BACF;4BACD,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,4BAAA,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;yBAC9B;AACH,qBAAC,CACF,CAAC;AACJ,iBAAC,CAAC;AACF,gBAAA,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;aAChC;AACH,SAAC,CAAC,CAAC;QAEH,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,IAAI,EAAE,CAAC;SACb,EAAE,CAAC,CAAC,CAAC;KACP;AAED,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACzC;IAID,WAAW,CAAC,GAAW,EAAE,QAAkB,EAAA;QACzC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;SAC5B;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACvD,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtC;QACD,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC1D;IAED,cAAc,CAAC,GAAW,EAAE,QAAmB,EAAA;QAC7C,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;YAC9B,OAAO;SACR;QACD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACvD,YAAA,IAAI,MAAM,IAAI,CAAC,EAAE;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AACrC,oBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;iBAC9B;aACF;SACF;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SAC9B;QACD,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC1D;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KACvB;IAED,eAAe,CAAC,OAAe,EAAE,SAAc,EAAA;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAA,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SAC7B;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;YACtB,OAAO;SACR;QACD,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAE5D,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YACtB,OAAO;SACR;AACD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpB;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAY;YACpC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxB,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC,CAAC;QACH,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAC9B,WAAW,EACX,IAAI,CAAC,mBAAmB,EACxB,mBAAmB,CACpB,CAAC;AACF,gBAAA,WAAW,EAAE,CAAC;aACf;SACF;AACD,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;SACxD;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KACzB;AAED,IAAA,MAAM,IAAI,GAAA;QACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,GAAG,EAAE,EAAE;YACP,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC;QAEF,IAAI,QAAQ,GAA6B,IAAI,CAAC;AAC9C,QAAA,GAAG;AACD,YAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CACnC,CAAO,IAAA,EAAA,OAAO,CAAC,EAAE,CAAe,YAAA,EAAA,OAAO,CAAC,MAAM,CAAQ,KAAA,EAAA,OAAO,CAAC,GAAG,CAAE,CAAA,EACnE,EAAE,aAAa,EAAE,IAAI,EAAE,CACxB,CAAC;YACF,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,EAAE;AAC3C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;aAC3D;AACD,YAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACxD,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3B,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;aAC3C;AACH,SAAC,QAAQ,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KAC7D;AACD,IAAA,IAAI,CAAC,KAAU,EAAA;QACb,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAC3B,KAAK,EACL,IAAI,CAAC,mBAAmB,EACxB,mBAAmB,CACpB,CAAC;KACH;AACF,CAAA;MAKY,YAAY,CAAA;IACvB,WACU,CAAA,WAAwB,EACxB,YAA0B,EAC1B,WAAwB,EACzB,MAAiB,EAChB,SAAoB,EACpB,kBAAsC,EAAA;QALtC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACzB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QAChB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;KAC5C;AAEJ,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,OAAO,KAAU,KAAkB;;YAEhD,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,CAAA,IAAA,EAAO,MAAM,CAAA,IAAA,CAAM,EACnB;AACE,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,IAAI,EAAE,GAAG;AACT,gBAAA,MAAM,EAAE,GAAG;AACZ,aAAA,EACD,EAAE,aAAa,EAAE,KAAK,EAAE,CACzB,CAAC;;AAEJ,SAAC,CAAC;AACF,QAAA,OAAO,IAAI,oBAAoB,CAC7B,MAAM,EACN,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,kBAAkB,CACxB,CAAC;KACH;+GA/BU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAvB,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAuB,WAAA,EAAA,EAAA,EAAA,KAAA,EAAArC,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA+B,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MC3OY,kBAAkB,CAAA;AAe7B,IAAA,WAAA,CACU,SAA2C,EAC3C,EAAe,EACf,QAAsB,EACE,IAAgB,EAAA;QAHxC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkC;QAC3C,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACE,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;AAjBlD,QAAA,IAAA,CAAA,OAAO,GAAsB;AAC3B,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,QAAQ,EAAE,IAAI;SACf,CAAC;AACF,QAAA,IAAA,CAAA,YAAY,GAA2B;AACrC,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa;SAC7C,CAAC;AACF,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAQ3B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAC7B;QACD,IAAI,CAAC,SAAS,GAAG;AACf,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,GAAG,EAAE;gBACH,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA;SACF,CAAC;KACH;AAED,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC/B;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC/B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC7B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACjH;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9F;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9F;KACF;IAED,mBAAmB,CAAC,KAAa,EAAE,KAAiB,EAAA;AAClD,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE;AAC5B,YAAA,OAAO,CAAU,OAAA,EAAA,KAAK,CAAC,SAAS,CAAC,cAAc,CAA4B,yBAAA,EAAA,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC;SAC5G;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,YAAY,CAAC,YAA4B,EAAA;AACvC,QAAA,IAAI,YAAY,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC;SAC/C;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACxE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAA,GAAA,EAAM,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC;SAC/C;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;;YAEnB,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,QAAQ,EAAE;AAC9C,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;aAC/B;YAED,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/C,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrB;AACD,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjD,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtB;AACD,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjD,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtB;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AACxD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;;AAGxD,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC3B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,oBAAA,MAAM,KAAK,GAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACtC,oBAAA,MAAM,KAAK,GAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;oBACtC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;AAChC,wBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;qBAC/B;iBACF;aACF;YACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACtC;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,GAAG,EAAE,wCAAwC;AAC9C,aAAA,CAAC,CAAC;SACJ;KACF;AA/HU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kGAmBnB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAnBd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,qDCrB/B,+qEAgDM,EAAA,MAAA,EAAA,CAAA,gOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA8B,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,KAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD3BO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,+qEAAA,EAAA,MAAA,EAAA,CAAA,gOAAA,CAAA,EAAA,CAAA;;0BAuBtB,MAAM;2BAAC,eAAe,CAAA;;;AExB1B,CAAC;MAgBW,aAAa,CAAA;AAGxB,IAAA,WAAA,CACU,IAAiB,EACjB,OAAoB,EACpB,YAA0B,EAC1B,MAAiB,EAAA;QAHjB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAa;QACjB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QAN3B,IAAa,CAAA,aAAA,GAAkC,SAAS,CAAC;AACzD,QAAA,IAAA,CAAA,aAAa,GAA6B,IAAI,YAAY,EAAc,CAAC;QAOvE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC3C,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,aAAa,CAAC,eAAe,EAAE,EAAE;AACnC,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;iBAC3B;qBAAM;oBACL,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAa,YAAY,EAAE;AACjE,wBAAA,SAAS,EAAE,KAAK;AACjB,qBAAA,CAAC,CAAC;AACH,oBAAA,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;wBAC/B,IAAI,OAAO,EAAE;AACX,4BAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;AAC7B,4BAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;yBAClC;6BAAM;AACL,4BAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;yBAC3B;AACH,qBAAC,CAAC,CAAC;iBACJ;aACF;iBAAM;AACL,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC3B;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,OAAO,eAAe,GAAA;AACpB,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC;AACtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAClC,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SACvD;aAAM;AACL,YAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;AAC5D,oBAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7C,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;SACJ;KACF;IAED,MAAM,IAAI,CAAC,OAA2B,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,IAAI,OAAO,EAAE;YACX,MAAM,GAAG,GAAG,YAAY,CAAC;YACzB,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;aAC3B;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC3D,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,UAAU,EAAE,4BAA4B;AACzC,aAAA,CAAC,CAAC;YACH,SAAS;AACN,iBAAA,WAAW,EAAE;AACb,iBAAA,SAAS,CAAC,OAAO,MAAiC,KAAI;AACrD,gBAAA,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;AAC5B,oBAAA,MAAM,OAAO,GAAoB;AAC/B,wBAAA,aAAa,EAAE,IAAI;AACnB,wBAAA,SAAS,EAAE,IAAI;qBAChB,CAAC;AACF,oBAAA,IAAI;wBACF,IAAI,WAAW,GAAQ,IAAI,CAAC;AAC5B,wBAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,4BAAA,MAAM,WAAW,GAAiB;AAChC,gCAAA,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc;AACvC,gCAAA,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,YAAY;AACvC,gCAAA,UAAU,EAAE,KAAK;AACjB,gCAAA,OAAO,EAAE,KAAK;AACd,gCAAA,SAAS,EAAE,KAAK;6BACjB,CAAC;4BACF,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAC3C,MAAM,CAAC,QAAQ,EACf,GAAG,EACH,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,EACrB,OAAO,EACP,WAAW,CACZ,CAAC;yBACH;6BAAM;4BACL,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CACnC,GAAG,EACH,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,EACrB,OAAO,CACR,CAAC;yBACH;AACD,wBAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;AACjC,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrC,wBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtB,4BAAA,KAAK,EAAE,QAAQ;AACf,4BAAA,GAAG,EAAE,sBAAsB;AAC5B,yBAAA,CAAC,CAAC;qBACJ;AAAC,oBAAA,OAAO,GAAG,EAAE,GAAG;iBAClB;AACH,aAAC,CAAC,CAAC;SACN;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAC;SAChE;KACF;+GA/GU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA1B,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAlB,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MClBY,aAAa,CAAA;AAGxB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAqB,CAAC;AACpD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,EAAsB,CAAC;KAC7D;AAED,IAAA,SAAS,CAAC,OAAiB,EAAA;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACvC;AAED,IAAA,YAAY,CAAC,QAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACnC;IAED,MAAM,UAAU,CAAC,OAA0B,EAAA;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAC/C,CAAC,QAA4B,KAAI;gBAC/B,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClB,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,aAAC,CACF,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;+GA1BU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACED,MAAM,aAAa,GAAG,CAAC,gCAAgC,CAAC,CAAC;MAK5C,cAAc,CAAA;AACzB,IAAA,WAAA,CACU,KAAqB,EACrB,IAAiB,EACjB,MAA4B,EACJ,YAAoB,EAAA;QAH5C,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;QACrB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAa;QACjB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAsB;QACJ,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAQ;KACjD;AAEL,IAAA,cAAc,CAAC,KAAa,EAAE,OAAA,GAAkB,CAAC,EAAA;AAC/C,QAAA,MAAM,QAAQ,GAAQ;AACpB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,KAAK;SACf,CAAC;AACF,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACtC,YAAA,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,EAAE;AACpC,gBAAA,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC;AAC/C,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,gBAAA,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,cAAc,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC7D,gBAAA,QAAQ,CAAC,OAAO,GAAG,GAAG,GAAG,cAAc,CAAC;AACxC,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;aACzB;SACF;QAAC,OAAO,GAAG,EAAE;;SAEb;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,SAAS,CACP,OAAyB,EACzB,IAAiB,EAAA;QAEjB,MAAM,UAAU,GAAQ,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,YAAY,GAA2B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjE,QAAA,IAAI,UAAU,IAAI,KAAK,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE;gBACpC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aAClD;AAAM,iBAAA,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;AACxC,gBAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;aACvC;SACF;AAED,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAC5BwC,WAAS,CAAC,CAAC,KAAK,KAAI;;AAElB,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtE,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;oBACjC,OAAO;AACR,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aAClC;iBAAM;;gBAEL,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC/C,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;;AAE5B,wBAAA,IAAI,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE;;AAEpC,4BAAA,IAAI,OAAO,CAAC,OAAO,EAAE;;gCAEnB,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,MAAK;AAC3C,oCAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,iCAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;AACf,oCAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrB,iCAAC,CAAC,CAAC;6BACJ;yBACF;qBACF;yBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE;;AAEnD,wBAAA,IAAI,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE;AACpC,4BAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,4BAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;yBACpC;qBACF;iBACF;AACD,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;gBACxB,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAC5B,gBAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBACvC,gBAAgB,GAAG,KAAK,CAAC;qBAC1B;iBACF;AAED,gBAAA,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO;AAC1B,qBAAA,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;AAClC,qBAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAErC,IAAI,gBAAgB,EAAE;oBACpB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;iBAC9D;AAED,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;oBACjC,OAAO;AACR,iBAAA,CAAC,CAAC;AAEH,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aAClC;SACF,CAAC,CACH,CAAC;KACH;AAvGU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,2GAKf,cAAc,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AALb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAMI,MAAM;2BAAC,cAAc,CAAA;;;MCtBb,uBAAuB,CAAA;AAIhC,IAAA,WAAA,GAAA;QAHQ,IAAM,CAAA,MAAA,GAAoC,IAAI,CAAC;QAC/C,IAAS,CAAA,SAAA,GAAkD,EAAE,CAAC;QAGlE,IAAI,CAAC,IAAI,EAAE,CAAC;KACf;AAEO,IAAA,MAAM,IAAI,GAAA;QACd,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,aAAa,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE;YAC3D,gBAAgB,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI;AACA,gBAAA,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAA0B,EAAE,CAAC,CAAC;AAErF,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAiC,CAAC;AACrD,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAGzB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;AACjB,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAiC,CAAC;AACrD,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,iBAAC,CAAC;gBAEF,OAAO;aACV;AAAC,YAAA,MAAM;AACJ,gBAAA,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;aAC7D;SACJ;;QAGD,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB;;;;;;;;;;;;;;;AAeE;KACL;AAEO,IAAA,MAAM,eAAe,GAAA;QACzB,IAAI,MAAM,GAAoC,IAAI,CAAC;AACnD,QAAA,IAAI;AACA,YAAA,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,GAAG,SAAS,CAAC;SACtB;QAAC,OAAO,GAAQ,EAAE;AACf,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,EAAE;gBACxE,MAAM,GAAG,QAAQ,CAAC;aACrB;iBAAM;AACH,gBAAA,MAAM,GAAG,QAAQ,CAAC;aACrB;SACJ;AACD;;;;;AAKE;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC5B;AAED,IAAA,QAAQ,CAAC,QAAmD,EAAA;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC1C;AAEO,IAAA,MAAM,CAAC,KAA+B,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3C;AACJ;;MChFY,2BAA2B,CAAA;AAIpC,IAAA,WAAA,GAAA;QAHQ,IAAM,CAAA,MAAA,GAAiC,IAAI,CAAC;QAC5C,IAAS,CAAA,SAAA,GAA+C,EAAE,CAAC;QAG/D,IAAI,CAAC,IAAI,EAAE,CAAC;KACf;AAED,IAAA,MAAM,IAAI,GAAA;QACN,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,aAAa,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE;YAC3D,gBAAgB,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI;AACA,gBAAA,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAA8B,EAAE,CAAC,CAAC;AAEzF,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAA8B,CAAC;AAClD,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAGzB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;AACjB,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAA8B,CAAC;AAClD,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,iBAAC,CAAC;gBAEF,OAAO;aACV;AAAC,YAAA,MAAM;AACJ,gBAAA,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;aACjE;SACJ;;QAGD,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB;;;;;;;;;;;;;;;AAeE;KACL;AAEO,IAAA,MAAM,eAAe,GAAA;QACzB,IAAI,MAAM,GAAiC,IAAI,CAAC;AAChD,QAAA,IAAI;AACA,YAAA,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,GAAG,SAAS,CAAC;SACtB;QAAC,OAAO,GAAQ,EAAE;AACf,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,EAAE;gBACxE,MAAM,GAAG,QAAQ,CAAC;aACrB;iBAAM;AACH,gBAAA,MAAM,GAAG,QAAQ,CAAC;aACrB;SACJ;AACD;;;;;AAKE;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC5B;AAED,IAAA,QAAQ,CAAC,QAAgD,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC1C;AAEO,IAAA,MAAM,CAAC,KAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3C;AACJ;;MChFqB,YAAY,CAAA;AAEhC,IAAA,WAAA,CAAY,OAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KACxB;AAEF;;ACLK,MAAO,wBAAyB,SAAQ,YAAY,CAAA;AACxD,IAAA,WAAA,CAAY,OAAyB,EAAA;QACnC,KAAK,CAAC,OAAO,CAAC,CAAC;KAChB;IACD,MAAM,OAAO,CAAC,OAAoB,EAAA;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACvD,QAAA,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AACtC,QAAA,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE;YACjC,OAAO;AACR,SAAA,CAAC,CAAC;KACJ;AACF;;MCmBY,MAAM,CAAA;aACV,IAAK,CAAA,KAAA,GAAuC,EAAE,CAAC,EAAA;aAC/C,IAAa,CAAA,aAAA,GAA0C,EAAE,CAAC,EAAA;AAE1D,IAAA,SAAA,IAAA,CAAA,SAAS,GAAmB,IAAI,cAAc,EAAE,CAAC,EAAA;AACjD,IAAA,SAAA,IAAA,CAAA,iBAAiB,GAAsB,IAAI,YAAY,EAAE,CAAC,EAAA;AAC1D,IAAA,SAAA,IAAA,CAAA,UAAU,GAAuB,IAAI,YAAY,EAAE,CAAC,EAAA;aACpD,IAAY,CAAA,YAAA,GAAiC,IAAI,CAAC,EAAA;AAClD,IAAA,SAAA,IAAA,CAAA,kBAAkB,GAAuB,IAAI,YAAY,EAAE,CAAC,EAAA;AAC5D,IAAA,SAAA,IAAA,CAAA,YAAY,GAAmC,IAAI,YAAY,EAAE,CAAC,EAAA;IAGzE,OAAO,aAAa,CAAC,UAA0B,EAAA;AAC7C,QAAA,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;KAChC;IAED,aAAa,IAAI,CAAC,mBAAwC,EAAE,SAAiC,EAAE,EAAA;AAC7F,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;;QAE/C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;KAC7D;IAED,OAAO,2BAA2B,CAAC,QAAgB,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KACrC;IAED,OAAO,mBAAmB,CAAC,QAAgB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KACrC;AAED,IAAA,OAAO,oBAAoB,CACzB,QAAgB,EAChB,YAA8B,EAAA;QAE9B,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SACnC;QACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC;KACnD;AAED,IAAA,OAAO,oBAAoB,CACzB,QAAgB,EAChB,YAA8B,EAAA;QAE9B,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SACnC;QACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC;KACnD;IAED,OAAO,iBAAiB,CAAC,QAAgB,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC;AACrC,QAAA,OAAO,KAAK,CAAC;KACd;IAED,OAAO,aAAa,CAAC,QAAkB,EAAA;QACrC,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACnD;IAED,aAAa,aAAa,GAAA;QACxB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;SACjC;KACF;AAED,IAAA,aAAa,gBAAgB,CAAC,cAAsB,EAAA;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;AACD,QAAA,IAAI;AACF,YAAA,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;SAC3B;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAiB,cAAA,EAAA,cAAc,CAAW,SAAA,CAAA,CAAC,CAAC;SACrE;AACD,QAAA,IAAI;AAEF,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,EAAA;gBAChE,KAAK,CAAC,IAAI,EAAE,CAAC;AACf,aAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAiB,cAAA,EAAA,cAAc,CAAe,aAAA,CAAA,CAAC,CAAC;SACzE;AACD,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AACtC,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBAC3B,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,EAAA;oBACnD,KAAK,CAAC,IAAI,EAAE,CAAC;AACf,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAiB,cAAA,EAAA,cAAc,CAAe,aAAA,CAAA,CAAC,CAAC;SACzE;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;KACnC;IAED,OAAO,mBAAmB,CAAC,cAAsB,EAAA;QAC/C,IAAI,EAAE,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,OAAO,KAAK,CAAC;SACd;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAC/C,QAAA,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC7D,QAAA,IAAI,eAAe,IAAI,WAAW,EAAE;;;AAGlC,YAAA,MAAM,YAAY,GAChB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACtC,YAAA,MAAM,YAAY,GAChB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACtC,MAAM,WAAW,GAAuB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACzE,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE;AAClD,gBAAA,OAAO,KAAK,CAAC;aACd;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACvE,gBAAA,OAAO,KAAK,CAAC;aACd;SACF;AAAM,aAAA,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;;AAE9D,YAAA,OAAO,IAAI,CAAC;SACb;AAAM,aAAA,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC7E,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,aAAa,eAAe,CAC1B,cAAsB,EACtB,gBAA+B,EAAE,EAAA;QAEjC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAA8B,2BAAA,EAAA,cAAc,CAAG,CAAA,CAAA,CAAC,CAAC;;QAEvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;;AAE3C,QAAA,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;;AAG/C,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG;YAC3B,QAAQ;AACR,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAChD,CAAC;;QAGF,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;;AAGzD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;SACxD;;QAGD,QAAQ;AACL,aAAA,WAAW,EAAE;aACb,IAAI,CAAC,UAAU,KAAK,EAAA;AACnB,YAAA,OAAO,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC7C,SAAC,CAAC;aACD,IAAI,CAAC,MAAK;AACT,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,wBAAA,CAA0B,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,UAAU,EAAE;gBAC7C,KAAK,EAAE,QAAQ,CAAC,gBAAgB;AAChC,gBAAA,EAAE,EAAE,cAAc;AACnB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACzB;AAED,IAAA,OAAO,oBAAoB,GAAA;AACzB,QAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;;AAE9C,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACrD,QAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;AAEnD,QAAA,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAE/D,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CACxC,cAAc,EACd,OAAO,OAAY,KAAI;AACrB,YAAA,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACnC,YAAA,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAClC,SAAC,CACF,CAAC;QACF,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,OAAY,KAAI;;AAEvE,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;YAClC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAY,SAAA,EAAA,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;;AAE3C,YAAA,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;;AAE/C,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;gBACnB,QAAQ;AACR,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;aAChD,CAAC;;YAEF,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;;AAEjD,YAAA,QAAQ,CAAC,aAAa,GAAG,CAAC,KAAK,KAAI;gBACjC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACnD,aAAC,CAAC;;YAEF,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAkB,eAAA,EAAA,QAAQ,CAAY,SAAA,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;YACtE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAmE,gEAAA,EAAA,QAAQ,CAAC,cAAc,CAAE,CAAA,CAAC,CAAC;YACpH,MAAM,QAAQ,CAAC,oBAAoB,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;AACtE,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,QAAQ,CAAC,mBAAmB,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtE,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AACtD,YAAA,mBAAmB,CAAC,SAAS,CAAC,YAAY,EAAE;gBAC1C,MAAM;AACN,gBAAA,EAAE,EAAE,MAAM;AACX,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AACjC,SAAC,CAAC,CAAC;;QAGH,mBAAmB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAY,KAAI;AACvE,YAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACxC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAC3B,IAAI,eAAe,CAAC;oBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,aAAa,EAAE,OAAO,CAAC,KAAK;oBAC5B,MAAM,EAAE,OAAO,CAAC,EAAE;AACnB,iBAAA,CAAC,CACH,CAAC;aACH;iBAAM;gBACL,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAoC,iCAAA,EAAA,cAAc,CAAE,CAAA,CAAC,CAAC;aAC7E;AACH,SAAC,CAAC,CAAC;;QAGH,mBAAmB,CAAC,iBAAiB,CACnC,YAAY,EACZ,OAAO,OAAY,KAAI;AACrB,YAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;AACnC,YAAA,IAAI,QAAQ,IAAI,MAAM,EAAE;;gBAEtB,OAAO;aACR;;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,IAAI,EAAE;gBACR,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAkB,eAAA,EAAA,QAAQ,CAAY,SAAA,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;AACtE,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,kEAAA,EAAqE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAA,CAAE,CAAC,CAAC;AAC3H,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CACtC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAClC,CAAC;aACH;iBAAM;gBACL,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAA2C,wCAAA,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;aAC5E;AACH,SAAC,CACF,CAAC;KACH;IAED,OAAO,cAAc,CAAC,SAAmB,EAAA;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KAC7C;AAED,IAAA,aAAa,mBAAmB,CAAC,QAAgB,EAAA;AAC/C,QAAA,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,OAAO,eAAe,CAAC,MAAc,EAAA;;QAEnC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAwB,qBAAA,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;KACzD;AAED,IAAA,OAAO,UAAU,CAAC,WAA2B,EAAE,MAAc,EAAA;QAC3D,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,IAAI,CAAC,CAAC;;AAE9B,QAAA,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA,CAAE,CAAC,CAAC;;AAE3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,YAAA,IAAI,KAAK,GAAG,CAAC,GAAG,SAAS,EACvB,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;;AAE5B,YAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;SAC/C;;AAGD,QAAA,IAAI,GAAG,GAAG,SAAS,EAAE;;AAEnB,YAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;SAClD;KACF;AAED,IAAA,OAAO,IAAI,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAwB,EAAA;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,IAAI,EAAE;YACR,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,WAAW,CAAC,UAAU,KAAK,QAAQ,EAAE;;AAEvC,oBAAA,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAE;wBAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACzC,wBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;qBACnC;yBAAM;AACL,wBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;qBACvC;iBACF;qBAAM;oBACL,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAA4B,yBAAA,EAAA,WAAW,CAAC,UAAU,CAAE,CAAA,CAAC,CAAC;iBAC7E;aACF;iBAAM;gBACL,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAmB,gBAAA,EAAA,KAAK,CAAkB,gBAAA,CAAA,CAAC,CAAC;aACnE;SACF;aAAM;YACL,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAgC,6BAAA,EAAA,QAAQ,CAAE,CAAA,CAAC,CAAC;SACnE;KACF;IAED,OAAO,QAAQ,CAAC,GAAQ,EAAA;AACtB,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO;AACjB,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7B;aAAM;AACL,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;SAC7C;KACF;AAED,IAAA,OAAO,oBAAoB,CAAC,OAAuB,EAAE,cAAsB,EAAA;AACzE,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AACrD,QAAA,OAAO,CAAC,MAAM,GAAG,MAAK;YACpB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAW,QAAA,EAAA,KAAK,CAAS,OAAA,CAAA,CAAC,CAAC;AACnD,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,OAAO,GAAG,MAAK;YACrB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAW,QAAA,EAAA,KAAK,CAAS,OAAA,CAAA,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAC3C,SAAC,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAS,KAAI;;AAE7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,gBAAA,IAAI,EAAE,IAAI;gBACV,KAAK;AACL,gBAAA,QAAQ,EAAE,cAAc;AACzB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;YAChD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;SAC9D;aAAM;YACL,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;SAC7D;KACF;IAED,OAAO,wBAAwB,CAAC,QAAkB,EAAA;QAChD,IAAI,GAAQ,EAAE,KAAU,CAAC;QAEzB,OAAO,SAAS,SAAS,CAAC,KAAU,EAAA;AAClC,YAAA,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClC,GAAG,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClD,KAAK,GAAG,CAAC,CAAC;;gBAEV,OAAO;aACR;YAED,IAAI,IAAI,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAErB,YAAA,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC;;AAGzB,YAAA,IAAI,KAAK,KAAK,GAAG,CAAC,UAAU,EAAE;;;gBAG5B,QAAQ,CAAC,GAAG,CAAC,CAAC;aACf;AACH,SAAC,CAAC;KACH;IAED,OAAO,yBAAyB,CAAC,QAAkB,EAAA;AACjD,QAAA,IAAI,KAAU,EAAE,KAAU,EAAE,KAAU,CAAC;QAEvC,OAAO,SAAS,SAAS,CAAC,KAAU,EAAA;AAClC,YAAA,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,gBAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,KAAK,GAAG,EAAE,CAAC;gBACX,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,uBAAuB,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;gBAClE,OAAO;aACR;AAED,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvB,YAAA,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,YAAY,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,SAAS,CACtE,CAAC;AAEF,YAAA,IAAI,KAAK,KAAK,KAAK,EAAE;AACnB,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC5C,gBAAA,IAAI,GAAG,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACvC,gBAAA,IAAI,OAAO,GAAG,UAAU,CAAM,EAAE,GAAQ,EAAA;AACtC,oBAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;oBAC9B,MAAM,CAAC,MAAM,GAAG,YAAA;AACd,wBAAA,MAAM,MAAM,GAAQ,IAAI,CAAC,MAAM,CAAC;wBAChC,GAAG,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;wBAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;AAC1B,4BAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;4BAChD,QAAQ,CAAC,GAAG,CAAC,CAAC;yBACf;6BAAM;4BACL,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;yBACzC;AACH,qBAAC,CAAC;oBACF,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,iBAAC,CAAC;AACF,gBAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACf;AACH,SAAC,CAAC;KACH;AAED,IAAA,aAAa,cAAc,CAAC,YAA0C,EAAA;AACpE,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;KAClC;IAED,OAAO,eAAe,CAAC,cAAsB,EAAA;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACxC,IAAI,IAAI,EAAE;YACR,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC3C,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,MAAA,EAAS,OAAO,CAAC,MAAM,CAAA,YAAA,EAAe,cAAc,CAAA,CAAE,CAAC,CAAC;AAC9E,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACzB,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACpC,aAAC,CAAC,CAAC;SACJ;KACF;IAED,OAAO,aAAa,CAAC,cAAsB,EAAA;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAC5C,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,aAAa,yBAAyB,CAAC,cAAsB,EAAA;;QAE3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AACrC,YAAA,MAAM,eAAe,GAAG,CAAC,WAAwB,KAAI;gBACnD,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAuB,KAAI;AAC1D,oBAAA,MAAM,MAAM,GAAiB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACjD,KAAK,EACL,WAAW,CACZ,CAAC;AACJ,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC;;AAEF,YAAA,MAAM,YAAY,GAAQ,IAAI,CAAC,YAAY,CAAC;YAC5C,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACzC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,gBAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AAC7C,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,CAAA,uBAAA,EAA0B,cAAc,CAAS,MAAA,EAAA,GAAG,CAAI,CAAA,EAAA,MAAM,CAAC,gBAAgB,CAC7E,kBAAkB,CACnB,CAAA,CAAE,CACJ,CAAC;gBACF,eAAe,CAAC,kBAAkB,CAAC,CAAC;aACrC;SACF;aAAM;YACL,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,CAA6D,0DAAA,EAAA,CAAC,CAAC,IAAI;AAChE,iBAAA,YAAY,aAAa,CAAC,CAAC,IAAI,CAAA,CAAE,CACrC,CAAC;SACH;KACF;AAED,IAAA,aAAa,mBAAmB,CAC9B,QAA2B,EAC3B,cAAsB,EAAA;;AAGtB,QAAA,MAAM,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC;;AAErD,QAAA,QAAQ,CAAC,cAAc,GAAG,CAAC,IAA+B,KAAI;AAC5D,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,gBAAgB,EAAE;AACnD,oBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;AACnC,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa;AACnC,oBAAA,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AACzB,oBAAA,EAAE,EAAE,cAAc;AACnB,iBAAA,CAAC,CAAC;aACJ;AACH,SAAC,CAAC;AACF,QAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,WAA0B,KAAI;YAChD,MAAM,EACJ,KAAK,EACL,OAAO,EAAE,CAAC,MAAM,CAAC,GAClB,GAAG,WAAW,CAAC;;YAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC3C,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,6BAA6B,cAAc,CAAA,WAAA,EAAc,MAAM,CAAC,gBAAgB,CAC9E,MAAM,CACP,CAAA,CAAE,CACJ,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;;gBAEtC,MAAM,YAAY,GAAG,MAAK;;AAExB,oBAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,QAAQ,EAAE,cAAc;wBACxB,MAAM;AACP,qBAAA,CAAC,CAAC;AACL,iBAAC,CAAC;AACF,gBAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAChD,gBAAA,YAAY,EAAE,CAAC;aAChB;iBAAM,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AACzB,oBAAA,MAAM,EAAE,MAAM;AACf,iBAAA,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,MAAK;;AAExB,oBAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;AAChC,wBAAA,QAAQ,EAAE,cAAc;wBACxB,MAAM;AACP,qBAAA,CAAC,CAAC;AACL,iBAAC,CAAC;AACF,gBAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAChD,gBAAA,YAAY,EAAE,CAAC;gBACf,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,6BAA6B,cAAc,CAAA,WAAA,EAAc,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAC/E,CAAI,CAAA,EAAA,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAE,CAAA,CACtC,CAAC;;aAEH;;AAGD,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;;AAE9D,SAAC,CAAC;;AAEF,QAAA,QAAQ,CAAC,uBAAuB,GAAG,CAAC,EAAO,KAAI;AAC7C,YAAA,QAAQ,QAAQ,CAAC,eAAe;AAC9B,gBAAA,KAAK,KAAK,CAAC;AACX,gBAAA,KAAK,YAAY;AACf,oBAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,cAAc,CAAA,CAAE,CAAC,CAAC;oBACxD,MAAM;AACR,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,cAAc,CAAA,CAAE,CAAC,CAAC;;AAEjD,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;oBACvB,MAAM;AACR,gBAAA,KAAK,cAAc;AACjB,oBAAA,IAAI,CAAC,eAAe,CAAC,oBAAoB,cAAc,CAAA,CAAE,CAAC,CAAC;AAC3D,oBAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;oBACzC,MAAM;AACR,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,eAAe,CAAC,WAAW,cAAc,CAAA,CAAE,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;oBACzC,MAAM;AACR,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,cAAc,CAAA,CAAE,CAAC,CAAC;AAChD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;oBACzC,MAAM;AACR,gBAAA;AACE,oBAAA,IAAI,CAAC,eAAe,CAAC,WAAW,cAAc,CAAA,CAAE,CAAC,CAAC;oBAClD,MAAM;aACT;AACH,SAAC,CAAC;KACH;AAED,IAAA,OAAO,QAAQ,GAAA;QACb,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AACvH,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,KAAK,CAAC;KACd;;AAGD,IAAA,OAAO,SAAS,CAAC,WAAgB,EAAE,WAAgB,EAAA;AACjD,QAAA,IAAI,WAAW,IAAI,WAAW,EAAE;AAC9B,YAAA,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC;SACrC;aAAM;YACL,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;SACpD;KACF;IAED,OAAO,eAAe,CAAC,YAAiB,EAAA;QACtC,UAAU,CAAC,MAAK;AACd,YAAA,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,YAAA,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;SACvC,EAAE,GAAG,CAAC,CAAC;KACT;aAEM,IAAmB,CAAA,mBAAA,GAAoB,IAAI,CAAC,EAAA;IACnD,OAAO,uBAAuB,CAAC,QAAkB,EAAA;AAC/C,QAAA,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC;KACvC;AAED,IAAA,OAAO,0BAA0B,CAAC,cAAsB,EAAE,OAAgB,EAAA;QACxE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAA8B,2BAAA,EAAA,cAAc,CAAG,CAAA,CAAA,CAAC,CAAC;QACvE,IAAI,EAAE,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE;YAC3C,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,CAAa,UAAA,EAAA,cAAc,CAA0B,uBAAA,EAAA,MAAM,CAAC,IAAI,CAC9D,IAAI,CAAC,aAAa,CACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAA,CACf,CAAC;YACF,OAAO;SACR;AACD,QAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAa,UAAA,EAAA,cAAc,CAAgB,cAAA,CAAA,CAAC,CAAC;YACnE,OAAO;SACR;AAED,QAAA,IAAI,MAAM,CAAC,mBAAmB,EAAE;AAC9B,YAAA,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SACzF;aAAM;YACL,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;gBAChC,IAAI,KAAK,EAAE;oBACT,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,CAA4B,yBAAA,EAAA,cAAc,CAAI,CAAA,EAAA,MAAM,CAAC,gBAAgB,CACnE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAC7B,CAAE,CAAA,CACJ,CAAC;AACF,oBAAA,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACtD,oBAAA,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;oBAC9B,IAAI,eAAe,GAAG,SAAS,CAAC;AAChC,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE;wBACtB,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;qBAC1E;AACD,oBAAA,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE;AACzC,wBAAA,IAAI;4BACF,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,sBAAsB,GAAG,eAAe,CAAC,CAAC;AAChE,4BAAA,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;yBAClC;wBAAC,OAAO,GAAG,EAAE;;yBAEb;qBACF;iBACF;qBAAM;oBACL,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAU,OAAA,EAAA,cAAc,CAAuB,qBAAA,CAAA,CAAC,CAAC;iBACxE;aACF;iBAAM;gBACL,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,CAAU,OAAA,EAAA,cAAc,CAAsC,oCAAA,CAAA,CAC/D,CAAC;aACH;SACF;AAED,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,IAAI,KAAK,EAAE;gBACT,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AACpB,wBAAA,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;qBACnD;yBAAM;AACL,wBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACtD,4BAAA,OAAO,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC;AAC3C,yBAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACN,wBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1D,wBAAA,IAAI,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC;wBAChC,IAAI,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;4BAC7C,SAAS,GAAG,CAAC,CAAC;yBACf;AACD,wBAAA,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;qBAC3D;iBACF;qBAAM;AACL,oBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,UAAU,cAAc,CAAA,oBAAA,EAAuB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA,CAAE,CAC9E,CAAC;iBACH;aACF;iBAAM;gBACL,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAU,OAAA,EAAA,cAAc,CAAuB,qBAAA,CAAA,CAAC,CAAC;aACxE;SACF;aAAM;YACL,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,EAAE;gBAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,CAAA,yBAAA,EAA4B,cAAc,CAAI,CAAA,EAAA,MAAM,CAAC,gBAAgB,CACnE,aAAa,CAAC,MAAM,CACrB,CAAA,CAAE,CACJ,CAAC;oBACF,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;iBAC/C;qBAAM;oBACL,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAU,OAAA,EAAA,cAAc,CAAuB,qBAAA,CAAA,CAAC,CAAC;iBACxE;aACF;iBAAM;AACL,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CACnB,CAAA,OAAA,EAAU,cAAc,CAAiB,cAAA,EAAA,OAAO,uBAAuB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA,CAAE,CACtG,CAAC;aACH;SACF;KACF;;IAGD,OAAO,gBAAgB,CAAC,MAA0B,EAAA;QAChD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,MAAM,CAAC;SACf;aAAM;AACL,YAAA,OAAO,WAAW,MAAM,CAAC,EAAE,CAAI,CAAA,EAAA,MAAM,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,EAC7F,CAAG,EAAA,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,EAAE,EAAE,CAAC;SAC3D;KACF;;;MCjrBmB,gBAAgB,CAAA;IA0BpC,WACS,CAAA,YAA8B,EAC9B,WAAwB,EACxB,YAA0B,EAC1B,GAAsB,EACtB,UAA0B,EAAA;QAJ1B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;QA5BnC,IAAG,CAAA,GAAA,GAAkB,EAAE,CAAC;QACxB,IAAM,CAAA,MAAA,GAAkB,EAAE,CAAC;QAC3B,IAAQ,CAAA,QAAA,GAAmB,IAAI,CAAC;QAChC,IAAQ,CAAA,QAAA,GAAkB,EAAE,CAAC;QAE7B,IAAS,CAAA,SAAA,GAAQ,EAAE,CAAC;QACpB,IAAe,CAAA,eAAA,GAAW,SAAS,CAAC;AACpC,QAAA,IAAA,CAAA,aAAa,GAAwB;AACnC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,eAAe,EAAE,GAAG;AACpB,YAAA,mBAAmB,EAAE,GAAG;SACzB,CAAC;AACF,QAAA,IAAA,CAAA,iBAAiB,GAAwB;AACvC,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,SAAS,EAAE,CAAC;SACb,CAAC;QACF,IAAiB,CAAA,iBAAA,GAA0B,IAAI,CAAC;QAS9C,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;AAE9D,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAC/C,SAAS,EACT,MAAM,EACN,MAAM,EACN,QAAQ,CACT,CAAC;KACH;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KACnB;IAED,OAAO,GAAA;QACL,OAAO,WAAW,CAAC,QAAQ,CAAC;KAC7B;IAID,MAAM,sBAAsB,CAAC,OAAoB,EAAA;QAC/C,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACrD;AAED,IAAA,YAAY,CAAC,YAA2B,EAAA;AACtC,QAAA,MAAM,YAAY,GAAgB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAC7D,IAAI,CAAC,SAAS,EACd,EAAE,EACF,IAAI,EACJ,YAAY,CACb,CAAC;;AAEF,QAAA,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE;AAC1B,YAAA,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SACnC;KACF;IAED,sBAAsB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;;QAE7C,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KAC/C;IAED,MAAM,iBAAiB,CAAC,MAA4B,EAAA;AAClD,QAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,UAAU,CAAC,YAAW;AACpB,YAAA,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SACpC,EAAE,CAAC,CAAC,CAAC;KACP;AAED,IAAA,MAAM,eAAe,CAAC,MAA4B,EAAE,KAAW,EAAA;QAC7D,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;SAC7B;AACD,QAAA,IAAI;YACF,MAAM,mBAAmB,GAAG,KAAK,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC,eAAe,CAChE;AACE,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;AACjC,gBAAA,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;AACnD,gBAAA,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS;aACjD,EACD,mBAAmB,CACpB,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aACxB;AACD,YAAA,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC,mBAAmB,EAAE,CAAC;AAC1D,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,sBAAsB,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE;AACjD,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;AAClC,aAAA,CAAC,CAAC;SACJ;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;SAClC;KACF;AAED,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC/C,QAAA,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAK;AACxB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,cAAc,EAAE,CAAC;YAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,CAAY,SAAA,EAAA,IAAI,IAAI,EAAE,CAAe,YAAA,EAAA,IAAI,CAAC,aAAa,CAAC,QACxD,CAAA,MAAA,EAAS,MAAM,CAAC,EAAE,CAAE,CAAA,CACrB,CAAC;AACF,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;AAC1B,YAAA,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAK;AAC3B,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACpC;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,CAAA,SAAA,EAAY,IAAI,IAAI,EAAE,oBAAoB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CACxE,CAAC;AACF,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;AACjC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,MAAK;YAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;AAC1B,YAAA,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,SAAS,KAAI;YACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAK;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;AACjC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAK;YAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,MAAK;YAClC,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,SAAS,KAAI;YACjC,MAAM,IAAI,GAAG,YAAY,CAAC,kBAAkB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,KAAK,GAAkB,CAAC,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAC/D,YAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,iBAAiB,GAAA,GAAM;IAE7B,MAAM,mBAAmB,GAAA,GAAM;AAE/B,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACnC,QAAQ,CAAC,aAAa,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AACd,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;SACnC;KACF;AAED,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvD,MAAM,0BAA0B,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,aAAa,CAAC,YAA0B,EAAA;QACtC,IAAI,CAAC,sBAAsB,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KAClB;AAED,IAAA,MAAM,YAAY,GAAA;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAC/C,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,GAAG,EAAE,mCAAmC;AACzC,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,sBAAsB,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;KAC7D;AAED,IAAA,MAAM,iBAAiB,CAAC,QAAgB,EAAE,aAAsB,IAAI,EAAA;;QAElE,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE;;AAEhD,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;;AAEvB,gBAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;aACjC;SACF;aAAM;;AAEL,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;SACjC;QACD,IAAI,CAAC,aAAa,GAAG;YACnB,QAAQ;AACR,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,eAAe,EAAE,GAAG;AACpB,YAAA,mBAAmB,EAAE,GAAG;SACzB,CAAC;;QAEF,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAChD;IAED,sBAAsB,CAAC,GAAW,EAAE,KAAa,EAAA;AAC/C,QAAA,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KACpC;AAED,IAAA,sBAAsB,CAAC,GAAW,EAAA;AAChC,QAAA,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KACpC;AAED,IAAA,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,SAAiB,KAAK,EAAA;QAC7D,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACnD;AAED,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KACnC;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,OAAO,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACtC;AAED,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;KACjC;AAED,IAAA,cAAc,CACZ,SAA0B,EAC1B,IAAY,EACZ,IAAY,EACZ,QAAa,EAAA;QAEb,IAAI,GAAG,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AACpB,YAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,gBAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;oBACd,GAAG,GAAG,QAAQ,CAAC;iBAChB;aACF;SACF;aAAM;YACL,GAAG,GAAG,GAAG,CAAC;SACX;QACD,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,QAAQ,CAAC;SAChB;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,eAAe,GAAA;QACb,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CACrD,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,CAAC,CACF,CAAC;AACF,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CACpD,SAAS,EACT,WAAW,EACX,QAAQ,EACR,CAAC,CACF,CAAC;AACF,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAC9C,SAAS,EACT,KAAK,EACL,QAAQ,EACR,EAAE,CACH,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC,QAAQ;AAC7B,gBAAA,YAAY,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;SACjD;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC,QAAQ;AAC7B,gBAAA,YAAY,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;SACjD;KACF;IAED,kBAAkB,CAAC,QAAgB,EAAE,IAAY,EAAA;QAC/C,IAAI,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAA,OAAO,CAAC,YAAY,CAClB,MAAM,EACN,gCAAgC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAC5D,CAAC;AACF,QAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC3C,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC/B,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,EAAE,CAAC;AAChB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KACpC;IAED,MAAM,WAAW,CAAC,IAAU,EAAA;AAC1B,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAC9B,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,CAAC,SAAS,GAAG,MAAK;gBACtB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAC/C,IAAI,YAAY,EAAE;oBAChB,OAAO,CAAC,YAAY,CAAC,CAAC;iBACvB;qBAAM;AACL,oBAAA,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;iBACtC;AACH,aAAC,CAAC;AACF,YAAA,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,KAAI;gBACvB,MAAM,CAAC,GAAG,CAAC,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,qBAAqB,GAAA;QACnB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;;YAElD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,CAAA,sBAAA,EAAyB,WAAW,CAAA,EAAA,EAAK,QAAQ,CAAC,aAAa,CAAA,CAAA,CAAG,CACnE,CAAC;YACF,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;AACnE,SAAC,CAAC,CAAC;KACJ;IAED,qBAAqB,GAAA;QACnB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;;YAElD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,CAAA,sBAAA,EAAyB,WAAW,CAAA,EAAA,EAAK,QAAQ,CAAC,aAAa,CAAA,CAAA,CAAG,CACnE,CAAC;YACF,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;AACnE,SAAC,CAAC,CAAC;KACJ;IAED,KAAK,CAAC,GAAW,EAAE,GAAY,EAAA;AAC7B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IAAI,MAAM,GAAG,GAAG,CAAC;AACjB,YAAA,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE;gBAC1B,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;aAC/D;YACD,UAAU,CAAC,MAAK;AACd,gBAAA,OAAO,EAAE,CAAC;aACX,EAAE,MAAM,CAAC,CAAC;AACb,SAAC,CAAC,CAAC;KACJ;IAED,SAAS,CAAC,SAAiB,EAAE,IAAI,GAAG,KAAK,EAAE,MAAM,GAAG,CAAC,EAAA;AACnD,QAAA,YAAY,CAAC,IAAI,CAAC,CAAA,EAAG,WAAW,CAAC,QAAQ,CAAiB,cAAA,EAAA,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;KACtF;IAED,aAAa,GAAA;QACX,MAAM,OAAO,GAAG,cAAc,CAAC;QAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,QAAQ,GAAGpB,EAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC7C,YAAA,QAAQ,GAAG,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;SAChD;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;+GAvYmB,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAqB,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAqC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,sPAH1B,CAAe,aAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAGL,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,YACvB,CAAe,aAAA,CAAA,EAAA,CAAA;2LAIK,eAAe,EAAA,CAAA;sBAA5C,YAAY;uBAAC,cAAc,CAAA;gBACE,eAAe,EAAA,CAAA;sBAA5C,YAAY;uBAAC,cAAc,CAAA;;;ACnBxB,MAAgB,aACpB,SAAQ,gBAAgB,CAAA;IAWxB,WACkB,CAAA,YAA8B,EAC9B,WAAwB,EACjC,KAAqB,EACrB,WAA+B,EACtB,GAAsB,EAC/B,WAAwB,EACxB,MAAiB,EACjB,YAA0B,EAC1B,WAAwB,EACf,YAA0B,EACnC,aAA4B,EAC5B,IAAU,EACD,UAA0B,EAAA;QAE1C,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAdhD,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACjC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;QACrB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAoB;QACtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAC/B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACjB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACf,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QACnC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAC5B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;QACD,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;QAtB5C,IAAU,CAAA,UAAA,GAAe,IAAI,CAAC;QAC9B,IAAI,CAAA,IAAA,GAAoB,IAAI,CAAC;QAC7B,IAAW,CAAA,WAAA,GAAgB,IAAI,CAAC;QAChC,IAAiB,CAAA,iBAAA,GAAwB,IAAI,CAAC;QAC9C,IAAgB,CAAA,gBAAA,GAAwB,IAAI,CAAC;QAC7C,IAAiB,CAAA,iBAAA,GAAwB,IAAI,CAAC;QAE9C,IAAS,CAAA,SAAA,GAAkB,IAAI,CAAC;KAkB/B;AAEO,IAAA,cAAc,CAAC,IAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,MAAM,UAAU,CAAC,OAA0B,EAAA;QACzC,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC/C;AAED,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;QAC1C,IAAI,SAAS,GAAkB,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,SAAS,CAAC;SAClB;aAAM;AACL,YAAA,OAAO,EAAE,CAAC;SACX;KACF;AAEO,IAAA,uBAAuB,CAAC,IAAqB,EAAA;AACnD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,gBAAA,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;;gBAE1B,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;gBAC3D,IAAI,UAAU,IAAI,OAAO,IAAI,CAAC,EAAE,IAAI,QAAQ,EAAE;oBAC5C,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;iBAC7C;aACF;SACF;KACF;AAEM,IAAA,MAAM,YAAY,CAAC,OAAqB,EAAE,SAAiB,EAAE,EAAA;AAClE,QAAA,OAAO,CAAC,MAAM;YACZ,yBAAyB;AACzB,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC/B;AAEM,IAAA,MAAM,QAAQ,CAAC,OAAqB,EAAE,SAAiB,EAAE,EAAA;AAC9D,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;AACpE,YAAA,OAAO,QAAQ,CAAC;SACjB;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAA,MAAM,GAAG,CAAC;SACX;KACF;IAEM,cAAc,CAAC,GAAW,EAAE,QAAkB,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;SACtD;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;KACF;IAEM,iBAAiB,CAAC,GAAW,EAAE,QAAmB,EAAA;AACvD,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;SACzD;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;KACF;IAEM,SAAS,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;gBAC5C,0BAA0B;AAC3B,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACjD;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;SACjD;aAAM;AACL,YAAA,OAAO,QAAQ,CAAC;SACjB;KACF;IAED,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC;KACb;AAEQ,IAAA,MAAM,QAAQ,GAAA;QACrB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM,2BAA2B,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CACvD,2BAA2B,CAC5B,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,IAAI,KAAI;AAC1C,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aAC3B;iBAAM;gBACL,MAAM,QAAQ,GAAwB,EAAE,CAAC;AACzC,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;oBAClB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;iBAClD;qBAAM;oBACL,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;wBACpC,OAAO,CAAC,EAAE,CAAC,CAAC;qBACb,CAAC,CAAC,CAAC;iBACL;gBACD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;gBAEjD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW;AACtC,qBAAA,aAAa,EAAE;AACf,qBAAA,SAAS,CAAC,CAAC,IAAiB,KAAI;AAC/B,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC5B,iBAAC,CAAC,CAAC;gBACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;oBACrC,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,oBAAA,IAAI,IAAI,IAAI,MAAM,EAAE;AAClB,wBAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;qBACvB;yBAAM;wBACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AAC7B,4BAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;yBACvB;qBACF;oBACD,IAAI,MAAM,EAAE;;wBAEV,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChE,wBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CACjE,CAAC,MAAM,KAAI;;AAET,4BAAA,IAAI,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE;;AAE/B,gCAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;6BAC/B;AAAM,iCAAA,IAAI,MAAM,CAAC,MAAM,IAAI,WAAW,EAAE;;AAEvC,gCAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;gCAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,gCAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;6BACzB;AAAM,iCAAA,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE;;AAElC,gCAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;gCAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;6BACpB;AAAM,iCAAA,IAAI,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE;;AAEtC,gCAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;6BAC/B;AAAM,iCAAA,IAAI,MAAM,CAAC,MAAM,IAAI,WAAW,EAAE;;AAEvC,gCAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;gCACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;6BACzB;AACH,yBAAC,CACF,CAAC;qBACH;AACH,iBAAC,CAAC,CAAC;aACJ;AACH,SAAC,CAAC,CAAC;KACJ;IAED,eAAe,GAAA;;AAEb,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,WAAW,GAAA;;AAET,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;AAED,IAAA,gBAAgB,MAAM;AAEb,IAAA,MAAM,WAAW,GAAA;AACxB,QAAA,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;SACtC;AACD,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;SACrC;AACD,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;SACtC;KACF;+GArNmB,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA3C,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAgB,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA6B,WAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAqC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAnB,IAAA,CAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAoB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,uEAHvB,CAAe,aAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAGL,aAAa,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,YACV,CAAe,aAAA,CAAA,EAAA,CAAA;;;ACnBrB,MAAgB,eACpB,SAAQ,gBAAgB,CAAA;IAMxB,WACkB,CAAA,YAA8B,EAC9B,WAAwB,EACjC,OAA6B,EACpB,YAA0B,EAC1B,GAAsB,EACtB,UAA0B,EAAA;QAE1C,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAPhD,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACjC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAsB;QACpB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;QAV5C,IAAW,CAAA,WAAA,GAAyB,IAAI,CAAC;QACzC,IAAc,CAAA,cAAA,GAAW,EAAE,CAAC;QAC5B,IAAgB,CAAA,gBAAA,GAAwB,IAAI,CAAC;KAW5C;AACQ,IAAA,MAAM,QAAQ,GAAA;QACrB,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CACrD,CAAC,IAA0B,KAAI;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;;AAE1B,SAAC,CACF,CAAC;KACH;AACQ,IAAA,MAAM,WAAW,GAAA;AACxB,QAAA,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;SACrC;KACF;AACD,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC7B;AAED,IAAA,MAAM,KAAK,CAAC,KAAA,GAAiB,KAAK,EAAA;QAChC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACjC;AAED,IAAA,MAAM,iBAAiB,GAAA;QACrB,MAAM,OAAO,GAAG,gBAAgB,CAAC;AACjC,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;;YAE5B,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE;;gBAEb,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBAClD,IAAI,CAAC,QAAQ,EAAE;oBACb,QAAQ,GAAG,QAAQ,CAAC;iBACrB;gBACD,MAAM,QAAQ,GAAG7B,EAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC7C,gBAAA,QAAQ,GAAG,CAAO,IAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,QAAQ,EAAE,CAAC;AACzC,gBAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;aAChD;;AAED,YAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;AAC/B,YAAA,OAAO,QAAQ,CAAC;SACjB;aAAM;AACL,YAAA,IAAI,CAAC,cAAc;gBACjB,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9D,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;KACF;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,uBAAuB,CAAC;SACjD;KACF;IAED,MAAM,cAAc,CAAC,IAA0B,EAAA;QAC7C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,OAAO;SACR;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;;;;QAM1D,MAAM,GAAG,GAAG,CAAA,sFAAA,CAAwF,CAAC;;AAErG,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,OAAO,EAAE;gBACP,aAAa,EAAE,CAAU,OAAA,EAAA,YAAY,CAAE,CAAA;AACxC,aAAA;SACF,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,YAAA,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;iBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AACzB,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAI;gBACb,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,aAAC,CAAC;AACD,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;AACd,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,OAAO,CAAC;AAClC,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,gBAAgB,CAAC,MAAgB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KAC3E;AAED,IAAA,iBAAiB,CAAC,MAAgB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KAC5E;+GAlHmB,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAqB,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAuB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,uEAHzB,CAAe,aAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAGL,eAAe,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,YACV,CAAe,aAAA,CAAA,EAAA,CAAA;;;MCQd,mBAAmB,CAAA;AAM9B,IAAA,WAAA,CACU,UAAsB,EACtB,SAAoB,EACpB,QAAsB,EACvB,WAAwB,EAAA;QAHvB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AANvB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAiB,CAAC;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAkB,CAAC;KAMrD;AAEJ,IAAA,QAAQ,MAAW;IAEnB,UAAU,GAAA;;KAET;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC;QACpE,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,MAAM,KAAK,GAAA;QACT,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC;SAC9D;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,YAAA,OAAO,EAAE,CAAC;SACX;aAAM;YACL,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,YAAA,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;aACxC;iBAAM;AACL,gBAAA,OAAO,EAAE,CAAC;aACX;SACF;KACF;AAEM,IAAA,MAAM,QAAQ,CAAC,OAAqB,EAAE,SAAiB,EAAE,EAAA;AAC9D,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;AACpE,YAAA,OAAO,QAAQ,CAAC;SACjB;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,GAAG,CAAC;SACX;KACF;IAED,UAAU,GAAA;QACR,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC;KACjE;IACD,YAAY,GAAA;AACV,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE;;YAErC,QACE,IAAI,CAAC,SAAS;AACX,iBAAA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACpB,iBAAA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AACnB,iBAAA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;iBACnB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,EAChC;SACH;aAAM;AACL,YAAA,OAAO,EAAE,CAAC;SACX;KACF;IACD,MAAM,WAAW,CAAC,YAA8B,EAAA;QAC9C,MAAM,SAAS,GAAG,OAChB,kBAA0B,EAC1B,oBAA4B,KAC1B;AACF,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;gBAEvB,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACtD,IAAI,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC3C,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC1C,gBAAA,IAAI,OAAO,IAAI,CAAC,GAAG,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC/D,oBAAA,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC/B;AACD,gBAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;gBACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC/B;iBAAM;gBACL,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;AAClC,oBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;AACnC,wBAAA,MAAM,EAAE,kBAAkB;AAC1B,wBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,oBAAoB;AACpD,wBAAA,SAAS,EAAE,IAAI,CAAC,GAAG;AACnB,wBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AAChC,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;oBACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC/B;qBAAM;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,wBAAA,MAAM,EAAE,kBAAkB;AAC1B,wBAAA,IAAI,EAAE,oBAAoB;AAC1B,wBAAA,IAAI,EAAE,MAAM;AACb,qBAAA,CAAC,CAAC;iBACJ;aACF;AACH,SAAC,CAAC;AACF,QAAA,IAAI,YAAY,CAAC,MAAM,YAAY,KAAK,EAAE;AACxC,YAAA,MAAM,cAAc,GAAQ,YAAY,CAAC,QAAQ,CAAC;AAClD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnD,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClD,gBAAA,MAAM,oBAAoB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAA,MAAM,SAAS,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;aAC3D;SACF;aAAM;AACL,YAAA,MAAM,oBAAoB,GAAQ,YAAY,CAAC,QAAQ,CAAC;YACxD,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;SAC5D;KACF;+GA7HU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxD,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA8C,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,uLCvBhC,0yBAmBM,EAAA,MAAA,EAAA,CAAA,yIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA5C,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDIO,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,0yBAAA,EAAA,MAAA,EAAA,CAAA,yIAAA,CAAA,EAAA,CAAA;0JAKjB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBACG,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;MEiDI,qBAAqB,CAAA;aACzB,IAAa,CAAA,aAAA,GAAG,CAAH,CAAK,EAAA;aAClB,IAAiB,CAAA,iBAAA,GAAG,EAAH,CAAM,EAAA;aACvB,IAAO,CAAA,OAAA,GAAG,GAAH,CAAO,EAAA;aACd,IAAO,CAAA,OAAA,GAAG,GAAH,CAAO,EAAA;AACd,IAAA,SAAA,IAAA,CAAA,WAAW,GAAQ;AACxB,QAAA,WAAW,EAAE,QAAQ;AACrB,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,eAAe,EAAE,YAAY;AAC9B,KAJiB,CAIhB,EAAA;AAiGF,IAAA,WAAA,CACU,QAAsB,EACvB,WAAwB,EACvB,UAAsB,EACtB,YAA8B,EAAA;QAH9B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACvB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;AAhG9B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAiB,CAAC;QAoBxD,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;QACf,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QACtB,IAAI,CAAA,IAAA,GAAW,MAAM,CAAC;QAGd,IAAW,CAAA,WAAA,GAAsB,IAAI,CAAC;QACtC,IAAM,CAAA,MAAA,GAAa,EAAE,CAAC;QACtB,IAAM,CAAA,MAAA,GAAa,EAAE,CAAC;QACtB,IAAS,CAAA,SAAA,GAAc,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,SAAS,GAA6B,IAAI,GAAG,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,OAAO,GAAsB;AACnC,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,MAAM,EAAE,KAAK;SACd,CAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAiC;AACvC,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;AACxB,gBAAA,IAAI,EAAE,WAAW;AAClB,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;AACzB,gBAAA,IAAI,EAAE,WAAW;AAClB,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;AACzB,gBAAA,IAAI,EAAE,SAAS;AAChB,aAAA;SACF,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAiC;AACzC,YAAA;AACE,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AAClC,gBAAA,IAAI,EAAE,sBAAsB;AAC7B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,UAAU;AACf,gBAAA,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AAClC,gBAAA,IAAI,EAAE,sBAAsB;AAC7B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AAClC,gBAAA,IAAI,EAAE,sBAAsB;AAC7B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AAClC,gBAAA,IAAI,EAAE,sBAAsB;AAC7B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AAClC,gBAAA,IAAI,EAAE,sBAAsB;AAC7B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AAClC,gBAAA,IAAI,EAAE,sBAAsB;AAC7B,aAAA;SACF,CAAC;AAwqBM,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAA0B,KAAI;AACzD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,OAAO;aACR;AACD,YAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE;AAC7B,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aAChC;AAAM,iBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,aAAa,EAAE;AACrC,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aACjC;AACH,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAA0B,KAAI;AACxD,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAC3D,gBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE;AAC7B,oBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC/B,CAAC,CAAC,cAAc,EAAE,CAAC;iBACpB;AAAM,qBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,aAAa,EAAE;oBACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,CAAC,CAAC,cAAc,EAAE,CAAC;iBACpB;aACF;AACH,SAAC,CAAC;QAEM,IAAmB,CAAA,mBAAA,GAAG,MAAK;AACjC,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE;oBACtB,OAAO;iBACR;AACD,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,wBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBAC9C,UAAU,CAAC,MAAK;AACd,4BAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;yBAC5B,EAAE,GAAG,CAAC,CAAC;qBACT;iBACF,EAAE,GAAG,CAAC,CAAC;aACT;AAAM,iBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,aAAa,EAAE;gBACrC,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;aAC7B;AACD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC1B,SAAC,CAAC;QAmBM,IAAkB,CAAA,kBAAA,GAAG,MAAK;AAChC,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE;AAC7B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;AAAM,iBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,aAAa,EAAE;aACtC;AACD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC1B,SAAC,CAAC;QAnuBA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;KAC/C;IAED,QAAQ,GAAA;QACN,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YACrD,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;YAC/D,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACjD,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEhE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;YACvD,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAExD,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,OAAO;aACR;YAED,IAAI,CAAC,gBAAgB,CAAC;AACpB,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,QAAQ,EAAE,OAAO;AAClB,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB,EAAE,CAAC,CAAC,CAAC;KACP;AAED,IAAA,UAAU,CAAC,CAAM,EAAA;QACf,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;KACpB;IAED,MAAM,WAAW,CAAC,IAAY,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAoB;AAC/B,YAAA,IAAI,EAAE,OAAO;SACd,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,QAAa,KAAI;YAC5D,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAClD,YAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;aAC3B;AAAM,iBAAA,IAAI,IAAI,IAAI,YAAY,EAAE;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;aAChC;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,eAAe,CACb,GAAqB,EACrB,GAA6B,EAC7B,KAAK,GAAG,IAAI,EAAA;AAEZ,QAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;;AAExB,QAAA,GAAG,CAAC,wBAAwB,GAAG,aAAa,CAAC;QAC7C,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACtC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACxC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACrC,QAAA,IAAI,aAAa,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;AAC3D,QAAA,IAAI,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC;QAC7D,IAAI,KAAK,EAAE;AACT,YAAA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAClD;AACD,QAAA,GAAG,CAAC,SAAS,CACX,GAAG,EACH,CAAC,EACD,CAAC,EACD,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,aAAa,EACb,aAAa,EACb,GAAG,CAAC,KAAK,GAAG,KAAK,EACjB,GAAG,CAAC,MAAM,GAAG,KAAK,CACnB,CAAC;KACH;IAED,MAAM,sBAAsB,CAAC,GAAW,EAAA;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,KAAI;AACvD,YAAA,MAAM,CAAC,MAAM,GAAG,MAAK;gBACnB,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,aAAC,CAAC;AACF,YAAA,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;AACnB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,eAAe,CAAC,GAAW,EAAE,IAAY,EAAA;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,MAAM,GAAqB,MAAM,IAAI,CAAC,sBAAsB,CAChE,QAAQ,CACT,CAAC;QACF,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;YACpC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5C;aAAM,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE;YAC/C,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SACjD;aAAM,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACzD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACtD;KACF;AAED,IAAA,WAAW,CAAC,OAAY,EAAA;QACtB,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3C,YAAA,MAAM,MAAM,GAAkB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACvD,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AACtD,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC9B,iBAAC,CAAC,CAAC;aACJ;AACD,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAK;AACpD,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC7B,iBAAC,CAAC,CAAC;aACJ;AACD,YAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,MAAK;AAC9D,oBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;AAClC,iBAAC,CAAC,CAAC;aACJ;SACF;KACF;AAEO,IAAA,mBAAmB,CAAC,GAAW,EAAA;AACrC,QAAA,IACE,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI;AACzD,YAAA,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI;YAChC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAC3B;AACA,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAC7B;QACD,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAC5B;QACD,IAAI,MAAM,GAAG,GAAG,CAAC;QACjB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,EAAE;AAC3C,YAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SACzD;QACD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AAC7C,YAAA,IAAI,CAAC,UAAU;iBACZ,GAAG,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACrC,iBAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,gBAAA,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAChC,aAAC,CAAC,CACH;AACA,iBAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;gBACtB,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,WAAW,CAAC,IAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,KAAU,KAAI;AACnD,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,IAAI,YAAY,IAAI,EAAE;AACxB,gBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAC5B;AACH,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,cAAc,CAClB,IAAY,EACZ,IAAiB,EACjB,QAAgB,EAChB,MAAsB,EAAA;QAEtB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,YAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;SACf;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC3C,QAAQ;AACR,YAAA,MAAM,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpC,YAAA,SAAS,EAAE,MAAM;AAClB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;SAC9D;AAAM,aAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;SAC/D;AAAM,aAAA,IAAI,IAAI,IAAI,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;SACnE;AAAM,aAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;SAC/D;KACF;AAED,IAAA,sBAAsB,CAAC,IAAY,EAAA;QACjC,OAAO,IAAI,OAAO,CAAyB,CAAC,OAAO,EAAE,MAAM,KAAI;YAC7D,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,QAAQ,GAAG,WAAW,CAAC;YAC3B,IAAI,OAAO,GAAG,GAAG,CAAC;AAClB,YAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AACpB,gBAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3B;AAAM,iBAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AAC1B,gBAAA,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;aAChC;AAAM,iBAAA,IAAI,IAAI,IAAI,YAAY,EAAE;AAC/B,gBAAA,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBACpC,QAAQ,GAAG,YAAY,CAAC;aACzB;AAAM,iBAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AAC3B,gBAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;gBAChC,QAAQ,GAAG,YAAY,CAAC;aACzB;YACD,IAAI,WAAW,EAAE;AACf,gBAAA,WAAW,CAAC,MAAM,CAChB,CAAC,IAAI,KAAI;;oBAEP,IAAI,IAAI,EAAE;AACR,wBAAA,OAAO,CAAC;AACN,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,yBAAA,CAAC,CAAC;qBACJ;yBAAM;wBACL,OAAO,CAAC,IAAI,CAAC,CAAC;qBACf;AACH,iBAAC,EACD,QAAQ,EACR,OAAO,CACR,CAAC;aACH;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACvC,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,SAAS,GAA0B,EAAE,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACxE,YAAA,QAAQ,CAAC,IAAI,CACX,IAAI,OAAO,CAAO,OAAO,OAAO,EAAE,MAAM,KAAI;gBAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;AAC7D,gBAAA,IAAI;AACF,oBAAA,IAAI,SAAS,CAAC,UAAU,IAAI,IAAI,EAAE;AAChC,wBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACrD,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;4BAC3B,MAAM,IAAI,CAAC,cAAc,CACvB,YAAY,EACZ,IAAI,CAAC,IAAI,EACT,SAAS,CAAC,UAAU,EACpB,IAAI,CAAC,GAAG,EAAE,UAAU,CACrB,CAAC;AACF,4BAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;yBACjC;qBACF;AACD,oBAAA,OAAO,EAAE,CAAC;iBACX;gBAAC,OAAO,GAAG,EAAE;AACZ,oBAAA,MAAM,EAAE,CAAC;iBACV;aACF,CAAC,CACH,CAAC;AAEF,YAAA,QAAQ,CAAC,IAAI,CACX,IAAI,OAAO,CAAO,OAAO,OAAO,EAAE,MAAM,KAAI;gBAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AACxD,gBAAA,IAAI;AACF,oBAAA,IAAI,SAAS,CAAC,KAAK,IAAI,IAAI,EAAE;AAC3B,wBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAChD,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;4BACtB,MAAM,IAAI,CAAC,cAAc,CACvB,OAAO,EACP,IAAI,CAAC,IAAI,EACT,SAAS,CAAC,KAAK,EACf,IAAI,CAAC,GAAG,EAAE,KAAK,CAChB,CAAC;AACF,4BAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;yBAC5B;qBACF;AACD,oBAAA,OAAO,EAAE,CAAC;iBACX;gBAAC,OAAO,GAAG,EAAE;AACZ,oBAAA,MAAM,EAAE,CAAC;iBACV;aACF,CAAC,CACH,CAAC;AACF,YAAA,QAAQ,CAAC,IAAI,CACX,IAAI,OAAO,CAAO,OAAO,OAAO,EAAE,MAAM,KAAI;gBAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AACzD,gBAAA,IAAI;AACF,oBAAA,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE;AAC5B,wBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACjD,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;4BACvB,MAAM,IAAI,CAAC,cAAc,CACvB,QAAQ,EACR,IAAI,CAAC,IAAI,EACT,SAAS,CAAC,MAAM,EAChB,IAAI,CAAC,GAAG,EAAE,MAAM,CACjB,CAAC;AACF,4BAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;yBAC7B;qBACF;AACD,oBAAA,OAAO,EAAE,CAAC;iBACX;gBAAC,OAAO,GAAG,EAAE;AACZ,oBAAA,MAAM,EAAE,CAAC;iBACV;aACF,CAAC,CACH,CAAC;AACF,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAChD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,CAAiB,KAAY;gBAC9D,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChC,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;;AAExB,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;;gBAElC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AACzD,gBAAA,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE;oBAC5B,MAAM,IAAI,CAAC,cAAc,CACvB,QAAQ,EACR,IAAI,CAAC,IAAI,EACT,SAAS,CAAC,MAAM,EAChB,IAAI,CAAC,GAAG,EAAE,MAAM,CACjB,CAAC;iBACH;aACF;SACF;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/B;KACF;IAED,MAAM,WAAW,CAAC,KAA4B,EAAA;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,OAAO;SACR;QACD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;SACrE;QAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACzD,QAAA,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SACjD;KACF;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC5C;AAAM,aAAA,IAAI,IAAI,IAAI,UAAU,EAAE;YAC7B,IAAI,CAAC,gBAAgB,CAAC;AACpB,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,SAAS,EAAE,EAAE;AACd,aAAA,CAAC,CAAC;SACJ;KACF;AAED,IAAA,aAAa,CAAC,OAA0B,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;KAC/B;AAED,IAAA,cAAc,CAAC,OAA0B,EAAA;AACvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;KAChC;AAED,IAAA,gBAAgB,CAAC,OAA0B,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO;SACR;AACD,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;SACxC;AACD,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;SAC1C;AACD,QAAA,IAAI,OAAO,CAAC,WAAW,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;SAChD;AACD,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;SAC5C;KACF;IAEO,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,OAAO;SACR;AACD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;QACjE,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzE,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxE,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzE,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEzE,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1E,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxE,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC1E,kBAAkB,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAC7E;IAEO,MAAM,GAAA;AACZ,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;AACD,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtC,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE;AAC5B,gBAAA,OAAO,CAAC,wBAAwB,GAAG,aAAa,CAAC;aAClD;AAAM,iBAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,EAAE;AACtC,gBAAA,OAAO,CAAC,wBAAwB,GAAG,iBAAiB,CAAC;aACtD;YACD,OAAO,CAAC,SAAS,EAAE,CAAC;AACpB,YAAA,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACrB,gBAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC9C;iBAAM;AACL,gBAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1C;AACD,YAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,MAAM,EAAE,CAAC;SAClB;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,SAAS,EAAE,CAAC;KACrB;AAEO,IAAA,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,QAAiB,EAAA;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC/B;IAED,MAAM,WAAW,CAAC,MAAc,EAAA;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3C,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,GAAG,EAAE,mCAAmC;AACzC,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,QAAQ,GAAG,IAAI,CAAC;AACpB,QAAA,MAAM,GAAG,GAAQ;YACf,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,UAAU,EAAE,IAAI,CAAC,iBAAiB;SACnC,CAAC;AACF,QAAA,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;AACD,QAAA,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClE,QAAA,IAAI,MAAM,IAAI,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;SAC5B;AAAM,aAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;SAC3B;AAAM,aAAA,IAAI,MAAM,IAAI,YAAY,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;SAChC;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAC3B;AAEO,IAAA,eAAe,CAAC,EAAe,EAAA;QACrC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC;AACnB,QAAA,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC;AAClB,QAAA,IAAI,EAAE,CAAC,YAAY,EAAE;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,YAA2B,CAAC,CAAC;AACtE,YAAA,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;AAChB,YAAA,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;SACjB;QACD,OAAO;YACL,CAAC;YACD,CAAC;SACF,CAAC;KACH;AAEO,IAAA,uBAAuB,CAAC,CAA0B,EAAA;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC;QACxC,MAAM,UAAU,GAAG,CAAe,CAAC;QACnC,MAAM,UAAU,GAAG,CAAe,CAAC;AACnC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClE,QAAA,IAAI,MAAM,GAAG,UAAU,CAAC,cAAc;cAClC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;AACpC,cAAE,UAAU,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,MAAM,GAAG,UAAU,CAAC,cAAc;cAClC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;AACpC,cAAE,UAAU,CAAC,KAAK,CAAC;QACrB,IAAI,MAAM,EAAE;YACV,MAAM,EAAE,GAAG,MAAqB,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAC1C,YAAA,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;SACtB;QAED,MAAM,IAAI,aAAa,CAAC;QACxB,MAAM,IAAI,aAAa,CAAC;QACxB,OAAO;YACL,MAAM;YACN,MAAM;SACP,CAAC;KACH;IAEO,UAAU,CAAC,MAAc,EAAE,MAAc,EAAA;AAC/C,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAEO,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;AACD,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,WAAW,GAAG;gBACjB,KAAK,EAAE,KAAK,CAAC,IAAI;AACjB,gBAAA,CAAC,EAAE,MAAM;AACT,gBAAA,CAAC,EAAE,MAAM;aACV,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAClB;KACF;AAED,IAAA,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;QACrC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,GACH,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD;AAED,IAAA,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;QACrC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,GACH,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;KACnE;AAEO,IAAA,SAAS,CAAC,KAAe,EAAE,OAAiB,EAAE,QAAkB,EAAA;AACtE,QAAA,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;AACtB,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClB,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAC5B,YAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;;gBAEtB,QAAQ,CAAC,SAAS,CAAC,CAAC;AAEpB,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACnD,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAEnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACxD;SACF;KACF;AAEO,IAAA,WAAW,CAAC,IAAgB,EAAE,MAAkB,EAAE,SAAiB,EAAA;QACzE,IAAI,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,YAAY,GACd,OAAO,GAAG,qBAAqB,CAAC,iBAAiB,GAAG,SAAS,GAAG,CAAC,CAAC;YACpE,IAAI,aAAa,GAAG,IAAI,CAAC;YACzB,IAAI,aAAa,GAAG,IAAI,CAAC;AACzB,YAAA,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;AACxC,YAAA,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;AACxC,YAAA,OAAO,YAAY,IAAI,aAAa,IAAI,aAAa,CAAC;SACvD;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,qBAAqB,CAAC,OAAiC,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,WAAW,GAAe,IAAI,CAAC,WAAW,CAAC;AACjD,YAAA,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;AAC/B,YAAA,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EACb,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EACb,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CACd,CAAC;YACF,IACE,EACE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,OAAO;gBAClD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,OAAO,CACnD,EACD;AACA,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClB,oBAAA,KAAK,EAAE,MAAM;oBACb,GAAG,EAAE,CAAmD,gDAAA,EAAA,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAChF,CAAC,CACF,CAAS,MAAA,EAAA,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAA;AAC1C,iBAAA,CAAC,CAAC;gBACH,OAAO;aACR;;;;;;AAOD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;YAC7C,IAAI,CAAC,SAAS,CACZ,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,EACtC,CAAC,KAAe,KAAI;;AAElB,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3D,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACtB,oBAAA,OAAO,KAAK,CAAC;iBACd;AACD,gBAAA,MAAM,MAAM,GAAe;oBACzB,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,CAAC,EAAE,KAAK,CAAC,CAAC;oBACV,CAAC,EAAE,KAAK,CAAC,CAAC;iBACX,CAAC;AACF,gBAAA,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CACvB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EACnB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EACnB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CACpB,CAAC;gBACF,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;AAChE,aAAC,EACD,CAAC,KAAe,KAAI;gBAClB,IAAI,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,gBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;AAChB,gBAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACT,gBAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACT,gBAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACT,gBAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACT,gBAAA,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7C,aAAC,CACF,CAAC;YACF,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB;KACF;AAkDD,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,IAAI,GAAG,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;SAC3C;QACD,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;SACzC;QACD,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;SACnD;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACzB;AAQO,IAAA,MAAM,YAAY,CAAC,IAAA,GAAsB,IAAI,EAAA;AACnD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,IAAI,GAAG,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrD;AACD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,OAAO;SACR;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;aAC9B;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,EAAE;gBACT,MAAM,UAAU,GACd,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,qBAAqB,CAAC,aAAa,CAAC;AACzD,gBAAA,IAAI,UAAU,IAAI,CAAC,EAAE;oBACnB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;iBACjC;AACD,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;SACF;KACF;IACD,OAAO,GAAA;QACL,MAAM,IAAI,GAAG,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;KACzB;IACD,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC3B;KACF;IACD,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC3B;KACF;AACD,IAAA,MAAM,SAAS,CAAC,KAAK,GAAG,KAAK,EAAA;QAC3B,MAAM,IAAI,GAAG,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;AACD,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;SACnC;QACD,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE;AACT,YAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SACrB;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;KACvC;+GA94BU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAS,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAmC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAtD,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAuD,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,qtBC7ElC,wtMAwHM,EAAA,MAAA,EAAA,CAAA,kvBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA9C,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD3CO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,wtMAAA,EAAA,MAAA,EAAA,CAAA,kvBAAA,CAAA,EAAA,CAAA;4JAcnB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAEuB,kBAAkB,EAAA,CAAA;sBAA/C,SAAS;uBAAC,iBAAiB,CAAA;gBAEP,SAAS,EAAA,CAAA;sBAA7B,SAAS;uBAAC,QAAQ,CAAA;gBAIO,cAAc,EAAA,CAAA;sBAAvC,SAAS;uBAAC,aAAa,CAAA;gBAIO,mBAAmB,EAAA,CAAA;sBAAjD,SAAS;uBAAC,kBAAkB,CAAA;gBAIF,eAAe,EAAA,CAAA;sBAAzC,SAAS;uBAAC,cAAc,CAAA;;;ME3Fd,gBAAgB,CAAA;IAI3B,WACS,CAAA,SAAyC,EAChB,IAAiB,EAAA;QAD1C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAgC;QAChB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAa;AAEjD,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,IAAI,CAAC,GAAG,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC;AACnE,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;AACzE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;KAC/B;AAED,IAAA,QAAQ,MAAY;IAEpB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC7B;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC5B;AArBU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,8CAMjB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AANd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,mDChB7B,kvBAuBM,EAAA,MAAA,EAAA,CAAA,wVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDPO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,kvBAAA,EAAA,MAAA,EAAA,CAAA,wVAAA,CAAA,EAAA,CAAA;;0BAUpB,MAAM;2BAAC,eAAe,CAAA;;;MEVd,0BAA0B,CAAA;AACrC,IAAA,WAAA,CACU,OAAoB,EACpB,SAAmD,EACnD,SAAwB,EACA,IAAqB,EAAA;QAH7C,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAS,CAAA,SAAA,GAAT,SAAS,CAA0C;QACnD,IAAS,CAAA,SAAA,GAAT,SAAS,CAAe;QACA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;KACnD;AAEJ,IAAA,QAAQ,MAAW;AAEnB,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YACzC,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;aACvD;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACxB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,SAAS,CAAC,MAAM;AACxB,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;SACxB;KACF;IAED,MAAM,WAAW,CAAC,YAA8B,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;AAErB,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;;AAEhC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;SACxB;KACF;IAED,YAAY,GAAA;QACV,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;AACnD,QAAA,MAAM,OAAO,GAAoB;AAC/B,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe;SAC3C,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;KACpD;AA3CU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,gGAK3B,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AALd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,6DCZvC,yUASM,EAAA,MAAA,EAAA,CAAA,sRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDGO,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,yUAAA,EAAA,MAAA,EAAA,CAAA,sRAAA,CAAA,EAAA,CAAA;;0BAS9B,MAAM;2BAAC,eAAe,CAAA;;;MEJd,mBAAmB,CAAA;AAI9B,IAAA,WAAA,CACU,OAAoB,EACpB,MAAiB,EACjB,SAAwB,EAAA;QAFxB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAe;QALlC,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QACzB,IAAmB,CAAA,mBAAA,GAAmB,IAAI,CAAC;KAKvC;IAEJ,QAAQ,GAAA;QACN,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;KAC7C;IAEO,MAAM,eAAe,CAAC,OAAwB,EAAA;;AAEpD,QAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;AACnD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACpD,QAAA,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE;;AAE1B,YAAA,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;AAC1B,YAAA,IAAI,OAAO,OAAO,CAAC,QAAQ,IAAI,QAAQ,EAAE;AACvC,gBAAA,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;aACzC;YACD,aAAa,CAAC,KAAK,EAAE,CAAC;SACvB;AAAM,aAAA,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE;;AAEtC,YAAA,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;YACjC,aAAa,CAAC,KAAK,EAAE,CAAC;SACvB;AAAM,aAAA,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE;;AAEtC,YAAA,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;YACjC,aAAa,CAAC,KAAK,EAAE,CAAC;SACvB;AAAM,aAAA,IAAI,OAAO,CAAC,IAAI,IAAI,iBAAiB,EAAE;;AAE5C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;AAC3C,gBAAA,IAAI,EAAE;AACJ,oBAAA,IAAI,EAAE,OAAO;oBACb,eAAe,EAAE,OAAO,CAAC,eAAe;AACzC,iBAAA;AACF,aAAA,CAAC,CAAC;SACJ;AAAM,aAAA,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE;;YAElC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACvB,gBAAA,IAAI,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;gBACvC,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;iBACvD;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACxB,oBAAA,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,SAAS,CAAC,MAAM;AACxB,oBAAA,QAAQ,EAAE,KAAK;AAChB,iBAAA,CAAC,CAAC;aACJ;SACF;KACF;IAED,MAAM,WAAW,CAAC,SAAc,EAAA;AAC9B,QAAA,MAAM,SAAS,GAAG,OAAO,IAAU,KAAI;YACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,gBAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,KAAU,KAAI;AACnD,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,oBAAA,OAAO,CAAC;wBACN,MAAM;wBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;AACpB,qBAAA,CAAC,CAAC;AACL,iBAAC,CAAC,CAAC;gBACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;oBACzC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,IAAI,YAAY,IAAI,EAAE;AACxB,oBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;iBAC5B;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACpC;AAED,QAAA,IAAI;YACF,MAAM,UAAU,GAAQ,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpD,YAAA,IAAI,MAAW,CAAC;AAChB,YAAA,IAAI,QAAa,CAAC;AAClB,YAAA,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1B,gBAAA,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC9B,QAAQ,GAAG,IAAI,CAAC,mBAAmB;sBAC/B,IAAI,CAAC,mBAAmB;AAC1B,sBAAE,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;aAC5B;iBAAM;AACL,gBAAA,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAO,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;gBAChD,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAO,KAAI;oBACpC,OAAO,IAAI,CAAC,mBAAmB;0BAC3B,IAAI,CAAC,mBAAmB;AAC1B,0BAAE,EAAE,CAAC,QAAQ,CAAC;AAClB,iBAAC,CAAC,CAAC;aACJ;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACxB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC,CAAC;SACJ;AAAC,QAAA,OAAO,GAAG,EAAE,GAAE;KACjB;+GA7GU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAuD,WAAA,EAAA,EAAA,EAAA,KAAA,EAAApD,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAqD,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,gKCbhC,oGAA4F,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDa/E,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,oGAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,CAAA;8HAKD,UAAU,EAAA,CAAA;sBAAlC,SAAS;uBAAC,YAAY,CAAA;;;MEAZ,kBAAkB,CAAA;IAG7B,WACU,CAAA,GAAsB,EACtB,YAA8B,EAAA;QAD9B,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAJxC,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAC3B,IAAK,CAAA,KAAA,GAAgB,EAAE,CAAC;KAInB;IAEL,QAAQ,GAAA;QACN,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;KACnD;AAEO,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,YAAY,GAAA;QACV,OAAO,WAAW,CAAC,mBAAmB,CACpC,WAAW,CAAC,QAAQ,GAAG,0BAA0B,CAClD,CAAC;KACH;+GAvBU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAvD,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,qDCd/B,6XASM,EAAA,MAAA,EAAA,CAAA,6kBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDKO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,6XAAA,EAAA,MAAA,EAAA,CAAA,6kBAAA,CAAA,EAAA,CAAA;;;MEHd,gBAAgB,CAAA;AAG3B,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,QAAQ,MAAW;+GALR,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,+ECP7B,sEAEM,EAAA,MAAA,EAAA,CAAA,6EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDKO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,6EAAA,CAAA,EAAA,CAAA;wDAMvB,KAAK,EAAA,CAAA;sBADJ,KAAK;uBAAC,OAAO,CAAA;;;MEmBH,mBAAmB,CAAA;AAU9B,IAAA,WAAA,GAAA;AANA,QAAA,IAAA,CAAA,UAAU,GAAsC,IAAI,YAAY,EAAE,CAAC;AAEnE,QAAA,IAAA,CAAA,QAAQ,GAAsC,IAAI,YAAY,EAAE,CAAC;AAEjE,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;KAE/B;AAEhB,IAAA,QAAQ,MAAW;AAEnB,IAAA,WAAW,CAAC,GAAwB,EAAA;QAClC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE;AAC9B,YAAA,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;SAC3B;aAAM;AACL,YAAA,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;SAC1B;KACF;AAED,IAAA,YAAY,CAAC,GAAwB,EAAA;;AAEnC,QAAA,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;KAC9B;+GAzBU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,uKC3BhC,mlBAaS,EAAA,MAAA,EAAA,CAAA,gRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,gGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDcI,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,mlBAAA,EAAA,MAAA,EAAA,CAAA,gRAAA,CAAA,EAAA,CAAA;wDAM1B,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,UAAU,CAAA;gBAGjB,UAAU,EAAA,CAAA;sBADT,MAAM;uBAAC,YAAY,CAAA;gBAGpB,QAAQ,EAAA,CAAA;sBADP,MAAM;uBAAC,UAAU,CAAA;gBAGlB,MAAM,EAAA,CAAA;sBADL,MAAM;uBAAC,QAAQ,CAAA;;;ME7BL,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,KAAY,EAAE,IAAU,EAAE,IAAU,EAAA;AAC5C,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAChC,YAAA,IAAI,GAAG,IAAI,KAAK,EAAE;gBAChB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;oBACzB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,iBAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;oBACzB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,iBAAC,CAAC,CAAC;aACJ;SACF;aAAM;AACL,YAAA,OAAO,EAAE,CAAC;SACX;KACF;+GAjBU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAd,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA,EAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AACnB,iBAAA,CAAA;;;MCoBY,oBAAoB,CAAA;AAU/B,IAAA,WAAA,CAAmB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAJzC,QAAA,IAAA,CAAA,UAAU,GAAsC,IAAI,YAAY,EAAE,CAAC;AAEnE,QAAA,IAAA,CAAA,QAAQ,GAAsC,IAAI,YAAY,EAAE,CAAC;KAEpB;AAE7C,IAAA,QAAQ,MAAW;AAEnB,IAAA,OAAO,MAAW;IAElB,qBAAqB,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtB,EAAE,CAAC,CAAC,CAAC;KACP;+GAtBU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,0KCxBjC,wqBAcM,EAAA,MAAA,EAAA,CAAA,mlBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0D,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA9D,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA+D,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDUO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,wqBAAA,EAAA,MAAA,EAAA,CAAA,mlBAAA,CAAA,EAAA,CAAA;sFAM3B,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAGN,OAAO,EAAA,CAAA;sBADN,KAAK;gBAGN,UAAU,EAAA,CAAA;sBADT,MAAM;uBAAC,YAAY,CAAA;gBAGpB,QAAQ,EAAA,CAAA;sBADP,MAAM;uBAAC,UAAU,CAAA;;;MELP,kBAAkB,CAAA;aAmDtB,IAAW,CAAA,WAAA,GAAQ,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAA;AACpD,IAAA,WAAA,CAAmB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AA5CzC,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,wBAAwB,GAAsB,IAAI,YAAY,EAAE,CAAC;AAC1D,QAAA,IAAA,CAAA,YAAY,GAAQ;AACzB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,KAAK,EAAE,SAAS;SACjB,CAAC;AACK,QAAA,IAAA,CAAA,iBAAiB,GAAQ;YAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;YACtC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;SAC5C,CAAC;AACK,QAAA,IAAA,CAAA,iBAAiB,GAAQ;YAC9B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;YAC/C,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE;SACpD,CAAC;AACK,QAAA,IAAA,CAAA,SAAS,GAAQ;AACtB,YAAA,KAAK,EAAE,OAAO;SACf,CAAC;AACK,QAAA,IAAA,CAAA,SAAS,GAAQ;AACtB,YAAA,KAAK,EAAE,WAAW;SACnB,CAAC;AACK,QAAA,IAAA,CAAA,QAAQ,GAAQ;AACrB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;SACb,CAAC;AACK,QAAA,IAAA,CAAA,MAAM,GAAQ;AACnB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,WAAW,EAAE,GAAG;AAChB,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,EAAE;SACV,CAAC;QAIA,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,OAAO,EAAE,CAAC;SACX,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KAClB;IAEM,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,wBAAwB,GAAA;QACtB,IAAI,CAAC,YAAY,CAAC,KAAK;YACrB,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAC5D;AAED,IAAA,mBAAmB,CAAC,GAAQ,EAAA;AAC1B,QAAA,IAAI,GAAG,GAAG,CAAC,EAAE;YACX,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB,EAAE,CAAC,CAAC,CAAC;SACP;aAAM;YACL,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,wBAAwB,EAAE,CAAC;aACjC,EAAE,CAAC,CAAC,CAAC;SACP;KACF;IAED,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,OAAO,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC;SAC/B;aAAM;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC;SAChC;KACF;IAED,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC;SACpC;aAAM;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC;SACpC;KACF;AAED,IAAA,QAAQ,MAAW;IAEZ,YAAY,CAAC,IAAS,EAAE,UAAkB,EAAA;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE;AACjD,YAAA,OAAO,GAAG,CAAC;SACZ;AACD,QAAA,OAAO,EAAE,CAAC;KACX;IAEM,YAAY,CAAC,IAAS,EAAE,UAAkB,EAAA;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE;AACjD,YAAA,OAAO,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SAC5C;AACD,QAAA,OAAO,kBAAkB,CAAC;KAC3B;IAEM,iBAAiB,GAAA;;AAEtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;AACnD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAED,eAAe,GAAA;QACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAGD,IAAA,QAAQ,CAAC,KAAU,EAAA;QACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAGD,IAAA,WAAW,CAAC,EAAO,EAAA;QACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,EAAE;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE;YAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;SAC7C;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,UAAU,EAAE;YAC7C,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAClC;KACF;AAED,IAAA,wBAAwB,CAAC,YAAiB,EAAA;QACxC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACzD,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC;KACtC;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAChC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAEhC,QAAA,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AACrC,QAAA,MAAM,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AACtC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACnE,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,KAAK,GAAG,CAAC,CAAC;SACX;QACD,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC7B,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SAC9B;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;AAED,IAAA,SAAS,CAAC,MAAc,EAAA;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,OAAO;SACR;AACD,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;;AAEd,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;SACxB;aAAM;;AAEL,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;SACxB;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;SACvB;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;;;QAGlB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,UAAU,GAAA;AACR,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/D,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE;;AAErD,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;SACzB;KACF;AAED,IAAA,YAAY,CAAC,EAAc,EAAA;AACzB,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;SAC3B;aAAM;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;SAC1D;KACF;AAED,IAAA,eAAe,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;KACnC;AAED,IAAA,aAAa,CAAC,EAAc,EAAA;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAED,IAAA,cAAc,CAAC,EAAc,EAAA;AAC3B,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC;SAChC;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;SACnC;;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;QAElC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE;YACnC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;SAC7C;KACF;AAED,IAAA,YAAY,CAAC,EAAc,EAAA;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,aAAa,GAAA;QACX,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;SACb,CAAC;KACH;IAED,mBAAmB,CAAC,MAAc,EAAE,MAAc,EAAA;AAChD,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;;AAEd,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;SACxD;aAAM;;AAEL,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;SACxD;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;;AAEtB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnE,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QACxD,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,eAAe,CAAC,MAAc,EAAE,MAAc,EAAA;AAC5C,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;;AAEd,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;SAC9C;aAAM;;AAEL,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;SAC9C;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;;QAEnB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,wBAAwB,GAAA;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,OAAO;SACR;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACxE;AAED,IAAA,UAAU,CAAC,EAAc,EAAA;AACvB,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;SACtD;aAAM;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;SACtD;KACF;IAED,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,OAAO;SACR;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;SAC3B;AACD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;SAC7B;AACD,QAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;SAC9B;aAAM;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;SACxD;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;SACtB;AACD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;SACxB;AACD,QAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;SACzB;aAAM;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;SAC9C;KACF;IAEM,aAAa,GAAA;;QAElB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,OAAO;SACR;QACD,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC9B,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;aACzB;iBAAM;AACL,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAI;AACxC,oBAAA,QACE,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;AAC3B,wBAAA,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAC9C;AACJ,iBAAC,CAAC,CAAC;aACJ;SACF,EAAE,CAAC,CAAC,CAAC;KACP;+GApWU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,qZC1B/B,2xEAsCM,EAAA,MAAA,EAAA,CAAA,uoCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA/D,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDZO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,2xEAAA,EAAA,MAAA,EAAA,CAAA,uoCAAA,CAAA,EAAA,CAAA;sFAKG,cAAc,EAAA,CAAA;sBAAzC,SAAS;uBAAC,eAAe,CAAA;gBAG1B,IAAI,EAAA,CAAA;sBADH,KAAK;gBAGN,UAAU,EAAA,CAAA;sBADT,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,MAAM;uBAAC,UAAU,CAAA;gBAGlB,wBAAwB,EAAA,CAAA;sBADvB,MAAM;uBAAC,0BAA0B,CAAA;gBA6HlC,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAOzC,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEpI1B,kBAAkB,CAAA;AA8B7B,IAAA,WAAA,CACU,QAAsB,EACtB,OAAoB,EACpB,gBAAsC,EACtC,cAAkC,EAClC,MAAqB,EACrB,QAAsB,EACtB,IAAU,EAAA;QANV,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAsB;QACtC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAoB;QAClC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;QACrB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACtB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;AAlCX,QAAA,IAAA,CAAA,OAAO,GAAyB;AACvC,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,uBAAuB,EAAE,IAAI;AAC7B,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,eAAe,EAAE,KAAK;SACvB,CAAC;AACO,QAAA,IAAA,CAAA,SAAS,GAA8B;AAC9C,YAAA,OAAO,EAAE,SAAS;SACnB,CAAC;AACO,QAAA,IAAA,CAAA,eAAe,GAA8B;AACpD,YAAA,kBAAkB,EAAE,SAAS;SAC9B,CAAC;AACO,QAAA,IAAA,CAAA,WAAW,GAAsB;AACxC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,IAAI;SAChB,CAAC;QAEF,IAAY,CAAA,YAAA,GAAsB,EAAE,CAAC;QACjB,IAAS,CAAA,SAAA,GAAkB,IAAI,CAAC;QACpD,IAAI,CAAA,IAAA,GAAgB,IAAI,CAAC;QACzB,IAAM,CAAA,MAAA,GAAsB,IAAI,CAAC;QACjC,IAAkB,CAAA,kBAAA,GAAwB,IAAI,CAAC;QAC/C,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;AAWtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,KAAI;YAC/B,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aAClB;iBAAM;AACL,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aAClB;AACH,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACvE,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;AAED,IAAA,MAAM,eAAe,GAAA;QACnB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClD,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,GAAG,EAAE,mCAAmC;AACzC,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO;SACR;AACD,QAAA,IAAI,CAAC,cAAc;AAChB,aAAA,cAAc,EAAE;AAChB,aAAA,IAAI,CAAC,OAAO,IAAqB,KAAI;YACpC,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACpD,gBAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aAC1B;AACH,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAC,CAAC,CAAC;KACN;AAED,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAC9B;AAED,IAAA,MAAM,aAAa,GAAA;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,MAAM,GAAG,GAAG,CAAG,EAAA,QAAQ,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,EAAE,CAAC;AAC9D,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KAC3B;AAED,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KACzB;IAED,MAAM,QAAQ,GAAA,GAAM;AAEpB,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;KAC9B;AAED,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACpC;AAED,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;KACxB;AAED,IAAA,MAAM,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;KACvB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;SAC1B;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;SAC9B;AACD,QAAA,OAAO,EAAE,CAAC;KACX;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAA,GAAA,EAAM,IAAI,CAAC,WAAW,CAAA,CAAE,CAAC;SACvD;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE;YACvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAA,GAAA,EAAM,IAAI,CAAC,WAAW,CAAA,CAAE,CAAC;SACtD;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;SACvC;KACF;+GAzIU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA2D,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAjC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAkC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA7C,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA8C,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAArD,IAAA,CAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,mPCjC/B,85HAgFM,EAAA,MAAA,EAAA,CAAA,+0CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD/CO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,85HAAA,EAAA,MAAA,EAAA,CAAA,+0CAAA,CAAA,EAAA,CAAA;yOAMzB,KAAK,EAAA,CAAA;sBADJ,KAAK;uBAAC,OAAO,CAAA;gBAEL,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAQG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAMN,YAAY,EAAA,CAAA;sBADX,KAAK;uBAAC,cAAc,CAAA;gBAED,SAAS,EAAA,CAAA;sBAA5B,KAAK;uBAAC,WAAW,CAAA;;;MEzBP,sBAAsB,CAAA;AAUjC,IAAA,WAAA,CACU,UAAsB,EACtB,SAAoB,EACpB,QAAsB,EACvB,WAAwB,EAAA;QAHvB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AAXvB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAiB,CAAC;AAE9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAkB,CAAC;QAChD,IAAO,CAAA,OAAA,GAAG,IAAI,WAAW,CAAC;AACjC,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA,CAAC,CAAC;KAMC;AAEJ,IAAA,QAAQ,MAAW;AAEnB,IAAA,WAAW,MAAW;AAEtB,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,IAAI,OAAO,CAAC,GAAG,EAAE;AACf,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YACrC,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAK;AAC1B,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACxB,iBAAC,CAAC,CAAC;aACJ;SACF;KACF;IAED,SAAS,GAAA;AACP,QAAA,MAAM,QAAQ,GAA6B;AACzC,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;AACF,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE;AACtC,YAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE;SAChC,CAAC;AACF,QAAA,MAAM,YAAY,GAAQ,IAAI,CAAC,OAAO,CAAC;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,MAAM,CAAC,EAAE,IAAI,YAAY,EAAE;AAC7B,gBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aAChD;SACF;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAA,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACpD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACtC,QAAA,OAAO,MAAM,CAAC;KACf;AAEM,IAAA,MAAM,QAAQ,CAAC,OAAqB,EAAE,SAAiB,EAAE,EAAA;AAC9D,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;AACpE,YAAA,OAAO,QAAQ,CAAC;SACjB;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,GAAG,CAAC;SACX;KACF;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;;AAE7B,YAAA,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5D,YAAA,MAAM,GAAG,CAAA,uBAAA,EAA0B,MAAM,CAAA,CAAE,CAAC;AAC5C,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAClC;AACE,gBAAA,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,EACD,gBAAgB,CACjB,CAAC;AACF,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC;AACpE,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,MAAM,KAAK,GAAA;QACT,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC;SAC9D;KACF;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3B;IAED,MAAM,eAAe,CAAC,KAAa,EAAA;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,UAAU,CAAC,YAAW;AACpB,gBAAA,IAAI;oBACF,MAAM,WAAW,EAAE,CAAC;AACpB,oBAAA,OAAO,EAAE,CAAC;iBACX;gBAAC,OAAO,GAAG,EAAE;oBACZ,MAAM,CAAC,GAAG,CAAC,CAAC;iBACb;aACF,EAAE,CAAC,CAAC,CAAC;AACR,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,SAAc,EAAA;QACxB,MAAM,IAAI,GAAS,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,KAAU,KAAI;AAC7C,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAC/B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACtC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,IAAI,YAAY,IAAI,EAAE;AACxB,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC5B;KACF;IAED,MAAM,IAAI,CAAC,GAAW,EAAA;QACpB,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC/C;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9D,YAAA,IAAI,CAAC,UAAU;iBACZ,GAAG,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACrC,iBAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAChB,aAAC,CAAC,CACH;AACA,iBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KAClC;+GA/JU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA5B,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA8C,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,6MChCnC,s8CA6BM,EAAA,MAAA,EAAA,CAAA,+YAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA5C,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDGO,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,s8CAAA,EAAA,MAAA,EAAA,CAAA,+YAAA,CAAA,EAAA,CAAA;0JAKpB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBACE,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;ME1BI,eAAe,CAAA;IAe1B,WACU,CAAA,SAAwB,EACxB,QAAsB,EAAA;QADtB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAe;QACxB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QAhBhC,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAClB,QAAA,IAAA,CAAA,cAAc,GAA8B,IAAI,OAAO,EAAE,CAAC;AAC1D,QAAA,IAAA,CAAA,OAAO,GAAiB,IAAI,OAAO,EAAE,CAAC;AAEtC,QAAA,IAAA,CAAA,UAAU,GAAiB,IAAI,OAAO,EAAE,CAAC;;AAEjD,QAAA,IAAA,CAAA,YAAY,GAA0B;;AAEpC,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,gBAAgB,EAAE,IAAI;SACvB,CAAC;QACF,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;QACd,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;KAIL;IAEJ,QAAQ,GAAA;QACN,MAAM,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;KACjD;AAEO,IAAA,iBAAiB,CAAC,OAA0B,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AAC1B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AAC1B,YAAA,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,IAAI,CAAC,QAAQ;AACtB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;KACf;AACM,IAAA,UAAU,CAAC,WAAwB,EAAA;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAY,CAAC,cAAc,CAAC;KAC7C;AACD,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AACD,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;KAC3C;AACD,IAAA,IAAW,oBAAoB,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;KACvC;AAEM,IAAA,eAAe,CAAC,KAAsB,EAAA;QAC3C,IACE,KAAK,CAAC,gBAAgB;AACtB,YAAA,KAAK,CAAC,gBAAgB,CAAC,IAAI,KAAK,iBAAiB,EACjD;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClB,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,GAAG,EAAE,sCAAsC;AAC5C,aAAA,CAAC,CAAC;SACJ;KACF;+GApFU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAqD,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAjD,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,kDCX5B,mjEA+CM,EAAA,MAAA,EAAA,CAAA,k0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAf,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDpCO,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,YAAY,EAAA,QAAA,EAAA,mjEAAA,EAAA,MAAA,EAAA,CAAA,k0BAAA,CAAA,EAAA,CAAA;;;AEJxB;AAEA;MAKa,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,KAAyB,EAAE,GAAG,IAAe,EAAA;AACrD,QAAA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;AAC5B,YAAA,OAAO,YAAY,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;SAClE;AACD,QAAA,OAAO,IAAI,CAAC;KACb;+GANU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAd,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA,EAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AACnB,iBAAA,CAAA;;;MCHY,aAAa,CAAA;IACxB,QAAQ,CAAC,KAAU,EAAE,OAAY,EAAE,IAAS,EAAE,IAAS,EAAE,IAAS,EAAA;QAChE,IAAI,GAAG,GAAG,uBAAuB,CAAC;QAClC,IAAI,GAAG,GAAG,yBAAyB,CAAC;QACpC,IAAI,GAAG,GAAG,0BAA0B,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,IAAI;AAAE,YAAA,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC;AACjE,QAAA,IAAI,IAAI;YAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAClE,QAAA,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;KACzB;AAED,IAAA,SAAS,CAAC,KAAU,EAAA;QAClB,IAAI,QAAQ,GAAG,kDAAkD,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE,CAAC;SACX;AACD,QAAA,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;AACtB,aAAA,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;AACzB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACrB,aAAA,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACrC;+GAtBU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA,EAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AAClB,iBAAA,CAAA;;;MCAY,QAAQ,CAAA;AACnB,IAAA,SAAS,CAAC,KAAU,EAAA;QAClB,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,QAAA,OAAO,SAAS,CAAC;KAClB;+GAJU,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAR,QAAQ,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,CAAA,EAAA;;4FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAHpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,UAAU;AACjB,iBAAA,CAAA;;;MCEY,eAAe,CAAA;AACnB,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC,EAAA;AACnC,IAAA,WAAA,GAAA,GAAgB;AAChB,IAAA,SAAS,CAAC,KAAa,EAAE,GAAG,IAAe,EAAA;AACzC,QAAA,OAAO,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;+GALU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAf,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,CAAA,EAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,aAAa;AACpB,iBAAA,CAAA;;;MCCY,SAAS,CAAA;AACpB,IAAA,WAAA,CAAoB,YAA8B,EAAA;QAA9B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;KAAK;AACvD,IAAA,SAAS,CAAC,aAAkB,EAAE,GAAG,IAAe,EAAA;QAC9C,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,IAAI,OAAO,aAAa,IAAI,QAAQ,EAAE;gBACpC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACpC,gBAAA,MAAM,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACpC,gBAAA,MAAM,GAAG,GAAQ;AACf,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,MAAM,EAAE,SAAS;iBAClB,CAAC;AACF,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAC1C,gBAAA,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE;AACvB,oBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;oBACjD,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACrC,oBAAA,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;iBACzB;AACD,gBAAA,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE;AACvB,oBAAA,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC/C,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACrC,oBAAA,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;iBACvB;gBACD,IAAI,eAAe,GAAQ,SAAS,CAAC;gBACrC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,oBAAA,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC3B;AACD,gBAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;oBACzD,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;iBACvB;gBACD,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5D,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAS,MAAA,EAAA,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnG,OAAO,CAAC,QAAQ,CAAC,CAAC;aACnB;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,CAAC;aACd;AACH,SAAC,CAAC,CAAC;KACJ;+GA3CU,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAT,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,CAAA,EAAA;;4FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAHrB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,OAAO;AACd,iBAAA,CAAA;;;MCGY,OAAO,CAAA;AAClB,IAAA,WAAA,CAAoB,YAA8B,EAAA;QAA9B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;KAAK;AACvD,IAAA,SAAS,CAAC,KAAc,EAAE,GAAG,IAAe,EAAA;QAC1C,IAAI,KAAK,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAChC,KAAK,GAAG,CAAC,CAAC;SACX;QACD,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAI;YAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,KAAK,EAAE;gBACT,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAa,UAAA,EAAA,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3F,OAAO,CAAC,QAAQ,CAAC,CAAC;aACnB;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,CAAC;aACf;AACH,SAAC,CAAC,CAAC;KACJ;+GAhBU,OAAO,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAP,OAAO,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA,EAAA;;4FAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBAJnB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA,CAAA;;;ACLD;;;;;;AAME;MAKW,MAAM,CAAA;AAJnB,IAAA,WAAA,GAAA;QAKW,IAAM,CAAA,MAAA,GAAQ,EAAE,CAAC;AAQ3B,KAAA;IALC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B;KACF;+GARU,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAN,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAN,MAAM,EAAA,UAAA,EAAA,CAAA;kBAJlB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE,QAAQ;AACnB,iBAAA,CAAA;8BAEU,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MCXK,wBAAwB,CAAA;AAGjC,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;KAAK;AAGvC,IAAA,OAAO,CAAC,KAAoB,EAAA;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;AACxC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC5E,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QAEpD,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAgB,CAAC;YACnD,SAAS,CAAC,KAAK,EAAE,CAAC;SACrB;KACJ;+GAjBQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAxB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AACnC,iBAAA,CAAA;+EAEY,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAKN,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MCRhC,WAAW,CAAA;AAGtB,IAAA,WAAA,GAAA;QAFA,IAAQ,CAAA,QAAA,GAAQ,SAAS,CAAC;AAC1B,QAAA,IAAA,CAAA,OAAO,GAAuB,IAAI,YAAY,EAAE,CAAC;KACjC;AAEhB,IAAA,MAAM,CAAC,IAAU,EAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAED,MAAM,IAAI,CAAC,KAAe,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAU,KAAI;YAC3C,KAAK,CAAC,IAAI,CAAC,CAAC;AACd,SAAC,CAAC,CAAC;KACJ;AACF;;ACyCD,SAAS,WAAW,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AACjE,IAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;AACvB,IAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;MAEY,cAAc,CAAA;aAClB,IAAe,CAAA,eAAA,GAAG,GAAH,CAAO,EAAA;aAuBtB,IAAK,CAAA,KAAA,GAAgC,EAAhC,CAAmC,EAAA;aACxC,IAAW,CAAA,WAAA,GAAuB,IAAvB,CAA4B,EAAA;AAM9C,IAAA,OAAO,YAAY,CAAC,IAAY,EAAE,GAAa,EAAA;AAC7C,QAAA,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;KAClC;AAED,IAAA,WAAA,CAAmB,UAA0B,EAAA;QAA1B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;QAjC7C,IAAO,CAAA,OAAA,GAAiC,IAAI,CAAC;QAC7C,IAAQ,CAAA,QAAA,GAAwB,IAAI,CAAC;QACrC,IAAY,CAAA,YAAA,GAAwB,IAAI,CAAC;QACzC,IAAS,CAAA,SAAA,GAAsB,IAAI,CAAC;QACpC,IAAU,CAAA,UAAA,GAAsC,IAAI,CAAC;QACrD,IAAgB,CAAA,gBAAA,GAA0B,IAAI,CAAC;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAuB;AACnC,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,OAAO,EAAE,IAAI;SACd,CAAC;AACF,QAAA,IAAA,CAAA,OAAO,GAAgB;AACrB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,OAAO,EAAE,EAAE;SACZ,CAAC;AACF,QAAA,IAAA,CAAA,cAAc,GAA6B,IAAI,WAAW,EAAE,CAAC;AAC7D,QAAA,IAAA,CAAA,cAAc,GACZ,IAAI,YAAY,EAAE,CAAC;AACrB,QAAA,IAAA,CAAA,aAAa,GAAyB,IAAI,YAAY,EAAE,CAAC;QACzD,IAAsB,CAAA,sBAAA,GAAkB,IAAI,CAAC;QAC7C,IAAsB,CAAA,sBAAA,GAAkB,IAAI,CAAC;AAG7C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,2BAA2B,EAAE,CAAC;AAC/C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC3C,IAAwB,CAAA,wBAAA,GAAkB,IAAI,CAAC;QAC/C,IAAwB,CAAA,wBAAA,GAAkB,IAAI,CAAC;QAQ7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,iBAAiB,KAAI;AAC7C,YAAA,IAAI,CAAC,wBAAwB,GAAG,iBAAiB,CAAC;AACpD,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,iBAAiB,KAAI;AAC7C,YAAA,IAAI,CAAC,wBAAwB,GAAG,iBAAiB,CAAC;AACpD,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAoB,KAAI;AAChD,YAAA,IAAI,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;AACjD,YAAA,cAAc,CAAC,WAAW,GAAG,OAAO,CAAC;AACvC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACvC,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;QAEH,SAAS,CAAC,YAAY,CAAC,cAAc,GAAG,OAAO,KAAK,KAAI;YACtD,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5B,SAAC,CAAC;QACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;;AAG1B,QAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,MAAK;SAClC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAQ,KAAI,GAAI,CAAC,CAAC;KAC7B;AAED,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;KACxB;AAED,IAAA,MAAM,uBAAuB,GAAA;;QAE3B,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE;AACxD,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAA8B,EAAE,CAAC,CAAC;AAE3F,gBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;AAC9B,oBAAA,OAAO,SAAS,CAAC;iBAClB;AAAM,qBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AACpC,oBAAA,OAAO,QAAQ,CAAC;iBACjB;qBAAM;oBACL,OAAO,QAAQ,CAAC;iBACjB;aACF;YAAC,OAAO,GAAG,EAAE;;AAEZ,gBAAA,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;aAC3D;SACF;;AAGD,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1E,YAAA,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,YAAA,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,EAAE;AAC1E,gBAAA,OAAO,QAAQ,CAAC;aACjB;YACD,OAAO,QAAQ,CAAC;SACjB;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AACjE,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,iBAAiB,CAAC,KAAmB,EAAA;QACnC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC3D,OAAO;SACR;AAED,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACtC;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;SAC9B;;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;;QAEnE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,iBAAiB,GAAG,MAAK;YAC7B,IAAI,UAAU,EAAE;gBACd,OAAO;aACR;YACD,UAAU,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;gBACxD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAgB,CAAC,CAAC;;gBAE1D,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,oBAAA,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBAC1B;gBACD,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC3C,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;AACxC,gBAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;AAC9D,gBAAA,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aACzC;YACD,UAAU,GAAG,KAAK,CAAC;AACrB,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACvC,YAAA,iBAAiB,EAAE,CAAC;SACrB,EAAE,GAAG,CAAC,CAAC;KACT;IAED,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;AAED,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,wBAAwB,IAAI,QAAQ;AAC3E,gBAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,wBAAwB,IAAI,QAAQ,CAAC,EAAE;YAClF,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC3B,EAAE,IAAI,CAAC,CAAC;SACV;KACF;AAED,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;QAE3D,IAAI,WAAW,GACb,MAAM,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAI;AAC9C,YAAA,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC/B,SAAC,CAAC,CAAC;AACH,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,EAAE;AACpC,gBAAA,MAAM,YAAY,GAAiB;oBACjC,EAAE,EAAE,UAAU,CAAC,QAAQ;oBACvB,GAAG,EAAE,UAAU,CAAC,KAAK,IAAI,CAAc,WAAA,EAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;iBAC3D,CAAC;AACF,gBAAA,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC3B;AAAM,iBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,EAAE;AAC3C,gBAAA,MAAM,YAAY,GAAiB;oBACjC,EAAE,EAAE,UAAU,CAAC,QAAQ;oBACvB,GAAG,EAAE,UAAU,CAAC,KAAK,IAAI,CAAU,OAAA,EAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;iBACvD,CAAC;AACF,gBAAA,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC3B;AACD,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE;AACrC,gBAAA,MAAM,YAAY,GAAiB;oBACjC,EAAE,EAAE,UAAU,CAAC,QAAQ;oBACvB,GAAG,EAAE,UAAU,CAAC,KAAK,IAAI,CAAW,QAAA,EAAA,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;iBACzD,CAAC;AACF,gBAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC5B;SACF;QACD,IAAI,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED,IAAA,KAAK,CAAC,MAAc,EAAA;AAClB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,UAAU,CAAC,MAAK;AACd,gBAAA,OAAO,EAAE,CAAC;aACX,EAAE,MAAM,CAAC,CAAC;AACb,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,eAAe,CAAC,MAAmB,EAAA;AACvC,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,OAAO,KAAI;AACzC,YAAA,GAAG;AACD,gBAAA,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxB,aAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;AACzB,YAAA,OAAO,EAAE,CAAC;AACZ,SAAC,CAAC,CAAC;KACJ;IAED,UAAU,GAAA;AACR,QAAA,MAAM,OAAO,GAAQ,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,OAAO,EAAE;YACX,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAuB,KAAI;oBAC7D,KAAK,CAAC,IAAI,EAAE,CAAC;AACf,iBAAC,CAAC,CAAC;aACJ;SACF;KACF;IAED,MAAM,YAAY,CAAC,OAA0B,EAAA;AAC3C,QAAA,IAAI,cAAc,IAAI,cAAc,CAAC,KAAK,EAAE;AAC1C,YAAA,OAAO,MAAM,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAClE;AACD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;AAE9C,QAAA,IACE,IAAI,CAAC,sBAAsB,IAAI,WAAW;AAC1C,YAAA,IAAI,CAAC,sBAAsB,IAAI,WAAW,EAC1C;YACA,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;aAAM;AACL,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC,OAAO,CAAC;aACrB;SACF;AACD,QAAA,IAAI;AACF,YAAA,MAAM,gBAAgB,GAAG;AACvB,gBAAA,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE;aACtE,CAAC;AACF,YAAA,MAAM,gBAAgB,GAAG;AACvB,gBAAA,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE;aACtE,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CACtD,gBAAgB,CACjB,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAC3D,gBAAgB,CACjB,CAAC;;AAGF,YAAA,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACnC,YAAA,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAExC,MAAM,UAAU,GAAQ,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;;AAGnD,YAAA,MAAM,cAAc,GAAG,IAAI,yBAAyB,CAAC;AACnD,gBAAA,KAAK,EAAE,UAAU;AAClB,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,cAAc,GAAG,IAAI,yBAAyB,CAAC;AACnD,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;AACf,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,aAAa,GAAG,cAAc,CAAC,eAAe,CAAC;AACrD,YAAA,MAAM,KAAK,GAAG,aAAa,GAAG,MAAM,CAAC;AACrC,YAAA,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC;AAEnC,YAAA,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;AACtC,gBAAA,MAAM,SAAS,CAAC,UAAe,EAAE,UAAe,EAAA;AAC9C,oBAAA,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EACL,MAAM,EACN,YAAY,EACZ,aAAa,CACd,CAAC;oBAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAC3C,UAAU,EACV,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,EACR;AACE,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,YAAY,EAAE,aAAa;AAC5B,qBAAA,CACF,CAAC;AACF,oBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;oBACvC,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACnD,oBAAA,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAC1B;AACF,aAAA,CAAC,CAAC;AAEH,YAAA,cAAc,CAAC,QAAQ;iBACpB,WAAW,CAAC,WAAW,CAAC;AACxB,iBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAEnC,YAAA,MAAM,eAAe,GAAG,IAAI,WAAW,EAAE,CAAC;AAC1C,YAAA,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAEzC,YAAA,MAAM,QAAQ,GAA0B;AACtC,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,KAAK,EAAE,WAAW;aACnB,CAAC;AACF,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEnC,YAAA,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC;AAC1C,YAAA,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC;AAE1C,YAAA,OAAO,QAAQ,CAAC;SACjB;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,YAAA,MAAM,GAAG,CAAC;SACX;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC;IAED,iBAAiB,GAAA;AACf,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,CAA6C,0CAAA,EAAA,WAAW,CAAU,OAAA,EAAA,WAAW,CAAE,CAAA,CAChF,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,YAAoB,EAAA;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAoB,iBAAA,EAAA,YAAY,CAAE,CAAA,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,YAAY,CAAC;QAC3C,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;AAED,IAAA,cAAc,CAAC,WAAmB,EAAA;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAkB,eAAA,EAAA,WAAW,CAAE,CAAA,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,WAAW,CAAC;QACxC,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;AAED,IAAA,cAAc,CAAC,WAAmB,EAAA;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAkB,eAAA,EAAA,WAAW,CAAE,CAAA,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,WAAW,CAAC;QACxC,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;AAED,IAAA,oBAAoB,CAAC,OAAqC,EAAA;;QAExD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;SAClC;aAAM;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;gBACrE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,KAAK,UAAU,CAAC,KAAK,CAAC;AACjD,gBAAA,OAAO,QAAQ,CAAC;AAClB,aAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;gBACrE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;AACnD,gBAAA,MAAM,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,KAAM,UAAkB,CAAC,WAAW,CAAC,CAAC;AACrG,gBAAA,OAAO,QAAQ,CAAC;AAClB,aAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SACX;QACD,IAAI,CAAC,0BAA0B,EAAE,CAAC;;KAEnC;IAED,0BAA0B,GAAA;QACxB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAClD,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,cAAc,CAAC,KAAK,CAC1B,CAAC;AACF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CACxC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,cAAc,CAAC,KAAK,CAC1B,CAAC;AACF,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAC5C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,cAAc,CAAC,OAAO,CAC5B,CAAC;;;;;QAKF,IAAI,gBAAgB,EAAE;AACpB,YAAA,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC;SACnC;QACD,IAAI,WAAW,EAAE;AACf,YAAA,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC;SAC9B;QACD,IAAI,aAAa,EAAE;AACjB,YAAA,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC;SACjC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC;QACjB,SAAS,CAAC,SAAS,CAAC,qBAAqB,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7D,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACvD,SAAS,CAAC,SAAS,CAAC,sBAAsB,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;KAChE;AAED,IAAA,mBAAmB,CACjB,OAAoB,EACpB,KAAoB,EACpB,OAAe,IAAI,EAAA;QAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAChD,YAAA,OAAO,KAAK,IAAK,MAAc,CAAC,IAAI,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC;SACb;aAAM;AACL,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;SACnB;KACF;AAED,IAAA,sBAAsB,CACpB,OAAoB,EACpB,KAAoB,EACpB,OAAe,IAAI,EAAA;QAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAC/C,YAAA,OAAO,KAAK,IAAK,MAAc,CAAC,IAAI,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC;SACb;aAAM;AACL,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;SACnB;KACF;AAED,IAAA,iBAAiB,CACf,OAAoB,EACpB,KAAoB,EACpB,OAAe,IAAI,EAAA;QAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAC/C,YAAA,OAAO,KAAK,IAAK,MAAc,CAAC,IAAI,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC;SACb;aAAM;AACL,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;SACnB;KACF;IAED,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAChC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAEnC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAC7D,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CACxC,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,KAAK,CACN,CAAC;gBACF,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC;iBAC5C;qBAAM;AACL,oBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,IAAI,CAAC,0BAA0B,EAAE,CAAC;iBACnC;aACF;SACF;KACF;AAED,IAAA,OAAO,QAAQ,GAAA;QACb,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AACvH,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;AAGG;AACH,IAAA,kCAAkC,CAAC,OAAoB,EAAA;;;QAGrD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;gBAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAC5D,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACxE,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC;iBAC1C;aACF;AACD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAC9C,OAAO,EACP,IAAI,CAAC,cAAc,CAAC,KAAK,CAC1B,CAAC;YACF,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD;SACF;aAAM;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;SAClC;;QAED,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;gBAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;AACtD,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACnE,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC;iBAC1C;;AAED,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,cAAc,CAAC,QAAQ,EAAE,EAAE;;oBAE3D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,KAAI;wBACvD,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACvC,qBAAC,CAAC,CAAC;AACH,oBAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChD;iBACF;aACF;AACD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CACzC,OAAO,EACP,IAAI,CAAC,cAAc,CAAC,KAAK,CAC1B,CAAC;YACF,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD;SACF;aAAM;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;SAClC;QACD,IAAI,CAAC,0BAA0B,EAAE,CAAC;;KAEnC;AAED,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KACzC;AAED,IAAA,eAAe,CAAC,UAAmB,EAAA;AACjC,QAAA,IAAI,iBAAiB,IAAI,cAAc,CAAC,KAAK,EAAE;YAC7C,OAAO,cAAc,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SAClE;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACnD,gBAAA,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;AAC7B,aAAC,CAAC,CAAC;SACJ;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACrD,gBAAA,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;AAC7B,aAAC,CAAC,CAAC;SACJ;KACF;;;ACzoBG,MAAO,gBAAiB,SAAQ,YAAY,CAAA;AAEhD,IAAA,WAAA,CAAY,OAAyB,EAAA;QACnC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFjB,IAAY,CAAA,YAAA,GAAG,EAAE,CAAC;KAGjB;IACD,MAAM,OAAO,CAAC,IAAS,EAAA;QACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CACrB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAC5C,CAAC;SACH;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAC1C;AACF;;ACfK,MAAO,2BAA4B,SAAQ,YAAY,CAAA;AAC3D,IAAA,WAAA,CAAY,OAAyB,EAAA;QACnC,KAAK,CAAC,OAAO,CAAC,CAAC;KAChB;IACD,MAAM,OAAO,CAAC,OAAoB,EAAA;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC/D;KACF;AACF;;ACRK,MAAO,mBAAoB,SAAQ,YAAY,CAAA;AACnD,IAAA,WAAA,CAAY,OAAyB,EAAA;QACnC,KAAK,CAAC,OAAO,CAAC,CAAC;KAChB;IACD,MAAM,OAAO,CAAC,IAAS,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3D,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvC,YAAA,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvC,YAAA,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACnD;KACF;AACF;;ACbK,MAAO,iBAAkB,SAAQ,YAAY,CAAA;AACjD,IAAA,WAAA,CAAY,OAAyB,EAAA;QACnC,KAAK,CAAC,OAAO,CAAC,CAAC;KAChB;IACD,MAAM,OAAO,CAAC,IAAS,EAAA;AACrB,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;;AAEvB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC9B;AACF;;ACTK,MAAO,uBAAwB,SAAQ,YAAY,CAAA;AACvD,IAAA,WAAA,CAAY,OAAyB,EAAA;QACnC,KAAK,CAAC,OAAO,CAAC,CAAC;KAChB;IACD,MAAM,OAAO,CAAC,IAAS,EAAA;QACrB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,YAAY,KAAK,EAAE;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC/D;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACjC,qBAAqB,CAAC,MAAK;;AAEzB,YAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;AACF;;ACjBK,SAAU,sBAAsB,CAAC,GAAW,EAAA;IAChD,OAAO,CAAC,OAAwB,KAAmC;QACjE,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,mDAAmD,CAAC;QACzE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CACjC,CAAC,KAAa,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CACpD,CAAC;AACF,QAAA,IAAI,aAAa,CAAC,MAAM,EAAE;YACxB,OAAO,aAAa,CAAC,MAAM;AACzB,kBAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;kBACpD,IAAI,CAAC;SACV;aAAM;AACL,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAa,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACxD,YAAA,OAAO,MAAM,CAAC,MAAM,GAAG,GAAG;kBACtB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE;kBACvC,IAAI,CAAC;SACV;AACH,KAAC,CAAC;AACJ;;AChBa,MAAA,mBAAmB,GAAmB;AAC/C,IAAA,KAAK,EAAE;AACH,QAAA,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;AACjE,KAAA;AACD,IAAA,OAAO,EAAE;AACL,QAAA,SAAS,EAAE,OAAO;QAClB,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;AACnD,QAAA,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE;QACjE,kBAAkB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;AACzD,KAAA;EACH;AAEF;AAEM,MAAO,eAAgB,SAAQ,iBAAiB,CAAA;AAClD,IAAA,WAAW,CAAC,KAAoB,EAAA;QAC5B,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC;SAAE;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;KACnE;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;QACrB,MAAM,MAAM,GAAG,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,MAAM,EAAE;AACR,YAAA,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAChG;aAAM;AACH,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;IACQ,MAAM,CAAC,IAAU,EAAE,aAAqB,EAAA;AAC7C,QAAA,IAAI,aAAa,KAAK,OAAO,EAAE;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAC3C;aAAM;AACH,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;SAC9B;KACJ;IACQ,KAAK,CAAC,KAAU,EAAE,WAAmB,EAAA;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE;AACP,YAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;SAC1B;AACD,QAAA,OAAO,IAAI,CAAC;KACf;+GA/BQ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAf,eAAe,EAAA,CAAA,CAAA,EAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;AAoCL,MAAO,eAAgB,SAAQ,iBAAiB,CAAA;AAClD,IAAA,WAAW,CAAC,KAAoB,EAAA;QAC5B,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC;SAAE;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,OAAO,GAAG,KAAK,CAAA,CAAA,EAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;KACnE;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;QACrB,MAAM,MAAM,GAAG,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,MAAM,EAAE;AACR,YAAA,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAChG;aAAM;AACH,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;IACQ,MAAM,CAAC,IAAU,EAAE,aAAqB,EAAA;AAC7C,QAAA,IAAI,aAAa,KAAK,OAAO,EAAE;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAC3C;aAAM;AACH,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;SAC9B;KACJ;IACQ,KAAK,CAAC,KAAU,EAAE,WAAmB,EAAA;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE;AACP,YAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;SAC1B;AACD,QAAA,OAAO,IAAI,CAAC;KACf;+GA/BQ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAf,eAAe,EAAA,CAAA,CAAA,EAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;MCmHE,cAAc,CAAA;+GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;gHAAd,cAAc,EAAA,YAAA,EAAA;;YA7GvB,aAAa;YACb,oBAAoB;YACpB,kBAAkB;YAClB,sBAAsB;YACtB,mBAAmB;YACnB,mBAAmB;YACnB,0BAA0B;YAC1B,qBAAqB;YACrB,kBAAkB;YAClB,oBAAoB;YACpB,gBAAgB;YAChB,yBAAyB;YACzB,cAAc;YACd,2BAA2B;YAC3B,gBAAgB;YAChB,gBAAgB;YAChB,kBAAkB;YAClB,mBAAmB;YACnB,sBAAsB;YACtB,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;YAClB,eAAe;YACf,mBAAmB;;YAEnB,cAAc;YACd,aAAa;YACb,aAAa;YACb,cAAc;YACd,aAAa;YACb,QAAQ;YACR,eAAe;YACf,SAAS;YACT,OAAO;;YAEP,MAAM;AACN,YAAA,wBAAwB,aAIxB,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,kCAAkC;YAClC,YAAY;YACZ,aAAa;YACb,eAAe;YACf,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,eAAe;YACf,gBAAgB;YAChB,aAAa;YACb,oBAAoB;YACpB,eAAe,CAAA,EAAA,OAAA,EAAA;;YAIf,aAAa;YACb,oBAAoB;YACpB,kBAAkB;YAClB,sBAAsB;YACtB,mBAAmB;YACnB,mBAAmB;YACnB,0BAA0B;YAC1B,qBAAqB;YACrB,kBAAkB;YAClB,oBAAoB;YACpB,gBAAgB;YAChB,yBAAyB;YACzB,cAAc;YACd,2BAA2B;YAC3B,gBAAgB;YAChB,gBAAgB;YAChB,kBAAkB;YAClB,mBAAmB;YACnB,sBAAsB;YACtB,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;YAClB,eAAe;YACf,mBAAmB;;YAEnB,cAAc;YACd,aAAa;YACb,aAAa;YACb,cAAc;YACd,aAAa;YACb,QAAQ;YACR,eAAe;YACf,SAAS;YACT,OAAO;;YAEP,MAAM;YACN,wBAAwB,CAAA,EAAA,CAAA,CAAA,EAAA;AAef,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAbd,SAAA,EAAA;YACT,cAAc;YACd,aAAa;YACb,aAAa;YACb,cAAc;YACd,aAAa;YACb,QAAQ;YACR,eAAe;YACf,SAAS;YACT,OAAO;AACP,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;AAC3D,SAAA,EAAA,OAAA,EAAA,CAnEC,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,kCAAkC;YAClC,YAAY;YACZ,aAAa;YACb,eAAe;YACf,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,eAAe;YACf,gBAAgB;YAChB,aAAa;YACb,oBAAoB;YACpB,eAAe,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAuDN,cAAc,EAAA,UAAA,EAAA,CAAA;kBAhH1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;;wBAEZ,aAAa;wBACb,oBAAoB;wBACpB,kBAAkB;wBAClB,sBAAsB;wBACtB,mBAAmB;wBACnB,mBAAmB;wBACnB,0BAA0B;wBAC1B,qBAAqB;wBACrB,kBAAkB;wBAClB,oBAAoB;wBACpB,gBAAgB;wBAChB,yBAAyB;wBACzB,cAAc;wBACd,2BAA2B;wBAC3B,gBAAgB;wBAChB,gBAAgB;wBAChB,kBAAkB;wBAClB,mBAAmB;wBACnB,sBAAsB;wBACtB,kBAAkB;wBAClB,kBAAkB;wBAClB,kBAAkB;wBAClB,eAAe;wBACf,mBAAmB;;wBAEnB,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,aAAa;wBACb,QAAQ;wBACR,eAAe;wBACf,SAAS;wBACT,OAAO;;wBAEP,MAAM;wBACN,wBAAwB;;AAEzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,kCAAkC;wBAClC,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,cAAc;wBACd,kBAAkB;wBAClB,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,oBAAoB;wBACpB,eAAe;AAChB,qBAAA;AACD,oBAAA,OAAO,EAAE;;wBAEP,aAAa;wBACb,oBAAoB;wBACpB,kBAAkB;wBAClB,sBAAsB;wBACtB,mBAAmB;wBACnB,mBAAmB;wBACnB,0BAA0B;wBAC1B,qBAAqB;wBACrB,kBAAkB;wBAClB,oBAAoB;wBACpB,gBAAgB;wBAChB,yBAAyB;wBACzB,cAAc;wBACd,2BAA2B;wBAC3B,gBAAgB;wBAChB,gBAAgB;wBAChB,kBAAkB;wBAClB,mBAAmB;wBACnB,sBAAsB;wBACtB,kBAAkB;wBAClB,kBAAkB;wBAClB,kBAAkB;wBAClB,eAAe;wBACf,mBAAmB;;wBAEnB,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,aAAa;wBACb,QAAQ;wBACR,eAAe;wBACf,SAAS;wBACT,OAAO;;wBAEP,MAAM;wBACN,wBAAwB;AACzB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,aAAa;wBACb,QAAQ;wBACR,eAAe;wBACf,SAAS;wBACT,OAAO;AACP,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;AAC3D,qBAAA;AACF,iBAAA,CAAA;;;ACtKD;AACA;;AAEG;AAEH;;ACLA;;AAEG;;;;"}