{"version":3,"sources":["src/app/app.component.ts","node_modules/@angular/material/fesm2022/sidenav.mjs","src/app/shared/animations/animations.ts","src/app/services/sidenav/sidenav.service.ts","src/app/shared/ui/layouts/admin/components/sidenav/sidenav.component.ts","src/app/shared/ui/layouts/admin/components/sidenav/sidenav.component.html","src/app/shared/ui/user-menu-button/user-menu-button.component.ts","src/app/shared/ui/user-menu-button/user-menu-button.component.html","src/app/shared/ui/layouts/admin/components/toolbar/toolbar.component.ts","src/app/shared/ui/layouts/admin/components/toolbar/toolbar.component.html","src/app/shared/ui/layouts/admin/admin-layout.component.ts","src/app/shared/ui/layouts/admin/admin-layout.component.html","src/app/shared/ui/layouts/login/login-layout.component.ts","src/app/routing/routes.guard.ts","src/app/shared/ui/layouts/student/components/student-toolbar/student-toolbar.component.ts","src/app/shared/ui/layouts/student/components/student-toolbar/student-toolbar.component.html","src/app/shared/ui/layouts/student/student-layout.component.ts","src/app/routing/routing.module.ts","node_modules/@angular/platform-browser/fesm2022/animations/async.mjs","src/app/routing/interceptor.ts","src/app/app.config.ts","src/main.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\r\nimport { MatIconRegistry } from '@angular/material/icon';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { RouterOutlet } from '@angular/router';\r\nimport { ThemeService } from './services/theme/theme.service';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { AppService } from './services/app/app.service';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n standalone: true,\r\n imports: [RouterOutlet],\r\n template: `\r\n \r\n `,\r\n})\r\nexport class AppComponent {\r\n private themeService = inject(ThemeService);\r\n private appService = inject(AppService);\r\n\r\n \r\n AllSchoolYearsSub = toSignal(this.appService.AllSchoolYears$, { initialValue: [] });\r\n CurrentSchoolYearSub = toSignal(this.appService.CurrentSchoolYear$, { initialValue: null });\r\n\r\n constructor(\r\n private iconRegistry: MatIconRegistry,\r\n private sanitizer: DomSanitizer\r\n ) {\r\n this.iconRegistry.addSvgIcon(\r\n 'custompdf',\r\n this.sanitizer.bypassSecurityTrustResourceUrl('file-pdf-box.svg')\r\n );\r\n\r\n this.themeService.loadTheme();\r\n }\r\n}\r\n","import * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, EventEmitter, inject, Injector, ChangeDetectorRef, afterNextRender, Optional, Input, Output, ViewChild, QueryList, AfterRenderPhase, ANIMATION_MODULE_TYPE, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport * as i2 from '@angular/cdk/a11y';\nimport * as i4 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i3 from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, mapTo, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nconst _c0 = [\"*\"];\nconst _c1 = [\"content\"];\nconst _c2 = [[[\"mat-drawer\"]], [[\"mat-drawer-content\"]], \"*\"];\nconst _c3 = [\"mat-drawer\", \"mat-drawer-content\", \"*\"];\nfunction MatDrawerContainer_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1);\n i0.ɵɵlistener(\"click\", function MatDrawerContainer_Conditional_0_Template_div_click_0_listener() {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._onBackdropClicked());\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r1._isShowingBackdrop());\n }\n}\nfunction MatDrawerContainer_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"mat-drawer-content\");\n i0.ɵɵprojection(1, 2);\n i0.ɵɵelementEnd();\n }\n}\nconst _c4 = [[[\"mat-sidenav\"]], [[\"mat-sidenav-content\"]], \"*\"];\nconst _c5 = [\"mat-sidenav\", \"mat-sidenav-content\", \"*\"];\nfunction MatSidenavContainer_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1);\n i0.ɵɵlistener(\"click\", function MatSidenavContainer_Conditional_0_Template_div_click_0_listener() {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._onBackdropClicked());\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r1._isShowingBackdrop());\n }\n}\nfunction MatSidenavContainer_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"mat-sidenav-content\");\n i0.ɵɵprojection(1, 2);\n i0.ɵɵelementEnd();\n }\n}\nconst _c6 = \".mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-app-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-app-background));box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color)}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-app-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow);background-color:var(--mat-sidenav-container-background-color, var(--mat-app-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));width:var(--mat-sidenav-container-width);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\";\nconst matDrawerAnimations = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: /*#__PURE__*/trigger('transform', [\n /*#__PURE__*/\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', /*#__PURE__*/style({\n 'transform': 'none',\n 'visibility': 'visible'\n })), /*#__PURE__*/state('void', /*#__PURE__*/style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden'\n })), /*#__PURE__*/transition('void => open-instant', /*#__PURE__*/animate('0ms')), /*#__PURE__*/transition('void <=> open, open-instant => void', /*#__PURE__*/animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))])\n};\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nfunction throwMatDuplicatedDrawerError(position) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/** Configures whether drawers should use auto sizing by default. */\nconst MAT_DRAWER_DEFAULT_AUTOSIZE = /*#__PURE__*/new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY\n});\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nconst MAT_DRAWER_CONTAINER = /*#__PURE__*/new InjectionToken('MAT_DRAWER_CONTAINER');\n/** @docs-private */\nfunction MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {\n return false;\n}\nlet MatDrawerContent = /*#__PURE__*/(() => {\n class MatDrawerContent extends CdkScrollable {\n constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {\n super(elementRef, scrollDispatcher, ngZone);\n this._changeDetectorRef = _changeDetectorRef;\n this._container = _container;\n }\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n static {\n this.ɵfac = function MatDrawerContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDrawerContent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(forwardRef(() => MatDrawerContainer)), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ScrollDispatcher), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDrawerContent,\n selectors: [[\"mat-drawer-content\"]],\n hostAttrs: [1, \"mat-drawer-content\"],\n hostVars: 4,\n hostBindings: function MatDrawerContent_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n }\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkScrollable,\n useExisting: MatDrawerContent\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatDrawerContent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDrawerContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\nlet MatDrawer = /*#__PURE__*/(() => {\n class MatDrawer {\n /** The side that the drawer is attached to. */\n get position() {\n return this._position;\n }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value !== this._position) {\n // Static inputs in Ivy are set before the element is in the DOM.\n if (this._isAttached) {\n this._updatePositionInParent(value);\n }\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() {\n return this._mode;\n }\n set mode(value) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n get disableClose() {\n return this._disableClose;\n }\n set disableClose(value) {\n this._disableClose = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or AutoFocusTarget\n * instead.\n */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we don't allow autoFocus to be set to `first-tabbable` in `side` mode,\n // because we don't know how the sidenav is being used, but in some cases it still makes\n // sense to do it. The consumer can explicitly set `autoFocus`.\n if (value == null) {\n if (this.mode === 'side') {\n return 'dialog';\n } else {\n return 'first-tabbable';\n }\n }\n return value;\n }\n set autoFocus(value) {\n if (value === 'true' || value === 'false' || value == null) {\n value = coerceBooleanProperty(value);\n }\n this._autoFocus = value;\n }\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n get opened() {\n return this._opened;\n }\n set opened(value) {\n this.toggle(coerceBooleanProperty(value));\n }\n constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _interactivityChecker, _doc, _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._interactivityChecker = _interactivityChecker;\n this._doc = _doc;\n this._container = _container;\n this._focusTrap = null;\n this._elementFocusedBeforeDrawerWasOpened = null;\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n this._enableAnimations = false;\n this._position = 'start';\n this._mode = 'over';\n this._disableClose = false;\n this._opened = false;\n /** Emits whenever the drawer has started animating. */\n this._animationStarted = new Subject();\n /** Emits whenever the drawer is done animating. */\n this._animationEnd = new Subject();\n /** Current state of the sidenav animation. */\n this._animationState = 'void';\n /** Event emitted when the drawer open state is changed. */\n this.openedChange =\n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter( /* isAsync */true);\n /** Event emitted when the drawer has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => {}));\n /** Event emitted when the drawer has started opening. */\n this.openedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));\n /** Event emitted when the drawer has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => {}));\n /** Event emitted when the drawer has started closing. */\n this.closedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n this.onPositionChanged = new EventEmitter();\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n this._modeChanged = new Subject();\n this._injector = inject(Injector);\n this._changeDetectorRef = inject(ChangeDetectorRef);\n this.openedChange.pipe(takeUntil(this._destroyed)).subscribe(opened => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;\n }\n this._takeFocus();\n } else if (this._isFocusWithinDrawer()) {\n this._restoreFocus(this._openedVia || 'program');\n }\n });\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'keydown').pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed)).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe(event => {\n const {\n fromState,\n toState\n } = event;\n if (toState.indexOf('open') === 0 && fromState === 'void' || toState === 'void' && fromState.indexOf('open') === 0) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n const callback = () => {\n element.removeEventListener('blur', callback);\n element.removeEventListener('mousedown', callback);\n element.removeAttribute('tabindex');\n };\n element.addEventListener('blur', callback);\n element.addEventListener('mousedown', callback);\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n _takeFocus() {\n if (!this._focusTrap) {\n return;\n }\n const element = this._elementRef.nativeElement;\n // When autoFocus is not on the sidenav, if the element cannot be focused or does\n // not exist, focus the sidenav itself so the keyboard navigation still works.\n // We need to check that `focus` is a function due to Universal.\n switch (this.autoFocus) {\n case false:\n case 'dialog':\n return;\n case true:\n case 'first-tabbable':\n afterNextRender(() => {\n const hasMovedFocus = this._focusTrap.focusInitialElement();\n if (!hasMovedFocus && typeof element.focus === 'function') {\n element.focus();\n }\n }, {\n injector: this._injector\n });\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n break;\n default:\n this._focusByCssSelector(this.autoFocus);\n break;\n }\n }\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n _restoreFocus(focusOrigin) {\n if (this.autoFocus === 'dialog') {\n return;\n }\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, focusOrigin);\n } else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n const activeEl = this._doc.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterViewInit() {\n this._isAttached = true;\n // Only update the DOM position when the sidenav is positioned at\n // the end since we project the sidenav before the content by default.\n if (this._position === 'end') {\n this._updatePositionInParent('end');\n }\n // Needs to happen after the position is updated\n // so the focus trap anchors are in the right place.\n if (this._platform.isBrowser) {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n }\n }\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n ngOnDestroy() {\n this._focusTrap?.destroy();\n this._anchor?.remove();\n this._anchor = null;\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia) {\n return this.toggle(true, openedVia);\n }\n /** Close the drawer. */\n close() {\n return this.toggle(false);\n }\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick() {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurs the active element.\n return this._setOpen( /* isOpen */false, /* restoreFocus */true, 'mouse');\n }\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen = !this.opened, openedVia) {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n if (isOpen && openedVia) {\n this._openedVia = openedVia;\n }\n const result = this._setOpen(isOpen, /* restoreFocus */!isOpen && this._isFocusWithinDrawer(), this._openedVia || 'program');\n if (!isOpen) {\n this._openedVia = null;\n }\n return result;\n }\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param focusOrigin Origin to use when restoring focus.\n */\n _setOpen(isOpen, restoreFocus, focusOrigin) {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n } else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus(focusOrigin);\n }\n }\n // Needed to ensure that the closing sequence fires off correctly.\n this._changeDetectorRef.markForCheck();\n this._updateFocusTrapState();\n return new Promise(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n _getWidth() {\n return this._elementRef.nativeElement ? this._elementRef.nativeElement.offsetWidth || 0 : 0;\n }\n /** Updates the enabled state of the focus trap. */\n _updateFocusTrapState() {\n if (this._focusTrap) {\n // Trap focus only if the backdrop is enabled. Otherwise, allow end user to interact with the\n // sidenav content.\n this._focusTrap.enabled = !!this._container?.hasBackdrop && this.opened;\n }\n }\n /**\n * Updates the position of the drawer in the DOM. We need to move the element around ourselves\n * when it's in the `end` position so that it comes after the content and the visual order\n * matches the tab order. We also need to be able to move it back to `start` if the sidenav\n * started off as `end` and was changed to `start`.\n */\n _updatePositionInParent(newPosition) {\n // Don't move the DOM node around on the server, because it can throw off hydration.\n if (!this._platform.isBrowser) {\n return;\n }\n const element = this._elementRef.nativeElement;\n const parent = element.parentNode;\n if (newPosition === 'end') {\n if (!this._anchor) {\n this._anchor = this._doc.createComment('mat-drawer-anchor');\n parent.insertBefore(this._anchor, element);\n }\n parent.appendChild(element);\n } else if (this._anchor) {\n this._anchor.parentNode.insertBefore(element, this._anchor);\n }\n }\n static {\n this.ɵfac = function MatDrawer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDrawer)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2.FocusTrapFactory), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i3.Platform), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.InteractivityChecker), i0.ɵɵdirectiveInject(DOCUMENT, 8), i0.ɵɵdirectiveInject(MAT_DRAWER_CONTAINER, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDrawer,\n selectors: [[\"mat-drawer\"]],\n viewQuery: function MatDrawer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c1, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._content = _t.first);\n }\n },\n hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\"],\n hostVars: 12,\n hostBindings: function MatDrawer_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵsyntheticHostListener(\"@transform.start\", function MatDrawer_animation_transform_start_HostBindingHandler($event) {\n return ctx._animationStarted.next($event);\n })(\"@transform.done\", function MatDrawer_animation_transform_done_HostBindingHandler($event) {\n return ctx._animationEnd.next($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵsyntheticHostProperty(\"@transform\", ctx._animationState);\n i0.ɵɵattribute(\"align\", null);\n i0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened);\n }\n },\n inputs: {\n position: \"position\",\n mode: \"mode\",\n disableClose: \"disableClose\",\n autoFocus: \"autoFocus\",\n opened: \"opened\"\n },\n outputs: {\n openedChange: \"openedChange\",\n _openedStream: \"opened\",\n openedStart: \"openedStart\",\n _closedStream: \"closed\",\n closedStart: \"closedStart\",\n onPositionChanged: \"positionChanged\"\n },\n exportAs: [\"matDrawer\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 3,\n vars: 0,\n consts: [[\"content\", \"\"], [\"cdkScrollable\", \"\", 1, \"mat-drawer-inner-container\"]],\n template: function MatDrawer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 1, 0);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n }\n },\n dependencies: [CdkScrollable],\n encapsulation: 2,\n data: {\n animation: [matDrawerAnimations.transformDrawer]\n },\n changeDetection: 0\n });\n }\n }\n return MatDrawer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * `` component.\n *\n * This is the parent component to one or two ``s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nlet MatDrawerContainer = /*#__PURE__*/(() => {\n class MatDrawerContainer {\n /** The drawer child with the `start` position. */\n get start() {\n return this._start;\n }\n /** The drawer child with the `end` position. */\n get end() {\n return this._end;\n }\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n get autosize() {\n return this._autosize;\n }\n set autosize(value) {\n this._autosize = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n get hasBackdrop() {\n return this._drawerHasBackdrop(this._start) || this._drawerHasBackdrop(this._end);\n }\n set hasBackdrop(value) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable() {\n return this._userContent || this._content;\n }\n constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {\n this._dir = _dir;\n this._element = _element;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Drawers that belong to this container. */\n this._drawers = new QueryList();\n /** Event emitted when the drawer backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n this._doCheckSubject = new Subject();\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n this._contentMargins = {\n left: null,\n right: null\n };\n this._contentMarginChanges = new Subject();\n this._injector = inject(Injector);\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change().pipe(takeUntil(this._destroyed)).subscribe(() => this.updateContentMargins());\n this._autosize = defaultAutosize;\n }\n ngAfterContentInit() {\n this._allDrawers.changes.pipe(startWith(this._allDrawers), takeUntil(this._destroyed)).subscribe(drawer => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach(drawer => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n if (!this._drawers.length || this._isDrawerOpen(this._start) || this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n this._changeDetectorRef.markForCheck();\n });\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject.pipe(debounceTime(10),\n // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)).subscribe(() => this.updateContentMargins());\n });\n }\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Calls `open` of both start and end drawers */\n open() {\n this._drawers.forEach(drawer => drawer.open());\n }\n /** Calls `close` of both start and end drawers */\n close() {\n this._drawers.forEach(drawer => drawer.close());\n }\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n } else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n } else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null;\n right = right || null;\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = {\n left,\n right\n };\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n _watchDrawerToggle(drawer) {\n drawer._animationStarted.pipe(filter(event => event.fromState !== event.toState), takeUntil(this._drawers.changes)).subscribe(event => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() => this._setContainerClass(drawer.opened));\n }\n }\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n _watchDrawerPosition(drawer) {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n afterNextRender(() => {\n this._validateDrawers();\n }, {\n injector: this._injector,\n phase: AfterRenderPhase.Read\n });\n });\n }\n /** Subscribes to changes in drawer mode so we can run change detection. */\n _watchDrawerMode(drawer) {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed))).subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n _setContainerClass(isAdd) {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n if (isAdd) {\n classList.add(className);\n } else {\n classList.remove(className);\n }\n }\n /** Validate the state of the drawer children components. */\n _validateDrawers() {\n this._start = this._end = null;\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n } else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n this._right = this._left = null;\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n } else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n /** Whether the container is being pushed to the side by one of the drawers. */\n _isPushed() {\n return this._isDrawerOpen(this._start) && this._start.mode != 'over' || this._isDrawerOpen(this._end) && this._end.mode != 'over';\n }\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end].filter(drawer => drawer && !drawer.disableClose && this._drawerHasBackdrop(drawer)).forEach(drawer => drawer._closeViaBackdropClick());\n }\n _isShowingBackdrop() {\n return this._isDrawerOpen(this._start) && this._drawerHasBackdrop(this._start) || this._isDrawerOpen(this._end) && this._drawerHasBackdrop(this._end);\n }\n _isDrawerOpen(drawer) {\n return drawer != null && drawer.opened;\n }\n // Whether argument drawer should have a backdrop when it opens\n _drawerHasBackdrop(drawer) {\n if (this._backdropOverride == null) {\n return !!drawer && drawer.mode !== 'side';\n }\n return this._backdropOverride;\n }\n static {\n this.ɵfac = function MatDrawerContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDrawerContainer)(i0.ɵɵdirectiveInject(i4.Directionality, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ViewportRuler), i0.ɵɵdirectiveInject(MAT_DRAWER_DEFAULT_AUTOSIZE), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDrawerContainer,\n selectors: [[\"mat-drawer-container\"]],\n contentQueries: function MatDrawerContainer_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatDrawerContent, 5);\n i0.ɵɵcontentQuery(dirIndex, MatDrawer, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._content = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n }\n },\n viewQuery: function MatDrawerContainer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(MatDrawerContent, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._userContent = _t.first);\n }\n },\n hostAttrs: [1, \"mat-drawer-container\"],\n hostVars: 2,\n hostBindings: function MatDrawerContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n }\n },\n inputs: {\n autosize: \"autosize\",\n hasBackdrop: \"hasBackdrop\"\n },\n outputs: {\n backdropClick: \"backdropClick\"\n },\n exportAs: [\"matDrawerContainer\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }]), i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c3,\n decls: 4,\n vars: 2,\n consts: [[1, \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\"], [1, \"mat-drawer-backdrop\", 3, \"click\"]],\n template: function MatDrawerContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c2);\n i0.ɵɵtemplate(0, MatDrawerContainer_Conditional_0_Template, 1, 2, \"div\", 0);\n i0.ɵɵprojection(1);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵtemplate(3, MatDrawerContainer_Conditional_3_Template, 2, 0, \"mat-drawer-content\");\n }\n if (rf & 2) {\n i0.ɵɵconditional(ctx.hasBackdrop ? 0 : -1);\n i0.ɵɵadvance(3);\n i0.ɵɵconditional(!ctx._content ? 3 : -1);\n }\n },\n dependencies: [MatDrawerContent],\n styles: [\".mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-app-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-app-background));box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color)}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-app-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow);background-color:var(--mat-sidenav-container-background-color, var(--mat-app-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));width:var(--mat-sidenav-container-width);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDrawerContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSidenavContent = /*#__PURE__*/(() => {\n class MatSidenavContent extends MatDrawerContent {\n constructor(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n static {\n this.ɵfac = function MatSidenavContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSidenavContent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(forwardRef(() => MatSidenavContainer)), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ScrollDispatcher), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSidenavContent,\n selectors: [[\"mat-sidenav-content\"]],\n hostAttrs: [1, \"mat-drawer-content\", \"mat-sidenav-content\"],\n hostVars: 4,\n hostBindings: function MatSidenavContent_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n }\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkScrollable,\n useExisting: MatSidenavContent\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatSidenavContent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatSidenavContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSidenav = /*#__PURE__*/(() => {\n class MatSidenav extends MatDrawer {\n constructor() {\n super(...arguments);\n this._fixedInViewport = false;\n this._fixedTopGap = 0;\n this._fixedBottomGap = 0;\n }\n /** Whether the sidenav is fixed in the viewport. */\n get fixedInViewport() {\n return this._fixedInViewport;\n }\n set fixedInViewport(value) {\n this._fixedInViewport = coerceBooleanProperty(value);\n }\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n get fixedTopGap() {\n return this._fixedTopGap;\n }\n set fixedTopGap(value) {\n this._fixedTopGap = coerceNumberProperty(value);\n }\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n get fixedBottomGap() {\n return this._fixedBottomGap;\n }\n set fixedBottomGap(value) {\n this._fixedBottomGap = coerceNumberProperty(value);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatSidenav_BaseFactory;\n return function MatSidenav_Factory(__ngFactoryType__) {\n return (ɵMatSidenav_BaseFactory || (ɵMatSidenav_BaseFactory = i0.ɵɵgetInheritedFactory(MatSidenav)))(__ngFactoryType__ || MatSidenav);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSidenav,\n selectors: [[\"mat-sidenav\"]],\n hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\", \"mat-sidenav\"],\n hostVars: 17,\n hostBindings: function MatSidenav_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"align\", null);\n i0.ɵɵstyleProp(\"top\", ctx.fixedInViewport ? ctx.fixedTopGap : null, \"px\")(\"bottom\", ctx.fixedInViewport ? ctx.fixedBottomGap : null, \"px\");\n i0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened)(\"mat-sidenav-fixed\", ctx.fixedInViewport);\n }\n },\n inputs: {\n fixedInViewport: \"fixedInViewport\",\n fixedTopGap: \"fixedTopGap\",\n fixedBottomGap: \"fixedBottomGap\"\n },\n exportAs: [\"matSidenav\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 3,\n vars: 0,\n consts: [[\"content\", \"\"], [\"cdkScrollable\", \"\", 1, \"mat-drawer-inner-container\"]],\n template: function MatSidenav_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 1, 0);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n }\n },\n dependencies: [CdkScrollable],\n encapsulation: 2,\n data: {\n animation: [matDrawerAnimations.transformDrawer]\n },\n changeDetection: 0\n });\n }\n }\n return MatSidenav;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSidenavContainer = /*#__PURE__*/(() => {\n class MatSidenavContainer extends MatDrawerContainer {\n constructor() {\n super(...arguments);\n this._allDrawers = undefined;\n // We need an initializer here to avoid a TS error.\n this._content = undefined;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatSidenavContainer_BaseFactory;\n return function MatSidenavContainer_Factory(__ngFactoryType__) {\n return (ɵMatSidenavContainer_BaseFactory || (ɵMatSidenavContainer_BaseFactory = i0.ɵɵgetInheritedFactory(MatSidenavContainer)))(__ngFactoryType__ || MatSidenavContainer);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSidenavContainer,\n selectors: [[\"mat-sidenav-container\"]],\n contentQueries: function MatSidenavContainer_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatSidenavContent, 5);\n i0.ɵɵcontentQuery(dirIndex, MatSidenav, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._content = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n }\n },\n hostAttrs: [1, \"mat-drawer-container\", \"mat-sidenav-container\"],\n hostVars: 2,\n hostBindings: function MatSidenavContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n }\n },\n exportAs: [\"matSidenavContainer\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c5,\n decls: 4,\n vars: 2,\n consts: [[1, \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\"], [1, \"mat-drawer-backdrop\", 3, \"click\"]],\n template: function MatSidenavContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c4);\n i0.ɵɵtemplate(0, MatSidenavContainer_Conditional_0_Template, 1, 2, \"div\", 0);\n i0.ɵɵprojection(1);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵtemplate(3, MatSidenavContainer_Conditional_3_Template, 2, 0, \"mat-sidenav-content\");\n }\n if (rf & 2) {\n i0.ɵɵconditional(ctx.hasBackdrop ? 0 : -1);\n i0.ɵɵadvance(3);\n i0.ɵɵconditional(!ctx._content ? 3 : -1);\n }\n },\n dependencies: [MatSidenavContent],\n styles: [_c6],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatSidenavContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSidenavModule = /*#__PURE__*/(() => {\n class MatSidenavModule {\n static {\n this.ɵfac = function MatSidenavModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSidenavModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatSidenavModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CdkScrollableModule, CdkScrollableModule, MatCommonModule]\n });\n }\n }\n return MatSidenavModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DRAWER_DEFAULT_AUTOSIZE, MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent, MatSidenavModule, matDrawerAnimations, throwMatDuplicatedDrawerError };\n","import { trigger, state, style, transition, animate } from '@angular/animations';\r\n\r\n\r\nexport const onSideNavChange = trigger('onSideNavChange', [\r\n state('collapse',\r\n style({\r\n 'min-width': '0px',\r\n 'width': '0px',\r\n })\r\n ),\r\n state('close',\r\n style({\r\n 'min-width': '64px',\r\n 'width': '64px',\r\n })\r\n ),\r\n state('open',\r\n style({\r\n 'min-width': '275px',\r\n 'width': '275px',\r\n })\r\n ),\r\n transition('close => open', animate('250ms ease-in')),\r\n transition('open => close', animate('250ms ease-in')),\r\n transition('close => collapse', animate('0ms ease-in')),\r\n transition('collapse => close', animate('0ms ease-in')),\r\n transition('collapse => open', animate('0ms ease-in')),\r\n transition('open => collapse', animate('0ms ease-in')),\r\n]);\r\n\r\n\r\nexport const onMainContentChange = trigger('onMainContentChange', [\r\n state('collapse',\r\n style({\r\n 'margin-left': '0px'\r\n })\r\n ),\r\n state('close',\r\n style({\r\n 'margin-left': '62px'\r\n })\r\n ),\r\n state('open',\r\n style({\r\n 'margin-left': '275px'\r\n })\r\n ),\r\n transition('close => open', animate('250ms ease-in')),\r\n transition('open => close', animate('250ms ease-in')),\r\n transition('close => collapse', animate('0ms ease-in')),\r\n transition('collapse => close', animate('0ms ease-in')),\r\n transition('open => collapse', animate('0ms ease-in')),\r\n transition('collapse => open', animate('0ms ease-in')),\r\n]);\r\n\r\n\r\nexport const animateText = trigger('animateText', [\r\n state('hide',\r\n style({\r\n 'display': 'none',\r\n opacity: 0,\r\n })\r\n ),\r\n state('show',\r\n style({\r\n 'display': 'block',\r\n opacity: 1,\r\n 'margin-left': '10px'\r\n })\r\n ),\r\n transition('close => open', animate('350ms ease-in')),\r\n transition('open => close', animate('200ms ease-out')),\r\n]);","import { Injectable, signal } from '@angular/core';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\n\r\nexport interface MenuLink {\r\n link?: string | string[];\r\n icon?: string;\r\n text?: string;\r\n allowedRoles?: string[];\r\n params?: any;\r\n children?: MenuLink[];\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SidenavService {\r\n // Injected Services\r\n private sidenav!: MatSidenav;\r\n private animateText = signal(true);\r\n private mainContentChange = signal(true);\r\n private sidenavState = signal(true);\r\n\r\n AnimateTextChange = this.animateText.asReadonly();\r\n MainContentChange = this.mainContentChange.asReadonly();\r\n SidenavState = this.sidenavState.asReadonly();\r\n\r\n\r\n public get isSidenavOpened(): boolean {\r\n return this.sidenav ? this.sidenav.opened : false;\r\n }\r\n\r\n public setSidenav(sidenav: MatSidenav) {\r\n this.sidenav = sidenav;\r\n };\r\n\r\n public open() {\r\n return this.sidenav.open();\r\n }\r\n\r\n public close() {\r\n return this.sidenav.close();\r\n }\r\n\r\n public mode() {\r\n return this.sidenav.mode;\r\n }\r\n\r\n public toggle(): void {\r\n this.sidenav.toggle();\r\n }\r\n\r\n updateMainContentChange(value: boolean) {\r\n this.mainContentChange.update(() => value);\r\n }\r\n\r\n updateSideNavState(value: boolean) {\r\n this.sidenavState.update(() => value);\r\n }\r\n\r\n updateAnimateText(value: boolean) {\r\n this.animateText.update(() => value);\r\n }\r\n\r\n expandBeforeToggle() {\r\n this.updateSideNavState(true);\r\n this.updateAnimateText(true);\r\n setTimeout(() => {\r\n this.sidenav.toggle();\r\n }, 100);\r\n }\r\n\r\n onSidenavToggle() {\r\n // Toggle SidenavState value\r\n this.updateSideNavState(!this.SidenavState())\r\n \r\n setTimeout(() => {\r\n this.updateAnimateText(this.SidenavState());\r\n }, 200)\r\n this.updateSideNavState(this.SidenavState())\r\n this.updateMainContentChange(this.SidenavState())\r\n }\r\n}","import { Component, inject, input } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDrawerMode } from '@angular/material/sidenav';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\n\r\nimport { animateText, onSideNavChange } from 'src/app/shared/animations/animations';\r\nimport { RoutePaths } from '../../../../../../routing/routes';\r\n\r\nimport { AuthService } from 'src/app/services/authentication/auth.service';\r\nimport { SidenavService } from 'src/app/services/sidenav/sidenav.service';\r\nimport { UserInfo } from '@services/user/user.service.class';\r\n\r\n\r\n@Component({\r\n selector: 'app-sidenav',\r\n standalone: true,\r\n imports: [\r\n RouterModule,\r\n\r\n MatButtonModule,\r\n MatIconModule,\r\n MatListModule,\r\n ],\r\n templateUrl: './sidenav.component.html',\r\n styleUrl: './sidenav.component.scss',\r\n animations: [onSideNavChange, animateText]\r\n})\r\nexport class SidenavComponent {\r\n private authService = inject(AuthService);\r\n private sidenavService = inject(SidenavService);\r\n\r\n AnimateTextChange = this.sidenavService.AnimateTextChange;\r\n SidenavStateChange = this.sidenavService.SidenavState;\r\n \r\n hideMiniButton = input(true);\r\n mode = input();\r\n user = input.required();\r\n RoutePaths = RoutePaths;\r\n\r\n Logout(): void {\r\n this.authService.Logout();\r\n }\r\n\r\n onSidenavToggle() {\r\n this.sidenavService.onSidenavToggle()\r\n }\r\n}\r\n","
\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n list_alt\r\n Applications\r\n \r\n \r\n recommended\r\n Recommendations\r\n \r\n \r\n comment\r\n Comments\r\n \r\n \r\n theater_comedy\r\n Departments\r\n \r\n \r\n \r\n \r\n \r\n calendar_month\r\n Manage Terms\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n @if (user()?.CurrentRole?.IsDeveloper || user()?.CurrentRole?.IsSystemAdmin) {\r\n \r\n
Admin
\r\n \r\n \r\n group\r\n Users\r\n \r\n \r\n
\r\n }\r\n \r\n \r\n \r\n logout\r\n Logout\r\n \r\n \r\n
\r\n @if (!hideMiniButton()) {\r\n
\r\n \r\n
\r\n }\r\n
","import { CommonModule } from \"@angular/common\";\r\nimport { Component, Input, computed, inject } from \"@angular/core\";\r\n\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatDividerModule } from \"@angular/material/divider\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatListModule } from \"@angular/material/list\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\n\r\nimport { AuthService } from \"src/app/services/authentication/auth.service\";\r\nimport { Router, RouterModule } from \"@angular/router\";\r\nimport { RoutePaths } from \"src/app/routing/routes\";\r\nimport { UserService } from \"src/app/services/user/user.service\";\r\nimport { ScreenSizeService } from \"src/app/services/screensize/screensize.service\";\r\n\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n\r\n MatButtonModule,\r\n MatDividerModule,\r\n MatIconModule,\r\n MatListModule,\r\n MatMenuModule,\r\n ],\r\n selector: 'app-user-menu-button',\r\n templateUrl: './user-menu-button.component.html',\r\n styleUrls: ['./user-menu-button.component.scss']\r\n})\r\nexport class UserMenuButtonComponent { \r\n\tprivate authService = inject(AuthService);\r\n\tprivate router = inject(Router);\r\n\tuserService = inject(UserService);\r\n private screensizeService = inject(ScreenSizeService);\r\n\r\n IsSmallDisplay = computed(() => this.screensizeService.ScreenSize().IsSmallDisplay)\r\n\r\n RoutePaths = RoutePaths;\r\n // RouteRole = RouteRoles;\r\n\r\n @Input() isAdminDashboard: boolean = false;\r\n\r\n login(): void {\r\n this.router.navigate([RoutePaths.Login]);\r\n }\r\n\r\n logout(): void {\r\n this.authService.Logout();\r\n }\r\n}","@if (userService.User(); as user) {\r\n\t\r\n\t\taccount_circle\r\n @if (!IsSmallDisplay()) {\r\n @if (userService.User()?.IsImpersonation) {\r\n [Impersonated]\r\n }\r\n {{ user.FirstName }} {{ user.LastName }}\r\n }\r\n\t\r\n\t\r\n \r\n \r\n account_circle\r\n
\r\n {{ user.FirstName }} {{ user.LastName }}\r\n
\r\n
{{ user.CurrentRole.RoleName || 'NO ROLE FOUND!' }}
\r\n
\r\n
\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tdashboard\r\n\t\t\t\tDashboard\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tlogout\r\n\t\t\tLogout\r\n\t\t\r\n\t
\r\n} \r\n@else {\r\n\t\r\n}","import { Component, ChangeDetectionStrategy, AfterViewInit, inject, Input, input } from \"@angular/core\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatSidenavModule, MatSidenav } from \"@angular/material/sidenav\";\r\nimport { MatToolbarModule } from \"@angular/material/toolbar\";\r\nimport { AuthService } from \"src/app/services/authentication/auth.service\";\r\nimport { SITE_NAME, SystemRole } from '@src/app/shared/constants';\r\n\r\nimport { SidenavService } from \"src/app/services/sidenav/sidenav.service\";\r\nimport { ThemeToggleIconComponent } from \"src/app/shared/ui/theme-toggle-icon/theme-toggle-icon.component\";\r\nimport { UserMenuButtonComponent } from \"src/app/shared/ui/user-menu-button/user-menu-button.component\";\r\nimport { SystemAlertMessageComponent } from \"src/app/shared/ui/system-alert-message/system-alert-message.component\";\r\nimport { AppService } from \"src/app/services/app/app.service\";\r\nimport { AsyncPipe } from \"@angular/common\";\r\nimport { ScreenSizeService } from \"src/app/services/screensize/screensize.service\";\r\nimport { MultiRoleSelectorComponent } from \"src/app/shared/ui/multi-role-selector\";\r\nimport { SchoolYearSelectorComponent } from \"src/app/shared/ui/school-year-selector/school-year-selector.component\";\r\n\r\n\r\n@Component({\r\n selector: 'app-toolbar',\r\n standalone: true,\r\n imports: [\r\n AsyncPipe,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n\r\n SchoolYearSelectorComponent,\r\n SystemAlertMessageComponent,\r\n ThemeToggleIconComponent,\r\n MultiRoleSelectorComponent,\r\n\t\tUserMenuButtonComponent,\r\n\t],\r\n templateUrl: './toolbar.component.html',\r\n styleUrl: './toolbar.component.scss',\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ToolbarComponent implements AfterViewInit {\r\n\t// Injected Services\r\n\tprivate appService = inject(AppService);\r\n\tprivate authService = inject(AuthService);\r\n\tpublic sidenavService = inject(SidenavService);\r\n\tscreensizeService = inject(ScreenSizeService);\r\n\t// public notificationsPanelService = inject(NotificationsPanelService);\r\n\r\n\tnumOfNotifications: number = 0;\r\n SystemRole = SystemRole;\r\n SiteName = SITE_NAME;\r\n\r\n systemAlerts$ = this.appService.GetSystemAlert();\r\n\r\n @Input('isAdminDashboard') isAdminDashboard: boolean = false;\r\n @Input('pageTitle') pageTitle?: string = '';\r\n @Input('notifnav') notifnav!: MatSidenav;\r\n\t@Input('snav') snav!: MatSidenav;\r\n\r\n ngAfterViewInit() {\r\n this.sidenavService.setSidenav(this.snav);\r\n // this.notificationsPanelService.setNotificationsPanel(this.notifnav);\r\n }\r\n\r\n logout() {\r\n this.authService.Logout();\r\n }\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n\r\n \r\n @if (!screensizeService.ScreenSize().IsSmallDisplay) {\r\n {{ SiteName }}\r\n }\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n","import { MediaMatcher } from '@angular/cdk/layout';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, OnDestroy, computed, effect, inject, viewChild } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { RoutePaths } from '../../../../routing/routes';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\n\r\nimport { animateText, onMainContentChange, onSideNavChange } from 'src/app/shared/animations/animations';\r\nimport { ScreenSizeService } from 'src/app/services/screensize/screensize.service';\r\nimport { SidenavComponent } from './components/sidenav/sidenav.component';\r\nimport { SidenavService } from 'src/app/services/sidenav/sidenav.service';\r\nimport { ToolbarComponent } from './components/toolbar/toolbar.component';\r\nimport { UserService } from '../../../../services/user/user.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DetailsPanelService } from 'src/app/services/detailsPanel/details-panel.service';\r\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\nimport { AppService } from 'src/app/services/app/app.service';\r\nimport { AdmissionsApplicationsService } from '@services/applications/applications.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-admin-layout',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n CdkPortalOutlet,\r\n RouterModule,\r\n\r\n MatButtonModule,\r\n MatIconModule,\r\n MatProgressSpinner,\r\n MatSidenavModule,\r\n\r\n SidenavComponent,\r\n ToolbarComponent,\r\n ],\r\n templateUrl: './admin-layout.component.html',\r\n styleUrl: './admin-layout.component.scss',\r\n animations: [onMainContentChange, onSideNavChange, animateText]\r\n})\r\nexport class AdminLayoutComponent {\r\n private appsService = inject(AdmissionsApplicationsService)\r\n public detailsPanelService = inject(DetailsPanelService);\r\n private screensizeService = inject(ScreenSizeService);\r\n private sidenavService = inject(SidenavService);\r\n private userService = inject(UserService);\r\n RoutePaths = RoutePaths;\r\n \r\n AnimateTextChange = this.sidenavService.AnimateTextChange;\r\n SidenavStateChange = this.sidenavService.SidenavState;\r\n\r\n IsSmallDisplay = computed(() => this.screensizeService.ScreenSize().IsSmallDisplay);\r\n IsMobile = computed(() => this.screensizeService.ScreenSize().IsXs);\r\n MediaMatches = computed(() => this.screensizeService.ScreenSize().MediaMatches);\r\n user = this.userService.User;\r\n\r\n MainContentChange = this.sidenavService.MainContentChange;\r\n SideNavStateChange = this.sidenavService.SidenavState;\r\n\r\n snav = viewChild.required('snav');\r\n detailsPanel = viewChild.required('detailsPanel');\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.snav()) {\r\n this.sidenavService.setSidenav(this.snav());\r\n }\r\n\r\n this.detailsPanelService.panel = this.detailsPanel();\r\n\r\n // if (this.user() && this.user()?.CurrentRole?.IsStudent) { \r\n // this.appsService.GetStudentApplications(this.user()!.UserID);\r\n // } else {\r\n // this.appsService.GetAllAdmissionsApplications();\r\n // }\r\n });\r\n\r\n if (this.MediaMatches()) {\r\n this.sidenavService.updateMainContentChange(false);\r\n }\r\n }\r\n\r\n closedStart() {\r\n this.sidenavService.updateMainContentChange(false);\r\n }\r\n\r\n openedStart() {\r\n this.sidenavService.updateMainContentChange(true);\r\n }\r\n\r\n expandBeforeToggle() {\r\n this.sidenavService.updateSideNavState(true);\r\n this.sidenavService.updateAnimateText(true);\r\n setTimeout(() => {\r\n this.sidenavService.toggle();\r\n }, 100);\r\n }\r\n\r\n toggleSidenav() {\r\n this.MediaMatches()\r\n ? this.sidenavService.expandBeforeToggle()\r\n : this.sidenavService.toggle();\r\n }\r\n}\r\n","
\r\n \r\n\r\n \r\n \r\n\t\t\t\r\n \r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
","import { Component, HostBinding } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-login-layout',\r\n standalone: true,\r\n imports: [RouterModule],\r\n template: `\r\n
\r\n \r\n
`,\r\n styles: `\r\n .hsa-container {\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n }\r\n `\r\n})\r\nexport class LoginLayoutComponent {}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, CanDeactivate, CanActivateFn, Router, CanDeactivateFn } from \"@angular/router\";\r\nimport { Observable, from, of } from \"rxjs\";\r\nimport { take } from \"rxjs/operators\";\r\nimport { SystemRole } from \"../shared/constants\";\r\nimport { UserService } from \"../services/user/user.service\";\r\nimport { SplashService } from \"../shared/dialogs/splash/splash.service\";\r\nimport { RoutePaths } from \"./routes\";\r\nimport { DirtyComponent } from \"../shared/utility/tools\";\r\n\r\n\r\nexport const Authenticated: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\r\n //Injected Services\r\n const router = inject(Router);\r\n const splashService = inject(SplashService);\r\n const userService = inject(UserService);\r\n\r\n // At a minimum, only allow access if we have a valid authtoken stored for the current user.\r\n let routeOk = !!userService.User()?.AuthToken;\r\n\r\n // Without an authtoken, we redirec the user to the landing route automatically.\r\n if (!userService.User()?.AuthToken) {\r\n return router.createUrlTree([`/${RoutePaths.Landing}`]); // TODO: Add landing page\r\n }\r\n\r\n // If there is optional data present, particularly the 'Roles' setting, we must also check to ensure that the\r\n // current user has a role that is in the provided list of necessary roles to use the route.\r\n const key = 'roles';\r\n let matchingRoles = false;\r\n let matchingCurrentRole = false;\r\n\r\n if (routeOk && route.data != null && route.data[key] != null) {\r\n // Does the user have a role that is in the provided list?\r\n const routeRoles = (route.data[key] || []) as string[];\r\n\r\n if (routeRoles.includes(SystemRole.All)) {\r\n routeOk = true;\r\n } else {\r\n matchingRoles = routeRoles.some((nr) => !!userService.User()?.Roles.find((ur) => ur.RoleName === nr));\r\n matchingCurrentRole = routeRoles.some((nr) => userService.User()?.CurrentRole.RoleName === nr);\r\n\r\n if (!matchingRoles || !matchingCurrentRole)\r\n // Cannot find any of the needed roles within the list of user owned roles, or the user's\r\n // current role does not match any of the needed roles. Both end in failure.\r\n routeOk = false;\r\n }\r\n }\r\n\r\n // If there are no matching roles and the route needs roles, then user is not authorized to view this page.\r\n if (!routeOk && route.data[key] != null) {\r\n\r\n // If the user has multiple roles and their current role is not set to any of the matching roles, \r\n // then suggest switching roles. Otherwise, reject user.\r\n if (userService.User()!.IsMultiRole && matchingRoles && !matchingCurrentRole)\r\n splashService.SnackbarError('Your current role is not authorized to view the requested page. Try changing roles using the role selector to view the page.');\r\n else {\r\n splashService.SnackbarError('You are not authorized to view the requested page.');\r\n }\r\n }\r\n\r\n // if (!routeOk) {\r\n // splashService.SnackbarError('You are not authorized to view the requested page.');\r\n // console.error('You are not authorized to view the requested page.');\r\n // }\r\n\r\n return routeOk;\r\n}\r\nexport const HomepageGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\r\n //Injected Services\r\n const router = inject(Router);\r\n const userService = inject(UserService);\r\n const user = userService.User();\r\n const role = user?.CurrentRole.RoleName;\r\n\r\n let path = `/${RoutePaths.DashboardStudent}`;\r\n\r\n if (user && role) {\r\n switch(role) {\r\n case SystemRole.Student:\r\n path = `/${RoutePaths.DashboardStudent}`;\r\n break;\r\n case SystemRole.Parent:\r\n path = `/${RoutePaths.DashboardStudent}`;\r\n break;\r\n case SystemRole.Reader:\r\n path = `/${RoutePaths.DashboardReader}`;\r\n break;\r\n default:\r\n path = `/${RoutePaths.DashboardAdmin}`;\r\n break;\r\n }\r\n router.createUrlTree([path], { queryParams: { returnUrl: state.url } });\r\n return true;\r\n }\r\n\r\n router.createUrlTree([RoutePaths.Login], { queryParams: { returnUrl: state.url } });\r\n return false;\r\n}\r\n\r\nexport const hasUnsavedChangesGuard = (async (component: DirtyComponent) => {\r\n const isDirty = component.isDirty();\r\n let shouldNavigate = true;\r\n if (isDirty) {\r\n // const modalService = inject(NgbModal);\r\n // const modalRef = modalService.open(UnsavedDataConfirmModal);\r\n // shouldNavigate = await modalRef.result;\r\n\r\n await confirm('There may be unsaved changes on this page. Do you wish to continue leaving the page?');\r\n shouldNavigate = false;\r\n }\r\n\r\n return shouldNavigate;\r\n});\r\n\r\n\r\nexport interface UnsavedChanges {\r\n CanDeactivate: () => Observable | Promise | boolean;\r\n ChangeTrackingActive: boolean;\r\n SetupTracking: () => void;\r\n TakeDownTracking: () => void;\r\n}\r\n\r\n@Injectable()\r\nexport class UnsavedChangesGuard implements CanDeactivate {\r\n canDeactivate(target: UnsavedChanges): Observable | Promise | boolean {\r\n return target.CanDeactivate ? target.CanDeactivate() : true;\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class UnsavedChangesService {\r\n private _nativeListener: EventListenerOrEventListenerObject | null;\r\n private _tracker: null | (() => Observable | Promise | boolean) = null;\r\n\r\n // tslint:disable-next-line: no-any\r\n private _nativeChecker = (checker: any, event: any) => {\r\n const isClean = checker != null ? checker(true) : false;\r\n\r\n if (!isClean) {\r\n const msg = 'There may be unsaved changes on this page. Do you wish to continue leaving the page?';\r\n\r\n // tslint:disable-next-line: deprecation\r\n event = event || window.event;\r\n\r\n if (event) {\r\n event.returnValue = msg;\r\n }\r\n\r\n return msg;\r\n } else {\r\n return;\r\n }\r\n // tslint:disable-next-line: semicolon\r\n };\r\n\r\n constructor() {\r\n this._nativeListener = null;\r\n }\r\n\r\n // #region Clear Tracking Method\r\n\r\n ClearTracking(): void {\r\n if (this._nativeListener) {\r\n window.removeEventListener('beforeunload', this._nativeListener);\r\n this._nativeListener = null;\r\n }\r\n\r\n this._tracker = null;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Check Tracker Method\r\n\r\n CheckTracker(): Observable {\r\n const self = this;\r\n\r\n if (self._tracker != null) {\r\n const result = self._tracker();\r\n let obsResult: Observable;\r\n\r\n if (result instanceof Promise) {\r\n obsResult = from(result);\r\n } else if (!(result instanceof Observable)) {\r\n obsResult = of(result).pipe(take(1));\r\n } else {\r\n obsResult = result as Observable;\r\n }\r\n\r\n return obsResult.pipe(take(1));\r\n } else {\r\n return of(true).pipe(take(1));\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Has Tracker\r\n\r\n HasTracker(): boolean {\r\n return this._tracker != null;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Set Tracking Method\r\n\r\n SetTracking(tracker: () => Observable | Promise | boolean): void {\r\n const self = this;\r\n\r\n if (self._nativeListener) {\r\n self.ClearTracking();\r\n }\r\n\r\n self._nativeListener = self._nativeChecker.bind(window, tracker);\r\n\r\n window.addEventListener('beforeunload', self._nativeListener);\r\n\r\n this._tracker = tracker;\r\n }\r\n\r\n // #endregion\r\n}\r\n","import { AsyncPipe } from \"@angular/common\";\r\nimport { Component, ChangeDetectionStrategy, inject, computed, Input } from \"@angular/core\";\r\n\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatToolbarModule } from \"@angular/material/toolbar\";\r\n\r\nimport { MultiRoleSelectorComponent } from \"@src/app/shared/ui/multi-role-selector\";\r\nimport { ScreenSizeService } from \"@services/screensize/screensize.service\";\r\nimport { ThemeToggleIconComponent } from \"@src/app/shared/ui/theme-toggle-icon/theme-toggle-icon.component\";\r\nimport { UserMenuButtonComponent } from \"@src/app/shared/ui/user-menu-button\";\r\nimport { SITE_NAME, SystemRole } from \"@src/app/shared/constants\";\r\n\r\n\r\n@Component({\r\n selector: 'app-student-toolbar',\r\n standalone: true,\r\n imports: [\r\n AsyncPipe,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatToolbarModule,\r\n\r\n ThemeToggleIconComponent,\r\n MultiRoleSelectorComponent,\r\n\t\tUserMenuButtonComponent,\r\n\t],\r\n templateUrl: './student-toolbar.component.html',\r\n styleUrl: './student-toolbar.component.scss',\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class StudentToolbarComponent {\r\n\t// Injected Services\r\n\tprivate screensizeService = inject(ScreenSizeService);\r\n\r\n SystemRole = SystemRole;\r\n SiteName = SITE_NAME;\r\n IsMobile = computed(() => this.screensizeService.ScreenSize().IsSmallDisplay)\r\n\r\n isAdminDashboard: boolean = false;\r\n @Input('pageTitle') pageTitle?: string = '';\r\n}\r\n"," \r\n \r\n @if (!IsMobile()) {\r\n {{ SiteName }}\r\n }\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n","import { Component } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { StudentToolbarComponent } from './components/student-toolbar/student-toolbar.component';\r\n\r\n@Component({\r\n selector: 'app-student-layout',\r\n standalone: true,\r\n imports: [\r\n RouterModule,\r\n StudentToolbarComponent\r\n ],\r\n template: `\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n `,\r\n styles: `\r\n :host { \r\n --mat-list-active-indicator-shape: 0;\r\n // --mat-sidenav-container-divider-color: rgb(184, 184, 184);\r\n }\r\n\r\n .hsa-container {\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n }\r\n\r\n .hsa-space {\r\n flex: 1 1 auto;\r\n }\r\n\r\n .main {\r\n padding: 30px;\r\n }\r\n `,\r\n})\r\nexport class StudentLayoutComponent {}\r\n","import { Route, UrlSegment } from '@angular/router';\r\nimport { RoutePaths } from './routes';\r\nimport { AdminLayoutComponent } from '../shared/ui/layouts/admin/admin-layout.component';\r\nimport { LoginLayoutComponent } from '../shared/ui/layouts/login/login-layout.component';\r\nimport { SystemRole } from '../shared/constants';\r\nimport { Authenticated, HomepageGuard } from './routes.guard';\r\nimport { StudentLayoutComponent } from '../shared/ui/layouts/student/student-layout.component';\r\nimport { UserService } from '@services/user/user.service';\r\nimport { inject } from '@angular/core';\r\n\r\nexport const APP_ROUTES: Route[] = [\r\n {\r\n path: '',\r\n component: LoginLayoutComponent,\r\n children: [ \r\n {\r\n path: RoutePaths.Classlink,\r\n loadComponent: () => import('../features/classlink/classlink.component'),\r\n data: { \r\n title: 'Classlink Login',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n // This line below is not a typo - Classlink sometimes sends users to the provided URL with a space at the end of the URL. This extra dummy route catches that.\r\n path: `${RoutePaths.Classlink} `,\r\n loadComponent: () => import('../features/classlink/classlink.component'),\r\n data: { \r\n title: 'Classlink Login',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n path: RoutePaths.Login,\r\n loadComponent: () => import('../features/login/login.component'),\r\n data: { \r\n title: 'Login',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n path: RoutePaths.ConfirmAccount,\r\n loadComponent: () => import('../features/verify-account/verify-account.component'),\r\n data: { \r\n title: 'Account Confirmed',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.ConfirmAccount}/:token`,\r\n loadComponent: () => import('../features/verify-account/verify-account.component'),\r\n data: { \r\n title: 'Account Verified',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.ComingSoon}`,\r\n loadComponent: () => import('../features/coming-soon/coming-soon.component'),\r\n data: { \r\n title: 'Coming Soon',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n path: RoutePaths.Register,\r\n loadComponent: () => import('../features/register/register.component'),\r\n data: { \r\n title: 'Registration',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.RecommendStudent}`,\r\n loadComponent: () => import('../features/recommendation-add/recommendation-add.component'),\r\n data: { \r\n title: 'Recommend a Student',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.RecommendationSubmissionComplete}`,\r\n loadComponent: () => import('../features/recommendation-complete/recommendation-complete.component'),\r\n data: { \r\n title: 'Recommendation Completed',\r\n roles: [SystemRole.All]\r\n },\r\n },\r\n {\r\n path: RoutePaths.Landing,\r\n loadComponent: () => import('../features/landing/landing.component'),\r\n data: { \r\n title: 'Welcome!',\r\n roles: [SystemRole.All],\r\n url: document.location.href\r\n },\r\n },\r\n {\r\n path: RoutePaths.Offline,\r\n loadComponent: () => import('../features/offline/offline.component'),\r\n data: { \r\n title: 'Temporarily Offline',\r\n roles: [SystemRole.All],\r\n },\r\n },\r\n { \r\n path: '', \r\n redirectTo: `/${RoutePaths.Landing}`, \r\n pathMatch: 'full',\r\n },\r\n ],\r\n },\r\n {\r\n path: RoutePaths.Dashboard,\r\n children: [\r\n { \r\n path: '', \r\n redirectTo: (route) => redirectBasedOnAuth(route.url, inject(UserService)),\r\n pathMatch: 'full',\r\n },\r\n ],\r\n },\r\n {\r\n path: RoutePaths.DashboardStudent,\r\n component: StudentLayoutComponent,\r\n children: [\r\n {\r\n path: '',\r\n loadComponent: () => import('../features/dashboard/student-dashboard/student-dashboard.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Dashboard',\r\n roles: [SystemRole.Student]\r\n },\r\n },\r\n {\r\n path: RoutePaths.ApplyForAdmissions,\r\n loadComponent: () => import('../features/admissions-application-add/admissions-application-add.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'New Application',\r\n roles: [\r\n SystemRole.Parent,\r\n SystemRole.Student,\r\n ]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.AdmissionsApplicationEdit}/:id`,\r\n loadComponent: () => import('../features/admissions-application-edit/admissions-application-edit.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Edit Application',\r\n roles: [\r\n SystemRole.Parent,\r\n SystemRole.Student,\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n path: '',\r\n component: AdminLayoutComponent,\r\n children: [\r\n { \r\n path: '', \r\n redirectTo: (route) => redirectBasedOnAuth(route.url, inject(UserService)), \r\n pathMatch: 'full',\r\n },\r\n // { \r\n // path: '', \r\n // redirectTo: `/${RoutePaths.DashboardAdmin}`, \r\n // pathMatch: 'full',\r\n // },\r\n {\r\n path: `${RoutePaths.AdmissionsApplicationAdd}`,\r\n loadComponent: () => import('../features/admissions-application-add/admissions-application-add.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'New Application',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: RoutePaths.AdmissionsApplications,\r\n loadComponent: () => import('../features/admissions-applications/admissions-applications.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Applications List',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.AdmissionsApplicationDetails}`,\r\n loadComponent: () => import('../features/admissions-application-details/admissions-application-details.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Application Details',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.AdmissionsApplicationDetails}/:id`,\r\n loadComponent: () => import('../features/admissions-application-details/admissions-application-details.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Application Details',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.AdmissionsApplicationEdit}/:id`,\r\n loadComponent: () => import('../features/admissions-application-edit/admissions-application-edit.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Edit Application',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ],\r\n },\r\n },\r\n {\r\n path: RoutePaths.Comments,\r\n loadComponent: () => import('../features/comments/comments.component'),\r\n canActivate: [Authenticated],\r\n title: 'Comments | Strategic Plan Tracker',\r\n data: { \r\n title: 'Comments',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: RoutePaths.DashboardAdmin,\r\n loadComponent: () => import('../features/dashboard/admin-dashboard/admin-dashboard.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Dashboard',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: RoutePaths.Departments,\r\n loadComponent: () => import('../features/departments/departments.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Departments',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: `${RoutePaths.RecommendationDetails}/:id`,\r\n loadComponent: () => import('../features/recommendation-details/recommendation-details.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Recommendation Details',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: RoutePaths.Recommendations,\r\n loadComponent: () => import('../features/recommendations/recommendations.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Recommendations List',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: RoutePaths.TermWindows,\r\n loadComponent: () => import('../features/terms/terms.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Term Windows',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n {\r\n path: RoutePaths.Users,\r\n loadComponent: () => import('../features/users/users.component'),\r\n canActivate: [Authenticated],\r\n data: { \r\n title: 'Users',\r\n roles: [\r\n SystemRole.Developer,\r\n SystemRole.SystemAdmin,\r\n SystemRole.DistrictAdmin,\r\n SystemRole.SchoolAdmin,\r\n ]\r\n },\r\n },\r\n { path: '**', loadComponent: () => import('../features/page-not-found/page-not-found.component') },\r\n ],\r\n },\r\n]\r\n\r\nfunction redirectBasedOnAuth(route: UrlSegment[], userService: UserService) {\r\n if (!userService.User() || !userService.User()?.AuthToken) {\r\n return `/${RoutePaths.Landing}`\r\n }\r\n\r\n switch (userService.User()?.CurrentRole.RoleName) {\r\n case SystemRole.Student:\r\n return `/${RoutePaths.DashboardStudent}`\r\n case SystemRole.Reader:\r\n return `/${RoutePaths.DashboardStudent}`\r\n default:\r\n return `/${RoutePaths.DashboardAdmin}`\r\n }\r\n}","/**\n * @license Angular v18.2.3\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, ɵChangeDetectionScheduler, ɵRuntimeError, Injectable, InjectionToken, ɵperformanceMarkFeature, makeEnvironmentProviders, RendererFactory2, NgZone, ANIMATION_MODULE_TYPE } from '@angular/core';\nimport { ɵDomRendererFactory2 } from '@angular/platform-browser';\nconst ANIMATION_PREFIX = '@';\nlet AsyncAnimationRendererFactory = /*#__PURE__*/(() => {\n class AsyncAnimationRendererFactory {\n /**\n *\n * @param moduleImpl allows to provide a mock implmentation (or will load the animation module)\n */\n constructor(doc, delegate, zone, animationType, moduleImpl) {\n this.doc = doc;\n this.delegate = delegate;\n this.zone = zone;\n this.animationType = animationType;\n this.moduleImpl = moduleImpl;\n this._rendererFactoryPromise = null;\n this.scheduler = inject(ɵChangeDetectionScheduler, {\n optional: true\n });\n this.loadingSchedulerFn = inject(ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN, {\n optional: true\n });\n }\n /** @nodoc */\n ngOnDestroy() {\n // When the root view is removed, the renderer defers the actual work to the\n // `TransitionAnimationEngine` to do this, and the `TransitionAnimationEngine` doesn't actually\n // remove the DOM node, but just calls `markElementAsRemoved()`. The actual DOM node is not\n // removed until `TransitionAnimationEngine` \"flushes\".\n // Note: we already flush on destroy within the `InjectableAnimationEngine`. The injectable\n // engine is not provided when async animations are used.\n this._engine?.flush();\n }\n /**\n * @internal\n */\n loadImpl() {\n // Note on the `.then(m => m)` part below: Closure compiler optimizations in g3 require\n // `.then` to be present for a dynamic import (or an import should be `await`ed) to detect\n // the set of imported symbols.\n const loadFn = () => this.moduleImpl ?? import('@angular/animations/browser').then(m => m);\n let moduleImplPromise;\n if (this.loadingSchedulerFn) {\n moduleImplPromise = this.loadingSchedulerFn(loadFn);\n } else {\n moduleImplPromise = loadFn();\n }\n return moduleImplPromise.catch(e => {\n throw new ɵRuntimeError(5300 /* RuntimeErrorCode.ANIMATION_RENDERER_ASYNC_LOADING_FAILURE */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Async loading for animations package was ' + 'enabled, but loading failed. Angular falls back to using regular rendering. ' + \"No animations will be displayed and their styles won't be applied.\");\n }).then(({\n ɵcreateEngine,\n ɵAnimationRendererFactory\n }) => {\n // We can't create the renderer yet because we might need the hostElement and the type\n // Both are provided in createRenderer().\n this._engine = ɵcreateEngine(this.animationType, this.doc);\n const rendererFactory = new ɵAnimationRendererFactory(this.delegate, this._engine, this.zone);\n this.delegate = rendererFactory;\n return rendererFactory;\n });\n }\n /**\n * This method is delegating the renderer creation to the factories.\n * It uses default factory while the animation factory isn't loaded\n * and will rely on the animation factory once it is loaded.\n *\n * Calling this method will trigger as side effect the loading of the animation module\n * if the renderered component uses animations.\n */\n createRenderer(hostElement, rendererType) {\n const renderer = this.delegate.createRenderer(hostElement, rendererType);\n if (renderer.ɵtype === 0 /* AnimationRendererType.Regular */) {\n // The factory is already loaded, this is an animation renderer\n return renderer;\n }\n // We need to prevent the DomRenderer to throw an error because of synthetic properties\n if (typeof renderer.throwOnSyntheticProps === 'boolean') {\n renderer.throwOnSyntheticProps = false;\n }\n // Using a dynamic renderer to switch the renderer implementation once the module is loaded.\n const dynamicRenderer = new DynamicDelegationRenderer(renderer);\n // Kick off the module loading if the component uses animations but the module hasn't been\n // loaded yet.\n if (rendererType?.data?.['animation'] && !this._rendererFactoryPromise) {\n this._rendererFactoryPromise = this.loadImpl();\n }\n this._rendererFactoryPromise?.then(animationRendererFactory => {\n const animationRenderer = animationRendererFactory.createRenderer(hostElement, rendererType);\n dynamicRenderer.use(animationRenderer);\n this.scheduler?.notify(10 /* NotificationSource.AsyncAnimationsLoaded */);\n }).catch(e => {\n // Permanently use regular renderer when loading fails.\n dynamicRenderer.use(renderer);\n });\n return dynamicRenderer;\n }\n begin() {\n this.delegate.begin?.();\n }\n end() {\n this.delegate.end?.();\n }\n whenRenderingDone() {\n return this.delegate.whenRenderingDone?.() ?? Promise.resolve();\n }\n static {\n this.ɵfac = function AsyncAnimationRendererFactory_Factory(__ngFactoryType__) {\n i0.ɵɵinvalidFactory();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AsyncAnimationRendererFactory,\n factory: AsyncAnimationRendererFactory.ɵfac\n });\n }\n }\n return AsyncAnimationRendererFactory;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * The class allows to dynamicly switch between different renderer implementations\n * by changing the delegate renderer.\n */\nclass DynamicDelegationRenderer {\n constructor(delegate) {\n this.delegate = delegate;\n // List of callbacks that need to be replayed on the animation renderer once its loaded\n this.replay = [];\n this.ɵtype = 1 /* AnimationRendererType.Delegated */;\n }\n use(impl) {\n this.delegate = impl;\n if (this.replay !== null) {\n // Replay queued actions using the animation renderer to apply\n // all events and properties collected while loading was in progress.\n for (const fn of this.replay) {\n fn(impl);\n }\n // Set to `null` to indicate that the queue was processed\n // and we no longer need to collect events and properties.\n this.replay = null;\n }\n }\n get data() {\n return this.delegate.data;\n }\n destroy() {\n this.replay = null;\n this.delegate.destroy();\n }\n createElement(name, namespace) {\n return this.delegate.createElement(name, namespace);\n }\n createComment(value) {\n return this.delegate.createComment(value);\n }\n createText(value) {\n return this.delegate.createText(value);\n }\n get destroyNode() {\n return this.delegate.destroyNode;\n }\n appendChild(parent, newChild) {\n this.delegate.appendChild(parent, newChild);\n }\n insertBefore(parent, newChild, refChild, isMove) {\n this.delegate.insertBefore(parent, newChild, refChild, isMove);\n }\n removeChild(parent, oldChild, isHostElement) {\n this.delegate.removeChild(parent, oldChild, isHostElement);\n }\n selectRootElement(selectorOrNode, preserveContent) {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n parentNode(node) {\n return this.delegate.parentNode(node);\n }\n nextSibling(node) {\n return this.delegate.nextSibling(node);\n }\n setAttribute(el, name, value, namespace) {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n removeAttribute(el, name, namespace) {\n this.delegate.removeAttribute(el, name, namespace);\n }\n addClass(el, name) {\n this.delegate.addClass(el, name);\n }\n removeClass(el, name) {\n this.delegate.removeClass(el, name);\n }\n setStyle(el, style, value, flags) {\n this.delegate.setStyle(el, style, value, flags);\n }\n removeStyle(el, style, flags) {\n this.delegate.removeStyle(el, style, flags);\n }\n setProperty(el, name, value) {\n // We need to keep track of animation properties set on default renderer\n // So we can also set them also on the animation renderer\n if (this.shouldReplay(name)) {\n this.replay.push(renderer => renderer.setProperty(el, name, value));\n }\n this.delegate.setProperty(el, name, value);\n }\n setValue(node, value) {\n this.delegate.setValue(node, value);\n }\n listen(target, eventName, callback) {\n // We need to keep track of animation events registred by the default renderer\n // So we can also register them against the animation renderer\n if (this.shouldReplay(eventName)) {\n this.replay.push(renderer => renderer.listen(target, eventName, callback));\n }\n return this.delegate.listen(target, eventName, callback);\n }\n shouldReplay(propOrEventName) {\n //`null` indicates that we no longer need to collect events and properties\n return this.replay !== null && propOrEventName.startsWith(ANIMATION_PREFIX);\n }\n}\n/**\n * Provides a custom scheduler function for the async loading of the animation package.\n *\n * Private token for investigation purposes\n */\nconst ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN = /*#__PURE__*/new InjectionToken(ngDevMode ? 'async_animation_loading_scheduler_fn' : '');\n\n/**\n * Returns the set of dependency-injection providers\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * When you use this function instead of the eager `provideAnimations()`, animations won't be\n * rendered until the renderer is loaded.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideAnimationsAsync()\n * ]\n * });\n * ```\n *\n * @param type pass `'noop'` as argument to disable animations.\n *\n * @publicApi\n */\nfunction provideAnimationsAsync(type = 'animations') {\n ɵperformanceMarkFeature('NgAsyncAnimations');\n return makeEnvironmentProviders([{\n provide: RendererFactory2,\n useFactory: (doc, renderer, zone) => {\n return new AsyncAnimationRendererFactory(doc, renderer, zone, type);\n },\n deps: [DOCUMENT, ɵDomRendererFactory2, NgZone]\n }, {\n provide: ANIMATION_MODULE_TYPE,\n useValue: type === 'noop' ? 'NoopAnimations' : 'BrowserAnimations'\n }]);\n}\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { provideAnimationsAsync, ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN, AsyncAnimationRendererFactory as ɵAsyncAnimationRendererFactory };\n","import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable, shareReplay } from \"rxjs\";\r\nimport { UserService } from \"../services/user/user.service\";\r\n\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthTokenInterceptor implements HttpInterceptor {\r\n constructor(\r\n private userSvc: UserService\r\n ) {}\r\n\r\n // tslint:disable-next-line: no-any\r\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\r\n const authToken = this.userSvc?.User()?.AuthToken;\r\n\r\n let headers = req.headers;\r\n\r\n if (authToken) {\r\n headers = headers.append('AuthToken', authToken);\r\n }\r\n\r\n const clonedReq = req.clone({ headers });\r\n\r\n const result = next.handle(clonedReq).pipe(shareReplay())\r\n \r\n return result;\r\n }\r\n}\r\n","import { ApplicationConfig, importProvidersFrom, provideZoneChangeDetection } from '@angular/core';\r\nimport { provideRouter, withComponentInputBinding } from '@angular/router';\r\n\r\nimport { APP_ROUTES } from './routing/routing.module';\r\nimport { provideAnimationsAsync } from '@angular/platform-browser/animations/async';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { provideNgxWebstorage, withNgxWebstorageConfig, withLocalStorage, withSessionStorage } from 'ngx-webstorage';\r\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';\r\nimport { AuthTokenInterceptor } from './routing/interceptor';\r\nimport { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\nimport { UnsavedChangesGuard, UnsavedChangesService } from './routing/routes.guard';\r\nimport { DatePipe, TitleCasePipe } from '@angular/common';\r\nimport { REC_ID_INECTION_TOKEN, DetailsPanelService } from './services/detailsPanel/details-panel.service';\r\nimport { RoleTextPipe } from './shared/pipes/roletext';\r\nimport { SchoolYearPipe } from './shared/pipes/schoolyear';\r\n\r\nexport function getBaseUrl(): string {\r\n return document.getElementsByTagName('base')[0].href;\r\n}\r\n\r\n\r\nconst PIPES = [\r\n DatePipe,\r\n RoleTextPipe,\r\n TitleCasePipe,\r\n SchoolYearPipe,\r\n];\r\n\r\nexport const appConfig: ApplicationConfig = {\r\n providers: [\r\n { provide: 'BASE_URL', useFactory: getBaseUrl, deps: [] },\r\n provideAnimationsAsync(),\r\n provideHttpClient(withInterceptorsFromDi()),\r\n provideRouter(APP_ROUTES, withComponentInputBinding()),\r\n provideZoneChangeDetection({ eventCoalescing: true }), \r\n ...PIPES,\r\n importProvidersFrom([\r\n MatNativeDateModule, \r\n ]),\r\n provideNgxWebstorage(\r\n withNgxWebstorageConfig({ separator: ':', caseSensitive: true }),\r\n withLocalStorage(),\r\n withSessionStorage()\r\n ),\r\n // {\r\n // provide: ErrorStateMatcher,\r\n // useClass: ShowOnSubmitErrorStateMatcher\r\n // },\r\n {\r\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\r\n useValue: { appearance: 'outline' },\r\n },\r\n UnsavedChangesGuard,\r\n UnsavedChangesService,\r\n // {\r\n // provide: HAMMER_GESTURE_CONFIG,\r\n // useClass: MyHammerConfig,\r\n // },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: AuthTokenInterceptor,\r\n multi: true,\r\n },\r\n {\r\n provide: REC_ID_INECTION_TOKEN,\r\n useClass: DetailsPanelService, \r\n },\r\n ]\r\n};\r\n","import { bootstrapApplication } from \"@angular/platform-browser\";\r\nimport { AppComponent } from \"./app/app.component\";\r\nimport { appConfig } from \"./app/app.config\";\r\n \r\nbootstrapApplication(AppComponent, appConfig)\r\n .catch((err) => console.error(err));"],"mappings":"syEAgBA,IAAaA,IAAY,IAAA,CAAnB,IAAOA,EAAP,MAAOA,CAAY,CAQrBC,YACYC,EACAC,EAAuB,CADvB,KAAAD,aAAAA,EACA,KAAAC,UAAAA,EATJ,KAAAC,aAAeC,EAAOC,EAAY,EAClC,KAAAC,WAAaF,EAAOG,EAAU,EAGtC,KAAAC,kBAAoBC,GAAS,KAAKH,WAAWI,gBAAiB,CAAEC,aAAc,CAAA,CAAE,CAAE,EAClF,KAAAC,qBAAuBH,GAAS,KAAKH,WAAWO,mBAAoB,CAAEF,aAAc,IAAI,CAAE,EAMtF,KAAKV,aAAaa,WACd,YACA,KAAKZ,UAAUa,+BAA+B,kBAAkB,CAAC,EAGrE,KAAKZ,aAAaa,UAAS,CAC/B,yCAlBSjB,GAAYkB,EAAAC,EAAA,EAAAD,EAAAE,EAAA,CAAA,CAAA,sBAAZpB,EAAYqB,UAAA,CAAA,CAAA,UAAA,CAAA,EAAAC,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,GAHjBE,EAAA,EAAA,eAAA,iBAFMC,CAAY,EAAAC,cAAA,CAAA,CAAA,EAKpB,IAAOhC,EAAPiC,SAAOjC,CAAY,GAAA,ECGzB,IAAMkC,GAAM,CAAC,GAAG,EACVC,GAAM,CAAC,SAAS,EAChBC,GAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EAAG,CAAC,CAAC,oBAAoB,CAAC,EAAG,GAAG,EACtDC,GAAM,CAAC,aAAc,qBAAsB,GAAG,EACpD,SAASC,GAA0CC,EAAIC,EAAK,CAC1D,GAAID,EAAK,EAAG,CACV,IAAME,EAASC,EAAiB,EAC7BC,EAAe,EAAG,MAAO,CAAC,EAC1BC,EAAW,QAAS,UAA0E,CAC5FC,EAAcJ,CAAG,EACpB,IAAMK,EAAYC,EAAc,EAChC,OAAUC,EAAYF,EAAO,mBAAmB,CAAC,CACnD,CAAC,EACEG,EAAa,CAClB,CACA,GAAIV,EAAK,EAAG,CACV,IAAMO,EAAYC,EAAc,EAC7BG,EAAY,mBAAoBJ,EAAO,mBAAmB,CAAC,CAChE,CACF,CACA,SAASK,GAA0CZ,EAAIC,EAAK,CACtDD,EAAK,IACJI,EAAe,EAAG,oBAAoB,EACtCS,EAAa,EAAG,CAAC,EACjBH,EAAa,EAEpB,CACA,IAAMI,GAAM,CAAC,CAAC,CAAC,aAAa,CAAC,EAAG,CAAC,CAAC,qBAAqB,CAAC,EAAG,GAAG,EACxDC,GAAM,CAAC,cAAe,sBAAuB,GAAG,EACtD,SAASC,GAA2ChB,EAAIC,EAAK,CAC3D,GAAID,EAAK,EAAG,CACV,IAAME,EAASC,EAAiB,EAC7BC,EAAe,EAAG,MAAO,CAAC,EAC1BC,EAAW,QAAS,UAA2E,CAC7FC,EAAcJ,CAAG,EACpB,IAAMK,EAAYC,EAAc,EAChC,OAAUC,EAAYF,EAAO,mBAAmB,CAAC,CACnD,CAAC,EACEG,EAAa,CAClB,CACA,GAAIV,EAAK,EAAG,CACV,IAAMO,EAAYC,EAAc,EAC7BG,EAAY,mBAAoBJ,EAAO,mBAAmB,CAAC,CAChE,CACF,CACA,SAASU,GAA2CjB,EAAIC,EAAK,CACvDD,EAAK,IACJI,EAAe,EAAG,qBAAqB,EACvCS,EAAa,EAAG,CAAC,EACjBH,EAAa,EAEpB,CACA,IAAMQ,GAAM,snIACNC,GAAsB,CAE1B,gBAA8BC,GAAQ,YAAa,CAMnDC,EAAM,qBAAmCC,EAAM,CAC7C,UAAa,OACb,WAAc,SAChB,CAAC,CAAC,EAAgBD,EAAM,OAAqBC,EAAM,CAEjD,aAAc,OACd,WAAc,QAChB,CAAC,CAAC,EAAgBC,EAAW,uBAAqCC,EAAQ,KAAK,CAAC,EAAgBD,EAAW,sCAAoDC,EAAQ,wCAAwC,CAAC,CAAC,CAAC,CACpN,EAUA,IAAMC,GAA2C,IAAIC,GAAe,8BAA+B,CACjG,WAAY,OACZ,QAASC,EACX,CAAC,EAKKC,GAAoC,IAAIF,GAAe,sBAAsB,EAEnF,SAASC,IAAsC,CAC7C,MAAO,EACT,CACA,IAAIE,IAAiC,IAAM,CACzC,IAAMC,EAAN,MAAMA,UAAyBC,EAAc,CAC3C,YAAYC,EAAoBC,EAAYC,EAAYC,EAAkBC,EAAQ,CAChF,MAAMF,EAAYC,EAAkBC,CAAM,EAC1C,KAAK,mBAAqBJ,EAC1B,KAAK,WAAaC,CACpB,CACA,oBAAqB,CACnB,KAAK,WAAW,sBAAsB,UAAU,IAAM,CACpD,KAAK,mBAAmB,aAAa,CACvC,CAAC,CACH,CAmCF,EAjCIH,EAAK,UAAO,SAAkCO,EAAmB,CAC/D,OAAO,IAAKA,GAAqBP,GAAqBQ,EAAqBC,EAAiB,EAAMD,EAAkBE,GAAW,IAAMC,EAAkB,CAAC,EAAMH,EAAqBI,EAAU,EAAMJ,EAAqBK,EAAgB,EAAML,EAAqBM,CAAM,CAAC,CAC5Q,EAGAd,EAAK,UAAyBe,EAAkB,CAC9C,KAAMf,EACN,UAAW,CAAC,CAAC,oBAAoB,CAAC,EAClC,UAAW,CAAC,EAAG,oBAAoB,EACnC,SAAU,EACV,aAAc,SAAuCgB,EAAIC,EAAK,CACxDD,EAAK,GACJE,GAAY,cAAeD,EAAI,WAAW,gBAAgB,KAAM,IAAI,EAAE,eAAgBA,EAAI,WAAW,gBAAgB,MAAO,IAAI,CAEvI,EACA,WAAY,GACZ,SAAU,CAAIE,GAAmB,CAAC,CAChC,QAASlB,GACT,YAAaD,CACf,CAAC,CAAC,EAAMoB,GAA+BC,CAAmB,EAC1D,mBAAoBC,GACpB,MAAO,EACP,KAAM,EACN,SAAU,SAAmCN,EAAIC,EAAK,CAChDD,EAAK,IACJO,EAAgB,EAChBC,EAAa,CAAC,EAErB,EACA,cAAe,EACf,gBAAiB,CACnB,CAAC,EA3CL,IAAMzB,EAANC,EA8CA,OAAOD,CACT,GAAG,EAOC0B,IAA0B,IAAM,CAClC,IAAMC,EAAN,MAAMA,CAAU,CAEd,IAAI,UAAW,CACb,OAAO,KAAK,SACd,CACA,IAAI,SAASC,EAAO,CAElBA,EAAQA,IAAU,MAAQ,MAAQ,QAC9BA,IAAU,KAAK,YAEb,KAAK,aACP,KAAK,wBAAwBA,CAAK,EAEpC,KAAK,UAAYA,EACjB,KAAK,kBAAkB,KAAK,EAEhC,CAEA,IAAI,MAAO,CACT,OAAO,KAAK,KACd,CACA,IAAI,KAAKA,EAAO,CACd,KAAK,MAAQA,EACb,KAAK,sBAAsB,EAC3B,KAAK,aAAa,KAAK,CACzB,CAEA,IAAI,cAAe,CACjB,OAAO,KAAK,aACd,CACA,IAAI,aAAaA,EAAO,CACtB,KAAK,cAAgBC,GAAsBD,CAAK,CAClD,CAQA,IAAI,WAAY,CACd,IAAMA,EAAQ,KAAK,WAInB,OAAIA,IACE,KAAK,OAAS,OACT,SAEA,iBAIb,CACA,IAAI,UAAUA,EAAO,EACfA,IAAU,QAAUA,IAAU,SAAWA,GAAS,QACpDA,EAAQC,GAAsBD,CAAK,GAErC,KAAK,WAAaA,CACpB,CAKA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CACA,IAAI,OAAOA,EAAO,CAChB,KAAK,OAAOC,GAAsBD,CAAK,CAAC,CAC1C,CACA,YAAYE,EAAaC,EAAmBC,EAAeC,EAAWC,EAASC,EAAuBC,EAAMhC,GAAY,CACtH,KAAK,YAAc0B,EACnB,KAAK,kBAAoBC,EACzB,KAAK,cAAgBC,EACrB,KAAK,UAAYC,EACjB,KAAK,QAAUC,EACf,KAAK,sBAAwBC,EAC7B,KAAK,KAAOC,EACZ,KAAK,WAAahC,GAClB,KAAK,WAAa,KAClB,KAAK,qCAAuC,KAE5C,KAAK,kBAAoB,GACzB,KAAK,UAAY,QACjB,KAAK,MAAQ,OACb,KAAK,cAAgB,GACrB,KAAK,QAAU,GAEf,KAAK,kBAAoB,IAAIiC,EAE7B,KAAK,cAAgB,IAAIA,EAEzB,KAAK,gBAAkB,OAEvB,KAAK,aAEL,IAAIC,GAA2B,EAAI,EAEnC,KAAK,cAAgB,KAAK,aAAa,KAAKC,EAAOC,GAAKA,CAAC,EAAGC,GAAI,IAAM,CAAC,CAAC,CAAC,EAEzE,KAAK,YAAc,KAAK,kBAAkB,KAAKF,EAAOG,GAAKA,EAAE,YAAcA,EAAE,SAAWA,EAAE,QAAQ,QAAQ,MAAM,IAAM,CAAC,EAAGC,GAAM,MAAS,CAAC,EAE1I,KAAK,cAAgB,KAAK,aAAa,KAAKJ,EAAOC,GAAK,CAACA,CAAC,EAAGC,GAAI,IAAM,CAAC,CAAC,CAAC,EAE1E,KAAK,YAAc,KAAK,kBAAkB,KAAKF,EAAOG,GAAKA,EAAE,YAAcA,EAAE,SAAWA,EAAE,UAAY,MAAM,EAAGC,GAAM,MAAS,CAAC,EAE/H,KAAK,WAAa,IAAIN,EAGtB,KAAK,kBAAoB,IAAIC,GAK7B,KAAK,aAAe,IAAID,EACxB,KAAK,UAAYO,EAAOC,EAAQ,EAChC,KAAK,mBAAqBD,EAAOlC,EAAiB,EAClD,KAAK,aAAa,KAAKoC,EAAU,KAAK,UAAU,CAAC,EAAE,UAAUC,GAAU,CACjEA,GACE,KAAK,OACP,KAAK,qCAAuC,KAAK,KAAK,eAExD,KAAK,WAAW,GACP,KAAK,qBAAqB,GACnC,KAAK,cAAc,KAAK,YAAc,SAAS,CAEnD,CAAC,EAMD,KAAK,QAAQ,kBAAkB,IAAM,CACnCC,GAAU,KAAK,YAAY,cAAe,SAAS,EAAE,KAAKT,EAAOU,GACxDA,EAAM,UAAY,IAAU,CAAC,KAAK,cAAgB,CAACC,GAAeD,CAAK,CAC/E,EAAGH,EAAU,KAAK,UAAU,CAAC,EAAE,UAAUG,GAAS,KAAK,QAAQ,IAAI,IAAM,CACxE,KAAK,MAAM,EACXA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,CACvB,CAAC,CAAC,CACJ,CAAC,EAGD,KAAK,cAAc,KAAKE,GAAqB,CAACC,EAAGC,KACxCD,EAAE,YAAcC,GAAE,WAAaD,EAAE,UAAYC,GAAE,OACvD,CAAC,EAAE,UAAUJ,GAAS,CACrB,GAAM,CACJ,UAAAK,GACA,QAAAC,EACF,EAAIN,GACAM,GAAQ,QAAQ,MAAM,IAAM,GAAKD,KAAc,QAAUC,KAAY,QAAUD,GAAU,QAAQ,MAAM,IAAM,IAC/G,KAAK,aAAa,KAAK,KAAK,OAAO,CAEvC,CAAC,CACH,CAMA,YAAYE,EAASC,EAAS,CACvB,KAAK,sBAAsB,YAAYD,CAAO,IACjDA,EAAQ,SAAW,GAEnB,KAAK,QAAQ,kBAAkB,IAAM,CACnC,IAAME,EAAW,IAAM,CACrBF,EAAQ,oBAAoB,OAAQE,CAAQ,EAC5CF,EAAQ,oBAAoB,YAAaE,CAAQ,EACjDF,EAAQ,gBAAgB,UAAU,CACpC,EACAA,EAAQ,iBAAiB,OAAQE,CAAQ,EACzCF,EAAQ,iBAAiB,YAAaE,CAAQ,CAChD,CAAC,GAEHF,EAAQ,MAAMC,CAAO,CACvB,CAKA,oBAAoBE,EAAUF,EAAS,CACrC,IAAIG,EAAiB,KAAK,YAAY,cAAc,cAAcD,CAAQ,EACtEC,GACF,KAAK,YAAYA,EAAgBH,CAAO,CAE5C,CAKA,YAAa,CACX,GAAI,CAAC,KAAK,WACR,OAEF,IAAMD,EAAU,KAAK,YAAY,cAIjC,OAAQ,KAAK,UAAW,CACtB,IAAK,GACL,IAAK,SACH,OACF,IAAK,GACL,IAAK,iBACHK,GAAgB,IAAM,CAEhB,CADkB,KAAK,WAAW,oBAAoB,GACpC,OAAOL,EAAQ,OAAU,YAC7CA,EAAQ,MAAM,CAElB,EAAG,CACD,SAAU,KAAK,SACjB,CAAC,EACD,MACF,IAAK,gBACH,KAAK,oBAAoB,0CAA0C,EACnE,MACF,QACE,KAAK,oBAAoB,KAAK,SAAS,EACvC,KACJ,CACF,CAKA,cAAcM,EAAa,CACrB,KAAK,YAAc,WAGnB,KAAK,qCACP,KAAK,cAAc,SAAS,KAAK,qCAAsCA,CAAW,EAElF,KAAK,YAAY,cAAc,KAAK,EAEtC,KAAK,qCAAuC,KAC9C,CAEA,sBAAuB,CACrB,IAAMC,EAAW,KAAK,KAAK,cAC3B,MAAO,CAAC,CAACA,GAAY,KAAK,YAAY,cAAc,SAASA,CAAQ,CACvE,CACA,iBAAkB,CAChB,KAAK,YAAc,GAGf,KAAK,YAAc,OACrB,KAAK,wBAAwB,KAAK,EAIhC,KAAK,UAAU,YACjB,KAAK,WAAa,KAAK,kBAAkB,OAAO,KAAK,YAAY,aAAa,EAC9E,KAAK,sBAAsB,EAE/B,CACA,uBAAwB,CAKlB,KAAK,UAAU,YACjB,KAAK,kBAAoB,GAE7B,CACA,aAAc,CACZ,KAAK,YAAY,QAAQ,EACzB,KAAK,SAAS,OAAO,EACrB,KAAK,QAAU,KACf,KAAK,kBAAkB,SAAS,EAChC,KAAK,cAAc,SAAS,EAC5B,KAAK,aAAa,SAAS,EAC3B,KAAK,WAAW,KAAK,EACrB,KAAK,WAAW,SAAS,CAC3B,CAMA,KAAKC,EAAW,CACd,OAAO,KAAK,OAAO,GAAMA,CAAS,CACpC,CAEA,OAAQ,CACN,OAAO,KAAK,OAAO,EAAK,CAC1B,CAEA,wBAAyB,CAIvB,OAAO,KAAK,SAAsB,GAAyB,GAAM,OAAO,CAC1E,CAOA,OAAOC,EAAS,CAAC,KAAK,OAAQD,EAAW,CAGnCC,GAAUD,IACZ,KAAK,WAAaA,GAEpB,IAAME,EAAS,KAAK,SAASD,EAA0B,CAACA,GAAU,KAAK,qBAAqB,EAAG,KAAK,YAAc,SAAS,EAC3H,OAAKA,IACH,KAAK,WAAa,MAEbC,CACT,CAOA,SAASD,EAAQE,EAAcL,EAAa,CAC1C,YAAK,QAAUG,EACXA,EACF,KAAK,gBAAkB,KAAK,kBAAoB,OAAS,gBAEzD,KAAK,gBAAkB,OACnBE,GACF,KAAK,cAAcL,CAAW,GAIlC,KAAK,mBAAmB,aAAa,EACrC,KAAK,sBAAsB,EACpB,IAAI,QAAQM,GAAW,CAC5B,KAAK,aAAa,KAAKC,GAAK,CAAC,CAAC,EAAE,UAAUC,GAAQF,EAAQE,EAAO,OAAS,OAAO,CAAC,CACpF,CAAC,CACH,CACA,WAAY,CACV,OAAO,KAAK,YAAY,eAAgB,KAAK,YAAY,cAAc,aAAe,CACxF,CAEA,uBAAwB,CAClB,KAAK,aAGP,KAAK,WAAW,QAAU,CAAC,CAAC,KAAK,YAAY,aAAe,KAAK,OAErE,CAOA,wBAAwBC,EAAa,CAEnC,GAAI,CAAC,KAAK,UAAU,UAClB,OAEF,IAAMf,EAAU,KAAK,YAAY,cAC3BgB,EAAShB,EAAQ,WACnBe,IAAgB,OACb,KAAK,UACR,KAAK,QAAU,KAAK,KAAK,cAAc,mBAAmB,EAC1DC,EAAO,aAAa,KAAK,QAAShB,CAAO,GAE3CgB,EAAO,YAAYhB,CAAO,GACjB,KAAK,SACd,KAAK,QAAQ,WAAW,aAAaA,EAAS,KAAK,OAAO,CAE9D,CAyEF,EAvEI7B,EAAK,UAAO,SAA2BnB,EAAmB,CACxD,OAAO,IAAKA,GAAqBmB,GAAclB,EAAqBI,EAAU,EAAMJ,EAAqBgE,EAAgB,EAAMhE,EAAqBiE,EAAY,EAAMjE,EAAqBkE,EAAQ,EAAMlE,EAAqBM,CAAM,EAAMN,EAAqBmE,EAAoB,EAAMnE,EAAkBoE,GAAU,CAAC,EAAMpE,EAAkBV,GAAsB,CAAC,CAAC,CACxW,EAGA4B,EAAK,UAAyBX,EAAkB,CAC9C,KAAMW,EACN,UAAW,CAAC,CAAC,YAAY,CAAC,EAC1B,UAAW,SAAyBV,EAAIC,EAAK,CAI3C,GAHID,EAAK,GACJ6D,GAAYC,GAAK,CAAC,EAEnB9D,EAAK,EAAG,CACV,IAAI+D,EACDC,EAAeD,EAAQE,GAAY,CAAC,IAAMhE,EAAI,SAAW8D,EAAG,MACjE,CACF,EACA,UAAW,CAAC,WAAY,KAAM,EAAG,YAAY,EAC7C,SAAU,GACV,aAAc,SAAgC/D,EAAIC,EAAK,CACjDD,EAAK,GACJkE,GAAwB,mBAAoB,SAAgEC,EAAQ,CACrH,OAAOlE,EAAI,kBAAkB,KAAKkE,CAAM,CAC1C,CAAC,EAAE,kBAAmB,SAA+DA,EAAQ,CAC3F,OAAOlE,EAAI,cAAc,KAAKkE,CAAM,CACtC,CAAC,EAECnE,EAAK,IACJoE,GAAwB,aAAcnE,EAAI,eAAe,EACzDoE,GAAY,QAAS,IAAI,EACzBC,EAAY,iBAAkBrE,EAAI,WAAa,KAAK,EAAE,kBAAmBA,EAAI,OAAS,MAAM,EAAE,kBAAmBA,EAAI,OAAS,MAAM,EAAE,kBAAmBA,EAAI,OAAS,MAAM,EAAE,oBAAqBA,EAAI,MAAM,EAEpN,EACA,OAAQ,CACN,SAAU,WACV,KAAM,OACN,aAAc,eACd,UAAW,YACX,OAAQ,QACV,EACA,QAAS,CACP,aAAc,eACd,cAAe,SACf,YAAa,cACb,cAAe,SACf,YAAa,cACb,kBAAmB,iBACrB,EACA,SAAU,CAAC,WAAW,EACtB,WAAY,GACZ,SAAU,CAAII,CAAmB,EACjC,mBAAoBC,GACpB,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,UAAW,EAAE,EAAG,CAAC,gBAAiB,GAAI,EAAG,4BAA4B,CAAC,EAChF,SAAU,SAA4BN,EAAIC,EAAK,CACzCD,EAAK,IACJO,EAAgB,EAChBgE,EAAe,EAAG,MAAO,EAAG,CAAC,EAC7B/D,EAAa,CAAC,EACdgE,EAAa,EAEpB,EACA,aAAc,CAACvF,EAAa,EAC5B,cAAe,EACf,KAAM,CACJ,UAAW,CAACwF,GAAoB,eAAe,CACjD,EACA,gBAAiB,CACnB,CAAC,EAtbL,IAAMhE,EAANC,EAybA,OAAOD,CACT,GAAG,EAUCd,IAAmC,IAAM,CAC3C,IAAM+E,EAAN,MAAMA,CAAmB,CAEvB,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CAEA,IAAI,KAAM,CACR,OAAO,KAAK,IACd,CASA,IAAI,UAAW,CACb,OAAO,KAAK,SACd,CACA,IAAI,SAAS/D,EAAO,CAClB,KAAK,UAAYC,GAAsBD,CAAK,CAC9C,CAMA,IAAI,aAAc,CAChB,OAAO,KAAK,mBAAmB,KAAK,MAAM,GAAK,KAAK,mBAAmB,KAAK,IAAI,CAClF,CACA,IAAI,YAAYA,EAAO,CACrB,KAAK,kBAAoBA,GAAS,KAAO,KAAOC,GAAsBD,CAAK,CAC7E,CAEA,IAAI,YAAa,CACf,OAAO,KAAK,cAAgB,KAAK,QACnC,CACA,YAAYgE,EAAMC,EAAU3D,EAAS/B,EAAoB2F,EAAeC,EAAkB,GAAOC,EAAgB,CAC/G,KAAK,KAAOJ,EACZ,KAAK,SAAWC,EAChB,KAAK,QAAU3D,EACf,KAAK,mBAAqB/B,EAC1B,KAAK,eAAiB6F,EAEtB,KAAK,SAAW,IAAIC,GAEpB,KAAK,cAAgB,IAAI3D,GAEzB,KAAK,WAAa,IAAID,EAEtB,KAAK,gBAAkB,IAAIA,EAM3B,KAAK,gBAAkB,CACrB,KAAM,KACN,MAAO,IACT,EACA,KAAK,sBAAwB,IAAIA,EACjC,KAAK,UAAYO,EAAOC,EAAQ,EAG5B+C,GACFA,EAAK,OAAO,KAAK9C,EAAU,KAAK,UAAU,CAAC,EAAE,UAAU,IAAM,CAC3D,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,CAC5B,CAAC,EAIHgD,EAAc,OAAO,EAAE,KAAKhD,EAAU,KAAK,UAAU,CAAC,EAAE,UAAU,IAAM,KAAK,qBAAqB,CAAC,EACnG,KAAK,UAAYiD,CACnB,CACA,oBAAqB,CACnB,KAAK,YAAY,QAAQ,KAAKG,GAAU,KAAK,WAAW,EAAGpD,EAAU,KAAK,UAAU,CAAC,EAAE,UAAUqD,GAAU,CACzG,KAAK,SAAS,MAAMA,EAAO,OAAOC,GAAQ,CAACA,EAAK,YAAcA,EAAK,aAAe,IAAI,CAAC,EACvF,KAAK,SAAS,gBAAgB,CAChC,CAAC,EACD,KAAK,SAAS,QAAQ,KAAKF,GAAU,IAAI,CAAC,EAAE,UAAU,IAAM,CAC1D,KAAK,iBAAiB,EACtB,KAAK,SAAS,QAAQC,GAAU,CAC9B,KAAK,mBAAmBA,CAAM,EAC9B,KAAK,qBAAqBA,CAAM,EAChC,KAAK,iBAAiBA,CAAM,CAC9B,CAAC,GACG,CAAC,KAAK,SAAS,QAAU,KAAK,cAAc,KAAK,MAAM,GAAK,KAAK,cAAc,KAAK,IAAI,IAC1F,KAAK,qBAAqB,EAE5B,KAAK,mBAAmB,aAAa,CACvC,CAAC,EAED,KAAK,QAAQ,kBAAkB,IAAM,CACnC,KAAK,gBAAgB,KAAKE,GAAa,EAAE,EAEzCvD,EAAU,KAAK,UAAU,CAAC,EAAE,UAAU,IAAM,KAAK,qBAAqB,CAAC,CACzE,CAAC,CACH,CACA,aAAc,CACZ,KAAK,sBAAsB,SAAS,EACpC,KAAK,gBAAgB,SAAS,EAC9B,KAAK,SAAS,QAAQ,EACtB,KAAK,WAAW,KAAK,EACrB,KAAK,WAAW,SAAS,CAC3B,CAEA,MAAO,CACL,KAAK,SAAS,QAAQqD,GAAUA,EAAO,KAAK,CAAC,CAC/C,CAEA,OAAQ,CACN,KAAK,SAAS,QAAQA,GAAUA,EAAO,MAAM,CAAC,CAChD,CAKA,sBAAuB,CAOrB,IAAIG,EAAO,EACPC,EAAQ,EACZ,GAAI,KAAK,OAAS,KAAK,MAAM,QAC3B,GAAI,KAAK,MAAM,MAAQ,OACrBD,GAAQ,KAAK,MAAM,UAAU,UACpB,KAAK,MAAM,MAAQ,OAAQ,CACpC,IAAME,EAAQ,KAAK,MAAM,UAAU,EACnCF,GAAQE,EACRD,GAASC,CACX,EAEF,GAAI,KAAK,QAAU,KAAK,OAAO,QAC7B,GAAI,KAAK,OAAO,MAAQ,OACtBD,GAAS,KAAK,OAAO,UAAU,UACtB,KAAK,OAAO,MAAQ,OAAQ,CACrC,IAAMC,EAAQ,KAAK,OAAO,UAAU,EACpCD,GAASC,EACTF,GAAQE,CACV,EAMFF,EAAOA,GAAQ,KACfC,EAAQA,GAAS,MACbD,IAAS,KAAK,gBAAgB,MAAQC,IAAU,KAAK,gBAAgB,SACvE,KAAK,gBAAkB,CACrB,KAAAD,EACA,MAAAC,CACF,EAGA,KAAK,QAAQ,IAAI,IAAM,KAAK,sBAAsB,KAAK,KAAK,eAAe,CAAC,EAEhF,CACA,WAAY,CAEN,KAAK,WAAa,KAAK,UAAU,GAEnC,KAAK,QAAQ,kBAAkB,IAAM,KAAK,gBAAgB,KAAK,CAAC,CAEpE,CAMA,mBAAmBJ,EAAQ,CACzBA,EAAO,kBAAkB,KAAK5D,EAAOU,GAASA,EAAM,YAAcA,EAAM,OAAO,EAAGH,EAAU,KAAK,SAAS,OAAO,CAAC,EAAE,UAAUG,GAAS,CAGjIA,EAAM,UAAY,gBAAkB,KAAK,iBAAmB,kBAC9D,KAAK,SAAS,cAAc,UAAU,IAAI,uBAAuB,EAEnE,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,aAAa,CACvC,CAAC,EACGkD,EAAO,OAAS,QAClBA,EAAO,aAAa,KAAKrD,EAAU,KAAK,SAAS,OAAO,CAAC,EAAE,UAAU,IAAM,KAAK,mBAAmBqD,EAAO,MAAM,CAAC,CAErH,CAKA,qBAAqBA,EAAQ,CACtBA,GAKLA,EAAO,kBAAkB,KAAKrD,EAAU,KAAK,SAAS,OAAO,CAAC,EAAE,UAAU,IAAM,CAC9Ee,GAAgB,IAAM,CACpB,KAAK,iBAAiB,CACxB,EAAG,CACD,SAAU,KAAK,UACf,MAAO4C,GAAiB,IAC1B,CAAC,CACH,CAAC,CACH,CAEA,iBAAiBN,EAAQ,CACnBA,GACFA,EAAO,aAAa,KAAKrD,EAAU4D,GAAM,KAAK,SAAS,QAAS,KAAK,UAAU,CAAC,CAAC,EAAE,UAAU,IAAM,CACjG,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,aAAa,CACvC,CAAC,CAEL,CAEA,mBAAmBC,EAAO,CACxB,IAAMC,EAAY,KAAK,SAAS,cAAc,UACxCC,EAAY,gCACdF,EACFC,EAAU,IAAIC,CAAS,EAEvBD,EAAU,OAAOC,CAAS,CAE9B,CAEA,kBAAmB,CACjB,KAAK,OAAS,KAAK,KAAO,KAE1B,KAAK,SAAS,QAAQV,GAAU,CAC1BA,EAAO,UAAY,OACjB,KAAK,MAAQ,KAGjB,KAAK,KAAOA,IAER,KAAK,QAAU,KAGnB,KAAK,OAASA,EAElB,CAAC,EACD,KAAK,OAAS,KAAK,MAAQ,KAEvB,KAAK,MAAQ,KAAK,KAAK,QAAU,OACnC,KAAK,MAAQ,KAAK,KAClB,KAAK,OAAS,KAAK,SAEnB,KAAK,MAAQ,KAAK,OAClB,KAAK,OAAS,KAAK,KAEvB,CAEA,WAAY,CACV,OAAO,KAAK,cAAc,KAAK,MAAM,GAAK,KAAK,OAAO,MAAQ,QAAU,KAAK,cAAc,KAAK,IAAI,GAAK,KAAK,KAAK,MAAQ,MAC7H,CACA,oBAAqB,CACnB,KAAK,cAAc,KAAK,EACxB,KAAK,8BAA8B,CACrC,CACA,+BAAgC,CAE9B,CAAC,KAAK,OAAQ,KAAK,IAAI,EAAE,OAAOA,GAAUA,GAAU,CAACA,EAAO,cAAgB,KAAK,mBAAmBA,CAAM,CAAC,EAAE,QAAQA,GAAUA,EAAO,uBAAuB,CAAC,CAChK,CACA,oBAAqB,CACnB,OAAO,KAAK,cAAc,KAAK,MAAM,GAAK,KAAK,mBAAmB,KAAK,MAAM,GAAK,KAAK,cAAc,KAAK,IAAI,GAAK,KAAK,mBAAmB,KAAK,IAAI,CACtJ,CACA,cAAcA,EAAQ,CACpB,OAAOA,GAAU,MAAQA,EAAO,MAClC,CAEA,mBAAmBA,EAAQ,CACzB,OAAI,KAAK,mBAAqB,KACrB,CAAC,CAACA,GAAUA,EAAO,OAAS,OAE9B,KAAK,iBACd,CA0EF,EAxEIR,EAAK,UAAO,SAAoCnF,EAAmB,CACjE,OAAO,IAAKA,GAAqBmF,GAAuBlF,EAAqBqG,GAAgB,CAAC,EAAMrG,EAAqBI,EAAU,EAAMJ,EAAqBM,CAAM,EAAMN,EAAqBC,EAAiB,EAAMD,EAAqBsG,EAAa,EAAMtG,EAAkBb,EAA2B,EAAMa,EAAkBuG,GAAuB,CAAC,CAAC,CAC9V,EAGArB,EAAK,UAAyB3E,EAAkB,CAC9C,KAAM2E,EACN,UAAW,CAAC,CAAC,sBAAsB,CAAC,EACpC,eAAgB,SAA2C1E,EAAIC,EAAK+F,EAAU,CAK5E,GAJIhG,EAAK,IACJiG,GAAeD,EAAUjH,GAAkB,CAAC,EAC5CkH,GAAeD,EAAUvF,GAAW,CAAC,GAEtCT,EAAK,EAAG,CACV,IAAI+D,EACDC,EAAeD,EAAQE,GAAY,CAAC,IAAMhE,EAAI,SAAW8D,EAAG,OAC5DC,EAAeD,EAAQE,GAAY,CAAC,IAAMhE,EAAI,YAAc8D,EACjE,CACF,EACA,UAAW,SAAkC/D,EAAIC,EAAK,CAIpD,GAHID,EAAK,GACJ6D,GAAY9E,GAAkB,CAAC,EAEhCiB,EAAK,EAAG,CACV,IAAI+D,EACDC,EAAeD,EAAQE,GAAY,CAAC,IAAMhE,EAAI,aAAe8D,EAAG,MACrE,CACF,EACA,UAAW,CAAC,EAAG,sBAAsB,EACrC,SAAU,EACV,aAAc,SAAyC/D,EAAIC,EAAK,CAC1DD,EAAK,GACJsE,EAAY,yCAA0CrE,EAAI,iBAAiB,CAElF,EACA,OAAQ,CACN,SAAU,WACV,YAAa,aACf,EACA,QAAS,CACP,cAAe,eACjB,EACA,SAAU,CAAC,oBAAoB,EAC/B,WAAY,GACZ,SAAU,CAAIE,GAAmB,CAAC,CAChC,QAASrB,GACT,YAAa4F,CACf,CAAC,CAAC,EAAMrE,CAAmB,EAC3B,mBAAoB6F,GACpB,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,EAAG,sBAAuB,EAAG,kBAAkB,EAAG,CAAC,EAAG,sBAAuB,EAAG,OAAO,CAAC,EAClG,SAAU,SAAqClG,EAAIC,EAAK,CAClDD,EAAK,IACJO,EAAgB4F,EAAG,EACnBC,EAAW,EAAGC,GAA2C,EAAG,EAAG,MAAO,CAAC,EACvE7F,EAAa,CAAC,EACdA,EAAa,EAAG,CAAC,EACjB4F,EAAW,EAAGE,GAA2C,EAAG,EAAG,oBAAoB,GAEpFtG,EAAK,IACJuG,EAActG,EAAI,YAAc,EAAI,EAAE,EACtCuG,EAAU,CAAC,EACXD,EAAetG,EAAI,SAAe,GAAJ,CAAM,EAE3C,EACA,aAAc,CAAClB,EAAgB,EAC/B,OAAQ,CAAC,qnIAAunI,EAChoI,cAAe,EACf,gBAAiB,CACnB,CAAC,EA7VL,IAAMY,EAAN+E,EAgWA,OAAO/E,CACT,GAAG,EAIC8G,IAAkC,IAAM,CAC1C,IAAMC,EAAN,MAAMA,UAA0B3H,EAAiB,CAC/C,YAAY4H,EAAmBC,EAAWxH,EAAYC,EAAkBC,EAAQ,CAC9E,MAAMqH,EAAmBC,EAAWxH,EAAYC,EAAkBC,CAAM,CAC1E,CAmCF,EAjCIoH,EAAK,UAAO,SAAmCnH,EAAmB,CAChE,OAAO,IAAKA,GAAqBmH,GAAsBlH,EAAqBC,EAAiB,EAAMD,EAAkBE,GAAW,IAAMmH,EAAmB,CAAC,EAAMrH,EAAqBI,EAAU,EAAMJ,EAAqBK,EAAgB,EAAML,EAAqBM,CAAM,CAAC,CAC9Q,EAGA4G,EAAK,UAAyB3G,EAAkB,CAC9C,KAAM2G,EACN,UAAW,CAAC,CAAC,qBAAqB,CAAC,EACnC,UAAW,CAAC,EAAG,qBAAsB,qBAAqB,EAC1D,SAAU,EACV,aAAc,SAAwC1G,EAAIC,EAAK,CACzDD,EAAK,GACJE,GAAY,cAAeD,EAAI,WAAW,gBAAgB,KAAM,IAAI,EAAE,eAAgBA,EAAI,WAAW,gBAAgB,MAAO,IAAI,CAEvI,EACA,WAAY,GACZ,SAAU,CAAIE,GAAmB,CAAC,CAChC,QAASlB,GACT,YAAayH,CACf,CAAC,CAAC,EAAMtG,GAA+BC,CAAmB,EAC1D,mBAAoBC,GACpB,MAAO,EACP,KAAM,EACN,SAAU,SAAoCN,EAAIC,EAAK,CACjDD,EAAK,IACJO,EAAgB,EAChBC,EAAa,CAAC,EAErB,EACA,cAAe,EACf,gBAAiB,CACnB,CAAC,EApCL,IAAMiG,EAANC,EAuCA,OAAOD,CACT,GAAG,EAICK,IAA2B,IAAM,CACnC,IAAMC,EAAN,MAAMA,UAAmBtG,EAAU,CACjC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,iBAAmB,GACxB,KAAK,aAAe,EACpB,KAAK,gBAAkB,CACzB,CAEA,IAAI,iBAAkB,CACpB,OAAO,KAAK,gBACd,CACA,IAAI,gBAAgBE,EAAO,CACzB,KAAK,iBAAmBC,GAAsBD,CAAK,CACrD,CAKA,IAAI,aAAc,CAChB,OAAO,KAAK,YACd,CACA,IAAI,YAAYA,EAAO,CACrB,KAAK,aAAeqG,GAAqBrG,CAAK,CAChD,CAKA,IAAI,gBAAiB,CACnB,OAAO,KAAK,eACd,CACA,IAAI,eAAeA,EAAO,CACxB,KAAK,gBAAkBqG,GAAqBrG,CAAK,CACnD,CAkDF,EAhDIoG,EAAK,WAAuB,IAAM,CAChC,IAAIE,EACJ,OAAO,SAA4B1H,EAAmB,CACpD,OAAQ0H,IAA4BA,EAA6BC,GAAsBH,CAAU,IAAIxH,GAAqBwH,CAAU,CACtI,CACF,GAAG,EAGHA,EAAK,UAAyBhH,EAAkB,CAC9C,KAAMgH,EACN,UAAW,CAAC,CAAC,aAAa,CAAC,EAC3B,UAAW,CAAC,WAAY,KAAM,EAAG,aAAc,aAAa,EAC5D,SAAU,GACV,aAAc,SAAiC/G,EAAIC,EAAK,CAClDD,EAAK,IACJqE,GAAY,QAAS,IAAI,EACzBnE,GAAY,MAAOD,EAAI,gBAAkBA,EAAI,YAAc,KAAM,IAAI,EAAE,SAAUA,EAAI,gBAAkBA,EAAI,eAAiB,KAAM,IAAI,EACtIqE,EAAY,iBAAkBrE,EAAI,WAAa,KAAK,EAAE,kBAAmBA,EAAI,OAAS,MAAM,EAAE,kBAAmBA,EAAI,OAAS,MAAM,EAAE,kBAAmBA,EAAI,OAAS,MAAM,EAAE,oBAAqBA,EAAI,MAAM,EAAE,oBAAqBA,EAAI,eAAe,EAE9P,EACA,OAAQ,CACN,gBAAiB,kBACjB,YAAa,cACb,eAAgB,gBAClB,EACA,SAAU,CAAC,YAAY,EACvB,WAAY,GACZ,SAAU,CAAIG,GAA+BC,CAAmB,EAChE,mBAAoBC,GACpB,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,UAAW,EAAE,EAAG,CAAC,gBAAiB,GAAI,EAAG,4BAA4B,CAAC,EAChF,SAAU,SAA6BN,EAAIC,EAAK,CAC1CD,EAAK,IACJO,EAAgB,EAChBgE,EAAe,EAAG,MAAO,EAAG,CAAC,EAC7B/D,EAAa,CAAC,EACdgE,EAAa,EAEpB,EACA,aAAc,CAACvF,EAAa,EAC5B,cAAe,EACf,KAAM,CACJ,UAAW,CAACwF,GAAoB,eAAe,CACjD,EACA,gBAAiB,CACnB,CAAC,EAjFL,IAAMqC,EAANC,EAoFA,OAAOD,CACT,GAAG,EAICD,IAAoC,IAAM,CAC5C,IAAMM,EAAN,MAAMA,UAA4BxH,EAAmB,CACnD,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,YAAc,OAEnB,KAAK,SAAW,MAClB,CA6DF,EA3DIwH,EAAK,WAAuB,IAAM,CAChC,IAAIC,EACJ,OAAO,SAAqC7H,EAAmB,CAC7D,OAAQ6H,IAAqCA,EAAsCF,GAAsBC,CAAmB,IAAI5H,GAAqB4H,CAAmB,CAC1K,CACF,GAAG,EAGHA,EAAK,UAAyBpH,EAAkB,CAC9C,KAAMoH,EACN,UAAW,CAAC,CAAC,uBAAuB,CAAC,EACrC,eAAgB,SAA4CnH,EAAIC,EAAK+F,EAAU,CAK7E,GAJIhG,EAAK,IACJiG,GAAeD,EAAUS,GAAmB,CAAC,EAC7CR,GAAeD,EAAUc,GAAY,CAAC,GAEvC9G,EAAK,EAAG,CACV,IAAI+D,EACDC,EAAeD,EAAQE,GAAY,CAAC,IAAMhE,EAAI,SAAW8D,EAAG,OAC5DC,EAAeD,EAAQE,GAAY,CAAC,IAAMhE,EAAI,YAAc8D,EACjE,CACF,EACA,UAAW,CAAC,EAAG,uBAAwB,uBAAuB,EAC9D,SAAU,EACV,aAAc,SAA0C/D,EAAIC,EAAK,CAC3DD,EAAK,GACJsE,EAAY,yCAA0CrE,EAAI,iBAAiB,CAElF,EACA,SAAU,CAAC,qBAAqB,EAChC,WAAY,GACZ,SAAU,CAAIE,GAAmB,CAAC,CAChC,QAASrB,GACT,YAAaqI,CACf,CAAC,CAAC,EAAM/G,GAA+BC,CAAmB,EAC1D,mBAAoBgH,GACpB,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,EAAG,sBAAuB,EAAG,kBAAkB,EAAG,CAAC,EAAG,sBAAuB,EAAG,OAAO,CAAC,EAClG,SAAU,SAAsCrH,EAAIC,EAAK,CACnDD,EAAK,IACJO,EAAgB+G,EAAG,EACnBlB,EAAW,EAAGmB,GAA4C,EAAG,EAAG,MAAO,CAAC,EACxE/G,EAAa,CAAC,EACdA,EAAa,EAAG,CAAC,EACjB4F,EAAW,EAAGoB,GAA4C,EAAG,EAAG,qBAAqB,GAEtFxH,EAAK,IACJuG,EAActG,EAAI,YAAc,EAAI,EAAE,EACtCuG,EAAU,CAAC,EACXD,EAAetG,EAAI,SAAe,GAAJ,CAAM,EAE3C,EACA,aAAc,CAACwG,EAAiB,EAChC,OAAQ,CAACgB,EAAG,EACZ,cAAe,EACf,gBAAiB,CACnB,CAAC,EAjEL,IAAMZ,EAANM,EAoEA,OAAON,CACT,GAAG,EAICa,IAAiC,IAAM,CACzC,IAAMC,EAAN,MAAMA,CAAiB,CAgBvB,EAdIA,EAAK,UAAO,SAAkCpI,EAAmB,CAC/D,OAAO,IAAKA,GAAqBoI,EACnC,EAGAA,EAAK,UAAyBC,GAAiB,CAC7C,KAAMD,CACR,CAAC,EAGDA,EAAK,UAAyBE,GAAiB,CAC7C,QAAS,CAACC,GAAiBC,GAAqBA,GAAqBD,EAAe,CACtF,CAAC,EAdL,IAAMJ,EAANC,EAiBA,OAAOD,CACT,GAAG,EClrCI,IAAMM,GAAkBC,GAAQ,kBAAmB,CACtDC,EAAM,WACFC,EAAM,CACF,YAAa,MACb,MAAS,MACZ,CAAC,EAEND,EAAM,QACFC,EAAM,CACF,YAAa,OACb,MAAS,OACZ,CAAC,EAEND,EAAM,OACFC,EAAM,CACF,YAAa,QACb,MAAS,QACZ,CAAC,EAENC,EAAW,gBAAiBC,EAAQ,eAAe,CAAC,EACpDD,EAAW,gBAAiBC,EAAQ,eAAe,CAAC,EACpDD,EAAW,oBAAqBC,EAAQ,aAAa,CAAC,EACtDD,EAAW,oBAAqBC,EAAQ,aAAa,CAAC,EACtDD,EAAW,mBAAoBC,EAAQ,aAAa,CAAC,EACrDD,EAAW,mBAAoBC,EAAQ,aAAa,CAAC,CAAC,CACzD,EAGYC,GAAsBL,GAAQ,sBAAuB,CAC9DC,EAAM,WACFC,EAAM,CACF,cAAe,MAClB,CAAC,EAEND,EAAM,QACFC,EAAM,CACF,cAAe,OAClB,CAAC,EAEND,EAAM,OACFC,EAAM,CACF,cAAe,QAClB,CAAC,EAENC,EAAW,gBAAiBC,EAAQ,eAAe,CAAC,EACpDD,EAAW,gBAAiBC,EAAQ,eAAe,CAAC,EACpDD,EAAW,oBAAqBC,EAAQ,aAAa,CAAC,EACtDD,EAAW,oBAAqBC,EAAQ,aAAa,CAAC,EACtDD,EAAW,mBAAoBC,EAAQ,aAAa,CAAC,EACrDD,EAAW,mBAAoBC,EAAQ,aAAa,CAAC,CAAC,CACzD,EAGYE,GAAcN,GAAQ,cAAe,CAC9CC,EAAM,OACFC,EAAM,CACF,QAAW,OACXK,QAAS,EACZ,CAAC,EAENN,EAAM,OACFC,EAAM,CACF,QAAW,QACXK,QAAS,EACT,cAAe,OAClB,CAAC,EAENJ,EAAW,gBAAiBC,EAAQ,eAAe,CAAC,EACpDD,EAAW,gBAAiBC,EAAQ,gBAAgB,CAAC,CAAC,CACzD,ECxDD,IAAaI,IAAc,IAAA,CAArB,IAAOA,EAAP,MAAOA,CAAc,CAH3BC,aAAA,CAMY,KAAAC,YAAcC,GAAO,EAAI,EACzB,KAAAC,kBAAoBD,GAAO,EAAI,EAC/B,KAAAE,aAAeF,GAAO,EAAI,EAElC,KAAAG,kBAAoB,KAAKJ,YAAYK,WAAU,EAC/C,KAAAC,kBAAoB,KAAKJ,kBAAkBG,WAAU,EACrD,KAAAE,aAAe,KAAKJ,aAAaE,WAAU,EAG3C,IAAWG,iBAAe,CACtB,OAAO,KAAKC,QAAU,KAAKA,QAAQC,OAAS,EAChD,CAEOC,WAAWF,EAAmB,CACjC,KAAKA,QAAUA,CACnB,CAEOG,MAAI,CACP,OAAO,KAAKH,QAAQG,KAAI,CAC5B,CAEOC,OAAK,CACR,OAAO,KAAKJ,QAAQI,MAAK,CAC7B,CAEOC,MAAI,CACP,OAAO,KAAKL,QAAQK,IACxB,CAEOC,QAAM,CACT,KAAKN,QAAQM,OAAM,CACvB,CAEAC,wBAAwBC,EAAc,CAClC,KAAKf,kBAAkBgB,OAAO,IAAMD,CAAK,CAC7C,CAEAE,mBAAmBF,EAAc,CAC7B,KAAKd,aAAae,OAAO,IAAMD,CAAK,CACxC,CAEAG,kBAAkBH,EAAc,CAC5B,KAAKjB,YAAYkB,OAAO,IAAMD,CAAK,CACvC,CAEAI,oBAAkB,CACd,KAAKF,mBAAmB,EAAI,EAC5B,KAAKC,kBAAkB,EAAI,EAC3BE,WAAW,IAAK,CACZ,KAAKb,QAAQM,OAAM,CACvB,EAAG,GAAG,CACV,CAEAQ,iBAAe,CAEX,KAAKJ,mBAAmB,CAAC,KAAKZ,aAAY,CAAE,EAE5Ce,WAAW,IAAK,CACZ,KAAKF,kBAAkB,KAAKb,aAAY,CAAE,CAC9C,EAAG,GAAG,EACN,KAAKY,mBAAmB,KAAKZ,aAAY,CAAE,EAC3C,KAAKS,wBAAwB,KAAKT,aAAY,CAAE,CACpD,yCAjEST,EAAc,wBAAdA,EAAc0B,QAAd1B,EAAc2B,UAAAC,WAFX,MAAM,CAAA,EAEhB,IAAO5B,EAAP6B,SAAO7B,CAAc,GAAA,0CE8EX8B,GAAA,CAAA,EACIC,EAAA,EAAA,MAAA,CAAA,EAAmBC,EAAA,EAAA,OAAA,EAAKC,EAAA,EAKxBF,EAAA,EAAA,IAAA,CAAA,EAA6E,EAAA,WAAA,CAAA,EAC/CC,EAAA,EAAA,OAAA,EAAKC,EAAA,EAC/BF,EAAA,EAAA,OAAA,CAAA,EAA8EC,EAAA,EAAA,OAAA,EAAKC,EAAA,EAAO,uBAF7EC,EAAA,CAAA,EAAAC,EAAA,aAAAC,EAAA,EAAAC,GAAAC,EAAAC,WAAAC,KAAA,CAAA,EAEPN,EAAA,CAAA,EAAAC,EAAA,eAAAG,EAAAG,kBAAA,EAAA,OAAA,MAAA,sCAwCtBV,EAAA,EAAA,MAAA,CAAA,EAAsD,EAAA,SAAA,CAAA,EAC/BW,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAN,EAAAO,EAAA,EAAA,OAAAC,EAASR,EAAAS,gBAAA,CAAiB,CAAA,CAAA,EACzChB,EAAA,EAAA,WAAA,CAAA,EAAqCC,EAAA,CAAA,EAAwDC,EAAA,EAAW,EACnG,oBADgCC,EAAA,CAAA,EAAAc,EAAAV,EAAAW,mBAAA,EAAA,aAAA,aAAA,GDlHrD,IAAaC,IAAgB,IAAA,CAAvB,IAAOA,EAAP,MAAOA,CAAgB,CAd7BC,aAAA,CAeY,KAAAC,YAAcC,EAAOC,EAAW,EAChC,KAAAC,eAAiBF,EAAOG,EAAc,EAE9C,KAAAf,kBAAoB,KAAKc,eAAed,kBACxC,KAAAQ,mBAAqB,KAAKM,eAAeE,aAEzC,KAAAC,eAAiBC,GAAe,EAAI,EACpC,KAAAC,KAAOD,GAAK,EACZ,KAAAE,KAAOF,GAAMG,SAAQ,EACrB,KAAAvB,WAAaA,EAEbwB,QAAM,CACF,KAAKX,YAAYW,OAAM,CAC3B,CAEAhB,iBAAe,CACX,KAAKQ,eAAeR,gBAAe,CACvC,yCAlBSG,EAAgB,sBAAhBA,EAAgBc,UAAA,CAAA,CAAA,aAAA,CAAA,EAAAC,OAAA,CAAAP,eAAA,CAAA,EAAA,gBAAA,EAAAE,KAAA,CAAA,EAAA,MAAA,EAAAC,KAAA,CAAA,EAAA,MAAA,CAAA,EAAAK,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,GAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,UAAA,+BAAA,EAAA,CAAA,gBAAA,GAAA,mBAAA,SAAA,EAAA,YAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,gBAAA,GAAA,mBAAA,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,aAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,CAAA,aAAA,GAAA,EAAA,OAAA,EAAA,CAAA,EAAA,oBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,IAAAD,EAAA,IC9B7B1C,EAAA,EAAA,MAAA,CAAA,EAME,EAAA,cAAA,EAEgB,EAAA,IAAA,CAAA,EAkDwF,EAAA,WAAA,CAAA,EAChEC,EAAA,EAAA,UAAA,EAAQC,EAAA,EAClCF,EAAA,EAAA,OAAA,CAAA,EAA8EC,EAAA,EAAA,cAAA,EAAYC,EAAA,EAAO,EAErGF,EAAA,EAAA,IAAA,CAAA,EAAuF,EAAA,WAAA,CAAA,EACzDC,EAAA,EAAA,aAAA,EAAWC,EAAA,EACrCF,EAAA,GAAA,OAAA,CAAA,EAA8EC,EAAA,GAAA,iBAAA,EAAeC,EAAA,EAAO,EAExGF,EAAA,GAAA,IAAA,CAAA,EAAgF,GAAA,WAAA,CAAA,EAClDC,EAAA,GAAA,SAAA,EAAOC,EAAA,EACjCF,EAAA,GAAA,OAAA,CAAA,EAA8EC,EAAA,GAAA,UAAA,EAAQC,EAAA,EAAO,EAEjGF,EAAA,GAAA,IAAA,CAAA,EAAmF,GAAA,WAAA,CAAA,EACrDC,EAAA,GAAA,gBAAA,EAAcC,EAAA,EACxCF,EAAA,GAAA,OAAA,CAAA,EAA8EC,EAAA,GAAA,aAAA,EAAWC,EAAA,EAAO,EAGpGH,GAAA,EAAA,EAEIC,EAAA,GAAA,IAAA,CAAA,EAAmF,GAAA,WAAA,CAAA,EACrDC,EAAA,GAAA,gBAAA,EAAcC,EAAA,EACxCF,EAAA,GAAA,OAAA,CAAA,EAA8EC,EAAA,GAAA,cAAA,EAAYC,EAAA,EAAO,OASzG0C,EAAA,GAAA,aAAA,EAKAC,EAAA,GAAAC,GAAA,EAAA,EAAA,cAAA,EAkBAF,EAAA,GAAA,aAAA,EACA5C,EAAA,GAAA,IAAA,CAAA,EAAiBW,EAAA,QAAA,UAAA,CAAA,OAASgC,EAAAX,OAAA,CAAQ,CAAA,EAC9BhC,EAAA,GAAA,WAAA,CAAA,EAA0BC,EAAA,GAAA,QAAA,EAAMC,EAAA,EAChCF,EAAA,GAAA,OAAA,CAAA,EAA8EC,EAAA,GAAA,QAAA,EAAMC,EAAA,EAAO,EAC3F,EA0BZ2C,EAAA,GAAAE,GAAA,EAAA,EAAA,MAAA,CAAA,EAOJ7C,EAAA,cApJmDE,EAAA,mBAAAuC,EAAAzB,mBAAA,EAAA,OAAAyB,EAAAzB,mBAAA,IAAA,IAAAyB,EAAAd,KAAA,IAAA,OAAA,WAAA,OAAA,EA0DtB1B,EAAA,CAAA,EAAAC,EAAA,aAAAC,EAAA,GAAAC,GAAAqC,EAAAnC,WAAAwC,sBAAA,CAAA,EAEP7C,EAAA,CAAA,EAAAC,EAAA,eAAAuC,EAAAjC,kBAAA,EAAA,OAAA,MAAA,EAEOP,EAAA,CAAA,EAAAC,EAAA,aAAAC,EAAA,GAAAC,GAAAqC,EAAAnC,WAAAyC,eAAA,CAAA,EAEP9C,EAAA,CAAA,EAAAC,EAAA,eAAAuC,EAAAjC,kBAAA,EAAA,OAAA,MAAA,EAEOP,EAAA,CAAA,EAAAC,EAAA,aAAAC,EAAA,GAAAC,GAAAqC,EAAAnC,WAAA0C,QAAA,CAAA,EAEP/C,EAAA,CAAA,EAAAC,EAAA,eAAAuC,EAAAjC,kBAAA,EAAA,OAAA,MAAA,EAEOP,EAAA,CAAA,EAAAC,EAAA,aAAAC,EAAA,GAAAC,GAAAqC,EAAAnC,WAAA2C,WAAA,CAAA,EAEPhD,EAAA,CAAA,EAAAC,EAAA,eAAAuC,EAAAjC,kBAAA,EAAA,OAAA,MAAA,EAKWP,EAAA,CAAA,EAAAC,EAAA,aAAAC,EAAA,GAAAC,GAAAqC,EAAAnC,WAAA4C,WAAA,CAAA,EAEPjD,EAAA,CAAA,EAAAC,EAAA,eAAAuC,EAAAjC,kBAAA,EAAA,OAAA,MAAA,EAcdP,EAAA,CAAA,EAAAkD,EAAAC,GAAAA,EAAAX,EAAAb,KAAA,IAAA,MAAAwB,EAAAC,aAAA,OAAAD,EAAAC,YAAAC,aAAAF,GAAAA,EAAAX,EAAAb,KAAA,IAAA,MAAAwB,EAAAC,aAAA,OAAAD,EAAAC,YAAAE,cAAA,GAAA,EAAA,EAqBUtD,EAAA,CAAA,EAAAC,EAAA,eAAAuC,EAAAjC,kBAAA,EAAA,OAAA,MAAA,EA2BlBP,EAAA,CAAA,EAAAkD,EAAAV,EAAAhB,eAAA,EAAA,GAAA,EAAA,kBDzHI+B,EAAYC,GAAAC,GAEZC,EAAeC,GACfC,EAAaC,GACbC,GAAaC,GAAAC,GAAAC,GAAAC,GAAAC,EAAA,EAAAC,OAAA,CAAA;2DAAA,EAAAC,KAAA,CAAAC,UAIL,CAACC,GAAiBC,EAAW,CAAC,CAAA,CAAA,EAExC,IAAOxD,EAAPyD,SAAOzD,CAAgB,GAAA,uCGrBb0D,EAAA,EAAA,OAAA,EAAA,EAA0BC,EAAA,EAAA,gBAAA,EAAcC,EAAA,6BAD5CC,EAAA,EAAAC,GAAA,EAAA,EAAA,OAAA,EAAA,EAGAJ,EAAA,EAAA,OAAA,CAAA,EAA6BC,EAAA,CAAA,EAAwCC,EAAA,0BAHrEG,GAAAC,EAAAC,EAAAC,YAAAC,KAAA,IAAA,MAAAH,EAAAI,gBAAA,EAAA,EAAA,EAG6BC,EAAA,CAAA,EAAAC,GAAA,GAAAC,EAAAC,UAAA,IAAAD,EAAAE,SAAA,EAAA,sCAVxCf,EAAA,EAAA,SAAA,CAAA,EAIC,EAAA,UAAA,EACUC,EAAA,EAAA,gBAAA,EAAcC,EAAA,EAClBC,EAAA,EAAAa,GAAA,EAAA,EAAA,OAAA,CAAA,EAMPd,EAAA,EACAF,EAAA,EAAA,WAAA,EAAA,CAAA,EAAgD,EAAA,UAAA,EAC/B,EAAA,eAAA,EACS,EAAA,WAAA,CAAA,EACeC,EAAA,EAAA,gBAAA,EAAcC,EAAA,EACxCF,EAAA,GAAA,MAAA,CAAA,EACIC,EAAA,EAAA,EACJC,EAAA,EACAF,EAAA,GAAA,MAAA,CAAA,EAAsCC,EAAA,EAAA,EAAmDC,EAAA,EAAM,EACnF,EAG1Be,EAAA,GAAA,aAAA,EAOCjB,EAAA,GAAA,SAAA,CAAA,EAKC,GAAA,UAAA,EACUC,EAAA,GAAA,WAAA,EAASC,EAAA,EACnBD,EAAA,GAAA,aAAA,EACDC,EAAA,EAEDF,EAAA,GAAA,SAAA,CAAA,EAGCkB,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAb,EAAAc,EAAA,EAAA,OAAAC,EAASf,EAAAgB,OAAA,CAAQ,CAAA,CAAA,EAEjBvB,EAAA,GAAA,UAAA,EAAUC,EAAA,GAAA,QAAA,EAAMC,EAAA,EAChBD,EAAA,GAAA,UAAA,EACDC,EAAA,EAAS,gCA9CTsB,EAAA,oBAAAC,CAAA,EAIMd,EAAA,CAAA,EAAAN,EAAAE,EAAAmB,eAAA,EAAA,GAAA,CAAA,EAYYf,EAAA,CAAA,EAAAC,GAAA,IAAAC,EAAAC,UAAA,IAAAD,EAAAE,SAAA,GAAA,EAEkCJ,EAAA,CAAA,EAAAgB,EAAAd,EAAAe,YAAAC,UAAA,gBAAA,EAclDlB,EAAA,CAAA,EAAAa,EAAA,aAAAM,EAAA,EAAAC,GAAA,IAAAxB,EAAAyB,WAAAC,SAAA,CAAA,0BAkBHjC,EAAA,EAAA,SAAA,CAAA,EAA2BC,EAAA,EAAA,YAAA,EAAUC,EAAA,GDrBtC,IAAagC,IAAuB,IAAA,CAA9B,IAAOA,EAAP,MAAOA,CAAuB,CAhBpCC,aAAA,CAiBS,KAAAC,YAAcC,EAAOC,EAAW,EAChC,KAAAC,OAASF,EAAOG,EAAM,EAC9B,KAAAhC,YAAc6B,EAAOI,CAAW,EACrB,KAAAC,kBAAoBL,EAAOM,CAAiB,EAEpD,KAAAjB,eAAiBkB,EAAS,IAAM,KAAKF,kBAAkBG,WAAU,EAAGnB,cAAc,EAElF,KAAAM,WAAaA,EAGJ,KAAAc,iBAA4B,GAErCC,OAAK,CACD,KAAKR,OAAOS,SAAS,CAAChB,EAAWiB,KAAK,CAAC,CAC3C,CAEA1B,QAAM,CACF,KAAKa,YAAYc,OAAM,CAC3B,yCAnBShB,EAAuB,sBAAvBA,EAAuBiB,UAAA,CAAA,CAAA,sBAAA,CAAA,EAAAC,OAAA,CAAAN,iBAAA,kBAAA,EAAAO,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,OAAA,SAAA,EAAA,CAAA,qBAAA,EAAA,EAAA,CAAA,qBAAA,GAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,UAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,mBAAA,GAAA,EAAA,UAAA,EAAA,CAAA,kBAAA,GAAA,EAAA,UAAA,EAAA,CAAA,gBAAA,GAAA,aAAA,kCAAA,mBAAA,SAAA,EAAA,YAAA,EAAA,CAAA,gBAAA,GAAA,aAAA,+BAAA,EAAA,OAAA,EAAA,CAAA,EAAA,QAAA,MAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,IAAAD,EAAA,GChCpCzD,EAAA,EAAA2D,GAAA,GAAA,CAAA,EAAmC,EAAAC,GAAA,EAAA,EAAA,SAAA,CAAA,aAAnC1D,GAAA2D,EAAAH,EAAArD,YAAAC,KAAA,GAAA,EAAA,EAAAuD,CAAA,kBDmBQC,GACAC,EAAYC,GAAAC,GAEZC,EAAeC,GACfC,GAAgBC,GAChBC,EAAaC,GACbC,GAAaC,GAAAC,GAAAC,GAAAC,GAAAC,GACbC,GAAaC,GAAAC,GAAAC,EAAA,EAAAC,OAAA,CAAA;oEAAA,CAAA,CAAA,EAMf,IAAOnD,EAAPoD,SAAOpD,CAAuB,GAAA,4BGtBxBqD,EAAA,EAAA,OAAA,CAAA,EAA8BC,EAAA,CAAA,EAAcC,EAAA,kBAAdC,EAAA,EAAAC,EAAAC,EAAAC,QAAA,GD6B1C,IAAaC,IAAgB,IAAA,CAAvB,IAAOA,EAAP,MAAOA,CAAgB,CApB7BC,aAAA,CAsBS,KAAAC,WAAaC,EAAOC,EAAU,EAC9B,KAAAC,YAAcF,EAAOG,EAAW,EACjC,KAAAC,eAAiBJ,EAAOK,EAAc,EAC7C,KAAAC,kBAAoBN,EAAOO,CAAiB,EAG5C,KAAAC,mBAA6B,EAC1B,KAAAC,WAAaA,EACb,KAAAb,SAAWc,GAEX,KAAAC,cAAgB,KAAKZ,WAAWa,eAAc,EAEnB,KAAAC,iBAA4B,GACnC,KAAAC,UAAqB,GAIzCC,iBAAe,CACX,KAAKX,eAAeY,WAAW,KAAKC,IAAI,CAE5C,CAEAC,QAAM,CACF,KAAKhB,YAAYiB,OAAM,CAC3B,yCA1BStB,EAAgB,sBAAhBA,EAAgBuB,UAAA,CAAA,CAAA,aAAA,CAAA,EAAAC,OAAA,CAAAR,iBAAA,mBAAAC,UAAA,YAAAQ,SAAA,WAAAL,KAAA,MAAA,EAAAM,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,cAAA,kBAAA,EAAA,CAAA,kBAAA,GAAA,aAAA,6BAAA,EAAA,OAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,kBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICvC7BxC,EAAA,EAAA,cAAA,CAAA,EAAkD,EAAA,iBAAA,EAG7B,EAAA,SAAA,CAAA,EAGmD0C,EAAA,QAAA,UAAA,CAAA,OAASD,EAAA3B,eAAA6B,OAAA,CAAuB,CAAA,EAC5F3C,EAAA,EAAA,UAAA,EAAUC,EAAA,EAAA,MAAA,EAAIC,EAAA,EAAW,EAE7B0C,EAAA,EAAAC,GAAA,EAAA,EAAA,OAAA,CAAA,EAIAC,EAAA,EAAA,OAAA,CAAA,EAAgC,EAAA,uBAAA,CAAA,EAmBpC5C,EAAA,EAAkB,SAvBdC,EAAA,CAAA,EAAA4C,EAAAN,EAAAzB,kBAAAgC,WAAA,EAAAC,eAAA,GAAA,CAAA,EAqBsB9C,EAAA,CAAA,EAAA+C,EAAA,mBAAAT,EAAAlB,gBAAA,kBDNtB4B,EAAeC,GACfC,EAAaC,GACbC,GACAC,GAAgBC,GAAAC,GAMtBC,EAAuB,EAAAC,OAAA,CAAA;2DAAA,EAAAC,gBAAA,CAAA,CAAA,EAMnB,IAAOtD,EAAPuD,SAAOvD,CAAgB,GAAA,wDEI7B,IAAawD,IAAoB,IAAA,CAA3B,IAAOA,EAAP,MAAOA,CAAoB,CAsB7BC,aAAA,CArBQ,KAAAC,YAAcC,EAAOC,EAA6B,EACnD,KAAAC,oBAAsBF,EAAOG,EAAmB,EAC/C,KAAAC,kBAAoBJ,EAAOK,CAAiB,EAC5C,KAAAC,eAAiBN,EAAOO,EAAc,EACtC,KAAAC,YAAcR,EAAOS,CAAW,EACxC,KAAAC,WAAaA,EAEb,KAAAC,kBAAoB,KAAKL,eAAeK,kBACxC,KAAAC,mBAAqB,KAAKN,eAAeO,aAEzC,KAAAC,eAAiBC,EAAS,IAAM,KAAKX,kBAAkBY,WAAU,EAAGF,cAAc,EAClF,KAAAG,SAAWF,EAAS,IAAM,KAAKX,kBAAkBY,WAAU,EAAGE,IAAI,EAClE,KAAAC,aAAeJ,EAAS,IAAM,KAAKX,kBAAkBY,WAAU,EAAGG,YAAY,EAC9E,KAAAC,KAAO,KAAKZ,YAAYa,KAExB,KAAAC,kBAAoB,KAAKhB,eAAegB,kBACxC,KAAAC,mBAAqB,KAAKjB,eAAeO,aAEzC,KAAAW,KAAOC,GAAUC,SAAqB,MAAM,EAC5C,KAAAC,aAAeF,GAAUC,SAAqB,cAAc,EAGxDE,GAAO,IAAK,CACJ,KAAKJ,KAAI,GACT,KAAKlB,eAAeuB,WAAW,KAAKL,KAAI,CAAE,EAG9C,KAAKtB,oBAAoB4B,MAAQ,KAAKH,aAAY,CAOtD,CAAC,EAEG,KAAKR,aAAY,GACjB,KAAKb,eAAeyB,wBAAwB,EAAK,CAEzD,CAEAC,aAAW,CACP,KAAK1B,eAAeyB,wBAAwB,EAAK,CACrD,CAEAE,aAAW,CACP,KAAK3B,eAAeyB,wBAAwB,EAAI,CACpD,CAEAG,oBAAkB,CACd,KAAK5B,eAAe6B,mBAAmB,EAAI,EAC3C,KAAK7B,eAAe8B,kBAAkB,EAAI,EAC1CC,WAAW,IAAK,CACZ,KAAK/B,eAAegC,OAAM,CAC9B,EAAG,GAAG,CACV,CAEAC,eAAa,CACT,KAAKpB,aAAY,EACX,KAAKb,eAAe4B,mBAAkB,EACtC,KAAK5B,eAAegC,OAAM,CACpC,yCA9DSzC,EAAoB,sBAApBA,EAAoB2C,UAAA,CAAA,CAAA,kBAAA,CAAA,EAAAC,UAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ufC3CjCE,EAAA,EAAA,MAAA,CAAA,EACIC,EAAA,EAAA,cAAA,CAAA,EAEAD,EAAA,EAAA,wBAAA,CAAA,EAAqD,EAAA,cAAA,EAAA,CAAA,EAO7CE,EAAA,cAAA,UAAA,CAAAC,OAAAC,EAAAC,CAAA,EAAAC,EAAgBP,EAAA7B,eAAA,EAAmC,KAAhB6B,EAAAV,YAAA,CAAoB,CAAA,CAAA,EAAC,cAAA,UAAA,CAAAc,OAAAC,EAAAC,CAAA,EAAAC,EACzCP,EAAA7B,eAAA,EAAmB6B,EAAAX,YAAA,EAAgB,IAAI,CAAA,CAAA,EAW/Da,EAAA,EAAA,cAAA,CAAA,EACKM,EAAA,EAEAP,EAAA,EAAA,cAAA,EAAA,CAAA,EAAsD,EAAA,MAAA,CAAA,EAE9CQ,EAAA,EAAAC,GAAA,EAAA,EAAA,cAAA,CAAA,iBACJF,EAAA,EAAM,EAGVP,EAAA,GAAA,qBAAA,EAQC,GAAA,OAAA,EAAA,EAgBOC,EAAA,GAAA,eAAA,EACJM,EAAA,EAAO,EACW,EACF,sBAnDhBG,EAAA,CAAA,EAAAC,EAAA,OAAAZ,EAAA7B,eAAA,EAAA,OAAA,MAAA,EAA2C,SAAA,CAAA6B,EAAA7B,eAAA,CAAA,EAEf,kBAAA6B,EAAA7B,eAAA,CAAA,EAGQ,eAAA,EAAA,EACvB,mBAAA6B,EAAA/B,mBAAA,EAAA,OAAA+B,EAAA/B,mBAAA,IAAA,IAAA4C,EAAAC,OAAA,OAAA,WAAA,OAAA,EASTH,EAAA,CAAA,EAAAC,EAAA,OAAAC,EAAAC,IAAA,EAAkB,OAAAd,EAAAvB,KAAA,CAAA,EAAgB,iBAAA,EAAA,EAKrBkC,EAAA,CAAA,EAAAC,EAAA,kBAAAG,GAAA,GAAA,GAAAf,EAAAzC,oBAAAyD,WAAA,CAAA,EAKjBL,EAAA,CAAA,EAAAC,EAAA,uBAAAZ,EAAArB,kBAAA,GAAAqB,EAAApB,mBAAA,EAAA,OAAAiC,EAAAC,OAAA,OAAA,WAAA,OAAA,kBDLJG,GAAYC,GACZC,GACAC,EAAYC,EAEZC,EACAC,EAEAC,GAAgBC,GAAAC,GAAAC,GAEhBC,GACAC,EAAgB,EAAAC,OAAA,CAAA;gEAAA,EAAAC,KAAA,CAAAC,UAIR,CAACC,GAAqBC,GAAiBC,EAAW,CAAC,CAAA,CAAA,EAE7D,IAAOjF,EAAPkF,SAAOlF,CAAoB,GAAA,EEpBjC,IAAamF,IAAoB,IAAA,CAA3B,IAAOA,EAAP,MAAOA,CAAoB,yCAApBA,EAAoB,sBAApBA,EAAoBC,UAAA,CAAA,CAAA,kBAAA,CAAA,EAAAC,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,eAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,IAfzBE,EAAA,EAAA,MAAA,CAAA,EACIC,EAAA,EAAA,eAAA,EACJC,EAAA,kBAJMC,EAAYC,CAAA,EAAAC,OAAA,CAAA;gEAAA,CAAA,CAAA,EAiBpB,IAAOhB,EAAPiB,SAAOjB,CAAoB,GAAA,ECZ1B,IAAMkB,EAA+BA,CAACC,EAA+BC,IAA8B,CAEtG,IAAMC,EAASC,EAAOC,EAAM,EACtBC,EAAgBF,EAAOG,EAAa,EACpCC,EAAcJ,EAAOK,CAAW,EAGlCC,EAAU,CAAC,CAACF,EAAYG,KAAI,GAAIC,UAGpC,GAAI,CAACJ,EAAYG,KAAI,GAAIC,UACrB,OAAOT,EAAOU,cAAc,CAAC,IAAIC,EAAWC,OAAO,EAAE,CAAC,EAK1D,IAAMC,EAAM,QACRC,EAAgB,GAChBC,EAAsB,GAE1B,GAAIR,GAAWT,EAAMkB,MAAQ,MAAQlB,EAAMkB,KAAKH,CAAG,GAAK,KAAM,CAE1D,IAAMI,EAAcnB,EAAMkB,KAAKH,CAAG,GAAK,CAAA,EAEnCI,EAAWC,SAASC,EAAWC,GAAG,EAClCb,EAAU,IAEVO,EAAgBG,EAAWI,KAAMC,IAAO,CAAC,CAACjB,EAAYG,KAAI,GAAIe,MAAMC,KAAMC,GAAOA,EAAGC,WAAaJ,EAAE,CAAC,EACpGP,EAAsBE,EAAWI,KAAMC,IAAOjB,EAAYG,KAAI,GAAImB,YAAYD,WAAaJ,EAAE,GAEzF,CAACR,GAAiB,CAACC,KAGnBR,EAAU,IAEtB,CAGA,MAAI,CAACA,GAAWT,EAAMkB,KAAKH,CAAG,GAAK,OAI3BR,EAAYG,KAAI,EAAIoB,aAAed,GAAiB,CAACC,EACrDZ,EAAc0B,cAAc,8HAA8H,EAE1J1B,EAAc0B,cAAc,oDAAoD,GASjFtB,CACX,EAyDA,IAAauB,IAAmB,IAAA,CAA1B,IAAOA,EAAP,MAAOA,CAAmB,CAC5BC,cAAcC,EAAsB,CAChC,OAAOA,EAAOC,cAAgBD,EAAOC,cAAa,EAAK,EAC3D,yCAHSH,EAAmB,wBAAnBA,EAAmBI,QAAnBJ,EAAmBK,SAAA,CAAA,EAA1B,IAAOL,EAAPM,SAAON,CAAmB,GAAA,EAOnBO,IAAqB,IAAA,CAA5B,IAAOA,EAAP,MAAOA,CAAqB,CAyB9BC,aAAA,CAvBQ,KAAAC,SAA4E,KAG5E,KAAAC,eAAiB,CAACC,EAAcC,IAAc,CAGlD,GAFgBD,EAAAA,GAAW,MAAOA,EAAQ,EAAI,GAEhC,CACV,IAAME,EAAM,uFAGZD,OAAAA,EAAQA,GAASE,OAAOF,MAEpBA,IACAA,EAAMG,YAAcF,GAGjBA,CACX,CAIJ,EAGI,KAAKG,gBAAkB,IAC3B,CAIAC,eAAa,CACL,KAAKD,kBACLF,OAAOI,oBAAoB,eAAgB,KAAKF,eAAe,EAC/D,KAAKA,gBAAkB,MAG3B,KAAKP,SAAW,IACpB,CAMAU,cAAY,CACR,IAAMC,EAAO,KAEb,GAAIA,EAAKX,UAAY,KAAM,CACvB,IAAMY,EAASD,EAAKX,SAAQ,EACxBa,EAEJ,OAAID,aAAkBE,QAClBD,EAAYE,GAAKH,CAAM,EACdA,aAAkBI,GAG3BH,EAAYD,EAFZC,EAAYI,GAAYL,CAAM,EAAEM,KAAKC,GAAK,CAAC,CAAC,EAKzCN,EAAUK,KAAKC,GAAK,CAAC,CAAC,CACjC,KACI,QAAOF,GAAY,EAAI,EAAEC,KAAKC,GAAK,CAAC,CAAC,CAE7C,CAMAC,YAAU,CACN,OAAO,KAAKpB,UAAY,IAC5B,CAMAqB,YAAYC,EAA+D,CACvE,IAAMX,EAAO,KAETA,EAAKJ,iBACLI,EAAKH,cAAa,EAGtBG,EAAKJ,gBAAkBI,EAAKV,eAAesB,KAAKlB,OAAQiB,CAAO,EAE/DjB,OAAOmB,iBAAiB,eAAgBb,EAAKJ,eAAe,EAE5D,KAAKP,SAAWsB,CACpB,yCAzFSxB,EAAqB,wBAArBA,EAAqBH,QAArBG,EAAqBF,SAAA,CAAA,EAA5B,IAAOE,EAAP2B,SAAO3B,CAAqB,GAAA,4BE/HtB4B,EAAA,EAAA,OAAA,CAAA,EAA8BC,EAAA,CAAA,EAAcC,EAAA,kBAAdC,EAAA,EAAAC,EAAAC,EAAAC,QAAA,GD4B1C,IAAaC,IAAuB,IAAA,CAA9B,IAAOA,EAAP,MAAOA,CAAuB,CAjBpCC,aAAA,CAmBS,KAAAC,kBAAoBC,EAAOC,CAAiB,EAEjD,KAAAC,WAAaA,EACb,KAAAN,SAAWO,GACX,KAAAC,SAAWC,EAAS,IAAM,KAAKN,kBAAkBO,WAAU,EAAGC,cAAc,EAE5E,KAAAC,iBAA4B,GACR,KAAAC,UAAqB,2CAThCZ,EAAuB,sBAAvBA,EAAuBa,UAAA,CAAA,CAAA,qBAAA,CAAA,EAAAC,OAAA,CAAAF,UAAA,WAAA,EAAAG,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,cAAA,kBAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,kBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,IC/BpC7B,EAAA,EAAA,cAAA,CAAA,EAAkD,EAAA,iBAAA,EAE1C+B,EAAA,EAAAC,GAAA,EAAA,EAAA,OAAA,CAAA,EAGAC,EAAA,EAAA,OAAA,CAAA,EAAgC,EAAA,uBAAA,CAAA,EASpC/B,EAAA,EAAkB,SAZdC,EAAA,CAAA,EAAA+B,EAAAJ,EAAAhB,SAAA,EAAA,GAAA,CAAA,EAUsBX,EAAA,CAAA,EAAAgC,EAAA,mBAAAL,EAAAZ,gBAAA,kBDOtBkB,EACAC,EACAC,GAAgBC,GAAAC,GAItBC,EAAuB,EAAAC,OAAA,CAAA;mEAAA,EAAAC,gBAAA,CAAA,CAAA,EAMnB,IAAOpC,EAAPqC,SAAOrC,CAAuB,GAAA,EEapC,IAAasC,IAAsB,IAAA,CAA7B,IAAOA,EAAP,MAAOA,CAAsB,yCAAtBA,EAAsB,sBAAtBA,EAAsBC,UAAA,CAAA,CAAA,oBAAA,CAAA,EAAAC,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,MAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,IAhC3BE,EAAA,EAAA,MAAA,CAAA,EACIC,EAAA,EAAA,sBAAA,CAAA,EACAD,EAAA,EAAA,OAAA,CAAA,EACIC,EAAA,EAAA,eAAA,EACJC,EAAA,EAAO,kBARXC,EAAYC,EACZC,EAAuB,EAAAC,OAAA,CAAA;kEAAA,CAAA,CAAA,EAmCzB,IAAOjB,EAAPkB,SAAOlB,CAAsB,GAAA,EClC5B,IAAMmB,GAAsB,CAC/B,CACIC,KAAM,GACNC,UAAWC,GACXC,SAAU,CACN,CACIH,KAAMI,EAAWC,UACjBC,cAAeA,IAAM,OAAO,qBAA2C,EACvEC,KAAM,CACFC,MAAO,kBACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CAEIX,KAAM,GAAGI,EAAWC,SAAS,IAC7BC,cAAeA,IAAM,OAAO,qBAA2C,EACvEC,KAAM,CACFC,MAAO,kBACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAMI,EAAWQ,MACjBN,cAAeA,IAAM,OAAO,qBAAmC,EAC/DC,KAAM,CACFC,MAAO,QACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAMI,EAAWS,eACjBP,cAAeA,IAAM,OAAO,qBAAqD,EACjFC,KAAM,CACFC,MAAO,oBACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAM,GAAGI,EAAWS,cAAc,UAClCP,cAAeA,IAAM,OAAO,qBAAqD,EACjFC,KAAM,CACFC,MAAO,mBACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAM,GAAGI,EAAWU,UAAU,GAC9BR,cAAeA,IAAM,OAAO,qBAA+C,EAC3EC,KAAM,CACFC,MAAO,cACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAMI,EAAWW,SACjBT,cAAeA,IAAM,OAAO,qBAAyC,EACrEC,KAAM,CACFC,MAAO,eACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAM,GAAGI,EAAWY,gBAAgB,GACpCV,cAAeA,IAAM,OAAO,qBAA6D,EACzFC,KAAM,CACFC,MAAO,sBACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAM,GAAGI,EAAWa,gCAAgC,GACpDX,cAAeA,IAAM,OAAO,qBAAuE,EACnGC,KAAM,CACFC,MAAO,2BACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAMI,EAAWc,QACjBZ,cAAeA,IAAM,OAAO,qBAAuC,EACnEC,KAAM,CACFC,MAAO,WACPC,MAAO,CAACC,EAAWC,GAAG,EACtBQ,IAAKC,SAASC,SAASC,OAG/B,CACItB,KAAMI,EAAWmB,QACjBjB,cAAeA,IAAM,OAAO,qBAAuC,EACnEC,KAAM,CACFC,MAAO,sBACPC,MAAO,CAACC,EAAWC,GAAG,IAG9B,CACIX,KAAM,GACNwB,WAAY,IAAIpB,EAAWc,OAAO,GAClCO,UAAW,OACd,GAGT,CACIzB,KAAMI,EAAWsB,UACjBvB,SAAU,CACN,CACIH,KAAM,GACNwB,WAAaG,GAAUC,GAAoBD,EAAMR,IAAKU,EAAOC,CAAW,CAAC,EACzEL,UAAW,OACd,GAGT,CACIzB,KAAMI,EAAW2B,iBACjB9B,UAAW+B,GACX7B,SAAU,CACN,CACIH,KAAM,GACNM,cAAeA,IAAM,OAAO,qBAAqE,EACjG2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,YACPC,MAAO,CAACC,EAAWyB,OAAO,IAGlC,CACInC,KAAMI,EAAWgC,mBACjB9B,cAAeA,IAAM,OAAO,qBAA6E,EACzG2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,kBACPC,MAAO,CACHC,EAAW2B,OACX3B,EAAWyB,OAAO,IAI9B,CACInC,KAAM,GAAGI,EAAWkC,yBAAyB,OAC7ChC,cAAeA,IAAM,OAAO,qBAA+E,EAC3G2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,mBACPC,MAAO,CACHC,EAAW2B,OACX3B,EAAWyB,OAAO,GAG7B,GAGT,CACInC,KAAM,GACNC,UAAWsC,GACXpC,SAAU,CACN,CACIH,KAAM,GACNwB,WAAaG,GAAUC,GAAoBD,EAAMR,IAAKU,EAAOC,CAAW,CAAC,EACzEL,UAAW,QAOf,CACIzB,KAAM,GAAGI,EAAWoC,wBAAwB,GAC5ClC,cAAeA,IAAM,OAAO,qBAA6E,EACzG2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,kBACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAMI,EAAWyC,uBACjBvC,cAAeA,IAAM,OAAO,qBAAuE,EACnG2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,oBACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAM,GAAGI,EAAW0C,4BAA4B,GAChDxC,cAAeA,IAAM,OAAO,qBAAqF,EACjH2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,sBACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAM,GAAGI,EAAW0C,4BAA4B,OAChDxC,cAAeA,IAAM,OAAO,qBAAqF,EACjH2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,sBACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAM,GAAGI,EAAWkC,yBAAyB,OAC7ChC,cAAeA,IAAM,OAAO,qBAA+E,EAC3G2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,mBACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAMI,EAAW2C,SACjBzC,cAAeA,IAAM,OAAO,qBAAyC,EACrE2B,YAAa,CAACC,CAAa,EAC3B1B,MAAO,oCACPD,KAAM,CACFC,MAAO,WACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAMI,EAAW4C,eACjB1C,cAAeA,IAAM,OAAO,qBAAiE,EAC7F2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,YACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAMI,EAAW6C,YACjB3C,cAAeA,IAAM,OAAO,qBAA+C,EAC3E2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,cACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAM,GAAGI,EAAW8C,qBAAqB,OACzC5C,cAAeA,IAAM,OAAO,qBAAqE,EACjG2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,yBACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAMI,EAAW+C,gBACjB7C,cAAeA,IAAM,OAAO,qBAAuD,EACnF2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,uBACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAMI,EAAWgD,YACjB9C,cAAeA,IAAM,OAAO,qBAAmC,EAC/D2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,eACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CACI5C,KAAMI,EAAWiD,MACjB/C,cAAeA,IAAM,OAAO,qBAAmC,EAC/D2B,YAAa,CAACC,CAAa,EAC3B3B,KAAM,CACFC,MAAO,QACPC,MAAO,CACHC,EAAW+B,UACX/B,EAAWgC,YACXhC,EAAWiC,cACXjC,EAAWkC,WAAW,IAIlC,CAAE5C,KAAM,KAAMM,cAAeA,IAAM,OAAO,qBAAqD,CAAC,CAAE,EAEzG,EAGL,SAASsB,GAAoBD,EAAqB2B,EAAwB,CACtE,GAAI,CAACA,EAAYC,KAAI,GAAM,CAACD,EAAYC,KAAI,GAAIC,UAC5C,MAAO,IAAIpD,EAAWc,OAAO,GAGjC,OAAQoC,EAAYC,KAAI,GAAIE,YAAYC,SAAQ,CAC5C,KAAKhD,EAAWyB,QACZ,MAAO,IAAI/B,EAAW2B,gBAAgB,GAC1C,KAAKrB,EAAWiD,OACZ,MAAO,IAAIvD,EAAW2B,gBAAgB,GAC1C,QACI,MAAO,IAAI3B,EAAW4C,cAAc,EAC5C,CACJ,CChWA,IAAMY,GAAmB,IACrBC,IAA8C,IAAM,CACtD,IAAMC,EAAN,MAAMA,CAA8B,CAKlC,YAAYC,EAAKC,EAAUC,EAAMC,EAAeC,EAAY,CAC1D,KAAK,IAAMJ,EACX,KAAK,SAAWC,EAChB,KAAK,KAAOC,EACZ,KAAK,cAAgBC,EACrB,KAAK,WAAaC,EAClB,KAAK,wBAA0B,KAC/B,KAAK,UAAYC,EAAOC,GAA2B,CACjD,SAAU,EACZ,CAAC,EACD,KAAK,mBAAqBD,EAAOE,GAAuC,CACtE,SAAU,EACZ,CAAC,CACH,CAEA,aAAc,CAOZ,KAAK,SAAS,MAAM,CACtB,CAIA,UAAW,CAIT,IAAMC,EAAS,IAAM,KAAK,YAAc,OAAO,qBAA6B,EAAE,KAAKC,GAAKA,CAAC,EACrFC,EACJ,OAAI,KAAK,mBACPA,EAAoB,KAAK,mBAAmBF,CAAM,EAElDE,EAAoBF,EAAO,EAEtBE,EAAkB,MAAMC,GAAK,CAClC,MAAM,IAAIC,GAAc,KAA2G,EAAiN,CACtV,CAAC,EAAE,KAAK,CAAC,CACP,mBAAAC,EACA,+BAAAC,CACF,IAAM,CAGJ,KAAK,QAAUD,EAAc,KAAK,cAAe,KAAK,GAAG,EACzD,IAAME,EAAkB,IAAID,EAA0B,KAAK,SAAU,KAAK,QAAS,KAAK,IAAI,EAC5F,YAAK,SAAWC,EACTA,CACT,CAAC,CACH,CASA,eAAeC,EAAaC,EAAc,CACxC,IAAMC,EAAW,KAAK,SAAS,eAAeF,EAAaC,CAAY,EACvE,GAAIC,EAAS,aAAU,EAErB,OAAOA,EAGL,OAAOA,EAAS,uBAA0B,YAC5CA,EAAS,sBAAwB,IAGnC,IAAMC,EAAkB,IAAIC,GAA0BF,CAAQ,EAG9D,OAAID,GAAc,MAAO,WAAgB,CAAC,KAAK,0BAC7C,KAAK,wBAA0B,KAAK,SAAS,GAE/C,KAAK,yBAAyB,KAAKI,GAA4B,CAC7D,IAAMC,EAAoBD,EAAyB,eAAeL,EAAaC,CAAY,EAC3FE,EAAgB,IAAIG,CAAiB,EACrC,KAAK,WAAW,OAAO,EAAiD,CAC1E,CAAC,EAAE,MAAMX,GAAK,CAEZQ,EAAgB,IAAID,CAAQ,CAC9B,CAAC,EACMC,CACT,CACA,OAAQ,CACN,KAAK,SAAS,QAAQ,CACxB,CACA,KAAM,CACJ,KAAK,SAAS,MAAM,CACtB,CACA,mBAAoB,CAClB,OAAO,KAAK,SAAS,oBAAoB,GAAK,QAAQ,QAAQ,CAChE,CAYF,EAVIpB,EAAK,UAAO,SAA+CwB,EAAmB,CACzEC,GAAiB,CACtB,EAGAzB,EAAK,WAA0B0B,EAAmB,CAChD,MAAO1B,EACP,QAASA,EAA8B,SACzC,CAAC,EA9GL,IAAMD,EAANC,EAiHA,OAAOD,CACT,GAAG,EAQGsB,GAAN,KAAgC,CAC9B,YAAYnB,EAAU,CACpB,KAAK,SAAWA,EAEhB,KAAK,OAAS,CAAC,EACf,KAAK,WAAQ,CACf,CACA,IAAIyB,EAAM,CAER,GADA,KAAK,SAAWA,EACZ,KAAK,SAAW,KAAM,CAGxB,QAAWC,KAAM,KAAK,OACpBA,EAAGD,CAAI,EAIT,KAAK,OAAS,IAChB,CACF,CACA,IAAI,MAAO,CACT,OAAO,KAAK,SAAS,IACvB,CACA,SAAU,CACR,KAAK,OAAS,KACd,KAAK,SAAS,QAAQ,CACxB,CACA,cAAcE,EAAMC,EAAW,CAC7B,OAAO,KAAK,SAAS,cAAcD,EAAMC,CAAS,CACpD,CACA,cAAcC,EAAO,CACnB,OAAO,KAAK,SAAS,cAAcA,CAAK,CAC1C,CACA,WAAWA,EAAO,CAChB,OAAO,KAAK,SAAS,WAAWA,CAAK,CACvC,CACA,IAAI,aAAc,CAChB,OAAO,KAAK,SAAS,WACvB,CACA,YAAYC,EAAQC,EAAU,CAC5B,KAAK,SAAS,YAAYD,EAAQC,CAAQ,CAC5C,CACA,aAAaD,EAAQC,EAAUC,EAAUC,EAAQ,CAC/C,KAAK,SAAS,aAAaH,EAAQC,EAAUC,EAAUC,CAAM,CAC/D,CACA,YAAYH,EAAQI,EAAUC,EAAe,CAC3C,KAAK,SAAS,YAAYL,EAAQI,EAAUC,CAAa,CAC3D,CACA,kBAAkBC,EAAgBC,EAAiB,CACjD,OAAO,KAAK,SAAS,kBAAkBD,EAAgBC,CAAe,CACxE,CACA,WAAWC,EAAM,CACf,OAAO,KAAK,SAAS,WAAWA,CAAI,CACtC,CACA,YAAYA,EAAM,CAChB,OAAO,KAAK,SAAS,YAAYA,CAAI,CACvC,CACA,aAAaC,EAAIZ,EAAME,EAAOD,EAAW,CACvC,KAAK,SAAS,aAAaW,EAAIZ,EAAME,EAAOD,CAAS,CACvD,CACA,gBAAgBW,EAAIZ,EAAMC,EAAW,CACnC,KAAK,SAAS,gBAAgBW,EAAIZ,EAAMC,CAAS,CACnD,CACA,SAASW,EAAIZ,EAAM,CACjB,KAAK,SAAS,SAASY,EAAIZ,CAAI,CACjC,CACA,YAAYY,EAAIZ,EAAM,CACpB,KAAK,SAAS,YAAYY,EAAIZ,CAAI,CACpC,CACA,SAASY,EAAIC,EAAOX,EAAOY,EAAO,CAChC,KAAK,SAAS,SAASF,EAAIC,EAAOX,EAAOY,CAAK,CAChD,CACA,YAAYF,EAAIC,EAAOC,EAAO,CAC5B,KAAK,SAAS,YAAYF,EAAIC,EAAOC,CAAK,CAC5C,CACA,YAAYF,EAAIZ,EAAME,EAAO,CAGvB,KAAK,aAAaF,CAAI,GACxB,KAAK,OAAO,KAAKV,GAAYA,EAAS,YAAYsB,EAAIZ,EAAME,CAAK,CAAC,EAEpE,KAAK,SAAS,YAAYU,EAAIZ,EAAME,CAAK,CAC3C,CACA,SAASS,EAAMT,EAAO,CACpB,KAAK,SAAS,SAASS,EAAMT,CAAK,CACpC,CACA,OAAOa,EAAQC,EAAWC,EAAU,CAGlC,OAAI,KAAK,aAAaD,CAAS,GAC7B,KAAK,OAAO,KAAK1B,GAAYA,EAAS,OAAOyB,EAAQC,EAAWC,CAAQ,CAAC,EAEpE,KAAK,SAAS,OAAOF,EAAQC,EAAWC,CAAQ,CACzD,CACA,aAAaC,EAAiB,CAE5B,OAAO,KAAK,SAAW,MAAQA,EAAgB,WAAWjD,EAAgB,CAC5E,CACF,EAMMU,GAAqD,IAAIwC,GAAoE,EAAE,EA6BrI,SAASC,GAAuBC,EAAO,aAAc,CACnD,OAAAC,GAAwB,mBAAmB,EACpCC,GAAyB,CAAC,CAC/B,QAASC,GACT,WAAY,CAACpD,EAAKkB,EAAUhB,IACnB,IAAIJ,GAA8BE,EAAKkB,EAAUhB,EAAM+C,CAAI,EAEpE,KAAM,CAACI,GAAUC,GAAsBC,CAAM,CAC/C,EAAG,CACD,QAASC,GACT,SAAUP,IAAS,OAAS,iBAAmB,mBACjD,CAAC,CAAC,CACJ,CC/QA,IAAaQ,IAAoB,IAAA,CAA3B,IAAOA,EAAP,MAAOA,CAAoB,CAC7BC,YACYC,EAAoB,CAApB,KAAAA,QAAAA,CACT,CAGHC,UAAUC,EAAuBC,EAAiB,CAC9C,IAAMC,EAAY,KAAKJ,SAASK,KAAI,GAAIC,UAEpCC,EAAUL,EAAIK,QAEdH,IACAG,EAAUA,EAAQC,OAAO,YAAaJ,CAAS,GAGnD,IAAMK,EAAYP,EAAIQ,MAAM,CAAEH,QAAAA,CAAO,CAAE,EAIvC,OAFeJ,EAAKQ,OAAOF,CAAS,EAAEG,KAAKC,GAAW,CAAE,CAG5D,yCApBSf,GAAoBgB,GAAAC,CAAA,CAAA,CAAA,wBAApBjB,EAAoBkB,QAApBlB,EAAoBmB,UAAAC,WADP,MAAM,CAAA,EAC1B,IAAOpB,EAAPqB,SAAOrB,CAAoB,GAAA,ECQ3B,SAAUsB,IAAU,CACtB,OAAOC,SAASC,qBAAqB,MAAM,EAAE,CAAC,EAAEC,IACpD,CAGA,IAAMC,GAAQ,CACVC,GACAC,GACAC,GACAC,EAAc,EAGLC,GAA+B,CACxCC,UAAW,CACP,CAAEC,QAAS,WAAYC,WAAYZ,GAAYa,KAAM,CAAA,CAAE,EACvDC,GAAsB,EACtBC,GAAkBC,GAAsB,CAAE,EAC1CC,GAAcC,GAAYC,GAAyB,CAAE,EACrDC,GAA2B,CAAEC,gBAAiB,EAAI,CAAE,EACpD,GAAGjB,GACHkB,GAAoB,CAChBC,EAAmB,CACtB,EACDC,GACIC,GAAwB,CAAEC,UAAW,IAAKC,cAAe,EAAI,CAAE,EAC/DC,GAAgB,EAChBC,GAAkB,CAAE,EAMxB,CACIlB,QAASmB,GACTC,SAAU,CAAEC,WAAY,SAAS,GAErCC,GACAC,GAKA,CACIvB,QAASwB,GACTC,SAAUC,GACVC,MAAO,IAEX,CACI3B,QAAS4B,GACTH,SAAUI,GACb,GC9DTC,GAAqBC,GAAcC,EAAS,EACvCC,MAAOC,GAAQC,QAAQC,MAAMF,CAAG,CAAC","names":["AppComponent","constructor","iconRegistry","sanitizer","themeService","inject","ThemeService","appService","AppService","AllSchoolYearsSub","toSignal","AllSchoolYears$","initialValue","CurrentSchoolYearSub","CurrentSchoolYear$","addSvgIcon","bypassSecurityTrustResourceUrl","loadTheme","ɵɵdirectiveInject","MatIconRegistry","DomSanitizer","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","template","rf","ctx","ɵɵelement","RouterOutlet","encapsulation","_AppComponent","_c0","_c1","_c2","_c3","MatDrawerContainer_Conditional_0_Template","rf","ctx","_r1","ɵɵgetCurrentView","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","ctx_r1","ɵɵnextContext","ɵɵresetView","ɵɵelementEnd","ɵɵclassProp","MatDrawerContainer_Conditional_3_Template","ɵɵprojection","_c4","_c5","MatSidenavContainer_Conditional_0_Template","MatSidenavContainer_Conditional_3_Template","_c6","matDrawerAnimations","trigger","state","style","transition","animate","MAT_DRAWER_DEFAULT_AUTOSIZE","InjectionToken","MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY","MAT_DRAWER_CONTAINER","MatDrawerContent","_MatDrawerContent","CdkScrollable","_changeDetectorRef","_container","elementRef","scrollDispatcher","ngZone","__ngFactoryType__","ɵɵdirectiveInject","ChangeDetectorRef","forwardRef","MatDrawerContainer","ElementRef","ScrollDispatcher","NgZone","ɵɵdefineComponent","rf","ctx","ɵɵstyleProp","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","_c0","ɵɵprojectionDef","ɵɵprojection","MatDrawer","_MatDrawer","value","coerceBooleanProperty","_elementRef","_focusTrapFactory","_focusMonitor","_platform","_ngZone","_interactivityChecker","_doc","Subject","EventEmitter","filter","o","map","e","mapTo","inject","Injector","takeUntil","opened","fromEvent","event","hasModifierKey","distinctUntilChanged","x","y","fromState","toState","element","options","callback","selector","elementToFocus","afterNextRender","focusOrigin","activeEl","openedVia","isOpen","result","restoreFocus","resolve","take","open","newPosition","parent","FocusTrapFactory","FocusMonitor","Platform","InteractivityChecker","DOCUMENT","ɵɵviewQuery","_c1","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵsyntheticHostListener","$event","ɵɵsyntheticHostProperty","ɵɵattribute","ɵɵclassProp","ɵɵelementStart","ɵɵelementEnd","matDrawerAnimations","_MatDrawerContainer","_dir","_element","viewportRuler","defaultAutosize","_animationMode","QueryList","startWith","drawer","item","debounceTime","left","right","width","AfterRenderPhase","merge","isAdd","classList","className","Directionality","ViewportRuler","ANIMATION_MODULE_TYPE","dirIndex","ɵɵcontentQuery","_c3","_c2","ɵɵtemplate","MatDrawerContainer_Conditional_0_Template","MatDrawerContainer_Conditional_3_Template","ɵɵconditional","ɵɵadvance","MatSidenavContent","_MatSidenavContent","changeDetectorRef","container","MatSidenavContainer","MatSidenav","_MatSidenav","coerceNumberProperty","ɵMatSidenav_BaseFactory","ɵɵgetInheritedFactory","_MatSidenavContainer","ɵMatSidenavContainer_BaseFactory","_c5","_c4","MatSidenavContainer_Conditional_0_Template","MatSidenavContainer_Conditional_3_Template","_c6","MatSidenavModule","_MatSidenavModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CdkScrollableModule","onSideNavChange","trigger","state","style","transition","animate","onMainContentChange","animateText","opacity","SidenavService","constructor","animateText","signal","mainContentChange","sidenavState","AnimateTextChange","asReadonly","MainContentChange","SidenavState","isSidenavOpened","sidenav","opened","setSidenav","open","close","mode","toggle","updateMainContentChange","value","update","updateSideNavState","updateAnimateText","expandBeforeToggle","setTimeout","onSidenavToggle","factory","ɵfac","providedIn","_SidenavService","ɵɵelementContainerStart","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵpureFunction1","_c0","ctx_r0","RoutePaths","Users","AnimateTextChange","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","onSidenavToggle","ɵɵtextInterpolate","SidenavStateChange","SidenavComponent","constructor","authService","inject","AuthService","sidenavService","SidenavService","SidenavState","hideMiniButton","input","mode","user","required","Logout","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵtemplate","SidenavComponent_Conditional_29_Template","SidenavComponent_Conditional_36_Template","AdmissionsApplications","Recommendations","Comments","Departments","TermWindows","ɵɵconditional","tmp_11_0","CurrentRole","IsDeveloper","IsSystemAdmin","RouterModule","RouterLink","RouterLinkActive","MatButtonModule","MatButton","MatIconModule","MatIcon","MatListModule","MatNavList","MatListItem","MatListItemIcon","MatListSubheaderCssMatStyler","MatDivider","styles","data","animation","onSideNavChange","animateText","_SidenavComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵtemplate","UserMenuButtonComponent_Conditional_0_Conditional_3_Conditional_0_Template","ɵɵconditional","tmp_4_0","ctx_r2","userService","User","IsImpersonation","ɵɵadvance","ɵɵtextInterpolate2","user_r2","FirstName","LastName","UserMenuButtonComponent_Conditional_0_Conditional_3_Template","ɵɵelement","ɵɵlistener","ɵɵrestoreView","_r1","ɵɵnextContext","ɵɵresetView","logout","ɵɵproperty","menu_r4","IsSmallDisplay","ɵɵtextInterpolate","CurrentRole","RoleName","ɵɵpureFunction1","_c0","RoutePaths","Dashboard","UserMenuButtonComponent","constructor","authService","inject","AuthService","router","Router","UserService","screensizeService","ScreenSizeService","computed","ScreenSize","isAdminDashboard","login","navigate","Login","Logout","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","UserMenuButtonComponent_Conditional_0_Template","UserMenuButtonComponent_Conditional_1_Template","tmp_0_0","CommonModule","RouterModule","RouterLink","RouterLinkActive","MatButtonModule","MatButton","MatDividerModule","MatDivider","MatIconModule","MatIcon","MatListModule","MatList","MatListItem","MatListItemIcon","MatListItemLine","MatListItemTitle","MatMenuModule","MatMenu","MatMenuItem","MatMenuTrigger","styles","_UserMenuButtonComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","ctx_r0","SiteName","ToolbarComponent","constructor","appService","inject","AppService","authService","AuthService","sidenavService","SidenavService","screensizeService","ScreenSizeService","numOfNotifications","SystemRole","SITE_NAME","systemAlerts$","GetSystemAlert","isAdminDashboard","pageTitle","ngAfterViewInit","setSidenav","snav","logout","Logout","selectors","inputs","notifnav","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵlistener","toggle","ɵɵtemplate","ToolbarComponent_Conditional_5_Template","ɵɵelement","ɵɵconditional","ScreenSize","IsSmallDisplay","ɵɵproperty","MatButtonModule","MatIconButton","MatIconModule","MatIcon","MatSidenavModule","MatToolbarModule","MatToolbar","MatToolbarRow","UserMenuButtonComponent","styles","changeDetection","_ToolbarComponent","AdminLayoutComponent","constructor","appsService","inject","AdmissionsApplicationsService","detailsPanelService","DetailsPanelService","screensizeService","ScreenSizeService","sidenavService","SidenavService","userService","UserService","RoutePaths","AnimateTextChange","SidenavStateChange","SidenavState","IsSmallDisplay","computed","ScreenSize","IsMobile","IsXs","MediaMatches","user","User","MainContentChange","SideNavStateChange","snav","viewChild","required","detailsPanel","effect","setSidenav","panel","updateMainContentChange","closedStart","openedStart","expandBeforeToggle","updateSideNavState","updateAnimateText","setTimeout","toggle","toggleSidenav","selectors","viewQuery","rf","ctx","ɵɵelementStart","ɵɵelement","ɵɵlistener","i0","ɵɵrestoreView","_r1","ɵɵresetView","ɵɵelementEnd","ɵɵtemplate","AdminLayoutComponent_ng_template_9_Template","ɵɵadvance","ɵɵproperty","snav_r2","mode","ɵɵpipeBind1","panelPortal","CommonModule","AsyncPipe","CdkPortalOutlet","RouterModule","RouterOutlet","MatButtonModule","MatIconModule","MatSidenavModule","MatSidenav","MatSidenavContainer","MatSidenavContent","SidenavComponent","ToolbarComponent","styles","data","animation","onMainContentChange","onSideNavChange","animateText","_AdminLayoutComponent","LoginLayoutComponent","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","RouterModule","RouterOutlet","styles","_LoginLayoutComponent","Authenticated","route","state","router","inject","Router","splashService","SplashService","userService","UserService","routeOk","User","AuthToken","createUrlTree","RoutePaths","Landing","key","matchingRoles","matchingCurrentRole","data","routeRoles","includes","SystemRole","All","some","nr","Roles","find","ur","RoleName","CurrentRole","IsMultiRole","SnackbarError","UnsavedChangesGuard","canDeactivate","target","CanDeactivate","factory","ɵfac","_UnsavedChangesGuard","UnsavedChangesService","constructor","_tracker","_nativeChecker","checker","event","msg","window","returnValue","_nativeListener","ClearTracking","removeEventListener","CheckTracker","self","result","obsResult","Promise","from","Observable","of","pipe","take","HasTracker","SetTracking","tracker","bind","addEventListener","_UnsavedChangesService","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","ctx_r0","SiteName","StudentToolbarComponent","constructor","screensizeService","inject","ScreenSizeService","SystemRole","SITE_NAME","IsMobile","computed","ScreenSize","IsSmallDisplay","isAdminDashboard","pageTitle","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","StudentToolbarComponent_Conditional_2_Template","ɵɵelement","ɵɵconditional","ɵɵproperty","MatButtonModule","MatIconModule","MatToolbarModule","MatToolbar","MatToolbarRow","UserMenuButtonComponent","styles","changeDetection","_StudentToolbarComponent","StudentLayoutComponent","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","RouterModule","RouterOutlet","StudentToolbarComponent","styles","_StudentLayoutComponent","APP_ROUTES","path","component","LoginLayoutComponent","children","RoutePaths","Classlink","loadComponent","data","title","roles","SystemRole","All","Login","ConfirmAccount","ComingSoon","Register","RecommendStudent","RecommendationSubmissionComplete","Landing","url","document","location","href","Offline","redirectTo","pathMatch","Dashboard","route","redirectBasedOnAuth","inject","UserService","DashboardStudent","StudentLayoutComponent","canActivate","Authenticated","Student","ApplyForAdmissions","Parent","AdmissionsApplicationEdit","AdminLayoutComponent","AdmissionsApplicationAdd","Developer","SystemAdmin","DistrictAdmin","SchoolAdmin","AdmissionsApplications","AdmissionsApplicationDetails","Comments","DashboardAdmin","Departments","RecommendationDetails","Recommendations","TermWindows","Users","userService","User","AuthToken","CurrentRole","RoleName","Reader","ANIMATION_PREFIX","AsyncAnimationRendererFactory","_AsyncAnimationRendererFactory","doc","delegate","zone","animationType","moduleImpl","inject","ChangeDetectionScheduler","ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN","loadFn","m","moduleImplPromise","e","RuntimeError","ɵcreateEngine","ɵAnimationRendererFactory","rendererFactory","hostElement","rendererType","renderer","dynamicRenderer","DynamicDelegationRenderer","animationRendererFactory","animationRenderer","__ngFactoryType__","ɵɵinvalidFactory","ɵɵdefineInjectable","impl","fn","name","namespace","value","parent","newChild","refChild","isMove","oldChild","isHostElement","selectorOrNode","preserveContent","node","el","style","flags","target","eventName","callback","propOrEventName","InjectionToken","provideAnimationsAsync","type","performanceMarkFeature","makeEnvironmentProviders","RendererFactory2","DOCUMENT","DomRendererFactory2","NgZone","ANIMATION_MODULE_TYPE","AuthTokenInterceptor","constructor","userSvc","intercept","req","next","authToken","User","AuthToken","headers","append","clonedReq","clone","handle","pipe","shareReplay","ɵɵinject","UserService","factory","ɵfac","providedIn","_AuthTokenInterceptor","getBaseUrl","document","getElementsByTagName","href","PIPES","DatePipe","RoleTextPipe","TitleCasePipe","SchoolYearPipe","appConfig","providers","provide","useFactory","deps","provideAnimationsAsync","provideHttpClient","withInterceptorsFromDi","provideRouter","APP_ROUTES","withComponentInputBinding","provideZoneChangeDetection","eventCoalescing","importProvidersFrom","MatNativeDateModule","provideNgxWebstorage","withNgxWebstorageConfig","separator","caseSensitive","withLocalStorage","withSessionStorage","MAT_FORM_FIELD_DEFAULT_OPTIONS","useValue","appearance","UnsavedChangesGuard","UnsavedChangesService","HTTP_INTERCEPTORS","useClass","AuthTokenInterceptor","multi","REC_ID_INECTION_TOKEN","DetailsPanelService","bootstrapApplication","AppComponent","appConfig","catch","err","console","error"],"x_google_ignoreList":[1,18]}