{"version":3,"file":"alfresco-aca-content.mjs","sources":["../../../../projects/aca-content/src/lib/store/reducers/app.reducer.ts","../../../../projects/aca-content/src/lib/store/effects/app.effects.ts","../../../../projects/aca-content/src/lib/services/content-url.service.ts","../../../../projects/aca-content/src/lib/store/effects/download.effects.ts","../../../../projects/aca-content/src/lib/services/node-actions.service.ts","../../../../projects/aca-content/src/lib/dialogs/node-details/node-information.component.ts","../../../../projects/aca-content/src/lib/dialogs/node-details/node-information.component.html","../../../../projects/aca-content/src/lib/services/content-management.service.ts","../../../../projects/aca-content/src/lib/store/effects/favorite.effects.ts","../../../../projects/aca-content/src/lib/store/effects/node.effects.ts","../../../../projects/aca-content/src/lib/store/effects/viewer.effects.ts","../../../../projects/aca-content/src/lib/components/search/search-navigation.service.ts","../../../../projects/aca-content/src/lib/utils/aca-search-utils.ts","../../../../projects/aca-content/src/lib/store/effects/search.effects.ts","../../../../projects/aca-content/src/lib/store/effects/library.effects.ts","../../../../projects/aca-content/src/lib/store/effects/upload.effects.ts","../../../../projects/aca-content/src/lib/dialogs/node-template/create-from-template.dialog.ts","../../../../projects/aca-content/src/lib/dialogs/node-template/create-from-template.dialog.html","../../../../projects/aca-content/src/lib/services/node-template.service.ts","../../../../projects/aca-content/src/lib/store/effects/template.effects.ts","../../../../projects/aca-content/src/lib/components/context-menu/context-menu-overlay.ts","../../../../projects/aca-content/src/lib/components/context-menu/direction.token.ts","../../../../projects/aca-content/src/lib/components/context-menu/context-menu-item.component.ts","../../../../projects/aca-content/src/lib/components/context-menu/context-menu-item.component.html","../../../../projects/aca-content/src/lib/components/context-menu/context-menu-outside-event.directive.ts","../../../../projects/aca-content/src/lib/components/context-menu/base-context-menu.directive.ts","../../../../projects/aca-content/src/lib/components/context-menu/context-menu.component.ts","../../../../projects/aca-content/src/lib/components/context-menu/context-menu.component.html","../../../../projects/aca-content/src/lib/components/context-menu/custom-context-menu-actions.token.ts","../../../../projects/aca-content/src/lib/components/context-menu/custom-context-menu.component.ts","../../../../projects/aca-content/src/lib/components/context-menu/context-menu.service.ts","../../../../projects/aca-content/src/lib/store/effects/contextmenu.effects.ts","../../../../projects/aca-content/src/lib/services/search-ai-navigation.service.ts","../../../../projects/aca-content/src/lib/store/effects/search-ai.effects.ts","../../../../projects/aca-content/src/lib/store/effects.ts","../../../../projects/aca-content/src/lib/store/app-store.module.ts","../../../../projects/aca-content/src/lib/dialogs/node-location-references/node-location-references.component.ts","../../../../projects/aca-content/src/lib/dialogs/node-location-references/node-location-references.component.html","../../../../projects/aca-content/src/lib/components/common/location-link/location-link.component.ts","../../../../projects/aca-content/src/lib/components/common/location-link/location-link.component.html","../../../../projects/aca-content/src/lib/components/common/logout/logout.component.ts","../../../../projects/aca-content/src/lib/components/common/toggle-shared/toggle-shared.component.ts","../../../../projects/aca-content/src/lib/components/common/toggle-shared/toggle-shared.component.html","../../../../projects/aca-content/src/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.ts","../../../../projects/aca-content/src/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.html","../../../../projects/aca-content/src/lib/components/dl-custom-components/name-column/name-column.component.ts","../../../../projects/aca-content/src/lib/components/dl-custom-components/name-column/name-column.component.html","../../../../projects/aca-content/src/lib/components/info-drawer/comments-tab/external-node-permission-comments-tab.service.ts","../../../../projects/aca-content/src/lib/components/info-drawer/comments-tab/comments-tab.component.ts","../../../../projects/aca-content/src/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.ts","../../../../projects/aca-content/src/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.html","../../../../projects/aca-content/src/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.ts","../../../../projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.ts","../../../../projects/aca-content/src/lib/components/info-drawer/versions-tab/versions-tab.component.ts","../../../../projects/aca-content/src/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.ts","../../../../projects/aca-content/src/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.ts","../../../../projects/aca-content/src/lib/components/toolbar/toggle-favorite/toggle-favorite.component.ts","../../../../projects/aca-content/src/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.ts","../../../../projects/aca-content/src/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.ts","../../../../projects/aca-content/src/lib/components/toolbar/toggle-join-library/toggle-join-library-menu.component.ts","../../../../projects/aca-content/src/lib/components/toolbar/view-node/view-node.component.ts","../../../../projects/aca-content/src/lib/directives/document-list.directive.ts","../../../../projects/aca-content/src/lib/services/modal-ai.service.ts","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.ts","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.html","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.ts","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.html","../../../../projects/aca-content/src/lib/components/files/files.component.ts","../../../../projects/aca-content/src/lib/components/files/files.component.html","../../../../projects/aca-content/src/lib/components/libraries-base/libraries-base.component.ts","../../../../projects/aca-content/src/lib/components/libraries-base/libraries-base.component.html","../../../../projects/aca-content/src/lib/components/libraries/libraries.component.ts","../../../../projects/aca-content/src/lib/components/libraries/libraries.component.html","../../../../projects/aca-content/src/lib/components/favorite-libraries/favorite-libraries.component.ts","../../../../projects/aca-content/src/lib/components/favorite-libraries/favorite-libraries.component.html","../../../../projects/aca-content/src/lib/components/search/search-input-control/search-input-control.component.ts","../../../../projects/aca-content/src/lib/components/search/search-input-control/search-input-control.component.html","../../../../projects/aca-content/src/lib/components/search/search-libraries-results/search-libraries-query-builder.service.ts","../../../../projects/aca-content/src/lib/components/search/search-input/search-input.component.ts","../../../../projects/aca-content/src/lib/components/search/search-input/search-input.component.html","../../../../projects/aca-content/src/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.ts","../../../../projects/aca-content/src/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.html","../../../../projects/aca-content/src/lib/components/search/search-action-menu/search-action-menu.component.ts","../../../../projects/aca-content/src/lib/components/search/search-action-menu/search-action-menu.component.html","../../../../projects/aca-content/src/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.ts","../../../../projects/aca-content/src/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.html","../../../../projects/aca-content/src/lib/pipes/is-feature-supported.pipe.ts","../../../../projects/aca-content/src/lib/services/saved-searches-context.service.ts","../../../../projects/aca-content/src/lib/components/search/search-save/dialog/unique-search-name-validator.ts","../../../../projects/aca-content/src/lib/components/search/search-save/dialog/save-search-dialog.component.ts","../../../../projects/aca-content/src/lib/components/search/search-save/dialog/save-search-dialog.component.html","../../../../projects/aca-content/src/lib/components/search/search-save/directive/save-search.directive.ts","../../../../projects/aca-content/src/lib/components/search/search-results/search-results.component.ts","../../../../projects/aca-content/src/lib/components/search/search-results/search-results.component.html","../../../../projects/aca-content/src/lib/components/search/search-libraries-results/search-libraries-results.component.ts","../../../../projects/aca-content/src/lib/components/search/search-libraries-results/search-libraries-results.component.html","../../../../projects/aca-content/src/lib/components/favorites/favorites.component.ts","../../../../projects/aca-content/src/lib/components/favorites/favorites.component.html","../../../../projects/aca-content/src/lib/components/recent-files/recent-files.component.ts","../../../../projects/aca-content/src/lib/components/recent-files/recent-files.component.html","../../../../projects/aca-content/src/lib/components/shared-files/shared-files.component.ts","../../../../projects/aca-content/src/lib/components/shared-files/shared-files.component.html","../../../../projects/aca-content/src/lib/components/details/details.component.ts","../../../../projects/aca-content/src/lib/components/details/details.component.html","../../../../projects/aca-content/src/lib/components/home/home.component.ts","../../../../projects/aca-content/src/lib/components/view-profile/view-profile.component.ts","../../../../projects/aca-content/src/lib/components/view-profile/view-profile.component.html","../../../../projects/aca-content/src/lib/components/view-profile/view-profile.guard.ts","../../../../projects/aca-content/src/lib/components/shared-link-view/shared-link-view.component.ts","../../../../projects/aca-content/src/lib/components/shared-link-view/shared-link-view.component.html","../../../../projects/aca-content/src/lib/components/trashcan/trashcan.component.ts","../../../../projects/aca-content/src/lib/components/trashcan/trashcan.component.html","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-marked-options.ts","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.ts","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.html","../../../../projects/aca-content/src/lib/components/search/search-save/dialog/delete/saved-search-delete-dialog.component.ts","../../../../projects/aca-content/src/lib/components/search/search-save/dialog/delete/saved-search-delete-dialog.component.html","../../../../projects/aca-content/src/lib/components/search/search-save/dialog/edit/saved-search-edit-dialog.component.ts","../../../../projects/aca-content/src/lib/components/search/search-save/dialog/edit/saved-search-edit-dialog.component.html","../../../../projects/aca-content/src/lib/components/search/search-save/list/saved-searches-list-ui.service.ts","../../../../projects/aca-content/src/lib/components/search/search-save/list/smart-list/saved-searches-list-schema.ts","../../../../projects/aca-content/src/lib/components/search/search-save/list/ui-list/saved-searches-list.ui-component.ts","../../../../projects/aca-content/src/lib/components/search/search-save/list/ui-list/saved-searches-list.ui-component.html","../../../../projects/aca-content/src/lib/components/search/search-save/list/smart-list/saved-searches-smart-list.component.ts","../../../../projects/aca-content/src/lib/components/search/search-save/list/smart-list/saved-searches-smart-list.component.html","../../../../projects/aca-content/src/lib/components/library-list/library-list.component.ts","../../../../projects/aca-content/src/lib/components/library-list/library-list.component.html","../../../../projects/aca-content/src/lib/aca-content.routes.ts","../../../../projects/aca-content/src/lib/components/upload-files-dialog/upload-files-dialog.component.ts","../../../../projects/aca-content/src/lib/components/upload-files-dialog/upload-files-dialog.component.html","../../../../projects/aca-content/src/lib/components/dl-custom-components/tags-column/tags-column.component.ts","../../../../projects/aca-content/src/lib/components/common/user-info/user-info.component.ts","../../../../projects/aca-content/src/lib/components/common/user-info/user-info.component.html","../../../../projects/aca-content/src/lib/components/sidenav/components/sidenav-header.component.ts","../../../../projects/aca-content/src/lib/components/sidenav/components/sidenav-header.component.html","../../../../projects/aca-content/src/lib/components/sidenav/directives/action.directive.ts","../../../../projects/aca-content/src/lib/components/sidenav/directives/active-link.directive.ts","../../../../projects/aca-content/src/lib/components/sidenav/components/expand-menu.component.ts","../../../../projects/aca-content/src/lib/components/sidenav/components/expand-menu.component.html","../../../../projects/aca-content/src/lib/components/sidenav/sidenav.component.ts","../../../../projects/aca-content/src/lib/components/sidenav/sidenav.component.html","../../../../projects/aca-content/src/lib/components/sidenav/user-menu/user-menu.component.ts","../../../../projects/aca-content/src/lib/components/sidenav/user-menu/user-menu.component.html","../../../../projects/aca-content/src/lib/components/search/search-results-row/search-results-row.component.ts","../../../../projects/aca-content/src/lib/components/search/search-results-row/search-results-row.component.html","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.ts","../../../../projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.html","../../../../projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.ts","../../../../projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.html","../../../../projects/aca-content/src/lib/aca-content.module.ts","../../../../projects/aca-content/src/lib/store/initial-state.ts","../../../../projects/aca-content/src/public-api.ts","../../../../projects/aca-content/src/alfresco-aca-content.ts"],"sourcesContent":["/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Action } from '@ngrx/store';\nimport {\n  AppState,\n  NodeActionTypes,\n  SetUserProfileAction,\n  SetCurrentFolderAction,\n  SetCurrentUrlAction,\n  SetSelectedNodesAction,\n  SetRepositoryInfoAction,\n  SetInfoDrawerStateAction,\n  SetInfoDrawerMetadataAspectAction,\n  SetCurrentNodeVersionAction,\n  SetFileUploadingDialogAction,\n  SetInfoDrawerPreviewStateAction,\n  AppActionTypes,\n  ShowLoaderAction,\n  INITIAL_APP_STATE,\n  SetSearchItemsTotalCountAction\n} from '@alfresco/aca-shared/store';\n\nexport function appReducer(state: AppState = INITIAL_APP_STATE, action: Action): AppState {\n  let newState: AppState;\n\n  switch (action.type) {\n    case NodeActionTypes.SetSelection:\n      newState = updateSelectedNodes(state, action as SetSelectedNodesAction);\n      break;\n    case AppActionTypes.SetUserProfile:\n      newState = updateUser(state, action as SetUserProfileAction);\n      break;\n    case AppActionTypes.SetCurrentFolder:\n      newState = updateCurrentFolder(state, action as SetCurrentFolderAction);\n      break;\n    case AppActionTypes.SetCurrentVersion:\n      newState = updateCurrentNodeVersion(state, action as SetCurrentNodeVersionAction);\n      break;\n    case AppActionTypes.SetCurrentUrl:\n      newState = updateCurrentUrl(state, action as SetCurrentUrlAction);\n      break;\n    case AppActionTypes.ToggleInfoDrawer:\n      newState = toggleInfoDrawer(state);\n      break;\n    case AppActionTypes.SetInfoDrawerState:\n      newState = setInfoDrawer(state, action as SetInfoDrawerStateAction);\n      break;\n    case AppActionTypes.SetInfoDrawerMetadataAspect:\n      newState = setInfoDrawerAspect(state, action as SetInfoDrawerMetadataAspectAction);\n      break;\n    case AppActionTypes.SetRepositoryInfo:\n      newState = updateRepositoryStatus(state, action as SetRepositoryInfoAction);\n      break;\n    case AppActionTypes.SetFileUploadingDialog:\n      newState = setUploadDialogVisibility(state, action as SetFileUploadingDialogAction);\n      break;\n    case AppActionTypes.ShowInfoDrawerPreview:\n      newState = showInfoDrawerPreview(state);\n      break;\n    case AppActionTypes.SetInfoDrawerPreviewState:\n      newState = setInfoDrawerPreview(state, action as SetInfoDrawerPreviewStateAction);\n      break;\n    case AppActionTypes.ShowLoaderAction:\n      newState = showLoader(state, action as ShowLoaderAction);\n      break;\n    case AppActionTypes.SetSearchItemsTotalCount:\n      newState = {\n        ...state,\n        searchItemsTotalCount: (action as SetSearchItemsTotalCountAction).payload\n      };\n      break;\n    default:\n      newState = { ...state };\n  }\n\n  return newState;\n}\n\nfunction updateUser(state: AppState, action: SetUserProfileAction): AppState {\n  return { ...state, user: { ...action.payload } };\n}\n\nfunction updateCurrentFolder(state: AppState, action: SetCurrentFolderAction) {\n  const newState = { ...state };\n  newState.navigation.currentFolder = action.payload;\n  return newState;\n}\n\nfunction updateCurrentNodeVersion(state: AppState, action: SetCurrentNodeVersionAction) {\n  const newState = { ...state };\n  newState.currentNodeVersion = action.payload;\n  return newState;\n}\n\nfunction updateCurrentUrl(state: AppState, action: SetCurrentUrlAction) {\n  const newState = { ...state };\n  newState.navigation.url = action.payload;\n  return newState;\n}\n\nfunction toggleInfoDrawer(state: AppState) {\n  const newState = { ...state };\n\n  let value = state.infoDrawerOpened;\n  if (state.selection.isEmpty) {\n    value = false;\n  } else {\n    value = !value;\n  }\n\n  newState.infoDrawerOpened = value;\n\n  return newState;\n}\n\nfunction showInfoDrawerPreview(state: AppState) {\n  const newState = { ...state };\n\n  let value = state.infoDrawerPreview;\n  if (state.selection.isEmpty) {\n    value = false;\n  } else {\n    value = !value;\n  }\n\n  newState.infoDrawerPreview = value;\n\n  return newState;\n}\n\nfunction updateSelectedNodes(state: AppState, action: SetSelectedNodesAction): AppState {\n  const newState = { ...state };\n  const nodes = [...action.payload];\n  const count = nodes.length;\n  const isEmpty = nodes.length === 0;\n\n  let first = null;\n  let last = null;\n  let file = null;\n  let folder = null;\n  let library = null;\n\n  if (nodes.length > 0) {\n    first = nodes[0];\n    last = nodes[nodes.length - 1];\n\n    if (nodes.length === 1) {\n      file = nodes.find(\n        (entity: any) =>\n          // workaround Shared\n          !!(entity.entry.isFile || entity.entry.nodeId || entity.entry.sharedByUser)\n      );\n      folder = nodes.find((entity: any) => entity.entry.isFolder);\n    }\n  }\n\n  const libraries: any[] = [...action.payload].filter((node: any) => node.isLibrary);\n  if (libraries.length === 1) {\n    library = libraries[0];\n  }\n\n  if (isEmpty) {\n    newState.infoDrawerOpened = false;\n  }\n\n  newState.selection = {\n    count,\n    nodes,\n    isEmpty,\n    first,\n    last,\n    file,\n    folder,\n    libraries,\n    library\n  };\n  return newState;\n}\n\nconst setInfoDrawer = (state: AppState, action: SetInfoDrawerStateAction) => ({\n  ...state,\n  infoDrawerOpened: action.payload\n});\n\nconst setInfoDrawerPreview = (state: AppState, action: SetInfoDrawerPreviewStateAction) => ({\n  ...state,\n  infoDrawerPreview: action.payload\n});\n\nconst setInfoDrawerAspect = (state: AppState, action: SetInfoDrawerMetadataAspectAction) => ({\n  ...state,\n  infoDrawerMetadataAspect: action.payload\n});\n\nfunction updateRepositoryStatus(state: AppState, action: SetRepositoryInfoAction) {\n  const newState = { ...state };\n  newState.repository = action.payload;\n  return newState;\n}\n\nfunction setUploadDialogVisibility(state: AppState, action: SetFileUploadingDialogAction): AppState {\n  const newState = { ...state };\n  newState.fileUploadingDialog = action.payload;\n  return newState;\n}\n\nfunction showLoader(state: AppState, action: ShowLoaderAction): AppState {\n  const newState = { ...state };\n  newState.showLoader = action.payload;\n  return newState;\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { inject, Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { AppActionTypes, ReloadDocumentListAction, ResetSelectionAction } from '@alfresco/aca-shared/store';\nimport { DocumentListService } from '@alfresco/adf-content-services';\n\n@Injectable()\nexport class AppEffects {\n  actions$ = inject(Actions);\n  documentListService = inject(DocumentListService);\n\n  reload = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ReloadDocumentListAction>(AppActionTypes.ReloadDocumentList),\n        map(() => {\n          this.documentListService.reload();\n        })\n      ),\n    { dispatch: false }\n  );\n\n  resetSelection = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ResetSelectionAction>(AppActionTypes.ResetSelection),\n        map(() => {\n          this.documentListService.resetSelection();\n        })\n      ),\n    { dispatch: false }\n  );\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AppStore, getRepositoryStatus } from '@alfresco/aca-shared/store';\nimport { take, map, catchError, mergeMap } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { ContentApiService } from '@alfresco/aca-shared';\nimport { DirectAccessUrlEntry } from '@alfresco/js-api';\nimport { ContentVersionService } from '@alfresco/adf-content-services';\n\n@Injectable({ providedIn: 'root' })\nexport class ContentUrlService extends ContentVersionService {\n  private readonly store = inject(Store<AppStore>);\n  private readonly contentApiService = inject(ContentApiService);\n\n  getNodeContentUrl(nodeId: string, attachment = true): Observable<string> {\n    return this.isDirectAccessUrlEnabled().pipe(\n      mergeMap((dauEnabled) => {\n        if (dauEnabled) {\n          return this.contentApiService.requestNodeDirectAccessUrl(nodeId).pipe(\n            map((dauObj: DirectAccessUrlEntry) => dauObj.entry.contentUrl),\n            catchError(() => of(this.contentApiService.getContentUrl(nodeId, true)))\n          );\n        } else {\n          return of(this.contentApiService.getContentUrl(nodeId, attachment));\n        }\n      })\n    );\n  }\n\n  getVersionContentUrl(nodeId: string, versionId: string, attachment = true): Observable<string> {\n    return this.isDirectAccessUrlEnabled().pipe(\n      mergeMap((dauEnabled) => {\n        if (dauEnabled) {\n          return this.contentApiService.requestVersionDirectAccessUrl(nodeId, versionId).pipe(\n            map((dauObj: DirectAccessUrlEntry) => dauObj.entry.contentUrl),\n            catchError(() => of(this.contentApiService.getVersionContentUrl(nodeId, versionId, true)))\n          );\n        } else {\n          return of(this.contentApiService.getVersionContentUrl(nodeId, versionId, attachment));\n        }\n      })\n    );\n  }\n\n  private isDirectAccessUrlEnabled(): Observable<boolean> {\n    return this.store.select(getRepositoryStatus).pipe(\n      take(1),\n      map((repository) => !!repository?.status?.isDirectAccessUrlEnabled)\n    );\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AppStore, DownloadNodesAction, getAppSelection, getCurrentVersion, NodeActionTypes, NodeInfo } from '@alfresco/aca-shared/store';\nimport { DownloadZipDialogComponent } from '@alfresco/adf-content-services';\nimport { NodeEntry, Version } from '@alfresco/js-api';\nimport { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { map, take } from 'rxjs/operators';\nimport { ContentApiService } from '@alfresco/aca-shared';\nimport { ContentUrlService } from '../../services/content-url.service';\n\n@Injectable()\nexport class DownloadEffects {\n  private store = inject(Store<AppStore>);\n  private actions$ = inject(Actions);\n  private contentApi = inject(ContentApiService);\n  private dialog = inject(MatDialog);\n  private contentUrlService = inject(ContentUrlService);\n\n  downloadNode$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<DownloadNodesAction>(NodeActionTypes.Download),\n        map((action) => {\n          if (action.payload?.length > 0) {\n            this.downloadNodes(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.store\n                    .select(getCurrentVersion)\n                    .pipe(take(1))\n                    .subscribe((version) => {\n                      if (version) {\n                        this.downloadFileVersion(selection.nodes[0].entry, version.entry);\n                      } else {\n                        this.downloadNodes(selection.nodes, action.configuration?.focusedElementOnCloseSelector);\n                      }\n                    });\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  private downloadNodes(toDownload: Array<NodeEntry>, focusedElementSelector?: string) {\n    const nodes = toDownload.map((node) => {\n      const { id, nodeId, name, isFile, isFolder } = node.entry as any;\n\n      return {\n        id: this.isSharedLinkPreview ? id : nodeId || id,\n        name,\n        isFile,\n        isFolder\n      };\n    });\n\n    if (!nodes || nodes.length === 0) {\n      return;\n    }\n\n    if (nodes.length === 1) {\n      this.downloadNode(nodes[0], focusedElementSelector);\n    } else {\n      this.downloadZip(nodes, focusedElementSelector);\n    }\n  }\n\n  private downloadNode(node: NodeInfo, focusedElementSelector?: string) {\n    if (node) {\n      if (node.isFolder) {\n        this.downloadZip([node], focusedElementSelector);\n      } else {\n        this.downloadFile(node);\n      }\n    }\n  }\n\n  private downloadFile(node: NodeInfo) {\n    if (node && !this.isSharedLinkPreview) {\n      this.contentUrlService.getNodeContentUrl(node.id, true).subscribe((contentUrl) => {\n        this.download(contentUrl, node.name);\n      });\n    }\n\n    if (node && this.isSharedLinkPreview) {\n      this.download(this.contentApi.getSharedLinkContent(node.id, false), node.name);\n    }\n  }\n\n  private downloadFileVersion(node: NodeInfo, version: Version) {\n    if (node && version) {\n      this.contentUrlService.getVersionContentUrl(node.id, version.id, true).subscribe((contentUrl) => {\n        this.download(contentUrl, node.name);\n      });\n    }\n  }\n\n  private downloadZip(nodes: Array<NodeInfo>, focusedElementSelector?: string) {\n    if (nodes && nodes.length > 0) {\n      const nodeIds = nodes.map((node) => node.id);\n\n      this.dialog\n        .open(DownloadZipDialogComponent, {\n          width: '600px',\n          disableClose: true,\n          data: {\n            nodeIds\n          }\n        })\n        .afterClosed()\n        .subscribe(() => this.focusAfterClose(focusedElementSelector));\n    }\n  }\n\n  private download(url: string, fileName: string) {\n    if (url && fileName) {\n      const link = document.createElement('a');\n\n      link.style.display = 'none';\n      link.download = fileName;\n      link.href = url;\n\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n    }\n  }\n\n  private get isSharedLinkPreview() {\n    return location.href.includes('/preview/s/');\n  }\n\n  private focusAfterClose(focusedElementSelector: string): void {\n    if (focusedElementSelector) {\n      document.querySelector<HTMLElement>(focusedElementSelector)?.focus();\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Observable, Subject, of, zip, from } from 'rxjs';\nimport { ThumbnailService, TranslationService } from '@alfresco/adf-core';\nimport {\n  AlfrescoApiService,\n  DocumentListService,\n  ContentNodeSelectorComponent,\n  ContentNodeSelectorComponentData,\n  ContentNodeDialogService,\n  ShareDataRow,\n  NodeAction,\n  ContentService\n} from '@alfresco/adf-content-services';\nimport { NodeEntry, Node, SitePaging, NodeChildAssociationPaging, NodeChildAssociationEntry, NodesApi, Site, SitePagingList } from '@alfresco/js-api';\nimport { ContentApiService } from '@alfresco/aca-shared';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\n\ntype BatchOperationType = Extract<NodeAction, 'COPY' | 'MOVE'>;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NodeActionsService {\n  contentCopied: Subject<NodeEntry[]> = new Subject<NodeEntry[]>();\n  contentMoved: Subject<any> = new Subject<any>();\n  moveDeletedEntries: any[] = [];\n  isSitesDestinationAvailable = false;\n\n  _nodesApi: NodesApi;\n  get nodesApi(): NodesApi {\n    this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());\n    return this._nodesApi;\n  }\n\n  constructor(\n    private contentService: ContentService,\n    private contentApi: ContentApiService,\n    private dialog: MatDialog,\n    private documentListService: DocumentListService,\n    private apiService: AlfrescoApiService,\n    private translation: TranslationService,\n    private thumbnailService: ThumbnailService\n  ) {}\n\n  /**\n   * Copy node list\n   *\n   * @param contentEntities nodes to copy\n   * @param permission permission which is needed to apply the action\n   * @param focusedElementOnCloseSelector element's selector which should be autofocused after closing modal\n   */\n  copyNodes(contentEntities: any[], permission?: string, focusedElementOnCloseSelector?: string): Subject<string> {\n    return this.doBatchOperation(NodeAction.COPY, contentEntities, permission, focusedElementOnCloseSelector);\n  }\n\n  /**\n   * Move node list\n   *\n   * @param contentEntities nodes to move\n   * @param permission permission which is needed to apply the action\n   * @param focusedElementOnCloseSelector element's selector which should be autofocused after closing modal\n   */\n  moveNodes(contentEntities: any[], permission?: string, focusedElementOnCloseSelector?: string): Subject<string> {\n    return this.doBatchOperation(NodeAction.MOVE, contentEntities, permission, focusedElementOnCloseSelector);\n  }\n\n  /**\n   * General method for performing the given operation (copy|move) to multiple nodes\n   *\n   * @param action the action to perform (copy|move)\n   * @param contentEntities the contentEntities which have to have the action performed on\n   * @param permission permission which is needed to apply the action\n   * @param focusedElementOnCloseSelector element's selector which should be autofocused after closing modal\n   */\n  doBatchOperation(action: BatchOperationType, contentEntities: any[], permission?: string, focusedElementOnCloseSelector?: string): Subject<string> {\n    const observable: Subject<string> = new Subject<string>();\n\n    if (!this.isEntryEntitiesArray(contentEntities)) {\n      observable.error(new Error(JSON.stringify({ error: { statusCode: 400 } })));\n    } else if (this.checkPermission(action, contentEntities, permission)) {\n      const destinationSelection = this.getContentNodeSelection(action, contentEntities, focusedElementOnCloseSelector);\n      destinationSelection.subscribe((selections: Node[]) => {\n        const contentEntry = contentEntities[0].entry;\n        // Check if there's nodeId for Shared Files\n        const contentEntryId = contentEntry.nodeId || contentEntry.id;\n        const type = contentEntry.isFolder ? 'folder' : 'content';\n        const batch: any[] = [];\n\n        // consider only first item in the selection\n        const selection = selections[0];\n        let action$: Observable<any>;\n\n        if (action === NodeAction.MOVE && contentEntities.length === 1 && type === 'content') {\n          action$ = this.documentListService.moveNode(contentEntryId, selection.id);\n        } else {\n          contentEntities.forEach((node) => {\n            // batch.push(this.copyNodeAction(node.entry, selection.id));\n            batch.push(this[`${action.toLowerCase()}NodeAction`](node.entry, selection.id));\n          });\n          action$ = zip(...batch);\n        }\n\n        action$.subscribe((newContent) => {\n          observable.next(`OPERATION.SUCCESS.${type.toUpperCase()}.${action.toUpperCase()}`);\n\n          const processedData = this.processResponse(newContent);\n          if (action === NodeAction.COPY) {\n            this.contentCopied.next(processedData.succeeded);\n          } else if (action === NodeAction.MOVE) {\n            this.contentMoved.next(processedData);\n          }\n        }, observable.error.bind(observable));\n      });\n    } else {\n      observable.error(new Error(JSON.stringify({ error: { statusCode: 403 } })));\n    }\n\n    return observable;\n  }\n\n  isEntryEntitiesArray(contentEntities: any[]): boolean {\n    if (contentEntities?.length) {\n      const nonEntryNode = contentEntities.find((node) => !(node?.entry?.nodeId || node?.entry?.id));\n      return !nonEntryNode;\n    }\n    return false;\n  }\n\n  checkPermission(action: BatchOperationType, contentEntities: any[], permission?: string) {\n    const notAllowedNode = contentEntities.find((node) => !this.isActionAllowed(action, node.entry, permission));\n    return !notAllowedNode;\n  }\n\n  getEntryParentId(nodeEntry: Node) {\n    let entryParentId = '';\n\n    if (nodeEntry.parentId) {\n      entryParentId = nodeEntry.parentId;\n    } else if (nodeEntry.path?.elements?.length) {\n      entryParentId = nodeEntry.path.elements[nodeEntry.path.elements.length - 1].id;\n    }\n\n    return entryParentId;\n  }\n\n  getContentNodeSelection(action: NodeAction, contentEntities: NodeEntry[], focusedElementOnCloseSelector?: string): Subject<Node[]> {\n    const currentParentFolderId = this.getEntryParentId(contentEntities[0].entry);\n\n    const customDropdown = new SitePaging({\n      list: {\n        entries: [\n          {\n            entry: {\n              guid: '-my-',\n              title: this.translation.instant('APP.BROWSE.PERSONAL.SIDENAV_LINK.LABEL')\n            } as Site\n          },\n          {\n            entry: {\n              guid: '-mysites-',\n              title: this.translation.instant('APP.BROWSE.LIBRARIES.MENU.MY_LIBRARIES.SIDENAV_LINK.LABEL')\n            } as Site\n          }\n        ]\n      } as SitePagingList\n    });\n\n    const title = this.getTitleTranslation(action, contentEntities);\n\n    this.isSitesDestinationAvailable = false;\n    const data: ContentNodeSelectorComponentData = {\n      selectionMode: 'single',\n      title,\n      currentFolderId: currentParentFolderId,\n      actionName: action,\n      dropdownHideMyFiles: true,\n      dropdownSiteList: customDropdown,\n      rowFilter: this.rowFilter.bind(this),\n      imageResolver: this.imageResolver.bind(this),\n      isSelectionValid: this.canCopyMoveInsideIt.bind(this),\n      breadcrumbTransform: this.customizeBreadcrumb.bind(this),\n      select: new Subject<Node[]>(),\n      excludeSiteContent: ContentNodeDialogService.nonDocumentSiteContent\n    };\n\n    this.dialog\n      .open(ContentNodeSelectorComponent, {\n        data,\n        panelClass: 'adf-content-node-selector-dialog',\n        width: '630px',\n        role: 'dialog'\n      })\n      .afterClosed()\n      .subscribe(() => this.focusAfterClose(focusedElementOnCloseSelector));\n\n    data.select.subscribe({\n      complete: this.close.bind(this)\n    });\n\n    return data.select;\n  }\n\n  getTitleTranslation(action: string, nodes: NodeEntry[] = []): string {\n    let keyPrefix = 'ITEMS';\n    let name = '';\n\n    if (nodes.length === 1 && nodes[0].entry.name) {\n      name = nodes[0].entry.name;\n      keyPrefix = 'ITEM';\n    }\n\n    const number = nodes.length;\n    return this.translation.instant(`NODE_SELECTOR.${action.toUpperCase()}_${keyPrefix}`, { name, number });\n  }\n\n  private canCopyMoveInsideIt(entry: Node): boolean {\n    return this.hasEntityCreatePermission(entry) && !this.isSite(entry);\n  }\n\n  private hasEntityCreatePermission(entry: Node): boolean {\n    return this.contentService.hasAllowableOperations(entry, 'create');\n  }\n\n  private isSite(entry) {\n    return !!entry.guid || entry.nodeType === 'st:site' || entry.nodeType === 'st:sites';\n  }\n\n  close() {\n    this.dialog.closeAll();\n  }\n\n  // todo: review this approach once 5.2.3 is out\n  private customizeBreadcrumb(node: Node) {\n    if (node?.path?.elements) {\n      const elements = node.path.elements;\n\n      if (elements.length > 1) {\n        if (elements[1].name === 'User Homes') {\n          elements.splice(0, 2);\n\n          // make sure first item is 'Personal Files'\n          if (elements[0]) {\n            elements[0].name = this.translation.instant('APP.BROWSE.PERSONAL.TITLE');\n            elements[0].id = '-my-';\n          } else {\n            node.name = this.translation.instant('APP.BROWSE.PERSONAL.TITLE');\n          }\n        } else if (elements[1].name === 'Sites') {\n          this.normalizeSitePath(node);\n        }\n      } else if (elements.length === 1) {\n        if (node.name === 'Sites') {\n          node.name = this.translation.instant('APP.BROWSE.LIBRARIES.MENU.MY_LIBRARIES.TITLE');\n          elements.splice(0, 1);\n        }\n      }\n    } else if (node === null && this.isSitesDestinationAvailable) {\n      node = {\n        name: this.translation.instant('APP.BROWSE.LIBRARIES.MENU.MY_LIBRARIES.TITLE'),\n        path: { elements: [] }\n      } as any;\n    }\n\n    return node;\n  }\n\n  // todo: review this approach once 5.2.3 is out\n  private normalizeSitePath(node: Node) {\n    const elements = node.path.elements;\n\n    // remove 'Company Home'\n    elements.splice(0, 1);\n\n    // replace first item with 'File Libraries'\n    elements[0].name = this.translation.instant('APP.BROWSE.LIBRARIES.MENU.MY_LIBRARIES.TITLE');\n    elements[0].id = '-mysites-';\n\n    if (this.isSiteContainer(node)) {\n      // rename 'documentLibrary' entry to the target site display name\n      // clicking on the breadcrumb entry loads the site content\n      node.name = elements[1].name;\n\n      // remove the site entry\n      elements.splice(1, 1);\n    } else {\n      // remove 'documentLibrary' in the middle of the path\n      const docLib = elements.findIndex((el) => el.name === 'documentLibrary');\n      if (docLib > -1) {\n        elements.splice(docLib, 1);\n      }\n    }\n  }\n\n  isSiteContainer(node: Node): boolean {\n    if (node?.aspectNames?.length > 0) {\n      return node.aspectNames.indexOf('st:siteContainer') >= 0;\n    }\n    return false;\n  }\n\n  copyNodeAction(nodeEntry: any, selectionId: string): Observable<any> {\n    if (nodeEntry.isFolder) {\n      return this.copyFolderAction(nodeEntry, selectionId);\n    } else {\n      // any other type is treated as 'content'\n      return this.copyContentAction(nodeEntry, selectionId);\n    }\n  }\n\n  copyContentAction(contentEntry: any, selectionId: string, oldName?: string): Observable<any> {\n    const _oldName = oldName || contentEntry.name;\n    // Check if there's nodeId for Shared Files\n    const contentEntryId = contentEntry.nodeId || contentEntry.id;\n\n    // use local method until new name parameter is added on ADF copyNode\n    return this.copyNode(contentEntryId, selectionId, _oldName).pipe(\n      catchError((err) => {\n        let errStatusCode;\n        try {\n          const {\n            error: { statusCode }\n          } = JSON.parse(err.message);\n          errStatusCode = statusCode;\n        } catch (e) {\n          //\n        }\n\n        if (errStatusCode && errStatusCode === 409) {\n          return this.copyContentAction(contentEntry, selectionId, this.getNewNameFrom(_oldName, contentEntry.name));\n        } else {\n          // do not throw error, to be able to show message in case of partial copy of files\n          return of(err || 'Server error');\n        }\n      })\n    );\n  }\n\n  copyFolderAction(contentEntry: any, selectionId: string): Observable<any> {\n    // Check if there's nodeId for Shared Files\n    const contentEntryId = contentEntry.nodeId || contentEntry.id;\n    let $destinationFolder: Observable<any>;\n    let $childrenToCopy: Observable<any>;\n    let newDestinationFolder;\n\n    return this.copyNode(contentEntryId, selectionId, contentEntry.name).pipe(\n      catchError((err) => {\n        let errStatusCode;\n        try {\n          const {\n            error: { statusCode }\n          } = JSON.parse(err.message);\n          errStatusCode = statusCode;\n        } catch {}\n\n        if (errStatusCode && errStatusCode === 409) {\n          $destinationFolder = this.getChildByName(selectionId, contentEntry.name);\n          $childrenToCopy = this.getNodeChildren(contentEntryId);\n\n          return $destinationFolder.pipe(\n            mergeMap((destination) => {\n              newDestinationFolder = destination;\n              return $childrenToCopy;\n            }),\n            mergeMap((nodesToCopy) => {\n              const batch = [];\n              nodesToCopy.list.entries.forEach((node) => {\n                if (node.entry.isFolder) {\n                  batch.push(this.copyFolderAction(node.entry, newDestinationFolder.entry.id));\n                } else {\n                  batch.push(this.copyContentAction(node.entry, newDestinationFolder.entry.id));\n                }\n              });\n\n              if (!batch.length) {\n                return of({});\n              }\n              return zip(...batch);\n            })\n          );\n        } else {\n          // do not throw error, to be able to show message in case of partial copy of files\n          return of(err || 'Server error');\n        }\n      })\n    );\n  }\n\n  moveNodeAction(nodeEntry, selectionId: string): Observable<any> {\n    this.moveDeletedEntries = [];\n\n    if (nodeEntry.isFolder) {\n      const initialParentId = nodeEntry.parentId;\n\n      return this.moveFolderAction(nodeEntry, selectionId).pipe(\n        mergeMap((newContent) => {\n          // take no extra action, if folder is moved to the same location\n          if (initialParentId === selectionId) {\n            return of(newContent);\n          }\n\n          const flattenResponse = this.flatten(newContent);\n          const processedData = this.processResponse(flattenResponse);\n\n          // else, check if moving this nodeEntry succeeded for ALL of its nodes\n          if (processedData.failed.length === 0) {\n            // check if folder still exists on location\n            return this.getChildByName(initialParentId, nodeEntry.name).pipe(\n              mergeMap((folderOnInitialLocation) => {\n                if (folderOnInitialLocation) {\n                  // Check if there's nodeId for Shared Files\n                  const nodeEntryId = nodeEntry.nodeId || nodeEntry.id;\n                  // delete it from location\n                  return this.contentApi.deleteNode(nodeEntryId).pipe(\n                    mergeMap(() => {\n                      this.moveDeletedEntries.push(nodeEntry);\n                      return of(newContent);\n                    })\n                  );\n                }\n                return of(newContent);\n              })\n            );\n          }\n          return of(newContent);\n        })\n      );\n    } else {\n      // any other type is treated as 'content'\n      return this.moveContentAction(nodeEntry, selectionId);\n    }\n  }\n\n  moveFolderAction(contentEntry, selectionId: string): Observable<any> {\n    // Check if there's nodeId for Shared Files\n    const contentEntryId = contentEntry.nodeId || contentEntry.id;\n    const initialParentId = this.getEntryParentId(contentEntry);\n    let $destinationFolder: Observable<any>;\n    let $childrenToMove: Observable<any>;\n    let newDestinationFolder;\n\n    return this.documentListService.moveNode(contentEntryId, selectionId).pipe(\n      map((itemMoved) => ({ itemMoved, initialParentId })),\n      catchError((err) => {\n        let errStatusCode;\n        try {\n          const {\n            error: { statusCode }\n          } = JSON.parse(err.message);\n          errStatusCode = statusCode;\n        } catch (e) {\n          //\n        }\n\n        if (errStatusCode && errStatusCode === 409) {\n          $destinationFolder = this.getChildByName(selectionId, contentEntry.name);\n          $childrenToMove = this.getNodeChildren(contentEntryId);\n\n          return $destinationFolder.pipe(\n            mergeMap((destination) => {\n              newDestinationFolder = destination;\n              return $childrenToMove;\n            }),\n            mergeMap((childrenToMove) => {\n              const batch: any[] = [];\n              childrenToMove.list.entries.forEach((node) => {\n                if (node.entry.isFolder) {\n                  batch.push(this.moveFolderAction(node.entry, newDestinationFolder.entry.id));\n                } else {\n                  batch.push(this.moveContentAction(node.entry, newDestinationFolder.entry.id));\n                }\n              });\n\n              if (!batch.length) {\n                return of(batch);\n              }\n              return zip(...batch);\n            })\n          );\n        } else {\n          // do not throw error, to be able to show message in case of partial move of files\n          return of(err);\n        }\n      })\n    );\n  }\n\n  moveContentAction(contentEntry: any, selectionId: string) {\n    // Check if there's nodeId for Shared Files\n    const contentEntryId = contentEntry.nodeId || contentEntry.id;\n    const initialParentId = this.getEntryParentId(contentEntry);\n\n    return this.documentListService.moveNode(contentEntryId, selectionId).pipe(\n      map((itemMoved) => ({ itemMoved, initialParentId })),\n      catchError((err) =>\n        // do not throw error, to be able to show message in case of partial move of files\n        of(err)\n      )\n    );\n  }\n\n  getChildByName(parentId: string, name: string): Subject<NodeChildAssociationEntry> {\n    const matchedNodes = new Subject<any>();\n\n    this.getNodeChildren(parentId).subscribe(\n      (childrenNodes: NodeChildAssociationPaging) => {\n        const result = childrenNodes.list.entries.find((node) => node.entry.name === name);\n\n        if (result) {\n          matchedNodes.next(result);\n        } else {\n          matchedNodes.next(null);\n        }\n      },\n      (err) => matchedNodes.error(err)\n    );\n    return matchedNodes;\n  }\n\n  private isActionAllowed(action: BatchOperationType, node: Node, permission?: string): boolean {\n    if (action === NodeAction.COPY) {\n      return true;\n    }\n    return this.contentService.hasAllowableOperations(node, permission);\n  }\n\n  private rowFilter(row: ShareDataRow): boolean {\n    const node: Node = row.node.entry;\n\n    this.isSitesDestinationAvailable = !!node['guid'];\n    return !node.isFile && node.nodeType !== 'app:folderlink';\n  }\n\n  private imageResolver(row: ShareDataRow): string | null {\n    const entry: Node = row.node.entry;\n    if (!this.contentService.hasAllowableOperations(entry, 'update')) {\n      return this.thumbnailService.getMimeTypeIcon('disable/folder');\n    }\n\n    return null;\n  }\n\n  public getNewNameFrom(name: string, baseName?: string) {\n    const extensionMatch = name.match(/\\.[^/.]+$/);\n\n    // remove extension in case there is one\n    const fileExtension = extensionMatch ? extensionMatch[0] : '';\n    let extensionFree = extensionMatch ? name.slice(0, extensionMatch.index) : name;\n\n    let prefixNumber = 1;\n    let baseExtensionFree;\n\n    if (baseName) {\n      const baseExtensionMatch = baseName.match(/\\.[^/.]+$/);\n\n      // remove extension in case there is one\n      baseExtensionFree = baseExtensionMatch ? baseName.slice(0, baseExtensionMatch.index) : baseName;\n    }\n\n    if (!baseExtensionFree || baseExtensionFree !== extensionFree) {\n      // check if name already has integer appended on end:\n      const oldPrefix = extensionFree.match('-[0-9]+$');\n      if (oldPrefix) {\n        // if so, try to get the number at the end\n        const oldPrefixNumber = parseInt(oldPrefix[0].slice(1), 10);\n        if (oldPrefixNumber.toString() === oldPrefix[0].slice(1)) {\n          extensionFree = extensionFree.slice(0, oldPrefix.index);\n          prefixNumber = oldPrefixNumber + 1;\n        }\n      }\n    }\n    return extensionFree + '-' + prefixNumber + fileExtension;\n  }\n\n  /**\n   * Get children nodes of given parent node\n   *\n   * @param nodeId The id of the parent node\n   * @param params optional parameters\n   */\n  getNodeChildren(nodeId: string, params?: any): Observable<NodeChildAssociationPaging> {\n    return from(this.nodesApi.listNodeChildren(nodeId, params));\n  }\n\n  // Copied from ADF document-list.service, and added the name parameter\n  /**\n   * Copy a node to destination node\n   *\n   * @param nodeId The id of the node to be copied\n   * @param targetParentId The id of the folder-node where the node have to be copied to\n   * @param name The new name for the copy that would be added on the destination folder\n   */\n  copyNode(nodeId: string, targetParentId: string, name?: string) {\n    return from(this.nodesApi.copyNode(nodeId, { targetParentId, name }));\n  }\n\n  public flatten(nDimArray: any[]) {\n    if (!Array.isArray(nDimArray)) {\n      return nDimArray;\n    }\n\n    const nodeQueue = nDimArray.slice(0);\n    const resultingArray: any[] = [];\n\n    do {\n      nodeQueue.forEach((node) => {\n        if (Array.isArray(node)) {\n          nodeQueue.push(...node);\n        } else {\n          resultingArray.push(node);\n        }\n\n        const nodeIndex = nodeQueue.indexOf(node);\n        nodeQueue.splice(nodeIndex, 1);\n      });\n    } while (nodeQueue.length);\n\n    return resultingArray;\n  }\n\n  processResponse(data: any): any {\n    const moveStatus = {\n      succeeded: [],\n      failed: [],\n      partiallySucceeded: []\n    };\n\n    if (Array.isArray(data)) {\n      return data.reduce((acc, next) => {\n        if (next instanceof Error) {\n          acc.failed.push(next);\n        } else if (Array.isArray(next)) {\n          // if content of a folder was moved\n\n          const folderMoveResponseData = this.flatten(next);\n          const foundError = folderMoveResponseData.find((node) => node instanceof Error);\n          // data might contain also items of form: { itemMoved, initialParentId }\n          const foundEntry = folderMoveResponseData.find((node) => node.itemMoved?.entry || node?.entry);\n\n          if (!foundError) {\n            // consider success if NONE of the items from the folder move response is an error\n            acc.succeeded.push(next);\n          } else if (!foundEntry) {\n            // consider failed if NONE of the items has an entry\n            acc.failed.push(next);\n          } else {\n            // partially move folder\n            acc.partiallySucceeded.push(next);\n          }\n        } else {\n          acc.succeeded.push(next);\n        }\n\n        return acc;\n      }, moveStatus);\n    } else {\n      if (data.itemMoved?.entry || data?.entry) {\n        moveStatus.succeeded.push(data);\n      } else {\n        moveStatus.failed.push(data);\n      }\n\n      return moveStatus;\n    }\n  }\n\n  private focusAfterClose(focusedElementSelector: string): void {\n    if (focusedElementSelector) {\n      document.querySelector<HTMLElement>(focusedElementSelector)?.focus();\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CommonModule, NgOptimizedImage } from '@angular/common';\nimport { DIALOG_COMPONENT_DATA, LocalizedDatePipe, TimeAgoPipe, IconComponent, FileSizePipe } from '@alfresco/adf-core';\nimport { Node, SizeDetails } from '@alfresco/js-api';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ContentService, NodesApiService } from '@alfresco/adf-content-services';\nimport { catchError, concatMap, delay, expand, first, switchMap, take } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EMPTY, of, timer } from 'rxjs';\n\nclass NodeDetails {\n  name: string;\n  size: string;\n  location: string;\n  secondaryParentsPaths: string[];\n  created: Date;\n  modified: Date;\n  icon: string;\n  numberOfFiles: string | number;\n}\n\n@Component({\n  selector: 'app-node-info',\n  imports: [CommonModule, MatDividerModule, TimeAgoPipe, TranslatePipe, LocalizedDatePipe, IconComponent, NgOptimizedImage],\n  providers: [FileSizePipe],\n  templateUrl: './node-information.component.html',\n  styleUrls: ['./node-information.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-node-info' }\n})\nexport class NodeInformationComponent implements OnInit {\n  readonly contentService = inject(ContentService);\n  readonly nodesService = inject(NodesApiService);\n  readonly translateService = inject(TranslateService);\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly fileSizePipe = inject(FileSizePipe);\n\n  node: Node = inject(DIALOG_COMPONENT_DATA);\n  nodeDetails = new NodeDetails();\n\n  ngOnInit() {\n    this.nodeDetails.name = this.node.name;\n    this.nodeDetails.location = this.node.path.name;\n    this.nodeDetails.created = this.node.createdAt;\n    this.nodeDetails.modified = this.node.modifiedAt;\n    this.nodeDetails.icon = this.contentService.getNodeIcon(this.node);\n    this.nodesService\n      .listParents(this.node.id, { where: `(isPrimary=false and assocType='cm:contains')`, include: ['path'] })\n      .pipe(\n        take(1),\n        catchError(() => of(null))\n      )\n      .subscribe((parents) => {\n        this.nodeDetails.secondaryParentsPaths = parents != null ? parents.list.entries.map((entry) => entry.entry.path.name) : [];\n      });\n    if (this.node.isFolder) {\n      this.nodeDetails.size = this.translateService.instant('APP.NODE_INFO.CALCULATING');\n      this.nodeDetails.numberOfFiles = this.translateService.instant('APP.NODE_INFO.CALCULATING');\n      this.nodesService\n        .initiateFolderSizeCalculation(this.node.id)\n        .pipe(\n          first(),\n          delay(1000),\n          switchMap((jobIdEntry) => {\n            return this.nodesService.getFolderSizeInfo(this.node.id, jobIdEntry.entry.jobId).pipe(\n              expand((result) =>\n                result.entry.status === SizeDetails.StatusEnum.IN_PROGRESS\n                  ? timer(5000).pipe(concatMap(() => this.nodesService.getFolderSizeInfo(this.node.id, jobIdEntry.entry.jobId)))\n                  : EMPTY\n              ),\n              catchError(() => {\n                this.nodeDetails.size = this.translateService.instant('APP.NODE_INFO.ERROR');\n                return of(null);\n              })\n            );\n          }),\n          takeUntilDestroyed(this.destroyRef),\n          catchError(() => {\n            this.nodeDetails.numberOfFiles = this.translateService.instant('APP.NODE_INFO.ERROR');\n            this.nodeDetails.size = this.translateService.instant('APP.NODE_INFO.ERROR');\n            return of(null);\n          })\n        )\n        .subscribe((folderInfo) => {\n          if (folderInfo?.entry?.status === SizeDetails.StatusEnum.COMPLETE) {\n            this.nodeDetails.size = this.fileSizePipe.transform(folderInfo.entry.sizeInBytes);\n            this.nodeDetails.numberOfFiles = folderInfo.entry.numberOfFiles;\n          } else if (folderInfo?.entry?.status !== SizeDetails.StatusEnum.IN_PROGRESS) {\n            this.nodeDetails.size = this.translateService.instant('APP.NODE_INFO.ERROR');\n            this.nodeDetails.numberOfFiles = this.translateService.instant('APP.NODE_INFO.ERROR');\n          }\n        });\n    } else {\n      this.nodeDetails.size = this.fileSizePipe.transform(this.node.content.sizeInBytes);\n    }\n  }\n}\n","<div class=\"aca-node-info-header\">\n  <img class=\"aca-node-icon\" alt=\"{{ 'APP.NODE_INFO.ICON' | translate }}\" [ngSrc]=\"nodeDetails.icon\" width=\"24\" height=\"24\"/>\n  <div class=\"aca-node-title\" data-automation-id=\"node-info-name\">{{ nodeDetails.name }}</div>\n</div>\n<mat-divider aria-hidden=\"true\"/>\n<div class=\"aca-node-info-body\">\n  @if (node.isFolder) {\n    <div class=\"aca-node-info-item\">\n      <div class=\"aca-node-info-item-label\">{{ 'APP.NODE_INFO.NUMBER_OF_FILES' | translate }}</div>\n      <div class=\"aca-node-info-item-value\"\n          data-automation-id=\"node-info-number-of-files\">{{ nodeDetails.numberOfFiles }}</div>\n    </div>\n    <mat-divider aria-hidden=\"true\"/>\n  }\n  <div class=\"aca-node-info-item\">\n    <div class=\"aca-node-info-item-label\">{{ 'APP.NODE_INFO.SIZE' | translate }}</div>\n    <div class=\"aca-node-info-item-value\" data-automation-id=\"node-info-size\">\n      {{ nodeDetails.size }}\n    </div>\n  </div>\n  <mat-divider aria-hidden=\"true\"/>\n  <div [ngClass]=\"{'aca-node-location-group': nodeDetails.secondaryParentsPaths?.length > 0}\">\n    <div class=\"aca-node-info-item\">\n      <div class=\"aca-node-info-item-label\">{{ 'APP.NODE_INFO.LOCATION' | translate }}</div>\n      <div class=\"aca-node-info-item-value\" data-automation-id=\"node-info-location\">\n          <adf-icon value=\"folder\" class=\"aca-node-icon\" fontSet=\"material-icons\"/>\n          <div class=\"aca-node-info-location\">\n            @if (nodeDetails.location) {\n              {{ nodeDetails.location }}\n            } @else {\n              {{ 'APP.BROWSE.SEARCH.UNKNOWN_LOCATION' | translate }}\n            }\n          </div>\n      </div>\n    </div>\n    @if (nodeDetails.secondaryParentsPaths?.length > 0) {\n      <div class=\"aca-node-info-item\">\n        <div class=\"aca-node-info-item-label\">{{ 'APP.NODE_INFO.REFERENCED' | translate }}</div>\n        <div class=\"aca-node-info-secondary-parents-container\" data-automation-id=\"node-info-secondary-parents\">\n          @for (secondaryParentPath of nodeDetails.secondaryParentsPaths; track $index) {\n            <div class=\"aca-node-info-secondary-parent\" [attr.data-automation-id]=\"'node-info-secondary-parent-' + $index\">\n              <adf-icon value=\"folder\" class=\"aca-node-icon\" fontSet=\"material-icons\"/>\n              <div class=\"aca-node-info-location\">\n                {{ secondaryParentPath }}\n              </div>\n            </div>\n          }\n        </div>\n      </div>\n    }\n  </div>\n  <mat-divider aria-hidden=\"true\"/>\n  <div class=\"aca-node-info-item\">\n    <div class=\"aca-node-info-item-label\">{{ 'APP.NODE_INFO.CREATED' | translate }}</div>\n    <div class=\"aca-node-info-item-value\"\n         data-automation-id=\"node-info-creation-date\"\n         [title]=\"nodeDetails.created | adfLocalizedDate\">{{ nodeDetails.created | adfTimeAgo }}</div>\n  </div>\n  <mat-divider aria-hidden=\"true\"/>\n  <div class=\"aca-node-info-item\">\n    <div class=\"aca-node-info-item-label\">{{ 'APP.NODE_INFO.MODIFIED' | translate }}</div>\n    <div class=\"aca-node-info-item-value\"\n         data-automation-id=\"node-info-modify-date\"\n         [title]=\"nodeDetails.modified | adfLocalizedDate\">{{ nodeDetails.modified | adfTimeAgo }}</div>\n  </div>\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AppHookService, AppSettingsService, ContentApiService, NodePermissionService } from '@alfresco/aca-shared';\nimport {\n  AppStore,\n  DeletedNodeInfo,\n  DeleteStatus,\n  getAppSelection,\n  NavigateRouteAction,\n  NavigateToParentFolder,\n  NodeInfo,\n  RefreshPreviewAction,\n  SetSelectedNodesAction,\n  ShowLoaderAction,\n  UnlockWriteAction,\n  ViewNodeVersionAction\n} from '@alfresco/aca-shared/store';\nimport {\n  DocumentListService,\n  FolderDialogComponent,\n  LibraryDialogComponent,\n  NewVersionUploaderDataAction,\n  NewVersionUploaderDialogData,\n  NewVersionUploaderService,\n  NodeAspectService,\n  NodesApiService,\n  ShareDialogComponent\n} from '@alfresco/adf-content-services';\nimport { ConfirmDialogComponent, DialogComponent, DialogSize, NotificationService, TranslationService } from '@alfresco/adf-core';\nimport { DeletedNodesPaging, Node, NodeEntry, PathInfo, SiteBodyCreate, SiteEntry } from '@alfresco/js-api';\nimport { inject, Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { forkJoin, Observable, of, zip } from 'rxjs';\nimport { catchError, map, mergeMap, take, tap } from 'rxjs/operators';\nimport { NodeActionsService } from './node-actions.service';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { NodeInformationComponent } from '../dialogs/node-details/node-information.component';\n\ninterface RestoredNode {\n  status: number;\n  entry: Node;\n  statusCode?: number;\n}\n\ninterface SnackbarMessageData {\n  key: string;\n  params: { [key: string]: any };\n  userActionLabel?: string;\n  type: 'info' | 'warning' | 'error';\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContentManagementService {\n  private readonly notificationService = inject(NotificationService);\n  private readonly nodesApiService = inject(NodesApiService);\n  private readonly store = inject(Store<AppStore>);\n  private readonly contentApi = inject(ContentApiService);\n  private readonly permission = inject(NodePermissionService);\n  private readonly dialogRef = inject(MatDialog);\n  private readonly nodeActionsService = inject(NodeActionsService);\n  private readonly translation = inject(TranslationService);\n  private readonly nodeAspectService = inject(NodeAspectService);\n  private readonly activatedRoute = inject(ActivatedRoute);\n  private readonly appHookService = inject(AppHookService);\n  private readonly newVersionUploaderService = inject(NewVersionUploaderService);\n  private readonly router = inject(Router);\n  private readonly appSettingsService = inject(AppSettingsService);\n  private readonly documentListService = inject(DocumentListService);\n  private readonly createMenuButtonSelector = 'app-toolbar-menu button[id=\"app.toolbar.create\"]';\n\n  addFavorite(nodes: Array<NodeEntry>, focusedElementOnCloseSelector?: string) {\n    this.focusAfterClose(focusedElementOnCloseSelector);\n    if (nodes && nodes.length > 0) {\n      this.contentApi.addFavorite(nodes).subscribe(() => {\n        const favoriteNodes = nodes.map((node) => {\n          const newNode = JSON.parse(JSON.stringify(node));\n          newNode.entry.isFavorite = true;\n          return newNode;\n        });\n\n        if (nodes.length > 1) {\n          this.notificationService.showInfo('APP.MESSAGES.INFO.FAVORITE_NODES_ADDED', null, { number: nodes.length });\n        } else {\n          this.notificationService.showInfo('APP.MESSAGES.INFO.FAVORITE_NODE_ADDED', null, { name: nodes[0].entry.name });\n        }\n        this.store.dispatch(new SetSelectedNodesAction(favoriteNodes));\n      });\n    }\n  }\n\n  removeFavorite(nodes: Array<NodeEntry>, focusedElementOnCloseSelector?: string) {\n    this.focusAfterClose(focusedElementOnCloseSelector);\n    if (nodes && nodes.length > 0) {\n      this.contentApi.removeFavorite(nodes).subscribe({\n        next: () => {\n          const favoriteNodes = nodes.map((node) => {\n            const newNode = JSON.parse(JSON.stringify(node));\n            newNode.entry.isFavorite = false;\n            return newNode;\n          });\n\n          if (nodes.length > 1) {\n            this.notificationService.showInfo('APP.MESSAGES.INFO.FAVORITE_NODES_REMOVED', null, { number: nodes.length });\n          } else {\n            this.notificationService.showInfo('APP.MESSAGES.INFO.FAVORITE_NODE_REMOVED', null, { name: nodes[0].entry.name });\n          }\n          this.store.dispatch(new SetSelectedNodesAction(favoriteNodes));\n        },\n        error: (error) => {\n          if (JSON.parse(error.message).error.statusCode === 404) {\n            const nodeId = JSON.parse(error.message).error.briefSummary.split('relationship id of ')[1];\n            const nodeName = nodes.find((node) => node.entry.id === nodeId)?.entry.name;\n            this.notificationService.showError('APP.MESSAGES.ERRORS.FAVORITE_NODE_NOT_FOUND', null, { name: nodeName });\n          }\n        }\n      });\n    }\n  }\n\n  manageVersions(node: any, focusedElementOnCloseSelector?: string) {\n    if (node?.entry) {\n      // shared and favorite\n      const id = node.entry.nodeId || (node as any).entry.guid;\n\n      if (id) {\n        this.contentApi.getNodeInfo(id).subscribe((entry) => {\n          this.openVersionManagerDialog(entry, focusedElementOnCloseSelector);\n        });\n      } else {\n        this.openVersionManagerDialog(node.entry, focusedElementOnCloseSelector);\n      }\n    }\n  }\n\n  manageAspects(node: any, focusedElementOnCloseSelector?: string) {\n    if (node?.entry) {\n      // shared and favorite\n      const id = node.entry.nodeId || (node as any).entry.guid;\n\n      if (id) {\n        this.contentApi.getNodeInfo(id).subscribe((entry) => {\n          this.openAspectListDialog(entry, focusedElementOnCloseSelector);\n        });\n      } else {\n        this.openAspectListDialog(node.entry, focusedElementOnCloseSelector);\n      }\n    }\n  }\n\n  versionUpdateDialog(node: Node, file: File) {\n    this.contentApi.getNodeVersions(node.id).subscribe(({ list }) => {\n      const newVersionUploaderDialogData = {\n        node,\n        file,\n        currentVersion: list.entries[0].entry,\n        title: 'VERSION.DIALOG.TITLE',\n        showComments: this.appSettingsService.uploadAllowComments,\n        allowDownload: this.appSettingsService.uploadAllowDownload\n      } as NewVersionUploaderDialogData;\n      const dialogConfig: MatDialogConfig = { width: '600px' };\n\n      this.newVersionUploaderService.openUploadNewVersionDialog(newVersionUploaderDialogData, dialogConfig).subscribe(\n        (data) => {\n          if (data.action === NewVersionUploaderDataAction.upload) {\n            if (data.newVersion.value.entry.properties['cm:lockType'] === 'WRITE_LOCK') {\n              this.store.dispatch(new UnlockWriteAction(data.newVersion.value));\n            }\n          }\n        },\n        (error) => this.notificationService.showError(error)\n      );\n    });\n  }\n\n  shareNode(node: any, focusedElementOnCloseSelector?: string): void {\n    if (node?.entry) {\n      // shared and favorite\n      const id = node.entry.nodeId || (node as any).entry.guid;\n\n      if (id) {\n        this.contentApi.getNodeInfo(id).subscribe((entry) => {\n          this.openShareLinkDialog({ entry }, focusedElementOnCloseSelector);\n        });\n      } else {\n        this.openShareLinkDialog(node, focusedElementOnCloseSelector);\n      }\n    }\n  }\n\n  openShareLinkDialog(node: any, focusedElementOnCloseSelector?: string) {\n    const baseShareUrl = this.appSettingsService.baseShareUrl;\n\n    this.dialogRef\n      .open(ShareDialogComponent, {\n        restoreFocus: true,\n        width: '600px',\n        panelClass: 'adf-share-link-dialog',\n        data: {\n          node,\n          baseShareUrl\n        }\n      })\n      .afterClosed()\n      .subscribe(() => {\n        this.store.dispatch(new SetSelectedNodesAction([node]));\n        this.appHookService.linksUnshared.next();\n        this.focusAfterClose(focusedElementOnCloseSelector);\n      });\n  }\n\n  createFolder(parentNodeId: string) {\n    const dialogInstance = this.dialogRef.open(FolderDialogComponent, {\n      data: {\n        parentNodeId,\n        createTitle: undefined,\n        nodeType: 'cm:folder'\n      },\n      width: '400px',\n      role: 'dialog'\n    });\n\n    dialogInstance.componentInstance.error.subscribe((message: string) => {\n      this.notificationService.showError(message);\n    });\n\n    dialogInstance.afterClosed().subscribe((node) => {\n      if (node) {\n        this.documentListService.reload();\n      }\n      this.focusAfterClose(this.createMenuButtonSelector);\n    });\n  }\n\n  editFolder(folder: NodeEntry, focusedElementOnCloseSelector?: string) {\n    if (!folder) {\n      return;\n    }\n\n    const dialog = this.dialogRef.open(FolderDialogComponent, {\n      data: {\n        folder: folder.entry\n      },\n      width: '400px'\n    });\n\n    dialog.componentInstance.error.subscribe((message: string) => {\n      this.notificationService.showError(message);\n    });\n\n    dialog.afterClosed().subscribe((node) => {\n      if (node) {\n        this.store.dispatch(new SetSelectedNodesAction([{ entry: node }]));\n        this.nodesApiService.nodeUpdated.next(node);\n      }\n      this.focusAfterClose(focusedElementOnCloseSelector);\n    });\n  }\n\n  createLibrary(): Observable<string> {\n    const dialogInstance = this.dialogRef.open(LibraryDialogComponent, {\n      autoFocus: false,\n      width: '400px'\n    });\n\n    dialogInstance.componentInstance.error.subscribe((message: string) => {\n      this.notificationService.showError(message);\n    });\n\n    return dialogInstance.afterClosed().pipe(\n      tap((node) => {\n        if (node) {\n          this.appHookService.libraryCreated.next(node);\n        }\n        this.focusAfterClose(this.createMenuButtonSelector);\n      }),\n      map((node: SiteEntry) => {\n        if (node?.entry?.guid) {\n          return node.entry.guid;\n        }\n        return null;\n      })\n    );\n  }\n\n  deleteLibrary(id: string): void {\n    this.contentApi.deleteSite(id).subscribe(\n      () => {\n        this.appHookService.libraryDeleted.next(id);\n        this.notificationService.showInfo('APP.MESSAGES.INFO.LIBRARY_DELETED');\n        this.store.dispatch(new NavigateRouteAction(['/libraries']));\n      },\n      () => {\n        this.notificationService.showError('APP.MESSAGES.ERRORS.DELETE_LIBRARY_FAILED');\n      }\n    );\n  }\n\n  leaveLibrary(siteId: string, focusedElementOnCloseSelector?: string): void {\n    const dialogRef = this.dialogRef.open(ConfirmDialogComponent, {\n      data: {\n        title: 'APP.DIALOGS.CONFIRM_LEAVE.TITLE',\n        message: 'APP.DIALOGS.CONFIRM_LEAVE.MESSAGE',\n        yesLabel: 'APP.DIALOGS.CONFIRM_LEAVE.YES_LABEL',\n        noLabel: 'APP.DIALOGS.CONFIRM_LEAVE.NO_LABEL'\n      },\n      minWidth: '250px',\n      restoreFocus: true\n    });\n\n    dialogRef.afterClosed().subscribe((result) => {\n      if (result === true) {\n        this.contentApi.leaveSite(siteId).subscribe(\n          () => {\n            this.appHookService.libraryLeft.next(siteId);\n            this.notificationService.showInfo('APP.MESSAGES.INFO.LEFT_LIBRARY');\n          },\n          () => {\n            this.notificationService.showError('APP.MESSAGES.ERRORS.LEAVE_LIBRARY_FAILED');\n          }\n        );\n      }\n      this.focusAfterClose(focusedElementOnCloseSelector);\n    });\n  }\n\n  updateLibrary(siteId: string, siteBody: SiteBodyCreate) {\n    this.contentApi.updateLibrary(siteId, siteBody).subscribe(\n      (siteEntry: SiteEntry) => {\n        this.appHookService.libraryUpdated.next(siteEntry);\n        this.notificationService.showInfo('LIBRARY.SUCCESS.LIBRARY_UPDATED');\n      },\n      () => {\n        this.appHookService.libraryUpdateFailed.next();\n        this.notificationService.showError('LIBRARY.ERRORS.LIBRARY_UPDATE_ERROR');\n      }\n    );\n  }\n\n  async unshareNodes(links: Array<NodeEntry>) {\n    const promises = links.map((link) => this.contentApi.deleteSharedLink(link.entry.id).toPromise());\n    await Promise.all(promises);\n    this.appHookService.linksUnshared.next();\n  }\n\n  canUpdateNode(node: NodeEntry | Node): boolean {\n    return this.permission.check(node, ['update']);\n  }\n\n  canUploadContent(folderNode: NodeEntry | Node): boolean {\n    return this.permission.check(folderNode, ['create']);\n  }\n\n  purgeDeletedNodes(nodes: NodeEntry[], focusedElementOnCloseSelector?: string) {\n    if (!nodes || nodes.length === 0) {\n      return;\n    }\n\n    const dialogRef = this.dialogRef.open(ConfirmDialogComponent, {\n      data: {\n        title: 'APP.DIALOGS.CONFIRM_PURGE.TITLE',\n        message: 'APP.DIALOGS.CONFIRM_PURGE.MESSAGE',\n        yesLabel: 'APP.DIALOGS.CONFIRM_PURGE.YES_LABEL',\n        noLabel: 'APP.DIALOGS.CONFIRM_PURGE.NO_LABEL'\n      },\n      minWidth: '250px'\n    });\n\n    dialogRef.afterClosed().subscribe((result) => {\n      this.focusAfterClose(focusedElementOnCloseSelector);\n      if (result === true) {\n        const nodesToDelete: NodeInfo[] = nodes.map((node) => {\n          const { name } = node.entry;\n          const id = (node as any).entry.nodeId || node.entry.id;\n\n          return {\n            id,\n            name\n          };\n        });\n        this.purgeNodes(nodesToDelete);\n      }\n    });\n  }\n\n  restoreDeletedNodes(selection: NodeEntry[] = [], focusedElementOnCloseSelector?: string) {\n    if (!selection.length) {\n      return;\n    }\n\n    const nodesWithPath = selection.filter((node) => node.entry.path);\n\n    if (selection.length && !nodesWithPath.length) {\n      const failedStatus = this.processStatus([]);\n      failedStatus.fail.push(...selection);\n      this.showRestoreNotification(failedStatus);\n      this.documentListService.reload();\n      return;\n    }\n\n    let status: DeleteStatus;\n\n    forkJoin(nodesWithPath.map((node) => this.restoreNode(node)))\n      .pipe(\n        tap((restoredNodes) => {\n          status = this.processStatus(restoredNodes);\n        }),\n        mergeMap(() => this.contentApi.getDeletedNodes())\n      )\n      .subscribe((nodes: DeletedNodesPaging) => {\n        const selectedNodes = this.diff(status.fail, selection, false);\n        const remainingNodes = this.diff(selectedNodes, nodes.list.entries);\n\n        if (!remainingNodes.length) {\n          this.focusAfterClose(focusedElementOnCloseSelector);\n          this.showRestoreNotification(status);\n          setTimeout(() => {\n            this.documentListService.reload();\n          }, 50);\n        } else {\n          this.restoreDeletedNodes(remainingNodes);\n        }\n      });\n  }\n\n  copyNodes(nodes: Array<NodeEntry>, focusedElementOnCloseSelector?: string) {\n    zip(this.nodeActionsService.copyNodes(nodes, undefined, focusedElementOnCloseSelector), this.nodeActionsService.contentCopied).subscribe(\n      (result) => {\n        const [operationResult, newItems] = result;\n        this.showCopyMessage(operationResult, nodes, newItems);\n      },\n      (error) => {\n        this.showCopyMessage(error, nodes);\n      }\n    );\n  }\n\n  moveNodes(nodes: Array<NodeEntry>, focusedElementOnCloseSelector?: string) {\n    const permissionForMove = '!';\n\n    zip(this.nodeActionsService.moveNodes(nodes, permissionForMove, focusedElementOnCloseSelector), this.nodeActionsService.contentMoved).subscribe(\n      (result) => {\n        const [operationResult, moveResponse] = result;\n        this.showMoveMessage(nodes, operationResult, moveResponse);\n\n        this.documentListService.reload();\n      },\n      (error) => {\n        this.showMoveMessage(nodes, error);\n      }\n    );\n  }\n\n  getErrorMessage(errorObject: { message: any }): string {\n    let i18nMessageString = 'APP.MESSAGES.ERRORS.GENERIC';\n\n    try {\n      const {\n        error: { statusCode }\n      } = JSON.parse(errorObject.message);\n\n      if (statusCode === 409) {\n        i18nMessageString = 'APP.MESSAGES.ERRORS.NODE_MOVE';\n      } else if (statusCode === 403) {\n        i18nMessageString = 'APP.MESSAGES.ERRORS.PERMISSION';\n      }\n    } catch (err) {\n      /* Do nothing, keep the original message */\n    }\n\n    return i18nMessageString;\n  }\n\n  getNodeInfo(): Observable<Node> {\n    return this.store.select(getAppSelection).pipe(\n      take(1),\n      mergeMap(({ file }) => {\n        const id = (file as any).entry.nodeId || (file as any).entry.guid;\n        if (!id) {\n          return of(file.entry);\n        } else {\n          return this.contentApi.getNodeInfo(id);\n        }\n      })\n    );\n  }\n\n  unlockNode(node: NodeEntry): Promise<void | NodeEntry> {\n    return this.contentApi.unlockNode(node.entry.id).catch(() => {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.UNLOCK_NODE', null, { fileName: node.entry.name });\n    });\n  }\n\n  private showCopyMessage(info: any, nodes: Array<NodeEntry>, newItems?: Array<NodeEntry>) {\n    const numberOfCopiedItems = newItems ? newItems.length : 0;\n    const failedItems = nodes.length - numberOfCopiedItems;\n\n    let i18nMessageString = 'APP.MESSAGES.ERRORS.GENERIC';\n\n    if (typeof info === 'string') {\n      if (info.toLowerCase().indexOf('succes') !== -1) {\n        let i18MessageSuffix;\n\n        if (failedItems) {\n          if (numberOfCopiedItems) {\n            i18MessageSuffix = numberOfCopiedItems === 1 ? 'PARTIAL_SINGULAR' : 'PARTIAL_PLURAL';\n          } else {\n            i18MessageSuffix = failedItems === 1 ? 'FAIL_SINGULAR' : 'FAIL_PLURAL';\n          }\n        } else {\n          i18MessageSuffix = numberOfCopiedItems === 1 ? 'SINGULAR' : 'PLURAL';\n        }\n\n        i18nMessageString = `APP.MESSAGES.INFO.NODE_COPY.${i18MessageSuffix}`;\n      }\n    } else {\n      try {\n        const {\n          error: { statusCode }\n        } = JSON.parse(info.message);\n\n        if (statusCode === 403) {\n          i18nMessageString = 'APP.MESSAGES.ERRORS.PERMISSION';\n        }\n      } catch {}\n    }\n\n    const undo = numberOfCopiedItems > 0 ? this.translation.instant('APP.ACTIONS.UNDO') : '';\n\n    const message = this.translation.instant(i18nMessageString, {\n      success: numberOfCopiedItems,\n      failed: failedItems\n    });\n\n    let messageType: string;\n    if (numberOfCopiedItems === 0) {\n      messageType = 'adf-error-snackbar';\n    } else if (failedItems > 0) {\n      messageType = 'adf-warning-snackbar';\n    } else {\n      messageType = 'adf-info-snackbar';\n    }\n\n    this.notificationService\n      .openSnackMessageAction(message, undo, {\n        panelClass: messageType\n      })\n      .onAction()\n      .subscribe(() => this.undoCopyNodes(newItems));\n  }\n\n  private undoCopyNodes(nodes: NodeEntry[]) {\n    const batch = this.nodeActionsService\n      .flatten(nodes)\n      .filter((item) => item.entry)\n      .map((item) => this.contentApi.deleteNode(item.entry.id, { permanent: true }));\n\n    forkJoin(...batch).subscribe(\n      () => {\n        this.appHookService.nodesDeleted.next(null);\n        this.documentListService.reload();\n      },\n      (error) => {\n        let i18nMessageString = 'APP.MESSAGES.ERRORS.GENERIC';\n\n        let errorJson = null;\n        try {\n          errorJson = JSON.parse(error.message);\n        } catch {}\n\n        if (errorJson?.error?.statusCode === 403) {\n          i18nMessageString = 'APP.MESSAGES.ERRORS.PERMISSION';\n        }\n\n        this.notificationService.showError(i18nMessageString);\n      }\n    );\n  }\n\n  private openVersionManagerDialog(node: any, focusedElementOnCloseSelector?: string) {\n    // workaround Shared\n    if (node.isFile || node.nodeId) {\n      const newVersionUploaderDialogData: NewVersionUploaderDialogData = {\n        node,\n        showVersionsOnly: true,\n        title: 'VERSION.DIALOG.TITLE',\n        allowDownload: this.appSettingsService.uploadAllowDownload,\n        showComments: this.appSettingsService.uploadAllowComments,\n        showActions: this.appSettingsService.versionManagerShowActions,\n        allowViewVersions: this.appSettingsService.versionManagerAllowViewVersions,\n        allowVersionDelete: this.appSettingsService.versionManagerAllowVersionDelete\n      };\n      this.newVersionUploaderService\n        .openUploadNewVersionDialog(newVersionUploaderDialogData, { width: '630px', role: 'dialog' }, focusedElementOnCloseSelector)\n        .subscribe({\n          next: (newVersionUploaderData) => {\n            switch (newVersionUploaderData.action) {\n              case NewVersionUploaderDataAction.refresh:\n                this.documentListService.reload();\n                this.store.dispatch(new RefreshPreviewAction(newVersionUploaderData.node));\n                break;\n              case NewVersionUploaderDataAction.view: {\n                const location = this.activatedRoute.snapshot.queryParams['location'] || this.router.url;\n                this.store.dispatch(new ViewNodeVersionAction(node.id, newVersionUploaderData.versionId, { location }));\n                break;\n              }\n              default:\n                break;\n            }\n          }\n        });\n    } else {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.PERMISSION');\n    }\n  }\n\n  private openAspectListDialog(node: any, focusedElementOnCloseSelector?: string) {\n    // workaround Shared\n    if (node.isFile || node.id) {\n      this.nodeAspectService.updateNodeAspects(node.id, focusedElementOnCloseSelector);\n    } else {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.PERMISSION');\n    }\n  }\n\n  private undoMoveNodes(moveResponse, selectionParentId: string) {\n    const movedNodes = moveResponse?.['succeeded'] ?? [];\n    const partiallyMovedNodes = moveResponse?.['partiallySucceeded'] ?? [];\n\n    const restoreDeletedNodesBatch = this.nodeActionsService.moveDeletedEntries.map((folderEntry) =>\n      this.contentApi.restoreNode(folderEntry.nodeId || folderEntry.id).pipe(map((node) => node.entry))\n    );\n\n    zip(...restoreDeletedNodesBatch, of(null))\n      .pipe(\n        mergeMap(() => {\n          const nodesToBeMovedBack = [...partiallyMovedNodes, ...movedNodes];\n\n          const revertMoveBatch = this.nodeActionsService\n            .flatten(nodesToBeMovedBack)\n            .filter((node) => node.entry || node.itemMoved?.entry)\n            .map((node) => {\n              if (node.itemMoved) {\n                return this.nodeActionsService.moveNodeAction(node.itemMoved.entry, node.initialParentId);\n              } else {\n                return this.nodeActionsService.moveNodeAction(node.entry, selectionParentId);\n              }\n            });\n\n          return zip(...revertMoveBatch, of(null));\n        })\n      )\n      .subscribe(\n        () => {\n          this.documentListService.reload();\n        },\n        (error) => {\n          let message = 'APP.MESSAGES.ERRORS.GENERIC';\n\n          let errorJson = null;\n          try {\n            errorJson = JSON.parse(error.message);\n          } catch {}\n\n          if (errorJson?.error?.statusCode === 403) {\n            message = 'APP.MESSAGES.ERRORS.PERMISSION';\n          }\n\n          this.notificationService.showError(message);\n        }\n      );\n  }\n\n  deleteNodes(items: NodeEntry[], allowUndo = true, focusedElementOnCloseSelector?: string): void {\n    this.focusAfterClose(focusedElementOnCloseSelector);\n    const batch: Observable<DeletedNodeInfo>[] = [];\n\n    items.forEach((node) => {\n      batch.push(this.deleteNode(node));\n    });\n\n    forkJoin(...batch).subscribe((data: DeletedNodeInfo[]) => {\n      const status = this.processStatus(data);\n      const messageData = this.getDeleteMessageData(status);\n\n      if (messageData && status.someSucceeded) {\n        const translatedMessage: string = this.translation.instant(messageData.key, messageData.params);\n        const action: string | null = allowUndo ? this.translation.instant('APP.ACTIONS.UNDO') : null;\n\n        const snackBarRef = this.notificationService.openSnackMessageAction(\n          translatedMessage,\n          action,\n          { panelClass: `adf-${messageData.type}-snackbar` },\n          messageData.params\n        );\n\n        if (action) {\n          snackBarRef.onAction().subscribe(() => {\n            this.undoDeleteNodes([...status.success]);\n          });\n        }\n      } else if (messageData) {\n        this.notificationService.showError(this.translation.instant(messageData.key, messageData.params));\n      }\n\n      if (status.someSucceeded) {\n        this.appHookService.nodesDeleted.next();\n        this.documentListService.reload();\n      }\n      this.store.dispatch(new ShowLoaderAction(false));\n    });\n  }\n\n  undoDeleteNodes(items: DeletedNodeInfo[]): void {\n    const batch: Observable<DeletedNodeInfo>[] = [];\n\n    items.forEach((item) => {\n      batch.push(this.undoDeleteNode(item));\n    });\n\n    forkJoin(...batch).subscribe((data) => {\n      const processedData = this.processStatus(data);\n\n      if (processedData.fail.length) {\n        this.showUndoDeleteMessage(processedData);\n      }\n\n      if (processedData.someSucceeded) {\n        this.documentListService.reload();\n      }\n    });\n  }\n\n  private undoDeleteNode(item: DeletedNodeInfo): Observable<DeletedNodeInfo> {\n    const { id, name } = item;\n\n    return this.contentApi.restoreNode(id).pipe(\n      map(() => ({\n        id,\n        name,\n        status: 1\n      })),\n      catchError(() =>\n        of({\n          id,\n          name,\n          status: 0\n        })\n      )\n    );\n  }\n\n  private showUndoDeleteMessage(status: DeleteStatus): void {\n    if (status.someFailed && !status.oneFailed) {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.NODE_RESTORE.PLURAL', null, { number: status.fail.length });\n    }\n\n    if (status.oneFailed) {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.NODE_RESTORE', null, { name: status.fail[0].name });\n    }\n  }\n\n  private restoreNode(node: NodeEntry): Observable<RestoredNode> {\n    const { entry } = node;\n\n    return this.contentApi.restoreNode(entry.id).pipe(\n      map(() => ({\n        status: 1,\n        entry\n      })),\n      catchError((error) => {\n        const { statusCode } = JSON.parse(error.message).error;\n\n        return of({\n          status: 0,\n          statusCode,\n          entry\n        });\n      })\n    );\n  }\n\n  private purgeNodes(selection: NodeInfo[] = []) {\n    if (!selection.length) {\n      return;\n    }\n\n    const batch = selection.map((node) => this.purgeDeletedNode(node));\n\n    forkJoin(batch).subscribe((purgedNodes) => {\n      const status = this.processStatus(purgedNodes);\n\n      if (status.success.length) {\n        this.documentListService.reload();\n      }\n\n      this.sendPurgeMessage(status);\n    });\n  }\n\n  private purgeDeletedNode(node: NodeInfo): Observable<DeletedNodeInfo> {\n    const { id, name } = node;\n\n    return this.contentApi.purgeDeletedNode(id).pipe(\n      map(() => ({\n        status: 1,\n        id,\n        name\n      })),\n      catchError(() =>\n        of({\n          status: 0,\n          id,\n          name\n        })\n      )\n    );\n  }\n\n  private processStatus(data: Array<{ status: number }> = []): DeleteStatus {\n    const status = {\n      fail: [],\n      success: [],\n      get someFailed() {\n        return !!this.fail.length;\n      },\n      get someSucceeded() {\n        return !!this.success.length;\n      },\n      get oneFailed() {\n        return this.fail.length === 1;\n      },\n      get oneSucceeded() {\n        return this.success.length === 1;\n      },\n      get allSucceeded() {\n        return this.someSucceeded && !this.someFailed;\n      },\n      get allFailed() {\n        return this.someFailed && !this.someSucceeded;\n      },\n      reset() {\n        this.fail = [];\n        this.success = [];\n      }\n    };\n\n    return data.reduce((acc, node) => {\n      if (node.status) {\n        acc.success.push(node);\n      } else {\n        acc.fail.push(node);\n      }\n\n      return acc;\n    }, status);\n  }\n\n  private sendPurgeMessage(status: DeleteStatus): void {\n    if (status.oneSucceeded && status.someFailed && !status.oneFailed) {\n      this.notificationService.showWarning('APP.MESSAGES.INFO.TRASH.NODES_PURGE.PARTIAL_SINGULAR', null, {\n        name: status.success[0].name,\n        failed: status.fail.length\n      });\n      return;\n    }\n\n    if (status.someSucceeded && !status.oneSucceeded && status.someFailed) {\n      this.notificationService.showWarning('APP.MESSAGES.INFO.TRASH.NODES_PURGE.PARTIAL_PLURAL', null, {\n        number: status.success.length,\n        failed: status.fail.length\n      });\n      return;\n    }\n\n    if (status.oneSucceeded) {\n      this.notificationService.showInfo('APP.MESSAGES.INFO.TRASH.NODES_PURGE.SINGULAR', null, { name: status.success[0].name });\n      return;\n    }\n\n    if (status.oneFailed) {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.TRASH.NODES_PURGE.SINGULAR', null, { name: status.fail[0].name });\n      return;\n    }\n\n    if (status.allSucceeded) {\n      this.notificationService.showInfo('APP.MESSAGES.INFO.TRASH.NODES_PURGE.PLURAL', null, { number: status.success.length });\n      return;\n    }\n\n    if (status.allFailed) {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.TRASH.NODES_PURGE.PLURAL', null, { number: status.fail.length });\n      return;\n    }\n  }\n\n  private showRestoreNotification(status: DeleteStatus): void {\n    const messageData = this.getRestoreMessageData(status);\n\n    if (messageData) {\n      const translatedMessage: string = this.translation.instant(messageData.key, messageData.params);\n      const action: string = messageData.userActionLabel ? this.translation.instant(messageData.userActionLabel) : '';\n      const panelClass = messageData.type === 'error' ? 'adf-error-snackbar' : 'adf-info-snackbar';\n\n      const snackBarRef = this.notificationService.openSnackMessageAction(translatedMessage, action, { panelClass }, messageData.params);\n\n      if (messageData.userActionLabel && status.oneSucceeded && !status.someFailed) {\n        snackBarRef.onAction().subscribe(() => {\n          const isSite = this.isSite(status.success[0].entry);\n          const path: PathInfo = status.success[0].entry.path;\n          const parent = path.elements[path.elements.length - 1];\n          const route = isSite ? ['/libraries', parent.id] : ['/personal-files', parent.id];\n\n          if (this.isLibraryContent(path)) {\n            this.store.dispatch(new NavigateToParentFolder(status.success[0]));\n          } else {\n            this.store.dispatch(new NavigateRouteAction(route));\n          }\n        });\n      }\n    }\n  }\n\n  private isSite(entry: Node): boolean {\n    return entry.nodeType === 'st:site';\n  }\n\n  private isLibraryContent(path: PathInfo): boolean {\n    return path && path.elements.length >= 2 && path.elements[1].name === 'Sites';\n  }\n\n  private getRestoreMessageData(status: DeleteStatus): SnackbarMessageData | null {\n    if (status.someFailed && !status.oneFailed) {\n      return {\n        key: 'APP.MESSAGES.ERRORS.TRASH.NODES_RESTORE.PARTIAL_PLURAL',\n        params: { number: status.fail.length },\n        type: 'error'\n      };\n    }\n\n    if (status.oneFailed && status.fail[0].statusCode) {\n      return {\n        key:\n          status.fail[0].statusCode === 409\n            ? 'APP.MESSAGES.ERRORS.TRASH.NODES_RESTORE.NODE_EXISTS'\n            : 'APP.MESSAGES.ERRORS.TRASH.NODES_RESTORE.GENERIC',\n        params: { name: status.fail[0].entry.name },\n        type: 'error'\n      };\n    }\n\n    if (status.oneFailed && !status.fail[0].statusCode) {\n      return {\n        key: 'APP.MESSAGES.ERRORS.TRASH.NODES_RESTORE.LOCATION_MISSING',\n        params: { name: status.fail[0].entry.name },\n        type: 'error'\n      };\n    }\n\n    if (status.allSucceeded && !status.oneSucceeded) {\n      return {\n        key: 'APP.MESSAGES.INFO.TRASH.NODES_RESTORE.PLURAL',\n        params: {},\n        type: 'info'\n      };\n    }\n\n    if (status.allSucceeded && status.oneSucceeded) {\n      return {\n        key: 'APP.MESSAGES.INFO.TRASH.NODES_RESTORE.SINGULAR',\n        params: { name: status.success[0].entry.name },\n        userActionLabel: 'APP.ACTIONS.VIEW',\n        type: 'info'\n      };\n    }\n\n    return null;\n  }\n\n  private diff(selection: any[], list: any[], fromList = true): any {\n    const ids = selection.map((item) => item.entry.id);\n\n    return list.filter((item) => {\n      if (fromList) {\n        return ids.includes(item.entry.id) ? item : null;\n      } else {\n        return !ids.includes(item.entry.id) ? item : null;\n      }\n    });\n  }\n\n  private deleteNode(node: any): Observable<DeletedNodeInfo> {\n    const { name } = node.entry;\n    const id = node.entry.nodeId || node.entry.id;\n\n    return this.contentApi.deleteNode(id).pipe(\n      map(() => ({\n        id,\n        name,\n        status: 1\n      })),\n      catchError(() =>\n        of({\n          id,\n          name,\n          status: 0\n        })\n      )\n    );\n  }\n\n  private getDeleteMessageData(status: DeleteStatus): SnackbarMessageData | null {\n    if (status.allFailed && !status.oneFailed) {\n      return {\n        key: 'APP.MESSAGES.ERRORS.NODE_DELETION_PLURAL',\n        params: { number: status.fail.length },\n        type: 'error'\n      };\n    }\n\n    if (status.allSucceeded && !status.oneSucceeded) {\n      return {\n        key: 'APP.MESSAGES.INFO.NODE_DELETION.PLURAL',\n        params: { number: status.success.length },\n        type: 'info'\n      };\n    }\n\n    if (status.someFailed && status.someSucceeded && !status.oneSucceeded) {\n      return {\n        key: 'APP.MESSAGES.INFO.NODE_DELETION.PARTIAL_PLURAL',\n        params: { success: status.success.length, failed: status.fail.length },\n        type: 'warning'\n      };\n    }\n\n    if (status.someFailed && status.oneSucceeded) {\n      return {\n        key: 'APP.MESSAGES.INFO.NODE_DELETION.PARTIAL_SINGULAR',\n        params: { success: status.success.length, failed: status.fail.length },\n        type: 'warning'\n      };\n    }\n\n    if (status.oneFailed && !status.someSucceeded) {\n      return {\n        key: 'APP.MESSAGES.ERRORS.NODE_DELETION',\n        params: { name: status.fail[0].name },\n        type: 'error'\n      };\n    }\n\n    if (status.oneSucceeded && !status.someFailed) {\n      return {\n        key: 'APP.MESSAGES.INFO.NODE_DELETION.SINGULAR',\n        params: { name: status.success[0].name },\n        type: 'info'\n      };\n    }\n\n    return null;\n  }\n\n  private showMoveMessage(nodes: Array<NodeEntry>, info: any, moveResponse?: any) {\n    const succeeded = moveResponse?.['succeeded'].length ?? 0;\n    const partiallySucceeded = moveResponse?.['partiallySucceeded'].length ?? 0;\n    const failures = moveResponse?.['failed'].length ?? 0;\n\n    let successMessage = '';\n    let partialSuccessMessage = '';\n    let failedMessage = '';\n    let errorMessage = '';\n\n    if (typeof info === 'string') {\n      // in case of success\n      if (info.toLowerCase().indexOf('succes') !== -1) {\n        const i18nMessageString = 'APP.MESSAGES.INFO.NODE_MOVE.';\n        let i18MessageSuffix = '';\n\n        if (succeeded) {\n          i18MessageSuffix = succeeded === 1 ? 'SINGULAR' : 'PLURAL';\n          successMessage = `${i18nMessageString}${i18MessageSuffix}`;\n        }\n\n        if (partiallySucceeded) {\n          i18MessageSuffix = partiallySucceeded === 1 ? 'PARTIAL.SINGULAR' : 'PARTIAL.PLURAL';\n          partialSuccessMessage = `${i18nMessageString}${i18MessageSuffix}`;\n        }\n\n        if (failures) {\n          // if moving failed for ALL nodes, emit error\n          if (failures === nodes.length) {\n            const errors = this.nodeActionsService.flatten(moveResponse['failed']);\n            errorMessage = this.getErrorMessage(errors[0]);\n          } else {\n            i18MessageSuffix = 'PARTIAL.FAIL';\n            failedMessage = `${i18nMessageString}${i18MessageSuffix}`;\n          }\n        }\n      } else {\n        errorMessage = 'APP.MESSAGES.ERRORS.GENERIC';\n      }\n    } else {\n      errorMessage = this.getErrorMessage(info);\n    }\n\n    const undo = succeeded + partiallySucceeded > 0 ? this.translation.instant('APP.ACTIONS.UNDO') : '';\n    failedMessage = errorMessage ? errorMessage : failedMessage;\n\n    const beforePartialSuccessMessage = successMessage && partialSuccessMessage ? ' ' : '';\n    const beforeFailedMessage = (successMessage || partialSuccessMessage) && failedMessage ? ' ' : '';\n\n    const initialParentId = this.nodeActionsService.getEntryParentId(nodes[0].entry);\n\n    const messages = this.translation.instant([successMessage, partialSuccessMessage, failedMessage], {\n      success: succeeded,\n      failed: failures,\n      partially: partiallySucceeded\n    });\n\n    let notificationType = 'adf-warning-snackbar';\n    if (partiallySucceeded === 0 && succeeded === 0) {\n      notificationType = 'adf-error-snackbar';\n    } else if (failures === 0 && partiallySucceeded === 0) {\n      notificationType = 'adf-info-snackbar';\n    }\n\n    // TODO: review in terms of i18n\n    this.notificationService\n      .openSnackMessageAction(\n        messages[successMessage] + beforePartialSuccessMessage + messages[partialSuccessMessage] + beforeFailedMessage + messages[failedMessage],\n        undo,\n        {\n          panelClass: notificationType\n        }\n      )\n      .onAction()\n      .subscribe(() => this.undoMoveNodes(moveResponse, initialParentId));\n  }\n\n  private focusAfterClose(focusedElementSelector: string): void {\n    if (focusedElementSelector) {\n      document.querySelector<HTMLElement>(focusedElementSelector)?.focus();\n    }\n  }\n\n  showNodeInformation(node: NodeEntry) {\n    this.dialogRef.open(DialogComponent, {\n      data: {\n        title: 'APP.NODE_INFO.TITLE',\n        confirmButtonTitle: 'APP.NODE_INFO.DONE',\n        isCancelButtonHidden: true,\n        isCloseButtonHidden: false,\n        dialogSize: DialogSize.Large,\n        contentComponent: NodeInformationComponent,\n        componentData: node.entry\n      },\n      width: '700px'\n    });\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { inject, Injectable } from '@angular/core';\nimport { map, take } from 'rxjs/operators';\nimport { AddFavoriteAction, AppStore, getAppSelection, NodeActionTypes, RemoveFavoriteAction } from '@alfresco/aca-shared/store';\nimport { Store } from '@ngrx/store';\nimport { ContentManagementService } from '../../services/content-management.service';\n\n@Injectable()\nexport class FavoriteEffects {\n  private store = inject(Store<AppStore>);\n  private actions$ = inject(Actions);\n  private content = inject(ContentManagementService);\n\n  addFavorite$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<AddFavoriteAction>(NodeActionTypes.AddFavorite),\n        map((action) => {\n          if (action.payload && action.payload.length > 0) {\n            this.content.addFavorite(action.payload, action.configuration.focusedElementOnCloseSelector);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.content.addFavorite(selection.nodes, action.configuration.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  removeFavorite$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<RemoveFavoriteAction>(NodeActionTypes.RemoveFavorite),\n        map((action) => {\n          if (action.payload && action.payload.length > 0) {\n            this.content.removeFavorite(action.payload, action.configuration.focusedElementOnCloseSelector);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.content.removeFavorite(selection.nodes, action.configuration.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { inject, Injectable, SecurityContext } from '@angular/core';\nimport { first, map, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport {\n  AppStore,\n  CopyNodesAction,\n  CreateFolderAction,\n  DeleteNodesAction,\n  EditFolderAction,\n  ExpandInfoDrawerAction,\n  getAppSelection,\n  getCurrentFolder,\n  ManageAspectsAction,\n  ManagePermissionsAction,\n  ManageRulesAction,\n  ManageVersionsAction,\n  MoveNodesAction,\n  NavigateRouteAction,\n  NavigateUrlAction,\n  NodeActionTypes,\n  PrintFileAction,\n  PurgeDeletedNodesAction,\n  RestoreDeletedNodesAction,\n  SetInfoDrawerStateAction,\n  ShareNodeAction,\n  ShowLoaderAction,\n  UndoDeleteNodesAction,\n  UnlockWriteAction,\n  UnshareNodesAction,\n  NodeInformationAction\n} from '@alfresco/aca-shared/store';\nimport { ContentManagementService } from '../../services/content-management.service';\nimport { RenditionService } from '@alfresco/adf-content-services';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Injectable()\nexport class NodeEffects {\n  private readonly store = inject(Store<AppStore>);\n  private readonly actions$ = inject(Actions);\n  private readonly router = inject(Router);\n  private readonly contentService = inject(ContentManagementService);\n  private readonly renditionViewer = inject(RenditionService);\n  private readonly activatedRoute = inject(ActivatedRoute);\n  private readonly sanitizer = inject(DomSanitizer);\n\n  shareNode$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ShareNodeAction>(NodeActionTypes.Share),\n        map((action) => {\n          if (action.payload) {\n            this.contentService.shareNode(action.payload, action.configuration?.focusedElementOnCloseSelector);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection?.file) {\n                  this.contentService.shareNode(selection.file, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  unshareNodes$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<UnshareNodesAction>(NodeActionTypes.Unshare),\n        map((action) => {\n          if (action?.payload?.length > 0) {\n            this.contentService.unshareNodes(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.contentService.unshareNodes(selection.nodes);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  purgeDeletedNodes$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<PurgeDeletedNodesAction>(NodeActionTypes.PurgeDeleted),\n        map((action) => {\n          if (action?.payload?.length > 0) {\n            this.contentService.purgeDeletedNodes(action.payload, action.configuration?.focusedElementOnCloseSelector);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && selection.count > 0) {\n                  this.contentService.purgeDeletedNodes(selection.nodes, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  restoreDeletedNodes$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<RestoreDeletedNodesAction>(NodeActionTypes.RestoreDeleted),\n        map((action) => {\n          if (action?.payload?.length > 0) {\n            this.contentService.restoreDeletedNodes(action.payload, action.configuration?.focusedElementOnCloseSelector);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && selection.count > 0) {\n                  this.contentService.restoreDeletedNodes(selection.nodes, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  deleteNodes$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<DeleteNodesAction>(NodeActionTypes.Delete),\n        map((action) => {\n          this.store.dispatch(new ShowLoaderAction(true));\n          if (action?.payload?.length > 0) {\n            this.contentService.deleteNodes(action.payload, action.allowUndo, action.configuration?.focusedElementOnCloseSelector);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && selection.count > 0) {\n                  this.contentService.deleteNodes(selection.nodes, action.allowUndo, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  undoDeleteNodes$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<UndoDeleteNodesAction>(NodeActionTypes.UndoDelete),\n        map((action) => {\n          if (action.payload.length > 0) {\n            this.contentService.undoDeleteNodes(action.payload);\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  createFolder$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<CreateFolderAction>(NodeActionTypes.CreateFolder),\n        map((action) => {\n          if (action.payload) {\n            this.contentService.createFolder(action.payload);\n          } else {\n            this.store\n              .select(getCurrentFolder)\n              .pipe(take(1))\n              .subscribe((node) => {\n                if (node?.id) {\n                  this.contentService.createFolder(node.id);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  editFolder$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<EditFolderAction>(NodeActionTypes.EditFolder),\n        map((action) => {\n          if (action.payload) {\n            this.contentService.editFolder(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection?.folder) {\n                  this.contentService.editFolder(selection.folder, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  copyNodes$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<CopyNodesAction>(NodeActionTypes.Copy),\n        map((action) => {\n          if (action.payload?.length > 0) {\n            this.contentService.copyNodes(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.contentService.copyNodes(selection.nodes, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  moveNodes$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<MoveNodesAction>(NodeActionTypes.Move),\n        map((action) => {\n          if (action.payload?.length > 0) {\n            this.contentService.moveNodes(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.contentService.moveNodes(selection.nodes, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  managePermissions$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ManagePermissionsAction>(NodeActionTypes.ManagePermissions),\n        map((action) => {\n          this.router.events\n            .pipe(first((event) => event instanceof NavigationEnd))\n            .subscribe(() => this.store.dispatch(new SetInfoDrawerStateAction(true)));\n          if (action?.payload) {\n            const route = 'personal-files/details';\n            this.store.dispatch(new NavigateUrlAction([route, action.payload.entry.id, 'permissions'].join('/')));\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  const route = 'personal-files/details';\n                  this.store.dispatch(new NavigateUrlAction([route, selection.last.entry.id, 'permissions'].join('/')));\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  expandInfoDrawer$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ExpandInfoDrawerAction>(NodeActionTypes.ExpandInfoDrawer),\n        map((action) => {\n          this.router.events\n            .pipe(first((event) => event instanceof NavigationEnd))\n            .subscribe(() => this.store.dispatch(new SetInfoDrawerStateAction(true)));\n\n          this.activatedRoute.queryParams.pipe(take(1)).subscribe((params) => {\n            const location = params.location || this.router.url;\n            const sanitizedLocation = this.sanitizer.sanitize(SecurityContext.URL, location);\n            const route = 'personal-files/details';\n\n            if (action?.payload) {\n              this.store.dispatch(new NavigateUrlAction([route, action.payload.entry.id].join('/') + `?location=${sanitizedLocation}`));\n            } else {\n              this.store\n                .select(getAppSelection)\n                .pipe(take(1))\n                .subscribe((selection) => {\n                  if (selection && !selection.isEmpty) {\n                    this.store.dispatch(new NavigateUrlAction([route, selection.last.entry.id].join('/') + `?location=${sanitizedLocation}`));\n                  }\n                });\n            }\n          });\n        })\n      ),\n    { dispatch: false }\n  );\n\n  manageVersions$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ManageVersionsAction>(NodeActionTypes.ManageVersions),\n        map((action) => {\n          if (action?.payload) {\n            this.contentService.manageVersions(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection?.file) {\n                  this.contentService.manageVersions(selection.file, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  printFile$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<PrintFileAction>(NodeActionTypes.PrintFile),\n        map((action) => {\n          if (action?.payload) {\n            this.printFile(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection?.file) {\n                  this.printFile(selection.file);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  unlockWrite$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<UnlockWriteAction>(NodeActionTypes.UnlockForWriting),\n        map((action) => {\n          if (action?.payload) {\n            this.contentService.unlockNode(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection?.file) {\n                  this.contentService.unlockNode(selection.file);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  aspectList$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ManageAspectsAction>(NodeActionTypes.ChangeAspects),\n        map((action) => {\n          if (action?.payload) {\n            this.contentService.manageAspects(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.contentService.manageAspects(selection.nodes[0], action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  printFile(node: any) {\n    if (node?.entry) {\n      // shared and favorite\n      const id = node.entry.nodeId || node.entry.guid || node.entry.id;\n      const mimeType = node.entry.content.mimeType;\n\n      if (id) {\n        this.renditionViewer.printFileGeneric(id, mimeType);\n      }\n    }\n  }\n\n  manageRules$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ManageRulesAction>(NodeActionTypes.ManageRules),\n        map((action) => {\n          if (action?.payload) {\n            this.store.dispatch(new NavigateRouteAction(['nodes', action.payload.entry.id, 'rules']));\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.store.dispatch(new NavigateRouteAction(['nodes', selection.first.entry.id, 'rules']));\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  nodeInformation$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<NodeInformationAction>(NodeActionTypes.NodeInformation),\n        map((action) => {\n          if (action?.payload) {\n            this.contentService.showNodeInformation(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection && !selection.isEmpty) {\n                  this.contentService.showNodeInformation(selection.nodes[0]);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { inject, Injectable } from '@angular/core';\nimport { map, take, tap } from 'rxjs/operators';\nimport {\n  AppStore,\n  FullscreenViewerAction,\n  getAppSelection,\n  getCurrentFolder,\n  PluginPreviewAction,\n  ViewerActionTypes,\n  ViewFileAction,\n  ViewNodeAction,\n  ViewNodeVersionAction\n} from '@alfresco/aca-shared/store';\nimport { PRIMARY_OUTLET, Router, UrlSegment, UrlSegmentGroup, UrlTree } from '@angular/router';\nimport { createSelector, Store } from '@ngrx/store';\nimport { AppExtensionService } from '@alfresco/aca-shared';\nimport { MatDialog } from '@angular/material/dialog';\n\nexport const fileToPreview = createSelector(getAppSelection, getCurrentFolder, (selection, folder) => ({\n  selection,\n  folder\n}));\n\n@Injectable()\nexport class ViewerEffects {\n  private store = inject(Store<AppStore>);\n  private actions$ = inject(Actions);\n  private router = inject(Router);\n  private extensions = inject(AppExtensionService);\n  private dialog = inject(MatDialog);\n\n  fullscreenViewer$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<FullscreenViewerAction>(ViewerActionTypes.FullScreen),\n        map(() => {\n          this.enterFullScreen();\n        })\n      ),\n    { dispatch: false }\n  );\n\n  viewNode$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ViewNodeAction>(ViewerActionTypes.ViewNode),\n        map((action) => {\n          if (action.viewNodeExtras) {\n            const { location, path } = action.viewNodeExtras;\n\n            if (location) {\n              const navigation = this.getNavigationCommands(location);\n\n              this.router.navigate([...navigation, { outlets: { viewer: ['view', action.nodeId] } }], {\n                queryParams: { location }\n              });\n            }\n\n            if (path) {\n              this.router.navigate(['view', { outlets: { viewer: [action.nodeId] } }], {\n                queryParams: { path }\n              });\n            }\n          } else {\n            this.router.navigate(['view', { outlets: { viewer: [action.nodeId] } }]);\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  viewFile$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ViewFileAction>(ViewerActionTypes.ViewFile),\n        map((action) => {\n          if (action.payload?.entry) {\n            const { id, nodeId, isFile } = action.payload.entry as any;\n\n            if (this.extensions.canPreviewNode(action.payload) && (isFile || nodeId)) {\n              this.displayPreview(nodeId || id, action.parentId);\n            }\n          } else {\n            this.store\n              .select(fileToPreview)\n              .pipe(take(1))\n              .subscribe((result) => {\n                if (result.selection?.file) {\n                  const { id, nodeId, isFile } = result.selection.file.entry as any;\n\n                  if (this.extensions.canPreviewNode(action.payload) && (isFile || nodeId)) {\n                    const parentId = result.folder ? result.folder.id : null;\n                    this.displayPreview(nodeId || id, parentId);\n                  }\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  viewNodeVersion$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ViewNodeVersionAction>(ViewerActionTypes.ViewNodeVersion),\n        map((action) => {\n          this.dialog.closeAll();\n          if (action.viewNodeExtras) {\n            const { location, path } = action.viewNodeExtras;\n            if (location) {\n              const navigation = this.getNavigationCommands(location);\n              this.router.navigate([...navigation, { outlets: { viewer: ['view', action.nodeId, action.versionId] } }], {\n                queryParams: { location }\n              });\n            }\n\n            if (path) {\n              this.router.navigate(['view', { outlets: { viewer: [action.nodeId, action.versionId] } }], {\n                queryParams: { path }\n              });\n            }\n          } else {\n            this.router.navigate(['view', { outlets: { viewer: [action.nodeId, action.versionId] } }]);\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  pluginPreview$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<PluginPreviewAction>(ViewerActionTypes.PluginPreview),\n        tap((action) => {\n          this.router.navigate([\n            action.pluginRoute,\n            {\n              outlets: {\n                viewer: ['preview', action.nodeId]\n              }\n            }\n          ]);\n        })\n      ),\n    { dispatch: false }\n  );\n\n  private displayPreview(nodeId: string, parentId: string) {\n    if (!nodeId) {\n      return;\n    }\n\n    let previewLocation = this.router.url;\n    if (previewLocation.lastIndexOf('/') > 0) {\n      previewLocation = previewLocation.substring(0, this.router.url.indexOf('/', 1));\n    }\n    previewLocation = previewLocation.replace(/\\//g, '');\n\n    const path = [previewLocation];\n    if (parentId) {\n      path.push(parentId);\n    }\n    path.push('preview', nodeId);\n    this.router.navigateByUrl(path.join('/'));\n  }\n\n  enterFullScreen() {\n    const container: any = document.documentElement.querySelector('.adf-viewer__fullscreen-container');\n    if (container) {\n      if (container.requestFullscreen) {\n        container.requestFullscreen();\n      } else if (container.webkitRequestFullscreen) {\n        container.webkitRequestFullscreen();\n      } else if (container.mozRequestFullScreen) {\n        container.mozRequestFullScreen();\n      } else if (container.msRequestFullscreen) {\n        container.msRequestFullscreen();\n      }\n    }\n  }\n\n  private getNavigationCommands(url: string): any[] {\n    const urlTree: UrlTree = this.router.parseUrl(url);\n    const urlSegmentGroup: UrlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET];\n\n    if (!urlSegmentGroup) {\n      return [url];\n    }\n\n    const urlSegments: UrlSegment[] = urlSegmentGroup.segments;\n\n    return urlSegments.reduce(function (acc, item) {\n      acc.push(item.path, item.parameters);\n      return acc;\n    }, []);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SearchNavigationService {\n  private _previousRoute = '';\n\n  get previousRoute(): string {\n    return this._previousRoute;\n  }\n\n  constructor(private router: Router) {}\n\n  saveRoute(route: string): void {\n    this._previousRoute = route;\n  }\n\n  navigateBack(): void {\n    if (this.previousRoute) {\n      this.router.navigate([this.previousRoute]);\n    } else {\n      this.router.navigate(['/personal-files']);\n    }\n  }\n\n  navigateToSearch(): void {\n    this.saveRoute(this.router.url);\n    this.router.navigate(['/search']);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Checks if string is an AND or OR operator\n *\n * @param input string to check if it is an operator\n * @returns boolean\n */\nexport function isOperator(input: string): boolean {\n  if (input) {\n    const operators = ['AND', 'OR'];\n    return operators.includes(input.trim());\n  }\n  return false;\n}\n\n/**\n * Formats a search term by provided fields\n *\n * @param term search term\n * @param fields array of fields\n * @returns string\n */\nexport function formatSearchTermByFields(term: string, fields: string[]): string {\n  let prefix = '';\n  let suffix = '*';\n\n  if (term.startsWith('=')) {\n    prefix = '=';\n    suffix = '';\n    term = term.substring(1);\n  }\n\n  if (term === '*') {\n    prefix = '';\n    suffix = '';\n  }\n\n  return '(' + fields.map((field) => `${prefix}${field}:\"${term}${suffix}\"`).join(' OR ') + ')';\n}\n\n/**\n * Formats a search term, splits by words, skips custom queries containing ':' or '\"'\n *\n * @param userInput search term\n * @param fields array of fields\n * @returns string\n */\nexport function formatSearchTerm(userInput: string, fields = ['cm:name']): string {\n  if (!userInput) {\n    return '';\n  }\n  userInput = userInput.trim();\n\n  if (userInput.includes(':') || userInput.includes('\"')) {\n    return userInput;\n  }\n\n  const words = userInput.split(/\\s+/);\n\n  if (words.length > 1) {\n    const separator = words.some(isOperator) ? ' ' : ' AND ';\n    return words.map((term) => (isOperator(term) ? term : formatSearchTermByFields(term, fields))).join(separator);\n  }\n\n  return formatSearchTermByFields(userInput, fields);\n}\n\n/**\n * Decodes a query and extracts the user query\n *\n * @param encodedQuery encoded query\n * @returns string\n */\nexport function extractUserQueryFromEncodedQuery(encodedQuery: string): string {\n  if (encodedQuery) {\n    const decodedQuery: { [key: string]: any } = JSON.parse(new TextDecoder().decode(Uint8Array.from(atob(encodedQuery), (c) => c.charCodeAt(0))));\n    return trimUserQuery(decodedQuery.userQuery);\n  }\n  return '';\n}\n\n/**\n * Extracts user query from encoded query and splits it to get a search term\n *\n * @param encodedQuery encoded query\n * @returns string\n */\nexport function extractSearchedWordFromEncodedQuery(encodedQuery: string): string {\n  if (!encodedQuery) {\n    return '';\n  }\n\n  const userQuery = extractUserQueryFromEncodedQuery(encodedQuery);\n  if (!userQuery) {\n    return '';\n  }\n\n  const tokenRegex = /\\(([^()]+)\\)|\\b(AND|OR)\\b/g;\n  const fragments: string[] = [];\n  let match: RegExpExecArray | null;\n\n  while ((match = tokenRegex.exec(userQuery))) {\n    if (match[1]) {\n      fragments.push(extractWordFromQuery(match[1]));\n    } else if (match[2] === 'OR') {\n      fragments.push('OR');\n    }\n  }\n\n  if (fragments.length === 0) {\n    return userQuery\n      .split(/\\bAND\\b|\\bOR\\b/)\n      .map((part) => extractWordFromQuery(part))\n      .filter(Boolean)\n      .join(' ')\n      .trim();\n  }\n\n  return fragments.join(' ').trim();\n}\n\n/**\n * Extracts the searched word from a part of search query\n *\n * @param queryPart encoded query\n * @returns searched word\n */\nfunction extractWordFromQuery(queryPart: string): string {\n  const regex = /:\"([^\"]+)\"/;\n  const quoted = regex.exec(queryPart);\n  if (quoted) {\n    return quoted[1].replace(/\\*$/, '');\n  }\n  const trimmedPart = queryPart.trim();\n  if (trimmedPart && !isOperator(trimmedPart)) {\n    return trimmedPart;\n  }\n  return '';\n}\n\n/**\n * Extracts filters configuration from encoded query\n *\n * @param encodedQuery encoded query\n * @returns object containing filters configuration\n */\nexport function extractFiltersFromEncodedQuery(encodedQuery: string): any {\n  if (encodedQuery) {\n    const decodedQuery = new TextDecoder().decode(Uint8Array.from(atob(encodedQuery), (c) => c.charCodeAt(0)));\n    return JSON.parse(decodedQuery);\n  }\n  return null;\n}\n\n/**\n * Trims one set of parentheses from parsed user query.\n *\n * @param userQuery user query parsed from encoded query\n * @returns string\n */\nfunction trimUserQuery(userQuery: string): string {\n  const trimmedQuery = userQuery?.replace(/^\\(/, '');\n  return trimmedQuery?.replace(/\\)$/, '') ?? '';\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { inject, Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { SearchAction, SearchActionTypes, SearchByTermAction, SearchOptionIds } from '@alfresco/aca-shared/store';\nimport { SearchNavigationService } from '../../components/search/search-navigation.service';\nimport { SearchQueryBuilderService } from '@alfresco/adf-content-services';\nimport { formatSearchTerm } from '../../utils/aca-search-utils';\n\n@Injectable()\nexport class SearchEffects {\n  private readonly actions$ = inject(Actions);\n  private readonly queryBuilder = inject(SearchQueryBuilderService);\n  private readonly searchNavigationService = inject(SearchNavigationService);\n\n  search$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<SearchAction>(SearchActionTypes.Search),\n        map(() => {\n          this.searchNavigationService.navigateToSearch();\n        })\n      ),\n    { dispatch: false }\n  );\n\n  searchByTerm$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<SearchByTermAction>(SearchActionTypes.SearchByTerm),\n        map((action) => {\n          const query = formatSearchTerm(action.payload, this.queryBuilder.config['app:fields']);\n          const libItem = action.searchOptions.find((item) => item.id === SearchOptionIds.Libraries);\n          const librarySelected = !!libItem && libItem.value;\n          this.queryBuilder.navigateToSearch(query, librarySelected ? '/search-libraries' : '/search');\n        })\n      ),\n    { dispatch: false }\n  );\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n  AppStore,\n  CreateLibraryAction,\n  DeleteLibraryAction,\n  getAppSelection,\n  LeaveLibraryAction,\n  LibraryActionTypes,\n  NavigateLibraryAction,\n  NavigateRouteAction,\n  UpdateLibraryAction,\n  isAdmin\n} from '@alfresco/aca-shared/store';\nimport { inject, Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { map, mergeMap, take, tap } from 'rxjs/operators';\nimport { ContentApiService } from '@alfresco/aca-shared';\nimport { ContentManagementService } from '../../services/content-management.service';\nimport { NotificationService } from '@alfresco/adf-core';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n@Injectable()\nexport class LibraryEffects {\n  private notificationService = inject(NotificationService);\n  private store = inject(Store<AppStore>);\n  private actions$ = inject(Actions);\n  private content = inject(ContentManagementService);\n  private contentApi = inject(ContentApiService);\n\n  deleteLibrary$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<DeleteLibraryAction>(LibraryActionTypes.Delete),\n        map((action) => {\n          if (action.payload) {\n            this.content.deleteLibrary(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection?.library) {\n                  this.content.deleteLibrary(selection.library.entry.id);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  leaveLibrary$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<LeaveLibraryAction>(LibraryActionTypes.Leave),\n        map((action) => {\n          if (action.payload) {\n            this.content.leaveLibrary(action.payload);\n          } else {\n            this.store\n              .select(getAppSelection)\n              .pipe(take(1))\n              .subscribe((selection) => {\n                if (selection?.library) {\n                  this.content.leaveLibrary(selection.library.entry.id, action.configuration?.focusedElementOnCloseSelector);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  createLibrary$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<CreateLibraryAction>(LibraryActionTypes.Create),\n        mergeMap(() => this.content.createLibrary()),\n        tap((libraryId) => this.navigateToLibraryById(libraryId))\n      ),\n    { dispatch: false }\n  );\n\n  navigateLibrary$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<NavigateLibraryAction>(LibraryActionTypes.Navigate),\n        tap((action) => {\n          const payload = action.payload;\n          if (payload && 'guid' in payload) {\n            this.store\n              .select(isAdmin)\n              .pipe(take(1))\n              .subscribe((isUserAdmin) => {\n                if (!isUserAdmin && payload.visibility !== 'PUBLIC' && !payload.role) {\n                  this.notificationService.showError('APP.BROWSE.LIBRARIES.LIBRARY_NO_PERMISSIONS_WARNING');\n                } else {\n                  this.navigateToLibraryById(payload.guid, action.route);\n                }\n              });\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  private navigateToLibraryById(libraryId: string, route = 'libraries'): void {\n    this.contentApi\n      .getNode(libraryId, { relativePath: '/documentLibrary' })\n      .pipe(\n        map((node) => node.entry.id),\n        take(1)\n      )\n      .subscribe({\n        next: (id) => {\n          this.store.dispatch(new NavigateRouteAction([route, id]));\n        },\n        error: (error: HttpErrorResponse) => {\n          switch (error.status) {\n            case 403:\n              this.notificationService.showWarning('APP.BROWSE.LIBRARIES.LIBRARY_NO_PERMISSIONS_WARNING');\n              break;\n            case 404:\n              this.notificationService.showError('APP.BROWSE.LIBRARIES.ERRORS.LIBRARY_NOT_FOUND');\n              break;\n            default:\n              this.notificationService.showError('APP.BROWSE.LIBRARIES.ERRORS.LIBRARY_LOADING_ERROR');\n          }\n        }\n      });\n  }\n\n  updateLibrary$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<UpdateLibraryAction>(LibraryActionTypes.Update),\n        map((action) => {\n          this.store\n            .select(getAppSelection)\n            .pipe(take(1))\n            .subscribe((selection) => {\n              if (selection?.library) {\n                const { id } = selection.library.entry;\n                const { title, description, visibility } = action.payload;\n\n                const siteBody = {\n                  title,\n                  description,\n                  visibility\n                };\n\n                this.content.updateLibrary(id, siteBody);\n              }\n            });\n        })\n      ),\n    { dispatch: false }\n  );\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n  AppStore,\n  getCurrentFolder,\n  UnlockWriteAction,\n  UploadActionTypes,\n  UploadFilesAction,\n  UploadFileVersionAction,\n  UploadFolderAction\n} from '@alfresco/aca-shared/store';\nimport { FileUtils, NotificationService } from '@alfresco/adf-core';\nimport { inject, Injectable, NgZone, RendererFactory2 } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { of } from 'rxjs';\nimport { catchError, map, take } from 'rxjs/operators';\nimport { ContentManagementService } from '../../services/content-management.service';\nimport { Node } from '@alfresco/js-api';\nimport { FileModel, UploadService } from '@alfresco/adf-content-services';\n\n@Injectable()\nexport class UploadEffects {\n  private notificationService = inject(NotificationService);\n\n  private readonly fileInput: HTMLInputElement;\n  private readonly folderInput: HTMLInputElement;\n  private readonly fileVersionInput: HTMLInputElement;\n  private readonly uploadMenuButtonSelector = 'app-toolbar-menu button[id=\"app.toolbar.upload\"]';\n\n  store = inject(Store<AppStore>);\n  actions$ = inject(Actions);\n  ngZone = inject(NgZone);\n  uploadService = inject(UploadService);\n  contentService = inject(ContentManagementService);\n\n  constructor() {\n    const renderer = inject(RendererFactory2).createRenderer(null, null);\n\n    this.fileInput = renderer.createElement('input') as HTMLInputElement;\n    this.fileInput.id = 'app-upload-files';\n    this.fileInput.type = 'file';\n    this.fileInput.style.display = 'none';\n    this.fileInput.setAttribute('multiple', '');\n    this.fileInput.addEventListener('change', (event) => this.upload(event));\n    renderer.appendChild(document.body, this.fileInput);\n\n    this.fileVersionInput = renderer.createElement('input') as HTMLInputElement;\n    this.fileVersionInput.id = 'app-upload-file-version';\n    this.fileVersionInput.type = 'file';\n    this.fileVersionInput.style.display = 'none';\n    this.fileVersionInput.addEventListener('change', () => {\n      this.uploadVersion();\n    });\n    renderer.appendChild(document.body, this.fileVersionInput);\n\n    this.folderInput = renderer.createElement('input') as HTMLInputElement;\n    this.folderInput.id = 'app-upload-folder';\n    this.folderInput.type = 'file';\n    this.folderInput.style.display = 'none';\n    this.folderInput.setAttribute('directory', '');\n    this.folderInput.setAttribute('webkitdirectory', '');\n    this.folderInput.addEventListener('change', (event) => this.upload(event));\n    renderer.appendChild(document.body, this.folderInput);\n  }\n\n  uploadFiles$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<UploadFilesAction>(UploadActionTypes.UploadFiles),\n        map(() => {\n          this.registerFocusingElementAfterModalClose(this.fileInput, this.uploadMenuButtonSelector);\n          this.fileInput.click();\n        })\n      ),\n    { dispatch: false }\n  );\n\n  uploadFolder$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<UploadFolderAction>(UploadActionTypes.UploadFolder),\n        map(() => {\n          this.registerFocusingElementAfterModalClose(this.folderInput, this.uploadMenuButtonSelector);\n          this.folderInput.click();\n        })\n      ),\n    { dispatch: false }\n  );\n\n  uploadVersion$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<UploadFileVersionAction>(UploadActionTypes.UploadFileVersion),\n        map((action) => {\n          if (action?.payload) {\n            const node = action?.payload?.detail?.data?.node?.entry;\n            const file: any = action?.payload?.detail?.files[0]?.file;\n            this.contentService.versionUpdateDialog(node, file);\n          } else if (!action?.payload) {\n            this.registerFocusingElementAfterModalClose(this.fileVersionInput, action.configuration?.focusedElementOnCloseSelector);\n            this.fileVersionInput.click();\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n\n  uploadVersion() {\n    this.contentService\n      .getNodeInfo()\n      .pipe(\n        catchError(() => {\n          this.notificationService.showError('VERSION.ERROR.GENERIC');\n          return of(null);\n        })\n      )\n      .subscribe((node: Node) => {\n        if (node) {\n          this.contentService.versionUpdateDialog(node, this.fileVersionInput.files[0]);\n          this.fileVersionInput.value = '';\n        }\n      });\n  }\n\n  private upload(event: any): void {\n    this.store\n      .select(getCurrentFolder)\n      .pipe(take(1))\n      .subscribe((node) => {\n        if (node?.id) {\n          const input = event.currentTarget as HTMLInputElement;\n          const files = FileUtils.toFileArray(input.files).map(\n            (file: any) =>\n              new FileModel(file, {\n                parentId: node.id,\n                path: (file.webkitRelativePath || '').replace(/\\/[^\\/]*$/, ''),\n                nodeType: 'cm:content'\n              })\n          );\n\n          this.uploadQueue(files);\n          event.target.value = '';\n        }\n      });\n  }\n\n  private uploadQueue(files: FileModel[]) {\n    if (files.length > 0) {\n      this.ngZone.run(() => {\n        this.uploadService.addToQueue(...files);\n        this.uploadService.uploadFilesInTheQueue();\n      });\n    }\n  }\n\n  uploadAndUnlock(file: FileModel | null) {\n    if (!file) {\n      return;\n    }\n\n    this.ngZone.run(() => {\n      this.uploadService.addToQueue(file);\n      this.uploadService.uploadFilesInTheQueue();\n\n      const subscription = this.uploadService.fileUploadComplete.subscribe((completed) => {\n        if (file.data?.entry?.properties?.['cm:lockType'] === 'WRITE_LOCK' && file.data?.entry?.id === completed.data.entry.id) {\n          this.store.dispatch(new UnlockWriteAction(completed.data));\n        }\n\n        subscription.unsubscribe();\n      });\n    });\n  }\n\n  private registerFocusingElementAfterModalClose(input: HTMLInputElement, focusedElementSelector: string): void {\n    input.addEventListener(\n      'click',\n      () => {\n        window.addEventListener(\n          'focus',\n          () => {\n            const elementToFocus = document.querySelector<HTMLElement>(focusedElementSelector);\n            elementToFocus.addEventListener('focus', () => elementToFocus.classList.add('cdk-program-focused'), {\n              once: true\n            });\n            elementToFocus.focus();\n          },\n          {\n            once: true\n          }\n        );\n      },\n      {\n        once: true\n      }\n    );\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, ViewEncapsulation, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { Node } from '@alfresco/js-api';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators, UntypedFormControl, ValidationErrors, ReactiveFormsModule } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { AppStore, CreateFromTemplate } from '@alfresco/aca-shared/store';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatDialogModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n  templateUrl: './create-from-template.dialog.html',\n  styleUrls: ['./create-from-template.dialog.scss'],\n  selector: 'app-create-from-template-dialog',\n  encapsulation: ViewEncapsulation.None\n})\nexport class CreateFromTemplateDialogComponent implements OnInit {\n  public form: UntypedFormGroup;\n\n  title = '';\n\n  constructor(\n    private translationService: TranslationService,\n    private store: Store<AppStore>,\n    private formBuilder: UntypedFormBuilder,\n    private dialogRef: MatDialogRef<CreateFromTemplateDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: Node\n  ) {}\n\n  ngOnInit() {\n    this.form = this.formBuilder.group({\n      name: [this.data.name, [Validators.required, this.forbidEndingDot, this.forbidOnlySpaces, this.forbidSpecialCharacters]],\n      title: [this.data.properties ? this.data.properties['cm:title'] : '', Validators.maxLength(256)],\n      description: [this.data.properties ? this.data.properties['cm:description'] : '', Validators.maxLength(512)]\n    });\n\n    this.title = this.translationService.instant(\n      this.data.isFolder ? 'NODE_FROM_TEMPLATE.FOLDER_DIALOG_TITLE' : 'NODE_FROM_TEMPLATE.FILE_DIALOG_TITLE',\n      { template: this.data.name }\n    );\n  }\n\n  onSubmit() {\n    const update = {\n      name: this.form.value.name.trim(),\n      properties: {\n        'cm:title': this.form.value.title,\n        'cm:description': this.form.value.description\n      }\n    };\n    const data: Node = Object.assign({}, this.data, update);\n    this.store.dispatch(new CreateFromTemplate(data));\n  }\n\n  close() {\n    this.dialogRef.close();\n  }\n\n  private forbidSpecialCharacters({ value }: UntypedFormControl): ValidationErrors | null {\n    const specialCharacters = /([\\*\\\"\\<\\>\\\\\\/\\?\\:\\|])/;\n    const isValid = !specialCharacters.test(value);\n\n    return isValid\n      ? null\n      : {\n          message: `NODE_FROM_TEMPLATE.FORM.ERRORS.SPECIAL_CHARACTERS`\n        };\n  }\n\n  private forbidEndingDot({ value }: UntypedFormControl): ValidationErrors | null {\n    const isValid: boolean = (value || '').trim().split('').pop() !== '.';\n\n    return isValid\n      ? null\n      : {\n          message: `NODE_FROM_TEMPLATE.FORM.ERRORS.ENDING_DOT`\n        };\n  }\n\n  private forbidOnlySpaces({ value }: UntypedFormControl): ValidationErrors | null {\n    if (value.length) {\n      const isValid = !!(value || '').trim();\n\n      return isValid\n        ? null\n        : {\n            message: `NODE_FROM_TEMPLATE.FORM.ERRORS.ONLY_SPACES`\n          };\n    } else {\n      return {\n        message: `NODE_FROM_TEMPLATE.FORM.ERRORS.REQUIRED`\n      };\n    }\n  }\n}\n","<h2 mat-dialog-title [innerHTML]=\"title\" class=\"app-create-from-template-title\" data-automation-id=\"create-from-template-title\"></h2>\n<div mat-dialog-content class=\"app-create-from-template-content\">\n  <form [formGroup]=\"form\" novalidate>\n    <mat-form-field class=\"app-create-from-template-field\">\n      <mat-label>{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.NAME' | translate }}</mat-label>\n      <input\n        cdkFocusInitial\n        matInput\n        formControlName=\"name\"\n        required\n      />\n\n      <mat-error *ngIf=\"form.controls['name'].errors?.message\" data-automation-id=\"create-from-template-field-error\">\n        {{ form.controls['name'].errors?.message | translate }}\n      </mat-error>\n    </mat-form-field>\n\n    <mat-form-field class=\"app-create-from-template-field\">\n      <mat-label>{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.TITLE' | translate }}</mat-label>\n      <input\n        matInput\n        formControlName=\"title\"\n      />\n\n      <mat-error *ngIf=\"form.controls['title'].hasError('maxlength')\" data-automation-id=\"create-from-template-field-error\">\n        {{ 'NODE_FROM_TEMPLATE.FORM.ERRORS.TITLE_TOO_LONG' | translate }}\n      </mat-error>\n    </mat-form-field>\n\n    <mat-form-field class=\"app-create-from-template-field app-create-from-template-field-description\">\n      <mat-label>{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.DESCRIPTION' | translate }}</mat-label>\n      <textarea\n        matInput\n        rows=\"2\"\n        formControlName=\"description\"\n      ></textarea>\n\n      <mat-error *ngIf=\"form.controls['description'].hasError('maxlength')\" data-automation-id=\"create-from-template-field-error\">\n        {{ 'NODE_FROM_TEMPLATE.FORM.ERRORS.DESCRIPTION_TOO_LONG' | translate }}\n      </mat-error>\n    </mat-form-field>\n  </form>\n</div>\n<div mat-dialog-actions class=\"app-create-from-template-footer\">\n  <button mat-button mat-dialog-close data-automation-id=\"create-from-template-dialog-cancel-button\">\n    {{ 'NODE_FROM_TEMPLATE.CANCEL' | translate }}\n  </button>\n  <button\n    class=\"app-create-from-template-footer-create-button\"\n    [disabled]=\"form.invalid\"\n    mat-button\n    (click)=\"onSubmit()\"\n    data-automation-id=\"create-from-template-dialog-create-button\"\n  >\n    {{ 'NODE_FROM_TEMPLATE.CREATE' | translate }}\n  </button>\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { inject, Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { CreateFromTemplateDialogComponent } from '../dialogs/node-template/create-from-template.dialog';\nimport { Subject, from, of } from 'rxjs';\nimport { Node, ResultNode, PathElement, SearchApi } from '@alfresco/js-api';\nimport { TranslationService, NotificationService } from '@alfresco/adf-core';\nimport { switchMap, catchError } from 'rxjs/operators';\nimport {\n  AlfrescoApiService,\n  ContentNodeSelectorComponent,\n  ContentNodeSelectorComponentData,\n  ShareDataRow,\n  NodeAction\n} from '@alfresco/adf-content-services';\n\nexport interface TemplateDialogConfig {\n  primaryPathName: string;\n  selectionType: string;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NodeTemplateService {\n  private alfrescoApiService = inject(AlfrescoApiService);\n  private notificationService = inject(NotificationService);\n  private translation = inject(TranslationService);\n  private dialog = inject(MatDialog);\n\n  private currentTemplateConfig: TemplateDialogConfig = null;\n  private rootNode: ResultNode;\n\n  private _searchApi: SearchApi;\n  get searchApi(): SearchApi {\n    this._searchApi = this._searchApi ?? new SearchApi(this.alfrescoApiService.getInstance());\n    return this._searchApi;\n  }\n\n  selectTemplateDialog(config: TemplateDialogConfig): Subject<Node[]> {\n    this.currentTemplateConfig = config;\n\n    const select = new Subject<Node[]>();\n    select.subscribe({\n      complete: this.close.bind(this)\n    });\n\n    const data: ContentNodeSelectorComponentData = {\n      selectionMode: 'single',\n      title: this.title(config.selectionType),\n      actionName: NodeAction.NEXT,\n      dropdownHideMyFiles: true,\n      currentFolderId: null,\n      dropdownSiteList: null,\n      breadcrumbTransform: this.transformNode.bind(this),\n      select,\n      showSearch: false,\n      showDropdownSiteList: false,\n      isSelectionValid: this.isSelectionValid.bind(this),\n      rowFilter: this.rowFilter.bind(this)\n    };\n\n    const query = {\n      query: {\n        query: `PATH:\"//${config.primaryPathName}\"`,\n        language: 'afts'\n      },\n      include: ['path', 'properties', 'allowableOperations', 'permissions']\n    };\n\n    from(this.searchApi.search(query))\n      .pipe(\n        switchMap((response) => {\n          const entry = response.list.entries[0].entry;\n          this.rootNode = entry;\n          data.currentFolderId = entry.id;\n\n          return this.dialog\n            .open(ContentNodeSelectorComponent, {\n              data,\n              panelClass: ['adf-content-node-selector-dialog', 'aca-template-node-selector-dialog'],\n              width: '630px'\n            })\n            .afterClosed();\n        }),\n        catchError((error) => {\n          this.notificationService.showError('APP.MESSAGES.ERRORS.GENERIC');\n          return of(error);\n        })\n      )\n      .subscribe({ next: () => select.complete() });\n\n    return select;\n  }\n\n  createTemplateDialog(node: Node): MatDialogRef<CreateFromTemplateDialogComponent> {\n    const dialog = this.dialog.open(CreateFromTemplateDialogComponent, {\n      data: node,\n      panelClass: 'aca-create-from-template-dialog',\n      width: '630px'\n    });\n    dialog.afterClosed().subscribe(() => this.focusCreateMenuButton());\n    return dialog;\n  }\n\n  private transformNode(node: Node): Node {\n    if (node?.path?.elements instanceof Array) {\n      node.path.elements = this.getPathElements(node);\n    }\n    return node;\n  }\n\n  private isSelectionValid(node: Node): boolean {\n    if (!node.path.elements.length) {\n      return false;\n    }\n\n    if (this.currentTemplateConfig.selectionType === 'folder') {\n      return node.isFolder;\n    }\n\n    return node.isFile;\n  }\n\n  private close() {\n    this.dialog.closeAll();\n    this.focusCreateMenuButton();\n  }\n\n  private title(selectionType: string) {\n    if (selectionType === 'file') {\n      return this.translation.instant('NODE_SELECTOR.SELECT_FILE_TEMPLATE_TITLE');\n    }\n\n    return this.translation.instant('NODE_SELECTOR.SELECT_FOLDER_TEMPLATE_TITLE');\n  }\n\n  private rowFilter(row: ShareDataRow): boolean {\n    const node: Node = row.node.entry;\n    return node.nodeType !== 'app:filelink' && node.nodeType !== 'app:folderlink';\n  }\n\n  private getPathElements(node: Node): PathElement[] {\n    return node.path.elements.filter((pathElement) => !this.rootNode.path.elements.some((rootPathElement) => pathElement.id === rootPathElement.id));\n  }\n\n  private focusCreateMenuButton(): void {\n    document.querySelector<HTMLElement>('app-toolbar-menu button[id=\"app.toolbar.create\"]').focus();\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { inject, Injectable } from '@angular/core';\nimport { catchError, debounceTime, map, switchMap, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport {\n  AppStore,\n  CreateFromTemplate,\n  CreateFromTemplateSuccess,\n  FileFromTemplate,\n  FolderFromTemplate,\n  getCurrentFolder,\n  TemplateActionTypes\n} from '@alfresco/aca-shared/store';\nimport { NodeTemplateService, TemplateDialogConfig } from '../../services/node-template.service';\nimport { NotificationService } from '@alfresco/adf-core';\nimport { from, Observable, of } from 'rxjs';\nimport { Node, NodeBodyUpdate, NodeEntry, NodesApi } from '@alfresco/js-api';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AlfrescoApiService, DocumentListService } from '@alfresco/adf-content-services';\n\n@Injectable()\nexport class TemplateEffects {\n  private notificationService = inject(NotificationService);\n  private documentListService = inject(DocumentListService);\n\n  private _nodesApi: NodesApi;\n  get nodesApi(): NodesApi {\n    this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());\n    return this._nodesApi;\n  }\n\n  matDialog = inject(MatDialog);\n  store = inject(Store<AppStore>);\n  apiService = inject(AlfrescoApiService);\n  actions$ = inject(Actions);\n  nodeTemplateService = inject(NodeTemplateService);\n\n  fileFromTemplate$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<FileFromTemplate>(TemplateActionTypes.FileFromTemplate),\n        map(() => {\n          this.openDialog({\n            primaryPathName: 'app:node_templates',\n            selectionType: 'file'\n          });\n        })\n      ),\n    { dispatch: false }\n  );\n\n  folderFromTemplate$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<FolderFromTemplate>(TemplateActionTypes.FolderFromTemplate),\n        map(() =>\n          this.openDialog({\n            primaryPathName: 'app:space_templates',\n            selectionType: 'folder'\n          })\n        )\n      ),\n    { dispatch: false }\n  );\n\n  createFromTemplate$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<CreateFromTemplate>(TemplateActionTypes.CreateFromTemplate),\n        map((action) => {\n          this.store\n            .select(getCurrentFolder)\n            .pipe(\n              switchMap((folder) => this.copyNode(action.payload, folder.id)),\n              take(1)\n            )\n            .subscribe((node: NodeEntry | null) => {\n              if (node) {\n                this.store.dispatch(new CreateFromTemplateSuccess(node.entry));\n              }\n            });\n        })\n      ),\n    { dispatch: false }\n  );\n\n  createFromTemplateSuccess$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<CreateFromTemplateSuccess>(TemplateActionTypes.CreateFromTemplateSuccess),\n        map((action) => {\n          const node = action.node;\n          const messageKey = node.isFolder\n            ? 'APP.MESSAGES.INFO.NODE_CREATE.FOLDER_FROM_TEMPLATE_SUCCESS'\n            : 'APP.MESSAGES.INFO.NODE_CREATE.FILE_FROM_TEMPLATE_SUCCESS';\n          this.notificationService.showInfo(messageKey, null, { name: node.name });\n          this.matDialog.closeAll();\n          this.documentListService.reload();\n        })\n      ),\n    { dispatch: false }\n  );\n\n  private openDialog(config: TemplateDialogConfig) {\n    this.nodeTemplateService\n      .selectTemplateDialog(config)\n      .pipe(debounceTime(300))\n      .subscribe(([node]) => this.nodeTemplateService.createTemplateDialog(node));\n  }\n\n  private copyNode(source: Node, parentId: string): Observable<NodeEntry> {\n    return from(\n      this.nodesApi.copyNode(source.id, {\n        targetParentId: parentId,\n        name: source.name\n      })\n    ).pipe(\n      switchMap((node) =>\n        this.updateNode(node, {\n          properties: {\n            'cm:title': source.properties['cm:title'],\n            'cm:description': source.properties['cm:description']\n          }\n        })\n      ),\n      catchError((error) => this.handleError(error))\n    );\n  }\n\n  private updateNode(node: NodeEntry, update: NodeBodyUpdate): Observable<NodeEntry> {\n    return from(this.nodesApi.updateNode(node.entry.id, update)).pipe(catchError(() => of(node)));\n  }\n\n  private handleError(error: Error): Observable<null> {\n    let statusCode: number;\n\n    try {\n      statusCode = JSON.parse(error.message).error.statusCode;\n    } catch (e) {\n      statusCode = null;\n    }\n\n    if (statusCode !== 409) {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.GENERIC');\n    } else {\n      this.notificationService.showError('APP.MESSAGES.ERRORS.CONFLICT');\n    }\n\n    return of(null);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { OverlayRef } from '@angular/cdk/overlay';\n\nexport class ContextMenuOverlayRef {\n  constructor(private overlayRef: OverlayRef) {}\n\n  close(): void {\n    this.overlayRef.dispose();\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { InjectionToken } from '@angular/core';\n\nexport const CONTEXT_MENU_DIRECTION = new InjectionToken('CONTEXT_MENU_DIRECTION', {\n  providedIn: 'root',\n  factory: () => 'ltr'\n});\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { ContentActionRef, DynamicExtensionComponent } from '@alfresco/adf-extensions';\nimport { AppExtensionService } from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { IconComponent } from '@alfresco/adf-core';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatMenuModule, MatDividerModule, IconComponent, DynamicExtensionComponent],\n  selector: 'app-context-menu-item',\n  templateUrl: './context-menu-item.component.html',\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-context-menu-item' }\n})\nexport class ContextMenuItemComponent {\n  @Input()\n  actionRef: ContentActionRef;\n\n  constructor(private extensions: AppExtensionService) {}\n\n  runAction() {\n    if (this.hasClickAction(this.actionRef)) {\n      this.extensions.runActionById(this.actionRef.actions.click);\n    }\n  }\n\n  private hasClickAction(actionRef: ContentActionRef): boolean {\n    return !!actionRef?.actions?.click;\n  }\n\n  trackByActionId(_: number, obj: ContentActionRef): string {\n    return obj.id;\n  }\n}\n","<div class=\"aca-context-menu\">\n  <ng-container [ngSwitch]=\"actionRef.type\">\n    <ng-container *ngSwitchCase=\"'menu'\">\n      <button mat-menu-item [id]=\"actionRef.id\" [matMenuTriggerFor]=\"childMenu\">\n        <adf-icon [value]=\"actionRef.icon\" class=\"app-context-menu-item--icon\" />\n        <span [attr.data-automation-id]=\"actionRef.id + '-label'\">{{ actionRef.title | translate }}</span>\n      </button>\n\n      <mat-menu #childMenu=\"matMenu\">\n        <ng-container *ngFor=\"let child of actionRef.children; trackBy: trackByActionId\">\n          <app-context-menu-item [actionRef]=\"child\" />\n        </ng-container>\n      </mat-menu>\n    </ng-container>\n\n    <ng-container *ngSwitchCase=\"'separator'\">\n      <mat-divider aria-hidden=\"true\" />\n    </ng-container>\n\n    <ng-container *ngSwitchCase=\"'custom'\">\n      <adf-dynamic-component [data]=\"actionRef.data\" [id]=\"actionRef.component\" />\n    </ng-container>\n\n    <ng-container *ngSwitchDefault>\n      <button mat-menu-item [id]=\"actionRef.id\" (click)=\"runAction()\">\n        <adf-icon [value]=\"actionRef.icon\" class=\"app-context-menu-item--icon\" />\n        <span [attr.data-automation-id]=\"actionRef.id + '-label'\">{{ actionRef.title | translate }}</span>\n      </button>\n    </ng-container>\n  </ng-container>\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { DestroyRef, Directive, EventEmitter, HostListener, inject, Input, OnInit, Output } from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n  standalone: true,\n  selector: '[acaContextMenuOutsideEvent]'\n})\nexport class OutsideEventDirective implements OnInit {\n  @Output()\n  clickOutside: EventEmitter<void> = new EventEmitter();\n\n  @Input()\n  focusTargetSelector = '.adf-context-menu-source';\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  ngOnInit() {\n    fromEvent(document.body, 'click')\n      .pipe(\n        filter((event) => !this.findAncestor(event.target as Element)),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(() => this.clickOutside.next());\n  }\n\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeKeydown() {\n    document.querySelector<HTMLElement>(this.focusTargetSelector)?.focus();\n  }\n\n  private findAncestor(el: Element): boolean {\n    const className = 'aca-context-menu';\n\n    while (el && !el.classList.contains(className)) {\n      el = el.parentElement;\n    }\n    return !!el;\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { HostListener, ViewChild, Inject, Directive } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { ContentActionRef } from '@alfresco/adf-extensions';\nimport { ContextMenuOverlayRef } from './context-menu-overlay';\nimport { CONTEXT_MENU_DIRECTION } from './direction.token';\nimport { Direction } from '@angular/cdk/bidi';\nimport { AppExtensionService } from '@alfresco/aca-shared';\n\n@Directive()\nexport class BaseContextMenuDirective {\n  actions: Array<ContentActionRef> = [];\n\n  @ViewChild(MatMenuTrigger)\n  trigger: MatMenuTrigger;\n\n  @HostListener('keydown.escape', ['$event'])\n  handleKeydownEscape(event: KeyboardEvent) {\n    if (event && this.contextMenuOverlayRef) {\n      this.contextMenuOverlayRef.close();\n    }\n  }\n\n  constructor(\n    private readonly contextMenuOverlayRef: ContextMenuOverlayRef,\n    protected extensions: AppExtensionService,\n    @Inject(CONTEXT_MENU_DIRECTION) public direction: Direction\n  ) {}\n\n  onClickOutsideEvent() {\n    if (this.contextMenuOverlayRef) {\n      this.contextMenuOverlayRef.close();\n    }\n  }\n\n  runAction(contentActionRef: ContentActionRef) {\n    this.extensions.runActionById(contentActionRef.actions.click, {\n      focusedElementOnCloseSelector: '.adf-context-menu-source'\n    });\n  }\n\n  trackByActionId(_: number, obj: ContentActionRef): string {\n    return obj.id;\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AfterViewInit, Component, DestroyRef, inject, Inject, OnInit, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { MatMenu, MatMenuItem, MatMenuModule } from '@angular/material/menu';\nimport { ContentActionType, DynamicExtensionComponent } from '@alfresco/adf-extensions';\nimport { ContextMenuOverlayRef } from './context-menu-overlay';\nimport { CONTEXT_MENU_DIRECTION } from './direction.token';\nimport { Direction } from '@angular/cdk/bidi';\nimport { AppExtensionService } from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { IconComponent } from '@alfresco/adf-core';\nimport { ContextMenuItemComponent } from './context-menu-item.component';\nimport { OutsideEventDirective } from './context-menu-outside-event.directive';\nimport { BaseContextMenuDirective } from './base-context-menu.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    MatMenuModule,\n    MatDividerModule,\n    ContextMenuItemComponent,\n    OutsideEventDirective,\n    IconComponent,\n    DynamicExtensionComponent\n  ],\n  selector: 'aca-context-menu',\n  templateUrl: './context-menu.component.html',\n  styleUrls: ['./context-menu.component.scss'],\n  host: {\n    class: 'aca-context-menu-holder'\n  },\n  encapsulation: ViewEncapsulation.None\n})\nexport class ContextMenuComponent extends BaseContextMenuDirective implements OnInit, AfterViewInit {\n  @ViewChildren(DynamicExtensionComponent)\n  dynamicExtensionComponents: QueryList<DynamicExtensionComponent>;\n\n  @ViewChild(MatMenu)\n  menu: MatMenu;\n\n  @ViewChildren(MatMenuItem)\n  matMenuItems: QueryList<MatMenuItem>;\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(contextMenuOverlayRef: ContextMenuOverlayRef, extensions: AppExtensionService, @Inject(CONTEXT_MENU_DIRECTION) direction: Direction) {\n    super(contextMenuOverlayRef, extensions, direction);\n  }\n\n  ngOnInit() {\n    this.extensions\n      .getAllowedContextMenuActions()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((actions) => {\n        this.actions = actions;\n      });\n  }\n\n  ngAfterViewInit() {\n    if (this.actions.length) {\n      setTimeout(() => this.trigger.openMenu(), 0);\n    }\n\n    const itemsById = this.createMenuItemsLookup();\n    const orderedItems = this.createOrderedItemsList(itemsById);\n\n    const menuItemsQueryList = new QueryList<MatMenuItem>();\n    menuItemsQueryList.reset(orderedItems);\n    this.menu._allItems = menuItemsQueryList;\n    this.menu.ngAfterContentInit();\n  }\n\n  private createMenuItemsLookup(): Map<string, MatMenuItem> {\n    const itemsById = new Map<string, MatMenuItem>();\n    this.matMenuItems.forEach((item) => {\n      itemsById.set(item._getHostElement()?.getAttribute('id'), item);\n    });\n\n    this.dynamicExtensionComponents.forEach((component) => {\n      if (component.menuItem && component.id) {\n        itemsById.set(component.id, component.menuItem);\n      }\n    });\n    return itemsById;\n  }\n\n  private createOrderedItemsList(itemsById: Map<string, MatMenuItem>): MatMenuItem[] {\n    const orderedItems: MatMenuItem[] = [];\n\n    this.actions.forEach((action) => {\n      const lookupId = action.type === ContentActionType.custom ? action.component : action.id;\n      const item = lookupId ? itemsById.get(lookupId) : undefined;\n\n      if (item) {\n        orderedItems.push(item);\n      }\n    });\n    return orderedItems;\n  }\n}\n","<div [dir]=\"direction\">\n  <div style=\"visibility: hidden;\" [matMenuTriggerFor]=\"rootMenu\"></div>\n\n  <mat-menu #rootMenu=\"matMenu\" class=\"aca-context-menu\" hasBackdrop=\"false\" acaContextMenuOutsideEvent (clickOutside)=\"onClickOutsideEvent()\">\n    <ng-container *ngFor=\"let entry of actions; trackBy: trackByActionId\" [ngSwitch]=\"entry.type\">\n      <ng-container *ngSwitchDefault>\n        <button mat-menu-item [id]=\"entry.id\" (click)=\"runAction(entry)\">\n          <adf-icon [value]=\"entry.icon\" class=\"app-context-menu-item--icon\" />\n          <span [attr.data-automation-id]=\"entry.id + '-label'\">{{ entry.title | translate }}</span>\n        </button>\n      </ng-container>\n\n      <ng-container *ngSwitchCase=\"'separator'\">\n        <mat-divider aria-hidden=\"true\" />\n      </ng-container>\n\n      <ng-container *ngSwitchCase=\"'menu'\">\n        <button mat-menu-item [id]=\"entry.id\" [matMenuTriggerFor]=\"childMenu\">\n          <adf-icon [value]=\"entry.icon\" class=\"app-context-menu-item--icon\" />\n          <span [attr.data-automation-id]=\"entry.id + '-label'\">{{ entry.title | translate }}</span>\n        </button>\n\n        <mat-menu #childMenu=\"matMenu\">\n          <ng-container *ngFor=\"let child of entry.children; trackBy: trackByActionId\">\n            <app-context-menu-item [actionRef]=\"child\" />\n          </ng-container>\n        </mat-menu>\n      </ng-container>\n\n      <ng-container *ngSwitchCase=\"'custom'\">\n        <adf-dynamic-component [data]=\"entry.data\" [id]=\"entry.component\" />\n      </ng-container>\n    </ng-container>\n  </mat-menu>\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { InjectionToken } from '@angular/core';\n\nexport const CONTEXT_MENU_CUSTOM_ACTIONS = new InjectionToken('CONTEXT_MENU_CUSTOM_ACTIONS');\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AfterViewInit, Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { Direction } from '@angular/cdk/bidi';\nimport { ContextMenuOverlayRef } from './context-menu-overlay';\nimport { AppExtensionService } from '@alfresco/aca-shared';\nimport { CONTEXT_MENU_DIRECTION } from './direction.token';\nimport { ContentActionRef, DynamicExtensionComponent } from '@alfresco/adf-extensions';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { ContextMenuItemComponent } from './context-menu-item.component';\nimport { OutsideEventDirective } from './context-menu-outside-event.directive';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { IconComponent } from '@alfresco/adf-core';\nimport { CONTEXT_MENU_CUSTOM_ACTIONS } from './custom-context-menu-actions.token';\nimport { BaseContextMenuDirective } from './base-context-menu.directive';\n\n@Component({\n  selector: 'aca-custom-context-menu',\n  templateUrl: './context-menu.component.html',\n  styleUrls: ['./context-menu.component.scss'],\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    MatMenuModule,\n    MatDividerModule,\n    ContextMenuItemComponent,\n    OutsideEventDirective,\n    IconComponent,\n    DynamicExtensionComponent\n  ],\n  host: {\n    class: 'aca-context-menu-holder'\n  },\n  encapsulation: ViewEncapsulation.None\n})\nexport class CustomContextMenuComponent extends BaseContextMenuDirective implements AfterViewInit {\n  constructor(\n    contextMenuOverlayRef: ContextMenuOverlayRef,\n    extensions: AppExtensionService,\n    @Inject(CONTEXT_MENU_DIRECTION) direction: Direction,\n    @Inject(CONTEXT_MENU_CUSTOM_ACTIONS) customActions: ContentActionRef[]\n  ) {\n    super(contextMenuOverlayRef, extensions, direction);\n    this.actions = customActions;\n  }\n\n  ngAfterViewInit() {\n    setTimeout(() => this.trigger.openMenu(), 0);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ComponentRef, Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ContextMenuOverlayRef } from './context-menu-overlay';\nimport { ContextMenuComponent } from './context-menu.component';\nimport { ContextmenuOverlayConfig } from './interfaces';\nimport { UserPreferencesService } from '@alfresco/adf-core';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { CONTEXT_MENU_DIRECTION } from './direction.token';\nimport { CONTEXT_MENU_CUSTOM_ACTIONS } from './custom-context-menu-actions.token';\nimport { ContentActionRef } from '@alfresco/adf-extensions';\nimport { CustomContextMenuComponent } from './custom-context-menu.component';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContextMenuService {\n  private direction: Directionality;\n\n  constructor(\n    private readonly injector: Injector,\n    private readonly overlay: Overlay,\n    private readonly userPreferenceService: UserPreferencesService\n  ) {\n    this.userPreferenceService.select('textOrientation').subscribe((textOrientation) => {\n      this.direction = textOrientation;\n    });\n  }\n\n  open(config: ContextmenuOverlayConfig, customActions?: ContentActionRef[]): ContextMenuOverlayRef {\n    const overlay = this.createOverlay(config);\n    const overlayRef = new ContextMenuOverlayRef(overlay);\n    if (customActions?.length) {\n      this.attachCustomDialogContainer(overlay, overlayRef, customActions);\n    } else {\n      this.attachDialogContainer(overlay, overlayRef);\n    }\n\n    return overlayRef;\n  }\n\n  private createOverlay(config: ContextmenuOverlayConfig): OverlayRef {\n    const overlayConfig = this.getOverlayConfig(config);\n    return this.overlay.create(overlayConfig);\n  }\n\n  private attachDialogContainer(overlay: OverlayRef, contextmenuOverlayRef: ContextMenuOverlayRef): ContextMenuComponent {\n    const injector = this.createInjector(contextmenuOverlayRef);\n    const containerPortal = new ComponentPortal(ContextMenuComponent, null, injector);\n    const containerRef: ComponentRef<ContextMenuComponent> = overlay.attach(containerPortal);\n\n    return containerRef.instance;\n  }\n\n  private createInjector(contextmenuOverlayRef: ContextMenuOverlayRef): Injector {\n    return Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: ContextMenuOverlayRef, useValue: contextmenuOverlayRef },\n        { provide: CONTEXT_MENU_DIRECTION, useValue: this.direction }\n      ]\n    });\n  }\n\n  private attachCustomDialogContainer(\n    overlay: OverlayRef,\n    contextmenuOverlayRef: ContextMenuOverlayRef,\n    customActions: ContentActionRef[]\n  ): CustomContextMenuComponent {\n    const injector = this.createCustomInjector(contextmenuOverlayRef, customActions);\n    const containerPortal = new ComponentPortal(CustomContextMenuComponent, null, injector);\n    const containerRef: ComponentRef<CustomContextMenuComponent> = overlay.attach(containerPortal);\n\n    return containerRef.instance;\n  }\n\n  private createCustomInjector(contextmenuOverlayRef: ContextMenuOverlayRef, customActions: ContentActionRef[]): Injector {\n    return Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: ContextMenuOverlayRef, useValue: contextmenuOverlayRef },\n        { provide: CONTEXT_MENU_DIRECTION, useValue: this.direction },\n        { provide: CONTEXT_MENU_CUSTOM_ACTIONS, useValue: customActions }\n      ]\n    });\n  }\n\n  private getOverlayConfig(config: ContextmenuOverlayConfig): OverlayConfig {\n    const { x, y } = config.source;\n\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo({ x, y })\n      .withPositions([\n        {\n          originX: 'end',\n          originY: 'bottom',\n          overlayX: 'end',\n          overlayY: 'top'\n        }\n      ]);\n\n    return new OverlayConfig({\n      hasBackdrop: config.hasBackdrop,\n      backdropClass: config.backdropClass,\n      panelClass: config.panelClass,\n      scrollStrategy: this.overlay.scrollStrategies.close(),\n      positionStrategy,\n      direction: this.direction\n    });\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ContextMenu, ContextMenuActionTypes, CustomContextMenu } from '@alfresco/aca-shared/store';\nimport { inject, Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { map } from 'rxjs/operators';\nimport { ContextMenuOverlayRef } from '../../components/context-menu/context-menu-overlay';\nimport { ContextMenuService } from '../../components/context-menu/context-menu.service';\n\n@Injectable()\nexport class ContextMenuEffects {\n  private overlayRef: ContextMenuOverlayRef = null;\n\n  contextMenuService = inject(ContextMenuService);\n  actions$ = inject(Actions);\n\n  contextMenu$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ContextMenu>(ContextMenuActionTypes.ContextMenu),\n        map((action) => {\n          if (this.overlayRef) {\n            this.overlayRef.close();\n          }\n\n          this.overlayRef = this.contextMenuService.open({\n            source: action.event,\n            hasBackdrop: false,\n            backdropClass: 'cdk-overlay-transparent-backdrop',\n            panelClass: 'cdk-overlay-pane'\n          });\n        })\n      ),\n    { dispatch: false }\n  );\n\n  customContextMenu$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<CustomContextMenu>(ContextMenuActionTypes.CustomContextMenu),\n        map((action) => {\n          if (action.payload?.length) {\n            if (this.overlayRef) {\n              this.overlayRef.close();\n            }\n            this.overlayRef = this.contextMenuService.open(\n              {\n                source: action.event,\n                hasBackdrop: false,\n                backdropClass: 'cdk-overlay-transparent-backdrop',\n                panelClass: 'cdk-overlay-pane'\n              },\n              action.payload\n            );\n          }\n        })\n      ),\n    { dispatch: false }\n  );\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Params, Router } from '@angular/router';\nimport { SearchAiService } from '@alfresco/adf-content-services';\n\n@Injectable({ providedIn: 'root' })\nexport class SearchAiNavigationService {\n  private readonly knowledgeRetrievalRoute = '/knowledge-retrieval';\n\n  private previousRoute = '';\n\n  constructor(\n    private router: Router,\n    private searchAiService: SearchAiService\n  ) {}\n\n  navigateToPreviousRouteOrCloseInput(): void {\n    if (this.router.url.includes(this.knowledgeRetrievalRoute)) {\n      void this.router.navigateByUrl(this.previousRoute || '/personal-files');\n    } else {\n      this.searchAiService.updateSearchAiInputState({\n        active: false\n      });\n    }\n  }\n\n  navigateToSearchAi(queryParams: Params): void {\n    if (!this.router.url.includes(this.knowledgeRetrievalRoute)) {\n      this.previousRoute = this.router.url;\n    }\n    void this.router.navigate([this.knowledgeRetrievalRoute], { queryParams });\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { inject, Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { SearchAiActionTypes, SearchByTermAiAction, ToggleAISearchInput } from '@alfresco/aca-shared/store';\nimport { map } from 'rxjs/operators';\nimport { SearchAiNavigationService } from '../../services/search-ai-navigation.service';\nimport { SearchAiService } from '@alfresco/adf-content-services';\nimport { Params } from '@angular/router';\n\n@Injectable()\nexport class SearchAiEffects {\n  private actions$ = inject(Actions);\n  private searchNavigationService = inject(SearchAiNavigationService);\n  private searchAiService = inject(SearchAiService);\n  searchByTerm$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<SearchByTermAiAction>(SearchAiActionTypes.SearchByTermAi),\n        map((action) => {\n          const queryParams: Params = {\n            query: encodeURIComponent(action.payload.searchTerm),\n            agentId: action.payload.agentId\n          };\n          this.searchNavigationService.navigateToSearchAi(queryParams);\n        })\n      ),\n    { dispatch: false }\n  );\n\n  toggleAISearchInput$ = createEffect(\n    () =>\n      this.actions$.pipe(\n        ofType<ToggleAISearchInput>(SearchAiActionTypes.ToggleAiSearchInput),\n        map((action) =>\n          this.searchAiService.updateSearchAiInputState({\n            active: true,\n            selectedAgentId: action.agentId,\n            searchTerm: action.searchTerm\n          })\n        )\n      ),\n    { dispatch: false }\n  );\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './effects/app.effects';\nexport * from './effects/download.effects';\nexport * from './effects/favorite.effects';\nexport * from './effects/node.effects';\nexport * from './effects/viewer.effects';\nexport * from './effects/search.effects';\nexport * from './effects/library.effects';\nexport * from './effects/upload.effects';\nexport * from './effects/upload.effects';\nexport * from './effects/template.effects';\nexport * from './effects/contextmenu.effects';\nexport * from './effects/search-ai.effects';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { NgModule } from '@angular/core';\nimport { provideStore } from '@ngrx/store';\nimport { appReducer } from './reducers/app.reducer';\nimport { FullRouterStateSerializer, provideRouterStore } from '@ngrx/router-store';\nimport { provideEffects } from '@ngrx/effects';\nimport { RouterEffects } from '@alfresco/aca-shared/store';\nimport {\n  AppEffects,\n  ContextMenuEffects,\n  DownloadEffects,\n  FavoriteEffects,\n  LibraryEffects,\n  NodeEffects,\n  SearchEffects,\n  TemplateEffects,\n  UploadEffects,\n  ViewerEffects\n} from './effects';\nimport { SearchAiEffects } from './effects/search-ai.effects';\n\n@NgModule({\n  providers: [\n    provideStore(\n      { app: appReducer },\n      {\n        runtimeChecks: {\n          strictStateImmutability: false,\n          strictActionImmutability: false\n        }\n      }\n    ),\n    provideRouterStore({ stateKey: 'router', serializer: FullRouterStateSerializer }),\n    provideEffects([\n      AppEffects,\n      NodeEffects,\n      DownloadEffects,\n      ViewerEffects,\n      SearchEffects,\n      LibraryEffects,\n      UploadEffects,\n      FavoriteEffects,\n      TemplateEffects,\n      ContextMenuEffects,\n      SearchAiEffects,\n      RouterEffects\n    ])\n  ]\n})\nexport class AppStoreModule {}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NodesApiService } from '@alfresco/adf-content-services';\nimport { DIALOG_COMPONENT_DATA, IconComponent } from '@alfresco/adf-core';\nimport { Node, NodeAssociation } from '@alfresco/js-api';\nimport { Router } from '@angular/router';\nimport { catchError, of, take } from 'rxjs';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n  selector: 'app-node-location-references',\n  imports: [CommonModule, IconComponent, TranslatePipe],\n  templateUrl: './node-location-references.component.html',\n  styleUrls: ['./node-location-references.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class NodeLocationReferencesComponent implements OnInit {\n  node: Node = inject(DIALOG_COMPONENT_DATA);\n  additionalReferenceLocations: NodeAssociation[] = [];\n\n  private readonly nodesService = inject(NodesApiService);\n  private readonly router = inject(Router);\n\n  ngOnInit(): void {\n    this.nodesService\n      .listParents(this.node.id, { where: `(isPrimary=false and assocType='cm:contains')`, include: ['path'] })\n      .pipe(\n        take(1),\n        catchError(() => of({ list: { entries: [] } }))\n      )\n      .subscribe((response) => {\n        this.additionalReferenceLocations = response.list.entries.map((entry) => entry.entry);\n      });\n  }\n\n  goToLocation($event: Event, node: NodeAssociation) {\n    $event.preventDefault();\n    let link: string[] = [];\n    const { path } = node;\n\n    if (path?.name && path?.elements) {\n      const area = path && path.elements.length >= 2 && path.elements[1].name === 'Sites' ? 'libraries' : 'personal-files';\n      link = ['#', area, node.id];\n      const url = this.router.serializeUrl(this.router.parseUrl(link.join('/')));\n      window.open(url, '_blank');\n    }\n  }\n}\n","@if (additionalReferenceLocations.length > 0) {\n  <div class=\"app-node-location-reference-title\">\n    {{ 'APP.ADDITIONAL_REFERENCES_DIALOG.DESCRIPTION' | translate : { name: node.name} }}\n  </div>\n  @for (location of additionalReferenceLocations; track $index) {\n    <div class=\"app-node-location-reference\">\n      <adf-icon value=\"folder\" class=\"app-node-location-reference-icon\" fontSet=\"material-icons\"/>\n      <a\n        href=\"#\"\n        [title]=\"location.path.name\"\n        (click)=\"goToLocation($event, location)\"\n        (keydown.enter)=\"goToLocation($event, location)\"\n        class=\"app-node-location-reference-link\">\n        {{ location.path.name }}\n      </a>\n    </div>\n  }\n} @else {\n  <div class=\"app-node-location-reference-title app-node-location-reference-no-locations\">\n    {{ 'APP.ADDITIONAL_REFERENCES_DIALOG.NO_LOCATIONS' | translate : { name: node.name } }}\n  </div>\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, Input, ChangeDetectionStrategy, OnInit, ViewEncapsulation, HostListener, inject } from '@angular/core';\nimport { PathInfo, NodeEntry } from '@alfresco/js-api';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { NavigateToParentFolder } from '@alfresco/aca-shared/store';\nimport { ContentApiService } from '@alfresco/aca-shared';\nimport { DialogComponent, DialogSize, TranslationService } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NodeLocationReferencesComponent } from '../../../dialogs/node-location-references/node-location-references.component';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatIcon, MatButtonModule],\n  selector: 'aca-location-link',\n  templateUrl: './location-link.component.html',\n  styleUrls: ['./location-link.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'aca-location-link adf-location-cell adf-datatable-content-cell'\n  }\n})\nexport class LocationLinkComponent implements OnInit {\n  private store = inject(Store);\n  private contentApi = inject(ContentApiService);\n  private translationService = inject(TranslationService);\n  private _path: PathInfo;\n\n  private readonly dialogRef = inject(MatDialog);\n\n  nodeLocation$ = new BehaviorSubject('');\n  displayText: Observable<string>;\n  hasPrimaryParentPath = false;\n\n  @Input()\n  context: any;\n\n  @Input()\n  showLocation = false;\n\n  @HostListener('mouseenter')\n  onMouseEnter() {\n    this.getTooltip(this._path);\n  }\n\n  goToLocation(event: Event) {\n    event.preventDefault();\n    if (this.context) {\n      const node: NodeEntry = this.context.row.node;\n      this.store.dispatch(new NavigateToParentFolder(node));\n    }\n  }\n\n  ngOnInit() {\n    if (this.context) {\n      const node: NodeEntry = this.context.row.node;\n      if (node?.entry?.path) {\n        const path = node.entry.path;\n\n        if (path?.name && path?.elements) {\n          if (this.showLocation) {\n            this.displayText = of(path.name.substring(1).replace(/\\//g, ' &#8250; '));\n          } else {\n            this.displayText = this.getDisplayText(path);\n          }\n          this._path = path;\n          this.hasPrimaryParentPath = true;\n        } else {\n          this.hasPrimaryParentPath = false;\n        }\n      }\n    }\n  }\n\n  openAdditionalLocationReferencesDialog() {\n    if (this.context.row.node) {\n      this.dialogRef.open(DialogComponent, {\n        data: {\n          title: 'APP.ADDITIONAL_REFERENCES_DIALOG.TITLE',\n          confirmButtonTitle: 'APP.ADDITIONAL_REFERENCES_DIALOG.CLOSE',\n          isCancelButtonHidden: true,\n          isCloseButtonHidden: false,\n          dialogSize: DialogSize.Medium,\n          contentComponent: NodeLocationReferencesComponent,\n          componentData: this.context.row.node.entry\n        },\n        width: '600px',\n        restoreFocus: true\n      });\n    }\n  }\n\n  // todo: review once 5.2.3 is out\n  private getDisplayText(path: PathInfo): Observable<string> {\n    const elements = path.elements.map((e) => e.name);\n\n    // for admin users\n    if (elements.length === 1 && elements[0] === 'Company Home') {\n      return of('APP.BROWSE.PERSONAL.TITLE');\n    }\n\n    // for non-admin users\n    if (elements.length === 3 && elements[0] === 'Company Home' && elements[1] === 'User Homes') {\n      return of('APP.BROWSE.PERSONAL.TITLE');\n    }\n\n    const result = elements[elements.length - 1];\n\n    if (result === 'documentLibrary') {\n      const fragment = path.elements[path.elements.length - 2];\n\n      return new Observable<string>((observer) => {\n        this.contentApi.getNodeInfo(fragment.id).subscribe(\n          (node) => {\n            observer.next(node.properties['cm:title'] || node.name || fragment.name);\n            observer.complete();\n          },\n          () => {\n            observer.next(fragment.name);\n            observer.complete();\n          }\n        );\n      });\n    }\n\n    return of(result);\n  }\n\n  // todo: review once 5.2.3 is out\n  private getTooltip(path: PathInfo) {\n    if (!path) {\n      return;\n    }\n\n    let result: string = null;\n\n    const elements = path.elements.map((e) => {\n      return { ...e };\n    });\n    const personalFiles = this.translationService.instant('APP.BROWSE.PERSONAL.TITLE');\n    const fileLibraries = this.translationService.instant('APP.BROWSE.LIBRARIES.TITLE');\n\n    if (elements[0].name === 'Company Home') {\n      elements[0].name = personalFiles;\n\n      if (elements.length > 2) {\n        if (elements[1].name === 'Sites') {\n          const fragment = elements[2];\n          this.contentApi.getNodeInfo(fragment.id).subscribe(\n            (node) => {\n              elements.splice(0, 2);\n              elements[0].name = node.properties['cm:title'] || node.name || fragment.name;\n              elements.splice(1, 1);\n              elements.unshift({ id: null, name: fileLibraries });\n\n              result = elements.map((e) => e.name).join('/');\n              this.nodeLocation$.next(result);\n            },\n            () => {\n              elements.splice(0, 2);\n              elements.unshift({ id: null, name: fileLibraries });\n              elements.splice(2, 1);\n\n              result = elements.map((e) => e.name).join('/');\n              this.nodeLocation$.next(result);\n            }\n          );\n        }\n\n        if (elements[1].name === 'User Homes') {\n          elements.splice(0, 3);\n          elements.unshift({ id: null, name: personalFiles });\n        }\n      }\n    }\n\n    result = elements.map((e) => e.name).join('/');\n    this.nodeLocation$.next(result);\n  }\n}\n","@if (hasPrimaryParentPath) {\n  <a\n    href=\"#\"\n    [title]=\"nodeLocation$ | async\"\n    (click)=\"goToLocation($event)\"\n    (keydown.enter)=\"goToLocation($event)\"\n    class=\"adf-datatable-cell-value\"\n    [innerHTML]=\"displayText | async | translate\">\n  </a>\n} @else {\n  <div>\n    <span\n      class=\"adf-datatable-cell-value\"\n      [title]=\"'APP.BROWSE.SEARCH.UNKNOWN_LOCATION' | translate\">\n      {{ 'APP.BROWSE.SEARCH.UNKNOWN_LOCATION' | translate }}\n    </span>\n    <button mat-icon-button\n        [title]=\"'APP.BROWSE.SEARCH.VIEW_ADDITIONAL_LOCATIONS' | translate\"\n        [attr.aria-label]=\"'APP.BROWSE.SEARCH.VIEW_ADDITIONAL_LOCATIONS' | translate\"\n        class=\"aca-location-link-info-btn\"\n        (click)=\"openAdditionalLocationReferencesDialog()\">\n        <mat-icon>info</mat-icon>\n    </button>\n  </div>\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { SetSelectedNodesAction } from '@alfresco/aca-shared/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuItem, MatMenuModule } from '@angular/material/menu';\nimport { LogoutDirective } from '@alfresco/adf-core';\n\n@Component({\n  imports: [TranslatePipe, MatIconModule, MatMenuModule, LogoutDirective],\n  selector: 'aca-logout',\n  template: `\n    <button mat-menu-item (click)=\"onLogoutEvent()\" adf-logout>\n      <mat-icon>exit_to_app</mat-icon>\n      <span>{{ 'APP.SIGN_OUT' | translate }}</span>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None\n})\nexport class LogoutComponent {\n  constructor(private store: Store) {}\n\n  @ViewChild(MatMenuItem)\n  menuItem: MatMenuItem;\n\n  onLogoutEvent() {\n    this.store.dispatch(new SetSelectedNodesAction([]));\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { SelectionState } from '@alfresco/adf-extensions';\nimport { AppStore, getAppSelection, ShareNodeAction } from '@alfresco/aca-shared/store';\nimport { CommonModule } from '@angular/common';\nimport { MatMenuItem, MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, MatMenuModule, MatIconModule, TranslatePipe, MatButtonModule],\n  selector: 'app-toggle-shared',\n  templateUrl: './toggle-shared.component.html',\n  encapsulation: ViewEncapsulation.None\n})\nexport class ToggleSharedComponent implements OnInit {\n  @Input()\n  data: {\n    iconButton?: string;\n  };\n\n  @ViewChild(MatMenuItem)\n  menuItem: MatMenuItem;\n\n  selection$: Observable<SelectionState>;\n  selectionState: SelectionState;\n  selectionLabel = '';\n  isShared = false;\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(private store: Store<AppStore>) {}\n\n  ngOnInit() {\n    this.selection$ = this.store.select(getAppSelection);\n    this.selection$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((selectionState) => {\n      this.selectionState = selectionState;\n\n      this.isShared =\n        (this.selectionState?.first?.entry && (this.selectionState.first.entry as any).sharedByUser) ||\n        !!this.selectionState?.first?.entry?.properties?.['qshare:sharedId'];\n\n      this.selectionLabel = this.isShared ? 'APP.ACTIONS.SHARE_EDIT' : 'APP.ACTIONS.SHARE';\n    });\n  }\n\n  editSharedNode(selection: SelectionState, focusedElementOnCloseSelector: string) {\n    this.store.dispatch(\n      new ShareNodeAction(selection.first, {\n        focusedElementOnCloseSelector\n      })\n    );\n  }\n}\n","<ng-container *ngIf=\"selectionState\">\n  <ng-container *ngIf=\"!data.iconButton\">\n    <button mat-menu-item data-automation-id=\"share-action-button\" (click)=\"editSharedNode(selectionState, '.adf-context-menu-source')\">\n      <mat-icon>link</mat-icon>\n      <span>{{ (isShared ? 'APP.ACTIONS.SHARE_EDIT' : 'APP.ACTIONS.SHARE') | translate }}</span>\n    </button>\n  </ng-container>\n\n  <ng-container *ngIf=\"data.iconButton\">\n    <button\n      mat-icon-button\n      data-automation-id=\"share-action-button\"\n      (click)=\"editSharedNode(selectionState, '#share-action-button')\"\n      [attr.aria-label]=\"selectionLabel | translate\"\n      [attr.title]=\"selectionLabel | translate\"\n      id=\"share-action-button\"\n    >\n      <mat-icon>link</mat-icon>\n    </button>\n  </ng-container>\n</ng-container>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AppExtensionService, Badge } from '@alfresco/aca-shared';\nimport { IconComponent } from '@alfresco/adf-core';\nimport { DynamicExtensionComponent } from '@alfresco/adf-extensions';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  selector: 'aca-datatable-cell-badges',\n  templateUrl: './datatable-cell-badges.component.html',\n  styleUrls: ['./datatable-cell-badges.component.scss'],\n  host: { class: 'aca-datatable-cell-badges' },\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, TranslatePipe, DynamicExtensionComponent, IconComponent]\n})\nexport class DatatableCellBadgesComponent implements OnInit {\n  @Input({ required: true }) node: NodeEntry;\n\n  badges: Badge[];\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(private appExtensionService: AppExtensionService) {}\n\n  ngOnInit() {\n    this.appExtensionService\n      .getBadges(this.node)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((badges) => {\n        this.badges = badges;\n      });\n  }\n\n  onBadgeClick(badge: Badge) {\n    if (badge.actions?.click) {\n      this.appExtensionService.runActionById(badge.actions?.click, this.node);\n    }\n  }\n\n  onKeyPress(badge: Badge) {\n    this.onBadgeClick(badge);\n  }\n}\n","<div class=\"aca-datatable-cell-badges-container\">\n    <ng-container *ngFor=\"let badge of badges\">\n      <adf-dynamic-component\n        *ngIf=\"badge.component; else iconBadge\"\n        [id]=\"badge.component\"\n        [data]=\"{ node }\"\n      />\n      <ng-template #iconBadge>\n        <adf-icon\n          class=\"adf-datatable-cell-badge\"\n          [title]=\"badge.tooltip | translate\"\n          [value]=\"badge.icon\"\n          (click)=\"onBadgeClick(badge)\"\n          (keypress.enter)=\"onKeyPress(badge)\"\n          tabindex=\"0\"\n        />\n      </ng-template>\n    </ng-container>\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { NameColumnComponent, NodesApiService } from '@alfresco/adf-content-services';\nimport { ChangeDetectorRef, Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { filter } from 'rxjs/operators';\nimport { NodeActionTypes } from '@alfresco/aca-shared/store';\nimport { isLocked, LockedByComponent } from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { DatatableCellBadgesComponent } from '../datatable-cell-badges/datatable-cell-badges.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, LockedByComponent, DatatableCellBadgesComponent],\n  selector: 'aca-custom-name-column',\n  templateUrl: './name-column.component.html',\n  styleUrls: ['./name-column.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'adf-datatable-content-cell adf-datatable-link adf-name-column aca-custom-name-column'\n  }\n})\nexport class CustomNameColumnComponent extends NameColumnComponent implements OnInit {\n  isFile: boolean;\n  isFileWriteLocked: boolean;\n\n  private readonly destroy = inject(DestroyRef);\n  private readonly cd = inject(ChangeDetectorRef);\n  private readonly actions$ = inject(Actions);\n  private readonly nodesService = inject(NodesApiService);\n\n  ngOnInit() {\n    this.updateValue();\n    this.isFile = this.node?.entry && !this.node.entry.isFolder;\n    this.isFileWriteLocked = isLocked(this.node);\n\n    this.nodesService.nodeUpdated.pipe(takeUntilDestroyed(this.destroy)).subscribe((node: any) => {\n      const row = this.context.row;\n      if (row) {\n        const { entry } = row.node;\n        const currentId = entry.nodeId || entry.id;\n        const updatedId = node.nodeId || node.id;\n\n        if (currentId === updatedId) {\n          entry.name = node.name;\n          row.node = { entry };\n          this.updateValue();\n        }\n\n        this.isFile = this.node?.entry && !this.node.entry.isFolder;\n        this.isFileWriteLocked = isLocked(this.node);\n      }\n    });\n\n    this.actions$\n      .pipe(\n        ofType<any>(NodeActionTypes.EditOffline),\n        filter((val) => this.node.entry.id === val.payload.entry.id),\n        takeUntilDestroyed(this.destroy)\n      )\n      .subscribe(() => {\n        this.isFileWriteLocked = isLocked(this.node);\n        this.cd.detectChanges();\n      });\n  }\n\n  onLinkClick(event: Event) {\n    event.stopPropagation();\n    this.onClick();\n  }\n}\n","<div class=\"aca-custom-name-column\">\n  <div class=\"aca-name-column-container\">\n    <span\n      role=\"link\"\n      tabindex=\"0\"\n      [attr.aria-label]=\"\n        (isFile ? 'CUSTOM_NAME_COLUMN.ACCESSIBILITY.FILE_LINK_ARIA_LABEL' : 'CUSTOM_NAME_COLUMN.ACCESSIBILITY.FOLDER_LINK_ARIA_LABEL')\n          | translate : { name: displayText$ | async }\n      \"\n      class=\"adf-datatable-cell-value\"\n      [title]=\"tooltip()\"\n      (click)=\"onLinkClick($event)\"\n      (keyup.enter)=\"onLinkClick($event)\"\n    >\n      {{ displayText$ | async }}\n    </span>\n\n    <ng-container *ngIf=\"isFile && isFileWriteLocked\">\n      <aca-locked-by [node]=\"context.row.node\" />\n    </ng-container>\n  </div>\n  <aca-datatable-cell-badges [node]=\"node\" />\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Node } from '@alfresco/js-api';\n\nexport abstract class ExternalNodePermissionCommentsTabService {\n  abstract canAddComments(node: Node): boolean;\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, Input, OnInit, Optional, ViewEncapsulation } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { isLocked, NodePermissionService } from '@alfresco/aca-shared';\nimport { MatCardModule } from '@angular/material/card';\nimport { NodeCommentsComponent } from '@alfresco/adf-content-services';\nimport { ExternalNodePermissionCommentsTabService } from './external-node-permission-comments-tab.service';\n\n@Component({\n  imports: [MatCardModule, NodeCommentsComponent],\n  selector: 'app-comments-tab',\n  template: ` <mat-card class=\"adf-comments-tab-container\" appearance=\"raised\"\n    ><adf-node-comments [readOnly]=\"!canUpdateNode\" [nodeId]=\"node?.id\"\n  /></mat-card>`,\n  styles: ['app-comments-tab mat-card { padding: 16px }'],\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['./comments-tab.component.scss']\n})\nexport class CommentsTabComponent implements OnInit {\n  @Input()\n  node: Node;\n\n  canUpdateNode = false;\n\n  constructor(\n    private readonly permission: NodePermissionService,\n    @Optional() private readonly externalPermissionNodeService: ExternalNodePermissionCommentsTabService\n  ) {}\n\n  ngOnInit(): void {\n    if (!this.node) {\n      this.canUpdateNode = false;\n    }\n    if (this.node.isFolder || (this.node.isFile && !isLocked({ entry: this.node }))) {\n      this.canUpdateNode = this.permission.check(this.node, ['update']);\n      if (this.externalPermissionNodeService) {\n        this.canUpdateNode &&= this.externalPermissionNodeService.canAddComments(this.node);\n      }\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, ElementRef, inject, Input, OnChanges, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport {\n  FormControl,\n  FormGroupDirective,\n  FormsModule,\n  NgForm,\n  ReactiveFormsModule,\n  UntypedFormControl,\n  UntypedFormGroup,\n  ValidationErrors,\n  Validators\n} from '@angular/forms';\nimport { QueriesApi, SiteEntry, SitePaging } from '@alfresco/js-api';\nimport { Store } from '@ngrx/store';\nimport { AppStore, isAdmin, UpdateLibraryAction } from '@alfresco/aca-shared/store';\nimport { AppHookService } from '@alfresco/aca-shared';\nimport { debounceTime, mergeMap } from 'rxjs/operators';\nimport { AlfrescoApiService } from '@alfresco/adf-content-services';\nimport { from, Observable } from 'rxjs';\nimport { ErrorStateMatcher, MatOptionModule } from '@angular/material/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgForOf } from '@angular/common';\n\nexport class InstantErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    const isSubmitted = form?.submitted;\n    return !!(control?.invalid && (control?.dirty || control?.touched || isSubmitted));\n  }\n}\n\n@Component({\n  imports: [\n    MatCardModule,\n    TranslatePipe,\n    MatFormFieldModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatInputModule,\n    MatButtonModule,\n    NgForOf\n  ],\n  selector: 'app-library-metadata-form',\n  templateUrl: './library-metadata-form.component.html',\n  styleUrls: ['./library-metadata-form.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class LibraryMetadataFormComponent implements OnInit, OnChanges {\n  private _queriesApi: QueriesApi;\n  private _titleErrorTranslationKey: string;\n\n  get queriesApi(): QueriesApi {\n    this._queriesApi = this._queriesApi ?? new QueriesApi(this.alfrescoApiService.getInstance());\n    return this._queriesApi;\n  }\n\n  get titleErrorTranslationKey(): string {\n    return this._titleErrorTranslationKey;\n  }\n\n  @Input()\n  node: SiteEntry;\n\n  libraryTitleExists = false;\n\n  libraryType = [\n    { value: 'PUBLIC', label: 'LIBRARY.VISIBILITY.PUBLIC' },\n    { value: 'PRIVATE', label: 'LIBRARY.VISIBILITY.PRIVATE' },\n    { value: 'MODERATED', label: 'LIBRARY.VISIBILITY.MODERATED' }\n  ];\n\n  form: UntypedFormGroup = new UntypedFormGroup({\n    id: new UntypedFormControl({ value: '', disabled: true }),\n    title: new UntypedFormControl({ value: '' }, [Validators.required, Validators.maxLength(256), this.validateEmptyName]),\n    description: new UntypedFormControl({ value: '' }, [Validators.maxLength(512)]),\n    visibility: new UntypedFormControl(this.libraryType[0].value)\n  });\n\n  matcher = new InstantErrorStateMatcher();\n  canUpdateLibrary = false;\n  isAdmin = false;\n\n  @ViewChild('libraryNameInput')\n  private readonly libraryNameInput: ElementRef<HTMLInputElement>;\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private readonly alfrescoApiService: AlfrescoApiService,\n    protected readonly store: Store<AppStore>,\n    private readonly appHookService: AppHookService\n  ) {}\n\n  toggleEdit() {\n    if (this.form.enabled) {\n      this.form.disable({\n        emitEvent: false\n      });\n    } else {\n      this.form.enable({\n        emitEvent: false\n      });\n      this.form.controls.id.disable();\n      this.libraryNameInput.nativeElement.focus();\n    }\n  }\n\n  cancel() {\n    this.updateForm(this.node);\n    this.toggleEdit();\n    this.form.markAsPristine();\n  }\n\n  ngOnInit() {\n    this.toggleEdit();\n    this.updateForm(this.node);\n    this.form.controls.title.statusChanges\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(\n        () =>\n          (this._titleErrorTranslationKey = this.form.controls.title.errors?.empty\n            ? 'LIBRARY.ERRORS.ONLY_SPACES'\n            : 'LIBRARY.ERRORS.TITLE_TOO_LONG_OR_MISSING')\n      );\n    this.form.controls['title'].valueChanges\n      .pipe(\n        debounceTime(300),\n        mergeMap((title) => this.findLibraryByTitle(title)),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((result) => {\n        const { entries } = result.list;\n\n        if (entries.length) {\n          if (this.form.controls.title.value === this.node.entry.title) {\n            this.libraryTitleExists = false;\n          } else {\n            this.libraryTitleExists = this.form.controls.title.value === entries[0].entry.title;\n          }\n        } else {\n          this.libraryTitleExists = false;\n        }\n      });\n    this.store\n      .select(isAdmin)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((value) => {\n        this.isAdmin = value;\n      });\n    this.canUpdateLibrary = this.node?.entry?.role === 'SiteManager' || this.isAdmin;\n    this.appHookService.libraryUpdated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      Object.assign(this.node.entry, this.form.value);\n    });\n    this.appHookService.libraryUpdateFailed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.form.markAsDirty();\n    });\n  }\n\n  ngOnChanges() {\n    this.updateForm(this.node);\n    this.canUpdateLibrary = this.node?.entry?.role === 'SiteManager' || this.isAdmin;\n  }\n\n  update() {\n    if (this.canUpdateLibrary && this.form.valid) {\n      this.form.markAsPristine();\n      this.store.dispatch(\n        new UpdateLibraryAction({\n          ...this.form.value,\n          title: this.form.value.title.trim()\n        })\n      );\n    }\n  }\n\n  private updateForm(node: SiteEntry) {\n    const { entry } = node;\n\n    this.form.setValue({\n      id: entry.id,\n      title: entry.title,\n      description: entry.description || '',\n      visibility: entry.visibility\n    });\n  }\n\n  private findLibraryByTitle(libraryTitle: string): Observable<SitePaging | { list: { entries: any[] } }> {\n    return from(\n      this.queriesApi\n        .findSites(libraryTitle.trim(), {\n          maxItems: 1,\n          fields: ['title']\n        })\n        .catch(() => ({ list: { entries: [] } }))\n    );\n  }\n\n  private validateEmptyName(control: FormControl<string>): ValidationErrors {\n    return control.value.length && !control.value.trim() ? { empty: true } : null;\n  }\n}\n","@if (node) {\n<mat-card appearance=\"raised\">\n  <mat-card-content>\n    <form [formGroup]=\"form\" autocomplete=\"off\">\n      <mat-form-field data-automation-id=\"library-name-properties-wrapper\" class=\"app-library-metadata-form-field\">\n        <mat-label>{{ 'LIBRARY.DIALOG.FORM.NAME' | translate }}</mat-label>\n        <input\n          #libraryNameInput\n          data-automation-id=\"app-library-metadata-form-name-input\"\n          matInput\n          required\n          placeholder=\"{{ 'LIBRARY.DIALOG.FORM.NAME' | translate }}\"\n          formControlName=\"title\"\n          [errorStateMatcher]=\"matcher\"\n        />\n        @if (libraryTitleExists) {\n        <mat-hint data-automation-id=\"app-library-metadata-form-name-hint\">{{ 'LIBRARY.HINTS.SITE_TITLE_EXISTS' | translate }}</mat-hint>\n        }\n        <mat-error data-automation-id=\"app-library-metadata-form-name-error\">\n          {{ titleErrorTranslationKey | translate }}\n        </mat-error>\n      </mat-form-field>\n\n      <mat-form-field data-automation-id=\"library-id-properties-wrapper\" class=\"app-library-metadata-form-field\">\n        <mat-label>{{ 'LIBRARY.DIALOG.FORM.SITE_ID' | translate }}</mat-label>\n        <input matInput placeholder=\"{{ 'LIBRARY.DIALOG.FORM.SITE_ID' | translate }}\" formControlName=\"id\" />\n      </mat-form-field>\n\n      <mat-form-field data-automation-id=\"library-visibility-properties-wrapper\" class=\"app-library-metadata-form-field\">\n        <mat-label>{{ 'LIBRARY.DIALOG.FORM.VISIBILITY' | translate }}</mat-label>\n        <mat-select placeholder=\"{{ 'LIBRARY.DIALOG.FORM.VISIBILITY' | translate }}\" formControlName=\"visibility\">\n          <mat-option [value]=\"type.value\" [attr.data-automation-id]=\"'library-visibility-option-' + type.value\" *ngFor=\"let type of libraryType\">\n            {{ type.label | translate }}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n\n      <mat-form-field data-automation-id=\"library-description-properties-wrapper\" class=\"app-library-metadata-form-field\">\n        <mat-label>{{ 'LIBRARY.DIALOG.FORM.DESCRIPTION' | translate }}</mat-label>\n        <textarea\n          matInput\n          placeholder=\"{{ 'LIBRARY.DIALOG.FORM.DESCRIPTION' | translate }}\"\n          rows=\"3\"\n          formControlName=\"description\"\n          [errorStateMatcher]=\"matcher\"\n        ></textarea>\n        <mat-error>\n          {{ 'LIBRARY.ERRORS.DESCRIPTION_TOO_LONG' | translate }}\n        </mat-error>\n      </mat-form-field>\n    </form>\n  </mat-card-content>\n\n  @if (canUpdateLibrary) {\n  <mat-card-actions align=\"end\">\n    @if (form.enabled) {\n    <button\n      data-automation-id=\"app-library-metadata-form-cancel-button\"\n      mat-button\n      (click)=\"cancel()\">\n      {{ 'LIBRARY.DIALOG.CANCEL' | translate }}\n    </button>\n    <button mat-button color=\"primary\" [disabled]=\"form.invalid || form.pristine\" (click)=\"update()\">\n      {{ 'LIBRARY.DIALOG.UPDATE' | translate }}\n    </button>\n    } @else {\n    <button\n      mat-button\n      color=\"primary\"\n      (click)=\"toggleEdit()\"\n      data-automation-id=\"app-library-metadata-form-edit-button\">\n      {{ 'LIBRARY.DIALOG.EDIT' | translate }}\n    </button>\n    }\n  </mat-card-actions>\n  }\n</mat-card>\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { SiteEntry } from '@alfresco/js-api';\nimport { LibraryMetadataFormComponent } from './library-metadata-form.component';\n\n@Component({\n  imports: [LibraryMetadataFormComponent],\n  selector: 'app-library-metadata-tab',\n  template: '<app-library-metadata-form [node]=\"node\" />',\n  host: { class: 'app-metadata-tab' },\n  encapsulation: ViewEncapsulation.None\n})\nexport class LibraryMetadataTabComponent {\n  @Input()\n  node: SiteEntry;\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { AppExtensionService, isLocked, NodePermissionService } from '@alfresco/aca-shared';\nimport { AppStore, EditOfflineAction, infoDrawerMetadataAspect, NodeActionTypes } from '@alfresco/aca-shared/store';\nimport { AppConfigService, NotificationService } from '@alfresco/adf-core';\nimport { Observable } from 'rxjs';\nimport {\n  CategoryService,\n  ContentMetadataComponent,\n  ContentMetadataCustomPanel,\n  ContentMetadataService,\n  TagService\n} from '@alfresco/adf-content-services';\nimport { filter, map } from 'rxjs/operators';\nimport { AsyncPipe } from '@angular/common';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ExtensionService } from '@alfresco/adf-extensions';\n\n@Component({\n  imports: [ContentMetadataComponent, AsyncPipe],\n  selector: 'app-metadata-tab',\n  template: `\n    <adf-content-metadata\n      [readOnly]=\"readOnly\"\n      [preset]=\"'custom'\"\n      [node]=\"node\"\n      [customPanels]=\"customPanels | async\"\n      [displayCategories]=\"displayCategories\"\n      [displayTags]=\"displayTags\"\n      [displayAspect]=\"metadataAspect\"\n    />\n  `,\n  styleUrls: ['metadata-tab.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-metadata-tab' }\n})\nexport class MetadataTabComponent implements OnInit {\n  private _displayCategories = true;\n  private _displayTags = true;\n\n  @Input()\n  node: Node;\n\n  readOnly = false;\n  customPanels: Observable<ContentMetadataCustomPanel[]>;\n  metadataAspect: string;\n\n  get displayCategories(): boolean {\n    return this._displayCategories;\n  }\n  get displayTags(): boolean {\n    return this._displayTags;\n  }\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private readonly permission: NodePermissionService,\n    protected readonly extensions: AppExtensionService,\n    private readonly appConfig: AppConfigService,\n    private readonly notificationService: NotificationService,\n    private readonly contentMetadataService: ContentMetadataService,\n    private readonly actions$: Actions,\n    private readonly tagService: TagService,\n    private readonly categoryService: CategoryService,\n    private readonly store: Store<AppStore>,\n    private readonly extensionService: ExtensionService\n  ) {\n    if (this.extensions.contentMetadata) {\n      this.appConfig.config['content-metadata'].presets = this.extensions.contentMetadata.presets;\n    }\n  }\n\n  ngOnInit() {\n    this._displayTags = this.tagService.areTagsEnabled();\n    this._displayCategories = this.categoryService.areCategoriesEnabled();\n\n    this.contentMetadataService.error.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((err: { message: string }) => {\n      this.notificationService.showError(err.message);\n    });\n    this.checkIfNodeIsUpdatable(this.node);\n    this.actions$\n      .pipe(\n        ofType<EditOfflineAction>(NodeActionTypes.EditOffline),\n        filter((updatedNode) => this.node.id === updatedNode.payload.entry.id),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((updatedNode) => {\n        this.checkIfNodeIsUpdatable(updatedNode?.payload.entry);\n      });\n    this.customPanels = this.extensions.getCustomMetadataPanels({ entry: this.node }).pipe(\n      map((panels) => {\n        return panels.map((panel) => {\n          return { panelTitle: panel.title, component: panel.component };\n        });\n      }),\n      takeUntilDestroyed(this.destroyRef)\n    );\n    this.store\n      .select(infoDrawerMetadataAspect)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((metadataAspect) => (this.metadataAspect = metadataAspect));\n  }\n\n  private checkIfNodeIsUpdatable(node: Node) {\n    this.readOnly = !(node &&\n    !isLocked({ entry: node }) &&\n    (this.extensionService.getFeature('sidebar')?.['rules']?.enabled ?? []).every((rule: string) =>\n      this.extensionService.evaluateRule(rule, this.extensions)\n    )\n      ? this.permission.check(node, ['update'])\n      : false);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, inject, Input, OnChanges, OnInit, ViewEncapsulation } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AppSettingsService } from '@alfresco/aca-shared';\nimport { VersionManagerComponent } from '@alfresco/adf-content-services';\n\n@Component({\n  imports: [MatIconModule, TranslatePipe, VersionManagerComponent],\n  selector: 'app-versions-tab',\n  template: `\n    @if (isFileSelected) {\n      <adf-version-manager\n        [showComments]=\"settings.uploadAllowComments\"\n        [allowDownload]=\"settings.uploadAllowDownload\"\n        [node]=\"node\"\n        [allowViewVersions]=\"settings.versionManagerAllowViewVersions\"\n        [allowVersionDelete]=\"settings.versionManagerAllowVersionDelete\"\n        [showActions]=\"settings.versionManagerShowActions\"\n      />\n    } @else {\n      <div class=\"adf-manage-versions-empty\">\n        <mat-icon class=\"adf-manage-versions-empty-icon\">face</mat-icon>\n        {{ 'VERSION.SELECTION.EMPTY' | translate }}\n      </div>\n    }\n  `,\n  encapsulation: ViewEncapsulation.None\n})\nexport class VersionsTabComponent implements OnInit, OnChanges {\n  settings = inject(AppSettingsService);\n\n  @Input()\n  node: Node;\n\n  isFileSelected = false;\n\n  ngOnInit() {\n    this.updateState();\n  }\n\n  ngOnChanges() {\n    this.updateState();\n  }\n\n  private updateState() {\n    if (this.node && (this.node as any).nodeId) {\n      // workaround for shared files type.\n      this.isFileSelected = true;\n    } else {\n      this.isFileSelected = this.node.isFile;\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AppStore, DownloadNodesAction, EditOfflineAction, SetSelectedNodesAction, getAppSelection } from '@alfresco/aca-shared/store';\nimport { NodeEntry, SharedLinkEntry, Node, NodesApi } from '@alfresco/js-api';\nimport { Component, inject, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { AppExtensionService, isLocked } from '@alfresco/aca-shared';\nimport { NotificationService } from '@alfresco/adf-core';\nimport { AlfrescoApiService } from '@alfresco/adf-content-services';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatMenuItem, MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatMenuModule, MatIconModule],\n  selector: 'app-toggle-edit-offline',\n  template: `\n    <button mat-menu-item [attr.title]=\"nodeTitle | translate\" (click)=\"onClick()\">\n      <mat-icon>{{ isNodeLocked ? 'cancel' : 'edit' }}</mat-icon>\n      <span>{{ (isNodeLocked ? 'APP.ACTIONS.EDIT_OFFLINE_CANCEL' : 'APP.ACTIONS.EDIT_OFFLINE') | translate }}</span>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-toggle-edit-offline' }\n})\nexport class ToggleEditOfflineComponent implements OnInit {\n  @ViewChild(MatMenuItem)\n  menuItem: MatMenuItem;\n\n  private notificationService = inject(NotificationService);\n\n  private nodesApi: NodesApi;\n  selection: NodeEntry;\n  nodeTitle = '';\n  isNodeLocked = false;\n\n  constructor(\n    private store: Store<AppStore>,\n    private alfrescoApiService: AlfrescoApiService,\n    private extensions: AppExtensionService\n  ) {\n    this.nodesApi = new NodesApi(this.alfrescoApiService.getInstance());\n  }\n\n  ngOnInit() {\n    this.store.select(getAppSelection).subscribe(({ file }) => {\n      this.selection = file;\n      this.isNodeLocked = this.selection && isLocked(this.selection);\n      this.nodeTitle = this.isNodeLocked ? 'APP.ACTIONS.EDIT_OFFLINE_CANCEL' : 'APP.ACTIONS.EDIT_OFFLINE';\n    });\n  }\n\n  async onClick() {\n    await this.toggleLock(this.selection);\n    this.extensions.updateSidebarActions();\n  }\n\n  private async toggleLock(node: NodeEntry | SharedLinkEntry) {\n    const id = (node as SharedLinkEntry).entry.nodeId || node.entry.id;\n\n    if (isLocked(this.selection)) {\n      try {\n        const response = await this.unlockNode(id);\n\n        this.update(response?.entry);\n        this.store.dispatch(new EditOfflineAction(this.selection));\n        this.store.dispatch(new SetSelectedNodesAction([this.selection]));\n      } catch {\n        this.onUnlockError();\n      }\n    } else {\n      try {\n        const response = await this.lockNode(id);\n\n        this.update(response?.entry);\n        this.store.dispatch(new DownloadNodesAction([this.selection]));\n        this.store.dispatch(new EditOfflineAction(this.selection));\n        this.store.dispatch(new SetSelectedNodesAction([this.selection]));\n      } catch {\n        this.onLockError();\n      }\n    }\n  }\n\n  onLockError() {\n    this.notificationService.showError('APP.MESSAGES.ERRORS.LOCK_NODE', null, { fileName: this.selection.entry.name });\n  }\n\n  onUnlockError() {\n    this.notificationService.showError('APP.MESSAGES.ERRORS.UNLOCK_NODE', null, { fileName: this.selection.entry.name });\n  }\n\n  lockNode(nodeId: string) {\n    return this.nodesApi.lockNode(nodeId, {\n      type: 'ALLOW_OWNER_CHANGES',\n      lifetime: 'PERSISTENT'\n    });\n  }\n\n  unlockNode(nodeId: string) {\n    return this.nodesApi.unlockNode(nodeId);\n  }\n\n  private update(data: Node) {\n    if (data?.properties) {\n      const properties = this.selection.entry.properties || {};\n\n      properties['cm:lockLifetime'] = data.properties['cm:lockLifetime'];\n      properties['cm:lockOwner'] = data.properties['cm:lockOwner'];\n      properties['cm:lockType'] = data.properties['cm:lockType'];\n\n      this.selection.entry.properties = properties;\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { AppHookService } from '@alfresco/aca-shared';\nimport { AppStore, getAppSelection } from '@alfresco/aca-shared/store';\nimport { SelectionState } from '@alfresco/adf-extensions';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { LibraryFavoriteDirective } from '@alfresco/adf-content-services';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuItem, MatMenuModule } from '@angular/material/menu';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatIconModule, MatMenuModule, LibraryFavoriteDirective],\n  selector: 'app-toggle-favorite-library',\n  template: `\n    <button\n      mat-menu-item\n      (toggle)=\"onToggleEvent()\"\n      [adf-favorite-library]=\"library\"\n      [attr.title]=\"library.isFavorite ? ('APP.ACTIONS.REMOVE_FAVORITE' | translate) : ('APP.ACTIONS.FAVORITE' | translate)\"\n    >\n      <mat-icon class=\"app-context-menu-item--icon\">{{ library.isFavorite ? 'star' : 'star_border' }}</mat-icon>\n      <span>{{ (library.isFavorite ? 'APP.ACTIONS.REMOVE_FAVORITE' : 'APP.ACTIONS.FAVORITE') | translate }}</span>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-toggle-favorite-library' }\n})\nexport class ToggleFavoriteLibraryComponent implements OnInit {\n  library;\n\n  @Input() data: { focusAfterClosed?: string };\n\n  @ViewChild(MatMenuItem)\n  menuItem: MatMenuItem;\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private store: Store<AppStore>,\n    private appHookService: AppHookService,\n    private router: Router\n  ) {}\n\n  ngOnInit() {\n    const isFavoriteLibraries = this.router.url.startsWith('/favorite/libraries');\n\n    this.store\n      .select(getAppSelection)\n      .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n      .subscribe((selection: SelectionState) => {\n        this.library = { ...selection.library };\n\n        // favorite libraries list should already be marked as favorite\n        if (selection.library && isFavoriteLibraries) {\n          this.library.isFavorite = true;\n        }\n      });\n  }\n\n  onToggleEvent() {\n    if (this.data?.focusAfterClosed) {\n      document.querySelector<HTMLElement>('.adf-context-menu-source')?.focus();\n    }\n    setTimeout(() => {\n      this.appHookService.favoriteLibraryToggle.next();\n    }, 100);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, inject, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { SelectionState } from '@alfresco/adf-extensions';\nimport { AppStore, getAppSelection } from '@alfresco/aca-shared/store';\nimport { Router } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { DocumentListService, NodeFavoriteDirective } from '@alfresco/adf-content-services';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatMenuItem, MatMenuModule } from '@angular/material/menu';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatIconModule, MatMenuModule, NodeFavoriteDirective],\n  selector: 'app-toggle-favorite',\n  template: `\n    <button mat-menu-item #favorites=\"adfFavorite\" (toggle)=\"onToggleEvent()\" [adf-node-favorite]=\"(selection$ | async).nodes\">\n      <mat-icon class=\"app-context-menu-item--icon\">{{ favorites.hasFavorites() ? 'star' : 'star_border' }}</mat-icon>\n      <span>{{ (favorites.hasFavorites() ? 'APP.ACTIONS.REMOVE_FAVORITE' : 'APP.ACTIONS.FAVORITE') | translate }}</span>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-toggle-favorite' }\n})\nexport class ToggleFavoriteComponent implements OnInit {\n  private documentListService = inject(DocumentListService);\n\n  @Input() data: any;\n  selection$: Observable<SelectionState>;\n  private reloadOnRoutes: string[] = [];\n\n  @ViewChild(MatMenuItem)\n  menuItem: MatMenuItem;\n\n  constructor(\n    private store: Store<AppStore>,\n    private router: Router\n  ) {\n    this.selection$ = this.store.select(getAppSelection);\n  }\n\n  ngOnInit() {\n    this.reloadOnRoutes = this.data?.routes ?? [];\n  }\n\n  onToggleEvent() {\n    const focusAfterClosed = this.data?.focusAfterClosed;\n    if (focusAfterClosed) {\n      document.querySelector<HTMLElement>(focusAfterClosed)?.focus();\n    }\n    if (this.reloadOnRoutes.includes(this.router.url)) {\n      this.documentListService.reload();\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { isInfoDrawerOpened, ToggleInfoDrawerAction } from '@alfresco/aca-shared/store';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatButtonModule, MatIconModule],\n  selector: 'app-toggle-info-drawer',\n  template: `\n    <button\n      mat-icon-button\n      [color]=\"(infoDrawerOpened$ | async) ? 'primary' : null\"\n      [attr.aria-label]=\"'APP.ACTIONS.DETAILS' | translate\"\n      [attr.aria-expanded]=\"infoDrawerOpened$ | async\"\n      [attr.title]=\"'APP.ACTIONS.DETAILS' | translate\"\n      (click)=\"onClick()\"\n    >\n      <mat-icon>view_sidebar</mat-icon>\n    </button>\n  `,\n  styles: [\n    `\n      .app-toggle-info-drawer button:focus {\n        border: 2px solid var(--theme-blue-button-color);\n        border-radius: 6px;\n        outline: none;\n        background-color: var(--theme-selected-background-color);\n      }\n    `\n  ],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-toggle-info-drawer' }\n})\nexport class ToggleInfoDrawerComponent {\n  infoDrawerOpened$: Observable<boolean>;\n\n  constructor(private store: Store<any>) {\n    this.infoDrawerOpened$ = this.store.select(isInfoDrawerOpened);\n  }\n\n  onClick() {\n    this.store.dispatch(new ToggleInfoDrawerAction());\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AppStore, SetSelectedNodesAction, getAppSelection } from '@alfresco/aca-shared/store';\nimport { AppHookService, UserProfileService } from '@alfresco/aca-shared';\nimport { SelectionState } from '@alfresco/adf-extensions';\nimport { Component, inject, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { LibraryMembershipDirective, LibraryMembershipErrorEvent, LibraryMembershipToggleEvent } from '@alfresco/adf-content-services';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NotificationService } from '@alfresco/adf-core';\nimport { MatMenuItem } from '@angular/material/menu';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatButtonModule, MatIconModule, LibraryMembershipDirective],\n  selector: 'app-toggle-join-library-button',\n  template: `\n    <button\n      mat-icon-button\n      color=\"primary\"\n      #membership=\"libraryMembership\"\n      (toggle)=\"onToggleEvent($event)\"\n      (error)=\"onErrorEvent($event)\"\n      [adf-library-membership]=\"(selection$ | async).library\"\n      [isAdmin]=\"(profile$ | async).isAdmin\"\n      [attr.title]=\"(membership.isJoinRequested | async) ? ('APP.ACTIONS.CANCEL_JOIN' | translate) : ('APP.ACTIONS.JOIN' | translate)\"\n    >\n      <mat-icon *ngIf=\"membership.isJoinRequested | async\">cancel</mat-icon>\n      <mat-icon *ngIf=\"!(membership.isJoinRequested | async)\">library_add</mat-icon>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-toggle-join-library' }\n})\nexport class ToggleJoinLibraryButtonComponent {\n  @ViewChild(MatMenuItem)\n  menuItem: MatMenuItem;\n\n  private userProfileService = inject(UserProfileService);\n  private notificationService = inject(NotificationService);\n  private appHookService = inject(AppHookService);\n  private store = inject(Store<AppStore>);\n\n  selection$: Observable<SelectionState>;\n  profile$ = this.userProfileService.userProfile$;\n\n  constructor() {\n    this.selection$ = this.store.select(getAppSelection);\n  }\n\n  onToggleEvent(event: LibraryMembershipToggleEvent) {\n    this.notificationService.showInfo(event.i18nKey);\n\n    if (event.shouldReload) {\n      this.appHookService.libraryJoined.next();\n    } else {\n      if (event.updatedEntry) {\n        this.store.dispatch(new SetSelectedNodesAction([{ entry: event.updatedEntry, isLibrary: true } as any]));\n      }\n      this.appHookService.joinLibraryToggle.next();\n    }\n  }\n\n  onErrorEvent(event: LibraryMembershipErrorEvent) {\n    this.notificationService.showError(event.i18nKey);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { ToggleJoinLibraryButtonComponent } from './toggle-join-library-button.component';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { LibraryMembershipDirective } from '@alfresco/adf-content-services';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatIconModule, MatMenuModule, LibraryMembershipDirective],\n  selector: 'app-toggle-join-library-menu',\n  template: `\n    <button\n      mat-menu-item\n      #membership=\"libraryMembership\"\n      (toggle)=\"onToggleEvent($event)\"\n      (error)=\"onErrorEvent($event)\"\n      [adf-library-membership]=\"(selection$ | async).library\"\n      [isAdmin]=\"(profile$ | async).isAdmin\"\n      [attr.title]=\"(membership.isJoinRequested | async) ? ('APP.ACTIONS.CANCEL_JOIN' | translate) : ('APP.ACTIONS.JOIN' | translate)\"\n    >\n      <mat-icon>{{ (membership.isJoinRequested | async) ? 'cancel' : 'library_add' }}</mat-icon>\n      <span>{{ (membership.isJoinRequested | async) ? ('APP.ACTIONS.CANCEL_JOIN' | translate) : ('APP.ACTIONS.JOIN' | translate) }}</span>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-toggle-join-library' }\n})\nexport class ToggleJoinLibraryMenuComponent extends ToggleJoinLibraryButtonComponent {}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, inject, Input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { AppStore, getAppSelection, ViewNodeAction } from '@alfresco/aca-shared/store';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { take } from 'rxjs/operators';\nimport { SharedLinkEntry } from '@alfresco/js-api';\nimport { AppSettingsService, AutoDownloadService } from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuItem, MatMenuModule } from '@angular/material/menu';\nimport { MatDialogModule } from '@angular/material/dialog';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatButtonModule, MatIconModule, MatMenuModule, MatDialogModule],\n  selector: 'app-view-node',\n  template: `\n    <button\n      *ngIf=\"data.iconButton\"\n      mat-icon-button\n      [attr.aria-label]=\"data.title | translate\"\n      [attr.title]=\"data.title | translate\"\n      (click)=\"onClick()\"\n    >\n      <mat-icon>visibility</mat-icon>\n    </button>\n\n    <button *ngIf=\"data.menuButton\" mat-menu-item (click)=\"onClick()\">\n      <mat-icon>visibility</mat-icon>\n      <span>{{ data.title | translate }}</span>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-view-node' }\n})\nexport class ViewNodeComponent {\n  private settings = inject(AppSettingsService);\n\n  @Input() data: { title?: string; menuButton?: boolean; iconButton?: boolean };\n\n  @ViewChild(MatMenuItem)\n  menuItem: MatMenuItem;\n\n  constructor(\n    private store: Store<AppStore>,\n    private router: Router,\n    private autoDownloadService: AutoDownloadService,\n    private activatedRoute: ActivatedRoute\n  ) {}\n\n  onClick() {\n    this.store\n      .select(getAppSelection)\n      .pipe(take(1))\n      .subscribe((selection) => {\n        if (!this.settings.autoDownloadEnabled || !this.autoDownloadService.tryDownload(selection.file, this.settings.authDownloadThreshold)) {\n          let id: string;\n\n          if (selection.file.entry.nodeType === 'app:filelink') {\n            id = selection.file.entry.properties['cm:destination'];\n          } else {\n            id = (selection.file as SharedLinkEntry).entry.nodeId || (selection.file as any).entry.guid || selection.file.entry.id;\n          }\n          this.navigateToViewer(id);\n        }\n      });\n  }\n\n  private navigateToViewer(id: string): void {\n    this.activatedRoute.queryParams.pipe(take(1)).subscribe((params) => {\n      const location = params.location || this.router.url;\n      this.store.dispatch(new ViewNodeAction(id, { location }));\n    });\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { DestroyRef, Directive, HostListener, inject, OnInit } from '@angular/core';\nimport { DocumentListComponent, DocumentListService } from '@alfresco/adf-content-services';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { UserPreferencesService } from '@alfresco/adf-core';\nimport { Store } from '@ngrx/store';\nimport { SetSelectedNodesAction } from '@alfresco/aca-shared/store';\nimport { filter } from 'rxjs/operators';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n  standalone: true,\n  selector: '[acaDocumentList]'\n})\nexport class DocumentListDirective implements OnInit {\n  private isLibrary = false;\n  selectedNode: NodeEntry;\n\n  get sortingPreferenceKey(): string {\n    return this.route.snapshot.data.sortingPreferenceKey;\n  }\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private store: Store<any>,\n    private documentList: DocumentListComponent,\n    private preferences: UserPreferencesService,\n    private route: ActivatedRoute,\n    private router: Router,\n    private documentListService: DocumentListService\n  ) {}\n\n  ngOnInit() {\n    this.documentList.stickyHeader = true;\n    this.documentList.includeFields = ['isFavorite', 'aspectNames', 'definition'];\n    this.isLibrary =\n      this.documentList.currentFolderId === '-mysites-' ||\n      // workaround for custom node list\n      this.router.url.endsWith('/libraries') ||\n      this.router.url.startsWith('/search-libraries');\n\n    if (this.sortingPreferenceKey) {\n      if (this.preferences.hasItem(`${this.sortingPreferenceKey}.columns.width`)) {\n        this.documentList.setColumnsWidths = JSON.parse(this.preferences.get(`${this.sortingPreferenceKey}.columns.width`));\n      }\n\n      if (this.preferences.hasItem(`${this.sortingPreferenceKey}.columns.visibility`)) {\n        this.documentList.setColumnsVisibility = JSON.parse(this.preferences.get(`${this.sortingPreferenceKey}.columns.visibility`));\n      }\n\n      if (this.preferences.hasItem(`${this.sortingPreferenceKey}.columns.order`)) {\n        this.documentList.setColumnsOrder = JSON.parse(this.preferences.get(`${this.sortingPreferenceKey}.columns.order`));\n      }\n\n      const mode = this.documentList.sortingMode;\n      this.preferences.set(`${this.sortingPreferenceKey}.sorting.mode`, mode);\n      if (mode === 'server') {\n        this.restoreSorting();\n      }\n    }\n\n    this.documentList.ready\n      .pipe(\n        filter(() => !this.router.url.includes('viewer:view')),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(() => this.onReady());\n\n    this.documentListService.reload$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.reload();\n    });\n\n    this.documentListService.resetSelection$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.reset();\n    });\n  }\n\n  @HostListener('sorting-changed', ['$event'])\n  onSortingChanged(event: CustomEvent) {\n    if (this.sortingPreferenceKey) {\n      if (this.documentList.sortingMode === 'client') {\n        this.storePreviousSorting();\n      }\n      this.preferences.set(`${this.sortingPreferenceKey}.sorting.key`, event.detail.key);\n      this.preferences.set(`${this.sortingPreferenceKey}.sorting.sortingKey`, event.detail.sortingKey);\n      this.preferences.set(`${this.sortingPreferenceKey}.sorting.direction`, event.detail.direction);\n    }\n  }\n\n  @HostListener('columnsWidthChanged', ['$event'])\n  onColumnsWidthChanged(event: CustomEvent) {\n    if (this.sortingPreferenceKey) {\n      this.preferences.set(`${this.sortingPreferenceKey}.columns.width`, JSON.stringify(event));\n    }\n  }\n\n  @HostListener('columnsVisibilityChanged', ['$event'])\n  onColumnsVisibilityChange(event: CustomEvent) {\n    if (this.sortingPreferenceKey) {\n      this.preferences.set(`${this.sortingPreferenceKey}.columns.visibility`, JSON.stringify(event));\n    }\n  }\n\n  @HostListener('columnsOrderChanged', ['$event'])\n  onColumnOrderChanged(event: CustomEvent) {\n    if (this.sortingPreferenceKey) {\n      this.preferences.set(`${this.sortingPreferenceKey}.columns.order`, JSON.stringify(event));\n    }\n  }\n\n  @HostListener('node-select', ['$event'])\n  onNodeSelect(event: CustomEvent) {\n    if (!!event.detail && !!event.detail.node) {\n      this.updateSelection();\n      this.selectedNode = event.detail.node;\n    }\n  }\n\n  @HostListener('node-unselect')\n  onNodeUnselect() {\n    this.updateSelection();\n  }\n\n  onReady() {\n    this.updateSelection();\n    this.restoreSorting();\n  }\n\n  private updateSelection() {\n    const selection = this.documentList.selection.map((node) => {\n      node['isLibrary'] = this.isLibrary;\n      return node;\n    });\n\n    this.store.dispatch(new SetSelectedNodesAction(selection));\n  }\n\n  private reload() {\n    this.store.dispatch(new SetSelectedNodesAction([]));\n  }\n\n  private reset() {\n    this.selectedNode = null;\n    this.store.dispatch(new SetSelectedNodesAction([]));\n  }\n\n  private setSorting(key: string, direction: string) {\n    this.documentList.sorting = [key, direction];\n    this.documentList.data.setSorting({ key, direction });\n  }\n\n  private storePreviousSorting() {\n    if (this.preferences.hasItem(`${this.sortingPreferenceKey}.sorting.key`)) {\n      const keyToSave = this.preferences.get(`${this.sortingPreferenceKey}.sorting.key`);\n\n      if (!keyToSave.includes(this.documentList.sorting[0])) {\n        const dirToSave = this.preferences.get(`${this.sortingPreferenceKey}.sorting.direction`);\n        this.preferences.set(`${this.sortingPreferenceKey}.sorting.previousKey`, keyToSave);\n        this.preferences.set(`${this.sortingPreferenceKey}.sorting.previousDirection`, dirToSave);\n      }\n    }\n  }\n\n  private restoreSorting() {\n    const [previousKey, previousDir] = [\n      this.preferences.get(`${this.sortingPreferenceKey}.sorting.previousKey`, null),\n      this.preferences.get(`${this.sortingPreferenceKey}.sorting.previousDirection`, null)\n    ];\n\n    const [currentKey, currentDir] = [\n      this.preferences.get(`${this.sortingPreferenceKey}.sorting.sortingKey`, null) ||\n        this.preferences.get(`${this.sortingPreferenceKey}.sorting.key`, null),\n      this.preferences.get(`${this.sortingPreferenceKey}.sorting.direction`, null)\n    ];\n\n    if (previousKey) {\n      this.setSorting(previousKey, previousDir);\n    }\n    if (currentKey) {\n      this.setSorting(currentKey, currentDir);\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { inject, Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AppConfigValues, UnsavedChangesDialogComponent, UserPreferencesService } from '@alfresco/adf-core';\nimport { MatDialog } from '@angular/material/dialog';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalAiService {\n  private route = inject(ActivatedRoute);\n  private dialog = inject(MatDialog);\n  private userPreferencesService = inject(UserPreferencesService);\n\n  openUnsavedChangesModal(callback: () => void): void {\n    const hasPreviousSearch = this.route.snapshot?.queryParams?.query?.length > 0;\n    const modalHidden = this.userPreferencesService.get(AppConfigValues.UNSAVED_CHANGES_MODAL_HIDDEN) === 'true';\n\n    if (!hasPreviousSearch || modalHidden) {\n      callback();\n      return;\n    }\n\n    this.dialog\n      .open<UnsavedChangesDialogComponent>(UnsavedChangesDialogComponent, {\n        width: '345px',\n        data: {\n          descriptionText: 'KNOWLEDGE_RETRIEVAL.SEARCH.DISCARD_CHANGES.LOSE_RESPONSE',\n          confirmButtonText: 'KNOWLEDGE_RETRIEVAL.SEARCH.DISCARD_CHANGES.ASK_AI',\n          checkboxText: 'KNOWLEDGE_RETRIEVAL.SEARCH.DISCARD_CHANGES.DO_NOT_SHOW_MESSAGE',\n          headerText: 'KNOWLEDGE_RETRIEVAL.SEARCH.DISCARD_CHANGES.WARNING'\n        }\n      })\n      .afterClosed()\n      .subscribe((openModal: boolean) => {\n        if (openModal) {\n          callback();\n        }\n      });\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { AvatarComponent, IconComponent, NotificationService, UserPreferencesService } from '@alfresco/adf-core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { AiSearchByTermPayload, AppStore, getAppSelection, SearchByTermAiAction, ToggleAISearchInput } from '@alfresco/aca-shared/store';\nimport { SelectionState } from '@alfresco/adf-extensions';\nimport { MatSelectModule } from '@angular/material/select';\nimport { AgentService, SearchAiService } from '@alfresco/adf-content-services';\nimport { MatCardModule } from '@angular/material/card';\nimport {\n  MAT_TOOLTIP_DEFAULT_OPTIONS,\n  MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY,\n  MatTooltipDefaultOptions,\n  MatTooltipModule\n} from '@angular/material/tooltip';\nimport { ModalAiService } from '../../../../services/modal-ai.service';\nimport { Agent } from '@alfresco/js-api';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nconst MatTooltipOptions: MatTooltipDefaultOptions = {\n  ...MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY(),\n  disableTooltipInteractivity: true\n};\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    MatButtonModule,\n    MatIconModule,\n    MatFormFieldModule,\n    MatInputModule,\n    A11yModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatSelectModule,\n    IconComponent,\n    AvatarComponent,\n    MatCardModule,\n    MatTooltipModule\n  ],\n  selector: 'aca-search-ai-input',\n  templateUrl: './search-ai-input.component.html',\n  styleUrls: ['./search-ai-input.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: MatTooltipOptions }]\n})\nexport class SearchAiInputComponent implements OnInit {\n  @Input()\n  placeholder: string;\n\n  @Input()\n  agentId: string;\n\n  @Input()\n  usedInAiResultsPage: boolean;\n\n  @Input()\n  searchTerm: string;\n\n  private readonly storedNodesKey = 'knowledgeRetrievalNodes';\n\n  private _agentControl = new FormControl<Agent>(null);\n  private _agents: Agent[] = [];\n  private selectedNodesState: SelectionState;\n  private _queryControl = new FormControl('');\n  private _initialsByAgentId: { [key: string]: string } = {};\n\n  get agentControl(): FormControl<Agent> {\n    return this._agentControl;\n  }\n\n  get agents(): Agent[] {\n    return this._agents;\n  }\n\n  get queryControl(): FormControl<string> {\n    return this._queryControl;\n  }\n\n  get initialsByAgentId(): { [key: string]: string } {\n    return this._initialsByAgentId;\n  }\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private store: Store<AppStore>,\n    private searchAiService: SearchAiService,\n    private notificationService: NotificationService,\n    private agentService: AgentService,\n    private userPreferencesService: UserPreferencesService,\n    private translateService: TranslateService,\n    private modalAiService: ModalAiService\n  ) {}\n\n  ngOnInit(): void {\n    const queryValue = this.usedInAiResultsPage ? '' : this.searchTerm || '';\n    this.queryControl.setValue(queryValue);\n\n    if (!this.usedInAiResultsPage) {\n      this.store\n        .select(getAppSelection)\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe((selection) => {\n          this.selectedNodesState = selection;\n        });\n    } else {\n      this.selectedNodesState = JSON.parse(this.userPreferencesService.get(this.storedNodesKey));\n    }\n\n    this.agentService\n      .getAgents()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(\n        (agents) => {\n          this._agents = agents;\n\n          this.agentControl.setValue(this._agents.find((agent) => agent.id === this.agentId));\n          this._initialsByAgentId = this.agents.reduce((initials, agent) => {\n            const words = agent.name.split(' ').filter((word) => !word.match(/[^a-zA-Z]+/g));\n            initials[agent.id] = `${words[0][0]}${words[1]?.[0] || ''}`;\n            return initials;\n          }, {});\n        },\n        () => this.notificationService.showError(this.translateService.instant('KNOWLEDGE_RETRIEVAL.SEARCH.ERRORS.AGENTS_FETCHING'))\n      );\n  }\n\n  onSearchSubmit() {\n    this.modalAiService.openUnsavedChangesModal(() => this.search());\n  }\n\n  private search(): void {\n    const error = this.searchAiService.checkSearchAvailability(this.selectedNodesState);\n    if (error) {\n      this.notificationService.showError(error);\n    } else {\n      const payload: AiSearchByTermPayload = {\n        searchTerm: this.queryControl.value,\n        agentId: this.agentControl.value.id\n      };\n      this.userPreferencesService.set(this.storedNodesKey, JSON.stringify(this.selectedNodesState));\n      this.store.dispatch(new SearchByTermAiAction(payload));\n      this.store.dispatch(new ToggleAISearchInput(this.agentControl.value.id, this.queryControl.value));\n      this.queryControl.reset();\n    }\n  }\n}\n","<div class=\"aca-search-ai-input-agent-container\">\n  <mat-select\n    [formControl]=\"agentControl\"\n    class=\"aca-search-ai-input-agent-select\"\n    panelClass=\"aca-search-ai-input-agent-select-options aca-search-ai-input-agent-select-agents\"\n    data-automation-id=\"aca-search-ai-agents-select\"\n  [hideSingleSelectionIndicator]=\"true\">\n    <mat-select-trigger class=\"aca-search-ai-input-agent-select-displayed-value\">\n      <adf-avatar\n        [src]=\"agentControl.value?.avatarUrl\"\n        [initials]=\"initialsByAgentId[agentControl.value?.id]\"\n        size=\"26px\" />\n      <span class=\"aca-search-ai-input-agent-select-displayed-value-text\">{{ agentControl.value?.name }}</span>\n    </mat-select-trigger>\n    <mat-option\n      *ngFor=\"let agent of agents\"\n      [value]=\"agent\"\n      class=\"aca-search-ai-input-agent-select-options-option\"\n      [attr.data-automation-id]=\"'aca-search-ai-input-agent-' + agent.id\"><div class=\"aca-search-ai-input-agent-select-options-option-content\">\n        <adf-avatar [src]=\"agent?.avatarUrl\" [initials]=\"initialsByAgentId[agent.id]\" />\n        <span class=\"aca-search-ai-input-agent-select-options-option-content-text\" [matTooltip]=\"agent.name\" [matTooltipPosition]=\"'right'\">{{ agent.name }}</span>\n      </div>\n    </mat-option>\n  </mat-select>\n\n  <div class=\"aca-search-ai-input-agent-popup-hover-card\">\n    <mat-card class=\"aca-search-ai-input-agent-popup-hover-card-container\">\n      <mat-card-title class=\"aca-search-ai-input-agent-popup-hover-card-container-title\">\n        <adf-avatar\n          [initials]=\"initialsByAgentId[agentControl.value?.id]\"\n          [src]=\"agentControl.value?.avatarUrl\"\n          size=\"50px\" />\n        <span class=\"aca-search-ai-input-agent-popup-hover-card-container-title-name\"\n              [matTooltipPosition]=\"'right'\"\n              [matTooltip]=\"agentControl.value?.name\">\n            {{ agentControl.value?.name }}\n        </span>\n      </mat-card-title>\n      <mat-card-content class=\"aca-search-ai-input-agent-popup-hover-card-container-content\">\n        {{ agentControl.value?.description }}\n      </mat-card-content>\n    </mat-card>\n  </div>\n</div>\n<input\n  class=\"aca-search-ai-input-text\"\n  matInput\n  [formControl]=\"queryControl\"\n  data-automation-id=\"aca-search-ai-input\"\n  [placeholder]=\"placeholder | translate\"\n  (keyup.enter)=\"onSearchSubmit()\"/>\n<button\n  mat-flat-button\n  color=\"primary\"\n  class=\"aca-search-ai-asking-button\"\n  (click)=\"onSearchSubmit()\"\n  [disabled]=\"!queryControl.value\"\n  data-automation-id=\"aca-search-ai-asking-button\">\n  <adf-icon [value]=\"'adf:three_magic_stars_ai'\" />\n  <span class=\"aca-search-ai-asking-button-label\">{{ 'KNOWLEDGE_RETRIEVAL.SEARCH.SEARCH_INPUT.ASK_BUTTON_LABEL' | translate }}</span>\n</button>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SearchAiInputComponent } from '../search-ai-input/search-ai-input.component';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { SearchAiNavigationService } from '../../../../services/search-ai-navigation.service';\nimport { SearchAiInputState, SearchAiService } from '@alfresco/adf-content-services';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { AsyncPipe } from '@angular/common';\nimport { Router } from '@angular/router';\n\n@Component({\n  imports: [SearchAiInputComponent, MatIconModule, MatDividerModule, MatButtonModule, TranslatePipe, AsyncPipe],\n  selector: 'aca-search-ai-input-container',\n  templateUrl: './search-ai-input-container.component.html',\n  styleUrls: ['./search-ai-input-container.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class SearchAiInputContainerComponent implements OnInit {\n  @Input()\n  placeholder = 'KNOWLEDGE_RETRIEVAL.SEARCH.SEARCH_INPUT.DEFAULT_PLACEHOLDER';\n  @Input()\n  agentId: string;\n  @Input()\n  usedInAiResultsPage: boolean;\n\n  inputState$: Observable<SearchAiInputState>;\n  isKnowledgeRetrievalPage = false;\n\n  constructor(\n    private readonly searchAiService: SearchAiService,\n    private searchNavigationService: SearchAiNavigationService,\n    private router: Router\n  ) {}\n\n  ngOnInit(): void {\n    this.isKnowledgeRetrievalPage = this.router.url.startsWith('/knowledge-retrieval');\n    this.inputState$ = this.searchAiService.toggleSearchAiInput$;\n  }\n\n  leaveSearchInput(): void {\n    this.searchNavigationService.navigateToPreviousRouteOrCloseInput();\n  }\n}\n","<aca-search-ai-input\n  [searchTerm]=\"(inputState$ | async).searchTerm\"\n  [placeholder]=\"placeholder\"\n  [agentId]=\"agentId\"\n  [usedInAiResultsPage]=\"usedInAiResultsPage\" />\n<mat-divider\n  [vertical]=\"true\"\n  aria-hidden=\"true\"\n  class=\"aca-search-ai-input-container-divider\" />\n<button\n  mat-icon-button\n  (click)=\"leaveSearchInput()\"\n  data-automation-id=\"aca-search-ai-input-container-leaving-search-button\"\n  [title]=\"(isKnowledgeRetrievalPage ? 'KNOWLEDGE_RETRIEVAL.SEARCH.SEARCH_INPUT.HIDE_ANSWER' : 'KNOWLEDGE_RETRIEVAL.SEARCH.SEARCH_INPUT.HIDE_INPUT') | translate\"\n  class=\"aca-search-ai-input-container-close\">\n  <mat-icon>close</mat-icon>\n</button>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n  CustomEmptyContentTemplateDirective,\n  DataColumnComponent,\n  DataColumnListComponent,\n  PaginationComponent,\n  ShowHeaderMode\n} from '@alfresco/adf-core';\nimport { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { Node, NodeEntry, PathElement } from '@alfresco/js-api';\nimport { NodeActionsService } from '../../services/node-actions.service';\nimport {\n  ContentApiService,\n  ContextActionsDirective,\n  GenericErrorComponent,\n  InfoDrawerComponent,\n  PageComponent,\n  PageLayoutComponent,\n  PaginationDirective,\n  ToolbarComponent\n} from '@alfresco/aca-shared';\nimport { isAdmin, SetCurrentFolderAction, showLoaderSelector, UploadFileVersionAction } from '@alfresco/aca-shared/store';\nimport { debounceTime } from 'rxjs/operators';\nimport {\n  BreadcrumbComponent,\n  DocumentListComponent,\n  FileUploadEvent,\n  FilterSearch,\n  SearchHeaderQueryBuilderService,\n  ShareDataRow,\n  UploadDragAreaComponent\n} from '@alfresco/adf-content-services';\nimport { DocumentListPresetRef, DynamicColumnComponent } from '@alfresco/adf-extensions';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { DocumentListDirective } from '../../directives/document-list.directive';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { SearchAiInputContainerComponent } from '../knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { extractFiltersFromEncodedQuery } from '../../utils/aca-search-utils';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    GenericErrorComponent,\n    DocumentListDirective,\n    ContextActionsDirective,\n    PaginationComponent,\n    MatProgressSpinnerModule,\n    InfoDrawerComponent,\n    PaginationDirective,\n    PageLayoutComponent,\n    ToolbarComponent,\n    SearchAiInputContainerComponent,\n    DynamicColumnComponent,\n    BreadcrumbComponent,\n    UploadDragAreaComponent,\n    DocumentListComponent,\n    DataColumnListComponent,\n    DataColumnComponent,\n    CustomEmptyContentTemplateDirective\n  ],\n  templateUrl: './files.component.html',\n  encapsulation: ViewEncapsulation.None,\n  styleUrl: './files.component.scss',\n  selector: 'aca-files'\n})\nexport class FilesComponent extends PageComponent implements OnInit, OnDestroy {\n  isValidPath = true;\n  isAdmin = false;\n  selectedNode: NodeEntry;\n  queryParams = null;\n  showLoader$ = this.store.select(showLoaderSelector);\n  columns: DocumentListPresetRef[] = [];\n  isFilterHeaderActive = false;\n\n  private nodePath: PathElement[];\n  private _errorTranslationKey = 'APP.MESSAGES.ERRORS.MISSING_CONTENT';\n\n  get errorTranslationKey(): string {\n    return this._errorTranslationKey;\n  }\n\n  constructor(\n    private readonly contentApi: ContentApiService,\n    private readonly nodeActionsService: NodeActionsService,\n    private readonly route: ActivatedRoute,\n    private readonly queryBuilderService: SearchHeaderQueryBuilderService\n  ) {\n    super();\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    const { data } = this.route.snapshot;\n\n    this.title = data.title;\n\n    this.route.queryParamMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((queryMap) => {\n      this.queryParams = extractFiltersFromEncodedQuery(queryMap?.get('q'));\n      this.queryBuilderService.populateFilters.next(this.queryParams);\n      if (!this.queryParams) {\n        this.queryBuilderService.resetActiveFilters();\n      }\n    });\n    this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(({ folderId }: Params) => {\n      const nodeId = folderId || data.defaultNodeId;\n\n      this.contentApi\n        .getNode(nodeId)\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe(\n          (node) => {\n            this.isValidPath = true;\n\n            if (node?.entry?.isFolder) {\n              void this.updateCurrentNode(node.entry);\n            } else {\n              void this.router.navigate(['/personal-files', node.entry.parentId], {\n                replaceUrl: true\n              });\n            }\n          },\n          (error: HttpErrorResponse) => this.onError(error)\n        );\n    });\n\n    this.subscriptions = this.subscriptions.concat([\n      this.nodeActionsService.contentCopied.subscribe((nodes) => this.onContentCopied(nodes)),\n      this.uploadService.fileUploadComplete.pipe(debounceTime(300)).subscribe((file) => this.onFileUploadedEvent(file)),\n      this.uploadService.fileUploadDeleted.pipe(debounceTime(300)).subscribe((file) => this.onFileUploadedEvent(file))\n    ]);\n\n    this.store\n      .select(isAdmin)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((value) => {\n        this.isAdmin = value;\n      });\n\n    this.extensions.filesDocumentListPreset$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((preset) => {\n      this.columns = preset;\n    });\n\n    if (this.queryParams && Object.keys(this.queryParams).length > 0) {\n      this.isFilterHeaderActive = true;\n    }\n  }\n\n  ngOnDestroy() {\n    this.store.dispatch(new SetCurrentFolderAction(null));\n    super.ngOnDestroy();\n  }\n\n  navigate(nodeId: string = null) {\n    const currentNodeId = this.route.snapshot.paramMap.get('folderId');\n    const urlWithoutParams = decodeURIComponent(this.router.url).split('?')[0];\n    const urlToNavigate: string[] = this.getUrlToNavigate(urlWithoutParams, currentNodeId, nodeId);\n    void this.router.navigate(urlToNavigate);\n  }\n\n  private getUrlToNavigate(currentURL: string, currentNodeId: string, nextNodeId: string): string[] {\n    return currentNodeId ? this.getNextNodeUrlToNavigate(currentURL, currentNodeId, nextNodeId) : this.appendNextNodeIdToUrl(currentURL, nextNodeId);\n  }\n\n  private getNextNodeUrlToNavigate(currentURL: string, currentNodeId: string, nextNodeId: string): string[] {\n    const urlToNavigate: string[] =\n      nextNodeId && !this.isRootNode(nextNodeId)\n        ? this.replaceCurrentNodeIdWithNextNodeId(currentURL, currentNodeId, nextNodeId)\n        : this.removeNodeIdFromUrl(currentURL, currentNodeId);\n    urlToNavigate.shift();\n    return urlToNavigate;\n  }\n\n  private replaceCurrentNodeIdWithNextNodeId(currentURL: string, currentNodeId: string, nextNodeId: string): string[] {\n    const nextNodeUrlToNavigate = currentURL.split('/');\n    const index = nextNodeUrlToNavigate.indexOf(currentNodeId);\n    if (index > 0) {\n      nextNodeUrlToNavigate[index] = nextNodeId;\n    }\n    return nextNodeUrlToNavigate;\n  }\n\n  private removeNodeIdFromUrl(currentURL: string, currentNodeId: string): string[] {\n    const rootUrl: string[] = currentURL.replace(currentNodeId, '').split('/');\n    rootUrl.pop();\n    return rootUrl;\n  }\n\n  private appendNextNodeIdToUrl(currentURL: string, nodeId: string): string[] {\n    const navigateToNodeUrl = currentURL.split('/');\n    if (nodeId && !this.isRootNode(nodeId)) {\n      navigateToNodeUrl.push(nodeId);\n    }\n    navigateToNodeUrl.shift();\n    return navigateToNodeUrl;\n  }\n\n  onUploadNewVersion(ev: CustomEvent) {\n    this.store.dispatch(new UploadFileVersionAction(ev));\n  }\n\n  navigateTo(node: NodeEntry) {\n    if (node?.entry) {\n      this.selectedNode = node;\n      const { isFolder } = node.entry;\n\n      if (isFolder) {\n        let id: string;\n\n        if (node.entry.nodeType === 'app:folderlink') {\n          id = node.entry.properties['cm:destination'];\n        } else {\n          id = node.entry.id;\n        }\n\n        this.documentList.resetNewFolderPagination();\n        this.navigate(id);\n        return;\n      }\n\n      this.showPreview(node, { location: this.router.url });\n    }\n  }\n\n  handleNodeClick(event: Event) {\n    this.navigateTo((event as CustomEvent).detail?.node);\n  }\n\n  onBreadcrumbNavigate(route: PathElement) {\n    this.documentList.resetNewFolderPagination();\n\n    // todo: review this approach once 5.2.3 is out\n    if (this.nodePath && this.nodePath?.length > 2) {\n      if (this.nodePath[1].name === 'Sites' && this.nodePath[2].id === route.id) {\n        return this.navigate(this.nodePath[3].id);\n      }\n    }\n    this.navigate(route.id);\n  }\n\n  onFileUploadedEvent(event: FileUploadEvent) {\n    const node: NodeEntry = event.file.data;\n\n    // check root and child nodes\n    if (node?.entry?.parentId === this.getParentNodeId()) {\n      this.reload(this.selectedNode);\n      return;\n    }\n\n    // check the child nodes to show dropped folder\n    if (event && event.file.options.parentId === this.getParentNodeId()) {\n      this.displayFolderParent(0, event.file.options.path);\n      return;\n    }\n\n    if (event?.file.options.parentId) {\n      if (this.nodePath) {\n        const correspondingNodePath = this.nodePath.find((pathItem) => pathItem.id === event.file.options.parentId);\n\n        // check if the current folder has the 'trigger-upload-folder' as one of its parents\n        if (correspondingNodePath) {\n          const correspondingIndex = this.nodePath.length - this.nodePath.indexOf(correspondingNodePath);\n          this.displayFolderParent(correspondingIndex, event.file.options.path);\n        }\n      }\n    }\n  }\n\n  displayFolderParent(index: number, filePath = '') {\n    const parentName = filePath.split('/').filter((el) => el)[index];\n    const currentFoldersDisplayed = (this.documentList.data.getRows() as ShareDataRow[]) || [];\n\n    const alreadyDisplayedParentFolder = currentFoldersDisplayed.find((row) => row.node.entry.isFolder && row.node.entry.name === parentName);\n\n    if (alreadyDisplayedParentFolder) {\n      return;\n    }\n    this.reload(this.selectedNode);\n  }\n\n  onContentCopied(nodes: NodeEntry[]) {\n    const newNode = nodes.find((node) => node?.entry?.parentId === this.getParentNodeId());\n    if (newNode) {\n      this.reload(this.selectedNode);\n    }\n  }\n\n  // todo: review this approach once 5.2.3 is out\n  private async updateCurrentNode(node: Node) {\n    this.nodePath = null;\n\n    if (node?.path?.elements) {\n      const elements = node.path.elements;\n\n      this.nodePath = elements.map((pathElement) => {\n        return { ...pathElement };\n      });\n\n      if (elements.length > 1) {\n        if (elements[1].name === 'User Homes') {\n          if (!this.isAdmin) {\n            elements.splice(0, 2);\n          }\n        } else if (elements[1].name === 'Sites') {\n          await this.normalizeSitePath(node);\n        }\n      }\n    }\n\n    this.node = node;\n    this.store.dispatch(new SetCurrentFolderAction(node));\n  }\n\n  // todo: review this approach once 5.2.3 is out\n  private async normalizeSitePath(node: Node) {\n    const elements = node.path.elements;\n\n    // remove 'Sites'\n    elements.splice(1, 1);\n\n    if (this.isSiteContainer(node)) {\n      // rename 'documentLibrary' entry to the target site display name\n      // clicking on the breadcrumb entry loads the site content\n      const parentNode = await this.contentApi.getNodeInfo(node.parentId).toPromise();\n      node.name = parentNode.properties['cm:title'] || parentNode.name;\n\n      // remove the site entry\n      elements.splice(1, 1);\n    } else {\n      // remove 'documentLibrary' in the middle of the path\n      const docLib = elements.findIndex((el) => el.name === 'documentLibrary');\n      if (docLib > -1) {\n        const siteFragment = elements[docLib - 1];\n        const siteNode = await this.contentApi.getNodeInfo(siteFragment.id).toPromise();\n\n        // apply Site Name to the parent fragment\n        siteFragment.name = siteNode.properties['cm:title'] || siteNode.name;\n        elements.splice(docLib, 1);\n      }\n    }\n  }\n\n  isSiteContainer(node: Node): boolean {\n    if (node?.aspectNames?.length > 0) {\n      return node.aspectNames.indexOf('st:siteContainer') >= 0;\n    }\n    return false;\n  }\n\n  isRootNode(nodeId: string): boolean {\n    if (this.node?.path?.elements?.length > 0) {\n      return this.node.path.elements[0].id === nodeId;\n    }\n    return false;\n  }\n\n  onFilterSelected(activeFilters: FilterSearch[]) {\n    if (activeFilters.length) {\n      this.showHeader = ShowHeaderMode.Always;\n      this.isFilterHeaderActive = true;\n      this.navigateToFilter(activeFilters);\n    } else {\n      void this.router.navigate(['.'], { relativeTo: this.route });\n      this.isFilterHeaderActive = false;\n      this.showHeader = ShowHeaderMode.Data;\n    }\n  }\n\n  navigateToFilter(activeFilters: FilterSearch[]) {\n    const objectFromMap = {};\n    activeFilters.forEach((filter: FilterSearch) => {\n      let paramValue;\n      if (filter?.value?.from && filter?.value?.to) {\n        paramValue = `${filter.value.from}||${filter.value.to}`;\n      } else {\n        paramValue = filter.value;\n      }\n      objectFromMap[filter.key] = paramValue;\n    });\n\n    void this.router.navigate([], { relativeTo: this.route, queryParams: objectFromMap });\n  }\n\n  onError(error: HttpErrorResponse) {\n    this.isValidPath = false;\n    if (this.router.url.includes('libraries')) {\n      switch (error.status) {\n        case 403:\n          this._errorTranslationKey = 'APP.BROWSE.LIBRARIES.LIBRARY_NO_PERMISSIONS_WARNING';\n          break;\n        case 404:\n          this._errorTranslationKey = 'APP.BROWSE.LIBRARIES.ERRORS.LIBRARY_NOT_FOUND';\n          break;\n        default:\n          this._errorTranslationKey = 'APP.BROWSE.LIBRARIES.ERRORS.LIBRARY_LOADING_ERROR';\n      }\n    }\n  }\n}\n","<aca-page-layout [hasError]=\"!isValidPath\">\n  <div class=\"aca-page-layout-header\">\n    <aca-search-ai-input-container\n      *ngIf=\"searchAiInputState.active; else header\"\n      [agentId]=\"searchAiInputState.selectedAgentId\" />\n    <ng-template #header>\n      <div class=\"aca-header-container\">\n        <adf-breadcrumb\n          [root]=\"title\"\n          [folderNode]=\"node\"\n          [selectedRowItemsCount]=\"selectedRowItemsCount\" [maxItems]=\"isSmallScreen ? 1 : 0\"\n          (navigate)=\"onBreadcrumbNavigate($event)\" />\n        <aca-toolbar [items]=\"actions\" />\n      </div>\n    </ng-template>\n  </div>\n\n  <div class=\"aca-page-layout-error\">\n    <aca-generic-error [text]=\"errorTranslationKey\" />\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\" *ngIf=\"!(showLoader$ | async)\">\n      <adf-upload-drag-area [rootFolderId]=\"node?.id\" [disabled]=\"!canUpload\" (updateFileVersion)=\"onUploadNewVersion($event)\">\n        <adf-document-list\n          #documentList\n          acaDocumentList\n          acaContextActions\n          [selectionMode]=\"'multiple'\"\n          [multiselect]=\"true\"\n          [currentFolderId]=\"node?.id\"\n          [loading]=\"true\"\n          [showHeader]=\"showHeader\"\n          [node]=\"nodeResult\"\n          [allowDropFiles]=\"true\"\n          [displayCheckboxesOnHover]=\"true\"\n          [preselectNodes]=\"selectedNodesState?.nodes\"\n          [navigate]=\"false\"\n          [sorting]=\"['name', 'asc']\"\n          [imageResolver]=\"imageResolver\"\n          [headerFilters]=\"true\"\n          [filterValue]=\"queryParams\"\n          [isDataProvidedExternally]=\"!!queryParams\"\n          [isResizingEnabled]=\"true\"\n          [blurOnResize]=\"false\"\n          [displayDragAndDropHint]=\"canUpload\"\n          (node-dblclick)=\"handleNodeClick($event)\"\n          (name-click)=\"handleNodeClick($event)\"\n          (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n          (filterSelection)=\"onFilterSelected($event)\"\n          (error)=\"onError($event)\"\n        >\n          <data-columns>\n            <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n              <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n                <data-column\n                  [id]=\"column.id\"\n                  [key]=\"column.key\"\n                  [title]=\"column.title\"\n                  [type]=\"column.type\"\n                  [format]=\"column.format\"\n                  [class]=\"column.class\"\n                  [sortable]=\"column.sortable\"\n                  [sortingKey]=\"column.sortingKey || column.key\"\n                  [isHidden]=\"column.isHidden\"\n                  [draggable]=\"column.draggable\"\n                  [resizable]=\"column.resizable\"\n                >\n                  <ng-template let-context>\n                    <adf-dynamic-column [id]=\"column.template\" [context]=\"context\" />\n                  </ng-template>\n                </data-column>\n              </ng-container>\n\n              <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n                <data-column\n                  [id]=\"column.id\"\n                  [key]=\"column.key\"\n                  [title]=\"column.title\"\n                  [type]=\"column.type\"\n                  [format]=\"column.format\"\n                  [class]=\"column.class\"\n                  [sortable]=\"column.sortable\"\n                  [sortingKey]=\"column.sortingKey || column.key\"\n                  [isHidden]=\"column.isHidden\"\n                  [draggable]=\"column.draggable\"\n                  [resizable]=\"column.resizable\"\n                />\n              </ng-container>\n            </ng-container>\n          </data-columns>\n\n          <adf-custom-empty-content-template *ngIf=\"isFilterHeaderActive\">\n            <ng-container>\n              <div class=\"empty-search__block\" aria-live=\"polite\">\n                <p class=\"empty-search__text\">\n                  {{ 'APP.BROWSE.SEARCH.NO_FILTER_RESULTS' | translate }}\n                </p>\n              </div>\n            </ng-container>\n          </adf-custom-empty-content-template>\n        </adf-document-list>\n\n        <adf-pagination acaPagination [target]=\"documentList\" />\n      </adf-upload-drag-area>\n    </div>\n\n    <mat-progress-spinner *ngIf=\"showLoader$ | async\"\n      id=\"adf-document-list-loading\"\n      class=\"adf-document-list-loading-margin\"\n      [color]=\"'primary'\"\n      [mode]=\"'indeterminate'\" />\n\n    <div class=\"aca-sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n      <aca-info-drawer [node]=\"selection.last\" />\n    </div>\n  </div>\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, ViewEncapsulation, inject } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport {\n  ContextActionsDirective,\n  ToolbarComponent,\n  InfoDrawerComponent,\n  PageLayoutComponent,\n  PageComponent,\n  AppHookService\n} from '@alfresco/aca-shared';\nimport { DocumentListDirective } from '../../directives/document-list.directive';\nimport {\n  CustomEmptyContentTemplateDirective,\n  DataColumnComponent,\n  DataColumnListComponent,\n  EmptyContentComponent,\n  PaginationComponent\n} from '@alfresco/adf-core';\nimport { DocumentListComponent } from '@alfresco/adf-content-services';\nimport { DocumentListPresetRef, DynamicColumnComponent } from '@alfresco/adf-extensions';\nimport { NavigateLibraryAction } from '@alfresco/aca-shared/store';\nimport { FavoritePaging, Pagination, SiteEntry, SitePaging } from '@alfresco/js-api';\n\n@Component({\n  selector: 'aca-libraries-base',\n  standalone: true,\n  templateUrl: './libraries-base.component.html',\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    ToolbarComponent,\n    InfoDrawerComponent,\n    PageLayoutComponent,\n    DocumentListDirective,\n    ContextActionsDirective,\n    DocumentListComponent,\n    DataColumnListComponent,\n    DataColumnComponent,\n    DynamicColumnComponent,\n    CustomEmptyContentTemplateDirective,\n    EmptyContentComponent,\n    PaginationComponent\n  ],\n  encapsulation: ViewEncapsulation.None\n})\nexport class LibrariesBaseComponent extends PageComponent {\n  @Input() titleKey: string;\n  @Input() list: SitePaging | FavoritePaging;\n  @Input() isLoading: boolean;\n  @Input() emptyTitleKey: string;\n  @Input() emptySubtitleKey: string;\n  @Input() pagination: Pagination;\n  @Input() currentFolderId: string;\n  @Input() columns: DocumentListPresetRef[];\n  @Input() navigateRoute: string;\n\n  @Output() changePageSize = new EventEmitter<Pagination>();\n  @Output() changePageNumber = new EventEmitter<Pagination>();\n  @Output() nextPage = new EventEmitter<Pagination>();\n  @Output() prevPage = new EventEmitter<Pagination>();\n\n  protected appHookService = inject(AppHookService);\n\n  private navigateTo(node: SiteEntry) {\n    if (node?.entry?.guid) {\n      this.store.dispatch(new NavigateLibraryAction(node.entry, this.navigateRoute));\n    }\n  }\n\n  handleNodeClick(event: Event) {\n    this.navigateTo((event as CustomEvent).detail?.node);\n  }\n}\n","<aca-page-layout>\n  <div class=\"aca-page-layout-header\">\n    <h1 class=\"aca-page-title\">\n      @if (selectedRowItemsCount < 1) {\n        {{ titleKey | translate: { count: selectedRowItemsCount } }}\n      } @else {\n        {{ 'APP.HEADER.SELECTED' | translate: { count: selectedRowItemsCount } }}\n      }\n    </h1>\n    <aca-toolbar [items]=\"actions\" />\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\">\n      <adf-document-list\n        #documentList\n        acaDocumentList\n        acaContextActions\n        [currentFolderId]=\"currentFolderId\"\n        [node]=\"$any(list)\"\n        [loading]=\"isLoading\"\n        [selectionMode]=\"'multiple'\"\n        [multiselect]=\"true\"\n        [navigate]=\"false\"\n        [sorting]=\"['title', 'asc']\"\n        [sortingMode]=\"'client'\"\n        [displayCheckboxesOnHover]=\"true\"\n        [preselectNodes]=\"selectedNodesState?.nodes\"\n        (node-dblclick)=\"handleNodeClick($event)\"\n        [imageResolver]=\"imageResolver\"\n        [isResizingEnabled]=\"true\"\n        [blurOnResize]=\"false\"\n        (name-click)=\"handleNodeClick($event)\"\n      >\n        <adf-custom-empty-content-template>\n          <adf-empty-content\n            icon=\"library_books\"\n            [title]=\"emptyTitleKey | translate\"\n            [subtitle]=\"emptySubtitleKey | translate\"\n          />\n        </adf-custom-empty-content-template>\n\n        <data-columns>\n          @for (column of columns; track trackByColumnId($index, column)) {\n            @if (column.template && !(column.desktopOnly && isSmallScreen)) {\n              <data-column\n                [id]=\"column.id\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [key]=\"column.key\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [isHidden]=\"column.isHidden\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              >\n                <ng-template let-context>\n                  <adf-dynamic-column [id]=\"column.template\" [context]=\"context\" />\n                </ng-template>\n              </data-column>\n            } @else if (!column.template && !(column.desktopOnly && isSmallScreen)) {\n              <data-column\n                [id]=\"column.id\"\n                [key]=\"column.key\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [isHidden]=\"column.isHidden\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              />\n            }\n          }\n        </data-columns>\n      </adf-document-list>\n\n      <adf-pagination\n        [target]=\"documentList\"\n        [pagination]=\"pagination\"\n        (changePageSize)=\"changePageSize.emit($event)\"\n        (changePageNumber)=\"changePageNumber.emit($event)\"\n        (nextPage)=\"nextPage.emit($event)\"\n        (prevPage)=\"prevPage.emit($event)\"\n      />\n    </div>\n\n    @if (infoDrawerOpened$ | async) {\n      <aca-info-drawer class=\"aca-sidebar\" [node]=\"$any(selection?.last)\" />\n    }\n  </div>\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { LibrariesBaseComponent } from '../libraries-base/libraries-base.component';\n\n@Component({\n  selector: 'aca-libraries',\n  standalone: true,\n  templateUrl: './libraries.component.html',\n  imports: [LibrariesBaseComponent],\n  encapsulation: ViewEncapsulation.None\n})\nexport class LibrariesComponent extends LibrariesBaseComponent implements OnInit {\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.subscriptions.push(\n      this.appHookService.libraryDeleted.subscribe(() => this.reload()),\n      this.appHookService.libraryUpdated.subscribe(() => this.reload()),\n      this.appHookService.libraryLeft.subscribe(() => this.reload())\n    );\n\n    this.columns = this.extensions.documentListPresets.libraries || [];\n  }\n}\n","<aca-libraries-base\n  [currentFolderId]=\"'-mysites-'\"\n  [columns]=\"columns\"\n  [titleKey]=\"'APP.BROWSE.LIBRARIES.MENU.MY_LIBRARIES.TITLE'\"\n  [emptyTitleKey]=\"'APP.BROWSE.LIBRARIES.EMPTY_STATE.FILE_LIBRARIES.TITLE'\"\n  [emptySubtitleKey]=\"'APP.BROWSE.LIBRARIES.EMPTY_STATE.FILE_LIBRARIES.TEXT'\"\n/>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ChangeDetectorRef, Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FavoritePaging, Pagination } from '@alfresco/js-api';\nimport { ContentApiService } from '@alfresco/aca-shared';\nimport { UserPreferencesService } from '@alfresco/adf-core';\nimport { DocumentListPresetRef } from '@alfresco/adf-extensions';\nimport { LibrariesBaseComponent } from '../libraries-base/libraries-base.component';\n\n@Component({\n  selector: 'aca-favorite-libraries',\n  standalone: true,\n  templateUrl: './favorite-libraries.component.html',\n  imports: [LibrariesBaseComponent],\n  encapsulation: ViewEncapsulation.None\n})\nexport class FavoriteLibrariesComponent extends LibrariesBaseComponent implements OnInit {\n  pagination: Pagination = new Pagination({\n    skipCount: 0,\n    maxItems: 25,\n    totalItems: 0\n  });\n  isLoading = false;\n  list: FavoritePaging = null;\n  columns: DocumentListPresetRef[] = [];\n\n  constructor(\n    private contentApiService: ContentApiService,\n    private preferences: UserPreferencesService,\n    private changeDetectorRef: ChangeDetectorRef\n  ) {\n    super();\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.getList({ maxItems: this.preferences.paginationSize });\n\n    this.subscriptions.push(\n      this.appHookService.libraryDeleted.subscribe(() => this.reloadList()),\n      this.appHookService.libraryUpdated.subscribe(() => this.reloadList()),\n      this.appHookService.libraryJoined.subscribe(() => this.reloadList()),\n      this.appHookService.libraryLeft.subscribe(() => this.reloadList()),\n      this.appHookService.favoriteLibraryToggle.subscribe(() => this.reloadList())\n    );\n    this.columns = this.extensions.documentListPresets.favoriteLibraries || [];\n  }\n\n  onChangePageSize(pagination: Pagination) {\n    this.preferences.paginationSize = pagination.maxItems;\n    this.getList(pagination);\n  }\n\n  getList(pagination: Pagination) {\n    this.isLoading = true;\n    this.contentApiService.getFavoriteLibraries('-me-', pagination).subscribe(\n      (favoriteLibraries: FavoritePaging) => {\n        this.list = favoriteLibraries;\n        this.pagination = favoriteLibraries.list.pagination;\n        this.isLoading = false;\n        this.changeDetectorRef.detectChanges();\n      },\n      () => {\n        this.list = null;\n        this.pagination = null;\n        this.isLoading = false;\n      }\n    );\n  }\n\n  private reloadList() {\n    this.reload();\n    this.getList(this.pagination);\n  }\n}\n","<aca-libraries-base\n  [list]=\"list\"\n  [isLoading]=\"isLoading\"\n  [pagination]=\"pagination\"\n  [columns]=\"columns\"\n  [navigateRoute]=\"'favorite/libraries'\"\n  [titleKey]=\"'APP.BROWSE.LIBRARIES.MENU.FAVORITE_LIBRARIES.TITLE'\"\n  [emptyTitleKey]=\"'APP.BROWSE.LIBRARIES.EMPTY_STATE.FAVORITE_LIBRARIES.TITLE'\"\n  [emptySubtitleKey]=\"'APP.BROWSE.LIBRARIES.EMPTY_STATE.FAVORITE_LIBRARIES.TEXT'\"\n  (changePageSize)=\"onChangePageSize($event)\"\n  (changePageNumber)=\"getList($event)\"\n  (nextPage)=\"getList($event)\"\n  (prevPage)=\"getList($event)\"\n/>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  ViewEncapsulation,\n  ViewChild,\n  ElementRef,\n  OnInit,\n  inject,\n  DestroyRef,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormControl, FormsModule, ReactiveFormsModule, StatusChangeEvent, TouchedChangeEvent, Validators } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { noWhitespaceValidator, noLeadingTrailingOperatorsValidator } from '@alfresco/aca-shared';\nimport { combineLatest } from 'rxjs';\nimport { filter, startWith } from 'rxjs/operators';\nimport { ActivatedRoute, NavigationStart, Router } from '@angular/router';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, FormsModule, ReactiveFormsModule],\n  selector: 'app-search-input-control',\n  templateUrl: './search-input-control.component.html',\n  styleUrls: ['./search-input-control.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-search-control' }\n})\nexport class SearchInputControlComponent implements OnInit, OnChanges {\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly route = inject(ActivatedRoute);\n  private readonly router = inject(Router);\n\n  /** Type of the input field to render, e.g. \"search\" or \"text\" (default). */\n  @Input()\n  inputType = 'text';\n\n  /**\n   * Indicates whether the search is constrained by libraries.\n   * If true, specific error messaging or validation behavior may be triggered.\n   */\n  @Input()\n  hasLibrariesConstraint = false;\n\n  /** Emitted when the search is submitted pressing ENTER button.\n   * The search term is provided as value of the event.\n   */\n  @Output()\n  // eslint-disable-next-line @angular-eslint/no-output-native\n  submit: EventEmitter<any> = new EventEmitter();\n\n  /** Emitted when the search term is changed. The search term is provided\n   * in the 'value' property of the returned object.  If the term is less\n   * than three characters in length then the term is truncated to an empty\n   * string.\n   */\n  @Output()\n  searchChange: EventEmitter<string> = new EventEmitter();\n\n  /** Emitted when the input control has a validation error. */\n  @Output()\n  validationError = new EventEmitter<string>();\n\n  @ViewChild('searchInput', { static: true })\n  searchInput: ElementRef;\n\n  searchFieldFormControl = new FormControl('', [Validators.required, noWhitespaceValidator(), noLeadingTrailingOperatorsValidator()]);\n\n  get searchTerm(): string {\n    return this.searchFieldFormControl.value.replace('text:', 'TEXT:');\n  }\n\n  set searchTerm(value: string) {\n    this.searchFieldFormControl.setValue(value);\n  }\n\n  ngOnInit() {\n    this.searchFieldFormControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((searchTermValue) => {\n      this.searchFieldFormControl.markAsTouched();\n      this.searchChange.emit(searchTermValue);\n    });\n\n    this.searchFieldFormControl.events.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n      if (event instanceof TouchedChangeEvent || event instanceof StatusChangeEvent) {\n        if (this.searchFieldFormControl.touched) {\n          this.emitValidationError();\n        } else {\n          this.validationError.emit('');\n        }\n      }\n    });\n    combineLatest([\n      this.route.queryParams,\n      this.router.events.pipe(\n        filter((e): e is NavigationStart => e instanceof NavigationStart),\n        startWith(null)\n      )\n    ])\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(([params]) => {\n        if (params['q'] && !this.searchFieldFormControl.value) {\n          setTimeout(() => this.searchFieldFormControl.setValue('*'));\n        }\n      });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['hasLibrariesConstraint'] && !changes['hasLibrariesConstraint'].firstChange) {\n      this.emitValidationError();\n    }\n  }\n\n  searchSubmit() {\n    this.searchFieldFormControl.markAsTouched();\n\n    const trimmedTerm = this.searchTerm?.trim();\n    if (this.searchFieldFormControl.valid && trimmedTerm) {\n      this.submit.emit(trimmedTerm);\n    }\n  }\n\n  clear() {\n    this.searchTerm = '';\n    this.searchChange.emit('');\n  }\n\n  onBlur() {\n    this.searchFieldFormControl.markAsUntouched();\n  }\n\n  isTermTooShort() {\n    return this.searchTerm.trim()?.length < 2;\n  }\n\n  emitValidationError(): void {\n    const errors = this.searchFieldFormControl.errors;\n    if (errors?.whitespace) {\n      this.validationError.emit('SEARCH.INPUT.WHITESPACE');\n    } else if (errors?.operators) {\n      this.validationError.emit('SEARCH.INPUT.OPERATORS');\n    } else if (errors?.required) {\n      this.validationError.emit('SEARCH.INPUT.REQUIRED');\n    } else if (this.hasLibrariesConstraint && this.isTermTooShort()) {\n      this.validationError.emit('SEARCH.INPUT.MIN_LENGTH');\n    } else {\n      this.validationError.emit('');\n    }\n  }\n}\n","<div class=\"app-search-container\">\n  <mat-form-field class=\"app-input-form-field\">\n\n    <button\n      mat-icon-button\n      matPrefix\n      class=\"app-search-button\"\n      (click)=\"searchSubmit()\"\n      (keydown.enter)=\"searchSubmit()\"\n      [title]=\"'SEARCH.BUTTON.TOOLTIP' | translate\"\n    >\n      <mat-icon [attr.aria-label]=\"'SEARCH.BUTTON.ARIA-LABEL' | translate\">search</mat-icon>\n    </button>\n\n    <input\n      matInput\n      #searchInput\n      [attr.aria-label]=\"'SEARCH.INPUT.ARIA-LABEL' | translate\"\n      [type]=\"inputType\"\n      id=\"app-control-input\"\n      [formControl]=\"searchFieldFormControl\"\n      (keydown.enter)=\"searchSubmit()\"\n      (blur)=\"onBlur()\"\n      [placeholder]=\"'SEARCH.INPUT.PLACEHOLDER' | translate\"\n      autocomplete=\"off\"\n    />\n\n    <div matSuffix>\n      <button\n        mat-icon-button\n        (click)=\"clear()\"\n        [attr.aria-label]=\"'COMMON.CLEAR' | translate\"\n        [attr.title]=\"'COMMON.CLEAR' | translate\"\n        class=\"app-search-input-control-clear-button\">\n        <mat-icon *ngIf=\"searchFieldFormControl.value.length\" class=\"app-suffix-icon\">clear</mat-icon>\n      </button>\n    </div>\n  </mat-form-field>\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AlfrescoApiService } from '@alfresco/adf-content-services';\nimport { Injectable } from '@angular/core';\nimport { QueriesApi, SitePaging } from '@alfresco/js-api';\nimport { Subject } from 'rxjs';\n\nexport interface LibrarySearchQuery {\n  term: string;\n  opts: {\n    skipCount: number;\n    maxItems: number;\n  };\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SearchLibrariesQueryBuilderService {\n  _queriesApi: QueriesApi;\n  get queriesApi(): QueriesApi {\n    this._queriesApi = this._queriesApi ?? new QueriesApi(this.alfrescoApiService.getInstance());\n    return this._queriesApi;\n  }\n\n  private _userQuery = '';\n\n  updated: Subject<any> = new Subject();\n  executed: Subject<any> = new Subject();\n  hadError: Subject<any> = new Subject();\n\n  paging: { maxItems?: number; skipCount?: number } = null;\n\n  get userQuery(): string {\n    return this._userQuery;\n  }\n\n  set userQuery(value: string) {\n    this._userQuery = value ? value.trim() : '';\n  }\n\n  constructor(private alfrescoApiService: AlfrescoApiService) {}\n\n  update(): void {\n    const query = this.buildQuery();\n    if (query) {\n      this.updated.next(query);\n    }\n  }\n\n  async execute() {\n    const query = this.buildQuery();\n    if (query) {\n      const data = await this.findLibraries(query);\n      this.executed.next(data);\n    }\n  }\n\n  buildQuery(): LibrarySearchQuery {\n    const query = this.userQuery;\n    if (query?.length > 1) {\n      return {\n        term: query,\n        opts: {\n          skipCount: this.paging?.skipCount,\n          maxItems: this.paging?.maxItems\n        }\n      };\n    }\n    return null;\n  }\n\n  private findLibraries(libraryQuery: LibrarySearchQuery): Promise<SitePaging> {\n    return this.queriesApi.findSites(libraryQuery.term, libraryQuery.opts).catch((err) => {\n      this.hadError.next(err);\n      return { list: { pagination: { totalItems: 0 }, entries: [] } };\n    });\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AppHookService, AppService } from '@alfresco/aca-shared';\nimport { AppStore, SearchByTermAction, SearchOptionIds, SearchOptionModel } from '@alfresco/aca-shared/store';\nimport { SearchQueryBuilderService } from '@alfresco/adf-content-services';\nimport { AppConfigService, NotificationService } from '@alfresco/adf-core';\nimport { Component, DestroyRef, inject, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport {\n  ActivatedRoute,\n  NavigationSkipped,\n  NavigationStart,\n  Params,\n  PRIMARY_OUTLET,\n  Router,\n  UrlSegment,\n  UrlSegmentGroup,\n  UrlTree\n} from '@angular/router';\nimport { Store } from '@ngrx/store';\nimport { SearchInputControlComponent } from '../search-input-control/search-input-control.component';\nimport { SearchNavigationService } from '../search-navigation.service';\nimport { SearchLibrariesQueryBuilderService } from '../search-libraries-results/search-libraries-query-builder.service';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { FormsModule } from '@angular/forms';\nimport { extractSearchedWordFromEncodedQuery } from '../../../utils/aca-search-utils';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs/internal/observable/merge';\nimport { filter, map, startWith, withLatestFrom } from 'rxjs';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    MatMenuModule,\n    MatButtonModule,\n    MatIconModule,\n    MatFormFieldModule,\n    MatInputModule,\n    A11yModule,\n    MatCheckboxModule,\n    FormsModule,\n    SearchInputControlComponent\n  ],\n  selector: 'aca-search-input',\n  templateUrl: './search-input.component.html',\n  styleUrls: ['./search-input.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'aca-search-input' }\n})\nexport class SearchInputComponent implements OnInit, OnDestroy {\n  private readonly notificationService = inject(NotificationService);\n\n  has400LibraryError = false;\n  hasLibrariesConstraint = false;\n  searchOnChange: boolean;\n  isTrimmedWordEmpty = false;\n  error = '';\n\n  searchedWord: string = null;\n  searchOptions: Array<SearchOptionModel> = [\n    {\n      id: SearchOptionIds.Files,\n      key: 'SEARCH.INPUT.FILES',\n      value: false,\n      shouldDisable: this.isLibrariesChecked.bind(this)\n    },\n    {\n      id: SearchOptionIds.Folders,\n      key: 'SEARCH.INPUT.FOLDERS',\n      value: false,\n      shouldDisable: this.isLibrariesChecked.bind(this)\n    },\n    {\n      id: SearchOptionIds.Libraries,\n      key: 'SEARCH.INPUT.LIBRARIES',\n      value: this.onLibrariesSearchResults,\n      shouldDisable: this.isContentChecked.bind(this)\n    }\n  ];\n\n  @ViewChild('searchInputControl', { static: true })\n  searchInputControl: SearchInputControlComponent;\n\n  @ViewChild(MatMenuTrigger, { static: true })\n  trigger: MatMenuTrigger;\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private readonly queryBuilder: SearchQueryBuilderService,\n    private readonly queryLibrariesBuilder: SearchLibrariesQueryBuilderService,\n    private readonly config: AppConfigService,\n    private readonly router: Router,\n    private readonly route: ActivatedRoute,\n    private readonly store: Store<AppStore>,\n    private readonly appHookService: AppHookService,\n    private readonly appService: AppService,\n    public readonly searchInputService: SearchNavigationService\n  ) {\n    this.searchOnChange = this.config.get<boolean>('search.aca:triggeredOnChange', true);\n  }\n\n  ngOnInit() {\n    this.showInputValue();\n\n    merge(\n      this.route.queryParams,\n      this.router.events.pipe(\n        filter((e) => e instanceof NavigationSkipped),\n        withLatestFrom(this.route.queryParams),\n        map(([, params]) => params)\n      )\n    )\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((params: Params) => {\n        const encodedQuery = params['q'];\n        if (encodedQuery && this.searchInputControl) {\n          this.searchedWord = extractSearchedWordFromEncodedQuery(encodedQuery);\n          this.searchInputControl.searchTerm = this.searchedWord;\n        }\n      });\n\n    this.queryBuilder.configUpdated\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        withLatestFrom(\n          this.router.events.pipe(\n            filter((event): event is NavigationStart => event instanceof NavigationStart),\n            startWith(null)\n          )\n        )\n      )\n      .subscribe(([, navigationStartEvent]) => {\n        const hasQueryParams = navigationStartEvent?.url.includes('?');\n        if (this.searchedWord && hasQueryParams) {\n          this.searchByOption();\n        }\n      });\n\n    this.appHookService.library400Error.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.has400LibraryError = true;\n      this.hasLibrariesConstraint = this.evaluateLibrariesConstraint();\n    });\n  }\n\n  exitSearch() {\n    this.searchInputService.navigateBack();\n  }\n\n  showInputValue() {\n    this.appService.setAppNavbarMode('collapsed');\n    this.has400LibraryError = false;\n    this.searchedWord = this.getUrlSearchTerm();\n    this.hasLibrariesConstraint = this.evaluateLibrariesConstraint();\n\n    if (this.searchInputControl) {\n      this.searchInputControl.searchTerm = this.searchedWord;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.appService.setAppNavbarMode('expanded');\n    this.removeContentFilters();\n  }\n\n  onMenuOpened() {\n    if (this.searchInputControl) {\n      this.searchInputControl.searchInput?.nativeElement?.focus();\n    }\n  }\n\n  /**\n   * Called when the user submits the search, e.g. hits enter or clicks submit\n   *\n   * @param event Parameters relating to the search\n   */\n  onSearchSubmit(event: any) {\n    const searchTerm = event.target ? (event.target as HTMLInputElement).value : event;\n    const trimmedTerm = searchTerm.trim();\n\n    if (trimmedTerm) {\n      this.searchedWord = trimmedTerm;\n      if (this.isLibrariesChecked() && this.searchInputControl.isTermTooShort()) {\n        return;\n      } else {\n        this.searchByOption();\n      }\n    } else {\n      this.notificationService.showError('APP.BROWSE.SEARCH.EMPTY_SEARCH');\n    }\n\n    setTimeout(() => {\n      this.trigger?.closeMenu();\n    });\n  }\n\n  onSearchChange(searchTerm: string) {\n    if (!this.searchOnChange) {\n      return;\n    }\n\n    this.has400LibraryError = false;\n    this.searchedWord = searchTerm;\n    this.hasLibrariesConstraint = this.evaluateLibrariesConstraint();\n  }\n\n  searchByOption() {\n    this.syncInputValues();\n    this.has400LibraryError = false;\n\n    this.searchInputControl.emitValidationError();\n\n    if (!this.searchedWord.trim()) {\n      return;\n    }\n\n    if (this.isLibrariesChecked()) {\n      this.hasLibrariesConstraint = this.evaluateLibrariesConstraint();\n\n      if (this.hasLibrariesConstraint) {\n        return;\n      }\n      if (this.onLibrariesSearchResults && this.isSameSearchTerm()) {\n        this.queryLibrariesBuilder.update();\n      } else if (this.searchedWord) {\n        this.store.dispatch(new SearchByTermAction(this.searchedWord, this.searchOptions));\n      }\n    } else {\n      if (this.isFoldersChecked() && !this.isFilesChecked()) {\n        this.filterContent(SearchOptionIds.Folders);\n      } else if (this.isFilesChecked() && !this.isFoldersChecked()) {\n        this.filterContent(SearchOptionIds.Files);\n      } else {\n        this.removeContentFilters();\n      }\n\n      if (this.onSearchResults && this.isSameSearchTerm()) {\n        this.queryBuilder.update();\n      } else if (this.searchedWord) {\n        this.store.dispatch(new SearchByTermAction(this.searchedWord, this.searchOptions));\n      }\n    }\n  }\n\n  get onLibrariesSearchResults() {\n    return this.router?.url.indexOf('/search-libraries') === 0;\n  }\n\n  get onSearchResults() {\n    return !this.onLibrariesSearchResults && this.router?.url.indexOf('/search') === 0;\n  }\n\n  isFilesChecked(): boolean {\n    return this.isOptionChecked(SearchOptionIds.Files);\n  }\n\n  isFoldersChecked(): boolean {\n    return this.isOptionChecked(SearchOptionIds.Folders);\n  }\n\n  isLibrariesChecked(): boolean {\n    return this.isOptionChecked(SearchOptionIds.Libraries);\n  }\n\n  isOptionChecked(optionId: string): boolean {\n    const libItem = this.searchOptions.find((item) => item.id === optionId);\n    return !!libItem && libItem.value;\n  }\n\n  isContentChecked(): boolean {\n    return this.isFilesChecked() || this.isFoldersChecked();\n  }\n\n  evaluateLibrariesConstraint(): boolean {\n    if (this.isLibrariesChecked()) {\n      return this.has400LibraryError || this.searchInputControl.isTermTooShort();\n    }\n    return false;\n  }\n\n  filterContent(option: SearchOptionIds.Folders | SearchOptionIds.Files) {\n    const oppositeOption = option === SearchOptionIds.Folders ? SearchOptionIds.Files : SearchOptionIds.Folders;\n\n    this.queryBuilder.addFilterQuery(`+TYPE:'cm:${option}'`);\n    this.queryBuilder.removeFilterQuery(`+TYPE:'cm:${oppositeOption}'`);\n  }\n\n  removeContentFilters() {\n    this.queryBuilder.removeFilterQuery(`+TYPE:'cm:${SearchOptionIds.Files}'`);\n    this.queryBuilder.removeFilterQuery(`+TYPE:'cm:${SearchOptionIds.Folders}'`);\n  }\n\n  syncInputValues() {\n    if (this.searchInputControl.searchTerm !== this.searchedWord) {\n      if (this.searchInputControl.searchTerm) {\n        this.searchedWord = this.searchInputControl.searchTerm;\n      } else {\n        this.searchInputControl.searchTerm = this.searchedWord;\n      }\n    }\n  }\n\n  getUrlSearchTerm(): string {\n    let searchTerm = '';\n    if (this.onSearchResults || this.onLibrariesSearchResults) {\n      const urlTree: UrlTree = this.router.parseUrl(this.router.url);\n      const urlSegmentGroup: UrlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET];\n\n      if (urlSegmentGroup) {\n        const urlSegments: UrlSegment[] = urlSegmentGroup.segments;\n        searchTerm = extractSearchedWordFromEncodedQuery(urlSegments[0].parameters['q']);\n      }\n    }\n\n    return searchTerm;\n  }\n\n  isSameSearchTerm(): boolean {\n    const urlSearchTerm = this.getUrlSearchTerm();\n    return this.searchedWord === urlSearchTerm;\n  }\n}\n","<div class=\"app-search-container\"\n  role=\"search\"\n  [matMenuTriggerFor]=\"searchOptionsMenu\"\n  (menuOpened)=\"onMenuOpened()\"\n  (menuClosed)=\"syncInputValues()\"\n>\n  <mat-form-field class=\"app-input-form-field\">\n    <button class=\"aca-search-input--search-button\" mat-icon-button matPrefix (click)=\"searchByOption()\" [title]=\"'SEARCH.BUTTON.TOOLTIP' | translate\">\n      <mat-icon [attr.aria-label]=\"'SEARCH.BUTTON.ARIA-LABEL' | translate\">search</mat-icon>\n    </button>\n\n    <input\n      class=\"app-search-input\"\n      matInput\n      [attr.aria-label]=\"'SEARCH.INPUT.ARIA-LABEL' | translate\"\n      [type]=\"'text'\"\n      [readonly]=\"true\"\n      [value]=\"searchedWord\"\n      [placeholder]=\"'SEARCH.INPUT.PLACEHOLDER' | translate\"\n    />\n\n    <div matSuffix>\n      <mat-icon class=\"app-suffix-icon\">arrow_drop_down</mat-icon>\n\n      <button\n        class=\"aca-search-input--close-button\"\n        mat-icon-button\n        [attr.aria-label]=\"'SEARCH.CLOSE_BUTTON.ARIA_LABEL' | translate\"\n        [attr.title]=\"'SEARCH.CLOSE_BUTTON.ARIA_LABEL' | translate\"\n        (click)=\"exitSearch()\">\n        <mat-icon class=\"app-suffix-icon\">close</mat-icon>\n      </button>\n    </div>\n  </mat-form-field>\n</div>\n\n<mat-menu #searchOptionsMenu=\"matMenu\" [overlapTrigger]=\"true\" class=\"app-search-options-menu\">\n  <div (keydown.tab)=\"$event.stopPropagation()\" (keydown.shift.tab)=\"$event.stopPropagation()\" tabindex=0>\n    <div cdkTrapFocus>\n      <app-search-input-control\n        #searchInputControl\n        (click)=\"$event.stopPropagation()\"\n        (submit)=\"onSearchSubmit($event)\"\n        (searchChange)=\"onSearchChange($event)\"\n        (validationError)=\"error = $event\"\n        [hasLibrariesConstraint]=\"hasLibrariesConstraint\"\n      />\n      <mat-error *ngIf=\"error\" class=\"app-search-error\" role=\"alert\" aria-live=\"assertive\">\n        {{ error | translate }}\n      </mat-error>\n      <div id=\"search-options\" class=\"app-search-options\">\n        <mat-checkbox *ngFor=\"let option of searchOptions\"\n          id=\"{{ option.id }}\"\n          [(ngModel)]=\"option.value\"\n          [disabled]=\"option.shouldDisable()\"\n          (change)=\"searchByOption()\"\n          (keyup.enter)=\"$event.stopPropagation()\"\n          (click)=\"$event.stopPropagation()\"\n        >\n          {{ option.key | translate }}\n        </mat-checkbox>\n      </div>\n    </div>\n  </div>\n</mat-menu>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, inject, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { NgIf } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n  imports: [NgIf, MatIconModule],\n  selector: 'aca-custom-thumbnail-column',\n  templateUrl: './thumbnail-column.component.html',\n  encapsulation: ViewEncapsulation.None\n})\nexport class ThumbnailColumnComponent implements OnChanges {\n  private translation = inject(TranslationService);\n\n  @Input()\n  context: any;\n\n  public thumbnailUrl?: string;\n  public tooltip?: string;\n  public isIcon = false;\n\n  get isSelected(): boolean {\n    return !!this.context?.row?.isSelected;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.context) {\n      const context = changes.context.currentValue;\n\n      if (context) {\n        const icon = this.getThumbnail(context);\n        if (icon?.startsWith('material-icons://')) {\n          this.isIcon = true;\n          this.thumbnailUrl = icon.replace('material-icons://', '');\n        } else {\n          this.isIcon = false;\n          this.thumbnailUrl = icon;\n        }\n        this.tooltip = this.getToolTip(context);\n      } else {\n        this.thumbnailUrl = null;\n        this.tooltip = null;\n      }\n    }\n  }\n\n  getThumbnail({ data, row, col }): string {\n    return data.getValue(row, col);\n  }\n\n  getToolTip({ row }): string {\n    const displayName = row.node?.entry?.properties?.['cm:lockOwner']?.displayName;\n    return displayName ? `${this.translation.instant('APP.LOCKED_BY')} ${displayName}` : '';\n  }\n}\n","<mat-icon class=\"adf-datatable-selected\" *ngIf=\"isSelected\" svgIcon=\"selected\" />\n<ng-container *ngIf=\"!isSelected\">\n  <ng-container *ngIf=\"isIcon; else image\">\n    <mat-icon>{{thumbnailUrl}}</mat-icon>\n  </ng-container>\n  <ng-template #image>\n    <img [src]=\"thumbnailUrl\" [alt]=\"tooltip\" [title]=\"tooltip\" />\n  </ng-template>\n</ng-container>\n\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SearchQueryBuilderService } from '@alfresco/adf-content-services';\nimport { SearchSortingDefinition } from '@alfresco/adf-content-services/lib/search/models/search-sorting-definition.interface';\nimport { Component, EventEmitter, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatMenuModule, MatIconModule, MatButtonModule],\n  selector: 'aca-search-action-menu',\n  templateUrl: './search-action-menu.component.html',\n  encapsulation: ViewEncapsulation.None\n})\nexport class SearchActionMenuComponent implements OnInit {\n  @Output()\n  sortingSelected: EventEmitter<SearchSortingDefinition> = new EventEmitter();\n\n  options: SearchSortingDefinition[] = [];\n\n  constructor(private queryBuilder: SearchQueryBuilderService) {}\n\n  ngOnInit(): void {\n    this.options = this.queryBuilder.getSortingOptions();\n  }\n\n  onAscSortingClicked(option: SearchSortingDefinition) {\n    option.ascending = true;\n    this.sortingSelected.emit(option);\n  }\n\n  onDescSortingClicked(option: SearchSortingDefinition) {\n    option.ascending = false;\n    this.sortingSelected.emit(option);\n  }\n}\n","<button mat-icon-button [matMenuTriggerFor]=\"dataSorting\" id=\"aca-button-action-menu\" aria-label=\"Search action menu\">\n  <mat-icon>more_vert</mat-icon>\n</button>\n\n<mat-menu #dataSorting=\"matMenu\">\n  <button mat-menu-item [matMenuTriggerFor]=\"sorting\" id=\"aca-button-sorting-menu\">{{ 'SEARCH.SORT.SORTING_OPTION' | translate }}</button>\n</mat-menu>\n\n<mat-menu #sorting=\"matMenu\">\n  <ng-template matMenuContent>\n    <button\n      mat-menu-item\n      *ngFor=\"let option of options\"\n      [id]=\"option.key + '-sorting-option'\"\n      [matMenuTriggerFor]=\"direction\"\n      [matMenuTriggerData]=\"{ option: option }\"\n    >\n      {{ option.label | translate }}\n    </button>\n  </ng-template>\n</mat-menu>\n\n<mat-menu #direction=\"matMenu\">\n  <ng-template matMenuContent let-option=\"option\">\n    <button mat-menu-item [id]=\"option.key + '-sorting-option-asc'\" (click)=\"onAscSortingClicked(option)\">\n      {{ 'SEARCH.SORT.ASCENDING' | translate }}\n    </button>\n    <button mat-menu-item [id]=\"option.key + '-sorting-option-desc'\" (click)=\"onDescSortingClicked(option)\">\n      {{ 'SEARCH.SORT.DESCENDING' | translate }}\n    </button>\n  </ng-template>\n</mat-menu>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ContentActionRef } from '@alfresco/adf-extensions';\nimport { AppStore, getSearchItemsTotalCount } from '@alfresco/aca-shared/store';\nimport { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { combineLatest, Observable } from 'rxjs';\nimport { IconComponent, TranslationService } from '@alfresco/adf-core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { switchMap } from 'rxjs/operators';\nimport { AppExtensionService } from '@alfresco/aca-shared';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  selector: 'aca-bulk-actions-dropdown',\n  templateUrl: './bulk-actions-dropdown.component.html',\n  styleUrls: ['./bulk-actions-dropdown.component.scss'],\n  imports: [CommonModule, TranslatePipe, MatSelectModule, IconComponent, ReactiveFormsModule],\n  encapsulation: ViewEncapsulation.None\n})\nexport class BulkActionsDropdownComponent implements OnInit {\n  @Input() items: ContentActionRef[];\n\n  placeholder: string;\n  tooltip: string;\n  bulkSelectControl = new FormControl();\n\n  private readonly store = inject<Store<AppStore>>(Store);\n  private readonly translationService = inject(TranslationService);\n  private readonly extensions = inject(AppExtensionService);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly totalItems$: Observable<number> = this.store.select(getSearchItemsTotalCount);\n\n  ngOnInit() {\n    this.totalItems$\n      .pipe(\n        switchMap((totalItems) => {\n          if (totalItems > 0) {\n            this.bulkSelectControl.enable();\n\n            return combineLatest([\n              this.translationService.get('SEARCH.BULK_ACTIONS_DROPDOWN.TITLE', { count: totalItems }),\n              this.translationService.get('SEARCH.BULK_ACTIONS_DROPDOWN.TITLE', { count: totalItems })\n            ]);\n          } else {\n            this.bulkSelectControl.disable();\n\n            return combineLatest([\n              this.translationService.get('SEARCH.BULK_ACTIONS_DROPDOWN.BULK_NOT_AVAILABLE'),\n              this.translationService.get('SEARCH.BULK_ACTIONS_DROPDOWN.BULK_NOT_AVAILABLE_TOOLTIP')\n            ]);\n          }\n        }),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(([placeholder, title]) => {\n        this.tooltip = title;\n        this.placeholder = placeholder;\n      });\n\n    this.extensions.bulkActionExecuted$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.bulkSelectControl.setValue(null);\n    });\n  }\n\n  runAction(actionOption: ContentActionRef) {\n    this.extensions.runActionById(actionOption.actions.click, {\n      focusedElementOnCloseSelector: '.adf-context-menu-source'\n    });\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n    if (event.key === 'Tab') {\n      this.bulkSelectControl.setValue(null);\n    }\n    if (event.key === 'Enter' && this.bulkSelectControl.value) {\n      this.runAction(this.bulkSelectControl.value);\n    }\n  }\n}\n","<mat-form-field\n  *ngIf=\"items?.length\"\n  class=\"aca-bulk-actions-form-field\"\n  data-automation-id=\"aca-bulk-actions-form-field\"\n>\n  <mat-label>{{ 'SEARCH.BULK_ACTIONS_DROPDOWN.LABEL' | translate }}</mat-label>\n  <mat-select\n    [formControl]=\"bulkSelectControl\"\n    [placeholder]=\"placeholder\"\n    panelClass=\"aca-bulk-actions-select\"\n    disableOptionCentering\n    data-automation-id=\"aca-bulk-actions-dropdown\"\n    (keydown)=\"onKeyDown($event)\"\n  >\n    <mat-select-trigger>\n      <div class=\"aca-bulk-actions-option-content\">\n        <adf-icon\n          *ngIf=\"bulkSelectControl.value?.icon\"\n          [title]=\"bulkSelectControl.value?.title | translate\"\n          [value]=\"bulkSelectControl.value?.icon\"\n          class=\"aca-bulk-actions-icon\"\n          aria-hidden=\"true\"\n          [attr.data-automation-id]=\"'aca-bulk-action-icon-' + bulkSelectControl.value?.id\"\n        />\n        {{ bulkSelectControl.value?.title | translate }}\n      </div>\n    </mat-select-trigger>\n\n    <mat-option\n      *ngFor=\"let option of items\"\n      [value]=\"option\"\n      [title]=\"option.tooltip | translate\"\n      [attr.data-automation-id]=\"option.id\"\n      (keyup.enter)=\"runAction(option)\"\n      (click)=\"runAction(option)\"\n    >\n      <div class=\"aca-bulk-actions-option-content\">\n        <adf-icon\n          *ngIf=\"option.icon\"\n          [title]=\"option.title | translate\"\n          [value]=\"option.icon\"\n          class=\"aca-bulk-actions-icon\"\n          aria-hidden=\"true\"\n          [attr.data-automation-id]=\"'aca-bulk-action-icon-' + option.id\"\n        />\n        {{ option.title | translate }}\n      </div>\n    </mat-option>\n  </mat-select>\n</mat-form-field>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AppExtensionService } from '@alfresco/aca-shared';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { AppStore, getRepositoryStatus } from '@alfresco/aca-shared/store';\nimport { Store } from '@ngrx/store';\nimport { filter, map, Observable } from 'rxjs';\n\n@Pipe({\n  name: 'isFeatureSupportedInCurrentAcs'\n})\nexport class IsFeatureSupportedInCurrentAcsPipe implements PipeTransform {\n  constructor(\n    private readonly appExtensionsService: AppExtensionService,\n    private readonly store: Store<AppStore>\n  ) {}\n\n  transform(evaluatorId: string): Observable<boolean> {\n    return this.store.select(getRepositoryStatus).pipe(\n      filter((repoStatus) => 'version' in repoStatus),\n      map(() => this.appExtensionsService.isFeatureSupported(evaluatorId))\n    );\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, switchMap, take } from 'rxjs';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { SavedSearch, SavedSearchesLegacyService, SavedSearchesService, SavedSearchStrategy } from '@alfresco/adf-content-services';\nimport { IsFeatureSupportedInCurrentAcsPipe } from '../pipes/is-feature-supported.pipe';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SavedSearchesContextService implements SavedSearchStrategy {\n  currentContextSavedSearch: SavedSearch;\n\n  private readonly strategy$ = new ReplaySubject<SavedSearchStrategy>(1);\n\n  constructor(\n    private readonly legacyService: SavedSearchesLegacyService,\n    private readonly modernService: SavedSearchesService,\n    isFeatureSupported: IsFeatureSupportedInCurrentAcsPipe\n  ) {\n    isFeatureSupported\n      .transform('isPreferencesApiAvailable')\n      .pipe(takeUntilDestroyed())\n      .subscribe((isSupported) => {\n        const strategy = isSupported ? this.modernService : this.legacyService;\n        this.strategy$.next(strategy);\n      });\n  }\n\n  get savedSearches$(): Observable<SavedSearch[]> {\n    return this.strategy$.pipe(switchMap((strategy) => strategy.savedSearches$));\n  }\n\n  init(): void {\n    this.executeOnStrategyVoid((strategy) => strategy.init());\n  }\n\n  getSavedSearches(): Observable<SavedSearch[]> {\n    return this.executeOnStrategy((strategy) => strategy.getSavedSearches());\n  }\n\n  saveSearch(newSaveSearch: Pick<SavedSearch, 'name' | 'description' | 'encodedUrl'>): Observable<NodeEntry> {\n    return this.executeOnStrategy((strategy) => strategy.saveSearch(newSaveSearch));\n  }\n\n  editSavedSearch(updatedSavedSearch: SavedSearch): Observable<NodeEntry> {\n    return this.executeOnStrategy((strategy) => strategy.editSavedSearch(updatedSavedSearch));\n  }\n\n  deleteSavedSearch(deletedSavedSearch: SavedSearch): Observable<NodeEntry> {\n    return this.executeOnStrategy((strategy) => strategy.deleteSavedSearch(deletedSavedSearch));\n  }\n\n  changeOrder(previousIndex: number, currentIndex: number): void {\n    this.executeOnStrategyVoid((strategy) => strategy.changeOrder(previousIndex, currentIndex));\n  }\n\n  private executeOnStrategy<T>(action: (strategy: SavedSearchStrategy) => Observable<T>): Observable<T> {\n    return this.strategy$.pipe(take(1), switchMap(action));\n  }\n\n  private executeOnStrategyVoid(action: (strategy: SavedSearchStrategy) => void): void {\n    this.strategy$.pipe(take(1)).subscribe(action);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Injectable } from '@angular/core';\nimport { AbstractControl, AsyncValidator, ValidationErrors } from '@angular/forms';\nimport { catchError, map, Observable, of } from 'rxjs';\nimport { SavedSearchesContextService } from '../../../../services/saved-searches-context.service';\n\n@Injectable({ providedIn: 'root' })\nexport class UniqueSearchNameValidator implements AsyncValidator {\n  constructor(private readonly savedSearchesService: SavedSearchesContextService) {}\n\n  validate(control: AbstractControl): Observable<ValidationErrors | null> {\n    return this.savedSearchesService.getSavedSearches().pipe(\n      map((searches) =>\n        searches.some((search) => search.name === control.value && control.dirty)\n          ? { message: 'APP.BROWSE.SEARCH.SAVE_SEARCH.SEARCH_NAME_NOT_UNIQUE_ERROR' }\n          : null\n      ),\n      catchError(() => of(null))\n    );\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { NotificationService } from '@alfresco/adf-core';\nimport { forbidOnlySpaces } from '@alfresco/adf-content-services';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { take } from 'rxjs/operators';\nimport { UniqueSearchNameValidator } from './unique-search-name-validator';\nimport { SavedSearchForm } from './saved-search-form.interface';\nimport { SavedSearchesContextService } from '../../../../services/saved-searches-context.service';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    MatMenuModule,\n    MatButtonModule,\n    MatIconModule,\n    MatFormFieldModule,\n    MatInputModule,\n    A11yModule,\n    MatCheckboxModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatDialogModule\n  ],\n  selector: 'aca-save-search-dialog',\n  templateUrl: './save-search-dialog.component.html',\n  styleUrls: ['./save-search-dialog.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'aca-save-search-dialog' }\n})\nexport class SaveSearchDialogComponent {\n  form: FormGroup<SavedSearchForm>;\n  disableSubmitButton = false;\n\n  constructor(\n    private readonly dialog: MatDialogRef<SaveSearchDialogComponent>,\n    private readonly notificationService: NotificationService,\n    private readonly savedSearchesService: SavedSearchesContextService,\n    private readonly uniqueSearchNameValidator: UniqueSearchNameValidator,\n    @Inject(MAT_DIALOG_DATA) private readonly data: { searchUrl: string }\n  ) {\n    this.form = new FormGroup({\n      name: new FormControl('', {\n        validators: [Validators.required, forbidOnlySpaces],\n        asyncValidators: [this.uniqueSearchNameValidator.validate.bind(this.uniqueSearchNameValidator)],\n        updateOn: 'change'\n      }),\n      description: new FormControl('')\n    });\n  }\n\n  submit() {\n    if (this.form.invalid || this.disableSubmitButton) {\n      return;\n    }\n    this.disableSubmitButton = true;\n    const formValue = this.form.value;\n    const saveSearch = { name: formValue.name, description: formValue.description, encodedUrl: encodeURIComponent(this.data.searchUrl) };\n    this.savedSearchesService\n      .saveSearch(saveSearch)\n      .pipe(take(1))\n      .subscribe({\n        next: () => {\n          this.dialog.close(true);\n          this.notificationService.showInfo('APP.BROWSE.SEARCH.SAVE_SEARCH.SAVE_SUCCESS');\n          this.disableSubmitButton = false;\n        },\n        error: () => {\n          this.notificationService.showError('APP.BROWSE.SEARCH.SAVE_SEARCH.SAVE_ERROR');\n          this.disableSubmitButton = false;\n        }\n      });\n  }\n}\n","<div class=\"aca-save-search-dialog__header\">\n    <h2\n      id=\"aca-save-search-dialog-title\"\n      class=\"aca-save-search-dialog__title\">\n      {{\"APP.BROWSE.SEARCH.SAVE_SEARCH.MODAL_HEADER\" | translate}}\n    </h2>\n    <button\n      mat-icon-button\n      mat-dialog-close\n      [attr.aria-label]=\"'CLOSE' | translate | titlecase\"\n      [attr.title]=\"'CLOSE' | translate | titlecase\">\n      <mat-icon>close</mat-icon>\n    </button>\n</div>\n\n\n<mat-dialog-content>\n  <form [formGroup]=\"form\" (submit)=\"submit()\">\n    <mat-form-field class=\"aca-save-search-dialog__form-field\">\n      <mat-label>{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.NAME_LABEL' | translate }}</mat-label>\n      <input\n        id=\"aca-save-search-dialog-name-input\"\n        [attr.aria-label]=\"'APP.BROWSE.SEARCH.SAVE_SEARCH.NAME_LABEL' | translate\"\n        matInput\n        required\n        [formControlName]=\"'name'\"\n      />\n\n      <mat-error *ngIf=\"form.controls['name'].touched\">\n                <span *ngIf=\"form.controls['name'].errors?.required\">\n                    {{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.NAME_REQUIRED_ERROR' | translate }}\n                </span>\n                <span *ngIf=\"!form.controls['name'].errors?.required && form.controls['name'].errors?.message\">\n                    {{ form.controls['name'].errors?.message | translate : { name: form.controls.name.value } }}\n                </span>\n      </mat-error>\n    </mat-form-field>\n\n    <mat-form-field class=\"aca-save-search-dialog__form-field\">\n      <mat-label>{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.DESCRIPTION_LABEL' | translate }}</mat-label>\n      <textarea\n        id=\"aca-save-search-dialog-description-input\"\n        matInput\n        [attr.aria-label]=\"'APP.BROWSE.SEARCH.SAVE_SEARCH.DESCRIPTION_LABEL' | translate\"\n        rows=\"4\"\n        [formControlName]=\"'description'\"></textarea>\n    </mat-form-field>\n  </form>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n  <button\n    mat-button\n    id=\"aca-save-search-dialog-cancel-button\"\n    mat-dialog-close>\n    {{ 'CANCEL' | titlecase | translate }}\n  </button>\n\n  <button id=\"aca-save-search-dialog-save-button\"\n          mat-flat-button\n          color=\"primary\"\n          (click)=\"submit()\"\n          [disabled]=\"!form.valid || disableSubmitButton\">\n    {{ 'SAVE' | titlecase | translate}}\n  </button>\n</mat-dialog-actions>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { DestroyRef, Directive, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SaveSearchDialogComponent } from '../dialog/save-search-dialog.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { OverlayContainer } from '@angular/cdk/overlay';\nimport { SaveSearchDirectiveDialogData } from '../dialog/save-search-directive-dialog-data';\n\n@Directive({\n  selector: '[acaSaveSearch]',\n  standalone: true\n})\nexport class SaveSearchDirective {\n  /** Encoded search query */\n  @Input()\n  acaSaveSearchQuery: string;\n\n  /** Outputs a true value when search was successfully saved */\n  @Output()\n  searchSaved = new EventEmitter<boolean>();\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly dialogRef = inject(MatDialog);\n  private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n  constructor(private readonly overlayContainer: OverlayContainer) {}\n\n  @HostListener('click', ['$event'])\n  onClick(event: MouseEvent) {\n    event.preventDefault();\n    this.elementRef.nativeElement.focus();\n    this.openDialog();\n  }\n\n  private openDialog(): void {\n    this.overlayContainer.getContainerElement().setAttribute('role', 'dialog');\n    const dialog = this.dialogRef.open(SaveSearchDialogComponent, {\n      ...this.getDialogConfig(),\n      restoreFocus: true,\n      ariaLabelledBy: 'aca-save-search-dialog-title'\n    });\n    dialog\n      .afterClosed()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((value: boolean) => {\n        if (value) {\n          this.searchSaved.emit(value);\n        }\n      });\n  }\n\n  private getDialogConfig(): { data: SaveSearchDirectiveDialogData } {\n    return {\n      data: { searchUrl: this.acaSaveSearchQuery }\n    };\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ChangeDetectorRef, Component, inject, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NodeEntry, Pagination, ResultSetPaging } from '@alfresco/js-api';\nimport { ActivatedRoute, NavigationStart } from '@angular/router';\nimport {\n  AlfrescoViewerComponent,\n  DocumentListComponent,\n  ResetSearchDirective,\n  SavedSearch,\n  SearchConfiguration,\n  SearchFilterChipsComponent,\n  SearchFormComponent,\n  SearchQueryBuilderService,\n  TagService\n} from '@alfresco/adf-content-services';\nimport {\n  infoDrawerPreview,\n  NavigateToFolder,\n  SetInfoDrawerPreviewStateAction,\n  SetInfoDrawerStateAction,\n  SetSearchItemsTotalCountAction,\n  ShowInfoDrawerPreviewAction\n} from '@alfresco/aca-shared/store';\nimport {\n  CustomEmptyContentTemplateDirective,\n  DataColumnComponent,\n  DataColumnListComponent,\n  DateColumnHeaderComponent,\n  NotificationService,\n  PaginationComponent,\n  TranslationService,\n  ViewerToolbarComponent\n} from '@alfresco/adf-core';\nimport {\n  ContextActionsDirective,\n  InfoDrawerComponent,\n  PageComponent,\n  PageLayoutComponent,\n  PaginationDirective,\n  ToolbarComponent\n} from '@alfresco/aca-shared';\nimport { SearchSortingDefinition } from '@alfresco/adf-content-services/lib/search/models/search-sorting-definition.interface';\nimport { filter, first, map, startWith, switchMap, take, tap, toArray } from 'rxjs/operators';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchInputComponent } from '../search-input/search-input.component';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DocumentListDirective } from '../../../directives/document-list.directive';\nimport { ThumbnailColumnComponent } from '../../dl-custom-components/thumbnail-column/thumbnail-column.component';\nimport { SearchActionMenuComponent } from '../search-action-menu/search-action-menu.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DocumentListPresetRef, DynamicColumnComponent } from '@alfresco/adf-extensions';\nimport { BulkActionsDropdownComponent } from '../../bulk-actions-dropdown/bulk-actions-dropdown.component';\nimport { SearchAiInputContainerComponent } from '../../knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component';\nimport {\n  extractFiltersFromEncodedQuery,\n  extractSearchedWordFromEncodedQuery,\n  extractUserQueryFromEncodedQuery,\n  formatSearchTerm\n} from '../../../utils/aca-search-utils';\nimport { SaveSearchDirective } from '../search-save/directive/save-search.directive';\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { IsFeatureSupportedInCurrentAcsPipe } from '../../../pipes/is-feature-supported.pipe';\nimport { SavedSearchesContextService } from '../../../services/saved-searches-context.service';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    SearchInputComponent,\n    MatProgressBarModule,\n    MatDividerModule,\n    MatButtonModule,\n    MatMenuModule,\n    DocumentListDirective,\n    ContextActionsDirective,\n    ThumbnailColumnComponent,\n    SearchActionMenuComponent,\n    PaginationComponent,\n    MatIconModule,\n    InfoDrawerComponent,\n    PaginationDirective,\n    PageLayoutComponent,\n    ToolbarComponent,\n    AlfrescoViewerComponent,\n    DynamicColumnComponent,\n    SearchFormComponent,\n    ResetSearchDirective,\n    SearchFilterChipsComponent,\n    DocumentListComponent,\n    DataColumnListComponent,\n    DataColumnComponent,\n    DateColumnHeaderComponent,\n    CustomEmptyContentTemplateDirective,\n    ViewerToolbarComponent,\n    BulkActionsDropdownComponent,\n    SearchAiInputContainerComponent,\n    SaveSearchDirective,\n    IsFeatureSupportedInCurrentAcsPipe,\n    AsyncPipe\n  ],\n  selector: 'aca-search-results',\n  templateUrl: './search-results.component.html',\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['./search-results.component.scss']\n})\nexport class SearchResultsComponent extends PageComponent implements OnInit, OnDestroy {\n  private notificationService = inject(NotificationService);\n\n  infoDrawerPreview$ = this.store.select(infoDrawerPreview);\n\n  protected readonly areFiltersActive$: Observable<boolean>;\n\n  searchedWord: string;\n  queryParamName = 'q';\n  data: ResultSetPaging;\n  sorting = ['name', 'asc'];\n  isLoading = false;\n  totalResults: number;\n  isTagsEnabled = false;\n  initialSavedSearch: SavedSearch = undefined;\n  columns: DocumentListPresetRef[] = [];\n  encodedQuery: string;\n  searchConfig: SearchConfiguration;\n  isSmallScreen = window.innerWidth < 320;\n\n  private previousEncodedQuery: string;\n  private readonly resizeListener = () => {\n    this.isSmallScreen = window.innerWidth < 320;\n  };\n\n  constructor(\n    tagsService: TagService,\n    private readonly queryBuilder: SearchQueryBuilderService,\n    private readonly changeDetectorRef: ChangeDetectorRef,\n    private readonly route: ActivatedRoute,\n    private readonly translationService: TranslationService,\n    private readonly savedSearchesService: SavedSearchesContextService\n  ) {\n    super();\n\n    this.isTagsEnabled = tagsService.areTagsEnabled();\n\n    queryBuilder.paging = {\n      skipCount: 0,\n      maxItems: 25\n    };\n\n    this.queryBuilder.configUpdated.pipe(takeUntilDestroyed()).subscribe((searchConfig) => {\n      this.searchConfig = searchConfig;\n    });\n\n    this.areFiltersActive$ = combineLatest([this.queryBuilder.queryFragmentsUpdate, this.queryBuilder.userFacetBucketsUpdate]).pipe(\n      takeUntilDestroyed(),\n      map((filters) => {\n        const [queryFragments, userFacetBuckets] = filters.map((rawFilter) => {\n          return Object.values(rawFilter).some((filterValue) => (Array.isArray(filterValue) ? filterValue.length > 0 : !!filterValue));\n        });\n        return queryFragments || userFacetBuckets;\n      })\n    );\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.queryBuilder.resetToDefaults();\n    this.sorting = this.getSorting();\n\n    this.subscriptions.push(\n      this.queryBuilder.updated.pipe(filter(Boolean)).subscribe(() => {\n        this.isLoading = true;\n        this.sorting = this.getSorting();\n        this.changeDetectorRef.detectChanges();\n      }),\n\n      this.queryBuilder.executed.subscribe((data) => {\n        this.queryBuilder.paging.skipCount = 0;\n\n        this.onSearchResultLoaded(data);\n        this.isLoading = false;\n        this.changeDetectorRef.detectChanges();\n      }),\n\n      this.queryBuilder.error.subscribe((err: any) => {\n        this.onSearchError(err);\n      }),\n\n      this.queryBuilder.filterQueryUpdate.subscribe(() => {\n        this.isLoading = true;\n      })\n    );\n\n    this.columns = this.extensions.documentListPresets.searchResults || [];\n\n    if (this.route) {\n      this.selectInitialSavedSearch().subscribe((savedSearches) => {\n        this.initialSavedSearch = savedSearches;\n      });\n\n      combineLatest([\n        this.route.queryParams,\n        this.router.events.pipe(\n          filter((event): event is NavigationStart => event instanceof NavigationStart),\n          startWith(null)\n        )\n      ])\n        .pipe(\n          takeUntilDestroyed(this.destroyRef),\n          tap(([params]) => {\n            this.queryBuilder.userQuery = '';\n            this.encodedQuery = params[this.queryParamName];\n            this.isLoading = !!this.encodedQuery;\n\n            this.searchedWord = extractSearchedWordFromEncodedQuery(this.encodedQuery);\n\n            const filtersFromEncodedQuery = extractFiltersFromEncodedQuery(this.encodedQuery);\n            this.queryBuilder.populateFilters.next(filtersFromEncodedQuery || {});\n          }),\n          switchMap(([, navigationStartEvent]) => {\n            const filtersToLoad = this.queryBuilder.categories.length;\n\n            const filtersAreLoaded = filtersToLoad ? this.queryBuilder.filterLoaded.pipe(take(filtersToLoad), toArray()) : of(null);\n\n            return filtersAreLoaded.pipe(map(() => navigationStartEvent));\n          })\n        )\n        .subscribe((navigationStartEvent) => {\n          const shouldExecuteQuery = this.shouldExecuteQuery(navigationStartEvent, this.encodedQuery);\n          this.queryBuilder.userQuery = extractUserQueryFromEncodedQuery(this.encodedQuery);\n          if (!this.searchedWord && !this.queryBuilder.userQuery && this.encodedQuery) {\n            this.queryBuilder.userQuery = formatSearchTerm('*', this.searchConfig['app:fields']);\n          }\n\n          if (shouldExecuteQuery) {\n            this.queryBuilder.execute(false);\n          }\n        });\n    }\n\n    window.addEventListener('resize', this.resizeListener);\n  }\n\n  ngOnDestroy(): void {\n    this.savedSearchesService.currentContextSavedSearch = undefined;\n    window.removeEventListener('resize', this.resizeListener);\n  }\n\n  onSearchError(error: { message: any }) {\n    let message: string;\n    try {\n      const { statusCode } = JSON.parse(error.message).error;\n\n      const messageKey = `APP.BROWSE.SEARCH.ERRORS.${statusCode}`;\n      message = this.translationService.instant(messageKey);\n\n      if (message === messageKey) {\n        message = this.translationService.instant(`APP.BROWSE.SEARCH.ERRORS.GENERIC`);\n      }\n    } catch {\n      message = error.message;\n    }\n\n    this.notificationService.showError(message);\n  }\n\n  onSearchResultLoaded(nodePaging: ResultSetPaging) {\n    this.data = nodePaging;\n    this.totalResults = this.getNumberOfResults();\n    this.store.dispatch(new SetSearchItemsTotalCountAction(this.totalResults));\n  }\n\n  getNumberOfResults() {\n    if (this.data?.list?.pagination) {\n      return this.data.list.pagination.totalItems;\n    }\n    return 0;\n  }\n\n  onPaginationChanged(pagination: Pagination) {\n    this.queryBuilder.paging = {\n      maxItems: pagination.maxItems,\n      skipCount: pagination.skipCount\n    };\n    this.queryBuilder.update();\n  }\n\n  private getSorting(): string[] {\n    const primary = this.queryBuilder.getPrimarySorting();\n\n    if (primary) {\n      return [primary.key, primary.ascending ? 'asc' : 'desc'];\n    }\n\n    return ['name', 'asc'];\n  }\n\n  onNodeDoubleClick(node: NodeEntry) {\n    if (node?.entry) {\n      if (node.entry.isFolder) {\n        this.store.dispatch(new NavigateToFolder(node));\n        return;\n      }\n\n      this.showPreview(node, { location: this.router.url });\n    }\n  }\n\n  handleNodeClick(event: Event) {\n    this.onNodeDoubleClick((event as CustomEvent).detail?.node);\n  }\n\n  onPreviewClosed() {\n    this.store.dispatch(new ShowInfoDrawerPreviewAction());\n  }\n\n  onDrawerClosed() {\n    this.store.dispatch(new SetInfoDrawerPreviewStateAction(false));\n    this.store.dispatch(new SetInfoDrawerStateAction(false));\n  }\n\n  onSearchSortingUpdate(option: SearchSortingDefinition) {\n    this.queryBuilder.sorting = [{ ...option, ascending: option.ascending }];\n    this.queryBuilder.update();\n  }\n\n  editSavedSearch(searchToSave: SavedSearch) {\n    searchToSave.encodedUrl = this.encodedQuery;\n    this.savedSearchesService\n      .editSavedSearch(searchToSave)\n      .pipe(take(1))\n      .subscribe({\n        next: () => {\n          this.notificationService.showInfo('APP.BROWSE.SEARCH.SAVE_SEARCH.EDIT_DIALOG.SUCCESS_MESSAGE');\n        },\n        error: () => {\n          this.notificationService.showError('APP.BROWSE.SEARCH.SAVE_SEARCH.EDIT_DIALOG.ERROR_MESSAGE');\n        }\n      });\n  }\n\n  onSaveSearch(): void {\n    this.selectInitialSavedSearch()\n      .pipe(take(1))\n      .subscribe((savedSearch) => {\n        this.initialSavedSearch = savedSearch;\n        this.savedSearchesService.currentContextSavedSearch = savedSearch;\n      });\n  }\n\n  private shouldExecuteQuery(navigationStartEvent: NavigationStart | null, query: string | undefined): boolean {\n    const hasQueryChanged = query !== this.previousEncodedQuery;\n    this.previousEncodedQuery = query;\n\n    if (!navigationStartEvent || navigationStartEvent.navigationTrigger === 'popstate' || navigationStartEvent.navigationTrigger === 'hashchange') {\n      return true;\n    } else if (navigationStartEvent.navigationTrigger === 'imperative') {\n      return hasQueryChanged;\n    } else {\n      return !!query;\n    }\n  }\n\n  private selectInitialSavedSearch(): Observable<SavedSearch> {\n    return this.route.queryParams.pipe(\n      takeUntilDestroyed(this.destroyRef),\n      switchMap((params) =>\n        this.savedSearchesService.savedSearches$.pipe(\n          first(),\n          map(\n            (savedSearches) =>\n              savedSearches.find((savedSearch) => savedSearch.encodedUrl === encodeURIComponent(params[this.queryParamName])) ||\n              this.savedSearchesService.currentContextSavedSearch\n          )\n        )\n      )\n    );\n  }\n}\n","<aca-page-layout [class.aca-search-results-active-search-ai-input]=\"searchAiInputState.active\">\n  <div class=\"aca-page-layout-header\">\n    <aca-search-ai-input-container *ngIf=\"searchAiInputState.active\" [agentId]=\"searchAiInputState.selectedAgentId\" />\n    <div class=\"aca-header-container\">\n      <aca-search-input />\n      <aca-bulk-actions-dropdown *ngIf=\"bulkActions && ('isBulkActionsAvailable' | isFeatureSupportedInCurrentAcs | async)\" [items]=\"bulkActions\" />\n      <div class=\"aca-search-toolbar-spacer\"></div>\n      <aca-toolbar [items]=\"actions\" />\n    </div>\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\">\n      <div class=\"adf-search-results\">\n        <div class=\"adf-search-results__content\">\n          <mat-progress-bar *ngIf=\"isLoading\" color=\"primary\" mode=\"indeterminate\" aria-live=\"polite\" />\n          <div class=\"adf-search-results__content-header aca-content\">\n            <div class=\"aca-content__filter-set\">\n              <p>{{ 'APP.BROWSE.SEARCH.FILTER_SET' | translate }}</p>\n              <adf-search-form />\n            </div>\n            <mat-divider\n              [vertical]=\"!isSmallScreen\"\n              [ngClass]=\"'aca-content__divider-' + (isSmallScreen ? 'horizontal' : 'vertical')\"\n              aria-hidden=\"true\" />\n            <div class=\"aca-content__advanced-filters\">\n              <div class=\"aca-content__advanced-filters--header\">\n                <p>{{ 'APP.BROWSE.SEARCH.ADVANCED_FILTERS' | translate }}</p>\n                <div class=\"aca-content__advanced-filters--header--action-buttons\">\n                  <button\n                    *ngIf=\"initialSavedSearch !== undefined; else saveSearchButton\"\n                    mat-button\n                    [disabled]=\"!encodedQuery\"\n                    class=\"aca-content__save-search-action\"\n                    title=\"{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.ACTION_BUTTON' | translate }}\"\n                    [attr.aria-label]=\"'APP.BROWSE.SEARCH.SAVE_SEARCH.ACTION_BUTTON' | translate\"\n                    [matMenuTriggerFor]=\"saveSearchOptionsMenu\"\n                  >\n                    {{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.ACTION_BUTTON' | translate }}\n                    <mat-icon iconPositionEnd>keyboard_arrow_down</mat-icon>\n                  </button>\n                  <mat-menu #saveSearchOptionsMenu=\"matMenu\">\n                    <button\n                      mat-menu-item\n                      (click)=\"editSavedSearch(initialSavedSearch)\"\n                      title=\"{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.SAVE_CHANGES' | translate }}\"\n                      [attr.aria-label]=\"'APP.BROWSE.SEARCH.SAVE_SEARCH.SAVE_CHANGES' | translate\"\n                    >\n                      {{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.SAVE_CHANGES' | translate }}\n                    </button>\n                    <button\n                      mat-menu-item\n                      acaSaveSearch\n                      [acaSaveSearchQuery]=\"encodedQuery\"\n                      title=\"{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.SAVE_AS_NEW' | translate }}\"\n                      [attr.aria-label]=\"'APP.BROWSE.SEARCH.SAVE_SEARCH.SAVE_AS_NEW' | translate\"\n                    >\n                      {{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.SAVE_AS_NEW' | translate }}\n                    </button>\n                  </mat-menu>\n                  <ng-template #saveSearchButton>\n                    <button\n                      mat-button\n                      acaSaveSearch\n                      [acaSaveSearchQuery]=\"encodedQuery\"\n                      (searchSaved)=\"onSaveSearch()\"\n                      [disabled]=\"!encodedQuery\"\n                      class=\"aca-content__save-search-action\"\n                      title=\"{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.ACTION_BUTTON' | translate }}\"\n                      [attr.aria-label]=\"'APP.BROWSE.SEARCH.SAVE_SEARCH.ACTION_BUTTON' | translate\"\n                    >\n                      {{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.ACTION_BUTTON' | translate }}\n                    </button>\n                  </ng-template>\n                  <button\n                    [disabled]=\"!(areFiltersActive$ | async)\"\n                    mat-button\n                    adf-reset-search\n                    class=\"aca-content__reset-action\"\n                    title=\"{{ 'APP.BROWSE.SEARCH.RESET_ACTION' | translate }}\"\n                    [attr.aria-label]=\"'APP.BROWSE.SEARCH.RESET_ACTION' | translate\"\n                  >\n                    {{ 'APP.BROWSE.SEARCH.RESET' | translate }}\n                  </button>\n                </div>\n              </div>\n              <adf-search-filter-chips />\n            </div>\n          </div>\n\n          <adf-document-list\n            #documentList\n            acaDocumentList\n            acaContextActions\n            [selectionMode]=\"'multiple'\"\n            [multiselect]=\"true\"\n            [sortingMode]=\"'server'\"\n            [sorting]=\"sorting\"\n            [preselectNodes]=\"selectedNodesState?.nodes\"\n            [displayCheckboxesOnHover]=\"true\"\n            [imageResolver]=\"imageResolver\"\n            [isResizingEnabled]=\"true\"\n            [blurOnResize]=\"false\"\n            [node]=\"$any(data)\"\n            (node-dblclick)=\"handleNodeClick($event)\"\n          >\n            <data-columns>\n              <data-column\n                id=\"app.search.thumbnail\"\n                key=\"$thumbnail\"\n                type=\"image\"\n                [sr-title]=\"'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL'\"\n                [sortable]=\"false\"\n              >\n                <ng-template let-context>\n                  <aca-custom-thumbnail-column [context]=\"context\" />\n                </ng-template>\n\n                <adf-data-column-header>\n                  <ng-template>\n                    <aca-search-action-menu (sortingSelected)=\"onSearchSortingUpdate($event)\" />\n                  </ng-template>\n                </adf-data-column-header>\n              </data-column>\n\n              <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n                <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n                  <data-column\n                    [id]=\"column.id\"\n                    [key]=\"column.key\"\n                    [title]=\"column.title\"\n                    [type]=\"column.type\"\n                    [format]=\"column.format\"\n                    [class]=\"column.class\"\n                    [sortable]=\"column.sortable\"\n                    [sortingKey]=\"column.sortingKey || column.key\"\n                    [isHidden]=\"column.isHidden\"\n                    [draggable]=\"column.draggable\"\n                    [resizable]=\"column.resizable\"\n                  >\n                    <ng-template let-context>\n                      <adf-dynamic-column [id]=\"column.template\" [context]=\"context\" />\n                    </ng-template>\n                  </data-column>\n                </ng-container>\n\n                <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n                  <data-column\n                    [id]=\"column.id\"\n                    [key]=\"column.key\"\n                    [title]=\"column.title\"\n                    [type]=\"column.type\"\n                    [format]=\"column.format\"\n                    [class]=\"column.class\"\n                    [sortable]=\"column.sortable\"\n                    [sortingKey]=\"column.sortingKey || column.key\"\n                    [isHidden]=\"column.isHidden\"\n                    [draggable]=\"column.draggable\"\n                    [resizable]=\"column.resizable\"\n                  />\n                </ng-container>\n              </ng-container>\n            </data-columns>\n\n            <adf-custom-empty-content-template>\n              <ng-container *ngIf=\"data\">\n                <div class=\"empty-search__block\" aria-live=\"polite\">\n                  <p class=\"empty-search__text\">\n                    {{ 'APP.BROWSE.SEARCH.NO_RESULTS' | translate }}\n                  </p>\n                </div>\n              </ng-container>\n            </adf-custom-empty-content-template>\n          </adf-document-list>\n\n          <adf-pagination *ngIf=\"totalResults > 0\" acaPagination [target]=\"documentList\" (change)=\"onPaginationChanged($event)\" />\n        </div>\n      </div>\n    </div>\n    <div\n      [ngClass]=\"\n        (infoDrawerPreview$ | async) === true ? 'adf-search-results--right_panel_section-extended' : 'adf-search-results--right_panel_section'\n      \"\n      *ngIf=\"infoDrawerOpened$ | async\"\n    >\n      <adf-alfresco-viewer\n        class=\"adf-search-results--embedded_viewer\"\n        [nodeId]=\"selection.last.entry.id\"\n        *ngIf=\"infoDrawerPreview$ | async; else infoDrawerPanel\"\n      >\n        <adf-viewer-toolbar>\n          <div class=\"adf-search-results--preview-toolbar\">\n            <div>\n              <button mat-icon-button title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\" (click)=\"onDrawerClosed()\">\n                <mat-icon>close</mat-icon>\n              </button>\n            </div>\n            <div>\n              <button\n                mat-icon-button\n                title=\"{{ 'ADF_VIEWER.ACTIONS.PREVIEW' | translate }}\"\n                color=\"accent\"\n                class=\"adf-search-results--visibility_button\"\n              >\n                <mat-icon>visibility</mat-icon>\n              </button>\n              <button mat-icon-button title=\"{{ 'ADF_VIEWER.ACTIONS.INFO' | translate }}\" (click)=\"onPreviewClosed()\">\n                <mat-icon>info_outline</mat-icon>\n              </button>\n            </div>\n          </div>\n        </adf-viewer-toolbar>\n      </adf-alfresco-viewer>\n      <ng-template #infoDrawerPanel>\n        <div class=\"aca-sidebar\">\n          <aca-info-drawer [node]=\"selection.last\" />\n        </div>\n      </ng-template>\n    </div>\n  </div>\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { NavigateLibraryAction } from '@alfresco/aca-shared/store';\nimport { NodePaging, Pagination, SiteEntry } from '@alfresco/js-api';\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { SearchLibrariesQueryBuilderService } from './search-libraries-query-builder.service';\nimport {\n  AppHookService,\n  AppService,\n  ContextActionsDirective,\n  InfoDrawerComponent,\n  PageComponent,\n  PageLayoutComponent,\n  PaginationDirective,\n  ToolbarComponent\n} from '@alfresco/aca-shared';\nimport { DocumentListPresetRef, DynamicColumnComponent } from '@alfresco/adf-extensions';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchInputComponent } from '../search-input/search-input.component';\nimport { CustomEmptyContentTemplateDirective, DataColumnComponent, DataColumnListComponent, PaginationComponent } from '@alfresco/adf-core';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { DocumentListDirective } from '../../../directives/document-list.directive';\nimport { DocumentListComponent } from '@alfresco/adf-content-services';\nimport { extractSearchedWordFromEncodedQuery } from '../../../utils/aca-search-utils';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    SearchInputComponent,\n    MatProgressBarModule,\n    PaginationComponent,\n    InfoDrawerComponent,\n    ContextActionsDirective,\n    DocumentListDirective,\n    PaginationDirective,\n    PageLayoutComponent,\n    ToolbarComponent,\n    DynamicColumnComponent,\n    DocumentListComponent,\n    DataColumnListComponent,\n    DataColumnComponent,\n    CustomEmptyContentTemplateDirective\n  ],\n  selector: 'aca-search-results',\n  templateUrl: './search-libraries-results.component.html',\n  styleUrls: ['./search-libraries-results.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class SearchLibrariesResultsComponent extends PageComponent implements OnInit {\n  searchedWord: string;\n  queryParamName = 'q';\n  data: NodePaging;\n  totalResults = 0;\n  isLoading = false;\n  columns: DocumentListPresetRef[] = [];\n\n  constructor(\n    private librariesQueryBuilder: SearchLibrariesQueryBuilderService,\n    private route: ActivatedRoute,\n    private appHookService: AppHookService,\n    private appService: AppService\n  ) {\n    super();\n\n    librariesQueryBuilder.paging = {\n      skipCount: 0,\n      maxItems: 25\n    };\n  }\n\n  ngOnInit() {\n    this.appService.setAppNavbarMode('collapsed');\n    super.ngOnInit();\n\n    this.columns = this.extensions.documentListPresets.searchLibraries || [];\n\n    this.subscriptions.push(\n      this.appHookService.libraryJoined.subscribe(() => this.librariesQueryBuilder.update()),\n      this.appHookService.libraryDeleted.subscribe(() => this.librariesQueryBuilder.update()),\n      this.appHookService.libraryLeft.subscribe(() => this.librariesQueryBuilder.update()),\n\n      this.librariesQueryBuilder.updated.subscribe(() => {\n        this.isLoading = true;\n\n        this.librariesQueryBuilder.execute();\n      }),\n\n      this.librariesQueryBuilder.executed.subscribe((data) => {\n        this.onSearchResultLoaded(data);\n        this.isLoading = false;\n      }),\n\n      this.librariesQueryBuilder.hadError.subscribe((err) => {\n        try {\n          const {\n            error: { statusCode }\n          } = JSON.parse(err.message);\n          if (statusCode === 400) {\n            this.appHookService.library400Error.next();\n          }\n        } catch (e) {}\n      })\n    );\n\n    if (this.route) {\n      this.route.queryParams.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((params: Params) => {\n        const encodedQuery = params[this.queryParamName] || null;\n        this.searchedWord = extractSearchedWordFromEncodedQuery(encodedQuery);\n        if (this.searchedWord?.length > 1) {\n          this.librariesQueryBuilder.paging.skipCount = 0;\n          this.librariesQueryBuilder.userQuery = this.searchedWord;\n          this.librariesQueryBuilder.update();\n        } else {\n          this.librariesQueryBuilder.userQuery = null;\n          this.librariesQueryBuilder.executed.next({\n            list: { pagination: { totalItems: 0 }, entries: [] }\n          });\n        }\n      });\n    }\n  }\n\n  onSearchResultLoaded(nodePaging: NodePaging) {\n    this.data = nodePaging;\n    this.totalResults = this.getNumberOfResults();\n  }\n\n  getNumberOfResults() {\n    if (this.data?.list?.pagination) {\n      return this.data.list.pagination.totalItems;\n    }\n    return 0;\n  }\n\n  onPaginationChanged(pagination: Pagination) {\n    this.librariesQueryBuilder.paging = {\n      maxItems: pagination.maxItems,\n      skipCount: pagination.skipCount\n    };\n    this.librariesQueryBuilder.update();\n  }\n\n  navigateTo(node: SiteEntry) {\n    if (node?.entry?.guid) {\n      this.store.dispatch(new NavigateLibraryAction(node.entry));\n    }\n  }\n\n  handleNodeClick(event: Event) {\n    this.navigateTo((event as CustomEvent).detail?.node);\n  }\n}\n","<aca-page-layout>\n  <div class=\"aca-page-layout-header\">\n    <aca-search-input />\n    <div class=\"aca-search-toolbar-spacer\"></div>\n    <aca-toolbar [items]=\"actions\" />\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\">\n      <div class=\"adf-search-results\">\n        <div class=\"adf-search-results__content\">\n          <mat-progress-bar *ngIf=\"isLoading\" color=\"primary\" mode=\"indeterminate\" />\n          <div class=\"adf-search-results__content-header aca-content-lib\" *ngIf=\"data?.list.entries.length\">\n            <div class=\"aca-content__side--left\">\n              <div class=\"adf-search-results--info-text\" *ngIf=\"totalResults !== 1\">\n                {{ 'APP.BROWSE.SEARCH_LIBRARIES.FOUND_RESULTS' | translate: { number: totalResults } }}\n              </div>\n              <div class=\"adf-search-results--info-text\" *ngIf=\"totalResults === 1\">\n                {{ 'APP.BROWSE.SEARCH_LIBRARIES.FOUND_ONE_RESULT' | translate: { number: totalResults } }}\n              </div>\n            </div>\n          </div>\n\n          <adf-document-list\n            #documentList\n            acaContextActions\n            acaDocumentList\n            [showHeader]=\"showHeader\"\n            [selectionMode]=\"'multiple'\"\n            [multiselect]=\"true\"\n            [sorting]=\"['name', 'asc']\"\n            [node]=\"data\"\n            [displayCheckboxesOnHover]=\"true\"\n            [imageResolver]=\"imageResolver\"\n            [isResizingEnabled]=\"true\"\n            [blurOnResize]=\"false\"\n            (node-dblclick)=\"handleNodeClick($event)\"\n            (name-click)=\"handleNodeClick($event)\"\n          >\n            <data-columns>\n              <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n                <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n                  <data-column\n                    [id]=\"column.id\"\n                    [key]=\"column.key\"\n                    [title]=\"column.title\"\n                    [type]=\"column.type\"\n                    [format]=\"column.format\"\n                    [class]=\"column.class\"\n                    [sortable]=\"column.sortable\"\n                    [draggable]=\"column.draggable\"\n                    [resizable]=\"column.resizable\"\n                  >\n                    <ng-template let-context>\n                      <adf-dynamic-column [id]=\"column.template\" [context]=\"context\" />\n                    </ng-template>\n                  </data-column>\n                </ng-container>\n\n                <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n                  <data-column\n                    [id]=\"column.id\"\n                    [key]=\"column.key\"\n                    [title]=\"column.title\"\n                    [type]=\"column.type\"\n                    [format]=\"column.format\"\n                    [class]=\"column.class\"\n                    [sortable]=\"column.sortable\"\n                    [draggable]=\"column.draggable\"\n                    [resizable]=\"column.resizable\"\n                  />\n                </ng-container>\n              </ng-container>\n            </data-columns>\n\n            <adf-custom-empty-content-template>\n              <ng-container *ngIf=\"data\">\n                <div class=\"empty-search__block\" aria-live=\"polite\">\n                  <p class=\"empty-search__text\">\n                    {{ 'APP.BROWSE.SEARCH.NO_RESULTS' | translate }}\n                  </p>\n                </div>\n              </ng-container>\n            </adf-custom-empty-content-template>\n          </adf-document-list>\n\n          <adf-pagination *ngIf=\"totalResults > 0\" acaPagination [target]=\"documentList\" (change)=\"onPaginationChanged($event)\" />\n        </div>\n      </div>\n    </div>\n    <div class=\"aca-sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n      <aca-info-drawer [node]=\"selection.last\" />\n    </div>\n  </div>\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n  ContentApiService,\n  ContextActionsDirective,\n  InfoDrawerComponent,\n  PageComponent,\n  PageLayoutComponent,\n  PaginationDirective,\n  ToolbarComponent\n} from '@alfresco/aca-shared';\nimport { Node, NodeEntry, PathElement, PathInfo } from '@alfresco/js-api';\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { debounceTime, map } from 'rxjs/operators';\nimport { DocumentListPresetRef, DynamicColumnComponent } from '@alfresco/adf-extensions';\nimport { CommonModule } from '@angular/common';\nimport {\n  CustomEmptyContentTemplateDirective,\n  DataColumnComponent,\n  DataColumnListComponent,\n  EmptyContentComponent,\n  PaginationComponent\n} from '@alfresco/adf-core';\nimport { DocumentListDirective } from '../../directives/document-list.directive';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { DocumentListComponent } from '@alfresco/adf-content-services';\nimport { SearchAiInputContainerComponent } from '../knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component';\n\n@Component({\n  imports: [\n    CommonModule,\n    DocumentListDirective,\n    ContextActionsDirective,\n    PaginationComponent,\n    PaginationDirective,\n    InfoDrawerComponent,\n    PageLayoutComponent,\n    TranslatePipe,\n    ToolbarComponent,\n    SearchAiInputContainerComponent,\n    EmptyContentComponent,\n    DynamicColumnComponent,\n    DocumentListComponent,\n    DataColumnListComponent,\n    DataColumnComponent,\n    CustomEmptyContentTemplateDirective\n  ],\n  templateUrl: './favorites.component.html',\n  encapsulation: ViewEncapsulation.None,\n  selector: 'aca-favorites'\n})\nexport class FavoritesComponent extends PageComponent implements OnInit {\n  columns: DocumentListPresetRef[] = [];\n\n  constructor(private contentApi: ContentApiService) {\n    super();\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.subscriptions = this.subscriptions.concat([\n      this.uploadService.fileUploadComplete.pipe(debounceTime(300)).subscribe(() => this.reload()),\n      this.uploadService.fileUploadDeleted.pipe(debounceTime(300)).subscribe(() => this.reload())\n    ]);\n\n    this.columns = this.extensions.documentListPresets.favorites;\n  }\n\n  navigate(favorite: Node) {\n    const { isFolder, id } = favorite;\n\n    // TODO: rework as it will fail on non-English setups\n    const isSitePath = (path: PathInfo): boolean => path?.elements?.some(({ name }: PathElement) => name === 'Sites');\n\n    if (isFolder) {\n      this.contentApi\n        .getNode(id)\n        .pipe(map((node) => node.entry))\n        .subscribe(({ path }: Node) => {\n          const routeUrl = isSitePath(path) ? '/libraries' : '/personal-files';\n          this.router.navigate([routeUrl, id]);\n        });\n    }\n  }\n\n  onNodeDoubleClick(node: NodeEntry) {\n    if (node?.entry) {\n      if (node.entry.isFolder) {\n        this.navigate(node.entry);\n      }\n\n      if (node.entry.isFile) {\n        this.showPreview(node, { location: this.router.url });\n      }\n    }\n  }\n\n  handleNodeClick(event: Event) {\n    this.onNodeDoubleClick((event as CustomEvent).detail?.node);\n  }\n}\n","<aca-page-layout>\n  <div class=\"aca-page-layout-header\">\n    <aca-search-ai-input-container\n      *ngIf=\"searchAiInputState.active; else header\"\n      [agentId]=\"searchAiInputState.selectedAgentId\" />\n    <ng-template #header>\n      <div class=\"aca-header-container\">\n        <h1 class=\"aca-page-title\">\n      {{ (selectedRowItemsCount < 1 ? 'APP.BROWSE.FAVORITES.TITLE' : 'APP.HEADER.SELECTED') | translate: { count: selectedRowItemsCount } }}\n    </h1>\n        <aca-toolbar [items]=\"actions\" />\n      </div>\n    </ng-template>\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\">\n      <adf-document-list\n        #documentList\n        acaDocumentList\n        acaContextActions\n        [currentFolderId]=\"'-favorites-'\"\n        [selectionMode]=\"'multiple'\"\n        [multiselect]=\"true\"\n        [navigate]=\"false\"\n        [sorting]=\"['modifiedAt', 'desc']\"\n        [preselectNodes]=\"selectedNodesState?.nodes\"\n        [sortingMode]=\"'client'\"\n        [imageResolver]=\"imageResolver\"\n        [displayCheckboxesOnHover]=\"true\"\n        (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n        [isResizingEnabled]=\"true\"\n        [blurOnResize]=\"false\"\n        (node-dblclick)=\"handleNodeClick($event)\"\n        (name-click)=\"handleNodeClick($event)\"\n      >\n        <adf-custom-empty-content-template>\n          <adf-empty-content icon=\"star_rate\" [title]=\"'APP.BROWSE.FAVORITES.EMPTY_STATE.TITLE'\" subtitle=\"APP.BROWSE.FAVORITES.EMPTY_STATE.TEXT\" />\n        </adf-custom-empty-content-template>\n\n        <data-columns>\n          <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n            <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n              <data-column\n                [id]=\"column.id\"\n                [key]=\"column.key\"\n                [title]=\"column.title\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [isHidden]=\"column.isHidden\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              >\n                <ng-template let-context>\n                  <adf-dynamic-column [id]=\"column.template\" [context]=\"context\" />\n                </ng-template>\n              </data-column>\n            </ng-container>\n\n            <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n              <data-column\n                [id]=\"column.id\"\n                [key]=\"column.key\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [isHidden]=\"column.isHidden\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              />\n            </ng-container>\n          </ng-container>\n        </data-columns>\n      </adf-document-list>\n\n      <adf-pagination acaPagination [target]=\"documentList\" />\n    </div>\n\n    <div class=\"aca-sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n      <aca-info-drawer [node]=\"selection.last\" />\n    </div>\n  </div>\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { debounceTime } from 'rxjs/operators';\nimport {\n  ContextActionsDirective,\n  InfoDrawerComponent,\n  PageComponent,\n  PageLayoutComponent,\n  PaginationDirective,\n  ToolbarComponent\n} from '@alfresco/aca-shared';\nimport { DocumentListPresetRef, DynamicColumnComponent } from '@alfresco/adf-extensions';\nimport { CommonModule } from '@angular/common';\nimport {\n  CustomEmptyContentTemplateDirective,\n  DataColumnComponent,\n  DataColumnListComponent,\n  EmptyContentComponent,\n  PaginationComponent\n} from '@alfresco/adf-core';\nimport { DocumentListDirective } from '../../directives/document-list.directive';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchAiInputContainerComponent } from '../knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component';\nimport { DocumentListComponent } from '@alfresco/adf-content-services';\n\n@Component({\n  imports: [\n    CommonModule,\n    DocumentListDirective,\n    ContextActionsDirective,\n    PaginationComponent,\n    PaginationDirective,\n    InfoDrawerComponent,\n    PageLayoutComponent,\n    TranslatePipe,\n    ToolbarComponent,\n    SearchAiInputContainerComponent,\n    EmptyContentComponent,\n    DynamicColumnComponent,\n    DocumentListComponent,\n    CustomEmptyContentTemplateDirective,\n    DataColumnComponent,\n    DataColumnListComponent\n  ],\n  templateUrl: './recent-files.component.html',\n  encapsulation: ViewEncapsulation.None,\n  selector: 'aca-recent-files'\n})\nexport class RecentFilesComponent extends PageComponent implements OnInit {\n  columns: DocumentListPresetRef[] = [];\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.subscriptions = this.subscriptions.concat([\n      this.uploadService.fileUploadComplete.pipe(debounceTime(300)).subscribe(() => this.reload()),\n      this.uploadService.fileUploadDeleted.pipe(debounceTime(300)).subscribe(() => this.reload())\n    ]);\n\n    this.columns = this.extensions.documentListPresets.recent || [];\n  }\n\n  onNodeDoubleClick(node: NodeEntry) {\n    if (node?.entry) {\n      this.showPreview(node, { location: this.router.url });\n    }\n  }\n\n  handleNodeClick(event: Event) {\n    this.onNodeDoubleClick((event as CustomEvent).detail?.node);\n  }\n}\n","<aca-page-layout>\n  <div class=\"aca-page-layout-header\">\n    <aca-search-ai-input-container\n      *ngIf=\"searchAiInputState.active; else header\"\n      [agentId]=\"searchAiInputState.selectedAgentId\" />\n    <ng-template #header>\n      <div class=\"aca-header-container\">\n        <h1 class=\"aca-page-title\">\n      {{ (selectedRowItemsCount < 1 ? 'APP.BROWSE.RECENT.TITLE' : 'APP.HEADER.SELECTED') | translate: { count: selectedRowItemsCount } }}\n    </h1>\n        <aca-toolbar [items]=\"actions\" />\n      </div>\n    </ng-template>\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\">\n      <adf-document-list\n        #documentList\n        acaDocumentList\n        acaContextActions\n        [currentFolderId]=\"'-recent-'\"\n        [selectionMode]=\"'multiple'\"\n        [multiselect]=\"true\"\n        [navigate]=\"false\"\n        [sorting]=\"['modifiedAt', 'desc']\"\n        [preselectNodes]=\"selectedNodesState?.nodes\"\n        [sortingMode]=\"'client'\"\n        [imageResolver]=\"imageResolver\"\n        [isResizingEnabled]=\"true\"\n        [displayCheckboxesOnHover]=\"true\"\n        (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n        [blurOnResize]=\"false\"\n        (node-dblclick)=\"handleNodeClick($event)\"\n        (name-click)=\"handleNodeClick($event)\"\n      >\n        <adf-custom-empty-content-template>\n          <adf-empty-content icon=\"access_time\" [title]=\"'APP.BROWSE.RECENT.EMPTY_STATE.TITLE'\" subtitle=\"APP.BROWSE.RECENT.EMPTY_STATE.TEXT\" />\n        </adf-custom-empty-content-template>\n\n        <data-columns>\n          <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n            <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n              <data-column\n                [id]=\"column.id\"\n                [key]=\"column.key\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [isHidden]=\"column.isHidden\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              >\n                <ng-template let-context>\n                  <adf-dynamic-column [id]=\"column.template\" [context]=\"context\" />\n                </ng-template>\n              </data-column>\n            </ng-container>\n\n            <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n              <data-column\n                [id]=\"column.id\"\n                [key]=\"column.key\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [isHidden]=\"column.isHidden\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              />\n            </ng-container>\n          </ng-container>\n        </data-columns>\n      </adf-document-list>\n\n      <adf-pagination acaPagination [target]=\"documentList\" />\n    </div>\n\n    <div class=\"aca-sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n      <aca-info-drawer [node]=\"selection.last\" />\n    </div>\n  </div>\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\nimport { NodeEntry } from '@alfresco/js-api';\nimport {\n  AppHookService,\n  ContextActionsDirective,\n  InfoDrawerComponent,\n  PageComponent,\n  PageLayoutComponent,\n  PaginationDirective,\n  ToolbarComponent\n} from '@alfresco/aca-shared';\nimport { DocumentListPresetRef, DynamicColumnComponent } from '@alfresco/adf-extensions';\nimport { CommonModule } from '@angular/common';\nimport {\n  CustomEmptyContentTemplateDirective,\n  DataColumnComponent,\n  DataColumnListComponent,\n  EmptyContentComponent,\n  PaginationComponent\n} from '@alfresco/adf-core';\nimport { DocumentListDirective } from '../../directives/document-list.directive';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchAiInputContainerComponent } from '../knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component';\nimport { DocumentListComponent } from '@alfresco/adf-content-services';\n\n@Component({\n  imports: [\n    CommonModule,\n    DocumentListDirective,\n    ContextActionsDirective,\n    PaginationComponent,\n    InfoDrawerComponent,\n    PaginationDirective,\n    PageLayoutComponent,\n    TranslatePipe,\n    ToolbarComponent,\n    SearchAiInputContainerComponent,\n    EmptyContentComponent,\n    DynamicColumnComponent,\n    DocumentListComponent,\n    CustomEmptyContentTemplateDirective,\n    DataColumnComponent,\n    DataColumnListComponent\n  ],\n  templateUrl: './shared-files.component.html',\n  encapsulation: ViewEncapsulation.None,\n  selector: 'aca-shared-files'\n})\nexport class SharedFilesComponent extends PageComponent implements OnInit {\n  columns: DocumentListPresetRef[] = [];\n\n  constructor(private appHookService: AppHookService) {\n    super();\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.subscriptions = this.subscriptions.concat([\n      this.appHookService.linksUnshared.pipe(debounceTime(300)).subscribe(() => this.reload()),\n      this.uploadService.fileUploadComplete.pipe(debounceTime(300)).subscribe(() => this.reload()),\n      this.uploadService.fileUploadDeleted.pipe(debounceTime(300)).subscribe(() => this.reload())\n    ]);\n\n    this.columns = this.extensions.documentListPresets.shared || [];\n  }\n\n  preview(node: NodeEntry) {\n    this.showPreview(node, { location: this.router.url });\n  }\n\n  handleNodeClick(event: Event) {\n    this.preview((event as CustomEvent).detail?.node);\n  }\n}\n","<aca-page-layout>\n  <div class=\"aca-page-layout-header\">\n    <aca-search-ai-input-container\n      *ngIf=\"searchAiInputState.active; else header\"\n      [agentId]=\"searchAiInputState.selectedAgentId\" />\n    <ng-template #header>\n      <div class=\"aca-header-container\">\n        <h1 class=\"aca-page-title\">\n      {{ (selectedRowItemsCount < 1 ? 'APP.BROWSE.SHARED.TITLE' : 'APP.HEADER.SELECTED') | translate: { count: selectedRowItemsCount } }}\n    </h1>\n\n        <aca-toolbar [items]=\"actions\" />\n      </div>\n    </ng-template>\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\">\n      <adf-document-list\n        #documentList\n        acaDocumentList\n        acaContextActions\n        [currentFolderId]=\"'-sharedlinks-'\"\n        [selectionMode]=\"'multiple'\"\n        [multiselect]=\"true\"\n        [sorting]=\"['modifiedAt', 'desc']\"\n        [imageResolver]=\"imageResolver\"\n        [preselectNodes]=\"selectedNodesState?.nodes\"\n        [sortingMode]=\"'client'\"\n        [isResizingEnabled]=\"true\"\n        [displayCheckboxesOnHover]=\"true\"\n        (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n        [blurOnResize]=\"false\"\n        (node-dblclick)=\"handleNodeClick($event)\"\n        (name-click)=\"handleNodeClick($event)\"\n      >\n        <adf-custom-empty-content-template>\n          <adf-empty-content icon=\"people\" [title]=\"'APP.BROWSE.SHARED.EMPTY_STATE.TITLE'\" subtitle=\"APP.BROWSE.SHARED.EMPTY_STATE.TEXT\" />\n        </adf-custom-empty-content-template>\n\n        <data-columns>\n          <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n            <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n              <data-column\n                [id]=\"column.id\"\n                [key]=\"column.key\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [isHidden]=\"column.isHidden\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              >\n                <ng-template let-context>\n                  <adf-dynamic-column [id]=\"column.template\" [context]=\"context\" />\n                </ng-template>\n              </data-column>\n            </ng-container>\n\n            <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n              <data-column\n                [id]=\"column.id\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [key]=\"column.key\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [isHidden]=\"column.isHidden\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              />\n            </ng-container>\n          </ng-container>\n        </data-columns>\n      </adf-document-list>\n\n      <adf-pagination acaPagination [target]=\"documentList\" />\n    </div>\n\n    <div class=\"aca-sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n      <aca-info-drawer [node]=\"selection.last\" />\n    </div>\n  </div>\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AppHookService, ContentApiService, PageComponent, PageLayoutComponent, ToolbarComponent } from '@alfresco/aca-shared';\nimport { NavigateToFolder, NavigateToPreviousPage, SetSelectedNodesAction } from '@alfresco/aca-shared/store';\nimport { BreadcrumbComponent, ContentService, NodesApiService, PermissionListComponent } from '@alfresco/adf-content-services';\nimport { CommonModule, Location } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MetadataTabComponent } from '../info-drawer/metadata-tab/metadata-tab.component';\nimport { CommentsTabComponent } from '../info-drawer/comments-tab/comments-tab.component';\nimport { NodeEntry, PathElement } from '@alfresco/js-api';\nimport { first } from 'rxjs/operators';\nimport { ContentActionRef } from '@alfresco/adf-extensions';\nimport { InfoDrawerButtonsDirective } from '@alfresco/adf-core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    MatIconModule,\n    MatTabsModule,\n    MatProgressBarModule,\n    MatButtonModule,\n    MetadataTabComponent,\n    CommentsTabComponent,\n    PageLayoutComponent,\n    ToolbarComponent,\n    InfoDrawerButtonsDirective,\n    PermissionListComponent,\n    BreadcrumbComponent\n  ],\n  selector: 'app-details-manager',\n  templateUrl: './details.component.html',\n  styleUrls: ['./details.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class DetailsComponent extends PageComponent implements OnInit, OnDestroy {\n  nodeId: string;\n  isLoading: boolean;\n  activeTab = 1;\n  aspectActions: Array<ContentActionRef> = [];\n  nodeIcon: string;\n  canManagePermissions = true;\n\n  constructor(\n    private readonly route: ActivatedRoute,\n    private readonly contentApi: ContentApiService,\n    private readonly contentService: ContentService,\n    private readonly nodesApiService: NodesApiService,\n    private readonly appHookService: AppHookService,\n    private readonly location: Location\n  ) {\n    super();\n  }\n\n  ngOnInit(): void {\n    super.ngOnInit();\n    this.isLoading = true;\n    const { route } = this;\n    const { data } = route.snapshot;\n    this.title = data.title;\n    this.nodesApiService.nodeUpdated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((node) => (this.node = { ...node }));\n    this.appHookService.nodesDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.location.back());\n    this.route.params.subscribe((params) => {\n      this.isLoading = true;\n      this.setActiveTab(params.activeTab);\n      this.nodeId = params.nodeId;\n      this.contentApi.getNode(this.nodeId).subscribe((node) => {\n        this.node = node.entry;\n        this.isLoading = false;\n        this.canManagePermissions = !this.isSmartFolder();\n        this.setActiveTab(params.activeTab);\n        this.store.dispatch(new SetSelectedNodesAction([{ entry: this.node }]));\n        this.nodeIcon = this.contentService.getNodeIcon(this.node);\n      });\n    });\n    this.extensions\n      .getAllowedSidebarActions()\n      .pipe(first())\n      .subscribe((aspectActions) => {\n        this.aspectActions = aspectActions;\n      });\n  }\n\n  setActiveTab(tabName: string) {\n    switch (tabName) {\n      case 'comments':\n        this.activeTab = 1;\n        break;\n      case 'permissions':\n        if (!this.canManagePermissions) {\n          this.activeTab = 0;\n          break;\n        }\n        this.activeTab = 2;\n        break;\n      case 'metadata':\n      default:\n        this.activeTab = 0;\n    }\n  }\n\n  goBack() {\n    this.store.dispatch(new NavigateToPreviousPage());\n  }\n\n  onBreadcrumbNavigate(path: PathElement) {\n    this.store.dispatch(new NavigateToFolder({ entry: path } as NodeEntry));\n  }\n\n  ngOnDestroy(): void {\n    this.store.dispatch(new SetSelectedNodesAction([]));\n    super.ngOnDestroy();\n  }\n\n  private isSmartFolder(): boolean {\n    if (!this.node?.isFolder) {\n      return false;\n    }\n    const nodeAspects = this.node.aspectNames ?? [];\n    return nodeAspects.includes('smf:customConfigSmartFolder') || nodeAspects.includes('smf:systemConfigSmartFolder');\n  }\n}\n","<aca-page-layout>\n  <div class=\"aca-page-layout-header\">\n    <adf-breadcrumb [root]=\"title\" [folderNode]=\"node\" (navigate)=\"onBreadcrumbNavigate($event)\" />\n    <aca-toolbar [items]=\"actions\" />\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-details-container\">\n      <div class=\"aca-details-title\">\n        <div class=\"aca-details-breadcrumb\" role=\"heading\" aria-level=\"2\" *ngIf=\"node\">\n          <span class=\"aca-details-breadcrumb-library\">\n            <img class=\"aca-details-breadcrumb-icon\" alt=\"{{ 'APP.INFO_DRAWER.ICON' | translate }}\" src=\"{{ nodeIcon }}\">\n            {{ node.name }} </span>\n        </div>\n        <div class=\"aca-details-buttons\">\n          <aca-toolbar [items]=\"aspectActions\" info-drawer-buttons />\n          <button\n                class=\"aca-close-details-button\"\n                mat-icon-button\n                data-automation-id=\"close-library\"\n                title=\"{{ 'APP.INFO_DRAWER.REDUCE_PANEL' | translate }}\"\n                (click)=\"goBack()\">\n                <mat-icon>fullscreen_exit</mat-icon>\n          </button>\n        </div>\n      </div>\n\n      <mat-tab-group [selectedIndex]=\"activeTab\" class=\"aca-details-tabs\" animationDuration=\"0\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\n        <mat-tab label=\"{{ 'APP.INFO_DRAWER.TABS.PROPERTIES' | translate }}\">\n          <ng-template matTabContent>\n            <app-metadata-tab *ngIf=\"node && !isLoading; else loading\" [node]=\"node\" />\n          </ng-template>\n        </mat-tab>\n        <mat-tab label=\"{{ 'APP.INFO_DRAWER.TABS.COMMENTS' | translate }}\">\n          <ng-template matTabContent>\n            <app-comments-tab *ngIf=\"node && !isLoading; else loading\" [node]=\"node\" />\n          </ng-template>\n        </mat-tab>\n        <mat-tab [disabled]=\"!canManagePermissions\" label=\"{{ 'APP.INFO_DRAWER.TABS.PERMISSIONS' | translate }}\">\n          <ng-template matTabContent>\n            <adf-permission-list *ngIf=\"node && !isLoading; else loading\" [nodeId]=\"node.id\" />\n          </ng-template>\n        </mat-tab>\n      </mat-tab-group>\n    </div>\n  </div>\n</aca-page-layout>\n\n<ng-template #loading>\n  <mat-progress-bar color=\"primary\" mode=\"indeterminate\" />\n</ng-template>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AppSettingsService } from '@alfresco/aca-shared';\n\n@Component({\n  standalone: true,\n  template: '',\n  encapsulation: ViewEncapsulation.None\n})\nexport class HomeComponent implements OnInit {\n  private appSettings = inject(AppSettingsService);\n  private router = inject(Router);\n\n  ngOnInit() {\n    this.router.navigateByUrl(this.appSettings.landingPage);\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AlfrescoApiService } from '@alfresco/adf-content-services';\nimport { PeopleApi, Person } from '@alfresco/js-api';\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { Observable, take, throwError } from 'rxjs';\nimport { AppExtensionService, AppService, UserProfileSection } from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DynamicExtensionComponent } from '@alfresco/adf-extensions';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    ReactiveFormsModule,\n    MatButtonModule,\n    MatIconModule,\n    MatDividerModule,\n    MatFormFieldModule,\n    MatInputModule,\n    DynamicExtensionComponent\n  ],\n  selector: 'app-view-profile',\n  templateUrl: './view-profile.component.html',\n  styleUrls: ['./view-profile.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class ViewProfileComponent implements OnInit {\n  peopleApi: PeopleApi;\n  profileForm = new FormGroup({\n    firstName: new FormControl(''),\n    lastName: new FormControl(''),\n    jobTitle: new FormControl(''),\n    location: new FormControl(''),\n    telephone: new FormControl('', [Validators.pattern('^([0-9]+-)*[0-9]+$')]),\n    mobile: new FormControl('', [Validators.pattern('^([0-9]+-)*[0-9]+$')]),\n    companyName: new FormControl(''),\n    companyPostCode: new FormControl(''),\n    companyAddress: new FormControl(''),\n    companyTelephone: new FormControl('', [Validators.pattern('^([0-9]+-)*[0-9]+$')]),\n    companyEmail: new FormControl('', [Validators.email])\n  });\n  personDetails: Person;\n  generalSectionExpanded = true;\n  generalSectionEditMode = false;\n  contactSectionExpanded = false;\n  contactSectionEditMode = false;\n  appNavNarMode$: Observable<'collapsed' | 'expanded'>;\n  sections: UserProfileSection[] = [];\n\n  get generalSectionButtonTooltip(): string {\n    return `APP.TOOLTIPS.${this.generalSectionExpanded ? 'COLLAPSE' : 'EXPAND'}_SECTION`;\n  }\n\n  get contactSectionButtonTooltip(): string {\n    return `APP.TOOLTIPS.${this.contactSectionExpanded ? 'COLLAPSE' : 'EXPAND'}_SECTION`;\n  }\n\n  constructor(\n    private router: Router,\n    private readonly apiService: AlfrescoApiService,\n    private readonly appService: AppService,\n    private readonly extensionService: AppExtensionService\n  ) {\n    this.peopleApi = new PeopleApi(this.apiService.getInstance());\n    this.appNavNarMode$ = appService.appNavNarMode$.pipe(takeUntilDestroyed());\n  }\n\n  ngOnInit() {\n    this.populateForm(this.personDetails);\n    this.peopleApi\n      .getPerson('-me-')\n      .then((userInfo) => {\n        this.personDetails = userInfo?.entry;\n        this.populateForm(userInfo?.entry);\n      })\n      .catch((error) => {\n        throwError(error);\n      });\n\n    this.extensionService\n      .getUserProfileSections()\n      .pipe(take(1))\n      .subscribe((sections) => (this.sections = sections));\n  }\n\n  toggleNavigationMenu() {\n    this.appService.toggleAppNavBar$.next();\n  }\n\n  populateForm(userInfo: Person) {\n    this.profileForm.setValue({\n      firstName: userInfo?.firstName || '',\n      lastName: userInfo?.lastName || '',\n      jobTitle: userInfo?.jobTitle || '',\n      location: userInfo?.location || '',\n      telephone: userInfo?.telephone || '',\n      mobile: userInfo?.mobile || '',\n      companyName: userInfo?.company?.organization || '',\n      companyPostCode: userInfo?.company?.postcode || '',\n      companyAddress: userInfo?.company?.address1 || '',\n      companyTelephone: userInfo?.company?.telephone || '',\n      companyEmail: userInfo?.company?.email || ''\n    });\n  }\n\n  navigateToPersonalFiles() {\n    this.router.navigate(['/personal-files'], {\n      replaceUrl: true\n    });\n  }\n\n  toggleGeneralSection() {\n    this.generalSectionExpanded = !this.generalSectionExpanded;\n  }\n\n  toggleGeneralSectionEditMode() {\n    this.generalSectionEditMode = !this.generalSectionEditMode;\n\n    if (this.generalSectionEditMode) {\n      this.generalSectionExpanded = true;\n    }\n  }\n\n  onSaveGeneralData(event) {\n    this.generalSectionEditMode = false;\n    this.updatePersonDetails(event);\n  }\n\n  onSaveCompanyData(event) {\n    this.contactSectionEditMode = false;\n    this.updatePersonDetails(event);\n  }\n\n  toggleContactSection() {\n    this.contactSectionExpanded = !this.contactSectionExpanded;\n  }\n\n  toggleContactSectionEditMode() {\n    this.contactSectionEditMode = !this.contactSectionEditMode;\n\n    if (this.contactSectionEditMode) {\n      this.contactSectionExpanded = true;\n    }\n  }\n\n  updatePersonDetails(event) {\n    if (this.profileForm.valid) {\n      this.peopleApi\n        .updatePerson('-me-', {\n          jobTitle: event.value.jobTitle,\n          location: event.value.location,\n          telephone: event.value.telephone,\n          mobile: event.value.mobile,\n          company: {\n            organization: event.value.companyName,\n            postcode: event.value.companyPostCode,\n            address1: event.value.companyAddress,\n            telephone: event.value.companyTelephone,\n            email: event.value.companyEmail\n          }\n        })\n        .then((person) => {\n          this.personDetails = person?.entry;\n          this.populateForm(person?.entry);\n        })\n        .catch((error) => {\n          this.populateForm(this.personDetails);\n          throwError(error);\n        });\n    } else {\n      this.populateForm(this.personDetails);\n    }\n  }\n\n  isSaveButtonDisabled(): boolean {\n    return this.profileForm.invalid;\n  }\n}\n","<div class=\"app-profile-container\">\n  <div class=\"app-profile-row\">\n    <div class=\"app-profile-title\">\n      @if ((appNavNarMode$ | async) === 'collapsed') {\n        <button\n          mat-icon-button\n          (click)=\"toggleNavigationMenu()\"\n          [attr.title]=\"'APP.TOOLTIPS.EXPAND_NAVIGATION' | translate\"\n          [attr.aria-label]=\"'APP.TOOLTIPS.EXPAND_NAVIGATION' | translate\">\n          <mat-icon>menu</mat-icon>\n        </button>\n      }\n      <button\n        class=\"app-profile-icon\"\n        mat-icon-button\n        (click)=\"navigateToPersonalFiles()\"\n        [attr.aria-label]=\"'APP.EDIT_PROFILE.GO_TO_PERSONAL_FILES_BUTTON_LABEL' | translate\"\n        [attr.title]=\"'APP.EDIT_PROFILE.GO_TO_PERSONAL_FILES_BUTTON_LABEL' | translate\">\n        <mat-icon>arrow_back</mat-icon>\n      </button>\n      <h2 class=\"app-profile\">{{'APP.EDIT_PROFILE.MY_PROFILE' | translate}}</h2>\n    </div>\n  </div>\n  <div class=\"app-profile-general-row\" [formGroup]=\"profileForm\" id=\"general-dropdown\">\n    <div class=\"app-profile-general\">\n      <div class=\"app-profile-general-section\">\n        <button\n          mat-icon-button\n          (click)=\"toggleGeneralSection()\"\n          [attr.title]=\"generalSectionButtonTooltip | translate\"\n          [attr.aria-label]=\"generalSectionButtonTooltip | translate\">\n          <mat-icon>{{ generalSectionExpanded ?  'expand_more' : 'chevron_right'}}</mat-icon>\n        </button>\n        <h3 class=\"app-general-title\">{{'APP.EDIT_PROFILE.GENERAL' | translate}}</h3>\n      </div>\n      @if (!generalSectionEditMode) {\n        <button\n          mat-icon-button\n          (click)=\"toggleGeneralSectionEditMode()\"\n          class=\"app-general-edit\"\n          [attr.title]=\"'APP.TOOLTIPS.EDIT' | translate\"\n          [attr.aria-label]=\"'APP.TOOLTIPS.EDIT' | translate\">\n          <mat-icon>edit</mat-icon>\n        </button>\n      } @else {\n        <button\n          mat-icon-button\n          class=\"app-general-cancel-btn\"\n          [attr.title]=\"'APP.TOOLTIPS.CANCEL' | translate\"\n          [attr.aria-label]=\"'APP.TOOLTIPS.CANCEL' | translate\"\n          (click)=\"toggleGeneralSectionEditMode()\">\n          <mat-icon>close</mat-icon>\n        </button>\n        <button\n          mat-icon-button\n          color=\"primary\"\n          [attr.title]=\"'APP.TOOLTIPS.SAVE' | translate\"\n          [attr.aria-label]=\"'APP.TOOLTIPS.SAVE' | translate\"\n          [disabled]=\"profileForm.invalid\"\n          (click)=\"onSaveGeneralData(profileForm)\">\n          <mat-icon>check</mat-icon>\n        </button>\n      }\n    </div>\n    @if (generalSectionExpanded) {\n      <mat-divider class=\"app-divider\" aria-hidden=\"true\" />\n      <div class=\"app-general-dropdown\">\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.FIRST_NAME' | translate }}</mat-label>\n          <input\n            matInput\n            readonly\n            placeholder=\"{{ 'APP.EDIT_PROFILE.FIRST_NAME' | translate }}\"\n            formControlName=\"firstName\"\n          />\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.LAST_NAME' | translate }}</mat-label>\n          <input\n            matInput\n            readonly\n            placeholder=\"{{ 'APP.EDIT_PROFILE.LAST_NAME' | translate }}\"\n            formControlName=\"lastName\"\n          />\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.JOB_TITLE' | translate }}</mat-label>\n          <input\n            matInput\n            [readonly]=\"!generalSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.JOB_TITLE' | translate }}\"\n            formControlName=\"jobTitle\"\n          />\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.LOCATION' | translate }}</mat-label>\n          <input\n            matInput\n            [readonly]=\"!generalSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.LOCATION' | translate }}\"\n            formControlName=\"location\"\n          />\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.TELEPHONE' | translate }}</mat-label>\n          <input\n            matInput\n            [type]=\"'tel'\"\n            [readonly]=\"!generalSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.TELEPHONE' | translate }}\"\n            formControlName=\"telephone\"\n          />\n          <mat-error>\n            {{ 'APP.EDIT_PROFILE.INVALID_PHONE_FORMAT' | translate }}\n          </mat-error>\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.MOBILE' | translate }}</mat-label>\n          <input\n            matInput\n            [type]=\"'tel'\"\n            [readonly]=\"!generalSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.MOBILE' | translate }}\"\n            formControlName=\"mobile\"\n          />\n          <mat-error>\n            {{ 'APP.EDIT_PROFILE.INVALID_PHONE_FORMAT' | translate }}\n          </mat-error>\n        </mat-form-field>\n      </div>\n    }\n  </div>\n\n  <div class=\"app-profile-contact-row\" [formGroup]=\"profileForm\" id=\"contact-dropdown\">\n    <div class=\"app-profile-general profile-general-bottom-radius\">\n      <div class=\"app-profile-general-section\">\n         <button\n          mat-icon-button\n          (click)=\"toggleContactSection()\"\n          [attr.title]=\"contactSectionButtonTooltip | translate\"\n          [attr.aria-label]=\"contactSectionButtonTooltip | translate\">\n          <mat-icon>{{ contactSectionExpanded ?  'expand_more' : 'chevron_right'}}</mat-icon>\n        </button>\n        <h3 class=\"app-general-title\">{{'APP.EDIT_PROFILE.COMPANY_DETAILS' | translate}}</h3>\n      </div>\n      @if (!contactSectionEditMode) {\n        <button\n          mat-icon-button\n          (click)=\"toggleContactSectionEditMode()\"\n          class=\"app-general-edit\"\n          [attr.title]=\"'APP.TOOLTIPS.EDIT' | translate\"\n          [attr.aria-label]=\"'APP.TOOLTIPS.EDIT' | translate\">\n          <mat-icon>edit</mat-icon>\n        </button>\n      } @else {\n        <button\n          mat-icon-button\n          class=\"app-general-cancel-btn\"\n          [attr.title]=\"'APP.TOOLTIPS.CANCEL' | translate\"\n          [attr.aria-label]=\"'APP.TOOLTIPS.CANCEL' | translate\"\n          (click)=\"toggleContactSectionEditMode()\">\n          <mat-icon>close</mat-icon>\n        </button>\n        <button\n          mat-icon-button\n          color=\"primary\"\n          [attr.title]=\"'APP.TOOLTIPS.SAVE' | translate\"\n          [attr.aria-label]=\"'APP.TOOLTIPS.SAVE' | translate\"\n          [disabled]=\"profileForm.invalid\"\n          (click)=\"onSaveCompanyData(profileForm)\">\n          <mat-icon>check</mat-icon>\n        </button>\n      }\n    </div>\n    @if (contactSectionExpanded) {\n      <mat-divider class=\"app-divider\" aria-hidden=\"true\" />\n      <div class=\"app-general-dropdown\">\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.NAME' | translate }}</mat-label>\n          <input\n            matInput\n            [readonly]=\"!contactSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.NAME' | translate }}\"\n            formControlName=\"companyName\"\n          />\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.ADDRESS' | translate }}</mat-label>\n          <input\n            matInput\n            [readonly]=\"!contactSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.ADDRESS' | translate }}\"\n            formControlName=\"companyAddress\"\n          />\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.POSTCODE' | translate }}</mat-label>\n          <input\n            matInput\n            [readonly]=\"!contactSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.POSTCODE' | translate }}\"\n            formControlName=\"companyPostCode\"\n          />\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.TELEPHONE' | translate }}</mat-label>\n          <input\n            matInput\n            [readonly]=\"!contactSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.TELEPHONE' | translate }}\"\n            formControlName=\"companyTelephone\"\n          />\n          <mat-error>\n            {{ 'APP.EDIT_PROFILE.INVALID_PHONE_FORMAT' | translate }}\n          </mat-error>\n        </mat-form-field>\n\n        <mat-form-field class=\"app-form-field\">\n          <mat-label>{{ 'APP.EDIT_PROFILE.EMAIL' | translate }}</mat-label>\n          <input\n            matInput\n            [readonly]=\"!contactSectionEditMode\"\n            placeholder=\"{{ 'APP.EDIT_PROFILE.EMAIL' | translate }}\"\n            formControlName=\"companyEmail\"\n          />\n          <mat-error>\n            {{ 'APP.EDIT_PROFILE.INVALID_EMAIL_FORMAT' | translate }}\n          </mat-error>\n        </mat-form-field>\n      </div>\n    }\n  </div>\n  @for (section of sections; track $index) {\n    <adf-dynamic-component [id]=\"section.component\"/>\n  }\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { inject } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport { AuthenticationService } from '@alfresco/adf-core';\n\nexport const ViewProfileRuleGuard: CanActivateFn = () => {\n  const authService = inject(AuthenticationService);\n\n  return authService.isLoggedIn() || authService.isOauth();\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AppStore, SetSelectedNodesAction } from '@alfresco/aca-shared/store';\nimport { ViewerModule } from '@alfresco/adf-core';\nimport { ContentActionRef } from '@alfresco/adf-extensions';\nimport { SharedLinkEntry, SharedlinksApi } from '@alfresco/js-api';\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Store } from '@ngrx/store';\nimport { forkJoin, from, of } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { AppExtensionService, AppService, ToolbarComponent } from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { AlfrescoApiService, AlfrescoViewerModule } from '@alfresco/adf-content-services';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, ViewerModule, AlfrescoViewerModule, ToolbarComponent],\n  selector: 'app-shared-link-view',\n  templateUrl: './shared-link-view.component.html',\n  styleUrls: ['shared-link-view.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-shared-link-view' }\n})\nexport class SharedLinkViewComponent implements OnInit {\n  sharedLinkId: string = null;\n  viewerToolbarActions: Array<ContentActionRef> = [];\n\n  private sharedLinksApi: SharedlinksApi;\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private route: ActivatedRoute,\n    private store: Store<AppStore>,\n    private extensions: AppExtensionService,\n    private alfrescoApiService: AlfrescoApiService,\n    private appService: AppService\n  ) {\n    this.sharedLinksApi = new SharedlinksApi(this.alfrescoApiService.getInstance());\n  }\n\n  ngOnInit() {\n    this.route.params\n      .pipe(\n        mergeMap((params) =>\n          forkJoin([from(this.sharedLinksApi.getSharedLink(params.id)), of(params.id)]).pipe(catchError(() => of([null, params.id])))\n        )\n      )\n      .subscribe(([sharedEntry, sharedId]: [SharedLinkEntry, string]) => {\n        if (sharedEntry) {\n          this.store.dispatch(new SetSelectedNodesAction([sharedEntry as any]));\n          this.appService.openMobileAppDialog();\n        }\n        this.sharedLinkId = sharedId;\n      });\n\n    this.extensions\n      .getSharedLinkViewerToolbarActions()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((actions) => {\n        this.viewerToolbarActions = actions;\n      });\n  }\n}\n","<ng-container *ngIf=\"sharedLinkId\">\n  <adf-alfresco-viewer [allowPrint]=\"false\" [allowDownload]=\"false\" [allowFullScreen]=\"false\" [sharedLinkId]=\"sharedLinkId\" [allowGoBack]=\"false\">\n    <adf-viewer-toolbar-actions>\n      <aca-toolbar [items]=\"viewerToolbarActions\" />\n    </adf-viewer-toolbar-actions>\n  </adf-alfresco-viewer>\n</ng-container>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { DocumentListPresetRef, DynamicColumnComponent } from '@alfresco/adf-extensions';\nimport { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport {\n  ContextActionsDirective,\n  PageComponent,\n  PageLayoutComponent,\n  PaginationDirective,\n  ToolbarComponent,\n  UserProfileService\n} from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport {\n  CustomEmptyContentTemplateDirective,\n  DataColumnComponent,\n  DataColumnListComponent,\n  EmptyContentComponent,\n  PaginationComponent\n} from '@alfresco/adf-core';\nimport { DocumentListDirective } from '../../directives/document-list.directive';\nimport { DocumentListComponent } from '@alfresco/adf-content-services';\n\n@Component({\n  imports: [\n    CommonModule,\n    TranslatePipe,\n    PaginationComponent,\n    DocumentListDirective,\n    ContextActionsDirective,\n    PaginationDirective,\n    PageLayoutComponent,\n    ToolbarComponent,\n    EmptyContentComponent,\n    DynamicColumnComponent,\n    DocumentListComponent,\n    CustomEmptyContentTemplateDirective,\n    DataColumnComponent,\n    DataColumnListComponent\n  ],\n  templateUrl: './trashcan.component.html',\n  encapsulation: ViewEncapsulation.None\n})\nexport class TrashcanComponent extends PageComponent implements OnInit {\n  private userProfileService = inject(UserProfileService);\n\n  user$ = this.userProfileService.userProfile$;\n  columns: DocumentListPresetRef[] = [];\n\n  ngOnInit() {\n    super.ngOnInit();\n    this.columns = this.extensions.documentListPresets.trashcan || [];\n  }\n}\n","<aca-page-layout>\n  <div class=\"aca-page-layout-header\">\n    <h1 class=\"aca-page-title\">\n      {{ (selectedRowItemsCount < 1 ? 'APP.BROWSE.TRASHCAN.TITLE' : 'APP.HEADER.SELECTED') | translate: { count: selectedRowItemsCount } }}\n    </h1>\n\n    <aca-toolbar [items]=\"actions\" />\n  </div>\n\n  <div class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\">\n      <adf-document-list\n        #documentList\n        acaDocumentList\n        acaContextActions\n        [currentFolderId]=\"'-trashcan-'\"\n        [selectionMode]=\"'multiple'\"\n        [multiselect]=\"true\"\n        [navigate]=\"false\"\n        [sortingMode]=\"'client'\"\n        [preselectNodes]=\"selectedNodesState?.nodes\"\n        [imageResolver]=\"imageResolver\"\n        [displayCheckboxesOnHover]=\"true\"\n        (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n        [sorting]=\"['archivedAt', 'desc']\"\n        [isResizingEnabled]=\"true\"\n        [blurOnResize]=\"false\"\n      >\n        <adf-custom-empty-content-template>\n          <adf-empty-content icon=\"delete\" [title]=\"'APP.BROWSE.TRASHCAN.EMPTY_STATE.TITLE'\">\n            <p class=\"adf-empty-content__text\">\n              {{ 'APP.BROWSE.TRASHCAN.EMPTY_STATE.FIRST_TEXT' | translate }}\n            </p>\n            <p class=\"adf-empty-content__text\">\n              {{ 'APP.BROWSE.TRASHCAN.EMPTY_STATE.SECOND_TEXT' | translate }}\n            </p>\n          </adf-empty-content>\n        </adf-custom-empty-content-template>\n\n        <data-columns>\n          <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n            <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n              <data-column\n                [id]=\"column.id\"\n                [key]=\"column.key\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [isHidden]=\"column.isHidden\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              >\n                <ng-template let-context>\n                  <adf-dynamic-column [id]=\"column.template\" [context]=\"context\" />\n                </ng-template>\n              </data-column>\n            </ng-container>\n\n            <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n              <data-column\n                [id]=\"column.id\"\n                [key]=\"column.key\"\n                [title]=\"column.title\"\n                [type]=\"column.type\"\n                [format]=\"column.format\"\n                [class]=\"column.class\"\n                [sortable]=\"column.sortable\"\n                [draggable]=\"column.draggable\"\n                [resizable]=\"column.resizable\"\n                [isHidden]=\"column.isHidden\"\n                [sortingKey]=\"column.sortingKey || column.key\"\n              />\n            </ng-container>\n          </ng-container>\n\n          <data-column\n            *ngIf=\"!isSmallScreen && (user$ | async)?.isAdmin\"\n            class=\"adf-ellipsis-cell\"\n            key=\"archivedByUser.displayName\"\n            title=\"APP.DOCUMENT_LIST.COLUMNS.DELETED_BY\"\n          />\n        </data-columns>\n      </adf-document-list>\n\n      <adf-pagination acaPagination [target]=\"documentList\" />\n    </div>\n  </div>\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { MarkedOptions, MarkedRenderer } from 'ngx-markdown';\nimport { Tokens } from 'marked/lib/marked';\n\nconst renderer = new MarkedRenderer();\nrenderer.link = ({ href, title, text }: Tokens.Link): any =>\n  `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"${title || ''}\">${text}</a>`;\nexport const searchAiMarkedOptions: MarkedOptions = {\n  renderer\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, ElementRef, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { PageComponent, PageLayoutComponent, ContentApiService } from '@alfresco/aca-shared';\nimport { catchError, delay, filter, finalize, map, retry, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { ClipboardService, EmptyContentComponent, ThumbnailService, UnsavedChangesGuard } from '@alfresco/adf-core';\nimport { AiAnswer, Node } from '@alfresco/js-api';\nimport { CommonModule } from '@angular/common';\nimport { SearchAiInputContainerComponent } from '../search-ai-input-container/search-ai-input-container.component';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { from, Observable, of, throwError } from 'rxjs';\nimport { SelectionState } from '@alfresco/adf-extensions';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatListModule } from '@angular/material/list';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ModalAiService } from '../../../../services/modal-ai.service';\nimport { ViewNodeAction } from '@alfresco/aca-shared/store';\nimport { ViewerService } from '@alfresco/aca-content/viewer';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MarkdownModule, MARKED_OPTIONS, provideMarkdown } from 'ngx-markdown';\nimport { searchAiMarkedOptions } from './search-ai-marked-options';\n\n@Component({\n  imports: [\n    CommonModule,\n    PageLayoutComponent,\n    SearchAiInputContainerComponent,\n    TranslatePipe,\n    MatIconModule,\n    MatButtonModule,\n    MatListModule,\n    EmptyContentComponent,\n    MatCardModule,\n    MatTooltipModule,\n    MarkdownModule\n  ],\n  providers: [\n    provideMarkdown({\n      markedOptions: {\n        provide: MARKED_OPTIONS,\n        useValue: searchAiMarkedOptions\n      }\n    })\n  ],\n  selector: 'aca-search-ai-results',\n  templateUrl: './search-ai-results.component.html',\n  styleUrls: ['./search-ai-results.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'aca-search-ai-results' }\n})\nexport class SearchAiResultsComponent extends PageComponent implements OnInit {\n  private static readonly MERMAID_BLOCK_REGEX = /```mermaid([\\s\\S]*?)```/g;\n  private static readonly LATEX_BLOCK_REGEX = /```latex([\\s\\S]*?)```/g;\n\n  references$: Observable<Node[]> = of([]);\n\n  private _agentId: string;\n  private _hasAnsweringError = false;\n  private _hasError = false;\n  private _loading = false;\n  private _mimeTypeIconsByNodeId: { [key: string]: string } = {};\n  private openedViewer = false;\n  private _selectedNodesState: SelectionState;\n  private _searchQuery = '';\n  private queryAnswer: AiAnswer;\n  private _displayedAnswer: string;\n  private _hasReferencesLoadingError = false;\n  private _referencesLoading = false;\n\n  get agentId(): string {\n    return this._agentId;\n  }\n\n  get hasAnsweringError(): boolean {\n    return this._hasAnsweringError;\n  }\n\n  get hasError(): boolean {\n    return this._hasError;\n  }\n\n  get loading(): boolean {\n    return this._loading;\n  }\n\n  get mimeTypeIconsByNodeId(): { [key: string]: string } {\n    return this._mimeTypeIconsByNodeId;\n  }\n\n  get searchQuery(): string {\n    return this._searchQuery;\n  }\n\n  get displayedAnswer(): string {\n    return this._displayedAnswer;\n  }\n\n  get hasReferencesLoadingError(): boolean {\n    return this._hasReferencesLoadingError;\n  }\n\n  constructor(\n    private readonly route: ActivatedRoute,\n    private readonly clipboardService: ClipboardService,\n    private readonly thumbnailService: ThumbnailService,\n    private readonly translateService: TranslateService,\n    private readonly unsavedChangesGuard: UnsavedChangesGuard,\n    private readonly modalAiService: ModalAiService,\n    private readonly viewerService: ViewerService,\n    private readonly elementRef: ElementRef,\n    private readonly contentApi: ContentApiService\n  ) {\n    super();\n  }\n\n  ngOnInit(): void {\n    this.viewerService.customNodesOrder = JSON.parse(this.userPreferencesService.get('aiReferences', '[]'));\n    this.route.queryParams\n      .pipe(\n        filter((params) => {\n          const openedViewerPreviously = this.openedViewer;\n          this.openedViewer = !!params.location;\n          return !this.openedViewer && (!openedViewerPreviously || !this.queryAnswer);\n        }),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((params) => {\n        this._agentId = params.agentId;\n        this._searchQuery = params.query ? decodeURIComponent(params.query) : '';\n        const selectedNodesState = this.userPreferencesService.get('knowledgeRetrievalNodes');\n        if (!this.searchQuery || !this.agentId || !selectedNodesState) {\n          this._hasError = true;\n          return;\n        }\n        this._selectedNodesState = JSON.parse(selectedNodesState);\n        this.performAiSearch();\n      });\n    super.ngOnInit();\n\n    this.unsavedChangesGuard.unsaved = this.route.snapshot?.queryParams?.query?.length > 0 && !this.hasError;\n    this.unsavedChangesGuard.data = {\n      descriptionText: 'KNOWLEDGE_RETRIEVAL.SEARCH.DISCARD_CHANGES.CONVERSATION_DISCARDED',\n      confirmButtonText: 'KNOWLEDGE_RETRIEVAL.SEARCH.DISCARD_CHANGES.DISCARD_CONVERSATION',\n      headerText: 'KNOWLEDGE_RETRIEVAL.SEARCH.DISCARD_CHANGES.WARNING',\n      maxWidth: 'none'\n    };\n  }\n\n  copyResponseToClipboard(): void {\n    this.clipboardService.copyContentToClipboard(\n      this.queryAnswer.answer,\n      this.translateService.instant('KNOWLEDGE_RETRIEVAL.SEARCH.RESULTS_PAGE.COPY_MESSAGE')\n    );\n  }\n\n  checkUnsavedChangesAndSearch(): void {\n    this.modalAiService.openUnsavedChangesModal(() => this.performAiSearch());\n  }\n\n  performAiSearch(): void {\n    this._loading = true;\n    this._hasAnsweringError = false;\n\n    this.searchAiService\n      .ask({\n        question: this.searchQuery,\n        nodeIds: this._selectedNodesState?.nodes?.length ? this._selectedNodesState.nodes.map((node) => node.entry.id) : [],\n        agentId: this._agentId\n      })\n      .pipe(\n        switchMap((response) => this.searchAiService.getAnswer(response.questionId)),\n        tap((response) => {\n          if (!response.entry?.answer) {\n            throw new Error();\n          }\n          this.queryAnswer = response.entry;\n          this._displayedAnswer = this.preprocessMarkdownFormat(response.entry.answer);\n          this.loadReferences();\n        }),\n        retry({\n          delay: (error: Error, retryCount) => this.aiSearchRetryDelay(error, retryCount)\n        }),\n        finalize(() => {\n          this._loading = false;\n        }),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe({\n        error: () => (this._hasAnsweringError = true)\n      });\n  }\n\n  openFile(id: string): void {\n    this.store.dispatch(\n      new ViewNodeAction(id, {\n        location: this.router.url\n      })\n    );\n  }\n\n  addSourceCodeTooltips(): void {\n    this.setTooltip(SearchAiResultsComponent.MERMAID_BLOCK_REGEX, '.mermaid');\n    this.setTooltip(SearchAiResultsComponent.LATEX_BLOCK_REGEX, '.katex');\n  }\n\n  loadReferences(): void {\n    if (this._referencesLoading) {\n      return;\n    }\n\n    this._referencesLoading = true;\n\n    this.references$ = this.fetchReferences(this.queryAnswer).pipe(\n      tap((nodes) => this.updateNodes(nodes)),\n      finalize(() => {\n        this._referencesLoading = false;\n      }),\n      shareReplay({ bufferSize: 1, refCount: true })\n    );\n  }\n\n  private setTooltip(codeBlockRegexp: RegExp, targetElementsSelector: string): void {\n    const codeBlocks = [...this.queryAnswer.answer.matchAll(codeBlockRegexp)].map((match) => match[0].trim());\n    const elements: HTMLElement[] = this.elementRef.nativeElement.querySelectorAll(targetElementsSelector);\n    for (let i = 0; i < elements.length; i++) {\n      elements[i].title = codeBlocks[i];\n    }\n  }\n\n  private aiSearchRetryDelay(error: Error, retryCount: number): Observable<void> {\n    this._hasAnsweringError = false;\n    const delayBetweenRetries = 3000;\n    const maxRetries = 9;\n\n    if (retryCount > maxRetries) {\n      this._hasAnsweringError = true;\n      return throwError(() => error);\n    }\n\n    return of(undefined).pipe(delay(delayBetweenRetries));\n  }\n\n  private preprocessMarkdownFormat(answer: string): string {\n    return this.transformLatex(this.transformMermaid(answer));\n  }\n\n  private transformMermaid(answer: string): string {\n    return answer.replace(SearchAiResultsComponent.MERMAID_BLOCK_REGEX, (_mermaidBlockRegex, blockContent: string) => {\n      const transformedLines = blockContent.split('\\n').map((line) => {\n        const label = 'label=\"';\n        while (line.includes(label)) {\n          const labelIndex = line.indexOf(label);\n          const start = labelIndex + label.length;\n          const end = line.indexOf('\"', start);\n          line = line.slice(0, labelIndex) + line.slice(start, end) + line.slice(end + 1);\n        }\n        return line;\n      });\n\n      return `\\`\\`\\`mermaid\\n${transformedLines.join('\\n')}\\n\\`\\`\\``;\n    });\n  }\n\n  private transformLatex(answer: string): string {\n    return answer.replace(SearchAiResultsComponent.LATEX_BLOCK_REGEX, (_, latexContent: string) => `$$${latexContent.trim()}$$`);\n  }\n\n  private fetchReferences(answer?: AiAnswer): Observable<Node[]> {\n    this._hasReferencesLoadingError = false;\n\n    const objectIds = answer?.objectReferences?.map((reference) => reference.nodeId ?? reference.objectId.split('__')[1]);\n\n    if (!objectIds?.length) {\n      return of([]);\n    }\n\n    const query = objectIds.map((id) => `ID:\"${id}\"`).join(' OR ');\n\n    return from(\n      this.contentApi.search({\n        query: {\n          query,\n          language: 'afts'\n        }\n      })\n    ).pipe(\n      map((result) => {\n        const nodes = result.list.entries.map((entry) => entry.entry as Node);\n        if (nodes.length !== objectIds.length) {\n          this._hasReferencesLoadingError = true;\n          return [];\n        }\n        return nodes;\n      }),\n      catchError(() => {\n        this._hasReferencesLoadingError = true;\n        return of([]);\n      })\n    );\n  }\n\n  private updateNodes(nodes: Node[]): void {\n    const nodesIds: string[] = [];\n    nodes.forEach((node) => {\n      nodesIds.push(node.id);\n      this._mimeTypeIconsByNodeId[node.id] = this.thumbnailService.getMimeTypeIcon(node.content?.mimeType);\n    });\n    this.viewerService.customNodesOrder = nodesIds;\n    this.userPreferencesService.set('aiReferences', JSON.stringify(nodesIds));\n  }\n}\n","<aca-page-layout>\n  @if (!hasError && agentId) {\n    <aca-search-ai-input-container\n      class=\"aca-page-layout-header\"\n      placeholder=\"KNOWLEDGE_RETRIEVAL.SEARCH.RESULTS_PAGE.QUERY_INPUT_PLACEHOLDER\"\n      [agentId]=\"agentId\"\n      [usedInAiResultsPage]=\"true\" />\n  }\n\n  @if (!hasError) {\n    <div class=\"aca-page-layout-content\">\n      <div class=\"aca-search-ai-results-container\">\n        <div\n          class=\"aca-search-ai-results-container-query\"\n          data-automation-id=\"aca-search-ai-results-query\">\n          {{ searchQuery }}\n        </div>\n        <div\n          class=\"aca-search-ai-response-container\"\n          [class.aca-search-ai-response-container-error]=\"hasAnsweringError\">\n          @if (!loading) {\n            @if (!hasAnsweringError) {\n              <div class=\"aca-search-ai-response-container-body\">\n                <markdown\n                  class=\"aca-search-ai-response-container-body-response\"\n                  data-automation-id=\"aca-search-ai-results-response\"\n                  [data]=\"displayedAnswer\"\n                  (ready)=\"addSourceCodeTooltips()\"\n                  mermaid\n                  katex />\n                <button\n                  class=\"aca-search-ai-response-container-body-response-action aca-search-ai-response-container-body-response-action-regeneration\"\n                  mat-icon-button\n                  (click)=\"checkUnsavedChangesAndSearch()\"\n                  data-automation-id=\"aca-search-ai-results-regeneration-button\"\n                  [title]=\"'KNOWLEDGE_RETRIEVAL.SEARCH.RESULTS_PAGE.REGENERATION_BUTTON_LABEL' | translate\">\n                  <mat-icon>cached</mat-icon>\n                </button>\n                <button\n                  class=\"aca-search-ai-response-container-body-response-action\"\n                  mat-icon-button\n                  (click)=\"copyResponseToClipboard()\"\n                  data-automation-id=\"aca-search-ai-results-copying-button\"\n                  [title]=\"'KNOWLEDGE_RETRIEVAL.SEARCH.RESULTS_PAGE.COPY_BUTTON_LABEL' | translate\">\n                  <mat-icon>copy</mat-icon>\n                </button>\n\n                @if (references$ | async; as refs) {\n                  @if (refs?.length || hasReferencesLoadingError) {\n                    <mat-divider\n                      class=\"aca-search-ai-response-container-body-divider\"\n                      [class.aca-search-ai-response-container-body-divider-error]=\"hasReferencesLoadingError\"\n                      aria-hidden=\"true\"\n                    />\n                    <div class=\"aca-search-ai-response-container-body-references-container\">\n                      <p class=\"aca-search-ai-response-container-body-references-container-header\">\n                        {{ 'KNOWLEDGE_RETRIEVAL.SEARCH.RESULTS_PAGE.REFERENCED_DOCUMENTS_HEADER' | translate }}\n                      </p>\n\n                      @if (hasReferencesLoadingError) {\n                        <div class=\"aca-search-ai-response-container-body-references-container-loading-error\" role=\"alert\">\n                          {{ 'KNOWLEDGE_RETRIEVAL.SEARCH.ERRORS.REFERENCES_LOADING_ERROR' | translate }}\n                          <button\n                            mat-flat-button\n                            (click)=\"loadReferences()\"\n                            [attr.aria-label]=\"'KNOWLEDGE_RETRIEVAL.SEARCH.RESULTS_PAGE.RELOAD_REFERENCES_BUTTON_LABEL' | translate\"\n                            class=\"aca-search-ai-response-container-error-message-regeneration-button\"\n                            data-automation-id=\"aca-search-ai-response-container-body-references-container-retry-references-loading-button\">\n                            <mat-icon class=\"aca-search-ai-response-container-error-message-regeneration-button-icon\">cached</mat-icon>\n                            {{ 'KNOWLEDGE_RETRIEVAL.SEARCH.RESULTS_PAGE.RELOAD_REFERENCES_BUTTON_LABEL' | translate }}\n                          </button>\n                        </div>\n                      } @else {\n                        <div class=\"aca-search-ai-response-container-body-references-container-documents\">\n                          @for (node of refs; track node.id) {\n                            <a\n                              class=\"aca-search-ai-response-container-body-references-container-documents-document\"\n                              [attr.data-automation-id]=\"'aca-search-ai-results-' + node.id + '-document'\"\n                              role=\"link\"\n                              (click)=\"openFile(node.id)\"\n                              (keyup.enter)=\"openFile(node.id)\"\n                              tabindex=\"0\">\n                              <mat-icon\n                                mat-list-icon\n                                class=\"aca-search-ai-response-container-body-references-container-documents-document-icon\">\n                                <img [alt]=\"node.content?.mimeType\" [src]=\"mimeTypeIconsByNodeId[node.id]\" />\n                              </mat-icon>\n                              <div class=\"aca-search-ai-response-container-body-references-container-documents-document-name\">\n                                {{ node.name }}\n                              </div>\n                            </a>\n                          }\n                        </div>\n                      }\n                    </div>\n                  }\n                }\n              </div>\n            } @else {\n              <div class=\"aca-search-ai-response-container-error-message\" role=\"alert\">\n                {{ 'KNOWLEDGE_RETRIEVAL.SEARCH.ERRORS.LOADING_ERROR' | translate }}\n                <button\n                  mat-flat-button\n                  (click)=\"performAiSearch()\"\n                  class=\"aca-search-ai-response-container-error-message-regeneration-button\"\n                  data-automation-id=\"aca-search-ai-results-error-regeneration-button\">\n                  <mat-icon class=\"aca-search-ai-response-container-error-message-regeneration-button-icon\">cached</mat-icon>\n                  {{ 'KNOWLEDGE_RETRIEVAL.SEARCH.RESULTS_PAGE.REGENERATION_BUTTON_LABEL' | translate }}\n                </button>\n              </div>\n            }\n          } @else {\n            <div class=\"adf-skeleton\"></div>\n            <div class=\"adf-skeleton\"></div>\n            <div class=\"adf-skeleton adf-skeleton-half\"></div>\n          }\n        </div>\n      </div>\n    </div>\n  } @else {\n    <adf-empty-content\n      class=\"aca-page-layout-content\"\n      icon=\"star\"\n      title=\"KNOWLEDGE_RETRIEVAL.SEARCH.ERRORS.PAGE_NOT_AVAILABLE_ERROR\" />\n  }\n</aca-page-layout>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { SavedSearch } from '@alfresco/adf-content-services';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { take } from 'rxjs/operators';\nimport { NotificationService } from '@alfresco/adf-core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { SavedSearchesContextService } from '../../../../../services/saved-searches-context.service';\n\n@Component({\n  imports: [TranslatePipe, TitleCasePipe, MatIconModule, MatButtonModule, MatDialogModule],\n  selector: 'aca-saved-search-delete-dialog',\n  templateUrl: './saved-search-delete-dialog.component.html',\n  styleUrls: ['./saved-search-delete-dialog.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'aca-saved-search-delete-dialog' }\n})\nexport class SavedSearchDeleteDialogComponent {\n  isLoading = false;\n\n  constructor(\n    private readonly dialog: MatDialogRef<SavedSearchDeleteDialogComponent>,\n    private readonly notificationService: NotificationService,\n    private readonly savedSearchesService: SavedSearchesContextService,\n    @Inject(MAT_DIALOG_DATA) private readonly data: SavedSearch\n  ) {}\n\n  onSubmit() {\n    if (this.isLoading) {\n      return;\n    }\n    this.isLoading = true;\n    this.savedSearchesService\n      .deleteSavedSearch(this.data)\n      .pipe(take(1))\n      .subscribe({\n        next: () => {\n          this.dialog.close(this.data);\n          this.notificationService.showInfo('APP.BROWSE.SEARCH.SAVE_SEARCH.DELETE_DIALOG.SUCCESS_MESSAGE');\n          this.isLoading = false;\n        },\n        error: () => {\n          this.notificationService.showError('APP.BROWSE.SEARCH.SAVE_SEARCH.DELETE_DIALOG.ERROR_MESSAGE');\n          this.isLoading = false;\n        }\n      });\n  }\n}\n","<div class=\"aca-saved-search-delete-dialog__header\">\n  <h2 class=\"aca-saved-search-delete-dialog__title\">{{\"APP.BROWSE.SEARCH.SAVE_SEARCH.DELETE_DIALOG.TITLE\" | translate}}</h2>\n  <button\n    mat-icon-button\n    mat-dialog-close\n    [attr.aria-label]=\"'CLOSE' | translate\"\n    [attr.title]=\"'CLOSE' | translate\">\n    <mat-icon>close</mat-icon>\n  </button>\n</div>\n<mat-dialog-content>\n  <p>{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.DELETE_DIALOG.CONTENT' | translate }}</p>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n  <button mat-button\n          mat-dialog-close\n          id=\"aca-save-search-delete-dialog-cancel-button\">{{ 'CANCEL' | titlecase | translate }}</button>\n  <button mat-flat-button\n          id=\"aca-save-search-delete-dialog-submit-button\"\n          color=\"primary\"\n          [disabled]=\"isLoading\"\n          (click)=\"onSubmit()\">{{ 'DELETE' | titlecase | translate }}</button>\n</mat-dialog-actions>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { AutoFocusDirective, forbidOnlySpaces, SavedSearch } from '@alfresco/adf-content-services';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { take } from 'rxjs/operators';\nimport { NotificationService } from '@alfresco/adf-core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { UniqueSearchNameValidator } from '../unique-search-name-validator';\nimport { SavedSearchForm } from '../saved-search-form.interface';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TitleCasePipe } from '@angular/common';\nimport { SavedSearchesContextService } from '../../../../../services/saved-searches-context.service';\n\n@Component({\n  imports: [\n    AutoFocusDirective,\n    TranslatePipe,\n    MatIconModule,\n    MatButtonModule,\n    MatDialogModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    TitleCasePipe\n  ],\n  selector: 'aca-saved-search-edit-dialog',\n  templateUrl: './saved-search-edit-dialog.component.html',\n  styleUrls: ['./saved-search-edit-dialog.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'aca-saved-search-edit-dialog' }\n})\nexport class SavedSearchEditDialogComponent {\n  form: FormGroup<SavedSearchForm>;\n  isLoading = false;\n\n  constructor(\n    private readonly dialog: MatDialogRef<SavedSearchEditDialogComponent>,\n    private readonly notificationService: NotificationService,\n    private readonly savedSearchesService: SavedSearchesContextService,\n    private readonly uniqueSearchNameValidator: UniqueSearchNameValidator,\n    @Inject(MAT_DIALOG_DATA) private readonly data: SavedSearch\n  ) {\n    this.form = new FormGroup({\n      name: new FormControl('', {\n        validators: [Validators.required, forbidOnlySpaces],\n        asyncValidators: [this.uniqueSearchNameValidator.validate.bind(this.uniqueSearchNameValidator)],\n        updateOn: 'change'\n      }),\n      description: new FormControl('')\n    });\n\n    this.form.patchValue({\n      name: this.data.name,\n      description: this.data.description\n    });\n  }\n\n  submit() {\n    if (this.form.invalid || this.isLoading) {\n      return;\n    }\n    this.isLoading = true;\n    const formValue = this.form.value;\n    const savedSearch: SavedSearch = {\n      name: formValue.name,\n      description: formValue.description,\n      encodedUrl: this.data.encodedUrl,\n      order: this.data.order\n    };\n    if (this.data.name === formValue.name && this.data.description === formValue.description) {\n      this.onEditSuccess();\n    }\n    this.savedSearchesService\n      .editSavedSearch(savedSearch)\n      .pipe(take(1))\n      .subscribe({\n        next: () => {\n          this.onEditSuccess();\n          this.isLoading = false;\n        },\n        error: () => {\n          this.notificationService.showError('APP.BROWSE.SEARCH.SAVE_SEARCH.EDIT_DIALOG.ERROR_MESSAGE');\n          this.isLoading = false;\n        }\n      });\n  }\n\n  private onEditSuccess(): void {\n    this.dialog.close();\n    this.notificationService.showInfo('APP.BROWSE.SEARCH.SAVE_SEARCH.EDIT_DIALOG.SUCCESS_MESSAGE');\n  }\n}\n","<div class=\"aca-saved-search-edit-dialog__header\">\n  <h2 class=\"aca-saved-search-edit-dialog__title\">{{\"APP.BROWSE.SEARCH.SAVE_SEARCH.EDIT_DIALOG.TITLE\" | translate}}</h2>\n  <button\n    mat-icon-button\n    mat-dialog-close\n    [attr.aria-label]=\"'CLOSE' | translate\"\n    [attr.title]=\"'CLOSE' | translate\">\n    <mat-icon>close</mat-icon>\n  </button>\n</div>\n\n<mat-dialog-content>\n  <form [formGroup]=\"form\" (submit)=\"submit()\">\n    <mat-form-field class=\"aca-saved-search-edit-dialog__form-field\">\n      <mat-label>{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.NAME_LABEL' | translate }}</mat-label>\n      <input\n          [attr.aria-label]=\"'APP.BROWSE.SEARCH.SAVE_SEARCH.NAME_LABEL' | translate\"\n          data-automation-id=\"saved-search-edit-name\"\n          matInput\n          required\n          [formControlName]=\"'name'\"\n          adf-auto-focus/>\n      @if (form.controls['name'].touched) {\n      <mat-error>\n        @if (form.controls['name'].errors?.required) {\n        <span>\n          {{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.NAME_REQUIRED_ERROR' | translate }}\n        </span>\n        }\n        @if (!form.controls['name'].errors?.required && form.controls['name'].errors?.message) {\n        <span>\n          {{ form.controls['name'].errors?.message | translate : { name: form.controls.name.value } }}\n        </span>\n        }\n      </mat-error>\n      }\n    </mat-form-field>\n\n    <mat-form-field class=\"aca-saved-search-edit-dialog__form-field\">\n      <mat-label>{{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.DESCRIPTION_LABEL' | translate }}</mat-label>\n      <textarea\n            matInput\n            data-automation-id=\"saved-search-edit-description\"\n            [attr.aria-label]=\"'APP.BROWSE.SEARCH.SAVE_SEARCH.DESCRIPTION_LABEL' | translate\"\n            rows=\"4\"\n            [formControlName]=\"'description'\"></textarea>\n    </mat-form-field>\n  </form>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n  <button mat-button\n          id=\"aca-saved-search-edit-dialog-cancel-button\"\n          mat-dialog-close> {{ 'CANCEL' | titlecase | translate }} </button>\n\n  <button mat-flat-button\n          color=\"primary\"\n          id=\"aca-saved-search-edit-dialog-submit-button\"\n          (click)=\"submit()\"\n          [disabled]=\"!form.valid || isLoading\">{{ 'SAVE' | titlecase | translate}}</button>\n</mat-dialog-actions>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SavedSearch } from '@alfresco/adf-content-services';\nimport { SavedSearchDeleteDialogComponent } from '../dialog/delete/saved-search-delete-dialog.component';\nimport { SavedSearchEditDialogComponent } from '../dialog/edit/saved-search-edit-dialog.component';\n\n@Injectable({ providedIn: 'root' })\nexport class SavedSearchesListUiService {\n  private readonly dialog = inject(MatDialog);\n\n  openEditSavedSearch(savedSearch: SavedSearch): void {\n    this.dialog\n      .open(SavedSearchEditDialogComponent, {\n        data: savedSearch,\n        width: '600px'\n      })\n      .afterClosed()\n      .subscribe(() => this.focusAfterClose(`.adf-datatable-cell--${savedSearch.name}`));\n  }\n\n  confirmDeleteSavedSearch(savedSearch: SavedSearch): void {\n    this.dialog\n      .open(SavedSearchDeleteDialogComponent, {\n        data: savedSearch,\n        minWidth: '500px'\n      })\n      .afterClosed()\n      .subscribe(() => this.focusAfterClose(`.adf-datatable-cell--${savedSearch.name}`));\n  }\n\n  private focusAfterClose(focusedElementSelector: string): void {\n    if (focusedElementSelector) {\n      document.querySelector<HTMLElement>(focusedElementSelector)?.closest<HTMLElement>('adf-datatable-row').focus();\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const savedSearchesListSchema = {\n  default: [\n    {\n      type: 'text',\n      key: 'name',\n      title: 'APP.BROWSE.SEARCH.SAVE_SEARCH.LIST.NAME',\n      class: 'adf-ellipsis-cell',\n      sortable: false,\n      draggable: false,\n      maxTextLength: 250\n    },\n    {\n      type: 'text',\n      key: 'description',\n      title: 'APP.BROWSE.SEARCH.SAVE_SEARCH.LIST.DESCRIPTION',\n      class: 'adf-ellipsis-cell',\n      sortable: false,\n      draggable: false,\n      maxTextLength: 250\n    }\n  ]\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n  AfterContentInit,\n  Component,\n  DestroyRef,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  inject,\n  Input,\n  Output,\n  ViewEncapsulation\n} from '@angular/core';\nimport {\n  DataCellEvent,\n  DATATABLE_DIRECTIVES,\n  DataTableComponent,\n  DataTableSchema,\n  NotificationService,\n  ShowHeaderMode,\n  TEMPLATE_DIRECTIVES\n} from '@alfresco/adf-core';\nimport { Subject } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SavedSearchesListUiService } from '../saved-searches-list-ui.service';\nimport { savedSearchesListSchema } from '../smart-list/saved-searches-list-schema';\nimport { SavedSearch } from '@alfresco/adf-content-services';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { Router } from '@angular/router';\n\n@Component({\n  selector: 'aca-saved-searches-ui-list',\n  imports: [CommonModule, DATATABLE_DIRECTIVES, TEMPLATE_DIRECTIVES, DataTableComponent],\n  templateUrl: './saved-searches-list.ui-component.html',\n  styleUrls: ['./saved-searches-list.ui-component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'aca-saved-searches-ui-list' }\n})\nexport class SavedSearchesListUiComponent extends DataTableSchema implements AfterContentInit {\n  @Input()\n  savedSearches: SavedSearch[] = [];\n\n  @Output()\n  savedSearchOrderChanged = new EventEmitter<{ previousIndex: number; currentIndex: number }>();\n\n  readonly ShowHeaderMode = ShowHeaderMode;\n\n  private readonly notificationService = inject(NotificationService);\n  private readonly savedSearchesListUiService = inject(SavedSearchesListUiService);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly contextMenuAction$ = new Subject<any>();\n  private readonly editSavedSearchOptionKey = 'edit';\n  private readonly deleteSavedSearchOptionKey = 'delete';\n  private readonly copyToClipboardUrlOptionKey = 'copy';\n  private readonly executeSearchOptionKey = 'execute';\n  private readonly menuOptions = [\n    {\n      icon: 'copy',\n      title: 'APP.BROWSE.SEARCH.SAVE_SEARCH.LIST.COPY_TO_CLIPBOARD',\n      key: this.copyToClipboardUrlOptionKey\n    },\n    {\n      icon: 'exit_to_app',\n      title: 'APP.BROWSE.SEARCH.SAVE_SEARCH.LIST.EXECUTE_SEARCH',\n      key: this.executeSearchOptionKey\n    },\n    {\n      icon: 'edit',\n      title: 'APP.BROWSE.SEARCH.SAVE_SEARCH.EDIT_DIALOG.CONTEXT_OPTION',\n      key: this.editSavedSearchOptionKey\n    },\n    {\n      icon: 'delete',\n      title: 'APP.BROWSE.SEARCH.SAVE_SEARCH.DELETE_DIALOG.CONTEXT_OPTION',\n      key: this.deleteSavedSearchOptionKey\n    }\n  ];\n\n  private readonly clipboard = inject(Clipboard);\n  private readonly router = inject(Router);\n  private readonly hostElement: ElementRef<HTMLElement> = inject(ElementRef);\n\n  constructor() {\n    super('', savedSearchesListSchema);\n  }\n\n  ngAfterContentInit() {\n    this.createDatatableSchema();\n    this.contextMenuAction$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((action) => this.executeMenuOption(action.key, action.data));\n  }\n\n  @HostListener('document:keydown.escape')\n  onEscapeKeydown() {\n    const contextMenu = document.querySelector<HTMLElement>('.adf-context-menu');\n    if (contextMenu) {\n      this.hostElement.nativeElement.querySelector<HTMLElement>('.adf-context-menu-source')?.focus();\n    }\n  }\n\n  onShowRowActionsMenu(event: DataCellEvent): void {\n    event.value.actions = this.menuOptions;\n  }\n\n  onSearchOrderChange(event: { previousIndex: number; currentIndex: number }): void {\n    this.savedSearchOrderChanged.next(event);\n  }\n\n  executeMenuOption(optionKey: string, savedSearchData: SavedSearch): void {\n    switch (optionKey) {\n      case this.editSavedSearchOptionKey:\n        this.openEditSavedSearchDialog(savedSearchData);\n        break;\n      case this.deleteSavedSearchOptionKey:\n        this.openDeleteSavedSearchDialog(savedSearchData);\n        break;\n      case this.copyToClipboardUrlOptionKey:\n        this.copyToClipboard(savedSearchData);\n        break;\n      case this.executeSearchOptionKey:\n        this.executeSearch(savedSearchData);\n        break;\n    }\n  }\n\n  openEditSavedSearchDialog(savedSearch: SavedSearch): void {\n    this.savedSearchesListUiService.openEditSavedSearch(savedSearch);\n  }\n\n  openDeleteSavedSearchDialog(savedSearch: SavedSearch): void {\n    this.savedSearchesListUiService.confirmDeleteSavedSearch(savedSearch);\n  }\n\n  copyToClipboard(savedSearch: SavedSearch): void {\n    this.clipboard.copy(this.getFullUrl(savedSearch.encodedUrl));\n    this.notificationService.showInfo('APP.BROWSE.SEARCH.SAVE_SEARCH.LIST.COPY_TO_CLIPBOARD_SUCCESS');\n  }\n\n  executeSearch(savedSearch: SavedSearch): void {\n    this.router.navigate(['/search'], {\n      queryParams: { q: decodeURIComponent(savedSearch.encodedUrl) }\n    });\n  }\n\n  fillContextMenu(event: DataCellEvent) {\n    event.value.actions = this.menuOptions.map((option) => ({\n      title: option.title,\n      key: option.key,\n      subject: this.contextMenuAction$,\n      model: {\n        visible: true,\n        icon: option.icon\n      },\n      data: event.value.row.obj\n    }));\n  }\n\n  private getFullUrl(path: string): string {\n    const baseUrl = window.location.origin;\n    return `${baseUrl}/#/search?q=${path}`;\n  }\n}\n","<adf-datatable\n  [rows]=\"savedSearches\"\n  [columns]=\"columns\"\n  [stickyHeader]=\"true\"\n  [showHeader]=\"ShowHeaderMode.Always\"\n  [enableDragRows]=\"true\"\n  [actionsVisibleOnHover]=\"true\"\n  [contextMenu]=\"true\"\n  [actions]=\"true\"\n  [isResizingEnabled]=\"false\"\n  [blurOnResize]=\"false\"\n  (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n  (dragDropped)=\"onSearchOrderChange($event)\"\n  (executeRowAction)=\"executeMenuOption($event.value.action.key, $event.value.row.obj)\"\n  (showRowContextMenu)=\"fillContextMenu($event)\" />\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SavedSearchesListUiComponent } from '../ui-list/saved-searches-list.ui-component';\nimport { PageComponent, PageLayoutComponent } from '@alfresco/aca-shared';\nimport { EmptyContentComponent } from '@alfresco/adf-core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { SavedSearchesContextService } from '../../../../../services/saved-searches-context.service';\n\n@Component({\n  selector: 'aca-saved-searches-smart-list',\n  imports: [CommonModule, TranslatePipe, SavedSearchesListUiComponent, PageLayoutComponent, EmptyContentComponent, MatProgressSpinnerModule],\n  templateUrl: './saved-searches-smart-list.component.html',\n  styleUrls: ['./saved-searches-smart-list.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class SavedSearchesSmartListComponent extends PageComponent {\n  savedSearchesService = inject(SavedSearchesContextService);\n\n  savedSearches$ = this.savedSearchesService.savedSearches$;\n\n  onOrderChanged(event: { previousIndex: number; currentIndex: number }): void {\n    this.savedSearchesService.changeOrder(event.previousIndex, event.currentIndex);\n  }\n}\n","<aca-page-layout>\n  <div class=\"aca-page-layout-header\">\n    <h1 class=\"aca-page-title\">\n      {{ 'APP.BROWSE.SEARCH.SAVE_SEARCH.LIST.TITLE' | translate }}\n    </h1>\n  </div>\n  <div *ngIf=\"savedSearches$ | async as savedSearches else spinner\"\n       class=\"aca-page-layout-content\">\n    <div class=\"aca-main-content\" >\n      <aca-saved-searches-ui-list *ngIf=\"savedSearches.length else emptyList\"\n                                  [savedSearches]=\"savedSearches\"\n                                  (savedSearchOrderChanged)=\"onOrderChanged($event)\"/>\n    </div>\n  </div>\n  <ng-template #emptyList>\n    <adf-empty-content\n            class=\"aca-page-layout-content\"\n            data-automation-id=\"'saved-search-list-empty-content'\"\n            icon=\"library_books\"\n            title=\"APP.BROWSE.SEARCH.SAVE_SEARCH.LIST.EMPTY_LIST\" />\n  </ng-template>\n</aca-page-layout>\n\n<ng-template #spinner>\n  <mat-progress-spinner\n    class=\"aca-page-layout-spinner\"\n    data-automation-id=\"'saved-search-list-spinner'\"\n    [color]=\"'primary'\"\n    [mode]=\"'indeterminate'\" />\n</ng-template>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ChangeDetectorRef, Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { Pagination, SitePaging } from '@alfresco/js-api';\nimport { UserPreferencesService } from '@alfresco/adf-core';\nimport { SitesService } from '@alfresco/adf-content-services';\nimport { LibrariesBaseComponent } from '../libraries-base/libraries-base.component';\n\n@Component({\n  selector: 'aca-library-list',\n  standalone: true,\n  templateUrl: './library-list.component.html',\n  imports: [LibrariesBaseComponent],\n  encapsulation: ViewEncapsulation.None\n})\nexport class LibraryListComponent extends LibrariesBaseComponent implements OnInit {\n  pagination = new Pagination({\n    skipCount: 0,\n    maxItems: 25,\n    totalItems: 0\n  });\n  isLoading = false;\n  list: SitePaging = null;\n\n  constructor(\n    private readonly preferences: UserPreferencesService,\n    private readonly changeDetectorRef: ChangeDetectorRef,\n    private readonly sitesService: SitesService\n  ) {\n    super();\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.getList({ maxItems: this.preferences.paginationSize });\n    this.subscriptions.push(\n      this.appHookService.libraryDeleted.subscribe(() => this.reloadList()),\n      this.appHookService.libraryUpdated.subscribe(() => this.reloadList()),\n      this.appHookService.libraryJoined.subscribe(() => this.reloadList()),\n      this.appHookService.libraryLeft.subscribe(() => this.reloadList())\n    );\n    this.columns = this.extensions.documentListPresets.libraries || [];\n  }\n\n  onChangePageSize(pagination: Pagination) {\n    this.preferences.paginationSize = pagination.maxItems;\n    this.getList(pagination);\n  }\n\n  getList(pagination: Pagination) {\n    this.isLoading = true;\n    this.sitesService.getSites(pagination).subscribe({\n      next: (libraryList: SitePaging) => {\n        this.list = libraryList;\n        this.pagination = libraryList.list.pagination;\n        this.isLoading = false;\n        this.changeDetectorRef.detectChanges();\n      },\n      error: () => {\n        this.list = null;\n        this.pagination = null;\n        this.isLoading = false;\n      }\n    });\n  }\n\n  private reloadList() {\n    this.reload();\n    this.getList(this.pagination);\n  }\n}\n","<aca-libraries-base\n  [list]=\"list\"\n  [isLoading]=\"isLoading\"\n  [pagination]=\"pagination\"\n  [columns]=\"columns\"\n  [titleKey]=\"'APP.BROWSE.LIBRARIES.MENU.ALL_LIBRARIES.TITLE'\"\n  [emptyTitleKey]=\"'APP.BROWSE.LIBRARIES.EMPTY_STATE.ALL_LIBRARIES.TITLE'\"\n  [emptySubtitleKey]=\"'APP.BROWSE.LIBRARIES.EMPTY_STATE.ALL_LIBRARIES.TEXT'\"\n  (changePageSize)=\"onChangePageSize($event)\"\n  (changePageNumber)=\"getList($event)\"\n  (nextPage)=\"getList($event)\"\n  (prevPage)=\"getList($event)\"\n/>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { FilesComponent } from './components/files/files.component';\nimport { LibrariesComponent } from './components/libraries/libraries.component';\nimport { FavoriteLibrariesComponent } from './components/favorite-libraries/favorite-libraries.component';\nimport { SearchResultsComponent } from './components/search/search-results/search-results.component';\nimport { SearchLibrariesResultsComponent } from './components/search/search-libraries-results/search-libraries-results.component';\nimport { AppSharedRuleGuard, ExtensionRoute, ExtensionsDataLoaderGuard, GenericErrorComponent, PluginEnabledGuard } from '@alfresco/aca-shared';\nimport { AuthGuard, UnsavedChangesGuard } from '@alfresco/adf-core';\nimport { FavoritesComponent } from './components/favorites/favorites.component';\nimport { RecentFilesComponent } from './components/recent-files/recent-files.component';\nimport { SharedFilesComponent } from './components/shared-files/shared-files.component';\nimport { DetailsComponent } from './components/details/details.component';\nimport { HomeComponent } from './components/home/home.component';\nimport { ViewProfileComponent } from './components/view-profile/view-profile.component';\nimport { ViewProfileRuleGuard } from './components/view-profile/view-profile.guard';\nimport { Data, Route, Routes } from '@angular/router';\nimport { SharedLinkViewComponent } from './components/shared-link-view/shared-link-view.component';\nimport { TrashcanComponent } from './components/trashcan/trashcan.component';\nimport { ShellLayoutComponent } from '@alfresco/adf-core/shell';\nimport { SearchAiResultsComponent } from './components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component';\nimport { SavedSearchesSmartListComponent } from './components/search/search-save/list/smart-list/saved-searches-smart-list.component';\nimport { LibraryListComponent } from './components/library-list/library-list.component';\n\nexport const CONTENT_ROUTES: ExtensionRoute[] = [\n  {\n    path: 'preview/s/:id',\n    children: [\n      {\n        path: '',\n        component: SharedLinkViewComponent,\n        data: {\n          title: 'APP.PREVIEW.TITLE'\n        }\n      }\n    ]\n  },\n  {\n    path: 'view',\n    component: ShellLayoutComponent,\n    children: [\n      {\n        path: ':nodeId',\n        outlet: 'viewer',\n        children: [\n          {\n            path: '',\n            loadChildren: () => import('@alfresco/aca-content/viewer').then((m) => m.AcaViewerModule)\n          }\n        ]\n      }\n    ]\n  }\n];\n\nconst createViewRoutes = (navigateSource: string, additionalData: Data = {}): Routes => [\n  {\n    path: 'view/:nodeId',\n    outlet: 'viewer',\n    children: [\n      {\n        path: '',\n        data: {\n          navigateSource\n        },\n        loadChildren: () => import('@alfresco/aca-content/viewer').then((m) => m.AcaViewerModule)\n      }\n    ],\n    ...additionalData\n  },\n  {\n    path: 'view/:nodeId/:versionId',\n    outlet: 'viewer',\n    children: [\n      {\n        path: '',\n        data: {\n          navigateSource\n        },\n        loadChildren: () => import('@alfresco/aca-content/viewer').then((m) => m.AcaViewerModule)\n      }\n    ]\n  }\n];\n\nexport const CONTENT_LAYOUT_ROUTES: Route[] = [\n  {\n    path: '',\n    canActivate: [ExtensionsDataLoaderGuard],\n    children: [\n      {\n        path: 'profile',\n        canActivate: [ViewProfileRuleGuard],\n        component: ViewProfileComponent\n      },\n      {\n        path: '',\n        component: HomeComponent\n      },\n      {\n        path: 'personal-files',\n        children: [\n          {\n            path: '',\n            component: FilesComponent,\n            data: {\n              sortingPreferenceKey: 'personal-files',\n              title: 'APP.BROWSE.PERSONAL.TITLE',\n              defaultNodeId: '-my-'\n            }\n          },\n          {\n            path: 'details/:nodeId',\n            children: [\n              {\n                path: '',\n                component: DetailsComponent,\n                data: {\n                  navigateSource: 'personal-files'\n                }\n              },\n              {\n                path: ':activeTab',\n                component: DetailsComponent,\n                data: {\n                  title: 'APP.BROWSE.PERSONAL.PERMISSIONS.TITLE',\n                  navigateSource: 'personal-files'\n                }\n              }\n            ]\n          },\n          ...createViewRoutes('personal-files')\n        ]\n      },\n      {\n        path: 'personal-files/:folderId',\n        children: [\n          {\n            path: '',\n            component: FilesComponent,\n            data: {\n              title: 'APP.BROWSE.PERSONAL.TITLE',\n              sortingPreferenceKey: 'personal-files'\n            }\n          },\n          ...createViewRoutes('personal-files')\n        ]\n      },\n      {\n        path: 'libraries',\n        children: [\n          {\n            path: '',\n            component: LibrariesComponent,\n            data: {\n              title: 'APP.BROWSE.LIBRARIES.MENU.MY_LIBRARIES.TITLE',\n              sortingPreferenceKey: 'libraries'\n            }\n          }\n        ]\n      },\n      {\n        path: 'libraries/:folderId',\n        children: [\n          {\n            path: '',\n            component: FilesComponent,\n            data: {\n              title: 'APP.BROWSE.LIBRARIES.MENU.MY_LIBRARIES.TITLE',\n              sortingPreferenceKey: 'libraries-files'\n            }\n          },\n          ...createViewRoutes('libraries', {\n            data: {\n              navigateSource: 'libraries'\n            }\n          })\n        ]\n      },\n      {\n        path: 'favorite',\n        children: [\n          {\n            path: '',\n            pathMatch: 'full',\n            redirectTo: 'libraries'\n          },\n          {\n            path: 'libraries',\n            component: FavoriteLibrariesComponent,\n            data: {\n              title: 'APP.BROWSE.LIBRARIES.MENU.FAVORITE_LIBRARIES.TITLE',\n              sortingPreferenceKey: 'favorite-libraries'\n            }\n          }\n        ]\n      },\n      {\n        path: 'favorite/libraries/:folderId',\n        children: [\n          {\n            path: '',\n            component: FilesComponent,\n            data: {\n              title: 'APP.BROWSE.LIBRARIES.MENU.FAVORITE_LIBRARIES.TITLE',\n              sortingPreferenceKey: 'libraries-files'\n            }\n          },\n          ...createViewRoutes('libraries')\n        ]\n      },\n      {\n        path: 'all',\n        children: [\n          {\n            path: '',\n            pathMatch: 'full',\n            redirectTo: 'libraries'\n          },\n          {\n            path: 'libraries',\n            component: LibraryListComponent,\n            data: {\n              title: 'APP.BROWSE.LIBRARIES.MENU.ALL_LIBRARIES.TITLE',\n              sortingPreferenceKey: 'all-libraries'\n            }\n          }\n        ]\n      },\n      {\n        path: 'favorites',\n        data: {\n          sortingPreferenceKey: 'favorites'\n        },\n        children: [\n          {\n            path: '',\n            component: FavoritesComponent,\n            data: {\n              title: 'APP.BROWSE.FAVORITES.TITLE',\n              sortingPreferenceKey: 'favorites'\n            }\n          },\n          ...createViewRoutes('favorites')\n        ]\n      },\n      {\n        path: 'recent-files',\n        data: {\n          sortingPreferenceKey: 'recent-files'\n        },\n        children: [\n          {\n            path: '',\n            component: RecentFilesComponent,\n            data: {\n              title: 'APP.BROWSE.RECENT.TITLE'\n            }\n          },\n          ...createViewRoutes('recent-files')\n        ]\n      },\n      {\n        path: 'shared',\n        children: [\n          {\n            path: '',\n            data: {\n              title: 'APP.BROWSE.SHARED.TITLE',\n              sortingPreferenceKey: 'shared-files'\n            },\n            component: SharedFilesComponent\n          },\n          ...createViewRoutes('shared')\n        ],\n        canActivateChild: [AppSharedRuleGuard],\n        canActivate: [AppSharedRuleGuard]\n      },\n      {\n        path: 'trashcan',\n        children: [\n          {\n            path: '',\n            component: TrashcanComponent,\n            data: {\n              title: 'APP.BROWSE.TRASHCAN.TITLE',\n              sortingPreferenceKey: 'trashcan'\n            }\n          }\n        ]\n      },\n      {\n        path: 'search',\n        children: [\n          {\n            path: '',\n            component: SearchResultsComponent,\n            data: {\n              title: 'APP.BROWSE.SEARCH.TITLE',\n              sortingPreferenceKey: 'search'\n            }\n          },\n          ...createViewRoutes('search')\n        ]\n      },\n      {\n        path: 'search-libraries',\n        children: [\n          {\n            path: '',\n            component: SearchLibrariesResultsComponent,\n            data: {\n              title: 'APP.BROWSE.SEARCH.TITLE',\n              sortingPreferenceKey: 'search-libraries'\n            }\n          },\n          {\n            path: 'view/:nodeId',\n            outlet: 'viewer',\n            children: [\n              {\n                path: '',\n                data: {\n                  navigateSource: 'search'\n                },\n                loadChildren: () => import('@alfresco/aca-content/viewer').then((m) => m.AcaViewerModule)\n              }\n            ]\n          }\n        ]\n      },\n      {\n        path: 'nodes/:nodeId',\n        children: [\n          {\n            path: '',\n            loadChildren: () => import('@alfresco/aca-content/folder-rules').then((m) => m.FOLDER_RULES_ROUTES)\n          }\n        ]\n      },\n      {\n        path: 'knowledge-retrieval',\n        canDeactivate: [UnsavedChangesGuard],\n        canActivate: [PluginEnabledGuard],\n        data: {\n          plugin: 'plugins.knowledgeRetrievalEnabled'\n        },\n        children: [\n          {\n            path: '',\n            component: SearchAiResultsComponent\n          },\n          ...createViewRoutes('knowledge-retrieval')\n        ]\n      },\n      {\n        path: 'saved-searches',\n        children: [\n          {\n            path: '',\n            component: SavedSearchesSmartListComponent\n          }\n        ]\n      },\n      {\n        path: '**',\n        component: GenericErrorComponent\n      }\n    ],\n    canActivateChild: [AuthGuard]\n  }\n];\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { AppStore, getFileUploadingDialog } from '@alfresco/aca-shared/store';\nimport { CommonModule } from '@angular/common';\nimport { UploadModule } from '@alfresco/adf-content-services';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, UploadModule],\n  selector: 'aca-upload-files-dialog',\n  templateUrl: './upload-files-dialog.component.html',\n  encapsulation: ViewEncapsulation.None\n})\nexport class UploadFilesDialogComponent {\n  showFileUploadingDialog$: Observable<boolean>;\n\n  constructor(private store: Store<AppStore>) {\n    this.showFileUploadingDialog$ = this.store.select(getFileUploadingDialog).pipe(delay(0), takeUntilDestroyed());\n  }\n}\n","<adf-file-uploading-dialog *ngIf=\"showFileUploadingDialog$ | async\" position=\"left\" />","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ChangeDetectorRef, Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { TagNodeListComponent } from '@alfresco/adf-content-services';\n\n@Component({\n  imports: [TagNodeListComponent],\n  selector: 'aca-tags-column',\n  template: `<adf-tag-node-list [showDelete]=\"false\" [limitTagsDisplayed]=\"true\" [nodeId]=\"nodeId\" (results)=\"onTagsLoaded()\" />`,\n  styleUrls: ['./tags-column.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'adf-datatable-content-cell aca-tags-name-column'\n  }\n})\nexport class TagsColumnComponent implements OnInit {\n  @Input()\n  context: any;\n\n  nodeId: string;\n\n  constructor(private cd: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this.nodeId = this.context?.row?.id;\n  }\n\n  onTagsLoaded(): void {\n    this.cd.detectChanges();\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, inject, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatMenuItem, MatMenuModule } from '@angular/material/menu';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { UserProfileService } from '@alfresco/aca-shared';\n\n@Component({\n  imports: [CommonModule, RouterModule, MatMenuModule, TranslatePipe],\n  selector: 'app-user-info',\n  templateUrl: './user-info.component.html',\n  styleUrls: ['./user-info.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class UserInfoComponent {\n  private userProfileService = inject(UserProfileService);\n\n  @ViewChild(MatMenuItem)\n  menuItem: MatMenuItem;\n\n  user$ = this.userProfileService.userProfile$;\n}\n","<button mat-menu-item class=\"aca-user-info\" [routerLink]=\"['/profile']\" title=\"{{ 'APP.TOOLTIPS.MY_PROFILE' | translate }}\">\n  <ng-container *ngIf=\"user$ | async as user\">\n    <div class=\"aca-user-info-content\">\n      <button class=\"aca-user-info-button\">\n        <div>{{ user.initials || 'U' }}</div>\n      </button>\n      <div class=\"aca-user-info-details\">\n        <div>{{ user.userName }}</div>\n        <div>{{ user.email }}</div>\n      </div>\n    </div>\n  </ng-container>\n</button>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, EventEmitter, inject, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ContentActionRef } from '@alfresco/adf-extensions';\nimport { AppExtensionService, AppSettingsService, ToolbarComponent } from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { RouterModule } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, RouterModule, ToolbarComponent],\n  selector: 'app-sidenav-header',\n  templateUrl: `./sidenav-header.component.html`,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-sidenav-header' }\n})\nexport class SidenavHeaderComponent implements OnInit {\n  private appSettings = inject(AppSettingsService);\n  private appExtensions = inject(AppExtensionService);\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  appName = this.appSettings.appName;\n  logoUrl = this.appSettings.appLogoUrl;\n  landingPage = this.appSettings.landingPage;\n  actions: Array<ContentActionRef> = [];\n\n  @Output()\n  toggleNavBar = new EventEmitter();\n\n  ngOnInit() {\n    this.appExtensions\n      .getHeaderActions()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((actions) => {\n        this.actions = actions;\n      });\n  }\n}\n","<div class=\"aca-sidenav-header\" data-automation-id=\"app-sidenav-header\">\n  <div class=\"aca-sidenav-header-title\" data-automation-id=\"app-sidenav-header-title\">\n    <button\n      class=\"aca-sidenav-header-title-logo\"\n      data-automation-id=\"app-sidenav-header-title-logo\"\n      (click)=\"toggleNavBar.emit()\"\n      (keypress)=\"toggleNavBar.emit()\"\n      [attr.aria-label]=\"'APP.TOOLTIPS.COLLAPSE_NAVIGATION' | translate\">\n      <img\n        src=\"{{ logoUrl }}\"\n        title=\"{{ 'APP.TOOLTIPS.COLLAPSE_NAVIGATION' | translate }}\"\n        alt=\"{{ 'APP.TOOLTIPS.COLLAPSE_NAVIGATION_ALT' | translate }}\"\n        aria-hidden=\"true\"\n      />\n    </button>\n\n    <div\n      class=\"aca-sidenav-header-title-text\"\n      data-automation-id=\"app-sidenav-header-title-text\"\n      [routerLink]=\"landingPage\">\n      {{ appName | translate }}\n    </div>\n\n    <aca-toolbar [items]=\"actions\" />\n  </div>\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';\nimport { Params, PRIMARY_OUTLET, Router } from '@angular/router';\nimport { Store } from '@ngrx/store';\nimport { AppStore } from '@alfresco/aca-shared/store';\nimport { NavBarLinkRef } from '@alfresco/adf-extensions';\n\n@Directive({\n  standalone: true,\n  /* eslint-disable-next-line */\n  selector: '[action]',\n  exportAs: 'action'\n})\nexport class ActionDirective {\n  @Input() action;\n\n  @Output() actionClicked = new EventEmitter<NavBarLinkRef>();\n\n  @HostListener('click')\n  onClick() {\n    if (this.action.url) {\n      this.router.navigate(this.getNavigationCommands(this.action.url), { queryParams: this.getNavigationQueryParams(this.action.url) });\n    } else if (this.action.click) {\n      this.store.dispatch({\n        type: this.action.click.action,\n        payload: this.getNavigationCommands(this.action.click.payload)\n      });\n    }\n    this.actionClicked.next(this.action);\n  }\n\n  constructor(\n    private router: Router,\n    private store: Store<AppStore>\n  ) {}\n  private getNavigationCommands(url: string): any[] {\n    const urlTree = this.router.parseUrl(url);\n    const urlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET];\n\n    if (!urlSegmentGroup) {\n      return [url];\n    }\n\n    const urlSegments = urlSegmentGroup.segments;\n\n    return urlSegments.reduce(function (acc, item) {\n      acc.push(item.path, item.parameters);\n      return acc;\n    }, []);\n  }\n\n  private getNavigationQueryParams(url: string): Params {\n    return this.router.parseUrl(url).queryParams;\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n  AfterContentInit,\n  ContentChildren,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  OnInit,\n  Optional,\n  QueryList,\n  Renderer2\n} from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ActionDirective } from './action.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n  standalone: true,\n  selector: '[acaActiveLink]',\n  exportAs: 'acaActiveLink'\n})\nexport class ActiveLinkDirective implements OnInit, AfterContentInit {\n  @Input() acaActiveLink;\n  @ContentChildren(ActionDirective, { descendants: true })\n  links: QueryList<ActionDirective>;\n  isLinkActive = false;\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private router: Router,\n    private element: ElementRef,\n    private renderer: Renderer2,\n    @Optional() private action?: ActionDirective\n  ) {}\n\n  ngOnInit() {\n    this.router.events\n      .pipe(\n        filter((event) => event instanceof NavigationEnd),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((event: NavigationEnd) => {\n        this.update(event.urlAfterRedirects);\n      });\n  }\n\n  private update(url: string) {\n    if (this.action) {\n      const itemUrl = this.resolveUrl(this.action);\n      this.render(url, itemUrl);\n    }\n\n    this.links.map((item) => {\n      const itemUrl = this.resolveUrl(item);\n      this.render(url, itemUrl);\n    });\n  }\n\n  private render(routerUrl: string, actionUrl: string) {\n    if (routerUrl?.substring(1).startsWith(actionUrl)) {\n      this.isLinkActive = true;\n      this.renderer.addClass(this.element.nativeElement, this.acaActiveLink);\n    } else {\n      this.isLinkActive = false;\n      this.renderer.removeClass(this.element.nativeElement, this.acaActiveLink);\n    }\n  }\n\n  ngAfterContentInit() {\n    this.links.changes.subscribe(() => this.update(this.router.url));\n    this.update(this.router.url);\n  }\n\n  private resolveUrl(item): string {\n    return item.action?.click?.payload || item.action?.route;\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { NavBarLinkRef } from '@alfresco/adf-extensions';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IconComponent } from '@alfresco/adf-core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { ActiveLinkDirective } from '../directives/active-link.directive';\nimport { ActionDirective } from '../directives/action.directive';\nimport { MatExpansionModule } from '@angular/material/expansion';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, IconComponent, MatButtonModule, ActiveLinkDirective, ActionDirective, MatExpansionModule],\n  selector: 'app-expand-menu',\n  encapsulation: ViewEncapsulation.None,\n  templateUrl: './expand-menu.component.html',\n  host: { class: 'app-expand-menu' }\n})\nexport class ExpandMenuComponent implements OnInit {\n  @Input({ required: true })\n  item: NavBarLinkRef;\n\n  @Output()\n  actionClicked = new EventEmitter<NavBarLinkRef>();\n\n  constructor(private cd: ChangeDetectorRef) {}\n\n  ngOnInit() {\n    this.cd.detectChanges();\n  }\n\n  trackById(_index: number, obj: NavBarLinkRef) {\n    return obj.id;\n  }\n}\n","<ng-container *ngIf=\"!item.children\">\n  <div class=\"aca-expansion-panel-item\">\n    <button\n      acaActiveLink=\"aca-action-button--active\"\n      [action]=\"item\"\n      [attr.aria-label]=\"item.title | translate\"\n      [id]=\"item.id\"\n      [attr.data-automation-id]=\"item.id\"\n      [attr.title]=\"item.description | translate\"\n      mat-button\n      class=\"aca-action-button aca-full-width\"\n    >\n      <adf-icon *ngIf=\"item.icon\" [value]=\"item.icon\" />\n      <span class=\"action-button__label\">{{ item.title | translate }}</span>\n    </button>\n  </div>\n</ng-container>\n\n<ng-container *ngIf=\"item.children && item.children.length\">\n  <mat-expansion-panel\n    class=\"aca-expansion-panel\"\n    [expanded]=\"true\"\n    [@.disabled]=\"true\"\n  >\n    <mat-expansion-panel-header expandedHeight=\"32px\" collapsedHeight=\"32px\" class=\"aca-expansion-panel-header\">\n      <mat-panel-title class=\"aca-expansion-panel-header-title\">\n        <div class=\"aca-expansion-panel-item\">\n          <span\n            [attr.aria-label]=\"item.title | translate\"\n            [id]=\"item.id\"\n            [attr.title]=\"item.description | translate\"\n            [attr.data-automation-id]=\"item.id\"\n            class=\"aca-action-button aca-full-width\"\n          >\n            <adf-icon *ngIf=\"item.icon\" [value]=\"item.icon\" />\n            <span class=\"aca-action-button__label\">{{ item.title | translate }}</span>\n          </span>\n        </div>\n      </mat-panel-title>\n    </mat-expansion-panel-header>\n    <ul class=\"aca-expansion-panel-body\" [attr.aria-label]=\"item.title | translate\">\n      <li *ngFor=\"let child of item.children; trackBy: trackById\" class=\"aca-expansion-panel-item\">\n        <button\n          acaActiveLink=\"aca-action-button--active\"\n          [action]=\"child\"\n          (actionClicked)=\"actionClicked.emit($event)\"\n          [attr.aria-label]=\"child.title | translate\"\n          [id]=\"child.id\"\n          [attr.data-automation-id]=\"child.id\"\n          [attr.title]=\"child.description | translate\"\n          mat-button\n          class=\"aca-action-button aca-full-width\"\n        >\n          <adf-icon *ngIf=\"child.icon\" [value]=\"child.icon\" />\n          <span class=\"aca-action-button__label\">{{ child.title | translate }}</span>\n        </button>\n      </li>\n    </ul>\n  </mat-expansion-panel>\n</ng-container>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { DynamicExtensionComponent, NavBarGroupRef, NavBarLinkRef } from '@alfresco/adf-extensions';\nimport { Store } from '@ngrx/store';\nimport { AppStore, getSideNavState } from '@alfresco/aca-shared/store';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { AppExtensionService, AppService, NavigationHistoryService } from '@alfresco/aca-shared';\nimport { SidenavLayoutComponent } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { SidenavHeaderComponent } from './components/sidenav-header.component';\nimport { MatListModule } from '@angular/material/list';\nimport { ExpandMenuComponent } from './components/expand-menu.component';\nimport { NavigationEnd } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n  imports: [CommonModule, SidenavHeaderComponent, MatListModule, ExpandMenuComponent, DynamicExtensionComponent, TranslatePipe],\n  selector: 'app-sidenav',\n  templateUrl: './sidenav.component.html',\n  styleUrls: ['./sidenav.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-sidenav' }\n})\nexport class SidenavComponent implements OnInit {\n  @Input()\n  data: {\n    layout?: SidenavLayoutComponent;\n    mode?: 'collapsed' | 'expanded';\n  } = {};\n\n  groups: Array<NavBarGroupRef> = [];\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private store: Store<AppStore>,\n    private extensions: AppExtensionService,\n    private appService: AppService,\n    private navigationHistoryService: NavigationHistoryService\n  ) {}\n\n  ngOnInit() {\n    this.store\n      .select(getSideNavState)\n      .pipe(debounceTime(300), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this.groups = this.extensions.getApplicationNavigation(this.extensions.navbar);\n      });\n\n    this.appService.setAppNavbarMode(this.data.mode);\n    this.appService.toggleAppNavBar$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.toggleNavBar());\n    this.data.layout.expanded.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.setNavBarMode());\n    this.navigationHistoryService\n      .listenToRouteChanges()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((event: NavigationEnd) => {\n        this.navigationHistoryService.setHistory(event);\n      });\n  }\n\n  trackByGroupId(_: number, obj: NavBarGroupRef): string {\n    return obj.id;\n  }\n\n  trackByLinkId(_: number, obj: NavBarLinkRef): string {\n    return obj.id;\n  }\n\n  toggleClick() {\n    this.toggleNavBar();\n  }\n\n  private setNavBarMode() {\n    this.appService.setAppNavbarMode(this.data.layout.isMenuMinimized || this.data.layout.isHeaderInside ? 'collapsed' : 'expanded');\n  }\n\n  private toggleNavBar() {\n    this.data.layout.toggleMenu();\n    this.setNavBarMode();\n  }\n}\n","<div class=\"aca-sidenav\">\n  <app-sidenav-header (toggleNavBar)=\"toggleClick()\" />\n\n  <div class=\"aca-sidenav__section\">\n    <div *ngFor=\"let group of groups; trackBy: trackByGroupId\" class=\"aca-sidenav__section__actions\">\n      <nav\n        [attr.aria-label]=\"item.title | translate\"\n        class=\"aca-sidenav__section__actions__item\"\n        *ngFor=\"let item of group.items; trackBy: trackByLinkId\"\n      >\n        <ng-container *ngIf=\"!item.component\">\n          <app-expand-menu [item]=\"item\" />\n        </ng-container>\n        <ng-container *ngIf=\"item.component\">\n          <adf-dynamic-component [data]=\"{ item: item, state: 'expanded' }\" [id]=\"item.component\" />\n        </ng-container>\n      </nav>\n    </div>\n  </div>\n</div>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { AfterViewInit, Component, inject, Input, OnInit, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { ContentActionRef } from '@alfresco/adf-extensions';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatMenu, MatMenuItem, MatMenuModule } from '@angular/material/menu';\nimport { ToolbarMenuItemComponent, UserProfileService } from '@alfresco/aca-shared';\n\n@Component({\n  imports: [CommonModule, TranslatePipe, MatButtonModule, MatMenuModule, ToolbarMenuItemComponent],\n  selector: 'aca-user-menu',\n  templateUrl: './user-menu.component.html',\n  styleUrls: ['./user-menu.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'aca-user-menu' }\n})\nexport class UserMenuComponent implements OnInit, AfterViewInit {\n  private userProfileService = inject(UserProfileService);\n\n  user$ = this.userProfileService.userProfile$;\n\n  @Input()\n  actionRef: ContentActionRef;\n\n  @Input()\n  data: { items: any[] };\n\n  @ViewChild(MatMenu)\n  menu: MatMenu;\n\n  @ViewChildren(ToolbarMenuItemComponent)\n  toolbarMenuItems: QueryList<ToolbarMenuItemComponent>;\n\n  ngOnInit() {\n    if (this.data?.items) {\n      this.data.items.sort((a, b) => a.order - b.order);\n    }\n  }\n\n  ngAfterViewInit() {\n    const menuItems = this.toolbarMenuItems.map((toolbarMenuItem) => toolbarMenuItem.menuItem).filter((menuItem) => menuItem !== undefined);\n\n    const menuItemsQueryList = new QueryList<MatMenuItem>();\n    menuItemsQueryList.reset(menuItems);\n    this.menu._allItems = menuItemsQueryList;\n    this.menu.ngAfterContentInit();\n  }\n}\n","<button mat-button\n  class=\"aca-user-menu-button\"\n  data-automation-id=\"app-user-menu-button\"\n  [matMenuTriggerFor]=\"menu\"\n  title=\"{{'APP.TOOLTIPS.OPTIONS_SETTINGS' | translate}}\"\n>\n  <div>{{ (user$ | async)?.initials }}</div>\n</button>\n\n<mat-menu #menu=\"matMenu\" xPosition=\"before\">\n  <ng-container *ngFor=\"let item of data.items\">\n    <app-toolbar-menu-item [actionRef]=\"item\" />\n  </ng-container>\n</mat-menu>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NodeEntry, SearchEntryHighlight } from '@alfresco/js-api';\nimport { NavigateToFolder, ViewNodeAction } from '@alfresco/aca-shared/store';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject } from 'rxjs';\nimport { NodesApiService } from '@alfresco/adf-content-services';\nimport { Router } from '@angular/router';\nimport { AppSettingsService, AutoDownloadService } from '@alfresco/aca-shared';\nimport { CommonModule } from '@angular/common';\nimport { LocationLinkComponent } from '../../common/location-link/location-link.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DatatableCellBadgesComponent } from '../../dl-custom-components/datatable-cell-badges/datatable-cell-badges.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, LocationLinkComponent, MatDialogModule, DatatableCellBadgesComponent],\n  selector: 'aca-search-results-row',\n  templateUrl: './search-results-row.component.html',\n  styleUrls: ['./search-results-row.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'aca-search-results-row' }\n})\nexport class SearchResultsRowComponent implements OnInit {\n  private settings = inject(AppSettingsService);\n\n  private readonly highlightPrefix = `<span class=\"aca-highlight\">`;\n  private readonly highlightPostfix = `</span>`;\n\n  private readonly highlightOpenEscapedRegex = /&lt;span class=(['\"])aca-highlight\\1&gt;/g;\n  private readonly highlightCloseEscapedRegex = /&lt;\\/span&gt;/g;\n\n  private readonly highlightOpenRawRegex = /<span class=(['\"])aca-highlight\\1>/g;\n  private readonly highlightCloseRawRegex = /<\\/span>/g;\n\n  private readonly escapeMap: Record<string, string> = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;'\n  };\n\n  private node: NodeEntry;\n\n  @Input({ required: true })\n  context: any;\n\n  name$ = new BehaviorSubject<string>('');\n  title$ = new BehaviorSubject<string>('');\n  description$ = new BehaviorSubject<string>('');\n  content$ = new BehaviorSubject<string>('');\n  nameStripped = '';\n  titleStripped = '';\n  descriptionStripped = '';\n  contentStripped = '';\n  isFile = false;\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private store: Store<any>,\n    private nodesApiService: NodesApiService,\n    private router: Router,\n    private autoDownloadService: AutoDownloadService\n  ) {}\n\n  ngOnInit() {\n    this.updateValues();\n\n    this.nodesApiService.nodeUpdated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((node) => {\n      const row = this.context.row;\n      if (row) {\n        const { entry } = row.node;\n\n        if (entry.id === node.id) {\n          entry.name = node.name;\n          entry.properties = { ...node.properties };\n\n          this.updateValues();\n        }\n      }\n    });\n  }\n\n  private updateValues() {\n    this.node = this.context.row.node;\n    this.isFile = this.node.entry.isFile;\n\n    const highlights: SearchEntryHighlight[] = this.node.entry['search']?.['highlight'];\n    let name = this.node.entry.name;\n    const properties = this.node.entry.properties;\n    let title = properties?.['cm:title'] || '';\n    let description = properties?.['cm:description'] || '';\n    let content = '';\n\n    highlights?.forEach((highlight) => {\n      switch (highlight.field) {\n        case 'cm:name':\n          name = highlight.snippets[0];\n          break;\n        case 'cm:title':\n          title = highlight.snippets[0];\n          break;\n        case 'cm:description':\n          description = highlight.snippets[0];\n          break;\n        case 'cm:content':\n          content = `...${highlight.snippets[0]}...`;\n          break;\n        default:\n          break;\n      }\n    });\n\n    const safeName = this.sanitizeAndHighlight(name);\n    const safeDescription = this.sanitizeAndHighlight(description);\n    const safeContent = this.sanitizeAndHighlight(content);\n\n    this.name$.next(safeName);\n    this.description$.next(safeDescription);\n    this.content$.next(safeContent);\n\n    this.nameStripped = this.stripHighlighting(name);\n    this.titleStripped = this.stripHighlighting(title);\n    this.descriptionStripped = this.stripHighlighting(description);\n    this.contentStripped = this.stripHighlighting(content);\n\n    if (title && title !== name) {\n      const safeTitle = this.sanitizeAndHighlight(` ( ${title} )`);\n      this.title$.next(safeTitle);\n      this.titleStripped = this.stripHighlighting(title);\n    } else {\n      this.title$.next('');\n    }\n  }\n\n  showPreview(event: Event) {\n    event.stopPropagation();\n\n    if (!this.settings.autoDownloadEnabled || !this.autoDownloadService.tryDownload(this.node, this.settings.authDownloadThreshold)) {\n      this.store.dispatch(new ViewNodeAction(this.node.entry.id, { location: this.router.url }));\n    }\n  }\n\n  navigate(event: Event) {\n    event.stopPropagation();\n    this.store.dispatch(new NavigateToFolder(this.node));\n  }\n\n  private stripHighlighting(input: string): string {\n    if (!input) {\n      return '';\n    }\n    return input.replace(this.highlightOpenRawRegex, '').replace(this.highlightCloseRawRegex, '');\n  }\n\n  private sanitizeAndHighlight(value: string | null | undefined): string {\n    if (!value) {\n      return '';\n    }\n\n    let escaped = value.replace(/[&<>]/g, (char) => this.escapeMap[char] ?? char);\n\n    escaped = escaped.replace(this.highlightOpenEscapedRegex, this.highlightPrefix).replace(this.highlightCloseEscapedRegex, this.highlightPostfix);\n\n    return escaped;\n  }\n}\n","<div class=\"aca-search-results-text\">\n  <div class=\"search-file-name\">\n    <span\n      tabindex=\"0\"\n      role=\"link\"\n      *ngIf=\"isFile\"\n      (click)=\"showPreview($event)\"\n      (keyup.enter)=\"showPreview($event)\"\n      class=\"aca-link aca-crop-text\"\n      [title]=\"nameStripped\"\n      [innerHTML]=\"name$ | async\"\n    ></span>\n    <span\n      tabindex=\"0\"\n      role=\"link\"\n      *ngIf=\"!isFile\"\n      (click)=\"navigate($event)\"\n      (keyup.enter)=\"navigate($event)\"\n      class=\"bold aca-link aca-crop-text\"\n      [title]=\"nameStripped\"\n      [innerHTML]=\"name$ | async\"\n    ></span>\n    <span\n      data-automation-id=\"search-results-entry-title\"\n      class=\"aca-crop-text\"\n      [title]=\"titleStripped\"\n      [innerHTML]=\"title$ | async\"\n    ></span>\n  </div>\n  <div\n    data-automation-id=\"search-results-entry-description\"\n    class=\"aca-crop-text\"\n    [title]=\"descriptionStripped\"\n    [innerHTML]=\"description$ | async\"\n  ></div>\n  <div class=\"aca-result-location\">\n    <aca-location-link [context]=\"context\" [showLocation]=\"true\" />\n  </div>\n  <div class=\"aca-result-content aca-crop-text\" [title]=\"contentStripped\" [innerHTML]=\"content$ | async\"></div>\n</div>\n<aca-datatable-cell-badges [node]=\"context.row.node\" />\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ChangeDetectorRef, Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SelectionState } from '@alfresco/adf-extensions';\nimport { Store } from '@ngrx/store';\nimport { AppStore, getAppSelection } from '@alfresco/aca-shared/store';\nimport { AvatarComponent, IconComponent, NotificationService } from '@alfresco/adf-core';\nimport { forkJoin, throwError } from 'rxjs';\nimport { catchError, take } from 'rxjs/operators';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatListModule, MatSelectionListChange } from '@angular/material/list';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { Agent } from '@alfresco/js-api';\nimport { AgentService, SearchAiService } from '@alfresco/adf-content-services';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, MatMenuModule, MatListModule, TranslatePipe, AvatarComponent, IconComponent, MatTooltipModule],\n  selector: 'aca-agents-button',\n  templateUrl: './agents-button.component.html',\n  styleUrls: ['./agents-button.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'aca-agents-button' }\n})\nexport class AgentsButtonComponent implements OnInit {\n  @Input()\n  data: { trigger: string };\n\n  private selectedNodesState: SelectionState;\n  private _agents: Agent[] = [];\n  private _disabled = true;\n  private _initialsByAgentId: { [key: string]: string } = {};\n  private _hxInsightUrl: string;\n\n  get agents(): Agent[] {\n    return this._agents;\n  }\n\n  get disabled(): boolean {\n    return this._disabled;\n  }\n\n  get initialsByAgentId(): { [key: string]: string } {\n    return this._initialsByAgentId;\n  }\n\n  get hxInsightUrl(): string {\n    return this._hxInsightUrl;\n  }\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private store: Store<AppStore>,\n    private notificationService: NotificationService,\n    private searchAiService: SearchAiService,\n    private agentService: AgentService,\n    private translateService: TranslateService,\n    private cd: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    this.store\n      .select(getAppSelection)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((selection) => {\n        this.selectedNodesState = selection;\n      });\n    forkJoin({\n      agents: this.agentService.getAgents().pipe(\n        take(1),\n        catchError(() => throwError('KNOWLEDGE_RETRIEVAL.SEARCH.ERRORS.AGENTS_FETCHING'))\n      ),\n      config: this.searchAiService.getConfig().pipe(catchError(() => throwError('KNOWLEDGE_RETRIEVAL.SEARCH.ERRORS.HX_INSIGHT_URL_FETCHING')))\n    }).subscribe(\n      (result) => {\n        this._hxInsightUrl = result.config.entry.knowledgeRetrievalUrl;\n        this._agents = result.agents;\n\n        this.cd.detectChanges();\n\n        if (this.agents.length) {\n          this._initialsByAgentId = this.agents.reduce((initials, agent) => {\n            const words = agent.name.split(' ').filter((word) => !word.match(/[^a-zA-Z]+/g));\n            initials[agent.id] = `${words[0][0]}${words[1]?.[0] || ''}`;\n            return initials;\n          }, {});\n        }\n      },\n      (error: string) => this.notificationService.showError(this.translateService.instant(error))\n    );\n  }\n\n  onClick(): void {\n    if (!this.selectedNodesState.isEmpty) {\n      const message = this.searchAiService.checkSearchAvailability(this.selectedNodesState);\n      if (message) {\n        this.notificationService.showError(message);\n      }\n      this._disabled = !!message;\n      return;\n    }\n    this._disabled = true;\n    open(this.hxInsightUrl);\n  }\n\n  onAgentSelection(change: MatSelectionListChange): void {\n    this.store.dispatch({\n      type: this.data.trigger,\n      agentId: change.options[0].value.id\n    });\n    change.source.deselectAll();\n  }\n}\n","<ng-container *ngIf=\"agents.length && hxInsightUrl\">\n  <button\n    [matMenuTriggerFor]=\"disabled ? null : agentsList\"\n    class=\"aca-agents-menu-button aca-agents-button-menu-trigger\"\n    (mouseup)=\"onClick()\"\n    (keydown.enter)=\"onClick()\"\n    data-automation-id=\"aca-agents-button\">\n    <adf-icon\n      value=\"adf:colored-stars-ai\"\n      class=\"aca-agents-button-icon\" />\n    {{ 'KNOWLEDGE_RETRIEVAL.SEARCH.AGENTS_BUTTON.LABEL' | translate}}\n  </button>\n  <mat-menu\n    #agentsList=\"matMenu\"\n    class=\"aca-agents-button-menu\"\n    xPosition=\"before\">\n    <mat-selection-list\n      (selectionChange)=\"onAgentSelection($event)\"\n      [multiple]=\"false\"\n      class=\"aca-agents-button-menu-list\"\n      [hideSingleSelectionIndicator]=\"true\">\n      <mat-list-option\n        *ngFor=\"let agent of agents\"\n        class=\"aca-agents-button-menu-list-agent\"\n        [attr.data-automation-id]=\"'aca-agents-button-agent-' + agent.id\"\n        [value]=\"agent\">\n        <div class=\"aca-agents-button-menu-list-agent-content\">\n          <adf-avatar [src]=\"agent?.avatarUrl\" [initials]=\"initialsByAgentId[agent.id]\" />\n          <span class=\"aca-agents-button-menu-list-agent-content-name\" [matTooltip]=\"agent.name\" [matTooltipPosition]=\"'right'\">\n           {{ agent.name }}\n          </span>\n        </div>\n      </mat-list-option>\n    </mat-selection-list>\n  </mat-menu>\n</ng-container>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { SavedSearch } from '@alfresco/adf-content-services';\nimport { TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';\nimport { NavBarLinkRef } from '@alfresco/adf-extensions';\nimport { ExpandMenuComponent } from '../../../sidenav/components/expand-menu.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { delay } from 'rxjs/operators';\nimport { SavedSearchesContextService } from '../../../../services/saved-searches-context.service';\n\n@Component({\n  selector: 'aca-save-search-sidenav',\n  imports: [ExpandMenuComponent],\n  templateUrl: './save-search-sidenav.component.html',\n  encapsulation: ViewEncapsulation.None\n})\nexport class SaveSearchSidenavComponent implements OnInit {\n  savedSearchesService = inject(SavedSearchesContextService);\n  translationService = inject(TranslationService);\n  item: NavBarLinkRef;\n\n  private savedSearchCount = 0;\n  private savedSearches: SavedSearch[];\n\n  private readonly manageSearchesId = 'manage-saved-searches';\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly userPreferenceService = inject(UserPreferencesService);\n\n  ngOnInit() {\n    this.savedSearchesService.init();\n    this.savedSearchesService.savedSearches$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((savedSearches) => {\n      this.item = this.createNavBarLinkRef(savedSearches);\n      this.savedSearchCount = savedSearches.length;\n      this.savedSearches = savedSearches;\n    });\n    this.userPreferenceService\n      .select(UserPreferenceValues.Locale)\n      .pipe(takeUntilDestroyed(this.destroyRef), delay(10))\n      .subscribe(() => {\n        if (this.item) {\n          this.item.title = this.translationService.instant('APP.BROWSE.SEARCH.SAVE_SEARCH.NAVBAR.TITLE', { number: this.savedSearchCount });\n        }\n      });\n  }\n\n  onActionClicked(selectedLinkRef: NavBarLinkRef): void {\n    const selectedSavedSearch = this.savedSearches?.find((savedSearch) => savedSearch.name === selectedLinkRef.title);\n    this.savedSearchesService.currentContextSavedSearch = selectedSavedSearch;\n  }\n\n  private createNavBarLinkRef(children: SavedSearch[]): NavBarLinkRef {\n    const mappedChildren = children\n      .map((child) => ({\n        id: 'search' + child.name,\n        icon: '',\n        title: child.name,\n        description: child.name,\n        route: `search?q=${child.encodedUrl}`,\n        url: `search?q=${child.encodedUrl}`\n      }))\n      .slice(0, 5);\n    const title = this.translationService.instant('APP.BROWSE.SEARCH.SAVE_SEARCH.NAVBAR.TITLE', { number: children.length });\n    mappedChildren.push({\n      id: this.manageSearchesId,\n      icon: '',\n      title: 'APP.BROWSE.SEARCH.SAVE_SEARCH.NAVBAR.MANAGE_BUTTON',\n      description: 'APP.BROWSE.SEARCH.SAVE_SEARCH.NAVBAR.MANAGE_BUTTON',\n      route: 'saved-searches',\n      url: 'saved-searches'\n    });\n    return {\n      icon: '',\n      title,\n      children: mappedChildren,\n      route: '/',\n      id: 'search-navbar'\n    };\n  }\n}\n","@if (item) {\n<app-expand-menu [item]=\"item\" (actionClicked)=\"onActionClicked($event)\" />\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { HammerModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AuthGuardEcm, LanguagePickerComponent, NotificationHistoryComponent, provideTranslations } from '@alfresco/adf-core';\nimport {\n  ContentModule,\n  ContentVersionService,\n  LibraryNameColumnComponent,\n  LibraryRoleColumnComponent,\n  LibraryStatusColumnComponent,\n  TrashcanNameColumnComponent\n} from '@alfresco/adf-content-services';\nimport { DocumentBasePageService, ExtensionsDataLoaderGuard, provideContentAppExtensions } from '@alfresco/aca-shared';\nimport * as rules from '@alfresco/aca-shared/rules';\nimport { AppStoreModule } from './store/app-store.module';\nimport { provideAppExtensions, provideExtensions } from '@alfresco/adf-extensions';\nimport { ContentUrlService } from './services/content-url.service';\nimport { LocationLinkComponent } from './components/common/location-link/location-link.component';\nimport { LogoutComponent } from './components/common/logout/logout.component';\nimport { ToggleSharedComponent } from './components/common/toggle-shared/toggle-shared.component';\nimport { CustomNameColumnComponent } from './components/dl-custom-components/name-column/name-column.component';\nimport { CommentsTabComponent } from './components/info-drawer/comments-tab/comments-tab.component';\nimport { LibraryMetadataTabComponent } from './components/info-drawer/library-metadata-tab/library-metadata-tab.component';\nimport { MetadataTabComponent } from './components/info-drawer/metadata-tab/metadata-tab.component';\nimport { VersionsTabComponent } from './components/info-drawer/versions-tab/versions-tab.component';\nimport { PreviewComponent } from '@alfresco/aca-content/viewer';\nimport { ToggleEditOfflineComponent } from './components/toolbar/toggle-edit-offline/toggle-edit-offline.component';\nimport { ToggleFavoriteLibraryComponent } from './components/toolbar/toggle-favorite-library/toggle-favorite-library.component';\nimport { ToggleFavoriteComponent } from './components/toolbar/toggle-favorite/toggle-favorite.component';\nimport { ToggleInfoDrawerComponent } from './components/toolbar/toggle-info-drawer/toggle-info-drawer.component';\nimport { ToggleJoinLibraryButtonComponent } from './components/toolbar/toggle-join-library/toggle-join-library-button.component';\nimport { ToggleJoinLibraryMenuComponent } from './components/toolbar/toggle-join-library/toggle-join-library-menu.component';\nimport { ViewNodeComponent } from './components/toolbar/view-node/view-node.component';\nimport { CONTENT_ROUTES } from './aca-content.routes';\nimport { provideRouter } from '@angular/router';\nimport { UploadFilesDialogComponent } from './components/upload-files-dialog/upload-files-dialog.component';\nimport { provideFolderRulesExtension } from '@alfresco/aca-content/folder-rules';\nimport { TagsColumnComponent } from './components/dl-custom-components/tags-column/tags-column.component';\nimport { UserInfoComponent } from './components/common/user-info/user-info.component';\nimport { SidenavComponent } from './components/sidenav/sidenav.component';\nimport { ContentManagementService } from './services/content-management.service';\nimport { SHELL_NAVBAR_MIN_WIDTH, ShellLayoutComponent } from '@alfresco/adf-core/shell';\nimport { UserMenuComponent } from './components/sidenav/user-menu/user-menu.component';\nimport { MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';\nimport { SearchResultsRowComponent } from './components/search/search-results-row/search-results-row.component';\nimport { BulkActionsDropdownComponent } from './components/bulk-actions-dropdown/bulk-actions-dropdown.component';\nimport { AgentsButtonComponent } from './components/knowledge-retrieval/search-ai/agents-button/agents-button.component';\nimport { SaveSearchSidenavComponent } from './components/search/search-save/sidenav/save-search-sidenav.component';\nimport { IsFeatureSupportedInCurrentAcsPipe } from './pipes/is-feature-supported.pipe';\n\n@NgModule({\n  imports: [ContentModule.forRoot(), AppStoreModule, HammerModule],\n  providers: [\n    provideRouter(CONTENT_ROUTES),\n    { provide: ContentVersionService, useClass: ContentUrlService },\n    { provide: DocumentBasePageService, useExisting: ContentManagementService },\n    provideAppExtensions(),\n    provideContentAppExtensions(),\n    provideFolderRulesExtension(),\n    provideTranslations('app', 'assets'),\n    { provide: SHELL_NAVBAR_MIN_WIDTH, useValue: 0 },\n    {\n      provide: MAT_DIALOG_DEFAULT_OPTIONS,\n      useValue: { closeOnNavigation: true, hasBackdrop: true, autoFocus: true }\n    },\n    provideExtensions({\n      authGuards: {\n        'app.auth': AuthGuardEcm,\n        'app.extensions.dataLoaderGuard': ExtensionsDataLoaderGuard\n      },\n      components: {\n        'app.layout.main': ShellLayoutComponent,\n        'app.layout.sidenav': SidenavComponent,\n        'app.shell.sibling': UploadFilesDialogComponent,\n        'app.components.tabs.metadata': MetadataTabComponent,\n        'app.components.tabs.library.metadata': LibraryMetadataTabComponent,\n        'app.components.tabs.comments': CommentsTabComponent,\n        'app.components.tabs.versions': VersionsTabComponent,\n        'app.components.preview': PreviewComponent,\n        'app.toolbar.toggleInfoDrawer': ToggleInfoDrawerComponent,\n        'app.toolbar.toggleFavorite': ToggleFavoriteComponent,\n        'app.toolbar.toggleFavoriteLibrary': ToggleFavoriteLibraryComponent,\n        'app.toolbar.toggleJoinLibrary': ToggleJoinLibraryButtonComponent,\n        'app.toolbar.ai.agents-button': AgentsButtonComponent,\n        'app.menu.toggleJoinLibrary': ToggleJoinLibraryMenuComponent,\n        'app.bulk-actions-dropdown': BulkActionsDropdownComponent,\n        'app.shared-link.toggleSharedLink': ToggleSharedComponent,\n        'app.columns.name': CustomNameColumnComponent,\n        'app.columns.libraryName': LibraryNameColumnComponent,\n        'app.columns.libraryRole': LibraryRoleColumnComponent,\n        'app.columns.libraryStatus': LibraryStatusColumnComponent,\n        'app.columns.trashcanName': TrashcanNameColumnComponent,\n        'app.columns.location': LocationLinkComponent,\n        'app.columns.tags': TagsColumnComponent,\n        'app.toolbar.toggleEditOffline': ToggleEditOfflineComponent,\n        'app.toolbar.viewNode': ViewNodeComponent,\n        'app.languagePicker': LanguagePickerComponent,\n        'app.logout': LogoutComponent,\n        'app.user': UserInfoComponent,\n        'app.notification-center': NotificationHistoryComponent,\n        'app.user.menu': UserMenuComponent,\n        'app.search.columns.name': SearchResultsRowComponent,\n        'app.search.navbar': SaveSearchSidenavComponent\n      },\n      evaluators: {\n        canToggleJoinLibrary: rules.canToggleJoinLibrary,\n        canToggleSharedLink: rules.canToggleSharedLink,\n        canToggleFileLock: rules.canToggleFileLock,\n        canToggleFavorite: rules.canToggleFavorite,\n        isLibraryManager: rules.isLibraryManager,\n        canEditAspects: rules.canEditAspects,\n        isSmartFolder: rules.isSmartFolder,\n        isMultiSelection: rules.isMultiselection,\n        canPrintFile: rules.canPrintFile,\n        isPreferencesApiAvailable: rules.isPreferencesApiAvailable,\n        isNodeInfoAvailable: rules.isNodeInfoAvailable,\n        isBulkActionsAvailable: rules.isBulkActionsAvailable,\n\n        'app.selection.canDelete': rules.canDeleteSelection,\n        'app.selection.canDownload': rules.canDownloadSelection,\n        'app.selection.notEmpty': rules.hasSelection,\n        'app.selection.canAddFavorite': rules.canAddFavorite,\n        'app.selection.canRemoveFavorite': rules.canRemoveFavorite,\n        'app.selection.first.canUpdate': rules.canUpdateSelectedNode,\n        'app.selection.file': rules.hasFileSelected,\n        'app.selection.file.isLocked': rules.hasLockedFiles,\n        'app.selection.file.canUploadVersion': rules.canUploadVersion,\n        'app.selection.library': rules.hasLibrarySelected,\n        'app.selection.hasLibraryRole': rules.hasLibraryRole,\n        'app.selection.folder': rules.hasFolderSelected,\n        'app.selection.folder.canUpdate': rules.canUpdateSelectedFolder,\n        'app.selection.displayedKnowledgeRetrievalButton': rules.canDisplayKnowledgeRetrievalButton,\n\n        'app.navigation.folder.canCreate': rules.canCreateFolder,\n        'app.navigation.isTrashcan': rules.isTrashcan,\n        'app.navigation.isLibraries': rules.isLibraries,\n        'app.navigation.isSharedFiles': rules.isSharedFiles,\n        'app.navigation.isFavorites': rules.isFavorites,\n        'app.navigation.isRecentFiles': rules.isRecentFiles,\n        'app.navigation.isSearchResults': rules.isSearchResults,\n        'app.navigation.isPreview': rules.isPreview,\n        'app.navigation.isDetails': rules.isDetails,\n\n        'app.canShowLogout': rules.canShowLogout,\n        'app.isContentServiceEnabled': rules.isContentServiceEnabled,\n        'app.areTagsEnabled': rules.areTagsEnabled,\n        'app.areCategoriesEnabled': rules.areCategoriesEnabled,\n        'app.isSSOEnabled': rules.isSSOEnabled\n      }\n    }),\n    IsFeatureSupportedInCurrentAcsPipe\n  ]\n})\nexport class ContentServiceExtensionModule {}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport { INITIAL_APP_STATE } from '@alfresco/aca-shared/store';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Public API Surface of aca-content\n */\n\nexport * from './lib/aca-content.module';\nexport * from './lib/aca-content.routes';\nexport * from './lib/store/initial-state';\nexport * from './lib/services/content-url.service';\nexport * from './lib/services/content-management.service';\nexport * from './lib/components/info-drawer/comments-tab/external-node-permission-comments-tab.service';\nexport * from './lib/utils/aca-search-utils';\nexport * from './lib/pipes/is-feature-supported.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4","i1","i6","i8","i1.ContextMenuOverlayRef","take","catchError","i5","i2.ExternalNodePermissionCommentsTabService","i7","i9","i5.ModalAiService","i2.SearchAiNavigationService","i2.NodeActionsService","filter","map","startWith","i2.SearchLibrariesQueryBuilderService","i7.SearchNavigationService","i11","i12","i13","i16","switchMap","i2.IsFeatureSupportedInCurrentAcsPipe","i1.SavedSearchesContextService","i10","i4.SavedSearchesContextService","i1.SearchLibrariesQueryBuilderService","i4.ModalAiService","i2.ActionDirective"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAsBG;SAsBa,UAAU,CAAC,KAAkB,GAAA,iBAAiB,EAAE,MAAc,EAAA;AAC5E,IAAA,IAAI,QAAkB;AAEtB,IAAA,QAAQ,MAAM,CAAC,IAAI;QACjB,KAAK,eAAe,CAAC,YAAY;AAC/B,YAAA,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAgC,CAAC;YACvE;QACF,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,MAA8B,CAAC;YAC5D;QACF,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAgC,CAAC;YACvE;QACF,KAAK,cAAc,CAAC,iBAAiB;AACnC,YAAA,QAAQ,GAAG,wBAAwB,CAAC,KAAK,EAAE,MAAqC,CAAC;YACjF;QACF,KAAK,cAAc,CAAC,aAAa;AAC/B,YAAA,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAA6B,CAAC;YACjE;QACF,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC;YAClC;QACF,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,MAAkC,CAAC;YACnE;QACF,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAA2C,CAAC;YAClF;QACF,KAAK,cAAc,CAAC,iBAAiB;AACnC,YAAA,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAiC,CAAC;YAC3E;QACF,KAAK,cAAc,CAAC,sBAAsB;AACxC,YAAA,QAAQ,GAAG,yBAAyB,CAAC,KAAK,EAAE,MAAsC,CAAC;YACnF;QACF,KAAK,cAAc,CAAC,qBAAqB;AACvC,YAAA,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACvC;QACF,KAAK,cAAc,CAAC,yBAAyB;AAC3C,YAAA,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAyC,CAAC;YACjF;QACF,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,MAA0B,CAAC;YACxD;QACF,KAAK,cAAc,CAAC,wBAAwB;AAC1C,YAAA,QAAQ,GAAG;AACT,gBAAA,GAAG,KAAK;gBACR,qBAAqB,EAAG,MAAyC,CAAC;aACnE;YACD;AACF,QAAA;AACE,YAAA,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;;AAG3B,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,UAAU,CAAC,KAAe,EAAE,MAA4B,EAAA;AAC/D,IAAA,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE;AAClD;AAEA,SAAS,mBAAmB,CAAC,KAAe,EAAE,MAA8B,EAAA;AAC1E,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;IAC7B,QAAQ,CAAC,UAAU,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO;AAClD,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,wBAAwB,CAAC,KAAe,EAAE,MAAmC,EAAA;AACpF,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;AAC7B,IAAA,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC,OAAO;AAC5C,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,gBAAgB,CAAC,KAAe,EAAE,MAA2B,EAAA;AACpE,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;IAC7B,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO;AACxC,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,gBAAgB,CAAC,KAAe,EAAA;AACvC,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;AAE7B,IAAA,IAAI,KAAK,GAAG,KAAK,CAAC,gBAAgB;AAClC,IAAA,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;QAC3B,KAAK,GAAG,KAAK;;SACR;QACL,KAAK,GAAG,CAAC,KAAK;;AAGhB,IAAA,QAAQ,CAAC,gBAAgB,GAAG,KAAK;AAEjC,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,qBAAqB,CAAC,KAAe,EAAA;AAC5C,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;AAE7B,IAAA,IAAI,KAAK,GAAG,KAAK,CAAC,iBAAiB;AACnC,IAAA,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;QAC3B,KAAK,GAAG,KAAK;;SACR;QACL,KAAK,GAAG,CAAC,KAAK;;AAGhB,IAAA,QAAQ,CAAC,iBAAiB,GAAG,KAAK;AAElC,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,mBAAmB,CAAC,KAAe,EAAE,MAA8B,EAAA;AAC1E,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;IAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;AACjC,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;AAC1B,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC;IAElC,IAAI,KAAK,GAAG,IAAI;IAChB,IAAI,IAAI,GAAG,IAAI;IACf,IAAI,IAAI,GAAG,IAAI;IACf,IAAI,MAAM,GAAG,IAAI;IACjB,IAAI,OAAO,GAAG,IAAI;AAElB,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,QAAA,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;QAChB,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAE9B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,IAAI,GAAG,KAAK,CAAC,IAAI,CACf,CAAC,MAAW;;YAEV,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAC9E;AACD,YAAA,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;;;IAI/D,MAAM,SAAS,GAAU,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,SAAS,CAAC;AAClF,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;;IAGxB,IAAI,OAAO,EAAE;AACX,QAAA,QAAQ,CAAC,gBAAgB,GAAG,KAAK;;IAGnC,QAAQ,CAAC,SAAS,GAAG;QACnB,KAAK;QACL,KAAK;QACL,OAAO;QACP,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,SAAS;QACT;KACD;AACD,IAAA,OAAO,QAAQ;AACjB;AAEA,MAAM,aAAa,GAAG,CAAC,KAAe,EAAE,MAAgC,MAAM;AAC5E,IAAA,GAAG,KAAK;IACR,gBAAgB,EAAE,MAAM,CAAC;AAC1B,CAAA,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAe,EAAE,MAAuC,MAAM;AAC1F,IAAA,GAAG,KAAK;IACR,iBAAiB,EAAE,MAAM,CAAC;AAC3B,CAAA,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAe,EAAE,MAAyC,MAAM;AAC3F,IAAA,GAAG,KAAK;IACR,wBAAwB,EAAE,MAAM,CAAC;AAClC,CAAA,CAAC;AAEF,SAAS,sBAAsB,CAAC,KAAe,EAAE,MAA+B,EAAA;AAC9E,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;AAC7B,IAAA,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO;AACpC,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,yBAAyB,CAAC,KAAe,EAAE,MAAoC,EAAA;AACtF,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;AAC7B,IAAA,QAAQ,CAAC,mBAAmB,GAAG,MAAM,CAAC,OAAO;AAC7C,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,UAAU,CAAC,KAAe,EAAE,MAAwB,EAAA;AAC3D,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE;AAC7B,IAAA,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO;AACpC,IAAA,OAAO,QAAQ;AACjB;;ACxOA;;;;;;;;;;;;;;;;;;;;;;AAsBG;MASU,UAAU,CAAA;AACrB,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEjD,MAAM,GAAG,YAAY,CACnB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAA2B,cAAc,CAAC,kBAAkB,CAAC,EACnE,GAAG,CAAC,MAAK;AACP,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;KAClC,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,cAAc,GAAG,YAAY,CAC3B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAuB,cAAc,CAAC,cAAc,CAAC,EAC3D,GAAG,CAAC,MAAK;AACP,QAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE;KAC1C,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;wGAxBU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAV,UAAU,EAAA,CAAA;;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB;;;AC9BD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAYG,MAAO,iBAAkB,SAAQ,qBAAqB,CAAA;AACzC,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE9D,IAAA,iBAAiB,CAAC,MAAc,EAAE,UAAU,GAAG,IAAI,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC,IAAI,CACzC,QAAQ,CAAC,CAAC,UAAU,KAAI;YACtB,IAAI,UAAU,EAAE;gBACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,IAAI,CACnE,GAAG,CAAC,CAAC,MAA4B,KAAK,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAC9D,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CACzE;;iBACI;AACL,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;;SAEtE,CAAC,CACH;;AAGH,IAAA,oBAAoB,CAAC,MAAc,EAAE,SAAiB,EAAE,UAAU,GAAG,IAAI,EAAA;AACvE,QAAA,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC,IAAI,CACzC,QAAQ,CAAC,CAAC,UAAU,KAAI;YACtB,IAAI,UAAU,EAAE;gBACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CACjF,GAAG,CAAC,CAAC,MAA4B,KAAK,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAC9D,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAC3F;;iBACI;AACL,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;;SAExF,CAAC,CACH;;IAGK,wBAAwB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAChD,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,wBAAwB,CAAC,CACpE;;wGAtCQ,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;4FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACjClC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAcU,eAAe,CAAA;AAClB,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAC1B,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAErD,aAAa,GAAG,YAAY,CAC1B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAsB,eAAe,CAAC,QAAQ,CAAC,EACrD,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;;aAC7B;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACnC,oBAAA,IAAI,CAAC;yBACF,MAAM,CAAC,iBAAiB;AACxB,yBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,yBAAA,SAAS,CAAC,CAAC,OAAO,KAAI;wBACrB,IAAI,OAAO,EAAE;AACX,4BAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;;6BAC5D;AACL,4BAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAE5F,qBAAC,CAAC;;AAER,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAEO,aAAa,CAAC,UAA4B,EAAE,sBAA+B,EAAA;QACjF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACpC,YAAA,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAY;YAEhE,OAAO;AACL,gBAAA,EAAE,EAAE,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,MAAM,IAAI,EAAE;gBAChD,IAAI;gBACJ,MAAM;gBACN;aACD;AACH,SAAC,CAAC;QAEF,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC;;AAGF,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC;;aAC9C;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,sBAAsB,CAAC;;;IAI3C,YAAY,CAAC,IAAc,EAAE,sBAA+B,EAAA;QAClE,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,sBAAsB,CAAC;;iBAC3C;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;;;AAKrB,IAAA,YAAY,CAAC,IAAc,EAAA;AACjC,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,KAAI;gBAC/E,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AACtC,aAAC,CAAC;;AAGJ,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;;;IAI1E,mBAAmB,CAAC,IAAc,EAAE,OAAgB,EAAA;AAC1D,QAAA,IAAI,IAAI,IAAI,OAAO,EAAE;YACnB,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,KAAI;gBAC9F,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AACtC,aAAC,CAAC;;;IAIE,WAAW,CAAC,KAAsB,EAAE,sBAA+B,EAAA;QACzE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAE5C,YAAA,IAAI,CAAC;iBACF,IAAI,CAAC,0BAA0B,EAAE;AAChC,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,IAAI,EAAE;oBACJ;AACD;aACF;AACA,iBAAA,WAAW;iBACX,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;;;IAI5D,QAAQ,CAAC,GAAW,EAAE,QAAgB,EAAA;AAC5C,QAAA,IAAI,GAAG,IAAI,QAAQ,EAAE;YACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAExC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AAEf,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;;AAInC,IAAA,IAAY,mBAAmB,GAAA;QAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;;AAGtC,IAAA,eAAe,CAAC,sBAA8B,EAAA;QACpD,IAAI,sBAAsB,EAAE;YAC1B,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC,EAAE,KAAK,EAAE;;;wGAhI7D,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAf,eAAe,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACnCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAyBU,kBAAkB,CAAA;AAanB,IAAA,cAAA;AACA,IAAA,UAAA;AACA,IAAA,MAAA;AACA,IAAA,mBAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,gBAAA;AAlBV,IAAA,aAAa,GAAyB,IAAI,OAAO,EAAe;AAChE,IAAA,YAAY,GAAiB,IAAI,OAAO,EAAO;IAC/C,kBAAkB,GAAU,EAAE;IAC9B,2BAA2B,GAAG,KAAK;AAEnC,IAAA,SAAS;AACT,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,SAAS;;AAGvB,IAAA,WAAA,CACU,cAA8B,EAC9B,UAA6B,EAC7B,MAAiB,EACjB,mBAAwC,EACxC,UAA8B,EAC9B,WAA+B,EAC/B,gBAAkC,EAAA;QANlC,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;AAG1B;;;;;;AAMG;AACH,IAAA,SAAS,CAAC,eAAsB,EAAE,UAAmB,EAAE,6BAAsC,EAAA;AAC3F,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,6BAA6B,CAAC;;AAG3G;;;;;;AAMG;AACH,IAAA,SAAS,CAAC,eAAsB,EAAE,UAAmB,EAAE,6BAAsC,EAAA;AAC3F,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,6BAA6B,CAAC;;AAG3G;;;;;;;AAOG;AACH,IAAA,gBAAgB,CAAC,MAA0B,EAAE,eAAsB,EAAE,UAAmB,EAAE,6BAAsC,EAAA;AAC9H,QAAA,MAAM,UAAU,GAAoB,IAAI,OAAO,EAAU;QAEzD,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE;YAC/C,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;;aACtE,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE;AACpE,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,eAAe,EAAE,6BAA6B,CAAC;AACjH,YAAA,oBAAoB,CAAC,SAAS,CAAC,CAAC,UAAkB,KAAI;gBACpD,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK;;gBAE7C,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE;AAC7D,gBAAA,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,GAAG,QAAQ,GAAG,SAAS;gBACzD,MAAM,KAAK,GAAU,EAAE;;AAGvB,gBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;AAC/B,gBAAA,IAAI,OAAwB;AAE5B,gBAAA,IAAI,MAAM,KAAK,UAAU,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE;AACpF,oBAAA,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,CAAC;;qBACpE;AACL,oBAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;;wBAE/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAG,EAAA,MAAM,CAAC,WAAW,EAAE,CAAA,UAAA,CAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AACjF,qBAAC,CAAC;AACF,oBAAA,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;;AAGzB,gBAAA,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,KAAI;AAC/B,oBAAA,UAAU,CAAC,IAAI,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,WAAW,EAAE,CAAA,CAAE,CAAC;oBAElF,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;AACtD,oBAAA,IAAI,MAAM,KAAK,UAAU,CAAC,IAAI,EAAE;wBAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;;AAC3C,yBAAA,IAAI,MAAM,KAAK,UAAU,CAAC,IAAI,EAAE;AACrC,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;;iBAExC,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACvC,aAAC,CAAC;;aACG;YACL,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;;AAG7E,QAAA,OAAO,UAAU;;AAGnB,IAAA,oBAAoB,CAAC,eAAsB,EAAA;AACzC,QAAA,IAAI,eAAe,EAAE,MAAM,EAAE;YAC3B,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,YAAY;;AAEtB,QAAA,OAAO,KAAK;;AAGd,IAAA,eAAe,CAAC,MAA0B,EAAE,eAAsB,EAAE,UAAmB,EAAA;QACrF,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5G,OAAO,CAAC,cAAc;;AAGxB,IAAA,gBAAgB,CAAC,SAAe,EAAA;QAC9B,IAAI,aAAa,GAAG,EAAE;AAEtB,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,YAAA,aAAa,GAAG,SAAS,CAAC,QAAQ;;aAC7B,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC3C,YAAA,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;;AAGhF,QAAA,OAAO,aAAa;;AAGtB,IAAA,uBAAuB,CAAC,MAAkB,EAAE,eAA4B,EAAE,6BAAsC,EAAA;AAC9G,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAE7E,QAAA,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;AACpC,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,KAAK,EAAE;AACL,4BAAA,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,wCAAwC;AACjE;AACV,qBAAA;AACD,oBAAA;AACE,wBAAA,KAAK,EAAE;AACL,4BAAA,IAAI,EAAE,WAAW;4BACjB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,2DAA2D;AACpF;AACV;AACF;AACgB;AACpB,SAAA,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC;AAE/D,QAAA,IAAI,CAAC,2BAA2B,GAAG,KAAK;AACxC,QAAA,MAAM,IAAI,GAAqC;AAC7C,YAAA,aAAa,EAAE,QAAQ;YACvB,KAAK;AACL,YAAA,eAAe,EAAE,qBAAqB;AACtC,YAAA,UAAU,EAAE,MAAM;AAClB,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,gBAAgB,EAAE,cAAc;YAChC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5C,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YACxD,MAAM,EAAE,IAAI,OAAO,EAAU;YAC7B,kBAAkB,EAAE,wBAAwB,CAAC;SAC9C;AAED,QAAA,IAAI,CAAC;aACF,IAAI,CAAC,4BAA4B,EAAE;YAClC,IAAI;AACJ,YAAA,UAAU,EAAE,kCAAkC;AAC9C,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE;SACP;AACA,aAAA,WAAW;aACX,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,CAAC;AAEvE,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACpB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;AAC/B,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM;;AAGpB,IAAA,mBAAmB,CAAC,MAAc,EAAE,KAAA,GAAqB,EAAE,EAAA;QACzD,IAAI,SAAS,GAAG,OAAO;QACvB,IAAI,IAAI,GAAG,EAAE;AAEb,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAC7C,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;YAC1B,SAAS,GAAG,MAAM;;AAGpB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA,cAAA,EAAiB,MAAM,CAAC,WAAW,EAAE,CAAI,CAAA,EAAA,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;AAGjG,IAAA,mBAAmB,CAAC,KAAW,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;AAG7D,IAAA,yBAAyB,CAAC,KAAW,EAAA;QAC3C,OAAO,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC;;AAG5D,IAAA,MAAM,CAAC,KAAK,EAAA;AAClB,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU;;IAGtF,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;;AAIhB,IAAA,mBAAmB,CAAC,IAAU,EAAA;AACpC,QAAA,IAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ;AAEnC,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;AACrC,oBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;AAGrB,oBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACf,wBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,2BAA2B,CAAC;AACxE,wBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM;;yBAClB;wBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,2BAA2B,CAAC;;;qBAE9D,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;AACvC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;;AAEzB,iBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;oBACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,8CAA8C,CAAC;AACpF,oBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;;;aAGpB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,2BAA2B,EAAE;AAC5D,YAAA,IAAI,GAAG;gBACL,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,8CAA8C,CAAC;AAC9E,gBAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE;aACd;;AAGV,QAAA,OAAO,IAAI;;;AAIL,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ;;AAGnC,QAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;AAGrB,QAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,8CAA8C,CAAC;AAC3F,QAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW;AAE5B,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;;;YAG9B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;;AAG5B,YAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;aAChB;;AAEL,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACxE,YAAA,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE;AACf,gBAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;;;;AAKhC,IAAA,eAAe,CAAC,IAAU,EAAA;QACxB,IAAI,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC;;AAE1D,QAAA,OAAO,KAAK;;IAGd,cAAc,CAAC,SAAc,EAAE,WAAmB,EAAA;AAChD,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;YACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC;;aAC/C;;YAEL,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC;;;AAIzD,IAAA,iBAAiB,CAAC,YAAiB,EAAE,WAAmB,EAAE,OAAgB,EAAA;AACxE,QAAA,MAAM,QAAQ,GAAG,OAAO,IAAI,YAAY,CAAC,IAAI;;QAE7C,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE;;AAG7D,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC9D,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,IAAI,aAAa;AACjB,YAAA,IAAI;AACF,gBAAA,MAAM,EACJ,KAAK,EAAE,EAAE,UAAU,EAAE,EACtB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC3B,aAAa,GAAG,UAAU;;YAC1B,OAAO,CAAC,EAAE;;;AAIZ,YAAA,IAAI,aAAa,IAAI,aAAa,KAAK,GAAG,EAAE;AAC1C,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;;iBACrG;;AAEL,gBAAA,OAAO,EAAE,CAAC,GAAG,IAAI,cAAc,CAAC;;SAEnC,CAAC,CACH;;IAGH,gBAAgB,CAAC,YAAiB,EAAE,WAAmB,EAAA;;QAErD,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE;AAC7D,QAAA,IAAI,kBAAmC;AACvC,QAAA,IAAI,eAAgC;AACpC,QAAA,IAAI,oBAAoB;QAExB,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CACvE,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,IAAI,aAAa;AACjB,YAAA,IAAI;AACF,gBAAA,MAAM,EACJ,KAAK,EAAE,EAAE,UAAU,EAAE,EACtB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC3B,aAAa,GAAG,UAAU;;YAC1B,MAAM;AAER,YAAA,IAAI,aAAa,IAAI,aAAa,KAAK,GAAG,EAAE;gBAC1C,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC;AACxE,gBAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;gBAEtD,OAAO,kBAAkB,CAAC,IAAI,CAC5B,QAAQ,CAAC,CAAC,WAAW,KAAI;oBACvB,oBAAoB,GAAG,WAAW;AAClC,oBAAA,OAAO,eAAe;AACxB,iBAAC,CAAC,EACF,QAAQ,CAAC,CAAC,WAAW,KAAI;oBACvB,MAAM,KAAK,GAAG,EAAE;oBAChB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACxC,wBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvB,4BAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;6BACvE;AACL,4BAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;AAEjF,qBAAC,CAAC;AAEF,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,wBAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;AAEf,oBAAA,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC;iBACrB,CAAC,CACH;;iBACI;;AAEL,gBAAA,OAAO,EAAE,CAAC,GAAG,IAAI,cAAc,CAAC;;SAEnC,CAAC,CACH;;IAGH,cAAc,CAAC,SAAS,EAAE,WAAmB,EAAA;AAC3C,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAE5B,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,YAAA,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ;AAE1C,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,IAAI,CACvD,QAAQ,CAAC,CAAC,UAAU,KAAI;;AAEtB,gBAAA,IAAI,eAAe,KAAK,WAAW,EAAE;AACnC,oBAAA,OAAO,EAAE,CAAC,UAAU,CAAC;;gBAGvB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAChD,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;;gBAG3D,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;;AAErC,oBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAC9D,QAAQ,CAAC,CAAC,uBAAuB,KAAI;wBACnC,IAAI,uBAAuB,EAAE;;4BAE3B,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,EAAE;;AAEpD,4BAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CACjD,QAAQ,CAAC,MAAK;AACZ,gCAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC,gCAAA,OAAO,EAAE,CAAC,UAAU,CAAC;6BACtB,CAAC,CACH;;AAEH,wBAAA,OAAO,EAAE,CAAC,UAAU,CAAC;qBACtB,CAAC,CACH;;AAEH,gBAAA,OAAO,EAAE,CAAC,UAAU,CAAC;aACtB,CAAC,CACH;;aACI;;YAEL,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC;;;IAIzD,gBAAgB,CAAC,YAAY,EAAE,WAAmB,EAAA;;QAEhD,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE;QAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAC3D,QAAA,IAAI,kBAAmC;AACvC,QAAA,IAAI,eAAgC;AACpC,QAAA,IAAI,oBAAoB;AAExB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CACxE,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,EACpD,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,IAAI,aAAa;AACjB,YAAA,IAAI;AACF,gBAAA,MAAM,EACJ,KAAK,EAAE,EAAE,UAAU,EAAE,EACtB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC3B,aAAa,GAAG,UAAU;;YAC1B,OAAO,CAAC,EAAE;;;AAIZ,YAAA,IAAI,aAAa,IAAI,aAAa,KAAK,GAAG,EAAE;gBAC1C,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC;AACxE,gBAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;gBAEtD,OAAO,kBAAkB,CAAC,IAAI,CAC5B,QAAQ,CAAC,CAAC,WAAW,KAAI;oBACvB,oBAAoB,GAAG,WAAW;AAClC,oBAAA,OAAO,eAAe;AACxB,iBAAC,CAAC,EACF,QAAQ,CAAC,CAAC,cAAc,KAAI;oBAC1B,MAAM,KAAK,GAAU,EAAE;oBACvB,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC3C,wBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvB,4BAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;6BACvE;AACL,4BAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;AAEjF,qBAAC,CAAC;AAEF,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,wBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;;AAElB,oBAAA,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC;iBACrB,CAAC,CACH;;iBACI;;AAEL,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC;;SAEjB,CAAC,CACH;;IAGH,iBAAiB,CAAC,YAAiB,EAAE,WAAmB,EAAA;;QAEtD,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE;QAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAE3D,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CACxE,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,EACpD,UAAU,CAAC,CAAC,GAAG;;AAEb,QAAA,EAAE,CAAC,GAAG,CAAC,CACR,CACF;;IAGH,cAAc,CAAC,QAAgB,EAAE,IAAY,EAAA;AAC3C,QAAA,MAAM,YAAY,GAAG,IAAI,OAAO,EAAO;QAEvC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,SAAS,CACtC,CAAC,aAAyC,KAAI;YAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;YAElF,IAAI,MAAM,EAAE;AACV,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;;iBACpB;AACL,gBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE3B,SAAC,EACD,CAAC,GAAG,KAAK,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CACjC;AACD,QAAA,OAAO,YAAY;;AAGb,IAAA,eAAe,CAAC,MAA0B,EAAE,IAAU,EAAE,UAAmB,EAAA;AACjF,QAAA,IAAI,MAAM,KAAK,UAAU,CAAC,IAAI,EAAE;AAC9B,YAAA,OAAO,IAAI;;QAEb,OAAO,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC;;AAG7D,IAAA,SAAS,CAAC,GAAiB,EAAA;AACjC,QAAA,MAAM,IAAI,GAAS,GAAG,CAAC,IAAI,CAAC,KAAK;QAEjC,IAAI,CAAC,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAgB;;AAGnD,IAAA,aAAa,CAAC,GAAiB,EAAA;AACrC,QAAA,MAAM,KAAK,GAAS,GAAG,CAAC,IAAI,CAAC,KAAK;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,CAAC;;AAGhE,QAAA,OAAO,IAAI;;IAGN,cAAc,CAAC,IAAY,EAAE,QAAiB,EAAA;QACnD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;;AAG9C,QAAA,MAAM,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE;QAC7D,IAAI,aAAa,GAAG,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI;QAE/E,IAAI,YAAY,GAAG,CAAC;AACpB,QAAA,IAAI,iBAAiB;QAErB,IAAI,QAAQ,EAAE;YACZ,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;;AAGtD,YAAA,iBAAiB,GAAG,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,QAAQ;;AAGjG,QAAA,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,KAAK,aAAa,EAAE;;YAE7D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;YACjD,IAAI,SAAS,EAAE;;AAEb,gBAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3D,gBAAA,IAAI,eAAe,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBACxD,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;AACvD,oBAAA,YAAY,GAAG,eAAe,GAAG,CAAC;;;;AAIxC,QAAA,OAAO,aAAa,GAAG,GAAG,GAAG,YAAY,GAAG,aAAa;;AAG3D;;;;;AAKG;IACH,eAAe,CAAC,MAAc,EAAE,MAAY,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;AAI7D;;;;;;AAMG;AACH,IAAA,QAAQ,CAAC,MAAc,EAAE,cAAsB,EAAE,IAAa,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;;AAGhE,IAAA,OAAO,CAAC,SAAgB,EAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC7B,YAAA,OAAO,SAAS;;QAGlB,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,MAAM,cAAc,GAAU,EAAE;AAEhC,QAAA,GAAG;AACD,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,oBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;;qBAClB;AACL,oBAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;gBAG3B,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;AACzC,gBAAA,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAChC,aAAC,CAAC;AACJ,SAAC,QAAQ,SAAS,CAAC,MAAM;AAEzB,QAAA,OAAO,cAAc;;AAGvB,IAAA,eAAe,CAAC,IAAS,EAAA;AACvB,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,kBAAkB,EAAE;SACrB;AAED,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AAC/B,gBAAA,IAAI,IAAI,YAAY,KAAK,EAAE;AACzB,oBAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;AAChB,qBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;oBAG9B,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACjD,oBAAA,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,YAAY,KAAK,CAAC;;oBAE/E,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,CAAC;oBAE9F,IAAI,CAAC,UAAU,EAAE;;AAEf,wBAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;yBACnB,IAAI,CAAC,UAAU,EAAE;;AAEtB,wBAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;yBAChB;;AAEL,wBAAA,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;;;qBAE9B;AACL,oBAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG1B,gBAAA,OAAO,GAAG;aACX,EAAE,UAAU,CAAC;;aACT;YACL,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE;AACxC,gBAAA,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;iBAC1B;AACL,gBAAA,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG9B,YAAA,OAAO,UAAU;;;AAIb,IAAA,eAAe,CAAC,sBAA8B,EAAA;QACpD,IAAI,sBAAsB,EAAE;YAC1B,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC,EAAE,KAAK,EAAE;;;wGAroB7D,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,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;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC9CD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAaH,MAAM,WAAW,CAAA;AACf,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,QAAQ;AACR,IAAA,qBAAqB;AACrB,IAAA,OAAO;AACP,IAAA,QAAQ;AACR,IAAA,IAAI;AACJ,IAAA,aAAa;AACd;MAWY,wBAAwB,CAAA;AAC1B,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACtC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEnC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEpD,IAAA,IAAI,GAAS,MAAM,CAAC,qBAAqB,CAAC;AAC1C,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;IAE/B,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC/C,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS;QAC9C,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAClE,QAAA,IAAI,CAAC;AACF,aAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA,6CAAA,CAA+C,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE;AACvG,aAAA,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;AAE3B,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,GAAG,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAC5H,SAAC,CAAC;AACJ,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,2BAA2B,CAAC;AAClF,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,2BAA2B,CAAC;AAC3F,YAAA,IAAI,CAAC;AACF,iBAAA,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC1C,iBAAA,IAAI,CACH,KAAK,EAAE,EACP,KAAK,CAAC,IAAI,CAAC,EACX,SAAS,CAAC,CAAC,UAAU,KAAI;AACvB,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACnF,MAAM,CAAC,CAAC,MAAM,KACZ,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,UAAU,CAAC;AAC7C,sBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7G,sBAAE,KAAK,CACV,EACD,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC5E,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;iBAChB,CAAC,CACH;AACH,aAAC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC;AACrF,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC5E,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,aAAC,CAAC;AAEH,iBAAA,SAAS,CAAC,CAAC,UAAU,KAAI;AACxB,gBAAA,IAAI,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE;AACjE,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC;oBACjF,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa;;AAC1D,qBAAA,IAAI,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,UAAU,CAAC,WAAW,EAAE;AAC3E,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC5E,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC;;AAEzF,aAAC,CAAC;;aACC;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;;;wGAhE3E,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,uGANxB,CAAC,YAAY,CAAC,ECjD3B,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,uxGAkEA,28CDlBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,WAAW,8CAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,iBAAiB,EAAE,IAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,qGAAE,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAO7G,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAChB,OAAA,EAAA,CAAC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAC9G,SAAA,EAAA,CAAC,YAAY,CAAC,EAGV,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC/B,IAAA,EAAA,EAAE,KAAK,EAAE,eAAe,EAAE,EAAA,QAAA,EAAA,uxGAAA,EAAA,MAAA,EAAA,CAAA,o5CAAA,CAAA,EAAA;;;AErDlC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAuDU,wBAAwB,CAAA;AAClB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACtC,IAAA,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC1C,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACxC,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC7D,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IACjD,wBAAwB,GAAG,kDAAkD;IAE9F,WAAW,CAAC,KAAuB,EAAE,6BAAsC,EAAA;AACzE,QAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;QACnD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAK;gBAChD,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACvC,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChD,oBAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;AAC/B,oBAAA,OAAO,OAAO;AAChB,iBAAC,CAAC;AAEF,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,wCAAwC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;;qBACtG;oBACL,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,uCAAuC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;gBAEjH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,aAAa,CAAC,CAAC;AAChE,aAAC,CAAC;;;IAIN,cAAc,CAAC,KAAuB,EAAE,6BAAsC,EAAA;AAC5E,QAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;QACnD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;gBAC9C,IAAI,EAAE,MAAK;oBACT,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACvC,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChD,wBAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK;AAChC,wBAAA,OAAO,OAAO;AAChB,qBAAC,CAAC;AAEF,oBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,wBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,0CAA0C,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;;yBACxG;wBACL,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,yCAAyC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;oBAEnH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,aAAa,CAAC,CAAC;iBAC/D;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE;wBACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;wBAC3F,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI;AAC3E,wBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,6CAA6C,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;;AAGhH,aAAA,CAAC;;;IAIN,cAAc,CAAC,IAAS,EAAE,6BAAsC,EAAA;AAC9D,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;;AAEf,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAK,IAAY,CAAC,KAAK,CAAC,IAAI;YAExD,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClD,oBAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,CAAC;AACrE,iBAAC,CAAC;;iBACG;gBACL,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,6BAA6B,CAAC;;;;IAK9E,aAAa,CAAC,IAAS,EAAE,6BAAsC,EAAA;AAC7D,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;;AAEf,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAK,IAAY,CAAC,KAAK,CAAC,IAAI;YAExD,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClD,oBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,6BAA6B,CAAC;AACjE,iBAAC,CAAC;;iBACG;gBACL,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,6BAA6B,CAAC;;;;IAK1E,mBAAmB,CAAC,IAAU,EAAE,IAAU,EAAA;AACxC,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI;AAC9D,YAAA,MAAM,4BAA4B,GAAG;gBACnC,IAAI;gBACJ,IAAI;gBACJ,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;AACrC,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB;AACzD,gBAAA,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC;aACR;AACjC,YAAA,MAAM,YAAY,GAAoB,EAAE,KAAK,EAAE,OAAO,EAAE;AAExD,YAAA,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC,SAAS,CAC7G,CAAC,IAAI,KAAI;gBACP,IAAI,IAAI,CAAC,MAAM,KAAK,4BAA4B,CAAC,MAAM,EAAE;AACvD,oBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,YAAY,EAAE;AAC1E,wBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;;;AAGvE,aAAC,EACD,CAAC,KAAK,KAAK,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CACrD;AACH,SAAC,CAAC;;IAGJ,SAAS,CAAC,IAAS,EAAE,6BAAsC,EAAA;AACzD,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;;AAEf,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAK,IAAY,CAAC,KAAK,CAAC,IAAI;YAExD,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;oBAClD,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,6BAA6B,CAAC;AACpE,iBAAC,CAAC;;iBACG;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,6BAA6B,CAAC;;;;IAKnE,mBAAmB,CAAC,IAAS,EAAE,6BAAsC,EAAA;AACnE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY;AAEzD,QAAA,IAAI,CAAC;aACF,IAAI,CAAC,oBAAoB,EAAE;AAC1B,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,UAAU,EAAE,uBAAuB;AACnC,YAAA,IAAI,EAAE;gBACJ,IAAI;gBACJ;AACD;SACF;AACA,aAAA,WAAW;aACX,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE;AACxC,YAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;AACrD,SAAC,CAAC;;AAGN,IAAA,YAAY,CAAC,YAAoB,EAAA;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAChE,YAAA,IAAI,EAAE;gBACJ,YAAY;AACZ,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;QAEF,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAe,KAAI;AACnE,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7C,SAAC,CAAC;QAEF,cAAc,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YAC9C,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;;AAEnC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACrD,SAAC,CAAC;;IAGJ,UAAU,CAAC,MAAiB,EAAE,6BAAsC,EAAA;QAClE,IAAI,CAAC,MAAM,EAAE;YACX;;QAGF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE;AACxD,YAAA,IAAI,EAAE;gBACJ,MAAM,EAAE,MAAM,CAAC;AAChB,aAAA;AACD,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;QAEF,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAe,KAAI;AAC3D,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7C,SAAC,CAAC;QAEF,MAAM,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YACtC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAClE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE7C,YAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;AACrD,SAAC,CAAC;;IAGJ,aAAa,GAAA;QACX,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACjE,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;QAEF,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAe,KAAI;AACnE,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7C,SAAC,CAAC;AAEF,QAAA,OAAO,cAAc,CAAC,WAAW,EAAE,CAAC,IAAI,CACtC,GAAG,CAAC,CAAC,IAAI,KAAI;YACX,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE/C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACrD,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,IAAe,KAAI;AACtB,YAAA,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AACrB,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;;AAExB,YAAA,OAAO,IAAI;SACZ,CAAC,CACH;;AAGH,IAAA,aAAa,CAAC,EAAU,EAAA;QACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,CACtC,MAAK;YACH,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3C,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,mCAAmC,CAAC;AACtE,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;SAC7D,EACD,MAAK;AACH,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,2CAA2C,CAAC;AACjF,SAAC,CACF;;IAGH,YAAY,CAAC,MAAc,EAAE,6BAAsC,EAAA;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC5D,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,iCAAiC;AACxC,gBAAA,OAAO,EAAE,mCAAmC;AAC5C,gBAAA,QAAQ,EAAE,qCAAqC;AAC/C,gBAAA,OAAO,EAAE;AACV,aAAA;AACD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;QAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,CACzC,MAAK;oBACH,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5C,oBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,gCAAgC,CAAC;iBACpE,EACD,MAAK;AACH,oBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,0CAA0C,CAAC;AAChF,iBAAC,CACF;;AAEH,YAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;AACrD,SAAC,CAAC;;IAGJ,aAAa,CAAC,MAAc,EAAE,QAAwB,EAAA;AACpD,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,CACvD,CAAC,SAAoB,KAAI;YACvB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SACrE,EACD,MAAK;AACH,YAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAC9C,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,qCAAqC,CAAC;AAC3E,SAAC,CACF;;IAGH,MAAM,YAAY,CAAC,KAAuB,EAAA;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACjG,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE;;AAG1C,IAAA,aAAa,CAAC,IAAsB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;;AAGhD,IAAA,gBAAgB,CAAC,UAA4B,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;;IAGtD,iBAAiB,CAAC,KAAkB,EAAE,6BAAsC,EAAA;QAC1E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC5D,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,iCAAiC;AACxC,gBAAA,OAAO,EAAE,mCAAmC;AAC5C,gBAAA,QAAQ,EAAE,qCAAqC;AAC/C,gBAAA,OAAO,EAAE;AACV,aAAA;AACD,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;QAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;AACnD,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,MAAM,aAAa,GAAe,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACnD,oBAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK;AAC3B,oBAAA,MAAM,EAAE,GAAI,IAAY,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;oBAEtD,OAAO;wBACL,EAAE;wBACF;qBACD;AACH,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;;AAElC,SAAC,CAAC;;AAGJ,IAAA,mBAAmB,CAAC,SAAA,GAAyB,EAAE,EAAE,6BAAsC,EAAA;AACrF,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB;;AAGF,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAEjE,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AACpC,YAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;AAC1C,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;YACjC;;AAGF,QAAA,IAAI,MAAoB;AAExB,QAAA,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACzD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,aAAa,KAAI;AACpB,YAAA,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAC5C,SAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;AAElD,aAAA,SAAS,CAAC,CAAC,KAAyB,KAAI;AACvC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;AAC9D,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAEnE,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAC1B,gBAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;AACnD,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;gBACpC,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;iBAClC,EAAE,EAAE,CAAC;;iBACD;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;;AAE5C,SAAC,CAAC;;IAGN,SAAS,CAAC,KAAuB,EAAE,6BAAsC,EAAA;QACvE,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,6BAA6B,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,SAAS,CACtI,CAAC,MAAM,KAAI;AACT,YAAA,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,MAAM;YAC1C,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAC;AACxD,SAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;AACpC,SAAC,CACF;;IAGH,SAAS,CAAC,KAAuB,EAAE,6BAAsC,EAAA;QACvE,MAAM,iBAAiB,GAAG,GAAG;QAE7B,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,iBAAiB,EAAE,6BAA6B,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,SAAS,CAC7I,CAAC,MAAM,KAAI;AACT,YAAA,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,GAAG,MAAM;YAC9C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,YAAY,CAAC;AAE1D,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;AACnC,SAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;AACpC,SAAC,CACF;;AAGH,IAAA,eAAe,CAAC,WAA6B,EAAA;QAC3C,IAAI,iBAAiB,GAAG,6BAA6B;AAErD,QAAA,IAAI;AACF,YAAA,MAAM,EACJ,KAAK,EAAE,EAAE,UAAU,EAAE,EACtB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;AAEnC,YAAA,IAAI,UAAU,KAAK,GAAG,EAAE;gBACtB,iBAAiB,GAAG,+BAA+B;;AAC9C,iBAAA,IAAI,UAAU,KAAK,GAAG,EAAE;gBAC7B,iBAAiB,GAAG,gCAAgC;;;QAEtD,OAAO,GAAG,EAAE;;;AAId,QAAA,OAAO,iBAAiB;;IAG1B,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAC5C,IAAI,CAAC,CAAC,CAAC,EACP,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,MAAM,EAAE,GAAI,IAAY,CAAC,KAAK,CAAC,MAAM,IAAK,IAAY,CAAC,KAAK,CAAC,IAAI;YACjE,IAAI,CAAC,EAAE,EAAE;AACP,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;;iBAChB;gBACL,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;;SAEzC,CAAC,CACH;;AAGH,IAAA,UAAU,CAAC,IAAe,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAK;AAC1D,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,iCAAiC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5G,SAAC,CAAC;;AAGI,IAAA,eAAe,CAAC,IAAS,EAAE,KAAuB,EAAE,QAA2B,EAAA;AACrF,QAAA,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;AAC1D,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,mBAAmB;QAEtD,IAAI,iBAAiB,GAAG,6BAA6B;AAErD,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AAC/C,gBAAA,IAAI,gBAAgB;gBAEpB,IAAI,WAAW,EAAE;oBACf,IAAI,mBAAmB,EAAE;AACvB,wBAAA,gBAAgB,GAAG,mBAAmB,KAAK,CAAC,GAAG,kBAAkB,GAAG,gBAAgB;;yBAC/E;AACL,wBAAA,gBAAgB,GAAG,WAAW,KAAK,CAAC,GAAG,eAAe,GAAG,aAAa;;;qBAEnE;AACL,oBAAA,gBAAgB,GAAG,mBAAmB,KAAK,CAAC,GAAG,UAAU,GAAG,QAAQ;;AAGtE,gBAAA,iBAAiB,GAAG,CAAA,4BAAA,EAA+B,gBAAgB,CAAA,CAAE;;;aAElE;AACL,YAAA,IAAI;AACF,gBAAA,MAAM,EACJ,KAAK,EAAE,EAAE,UAAU,EAAE,EACtB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAE5B,gBAAA,IAAI,UAAU,KAAK,GAAG,EAAE;oBACtB,iBAAiB,GAAG,gCAAgC;;;YAEtD,MAAM;;QAGV,MAAM,IAAI,GAAG,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE;QAExF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE;AAC1D,YAAA,OAAO,EAAE,mBAAmB;AAC5B,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;AAEF,QAAA,IAAI,WAAmB;AACvB,QAAA,IAAI,mBAAmB,KAAK,CAAC,EAAE;YAC7B,WAAW,GAAG,oBAAoB;;AAC7B,aAAA,IAAI,WAAW,GAAG,CAAC,EAAE;YAC1B,WAAW,GAAG,sBAAsB;;aAC/B;YACL,WAAW,GAAG,mBAAmB;;AAGnC,QAAA,IAAI,CAAC;AACF,aAAA,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE;AACrC,YAAA,UAAU,EAAE;SACb;AACA,aAAA,QAAQ;aACR,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;;AAG1C,IAAA,aAAa,CAAC,KAAkB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC;aAChB,OAAO,CAAC,KAAK;aACb,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;aAC3B,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhF,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,SAAS,CAC1B,MAAK;YACH,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;AACnC,SAAC,EACD,CAAC,KAAK,KAAI;YACR,IAAI,iBAAiB,GAAG,6BAA6B;YAErD,IAAI,SAAS,GAAG,IAAI;AACpB,YAAA,IAAI;gBACF,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;;YACrC,MAAM;YAER,IAAI,SAAS,EAAE,KAAK,EAAE,UAAU,KAAK,GAAG,EAAE;gBACxC,iBAAiB,GAAG,gCAAgC;;AAGtD,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,CAAC;AACvD,SAAC,CACF;;IAGK,wBAAwB,CAAC,IAAS,EAAE,6BAAsC,EAAA;;QAEhF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,4BAA4B,GAAiC;gBACjE,IAAI;AACJ,gBAAA,gBAAgB,EAAE,IAAI;AACtB,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB;AAC1D,gBAAA,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB;AACzD,gBAAA,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,yBAAyB;AAC9D,gBAAA,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC,+BAA+B;AAC1E,gBAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC;aAC7C;AACD,YAAA,IAAI,CAAC;AACF,iBAAA,0BAA0B,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,6BAA6B;AAC1H,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,sBAAsB,KAAI;AAC/B,oBAAA,QAAQ,sBAAsB,CAAC,MAAM;wBACnC,KAAK,4BAA4B,CAAC,OAAO;AACvC,4BAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;AACjC,4BAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;4BAC1E;AACF,wBAAA,KAAK,4BAA4B,CAAC,IAAI,EAAE;AACtC,4BAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG;4BACxF,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;4BACvG;;AAEF,wBAAA;4BACE;;;AAGP,aAAA,CAAC;;aACC;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,gCAAgC,CAAC;;;IAIhE,oBAAoB,CAAC,IAAS,EAAE,6BAAsC,EAAA;;QAE5E,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,6BAA6B,CAAC;;aAC3E;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,gCAAgC,CAAC;;;IAIhE,aAAa,CAAC,YAAY,EAAE,iBAAyB,EAAA;QAC3D,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC,IAAI,EAAE;QACpD,MAAM,mBAAmB,GAAG,YAAY,GAAG,oBAAoB,CAAC,IAAI,EAAE;QAEtE,MAAM,wBAAwB,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,WAAW,KAC1F,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAClG;QAED,GAAG,CAAC,GAAG,wBAAwB,EAAE,EAAE,CAAC,IAAI,CAAC;AACtC,aAAA,IAAI,CACH,QAAQ,CAAC,MAAK;YACZ,MAAM,kBAAkB,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,UAAU,CAAC;AAElE,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC;iBAC1B,OAAO,CAAC,kBAAkB;AAC1B,iBAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK;AACpD,iBAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;;qBACpF;AACL,oBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC;;AAEhF,aAAC,CAAC;YAEJ,OAAO,GAAG,CAAC,GAAG,eAAe,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC1C,SAAC,CAAC;aAEH,SAAS,CACR,MAAK;AACH,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;AACnC,SAAC,EACD,CAAC,KAAK,KAAI;YACR,IAAI,OAAO,GAAG,6BAA6B;YAE3C,IAAI,SAAS,GAAG,IAAI;AACpB,YAAA,IAAI;gBACF,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;;YACrC,MAAM;YAER,IAAI,SAAS,EAAE,KAAK,EAAE,UAAU,KAAK,GAAG,EAAE;gBACxC,OAAO,GAAG,gCAAgC;;AAG5C,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7C,SAAC,CACF;;AAGL,IAAA,WAAW,CAAC,KAAkB,EAAE,SAAS,GAAG,IAAI,EAAE,6BAAsC,EAAA;AACtF,QAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;QACnD,MAAM,KAAK,GAAkC,EAAE;AAE/C,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACnC,SAAC,CAAC;QAEF,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,IAAuB,KAAI;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACvC,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAErD,YAAA,IAAI,WAAW,IAAI,MAAM,CAAC,aAAa,EAAE;AACvC,gBAAA,MAAM,iBAAiB,GAAW,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC;AAC/F,gBAAA,MAAM,MAAM,GAAkB,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;gBAE7F,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CACjE,iBAAiB,EACjB,MAAM,EACN,EAAE,UAAU,EAAE,CAAA,IAAA,EAAO,WAAW,CAAC,IAAI,CAAA,SAAA,CAAW,EAAE,EAClD,WAAW,CAAC,MAAM,CACnB;gBAED,IAAI,MAAM,EAAE;AACV,oBAAA,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,MAAK;wBACpC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3C,qBAAC,CAAC;;;iBAEC,IAAI,WAAW,EAAE;gBACtB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;;AAGnG,YAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE;AACvC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;;YAEnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAClD,SAAC,CAAC;;AAGJ,IAAA,eAAe,CAAC,KAAwB,EAAA;QACtC,MAAM,KAAK,GAAkC,EAAE;AAE/C,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACvC,SAAC,CAAC;QAEF,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAE9C,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC;;AAG3C,YAAA,IAAI,aAAa,CAAC,aAAa,EAAE;AAC/B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;;AAErC,SAAC,CAAC;;AAGI,IAAA,cAAc,CAAC,IAAqB,EAAA;AAC1C,QAAA,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI;AAEzB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CACzC,GAAG,CAAC,OAAO;YACT,EAAE;YACF,IAAI;AACJ,YAAA,MAAM,EAAE;SACT,CAAC,CAAC,EACH,UAAU,CAAC,MACT,EAAE,CAAC;YACD,EAAE;YACF,IAAI;AACJ,YAAA,MAAM,EAAE;SACT,CAAC,CACH,CACF;;AAGK,IAAA,qBAAqB,CAAC,MAAoB,EAAA;QAChD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC1C,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,yCAAyC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;;AAGrH,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;YACpB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,kCAAkC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;;;AAIvG,IAAA,WAAW,CAAC,IAAe,EAAA;AACjC,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;AAEtB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,OAAO;AACT,YAAA,MAAM,EAAE,CAAC;YACT;AACD,SAAA,CAAC,CAAC,EACH,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK;AAEtD,YAAA,OAAO,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC;gBACT,UAAU;gBACV;AACD,aAAA,CAAC;SACH,CAAC,CACH;;IAGK,UAAU,CAAC,YAAwB,EAAE,EAAA;AAC3C,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB;;AAGF,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAElE,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,KAAI;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;AAE9C,YAAA,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AACzB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;;AAGnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC/B,SAAC,CAAC;;AAGI,IAAA,gBAAgB,CAAC,IAAc,EAAA;AACrC,QAAA,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI;AAEzB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,IAAI,CAC9C,GAAG,CAAC,OAAO;AACT,YAAA,MAAM,EAAE,CAAC;YACT,EAAE;YACF;SACD,CAAC,CAAC,EACH,UAAU,CAAC,MACT,EAAE,CAAC;AACD,YAAA,MAAM,EAAE,CAAC;YACT,EAAE;YACF;SACD,CAAC,CACH,CACF;;IAGK,aAAa,CAAC,OAAkC,EAAE,EAAA;AACxD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,UAAU,GAAA;AACZ,gBAAA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;aAC1B;AACD,YAAA,IAAI,aAAa,GAAA;AACf,gBAAA,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;aAC7B;AACD,YAAA,IAAI,SAAS,GAAA;AACX,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;aAC9B;AACD,YAAA,IAAI,YAAY,GAAA;AACd,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;aACjC;AACD,YAAA,IAAI,YAAY,GAAA;gBACd,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU;aAC9C;AACD,YAAA,IAAI,SAAS,GAAA;gBACX,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa;aAC9C;YACD,KAAK,GAAA;AACH,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,gBAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;SAEpB;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AAC/B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;iBACjB;AACL,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGrB,YAAA,OAAO,GAAG;SACX,EAAE,MAAM,CAAC;;AAGJ,IAAA,gBAAgB,CAAC,MAAoB,EAAA;AAC3C,QAAA,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACjE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,sDAAsD,EAAE,IAAI,EAAE;gBACjG,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;AAC5B,gBAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;AACrB,aAAA,CAAC;YACF;;AAGF,QAAA,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE;YACrE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,oDAAoD,EAAE,IAAI,EAAE;AAC/F,gBAAA,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;AACrB,aAAA,CAAC;YACF;;AAGF,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,8CAA8C,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzH;;AAGF,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;YACpB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,gDAAgD,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzH;;AAGF,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,4CAA4C,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACxH;;AAGF,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,8CAA8C,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACxH;;;AAII,IAAA,uBAAuB,CAAC,MAAoB,EAAA;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAEtD,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,iBAAiB,GAAW,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC;YAC/F,MAAM,MAAM,GAAW,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE;AAC/G,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,KAAK,OAAO,GAAG,oBAAoB,GAAG,mBAAmB;YAE5F,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC;AAElI,YAAA,IAAI,WAAW,CAAC,eAAe,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC5E,gBAAA,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,MAAK;AACpC,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,oBAAA,MAAM,IAAI,GAAa,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;AACnD,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;oBACtD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC;AAEjF,oBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;AAC/B,wBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;yBAC7D;wBACL,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;;AAEvD,iBAAC,CAAC;;;;AAKA,IAAA,MAAM,CAAC,KAAW,EAAA;AACxB,QAAA,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;;AAG7B,IAAA,gBAAgB,CAAC,IAAc,EAAA;QACrC,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO;;AAGvE,IAAA,qBAAqB,CAAC,MAAoB,EAAA;QAChD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC1C,OAAO;AACL,gBAAA,GAAG,EAAE,wDAAwD;gBAC7D,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;AACtC,gBAAA,IAAI,EAAE;aACP;;AAGH,QAAA,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;YACjD,OAAO;gBACL,GAAG,EACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK;AAC5B,sBAAE;AACF,sBAAE,iDAAiD;AACvD,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,EAAE;aACP;;AAGH,QAAA,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;YAClD,OAAO;AACL,gBAAA,GAAG,EAAE,0DAA0D;AAC/D,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,EAAE;aACP;;QAGH,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC/C,OAAO;AACL,gBAAA,GAAG,EAAE,8CAA8C;AACnD,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE;aACP;;QAGH,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE;YAC9C,OAAO;AACL,gBAAA,GAAG,EAAE,gDAAgD;AACrD,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;AAC9C,gBAAA,eAAe,EAAE,kBAAkB;AACnC,gBAAA,IAAI,EAAE;aACP;;AAGH,QAAA,OAAO,IAAI;;AAGL,IAAA,IAAI,CAAC,SAAgB,EAAE,IAAW,EAAE,QAAQ,GAAG,IAAI,EAAA;AACzD,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AAElD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAC1B,IAAI,QAAQ,EAAE;AACZ,gBAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;;iBAC3C;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;;AAErD,SAAC,CAAC;;AAGI,IAAA,UAAU,CAAC,IAAS,EAAA;AAC1B,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK;AAC3B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AAE7C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CACxC,GAAG,CAAC,OAAO;YACT,EAAE;YACF,IAAI;AACJ,YAAA,MAAM,EAAE;SACT,CAAC,CAAC,EACH,UAAU,CAAC,MACT,EAAE,CAAC;YACD,EAAE;YACF,IAAI;AACJ,YAAA,MAAM,EAAE;SACT,CAAC,CACH,CACF;;AAGK,IAAA,oBAAoB,CAAC,MAAoB,EAAA;QAC/C,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACzC,OAAO;AACL,gBAAA,GAAG,EAAE,0CAA0C;gBAC/C,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;AACtC,gBAAA,IAAI,EAAE;aACP;;QAGH,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC/C,OAAO;AACL,gBAAA,GAAG,EAAE,wCAAwC;gBAC7C,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AACzC,gBAAA,IAAI,EAAE;aACP;;AAGH,QAAA,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACrE,OAAO;AACL,gBAAA,GAAG,EAAE,gDAAgD;AACrD,gBAAA,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;AACtE,gBAAA,IAAI,EAAE;aACP;;QAGH,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,YAAY,EAAE;YAC5C,OAAO;AACL,gBAAA,GAAG,EAAE,kDAAkD;AACvD,gBAAA,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;AACtE,gBAAA,IAAI,EAAE;aACP;;QAGH,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YAC7C,OAAO;AACL,gBAAA,GAAG,EAAE,mCAAmC;AACxC,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACrC,gBAAA,IAAI,EAAE;aACP;;QAGH,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC7C,OAAO;AACL,gBAAA,GAAG,EAAE,0CAA0C;AAC/C,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACxC,gBAAA,IAAI,EAAE;aACP;;AAGH,QAAA,OAAO,IAAI;;AAGL,IAAA,eAAe,CAAC,KAAuB,EAAE,IAAS,EAAE,YAAkB,EAAA;QAC5E,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC;QACzD,MAAM,kBAAkB,GAAG,YAAY,GAAG,oBAAoB,CAAC,CAAC,MAAM,IAAI,CAAC;QAC3E,MAAM,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC;QAErD,IAAI,cAAc,GAAG,EAAE;QACvB,IAAI,qBAAqB,GAAG,EAAE;QAC9B,IAAI,aAAa,GAAG,EAAE;QACtB,IAAI,YAAY,GAAG,EAAE;AAErB,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;AAE5B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC/C,MAAM,iBAAiB,GAAG,8BAA8B;gBACxD,IAAI,gBAAgB,GAAG,EAAE;gBAEzB,IAAI,SAAS,EAAE;AACb,oBAAA,gBAAgB,GAAG,SAAS,KAAK,CAAC,GAAG,UAAU,GAAG,QAAQ;AAC1D,oBAAA,cAAc,GAAG,CAAG,EAAA,iBAAiB,CAAG,EAAA,gBAAgB,EAAE;;gBAG5D,IAAI,kBAAkB,EAAE;AACtB,oBAAA,gBAAgB,GAAG,kBAAkB,KAAK,CAAC,GAAG,kBAAkB,GAAG,gBAAgB;AACnF,oBAAA,qBAAqB,GAAG,CAAG,EAAA,iBAAiB,CAAG,EAAA,gBAAgB,EAAE;;gBAGnE,IAAI,QAAQ,EAAE;;AAEZ,oBAAA,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,EAAE;AAC7B,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;wBACtE,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;yBACzC;wBACL,gBAAgB,GAAG,cAAc;AACjC,wBAAA,aAAa,GAAG,CAAG,EAAA,iBAAiB,CAAG,EAAA,gBAAgB,EAAE;;;;iBAGxD;gBACL,YAAY,GAAG,6BAA6B;;;aAEzC;AACL,YAAA,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;;QAG3C,MAAM,IAAI,GAAG,SAAS,GAAG,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE;QACnG,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa;AAE3D,QAAA,MAAM,2BAA2B,GAAG,cAAc,IAAI,qBAAqB,GAAG,GAAG,GAAG,EAAE;AACtF,QAAA,MAAM,mBAAmB,GAAG,CAAC,cAAc,IAAI,qBAAqB,KAAK,aAAa,GAAG,GAAG,GAAG,EAAE;AAEjG,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAEhF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,qBAAqB,EAAE,aAAa,CAAC,EAAE;AAChG,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,SAAS,EAAE;AACZ,SAAA,CAAC;QAEF,IAAI,gBAAgB,GAAG,sBAAsB;QAC7C,IAAI,kBAAkB,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE;YAC/C,gBAAgB,GAAG,oBAAoB;;aAClC,IAAI,QAAQ,KAAK,CAAC,IAAI,kBAAkB,KAAK,CAAC,EAAE;YACrD,gBAAgB,GAAG,mBAAmB;;;AAIxC,QAAA,IAAI,CAAC;aACF,sBAAsB,CACrB,QAAQ,CAAC,cAAc,CAAC,GAAG,2BAA2B,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,EACxI,IAAI,EACJ;AACE,YAAA,UAAU,EAAE;SACb;AAEF,aAAA,QAAQ;AACR,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;;AAG/D,IAAA,eAAe,CAAC,sBAA8B,EAAA;QACpD,IAAI,sBAAsB,EAAE;YAC1B,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC,EAAE,KAAK,EAAE;;;AAIxE,IAAA,mBAAmB,CAAC,IAAe,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE;AACnC,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,kBAAkB,EAAE,oBAAoB;AACxC,gBAAA,oBAAoB,EAAE,IAAI;AAC1B,gBAAA,mBAAmB,EAAE,KAAK;gBAC1B,UAAU,EAAE,UAAU,CAAC,KAAK;AAC5B,gBAAA,gBAAgB,EAAE,wBAAwB;gBAC1C,aAAa,EAAE,IAAI,CAAC;AACrB,aAAA;AACD,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;;wGAjlCO,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA;;4FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC5ED;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAUU,eAAe,CAAA;AAClB,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAElD,YAAY,GAAG,YAAY,CACzB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAoB,eAAe,CAAC,WAAW,CAAC,EACtD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,6BAA6B,CAAC;;aACvF;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACnC,oBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,6BAA6B,CAAC;;AAEjG,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,eAAe,GAAG,YAAY,CAC5B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAuB,eAAe,CAAC,cAAc,CAAC,EAC5D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,6BAA6B,CAAC;;aAC1F;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACnC,oBAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,6BAA6B,CAAC;;AAEpG,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;wGA/CU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAf,eAAe,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;AC/BD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAwCU,WAAW,CAAA;AACL,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACjD,IAAA,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1C,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;IAEjD,UAAU,GAAG,YAAY,CACvB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAkB,eAAe,CAAC,KAAK,CAAC,EAC9C,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;aAC7F;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAEtG,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,aAAa,GAAG,YAAY,CAC1B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAqB,eAAe,CAAC,OAAO,CAAC,EACnD,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;;aAC3C;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;oBACnC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;;AAErD,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,kBAAkB,GAAG,YAAY,CAC/B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAA0B,eAAe,CAAC,YAAY,CAAC,EAC7D,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;aACrG;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;gBACvB,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAE/G,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,oBAAoB,GAAG,YAAY,CACjC,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAA4B,eAAe,CAAC,cAAc,CAAC,EACjE,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;aACvG;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;gBACvB,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAEjH,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,YAAY,GAAG,YAAY,CACzB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAoB,eAAe,CAAC,MAAM,CAAC,EACjD,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;aACjH;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;gBACvB,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAE3H,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,gBAAgB,GAAG,YAAY,CAC7B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAwB,eAAe,CAAC,UAAU,CAAC,EACzD,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC;;KAEtD,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,aAAa,GAAG,YAAY,CAC1B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAqB,eAAe,CAAC,YAAY,CAAC,EACxD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;;aAC3C;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,gBAAgB;AACvB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,gBAAA,IAAI,IAAI,EAAE,EAAE,EAAE;oBACZ,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;;AAE7C,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,WAAW,GAAG,YAAY,CACxB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAmB,eAAe,CAAC,UAAU,CAAC,EACpD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;;aACzC;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,MAAM,EAAE;AACrB,oBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAEzG,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,UAAU,GAAG,YAAY,CACvB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAkB,eAAe,CAAC,IAAI,CAAC,EAC7C,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;;aACxC;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACnC,oBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAEvG,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,UAAU,GAAG,YAAY,CACvB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAkB,eAAe,CAAC,IAAI,CAAC,EAC7C,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;;aACxC;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACnC,oBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAEvG,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,kBAAkB,GAAG,YAAY,CAC/B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAA0B,eAAe,CAAC,iBAAiB,CAAC,EAClE,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC;AACrD,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,QAAA,IAAI,MAAM,EAAE,OAAO,EAAE;YACnB,MAAM,KAAK,GAAG,wBAAwB;AACtC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;aAChG;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;oBACnC,MAAM,KAAK,GAAG,wBAAwB;AACtC,oBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;AAEzG,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,iBAAiB,GAAG,YAAY,CAC9B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAyB,eAAe,CAAC,gBAAgB,CAAC,EAChE,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC;AACrD,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAE3E,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG;AACnD,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;YAChF,MAAM,KAAK,GAAG,wBAAwB;AAEtC,YAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAa,UAAA,EAAA,iBAAiB,CAAE,CAAA,CAAC,CAAC;;iBACpH;AACL,gBAAA,IAAI,CAAC;qBACF,MAAM,CAAC,eAAe;AACtB,qBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,qBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,oBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACnC,wBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAa,UAAA,EAAA,iBAAiB,CAAE,CAAA,CAAC,CAAC;;AAE7H,iBAAC,CAAC;;AAER,SAAC,CAAC;KACH,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,eAAe,GAAG,YAAY,CAC5B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAuB,eAAe,CAAC,cAAc,CAAC,EAC5D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,EAAE,OAAO,EAAE;YACnB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;;aAC7C;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAE3G,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,UAAU,GAAG,YAAY,CACvB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAkB,eAAe,CAAC,SAAS,CAAC,EAClD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;;aACzB;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;;AAElC,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,YAAY,GAAG,YAAY,CACzB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAoB,eAAe,CAAC,gBAAgB,CAAC,EAC3D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,EAAE,OAAO,EAAE;YACnB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;;aACzC;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,IAAI,EAAE;oBACnB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;;AAElD,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,WAAW,GAAG,YAAY,CACxB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAsB,eAAe,CAAC,aAAa,CAAC,EAC1D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,EAAE,OAAO,EAAE;YACnB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;;aAC5C;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACnC,oBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAE9G,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;AAED,IAAA,SAAS,CAAC,IAAS,EAAA;AACjB,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;;AAEf,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ;YAE5C,IAAI,EAAE,EAAE;gBACN,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC;;;;IAKzD,YAAY,GAAG,YAAY,CACzB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAoB,eAAe,CAAC,WAAW,CAAC,EACtD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,EAAE,OAAO,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;;aACpF;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;oBACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;;AAE9F,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,gBAAgB,GAAG,YAAY,CAC7B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAwB,eAAe,CAAC,eAAe,CAAC,EAC9D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,EAAE,OAAO,EAAE;YACnB,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC;;aAClD;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACnC,oBAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAE/D,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;wGAtaU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAX,WAAW,EAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB;;;AC7DD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAqBI,MAAM,aAAa,GAAG,cAAc,CAAC,eAAe,EAAE,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,MAAM;IACrG,SAAS;IACT;AACD,CAAA,CAAC,CAAC;MAGU,aAAa,CAAA;AAChB,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACxC,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAElC,iBAAiB,GAAG,YAAY,CAC9B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAyB,iBAAiB,CAAC,UAAU,CAAC,EAC5D,GAAG,CAAC,MAAK;QACP,IAAI,CAAC,eAAe,EAAE;KACvB,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,SAAS,GAAG,YAAY,CACtB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAiB,iBAAiB,CAAC,QAAQ,CAAC,EAClD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,cAAc,EAAE;YACzB,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,cAAc;YAEhD,IAAI,QAAQ,EAAE;gBACZ,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;gBAEvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;oBACtF,WAAW,EAAE,EAAE,QAAQ;AACxB,iBAAA,CAAC;;YAGJ,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;oBACvE,WAAW,EAAE,EAAE,IAAI;AACpB,iBAAA,CAAC;;;aAEC;YACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;;KAE3E,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,SAAS,GAAG,YAAY,CACtB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAiB,iBAAiB,CAAC,QAAQ,CAAC,EAClD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE;AACzB,YAAA,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAY;AAE1D,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE;gBACxE,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;;;aAE/C;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,aAAa;AACpB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,gBAAA,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE;AAC1B,oBAAA,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAY;AAEjE,oBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE;AACxE,wBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI;wBACxD,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC;;;AAGjD,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,gBAAgB,GAAG,YAAY,CAC7B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAwB,iBAAiB,CAAC,eAAe,CAAC,EAChE,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,QAAA,IAAI,MAAM,CAAC,cAAc,EAAE;YACzB,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,cAAc;YAChD,IAAI,QAAQ,EAAE;gBACZ,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AACvD,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE;oBACxG,WAAW,EAAE,EAAE,QAAQ;AACxB,iBAAA,CAAC;;YAGJ,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE;oBACzF,WAAW,EAAE,EAAE,IAAI;AACpB,iBAAA,CAAC;;;aAEC;YACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;;KAE7F,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,cAAc,GAAG,YAAY,CAC3B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAsB,iBAAiB,CAAC,aAAa,CAAC,EAC5D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACnB,YAAA,MAAM,CAAC,WAAW;AAClB,YAAA;AACE,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM;AAClC;AACF;AACF,SAAA,CAAC;KACH,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAEO,cAAc,CAAC,MAAc,EAAE,QAAgB,EAAA;QACrD,IAAI,CAAC,MAAM,EAAE;YACX;;AAGF,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QACrC,IAAI,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACxC,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;QAEjF,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAEpD,QAAA,MAAM,IAAI,GAAG,CAAC,eAAe,CAAC;QAC9B,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;IAG3C,eAAe,GAAA;QACb,MAAM,SAAS,GAAQ,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClG,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,SAAS,CAAC,iBAAiB,EAAE;gBAC/B,SAAS,CAAC,iBAAiB,EAAE;;AACxB,iBAAA,IAAI,SAAS,CAAC,uBAAuB,EAAE;gBAC5C,SAAS,CAAC,uBAAuB,EAAE;;AAC9B,iBAAA,IAAI,SAAS,CAAC,oBAAoB,EAAE;gBACzC,SAAS,CAAC,oBAAoB,EAAE;;AAC3B,iBAAA,IAAI,SAAS,CAAC,mBAAmB,EAAE;gBACxC,SAAS,CAAC,mBAAmB,EAAE;;;;AAK7B,IAAA,qBAAqB,CAAC,GAAW,EAAA;QACvC,MAAM,OAAO,GAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClD,MAAM,eAAe,GAAoB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAE9E,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC;;AAGd,QAAA,MAAM,WAAW,GAAiB,eAAe,CAAC,QAAQ;AAE1D,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAA;YAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AACpC,YAAA,OAAO,GAAG;SACX,EAAE,EAAE,CAAC;;wGA3KG,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAb,aAAa,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;AChDD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAQU,uBAAuB,CAAA;AAOd,IAAA,MAAA;IANZ,cAAc,GAAG,EAAE;AAE3B,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;;AAG5B,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM;;AAE1B,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;IAG7B,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;aACrC;YACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC;;;IAI7C,gBAAgB,GAAA;QACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;;wGAvBxB,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC7BD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAEH;;;;;AAKG;AACG,SAAU,UAAU,CAAC,KAAa,EAAA;IACtC,IAAI,KAAK,EAAE;AACT,QAAA,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;QAC/B,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;AAEzC,IAAA,OAAO,KAAK;AACd;AAEA;;;;;;AAMG;AACa,SAAA,wBAAwB,CAAC,IAAY,EAAE,MAAgB,EAAA;IACrE,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,MAAM,GAAG,GAAG;AAEhB,IAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACxB,MAAM,GAAG,GAAG;QACZ,MAAM,GAAG,EAAE;AACX,QAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AAG1B,IAAA,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,MAAM,GAAG,EAAE;QACX,MAAM,GAAG,EAAE;;AAGb,IAAA,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,IAAI,CAAA,EAAG,MAAM,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG;AAC/F;AAEA;;;;;;AAMG;AACG,SAAU,gBAAgB,CAAC,SAAiB,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,EAAA;IACtE,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,EAAE;;AAEX,IAAA,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE;AAE5B,IAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtD,QAAA,OAAO,SAAS;;IAGlB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;AAEpC,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,OAAO;AACxD,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGhH,IAAA,OAAO,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC;AACpD;AAEA;;;;;AAKG;AACG,SAAU,gCAAgC,CAAC,YAAoB,EAAA;IACnE,IAAI,YAAY,EAAE;AAChB,QAAA,MAAM,YAAY,GAA2B,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9I,QAAA,OAAO,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC;;AAE9C,IAAA,OAAO,EAAE;AACX;AAEA;;;;;AAKG;AACG,SAAU,mCAAmC,CAAC,YAAoB,EAAA;IACtE,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,OAAO,EAAE;;AAGX,IAAA,MAAM,SAAS,GAAG,gCAAgC,CAAC,YAAY,CAAC;IAChE,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,EAAE;;IAGX,MAAM,UAAU,GAAG,4BAA4B;IAC/C,MAAM,SAAS,GAAa,EAAE;AAC9B,IAAA,IAAI,KAA6B;IAEjC,QAAQ,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG;AAC3C,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YACZ,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;AACzC,aAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAC5B,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAIxB,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO;aACJ,KAAK,CAAC,gBAAgB;aACtB,GAAG,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,CAAC;aACxC,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,GAAG;AACR,aAAA,IAAI,EAAE;;IAGX,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACnC;AAEA;;;;;AAKG;AACH,SAAS,oBAAoB,CAAC,SAAiB,EAAA;IAC7C,MAAM,KAAK,GAAG,YAAY;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IACpC,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;AAErC,IAAA,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE;IACpC,IAAI,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AAC3C,QAAA,OAAO,WAAW;;AAEpB,IAAA,OAAO,EAAE;AACX;AAEA;;;;;AAKG;AACG,SAAU,8BAA8B,CAAC,YAAoB,EAAA;IACjE,IAAI,YAAY,EAAE;AAChB,QAAA,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;;AAEjC,IAAA,OAAO,IAAI;AACb;AAEA;;;;;AAKG;AACH,SAAS,aAAa,CAAC,SAAiB,EAAA;IACtC,MAAM,YAAY,GAAG,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAClD,OAAO,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE;AAC/C;;AC1LA;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAWU,aAAa,CAAA;AACP,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,YAAY,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAChD,IAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;IAE1E,OAAO,GAAG,YAAY,CACpB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAe,iBAAiB,CAAC,MAAM,CAAC,EAC9C,GAAG,CAAC,MAAK;AACP,QAAA,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,EAAE;KAChD,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,aAAa,GAAG,YAAY,CAC1B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAqB,iBAAiB,CAAC,YAAY,CAAC,EAC1D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtF,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,eAAe,CAAC,SAAS,CAAC;QAC1F,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,mBAAmB,GAAG,SAAS,CAAC;KAC7F,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;wGA5BU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAb,aAAa,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;AChCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAwBU,cAAc,CAAA;AACjB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC1C,IAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAE9C,cAAc,GAAG,YAAY,CAC3B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAsB,kBAAkB,CAAC,MAAM,CAAC,EACtD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;;aACrC;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,OAAO,EAAE;AACtB,oBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;;AAE1D,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,aAAa,GAAG,YAAY,CAC1B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAqB,kBAAkB,CAAC,KAAK,CAAC,EACpD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;;aACpC;AACL,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,OAAO,EAAE;AACtB,oBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;;AAE9G,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,cAAc,GAAG,YAAY,CAC3B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAsB,kBAAkB,CAAC,MAAM,CAAC,EACtD,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAC5C,GAAG,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAC1D,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,gBAAgB,GAAG,YAAY,CAC7B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAwB,kBAAkB,CAAC,QAAQ,CAAC,EAC1D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AAC9B,QAAA,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,OAAO;AACd,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,WAAW,KAAI;AACzB,gBAAA,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACpE,oBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,qDAAqD,CAAC;;qBACpF;oBACL,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;;AAE1D,aAAC,CAAC;;KAEP,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;AAEO,IAAA,qBAAqB,CAAC,SAAiB,EAAE,KAAK,GAAG,WAAW,EAAA;AAClE,QAAA,IAAI,CAAC;aACF,OAAO,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE;AACvD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAC5B,IAAI,CAAC,CAAC,CAAC;AAER,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,EAAE,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;aAC1D;AACD,YAAA,KAAK,EAAE,CAAC,KAAwB,KAAI;AAClC,gBAAA,QAAQ,KAAK,CAAC,MAAM;AAClB,oBAAA,KAAK,GAAG;AACN,wBAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,qDAAqD,CAAC;wBAC3F;AACF,oBAAA,KAAK,GAAG;AACN,wBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,+CAA+C,CAAC;wBACnF;AACF,oBAAA;AACE,wBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,mDAAmD,CAAC;;;AAG9F,SAAA,CAAC;;IAGN,cAAc,GAAG,YAAY,CAC3B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAsB,kBAAkB,CAAC,MAAM,CAAC,EACtD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,eAAe;AACtB,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,YAAA,IAAI,SAAS,EAAE,OAAO,EAAE;gBACtB,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK;gBACtC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,OAAO;AAEzD,gBAAA,MAAM,QAAQ,GAAG;oBACf,KAAK;oBACL,WAAW;oBACX;iBACD;gBAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC;;AAE5C,SAAC,CAAC;KACL,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;wGAvIU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAd,cAAc,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;AC7CD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAsBU,aAAa,CAAA;AAChB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAExC,IAAA,SAAS;AACT,IAAA,WAAW;AACX,IAAA,gBAAgB;IAChB,wBAAwB,GAAG,kDAAkD;AAE9F,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,cAAc,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAEjD,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;QAEpE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAqB;AACpE,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,kBAAkB;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM;QAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QACrC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;QAEnD,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAqB;AAC3E,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,yBAAyB;AACpD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,MAAM;QACnC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAC5C,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;YACpD,IAAI,CAAC,aAAa,EAAE;AACtB,SAAC,CAAC;QACF,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC;QAE1D,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAqB;AACtE,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,mBAAmB;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,MAAM;QAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QACvC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1E,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;;IAGvD,YAAY,GAAG,YAAY,CACzB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAoB,iBAAiB,CAAC,WAAW,CAAC,EACxD,GAAG,CAAC,MAAK;QACP,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,wBAAwB,CAAC;AAC1F,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;KACvB,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,aAAa,GAAG,YAAY,CAC1B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAqB,iBAAiB,CAAC,YAAY,CAAC,EAC1D,GAAG,CAAC,MAAK;QACP,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC;AAC5F,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;KACzB,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,cAAc,GAAG,YAAY,CAC3B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAA0B,iBAAiB,CAAC,iBAAiB,CAAC,EACpE,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;AACvD,YAAA,MAAM,IAAI,GAAQ,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI;YACzD,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC;;AAC9C,aAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;AACvH,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;;KAEhC,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC;AACF,aAAA,WAAW;AACX,aAAA,IAAI,CACH,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,uBAAuB,CAAC;AAC3D,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,SAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,IAAU,KAAI;YACxB,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7E,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,EAAE;;AAEpC,SAAC,CAAC;;AAGE,IAAA,MAAM,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,gBAAgB;AACvB,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,IAAI,IAAI,EAAE,EAAE,EAAE;AACZ,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,aAAiC;gBACrD,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAClD,CAAC,IAAS,KACR,IAAI,SAAS,CAAC,IAAI,EAAE;oBAClB,QAAQ,EAAE,IAAI,CAAC,EAAE;AACjB,oBAAA,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAC9D,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC,CACL;AAED,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;;AAE3B,SAAC,CAAC;;AAGE,IAAA,WAAW,CAAC,KAAkB,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;gBACnB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;AACvC,gBAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC5C,aAAC,CAAC;;;AAIN,IAAA,eAAe,CAAC,IAAsB,EAAA;QACpC,IAAI,CAAC,IAAI,EAAE;YACT;;AAGF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,YAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAE1C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AACjF,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;AACtH,oBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;gBAG5D,YAAY,CAAC,WAAW,EAAE;AAC5B,aAAC,CAAC;AACJ,SAAC,CAAC;;IAGI,sCAAsC,CAAC,KAAuB,EAAE,sBAA8B,EAAA;AACpG,QAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,YAAA,MAAM,CAAC,gBAAgB,CACrB,OAAO,EACP,MAAK;gBACH,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC;AAClF,gBAAA,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE;AAClG,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC;gBACF,cAAc,CAAC,KAAK,EAAE;AACxB,aAAC,EACD;AACE,gBAAA,IAAI,EAAE;AACP,aAAA,CACF;AACH,SAAC,EACD;AACE,YAAA,IAAI,EAAE;AACP,SAAA,CACF;;wGA9KQ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAb,aAAa,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;AC3CD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAsBU,iCAAiC,CAAA;AAMlC,IAAA,kBAAA;AACA,IAAA,KAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;AACwB,IAAA,IAAA;AAT3B,IAAA,IAAI;IAEX,KAAK,GAAG,EAAE;IAEV,WACU,CAAA,kBAAsC,EACtC,KAAsB,EACtB,WAA+B,EAC/B,SAA0D,EAClC,IAAU,EAAA;QAJlC,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAS,CAAA,SAAA,GAAT,SAAS;QACe,IAAI,CAAA,IAAA,GAAJ,IAAI;;IAGtC,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACjC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACxH,YAAA,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAChG,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;AAC5G,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,wCAAwC,GAAG,sCAAsC,EACtG,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAC7B;;IAGH,QAAQ,GAAA;AACN,QAAA,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;AACjC,YAAA,UAAU,EAAE;AACV,gBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;AACjC,gBAAA,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC;SACF;AACD,QAAA,MAAM,IAAI,GAAS,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;;IAGnD,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;IAGhB,uBAAuB,CAAC,EAAE,KAAK,EAAsB,EAAA;QAC3D,MAAM,iBAAiB,GAAG,wBAAwB;QAClD,MAAM,OAAO,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAE9C,QAAA,OAAO;AACL,cAAE;AACF,cAAE;AACE,gBAAA,OAAO,EAAE,CAAmD,iDAAA;aAC7D;;IAGC,eAAe,CAAC,EAAE,KAAK,EAAsB,EAAA;QACnD,MAAM,OAAO,GAAY,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG;AAErE,QAAA,OAAO;AACL,cAAE;AACF,cAAE;AACE,gBAAA,OAAO,EAAE,CAA2C,yCAAA;aACrD;;IAGC,gBAAgB,CAAC,EAAE,KAAK,EAAsB,EAAA;AACpD,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AAEtC,YAAA,OAAO;AACL,kBAAE;AACF,kBAAE;AACE,oBAAA,OAAO,EAAE,CAA4C,0CAAA;iBACtD;;aACA;YACL,OAAO;AACL,gBAAA,OAAO,EAAE,CAAyC,uCAAA;aACnD;;;AA3EM,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,6IAUlC,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAVd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EC5C9C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,40EAyDA,EDnBY,MAAA,EAAA,CAAA,g/CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,gIAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,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,IAAA,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,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,IAAA,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,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,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,UAAA,EAAA,IAAA,EAAA,cAAc,mYAAE,eAAe,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,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMrH,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,CAAC,EAAA,QAAA,EAGvH,iCAAiC,EAC5B,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,40EAAA,EAAA,MAAA,EAAA,CAAA,g/CAAA,CAAA,EAAA;;0BAYlC,MAAM;2BAAC,eAAe;;;AEtD3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAyBU,mBAAmB,CAAA;AACtB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACxC,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAE1B,qBAAqB,GAAyB,IAAI;AAClD,IAAA,QAAQ;AAER,IAAA,UAAU;AAClB,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC,UAAU;;AAGxB,IAAA,oBAAoB,CAAC,MAA4B,EAAA;AAC/C,QAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM;AAEnC,QAAA,MAAM,MAAM,GAAG,IAAI,OAAO,EAAU;QACpC,MAAM,CAAC,SAAS,CAAC;YACf,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;AAC/B,SAAA,CAAC;AAEF,QAAA,MAAM,IAAI,GAAqC;AAC7C,YAAA,aAAa,EAAE,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;YACvC,UAAU,EAAE,UAAU,CAAC,IAAI;AAC3B,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,gBAAgB,EAAE,IAAI;YACtB,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAClD,MAAM;AACN,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,oBAAoB,EAAE,KAAK;YAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAClD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;SACpC;AAED,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,CAAA,QAAA,EAAW,MAAM,CAAC,eAAe,CAAG,CAAA,CAAA;AAC3C,gBAAA,QAAQ,EAAE;AACX,aAAA;YACD,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,qBAAqB,EAAE,aAAa;SACrE;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9B,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,QAAQ,KAAI;AACrB,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;AAC5C,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,EAAE;YAE/B,OAAO,IAAI,CAAC;iBACT,IAAI,CAAC,4BAA4B,EAAE;gBAClC,IAAI;AACJ,gBAAA,UAAU,EAAE,CAAC,kCAAkC,EAAE,mCAAmC,CAAC;AACrF,gBAAA,KAAK,EAAE;aACR;AACA,iBAAA,WAAW,EAAE;AAClB,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,6BAA6B,CAAC;AACjE,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;AAClB,SAAC,CAAC;AAEH,aAAA,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AAE/C,QAAA,OAAO,MAAM;;AAGf,IAAA,oBAAoB,CAAC,IAAU,EAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;AACjE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,iCAAiC;AAC7C,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAClE,QAAA,OAAO,MAAM;;AAGP,IAAA,aAAa,CAAC,IAAU,EAAA;QAC9B,IAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,YAAY,KAAK,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;;AAEjD,QAAA,OAAO,IAAI;;AAGL,IAAA,gBAAgB,CAAC,IAAU,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC9B,YAAA,OAAO,KAAK;;QAGd,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,KAAK,QAAQ,EAAE;YACzD,OAAO,IAAI,CAAC,QAAQ;;QAGtB,OAAO,IAAI,CAAC,MAAM;;IAGZ,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QACtB,IAAI,CAAC,qBAAqB,EAAE;;AAGtB,IAAA,KAAK,CAAC,aAAqB,EAAA;AACjC,QAAA,IAAI,aAAa,KAAK,MAAM,EAAE;YAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,0CAA0C,CAAC;;QAG7E,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,4CAA4C,CAAC;;AAGvE,IAAA,SAAS,CAAC,GAAiB,EAAA;AACjC,QAAA,MAAM,IAAI,GAAS,GAAG,CAAC,IAAI,CAAC,KAAK;QACjC,OAAO,IAAI,CAAC,QAAQ,KAAK,cAAc,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAgB;;AAGvE,IAAA,eAAe,CAAC,IAAU,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK,WAAW,CAAC,EAAE,KAAK,eAAe,CAAC,EAAE,CAAC,CAAC;;IAG1I,qBAAqB,GAAA;QAC3B,QAAQ,CAAC,aAAa,CAAc,kDAAkD,CAAC,CAAC,KAAK,EAAE;;wGA3HtF,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC9CD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAuBU,eAAe,CAAA;AAClB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEjD,IAAA,SAAS;AACjB,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,SAAS;;AAGvB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACvC,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEjD,iBAAiB,GAAG,YAAY,CAC9B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAmB,mBAAmB,CAAC,gBAAgB,CAAC,EAC9D,GAAG,CAAC,MAAK;QACP,IAAI,CAAC,UAAU,CAAC;AACd,YAAA,eAAe,EAAE,oBAAoB;AACrC,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;KACH,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,mBAAmB,GAAG,YAAY,CAChC,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAqB,mBAAmB,CAAC,kBAAkB,CAAC,EAClE,GAAG,CAAC,MACF,IAAI,CAAC,UAAU,CAAC;AACd,QAAA,eAAe,EAAE,qBAAqB;AACtC,QAAA,aAAa,EAAE;KAChB,CAAC,CACH,CACF,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,mBAAmB,GAAG,YAAY,CAChC,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAqB,mBAAmB,CAAC,kBAAkB,CAAC,EAClE,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,gBAAgB;aACvB,IAAI,CACH,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAC/D,IAAI,CAAC,CAAC,CAAC;AAER,aAAA,SAAS,CAAC,CAAC,IAAsB,KAAI;YACpC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;AAElE,SAAC,CAAC;KACL,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,0BAA0B,GAAG,YAAY,CACvC,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAA4B,mBAAmB,CAAC,yBAAyB,CAAC,EAChF,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC;AACtB,cAAE;cACA,0DAA0D;AAC9D,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;KAClC,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;AAEO,IAAA,UAAU,CAAC,MAA4B,EAAA;AAC7C,QAAA,IAAI,CAAC;aACF,oBAAoB,CAAC,MAAM;AAC3B,aAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACtB,aAAA,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;;IAGvE,QAAQ,CAAC,MAAY,EAAE,QAAgB,EAAA;QAC7C,OAAO,IAAI,CACT,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE;AAChC,YAAA,cAAc,EAAE,QAAQ;YACxB,IAAI,EAAE,MAAM,CAAC;AACd,SAAA,CAAC,CACH,CAAC,IAAI,CACJ,SAAS,CAAC,CAAC,IAAI,KACb,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACpB,YAAA,UAAU,EAAE;AACV,gBAAA,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;AACzC,gBAAA,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,gBAAgB;AACrD;AACF,SAAA,CAAC,CACH,EACD,UAAU,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAC/C;;IAGK,UAAU,CAAC,IAAe,EAAE,MAAsB,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;;AAGvF,IAAA,WAAW,CAAC,KAAY,EAAA;AAC9B,QAAA,IAAI,UAAkB;AAEtB,QAAA,IAAI;AACF,YAAA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU;;QACvD,OAAO,CAAC,EAAE;YACV,UAAU,GAAG,IAAI;;AAGnB,QAAA,IAAI,UAAU,KAAK,GAAG,EAAE;AACtB,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,6BAA6B,CAAC;;aAC5D;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,8BAA8B,CAAC;;AAGpE,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;wGA/HN,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAf,eAAe,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;AC5CD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAIU,qBAAqB,CAAA;AACZ,IAAA,UAAA;AAApB,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU;;IAE9B,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;;AAE5B;;AChCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAII,MAAM,sBAAsB,GAAG,IAAI,cAAc,CAAC,wBAAwB,EAAE;AACjF,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA,CAAC;;AC7BF;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAkBU,wBAAwB,CAAA;AAIf,IAAA,UAAA;AAFpB,IAAA,SAAS;AAET,IAAA,WAAA,CAAoB,UAA+B,EAAA;QAA/B,IAAU,CAAA,UAAA,GAAV,UAAU;;IAE9B,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;;;AAIvD,IAAA,cAAc,CAAC,SAA2B,EAAA;AAChD,QAAA,OAAO,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK;;IAGpC,eAAe,CAAC,CAAS,EAAE,GAAqB,EAAA;QAC9C,OAAO,GAAG,CAAC,EAAE;;wGAjBJ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,ECxCrC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6zCA+BA,EDSa,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,wFANzB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,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,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,EAAA,EAAA,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,EAAA,EAAA,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,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,qGAAE,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMrG,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;8BACC,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,yBAAyB,CAAC,EACvG,QAAA,EAAA,uBAAuB,EAElB,aAAA,EAAA,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAA,QAAA,EAAA,6zCAAA,EAAA;0FAIxC,SAAS,EAAA,CAAA;sBADR;;;AEzCH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAWU,qBAAqB,CAAA;AAEhC,IAAA,YAAY,GAAuB,IAAI,YAAY,EAAE;IAGrD,mBAAmB,GAAG,0BAA0B;AAE/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEhD,QAAQ,GAAA;AACN,QAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO;aAC7B,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAiB,CAAC,CAAC,EAC9D,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;;IAI9C,eAAe,GAAA;QACb,QAAQ,CAAC,aAAa,CAAc,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE;;AAGhE,IAAA,YAAY,CAAC,EAAW,EAAA;QAC9B,MAAM,SAAS,GAAG,kBAAkB;AAEpC,QAAA,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC9C,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;;QAEvB,OAAO,CAAC,CAAC,EAAE;;wGA7BF,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;AACX,iBAAA;8BAGC,YAAY,EAAA,CAAA;sBADX;gBAID,mBAAmB,EAAA,CAAA;sBADlB;gBAeD,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,yBAAyB,EAAE,CAAC,QAAQ,CAAC;;;ACnDrD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAWU,wBAAwB,CAAA;AAchB,IAAA,qBAAA;AACP,IAAA,UAAA;AAC6B,IAAA,SAAA;IAfzC,OAAO,GAA4B,EAAE;AAGrC,IAAA,OAAO;AAGP,IAAA,mBAAmB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACvC,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;;;AAItC,IAAA,WAAA,CACmB,qBAA4C,EACnD,UAA+B,EACF,SAAoB,EAAA;QAF1C,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QAC5B,IAAU,CAAA,UAAA,GAAV,UAAU;QACmB,IAAS,CAAA,SAAA,GAAT,SAAS;;IAGlD,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;;;AAItC,IAAA,SAAS,CAAC,gBAAkC,EAAA;QAC1C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE;AAC5D,YAAA,6BAA6B,EAAE;AAChC,SAAA,CAAC;;IAGJ,eAAe,CAAC,CAAS,EAAE,GAAqB,EAAA;QAC9C,OAAO,GAAG,CAAC,EAAE;;AAhCJ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,yFAgBzB,sBAAsB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAhBrB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,iKAGxB,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAHd,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;0BAiBI,MAAM;2BAAC,sBAAsB;yCAZhC,OAAO,EAAA,CAAA;sBADN,SAAS;uBAAC,cAAc;gBAIzB,mBAAmB,EAAA,CAAA;sBADlB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;ACvC5C;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAqCG,MAAO,oBAAqB,SAAQ,wBAAwB,CAAA;AAEhE,IAAA,0BAA0B;AAG1B,IAAA,IAAI;AAGJ,IAAA,YAAY;AAEK,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CAAY,qBAA4C,EAAE,UAA+B,EAAkC,SAAoB,EAAA;AAC7I,QAAA,KAAK,CAAC,qBAAqB,EAAE,UAAU,EAAE,SAAS,CAAC;;IAGrD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;AACF,aAAA,4BAA4B;AAC5B,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACxB,SAAC,CAAC;;IAGN,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACvB,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;;AAG9C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;AAE3D,QAAA,MAAM,kBAAkB,GAAG,IAAI,SAAS,EAAe;AACvD,QAAA,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,kBAAkB;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;;IAGxB,qBAAqB,GAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB;QAChD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACjC,YAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;AACjE,SAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YACpD,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,EAAE,EAAE;gBACtC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC;;AAEnD,SAAC,CAAC;AACF,QAAA,OAAO,SAAS;;AAGV,IAAA,sBAAsB,CAAC,SAAmC,EAAA;QAChE,MAAM,YAAY,GAAkB,EAAE;QAEtC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE;AACxF,YAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS;YAE3D,IAAI,IAAI,EAAE;AACR,gBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE3B,SAAC,CAAC;AACF,QAAA,OAAO,YAAY;;AAhEV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,yFAYoE,sBAAsB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAZ9G,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIpB,OAAO,EAHJ,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,SAAA,EAAA,yBAAyB,kEAMzB,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClE3B,+mDAmCA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDOI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,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,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,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,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,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,EAAA,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,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,yFACxB,qBAAqB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAUhB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnBhC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,wBAAwB;wBACxB,qBAAqB;wBACrB,aAAa;wBACb;AACD,qBAAA,EAAA,QAAA,EACS,kBAAkB,EAGtB,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE;qBACR,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,+mDAAA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA;;0BAcuD,MAAM;2BAAC,sBAAsB;yCAVzH,0BAA0B,EAAA,CAAA;sBADzB,YAAY;uBAAC,yBAAyB;gBAIvC,IAAI,EAAA,CAAA;sBADH,SAAS;uBAAC,OAAO;gBAIlB,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,WAAW;;;AElE3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAII,MAAM,2BAA2B,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC;;AC1B5F;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAqCG,MAAO,0BAA2B,SAAQ,wBAAwB,CAAA;AACtE,IAAA,WAAA,CACE,qBAA4C,EAC5C,UAA+B,EACC,SAAoB,EACf,aAAiC,EAAA;AAEtE,QAAA,KAAK,CAAC,qBAAqB,EAAE,UAAU,EAAE,SAAS,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa;;IAG9B,eAAe,GAAA;AACb,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;;wGAZnC,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAI3B,sBAAsB,EAAA,EAAA,EAAA,KAAA,EACtB,2BAA2B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAL1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,+JF3DvC,+mDAmCA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EEUI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,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,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,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,EAAA,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,UAAA,EAAA,IAAA,EAAA,gBAAgB,mIAChB,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,qBAAqB,EACrB,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,qGACb,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOhB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAnBtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAG1B,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,wBAAwB;wBACxB,qBAAqB;wBACrB,aAAa;wBACb;qBACD,EACK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE;qBACR,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,+mDAAA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA;;0BAMlC,MAAM;2BAAC,sBAAsB;;0BAC7B,MAAM;2BAAC,2BAA2B;;;AChEvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAkBU,kBAAkB,CAAA;AAIV,IAAA,QAAA;AACA,IAAA,OAAA;AACA,IAAA,qBAAA;AALX,IAAA,SAAS;AAEjB,IAAA,WAAA,CACmB,QAAkB,EAClB,OAAgB,EAChB,qBAA6C,EAAA;QAF7C,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;AAEtC,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,eAAe,KAAI;AACjF,YAAA,IAAI,CAAC,SAAS,GAAG,eAAe;AAClC,SAAC,CAAC;;IAGJ,IAAI,CAAC,MAAgC,EAAE,aAAkC,EAAA;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC;AACrD,QAAA,IAAI,aAAa,EAAE,MAAM,EAAE;YACzB,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC;;aAC/D;AACL,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC;;AAGjD,QAAA,OAAO,UAAU;;AAGX,IAAA,aAAa,CAAC,MAAgC,EAAA;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;;IAGnC,qBAAqB,CAAC,OAAmB,EAAE,qBAA4C,EAAA;QAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC;QAC3D,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,oBAAoB,EAAE,IAAI,EAAE,QAAQ,CAAC;QACjF,MAAM,YAAY,GAAuC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;QAExF,OAAO,YAAY,CAAC,QAAQ;;AAGtB,IAAA,cAAc,CAAC,qBAA4C,EAAA;QACjE,OAAO,QAAQ,CAAC,MAAM,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,QAAQ;AACrB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,EAAE;gBACnE,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS;AAC5D;AACF,SAAA,CAAC;;AAGI,IAAA,2BAA2B,CACjC,OAAmB,EACnB,qBAA4C,EAC5C,aAAiC,EAAA;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,aAAa,CAAC;QAChF,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,0BAA0B,EAAE,IAAI,EAAE,QAAQ,CAAC;QACvF,MAAM,YAAY,GAA6C,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;QAE9F,OAAO,YAAY,CAAC,QAAQ;;IAGtB,oBAAoB,CAAC,qBAA4C,EAAE,aAAiC,EAAA;QAC1G,OAAO,QAAQ,CAAC,MAAM,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,QAAQ;AACrB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,EAAE;gBACnE,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE;AAC7D,gBAAA,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,aAAa;AAChE;AACF,SAAA,CAAC;;AAGI,IAAA,gBAAgB,CAAC,MAAgC,EAAA;QACvD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM;AAE9B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC5B,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA,CAAC;QAEJ,OAAO,IAAI,aAAa,CAAC;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;YACrD,gBAAgB;YAChB,SAAS,EAAE,IAAI,CAAC;AACjB,SAAA,CAAC;;wGA7FO,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,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;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACvCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAUU,kBAAkB,CAAA;IACrB,UAAU,GAA0B,IAAI;AAEhD,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;IAE1B,YAAY,GAAG,YAAY,CACzB,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAc,sBAAsB,CAAC,WAAW,CAAC,EACvD,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;QAGzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAC7C,MAAM,EAAE,MAAM,CAAC,KAAK;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,aAAa,EAAE,kCAAkC;AACjD,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;KACH,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;IAED,kBAAkB,GAAG,YAAY,CAC/B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAoB,sBAAsB,CAAC,iBAAiB,CAAC,EACnE,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE;AAC1B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;YAEzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAC5C;gBACE,MAAM,EAAE,MAAM,CAAC,KAAK;AACpB,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,aAAa,EAAE,kCAAkC;AACjD,gBAAA,UAAU,EAAE;AACb,aAAA,EACD,MAAM,CAAC,OAAO,CACf;;KAEJ,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;wGAhDU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAlB,kBAAkB,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;AC/BD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAOU,yBAAyB,CAAA;AAM1B,IAAA,MAAA;AACA,IAAA,eAAA;IANO,uBAAuB,GAAG,sBAAsB;IAEzD,aAAa,GAAG,EAAE;IAE1B,WACU,CAAA,MAAc,EACd,eAAgC,EAAA;QADhC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAe,CAAA,eAAA,GAAf,eAAe;;IAGzB,mCAAmC,GAAA;AACjC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE;AAC1D,YAAA,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,IAAI,iBAAiB,CAAC;;aAClE;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC;AAC5C,gBAAA,MAAM,EAAE;AACT,aAAA,CAAC;;;AAIN,IAAA,kBAAkB,CAAC,WAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE;YAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;;AAEtC,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC;;wGAxBjE,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA;;4FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC5BlC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAWU,eAAe,CAAA;AAClB,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC3D,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IACjD,aAAa,GAAG,YAAY,CAC1B,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAuB,mBAAmB,CAAC,cAAc,CAAC,EAChE,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,MAAM,WAAW,GAAW;YAC1B,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;AACpD,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;SACzB;AACD,QAAA,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,WAAW,CAAC;KAC7D,CAAC,CACH,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;AAED,IAAA,oBAAoB,GAAG,YAAY,CACjC,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAsB,mBAAmB,CAAC,mBAAmB,CAAC,EACpE,GAAG,CAAC,CAAC,MAAM,KACT,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC;AAC5C,QAAA,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,MAAM,CAAC,OAAO;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CACH,CACF,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;wGAhCU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAf,eAAe,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;AChCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;;ACtBH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAkDU,cAAc,CAAA;wGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAd,cAAc,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EA3Bd,SAAA,EAAA;AACT,YAAA,YAAY,CACV,EAAE,GAAG,EAAE,UAAU,EAAE,EACnB;AACE,gBAAA,aAAa,EAAE;AACb,oBAAA,uBAAuB,EAAE,KAAK;AAC9B,oBAAA,wBAAwB,EAAE;AAC3B;aACF,CACF;YACD,kBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC;AACjF,YAAA,cAAc,CAAC;gBACb,UAAU;gBACV,WAAW;gBACX,eAAe;gBACf,aAAa;gBACb,aAAa;gBACb,cAAc;gBACd,aAAa;gBACb,eAAe;gBACf,eAAe;gBACf,kBAAkB;gBAClB,eAAe;gBACf;aACD;AACF,SAAA,EAAA,CAAA;;4FAEU,cAAc,EAAA,UAAA,EAAA,CAAA;kBA5B1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE;AACT,wBAAA,YAAY,CACV,EAAE,GAAG,EAAE,UAAU,EAAE,EACnB;AACE,4BAAA,aAAa,EAAE;AACb,gCAAA,uBAAuB,EAAE,KAAK;AAC9B,gCAAA,wBAAwB,EAAE;AAC3B;yBACF,CACF;wBACD,kBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC;AACjF,wBAAA,cAAc,CAAC;4BACb,UAAU;4BACV,WAAW;4BACX,eAAe;4BACf,aAAa;4BACb,aAAa;4BACb,cAAc;4BACd,aAAa;4BACb,eAAe;4BACf,eAAe;4BACf,kBAAkB;4BAClB,eAAe;4BACf;yBACD;AACF;AACF,iBAAA;;;ACvED;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAkBU,+BAA+B,CAAA;AAC1C,IAAA,IAAI,GAAS,MAAM,CAAC,qBAAqB,CAAC;IAC1C,4BAA4B,GAAsB,EAAE;AAEnC,IAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAExC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;AACF,aAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA,6CAAA,CAA+C,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE;aACvG,IAAI,CACHO,MAAI,CAAC,CAAC,CAAC,EACPC,YAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEhD,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;YACtB,IAAI,CAAC,4BAA4B,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AACvF,SAAC,CAAC;;IAGN,YAAY,CAAC,MAAa,EAAE,IAAqB,EAAA;QAC/C,MAAM,CAAC,cAAc,EAAE;QACvB,IAAI,IAAI,GAAa,EAAE;AACvB,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI;QAErB,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,QAAQ,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,GAAG,WAAW,GAAG,gBAAgB;YACpH,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;;;wGA5BnB,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,wFCxC5C,w6BAsBA,EAAA,MAAA,EAAA,CAAA,2aAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDaY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,gGAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKzC,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;+BACE,8BAA8B,EAAA,OAAA,EAC/B,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,aAAA,EAGtC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,w6BAAA,EAAA,MAAA,EAAA,CAAA,2aAAA,CAAA,EAAA;;;AEtCvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA2BU,qBAAqB,CAAA;AACxB,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACtC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,KAAK;AAEI,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAE9C,IAAA,aAAa,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC;AACvC,IAAA,WAAW;IACX,oBAAoB,GAAG,KAAK;AAG5B,IAAA,OAAO;IAGP,YAAY,GAAG,KAAK;IAGpB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG7B,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,IAAI,GAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI;YAC7C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;;;IAIzD,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,IAAI,GAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI;AAC7C,YAAA,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AACrB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;gBAE5B,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,QAAQ,EAAE;AAChC,oBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;wBACrB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;;yBACpE;wBACL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;AAE9C,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;qBAC3B;AACL,oBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;;;;;IAMzC,sCAAsC,GAAA;QACpC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE;AACnC,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE,wCAAwC;AAC/C,oBAAA,kBAAkB,EAAE,wCAAwC;AAC5D,oBAAA,oBAAoB,EAAE,IAAI;AAC1B,oBAAA,mBAAmB,EAAE,KAAK;oBAC1B,UAAU,EAAE,UAAU,CAAC,MAAM;AAC7B,oBAAA,gBAAgB,EAAE,+BAA+B;oBACjD,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,iBAAA;AACD,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,YAAY,EAAE;AACf,aAAA,CAAC;;;;AAKE,IAAA,cAAc,CAAC,IAAc,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;;AAGjD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE;AAC3D,YAAA,OAAO,EAAE,CAAC,2BAA2B,CAAC;;;QAIxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;AAC3F,YAAA,OAAO,EAAE,CAAC,2BAA2B,CAAC;;QAGxC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAE5C,QAAA,IAAI,MAAM,KAAK,iBAAiB,EAAE;AAChC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAExD,YAAA,OAAO,IAAI,UAAU,CAAS,CAAC,QAAQ,KAAI;AACzC,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAChD,CAAC,IAAI,KAAI;AACP,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;oBACxE,QAAQ,CAAC,QAAQ,EAAE;iBACpB,EACD,MAAK;AACH,oBAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAC5B,QAAQ,CAAC,QAAQ,EAAE;AACrB,iBAAC,CACF;AACH,aAAC,CAAC;;AAGJ,QAAA,OAAO,EAAE,CAAC,MAAM,CAAC;;;AAIX,IAAA,UAAU,CAAC,IAAc,EAAA;QAC/B,IAAI,CAAC,IAAI,EAAE;YACT;;QAGF,IAAI,MAAM,GAAW,IAAI;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACvC,YAAA,OAAO,EAAE,GAAG,CAAC,EAAE;AACjB,SAAC,CAAC;QACF,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,2BAA2B,CAAC;QAClF,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,4BAA4B,CAAC;QAEnF,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;AACvC,YAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,aAAa;AAEhC,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;AAChC,oBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC5B,oBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAChD,CAAC,IAAI,KAAI;AACP,wBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;AAC5E,wBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,wBAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAEnD,wBAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9C,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;qBAChC,EACD,MAAK;AACH,wBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,wBAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACnD,wBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAErB,wBAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9C,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,qBAAC,CACF;;gBAGH,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;AACrC,oBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,oBAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;;;AAKzD,QAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;;wGA3JtB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,EAAA,cAAA,EAAA,gEAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjDlC,i2BAyBA,EDcY,MAAA,EAAA,CAAA,oYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,iFAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,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,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAUpD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAXjC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAA,QAAA,EACtD,mBAAmB,EAAA,eAAA,EAGZ,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC/B,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,QAAA,EAAA,i2BAAA,EAAA,MAAA,EAAA,CAAA,oYAAA,CAAA,EAAA;8BAeD,OAAO,EAAA,CAAA;sBADN;gBAID,YAAY,EAAA,CAAA;sBADX;gBAID,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY;;;AEnE5B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAqBU,eAAe,CAAA;AACN,IAAA,KAAA;AAApB,IAAA,WAAA,CAAoB,KAAY,EAAA;QAAZ,IAAK,CAAA,KAAA,GAAL,KAAK;;AAGzB,IAAA,QAAQ;IAER,aAAa,GAAA;QACX,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC;;wGAP1C,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGf,WAAW,EAXZ,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAPS,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EAAE,EAAA,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,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,mLAAE,eAAe,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAU3D,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC;AACvE,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE;;;;;AAKT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC;AAClC,iBAAA;4EAKC,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW;;;AC9CxB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAoBU,qBAAqB,CAAA;AAgBZ,IAAA,KAAA;AAdpB,IAAA,IAAI;AAKJ,IAAA,QAAQ;AAER,IAAA,UAAU;AACV,IAAA,cAAc;IACd,cAAc,GAAG,EAAE;IACnB,QAAQ,GAAG,KAAK;AAEC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CAAoB,KAAsB,EAAA;QAAtB,IAAK,CAAA,KAAA,GAAL,KAAK;;IAEzB,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;AACpD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,KAAI;AACrF,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AAEpC,YAAA,IAAI,CAAC,QAAQ;AACX,gBAAA,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,IAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAa,CAAC,YAAY;AAC3F,oBAAA,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,iBAAiB,CAAC;AAEtE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,GAAG,wBAAwB,GAAG,mBAAmB;AACtF,SAAC,CAAC;;IAGJ,cAAc,CAAC,SAAyB,EAAE,6BAAqC,EAAA;QAC7E,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,IAAI,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE;YACnC;AACD,SAAA,CAAC,CACH;;wGApCQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAMrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAW,EChDxB,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,i0BAqBA,EDgBY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,UAAA,EAAA,IAAA,EAAA,aAAa,EAAE,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,MAAA,EAAA,IAAA,EAAA,aAAa,iDAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKzE,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,EAC3E,QAAA,EAAA,mBAAmB,EAEd,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,i0BAAA,EAAA;4EAIrC,IAAI,EAAA,CAAA;sBADH;gBAMD,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW;;;AEhDxB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAmBU,4BAA4B,CAAA;AAOnB,IAAA,mBAAA;AANO,IAAA,IAAI;AAE/B,IAAA,MAAM;AAEW,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CAAoB,mBAAwC,EAAA;QAAxC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;;IAEvC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;AACF,aAAA,SAAS,CAAC,IAAI,CAAC,IAAI;AACnB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACtB,SAAC,CAAC;;AAGN,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;;;AAI3E,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;wGAzBf,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzCzC,8mBAmBA,EDoBY,MAAA,EAAA,CAAA,0dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAEpE,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBARxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,QAG/B,EAAE,KAAK,EAAE,2BAA2B,EAAE,iBAC7B,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,yBAAyB,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,8mBAAA,EAAA,MAAA,EAAA,CAAA,0dAAA,CAAA,EAAA;0FAGrD,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;AE1C3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAuBG,MAAO,yBAA0B,SAAQ,mBAAmB,CAAA;AAChE,IAAA,MAAM;AACN,IAAA,iBAAiB;AAEA,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,IAAA,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;IAEvD,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC3D,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAE5C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AAC3F,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;YAC5B,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI;gBAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE;gBAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE;AAExC,gBAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,oBAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,oBAAA,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE;oBACpB,IAAI,CAAC,WAAW,EAAE;;AAGpB,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAC3D,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEhD,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,MAAM,CAAM,eAAe,CAAC,WAAW,CAAC,EACxC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAC5D,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;aAEjC,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5C,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,SAAC,CAAC;;AAGN,IAAA,WAAW,CAAC,KAAY,EAAA;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,OAAO,EAAE;;wGA9CL,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,sFAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7CtC,6wBAuBA,EDaY,MAAA,EAAA,CAAA,6pBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,uLAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,4BAA4B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAS3E,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAVrC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,4BAA4B,CAAC,EAAA,QAAA,EAC7E,wBAAwB,EAAA,aAAA,EAGnB,iBAAiB,CAAC,IAAI,EAC/B,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,QAAA,EAAA,6wBAAA,EAAA,MAAA,EAAA,CAAA,6pBAAA,CAAA,EAAA;;;AE3CH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAImB,wCAAwC,CAAA;AAE7D;;AC5BD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAmBU,oBAAoB,CAAA;AAOZ,IAAA,UAAA;AACY,IAAA,6BAAA;AAN/B,IAAA,IAAI;IAEJ,aAAa,GAAG,KAAK;IAErB,WACmB,CAAA,UAAiC,EACrB,6BAAuE,EAAA;QADnF,IAAU,CAAA,UAAA,GAAV,UAAU;QACE,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;;IAG5D,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;QAE5B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;AACjE,YAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE;AACtC,gBAAA,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;;wGAlB9E,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,wCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAPrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;gBAEI,EAJJ,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6HAAA,EAAA,2CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,+IAAE,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FASnC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,aAAa,EAAE,qBAAqB,CAAC,EAAA,QAAA,EACrC,kBAAkB,EAClB,QAAA,EAAA,CAAA;;gBAEI,EAEC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,6HAAA,EAAA,2CAAA,CAAA,EAAA;;0BAWlC;yCANH,IAAI,EAAA,CAAA;sBADH;;;AC1CH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA+BU,wBAAwB,CAAA;IACnC,YAAY,CAAC,OAAkC,EAAE,IAAwC,EAAA;AACvF,QAAA,MAAM,WAAW,GAAG,IAAI,EAAE,SAAS;AACnC,QAAA,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,OAAO,IAAI,WAAW,CAAC,CAAC;;AAErF;MAoBY,4BAA4B,CAAA;AAwCpB,IAAA,kBAAA;AACE,IAAA,KAAA;AACF,IAAA,cAAA;AAzCX,IAAA,WAAW;AACX,IAAA,yBAAyB;AAEjC,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC,WAAW;;AAGzB,IAAA,IAAI,wBAAwB,GAAA;QAC1B,OAAO,IAAI,CAAC,yBAAyB;;AAIvC,IAAA,IAAI;IAEJ,kBAAkB,GAAG,KAAK;AAE1B,IAAA,WAAW,GAAG;AACZ,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,2BAA2B,EAAE;AACvD,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,4BAA4B,EAAE;AACzD,QAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,8BAA8B;KAC5D;IAED,IAAI,GAAqB,IAAI,gBAAgB,CAAC;AAC5C,QAAA,EAAE,EAAE,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACzD,KAAK,EAAE,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACtH,QAAA,WAAW,EAAE,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,QAAA,UAAU,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK;AAC7D,KAAA,CAAC;AAEF,IAAA,OAAO,GAAG,IAAI,wBAAwB,EAAE;IACxC,gBAAgB,GAAG,KAAK;IACxB,OAAO,GAAG,KAAK;AAGE,IAAA,gBAAgB;AAChB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CACmB,kBAAsC,EACpC,KAAsB,EACxB,cAA8B,EAAA;QAF9B,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAChB,IAAK,CAAA,KAAA,GAAL,KAAK;QACP,IAAc,CAAA,cAAA,GAAd,cAAc;;IAGjC,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAChB,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;;aACG;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACf,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;AAC/B,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE;;;IAI/C,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;;IAG5B,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CACR,OACG,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;AACjE,cAAE;AACF,cAAE,0CAA0C,CAAC,CAClD;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aACzB,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,QAAQ,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EACnD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI;AAE/B,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAC5D,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;;qBAC1B;oBACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;;;iBAEhF;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;;AAEnC,SAAC,CAAC;AACJ,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,OAAO;AACd,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACtB,SAAC,CAAC;AACJ,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO;AAChF,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC1F,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACjD,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC/F,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACzB,SAAC,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO;;IAGlF,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAC5C,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,IAAI,mBAAmB,CAAC;AACtB,gBAAA,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;gBAClB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;AAClC,aAAA,CAAC,CACH;;;AAIG,IAAA,UAAU,CAAC,IAAe,EAAA;AAChC,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,YAAA,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;YACpC,UAAU,EAAE,KAAK,CAAC;AACnB,SAAA,CAAC;;AAGI,IAAA,kBAAkB,CAAC,YAAoB,EAAA;AAC7C,QAAA,OAAO,IAAI,CACT,IAAI,CAAC;AACF,aAAA,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE;AAC9B,YAAA,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC,OAAO;SACjB;AACA,aAAA,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAC5C;;AAGK,IAAA,iBAAiB,CAAC,OAA4B,EAAA;QACpD,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;;wGAtJpE,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9EzC,qwGA8EA,EDhBI,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,2VACb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,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,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,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,UAAA,EAAA,IAAA,EAAA,WAAW,k4BACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,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,IAAA,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,UAAA,EAAA,IAAA,EACnB,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,8BACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,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,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,OAAO,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOE,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAlBxC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,aAAa;wBACb,aAAa;wBACb,kBAAkB;wBAClB,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,cAAc;wBACd,eAAe;wBACf;AACD,qBAAA,EAAA,QAAA,EACS,2BAA2B,EAAA,aAAA,EAGtB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,qwGAAA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA;4IAgBrC,IAAI,EAAA,CAAA;sBADH;gBAuBgB,gBAAgB,EAAA,CAAA;sBADhC,SAAS;uBAAC,kBAAkB;;;AEjH/B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAaU,2BAA2B,CAAA;AAEtC,IAAA,IAAI;wGAFO,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJ5B,6CAA6C,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAF7C,4BAA4B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAM3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,OAAO,EAAE,CAAC,4BAA4B,CAAC;AACvC,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,6CAA6C;AACvD,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;oBACnC,aAAa,EAAE,iBAAiB,CAAC;AAClC,iBAAA;8BAGC,IAAI,EAAA,CAAA;sBADH;;;ACpCH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAwCU,oBAAoB,CAAA;AAqBZ,IAAA,UAAA;AACE,IAAA,UAAA;AACF,IAAA,SAAA;AACA,IAAA,mBAAA;AACA,IAAA,sBAAA;AACA,IAAA,QAAA;AACA,IAAA,UAAA;AACA,IAAA,eAAA;AACA,IAAA,KAAA;AACA,IAAA,gBAAA;IA7BX,kBAAkB,GAAG,IAAI;IACzB,YAAY,GAAG,IAAI;AAG3B,IAAA,IAAI;IAEJ,QAAQ,GAAG,KAAK;AAChB,IAAA,YAAY;AACZ,IAAA,cAAc;AAEd,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;;AAEhC,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;;AAGT,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CACmB,UAAiC,EAC/B,UAA+B,EACjC,SAA2B,EAC3B,mBAAwC,EACxC,sBAA8C,EAC9C,QAAiB,EACjB,UAAsB,EACtB,eAAgC,EAChC,KAAsB,EACtB,gBAAkC,EAAA;QATlC,IAAU,CAAA,UAAA,GAAV,UAAU;QACR,IAAU,CAAA,UAAA,GAAV,UAAU;QACZ,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;AAEjC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO;;;IAI/F,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;QACpD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;QAErE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAwB,KAAI;YACjH,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AACjD,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,MAAM,CAAoB,eAAe,CAAC,WAAW,CAAC,EACtD,MAAM,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EACtE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC,CAAC,WAAW,KAAI;YACzB,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC;AACzD,SAAC,CAAC;QACJ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CACpF,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AAC1B,gBAAA,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;AAChE,aAAC,CAAC;SACH,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC;AACD,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,wBAAwB;AAC/B,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,cAAc,MAAM,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC;;AAGlE,IAAA,sBAAsB,CAAC,IAAU,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI;AACtB,YAAA,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC1B,YAAA,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,EAAE,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,IAAY,KACzF,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAEzD,cAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC;cACtC,KAAK,CAAC;;wGA3ED,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAT,IAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAfrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;GAUT,EAZS,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,oSAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAiBlC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAlBhC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,wBAAwB,EAAE,SAAS,CAAC,EAAA,QAAA,EACpC,kBAAkB,EAClB,QAAA,EAAA;;;;;;;;;;GAUT,EAEc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAA,MAAA,EAAA,CAAA,iMAAA,CAAA,EAAA;4WAOnC,IAAI,EAAA,CAAA;sBADH;;;AClEH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA+BU,oBAAoB,CAAA;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAGrC,IAAA,IAAI;IAEJ,cAAc,GAAG,KAAK;IAEtB,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;;IAGpB,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;;IAGZ,WAAW,GAAA;QACjB,IAAI,IAAI,CAAC,IAAI,IAAK,IAAI,CAAC,IAAY,CAAC,MAAM,EAAE;;AAE1C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;aACrB;YACL,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;;;wGArB/B,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAnBrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,aAAa,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,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAqBpD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAtBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,uBAAuB,CAAC;AAChE,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC;AAClC,iBAAA;8BAKC,IAAI,EAAA,CAAA;sBADH;;;ACxDH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA0BU,0BAA0B,CAAA;AAY3B,IAAA,KAAA;AACA,IAAA,kBAAA;AACA,IAAA,UAAA;AAZV,IAAA,QAAQ;AAEA,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEjD,IAAA,QAAQ;AAChB,IAAA,SAAS;IACT,SAAS,GAAG,EAAE;IACd,YAAY,GAAG,KAAK;AAEpB,IAAA,WAAA,CACU,KAAsB,EACtB,kBAAsC,EACtC,UAA+B,EAAA;QAF/B,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAU,CAAA,UAAA,GAAV,UAAU;AAElB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;;IAGrE,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI;AACxD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9D,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,iCAAiC,GAAG,0BAA0B;AACrG,SAAC,CAAC;;AAGJ,IAAA,MAAM,OAAO,GAAA;QACX,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE;;IAGhC,MAAM,UAAU,CAAC,IAAiC,EAAA;AACxD,QAAA,MAAM,EAAE,GAAI,IAAwB,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AAElE,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC5B,YAAA,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AAE1C,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AACjE,YAAA,MAAM;gBACN,IAAI,CAAC,aAAa,EAAE;;;aAEjB;AACL,YAAA,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAExC,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AACjE,YAAA,MAAM;gBACN,IAAI,CAAC,WAAW,EAAE;;;;IAKxB,WAAW,GAAA;QACT,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,+BAA+B,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;IAGpH,aAAa,GAAA;QACX,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,iCAAiC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;AAGtH,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpC,YAAA,IAAI,EAAE,qBAAqB;AAC3B,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;AAGJ,IAAA,UAAU,CAAC,MAAc,EAAA;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;;AAGjC,IAAA,MAAM,CAAC,IAAU,EAAA;AACvB,QAAA,IAAI,IAAI,EAAE,UAAU,EAAE;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;YAExD,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAClE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;YAC5D,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAE1D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU;;;wGAtFrC,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAC1B,WAAW,EAVZ,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAPS,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,kLAAE,aAAa,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,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAWxD,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAZtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC;AACpE,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE;;;;;AAKT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,yBAAyB;AACzC,iBAAA;iJAGC,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW;;;ACjDxB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAiCU,8BAA8B,CAAA;AAW/B,IAAA,KAAA;AACA,IAAA,cAAA;AACA,IAAA,MAAA;AAZV,IAAA,OAAO;AAEE,IAAA,IAAI;AAGb,IAAA,QAAQ;AAES,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CACU,KAAsB,EACtB,cAA8B,EAC9B,MAAc,EAAA;QAFd,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGhB,QAAQ,GAAA;AACN,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC;AAE7E,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,eAAe;aACtB,IAAI,CAAC,oBAAoB,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAChE,aAAA,SAAS,CAAC,CAAC,SAAyB,KAAI;YACvC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;;AAGvC,YAAA,IAAI,SAAS,CAAC,OAAO,IAAI,mBAAmB,EAAE;AAC5C,gBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI;;AAElC,SAAC,CAAC;;IAGN,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE;YAC/B,QAAQ,CAAC,aAAa,CAAc,0BAA0B,CAAC,EAAE,KAAK,EAAE;;QAE1E,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,EAAE;SACjD,EAAE,GAAG,CAAC;;wGAtCE,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,6BAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAK9B,WAAW,EAnBZ,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;GAUT,EAZS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,0BAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAE,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,UAAA,EAAA,IAAA,EAAA,aAAa,mLAAE,wBAAwB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAgBlF,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAjB1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,CAAC;AAC9F,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,6BAA6B;AAC7C,iBAAA;kIAIU,IAAI,EAAA,CAAA;sBAAZ;gBAGD,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW;;;AC5DxB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA0BU,uBAAuB,CAAA;AAWxB,IAAA,KAAA;AACA,IAAA,MAAA;AAXF,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEhD,IAAA,IAAI;AACb,IAAA,UAAU;IACF,cAAc,GAAa,EAAE;AAGrC,IAAA,QAAQ;IAER,WACU,CAAA,KAAsB,EACtB,MAAc,EAAA;QADd,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAM,CAAA,MAAA,GAAN,MAAM;QAEd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;;IAGtD,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE;;IAG/C,aAAa,GAAA;AACX,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,gBAAgB;QACpD,IAAI,gBAAgB,EAAE;YACpB,QAAQ,CAAC,aAAa,CAAc,gBAAgB,CAAC,EAAE,KAAK,EAAE;;AAEhE,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;;;wGA3B1B,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOvB,WAAW,EAhBZ,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;GAKT,EAPS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,iFAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAE,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,UAAA,EAAA,IAAA,EAAA,aAAa,mLAAE,qBAAqB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAW/E,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAZnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,CAAC;AAC3F,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE;;;;;AAKT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,qBAAqB;AACrC,iBAAA;mGAIU,IAAI,EAAA,CAAA;sBAAZ;gBAKD,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW;;;ACvDxB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAuCU,yBAAyB,CAAA;AAGhB,IAAA,KAAA;AAFpB,IAAA,iBAAiB;AAEjB,IAAA,WAAA,CAAoB,KAAiB,EAAA;QAAjB,IAAK,CAAA,KAAA,GAAL,KAAK;QACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;;IAGhE,OAAO,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC;;wGARxC,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAzB1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAbS,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,6IAAE,aAAa,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,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA2B1D,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA5BrC,SAAS;8BACC,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,CAAC,EAC5D,QAAA,EAAA,wBAAwB,EACxB,QAAA,EAAA;;;;;;;;;;;GAWT,EAWc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAA,MAAA,EAAA,CAAA,gLAAA,CAAA,EAAA;;;AC3D3C;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAqCU,gCAAgC,CAAA;AAE3C,IAAA,QAAQ;AAEA,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,KAAK,GAAG,MAAM,EAAC,KAAe,EAAC;AAEvC,IAAA,UAAU;AACV,IAAA,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY;AAE/C,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;;AAGtD,IAAA,aAAa,CAAC,KAAmC,EAAA;QAC/C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;AAEhD,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE;;aACnC;AACL,YAAA,IAAI,KAAK,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,EAAS,CAAC,CAAC,CAAC;;AAE1G,YAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,EAAE;;;AAIhD,IAAA,YAAY,CAAC,KAAkC,EAAA;QAC7C,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;;wGA9BxC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAChC,WAAW,EAnBZ,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;GAcT,EAhBS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,uLAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,oLAAE,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAoBtF,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBArB5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,0BAA0B,CAAC;AAClG,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;AAcT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,yBAAyB;AACzC,iBAAA;wDAGC,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW;;;AC5DxB;;;;;;;;;;;;;;;;;;;;;;AAsBG;AA8BG,MAAO,8BAA+B,SAAQ,gCAAgC,CAAA;wGAAvE,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAjB/B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;GAaT,EAfS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,iFAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,UAAA,EAAA,IAAA,EAAA,aAAa,mLAAE,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAmBpF,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBApB1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,0BAA0B,CAAC;AAChG,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,yBAAyB;AACzC,iBAAA;;;ACnDD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAsCU,iBAAiB,CAAA;AASlB,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,mBAAA;AACA,IAAA,cAAA;AAXF,IAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAEpC,IAAA,IAAI;AAGb,IAAA,QAAQ;AAER,IAAA,WAAA,CACU,KAAsB,EACtB,MAAc,EACd,mBAAwC,EACxC,cAA8B,EAAA;QAH9B,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAc,CAAA,cAAA,GAAd,cAAc;;IAGxB,OAAO,GAAA;AACL,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,eAAe;AACtB,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,SAAS,KAAI;YACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;AACpI,gBAAA,IAAI,EAAU;gBAEd,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,EAAE;oBACpD,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;;qBACjD;oBACL,EAAE,GAAI,SAAS,CAAC,IAAwB,CAAC,KAAK,CAAC,MAAM,IAAK,SAAS,CAAC,IAAY,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;;AAExH,gBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;;AAE7B,SAAC,CAAC;;AAGE,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG;AACnD,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3D,SAAC,CAAC;;wGArCO,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKjB,WAAW,EAxBZ,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;GAeT,EAjBS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,6IAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,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,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,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,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAqB1F,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC;AACtG,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;AAeT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe;AAC/B,iBAAA;sKAIU,IAAI,EAAA,CAAA;sBAAZ;gBAGD,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW;;;ACjExB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAgBU,qBAAqB,CAAA;AAWtB,IAAA,KAAA;AACA,IAAA,YAAA;AACA,IAAA,WAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,mBAAA;IAfF,SAAS,GAAG,KAAK;AACzB,IAAA,YAAY;AAEZ,IAAA,IAAI,oBAAoB,GAAA;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB;;AAGrC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEhD,WACU,CAAA,KAAiB,EACjB,YAAmC,EACnC,WAAmC,EACnC,KAAqB,EACrB,MAAc,EACd,mBAAwC,EAAA;QALxC,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;;IAG7B,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC;AAC7E,QAAA,IAAI,CAAC,SAAS;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,KAAK,WAAW;;gBAEjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC;AAEjD,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAgB,cAAA,CAAA,CAAC,EAAE;gBAC1E,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAA,cAAA,CAAgB,CAAC,CAAC;;AAGrH,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAqB,mBAAA,CAAA,CAAC,EAAE;gBAC/E,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAA,mBAAA,CAAqB,CAAC,CAAC;;AAG9H,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAgB,cAAA,CAAA,CAAC,EAAE;gBAC1E,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAA,cAAA,CAAgB,CAAC,CAAC;;AAGpH,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,aAAA,CAAe,EAAE,IAAI,CAAC;AACvE,YAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;gBACrB,IAAI,CAAC,cAAc,EAAE;;;QAIzB,IAAI,CAAC,YAAY,CAAC;aACf,IAAI,CACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EACtD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AAElC,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACxF,IAAI,CAAC,MAAM,EAAE;AACf,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAChG,IAAI,CAAC,KAAK,EAAE;AACd,SAAC,CAAC;;AAIJ,IAAA,gBAAgB,CAAC,KAAkB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,QAAQ,EAAE;gBAC9C,IAAI,CAAC,oBAAoB,EAAE;;AAE7B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAA,YAAA,CAAc,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AAClF,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAA,mBAAA,CAAqB,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;AAChG,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAA,kBAAA,CAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;;;AAKlG,IAAA,qBAAqB,CAAC,KAAkB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAgB,cAAA,CAAA,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;;AAK7F,IAAA,yBAAyB,CAAC,KAAkB,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAqB,mBAAA,CAAA,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;;AAKlG,IAAA,oBAAoB,CAAC,KAAkB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAgB,cAAA,CAAA,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;;AAK7F,IAAA,YAAY,CAAC,KAAkB,EAAA;AAC7B,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;YACzC,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI;;;IAKzC,cAAc,GAAA;QACZ,IAAI,CAAC,eAAe,EAAE;;IAGxB,OAAO,GAAA;QACL,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,cAAc,EAAE;;IAGf,eAAe,GAAA;AACrB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACzD,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS;AAClC,YAAA,OAAO,IAAI;AACb,SAAC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC;;IAGpD,MAAM,GAAA;QACZ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC;;IAG7C,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC;;IAG7C,UAAU,CAAC,GAAW,EAAE,SAAiB,EAAA;QAC/C,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;AAC5C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;IAG/C,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAc,YAAA,CAAA,CAAC,EAAE;AACxE,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,YAAA,CAAc,CAAC;AAElF,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;AACrD,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,kBAAA,CAAoB,CAAC;AACxF,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,oBAAA,CAAsB,EAAE,SAAS,CAAC;AACnF,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,0BAAA,CAA4B,EAAE,SAAS,CAAC;;;;IAKvF,cAAc,GAAA;AACpB,QAAA,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;AAC9E,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,0BAAA,CAA4B,EAAE,IAAI;SACpF;AAED,QAAA,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,mBAAA,CAAqB,EAAE,IAAI,CAAC;AAC3E,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,YAAA,CAAc,EAAE,IAAI,CAAC;AACxE,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,kBAAA,CAAoB,EAAE,IAAI;SAC5E;QAED,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC;;QAE3C,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC;;;wGAtKhC,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,+BAAA,EAAA,0BAAA,EAAA,mCAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;AACX,iBAAA;6OAkEC,gBAAgB,EAAA,CAAA;sBADf,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;gBAa3C,qBAAqB,EAAA,CAAA;sBADpB,YAAY;uBAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC;gBAQ/C,yBAAyB,EAAA,CAAA;sBADxB,YAAY;uBAAC,0BAA0B,EAAE,CAAC,QAAQ,CAAC;gBAQpD,oBAAoB,EAAA,CAAA;sBADnB,YAAY;uBAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC;gBAQ/C,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;gBASvC,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,eAAe;;;AC/I/B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAQU,cAAc,CAAA;AACjB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAC1B,IAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAE/D,IAAA,uBAAuB,CAAC,QAAoB,EAAA;AAC1C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;AAC7E,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,eAAe,CAAC,4BAA4B,CAAC,KAAK,MAAM;AAE5G,QAAA,IAAI,CAAC,iBAAiB,IAAI,WAAW,EAAE;AACrC,YAAA,QAAQ,EAAE;YACV;;AAGF,QAAA,IAAI,CAAC;aACF,IAAI,CAAgC,6BAA6B,EAAE;AAClE,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE;AACJ,gBAAA,eAAe,EAAE,0DAA0D;AAC3E,gBAAA,iBAAiB,EAAE,mDAAmD;AACtE,gBAAA,YAAY,EAAE,gEAAgE;AAC9E,gBAAA,UAAU,EAAE;AACb;SACF;AACA,aAAA,WAAW;AACX,aAAA,SAAS,CAAC,CAAC,SAAkB,KAAI;YAChC,IAAI,SAAS,EAAE;AACb,gBAAA,QAAQ,EAAE;;AAEd,SAAC,CAAC;;wGA7BK,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;4FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC7BlC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AA4BH,MAAM,iBAAiB,GAA6B;AAClD,IAAA,GAAG,mCAAmC,EAAE;AACxC,IAAA,2BAA2B,EAAE;CAC9B;MAyBY,sBAAsB,CAAA;AAwCvB,IAAA,KAAA;AACA,IAAA,eAAA;AACA,IAAA,mBAAA;AACA,IAAA,YAAA;AACA,IAAA,sBAAA;AACA,IAAA,gBAAA;AACA,IAAA,cAAA;AA5CV,IAAA,WAAW;AAGX,IAAA,OAAO;AAGP,IAAA,mBAAmB;AAGnB,IAAA,UAAU;IAEO,cAAc,GAAG,yBAAyB;AAEnD,IAAA,aAAa,GAAG,IAAI,WAAW,CAAQ,IAAI,CAAC;IAC5C,OAAO,GAAY,EAAE;AACrB,IAAA,kBAAkB;AAClB,IAAA,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;IACnC,kBAAkB,GAA8B,EAAE;AAE1D,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;;AAG3B,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;;AAGrB,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;;AAG3B,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;;AAGf,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CACU,KAAsB,EACtB,eAAgC,EAChC,mBAAwC,EACxC,YAA0B,EAC1B,sBAA8C,EAC9C,gBAAkC,EAClC,cAA8B,EAAA;QAN9B,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAc,CAAA,cAAA,GAAd,cAAc;;IAGxB,QAAQ,GAAA;AACN,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE;AACxE,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC7B,YAAA,IAAI,CAAC;iBACF,MAAM,CAAC,eAAe;AACtB,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACrC,aAAC,CAAC;;aACC;AACL,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;AAG5F,QAAA,IAAI,CAAC;AACF,aAAA,SAAS;AACT,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CACR,CAAC,MAAM,KAAI;AACT,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;YAErB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;AACnF,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAI;gBAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,EAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA,CAAE;AAC3D,gBAAA,OAAO,QAAQ;aAChB,EAAE,EAAE,CAAC;SACP,EACD,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,CAC7H;;IAGL,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;;IAG1D,MAAM,GAAA;AACZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACnF,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC;;aACpC;AACL,YAAA,MAAM,OAAO,GAA0B;AACrC,gBAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AACnC,gBAAA,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;aAClC;AACD,YAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7F,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACjG,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;;wGAlGlB,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,oMAFtB,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,EC5EpF,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,m0FA6DA,gmIDJI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,8BACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,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,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,UAAU,8BACV,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,UAAA,EAAA,IAAA,EAAA,eAAe,qyBACf,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,eAAe,EACf,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,4UACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAQP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAvBlC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,UAAU;wBACV,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb;AACD,qBAAA,EAAA,QAAA,EACS,qBAAqB,EAGhB,aAAA,EAAA,iBAAiB,CAAC,IAAI,aAC1B,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,EAAA,QAAA,EAAA,m0FAAA,EAAA,MAAA,EAAA,CAAA,yiIAAA,CAAA,EAAA;uQAIlF,WAAW,EAAA,CAAA;sBADV;gBAID,OAAO,EAAA,CAAA;sBADN;gBAID,mBAAmB,EAAA,CAAA;sBADlB;gBAID,UAAU,EAAA,CAAA;sBADT;;;AExFH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAqBU,+BAA+B,CAAA;AAYvB,IAAA,eAAA;AACT,IAAA,uBAAA;AACA,IAAA,MAAA;IAZV,WAAW,GAAG,6DAA6D;AAE3E,IAAA,OAAO;AAEP,IAAA,mBAAmB;AAEnB,IAAA,WAAW;IACX,wBAAwB,GAAG,KAAK;AAEhC,IAAA,WAAA,CACmB,eAAgC,EACzC,uBAAkD,EAClD,MAAc,EAAA;QAFL,IAAe,CAAA,eAAA,GAAf,eAAe;QACxB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGhB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAClF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB;;IAG9D,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,uBAAuB,CAAC,mCAAmC,EAAE;;wGAvBzD,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAb,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EC3C5C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0rBAiBA,EDoBY,MAAA,EAAA,CAAA,gWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EAAE,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EAAE,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,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,6CAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMjG,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,sBAAsB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,CAAC,EAAA,QAAA,EACnG,+BAA+B,EAG1B,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,0rBAAA,EAAA,MAAA,EAAA,CAAA,gWAAA,CAAA,EAAA;gJAIrC,WAAW,EAAA,CAAA;sBADV;gBAGD,OAAO,EAAA,CAAA;sBADN;gBAGD,mBAAmB,EAAA,CAAA;sBADlB;;;AEhDH;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAuEG,MAAO,cAAe,SAAQ,aAAa,CAAA;AAiB5B,IAAA,UAAA;AACA,IAAA,kBAAA;AACA,IAAA,KAAA;AACA,IAAA,mBAAA;IAnBnB,WAAW,GAAG,IAAI;IAClB,OAAO,GAAG,KAAK;AACf,IAAA,YAAY;IACZ,WAAW,GAAG,IAAI;IAClB,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACnD,OAAO,GAA4B,EAAE;IACrC,oBAAoB,GAAG,KAAK;AAEpB,IAAA,QAAQ;IACR,oBAAoB,GAAG,qCAAqC;AAEpE,IAAA,IAAI,mBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC,oBAAoB;;AAGlC,IAAA,WAAA,CACmB,UAA6B,EAC7B,kBAAsC,EACtC,KAAqB,EACrB,mBAAoD,EAAA;AAErE,QAAA,KAAK,EAAE;QALU,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;;IAKtC,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAEhB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;AAEpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAEvB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AACxF,YAAA,IAAI,CAAC,WAAW,GAAG,8BAA8B,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACrE,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/D,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE;;AAEjD,SAAC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAU,KAAI;AAC7F,YAAA,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,aAAa;AAE7C,YAAA,IAAI,CAAC;iBACF,OAAO,CAAC,MAAM;AACd,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CACR,CAAC,IAAI,KAAI;AACP,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,gBAAA,IAAI,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACzB,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;;qBAClC;AACL,oBAAA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClE,wBAAA,UAAU,EAAE;AACb,qBAAA,CAAC;;AAEN,aAAC,EACD,CAAC,KAAwB,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAClD;AACL,SAAC,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACvF,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACjH,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAChH,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,OAAO;AACd,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACtB,SAAC,CAAC;QAEJ,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACtG,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACvB,SAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;;IAIpC,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACrD,KAAK,CAAC,WAAW,EAAE;;IAGrB,QAAQ,CAAC,SAAiB,IAAI,EAAA;AAC5B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAClE,QAAA,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,aAAa,GAAa,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAM,CAAC;QAC9F,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;;AAGlC,IAAA,gBAAgB,CAAC,UAAkB,EAAE,aAAqB,EAAE,UAAkB,EAAA;QACpF,OAAO,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC;;AAG1I,IAAA,wBAAwB,CAAC,UAAkB,EAAE,aAAqB,EAAE,UAAkB,EAAA;QAC5F,MAAM,aAAa,GACjB,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;cACrC,IAAI,CAAC,kCAAkC,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU;cAC7E,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC;QACzD,aAAa,CAAC,KAAK,EAAE;AACrB,QAAA,OAAO,aAAa;;AAGd,IAAA,kCAAkC,CAAC,UAAkB,EAAE,aAAqB,EAAE,UAAkB,EAAA;QACtG,MAAM,qBAAqB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QACnD,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,aAAa,CAAC;AAC1D,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,qBAAqB,CAAC,KAAK,CAAC,GAAG,UAAU;;AAE3C,QAAA,OAAO,qBAAqB;;IAGtB,mBAAmB,CAAC,UAAkB,EAAE,aAAqB,EAAA;AACnE,QAAA,MAAM,OAAO,GAAa,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC1E,OAAO,CAAC,GAAG,EAAE;AACb,QAAA,OAAO,OAAO;;IAGR,qBAAqB,CAAC,UAAkB,EAAE,MAAc,EAAA;QAC9D,MAAM,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QAC/C,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACtC,YAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;;QAEhC,iBAAiB,CAAC,KAAK,EAAE;AACzB,QAAA,OAAO,iBAAiB;;AAG1B,IAAA,kBAAkB,CAAC,EAAe,EAAA;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC;;AAGtD,IAAA,UAAU,CAAC,IAAe,EAAA;AACxB,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK;YAE/B,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,EAAU;gBAEd,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,gBAAgB,EAAE;oBAC5C,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;;qBACvC;AACL,oBAAA,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;;AAGpB,gBAAA,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE;AAC5C,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjB;;AAGF,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;;;AAIzD,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,IAAI,CAAC,UAAU,CAAE,KAAqB,CAAC,MAAM,EAAE,IAAI,CAAC;;AAGtD,IAAA,oBAAoB,CAAC,KAAkB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE;;AAG5C,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;YAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE;AACzE,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;;;AAG7C,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;;AAGzB,IAAA,mBAAmB,CAAC,KAAsB,EAAA;AACxC,QAAA,MAAM,IAAI,GAAc,KAAK,CAAC,IAAI,CAAC,IAAI;;QAGvC,IAAI,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE;AACpD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YAC9B;;;AAIF,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE;AACnE,YAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACpD;;QAGF,IAAI,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAChC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;;gBAG3G,IAAI,qBAAqB,EAAE;AACzB,oBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC9F,oBAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;;;;;AAM7E,IAAA,mBAAmB,CAAC,KAAa,EAAE,QAAQ,GAAG,EAAE,EAAA;QAC9C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;AAChE,QAAA,MAAM,uBAAuB,GAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAqB,IAAI,EAAE;AAE1F,QAAA,MAAM,4BAA4B,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;QAEzI,IAAI,4BAA4B,EAAE;YAChC;;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;;AAGhC,IAAA,eAAe,CAAC,KAAkB,EAAA;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;QACtF,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;;;;IAK1B,MAAM,iBAAiB,CAAC,IAAU,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAEpB,QAAA,IAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ;YAEnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,KAAI;AAC3C,gBAAA,OAAO,EAAE,GAAG,WAAW,EAAE;AAC3B,aAAC,CAAC;AAEF,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;AACrC,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,wBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;;qBAElB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;AACvC,oBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;;;AAKxC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;;;IAI/C,MAAM,iBAAiB,CAAC,IAAU,EAAA;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ;;AAGnC,QAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAErB,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;;;AAG9B,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE;AAC/E,YAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI;;AAGhE,YAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;aAChB;;AAEL,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACxE,YAAA,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE;gBACf,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE;;AAG/E,gBAAA,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,IAAI;AACpE,gBAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;;;;AAKhC,IAAA,eAAe,CAAC,IAAU,EAAA;QACxB,IAAI,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC;;AAE1D,QAAA,OAAO,KAAK;;AAGd,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM;;AAEjD,QAAA,OAAO,KAAK;;AAGd,IAAA,gBAAgB,CAAC,aAA6B,EAAA;AAC5C,QAAA,IAAI,aAAa,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,MAAM;AACvC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;;aAC/B;AACL,YAAA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,YAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI;;;AAIzC,IAAA,gBAAgB,CAAC,aAA6B,EAAA;QAC5C,MAAM,aAAa,GAAG,EAAE;AACxB,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,MAAoB,KAAI;AAC7C,YAAA,IAAI,UAAU;AACd,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5C,gBAAA,UAAU,GAAG,CAAA,EAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAK,EAAA,EAAA,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;;iBAClD;AACL,gBAAA,UAAU,GAAG,MAAM,CAAC,KAAK;;AAE3B,YAAA,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU;AACxC,SAAC,CAAC;QAEF,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;;AAGvF,IAAA,OAAO,CAAC,KAAwB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACzC,YAAA,QAAQ,KAAK,CAAC,MAAM;AAClB,gBAAA,KAAK,GAAG;AACN,oBAAA,IAAI,CAAC,oBAAoB,GAAG,qDAAqD;oBACjF;AACF,gBAAA,KAAK,GAAG;AACN,oBAAA,IAAI,CAAC,oBAAoB,GAAG,+CAA+C;oBAC3E;AACF,gBAAA;AACE,oBAAA,IAAI,CAAC,oBAAoB,GAAG,mDAAmD;;;;wGAzU5E,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAY,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,+BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,4FC7F3B,ixJAsHA,EAAA,MAAA,EAAA,CAAA,kDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlDI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,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,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,8DACrB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,mBAAmB,EACnB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,wBAAwB,qOACxB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,2EAChB,+BAA+B,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC/B,sBAAsB,EACtB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,iEACvB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,EACvB,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,wUACnB,mCAAmC,EAAA,QAAA,EAAA,yDAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAO1B,cAAc,EAAA,UAAA,EAAA,CAAA;kBA3B1B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,qBAAqB;wBACrB,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB,wBAAwB;wBACxB,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,gBAAgB;wBAChB,+BAA+B;wBAC/B,sBAAsB;wBACtB,mBAAmB;wBACnB,uBAAuB;wBACvB,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAE3B,WAAW,EAAA,QAAA,EAAA,ixJAAA,EAAA,MAAA,EAAA,CAAA,kDAAA,CAAA,EAAA;;;AE3FvB;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAgDG,MAAO,sBAAuB,SAAQ,aAAa,CAAA;AAC9C,IAAA,QAAQ;AACR,IAAA,IAAI;AACJ,IAAA,SAAS;AACT,IAAA,aAAa;AACb,IAAA,gBAAgB;AAChB,IAAA,UAAU;AACV,IAAA,eAAe;AACf,IAAA,OAAO;AACP,IAAA,aAAa;AAEZ,IAAA,cAAc,GAAG,IAAI,YAAY,EAAc;AAC/C,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAc;AACjD,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAc;AACzC,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAc;AAEzC,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAEzC,IAAA,UAAU,CAAC,IAAe,EAAA;AAChC,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;;AAIlF,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,IAAI,CAAC,UAAU,CAAE,KAAqB,CAAC,MAAM,EAAE,IAAI,CAAC;;wGAzB3C,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,ECtEnC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0gHAgGA,ED3CI,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mCAAmC,EACnC,QAAA,EAAA,yDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,qGACrB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAIV,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAtBlC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAEP,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,mBAAmB;wBACnB,mBAAmB;wBACnB,qBAAqB;wBACrB,uBAAuB;wBACvB,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB,sBAAsB;wBACtB,mCAAmC;wBACnC,qBAAqB;wBACrB;qBACD,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,0gHAAA,EAAA;8BAG5B,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAES,cAAc,EAAA,CAAA;sBAAvB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,QAAQ,EAAA,CAAA;sBAAjB;gBACS,QAAQ,EAAA,CAAA;sBAAjB;;;AEpFH;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAYG,MAAO,kBAAmB,SAAQ,sBAAsB,CAAA;IAC5D,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,EACjE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,EACjE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAC/D;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,IAAI,EAAE;;wGAVzD,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClC/B,0TAOA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDwBY,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAGrB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAEP,OAAA,EAAA,CAAC,sBAAsB,CAAC,EAAA,aAAA,EAClB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,0TAAA,EAAA;;;AEhCvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAgBG,MAAO,0BAA2B,SAAQ,sBAAsB,CAAA;AAW1D,IAAA,iBAAA;AACA,IAAA,WAAA;AACA,IAAA,iBAAA;IAZV,UAAU,GAAe,IAAI,UAAU,CAAC;AACtC,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,UAAU,EAAE;AACb,KAAA,CAAC;IACF,SAAS,GAAG,KAAK;IACjB,IAAI,GAAmB,IAAI;IAC3B,OAAO,GAA4B,EAAE;AAErC,IAAA,WAAA,CACU,iBAAoC,EACpC,WAAmC,EACnC,iBAAoC,EAAA;AAE5C,QAAA,KAAK,EAAE;QAJC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;IAK3B,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;AAE3D,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EACrE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EACrE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EACpE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EAClE,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAC7E;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,iBAAiB,IAAI,EAAE;;AAG5E,IAAA,gBAAgB,CAAC,UAAsB,EAAA;QACrC,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,UAAU,CAAC,QAAQ;AACrD,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;;AAG1B,IAAA,OAAO,CAAC,UAAsB,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,SAAS,CACvE,CAAC,iBAAiC,KAAI;AACpC,YAAA,IAAI,CAAC,IAAI,GAAG,iBAAiB;YAC7B,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU;AACnD,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;SACvC,EACD,MAAK;AACH,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,SAAC,CACF;;IAGK,UAAU,GAAA;QAChB,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;;wGAzDpB,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCvC,6jBAcA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDqBY,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAGrB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAEP,OAAA,EAAA,CAAC,sBAAsB,CAAC,EAAA,aAAA,EAClB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,6jBAAA,EAAA;;;AEpCvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAqCU,2BAA2B,CAAA;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;IAIxC,SAAS,GAAG,MAAM;AAElB;;;AAGG;IAEH,sBAAsB,GAAG,KAAK;AAE9B;;AAEG;;AAGH,IAAA,MAAM,GAAsB,IAAI,YAAY,EAAE;AAE9C;;;;AAIG;AAEH,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAE;;AAIvD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAU;AAG5C,IAAA,WAAW;AAEX,IAAA,sBAAsB,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,qBAAqB,EAAE,EAAE,mCAAmC,EAAE,CAAC,CAAC;AAEnI,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;;IAGpE,IAAI,UAAU,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC;;IAG7C,QAAQ,GAAA;QACN,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,eAAe,KAAI;AAC/G,YAAA,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE;AAC3C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AACzC,SAAC,CAAC;QAEF,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAC/F,IAAI,KAAK,YAAY,kBAAkB,IAAI,KAAK,YAAY,iBAAiB,EAAE;AAC7E,gBAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE;oBACvC,IAAI,CAAC,mBAAmB,EAAE;;qBACrB;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;;;AAGnC,SAAC,CAAC;AACF,QAAA,aAAa,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,WAAW;YACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACrB,MAAM,CAAC,CAAC,CAAC,KAA2B,CAAC,YAAY,eAAe,CAAC,EACjE,SAAS,CAAC,IAAI,CAAC;SAElB;AACE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAI;AACtB,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE;AACrD,gBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;;AAE/D,SAAC,CAAC;;AAGN,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,WAAW,EAAE;YACvF,IAAI,CAAC,mBAAmB,EAAE;;;IAI9B,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE;QAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;QAC3C,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,IAAI,WAAW,EAAE;AACpD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;;;IAIjC,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;;IAG5B,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE;;IAG/C,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC;;IAG3C,mBAAmB,GAAA;AACjB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM;AACjD,QAAA,IAAI,MAAM,EAAE,UAAU,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,yBAAyB,CAAC;;AAC/C,aAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC;;AAC9C,aAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,uBAAuB,CAAC;;aAC7C,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AAC/D,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,yBAAyB,CAAC;;aAC/C;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;;;wGArHtB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,0cC3DxC,muCAuCA,EAAA,MAAA,EAAA,CAAA,wiBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDaY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,mLAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,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,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,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,UAAA,EAAA,IAAA,EAAE,cAAc,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,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,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,0ZAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,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,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOhI,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBARvC,SAAS;8BACC,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAClI,0BAA0B,EAAA,aAAA,EAGrB,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,QAAA,EAAA,muCAAA,EAAA,MAAA,EAAA,CAAA,wiBAAA,CAAA,EAAA;8BASrC,SAAS,EAAA,CAAA;sBADR;gBAQD,sBAAsB,EAAA,CAAA;sBADrB;;;QAQD,MAAM,EAAA,CAAA;sBAFL;gBAUD,YAAY,EAAA,CAAA;sBADX;gBAKD,eAAe,EAAA,CAAA;sBADd;gBAID,WAAW,EAAA,CAAA;sBADV,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AE9F5C;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAkBU,kCAAkC,CAAA;AAuBzB,IAAA,kBAAA;AAtBpB,IAAA,WAAW;AACX,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC,WAAW;;IAGjB,UAAU,GAAG,EAAE;AAEvB,IAAA,OAAO,GAAiB,IAAI,OAAO,EAAE;AACrC,IAAA,QAAQ,GAAiB,IAAI,OAAO,EAAE;AACtC,IAAA,QAAQ,GAAiB,IAAI,OAAO,EAAE;IAEtC,MAAM,GAA8C,IAAI;AAExD,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;;IAGxB,IAAI,SAAS,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE;;AAG7C,IAAA,WAAA,CAAoB,kBAAsC,EAAA;QAAtC,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;;IAEtC,MAAM,GAAA;AACJ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAI5B,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,IAAI,KAAK,EAAE;YACT,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAI5B,UAAU,GAAA;AACR,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS;AAC5B,QAAA,IAAI,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;YACrB,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,IAAI,EAAE;AACJ,oBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS;AACjC,oBAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;AACxB;aACF;;AAEH,QAAA,OAAO,IAAI;;AAGL,IAAA,aAAa,CAAC,YAAgC,EAAA;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;AACnF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,YAAA,OAAO,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;AACjE,SAAC,CAAC;;wGA1DO,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cAFjC,MAAM,EAAA,CAAA;;4FAEP,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAH9C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACvCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAyDU,oBAAoB,CAAA;AAwCZ,IAAA,YAAA;AACA,IAAA,qBAAA;AACA,IAAA,MAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,KAAA;AACA,IAAA,cAAA;AACA,IAAA,UAAA;AACD,IAAA,kBAAA;AA/CD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAElE,kBAAkB,GAAG,KAAK;IAC1B,sBAAsB,GAAG,KAAK;AAC9B,IAAA,cAAc;IACd,kBAAkB,GAAG,KAAK;IAC1B,KAAK,GAAG,EAAE;IAEV,YAAY,GAAW,IAAI;AAC3B,IAAA,aAAa,GAA6B;AACxC,QAAA;YACE,EAAE,EAAE,eAAe,CAAC,KAAK;AACzB,YAAA,GAAG,EAAE,oBAAoB;AACzB,YAAA,KAAK,EAAE,KAAK;YACZ,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI;AACjD,SAAA;AACD,QAAA;YACE,EAAE,EAAE,eAAe,CAAC,OAAO;AAC3B,YAAA,GAAG,EAAE,sBAAsB;AAC3B,YAAA,KAAK,EAAE,KAAK;YACZ,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI;AACjD,SAAA;AACD,QAAA;YACE,EAAE,EAAE,eAAe,CAAC,SAAS;AAC7B,YAAA,GAAG,EAAE,wBAAwB;YAC7B,KAAK,EAAE,IAAI,CAAC,wBAAwB;YACpC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI;AAC/C;KACF;AAGD,IAAA,kBAAkB;AAGlB,IAAA,OAAO;AAEU,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CACmB,YAAuC,EACvC,qBAAyD,EACzD,MAAwB,EACxB,MAAc,EACd,KAAqB,EACrB,KAAsB,EACtB,cAA8B,EAC9B,UAAsB,EACvB,kBAA2C,EAAA;QAR1C,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAU,CAAA,UAAA,GAAV,UAAU;QACX,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;AAElC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAU,8BAA8B,EAAE,IAAI,CAAC;;IAGtF,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;QAErB,KAAK,CACH,IAAI,CAAC,KAAK,CAAC,WAAW,EACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACrBY,QAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,iBAAiB,CAAC,EAC7C,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EACtCC,KAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC,CAC5B;AAEA,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,MAAc,KAAI;AAC5B,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC;AAChC,YAAA,IAAI,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3C,gBAAA,IAAI,CAAC,YAAY,GAAG,mCAAmC,CAAC,YAAY,CAAC;gBACrE,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;;AAE1D,SAAC,CAAC;QAEJ,IAAI,CAAC,YAAY,CAAC;AACf,aAAA,IAAI,CACH,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,cAAc,CACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACrBD,QAAM,CAAC,CAAC,KAAK,KAA+B,KAAK,YAAY,eAAe,CAAC,EAC7EE,WAAS,CAAC,IAAI,CAAC,CAChB,CACF;AAEF,aAAA,SAAS,CAAC,CAAC,GAAG,oBAAoB,CAAC,KAAI;YACtC,MAAM,cAAc,GAAG,oBAAoB,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9D,YAAA,IAAI,IAAI,CAAC,YAAY,IAAI,cAAc,EAAE;gBACvC,IAAI,CAAC,cAAc,EAAE;;AAEzB,SAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC3F,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,EAAE;AAClE,SAAC,CAAC;;IAGJ,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;IAGxC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC7C,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC3C,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,EAAE;AAEhE,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;;;IAI1D,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAC5C,IAAI,CAAC,oBAAoB,EAAE;;IAG7B,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE;;;AAI/D;;;;AAIG;AACH,IAAA,cAAc,CAAC,KAAU,EAAA;AACvB,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,KAAK;AAClF,QAAA,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE;QAErC,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW;AAC/B,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE;gBACzE;;iBACK;gBACL,IAAI,CAAC,cAAc,EAAE;;;aAElB;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,gCAAgC,CAAC;;QAGtE,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;AAC3B,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,UAAkB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB;;AAGF,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;AAC9B,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,EAAE;;IAGlE,cAAc,GAAA;QACZ,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAE/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE;QAE7C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE;YAC7B;;AAGF,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,EAAE;AAEhE,YAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBAC/B;;YAEF,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC5D,gBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE;;AAC9B,iBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;;aAE/E;YACL,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AACrD,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC;;iBACtC,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC5D,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC;;iBACpC;gBACL,IAAI,CAAC,oBAAoB,EAAE;;YAG7B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACnD,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;AACrB,iBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;;;AAKxF,IAAA,IAAI,wBAAwB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;;AAG5D,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;;IAGpF,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC;;IAGpD,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC;;IAGtD,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC;;AAGxD,IAAA,eAAe,CAAC,QAAgB,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC;AACvE,QAAA,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK;;IAGnC,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;;IAGzD,2BAA2B,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC7B,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE;;AAE5E,QAAA,OAAO,KAAK;;AAGd,IAAA,aAAa,CAAC,MAAuD,EAAA;AACnE,QAAA,MAAM,cAAc,GAAG,MAAM,KAAK,eAAe,CAAC,OAAO,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,OAAO;QAE3G,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAa,UAAA,EAAA,MAAM,CAAG,CAAA,CAAA,CAAC;QACxD,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAa,UAAA,EAAA,cAAc,CAAG,CAAA,CAAA,CAAC;;IAGrE,oBAAoB,GAAA;QAClB,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAa,UAAA,EAAA,eAAe,CAAC,KAAK,CAAG,CAAA,CAAA,CAAC;QAC1E,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAa,UAAA,EAAA,eAAe,CAAC,OAAO,CAAG,CAAA,CAAA,CAAC;;IAG9E,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,EAAE;AAC5D,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;gBACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU;;iBACjD;gBACL,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;;;;IAK5D,gBAAgB,GAAA;QACd,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACzD,YAAA,MAAM,OAAO,GAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9D,MAAM,eAAe,GAAoB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YAE9E,IAAI,eAAe,EAAE;AACnB,gBAAA,MAAM,WAAW,GAAiB,eAAe,CAAC,QAAQ;AAC1D,gBAAA,UAAU,GAAG,mCAAmC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;;;AAIpF,QAAA,OAAO,UAAU;;IAGnB,gBAAgB,GAAA;AACd,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC7C,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK,aAAa;;wGA9QjC,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kCAAA,EAAA,EAAA,EAAA,KAAA,EAAAlB,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAgB,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkCpB,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjH3B,28EAiEA,EAAA,MAAA,EAAA,CAAA,kkDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJI,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAf,IAAA,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,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,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,EAAA,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,UAAA,EAAA,IAAA,EAAA,eAAe,6IACf,aAAa,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,UAAA,EAAA,IAAA,EACb,kBAAkB,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,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,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,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EACX,2BAA2B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,wBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAQlB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBApBhC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,UAAU;wBACV,iBAAiB;wBACjB,WAAW;wBACX;qBACD,EACS,QAAA,EAAA,kBAAkB,EAGb,aAAA,EAAA,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAA,QAAA,EAAA,28EAAA,EAAA,MAAA,EAAA,CAAA,kkDAAA,CAAA,EAAA;oVAkCnC,kBAAkB,EAAA,CAAA;sBADjB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAIjD,OAAO,EAAA,CAAA;sBADN,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AEjH7C;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAaU,wBAAwB,CAAA;AAC3B,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAGhD,IAAA,OAAO;AAEA,IAAA,YAAY;AACZ,IAAA,OAAO;IACP,MAAM,GAAG,KAAK;AAErB,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU;;AAGxC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY;YAE5C,IAAI,OAAO,EAAE;gBACX,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACvC,gBAAA,IAAI,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;oBAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;;qBACpD;AACL,oBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;gBAE1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;;iBAClC;AACL,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;;;AAKzB,IAAA,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAA;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;;IAGhC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAA;AAChB,QAAA,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,EAAE,WAAW;QAC9E,OAAO,WAAW,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,WAAW,CAAA,CAAE,GAAG,EAAE;;wGAzC9E,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,ECnCrC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qXAUA,EDoBY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAI,4FAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,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,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKlB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;8BACC,CAAC,IAAI,EAAE,aAAa,CAAC,YACpB,6BAA6B,EAAA,aAAA,EAExB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,qXAAA,EAAA;8BAMrC,OAAO,EAAA,CAAA;sBADN;;;AEtCH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAiBU,yBAAyB,CAAA;AAMhB,IAAA,YAAA;AAJpB,IAAA,eAAe,GAA0C,IAAI,YAAY,EAAE;IAE3E,OAAO,GAA8B,EAAE;AAEvC,IAAA,WAAA,CAAoB,YAAuC,EAAA;QAAvC,IAAY,CAAA,YAAA,GAAZ,YAAY;;IAEhC,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE;;AAGtD,IAAA,mBAAmB,CAAC,MAA+B,EAAA;AACjD,QAAA,MAAM,CAAC,SAAS,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGnC,IAAA,oBAAoB,CAAC,MAA+B,EAAA;AAClD,QAAA,MAAM,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;wGAnBxB,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvCtC,isCAgCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,EAAA,EAAA,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,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,UAAA,EAAA,IAAA,EAAE,aAAa,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,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKzE,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,EAC3E,QAAA,EAAA,wBAAwB,EAEnB,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,isCAAA,EAAA;8FAIrC,eAAe,EAAA,CAAA;sBADd;;;MEKU,4BAA4B,CAAA;AAC9B,IAAA,KAAK;AAEd,IAAA,WAAW;AACX,IAAA,OAAO;AACP,IAAA,iBAAiB,GAAG,IAAI,WAAW,EAAE;AAEpB,IAAA,KAAK,GAAG,MAAM,CAAkB,KAAK,CAAC;AACtC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACxC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,WAAW,GAAuB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC;IAE9F,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,UAAU,KAAI;AACvB,YAAA,IAAI,UAAU,GAAG,CAAC,EAAE;AAClB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAE/B,gBAAA,OAAO,aAAa,CAAC;AACnB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACxF,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;AACxF,iBAAA,CAAC;;iBACG;AACL,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;AAEhC,gBAAA,OAAO,aAAa,CAAC;AACnB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iDAAiD,CAAC;AAC9E,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,yDAAyD;AACtF,iBAAA,CAAC;;SAEL,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,KAAI;AAClC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAChC,SAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC3F,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvC,SAAC,CAAC;;AAGJ,IAAA,SAAS,CAAC,YAA8B,EAAA;QACtC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE;AACxD,YAAA,6BAA6B,EAAE;AAChC,SAAA,CAAC;;AAGJ,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAEvC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;YACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;;;wGAxDrC,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7CzC,iuDAkDA,EAAA,MAAA,EAAA,CAAA,yOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDRY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,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,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,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,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAG/E,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAG5B,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,CAAC,EAC5E,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,iuDAAA,EAAA,MAAA,EAAA,CAAA,yOAAA,CAAA,EAAA;8BAG5B,KAAK,EAAA,CAAA;sBAAb;;;AE9CH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAWU,kCAAkC,CAAA;AAE1B,IAAA,oBAAA;AACA,IAAA,KAAA;IAFnB,WACmB,CAAA,oBAAyC,EACzC,KAAsB,EAAA;QADtB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAK,CAAA,KAAA,GAAL,KAAK;;AAGxB,IAAA,SAAS,CAAC,WAAmB,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAChDc,QAAM,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,EAC/CC,KAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CACrE;;wGAVQ,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gCAAA,EAAA,CAAA;;4FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAH9C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;AChCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAYU,2BAA2B,CAAA;AAMnB,IAAA,aAAA;AACA,IAAA,aAAA;AANnB,IAAA,yBAAyB;AAER,IAAA,SAAS,GAAG,IAAI,aAAa,CAAsB,CAAC,CAAC;AAEtE,IAAA,WAAA,CACmB,aAAyC,EACzC,aAAmC,EACpD,kBAAsD,EAAA;QAFrC,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAa,CAAA,aAAA,GAAb,aAAa;QAG9B;aACG,SAAS,CAAC,2BAA2B;aACrC,IAAI,CAAC,kBAAkB,EAAE;AACzB,aAAA,SAAS,CAAC,CAAC,WAAW,KAAI;AACzB,YAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;AACtE,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/B,SAAC,CAAC;;AAGN,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAACyB,WAAS,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,cAAc,CAAC,CAAC;;IAG9E,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;;IAG3D,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;;AAG1E,IAAA,UAAU,CAAC,aAAuE,EAAA;AAChF,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;;AAGjF,IAAA,eAAe,CAAC,kBAA+B,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;;AAG3F,IAAA,iBAAiB,CAAC,kBAA+B,EAAA;AAC/C,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;;IAG7F,WAAW,CAAC,aAAqB,EAAE,YAAoB,EAAA;AACrD,QAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;;AAGrF,IAAA,iBAAiB,CAAI,MAAwD,EAAA;AACnF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAClB,MAAI,CAAC,CAAC,CAAC,EAAEkB,WAAS,CAAC,MAAM,CAAC,CAAC;;AAGhD,IAAA,qBAAqB,CAAC,MAA+C,EAAA;AAC3E,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAClB,MAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;;wGApDrC,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAmB,kCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAF1B,MAAM,EAAA,CAAA;;4FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACjCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAQU,yBAAyB,CAAA;AACP,IAAA,oBAAA;AAA7B,IAAA,WAAA,CAA6B,oBAAiD,EAAA;QAAjD,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;AAEjD,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,IAAI,CACtDT,KAAG,CAAC,CAAC,QAAQ,KACX,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;AACtE,cAAE,EAAE,OAAO,EAAE,4DAA4D;AACzE,cAAE,IAAI,CACT,EACDT,YAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAC3B;;wGAXQ,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAmB,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA;;4FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC7BlC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA0CU,yBAAyB,CAAA;AAKjB,IAAA,MAAA;AACA,IAAA,mBAAA;AACA,IAAA,oBAAA;AACA,IAAA,yBAAA;AACyB,IAAA,IAAA;AAR5C,IAAA,IAAI;IACJ,mBAAmB,GAAG,KAAK;IAE3B,WACmB,CAAA,MAA+C,EAC/C,mBAAwC,EACxC,oBAAiD,EACjD,yBAAoD,EAC3B,IAA2B,EAAA;QAJpD,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB;QACA,IAAI,CAAA,IAAA,GAAJ,IAAI;AAE9C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC;AACxB,YAAA,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE;AACxB,gBAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC;AACnD,gBAAA,eAAe,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC/F,gBAAA,QAAQ,EAAE;aACX,CAAC;AACF,YAAA,WAAW,EAAE,IAAI,WAAW,CAAC,EAAE;AAChC,SAAA,CAAC;;IAGJ,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACjD;;AAEF,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;QACjC,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACpI,QAAA,IAAI,CAAC;aACF,UAAU,CAAC,UAAU;AACrB,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,4CAA4C,CAAC;AAC/E,gBAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;aACjC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,0CAA0C,CAAC;AAC9E,gBAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;;AAEnC,SAAA,CAAC;;AAzCK,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,iKAS1B,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FATd,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChEtC,84EAkEA,EAAA,MAAA,EAAA,CAAA,sUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrBI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlB,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,mLACb,kBAAkB,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,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,IAAA,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,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,IAAA,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,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAzB,IAAA,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,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAQN,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBArBrC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,UAAU;wBACV,iBAAiB;wBACjB,WAAW;wBACX,mBAAmB;wBACnB;qBACD,EACS,QAAA,EAAA,wBAAwB,EAGnB,aAAA,EAAA,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAA,QAAA,EAAA,84EAAA,EAAA,MAAA,EAAA,CAAA,sUAAA,CAAA,EAAA;;0BAWtC,MAAM;2BAAC,eAAe;;;AEzE3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAaU,mBAAmB,CAAA;AAaD,IAAA,gBAAA;;AAV7B,IAAA,kBAAkB;;AAIlB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAW;AAExB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;AAE7D,IAAA,WAAA,CAA6B,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;AAG7C,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;QACrC,IAAI,CAAC,UAAU,EAAE;;IAGX,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAC5D,GAAG,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;QACF;AACG,aAAA,WAAW;AACX,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAc,KAAI;YAC5B,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEhC,SAAC,CAAC;;IAGE,eAAe,GAAA;QACrB,OAAO;AACL,YAAA,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB;SAC3C;;wGA1CQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACb,iBAAA;uFAIC,kBAAkB,EAAA,CAAA;sBADjB;gBAKD,WAAW,EAAA,CAAA;sBADV;gBAUD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;AClDnC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AA+GG,MAAO,sBAAuB,SAAQ,aAAa,CAAA;AA2BpC,IAAA,YAAA;AACA,IAAA,iBAAA;AACA,IAAA,KAAA;AACA,IAAA,kBAAA;AACA,IAAA,oBAAA;AA9BX,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEzD,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAEtC,IAAA,iBAAiB;AAEpC,IAAA,YAAY;IACZ,cAAc,GAAG,GAAG;AACpB,IAAA,IAAI;AACJ,IAAA,OAAO,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IACzB,SAAS,GAAG,KAAK;AACjB,IAAA,YAAY;IACZ,aAAa,GAAG,KAAK;IACrB,kBAAkB,GAAgB,SAAS;IAC3C,OAAO,GAA4B,EAAE;AACrC,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,aAAa,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG;AAE/B,IAAA,oBAAoB;IACX,cAAc,GAAG,MAAK;QACrC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG;AAC9C,KAAC;IAED,WACE,CAAA,WAAuB,EACN,YAAuC,EACvC,iBAAoC,EACpC,KAAqB,EACrB,kBAAsC,EACtC,oBAAiD,EAAA;AAElE,QAAA,KAAK,EAAE;QANU,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;AAIrC,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,cAAc,EAAE;QAEjD,YAAY,CAAC,MAAM,GAAG;AACpB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE;SACX;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,YAAY,KAAI;AACpF,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAClC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAC7H,kBAAkB,EAAE,EACpB,GAAG,CAAC,CAAC,OAAO,KAAI;AACd,YAAA,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,KAAI;AACnE,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;AAC9H,aAAC,CAAC;YACF,OAAO,cAAc,IAAI,gBAAgB;SAC1C,CAAC,CACH;;IAGH,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QAEhC,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC7D,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,SAAC,CAAC,EAEF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YAC5C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC;AAEtC,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,SAAC,CAAC,EAEF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;AAC7C,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;SACxB,CAAC,EAEF,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAK;AACjD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;SACtB,CAAC,CACH;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,aAAa,IAAI,EAAE;AAEtE,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,wBAAwB,EAAE,CAAC,SAAS,CAAC,CAAC,aAAa,KAAI;AAC1D,gBAAA,IAAI,CAAC,kBAAkB,GAAG,aAAa;AACzC,aAAC,CAAC;AAEF,YAAA,aAAa,CAAC;gBACZ,IAAI,CAAC,KAAK,CAAC,WAAW;gBACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACrB,MAAM,CAAC,CAAC,KAAK,KAA+B,KAAK,YAAY,eAAe,CAAC,EAC7E,SAAS,CAAC,IAAI,CAAC;aAElB;AACE,iBAAA,IAAI,CACH,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAI;AACf,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE;gBAChC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC/C,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY;gBAEpC,IAAI,CAAC,YAAY,GAAG,mCAAmC,CAAC,IAAI,CAAC,YAAY,CAAC;gBAE1E,MAAM,uBAAuB,GAAG,8BAA8B,CAAC,IAAI,CAAC,YAAY,CAAC;gBACjF,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC;aACtE,CAAC,EACF,SAAS,CAAC,CAAC,GAAG,oBAAoB,CAAC,KAAI;gBACrC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AAEzD,gBAAA,MAAM,gBAAgB,GAAG,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;AAEvH,gBAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,oBAAoB,CAAC,CAAC;AAC/D,aAAC,CAAC;AAEH,iBAAA,SAAS,CAAC,CAAC,oBAAoB,KAAI;AAClC,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC;gBAC3F,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,gCAAgC,CAAC,IAAI,CAAC,YAAY,CAAC;AACjF,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3E,oBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;;gBAGtF,IAAI,kBAAkB,EAAE;AACtB,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;;AAEpC,aAAC,CAAC;;QAGN,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;;IAGxD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,GAAG,SAAS;QAC/D,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;;AAG3D,IAAA,aAAa,CAAC,KAAuB,EAAA;AACnC,QAAA,IAAI,OAAe;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK;AAEtD,YAAA,MAAM,UAAU,GAAG,CAA4B,yBAAA,EAAA,UAAU,EAAE;YAC3D,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC;AAErD,YAAA,IAAI,OAAO,KAAK,UAAU,EAAE;gBAC1B,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAkC,gCAAA,CAAA,CAAC;;;AAE/E,QAAA,MAAM;AACN,YAAA,OAAO,GAAG,KAAK,CAAC,OAAO;;AAGzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC;;AAG7C,IAAA,oBAAoB,CAAC,UAA2B,EAAA;AAC9C,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC7C,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,8BAA8B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;IAG5E,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;YAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;;AAE7C,QAAA,OAAO,CAAC;;AAGV,IAAA,mBAAmB,CAAC,UAAsB,EAAA;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG;YACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,SAAS,EAAE,UAAU,CAAC;SACvB;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;IAGpB,UAAU,GAAA;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE;QAErD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;;AAG1D,QAAA,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;;AAGxB,IAAA,iBAAiB,CAAC,IAAe,EAAA;AAC/B,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACvB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC/C;;AAGF,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;;;AAIzD,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,IAAI,CAAC,iBAAiB,CAAE,KAAqB,CAAC,MAAM,EAAE,IAAI,CAAC;;IAG7D,eAAe,GAAA;QACb,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,2BAA2B,EAAE,CAAC;;IAGxD,cAAc,GAAA;QACZ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,+BAA+B,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAC;;AAG1D,IAAA,qBAAqB,CAAC,MAA+B,EAAA;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;AAG5B,IAAA,eAAe,CAAC,YAAyB,EAAA;AACvC,QAAA,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;AAC3C,QAAA,IAAI,CAAC;aACF,eAAe,CAAC,YAAY;AAC5B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,2DAA2D,CAAC;aAC/F;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,yDAAyD,CAAC;;AAEhG,SAAA,CAAC;;IAGN,YAAY,GAAA;QACV,IAAI,CAAC,wBAAwB;AAC1B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,WAAW,KAAI;AACzB,YAAA,IAAI,CAAC,kBAAkB,GAAG,WAAW;AACrC,YAAA,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,GAAG,WAAW;AACnE,SAAC,CAAC;;IAGE,kBAAkB,CAAC,oBAA4C,EAAE,KAAyB,EAAA;AAChG,QAAA,MAAM,eAAe,GAAG,KAAK,KAAK,IAAI,CAAC,oBAAoB;AAC3D,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AAEjC,QAAA,IAAI,CAAC,oBAAoB,IAAI,oBAAoB,CAAC,iBAAiB,KAAK,UAAU,IAAI,oBAAoB,CAAC,iBAAiB,KAAK,YAAY,EAAE;AAC7I,YAAA,OAAO,IAAI;;AACN,aAAA,IAAI,oBAAoB,CAAC,iBAAiB,KAAK,YAAY,EAAE;AAClE,YAAA,OAAO,eAAe;;aACjB;YACL,OAAO,CAAC,CAAC,KAAK;;;IAIV,wBAAwB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAChC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,SAAS,CAAC,CAAC,MAAM,KACf,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAC3C,KAAK,EAAE,EACP,GAAG,CACD,CAAC,aAAa,KACZ,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU,KAAK,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAC/G,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CACtD,CACF,CACF,CACF;;wGA9QQ,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA4B,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,ECrInC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,siUA6NA,ED/HI,MAAA,EAAA,CAAA,qyKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAApB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,kIAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,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,EAAA,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,EAAA,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,EACb,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,wBAAwB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,yBAAyB,EAAA,QAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,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,EACb,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,0BAA0B,mGAC1B,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,yBAAyB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,mCAAmC,EACnC,QAAA,EAAA,yDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,EAC5B,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,+BAA+B,EAC/B,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,iHACnB,kCAAkC,EAAA,IAAA,EAAA,gCAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAQzB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAzClC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,oBAAoB;wBACpB,oBAAoB;wBACpB,gBAAgB;wBAChB,eAAe;wBACf,aAAa;wBACb,qBAAqB;wBACrB,uBAAuB;wBACvB,wBAAwB;wBACxB,yBAAyB;wBACzB,mBAAmB;wBACnB,aAAa;wBACb,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,gBAAgB;wBAChB,uBAAuB;wBACvB,sBAAsB;wBACtB,mBAAmB;wBACnB,oBAAoB;wBACpB,0BAA0B;wBAC1B,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB,yBAAyB;wBACzB,mCAAmC;wBACnC,sBAAsB;wBACtB,4BAA4B;wBAC5B,+BAA+B;wBAC/B,mBAAmB;wBACnB,kCAAkC;wBAClC;AACD,qBAAA,EAAA,QAAA,EACS,oBAAoB,EAAA,aAAA,EAEf,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,siUAAA,EAAA,MAAA,EAAA,CAAA,qyKAAA,CAAA,EAAA;;;AElIvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAoDG,MAAO,+BAAgC,SAAQ,aAAa,CAAA;AAStD,IAAA,qBAAA;AACA,IAAA,KAAA;AACA,IAAA,cAAA;AACA,IAAA,UAAA;AAXV,IAAA,YAAY;IACZ,cAAc,GAAG,GAAG;AACpB,IAAA,IAAI;IACJ,YAAY,GAAG,CAAC;IAChB,SAAS,GAAG,KAAK;IACjB,OAAO,GAA4B,EAAE;AAErC,IAAA,WAAA,CACU,qBAAyD,EACzD,KAAqB,EACrB,cAA8B,EAC9B,UAAsB,EAAA;AAE9B,QAAA,KAAK,EAAE;QALC,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAU,CAAA,UAAA,GAAV,UAAU;QAIlB,qBAAqB,CAAC,MAAM,GAAG;AAC7B,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE;SACX;;IAGH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC;QAC7C,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,eAAe,IAAI,EAAE;AAExE,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,EACtF,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,EACvF,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAEpF,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;AAChD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AAErB,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE;AACtC,SAAC,CAAC,EAEF,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACrD,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,SAAC,CAAC,EAEF,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACpD,YAAA,IAAI;AACF,gBAAA,MAAM,EACJ,KAAK,EAAE,EAAE,UAAU,EAAE,EACtB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3B,gBAAA,IAAI,UAAU,KAAK,GAAG,EAAE;AACtB,oBAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE;;;AAE5C,YAAA,OAAO,CAAC,EAAE;SACb,CAAC,CACH;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAc,KAAI;gBAC5F,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI;AACxD,gBAAA,IAAI,CAAC,YAAY,GAAG,mCAAmC,CAAC,YAAY,CAAC;gBACrE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,CAAC,EAAE;oBACjC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC;oBAC/C,IAAI,CAAC,qBAAqB,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;AACxD,oBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE;;qBAC9B;AACL,oBAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,GAAG,IAAI;AAC3C,oBAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvC,wBAAA,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;AACnD,qBAAA,CAAC;;AAEN,aAAC,CAAC;;;AAIN,IAAA,oBAAoB,CAAC,UAAsB,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE;;IAG/C,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;YAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;;AAE7C,QAAA,OAAO,CAAC;;AAGV,IAAA,mBAAmB,CAAC,UAAsB,EAAA;AACxC,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG;YAClC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,SAAS,EAAE,UAAU,CAAC;SACvB;AACD,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE;;AAGrC,IAAA,UAAU,CAAC,IAAe,EAAA;AACxB,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;AAI9D,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,IAAI,CAAC,UAAU,CAAE,KAAqB,CAAC,MAAM,EAAE,IAAI,CAAC;;wGArG3C,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,kCAAA,EAAA,EAAA,EAAA,KAAA,EAAA9B,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EC1E5C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,oiIA+FA,ED3CI,MAAA,EAAA,CAAA,yiCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,sTACZ,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,kFACnB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,wUACnB,mCAAmC,EAAA,QAAA,EAAA,yDAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAO1B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAxB3C,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,oBAAoB;wBACpB,oBAAoB;wBACpB,mBAAmB;wBACnB,mBAAmB;wBACnB,uBAAuB;wBACvB,qBAAqB;wBACrB,mBAAmB;wBACnB,mBAAmB;wBACnB,gBAAgB;wBAChB,sBAAsB;wBACtB,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EACS,oBAAoB,EAAA,aAAA,EAGf,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,oiIAAA,EAAA,MAAA,EAAA,CAAA,yiCAAA,CAAA,EAAA;;;AExEvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAmDG,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AAG/B,IAAA,UAAA;IAFpB,OAAO,GAA4B,EAAE;AAErC,IAAA,WAAA,CAAoB,UAA6B,EAAA;AAC/C,QAAA,KAAK,EAAE;QADW,IAAU,CAAA,UAAA,GAAV,UAAU;;IAI9B,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5F,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AAC3F,SAAA,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS;;AAG9D,IAAA,QAAQ,CAAC,QAAc,EAAA;AACrB,QAAA,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,QAAQ;;QAGjC,MAAM,UAAU,GAAG,CAAC,IAAc,KAAc,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAe,KAAK,IAAI,KAAK,OAAO,CAAC;QAEjH,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC;iBACF,OAAO,CAAC,EAAE;AACV,iBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;AAC9B,iBAAA,SAAS,CAAC,CAAC,EAAE,IAAI,EAAQ,KAAI;AAC5B,gBAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,YAAY,GAAG,iBAAiB;gBACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACtC,aAAC,CAAC;;;AAIR,IAAA,iBAAiB,CAAC,IAAe,EAAA;AAC/B,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG3B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;;;;AAK3D,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,IAAI,CAAC,iBAAiB,CAAE,KAAqB,CAAC,MAAM,EAAE,IAAI,CAAC;;wGAhDlD,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,ECzE/B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8hHAyFA,EDrCI,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,2TACZ,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,+BAA+B,qIAC/B,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,wUACnB,mCAAmC,EAAA,QAAA,EAAA,yDAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAM1B,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAvB9B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,+BAA+B;wBAC/B,qBAAqB;wBACrB,sBAAsB;wBACtB,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B,eAAe,EAAA,QAAA,EAAA,8hHAAA,EAAA;;;AEvE3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAkDG,MAAO,oBAAqB,SAAQ,aAAa,CAAA;IACrD,OAAO,GAA4B,EAAE;IAErC,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5F,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AAC3F,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,IAAI,EAAE;;AAGjE,IAAA,iBAAiB,CAAC,IAAe,EAAA;AAC/B,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;;;AAIzD,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,IAAI,CAAC,iBAAiB,CAAE,KAAqB,CAAC,MAAM,EAAE,IAAI,CAAC;;wGArBlD,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,ECxEjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ohHAyFA,EDtCI,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,2TACZ,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,+BAA+B,qIAC/B,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mCAAmC,EACnC,QAAA,EAAA,yDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,wUACnB,uBAAuB,EAAA,QAAA,EAAA,cAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAvBhC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,+BAA+B;wBAC/B,qBAAqB;wBACrB,sBAAsB;wBACtB,qBAAqB;wBACrB,mCAAmC;wBACnC,mBAAmB;wBACnB;AACD,qBAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B,kBAAkB,EAAA,QAAA,EAAA,ohHAAA,EAAA;;;AEtE9B;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAmDG,MAAO,oBAAqB,SAAQ,aAAa,CAAA;AAGjC,IAAA,cAAA;IAFpB,OAAO,GAA4B,EAAE;AAErC,IAAA,WAAA,CAAoB,cAA8B,EAAA;AAChD,QAAA,KAAK,EAAE;QADW,IAAc,CAAA,cAAA,GAAd,cAAc;;IAIlC,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACxF,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5F,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AAC3F,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,IAAI,EAAE;;AAGjE,IAAA,OAAO,CAAC,IAAe,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;;AAGvD,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,IAAI,CAAC,OAAO,CAAE,KAAqB,CAAC,MAAM,EAAE,IAAI,CAAC;;wGAxBxC,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,ECzEjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,w/GAyFA,EDrCI,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,2TACZ,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,+BAA+B,qIAC/B,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mCAAmC,EACnC,QAAA,EAAA,yDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,wUACnB,uBAAuB,EAAA,QAAA,EAAA,cAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAvBhC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,+BAA+B;wBAC/B,qBAAqB;wBACrB,sBAAsB;wBACtB,qBAAqB;wBACrB,mCAAmC;wBACnC,mBAAmB;wBACnB;AACD,qBAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B,kBAAkB,EAAA,QAAA,EAAA,w/GAAA,EAAA;;;AEvE9B;;;;;;;;;;;;;;;;;;;;;;AAsBG;AA0CG,MAAO,gBAAiB,SAAQ,aAAa,CAAA;AAS9B,IAAA,KAAA;AACA,IAAA,UAAA;AACA,IAAA,cAAA;AACA,IAAA,eAAA;AACA,IAAA,cAAA;AACA,IAAA,QAAA;AAbnB,IAAA,MAAM;AACN,IAAA,SAAS;IACT,SAAS,GAAG,CAAC;IACb,aAAa,GAA4B,EAAE;AAC3C,IAAA,QAAQ;IACR,oBAAoB,GAAG,IAAI;IAE3B,WACmB,CAAA,KAAqB,EACrB,UAA6B,EAC7B,cAA8B,EAC9B,eAAgC,EAChC,cAA8B,EAC9B,QAAkB,EAAA;AAEnC,QAAA,KAAK,EAAE;QAPU,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAQ,CAAA,QAAA,GAAR,QAAQ;;IAK3B,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;AACtB,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACzH,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACrC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACtD,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACtB,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;AACjD,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;AACnC,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACvE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5D,aAAC,CAAC;AACJ,SAAC,CAAC;AACF,QAAA,IAAI,CAAC;AACF,aAAA,wBAAwB;aACxB,IAAI,CAAC,KAAK,EAAE;AACZ,aAAA,SAAS,CAAC,CAAC,aAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AACpC,SAAC,CAAC;;AAGN,IAAA,YAAY,CAAC,OAAe,EAAA;QAC1B,QAAQ,OAAO;AACb,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;gBAClB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC9B,oBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;oBAClB;;AAEF,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;gBAClB;AACF,YAAA,KAAK,UAAU;AACf,YAAA;AACE,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;;;IAIxB,MAAM,GAAA;QACJ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC;;AAGnD,IAAA,oBAAoB,CAAC,IAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAe,CAAC,CAAC;;IAGzE,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,WAAW,EAAE;;IAGb,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE;AACxB,YAAA,OAAO,KAAK;;QAEd,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE;AAC/C,QAAA,OAAO,WAAW,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,6BAA6B,CAAC;;wGApFxG,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChE7B,gyEAmDA,EAAA,MAAA,EAAA,CAAA,6oCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,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,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,0BAA0B,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBArB5B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,oBAAoB;wBACpB,eAAe;wBACf,oBAAoB;wBACpB,oBAAoB;wBACpB,mBAAmB;wBACnB,gBAAgB;wBAChB,0BAA0B;wBAC1B,uBAAuB;wBACvB;AACD,qBAAA,EAAA,QAAA,EACS,qBAAqB,EAAA,aAAA,EAGhB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,gyEAAA,EAAA,MAAA,EAAA,CAAA,6oCAAA,CAAA,EAAA;;;AE9DvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAWU,aAAa,CAAA;AAChB,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACxC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAE/B,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;;wGAL9C,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,wEAHd,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAGD,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,iBAAiB,CAAC;AAClC,iBAAA;;;AChCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAoCU,oBAAoB,CAAA;AAgCrB,IAAA,MAAA;AACS,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,gBAAA;AAlCnB,IAAA,SAAS;IACT,WAAW,GAAG,IAAI,SAAS,CAAC;AAC1B,QAAA,SAAS,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AAC9B,QAAA,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AAC7B,QAAA,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AAC7B,QAAA,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AAC7B,QAAA,SAAS,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACvE,QAAA,WAAW,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AAChC,QAAA,eAAe,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AACpC,QAAA,cAAc,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AACnC,QAAA,gBAAgB,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjF,YAAY,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;AACrD,KAAA,CAAC;AACF,IAAA,aAAa;IACb,sBAAsB,GAAG,IAAI;IAC7B,sBAAsB,GAAG,KAAK;IAC9B,sBAAsB,GAAG,KAAK;IAC9B,sBAAsB,GAAG,KAAK;AAC9B,IAAA,cAAc;IACd,QAAQ,GAAyB,EAAE;AAEnC,IAAA,IAAI,2BAA2B,GAAA;AAC7B,QAAA,OAAO,CAAgB,aAAA,EAAA,IAAI,CAAC,sBAAsB,GAAG,UAAU,GAAG,QAAQ,UAAU;;AAGtF,IAAA,IAAI,2BAA2B,GAAA;AAC7B,QAAA,OAAO,CAAgB,aAAA,EAAA,IAAI,CAAC,sBAAsB,GAAG,UAAU,GAAG,QAAQ,UAAU;;AAGtF,IAAA,WAAA,CACU,MAAc,EACL,UAA8B,EAC9B,UAAsB,EACtB,gBAAqC,EAAA;QAH9C,IAAM,CAAA,MAAA,GAAN,MAAM;QACG,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;AAEjC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;;IAG5E,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AACrC,QAAA,IAAI,CAAC;aACF,SAAS,CAAC,MAAM;AAChB,aAAA,IAAI,CAAC,CAAC,QAAQ,KAAI;AACjB,YAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,EAAE,KAAK;AACpC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpC,SAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;YACf,UAAU,CAAC,KAAK,CAAC;AACnB,SAAC,CAAC;AAEJ,QAAA,IAAI,CAAC;AACF,aAAA,sBAAsB;AACtB,aAAA,IAAI,CAACE,MAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,QAAQ,MAAM,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;;IAGxD,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE;;AAGzC,IAAA,YAAY,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxB,YAAA,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE;AACpC,YAAA,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE;AAClC,YAAA,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE;AAClC,YAAA,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE;AAClC,YAAA,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE;AACpC,YAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE;AAC9B,YAAA,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,IAAI,EAAE;AAClD,YAAA,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;AAClD,YAAA,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;AACjD,YAAA,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;AACpD,YAAA,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI;AAC3C,SAAA,CAAC;;IAGJ,uBAAuB,GAAA;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE;AACxC,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;;IAGJ,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,sBAAsB;;IAG5D,4BAA4B,GAAA;AAC1B,QAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,sBAAsB;AAE1D,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;;;AAItC,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;;AAGjC,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;;IAGjC,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,sBAAsB;;IAG5D,4BAA4B,GAAA;AAC1B,QAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,sBAAsB;AAE1D,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;;;AAItC,IAAA,mBAAmB,CAAC,KAAK,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC;iBACF,YAAY,CAAC,MAAM,EAAE;AACpB,gBAAA,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;AAC9B,gBAAA,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;AAC9B,gBAAA,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;AAChC,gBAAA,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;AAC1B,gBAAA,OAAO,EAAE;AACP,oBAAA,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;AACrC,oBAAA,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,eAAe;AACrC,oBAAA,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc;AACpC,oBAAA,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB;AACvC,oBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AACpB;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,gBAAA,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE,KAAK;AAClC,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;AAClC,aAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;gBACrC,UAAU,CAAC,KAAK,CAAC;AACnB,aAAC,CAAC;;aACC;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;;;IAIzC,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;;wGArJtB,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,4EC1DjC,63SAoPA,EAAA,MAAA,EAAA,CAAA,uvDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzMI,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,iDACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,IAAA,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,UAAA,EAAA,IAAA,EACnB,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,mLACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,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,UAAA,EAAA,IAAA,EAAA,cAAc,oYACd,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOhB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjBhC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,mBAAmB;wBACnB,eAAe;wBACf,aAAa;wBACb,gBAAgB;wBAChB,kBAAkB;wBAClB,cAAc;wBACd;AACD,qBAAA,EAAA,QAAA,EACS,kBAAkB,EAAA,aAAA,EAGb,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,63SAAA,EAAA,MAAA,EAAA,CAAA,uvDAAA,CAAA,EAAA;;;AExDvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAMI,MAAM,oBAAoB,GAAkB,MAAK;AACtD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC;IAEjD,OAAO,WAAW,CAAC,UAAU,EAAE,IAAI,WAAW,CAAC,OAAO,EAAE;AAC1D,CAAC;;AChCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAwBU,uBAAuB,CAAA;AASxB,IAAA,KAAA;AACA,IAAA,KAAA;AACA,IAAA,UAAA;AACA,IAAA,kBAAA;AACA,IAAA,UAAA;IAZV,YAAY,GAAW,IAAI;IAC3B,oBAAoB,GAA4B,EAAE;AAE1C,IAAA,cAAc;AAEL,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEhD,WACU,CAAA,KAAqB,EACrB,KAAsB,EACtB,UAA+B,EAC/B,kBAAsC,EACtC,UAAsB,EAAA;QAJtB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAU,CAAA,UAAA,GAAV,UAAU;AAElB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;;IAGjF,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,CAAC;aACR,IAAI,CACH,QAAQ,CAAC,CAAC,MAAM,KACd,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAC5H;aAEF,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAA4B,KAAI;YAChE,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC,WAAkB,CAAC,CAAC,CAAC;AACrE,gBAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;;AAEvC,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC9B,SAAC,CAAC;AAEJ,QAAA,IAAI,CAAC;AACF,aAAA,iCAAiC;AACjC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,oBAAoB,GAAG,OAAO;AACrC,SAAC,CAAC;;wGAtCK,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAT,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9CpC,+WAOA,EDgCY,MAAA,EAAA,CAAA,sMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,oIAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,6BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOjE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EACnE,sBAAsB,EAGjB,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAA,QAAA,EAAA,+WAAA,EAAA,MAAA,EAAA,CAAA,sMAAA,CAAA,EAAA;;;AE5CzC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AA4CG,MAAO,iBAAkB,SAAQ,aAAa,CAAA;AAC1C,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAEvD,IAAA,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY;IAC5C,OAAO,GAA4B,EAAE;IAErC,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,QAAQ,IAAI,EAAE;;wGARxD,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EClE9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ojHA2FA,ED3CI,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mCAAmC,EACnC,QAAA,EAAA,yDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,wUACnB,uBAAuB,EAAA,QAAA,EAAA,cAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApB7B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,mBAAmB;wBACnB,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;wBACnB,mBAAmB;wBACnB,gBAAgB;wBAChB,qBAAqB;wBACrB,sBAAsB;wBACtB,qBAAqB;wBACrB,mCAAmC;wBACnC,mBAAmB;wBACnB;qBACD,EAEc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,ojHAAA,EAAA;;;AEhEvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAKH,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE;AACrC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAe,KACjD,CAAY,SAAA,EAAA,IAAI,CAAsD,mDAAA,EAAA,KAAK,IAAI,EAAE,CAAA,EAAA,EAAK,IAAI,CAAA,IAAA,CAAM;AAC3F,MAAM,qBAAqB,GAAkB;IAClD;CACD;;AChCD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAqDG,MAAO,wBAAyB,SAAQ,aAAa,CAAA;AAoDtC,IAAA,KAAA;AACA,IAAA,gBAAA;AACA,IAAA,gBAAA;AACA,IAAA,gBAAA;AACA,IAAA,mBAAA;AACA,IAAA,cAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AA3DX,IAAA,OAAgB,mBAAmB,GAAG,0BAA0B;AAChE,IAAA,OAAgB,iBAAiB,GAAG,wBAAwB;AAEpE,IAAA,WAAW,GAAuB,EAAE,CAAC,EAAE,CAAC;AAEhC,IAAA,QAAQ;IACR,kBAAkB,GAAG,KAAK;IAC1B,SAAS,GAAG,KAAK;IACjB,QAAQ,GAAG,KAAK;IAChB,sBAAsB,GAA8B,EAAE;IACtD,YAAY,GAAG,KAAK;AACpB,IAAA,mBAAmB;IACnB,YAAY,GAAG,EAAE;AACjB,IAAA,WAAW;AACX,IAAA,gBAAgB;IAChB,0BAA0B,GAAG,KAAK;IAClC,kBAAkB,GAAG,KAAK;AAElC,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;AAGtB,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;;AAGhC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;AAGvB,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;AAGtB,IAAA,IAAI,qBAAqB,GAAA;QACvB,OAAO,IAAI,CAAC,sBAAsB;;AAGpC,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;;AAG1B,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;;AAG9B,IAAA,IAAI,yBAAyB,GAAA;QAC3B,OAAO,IAAI,CAAC,0BAA0B;;AAGxC,IAAA,WAAA,CACmB,KAAqB,EACrB,gBAAkC,EAClC,gBAAkC,EAClC,gBAAkC,EAClC,mBAAwC,EACxC,cAA8B,EAC9B,aAA4B,EAC5B,UAAsB,EACtB,UAA6B,EAAA;AAE9C,QAAA,KAAK,EAAE;QAVU,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAU,CAAA,UAAA,GAAV,UAAU;;IAK7B,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACvG,IAAI,CAAC,KAAK,CAAC;AACR,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,MAAM,KAAI;AAChB,YAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,YAAY;YAChD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ;AACrC,YAAA,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;SAC5E,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YACxE,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACrF,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,kBAAkB,EAAE;AAC7D,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;gBACrB;;YAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACzD,IAAI,CAAC,eAAe,EAAE;AACxB,SAAC,CAAC;QACJ,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;AACxG,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG;AAC9B,YAAA,eAAe,EAAE,mEAAmE;AACpF,YAAA,iBAAiB,EAAE,iEAAiE;AACpF,YAAA,UAAU,EAAE,oDAAoD;AAChE,YAAA,QAAQ,EAAE;SACX;;IAGH,uBAAuB,GAAA;QACrB,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,EACvB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,sDAAsD,CAAC,CACtF;;IAGH,4BAA4B,GAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;;IAG3E,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAE/B,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC;YACH,QAAQ,EAAE,IAAI,CAAC,WAAW;AAC1B,YAAA,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE;YACnH,OAAO,EAAE,IAAI,CAAC;SACf;aACA,IAAI,CACH,SAAS,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAC5E,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;gBAC3B,MAAM,IAAI,KAAK,EAAE;;AAEnB,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,KAAK;AACjC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5E,IAAI,CAAC,cAAc,EAAE;SACtB,CAAC,EACF,KAAK,CAAC;AACJ,YAAA,KAAK,EAAE,CAAC,KAAY,EAAE,UAAU,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU;AAC/E,SAAA,CAAC,EACF,QAAQ,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;SACtB,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC;YACT,KAAK,EAAE,OAAO,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC7C,SAAA,CAAC;;AAGN,IAAA,QAAQ,CAAC,EAAU,EAAA;QACjB,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,IAAI,cAAc,CAAC,EAAE,EAAE;AACrB,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;AACvB,SAAA,CAAC,CACH;;IAGH,qBAAqB,GAAA;QACnB,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,mBAAmB,EAAE,UAAU,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,QAAQ,CAAC;;IAGvE,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B;;AAGF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAE9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAC5D,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EACvC,QAAQ,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AACjC,SAAC,CAAC,EACF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;;IAGK,UAAU,CAAC,eAAuB,EAAE,sBAA8B,EAAA;AACxE,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACzG,QAAA,MAAM,QAAQ,GAAkB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,sBAAsB,CAAC;AACtG,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;;;IAI7B,kBAAkB,CAAC,KAAY,EAAE,UAAkB,EAAA;AACzD,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QAC/B,MAAM,mBAAmB,GAAG,IAAI;QAChC,MAAM,UAAU,GAAG,CAAC;AAEpB,QAAA,IAAI,UAAU,GAAG,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;;AAGhC,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;;AAG/C,IAAA,wBAAwB,CAAC,MAAc,EAAA;QAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;;AAGnD,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACrC,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,mBAAmB,EAAE,CAAC,kBAAkB,EAAE,YAAoB,KAAI;AAC/G,YAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBAC7D,MAAM,KAAK,GAAG,SAAS;AACvB,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;oBAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACtC,oBAAA,MAAM,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;oBACpC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;;AAEjF,gBAAA,OAAO,IAAI;AACb,aAAC,CAAC;YAEF,OAAO,CAAA,eAAA,EAAkB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;AAChE,SAAC,CAAC;;AAGI,IAAA,cAAc,CAAC,MAAc,EAAA;QACnC,OAAO,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,YAAoB,KAAK,CAAK,EAAA,EAAA,YAAY,CAAC,IAAI,EAAE,CAAI,EAAA,CAAA,CAAC;;AAGtH,IAAA,eAAe,CAAC,MAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AAEvC,QAAA,MAAM,SAAS,GAAG,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAErH,QAAA,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AACtB,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;QAGf,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAO,IAAA,EAAA,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAE9D,QAAA,OAAO,IAAI,CACT,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACrB,YAAA,KAAK,EAAE;gBACL,KAAK;AACL,gBAAA,QAAQ,EAAE;AACX;SACF,CAAC,CACH,CAAC,IAAI,CACJ,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAa,CAAC;YACrE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;AACrC,gBAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,gBAAA,OAAO,EAAE;;AAEX,YAAA,OAAO,KAAK;AACd,SAAC,CAAC,EACF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;SACd,CAAC,CACH;;AAGK,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,MAAM,QAAQ,GAAa,EAAE;AAC7B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACtG,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,QAAQ;AAC9C,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;;wGAlQhE,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA8B,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,IAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAdxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA,eAAe,CAAC;AACd,gBAAA,aAAa,EAAE;AACb,oBAAA,OAAO,EAAE,cAAc;AACvB,oBAAA,QAAQ,EAAE;AACX;aACF;SACF,ECpEH,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,urNA8HA,8gND7EI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,+BAA+B,EAC/B,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,mLACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,oGACrB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,MAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAgBL,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA5BpC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,+BAA+B;wBAC/B,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,qBAAqB;wBACrB,aAAa;wBACb,gBAAgB;wBAChB;qBACD,EACU,SAAA,EAAA;AACT,wBAAA,eAAe,CAAC;AACd,4BAAA,aAAa,EAAE;AACb,gCAAA,OAAO,EAAE,cAAc;AACvB,gCAAA,QAAQ,EAAE;AACX;yBACF;qBACF,EACS,QAAA,EAAA,uBAAuB,EAGlB,aAAA,EAAA,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAA,QAAA,EAAA,urNAAA,EAAA,MAAA,EAAA,CAAA,u9MAAA,CAAA,EAAA;;;AEzE1C;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAqBU,gCAAgC,CAAA;AAIxB,IAAA,MAAA;AACA,IAAA,mBAAA;AACA,IAAA,oBAAA;AACyB,IAAA,IAAA;IAN5C,SAAS,GAAG,KAAK;AAEjB,IAAA,WAAA,CACmB,MAAsD,EACtD,mBAAwC,EACxC,oBAAiD,EACxB,IAAiB,EAAA;QAH1C,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACK,IAAI,CAAA,IAAA,GAAJ,IAAI;;IAGhD,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB;;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC;AACF,aAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI;AAC3B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,6DAA6D,CAAC;AAChG,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;aACvB;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,2DAA2D,CAAC;AAC/F,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAEzB,SAAA,CAAC;;AA5BK,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,2HAOjC,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAPd,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3C7C,u8BAuBA,EAAA,MAAA,EAAA,CAAA,4QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDaY,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,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,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnB,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,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,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAO5E,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAR5C,SAAS;8BACC,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,CAAC,YAC9E,gCAAgC,EAAA,aAAA,EAG3B,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAA,QAAA,EAAA,u8BAAA,EAAA,MAAA,EAAA,CAAA,4QAAA,CAAA,EAAA;;0BAS9C,MAAM;2BAAC,eAAe;;;AElD3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAoCU,8BAA8B,CAAA;AAKtB,IAAA,MAAA;AACA,IAAA,mBAAA;AACA,IAAA,oBAAA;AACA,IAAA,yBAAA;AACyB,IAAA,IAAA;AAR5C,IAAA,IAAI;IACJ,SAAS,GAAG,KAAK;IAEjB,WACmB,CAAA,MAAoD,EACpD,mBAAwC,EACxC,oBAAiD,EACjD,yBAAoD,EAC3B,IAAiB,EAAA;QAJ1C,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB;QACA,IAAI,CAAA,IAAA,GAAJ,IAAI;AAE9C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC;AACxB,YAAA,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE;AACxB,gBAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC;AACnD,gBAAA,eAAe,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC/F,gBAAA,QAAQ,EAAE;aACX,CAAC;AACF,YAAA,WAAW,EAAE,IAAI,WAAW,CAAC,EAAE;AAChC,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AACpB,YAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;AACxB,SAAA,CAAC;;IAGJ,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACvC;;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;AACjC,QAAA,MAAM,WAAW,GAAgB;YAC/B,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,WAAW,EAAE,SAAS,CAAC,WAAW;AAClC,YAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;AAChC,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;SAClB;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,EAAE;YACxF,IAAI,CAAC,aAAa,EAAE;;AAEtB,QAAA,IAAI,CAAC;aACF,eAAe,CAAC,WAAW;AAC3B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK;gBACT,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;aACvB;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,yDAAyD,CAAC;AAC7F,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAEzB,SAAA,CAAC;;IAGE,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,2DAA2D,CAAC;;AA1DrF,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,iKAS/B,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AATd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,kJC1D3C,g3EA6DA,EAAA,MAAA,EAAA,CAAA,0WAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnBI,kBAAkB,EAClB,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,iDACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,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,UAAA,EAAA,IAAA,EACb,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,qfACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,IAAA,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,UAAA,EAAA,IAAA,EACnB,kBAAkB,EAClB,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,UAAA,EAAA,IAAA,EAAA,cAAc,+XACd,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAQJ,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAlB1C,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,kBAAkB;wBAClB,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,eAAe;wBACf,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd;qBACD,EACS,QAAA,EAAA,8BAA8B,EAGzB,aAAA,EAAA,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAA,QAAA,EAAA,g3EAAA,EAAA,MAAA,EAAA,CAAA,0WAAA,CAAA,EAAA;;0BAW5C,MAAM;2BAAC,eAAe;;;AEnE3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MASU,0BAA0B,CAAA;AACpB,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAE3C,IAAA,mBAAmB,CAAC,WAAwB,EAAA;AAC1C,QAAA,IAAI,CAAC;aACF,IAAI,CAAC,8BAA8B,EAAE;AACpC,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,KAAK,EAAE;SACR;AACA,aAAA,WAAW;AACX,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAA,qBAAA,EAAwB,WAAW,CAAC,IAAI,CAAE,CAAA,CAAC,CAAC;;AAGtF,IAAA,wBAAwB,CAAC,WAAwB,EAAA;AAC/C,QAAA,IAAI,CAAC;aACF,IAAI,CAAC,gCAAgC,EAAE;AACtC,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,QAAQ,EAAE;SACX;AACA,aAAA,WAAW;AACX,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAA,qBAAA,EAAwB,WAAW,CAAC,IAAI,CAAE,CAAA,CAAC,CAAC;;AAG9E,IAAA,eAAe,CAAC,sBAA8B,EAAA;QACpD,IAAI,sBAAsB,EAAE;AAC1B,YAAA,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC,EAAE,OAAO,CAAc,mBAAmB,CAAC,CAAC,KAAK,EAAE;;;wGAzBvG,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA;;4FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC9BlC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAEI,MAAM,uBAAuB,GAAG;AACrC,IAAA,OAAO,EAAE;AACP,QAAA;AACE,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,KAAK,EAAE,yCAAyC;AAChD,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,aAAa,EAAE;AAChB,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,GAAG,EAAE,aAAa;AAClB,YAAA,KAAK,EAAE,gDAAgD;AACvD,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,aAAa,EAAE;AAChB;AACF;CACF;;AC7CD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAwCG,MAAO,4BAA6B,SAAQ,eAAe,CAAA;IAE/D,aAAa,GAAkB,EAAE;AAGjC,IAAA,uBAAuB,GAAG,IAAI,YAAY,EAAmD;IAEpF,cAAc,GAAG,cAAc;AAEvB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,kBAAkB,GAAG,IAAI,OAAO,EAAO;IACvC,wBAAwB,GAAG,MAAM;IACjC,0BAA0B,GAAG,QAAQ;IACrC,2BAA2B,GAAG,MAAM;IACpC,sBAAsB,GAAG,SAAS;AAClC,IAAA,WAAW,GAAG;AAC7B,QAAA;AACE,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,sDAAsD;YAC7D,GAAG,EAAE,IAAI,CAAC;AACX,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,KAAK,EAAE,mDAAmD;YAC1D,GAAG,EAAE,IAAI,CAAC;AACX,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,0DAA0D;YACjE,GAAG,EAAE,IAAI,CAAC;AACX,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,4DAA4D;YACnE,GAAG,EAAE,IAAI,CAAC;AACX;KACF;AAEgB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,WAAW,GAA4B,MAAM,CAAC,UAAU,CAAC;AAE1E,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,CAAC,EAAE,EAAE,uBAAuB,CAAC;;IAGpC,kBAAkB,GAAA;QAChB,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;;IAI1I,eAAe,GAAA;QACb,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAc,mBAAmB,CAAC;QAC5E,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAc,0BAA0B,CAAC,EAAE,KAAK,EAAE;;;AAIlG,IAAA,oBAAoB,CAAC,KAAoB,EAAA;QACvC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW;;AAGxC,IAAA,mBAAmB,CAAC,KAAsD,EAAA;AACxE,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG1C,iBAAiB,CAAC,SAAiB,EAAE,eAA4B,EAAA;QAC/D,QAAQ,SAAS;YACf,KAAK,IAAI,CAAC,wBAAwB;AAChC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC;gBAC/C;YACF,KAAK,IAAI,CAAC,0BAA0B;AAClC,gBAAA,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC;gBACjD;YACF,KAAK,IAAI,CAAC,2BAA2B;AACnC,gBAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;gBACrC;YACF,KAAK,IAAI,CAAC,sBAAsB;AAC9B,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;gBACnC;;;AAIN,IAAA,yBAAyB,CAAC,WAAwB,EAAA;AAChD,QAAA,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,WAAW,CAAC;;AAGlE,IAAA,2BAA2B,CAAC,WAAwB,EAAA;AAClD,QAAA,IAAI,CAAC,0BAA0B,CAAC,wBAAwB,CAAC,WAAW,CAAC;;AAGvE,IAAA,eAAe,CAAC,WAAwB,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,8DAA8D,CAAC;;AAGnG,IAAA,aAAa,CAAC,WAAwB,EAAA;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE;YAChC,WAAW,EAAE,EAAE,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC;AAC7D,SAAA,CAAC;;AAGJ,IAAA,eAAe,CAAC,KAAoB,EAAA;AAClC,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;YACtD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,IAAI,CAAC,kBAAkB;AAChC,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM,CAAC;AACd,aAAA;AACD,YAAA,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AACvB,SAAA,CAAC,CAAC;;AAGG,IAAA,UAAU,CAAC,IAAY,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AACtC,QAAA,OAAO,CAAG,EAAA,OAAO,CAAe,YAAA,EAAA,IAAI,EAAE;;wGAxH7B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9DzC,sjBAeA,EAAA,MAAA,EAAA,CAAA,4xBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDyCY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMX,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBARxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,WAC7B,CAAC,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,EAGvE,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,4BAA4B,EAAE,EAAA,QAAA,EAAA,sjBAAA,EAAA,MAAA,EAAA,CAAA,4xBAAA,CAAA,EAAA;wDAI7C,aAAa,EAAA,CAAA;sBADZ;gBAID,uBAAuB,EAAA,CAAA;sBADtB;gBAkDD,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,yBAAyB;;;AEnHzC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAkBG,MAAO,+BAAgC,SAAQ,aAAa,CAAA;AAChE,IAAA,oBAAoB,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAE1D,IAAA,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc;AAEzD,IAAA,cAAc,CAAC,KAAsD,EAAA;AACnE,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;;wGANrE,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,ECxC5C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qnCA8BA,EDKY,MAAA,EAAA,CAAA,wTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,EAAE,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,oGAAE,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAK9H,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,WAChC,CAAC,YAAY,EAAE,aAAa,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,wBAAwB,CAAC,EAG3H,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,qnCAAA,EAAA,MAAA,EAAA,CAAA,wTAAA,CAAA,EAAA;;;AEtCvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAeG,MAAO,oBAAqB,SAAQ,sBAAsB,CAAA;AAU3C,IAAA,WAAA;AACA,IAAA,iBAAA;AACA,IAAA,YAAA;IAXnB,UAAU,GAAG,IAAI,UAAU,CAAC;AAC1B,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,UAAU,EAAE;AACb,KAAA,CAAC;IACF,SAAS,GAAG,KAAK;IACjB,IAAI,GAAe,IAAI;AAEvB,IAAA,WAAA,CACmB,WAAmC,EACnC,iBAAoC,EACpC,YAA0B,EAAA;AAE3C,QAAA,KAAK,EAAE;QAJU,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAY,CAAA,YAAA,GAAZ,YAAY;;IAK/B,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EACrE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EACrE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EACpE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CACnE;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,IAAI,EAAE;;AAGpE,IAAA,gBAAgB,CAAC,UAAsB,EAAA;QACrC,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,UAAU,CAAC,QAAQ;AACrD,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;;AAG1B,IAAA,OAAO,CAAC,UAAsB,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAC/C,YAAA,IAAI,EAAE,CAAC,WAAuB,KAAI;AAChC,gBAAA,IAAI,CAAC,IAAI,GAAG,WAAW;gBACvB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU;AAC7C,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;aACvC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAEzB,SAAA,CAAC;;IAGI,UAAU,GAAA;QAChB,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;;wGAtDpB,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCjC,kgBAaA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDqBY,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAGrB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAEP,OAAA,EAAA,CAAC,sBAAsB,CAAC,EAAA,aAAA,EAClB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,kgBAAA,EAAA;;;AEnCvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAwBU,MAAA,cAAc,GAAqB;AAC9C,IAAA;AACE,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,SAAS,EAAE,uBAAuB;AAClC,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE;AACR;AACF;AACF;AACF,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,YAAY,EAAE,MAAM,OAAO,8BAA8B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe;AACzF;AACF;AACF;AACF;AACF;;AAGH,MAAM,gBAAgB,GAAG,CAAC,cAAsB,EAAE,cAAuB,GAAA,EAAE,KAAa;AACtF,IAAA;AACE,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE;oBACJ;AACD,iBAAA;AACD,gBAAA,YAAY,EAAE,MAAM,OAAO,8BAA8B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe;AACzF;AACF,SAAA;AACD,QAAA,GAAG;AACJ,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,yBAAyB;AAC/B,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE;oBACJ;AACD,iBAAA;AACD,gBAAA,YAAY,EAAE,MAAM,OAAO,8BAA8B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe;AACzF;AACF;AACF;CACF;AAEY,MAAA,qBAAqB,GAAY;AAC5C,IAAA;AACE,QAAA,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,CAAC,yBAAyB,CAAC;AACxC,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,CAAC,oBAAoB,CAAC;AACnC,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,cAAc;AACzB,wBAAA,IAAI,EAAE;AACJ,4BAAA,oBAAoB,EAAE,gBAAgB;AACtC,4BAAA,KAAK,EAAE,2BAA2B;AAClC,4BAAA,aAAa,EAAE;AAChB;AACF,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,QAAQ,EAAE;AACR,4BAAA;AACE,gCAAA,IAAI,EAAE,EAAE;AACR,gCAAA,SAAS,EAAE,gBAAgB;AAC3B,gCAAA,IAAI,EAAE;AACJ,oCAAA,cAAc,EAAE;AACjB;AACF,6BAAA;AACD,4BAAA;AACE,gCAAA,IAAI,EAAE,YAAY;AAClB,gCAAA,SAAS,EAAE,gBAAgB;AAC3B,gCAAA,IAAI,EAAE;AACJ,oCAAA,KAAK,EAAE,uCAAuC;AAC9C,oCAAA,cAAc,EAAE;AACjB;AACF;AACF;AACF,qBAAA;oBACD,GAAG,gBAAgB,CAAC,gBAAgB;AACrC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,0BAA0B;AAChC,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,cAAc;AACzB,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,2BAA2B;AAClC,4BAAA,oBAAoB,EAAE;AACvB;AACF,qBAAA;oBACD,GAAG,gBAAgB,CAAC,gBAAgB;AACrC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,kBAAkB;AAC7B,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,8CAA8C;AACrD,4BAAA,oBAAoB,EAAE;AACvB;AACF;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,cAAc;AACzB,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,8CAA8C;AACrD,4BAAA,oBAAoB,EAAE;AACvB;AACF,qBAAA;oBACD,GAAG,gBAAgB,CAAC,WAAW,EAAE;AAC/B,wBAAA,IAAI,EAAE;AACJ,4BAAA,cAAc,EAAE;AACjB;qBACF;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,UAAU,EAAE;AACb,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,SAAS,EAAE,0BAA0B;AACrC,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,oDAAoD;AAC3D,4BAAA,oBAAoB,EAAE;AACvB;AACF;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,8BAA8B;AACpC,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,cAAc;AACzB,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,oDAAoD;AAC3D,4BAAA,oBAAoB,EAAE;AACvB;AACF,qBAAA;oBACD,GAAG,gBAAgB,CAAC,WAAW;AAChC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,UAAU,EAAE;AACb,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,SAAS,EAAE,oBAAoB;AAC/B,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,+CAA+C;AACtD,4BAAA,oBAAoB,EAAE;AACvB;AACF;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE;AACJ,oBAAA,oBAAoB,EAAE;AACvB,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,kBAAkB;AAC7B,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,4BAA4B;AACnC,4BAAA,oBAAoB,EAAE;AACvB;AACF,qBAAA;oBACD,GAAG,gBAAgB,CAAC,WAAW;AAChC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,IAAI,EAAE;AACJ,oBAAA,oBAAoB,EAAE;AACvB,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,oBAAoB;AAC/B,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA;oBACD,GAAG,gBAAgB,CAAC,cAAc;AACnC;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,yBAAyB;AAChC,4BAAA,oBAAoB,EAAE;AACvB,yBAAA;AACD,wBAAA,SAAS,EAAE;AACZ,qBAAA;oBACD,GAAG,gBAAgB,CAAC,QAAQ;AAC7B,iBAAA;gBACD,gBAAgB,EAAE,CAAC,kBAAkB,CAAC;gBACtC,WAAW,EAAE,CAAC,kBAAkB;AACjC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,2BAA2B;AAClC,4BAAA,oBAAoB,EAAE;AACvB;AACF;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,sBAAsB;AACjC,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,yBAAyB;AAChC,4BAAA,oBAAoB,EAAE;AACvB;AACF,qBAAA;oBACD,GAAG,gBAAgB,CAAC,QAAQ;AAC7B;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE,+BAA+B;AAC1C,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,yBAAyB;AAChC,4BAAA,oBAAoB,EAAE;AACvB;AACF,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,QAAQ,EAAE;AACR,4BAAA;AACE,gCAAA,IAAI,EAAE,EAAE;AACR,gCAAA,IAAI,EAAE;AACJ,oCAAA,cAAc,EAAE;AACjB,iCAAA;AACD,gCAAA,YAAY,EAAE,MAAM,OAAO,8BAA8B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe;AACzF;AACF;AACF;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,YAAY,EAAE,MAAM,OAAO,oCAAoC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB;AACnG;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,qBAAqB;gBAC3B,aAAa,EAAE,CAAC,mBAAmB,CAAC;gBACpC,WAAW,EAAE,CAAC,kBAAkB,CAAC;AACjC,gBAAA,IAAI,EAAE;AACJ,oBAAA,MAAM,EAAE;AACT,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE;AACZ,qBAAA;oBACD,GAAG,gBAAgB,CAAC,qBAAqB;AAC1C;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,SAAS,EAAE;AACZ;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,SAAS,EAAE;AACZ;AACF,SAAA;QACD,gBAAgB,EAAE,CAAC,SAAS;AAC7B;;;ACxYH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAiBU,0BAA0B,CAAA;AAGjB,IAAA,KAAA;AAFpB,IAAA,wBAAwB;AAExB,IAAA,WAAA,CAAoB,KAAsB,EAAA;QAAtB,IAAK,CAAA,KAAA,GAAL,KAAK;QACvB,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC;;wGAJrG,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,ECvCvC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4FAAsF,EDkC1E,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,2LAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKzB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;8BACC,CAAC,YAAY,EAAE,YAAY,CAAC,YAC3B,yBAAyB,EAAA,aAAA,EAEpB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,4FAAA,EAAA;;;AErCvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAeU,mBAAmB,CAAA;AAMV,IAAA,EAAA;AAJpB,IAAA,OAAO;AAEP,IAAA,MAAM;AAEN,IAAA,WAAA,CAAoB,EAAqB,EAAA;QAArB,IAAE,CAAA,EAAA,GAAF,EAAE;;IAEtB,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;;IAGrC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;;wGAbd,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iDAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPpB,CAAqH,mHAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8TAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAFrH,oBAAoB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,YAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FASnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;8BACC,CAAC,oBAAoB,CAAC,EAAA,QAAA,EACrB,iBAAiB,EAAA,QAAA,EACjB,qHAAqH,EAEhH,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC/B,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,MAAA,EAAA,CAAA,8TAAA,CAAA,EAAA;sFAID,OAAO,EAAA,CAAA;sBADN;;;ACtCH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAgBU,iBAAiB,CAAA;AACpB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAGvD,IAAA,QAAQ;AAER,IAAA,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY;wGANjC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGjB,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzCxB,ogBAaA,EAAA,MAAA,EAAA,CAAA,0bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDmBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMvD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,EACzD,QAAA,EAAA,eAAe,EAGV,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,ogBAAA,EAAA,MAAA,EAAA,CAAA,0bAAA,CAAA,EAAA;8BAMrC,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW;;;AEzCxB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAiBU,sBAAsB,CAAA;AACzB,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACxC,IAAA,aAAa,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAElC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;AAClC,IAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;AACrC,IAAA,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW;IAC1C,OAAO,GAA4B,EAAE;AAGrC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;IAEjC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;AACF,aAAA,gBAAgB;AAChB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACxB,SAAC,CAAC;;wGApBK,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvCnC,47BA0BA,EDOY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,0BAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAM1D,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAC5D,oBAAoB,EAEf,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,QAAA,EAAA,47BAAA,EAAA;8BAcrC,YAAY,EAAA,CAAA;sBADX;;;AElDH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAcU,eAAe,CAAA;AAmBhB,IAAA,MAAA;AACA,IAAA,KAAA;AAnBD,IAAA,MAAM;AAEL,IAAA,aAAa,GAAG,IAAI,YAAY,EAAiB;IAG3D,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;;AAC7H,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAClB,gBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;AAC9B,gBAAA,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;AAC9D,aAAA,CAAC;;QAEJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;IAGtC,WACU,CAAA,MAAc,EACd,KAAsB,EAAA;QADtB,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAK,CAAA,KAAA,GAAL,KAAK;;AAEP,IAAA,qBAAqB,CAAC,GAAW,EAAA;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAE7D,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC;;AAGd,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ;AAE5C,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAA;YAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AACpC,YAAA,OAAO,GAAG;SACX,EAAE,EAAE,CAAC;;AAGA,IAAA,wBAAwB,CAAC,GAAW,EAAA;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW;;wGAvCnC,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;;AAEhB,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE;AACX,iBAAA;mGAEU,MAAM,EAAA,CAAA;sBAAd;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBAGD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO;;;ACzCvB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAyBU,mBAAmB,CAAA;AASpB,IAAA,MAAA;AACA,IAAA,OAAA;AACA,IAAA,QAAA;AACY,IAAA,MAAA;AAXb,IAAA,aAAa;AAEtB,IAAA,KAAK;IACL,YAAY,GAAG,KAAK;AAEH,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CACU,MAAc,EACd,OAAmB,EACnB,QAAmB,EACP,MAAwB,EAAA;QAHpC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACI,IAAM,CAAA,MAAA,GAAN,MAAM;;IAG5B,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,EACjD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACtC,SAAC,CAAC;;AAGE,IAAA,MAAM,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;;QAG3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;AAC3B,SAAC,CAAC;;IAGI,MAAM,CAAC,SAAiB,EAAE,SAAiB,EAAA;AACjD,QAAA,IAAI,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;;aACjE;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;;;IAI7E,kBAAkB,GAAA;QAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAGtB,IAAA,UAAU,CAAC,IAAI,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK;;wGAtD/C,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA6B,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,6IAEb,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAFrB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE;AACX,iBAAA;;0BAaI;yCAXM,aAAa,EAAA,CAAA;sBAArB;gBAED,KAAK,EAAA,CAAA;sBADJ,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;;ACjDzD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAmBU,mBAAmB,CAAA;AAOV,IAAA,EAAA;AALpB,IAAA,IAAI;AAGJ,IAAA,aAAa,GAAG,IAAI,YAAY,EAAiB;AAEjD,IAAA,WAAA,CAAoB,EAAqB,EAAA;QAArB,IAAE,CAAA,EAAA,GAAF,EAAE;;IAEtB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;;IAGzB,SAAS,CAAC,MAAc,EAAE,GAAkB,EAAA;QAC1C,OAAO,GAAG,CAAC,EAAE;;wGAdJ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,ECzChC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,84EA4DA,EDzBY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,0HAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMpH,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;8BACC,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,CAAC,EAAA,QAAA,EACtH,iBAAiB,EAAA,aAAA,EACZ,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAE/B,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAA,QAAA,EAAA,84EAAA,EAAA;sFAIlC,IAAI,EAAA,CAAA;sBADH,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAIzB,aAAa,EAAA,CAAA;sBADZ;;;AE7CH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAyBU,gBAAgB,CAAA;AAYjB,IAAA,KAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,wBAAA;IAbV,IAAI,GAGA,EAAE;IAEN,MAAM,GAA0B,EAAE;AAEjB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CACU,KAAsB,EACtB,UAA+B,EAC/B,UAAsB,EACtB,wBAAkD,EAAA;QAHlD,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;;IAGlC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,eAAe;AACtB,aAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACnF,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAChF,SAAC,CAAC;QAEJ,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/G,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AACzG,QAAA,IAAI,CAAC;AACF,aAAA,oBAAoB;AACpB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;AAClC,YAAA,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC;AACjD,SAAC,CAAC;;IAGN,cAAc,CAAC,CAAS,EAAE,GAAmB,EAAA;QAC3C,OAAO,GAAG,CAAC,EAAE;;IAGf,aAAa,CAAC,CAAS,EAAE,GAAkB,EAAA;QACzC,OAAO,GAAG,CAAC,EAAE;;IAGf,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,EAAE;;IAGb,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;;IAG1H,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QAC7B,IAAI,CAAC,aAAa,EAAE;;wGAvDX,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EC/C7B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+wBAoBA,EDoBY,MAAA,EAAA,CAAA,6oGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,IAAA,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,sBAAsB,EAAE,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,qFAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOjH,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,SAAS;8BACC,CAAC,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,aAAa,CAAC,EACnH,QAAA,EAAA,aAAa,EAGR,aAAA,EAAA,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,+wBAAA,EAAA,MAAA,EAAA,CAAA,6oGAAA,CAAA,EAAA;oLAI9B,IAAI,EAAA,CAAA;sBADH;;;AEhDH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAkBU,iBAAiB,CAAA;AACpB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAEvD,IAAA,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY;AAG5C,IAAA,SAAS;AAGT,IAAA,IAAI;AAGJ,IAAA,IAAI;AAGJ,IAAA,gBAAgB;IAEhB,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;;;IAIrD,eAAe,GAAA;AACb,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,KAAK,SAAS,CAAC;AAEvI,QAAA,MAAM,kBAAkB,GAAG,IAAI,SAAS,EAAe;AACvD,QAAA,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,kBAAkB;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;;wGA7BrB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAWjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,OAAO,EAGJ,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,wBAAwB,gDCtDxC,6bAcA,EAAA,MAAA,EAAA,CAAA,ySAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDmBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,0mBAAE,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOpF,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;8BACC,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,wBAAwB,CAAC,YACtF,eAAe,EAAA,aAAA,EAGV,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,eAAe,EAAE,EAAA,QAAA,EAAA,6bAAA,EAAA,MAAA,EAAA,CAAA,ySAAA,CAAA,EAAA;8BAQhC,SAAS,EAAA,CAAA;sBADR;gBAID,IAAI,EAAA,CAAA;sBADH;gBAID,IAAI,EAAA,CAAA;sBADH,SAAS;uBAAC,OAAO;gBAIlB,gBAAgB,EAAA,CAAA;sBADf,YAAY;uBAAC,wBAAwB;;;AEtDxC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAyBU,yBAAyB,CAAA;AAoC1B,IAAA,KAAA;AACA,IAAA,eAAA;AACA,IAAA,MAAA;AACA,IAAA,mBAAA;AAtCF,IAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAE5B,eAAe,GAAG,8BAA8B;IAChD,gBAAgB,GAAG,SAAS;IAE5B,yBAAyB,GAAG,2CAA2C;IACvE,0BAA0B,GAAG,iBAAiB;IAE9C,qBAAqB,GAAG,qCAAqC;IAC7D,sBAAsB,GAAG,WAAW;AAEpC,IAAA,SAAS,GAA2B;AACnD,QAAA,GAAG,EAAE,OAAO;AACZ,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,GAAG,EAAE;KACN;AAEO,IAAA,IAAI;AAGZ,IAAA,OAAO;AAEP,IAAA,KAAK,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AACvC,IAAA,MAAM,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AACxC,IAAA,YAAY,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAC9C,IAAA,QAAQ,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;IAC1C,YAAY,GAAG,EAAE;IACjB,aAAa,GAAG,EAAE;IAClB,mBAAmB,GAAG,EAAE;IACxB,eAAe,GAAG,EAAE;IACpB,MAAM,GAAG,KAAK;AAEG,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,CACU,KAAiB,EACjB,eAAgC,EAChC,MAAc,EACd,mBAAwC,EAAA;QAHxC,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;;IAG7B,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,EAAE;QAEnB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC5F,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;YAC5B,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI;gBAE1B,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;AACxB,oBAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;oBACtB,KAAK,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;oBAEzC,IAAI,CAAC,YAAY,EAAE;;;AAGzB,SAAC,CAAC;;IAGI,YAAY,GAAA;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AAEpC,QAAA,MAAM,UAAU,GAA2B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;QACnF,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;QAC7C,IAAI,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;QAC1C,IAAI,WAAW,GAAG,UAAU,GAAG,gBAAgB,CAAC,IAAI,EAAE;QACtD,IAAI,OAAO,GAAG,EAAE;AAEhB,QAAA,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS,KAAI;AAChC,YAAA,QAAQ,SAAS,CAAC,KAAK;AACrB,gBAAA,KAAK,SAAS;AACZ,oBAAA,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC5B;AACF,gBAAA,KAAK,UAAU;AACb,oBAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC7B;AACF,gBAAA,KAAK,gBAAgB;AACnB,oBAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACnC;AACF,gBAAA,KAAK,YAAY;oBACf,OAAO,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK;oBAC1C;AACF,gBAAA;oBACE;;AAEN,SAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAEtD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;QAE/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;QAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAEtD,QAAA,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAM,GAAA,EAAA,KAAK,CAAI,EAAA,CAAA,CAAC;AAC5D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;;aAC7C;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;;;AAIxB,IAAA,WAAW,CAAC,KAAY,EAAA;QACtB,KAAK,CAAC,eAAe,EAAE;QAEvB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;YAC/H,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;;;AAI9F,IAAA,QAAQ,CAAC,KAAY,EAAA;QACnB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG9C,IAAA,iBAAiB,CAAC,KAAa,EAAA;QACrC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;;AAEX,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;;AAGvF,IAAA,oBAAoB,CAAC,KAAgC,EAAA;QAC3D,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;;QAGX,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAE7E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAE/I,QAAA,OAAO,OAAO;;wGA7IL,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/CtC,2zCAyCA,EDFY,MAAA,EAAA,CAAA,2+BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,4LAAE,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,4BAA4B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAQjF,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;8BACC,CAAC,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,4BAA4B,CAAC,EAAA,QAAA,EACnF,wBAAwB,EAAA,aAAA,EAGnB,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAA,QAAA,EAAA,2zCAAA,EAAA,MAAA,EAAA,CAAA,2+BAAA,CAAA,EAAA;qKAuBzC,OAAO,EAAA,CAAA;sBADN,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;AEnE3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA0BU,qBAAqB,CAAA;AA6BtB,IAAA,KAAA;AACA,IAAA,mBAAA;AACA,IAAA,eAAA;AACA,IAAA,YAAA;AACA,IAAA,gBAAA;AACA,IAAA,EAAA;AAhCV,IAAA,IAAI;AAEI,IAAA,kBAAkB;IAClB,OAAO,GAAY,EAAE;IACrB,SAAS,GAAG,IAAI;IAChB,kBAAkB,GAA8B,EAAE;AAClD,IAAA,aAAa;AAErB,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;;AAGrB,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;AAGvB,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;;AAGhC,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;;AAGV,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEhD,WACU,CAAA,KAAsB,EACtB,mBAAwC,EACxC,eAAgC,EAChC,YAA0B,EAC1B,gBAAkC,EAClC,EAAqB,EAAA;QALrB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAE,CAAA,EAAA,GAAF,EAAE;;IAGZ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,eAAe;AACtB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACrC,SAAC,CAAC;AACJ,QAAA,QAAQ,CAAC;YACP,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,CACxC,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,MAAM,UAAU,CAAC,mDAAmD,CAAC,CAAC,CAClF;YACD,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,UAAU,CAAC,2DAA2D,CAAC,CAAC;AACxI,SAAA,CAAC,CAAC,SAAS,CACV,CAAC,MAAM,KAAI;YACT,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB;AAC9D,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM;AAE5B,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AAEvB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACtB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAI;oBAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,EAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA,CAAE;AAC3D,oBAAA,OAAO,QAAQ;iBAChB,EAAE,EAAE,CAAC;;SAET,EACD,CAAC,KAAa,KAAK,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC5F;;IAGH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACpC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACrF,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC;;AAE7C,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO;YAC1B;;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;AAGzB,IAAA,gBAAgB,CAAC,MAA8B,EAAA;AAC7C,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAClB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;;wGAvFlB,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EChDlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,w7CAoCA,EDKY,MAAA,EAAA,CAAA,i6CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,mQAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,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,EAAA,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,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EAAE,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,oGAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAO1G,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;8BACC,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAC5G,mBAAmB,EAAA,aAAA,EAGd,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAA,QAAA,EAAA,w7CAAA,EAAA,MAAA,EAAA,CAAA,i6CAAA,CAAA,EAAA;wOAIpC,IAAI,EAAA,CAAA;sBADH;;;AEjDH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAiBU,0BAA0B,CAAA;AACrC,IAAA,oBAAoB,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAC1D,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,IAAI;IAEI,gBAAgB,GAAG,CAAC;AACpB,IAAA,aAAa;IAEJ,gBAAgB,GAAG,uBAAuB;AAC1C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,qBAAqB,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAEvE,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAChC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,KAAI;YAC7G,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;AACnD,YAAA,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,MAAM;AAC5C,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AACpC,SAAC,CAAC;AACF,QAAA,IAAI,CAAC;AACF,aAAA,MAAM,CAAC,oBAAoB,CAAC,MAAM;AAClC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;aACnD,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,4CAA4C,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;;AAEtI,SAAC,CAAC;;AAGN,IAAA,eAAe,CAAC,eAA8B,EAAA;QAC5C,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,KAAK,eAAe,CAAC,KAAK,CAAC;AACjH,QAAA,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,GAAG,mBAAmB;;AAGnE,IAAA,mBAAmB,CAAC,QAAuB,EAAA;QACjD,MAAM,cAAc,GAAG;AACpB,aAAA,GAAG,CAAC,CAAC,KAAK,MAAM;AACf,YAAA,EAAE,EAAE,QAAQ,GAAG,KAAK,CAAC,IAAI;AACzB,YAAA,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,WAAW,EAAE,KAAK,CAAC,IAAI;AACvB,YAAA,KAAK,EAAE,CAAA,SAAA,EAAY,KAAK,CAAC,UAAU,CAAE,CAAA;AACrC,YAAA,GAAG,EAAE,CAAA,SAAA,EAAY,KAAK,CAAC,UAAU,CAAE;AACpC,SAAA,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,4CAA4C,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxH,cAAc,CAAC,IAAI,CAAC;YAClB,EAAE,EAAE,IAAI,CAAC,gBAAgB;AACzB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,oDAAoD;AAC3D,YAAA,WAAW,EAAE,oDAAoD;AACjE,YAAA,KAAK,EAAE,gBAAgB;AACvB,YAAA,GAAG,EAAE;AACN,SAAA,CAAC;QACF,OAAO;AACL,YAAA,IAAI,EAAE,EAAE;YACR,KAAK;AACL,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,EAAE,EAAE;SACL;;wGA5DQ,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvCvC,oGAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDgCY,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAIlB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,WAC1B,CAAC,mBAAmB,CAAC,EAEf,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,oGAAA,EAAA;;;AErCvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA0JU,6BAA6B,CAAA;wGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAA7B,6BAA6B,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,aAAA,EAtGL,cAAc,EAAE,YAAY,CAAA,EAAA,CAAA;AAsGpD,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,EArG7B,SAAA,EAAA;YACT,aAAa,CAAC,cAAc,CAAC;AAC7B,YAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC/D,YAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,wBAAwB,EAAE;AAC3E,YAAA,oBAAoB,EAAE;AACtB,YAAA,2BAA2B,EAAE;AAC7B,YAAA,2BAA2B,EAAE;AAC7B,YAAA,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC;AACpC,YAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,EAAE;AAChD,YAAA;AACE,gBAAA,OAAO,EAAE,0BAA0B;AACnC,gBAAA,QAAQ,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI;AACxE,aAAA;AACD,YAAA,iBAAiB,CAAC;AAChB,gBAAA,UAAU,EAAE;AACV,oBAAA,UAAU,EAAE,YAAY;AACxB,oBAAA,gCAAgC,EAAE;AACnC,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,iBAAiB,EAAE,oBAAoB;AACvC,oBAAA,oBAAoB,EAAE,gBAAgB;AACtC,oBAAA,mBAAmB,EAAE,0BAA0B;AAC/C,oBAAA,8BAA8B,EAAE,oBAAoB;AACpD,oBAAA,sCAAsC,EAAE,2BAA2B;AACnE,oBAAA,8BAA8B,EAAE,oBAAoB;AACpD,oBAAA,8BAA8B,EAAE,oBAAoB;AACpD,oBAAA,wBAAwB,EAAE,gBAAgB;AAC1C,oBAAA,8BAA8B,EAAE,yBAAyB;AACzD,oBAAA,4BAA4B,EAAE,uBAAuB;AACrD,oBAAA,mCAAmC,EAAE,8BAA8B;AACnE,oBAAA,+BAA+B,EAAE,gCAAgC;AACjE,oBAAA,8BAA8B,EAAE,qBAAqB;AACrD,oBAAA,4BAA4B,EAAE,8BAA8B;AAC5D,oBAAA,2BAA2B,EAAE,4BAA4B;AACzD,oBAAA,kCAAkC,EAAE,qBAAqB;AACzD,oBAAA,kBAAkB,EAAE,yBAAyB;AAC7C,oBAAA,yBAAyB,EAAE,0BAA0B;AACrD,oBAAA,yBAAyB,EAAE,0BAA0B;AACrD,oBAAA,2BAA2B,EAAE,4BAA4B;AACzD,oBAAA,0BAA0B,EAAE,2BAA2B;AACvD,oBAAA,sBAAsB,EAAE,qBAAqB;AAC7C,oBAAA,kBAAkB,EAAE,mBAAmB;AACvC,oBAAA,+BAA+B,EAAE,0BAA0B;AAC3D,oBAAA,sBAAsB,EAAE,iBAAiB;AACzC,oBAAA,oBAAoB,EAAE,uBAAuB;AAC7C,oBAAA,YAAY,EAAE,eAAe;AAC7B,oBAAA,UAAU,EAAE,iBAAiB;AAC7B,oBAAA,yBAAyB,EAAE,4BAA4B;AACvD,oBAAA,eAAe,EAAE,iBAAiB;AAClC,oBAAA,yBAAyB,EAAE,yBAAyB;AACpD,oBAAA,mBAAmB,EAAE;AACtB,iBAAA;AACD,gBAAA,UAAU,EAAE;oBACV,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;oBAChD,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;oBAC9C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;oBAC1C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;oBAC1C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;oBACxC,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;oBACxC,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;oBAC1D,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;oBAC9C,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;oBAEpD,yBAAyB,EAAE,KAAK,CAAC,kBAAkB;oBACnD,2BAA2B,EAAE,KAAK,CAAC,oBAAoB;oBACvD,wBAAwB,EAAE,KAAK,CAAC,YAAY;oBAC5C,8BAA8B,EAAE,KAAK,CAAC,cAAc;oBACpD,iCAAiC,EAAE,KAAK,CAAC,iBAAiB;oBAC1D,+BAA+B,EAAE,KAAK,CAAC,qBAAqB;oBAC5D,oBAAoB,EAAE,KAAK,CAAC,eAAe;oBAC3C,6BAA6B,EAAE,KAAK,CAAC,cAAc;oBACnD,qCAAqC,EAAE,KAAK,CAAC,gBAAgB;oBAC7D,uBAAuB,EAAE,KAAK,CAAC,kBAAkB;oBACjD,8BAA8B,EAAE,KAAK,CAAC,cAAc;oBACpD,sBAAsB,EAAE,KAAK,CAAC,iBAAiB;oBAC/C,gCAAgC,EAAE,KAAK,CAAC,uBAAuB;oBAC/D,iDAAiD,EAAE,KAAK,CAAC,kCAAkC;oBAE3F,iCAAiC,EAAE,KAAK,CAAC,eAAe;oBACxD,2BAA2B,EAAE,KAAK,CAAC,UAAU;oBAC7C,4BAA4B,EAAE,KAAK,CAAC,WAAW;oBAC/C,8BAA8B,EAAE,KAAK,CAAC,aAAa;oBACnD,4BAA4B,EAAE,KAAK,CAAC,WAAW;oBAC/C,8BAA8B,EAAE,KAAK,CAAC,aAAa;oBACnD,gCAAgC,EAAE,KAAK,CAAC,eAAe;oBACvD,0BAA0B,EAAE,KAAK,CAAC,SAAS;oBAC3C,0BAA0B,EAAE,KAAK,CAAC,SAAS;oBAE3C,mBAAmB,EAAE,KAAK,CAAC,aAAa;oBACxC,6BAA6B,EAAE,KAAK,CAAC,uBAAuB;oBAC5D,oBAAoB,EAAE,KAAK,CAAC,cAAc;oBAC1C,0BAA0B,EAAE,KAAK,CAAC,oBAAoB;oBACtD,kBAAkB,EAAE,KAAK,CAAC;AAC3B;aACF,CAAC;YACF;AACD,SAAA,EAAA,OAAA,EAAA,CApGS,aAAa,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,CAAA,EAAA,CAAA;;4FAsGpD,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAvGzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC;AAChE,oBAAA,SAAS,EAAE;wBACT,aAAa,CAAC,cAAc,CAAC;AAC7B,wBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC/D,wBAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,wBAAwB,EAAE;AAC3E,wBAAA,oBAAoB,EAAE;AACtB,wBAAA,2BAA2B,EAAE;AAC7B,wBAAA,2BAA2B,EAAE;AAC7B,wBAAA,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC;AACpC,wBAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,EAAE;AAChD,wBAAA;AACE,4BAAA,OAAO,EAAE,0BAA0B;AACnC,4BAAA,QAAQ,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI;AACxE,yBAAA;AACD,wBAAA,iBAAiB,CAAC;AAChB,4BAAA,UAAU,EAAE;AACV,gCAAA,UAAU,EAAE,YAAY;AACxB,gCAAA,gCAAgC,EAAE;AACnC,6BAAA;AACD,4BAAA,UAAU,EAAE;AACV,gCAAA,iBAAiB,EAAE,oBAAoB;AACvC,gCAAA,oBAAoB,EAAE,gBAAgB;AACtC,gCAAA,mBAAmB,EAAE,0BAA0B;AAC/C,gCAAA,8BAA8B,EAAE,oBAAoB;AACpD,gCAAA,sCAAsC,EAAE,2BAA2B;AACnE,gCAAA,8BAA8B,EAAE,oBAAoB;AACpD,gCAAA,8BAA8B,EAAE,oBAAoB;AACpD,gCAAA,wBAAwB,EAAE,gBAAgB;AAC1C,gCAAA,8BAA8B,EAAE,yBAAyB;AACzD,gCAAA,4BAA4B,EAAE,uBAAuB;AACrD,gCAAA,mCAAmC,EAAE,8BAA8B;AACnE,gCAAA,+BAA+B,EAAE,gCAAgC;AACjE,gCAAA,8BAA8B,EAAE,qBAAqB;AACrD,gCAAA,4BAA4B,EAAE,8BAA8B;AAC5D,gCAAA,2BAA2B,EAAE,4BAA4B;AACzD,gCAAA,kCAAkC,EAAE,qBAAqB;AACzD,gCAAA,kBAAkB,EAAE,yBAAyB;AAC7C,gCAAA,yBAAyB,EAAE,0BAA0B;AACrD,gCAAA,yBAAyB,EAAE,0BAA0B;AACrD,gCAAA,2BAA2B,EAAE,4BAA4B;AACzD,gCAAA,0BAA0B,EAAE,2BAA2B;AACvD,gCAAA,sBAAsB,EAAE,qBAAqB;AAC7C,gCAAA,kBAAkB,EAAE,mBAAmB;AACvC,gCAAA,+BAA+B,EAAE,0BAA0B;AAC3D,gCAAA,sBAAsB,EAAE,iBAAiB;AACzC,gCAAA,oBAAoB,EAAE,uBAAuB;AAC7C,gCAAA,YAAY,EAAE,eAAe;AAC7B,gCAAA,UAAU,EAAE,iBAAiB;AAC7B,gCAAA,yBAAyB,EAAE,4BAA4B;AACvD,gCAAA,eAAe,EAAE,iBAAiB;AAClC,gCAAA,yBAAyB,EAAE,yBAAyB;AACpD,gCAAA,mBAAmB,EAAE;AACtB,6BAAA;AACD,4BAAA,UAAU,EAAE;gCACV,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;gCAChD,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;gCAC9C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gCAC1C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gCAC1C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gCACxC,cAAc,EAAE,KAAK,CAAC,cAAc;gCACpC,aAAa,EAAE,KAAK,CAAC,aAAa;gCAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gCACxC,YAAY,EAAE,KAAK,CAAC,YAAY;gCAChC,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;gCAC1D,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;gCAC9C,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;gCAEpD,yBAAyB,EAAE,KAAK,CAAC,kBAAkB;gCACnD,2BAA2B,EAAE,KAAK,CAAC,oBAAoB;gCACvD,wBAAwB,EAAE,KAAK,CAAC,YAAY;gCAC5C,8BAA8B,EAAE,KAAK,CAAC,cAAc;gCACpD,iCAAiC,EAAE,KAAK,CAAC,iBAAiB;gCAC1D,+BAA+B,EAAE,KAAK,CAAC,qBAAqB;gCAC5D,oBAAoB,EAAE,KAAK,CAAC,eAAe;gCAC3C,6BAA6B,EAAE,KAAK,CAAC,cAAc;gCACnD,qCAAqC,EAAE,KAAK,CAAC,gBAAgB;gCAC7D,uBAAuB,EAAE,KAAK,CAAC,kBAAkB;gCACjD,8BAA8B,EAAE,KAAK,CAAC,cAAc;gCACpD,sBAAsB,EAAE,KAAK,CAAC,iBAAiB;gCAC/C,gCAAgC,EAAE,KAAK,CAAC,uBAAuB;gCAC/D,iDAAiD,EAAE,KAAK,CAAC,kCAAkC;gCAE3F,iCAAiC,EAAE,KAAK,CAAC,eAAe;gCACxD,2BAA2B,EAAE,KAAK,CAAC,UAAU;gCAC7C,4BAA4B,EAAE,KAAK,CAAC,WAAW;gCAC/C,8BAA8B,EAAE,KAAK,CAAC,aAAa;gCACnD,4BAA4B,EAAE,KAAK,CAAC,WAAW;gCAC/C,8BAA8B,EAAE,KAAK,CAAC,aAAa;gCACnD,gCAAgC,EAAE,KAAK,CAAC,eAAe;gCACvD,0BAA0B,EAAE,KAAK,CAAC,SAAS;gCAC3C,0BAA0B,EAAE,KAAK,CAAC,SAAS;gCAE3C,mBAAmB,EAAE,KAAK,CAAC,aAAa;gCACxC,6BAA6B,EAAE,KAAK,CAAC,uBAAuB;gCAC5D,oBAAoB,EAAE,KAAK,CAAC,cAAc;gCAC1C,0BAA0B,EAAE,KAAK,CAAC,oBAAoB;gCACtD,kBAAkB,EAAE,KAAK,CAAC;AAC3B;yBACF,CAAC;wBACF;AACD;AACF,iBAAA;;;AC/KD;;;;;;;;;;;;;;;;;;;;;;AAsBG;;ACtBH;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAEH;;AAEG;;AC1BH;;AAEG;;;;"}