cloud-ide-element 0.0.1 → 1.0.2
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 +271 -24
- package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +182 -0
- package/esm2022/lib/components/data-grid/data-grid.component.mjs +1363 -0
- package/esm2022/lib/components/data-grid/data-grid.types.mjs +37 -0
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +396 -0
- package/esm2022/lib/components/global-notifications/global-notifications.component.mjs +30 -0
- package/esm2022/lib/components/json-editor/json-editor.component.mjs +521 -0
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +33 -0
- package/esm2022/lib/components/toast-notification/toast-notification.component.mjs +152 -0
- package/esm2022/lib/elements/button/cide-ele-button.component.mjs +249 -0
- package/esm2022/lib/elements/file-input/file-input.component.mjs +83 -0
- package/esm2022/lib/elements/icon/icon.component.mjs +5 -3
- package/esm2022/lib/elements/input/input.component.mjs +34 -20
- package/esm2022/lib/elements/select/select.component.mjs +471 -0
- package/esm2022/lib/elements/tab/cide-ele-tab.component.mjs +74 -0
- package/esm2022/lib/elements/textarea/textarea.component.mjs +157 -0
- package/esm2022/lib/services/confirmation.service.mjs +151 -0
- package/esm2022/lib/services/dropdown-manager.service.mjs +93 -0
- package/esm2022/lib/services/notification.service.mjs +196 -0
- package/esm2022/lib/utils/directives/resizer/resizer.directive.mjs +231 -0
- package/esm2022/lib/utils/directives/tooltip/tooltip.directive.mjs +294 -0
- package/esm2022/lib/utils/services/elements/elements.service.mjs +9 -7
- package/esm2022/public-api.mjs +23 -2
- package/fesm2022/cloud-ide-element.mjs +4646 -47
- package/fesm2022/cloud-ide-element.mjs.map +1 -1
- package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +16 -0
- package/lib/components/data-grid/data-grid.component.d.ts +244 -0
- package/lib/components/data-grid/data-grid.types.d.ts +146 -0
- package/lib/components/dropdown/dropdown.component.d.ts +75 -0
- package/lib/components/global-notifications/global-notifications.component.d.ts +5 -0
- package/lib/components/json-editor/json-editor.component.d.ts +116 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +11 -0
- package/lib/components/toast-notification/toast-notification.component.d.ts +13 -0
- package/lib/elements/button/cide-ele-button.component.d.ts +85 -0
- package/lib/elements/file-input/file-input.component.d.ts +25 -0
- package/lib/elements/input/input.component.d.ts +7 -4
- package/lib/elements/select/select.component.d.ts +91 -0
- package/lib/elements/tab/cide-ele-tab.component.d.ts +26 -0
- package/lib/elements/textarea/textarea.component.d.ts +47 -0
- package/lib/services/confirmation.service.d.ts +65 -0
- package/lib/services/dropdown-manager.service.d.ts +22 -0
- package/lib/services/notification.service.d.ts +81 -0
- package/lib/utils/directives/resizer/resizer.directive.d.ts +44 -0
- package/lib/utils/directives/tooltip/tooltip.directive.d.ts +43 -0
- package/package.json +30 -4
- package/public-api.d.ts +18 -1
- package/src/lib/assets/css/cide-ele-style.scss +85 -0
- package/src/lib/assets/css/cide-ele-variable.scss +336 -0
- package/esm2022/lib/elements/button/button.component.mjs +0 -60
- package/lib/elements/button/button.component.d.ts +0 -27
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class TooltipDirective {
|
|
4
|
+
constructor(el, renderer) {
|
|
5
|
+
this.el = el;
|
|
6
|
+
this.renderer = renderer;
|
|
7
|
+
this.cideEleTooltip = '';
|
|
8
|
+
this.tooltipColor = '';
|
|
9
|
+
this.tooltipBg = '';
|
|
10
|
+
this.tooltipPlacement = 'top';
|
|
11
|
+
this.tooltipType = 'default';
|
|
12
|
+
this.tooltipDelay = 300; // ms
|
|
13
|
+
this.tooltipDir = 'top'; // Alias for tooltipPlacement for backward compatibility
|
|
14
|
+
this.tooltipShowArrow = false;
|
|
15
|
+
this.tooltipMultiline = false;
|
|
16
|
+
this.tooltipMaxWidth = '200px';
|
|
17
|
+
this.tooltipInteractive = false;
|
|
18
|
+
this.tooltipClass = '';
|
|
19
|
+
this.tooltipElement = null;
|
|
20
|
+
this.visible = false;
|
|
21
|
+
this.showTimeout = null;
|
|
22
|
+
this.hideTimeout = null;
|
|
23
|
+
this.hideDelay = 150; // ms
|
|
24
|
+
this.interactiveMouseLeaveHandler = null;
|
|
25
|
+
}
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
// Use tooltipDir as fallback if provided and tooltipPlacement is default
|
|
28
|
+
if (this.tooltipDir && this.tooltipPlacement === 'top') {
|
|
29
|
+
this.tooltipPlacement = this.tooltipDir;
|
|
30
|
+
}
|
|
31
|
+
// If user hasn't provided custom colors and is using a predefined type,
|
|
32
|
+
// we'll leave colors empty to use CSS class colors
|
|
33
|
+
if (this.tooltipType !== 'default' && !this.tooltipColor && !this.tooltipBg) {
|
|
34
|
+
this.tooltipColor = '';
|
|
35
|
+
this.tooltipBg = '';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
onMouseEnter() {
|
|
39
|
+
this.clearTimeouts();
|
|
40
|
+
this.showTimeout = window.setTimeout(() => {
|
|
41
|
+
this.show();
|
|
42
|
+
}, this.tooltipDelay);
|
|
43
|
+
}
|
|
44
|
+
onFocus() {
|
|
45
|
+
this.clearTimeouts();
|
|
46
|
+
this.showTimeout = window.setTimeout(() => {
|
|
47
|
+
this.show();
|
|
48
|
+
}, this.tooltipDelay);
|
|
49
|
+
}
|
|
50
|
+
onMouseLeave() {
|
|
51
|
+
this.clearTimeouts();
|
|
52
|
+
// Don't hide immediately if interactive
|
|
53
|
+
if (!this.tooltipInteractive) {
|
|
54
|
+
this.hide();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// For interactive tooltips, delay hiding to allow user to move to tooltip
|
|
58
|
+
this.hideTimeout = window.setTimeout(() => {
|
|
59
|
+
this.hide();
|
|
60
|
+
}, this.hideDelay);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
onBlur() {
|
|
64
|
+
this.clearTimeouts();
|
|
65
|
+
this.hide();
|
|
66
|
+
}
|
|
67
|
+
onClick() {
|
|
68
|
+
if (this.visible && !this.tooltipInteractive) {
|
|
69
|
+
this.hide();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
ngOnDestroy() {
|
|
73
|
+
this.clearTimeouts();
|
|
74
|
+
this.destroyTooltip();
|
|
75
|
+
}
|
|
76
|
+
clearTimeouts() {
|
|
77
|
+
if (this.showTimeout) {
|
|
78
|
+
clearTimeout(this.showTimeout);
|
|
79
|
+
this.showTimeout = null;
|
|
80
|
+
}
|
|
81
|
+
if (this.hideTimeout) {
|
|
82
|
+
clearTimeout(this.hideTimeout);
|
|
83
|
+
this.hideTimeout = null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
show() {
|
|
87
|
+
if (!this.cideEleTooltip || this.visible)
|
|
88
|
+
return;
|
|
89
|
+
this.createTooltip();
|
|
90
|
+
this.styleTooltip();
|
|
91
|
+
this.positionTooltip();
|
|
92
|
+
// Add animation with requestAnimationFrame for smoother transition
|
|
93
|
+
requestAnimationFrame(() => {
|
|
94
|
+
if (this.tooltipElement) {
|
|
95
|
+
this.renderer.addClass(this.tooltipElement, 'tooltip-visible');
|
|
96
|
+
// Show arrow if enabled
|
|
97
|
+
if (this.tooltipShowArrow) {
|
|
98
|
+
this.renderer.addClass(this.tooltipElement, 'tooltip-arrow-visible');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
this.visible = true;
|
|
103
|
+
// Add mouseleave event listener if interactive
|
|
104
|
+
if (this.tooltipInteractive && this.tooltipElement) {
|
|
105
|
+
this.interactiveMouseLeaveHandler = () => {
|
|
106
|
+
this.clearTimeouts();
|
|
107
|
+
this.hide();
|
|
108
|
+
};
|
|
109
|
+
this.tooltipElement.addEventListener('mouseleave', this.interactiveMouseLeaveHandler);
|
|
110
|
+
// Also add mouseenter to cancel any pending hide
|
|
111
|
+
this.tooltipElement.addEventListener('mouseenter', () => {
|
|
112
|
+
this.clearTimeouts();
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
hide() {
|
|
117
|
+
if (!this.visible || !this.tooltipElement)
|
|
118
|
+
return;
|
|
119
|
+
this.renderer.removeClass(this.tooltipElement, 'tooltip-visible');
|
|
120
|
+
this.renderer.removeClass(this.tooltipElement, 'tooltip-arrow-visible');
|
|
121
|
+
// Use timeout for smoother hide animation
|
|
122
|
+
setTimeout(() => {
|
|
123
|
+
if (!this.visible) { // Double-check in case tooltip was reshown
|
|
124
|
+
this.destroyTooltip();
|
|
125
|
+
}
|
|
126
|
+
}, this.hideDelay);
|
|
127
|
+
this.visible = false;
|
|
128
|
+
}
|
|
129
|
+
createTooltip() {
|
|
130
|
+
this.destroyTooltip();
|
|
131
|
+
this.tooltipElement = this.renderer.createElement('div');
|
|
132
|
+
this.renderer.addClass(this.tooltipElement, 'tooltip');
|
|
133
|
+
// Add placement class for arrow
|
|
134
|
+
this.renderer.addClass(this.tooltipElement, `tooltip-${this.tooltipPlacement}`);
|
|
135
|
+
// Add type class if using a predefined type
|
|
136
|
+
if (this.tooltipType !== 'default') {
|
|
137
|
+
this.renderer.addClass(this.tooltipElement, `tooltip-${this.tooltipType}`);
|
|
138
|
+
}
|
|
139
|
+
// Add multiline class if enabled
|
|
140
|
+
if (this.tooltipMultiline) {
|
|
141
|
+
this.renderer.addClass(this.tooltipElement, 'tooltip-multiline');
|
|
142
|
+
}
|
|
143
|
+
// Add interactive class if enabled
|
|
144
|
+
if (this.tooltipInteractive) {
|
|
145
|
+
this.renderer.addClass(this.tooltipElement, 'tooltip-interactive');
|
|
146
|
+
}
|
|
147
|
+
// Add custom classes if provided
|
|
148
|
+
if (this.tooltipClass) {
|
|
149
|
+
const classes = this.tooltipClass.split(' ');
|
|
150
|
+
classes.forEach(className => {
|
|
151
|
+
if (className.trim()) {
|
|
152
|
+
this.renderer.addClass(this.tooltipElement, className.trim());
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
// Create HTML content if multiline
|
|
157
|
+
if (this.tooltipMultiline) {
|
|
158
|
+
this.renderer.setProperty(this.tooltipElement, 'innerHTML', this.cideEleTooltip);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
const textNode = this.renderer.createText(this.cideEleTooltip);
|
|
162
|
+
this.renderer.appendChild(this.tooltipElement, textNode);
|
|
163
|
+
}
|
|
164
|
+
this.renderer.appendChild(document.body, this.tooltipElement);
|
|
165
|
+
}
|
|
166
|
+
styleTooltip() {
|
|
167
|
+
if (!this.tooltipElement)
|
|
168
|
+
return;
|
|
169
|
+
// Set custom CSS variables for the tooltip colors if provided
|
|
170
|
+
if (this.tooltipColor) {
|
|
171
|
+
this.renderer.setStyle(this.tooltipElement, '--tooltip-color', this.tooltipColor);
|
|
172
|
+
}
|
|
173
|
+
if (this.tooltipBg) {
|
|
174
|
+
this.renderer.setStyle(this.tooltipElement, '--tooltip-bg', this.tooltipBg);
|
|
175
|
+
}
|
|
176
|
+
// Set custom max width if provided
|
|
177
|
+
if (this.tooltipMaxWidth && this.tooltipMultiline) {
|
|
178
|
+
this.renderer.setStyle(this.tooltipElement, '--tooltip-max-width', this.tooltipMaxWidth);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
positionTooltip() {
|
|
182
|
+
if (!this.tooltipElement)
|
|
183
|
+
return;
|
|
184
|
+
const hostRect = this.el.nativeElement.getBoundingClientRect();
|
|
185
|
+
const tooltipRect = this.tooltipElement.getBoundingClientRect();
|
|
186
|
+
// Account for page scroll
|
|
187
|
+
const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
|
188
|
+
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
189
|
+
let top = 0;
|
|
190
|
+
let left = 0;
|
|
191
|
+
// Calculate position based on placement
|
|
192
|
+
switch (this.tooltipPlacement) {
|
|
193
|
+
case 'top':
|
|
194
|
+
top = hostRect.top + scrollTop - tooltipRect.height - 6;
|
|
195
|
+
left = hostRect.left + scrollLeft + (hostRect.width / 2) - (tooltipRect.width / 2);
|
|
196
|
+
break;
|
|
197
|
+
case 'bottom':
|
|
198
|
+
top = hostRect.bottom + scrollTop + 6;
|
|
199
|
+
left = hostRect.left + scrollLeft + (hostRect.width / 2) - (tooltipRect.width / 2);
|
|
200
|
+
break;
|
|
201
|
+
case 'left':
|
|
202
|
+
top = hostRect.top + scrollTop + (hostRect.height / 2) - (tooltipRect.height / 2);
|
|
203
|
+
left = hostRect.left + scrollLeft - tooltipRect.width - 6;
|
|
204
|
+
break;
|
|
205
|
+
case 'right':
|
|
206
|
+
top = hostRect.top + scrollTop + (hostRect.height / 2) - (tooltipRect.height / 2);
|
|
207
|
+
left = hostRect.right + scrollLeft + 6;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
// Adjust if tooltip would be outside viewport
|
|
211
|
+
const viewportWidth = window.innerWidth;
|
|
212
|
+
const viewportHeight = window.innerHeight;
|
|
213
|
+
// Top boundary check
|
|
214
|
+
if (top < scrollTop + 4) {
|
|
215
|
+
top = scrollTop + 4;
|
|
216
|
+
}
|
|
217
|
+
else if (top + tooltipRect.height > scrollTop + viewportHeight - 4) {
|
|
218
|
+
top = scrollTop + viewportHeight - tooltipRect.height - 4;
|
|
219
|
+
}
|
|
220
|
+
// Left boundary check
|
|
221
|
+
if (left < scrollLeft + 4) {
|
|
222
|
+
left = scrollLeft + 4;
|
|
223
|
+
}
|
|
224
|
+
else if (left + tooltipRect.width > scrollLeft + viewportWidth - 4) {
|
|
225
|
+
left = scrollLeft + viewportWidth - tooltipRect.width - 4;
|
|
226
|
+
}
|
|
227
|
+
this.renderer.setStyle(this.tooltipElement, 'position', 'absolute');
|
|
228
|
+
this.renderer.setStyle(this.tooltipElement, 'top', `${top}px`);
|
|
229
|
+
this.renderer.setStyle(this.tooltipElement, 'left', `${left}px`);
|
|
230
|
+
}
|
|
231
|
+
destroyTooltip() {
|
|
232
|
+
if (this.tooltipElement) {
|
|
233
|
+
// Remove event listeners for interactive tooltips using the stored reference
|
|
234
|
+
if (this.tooltipInteractive && this.interactiveMouseLeaveHandler) {
|
|
235
|
+
this.tooltipElement.removeEventListener('mouseleave', this.interactiveMouseLeaveHandler);
|
|
236
|
+
this.interactiveMouseLeaveHandler = null;
|
|
237
|
+
}
|
|
238
|
+
const parent = this.tooltipElement.parentNode;
|
|
239
|
+
if (parent) {
|
|
240
|
+
this.renderer.removeChild(parent, this.tooltipElement);
|
|
241
|
+
}
|
|
242
|
+
this.tooltipElement = null;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
246
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: TooltipDirective, isStandalone: true, selector: "[cideEleTooltip]", inputs: { cideEleTooltip: "cideEleTooltip", tooltipColor: "tooltipColor", tooltipBg: "tooltipBg", tooltipPlacement: "tooltipPlacement", tooltipType: "tooltipType", tooltipDelay: "tooltipDelay", tooltipDir: "tooltipDir", tooltipShowArrow: "tooltipShowArrow", tooltipMultiline: "tooltipMultiline", tooltipMaxWidth: "tooltipMaxWidth", tooltipInteractive: "tooltipInteractive", tooltipClass: "tooltipClass" }, host: { listeners: { "mouseenter": "onMouseEnter()", "focus": "onFocus()", "mouseleave": "onMouseLeave()", "blur": "onBlur()", "click": "onClick()" } }, ngImport: i0 }); }
|
|
247
|
+
}
|
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TooltipDirective, decorators: [{
|
|
249
|
+
type: Directive,
|
|
250
|
+
args: [{
|
|
251
|
+
selector: '[cideEleTooltip]',
|
|
252
|
+
standalone: true
|
|
253
|
+
}]
|
|
254
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { cideEleTooltip: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], tooltipColor: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], tooltipBg: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], tooltipPlacement: [{
|
|
261
|
+
type: Input
|
|
262
|
+
}], tooltipType: [{
|
|
263
|
+
type: Input
|
|
264
|
+
}], tooltipDelay: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], tooltipDir: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], tooltipShowArrow: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], tooltipMultiline: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], tooltipMaxWidth: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], tooltipInteractive: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], tooltipClass: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], onMouseEnter: [{
|
|
279
|
+
type: HostListener,
|
|
280
|
+
args: ['mouseenter']
|
|
281
|
+
}], onFocus: [{
|
|
282
|
+
type: HostListener,
|
|
283
|
+
args: ['focus']
|
|
284
|
+
}], onMouseLeave: [{
|
|
285
|
+
type: HostListener,
|
|
286
|
+
args: ['mouseleave']
|
|
287
|
+
}], onBlur: [{
|
|
288
|
+
type: HostListener,
|
|
289
|
+
args: ['blur']
|
|
290
|
+
}], onClick: [{
|
|
291
|
+
type: HostListener,
|
|
292
|
+
args: ['click']
|
|
293
|
+
}] } });
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtZWxlbWVudC9zcmMvbGliL3V0aWxzL2RpcmVjdGl2ZXMvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sZUFBZSxDQUFDOztBQVN6RyxNQUFNLE9BQU8sZ0JBQWdCO0lBcUIzQixZQUFvQixFQUFjLEVBQVUsUUFBbUI7UUFBM0MsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFwQnRELG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIscUJBQWdCLEdBQXFCLEtBQUssQ0FBQztRQUMzQyxnQkFBVyxHQUFnQixTQUFTLENBQUM7UUFDckMsaUJBQVksR0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLO1FBQ2pDLGVBQVUsR0FBcUIsS0FBSyxDQUFDLENBQUMsd0RBQXdEO1FBQzlGLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsb0JBQWUsR0FBVyxPQUFPLENBQUM7UUFDbEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRTNCLG1CQUFjLEdBQXVCLElBQUksQ0FBQztRQUMxQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUNsQyxnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFDbEMsY0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUs7UUFDdEIsaUNBQTRCLEdBQXdCLElBQUksQ0FBQztJQUVDLENBQUM7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Z0JBZ0IxQixNQUFNO3NCQURMLFlBQVk7dUJBQUMsTUFBTTtnQkFPcEIsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCB0eXBlIFRvb2x0aXBQbGFjZW1lbnQgPSAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcclxuZXhwb3J0IHR5cGUgVG9vbHRpcFR5cGUgPSAnZGVmYXVsdCcgfCAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InIHwgJ2luZm8nIHwgJ2xpZ2h0JyB8ICdkYXJrJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2NpZGVFbGVUb29sdGlwXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9vbHRpcERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBjaWRlRWxlVG9vbHRpcDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdG9vbHRpcENvbG9yOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSB0b29sdGlwQmc6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHRvb2x0aXBQbGFjZW1lbnQ6IFRvb2x0aXBQbGFjZW1lbnQgPSAndG9wJztcclxuICBASW5wdXQoKSB0b29sdGlwVHlwZTogVG9vbHRpcFR5cGUgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgdG9vbHRpcERlbGF5OiBudW1iZXIgPSAzMDA7IC8vIG1zXHJcbiAgQElucHV0KCkgdG9vbHRpcERpcjogVG9vbHRpcFBsYWNlbWVudCA9ICd0b3AnOyAvLyBBbGlhcyBmb3IgdG9vbHRpcFBsYWNlbWVudCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxyXG4gIEBJbnB1dCgpIHRvb2x0aXBTaG93QXJyb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0b29sdGlwTXVsdGlsaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdG9vbHRpcE1heFdpZHRoOiBzdHJpbmcgPSAnMjAwcHgnO1xyXG4gIEBJbnB1dCgpIHRvb2x0aXBJbnRlcmFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRvb2x0aXBDbGFzczogc3RyaW5nID0gJyc7XHJcbiAgXHJcbiAgcHJpdmF0ZSB0b29sdGlwRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHZpc2libGUgPSBmYWxzZTtcclxuICBwcml2YXRlIHNob3dUaW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGhpZGVUaW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGhpZGVEZWxheSA9IDE1MDsgLy8gbXNcclxuICBwcml2YXRlIGludGVyYWN0aXZlTW91c2VMZWF2ZUhhbmRsZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gVXNlIHRvb2x0aXBEaXIgYXMgZmFsbGJhY2sgaWYgcHJvdmlkZWQgYW5kIHRvb2x0aXBQbGFjZW1lbnQgaXMgZGVmYXVsdFxyXG4gICAgaWYgKHRoaXMudG9vbHRpcERpciAmJiB0aGlzLnRvb2x0aXBQbGFjZW1lbnQgPT09ICd0b3AnKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcFBsYWNlbWVudCA9IHRoaXMudG9vbHRpcERpcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB1c2VyIGhhc24ndCBwcm92aWRlZCBjdXN0b20gY29sb3JzIGFuZCBpcyB1c2luZyBhIHByZWRlZmluZWQgdHlwZSxcclxuICAgIC8vIHdlJ2xsIGxlYXZlIGNvbG9ycyBlbXB0eSB0byB1c2UgQ1NTIGNsYXNzIGNvbG9yc1xyXG4gICAgaWYgKHRoaXMudG9vbHRpcFR5cGUgIT09ICdkZWZhdWx0JyAmJiAhdGhpcy50b29sdGlwQ29sb3IgJiYgIXRoaXMudG9vbHRpcEJnKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcENvbG9yID0gJyc7XHJcbiAgICAgIHRoaXMudG9vbHRpcEJnID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcclxuICBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGltZW91dHMoKTtcclxuICAgIHRoaXMuc2hvd1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvdygpO1xyXG4gICAgfSwgdGhpcy50b29sdGlwRGVsYXkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxyXG4gIG9uRm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGltZW91dHMoKTtcclxuICAgIHRoaXMuc2hvd1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvdygpO1xyXG4gICAgfSwgdGhpcy50b29sdGlwRGVsYXkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXHJcbiAgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhclRpbWVvdXRzKCk7XHJcbiAgICBcclxuICAgIC8vIERvbid0IGhpZGUgaW1tZWRpYXRlbHkgaWYgaW50ZXJhY3RpdmVcclxuICAgIGlmICghdGhpcy50b29sdGlwSW50ZXJhY3RpdmUpIHtcclxuICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3IgaW50ZXJhY3RpdmUgdG9vbHRpcHMsIGRlbGF5IGhpZGluZyB0byBhbGxvdyB1c2VyIHRvIG1vdmUgdG8gdG9vbHRpcFxyXG4gICAgICB0aGlzLmhpZGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICB9LCB0aGlzLmhpZGVEZWxheSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdibHVyJylcclxuICBvbkJsdXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGltZW91dHMoKTtcclxuICAgIHRoaXMuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxyXG4gIG9uQ2xpY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52aXNpYmxlICYmICF0aGlzLnRvb2x0aXBJbnRlcmFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhclRpbWVvdXRzKCk7XHJcbiAgICB0aGlzLmRlc3Ryb3lUb29sdGlwKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyVGltZW91dHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaG93VGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zaG93VGltZW91dCk7XHJcbiAgICAgIHRoaXMuc2hvd1RpbWVvdXQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGlkZVRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVvdXQpO1xyXG4gICAgICB0aGlzLmhpZGVUaW1lb3V0ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvdygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jaWRlRWxlVG9vbHRpcCB8fCB0aGlzLnZpc2libGUpIHJldHVybjtcclxuICAgIFxyXG4gICAgdGhpcy5jcmVhdGVUb29sdGlwKCk7XHJcbiAgICB0aGlzLnN0eWxlVG9vbHRpcCgpO1xyXG4gICAgdGhpcy5wb3NpdGlvblRvb2x0aXAoKTtcclxuICAgIFxyXG4gICAgLy8gQWRkIGFuaW1hdGlvbiB3aXRoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3Igc21vb3RoZXIgdHJhbnNpdGlvblxyXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMudG9vbHRpcEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudG9vbHRpcEVsZW1lbnQsICd0b29sdGlwLXZpc2libGUnKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBTaG93IGFycm93IGlmIGVuYWJsZWRcclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2hvd0Fycm93KSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudG9vbHRpcEVsZW1lbnQsICd0b29sdGlwLWFycm93LXZpc2libGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xyXG5cclxuICAgIC8vIEFkZCBtb3VzZWxlYXZlIGV2ZW50IGxpc3RlbmVyIGlmIGludGVyYWN0aXZlXHJcbiAgICBpZiAodGhpcy50b29sdGlwSW50ZXJhY3RpdmUgJiYgdGhpcy50b29sdGlwRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmludGVyYWN0aXZlTW91c2VMZWF2ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhclRpbWVvdXRzKCk7XHJcbiAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuaW50ZXJhY3RpdmVNb3VzZUxlYXZlSGFuZGxlcik7XHJcbiAgICAgIFxyXG4gICAgICAvLyBBbHNvIGFkZCBtb3VzZWVudGVyIHRvIGNhbmNlbCBhbnkgcGVuZGluZyBoaWRlXHJcbiAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyVGltZW91dHMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhpZGUoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCAhdGhpcy50b29sdGlwRWxlbWVudCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy50b29sdGlwRWxlbWVudCwgJ3Rvb2x0aXAtdmlzaWJsZScpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnRvb2x0aXBFbGVtZW50LCAndG9vbHRpcC1hcnJvdy12aXNpYmxlJyk7XHJcbiAgICBcclxuICAgIC8vIFVzZSB0aW1lb3V0IGZvciBzbW9vdGhlciBoaWRlIGFuaW1hdGlvblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7IC8vIERvdWJsZS1jaGVjayBpbiBjYXNlIHRvb2x0aXAgd2FzIHJlc2hvd25cclxuICAgICAgICB0aGlzLmRlc3Ryb3lUb29sdGlwKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRoaXMuaGlkZURlbGF5KTtcclxuICAgIFxyXG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRvb2x0aXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3lUb29sdGlwKCk7XHJcblxyXG4gICAgdGhpcy50b29sdGlwRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudG9vbHRpcEVsZW1lbnQsICd0b29sdGlwJyk7XHJcbiAgICBcclxuICAgIC8vIEFkZCBwbGFjZW1lbnQgY2xhc3MgZm9yIGFycm93XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudG9vbHRpcEVsZW1lbnQsIGB0b29sdGlwLSR7dGhpcy50b29sdGlwUGxhY2VtZW50fWApO1xyXG4gICAgXHJcbiAgICAvLyBBZGQgdHlwZSBjbGFzcyBpZiB1c2luZyBhIHByZWRlZmluZWQgdHlwZVxyXG4gICAgaWYgKHRoaXMudG9vbHRpcFR5cGUgIT09ICdkZWZhdWx0Jykge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudG9vbHRpcEVsZW1lbnQsIGB0b29sdGlwLSR7dGhpcy50b29sdGlwVHlwZX1gKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQWRkIG11bHRpbGluZSBjbGFzcyBpZiBlbmFibGVkXHJcbiAgICBpZiAodGhpcy50b29sdGlwTXVsdGlsaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwRWxlbWVudCwgJ3Rvb2x0aXAtbXVsdGlsaW5lJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEFkZCBpbnRlcmFjdGl2ZSBjbGFzcyBpZiBlbmFibGVkXHJcbiAgICBpZiAodGhpcy50b29sdGlwSW50ZXJhY3RpdmUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnRvb2x0aXBFbGVtZW50LCAndG9vbHRpcC1pbnRlcmFjdGl2ZScpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBBZGQgY3VzdG9tIGNsYXNzZXMgaWYgcHJvdmlkZWRcclxuICAgIGlmICh0aGlzLnRvb2x0aXBDbGFzcykge1xyXG4gICAgICBjb25zdCBjbGFzc2VzID0gdGhpcy50b29sdGlwQ2xhc3Muc3BsaXQoJyAnKTtcclxuICAgICAgY2xhc3Nlcy5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XHJcbiAgICAgICAgaWYgKGNsYXNzTmFtZS50cmltKCkpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwRWxlbWVudCwgY2xhc3NOYW1lLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgSFRNTCBjb250ZW50IGlmIG11bHRpbGluZVxyXG4gICAgaWYgKHRoaXMudG9vbHRpcE11bHRpbGluZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMudG9vbHRpcEVsZW1lbnQsICdpbm5lckhUTUwnLCB0aGlzLmNpZGVFbGVUb29sdGlwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHRoaXMuY2lkZUVsZVRvb2x0aXApO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcEVsZW1lbnQsIHRleHROb2RlKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5ib2R5LCB0aGlzLnRvb2x0aXBFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3R5bGVUb29sdGlwKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRvb2x0aXBFbGVtZW50KSByZXR1cm47XHJcblxyXG4gICAgLy8gU2V0IGN1c3RvbSBDU1MgdmFyaWFibGVzIGZvciB0aGUgdG9vbHRpcCBjb2xvcnMgaWYgcHJvdmlkZWRcclxuICAgIGlmICh0aGlzLnRvb2x0aXBDb2xvcikge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcEVsZW1lbnQsICctLXRvb2x0aXAtY29sb3InLCB0aGlzLnRvb2x0aXBDb2xvcik7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnRvb2x0aXBCZykge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcEVsZW1lbnQsICctLXRvb2x0aXAtYmcnLCB0aGlzLnRvb2x0aXBCZyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFNldCBjdXN0b20gbWF4IHdpZHRoIGlmIHByb3ZpZGVkXHJcbiAgICBpZiAodGhpcy50b29sdGlwTWF4V2lkdGggJiYgdGhpcy50b29sdGlwTXVsdGlsaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwRWxlbWVudCwgJy0tdG9vbHRpcC1tYXgtd2lkdGgnLCB0aGlzLnRvb2x0aXBNYXhXaWR0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvc2l0aW9uVG9vbHRpcCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50b29sdGlwRWxlbWVudCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGhvc3RSZWN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgdG9vbHRpcFJlY3QgPSB0aGlzLnRvb2x0aXBFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgXHJcbiAgICAvLyBBY2NvdW50IGZvciBwYWdlIHNjcm9sbFxyXG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xyXG4gICAgXHJcbiAgICBsZXQgdG9wID0gMDtcclxuICAgIGxldCBsZWZ0ID0gMDtcclxuICAgIFxyXG4gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIGJhc2VkIG9uIHBsYWNlbWVudFxyXG4gICAgc3dpdGNoICh0aGlzLnRvb2x0aXBQbGFjZW1lbnQpIHtcclxuICAgICAgY2FzZSAndG9wJzpcclxuICAgICAgICB0b3AgPSBob3N0UmVjdC50b3AgKyBzY3JvbGxUb3AgLSB0b29sdGlwUmVjdC5oZWlnaHQgLSA2O1xyXG4gICAgICAgIGxlZnQgPSBob3N0UmVjdC5sZWZ0ICsgc2Nyb2xsTGVmdCArIChob3N0UmVjdC53aWR0aCAvIDIpIC0gKHRvb2x0aXBSZWN0LndpZHRoIC8gMik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XHJcbiAgICAgICAgdG9wID0gaG9zdFJlY3QuYm90dG9tICsgc2Nyb2xsVG9wICsgNjtcclxuICAgICAgICBsZWZ0ID0gaG9zdFJlY3QubGVmdCArIHNjcm9sbExlZnQgKyAoaG9zdFJlY3Qud2lkdGggLyAyKSAtICh0b29sdGlwUmVjdC53aWR0aCAvIDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdsZWZ0JzpcclxuICAgICAgICB0b3AgPSBob3N0UmVjdC50b3AgKyBzY3JvbGxUb3AgKyAoaG9zdFJlY3QuaGVpZ2h0IC8gMikgLSAodG9vbHRpcFJlY3QuaGVpZ2h0IC8gMik7XHJcbiAgICAgICAgbGVmdCA9IGhvc3RSZWN0LmxlZnQgKyBzY3JvbGxMZWZ0IC0gdG9vbHRpcFJlY3Qud2lkdGggLSA2O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgdG9wID0gaG9zdFJlY3QudG9wICsgc2Nyb2xsVG9wICsgKGhvc3RSZWN0LmhlaWdodCAvIDIpIC0gKHRvb2x0aXBSZWN0LmhlaWdodCAvIDIpO1xyXG4gICAgICAgIGxlZnQgPSBob3N0UmVjdC5yaWdodCArIHNjcm9sbExlZnQgKyA2O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBBZGp1c3QgaWYgdG9vbHRpcCB3b3VsZCBiZSBvdXRzaWRlIHZpZXdwb3J0XHJcbiAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIFxyXG4gICAgLy8gVG9wIGJvdW5kYXJ5IGNoZWNrXHJcbiAgICBpZiAodG9wIDwgc2Nyb2xsVG9wICsgNCkge1xyXG4gICAgICB0b3AgPSBzY3JvbGxUb3AgKyA0O1xyXG4gICAgfSBlbHNlIGlmICh0b3AgKyB0b29sdGlwUmVjdC5oZWlnaHQgPiBzY3JvbGxUb3AgKyB2aWV3cG9ydEhlaWdodCAtIDQpIHtcclxuICAgICAgdG9wID0gc2Nyb2xsVG9wICsgdmlld3BvcnRIZWlnaHQgLSB0b29sdGlwUmVjdC5oZWlnaHQgLSA0O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBMZWZ0IGJvdW5kYXJ5IGNoZWNrXHJcbiAgICBpZiAobGVmdCA8IHNjcm9sbExlZnQgKyA0KSB7XHJcbiAgICAgIGxlZnQgPSBzY3JvbGxMZWZ0ICsgNDtcclxuICAgIH0gZWxzZSBpZiAobGVmdCArIHRvb2x0aXBSZWN0LndpZHRoID4gc2Nyb2xsTGVmdCArIHZpZXdwb3J0V2lkdGggLSA0KSB7XHJcbiAgICAgIGxlZnQgPSBzY3JvbGxMZWZ0ICsgdmlld3BvcnRXaWR0aCAtIHRvb2x0aXBSZWN0LndpZHRoIC0gNDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXBFbGVtZW50LCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwRWxlbWVudCwgJ3RvcCcsIGAke3RvcH1weGApO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXBFbGVtZW50LCAnbGVmdCcsIGAke2xlZnR9cHhgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveVRvb2x0aXAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b29sdGlwRWxlbWVudCkge1xyXG4gICAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIGZvciBpbnRlcmFjdGl2ZSB0b29sdGlwcyB1c2luZyB0aGUgc3RvcmVkIHJlZmVyZW5jZVxyXG4gICAgICBpZiAodGhpcy50b29sdGlwSW50ZXJhY3RpdmUgJiYgdGhpcy5pbnRlcmFjdGl2ZU1vdXNlTGVhdmVIYW5kbGVyKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5pbnRlcmFjdGl2ZU1vdXNlTGVhdmVIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLmludGVyYWN0aXZlTW91c2VMZWF2ZUhhbmRsZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnRvb2x0aXBFbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHBhcmVudCwgdGhpcy50b29sdGlwRWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50b29sdGlwRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -13,12 +13,14 @@ export class CideElementsService {
|
|
|
13
13
|
resolve(cide_element_data);
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
16
|
-
const subscription = this.is_cide_element_data_updated?.subscribe(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
const subscription = this.is_cide_element_data_updated?.subscribe({
|
|
17
|
+
next: (is_cide_element_data_updated) => {
|
|
18
|
+
if (is_cide_element_data_updated) {
|
|
19
|
+
const cide_element_data = this.cide_element_data[body?.sype_key];
|
|
20
|
+
if (cide_element_data) {
|
|
21
|
+
subscription?.unsubscribe();
|
|
22
|
+
resolve(cide_element_data);
|
|
23
|
+
}
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
});
|
|
@@ -34,4 +36,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
34
36
|
providedIn: 'root'
|
|
35
37
|
}]
|
|
36
38
|
}] });
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1lbGVtZW50L3NyYy9saWIvdXRpbHMvc2VydmljZXMvZWxlbWVudHMvZWxlbWVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3ZDLE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJRSxzQkFBaUIsR0FBaUMsRUFBRSxDQUFDO1FBQ3JELGlDQUE0QixHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQXFCckY7SUFwQkMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUEyQjtRQUM5QyxPQUFPLElBQUksT0FBTyxDQUFZLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2pFLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDN0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxTQUFTLENBQUM7b0JBQ2hFLElBQUksRUFBRSxDQUFDLDRCQUFxQyxFQUFFLEVBQUU7d0JBQzlDLElBQUksNEJBQTRCLEVBQUUsQ0FBQzs0QkFDakMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDOzRCQUNqRSxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0NBQ3RCLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztnQ0FDNUIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7NEJBQzdCLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7OEdBdEJVLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEdldEVsZW1lbnREYXRhUmVxdWVzdCwgSUNvcmVTeXBlIH0gZnJvbSAnY2xvdWQtaWRlLWxtcy1tb2RlbCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2lkZUVsZW1lbnRzU2VydmljZSB7XHJcbiAgY2lkZV9lbGVtZW50X2RhdGE6IHsgW2tleTogc3RyaW5nXTogSUNvcmVTeXBlIH0gPSB7fTtcclxuICBpc19jaWRlX2VsZW1lbnRfZGF0YV91cGRhdGVkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBhc3luYyBnZXRFbGVtZW50RGF0YShib2R5OiBHZXRFbGVtZW50RGF0YVJlcXVlc3QpOiBQcm9taXNlPElDb3JlU3lwZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPElDb3JlU3lwZT4oKHJlc29sdmUpID0+IHtcclxuICAgICAgY29uc3QgY2lkZV9lbGVtZW50X2RhdGEgPSB0aGlzLmNpZGVfZWxlbWVudF9kYXRhW2JvZHk/LnN5cGVfa2V5XTtcclxuICAgICAgaWYgKGNpZGVfZWxlbWVudF9kYXRhKSB7XHJcbiAgICAgICAgcmVzb2x2ZShjaWRlX2VsZW1lbnRfZGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5pc19jaWRlX2VsZW1lbnRfZGF0YV91cGRhdGVkPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGlzX2NpZGVfZWxlbWVudF9kYXRhX3VwZGF0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzX2NpZGVfZWxlbWVudF9kYXRhX3VwZGF0ZWQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBjaWRlX2VsZW1lbnRfZGF0YSA9IHRoaXMuY2lkZV9lbGVtZW50X2RhdGFbYm9keT8uc3lwZV9rZXldO1xyXG4gICAgICAgICAgICAgIGlmIChjaWRlX2VsZW1lbnRfZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjaWRlX2VsZW1lbnRfZGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -3,8 +3,29 @@
|
|
|
3
3
|
* Here we can add what need to be exported from library
|
|
4
4
|
*/
|
|
5
5
|
export * from './lib/elements/input/input.component';
|
|
6
|
-
export * from './lib/elements/button/button.component';
|
|
6
|
+
export * from './lib/elements/button/cide-ele-button.component';
|
|
7
7
|
export * from './lib/elements/spinner/spinner.component';
|
|
8
8
|
export * from './lib/elements/icon/icon.component';
|
|
9
|
+
export * from './lib/elements/select/select.component';
|
|
10
|
+
export * from './lib/elements/tab/cide-ele-tab.component';
|
|
11
|
+
export * from './lib/elements/file-input/file-input.component';
|
|
12
|
+
export * from './lib/elements/textarea/textarea.component';
|
|
9
13
|
export * from './lib/utils/services/elements/elements.service';
|
|
10
|
-
|
|
14
|
+
export * from './lib/utils/directives/resizer/resizer.directive';
|
|
15
|
+
export * from './lib/utils/directives/tooltip/tooltip.directive';
|
|
16
|
+
export * from './lib/components/skeleton-loader/skeleton-loader.component';
|
|
17
|
+
// Data Grid Component and Types
|
|
18
|
+
export * from './lib/components/data-grid/data-grid.component';
|
|
19
|
+
export * from './lib/components/data-grid/data-grid.types';
|
|
20
|
+
// Dropdown Component and Service
|
|
21
|
+
export * from './lib/components/dropdown/dropdown.component';
|
|
22
|
+
export * from './lib/services/dropdown-manager.service';
|
|
23
|
+
// Confirmation and Notification System
|
|
24
|
+
export * from './lib/services/confirmation.service';
|
|
25
|
+
export * from './lib/services/notification.service';
|
|
26
|
+
export * from './lib/components/confirmation-modal/confirmation-modal.component';
|
|
27
|
+
export * from './lib/components/toast-notification/toast-notification.component';
|
|
28
|
+
export * from './lib/components/global-notifications/global-notifications.component';
|
|
29
|
+
// JSON Editor Component
|
|
30
|
+
export * from './lib/components/json-editor/json-editor.component';
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1lbGVtZW50L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLDREQUE0RCxDQUFDO0FBRTNFLGdDQUFnQztBQUNoQyxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsNENBQTRDLENBQUM7QUFFM0QsaUNBQWlDO0FBQ2pDLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyx5Q0FBeUMsQ0FBQztBQUV4RCx1Q0FBdUM7QUFDdkMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLHNFQUFzRSxDQUFDO0FBRXJGLHdCQUF3QjtBQUN4QixjQUFjLG9EQUFvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjbG91ZC1pZGUtZWxlbWVudFxuICogSGVyZSB3ZSBjYW4gYWRkIHdoYXQgbmVlZCB0byBiZSBleHBvcnRlZCBmcm9tIGxpYnJhcnlcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbGVtZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWxlbWVudHMvYnV0dG9uL2NpZGUtZWxlLWJ1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWxlbWVudHMvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbGVtZW50cy9pY29uL2ljb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VsZW1lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VsZW1lbnRzL3RhYi9jaWRlLWVsZS10YWIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VsZW1lbnRzL2ZpbGUtaW5wdXQvZmlsZS1pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWxlbWVudHMvdGV4dGFyZWEvdGV4dGFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3NlcnZpY2VzL2VsZW1lbnRzL2VsZW1lbnRzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvZGlyZWN0aXZlcy9yZXNpemVyL3Jlc2l6ZXIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2RpcmVjdGl2ZXMvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NrZWxldG9uLWxvYWRlci9za2VsZXRvbi1sb2FkZXIuY29tcG9uZW50JztcblxuLy8gRGF0YSBHcmlkIENvbXBvbmVudCBhbmQgVHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvZGF0YS1ncmlkLnR5cGVzJztcblxuLy8gRHJvcGRvd24gQ29tcG9uZW50IGFuZCBTZXJ2aWNlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9kcm9wZG93bi1tYW5hZ2VyLnNlcnZpY2UnO1xuXG4vLyBDb25maXJtYXRpb24gYW5kIE5vdGlmaWNhdGlvbiBTeXN0ZW1cbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2NvbmZpcm1hdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90b2FzdC1ub3RpZmljYXRpb24vdG9hc3Qtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2dsb2JhbC1ub3RpZmljYXRpb25zL2dsb2JhbC1ub3RpZmljYXRpb25zLmNvbXBvbmVudCc7XG5cbi8vIEpTT04gRWRpdG9yIENvbXBvbmVudFxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9qc29uLWVkaXRvci9qc29uLWVkaXRvci5jb21wb25lbnQnO1xuXG4iXX0=
|