cloud-ide-layout 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +466 -13
- package/esm2022/lib/cloud-ide-layout.routes.mjs +24 -10
- package/esm2022/lib/layout/console/console-wrapper/console-wrapper.component.mjs +6 -6
- package/esm2022/lib/layout/console/console.service.mjs +28 -0
- package/esm2022/lib/layout/footer/footer-wrapper/footer-wrapper.component.mjs +16 -8
- package/esm2022/lib/layout/footer/footer.service.mjs +28 -0
- package/esm2022/lib/layout/header/header-wrapper/header-wrapper.component.mjs +69 -18
- package/esm2022/lib/layout/header/header.service.mjs +17 -6
- package/esm2022/lib/layout/home/home-wrapper/home-wrapper.component.mjs +194 -7
- package/esm2022/lib/layout/layout/layout-wrapper/layout-wrapper.component.mjs +18 -9
- package/esm2022/lib/layout/request/request-wrapper/request-wrapper.component.mjs +54 -6
- package/esm2022/lib/layout/request/request.service.mjs +235 -0
- package/esm2022/lib/layout/request/tab-content/tab-content.component.mjs +84 -0
- package/esm2022/lib/layout/shared/shared-wrapper/shared-wrapper.component.mjs +32 -20
- package/esm2022/lib/layout/shared/shared.service.mjs +490 -14
- package/esm2022/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.mjs +480 -15
- package/esm2022/lib/layout/sidebar/sidebar.service.mjs +20 -7
- package/esm2022/lib/layout/sidedrawer/cide-lyt-drawer-base.class.mjs +40 -0
- package/esm2022/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.mjs +296 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.mjs +175 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.mjs +51 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.mjs +254 -9
- package/esm2022/lib/layout/sidedrawer/sidedrawer.service.mjs +70 -0
- package/esm2022/lib/services/app-state/app-state-helper.service.mjs +222 -0
- package/esm2022/lib/services/app-state/app-state.service.mjs +256 -0
- package/esm2022/lib/services/app-state/index.mjs +3 -0
- package/esm2022/lib/services/cache-manager/cache-manager.service.mjs +112 -0
- package/esm2022/lib/services/file-manager/file-manager.service.mjs +7 -7
- package/esm2022/lib/services/tab-state.service.mjs +128 -0
- package/esm2022/lib/services/theme/theme.service.mjs +151 -0
- package/esm2022/lib/services/user-status/user-status.service.mjs +135 -0
- package/esm2022/lib/utils/custom-route-reuse-strategy.mjs +61 -0
- package/esm2022/public-api.mjs +6 -1
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-CW1h3qH0.mjs +2914 -0
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-CW1h3qH0.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-drawer-theme.component-CoOmLWB_.mjs +443 -0
- package/fesm2022/cloud-ide-layout-drawer-theme.component-CoOmLWB_.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-CBqNAcEP.mjs +197 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-CBqNAcEP.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-sidedrawer-notes.component-cZtT-79M.mjs +260 -0
- package/fesm2022/cloud-ide-layout-sidedrawer-notes.component-cZtT-79M.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout.mjs +1 -261
- package/fesm2022/cloud-ide-layout.mjs.map +1 -1
- package/lib/cloud-ide-layout.routes.d.ts +1 -0
- package/lib/layout/console/console-wrapper/console-wrapper.component.d.ts +3 -3
- package/lib/layout/console/console.service.d.ts +9 -0
- package/lib/layout/footer/footer-wrapper/footer-wrapper.component.d.ts +7 -3
- package/lib/layout/footer/footer.service.d.ts +9 -0
- package/lib/layout/header/header-wrapper/header-wrapper.component.d.ts +17 -9
- package/lib/layout/header/header.service.d.ts +4 -3
- package/lib/layout/home/home-wrapper/home-wrapper.component.d.ts +90 -1
- package/lib/layout/request/request-wrapper/request-wrapper.component.d.ts +10 -1
- package/lib/layout/request/request.service.d.ts +60 -0
- package/lib/layout/request/tab-content/tab-content.component.d.ts +19 -0
- package/lib/layout/shared/shared-wrapper/shared-wrapper.component.d.ts +4 -5
- package/lib/layout/shared/shared.service.d.ts +104 -6
- package/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.d.ts +135 -6
- package/lib/layout/sidebar/sidebar.service.d.ts +3 -2
- package/lib/layout/sidedrawer/cide-lyt-drawer-base.class.d.ts +16 -0
- package/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.d.ts +71 -0
- package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.d.ts +48 -0
- package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.d.ts +13 -0
- package/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.d.ts +28 -3
- package/lib/layout/sidedrawer/sidedrawer.service.d.ts +30 -0
- package/lib/services/app-state/app-state-helper.service.d.ts +150 -0
- package/lib/services/app-state/app-state.service.d.ts +85 -0
- package/lib/services/app-state/index.d.ts +3 -0
- package/lib/services/cache-manager/cache-manager.service.d.ts +64 -0
- package/lib/services/file-manager/file-manager.service.d.ts +0 -2
- package/lib/services/tab-state.service.d.ts +79 -0
- package/lib/services/theme/theme.service.d.ts +71 -0
- package/lib/services/user-status/user-status.service.d.ts +57 -0
- package/lib/utils/custom-route-reuse-strategy.d.ts +15 -0
- package/package.json +2 -2
- package/public-api.d.ts +3 -0
- package/src/lib/assets/css/cide-lyt-style.scss +182 -0
- package/src/lib/assets/css/cide-lyt-variable.scss +119 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-BV7ptL0Y.mjs +0 -14
- package/fesm2022/cloud-ide-layout-home-wrapper.component-BV7ptL0Y.mjs.map +0 -1
|
@@ -1,11 +1,198 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { CideLytSharedWrapperComponent } from '../../shared/shared-wrapper/shared-wrapper.component';
|
|
3
|
+
import { Component, ViewChild, Renderer2, inject, ChangeDetectorRef } from '@angular/core';
|
|
4
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
5
|
+
import { CideLytSidebarService } from '../../sidebar/sidebar.service';
|
|
6
|
+
import { CideIconComponent } from 'cloud-ide-element';
|
|
7
|
+
import { TooltipDirective } from 'cloud-ide-element';
|
|
8
|
+
import { AppStateHelperService } from '../../../services/app-state/app-state-helper.service';
|
|
9
|
+
import { Router } from '@angular/router';
|
|
2
10
|
import * as i0 from "@angular/core";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
11
|
+
import * as i1 from "../../request/request.service";
|
|
12
|
+
import * as i2 from "@angular/common";
|
|
13
|
+
export class CideLytHomeWrapperComponent extends CideLytSharedWrapperComponent {
|
|
14
|
+
constructor(requestService) {
|
|
15
|
+
super();
|
|
16
|
+
this.requestService = requestService;
|
|
17
|
+
this.shared_wrapper_setup_param = {
|
|
18
|
+
sypg_page_code: "cide_lyt_home"
|
|
19
|
+
};
|
|
20
|
+
this.sidebarService = inject(CideLytSidebarService);
|
|
21
|
+
this.sanitizer = inject(DomSanitizer);
|
|
22
|
+
this.renderer = inject(Renderer2);
|
|
23
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
24
|
+
this.appState = inject(AppStateHelperService);
|
|
25
|
+
this.router = inject(Router);
|
|
26
|
+
this.moduleStylePresets = [
|
|
27
|
+
{ accentColor: "#8B5CF6" }, // purple
|
|
28
|
+
{ accentColor: "#EC4899" }, // pink
|
|
29
|
+
{ accentColor: "#14B8A6" }, // teal
|
|
30
|
+
{ accentColor: "#0EA5E9" }, // sky
|
|
31
|
+
{ accentColor: "#F59E42" }, // orange
|
|
32
|
+
{ accentColor: "#6366F1" }, // indigo
|
|
33
|
+
{ accentColor: "#22C55E" }, // green
|
|
34
|
+
{ accentColor: "#EF4444" }, // red
|
|
35
|
+
{ accentColor: "#F59E0B" }, // amber
|
|
36
|
+
{ accentColor: "#10B981" }, // emerald
|
|
37
|
+
{ accentColor: "#06B6D4" }, // cyan
|
|
38
|
+
{ accentColor: "#6B7280" }, // gray
|
|
39
|
+
{ accentColor: "#8B5CF6" }, // violet (same as purple for fallback)
|
|
40
|
+
{ accentColor: "#D946EF" } // fuchsia
|
|
41
|
+
];
|
|
42
|
+
this.modulesSectionConfig = {
|
|
43
|
+
title: "Subscribed Modules",
|
|
44
|
+
viewAllLinkText: "View All Modules →",
|
|
45
|
+
viewAllLinkHref: "#all-modules",
|
|
46
|
+
showViewAllLink: true
|
|
47
|
+
};
|
|
48
|
+
this.modulesData = [];
|
|
49
|
+
this.draggedItem = null;
|
|
50
|
+
this.placeholder = null;
|
|
51
|
+
this.cardsData = [
|
|
52
|
+
{ id: "card1", title: "Key Deadlines", type: "deadlines", colSpan: "md:tw-col-span-1 xl:tw-col-span-1", accentColor: "purple", urgentText: "Urgent", items: [{ text: "Midterm Paper: PHIL201", subtext: "Due: Tomorrow, 11:59 PM" }, { text: "Lab Report: CHEM110", subtext: "Due: In 3 days" }], link: { text: "View All Deadlines →", href: "#" } },
|
|
53
|
+
{ id: "card2", title: "Recent Grades", type: "grades", colSpan: "md:tw-col-span-1 xl:tw-col-span-1", accentColor: "green", items: [{ subject: "PHYS101 Quiz 3", grade: "A-", color: "tw-text-green-600" }, { subject: "ENGL220 Essay", grade: "B+", color: "tw-text-yellow-600" }], link: { text: "Full Gradebook →", href: "#" } },
|
|
54
|
+
{ id: "card7", title: "Study Streak: 12 Days!", type: "studyStreak", colSpan: "md:tw-col-span-2 xl:tw-col-span-1", accentColor: "yellow", progress: "80%", description: "Keep the momentum going!" },
|
|
55
|
+
{ id: "card6", title: "Campus Events", type: "events", colSpan: "md:tw-col-span-1 xl:tw-col-span-2", accentColor: "sky", items: [{ date: { month: "JUL", day: "10" }, title: "Workshop: AI Ethics", details: "Tech Hub, 3:00 PM - 5:00 PM", themeColor: "tw-bg-sky-500" }, { date: { month: "JUL", day: "12" }, title: "Student Union Mixer", details: "Quad, 7:00 PM onwards", themeColor: "tw-bg-red-500" }], link: { text: "Full Events Calendar →", href: "#" } },
|
|
56
|
+
{ id: "card8", title: "Quick Stats", type: "quickStats", colSpan: "md:tw-col-span-1 xl:tw-col-span-1", accentColor: "indigo", stats: [{ label: "Course Completion", value: "75%", gradient: "tw-from-green-400 tw-to-blue-500" }, { label: "Pending Assignments", value: "3", valueClass: "tw-text-2xl tw-font-bold tw-text-yellow-500" }] },
|
|
57
|
+
{ id: "card4", title: "Campus News & Updates", type: "news", colSpan: "md:tw-col-span-2 xl:tw-col-span-3", accentColor: "blue", items: [{ title: "Annual Career Fair: Next Wednesday!", details: "Main Hall, 10 AM - 4 PM" }, { title: 'Guest Lecture: "AI in Modern Society"', details: "Speaker: Dr. Eva Rostova. July 18th" }], link: { text: "All News →", href: "#" } },
|
|
58
|
+
{ id: "card9", title: "Discussion Forums", type: "discussions", colSpan: "md:tw-col-span-1 xl:tw-col-span-2", accentColor: "emerald", insightTag: "3 Hot Topics", items: [{ topic: "Debate: Future of Renewable Energy", forum: "ENV101 Forum", lastPost: "5 mins ago" }, { topic: "Help with CS210 Algorithm", forum: "CS Study Group", lastPost: "23 mins ago" }], link: { text: "Go to Forums →", href: "#" } },
|
|
59
|
+
{ id: "card5", title: "My Courses", type: "courses", colSpan: "md:tw-col-span-1 xl:tw-col-span-1", accentColor: "pink", items: [{ name: "ECON101: Microeconomics", professor: "Prof. Sharma", colorTheme: "pink" }, { name: "CS210: Data Structures", professor: "Dr. Carter", colorTheme: "indigo" }], link: { text: "Course Catalog →", href: "#" } }
|
|
60
|
+
];
|
|
61
|
+
// Sanitize SVG icons in the hardcoded cardsData
|
|
62
|
+
this.cardsData = this.cardsData.map(card => ({
|
|
63
|
+
...card,
|
|
64
|
+
items: card.items?.map(item => ({
|
|
65
|
+
...item,
|
|
66
|
+
safeIconSVG: item.iconSVG ? this.sanitizer.bypassSecurityTrustHtml(item.iconSVG) : undefined
|
|
67
|
+
}))
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
ngOnInit() {
|
|
71
|
+
super.ngOnInit?.();
|
|
72
|
+
this.loadModules();
|
|
73
|
+
}
|
|
74
|
+
openModule(module) {
|
|
75
|
+
console.log(module, "module");
|
|
76
|
+
// Set the active module in app state - this will trigger sidebar updates
|
|
77
|
+
this.appState.setActiveModule(module);
|
|
78
|
+
// Navigate to the module route
|
|
79
|
+
// this.requestService.addTab(module.syme_title, `/control-panel/${module.syme_path}`);
|
|
80
|
+
this.router.navigate([`/control-panel/${module.syme_path}`]);
|
|
81
|
+
}
|
|
82
|
+
ngAfterViewInit() {
|
|
83
|
+
this.setupModuleScroller();
|
|
84
|
+
this.setupDragAndDrop();
|
|
85
|
+
}
|
|
86
|
+
loadModules() {
|
|
87
|
+
this.sidebarService?.getSidebarMenues({ syme_type: "module", sort: 'asc', syme_title: "" })?.subscribe({
|
|
88
|
+
next: (res) => {
|
|
89
|
+
const fetchedApiModules = res?.data || [];
|
|
90
|
+
this.modulesData = fetchedApiModules.map((item, index) => {
|
|
91
|
+
const stylePreset = this.moduleStylePresets[index % this.moduleStylePresets.length];
|
|
92
|
+
const insightCount = item.syme_ping_count || 0;
|
|
93
|
+
return {
|
|
94
|
+
...item,
|
|
95
|
+
accentColor: stylePreset.accentColor, // UI-only property
|
|
96
|
+
pillCount: insightCount, // UI-only property
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
this.cdr.detectChanges();
|
|
100
|
+
},
|
|
101
|
+
error: (err) => {
|
|
102
|
+
console.error('Error loading sidebar modules:', err);
|
|
103
|
+
this.modulesData = [];
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
setupModuleScroller() {
|
|
108
|
+
const modulesContainer = this.modulesContainerRef?.nativeElement;
|
|
109
|
+
const scrollPrevBtn = this.scrollPrevModuleBtnRef?.nativeElement;
|
|
110
|
+
const scrollNextBtn = this.scrollNextModuleBtnRef?.nativeElement;
|
|
111
|
+
if (modulesContainer && scrollPrevBtn && scrollNextBtn) {
|
|
112
|
+
const scrollAmount = 256;
|
|
113
|
+
const updateArrowStates = () => {
|
|
114
|
+
if (!modulesContainer)
|
|
115
|
+
return;
|
|
116
|
+
scrollPrevBtn.disabled = modulesContainer.scrollLeft <= 0;
|
|
117
|
+
scrollNextBtn.disabled = modulesContainer.scrollLeft + modulesContainer.clientWidth >= modulesContainer.scrollWidth - 1;
|
|
118
|
+
};
|
|
119
|
+
this.renderer.listen(scrollPrevBtn, 'click', () => modulesContainer.scrollBy({ left: -scrollAmount, behavior: 'smooth' }));
|
|
120
|
+
this.renderer.listen(scrollNextBtn, 'click', () => modulesContainer.scrollBy({ left: scrollAmount, behavior: 'smooth' }));
|
|
121
|
+
this.renderer.listen(modulesContainer, 'scroll', updateArrowStates);
|
|
122
|
+
new ResizeObserver(updateArrowStates).observe(modulesContainer);
|
|
123
|
+
setTimeout(updateArrowStates, 100);
|
|
124
|
+
// Remove preventDefault for wheel/touchmove to allow mouse/touch scrolling
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
setupDragAndDrop() {
|
|
128
|
+
const cardsContainer = this.cardsContainerElRef?.nativeElement;
|
|
129
|
+
if (!cardsContainer)
|
|
130
|
+
return;
|
|
131
|
+
this.placeholder = this.renderer.createElement('div');
|
|
132
|
+
this.renderer.addClass(this.placeholder, 'drag-over-placeholder');
|
|
133
|
+
this.renderer.listen(cardsContainer, 'dragstart', (e) => {
|
|
134
|
+
const target = e.target;
|
|
135
|
+
if (target.classList.contains('dashboard-card')) {
|
|
136
|
+
this.draggedItem = target;
|
|
137
|
+
// Modern ES2022+ pattern: Use microtask for immediate execution
|
|
138
|
+
Promise.resolve().then(() => this.renderer.addClass(target, 'dragging'));
|
|
139
|
+
e.dataTransfer?.setData('text/plain', target.id || 'draggable-card');
|
|
140
|
+
if (e.dataTransfer)
|
|
141
|
+
e.dataTransfer.effectAllowed = 'move';
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
this.renderer.listen(cardsContainer, 'dragend', () => {
|
|
145
|
+
if (this.draggedItem)
|
|
146
|
+
this.renderer.removeClass(this.draggedItem, 'dragging');
|
|
147
|
+
if (this.placeholder?.parentNode)
|
|
148
|
+
this.renderer.removeChild(this.placeholder.parentNode, this.placeholder);
|
|
149
|
+
this.draggedItem = null;
|
|
150
|
+
});
|
|
151
|
+
this.renderer.listen(cardsContainer, 'dragover', (e) => {
|
|
152
|
+
e.preventDefault();
|
|
153
|
+
if (!this.draggedItem)
|
|
154
|
+
return;
|
|
155
|
+
const target = e.target.closest('.dashboard-card');
|
|
156
|
+
if (target && target !== this.draggedItem) {
|
|
157
|
+
const rect = target.getBoundingClientRect();
|
|
158
|
+
const offsetY = e.clientY - rect.top;
|
|
159
|
+
if (offsetY > rect.height / 2) {
|
|
160
|
+
this.renderer.insertBefore(cardsContainer, this.placeholder, target.nextSibling);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
this.renderer.insertBefore(cardsContainer, this.placeholder, target);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
this.renderer.listen(cardsContainer, 'drop', (e) => {
|
|
168
|
+
e.preventDefault();
|
|
169
|
+
if (this.draggedItem && this.placeholder?.parentNode) {
|
|
170
|
+
this.renderer.insertBefore(this.placeholder.parentNode, this.draggedItem, this.placeholder);
|
|
171
|
+
}
|
|
172
|
+
if (this.placeholder?.parentNode)
|
|
173
|
+
this.renderer.removeChild(this.placeholder.parentNode, this.placeholder);
|
|
174
|
+
if (this.draggedItem)
|
|
175
|
+
this.renderer.removeClass(this.draggedItem, 'dragging');
|
|
176
|
+
this.draggedItem = null;
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytHomeWrapperComponent, deps: [{ token: i1.CideLytRequestService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
180
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideLytHomeWrapperComponent, isStandalone: true, selector: "cide-lyt-home-wrapper", viewQueries: [{ propertyName: "modulesContainerRef", first: true, predicate: ["modulesContainer"], descendants: true }, { propertyName: "scrollPrevModuleBtnRef", first: true, predicate: ["scrollPrevModuleBtn"], descendants: true }, { propertyName: "scrollNextModuleBtnRef", first: true, predicate: ["scrollNextModuleBtn"], descendants: true }, { propertyName: "cardsContainerElRef", first: true, predicate: ["cardsContainerEl"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"tw-p-4 sm:tw-p-6 md:tw-p-8 tw-max-w-full tw-mx-auto\">\n <header class=\"tw-mb-8 md:tw-mb-10\">\n <h1\n class=\"tw-text-3xl sm:tw-text-4xl tw-font-bold tw-text-transparent tw-bg-clip-text tw-bg-gradient-to-r tw-from-purple-600 tw-via-pink-500 tw-to-orange-500\">\n Welcome, {{ appState.getUserName() || 'User' }}!\n </h1>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-1\">Your central hub for all things college.</p>\n <p *ngIf=\"appState.getUserEmail()\" class=\"tw-text-xs tw-text-gray-400 tw-mt-1\">{{ appState.getUserEmail() }}</p>\n </header>\n\n <div class=\"tw-mb-8 md:tw-mb-10\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-5\">\n <h2 class=\"tw-text-xl tw-font-bold tw-text-gray-700\">{{ modulesSectionConfig.title }}</h2>\n <a *ngIf=\"modulesSectionConfig.showViewAllLink\" [href]=\"modulesSectionConfig.viewAllLinkHref\"\n class=\"tw-text-sm tw-font-medium tw-text-purple-600 hover:tw-text-purple-800 hover:tw-underline tw-transition-colors\">\n {{ modulesSectionConfig.viewAllLinkText }}\n </a>\n </div>\n <div class=\"tw-relative group/modules tw-max-w-full\">\n <button #scrollPrevModuleBtn aria-label=\"Scroll previous modules\"\n class=\"tw-absolute tw--left-4 tw-z-50 tw-p-2 tw-bg-white/90 tw-bg-opacity-90 tw-backdrop-blur-sm tw-rounded-full tw-shadow-lg hover:tw-bg-gray-100 tw-transition-all tw-opacity-100 md:group-hover/modules:tw-opacity-100 disabled:tw-opacity-30 disabled:tw-cursor-not-allowed tw-pointer-events-auto\"\n style=\"top: 2.875rem;\">\n <svg class=\"tw-w-5 tw-h-5 tw-text-gray-700\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n </button>\n\n <div #modulesContainer\n class=\"tw-flex tw-space-x-4 tw-pb-6 tw-overflow-x-auto tw-overflow-y-visible tw-scroll-smooth tw-snap-x tw-snap-mandatory hide-scrollbar\"\n style=\"touch-action: none; pointer-events: auto;\">\n <a *ngFor=\"let module of modulesData\" \n (click)=\"openModule(module)\"\n (keydown.enter)=\"openModule(module)\"\n (keydown.space)=\"openModule(module)\"\n class=\"module-card tw-relative tw-overflow-hidden group tw-flex-shrink-0 tw-w-60 tw-h-28 tw-bg-white tw-border tw-border-gray-200/80 tw-rounded-xl tw-p-3 tw-shadow-md hover:tw-shadow-xl tw-transition-all tw-duration-300 tw-ease-out tw-flex tw-items-center tw-space-x-4 tw-snap-start\"\n [style.--accent-color]=\"module.accentColor\" \n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Open module: ' + module.syme_title\">\n <div class=\"tw-relative tw-flex-shrink-0\">\n <div class=\"tw-w-16 tw-h-16 tw-rounded-lg tw-flex tw-items-center tw-justify-center tw-transition-all tw-duration-300 group-hover:tw-scale-105\"\n [style.backgroundColor]=\"module?.accentColor + '22'\">\n <!-- icon rendering here if needed -->\n <cide-ele-icon class=\"mpro-icon-field\" type=\"none\">{{module?.syme_icon}}</cide-ele-icon>\n </div>\n <div *ngIf=\"(module?.pillCount || 0) > 0\" class=\"tw-absolute tw--top-1.5 tw--right-1.5\">\n <span\n class=\"tw-flex tw-h-5 tw-w-5 tw-items-center tw-justify-center tw-rounded-full tw-text-white tw-text-xs tw-font-bold tw-ring-2 tw-ring-white\"\n [style.backgroundColor]=\"module?.accentColor\">{{module?.pillCount}}</span>\n </div>\n </div>\n <div class=\"tw-flex tw-flex-col tw-flex-grow tw-min-w-0\">\n <h4 class=\"tw-font-semibold tw-text-xs tw-text-gray-800 tw-truncate line-clamp-1\" cideEleTooltip\n [cideEleTooltip]=\"module.syme_title\" [tooltipDelay]=\"300\" [tooltipPlacement]=\"'top'\">\n {{module?.syme_title}}\n </h4>\n <p\n class=\"tw-text-xs tw-text-gray-400 tw-mt-0.5 tw-overflow-hidden tw-text-ellipsis tw-line-clamp-2 tw-text-justify min-h-[2.5rem]\">\n {{module?.syme_desc}}\n </p>\n </div>\n </a>\n </div>\n\n <button #scrollNextModuleBtn aria-label=\"Scroll next modules\"\n class=\"tw-absolute tw--right-4 tw-z-50 tw-p-2 tw-bg-white/90 tw-bg-opacity-90 tw-backdrop-blur-sm tw-rounded-full tw-shadow-lg hover:tw-bg-gray-100 tw-transition-all tw-opacity-100 md:group-hover/modules:tw-opacity-100 disabled:tw-opacity-30 disabled:tw-cursor-not-allowed tw-pointer-events-auto\"\n style=\"top: 2.875rem;\">\n <svg class=\"tw-w-5 tw-h-5 tw-text-gray-700\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n </button>\n </div>\n </div>\n\n <main class=\"tw--mt-8 md:tw--mt-10\">\n <div #cardsContainerEl class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-5\">\n <div *ngFor=\"let card of cardsData\" draggable=\"true\" [id]=\"card.id\"\n class=\"dashboard-card tw-bg-white tw-border tw-border-gray-200/70 tw-rounded-xl tw-p-4 tw-shadow-lg hover:tw-shadow-xl hover:tw--translate-y-0.5 tw-transition-all tw-cursor-grab\"\n [ngClass]=\"card.colSpan || 'tw-col-span-1'\">\n\n <div *ngIf=\"card.type !== 'studyStreak' && card.type !== 'quickStats'\"\n class=\"tw-flex tw-justify-between tw-items-center tw-mb-3\">\n <h3 class=\"tw-text-md tw-font-semibold\" [ngClass]=\"'tw-text-' + card.accentColor + '-700'\">\n {{card.title}}</h3>\n <span *ngIf=\"card.urgentText\"\n class=\"tw-text-xs tw-bg-red-100 tw-text-red-700 tw-px-2.5 tw-py-1 tw-rounded-full tw-font-semibold\">{{card.urgentText}}</span>\n <span *ngIf=\"card.insightTag\" class=\"tw-text-xs tw-px-2.5 tw-py-1 tw-rounded-full tw-font-semibold\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-100 tw-text-' + card.accentColor + '-700'\">{{card.insightTag}}</span>\n </div>\n\n <div class=\"card-content-area tw-space-y-3 tw-text-sm tw-pr-1\">\n <ng-container [ngSwitch]=\"card.type\">\n <ul *ngSwitchCase=\"'deadlines'\">\n <li *ngFor=\"let item of card.items\"\n class=\"tw-flex tw-justify-between tw-items-center tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <div>\n <p class=\"tw-text-gray-700 tw-font-medium\">{{item.text}}</p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.subtext}}</p>\n </div>\n </li>\n </ul>\n <ul *ngSwitchCase=\"'news'\">\n <li *ngFor=\"let item of card.items\" class=\"tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <p class=\"tw-font-medium tw-text-gray-800\">{{item.title}}</p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.details}}</p>\n </li>\n </ul>\n <ul *ngSwitchCase=\"'grades'\">\n <li *ngFor=\"let item of card.items\"\n class=\"tw-flex tw-justify-between tw-items-center tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <span class=\"tw-text-gray-700\">{{item.subject}}</span><span class=\"tw-font-bold\"\n [ngClass]=\"item.color\">{{item.grade}}</span>\n </li>\n </ul>\n <ul *ngSwitchCase=\"'professorConnect'\">\n <li *ngFor=\"let item of card.items\" class=\"tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <p class=\"tw-font-medium tw-text-gray-700\">{{item.name}}</p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.officeHours}}</p><a\n *ngIf=\"item.messageLink\" [href]=\"item.messageLink\"\n class=\"tw-text-xs hover:tw-underline\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-600'\">Send Message</a><a\n *ngIf=\"item.appointmentLink\" [href]=\"item.appointmentLink\"\n class=\"tw-text-xs hover:tw-underline tw-ml-2\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-600'\">Book Appointment</a>\n </li>\n </ul>\n <div *ngSwitchCase=\"'courses'\" class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 tw-gap-2.5\"><a\n *ngFor=\"let item of card.items\" href=\"#\"\n class=\"tw-block tw-p-2.5 tw-rounded-lg tw-transition-all group tw-ring-1\"\n [ngClass]=\"'tw-bg-' + item.colorTheme + '-50/70 hover:tw-bg-' + item.colorTheme + '-100/80 tw-ring-' + item.colorTheme + '-200/70 hover:tw-ring-' + item.colorTheme + '-300'\">\n <p class=\"tw-font-semibold group-hover:tw-text-{{item.colorTheme}}-800\"\n [ngClass]=\"'tw-text-' + item.colorTheme + '-700'\">{{item.name}}</p>\n <p class=\"tw-text-xs group-hover:tw-text-{{item.colorTheme}}-600 tw-mt-0.5\"\n [ngClass]=\"'tw-text-' + item.colorTheme + '-500'\">{{item.professor}}</p>\n </a></div>\n <ul *ngSwitchCase=\"'events'\">\n <li *ngFor=\"let item of card.items\"\n class=\"tw-flex tw-items-start tw-space-x-2.5 tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <div class=\"tw-text-white tw-text-xs tw-font-bold tw-p-2 tw-rounded-md tw-flex tw-flex-col tw-items-center tw-justify-center tw-w-12 tw-h-12 tw-flex-shrink-0 tw-shadow\"\n [ngClass]=\"item.themeColor\"><span>{{item.date?.month}}</span><span\n class=\"tw-text-lg\">{{item.date?.day}}</span></div>\n <div>\n <p class=\"tw-text-gray-700 tw-font-medium\">{{item.title}}</p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.details}}</p>\n </div>\n </li>\n </ul>\n <div *ngSwitchCase=\"'studyStreak'\"\n class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-text-center tw-flex-grow tw-p-4\">\n <svg class=\"tw-w-12 tw-h-12 tw-mb-2\" [ngClass]=\"'tw-text-' + card.accentColor + '-500'\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M17.657 18.657A8 8 0 016.343 7.343S7 9 9 10c0-2 .5-5 2.986-7.014A8.003 8.003 0 0122 12c0 3-1 7-6.657 7.343A7.975 7.975 0 0117.657 18.657z\">\n </path>\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M9.879 16.121A3 3 0 1012.015 11L11 14H9c0 .768.293 1.536.879 2.121z\"></path>\n </svg>\n <h3 class=\"tw-text-md tw-font-semibold tw-mb-1\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-600'\">{{card.title}}</h3>\n <p class=\"tw-text-xs tw-text-gray-500\">{{card.description}}</p>\n <div class=\"tw-mt-3 tw-w-full tw-bg-gray-200 tw-rounded-full tw-h-1.5\">\n <div class=\"tw-h-1.5 tw-rounded-full\" [ngClass]=\"'tw-bg-' + card.accentColor + '-500'\"\n [style.width]=\"card.progress\"></div>\n </div>\n </div>\n <div *ngSwitchCase=\"'quickStats'\" class=\"tw-space-y-3.5 tw-flex-grow\">\n <h2 class=\"tw-text-md tw-font-semibold tw-mb-3 tw-border-b tw-border-gray-200/80 tw-pb-2\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-700'\">{{card.title}}</h2>\n <div *ngFor=\"let stat of card.stats\" class=\"tw-text-sm\">\n <div *ngIf=\"stat.gradient\" class=\"tw-text-sm\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-0.5\">\n <p class=\"tw-text-gray-600 tw-font-medium\">{{stat.label}}</p>\n <p class=\"tw-text-xs tw-text-green-600 tw-font-semibold\">{{stat.value}}</p>\n </div>\n <div class=\"tw-w-full tw-bg-gray-200 tw-rounded-full tw-h-2\">\n <div class=\"tw-h-2 tw-rounded-full\" [ngClass]=\"stat.gradient\"\n [style.width]=\"stat.value\"></div>\n </div>\n </div>\n <div *ngIf=\"!stat.gradient\">\n <p class=\"tw-text-gray-600 tw-font-medium tw-mb-0.5\">{{stat.label}}</p>\n <p [ngClass]=\"stat.valueClass || ''\">{{stat.value}}</p>\n </div>\n </div>\n </div>\n <ul *ngSwitchCase=\"'discussions'\">\n <li *ngFor=\"let item of card.items\" class=\"tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <a href=\"#\" class=\"tw-block group\">\n <p class=\"tw-font-medium tw-text-gray-700\"\n [ngClass]=\"'group-hover:tw-text-' + card.accentColor + '-700'\">{{item.topic}}\n </p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.forum}} - Last post: {{item.lastPost}}\n </p>\n </a>\n </li>\n </ul>\n <ul *ngSwitchCase=\"'quickLinks'\">\n <li *ngFor=\"let item of card.items\"><a href=\"#\"\n class=\"tw-flex tw-items-center tw-p-2 tw-rounded-lg tw-text-gray-700 tw-transition-colors\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70 hover:tw-text-' + card.accentColor + '-700'\"><svg\n class=\"tw-w-4 tw-h-4 tw-mr-2\" [ngClass]=\"'tw-text-' + card.accentColor + '-500'\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n [innerHTML]=\"item.safeIconSVG\"></svg>{{item.text}}</a></li>\n </ul>\n </ng-container>\n </div>\n\n <a *ngIf=\"card.link\" [href]=\"card.link.href\"\n class=\"tw-mt-auto tw-pt-3 tw-text-xs tw-font-medium tw-w-full tw-text-left hover:tw-underline\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-600 hover:tw-text-' + card.accentColor + '-800'\">\n {{card.link.text}}\n </a>\n </div>\n </div>\n </main>\n</div>", styles: [".module-card:before{content:\"\";position:absolute;top:0;left:0;right:0;height:3px;background-color:var(--accent-color, transparent);opacity:0;pointer-events:none;transition:opacity .3s,transform .3s;transform:scaleX(0);z-index:1}.module-card:hover:before{opacity:1;transform:scaleX(1)}.card-content-area::-webkit-scrollbar{width:6px}.card-content-area::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.card-content-area::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.card-content-area::-webkit-scrollbar-thumb:hover{background:#94a3b8}.dashboard-card{overflow:hidden}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{display:none}\n", ":host{height:100%;display:flex;flex-direction:column;overflow-y:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "directive", type: TooltipDirective, selector: "[cideEleTooltip]", inputs: ["cideEleTooltip", "tooltipColor", "tooltipBg", "tooltipPlacement", "tooltipType", "tooltipDelay", "tooltipDir", "tooltipShowArrow", "tooltipMultiline", "tooltipMaxWidth", "tooltipInteractive", "tooltipClass"] }] }); }
|
|
6
181
|
}
|
|
7
182
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytHomeWrapperComponent, decorators: [{
|
|
8
183
|
type: Component,
|
|
9
|
-
args: [{ selector: 'cide-lyt-home-wrapper', standalone: true, imports: [], template: "We will design the common components and set the controls via the service, \r\nFor pages which is not possible to touch by the developer will be set by service, example after login index developer can\u2019t touch the component for custom (project-specific code so we will use a service with a menu and setting for that menu, (array of menu and its option to be passed, so that component will set itself as menu match)\r\n<br>\r\nThe widgets page will be managed by the drag-and-drop functionality and the card will decided by the database and which design which API call will be done by the note API response will be as per the design selected.\t(Developers don't have the right to code for that everything will be done by the database only)" }]
|
|
10
|
-
}] }
|
|
11
|
-
|
|
184
|
+
args: [{ selector: 'cide-lyt-home-wrapper', standalone: true, imports: [CommonModule, CideIconComponent, TooltipDirective], template: "<div class=\"tw-p-4 sm:tw-p-6 md:tw-p-8 tw-max-w-full tw-mx-auto\">\n <header class=\"tw-mb-8 md:tw-mb-10\">\n <h1\n class=\"tw-text-3xl sm:tw-text-4xl tw-font-bold tw-text-transparent tw-bg-clip-text tw-bg-gradient-to-r tw-from-purple-600 tw-via-pink-500 tw-to-orange-500\">\n Welcome, {{ appState.getUserName() || 'User' }}!\n </h1>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-1\">Your central hub for all things college.</p>\n <p *ngIf=\"appState.getUserEmail()\" class=\"tw-text-xs tw-text-gray-400 tw-mt-1\">{{ appState.getUserEmail() }}</p>\n </header>\n\n <div class=\"tw-mb-8 md:tw-mb-10\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-5\">\n <h2 class=\"tw-text-xl tw-font-bold tw-text-gray-700\">{{ modulesSectionConfig.title }}</h2>\n <a *ngIf=\"modulesSectionConfig.showViewAllLink\" [href]=\"modulesSectionConfig.viewAllLinkHref\"\n class=\"tw-text-sm tw-font-medium tw-text-purple-600 hover:tw-text-purple-800 hover:tw-underline tw-transition-colors\">\n {{ modulesSectionConfig.viewAllLinkText }}\n </a>\n </div>\n <div class=\"tw-relative group/modules tw-max-w-full\">\n <button #scrollPrevModuleBtn aria-label=\"Scroll previous modules\"\n class=\"tw-absolute tw--left-4 tw-z-50 tw-p-2 tw-bg-white/90 tw-bg-opacity-90 tw-backdrop-blur-sm tw-rounded-full tw-shadow-lg hover:tw-bg-gray-100 tw-transition-all tw-opacity-100 md:group-hover/modules:tw-opacity-100 disabled:tw-opacity-30 disabled:tw-cursor-not-allowed tw-pointer-events-auto\"\n style=\"top: 2.875rem;\">\n <svg class=\"tw-w-5 tw-h-5 tw-text-gray-700\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n </button>\n\n <div #modulesContainer\n class=\"tw-flex tw-space-x-4 tw-pb-6 tw-overflow-x-auto tw-overflow-y-visible tw-scroll-smooth tw-snap-x tw-snap-mandatory hide-scrollbar\"\n style=\"touch-action: none; pointer-events: auto;\">\n <a *ngFor=\"let module of modulesData\" \n (click)=\"openModule(module)\"\n (keydown.enter)=\"openModule(module)\"\n (keydown.space)=\"openModule(module)\"\n class=\"module-card tw-relative tw-overflow-hidden group tw-flex-shrink-0 tw-w-60 tw-h-28 tw-bg-white tw-border tw-border-gray-200/80 tw-rounded-xl tw-p-3 tw-shadow-md hover:tw-shadow-xl tw-transition-all tw-duration-300 tw-ease-out tw-flex tw-items-center tw-space-x-4 tw-snap-start\"\n [style.--accent-color]=\"module.accentColor\" \n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Open module: ' + module.syme_title\">\n <div class=\"tw-relative tw-flex-shrink-0\">\n <div class=\"tw-w-16 tw-h-16 tw-rounded-lg tw-flex tw-items-center tw-justify-center tw-transition-all tw-duration-300 group-hover:tw-scale-105\"\n [style.backgroundColor]=\"module?.accentColor + '22'\">\n <!-- icon rendering here if needed -->\n <cide-ele-icon class=\"mpro-icon-field\" type=\"none\">{{module?.syme_icon}}</cide-ele-icon>\n </div>\n <div *ngIf=\"(module?.pillCount || 0) > 0\" class=\"tw-absolute tw--top-1.5 tw--right-1.5\">\n <span\n class=\"tw-flex tw-h-5 tw-w-5 tw-items-center tw-justify-center tw-rounded-full tw-text-white tw-text-xs tw-font-bold tw-ring-2 tw-ring-white\"\n [style.backgroundColor]=\"module?.accentColor\">{{module?.pillCount}}</span>\n </div>\n </div>\n <div class=\"tw-flex tw-flex-col tw-flex-grow tw-min-w-0\">\n <h4 class=\"tw-font-semibold tw-text-xs tw-text-gray-800 tw-truncate line-clamp-1\" cideEleTooltip\n [cideEleTooltip]=\"module.syme_title\" [tooltipDelay]=\"300\" [tooltipPlacement]=\"'top'\">\n {{module?.syme_title}}\n </h4>\n <p\n class=\"tw-text-xs tw-text-gray-400 tw-mt-0.5 tw-overflow-hidden tw-text-ellipsis tw-line-clamp-2 tw-text-justify min-h-[2.5rem]\">\n {{module?.syme_desc}}\n </p>\n </div>\n </a>\n </div>\n\n <button #scrollNextModuleBtn aria-label=\"Scroll next modules\"\n class=\"tw-absolute tw--right-4 tw-z-50 tw-p-2 tw-bg-white/90 tw-bg-opacity-90 tw-backdrop-blur-sm tw-rounded-full tw-shadow-lg hover:tw-bg-gray-100 tw-transition-all tw-opacity-100 md:group-hover/modules:tw-opacity-100 disabled:tw-opacity-30 disabled:tw-cursor-not-allowed tw-pointer-events-auto\"\n style=\"top: 2.875rem;\">\n <svg class=\"tw-w-5 tw-h-5 tw-text-gray-700\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n </button>\n </div>\n </div>\n\n <main class=\"tw--mt-8 md:tw--mt-10\">\n <div #cardsContainerEl class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-5\">\n <div *ngFor=\"let card of cardsData\" draggable=\"true\" [id]=\"card.id\"\n class=\"dashboard-card tw-bg-white tw-border tw-border-gray-200/70 tw-rounded-xl tw-p-4 tw-shadow-lg hover:tw-shadow-xl hover:tw--translate-y-0.5 tw-transition-all tw-cursor-grab\"\n [ngClass]=\"card.colSpan || 'tw-col-span-1'\">\n\n <div *ngIf=\"card.type !== 'studyStreak' && card.type !== 'quickStats'\"\n class=\"tw-flex tw-justify-between tw-items-center tw-mb-3\">\n <h3 class=\"tw-text-md tw-font-semibold\" [ngClass]=\"'tw-text-' + card.accentColor + '-700'\">\n {{card.title}}</h3>\n <span *ngIf=\"card.urgentText\"\n class=\"tw-text-xs tw-bg-red-100 tw-text-red-700 tw-px-2.5 tw-py-1 tw-rounded-full tw-font-semibold\">{{card.urgentText}}</span>\n <span *ngIf=\"card.insightTag\" class=\"tw-text-xs tw-px-2.5 tw-py-1 tw-rounded-full tw-font-semibold\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-100 tw-text-' + card.accentColor + '-700'\">{{card.insightTag}}</span>\n </div>\n\n <div class=\"card-content-area tw-space-y-3 tw-text-sm tw-pr-1\">\n <ng-container [ngSwitch]=\"card.type\">\n <ul *ngSwitchCase=\"'deadlines'\">\n <li *ngFor=\"let item of card.items\"\n class=\"tw-flex tw-justify-between tw-items-center tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <div>\n <p class=\"tw-text-gray-700 tw-font-medium\">{{item.text}}</p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.subtext}}</p>\n </div>\n </li>\n </ul>\n <ul *ngSwitchCase=\"'news'\">\n <li *ngFor=\"let item of card.items\" class=\"tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <p class=\"tw-font-medium tw-text-gray-800\">{{item.title}}</p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.details}}</p>\n </li>\n </ul>\n <ul *ngSwitchCase=\"'grades'\">\n <li *ngFor=\"let item of card.items\"\n class=\"tw-flex tw-justify-between tw-items-center tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <span class=\"tw-text-gray-700\">{{item.subject}}</span><span class=\"tw-font-bold\"\n [ngClass]=\"item.color\">{{item.grade}}</span>\n </li>\n </ul>\n <ul *ngSwitchCase=\"'professorConnect'\">\n <li *ngFor=\"let item of card.items\" class=\"tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <p class=\"tw-font-medium tw-text-gray-700\">{{item.name}}</p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.officeHours}}</p><a\n *ngIf=\"item.messageLink\" [href]=\"item.messageLink\"\n class=\"tw-text-xs hover:tw-underline\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-600'\">Send Message</a><a\n *ngIf=\"item.appointmentLink\" [href]=\"item.appointmentLink\"\n class=\"tw-text-xs hover:tw-underline tw-ml-2\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-600'\">Book Appointment</a>\n </li>\n </ul>\n <div *ngSwitchCase=\"'courses'\" class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 tw-gap-2.5\"><a\n *ngFor=\"let item of card.items\" href=\"#\"\n class=\"tw-block tw-p-2.5 tw-rounded-lg tw-transition-all group tw-ring-1\"\n [ngClass]=\"'tw-bg-' + item.colorTheme + '-50/70 hover:tw-bg-' + item.colorTheme + '-100/80 tw-ring-' + item.colorTheme + '-200/70 hover:tw-ring-' + item.colorTheme + '-300'\">\n <p class=\"tw-font-semibold group-hover:tw-text-{{item.colorTheme}}-800\"\n [ngClass]=\"'tw-text-' + item.colorTheme + '-700'\">{{item.name}}</p>\n <p class=\"tw-text-xs group-hover:tw-text-{{item.colorTheme}}-600 tw-mt-0.5\"\n [ngClass]=\"'tw-text-' + item.colorTheme + '-500'\">{{item.professor}}</p>\n </a></div>\n <ul *ngSwitchCase=\"'events'\">\n <li *ngFor=\"let item of card.items\"\n class=\"tw-flex tw-items-start tw-space-x-2.5 tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <div class=\"tw-text-white tw-text-xs tw-font-bold tw-p-2 tw-rounded-md tw-flex tw-flex-col tw-items-center tw-justify-center tw-w-12 tw-h-12 tw-flex-shrink-0 tw-shadow\"\n [ngClass]=\"item.themeColor\"><span>{{item.date?.month}}</span><span\n class=\"tw-text-lg\">{{item.date?.day}}</span></div>\n <div>\n <p class=\"tw-text-gray-700 tw-font-medium\">{{item.title}}</p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.details}}</p>\n </div>\n </li>\n </ul>\n <div *ngSwitchCase=\"'studyStreak'\"\n class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-text-center tw-flex-grow tw-p-4\">\n <svg class=\"tw-w-12 tw-h-12 tw-mb-2\" [ngClass]=\"'tw-text-' + card.accentColor + '-500'\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M17.657 18.657A8 8 0 016.343 7.343S7 9 9 10c0-2 .5-5 2.986-7.014A8.003 8.003 0 0122 12c0 3-1 7-6.657 7.343A7.975 7.975 0 0117.657 18.657z\">\n </path>\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M9.879 16.121A3 3 0 1012.015 11L11 14H9c0 .768.293 1.536.879 2.121z\"></path>\n </svg>\n <h3 class=\"tw-text-md tw-font-semibold tw-mb-1\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-600'\">{{card.title}}</h3>\n <p class=\"tw-text-xs tw-text-gray-500\">{{card.description}}</p>\n <div class=\"tw-mt-3 tw-w-full tw-bg-gray-200 tw-rounded-full tw-h-1.5\">\n <div class=\"tw-h-1.5 tw-rounded-full\" [ngClass]=\"'tw-bg-' + card.accentColor + '-500'\"\n [style.width]=\"card.progress\"></div>\n </div>\n </div>\n <div *ngSwitchCase=\"'quickStats'\" class=\"tw-space-y-3.5 tw-flex-grow\">\n <h2 class=\"tw-text-md tw-font-semibold tw-mb-3 tw-border-b tw-border-gray-200/80 tw-pb-2\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-700'\">{{card.title}}</h2>\n <div *ngFor=\"let stat of card.stats\" class=\"tw-text-sm\">\n <div *ngIf=\"stat.gradient\" class=\"tw-text-sm\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-0.5\">\n <p class=\"tw-text-gray-600 tw-font-medium\">{{stat.label}}</p>\n <p class=\"tw-text-xs tw-text-green-600 tw-font-semibold\">{{stat.value}}</p>\n </div>\n <div class=\"tw-w-full tw-bg-gray-200 tw-rounded-full tw-h-2\">\n <div class=\"tw-h-2 tw-rounded-full\" [ngClass]=\"stat.gradient\"\n [style.width]=\"stat.value\"></div>\n </div>\n </div>\n <div *ngIf=\"!stat.gradient\">\n <p class=\"tw-text-gray-600 tw-font-medium tw-mb-0.5\">{{stat.label}}</p>\n <p [ngClass]=\"stat.valueClass || ''\">{{stat.value}}</p>\n </div>\n </div>\n </div>\n <ul *ngSwitchCase=\"'discussions'\">\n <li *ngFor=\"let item of card.items\" class=\"tw-p-2.5 tw-rounded-lg\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70'\">\n <a href=\"#\" class=\"tw-block group\">\n <p class=\"tw-font-medium tw-text-gray-700\"\n [ngClass]=\"'group-hover:tw-text-' + card.accentColor + '-700'\">{{item.topic}}\n </p>\n <p class=\"tw-text-xs tw-text-gray-500\">{{item.forum}} - Last post: {{item.lastPost}}\n </p>\n </a>\n </li>\n </ul>\n <ul *ngSwitchCase=\"'quickLinks'\">\n <li *ngFor=\"let item of card.items\"><a href=\"#\"\n class=\"tw-flex tw-items-center tw-p-2 tw-rounded-lg tw-text-gray-700 tw-transition-colors\"\n [ngClass]=\"'tw-bg-' + card.accentColor + '-50/60 hover:tw-bg-' + card.accentColor + '-100/70 hover:tw-text-' + card.accentColor + '-700'\"><svg\n class=\"tw-w-4 tw-h-4 tw-mr-2\" [ngClass]=\"'tw-text-' + card.accentColor + '-500'\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n [innerHTML]=\"item.safeIconSVG\"></svg>{{item.text}}</a></li>\n </ul>\n </ng-container>\n </div>\n\n <a *ngIf=\"card.link\" [href]=\"card.link.href\"\n class=\"tw-mt-auto tw-pt-3 tw-text-xs tw-font-medium tw-w-full tw-text-left hover:tw-underline\"\n [ngClass]=\"'tw-text-' + card.accentColor + '-600 hover:tw-text-' + card.accentColor + '-800'\">\n {{card.link.text}}\n </a>\n </div>\n </div>\n </main>\n</div>", styles: [".module-card:before{content:\"\";position:absolute;top:0;left:0;right:0;height:3px;background-color:var(--accent-color, transparent);opacity:0;pointer-events:none;transition:opacity .3s,transform .3s;transform:scaleX(0);z-index:1}.module-card:hover:before{opacity:1;transform:scaleX(1)}.card-content-area::-webkit-scrollbar{width:6px}.card-content-area::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.card-content-area::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.card-content-area::-webkit-scrollbar-thumb:hover{background:#94a3b8}.dashboard-card{overflow:hidden}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{display:none}\n", ":host{height:100%;display:flex;flex-direction:column;overflow-y:auto}\n"] }]
|
|
185
|
+
}], ctorParameters: () => [{ type: i1.CideLytRequestService }], propDecorators: { modulesContainerRef: [{
|
|
186
|
+
type: ViewChild,
|
|
187
|
+
args: ['modulesContainer']
|
|
188
|
+
}], scrollPrevModuleBtnRef: [{
|
|
189
|
+
type: ViewChild,
|
|
190
|
+
args: ['scrollPrevModuleBtn']
|
|
191
|
+
}], scrollNextModuleBtnRef: [{
|
|
192
|
+
type: ViewChild,
|
|
193
|
+
args: ['scrollNextModuleBtn']
|
|
194
|
+
}], cardsContainerElRef: [{
|
|
195
|
+
type: ViewChild,
|
|
196
|
+
args: ['cardsContainerEl']
|
|
197
|
+
}] } });
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9sYXlvdXQvaG9tZS9ob21lLXdyYXBwZXIvaG9tZS13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9sYXlvdXQvaG9tZS9ob21lLXdyYXBwZXIvaG9tZS13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsNkJBQTZCLEVBQWtDLE1BQU0sc0RBQXNELENBQUM7QUFDckksT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlILE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFzRXpDLE1BQU0sT0FBTywyQkFBNEIsU0FBUSw2QkFBNkI7SUE2QjVFLFlBQW9CLGNBQXFDO1FBQ3ZELEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBNUJ6QywrQkFBMEIsR0FBNEM7WUFDcEYsY0FBYyxFQUFFLGVB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a0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENpZGVMeXRTaGFyZWRXcmFwcGVyQ29tcG9uZW50LCBDaWRlTHl0U2hhcmVkV3JhcHBlclNldHVwUGFyYW0gfSBmcm9tICcuLi8uLi9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIFJlbmRlcmVyMiwgaW5qZWN0LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQ2lkZUx5dFNpZGViYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2lkZWJhci9zaWRlYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWVudVJlc3BvbnNlRGF0YSB9IGZyb20gJ2Nsb3VkLWlkZS1sbXMtbW9kZWwnO1xuaW1wb3J0IHsgQ2lkZUljb25Db21wb25lbnQgfSBmcm9tICdjbG91ZC1pZGUtZWxlbWVudCc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnY2xvdWQtaWRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgQ2lkZUx5dFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVxdWVzdC9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwLXN0YXRlL2FwcC1zdGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG4vLyAtLS0gSW50ZXJmYWNlcyBmb3Igb3VyIGRhdGEgc3RydWN0dXJlcyAtLS1cbmludGVyZmFjZSBDYXJkSXRlbSB7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nOyBcbiAgc3VidGV4dD86IHN0cmluZztcbiAgZGV0YWlscz86IHN0cmluZzsgXG4gIHN1YmplY3Q/OiBzdHJpbmc7IFxuICBncmFkZT86IHN0cmluZzsgXG4gIGNvbG9yPzogc3RyaW5nOyBcbiAgbmFtZT86IHN0cmluZzsgXG4gIG9mZmljZUhvdXJzPzogc3RyaW5nOyBcbiAgbWVzc2FnZUxpbms/OiBzdHJpbmc7IFxuICBhcHBvaW50bWVudExpbms/OiBzdHJpbmc7IFxuICBwcm9mZXNzb3I/OiBzdHJpbmc7IFxuICBjb2xvclRoZW1lPzogc3RyaW5nOyBcbiAgZGF0ZT86IHsgbW9udGg6IHN0cmluZzsgZGF5OiBzdHJpbmcgfTsgXG4gIHRoZW1lQ29sb3I/OiBzdHJpbmc7IFxuICB0b3BpYz86IHN0cmluZzsgXG4gIGZvcnVtPzogc3RyaW5nOyBcbiAgbGFzdFBvc3Q/OiBzdHJpbmc7IFxuICBpY29uU1ZHPzogc3RyaW5nOyBcbiAgc2FmZUljb25TVkc/OiBTYWZlSHRtbDsgXG59XG5cbmludGVyZmFjZSBDYXJkU3RhdCB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGdyYWRpZW50Pzogc3RyaW5nO1xuICAgIHZhbHVlQ2xhc3M/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDYXJkIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBjb2xTcGFuOiBzdHJpbmc7XG4gIGFjY2VudENvbG9yOiBzdHJpbmc7XG4gIHVyZ2VudFRleHQ/OiBzdHJpbmc7XG4gIGluc2lnaHRUYWc/OiBzdHJpbmc7XG4gIGl0ZW1zPzogQ2FyZEl0ZW1bXTtcbiAgc3RhdHM/OiBDYXJkU3RhdFtdO1xuICBwcm9ncmVzcz86IHN0cmluZzsgXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nOyBcbiAgbGluaz86IHsgdGV4dDogc3RyaW5nOyBocmVmOiBzdHJpbmcgfTtcbn1cblxuaW50ZXJmYWNlIE1vZHVsZXNTZWN0aW9uQ29uZmlnIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgdmlld0FsbExpbmtUZXh0OiBzdHJpbmc7XG4gIHZpZXdBbGxMaW5rSHJlZjogc3RyaW5nO1xuICBzaG93Vmlld0FsbExpbms6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NpZGUtbHl0LWhvbWUtd3JhcHBlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIENpZGVJY29uQ29tcG9uZW50LCBUb29sdGlwRGlyZWN0aXZlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2hvbWUtd3JhcHBlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ob21lLXdyYXBwZXIuY29tcG9uZW50LmNzcycsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBDaWRlTHl0SG9tZVdyYXBwZXJDb21wb25lbnQgZXh0ZW5kcyBDaWRlTHl0U2hhcmVkV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHB1YmxpYyBvdmVycmlkZSBzaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbTogUGFydGlhbDxDaWRlTHl0U2hhcmVkV3JhcHBlclNldHVwUGFyYW0+ID0ge1xuICAgIHN5cGdfcGFnZV9jb2RlOiBcImNpZGVfbHl0X2hvbWVcIlxuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzaWRlYmFyU2VydmljZSA9IGluamVjdChDaWRlTHl0U2lkZWJhclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFwcFN0YXRlID0gaW5qZWN0KEFwcFN0YXRlSGVscGVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcHJpdmF0ZSBtb2R1bGVTdHlsZVByZXNldHMgPSBbXG4gICAgeyBhY2NlbnRDb2xvcjogXCIjOEI1Q0Y2XCIgfSwgLy8gcHVycGxlXG4gICAgeyBhY2NlbnRDb2xvcjogXCIjRUM0ODk5XCIgfSwgLy8gcGlua1xuICAgIHsgYWNjZW50Q29sb3I6IFwiIzE0QjhBNlwiIH0sIC8vIHRlYWxcbiAgICB7IGFjY2VudENvbG9yOiBcIiMwRUE1RTlcIiB9LCAvLyBza3lcbiAgICB7IGFjY2VudENvbG9yOiBcIiNGNTlFNDJcIiB9LCAvLyBvcmFuZ2VcbiAgICB7IGFjY2VudENvbG9yOiBcIiM2MzY2RjFcIiB9LCAvLyBpbmRpZ29cbiAgICB7IGFjY2VudENvbG9yOiBcIiMyMkM1NUVcIiB9LCAvLyBncmVlblxuICAgIHsgYWNjZW50Q29sb3I6IFwiI0VGNDQ0NFwiIH0sIC8vIHJlZFxuICAgIHsgYWNjZW50Q29sb3I6IFwiI0Y1OUUwQlwiIH0sIC8vIGFtYmVyXG4gICAgeyBhY2NlbnRDb2xvcjogXCIjMTBCOTgxXCIgfSwgLy8gZW1lcmFsZFxuICAgIHsgYWNjZW50Q29sb3I6IFwiIzA2QjZENFwiIH0sIC8vIGN5YW5cbiAgICB7IGFjY2VudENvbG9yOiBcIiM2QjcyODBcIiB9LCAvLyBncmF5XG4gICAgeyBhY2NlbnRDb2xvcjogXCIjOEI1Q0Y2XCIgfSwgLy8gdmlvbGV0IChzYW1lIGFzIHB1cnBsZSBmb3IgZmFsbGJhY2spXG4gICAgeyBhY2NlbnRDb2xvcjogXCIjRDk0NkVGXCIgfSAgLy8gZnVjaHNpYVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IENpZGVMeXRSZXF1ZXN0U2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gU2FuaXRpemUgU1ZHIGljb25zIGluIHRoZSBoYXJkY29kZWQgY2FyZHNEYXRhXG4gICAgdGhpcy5jYXJkc0RhdGEgPSB0aGlzLmNhcmRzRGF0YS5tYXAoY2FyZCA9PiAoe1xuICAgICAgLi4uY2FyZCxcbiAgICAgIGl0ZW1zOiBjYXJkLml0ZW1zPy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBzYWZlSWNvblNWRzogaXRlbS5pY29uU1ZHID8gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaXRlbS5pY29uU1ZHKSA6IHVuZGVmaW5lZFxuICAgICAgfSkpXG4gICAgfSkpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnbW9kdWxlc0NvbnRhaW5lcicpIG1vZHVsZXNDb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsUHJldk1vZHVsZUJ0bicpIHNjcm9sbFByZXZNb2R1bGVCdG5SZWYhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsTmV4dE1vZHVsZUJ0bicpIHNjcm9sbE5leHRNb2R1bGVCdG5SZWYhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2FyZHNDb250YWluZXJFbCcpIGNhcmRzQ29udGFpbmVyRWxSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBtb2R1bGVzU2VjdGlvbkNvbmZpZzogTW9kdWxlc1NlY3Rpb25Db25maWcgPSB7XG4gICAgdGl0bGU6IFwiU3Vic2NyaWJlZCBNb2R1bGVzXCIsXG4gICAgdmlld0FsbExpbmtUZXh0OiBcIlZpZXcgQWxsIE1vZHVsZXMgJnJhcnI7XCIsXG4gICAgdmlld0FsbExpbmtIcmVmOiBcIiNhbGwtbW9kdWxlc1wiLCBcbiAgICBzaG93Vmlld0FsbExpbms6IHRydWVcbiAgfTtcblxuICBtb2R1bGVzRGF0YTogKG1lbnVSZXNwb25zZURhdGEgJiB7IGFjY2VudENvbG9yPzogc3RyaW5nOyBwaWxsQ291bnQ/OiBudW1iZXIgfSlbXSA9IFtdOyBcbiAgZHJhZ2dlZEl0ZW06IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHBsYWNlaG9sZGVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0Py4oKTsgXG4gICAgdGhpcy5sb2FkTW9kdWxlcygpO1xuICB9XG5cbm9wZW5Nb2R1bGUobW9kdWxlOiBtZW51UmVzcG9uc2VEYXRhKSB7XG4gIGNvbnNvbGUubG9nKG1vZHVsZSwgXCJtb2R1bGVcIik7XG4gIC8vIFNldCB0aGUgYWN0aXZlIG1vZHVsZSBpbiBhcHAgc3RhdGUgLSB0aGlzIHdpbGwgdHJpZ2dlciBzaWRlYmFyIHVwZGF0ZXNcbiAgdGhpcy5hcHBTdGF0ZS5zZXRBY3RpdmVNb2R1bGUobW9kdWxlKTtcbiAgXG4gIC8vIE5hdmlnYXRlIHRvIHRoZSBtb2R1bGUgcm91dGVcbiAgLy8gdGhpcy5yZXF1ZXN0U2VydmljZS5hZGRUYWIobW9kdWxlLnN5bWVfdGl0bGUsIGAvY29udHJvbC1wYW5lbC8ke21vZHVsZS5zeW1lX3BhdGh9YCk7XG4gIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2NvbnRyb2wtcGFuZWwvJHttb2R1bGUuc3ltZV9wYXRofWBdKTtcbn1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cE1vZHVsZVNjcm9sbGVyKCk7XG4gICAgdGhpcy5zZXR1cERyYWdBbmREcm9wKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNb2R1bGVzKCk6IHZvaWQge1xuICAgIHRoaXMuc2lkZWJhclNlcnZpY2U/LmdldFNpZGViYXJNZW51ZXMoeyBzeW1lX3R5cGU6IFwibW9kdWxlXCIsIHNvcnQ6ICdhc2MnLCBzeW1lX3RpdGxlOiBcIlwiIH0pPy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICBjb25zdCBmZXRjaGVkQXBpTW9kdWxlcyA9IHJlcz8uZGF0YSB8fCBbXTtcbiAgICAgICAgdGhpcy5tb2R1bGVzRGF0YSA9IGZldGNoZWRBcGlNb2R1bGVzLm1hcCgoaXRlbTogbWVudVJlc3BvbnNlRGF0YSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0eWxlUHJlc2V0ID0gdGhpcy5tb2R1bGVTdHlsZVByZXNldHNbaW5kZXggJSB0aGlzLm1vZHVsZVN0eWxlUHJlc2V0cy5sZW5ndGhdO1xuICAgICAgICAgIGNvbnN0IGluc2lnaHRDb3VudCA9IGl0ZW0uc3ltZV9waW5nX2NvdW50IHx8IDA7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBhY2NlbnRDb2xvcjogc3R5bGVQcmVzZXQuYWNjZW50Q29sb3IsIC8vIFVJLW9ubHkgcHJvcGVydHlcbiAgICAgICAgICAgIHBpbGxDb3VudDogaW5zaWdodENvdW50LCAvLyBVSS1vbmx5IHByb3BlcnR5XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHNpZGViYXIgbW9kdWxlczonLCBlcnIpO1xuICAgICAgICB0aGlzLm1vZHVsZXNEYXRhID0gW107XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgXG4gIGNhcmRzRGF0YTogQ2FyZFtdID0gW1xuICAgIHsgaWQ6IFwiY2FyZDFcIiwgdGl0bGU6IFwiS2V5IERlYWRsaW5lc1wiLCB0eXBlOiBcImRlYWRsaW5lc1wiLCBjb2xTcGFuOiBcIm1kOnR3LWNvbC1zcGFuLTEgeGw6dHctY29sLXNwYW4tMVwiLCBhY2NlbnRDb2xvcjogXCJwdXJwbGVcIiwgdXJnZW50VGV4dDogXCJVcmdlbnRcIiwgaXRlbXM6IFt7IHRleHQ6IFwiTWlkdGVybSBQYXBlcjogUEhJTDIwMVwiLCBzdWJ0ZXh0OiBcIkR1ZTogVG9tb3Jyb3csIDExOjU5IFBNXCIgfSwgeyB0ZXh0OiBcIkxhYiBSZXBvcnQ6IENIRU0xMTBcIiwgc3VidGV4dDogXCJEdWU6IEluIDMgZGF5c1wiIH1dLCBsaW5rOiB7IHRleHQ6IFwiVmlldyBBbGwgRGVhZGxpbmVzICZyYXJyO1wiLCBocmVmOiBcIiNcIiB9IH0sXG4gICAgeyBpZDogXCJjYXJkMlwiLCB0aXRsZTogXCJSZWNlbnQgR3JhZGVzXCIsIHR5cGU6IFwiZ3JhZGVzXCIsIGNvbFNwYW46IFwibWQ6dHctY29sLXNwYW4tMSB4bDp0dy1jb2wtc3Bhbi0xXCIsIGFjY2VudENvbG9yOiBcImdyZWVuXCIsIGl0ZW1zOiBbeyBzdWJqZWN0OiBcIlBIWVMxMDEgUXVpeiAzXCIsIGdyYWRlOiBcIkEtXCIsIGNvbG9yOiBcInR3LXRleHQtZ3JlZW4tNjAwXCIgfSwgeyBzdWJqZWN0OiBcIkVOR0wyMjAgRXNzYXlcIiwgZ3JhZGU6IFwiQitcIiwgY29sb3I6IFwidHctdGV4dC15ZWxsb3ctNjAwXCIgfV0sIGxpbms6IHsgdGV4dDogXCJGdWxsIEdyYWRlYm9vayAmcmFycjtcIiwgaHJlZjogXCIjXCIgfSB9LFxuICAgIHsgaWQ6IFwiY2FyZDdcIiwgdGl0bGU6IFwiU3R1ZHkgU3RyZWFrOiAxMiBEYXlzIVwiLCB0eXBlOiBcInN0dWR5U3RyZWFrXCIsIGNvbFNwYW46IFwibWQ6dHctY29sLXNwYW4tMiB4bDp0dy1jb2wtc3Bhbi0xXCIsIGFjY2VudENvbG9yOiBcInllbGxvd1wiLCBwcm9ncmVzczogXCI4MCVcIiwgZGVzY3JpcHRpb246IFwiS2VlcCB0aGUgbW9tZW50dW0gZ29pbmchXCIgfSxcbiAgICB7IGlkOiBcImNhcmQ2XCIsIHRpdGxlOiBcIkNhbXB1cyBFdmVudHNcIiwgdHlwZTogXCJldmVudHNcIiwgY29sU3BhbjogXCJtZDp0dy1jb2wtc3Bhbi0xIHhsOnR3LWNvbC1zcGFuLTJcIiwgYWNjZW50Q29sb3I6IFwic2t5XCIsIGl0ZW1zOiBbeyBkYXRlOiB7IG1vbnRoOiBcIkpVTFwiLCBkYXk6IFwiMTBcIiB9LCB0aXRsZTogXCJXb3Jrc2hvcDogQUkgRXRoaWNzXCIsIGRldGFpbHM6IFwiVGVjaCBIdWIsIDM6MDAgUE0gLSA1OjAwIFBNXCIsIHRoZW1lQ29sb3I6IFwidHctYmctc2t5LTUwMFwiIH0sIHsgZGF0ZTogeyBtb250aDogXCJKVUxcIiwgZGF5OiBcIjEyXCIgfSwgdGl0bGU6IFwiU3R1ZGVudCBVbmlvbiBNaXhlclwiLCBkZXRhaWxzOiBcIlF1YWQsIDc6MDAgUE0gb253YXJkc1wiLCB0aGVtZUNvbG9yOiBcInR3LWJnLXJlZC01MDBcIiB9XSwgbGluazogeyB0ZXh0OiBcIkZ1bGwgRXZlbnRzIENhbGVuZGFyICZyYXJyO1wiLCBocmVmOiBcIiNcIiB9IH0sXG4gICAgeyBpZDogXCJjYXJkOFwiLCB0aXRsZTogXCJRdWljayBTdGF0c1wiLCB0eXBlOiBcInF1aWNrU3RhdHNcIiwgY29sU3BhbjogXCJtZDp0dy1jb2wtc3Bhbi0xIHhsOnR3LWNvbC1zcGFuLTFcIiwgYWNjZW50Q29sb3I6IFwiaW5kaWdvXCIsIHN0YXRzOiBbeyBsYWJlbDogXCJDb3Vyc2UgQ29tcGxldGlvblwiLCB2YWx1ZTogXCI3NSVcIiwgZ3JhZGllbnQ6IFwidHctZnJvbS1ncmVlbi00MDAgdHctdG8tYmx1ZS01MDBcIiB9LCB7IGxhYmVsOiBcIlBlbmRpbmcgQXNzaWdubWVudHNcIiwgdmFsdWU6IFwiM1wiLCB2YWx1ZUNsYXNzOiBcInR3LXRleHQtMnhsIHR3LWZvbnQtYm9sZCB0dy10ZXh0LXllbGxvdy01MDBcIiB9XSB9LFxuICAgIHsgaWQ6IFwiY2FyZDRcIiwgdGl0bGU6IFwiQ2FtcHVzIE5ld3MgJiBVcGRhdGVzXCIsIHR5cGU6IFwibmV3c1wiLCBjb2xTcGFuOiBcIm1kOnR3LWNvbC1zcGFuLTIgeGw6dHctY29sLXNwYW4tM1wiLCBhY2NlbnRDb2xvcjogXCJibHVlXCIsIGl0ZW1zOiBbeyB0aXRsZTogXCJBbm51YWwgQ2FyZWVyIEZhaXI6IE5leHQgV2VkbmVzZGF5IVwiLCBkZXRhaWxzOiBcIk1haW4gSGFsbCwgMTAgQU0gLSA0IFBNXCIgfSwgeyB0aXRsZTogJ0d1ZXN0IExlY3R1cmU6IFwiQUkgaW4gTW9kZXJuIFNvY2lldHlcIicsIGRldGFpbHM6IFwiU3BlYWtlcjogRHIuIEV2YSBSb3N0b3ZhLiBKdWx5IDE4dGhcIiB9XSwgbGluazogeyB0ZXh0OiBcIkFsbCBOZXdzICZyYXJyO1wiLCBocmVmOiBcIiNcIiB9IH0sXG4gICAgeyBpZDogXCJjYXJkOVwiLCB0aXRsZTogXCJEaXNjdXNzaW9uIEZvcnVtc1wiLCB0eXBlOiBcImRpc2N1c3Npb25zXCIsIGNvbFNwYW46IFwibWQ6dHctY29sLXNwYW4tMSB4bDp0dy1jb2wtc3Bhbi0yXCIsIGFjY2VudENvbG9yOiBcImVtZXJhbGRcIiwgaW5zaWdodFRhZzogXCIzIEhvdCBUb3BpY3NcIiwgaXRlbXM6IFt7IHRvcGljOiBcIkRlYmF0ZTogRnV0dXJlIG9mIFJlbmV3YWJsZSBFbmVyZ3lcIiwgZm9ydW06IFwiRU5WMTAxIEZvcnVtXCIsIGxhc3RQb3N0OiBcIjUgbWlucyBhZ29cIiB9LCB7IHRvcGljOiBcIkhlbHAgd2l0aCBDUzIxMCBBbGdvcml0aG1cIiwgZm9ydW06IFwiQ1MgU3R1ZHkgR3JvdXBcIiwgbGFzdFBvc3Q6IFwiMjMgbWlucyBhZ29cIiB9XSwgbGluazogeyB0ZXh0OiBcIkdvIHRvIEZvcnVtcyAmcmFycjtcIiwgaHJlZjogXCIjXCIgfSB9LFxuICAgIHsgaWQ6IFwiY2FyZDVcIiwgdGl0bGU6IFwiTXkgQ291cnNlc1wiLCB0eXBlOiBcImNvdXJzZXNcIiwgY29sU3BhbjogXCJtZDp0dy1jb2wtc3Bhbi0xIHhsOnR3LWNvbC1zcGFuLTFcIiwgYWNjZW50Q29sb3I6IFwicGlua1wiLCBpdGVtczogW3sgbmFtZTogXCJFQ09OMTAxOiBNaWNyb2Vjb25vbWljc1wiLCBwcm9mZXNzb3I6IFwiUHJvZi4gU2hhcm1hXCIsIGNvbG9yVGhlbWU6IFwicGlua1wiIH0sIHsgbmFtZTogXCJDUzIxMDogRGF0YSBTdHJ1Y3R1cmVzXCIsIHByb2Zlc3NvcjogXCJEci4gQ2FydGVyXCIsIGNvbG9yVGhlbWU6IFwiaW5kaWdvXCIgfV0sIGxpbms6IHsgdGV4dDogXCJDb3Vyc2UgQ2F0YWxvZyAmcmFycjtcIiwgaHJlZjogXCIjXCIgfSB9XG4gIF07XG5cbiAgc2V0dXBNb2R1bGVTY3JvbGxlcigpOiB2b2lkIHtcbiAgICBjb25zdCBtb2R1bGVzQ29udGFpbmVyID0gdGhpcy5tb2R1bGVzQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHNjcm9sbFByZXZCdG4gPSB0aGlzLnNjcm9sbFByZXZNb2R1bGVCdG5SZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2Nyb2xsTmV4dEJ0biA9IHRoaXMuc2Nyb2xsTmV4dE1vZHVsZUJ0blJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAobW9kdWxlc0NvbnRhaW5lciAmJiBzY3JvbGxQcmV2QnRuICYmIHNjcm9sbE5leHRCdG4pIHtcbiAgICAgIGNvbnN0IHNjcm9sbEFtb3VudCA9IDI1NjsgXG4gICAgICBjb25zdCB1cGRhdGVBcnJvd1N0YXRlcyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFtb2R1bGVzQ29udGFpbmVyKSByZXR1cm47XG4gICAgICAgIHNjcm9sbFByZXZCdG4uZGlzYWJsZWQgPSBtb2R1bGVzQ29udGFpbmVyLnNjcm9sbExlZnQgPD0gMDtcbiAgICAgICAgc2Nyb2xsTmV4dEJ0bi5kaXNhYmxlZCA9IG1vZHVsZXNDb250YWluZXIuc2Nyb2xsTGVmdCArIG1vZHVsZXNDb250YWluZXIuY2xpZW50V2lkdGggPj0gbW9kdWxlc0NvbnRhaW5lci5zY3JvbGxXaWR0aCAtIDE7XG4gICAgICB9O1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oc2Nyb2xsUHJldkJ0biwgJ2NsaWNrJywgKCkgPT4gbW9kdWxlc0NvbnRhaW5lci5zY3JvbGxCeSh7IGxlZnQ6IC1zY3JvbGxBbW91bnQsIGJlaGF2aW9yOiAnc21vb3RoJyB9KSk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihzY3JvbGxOZXh0QnRuLCAnY2xpY2snLCAoKSA9PiBtb2R1bGVzQ29udGFpbmVyLnNjcm9sbEJ5KHsgbGVmdDogc2Nyb2xsQW1vdW50LCBiZWhhdmlvcjogJ3Ntb290aCcgfSkpO1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4obW9kdWxlc0NvbnRhaW5lciwgJ3Njcm9sbCcsIHVwZGF0ZUFycm93U3RhdGVzKTtcbiAgICAgIG5ldyBSZXNpemVPYnNlcnZlcih1cGRhdGVBcnJvd1N0YXRlcykub2JzZXJ2ZShtb2R1bGVzQ29udGFpbmVyKTtcbiAgICAgIHNldFRpbWVvdXQodXBkYXRlQXJyb3dTdGF0ZXMsIDEwMCk7IFxuICAgICAgLy8gUmVtb3ZlIHByZXZlbnREZWZhdWx0IGZvciB3aGVlbC90b3VjaG1vdmUgdG8gYWxsb3cgbW91c2UvdG91Y2ggc2Nyb2xsaW5nXG4gICAgfVxuICB9XG5cbiAgc2V0dXBEcmFnQW5kRHJvcCgpOiB2b2lkIHtcbiAgICBjb25zdCBjYXJkc0NvbnRhaW5lciA9IHRoaXMuY2FyZHNDb250YWluZXJFbFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNhcmRzQ29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnBsYWNlaG9sZGVyISwgJ2RyYWctb3Zlci1wbGFjZWhvbGRlcicpO1xuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGNhcmRzQ29udGFpbmVyLCAnZHJhZ3N0YXJ0JywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZGFzaGJvYXJkLWNhcmQnKSkge1xuICAgICAgICB0aGlzLmRyYWdnZWRJdGVtID0gdGFyZ2V0O1xuICAgICAgICAvLyBNb2Rlcm4gRVMyMDIyKyBwYXR0ZXJuOiBVc2UgbWljcm90YXNrIGZvciBpbW1lZGlhdGUgZXhlY3V0aW9uXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0YXJnZXQsICdkcmFnZ2luZycpKTtcbiAgICAgICAgZS5kYXRhVHJhbnNmZXI/LnNldERhdGEoJ3RleHQvcGxhaW4nLCB0YXJnZXQuaWQgfHwgJ2RyYWdnYWJsZS1jYXJkJyk7XG4gICAgICAgIGlmIChlLmRhdGFUcmFuc2ZlcikgZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihjYXJkc0NvbnRhaW5lciwgJ2RyYWdlbmQnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kcmFnZ2VkSXRlbSkgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmRyYWdnZWRJdGVtLCAnZHJhZ2dpbmcnKTtcbiAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyPy5wYXJlbnROb2RlKSB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXIucGFyZW50Tm9kZSwgdGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICB0aGlzLmRyYWdnZWRJdGVtID0gbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihjYXJkc0NvbnRhaW5lciwgJ2RyYWdvdmVyJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKCF0aGlzLmRyYWdnZWRJdGVtKSByZXR1cm47XG4gICAgICBjb25zdCB0YXJnZXQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5kYXNoYm9hcmQtY2FyZCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0aGlzLmRyYWdnZWRJdGVtKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSBlLmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICAgICAgaWYgKG9mZnNldFkgPiByZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShjYXJkc0NvbnRhaW5lciwgdGhpcy5wbGFjZWhvbGRlciEsIHRhcmdldC5uZXh0U2libGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoY2FyZHNDb250YWluZXIsIHRoaXMucGxhY2Vob2xkZXIhLCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oY2FyZHNDb250YWluZXIsICdkcm9wJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHRoaXMuZHJhZ2dlZEl0ZW0gJiYgdGhpcy5wbGFjZWhvbGRlcj8ucGFyZW50Tm9kZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyLnBhcmVudE5vZGUsIHRoaXMuZHJhZ2dlZEl0ZW0sIHRoaXMucGxhY2Vob2xkZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXI/LnBhcmVudE5vZGUpIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlci5wYXJlbnROb2RlLCB0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICAgIGlmICh0aGlzLmRyYWdnZWRJdGVtKSB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZHJhZ2dlZEl0ZW0sICdkcmFnZ2luZycpO1xuICAgICAgdGhpcy5kcmFnZ2VkSXRlbSA9IG51bGw7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0dy1wLTQgc206dHctcC02IG1kOnR3LXAtOCB0dy1tYXgtdy1mdWxsIHR3LW14LWF1dG9cIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwidHctbWItOCBtZDp0dy1tYi0xMFwiPlxuICAgICAgICA8aDFcbiAgICAgICAgICAgIGNsYXNzPVwidHctdGV4dC0zeGwgc206dHctdGV4dC00eGwgdHctZm9udC1ib2xkIHR3LXRleHQtdHJhbnNwYXJlbnQgdHctYmctY2xpcC10ZXh0IHR3LWJnLWdyYWRpZW50LXRvLXIgdHctZnJvbS1wdXJwbGUtNjAwIHR3LXZpYS1waW5rLTUwMCB0dy10by1vcmFuZ2UtNTAwXCI+XG4gICAgICAgICAgICBXZWxjb21lLCB7eyBhcHBTdGF0ZS5nZXRVc2VyTmFtZSgpIHx8ICdVc2VyJyB9fSFcbiAgICAgICAgPC9oMT5cbiAgICAgICAgPHAgY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LXRleHQtZ3JheS01MDAgdHctbXQtMVwiPllvdXIgY2VudHJhbCBodWIgZm9yIGFsbCB0aGluZ3MgY29sbGVnZS48L3A+XG4gICAgICAgIDxwICpuZ0lmPVwiYXBwU3RhdGUuZ2V0VXNlckVtYWlsKClcIiBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTQwMCB0dy1tdC0xXCI+e3sgYXBwU3RhdGUuZ2V0VXNlckVtYWlsKCkgfX08L3A+XG4gICAgPC9oZWFkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwidHctbWItOCBtZDp0dy1tYi0xMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1qdXN0aWZ5LWJldHdlZW4gdHctaXRlbXMtY2VudGVyIHR3LW1iLTVcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cInR3LXRleHQteGwgdHctZm9udC1ib2xkIHR3LXRleHQtZ3JheS03MDBcIj57eyBtb2R1bGVzU2VjdGlvbkNvbmZpZy50aXRsZSB9fTwvaDI+XG4gICAgICAgICAgICA8YSAqbmdJZj1cIm1vZHVsZXNTZWN0aW9uQ29uZmlnLnNob3dWaWV3QWxsTGlua1wiIFtocmVmXT1cIm1vZHVsZXNTZWN0aW9uQ29uZmlnLnZpZXdBbGxMaW5rSHJlZlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LWZvbnQtbWVkaXVtIHR3LXRleHQtcHVycGxlLTYwMCBob3Zlcjp0dy10ZXh0LXB1cnBsZS04MDAgaG92ZXI6dHctdW5kZXJsaW5lIHR3LXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgICAgICAge3sgbW9kdWxlc1NlY3Rpb25Db25maWcudmlld0FsbExpbmtUZXh0IH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidHctcmVsYXRpdmUgZ3JvdXAvbW9kdWxlcyB0dy1tYXgtdy1mdWxsXCI+XG4gICAgICAgICAgICA8YnV0dG9uICNzY3JvbGxQcmV2TW9kdWxlQnRuIGFyaWEtbGFiZWw9XCJTY3JvbGwgcHJldmlvdXMgbW9kdWxlc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1hYnNvbHV0ZSB0dy0tbGVmdC00IHR3LXotNTAgdHctcC0yIHR3LWJnLXdoaXRlLzkwIHR3LWJnLW9wYWNpdHktOTAgdHctYmFja2Ryb3AtYmx1ci1zbSB0dy1yb3VuZGVkLWZ1bGwgdHctc2hhZG93LWxnIGhvdmVyOnR3LWJnLWdyYXktMTAwIHR3LXRyYW5zaXRpb24tYWxsIHR3LW9wYWNpdHktMTAwIG1kOmdyb3VwLWhvdmVyL21vZHVsZXM6dHctb3BhY2l0eS0xMDAgZGlzYWJsZWQ6dHctb3BhY2l0eS0zMCBkaXNhYmxlZDp0dy1jdXJzb3Itbm90LWFsbG93ZWQgdHctcG9pbnRlci1ldmVudHMtYXV0b1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDIuODc1cmVtO1wiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ0dy13LTUgdHctaC01IHR3LXRleHQtZ3JheS03MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGQ9XCJNMTUgMTlsLTctNyA3LTdcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiAjbW9kdWxlc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHctZmxleCB0dy1zcGFjZS14LTQgdHctcGItNiB0dy1vdmVyZmxvdy14LWF1dG8gdHctb3ZlcmZsb3cteS12aXNpYmxlIHR3LXNjcm9sbC1zbW9vdGggdHctc25hcC14IHR3LXNuYXAtbWFuZGF0b3J5IGhpZGUtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvdWNoLWFjdGlvbjogbm9uZTsgcG9pbnRlci1ldmVudHM6IGF1dG87XCI+XG4gICAgICAgICAgICAgICAgPGEgKm5nRm9yPVwibGV0IG1vZHVsZSBvZiBtb2R1bGVzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTW9kdWxlKG1vZHVsZSlcIlxuICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5Nb2R1bGUobW9kdWxlKVwiXG4gICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib3Blbk1vZHVsZShtb2R1bGUpXCJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1vZHVsZS1jYXJkIHR3LXJlbGF0aXZlIHR3LW92ZXJmbG93LWhpZGRlbiBncm91cCB0dy1mbGV4LXNocmluay0wIHR3LXctNjAgdHctaC0yOCB0dy1iZy13aGl0ZSB0dy1ib3JkZXIgdHctYm9yZGVyLWdyYXktMjAwLzgwIHR3LXJvdW5kZWQteGwgdHctcC0zIHR3LXNoYWRvdy1tZCBob3Zlcjp0dy1zaGFkb3cteGwgdHctdHJhbnNpdGlvbi1hbGwgdHctZHVyYXRpb24tMzAwIHR3LWVhc2Utb3V0IHR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LXNwYWNlLXgtNCB0dy1zbmFwLXN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1hY2NlbnQtY29sb3JdPVwibW9kdWxlLmFjY2VudENvbG9yXCIgXG4gICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcGVuIG1vZHVsZTogJyArIG1vZHVsZS5zeW1lX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1yZWxhdGl2ZSB0dy1mbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdy0xNiB0dy1oLTE2IHR3LXJvdW5kZWQtbGcgdHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1jZW50ZXIgdHctdHJhbnNpdGlvbi1hbGwgdHctZHVyYXRpb24tMzAwIGdyb3VwLWhvdmVyOnR3LXNjYWxlLTEwNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJtb2R1bGU/LmFjY2VudENvbG9yICsgJzIyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gaWNvbiByZW5kZXJpbmcgaGVyZSBpZiBuZWVkZWQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gY2xhc3M9XCJtcHJvLWljb24tZmllbGRcIiB0eXBlPVwibm9uZVwiPnt7bW9kdWxlPy5zeW1lX2ljb259fTwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihtb2R1bGU/LnBpbGxDb3VudCB8fCAwKSA+IDBcIiBjbGFzcz1cInR3LWFic29sdXRlIHR3LS10b3AtMS41IHR3LS1yaWdodC0xLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LWZsZXggdHctaC01IHR3LXctNSB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1jZW50ZXIgdHctcm91bmRlZC1mdWxsIHR3LXRleHQtd2hpdGUgdHctdGV4dC14cyB0dy1mb250LWJvbGQgdHctcmluZy0yIHR3LXJpbmctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm1vZHVsZT8uYWNjZW50Q29sb3JcIj57e21vZHVsZT8ucGlsbENvdW50fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWZsZXgtY29sIHR3LWZsZXgtZ3JvdyB0dy1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0dy1mb250LXNlbWlib2xkIHR3LXRleHQteHMgdHctdGV4dC1ncmF5LTgwMCB0dy10cnVuY2F0ZSBsaW5lLWNsYW1wLTFcIiBjaWRlRWxlVG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaWRlRWxlVG9vbHRpcF09XCJtb2R1bGUuc3ltZV90aXRsZVwiIFt0b29sdGlwRGVsYXldPVwiMzAwXCIgW3Rvb2x0aXBQbGFjZW1lbnRdPVwiJ3RvcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21vZHVsZT8uc3ltZV90aXRsZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTQwMCB0dy1tdC0wLjUgdHctb3ZlcmZsb3ctaGlkZGVuIHR3LXRleHQtZWxsaXBzaXMgdHctbGluZS1jbGFtcC0yIHR3LXRleHQtanVzdGlmeSBtaW4taC1bMi41cmVtXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bW9kdWxlPy5zeW1lX2Rlc2N9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvbiAjc2Nyb2xsTmV4dE1vZHVsZUJ0biBhcmlhLWxhYmVsPVwiU2Nyb2xsIG5leHQgbW9kdWxlc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1hYnNvbHV0ZSB0dy0tcmlnaHQtNCB0dy16LTUwIHR3LXAtMiB0dy1iZy13aGl0ZS85MCB0dy1iZy1vcGFjaXR5LTkwIHR3LWJhY2tkcm9wLWJsdXItc20gdHctcm91bmRlZC1mdWxsIHR3LXNoYWRvdy1sZyBob3Zlcjp0dy1iZy1ncmF5LTEwMCB0dy10cmFuc2l0aW9uLWFsbCB0dy1vcGFjaXR5LTEwMCBtZDpncm91cC1ob3Zlci9tb2R1bGVzOnR3LW9wYWNpdHktMTAwIGRpc2FibGVkOnR3LW9wYWNpdHktMzAgZGlzYWJsZWQ6dHctY3Vyc29yLW5vdC1hbGxvd2VkIHR3LXBvaW50ZXItZXZlbnRzLWF1dG9cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAyLjg3NXJlbTtcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwidHctdy01IHR3LWgtNSB0dy10ZXh0LWdyYXktNzAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjJcIiBkPVwiTTkgNWw3IDctNyA3XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPG1haW4gY2xhc3M9XCJ0dy0tbXQtOCBtZDp0dy0tbXQtMTBcIj5cbiAgICAgICAgPGRpdiAjY2FyZHNDb250YWluZXJFbCBjbGFzcz1cInR3LWdyaWQgdHctZ3JpZC1jb2xzLTEgbWQ6dHctZ3JpZC1jb2xzLTIgeGw6dHctZ3JpZC1jb2xzLTMgdHctZ2FwLTVcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNhcmQgb2YgY2FyZHNEYXRhXCIgZHJhZ2dhYmxlPVwidHJ1ZVwiIFtpZF09XCJjYXJkLmlkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhc2hib2FyZC1jYXJkIHR3LWJnLXdoaXRlIHR3LWJvcmRlciB0dy1ib3JkZXItZ3JheS0yMDAvNzAgdHctcm91bmRlZC14bCB0dy1wLTQgdHctc2hhZG93LWxnIGhvdmVyOnR3LXNoYWRvdy14bCBob3Zlcjp0dy0tdHJhbnNsYXRlLXktMC41IHR3LXRyYW5zaXRpb24tYWxsIHR3LWN1cnNvci1ncmFiXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjYXJkLmNvbFNwYW4gfHwgJ3R3LWNvbC1zcGFuLTEnXCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FyZC50eXBlICE9PSAnc3R1ZHlTdHJlYWsnICYmIGNhcmQudHlwZSAhPT0gJ3F1aWNrU3RhdHMnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LWp1c3RpZnktYmV0d2VlbiB0dy1pdGVtcy1jZW50ZXIgdHctbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0dy10ZXh0LW1kIHR3LWZvbnQtc2VtaWJvbGRcIiBbbmdDbGFzc109XCIndHctdGV4dC0nICsgY2FyZC5hY2NlbnRDb2xvciArICctNzAwJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjYXJkLnRpdGxlfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhcmQudXJnZW50VGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXRleHQteHMgdHctYmctcmVkLTEwMCB0dy10ZXh0LXJlZC03MDAgdHctcHgtMi41IHR3LXB5LTEgdHctcm91bmRlZC1mdWxsIHR3LWZvbnQtc2VtaWJvbGRcIj57e2NhcmQudXJnZW50VGV4dH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhcmQuaW5zaWdodFRhZ1wiIGNsYXNzPVwidHctdGV4dC14cyB0dy1weC0yLjUgdHctcHktMSB0dy1yb3VuZGVkLWZ1bGwgdHctZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIndHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTEwMCB0dy10ZXh0LScgKyBjYXJkLmFjY2VudENvbG9yICsgJy03MDAnXCI+e3tjYXJkLmluc2lnaHRUYWd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnQtYXJlYSB0dy1zcGFjZS15LTMgdHctdGV4dC1zbSB0dy1wci0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNhcmQudHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ1N3aXRjaENhc2U9XCInZGVhZGxpbmVzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJkLml0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LWp1c3RpZnktYmV0d2VlbiB0dy1pdGVtcy1jZW50ZXIgdHctcC0yLjUgdHctcm91bmRlZC1sZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy1iZy0nICsgY2FyZC5hY2NlbnRDb2xvciArICctNTAvNjAgaG92ZXI6dHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTEwMC83MCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidHctdGV4dC1ncmF5LTcwMCB0dy1mb250LW1lZGl1bVwiPnt7aXRlbS50ZXh0fX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTUwMFwiPnt7aXRlbS5zdWJ0ZXh0fX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ1N3aXRjaENhc2U9XCInbmV3cydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2FyZC5pdGVtc1wiIGNsYXNzPVwidHctcC0yLjUgdHctcm91bmRlZC1sZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy1iZy0nICsgY2FyZC5hY2NlbnRDb2xvciArICctNTAvNjAgaG92ZXI6dHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTEwMC83MCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy1mb250LW1lZGl1bSB0dy10ZXh0LWdyYXktODAwXCI+e3tpdGVtLnRpdGxlfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidHctdGV4dC14cyB0dy10ZXh0LWdyYXktNTAwXCI+e3tpdGVtLmRldGFpbHN9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdTd2l0Y2hDYXNlPVwiJ2dyYWRlcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2FyZC5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctZmxleCB0dy1qdXN0aWZ5LWJldHdlZW4gdHctaXRlbXMtY2VudGVyIHR3LXAtMi41IHR3LXJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIndHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTUwLzYwIGhvdmVyOnR3LWJnLScgKyBjYXJkLmFjY2VudENvbG9yICsgJy0xMDAvNzAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctdGV4dC1ncmF5LTcwMFwiPnt7aXRlbS5zdWJqZWN0fX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0dy1mb250LWJvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jb2xvclwiPnt7aXRlbS5ncmFkZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ1N3aXRjaENhc2U9XCIncHJvZmVzc29yQ29ubmVjdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2FyZC5pdGVtc1wiIGNsYXNzPVwidHctcC0yLjUgdHctcm91bmRlZC1sZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy1iZy0nICsgY2FyZC5hY2NlbnRDb2xvciArICctNTAvNjAgaG92ZXI6dHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTEwMC83MCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy1mb250LW1lZGl1bSB0dy10ZXh0LWdyYXktNzAwXCI+e3tpdGVtLm5hbWV9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtZ3JheS01MDBcIj57e2l0ZW0ub2ZmaWNlSG91cnN9fTwvcD48YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLm1lc3NhZ2VMaW5rXCIgW2hyZWZdPVwiaXRlbS5tZXNzYWdlTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXRleHQteHMgaG92ZXI6dHctdW5kZXJsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy10ZXh0LScgKyBjYXJkLmFjY2VudENvbG9yICsgJy02MDAnXCI+U2VuZCBNZXNzYWdlPC9hPjxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uYXBwb2ludG1lbnRMaW5rXCIgW2hyZWZdPVwiaXRlbS5hcHBvaW50bWVudExpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy10ZXh0LXhzIGhvdmVyOnR3LXVuZGVybGluZSB0dy1tbC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy10ZXh0LScgKyBjYXJkLmFjY2VudENvbG9yICsgJy02MDAnXCI+Qm9vayBBcHBvaW50bWVudDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidjb3Vyc2VzJ1wiIGNsYXNzPVwidHctZ3JpZCB0dy1ncmlkLWNvbHMtMSBzbTp0dy1ncmlkLWNvbHMtMiB0dy1nYXAtMi41XCI+PGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2FyZC5pdGVtc1wiIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1ibG9jayB0dy1wLTIuNSB0dy1yb3VuZGVkLWxnIHR3LXRyYW5zaXRpb24tYWxsIGdyb3VwIHR3LXJpbmctMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy1iZy0nICsgaXRlbS5jb2xvclRoZW1lICsgJy01MC83MCBob3Zlcjp0dy1iZy0nICsgaXRlbS5jb2xvclRoZW1lICsgJy0xMDAvODAgdHctcmluZy0nICsgaXRlbS5jb2xvclRoZW1lICsgJy0yMDAvNzAgaG92ZXI6dHctcmluZy0nICsgaXRlbS5jb2xvclRoZW1lICsgJy0zMDAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidHctZm9udC1zZW1pYm9sZCBncm91cC1ob3Zlcjp0dy10ZXh0LXt7aXRlbS5jb2xvclRoZW1lfX0tODAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy10ZXh0LScgKyBpdGVtLmNvbG9yVGhlbWUgKyAnLTcwMCdcIj57e2l0ZW0ubmFtZX19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInR3LXRleHQteHMgZ3JvdXAtaG92ZXI6dHctdGV4dC17e2l0ZW0uY29sb3JUaGVtZX19LTYwMCB0dy1tdC0wLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ3R3LXRleHQtJyArIGl0ZW0uY29sb3JUaGVtZSArICctNTAwJ1wiPnt7aXRlbS5wcm9mZXNzb3J9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgKm5nU3dpdGNoQ2FzZT1cIidldmVudHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNhcmQuaXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LWZsZXggdHctaXRlbXMtc3RhcnQgdHctc3BhY2UteC0yLjUgdHctcC0yLjUgdHctcm91bmRlZC1sZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy1iZy0nICsgY2FyZC5hY2NlbnRDb2xvciArICctNTAvNjAgaG92ZXI6dHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTEwMC83MCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXRleHQtd2hpdGUgdHctdGV4dC14cyB0dy1mb250LWJvbGQgdHctcC0yIHR3LXJvdW5kZWQtbWQgdHctZmxleCB0dy1mbGV4LWNvbCB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1jZW50ZXIgdHctdy0xMiB0dy1oLTEyIHR3LWZsZXgtc2hyaW5rLTAgdHctc2hhZG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0udGhlbWVDb2xvclwiPjxzcGFuPnt7aXRlbS5kYXRlPy5tb250aH19PC9zcGFuPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy10ZXh0LWxnXCI+e3tpdGVtLmRhdGU/LmRheX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy10ZXh0LWdyYXktNzAwIHR3LWZvbnQtbWVkaXVtXCI+e3tpdGVtLnRpdGxlfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTUwMFwiPnt7aXRlbS5kZXRhaWxzfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3N0dWR5U3RyZWFrJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LWZsZXgtY29sIHR3LWl0ZW1zLWNlbnRlciB0dy1qdXN0aWZ5LWNlbnRlciB0dy10ZXh0LWNlbnRlciB0dy1mbGV4LWdyb3cgdHctcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInR3LXctMTIgdHctaC0xMiB0dy1tYi0yXCIgW25nQ2xhc3NdPVwiJ3R3LXRleHQtJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTUwMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3LjY1NyAxOC42NTdBOCA4IDAgMDE2LjM0MyA3LjM0M1M3IDkgOSAxMGMwLTIgLjUtNSAyLjk4Ni03LjAxNEE4LjAwMyA4LjAwMyAwIDAxMjIgMTJjMCAzLTEgNy02LjY1NyA3LjM0M0E3Ljk3NSA3Ljk3NSAwIDAxMTcuNjU3IDE4LjY1N3pcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS44NzkgMTYuMTIxQTMgMyAwIDEwMTIuMDE1IDExTDExIDE0SDljMCAuNzY4LjI5MyAxLjUzNi44NzkgMi4xMjF6XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInR3LXRleHQtbWQgdHctZm9udC1zZW1pYm9sZCB0dy1tYi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ3R3LXRleHQtJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTYwMCdcIj57e2NhcmQudGl0bGV9fTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtZ3JheS01MDBcIj57e2NhcmQuZGVzY3JpcHRpb259fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctbXQtMyB0dy13LWZ1bGwgdHctYmctZ3JheS0yMDAgdHctcm91bmRlZC1mdWxsIHR3LWgtMS41XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1oLTEuNSB0dy1yb3VuZGVkLWZ1bGxcIiBbbmdDbGFzc109XCIndHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTUwMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNhcmQucHJvZ3Jlc3NcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3F1aWNrU3RhdHMnXCIgY2xhc3M9XCJ0dy1zcGFjZS15LTMuNSB0dy1mbGV4LWdyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0dy10ZXh0LW1kIHR3LWZvbnQtc2VtaWJvbGQgdHctbWItMyB0dy1ib3JkZXItYiB0dy1ib3JkZXItZ3JheS0yMDAvODAgdHctcGItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy10ZXh0LScgKyBjYXJkLmFjY2VudENvbG9yICsgJy03MDAnXCI+e3tjYXJkLnRpdGxlfX08L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHN0YXQgb2YgY2FyZC5zdGF0c1wiIGNsYXNzPVwidHctdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3RhdC5ncmFkaWVudFwiIGNsYXNzPVwidHctdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctanVzdGlmeS1iZXR3ZWVuIHR3LWl0ZW1zLWNlbnRlciB0dy1tYi0wLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInR3LXRleHQtZ3JheS02MDAgdHctZm9udC1tZWRpdW1cIj57e3N0YXQubGFiZWx9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmVlbi02MDAgdHctZm9udC1zZW1pYm9sZFwiPnt7c3RhdC52YWx1ZX19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdy1mdWxsIHR3LWJnLWdyYXktMjAwIHR3LXJvdW5kZWQtZnVsbCB0dy1oLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctaC0yIHR3LXJvdW5kZWQtZnVsbFwiIFtuZ0NsYXNzXT1cInN0YXQuZ3JhZGllbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwic3RhdC52YWx1ZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXN0YXQuZ3JhZGllbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidHctdGV4dC1ncmF5LTYwMCB0dy1mb250LW1lZGl1bSB0dy1tYi0wLjVcIj57e3N0YXQubGFiZWx9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIFtuZ0NsYXNzXT1cInN0YXQudmFsdWVDbGFzcyB8fCAnJ1wiPnt7c3RhdC52YWx1ZX19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ1N3aXRjaENhc2U9XCInZGlzY3Vzc2lvbnMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNhcmQuaXRlbXNcIiBjbGFzcz1cInR3LXAtMi41IHR3LXJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIndHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTUwLzYwIGhvdmVyOnR3LWJnLScgKyBjYXJkLmFjY2VudENvbG9yICsgJy0xMDAvNzAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJ0dy1ibG9jayBncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy1mb250LW1lZGl1bSB0dy10ZXh0LWdyYXktNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCInZ3JvdXAtaG92ZXI6dHctdGV4dC0nICsgY2FyZC5hY2NlbnRDb2xvciArICctNzAwJ1wiPnt7aXRlbS50b3BpY319XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTUwMFwiPnt7aXRlbS5mb3J1bX19IC0gTGFzdCBwb3N0OiB7e2l0ZW0ubGFzdFBvc3R9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgKm5nU3dpdGNoQ2FzZT1cIidxdWlja0xpbmtzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJkLml0ZW1zXCI+PGEgaHJlZj1cIiNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1wLTIgdHctcm91bmRlZC1sZyB0dy10ZXh0LWdyYXktNzAwIHR3LXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy1iZy0nICsgY2FyZC5hY2NlbnRDb2xvciArICctNTAvNjAgaG92ZXI6dHctYmctJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTEwMC83MCBob3Zlcjp0dy10ZXh0LScgKyBjYXJkLmFjY2VudENvbG9yICsgJy03MDAnXCI+PHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdy00IHR3LWgtNCB0dy1tci0yXCIgW25nQ2xhc3NdPVwiJ3R3LXRleHQtJyArIGNhcmQuYWNjZW50Q29sb3IgKyAnLTUwMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJpdGVtLnNhZmVJY29uU1ZHXCI+PC9zdmc+e3tpdGVtLnRleHR9fTwvYT48L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImNhcmQubGlua1wiIFtocmVmXT1cImNhcmQubGluay5ocmVmXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1tdC1hdXRvIHR3LXB0LTMgdHctdGV4dC14cyB0dy1mb250LW1lZGl1bSB0dy13LWZ1bGwgdHctdGV4dC1sZWZ0IGhvdmVyOnR3LXVuZGVybGluZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0dy10ZXh0LScgKyBjYXJkLmFjY2VudENvbG9yICsgJy02MDAgaG92ZXI6dHctdGV4dC0nICsgY2FyZC5hY2NlbnRDb2xvciArICctODAwJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e2NhcmQubGluay50ZXh0fX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuPC9kaXY+Il19
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { CideLytHeaderWrapperComponent } from "../../header/header-wrapper/header-wrapper.component";
|
|
3
|
+
import { CideLytSidebarWrapperComponent } from "../../sidebar/sidebar-wrapper/sidebar-wrapper.component";
|
|
4
|
+
import { CideLytSidedrawerWrapperComponent } from "../../sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component";
|
|
5
|
+
import { CideLytFooterWrapperComponent } from "../../footer/footer-wrapper/footer-wrapper.component";
|
|
6
|
+
import { CideLytConsoleWrapperComponent } from "../../console/console-wrapper/console-wrapper.component";
|
|
7
7
|
import { RouterModule } from '@angular/router';
|
|
8
8
|
import { CideLytRequestWrapperComponent } from "../../request/request-wrapper/request-wrapper.component";
|
|
9
|
+
import { TabContentComponent } from '../../request/tab-content/tab-content.component';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/router";
|
|
11
11
|
export class CideLytLayoutWrapperComponent {
|
|
12
12
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytLayoutWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideLytLayoutWrapperComponent, isStandalone: true, selector: "cide-lyt-layout-wrapper", ngImport: i0, template: "<div class=\"tw-w-full tw-h-screen tw-relative\"
|
|
13
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideLytLayoutWrapperComponent, isStandalone: true, selector: "cide-lyt-layout-wrapper", ngImport: i0, template: "<div class=\"tw-w-full tw-table tw-h-screen tw-relative\" id=\"cide-lyt-layout-wrapper\">\r\n <!-- We will use here Header -->\r\n <cide-lyt-header-wrapper class=\"tw-table-row tw-h-0\"></cide-lyt-header-wrapper>\r\n <!-- we will use here request tabs -->\r\n <div class=\"tw-table-row\" id=\"cide-lyt-sidebar-page-wrapper\">\r\n <div class=\"cide-lyt-sidebar-page-wrapper tw-h-full tw-w-screen\" id=\"cide-lyt-sidebar-page-inner-wrapper\">\r\n <!-- We will use here Sidebar -->\r\n <cide-lyt-sidebar-wrapper id=\"cide-lyt-sidebar-page\"\r\n class=\"cide-lyt-sidebar-page-hide\"></cide-lyt-sidebar-wrapper>\r\n <!-- We will use here Router Outlet -->\r\n <div class=\"cide-lyt-page-wrapper tw-block tw-h-full tw-w-full\" id=\"cide-lyt-page-wrapper\">\r\n <cide-lyt-request-wrapper class=\"tw-w-[inherit] tw-h-auto\"></cide-lyt-request-wrapper>\r\n <div class=\"cide-lyt-outlet-sidedrawer-wrapper tw-table-row\"\r\n id=\"cide-lyt-outlet-sidedrawer-wrapper\">\r\n <div class=\"tw-w-full tw-h-full tw-overflow-y-auto cide-scrollbar-width-thin\"\r\n id=\"cide-lyt-outlet-wrapper\">\r\n <cide-lyt-tab-content></cide-lyt-tab-content>\r\n </div>\r\n <!-- We will use here Side Drawer -->\r\n <cide-lyt-sidedrawer-wrapper></cide-lyt-sidedrawer-wrapper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cide-lyt-footer-console-wrapper cide-lyt-footer-console-wrapper-hide tw-relative tw-table-row tw-h-0\"\r\n id=\"cide-lyt-footer-console-wrapper\">\r\n <!-- We will use here footer -->\r\n <cide-lyt-footer-wrapper></cide-lyt-footer-wrapper>\r\n <!-- We will use here Console -->\r\n <cide-lyt-console-wrapper></cide-lyt-console-wrapper>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "component", type: CideLytHeaderWrapperComponent, selector: "cide-lyt-header-wrapper" }, { kind: "component", type: CideLytSidebarWrapperComponent, selector: "cide-lyt-sidebar-wrapper" }, { kind: "component", type: CideLytSidedrawerWrapperComponent, selector: "cide-lyt-sidedrawer-wrapper" }, { kind: "component", type: CideLytFooterWrapperComponent, selector: "cide-lyt-footer-wrapper" }, { kind: "component", type: CideLytConsoleWrapperComponent, selector: "cide-lyt-console-wrapper" }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: CideLytRequestWrapperComponent, selector: "cide-lyt-request-wrapper" }, { kind: "component", type: TabContentComponent, selector: "cide-lyt-tab-content" }] }); }
|
|
14
14
|
}
|
|
15
15
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytLayoutWrapperComponent, decorators: [{
|
|
16
16
|
type: Component,
|
|
17
|
-
args: [{ selector: 'cide-lyt-layout-wrapper', standalone: true, imports: [
|
|
17
|
+
args: [{ selector: 'cide-lyt-layout-wrapper', standalone: true, imports: [
|
|
18
|
+
CideLytHeaderWrapperComponent,
|
|
19
|
+
CideLytSidebarWrapperComponent,
|
|
20
|
+
CideLytSidedrawerWrapperComponent,
|
|
21
|
+
CideLytFooterWrapperComponent,
|
|
22
|
+
CideLytConsoleWrapperComponent,
|
|
23
|
+
RouterModule,
|
|
24
|
+
CideLytRequestWrapperComponent,
|
|
25
|
+
TabContentComponent
|
|
26
|
+
], template: "<div class=\"tw-w-full tw-table tw-h-screen tw-relative\" id=\"cide-lyt-layout-wrapper\">\r\n <!-- We will use here Header -->\r\n <cide-lyt-header-wrapper class=\"tw-table-row tw-h-0\"></cide-lyt-header-wrapper>\r\n <!-- we will use here request tabs -->\r\n <div class=\"tw-table-row\" id=\"cide-lyt-sidebar-page-wrapper\">\r\n <div class=\"cide-lyt-sidebar-page-wrapper tw-h-full tw-w-screen\" id=\"cide-lyt-sidebar-page-inner-wrapper\">\r\n <!-- We will use here Sidebar -->\r\n <cide-lyt-sidebar-wrapper id=\"cide-lyt-sidebar-page\"\r\n class=\"cide-lyt-sidebar-page-hide\"></cide-lyt-sidebar-wrapper>\r\n <!-- We will use here Router Outlet -->\r\n <div class=\"cide-lyt-page-wrapper tw-block tw-h-full tw-w-full\" id=\"cide-lyt-page-wrapper\">\r\n <cide-lyt-request-wrapper class=\"tw-w-[inherit] tw-h-auto\"></cide-lyt-request-wrapper>\r\n <div class=\"cide-lyt-outlet-sidedrawer-wrapper tw-table-row\"\r\n id=\"cide-lyt-outlet-sidedrawer-wrapper\">\r\n <div class=\"tw-w-full tw-h-full tw-overflow-y-auto cide-scrollbar-width-thin\"\r\n id=\"cide-lyt-outlet-wrapper\">\r\n <cide-lyt-tab-content></cide-lyt-tab-content>\r\n </div>\r\n <!-- We will use here Side Drawer -->\r\n <cide-lyt-sidedrawer-wrapper></cide-lyt-sidedrawer-wrapper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cide-lyt-footer-console-wrapper cide-lyt-footer-console-wrapper-hide tw-relative tw-table-row tw-h-0\"\r\n id=\"cide-lyt-footer-console-wrapper\">\r\n <!-- We will use here footer -->\r\n <cide-lyt-footer-wrapper></cide-lyt-footer-wrapper>\r\n <!-- We will use here Console -->\r\n <cide-lyt-console-wrapper></cide-lyt-console-wrapper>\r\n </div>\r\n</div>" }]
|
|
18
27
|
}] });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9sYXlvdXQvbGF5b3V0LXdyYXBwZXIvbGF5b3V0LXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9sYXlvdXQvbGF5b3V0LXdyYXBwZXIvbGF5b3V0LXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNySCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDekcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBa0J0RixNQUFNLE9BQU8sNkJBQTZCOzhHQUE3Qiw2QkFBNkI7a0dBQTdCLDZCQUE2QixtRkMxQjFDLCsyREErQk0sMEREZkUsNkJBQTZCLG9FQUM3Qiw4QkFBOEIscUVBQzlCLGlDQUFpQyx3RUFDakMsNkJBQTZCLG9FQUM3Qiw4QkFBOEIsb0VBQzlCLFlBQVksK0JBQ1osOEJBQThCLHFFQUM5QixtQkFBbUI7OzJGQUdkLDZCQUE2QjtrQkFoQnpDLFNBQVM7K0JBQ0kseUJBQXlCLGNBQ3ZCLElBQUksV0FHUDt3QkFDTCw2QkFBNkI7d0JBQzdCLDhCQUE4Qjt3QkFDOUIsaUNBQWlDO3dCQUNqQyw2QkFBNkI7d0JBQzdCLDhCQUE4Qjt3QkFDOUIsWUFBWTt3QkFDWiw4QkFBOEI7d0JBQzlCLG1CQUFtQjtxQkFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENpZGVMeXRIZWFkZXJXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2hlYWRlci9oZWFkZXItd3JhcHBlci9oZWFkZXItd3JhcHBlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IENpZGVMeXRTaWRlYmFyV3JhcHBlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9zaWRlYmFyL3NpZGViYXItd3JhcHBlci9zaWRlYmFyLXdyYXBwZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDaWRlTHl0U2lkZWRyYXdlcldyYXBwZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vc2lkZWRyYXdlci9zaWRlZHJhd2VyLXdyYXBwZXIvc2lkZWRyYXdlci13cmFwcGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ2lkZUx5dEZvb3RlcldyYXBwZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vZm9vdGVyL2Zvb3Rlci13cmFwcGVyL2Zvb3Rlci13cmFwcGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ2lkZUx5dENvbnNvbGVXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbnNvbGUvY29uc29sZS13cmFwcGVyL2NvbnNvbGUtd3JhcHBlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDaWRlTHl0UmVxdWVzdFdyYXBwZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcmVxdWVzdC9yZXF1ZXN0LXdyYXBwZXIvcmVxdWVzdC13cmFwcGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGFiQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3JlcXVlc3QvdGFiLWNvbnRlbnQvdGFiLWNvbnRlbnQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjaWRlLWx5dC1sYXlvdXQtd3JhcHBlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGF5b3V0LXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9sYXlvdXQtd3JhcHBlci5jb21wb25lbnQuY3NzJywgICAgXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDaWRlTHl0SGVhZGVyV3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgQ2lkZUx5dFNpZGViYXJXcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICBDaWRlTHl0U2lkZWRyYXdlcldyYXBwZXJDb21wb25lbnQsXG4gICAgICAgIENpZGVMeXRGb290ZXJXcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICBDaWRlTHl0Q29uc29sZVdyYXBwZXJDb21wb25lbnQsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgQ2lkZUx5dFJlcXVlc3RXcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICBUYWJDb250ZW50Q29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBDaWRlTHl0TGF5b3V0V3JhcHBlckNvbXBvbmVudCB7XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0dy13LWZ1bGwgdHctdGFibGUgdHctaC1zY3JlZW4gdHctcmVsYXRpdmVcIiBpZD1cImNpZGUtbHl0LWxheW91dC13cmFwcGVyXCI+XHJcbiAgIDwhLS0gV2Ugd2lsbCB1c2UgaGVyZSBIZWFkZXIgIC0tPlxyXG4gICA8Y2lkZS1seXQtaGVhZGVyLXdyYXBwZXIgY2xhc3M9XCJ0dy10YWJsZS1yb3cgdHctaC0wXCI+PC9jaWRlLWx5dC1oZWFkZXItd3JhcHBlcj5cclxuICAgPCEtLSB3ZSB3aWxsIHVzZSBoZXJlIHJlcXVlc3QgdGFicyAtLT5cclxuICAgPGRpdiBjbGFzcz1cInR3LXRhYmxlLXJvd1wiIGlkPVwiY2lkZS1seXQtc2lkZWJhci1wYWdlLXdyYXBwZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNpZGUtbHl0LXNpZGViYXItcGFnZS13cmFwcGVyIHR3LWgtZnVsbCAgdHctdy1zY3JlZW5cIiBpZD1cImNpZGUtbHl0LXNpZGViYXItcGFnZS1pbm5lci13cmFwcGVyXCI+XHJcbiAgICAgICAgIDwhLS0gV2Ugd2lsbCB1c2UgaGVyZSBTaWRlYmFyIC0tPlxyXG4gICAgICAgICA8Y2lkZS1seXQtc2lkZWJhci13cmFwcGVyIGlkPVwiY2lkZS1seXQtc2lkZWJhci1wYWdlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJjaWRlLWx5dC1zaWRlYmFyLXBhZ2UtaGlkZVwiPjwvY2lkZS1seXQtc2lkZWJhci13cmFwcGVyPlxyXG4gICAgICAgICA8IS0tIFdlIHdpbGwgdXNlIGhlcmUgUm91dGVyIE91dGxldCAtLT5cclxuICAgICAgICAgPGRpdiBjbGFzcz1cImNpZGUtbHl0LXBhZ2Utd3JhcHBlciB0dy1ibG9jayB0dy1oLWZ1bGwgdHctdy1mdWxsXCIgaWQ9XCJjaWRlLWx5dC1wYWdlLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGNpZGUtbHl0LXJlcXVlc3Qtd3JhcHBlciBjbGFzcz1cInR3LXctW2luaGVyaXRdIHR3LWgtYXV0b1wiPjwvY2lkZS1seXQtcmVxdWVzdC13cmFwcGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2lkZS1seXQtb3V0bGV0LXNpZGVkcmF3ZXItd3JhcHBlciB0dy10YWJsZS1yb3dcIlxyXG4gICAgICAgICAgICAgICBpZD1cImNpZGUtbHl0LW91dGxldC1zaWRlZHJhd2VyLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXctZnVsbCB0dy1oLWZ1bGwgdHctb3ZlcmZsb3cteS1hdXRvIGNpZGUtc2Nyb2xsYmFyLXdpZHRoLXRoaW5cIlxyXG4gICAgICAgICAgICAgICAgICBpZD1cImNpZGUtbHl0LW91dGxldC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxjaWRlLWx5dC10YWItY29udGVudD48L2NpZGUtbHl0LXRhYi1jb250ZW50PlxyXG4gICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgPCEtLSBXZSB3aWxsIHVzZSBoZXJlIFNpZGUgRHJhd2VyIC0tPlxyXG4gICAgICAgICAgICAgICA8Y2lkZS1seXQtc2lkZWRyYXdlci13cmFwcGVyPjwvY2lkZS1seXQtc2lkZWRyYXdlci13cmFwcGVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICA8L2Rpdj5cclxuICAgPGRpdiBjbGFzcz1cImNpZGUtbHl0LWZvb3Rlci1jb25zb2xlLXdyYXBwZXIgY2lkZS1seXQtZm9vdGVyLWNvbnNvbGUtd3JhcHBlci1oaWRlIHR3LXJlbGF0aXZlIHR3LXRhYmxlLXJvdyB0dy1oLTBcIlxyXG4gICAgICBpZD1cImNpZGUtbHl0LWZvb3Rlci1jb25zb2xlLXdyYXBwZXJcIj5cclxuICAgICAgPCEtLSBXZSB3aWxsIHVzZSBoZXJlIGZvb3RlciAtLT5cclxuICAgICAgPGNpZGUtbHl0LWZvb3Rlci13cmFwcGVyPjwvY2lkZS1seXQtZm9vdGVyLXdyYXBwZXI+XHJcbiAgICAgIDwhLS0gV2Ugd2lsbCB1c2UgaGVyZSBDb25zb2xlIC0tPlxyXG4gICAgICA8Y2lkZS1seXQtY29uc29sZS13cmFwcGVyPjwvY2lkZS1seXQtY29uc29sZS13cmFwcGVyPlxyXG4gICA8L2Rpdj5cclxuPC9kaXY+Il19
|