tango-app-ui-analyse-trax 3.7.76 → 3.7.78
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/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +198 -39
- package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +27 -12
- package/esm2022/lib/components/gallery/gallery.component.mjs +7 -5
- package/esm2022/lib/components/task-configure/task-configure.component.mjs +1 -1
- package/fesm2022/tango-app-ui-analyse-trax.mjs +230 -54
- package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
- package/lib/components/checklist-configure/checklist-configure.component.d.ts +7 -0
- package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -8,11 +8,13 @@ export class ChipDropdownComponent {
|
|
|
8
8
|
cd;
|
|
9
9
|
data;
|
|
10
10
|
selectedData = [];
|
|
11
|
+
placeholder = "";
|
|
11
12
|
selectedList = new EventEmitter();
|
|
12
13
|
showDropdown = false;
|
|
13
14
|
dummyData;
|
|
14
15
|
instanceId;
|
|
15
|
-
searchValue =
|
|
16
|
+
searchValue = "";
|
|
17
|
+
oldPlaceholder = '';
|
|
16
18
|
constructor(traxService, cd) {
|
|
17
19
|
this.traxService = traxService;
|
|
18
20
|
this.cd = cd;
|
|
@@ -24,20 +26,27 @@ export class ChipDropdownComponent {
|
|
|
24
26
|
});
|
|
25
27
|
}
|
|
26
28
|
ngOnInit() {
|
|
27
|
-
this.selectedData = this.selectedData
|
|
29
|
+
this.selectedData = this.selectedData
|
|
30
|
+
? JSON.parse(JSON.stringify(this.selectedData))
|
|
31
|
+
: [];
|
|
32
|
+
this.oldPlaceholder = this.placeholder;
|
|
33
|
+
if (this.selectedData.length) {
|
|
34
|
+
this.placeholder = "";
|
|
35
|
+
}
|
|
28
36
|
}
|
|
29
37
|
ngOnChanges(changes) {
|
|
30
|
-
if (changes[
|
|
38
|
+
if (changes["data"]) {
|
|
31
39
|
let selectedEmail = this.selectedData?.map((item) => item.value);
|
|
32
40
|
this.data = this.data?.filter((ele) => !selectedEmail?.includes(ele.value));
|
|
33
41
|
this.dummyData = this.data ? JSON.parse(JSON.stringify(this.data)) : [];
|
|
34
42
|
}
|
|
35
43
|
}
|
|
36
44
|
addBadge(data, index) {
|
|
45
|
+
this.placeholder = "";
|
|
37
46
|
this.selectedData.push({ name: data.name, value: data.value });
|
|
38
47
|
this.data.splice(index, 1);
|
|
39
48
|
if (this.searchValue.trim().length) {
|
|
40
|
-
this.searchValue =
|
|
49
|
+
this.searchValue = "";
|
|
41
50
|
let name = this.selectedData.map((item) => item.name);
|
|
42
51
|
this.data = this.dummyData?.filter((ele) => !name.includes(ele.name));
|
|
43
52
|
this.showDropdown = !this.showDropdown;
|
|
@@ -47,18 +56,21 @@ export class ChipDropdownComponent {
|
|
|
47
56
|
removeBadge(data, index) {
|
|
48
57
|
this.data.push(data);
|
|
49
58
|
this.selectedData.splice(index, 1);
|
|
59
|
+
if (!this.selectedData.length) {
|
|
60
|
+
this.placeholder = this.oldPlaceholder;
|
|
61
|
+
}
|
|
50
62
|
this.selectedList.emit(this.selectedData);
|
|
51
63
|
}
|
|
52
64
|
getInitials(name) {
|
|
53
65
|
if (!name)
|
|
54
|
-
return
|
|
55
|
-
const [firstName, lastName] = name.split(
|
|
66
|
+
return ""; // Handle empty case
|
|
67
|
+
const [firstName, lastName] = name.split(" ");
|
|
56
68
|
if (!lastName) {
|
|
57
|
-
const initials = (firstName?.[0] ||
|
|
69
|
+
const initials = (firstName?.[0] || "") + (firstName?.[1] || "");
|
|
58
70
|
return initials.toUpperCase();
|
|
59
71
|
}
|
|
60
72
|
else {
|
|
61
|
-
const initials = (firstName?.[0] ||
|
|
73
|
+
const initials = (firstName?.[0] || "") + (lastName?.[0] || "");
|
|
62
74
|
return initials.toUpperCase();
|
|
63
75
|
}
|
|
64
76
|
}
|
|
@@ -71,7 +83,8 @@ export class ChipDropdownComponent {
|
|
|
71
83
|
clearTimeout(this.debounceTimer);
|
|
72
84
|
this.debounceTimer = setTimeout(() => {
|
|
73
85
|
this.data = this.dummyData?.filter((ele) => {
|
|
74
|
-
return ele.name.toLowerCase().includes(this.searchValue.toLowerCase()) &&
|
|
86
|
+
return (ele.name.toLowerCase().includes(this.searchValue.toLowerCase()) &&
|
|
87
|
+
!nameList.includes(ele.name.toLowerCase()));
|
|
75
88
|
});
|
|
76
89
|
this.cd.detectChanges();
|
|
77
90
|
}, 1000);
|
|
@@ -87,19 +100,21 @@ export class ChipDropdownComponent {
|
|
|
87
100
|
}
|
|
88
101
|
}
|
|
89
102
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChipDropdownComponent, deps: [{ token: i1.TraxService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
90
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChipDropdownComponent, selector: "lib-chip-dropdown", inputs: { data: "data", selectedData: "selectedData" }, outputs: { selectedList: "selectedList" }, host: { listeners: { "document:click": "clickOutside($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\" position-relative\" (clickOutside)=\"showDropdown = false;\">\r\n <div class=\"dropdown-close\">\r\n <div class=\"w-100\">\r\n <div class=\"outer-container d-flex align-items-center position-relative w-100\">\r\n <div class=\"input-container form-control\">\r\n <ng-container *ngFor=\"let item of selectedData;let i=index\">\r\n <span class=\"chip\">\r\n <span class=\"bg-light-primary text-primary p-1 rounded-5 me-1\">{{getInitials(item.name)}}</span>\r\n <span class=\"me-3\">{{item.name}}</span>\r\n <span (click)=\"removeBadge(item,i)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input\" [(ngModel)]=\"searchValue\" (click)=\"toggleDropdown()\" (input)=\"findValue()\" id=\"searchInput\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-4 pe-3 dropdown-menu custom-dropdown-menu w-90 mt-3\" *ngIf=\"showDropdown\">\r\n <div [class]=\"data?.length > 5 ? 'h-200px overflow-auto' : 'h-auto'\">\r\n @for( element of data; track element.value; let i = $index){\r\n <div class=\"dropdown-item form-check custom-dropdown-item\" (click)=\"addBadge(element,i)\">\r\n <label>{{element.name}}</label>\r\n </div>\r\n }@empty() {\r\n <div>\r\n <label>No data found</label>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".dropdown-menu{position:absolute;top:100%;left:0;right:0;border:1px solid #ccc;background-color:#fff;z-index:1000;display:block;box-sizing:border-box}.dropdown-item{padding:8px 12px}.dropdown-item:hover{background-color:#f1f1f1}.dropdown-item input[type=checkbox]{margin-right:10px}.custom-dropdown-menu{border-radius:4px;box-shadow:0 1px 2px #1018280d}.custom-dropdown-item{display:flex;align-items:center}.custom-dropdown-item input{margin-left:10px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:3px!important}.formSeach{width:95%}.storetext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;text-transform:lowercase}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}\n"], dependencies: [{ 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: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
103
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChipDropdownComponent, selector: "lib-chip-dropdown", inputs: { data: "data", selectedData: "selectedData", placeholder: "placeholder" }, outputs: { selectedList: "selectedList" }, host: { listeners: { "document:click": "clickOutside($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\" position-relative\" (clickOutside)=\"showDropdown = false;\">\r\n <div class=\"dropdown-close\">\r\n <div class=\"w-100\">\r\n <div class=\"outer-container d-flex align-items-center position-relative w-100\">\r\n <div class=\"input-container form-control\">\r\n <ng-container *ngFor=\"let item of selectedData;let i=index\">\r\n <span class=\"chip\">\r\n <span class=\"bg-light-primary text-primary p-1 rounded-5 me-1\">{{getInitials(item.name)}}</span>\r\n <span class=\"me-3\">{{item.name}}</span>\r\n <span (click)=\"removeBadge(item,i)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input\" [placeholder]=\"placeholder\" [(ngModel)]=\"searchValue\" (click)=\"toggleDropdown()\" (input)=\"findValue()\" id=\"searchInput\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-4 pe-3 dropdown-menu custom-dropdown-menu w-90 mt-3\" *ngIf=\"showDropdown\">\r\n <div [class]=\"data?.length > 5 ? 'h-200px overflow-auto' : 'h-auto'\">\r\n @for( element of data; track element.value; let i = $index){\r\n <div class=\"dropdown-item form-check custom-dropdown-item\" (click)=\"addBadge(element,i)\">\r\n <label>{{element.name}}</label>\r\n </div>\r\n }@empty() {\r\n <div>\r\n <label>No data found</label>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".dropdown-menu{position:absolute;top:100%;left:0;right:0;border:1px solid #ccc;background-color:#fff;z-index:1000;display:block;box-sizing:border-box}.dropdown-item{padding:8px 12px}.dropdown-item:hover{background-color:#f1f1f1}.dropdown-item input[type=checkbox]{margin-right:10px}.custom-dropdown-menu{border-radius:4px;box-shadow:0 1px 2px #1018280d}.custom-dropdown-item{display:flex;align-items:center}.custom-dropdown-item input{margin-left:10px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:3px!important}.formSeach{width:95%}.storetext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;text-transform:lowercase}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}\n"], dependencies: [{ 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: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
91
104
|
}
|
|
92
105
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChipDropdownComponent, decorators: [{
|
|
93
106
|
type: Component,
|
|
94
|
-
args: [{ selector:
|
|
107
|
+
args: [{ selector: "lib-chip-dropdown", template: "<div class=\" position-relative\" (clickOutside)=\"showDropdown = false;\">\r\n <div class=\"dropdown-close\">\r\n <div class=\"w-100\">\r\n <div class=\"outer-container d-flex align-items-center position-relative w-100\">\r\n <div class=\"input-container form-control\">\r\n <ng-container *ngFor=\"let item of selectedData;let i=index\">\r\n <span class=\"chip\">\r\n <span class=\"bg-light-primary text-primary p-1 rounded-5 me-1\">{{getInitials(item.name)}}</span>\r\n <span class=\"me-3\">{{item.name}}</span>\r\n <span (click)=\"removeBadge(item,i)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input\" [placeholder]=\"placeholder\" [(ngModel)]=\"searchValue\" (click)=\"toggleDropdown()\" (input)=\"findValue()\" id=\"searchInput\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-4 pe-3 dropdown-menu custom-dropdown-menu w-90 mt-3\" *ngIf=\"showDropdown\">\r\n <div [class]=\"data?.length > 5 ? 'h-200px overflow-auto' : 'h-auto'\">\r\n @for( element of data; track element.value; let i = $index){\r\n <div class=\"dropdown-item form-check custom-dropdown-item\" (click)=\"addBadge(element,i)\">\r\n <label>{{element.name}}</label>\r\n </div>\r\n }@empty() {\r\n <div>\r\n <label>No data found</label>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".dropdown-menu{position:absolute;top:100%;left:0;right:0;border:1px solid #ccc;background-color:#fff;z-index:1000;display:block;box-sizing:border-box}.dropdown-item{padding:8px 12px}.dropdown-item:hover{background-color:#f1f1f1}.dropdown-item input[type=checkbox]{margin-right:10px}.custom-dropdown-menu{border-radius:4px;box-shadow:0 1px 2px #1018280d}.custom-dropdown-item{display:flex;align-items:center}.custom-dropdown-item input{margin-left:10px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:3px!important}.formSeach{width:95%}.storetext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;text-transform:lowercase}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}\n"] }]
|
|
95
108
|
}], ctorParameters: () => [{ type: i1.TraxService }, { type: i0.ChangeDetectorRef }], propDecorators: { data: [{
|
|
96
109
|
type: Input
|
|
97
110
|
}], selectedData: [{
|
|
98
111
|
type: Input
|
|
112
|
+
}], placeholder: [{
|
|
113
|
+
type: Input
|
|
99
114
|
}], selectedList: [{
|
|
100
115
|
type: Output
|
|
101
116
|
}], clickOutside: [{
|
|
102
117
|
type: HostListener,
|
|
103
118
|
args: ["document:click", ["$event"]]
|
|
104
119
|
}] } });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2NoaXAtZHJvcGRvd24vY2hpcC1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2NoaXAtZHJvcGRvd24vY2hpcC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRMUksTUFBTSxPQUFPLHFCQUFxQjtJQVNaO0lBQWlDO0lBUjVDLElBQUksQ0FBSztJQUNULFlBQVksR0FBTyxFQUFFLENBQUM7SUFDckIsWUFBWSxHQUEwQixJQUFJLFlBQVksRUFBWSxDQUFDO0lBQzdFLFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsU0FBUyxDQUFLO0lBQ2QsVUFBVSxDQUFRO0lBQ2xCLFdBQVcsR0FBTSxFQUFFLENBQUM7SUFFcEIsWUFBb0IsV0FBdUIsRUFBVSxFQUFvQjtRQUFyRCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQWtCO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBRXJDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7WUFDckQsSUFBRyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUM7Z0JBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO2FBQzFCO1FBQ0gs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QUVDLGNBQWM7UUFDWixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUdELFlBQVksQ0FBQyxLQUFpQjtRQUM1QixNQUFNLGFBQWEsR0FBSSxLQUFLLENBQUMsTUFBc0IsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUvRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzt3R0E3RlUscUJBQXFCOzRGQUFyQixxQkFBcUIsb1BDUmxDLCtwRUFtQ007OzRGRDNCTyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsbUJBQW1CO2dIQUtwQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQW9GUCxZQUFZO3NCQURYLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJheFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmF4LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY2hpcC1kcm9wZG93bicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoaXAtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hpcERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LE9uQ2hhbmdlc3tcclxuICBASW5wdXQoKSBkYXRhOmFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZERhdGE6YW55ID0gW107XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkTGlzdDpFdmVudEVtaXR0ZXI8c3RyaW5nW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcclxuICBzaG93RHJvcGRvd246Ym9vbGVhbiA9ICBmYWxzZTtcclxuICBkdW1teURhdGE6YW55O1xyXG4gIGluc3RhbmNlSWQ6c3RyaW5nO1xyXG4gIHNlYXJjaFZhbHVlOmFueSA9Jyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJheFNlcnZpY2U6VHJheFNlcnZpY2UsIHByaXZhdGUgY2Q6Q2hhbmdlRGV0ZWN0b3JSZWYpe1xyXG4gICAgdGhpcy5pbnN0YW5jZUlkID0gY3J5cHRvLnJhbmRvbVVVSUQoKVxyXG5cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZHJvcGRvd25DbG9zZVRyaWdnZXIuc3Vic2NyaWJlKCh2YWwpPT57XHJcbiAgICAgIGlmKHZhbCAmJiB0aGlzLmluc3RhbmNlSWQgIT09IHZhbCl7XHJcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyAgXHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWREYXRhID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRGF0YSkpIDpbXTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmKGNoYW5nZXNbJ2RhdGEnXSkge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRFbWFpbCA9IHRoaXMuc2VsZWN0ZWREYXRhPy5tYXAoKGl0ZW06YW55KSA9PiBpdGVtLnZhbHVlKTtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhPy5maWx0ZXIoKGVsZTphbnkpID0+ICFzZWxlY3RlZEVtYWlsPy5pbmNsdWRlcyhlbGUudmFsdWUpKVxyXG4gICAgICB0aGlzLmR1bW15RGF0YSA9IHRoaXMuZGF0YSA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSkgOiBbXTsgXHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG5cclxuICBhZGRCYWRnZShkYXRhOmFueSxpbmRleDphbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhLnB1c2goe25hbWU6ZGF0YS5uYW1lLHZhbHVlOmRhdGEudmFsdWV9KTtcclxuICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXgsMSk7XHJcbiAgICBpZih0aGlzLnNlYXJjaFZhbHVlLnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xyXG4gICAgICBsZXQgbmFtZSA9IHRoaXMuc2VsZWN0ZWREYXRhLm1hcCgoaXRlbTphbnkpID0+IGl0ZW0ubmFtZSk7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZHVtbXlEYXRhPy5maWx0ZXIoKGVsZTogYW55KSA9PiAhbmFtZS5pbmNsdWRlcyhlbGUubmFtZSkpO1xyXG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9ICF0aGlzLnNob3dEcm9wZG93bjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRMaXN0LmVtaXQodGhpcy5zZWxlY3RlZERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQmFkZ2UoZGF0YTphbnksaW5kZXg6bnVtYmVyKSB7XHJcbiAgICB0aGlzLmRhdGEucHVzaChkYXRhKTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhLnNwbGljZShpbmRleCwxKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMaXN0LmVtaXQodGhpcy5zZWxlY3RlZERhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5pdGlhbHMobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghbmFtZSkgcmV0dXJuICcnOyAvLyBIYW5kbGUgZW1wdHkgY2FzZVxyXG4gICAgY29uc3QgW2ZpcnN0TmFtZSwgbGFzdE5hbWVdID0gbmFtZS5zcGxpdCgnICcpO1xyXG4gICAgaWYgKCFsYXN0TmFtZSkge1xyXG4gICAgICBjb25zdCBpbml0aWFscyA9IChmaXJzdE5hbWU/LlswXSB8fCAnJykgKyAoZmlyc3ROYW1lPy5bMV0gfHwgJycpOyBcclxuICAgICAgcmV0dXJuIGluaXRpYWxzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbml0aWFscyA9IChmaXJzdE5hbWU/LlswXSB8fCAnJykgKyAobGFzdE5hbWU/LlswXSB8fCAnJyk7IFxyXG4gICAgICByZXR1cm4gaW5pdGlhbHMudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlYm91bmNlVGltZXI6IGFueSA9IG51bGw7IFxyXG5cclxuZmluZFZhbHVlKCkge1xyXG4gIGxldCBuYW1lTGlzdCA9IHRoaXMuc2VsZWN0ZWREYXRhLm1hcCgoZWxlOmFueSkgPT4gZWxlLm5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgaWYgKHRoaXMuc2VhcmNoVmFsdWUudHJpbSgpKSB7XHJcbiAgICB0aGlzLnNob3dEcm9wZG93biA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVyKTtcclxuXHJcbiAgdGhpcy5kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmR1bW15RGF0YT8uZmlsdGVyKChlbGU6IGFueSkgPT57XHJcbiAgICAgIHJldHVybiBlbGUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkgJiYgIW5hbWVMaXN0LmluY2x1ZGVzKGVsZS5uYW1lLnRvTG93ZXJDYXNlKCkpXHJcbiAgfSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gIH0sIDEwMDApO1xyXG59XHJcblxyXG4gIHRvZ2dsZURyb3Bkb3duKCkge1xyXG4gICAgdGhpcy5zaG93RHJvcGRvd24gPSAhdGhpcy5zaG93RHJvcGRvd247XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmRyb3Bkb3duQ2xvc2VUcmlnZ2VyLm5leHQodGhpcy5pbnN0YW5jZUlkKVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiXSlcclxuICBjbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwiLmRyb3Bkb3duLWNsb3NlXCIpO1xyXG4gICAgXHJcbiAgICBpZiAoIWNsaWNrZWRJbnNpZGUpIHtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIiBwb3NpdGlvbi1yZWxhdGl2ZVwiIChjbGlja091dHNpZGUpPVwic2hvd0Ryb3Bkb3duID0gZmFsc2U7XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY2xvc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dGVyLWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyIGZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWREYXRhO2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiZy1saWdodC1wcmltYXJ5IHRleHQtcHJpbWFyeSBwLTEgcm91bmRlZC01IG1lLTFcIj57e2dldEluaXRpYWxzKGl0ZW0ubmFtZSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtM1wiPnt7aXRlbS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwicmVtb3ZlQmFkZ2UoaXRlbSxpKVwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgM0wzIDlNMyAzTDkgOVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIm1pbi1oZWlnaHQ6IDQ0cHg7XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBkcm9wZG93bi1pbnB1dFwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiIChpbnB1dCk9XCJmaW5kVmFsdWUoKVwiIGlkPVwic2VhcmNoSW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNCBwZS0zIGRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnUgdy05MCBtdC0zXCIgKm5nSWY9XCJzaG93RHJvcGRvd25cIj5cclxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiZGF0YT8ubGVuZ3RoID4gNSA/ICdoLTIwMHB4IG92ZXJmbG93LWF1dG8nIDogJ2gtYXV0bydcIj5cclxuICAgICAgICAgICAgICAgIEBmb3IoIGVsZW1lbnQgb2YgZGF0YTsgdHJhY2sgZWxlbWVudC52YWx1ZTsgbGV0IGkgPSAkaW5kZXgpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGZvcm0tY2hlY2sgY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiYWRkQmFkZ2UoZWxlbWVudCxpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3tlbGVtZW50Lm5hbWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9QGVtcHR5KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5ObyBkYXRhIGZvdW5kPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2NoaXAtZHJvcGRvd24vY2hpcC1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2NoaXAtZHJvcGRvd24vY2hpcC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRMUksTUFBTSxPQUFPLHFCQUFxQjtJQVl0QjtJQUNBO0lBWkQsSUFBSSxDQUFNO0lBQ1YsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUN2QixXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3JCLFlBQVksR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztJQUM5RSxZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLFNBQVMsQ0FBTTtJQUNmLFVBQVUsQ0FBUztJQUNuQixXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLGNBQWMsR0FBTyxFQUFFLENBQUM7SUFFeEIsWUFDVSxXQUF3QixFQUN4QixFQUFxQjtRQURyQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUU3QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RELElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssR0FBRyxF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Q2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1jaGlwLWRyb3Bkb3duXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGlwRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgZGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRGF0YTogYW55ID0gW107XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IGFueSA9IFwiXCI7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkTGlzdDogRXZlbnRFbWl0dGVyPHN0cmluZ1tdPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XHJcbiAgc2hvd0Ryb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZHVtbXlEYXRhOiBhbnk7XHJcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xyXG4gIHNlYXJjaFZhbHVlOiBhbnkgPSBcIlwiO1xyXG4gIG9sZFBsYWNlaG9sZGVyOmFueSA9ICcnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdHJheFNlcnZpY2U6IFRyYXhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmluc3RhbmNlSWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG5cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZHJvcGRvd25DbG9zZVRyaWdnZXIuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgaWYgKHZhbCAmJiB0aGlzLmluc3RhbmNlSWQgIT09IHZhbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWREYXRhXHJcbiAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRGF0YSkpXHJcbiAgICAgIDogW107XHJcbiAgICB0aGlzLm9sZFBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcjtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1tcImRhdGFcIl0pIHtcclxuICAgICAgbGV0IHNlbGVjdGVkRW1haWwgPSB0aGlzLnNlbGVjdGVkRGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUpO1xyXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGE/LmZpbHRlcihcclxuICAgICAgICAoZWxlOiBhbnkpID0+ICFzZWxlY3RlZEVtYWlsPy5pbmNsdWRlcyhlbGUudmFsdWUpLFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmR1bW15RGF0YSA9IHRoaXMuZGF0YSA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSkgOiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEJhZGdlKGRhdGE6IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YS5wdXNoKHsgbmFtZTogZGF0YS5uYW1lLCB2YWx1ZTogZGF0YS52YWx1ZSB9KTtcclxuICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUudHJpbSgpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgICAgbGV0IG5hbWUgPSB0aGlzLnNlbGVjdGVkRGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5uYW1lKTtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kdW1teURhdGE/LmZpbHRlcihcclxuICAgICAgICAoZWxlOiBhbnkpID0+ICFuYW1lLmluY2x1ZGVzKGVsZS5uYW1lKSxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSAhdGhpcy5zaG93RHJvcGRvd247XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkTGlzdC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRhKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUJhZGdlKGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kYXRhLnB1c2goZGF0YSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0YS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMub2xkUGxhY2Vob2xkZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkTGlzdC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRhKTtcclxuICB9XHJcblxyXG4gIGdldEluaXRpYWxzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBcIlwiOyAvLyBIYW5kbGUgZW1wdHkgY2FzZVxyXG4gICAgY29uc3QgW2ZpcnN0TmFtZSwgbGFzdE5hbWVdID0gbmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBpZiAoIWxhc3ROYW1lKSB7XHJcbiAgICAgIGNvbnN0IGluaXRpYWxzID0gKGZpcnN0TmFtZT8uWzBdIHx8IFwiXCIpICsgKGZpcnN0TmFtZT8uWzFdIHx8IFwiXCIpO1xyXG4gICAgICByZXR1cm4gaW5pdGlhbHMudG9VcHBlckNhc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluaXRpYWxzID0gKGZpcnN0TmFtZT8uWzBdIHx8IFwiXCIpICsgKGxhc3ROYW1lPy5bMF0gfHwgXCJcIik7XHJcbiAgICAgIHJldHVybiBpbml0aWFscy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVib3VuY2VUaW1lcjogYW55ID0gbnVsbDtcclxuXHJcbiAgZmluZFZhbHVlKCkge1xyXG4gICAgbGV0IG5hbWVMaXN0ID0gdGhpcy5zZWxlY3RlZERhdGEubWFwKChlbGU6IGFueSkgPT4gZWxlLm5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZS50cmltKCkpIHtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xyXG5cclxuICAgIHRoaXMuZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmR1bW15RGF0YT8uZmlsdGVyKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBlbGUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkgJiZcclxuICAgICAgICAgICFuYW1lTGlzdC5pbmNsdWRlcyhlbGUubmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLnNob3dEcm9wZG93biA9ICF0aGlzLnNob3dEcm9wZG93bjtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZHJvcGRvd25DbG9zZVRyaWdnZXIubmV4dCh0aGlzLmluc3RhbmNlSWQpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiXSlcclxuICBjbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFxyXG4gICAgICBcIi5kcm9wZG93bi1jbG9zZVwiLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIWNsaWNrZWRJbnNpZGUpIHtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIiBwb3NpdGlvbi1yZWxhdGl2ZVwiIChjbGlja091dHNpZGUpPVwic2hvd0Ryb3Bkb3duID0gZmFsc2U7XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY2xvc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dGVyLWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyIGZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWREYXRhO2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiZy1saWdodC1wcmltYXJ5IHRleHQtcHJpbWFyeSBwLTEgcm91bmRlZC01IG1lLTFcIj57e2dldEluaXRpYWxzKGl0ZW0ubmFtZSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtM1wiPnt7aXRlbS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwicmVtb3ZlQmFkZ2UoaXRlbSxpKVwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgM0wzIDlNMyAzTDkgOVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIm1pbi1oZWlnaHQ6IDQ0cHg7XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBkcm9wZG93bi1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiIChpbnB1dCk9XCJmaW5kVmFsdWUoKVwiIGlkPVwic2VhcmNoSW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNCBwZS0zIGRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnUgdy05MCBtdC0zXCIgKm5nSWY9XCJzaG93RHJvcGRvd25cIj5cclxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiZGF0YT8ubGVuZ3RoID4gNSA/ICdoLTIwMHB4IG92ZXJmbG93LWF1dG8nIDogJ2gtYXV0bydcIj5cclxuICAgICAgICAgICAgICAgIEBmb3IoIGVsZW1lbnQgb2YgZGF0YTsgdHJhY2sgZWxlbWVudC52YWx1ZTsgbGV0IGkgPSAkaW5kZXgpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGZvcm0tY2hlY2sgY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiYWRkQmFkZ2UoZWxlbWVudCxpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3tlbGVtZW50Lm5hbWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9QGVtcHR5KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5ObyBkYXRhIGZvdW5kPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|