@pepperi-addons/ngx-composite-lib 0.0.10-beta.4 → 0.0.10-beta.42
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/bundles/pepperi-addons-ngx-composite-lib-color-settings.umd.js +2 -1
- package/bundles/pepperi-addons-ngx-composite-lib-color-settings.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-composite-lib-dimx-export.umd.js +771 -0
- package/bundles/pepperi-addons-ngx-composite-lib-dimx-export.umd.js.map +1 -0
- package/bundles/pepperi-addons-ngx-composite-lib-file-status-panel.umd.js +119 -0
- package/bundles/pepperi-addons-ngx-composite-lib-file-status-panel.umd.js.map +1 -0
- package/bundles/pepperi-addons-ngx-composite-lib-generic-list.umd.js +493 -105
- package/bundles/pepperi-addons-ngx-composite-lib-generic-list.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-composite-lib-group-buttons-settings.umd.js +4 -1
- package/bundles/pepperi-addons-ngx-composite-lib-group-buttons-settings.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-composite-lib-shadow-settings.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-composite-lib.umd.js +586 -51
- package/bundles/pepperi-addons-ngx-composite-lib.umd.js.map +1 -1
- package/color-settings/package.json +0 -3
- package/core/common/directives/index.d.ts +1 -0
- package/core/common/directives/public-api.d.ts +1 -0
- package/core/common/directives/reset-configuration-field.directive.d.ts +38 -0
- package/core/common/index.d.ts +1 -0
- package/core/common/public-api.d.ts +2 -0
- package/core/common/services/index.d.ts +1 -0
- package/core/common/services/public-api.d.ts +1 -0
- package/core/common/services/utilities.service.d.ts +6 -0
- package/core/index.d.ts +1 -0
- package/core/public-api.d.ts +1 -0
- package/dimx-export/dimx.component.d.ts +73 -0
- package/dimx-export/dimx.model.d.ts +7 -0
- package/dimx-export/dimx.module.d.ts +15 -0
- package/dimx-export/dimx.service.d.ts +20 -0
- package/dimx-export/package.json +16 -0
- package/{draggable-item/pepperi-addons-ngx-composite-lib-draggable-item.d.ts → dimx-export/pepperi-addons-ngx-composite-lib-dimx-export.d.ts} +1 -1
- package/dimx-export/public-api.d.ts +3 -0
- package/esm2015/color-settings/color-settings.component.js +9 -8
- package/esm2015/color-settings/color-settings.model.js +1 -1
- package/esm2015/core/common/directives/index.js +5 -0
- package/esm2015/core/common/directives/public-api.js +5 -0
- package/esm2015/core/common/directives/reset-configuration-field.directive.js +153 -0
- package/esm2015/core/common/index.js +5 -0
- package/esm2015/core/common/public-api.js +6 -0
- package/esm2015/core/common/services/index.js +5 -0
- package/esm2015/core/common/services/public-api.js +5 -0
- package/esm2015/core/common/services/utilities.service.js +19 -0
- package/esm2015/core/index.js +5 -0
- package/esm2015/core/public-api.js +5 -0
- package/esm2015/dimx-export/dimx.component.js +241 -0
- package/esm2015/dimx-export/dimx.model.js +8 -0
- package/esm2015/dimx-export/dimx.module.js +49 -0
- package/esm2015/dimx-export/dimx.service.js +50 -0
- package/esm2015/dimx-export/pepperi-addons-ngx-composite-lib-dimx-export.js +5 -0
- package/esm2015/dimx-export/public-api.js +7 -0
- package/esm2015/file-status-panel/file-status-panel.component.js +34 -0
- package/esm2015/file-status-panel/file-status-panel.model.js +8 -0
- package/esm2015/file-status-panel/file-status-panel.module.js +40 -0
- package/esm2015/file-status-panel/pepperi-addons-ngx-composite-lib-file-status-panel.js +5 -0
- package/esm2015/file-status-panel/public-api.js +7 -0
- package/esm2015/generic-list/generic-list.component.js +337 -80
- package/esm2015/generic-list/generic-list.model.js +1 -1
- package/esm2015/generic-list/generic-list.module.js +18 -6
- package/esm2015/generic-list/generic-list.service.js +42 -0
- package/esm2015/generic-list/public-api.js +2 -1
- package/esm2015/group-buttons-settings/group-buttons-settings.component.js +5 -2
- package/esm2015/ngx-composite-lib.module.js +28 -9
- package/esm2015/public-api.js +2 -1
- package/esm2015/shadow-settings/shadow-settings.model.js +1 -1
- package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.js +8 -7
- package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-composite-lib-dimx-export.js +350 -0
- package/fesm2015/pepperi-addons-ngx-composite-lib-dimx-export.js.map +1 -0
- package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.js +90 -0
- package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.js.map +1 -0
- package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.js +391 -85
- package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.js +4 -1
- package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-composite-lib-shadow-settings.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-composite-lib.js +225 -13
- package/fesm2015/pepperi-addons-ngx-composite-lib.js.map +1 -1
- package/file-status-panel/file-status-panel.component.d.ts +14 -0
- package/file-status-panel/file-status-panel.model.d.ts +6 -0
- package/file-status-panel/file-status-panel.module.d.ts +12 -0
- package/file-status-panel/package.json +10 -0
- package/file-status-panel/pepperi-addons-ngx-composite-lib-file-status-panel.d.ts +5 -0
- package/file-status-panel/public-api.d.ts +3 -0
- package/generic-list/generic-list.component.d.ts +68 -22
- package/generic-list/generic-list.model.d.ts +35 -5
- package/generic-list/generic-list.module.d.ts +2 -1
- package/generic-list/generic-list.service.d.ts +13 -0
- package/generic-list/package.json +0 -1
- package/generic-list/public-api.d.ts +1 -0
- package/group-buttons-settings/group-buttons-settings.component.d.ts +2 -1
- package/group-buttons-settings/package.json +0 -3
- package/ngx-composite-lib.module.d.ts +6 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
- package/shadow-settings/package.json +0 -3
- package/src/assets/i18n/en.ngx-composite-lib.json +5 -2
- package/src/core/style/abstracts/functions.scss +0 -0
- package/src/core/style/abstracts/mixins.scss +0 -0
- package/src/core/style/abstracts/variables.scss +0 -0
- package/src/core/style/base/helpers.scss +0 -0
- package/src/core/style/components/general.scss +0 -0
- package/styling.scss +11 -0
- package/bundles/pepperi-addons-ngx-composite-lib-draggable-item.umd.js +0 -112
- package/bundles/pepperi-addons-ngx-composite-lib-draggable-item.umd.js.map +0 -1
- package/draggable-item/draggable-item.component.d.ts +0 -11
- package/draggable-item/draggable-item.module.d.ts +0 -11
- package/draggable-item/package.json +0 -13
- package/draggable-item/public-api.d.ts +0 -2
- package/esm2015/draggable-item/draggable-item.component.js +0 -40
- package/esm2015/draggable-item/draggable-item.module.js +0 -36
- package/esm2015/draggable-item/pepperi-addons-ngx-composite-lib-draggable-item.js +0 -5
- package/esm2015/draggable-item/public-api.js +0 -6
- package/fesm2015/pepperi-addons-ngx-composite-lib-draggable-item.js +0 -84
- package/fesm2015/pepperi-addons-ngx-composite-lib-draggable-item.js.map +0 -1
- package/styles.scss +0 -38
|
@@ -1,55 +1,219 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { Component, ViewChild, Input, Output, EventEmitter, } from '@angular/core';
|
|
3
|
-
import { PepRowData, PepGuid, } from '@pepperi-addons/ngx-lib';
|
|
4
|
-
import { PepListComponent } from '@pepperi-addons/ngx-lib/list';
|
|
2
|
+
import { Component, ViewChild, Input, Output, EventEmitter, ViewContainerRef } from '@angular/core';
|
|
3
|
+
import { PepRowData, PepGuid, UIControl, } from '@pepperi-addons/ngx-lib';
|
|
4
|
+
import { PepListComponent, PepSelectionData, DEFAULT_PAGE_SIZE } from '@pepperi-addons/ngx-lib/list';
|
|
5
5
|
import { DataViewFieldTypes } from '@pepperi-addons/papi-sdk/dist/entities/data-view';
|
|
6
|
+
import { DataViewConverter } from '@pepperi-addons/data-views';
|
|
7
|
+
import { Subscription } from 'rxjs';
|
|
6
8
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "
|
|
8
|
-
import * as i2 from "@ngx-
|
|
9
|
-
import * as i3 from "@
|
|
10
|
-
import * as i4 from "@pepperi-addons/ngx-lib/
|
|
11
|
-
import * as i5 from "@pepperi-addons/ngx-lib/
|
|
12
|
-
import * as i6 from "@pepperi-addons/ngx-lib/
|
|
13
|
-
import * as i7 from "@
|
|
9
|
+
import * as i1 from "./generic-list.service";
|
|
10
|
+
import * as i2 from "@pepperi-addons/ngx-lib";
|
|
11
|
+
import * as i3 from "@ngx-translate/core";
|
|
12
|
+
import * as i4 from "@pepperi-addons/ngx-lib/page-layout";
|
|
13
|
+
import * as i5 from "@pepperi-addons/ngx-lib/top-bar";
|
|
14
|
+
import * as i6 from "@pepperi-addons/ngx-lib/list";
|
|
15
|
+
import * as i7 from "@pepperi-addons/ngx-lib/search";
|
|
16
|
+
import * as i8 from "@pepperi-addons/ngx-lib/bread-crumbs";
|
|
17
|
+
import * as i9 from "@angular/common";
|
|
14
18
|
export class GenericListComponent {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
|
|
19
|
+
constructor(_resolver, _genericListService, _dataConvertorService, _layoutService, _translate) {
|
|
20
|
+
this._resolver = _resolver;
|
|
21
|
+
this._genericListService = _genericListService;
|
|
22
|
+
this._dataConvertorService = _dataConvertorService;
|
|
23
|
+
this._layoutService = _layoutService;
|
|
24
|
+
this._translate = _translate;
|
|
25
|
+
this._dataSource = {
|
|
26
|
+
init: (params) => __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
return {
|
|
28
|
+
dataView: {
|
|
29
|
+
Type: 'Grid'
|
|
30
|
+
},
|
|
31
|
+
totalCount: -1,
|
|
32
|
+
items: []
|
|
33
|
+
};
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
this.actions = {
|
|
37
|
+
get: (data) => __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
return [];
|
|
39
|
+
})
|
|
40
|
+
};
|
|
41
|
+
this.uuidMapping = 'key';
|
|
23
42
|
this.addPadding = false;
|
|
24
43
|
this.title = '';
|
|
25
44
|
this.inline = false;
|
|
26
45
|
this.showSearch = false;
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.allowMultipleSelection = false;
|
|
46
|
+
this.showTopBar = false;
|
|
47
|
+
this.breadCrumbsItems = new Array();
|
|
30
48
|
this.fieldClick = new EventEmitter();
|
|
31
|
-
|
|
32
|
-
|
|
49
|
+
this.valueChange = new EventEmitter();
|
|
50
|
+
this.breadCrumbItemClick = new EventEmitter();
|
|
51
|
+
this._resize$ = new Subscription();
|
|
52
|
+
this._dataView = {
|
|
53
|
+
Type: 'Grid'
|
|
54
|
+
};
|
|
55
|
+
this._tableInputs = {
|
|
56
|
+
supportSorting: false,
|
|
57
|
+
selectionType: 'single',
|
|
58
|
+
pager: {
|
|
59
|
+
type: 'scroll'
|
|
60
|
+
},
|
|
61
|
+
noDataFoundMsg: ''
|
|
62
|
+
};
|
|
63
|
+
this.totalRowCount = -1;
|
|
64
|
+
this.searchString = '';
|
|
65
|
+
this._sorting = undefined;
|
|
33
66
|
this.menuHandlers = {};
|
|
34
67
|
this.menuActions = [];
|
|
35
|
-
this.
|
|
36
|
-
//
|
|
68
|
+
this._resize$ = this._layoutService.onResize$.pipe().subscribe((size) => {
|
|
69
|
+
//
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
set pepListContainer(val) {
|
|
73
|
+
this._pepListContainer = val;
|
|
74
|
+
}
|
|
75
|
+
set dataSource(val) {
|
|
76
|
+
this._dataSource = val;
|
|
77
|
+
this.searchString = '';
|
|
78
|
+
this._sorting = undefined;
|
|
79
|
+
this.initTable();
|
|
80
|
+
}
|
|
81
|
+
set noDataFoundMsg(val) {
|
|
82
|
+
this._tableInputs.noDataFoundMsg = val;
|
|
83
|
+
}
|
|
84
|
+
set selectionType(val) {
|
|
85
|
+
this._tableInputs.selectionType = val;
|
|
86
|
+
}
|
|
87
|
+
set supportSorting(val) {
|
|
88
|
+
this._tableInputs.supportSorting = val;
|
|
89
|
+
}
|
|
90
|
+
set pager(val) {
|
|
91
|
+
this._tableInputs.pager = val;
|
|
92
|
+
}
|
|
93
|
+
set pepList(val) {
|
|
94
|
+
this._genericListService.pepList = val;
|
|
95
|
+
}
|
|
96
|
+
get pepList() {
|
|
97
|
+
return this._genericListService.pepList;
|
|
98
|
+
}
|
|
99
|
+
ngOnInit() {
|
|
100
|
+
//
|
|
101
|
+
}
|
|
102
|
+
initTable() {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
105
|
+
var _a, _b, _c, _d, _e;
|
|
106
|
+
if (this._dataSource &&
|
|
107
|
+
this._pepListContainer) {
|
|
108
|
+
if (this._pepListContainer.length > 0) {
|
|
109
|
+
this._pepListContainer.remove();
|
|
110
|
+
}
|
|
111
|
+
const factory = this._resolver.resolveComponentFactory(PepListComponent);
|
|
112
|
+
const componentRef = this._pepListContainer.createComponent(factory);
|
|
113
|
+
this.pepList = componentRef.instance;
|
|
114
|
+
//merge selector inputs with callback inputs
|
|
115
|
+
const tableInputs = yield this.loadTableInputs();
|
|
116
|
+
const fromIndex = 0;
|
|
117
|
+
let toIndex = 0;
|
|
118
|
+
if (((_a = tableInputs.pager) === null || _a === void 0 ? void 0 : _a.type) === 'pages') {
|
|
119
|
+
toIndex = fromIndex + (((_b = tableInputs.pager) === null || _b === void 0 ? void 0 : _b.size) || DEFAULT_PAGE_SIZE) - 1;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
toIndex = 100; //TO DO - get reesult from - this.customList.getTopItems()
|
|
123
|
+
}
|
|
124
|
+
const data = yield this.loadData(fromIndex, toIndex);
|
|
125
|
+
this.totalRowCount = (data === null || data === void 0 ? void 0 : data.totalCount) || 0;
|
|
126
|
+
componentRef.instance.viewType = 'table';
|
|
127
|
+
componentRef.instance.supportSorting = tableInputs.supportSorting;
|
|
128
|
+
componentRef.instance.selectionTypeForActions = tableInputs.selectionType;
|
|
129
|
+
componentRef.instance.pagerType = tableInputs.pager.type;
|
|
130
|
+
if (tableInputs.pager.type === 'pages') {
|
|
131
|
+
componentRef.instance.pageSize = ((_c = tableInputs.pager) === null || _c === void 0 ? void 0 : _c.size) || DEFAULT_PAGE_SIZE;
|
|
132
|
+
componentRef.instance.pageIndex = ((_d = tableInputs.pager) === null || _d === void 0 ? void 0 : _d.index) || 0;
|
|
133
|
+
}
|
|
134
|
+
componentRef.instance.noDataFoundMsg = tableInputs.noDataFoundMsg;
|
|
135
|
+
componentRef.instance.fieldClick.subscribe(($event) => {
|
|
136
|
+
this.onCustomizeFieldClick($event);
|
|
137
|
+
});
|
|
138
|
+
componentRef.instance.selectedItemsChange.subscribe(($event) => {
|
|
139
|
+
this.onSelectedItemsChanged($event);
|
|
140
|
+
});
|
|
141
|
+
componentRef.instance.loadItems.subscribe(($event) => {
|
|
142
|
+
this.onLoadItems($event);
|
|
143
|
+
});
|
|
144
|
+
componentRef.instance.loadPage.subscribe(($event) => {
|
|
145
|
+
this.onLoadPage($event);
|
|
146
|
+
});
|
|
147
|
+
componentRef.instance.valueChange.subscribe(($event) => {
|
|
148
|
+
this.onValueChanged($event);
|
|
149
|
+
});
|
|
150
|
+
componentRef.instance.sortingChange.subscribe(($event) => {
|
|
151
|
+
this.onSortingChange($event);
|
|
152
|
+
});
|
|
153
|
+
let convertedList = [];
|
|
154
|
+
if (data) {
|
|
155
|
+
if (((_e = data === null || data === void 0 ? void 0 : data.items) === null || _e === void 0 ? void 0 : _e.length) > 0) {
|
|
156
|
+
convertedList = this._dataConvertorService.convertListData(data.items);
|
|
157
|
+
}
|
|
158
|
+
const uiControl = this.getUiControl(DataViewConverter.toUIControlData(data.dataView));
|
|
159
|
+
componentRef.instance.initListData(uiControl, data.totalCount, convertedList);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}), 0);
|
|
37
163
|
});
|
|
38
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* checks if the object contains property
|
|
167
|
+
* @param obj object
|
|
168
|
+
* @param prop property name
|
|
169
|
+
* @returns true if contains, false otherwise
|
|
170
|
+
*/
|
|
171
|
+
hasProperty(obj, prop) {
|
|
172
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* loads callback inputs in case they are provided and merge with selector inputs
|
|
176
|
+
* @returns merged pep-list inputs
|
|
177
|
+
*/
|
|
178
|
+
loadTableInputs() {
|
|
179
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
180
|
+
const tableInputs = Object.assign({}, this._tableInputs);
|
|
181
|
+
if (this._dataSource.inputs) {
|
|
182
|
+
const inputs = yield this._dataSource.inputs();
|
|
183
|
+
if (inputs) {
|
|
184
|
+
Object.entries(inputs).forEach((item) => {
|
|
185
|
+
if (this.hasProperty(tableInputs, item[0])) {
|
|
186
|
+
tableInputs[item[0]] = item[1];
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return tableInputs;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
getUiControl(data) {
|
|
195
|
+
const uiControl = new UIControl();
|
|
196
|
+
uiControl.ControlFields = [];
|
|
197
|
+
if (data === null || data === void 0 ? void 0 : data.ControlFields) {
|
|
198
|
+
uiControl.ControlFields = data.ControlFields.map((field) => this.convertToUiControlField(field));
|
|
199
|
+
}
|
|
200
|
+
return uiControl;
|
|
201
|
+
}
|
|
39
202
|
loadMenuItems() {
|
|
40
|
-
if (this.
|
|
203
|
+
if (this._tableInputs.selectionType !== 'none') {
|
|
41
204
|
this.getMenuActions().then(x => this.menuActions = x);
|
|
42
205
|
}
|
|
43
206
|
}
|
|
44
207
|
convertToPepRowData(object, dataView) {
|
|
45
208
|
const row = new PepRowData();
|
|
209
|
+
row.UUID = object[this.uuidMapping] || undefined;
|
|
46
210
|
row.Fields = [];
|
|
47
211
|
if ((dataView === null || dataView === void 0 ? void 0 : dataView.Fields) && dataView.Columns) {
|
|
48
212
|
for (let index = 0; index < dataView.Fields.length; index++) {
|
|
49
|
-
|
|
213
|
+
const field = dataView.Fields[index];
|
|
50
214
|
row.Fields.push({
|
|
51
215
|
ApiName: field.FieldID,
|
|
52
|
-
Title: this.
|
|
216
|
+
Title: this._translate.instant(field.Title),
|
|
53
217
|
XAlignment: 1,
|
|
54
218
|
FormattedValue: (object[field.FieldID] || '').toString(),
|
|
55
219
|
Value: (object[field.FieldID] || '').toString(),
|
|
@@ -64,86 +228,169 @@ export class GenericListComponent {
|
|
|
64
228
|
}
|
|
65
229
|
return row;
|
|
66
230
|
}
|
|
231
|
+
convertToUiControlField(field) {
|
|
232
|
+
return {
|
|
233
|
+
ApiName: field.ApiName,
|
|
234
|
+
FieldType: field.FieldType,
|
|
235
|
+
Title: field.Title,
|
|
236
|
+
ReadOnly: field.ReadOnlyField,
|
|
237
|
+
ColumnWidth: field.ColumnWidth,
|
|
238
|
+
ColumnWidthType: 1,
|
|
239
|
+
Layout: {
|
|
240
|
+
X: field.Layout.X,
|
|
241
|
+
Y: field.Layout.Y,
|
|
242
|
+
Width: field.Layout.Width,
|
|
243
|
+
Height: field.Layout.Field_Height,
|
|
244
|
+
XAlignment: field.Layout.xAlignment,
|
|
245
|
+
YAlignment: field.Layout.yAlignment,
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
}
|
|
67
249
|
getMenuActions() {
|
|
68
|
-
var _a;
|
|
69
250
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
const actions = yield ((_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.getActions(this.getMenuObjects()));
|
|
71
251
|
const res = [];
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
this.menuHandlers
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
252
|
+
const result = this.getMenuObjects();
|
|
253
|
+
if (result.success) {
|
|
254
|
+
const actions = yield this.actions.get(result.data);
|
|
255
|
+
this.menuHandlers = {};
|
|
256
|
+
actions === null || actions === void 0 ? void 0 : actions.forEach(item => {
|
|
257
|
+
const uuid = PepGuid.newGuid();
|
|
258
|
+
this.menuHandlers[uuid] = item.handler;
|
|
259
|
+
res.push({
|
|
260
|
+
key: uuid,
|
|
261
|
+
text: item.title
|
|
262
|
+
});
|
|
79
263
|
});
|
|
80
|
-
}
|
|
264
|
+
}
|
|
81
265
|
return res;
|
|
82
266
|
});
|
|
83
267
|
}
|
|
84
268
|
getMenuObjects() {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
269
|
+
const menuObjects = {
|
|
270
|
+
success: false,
|
|
271
|
+
data: new PepSelectionData()
|
|
272
|
+
};
|
|
273
|
+
if (this.pepList) {
|
|
274
|
+
menuObjects.success = true;
|
|
275
|
+
menuObjects.data = this.pepList.getSelectedItemsData();
|
|
89
276
|
}
|
|
90
|
-
|
|
91
|
-
return objects;
|
|
277
|
+
return menuObjects;
|
|
92
278
|
}
|
|
93
|
-
|
|
94
|
-
|
|
279
|
+
onActionItemClicked(action) {
|
|
280
|
+
const result = this.getMenuObjects();
|
|
281
|
+
if (result.success) {
|
|
282
|
+
this.menuHandlers[action.source.key](result.data);
|
|
283
|
+
}
|
|
95
284
|
}
|
|
96
|
-
|
|
285
|
+
onSearchChanged(event) {
|
|
286
|
+
this.searchString = event.value;
|
|
287
|
+
this.initTable();
|
|
97
288
|
}
|
|
98
|
-
|
|
99
|
-
|
|
289
|
+
onSelectedItemsChanged(selectedRowsCount) {
|
|
290
|
+
//loading menu items after pep-list selected items are updated
|
|
291
|
+
setTimeout(() => {
|
|
292
|
+
this.loadMenuItems();
|
|
293
|
+
}, 0);
|
|
100
294
|
}
|
|
101
|
-
|
|
102
|
-
this.
|
|
295
|
+
onCustomizeFieldClick(fieldClickEvent) {
|
|
296
|
+
this.fieldClick.emit(fieldClickEvent);
|
|
103
297
|
}
|
|
104
|
-
|
|
105
|
-
this.
|
|
106
|
-
|
|
298
|
+
onBreadCrumbItemClick(event) {
|
|
299
|
+
this.breadCrumbItemClick.emit(event);
|
|
300
|
+
}
|
|
301
|
+
onValueChanged(event) {
|
|
302
|
+
this.valueChange.emit(event);
|
|
107
303
|
}
|
|
108
|
-
|
|
304
|
+
onSortingChange(event) {
|
|
305
|
+
this._sorting = event;
|
|
306
|
+
this.initTable();
|
|
307
|
+
}
|
|
308
|
+
loadData(fromIndex, toIndex) {
|
|
309
|
+
var _a;
|
|
109
310
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
-
|
|
111
|
-
this.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
311
|
+
const data = yield this._dataSource.init({
|
|
312
|
+
searchString: this.searchString || undefined,
|
|
313
|
+
sorting: this._sorting || undefined,
|
|
314
|
+
fromIndex: fromIndex,
|
|
315
|
+
toIndex: toIndex
|
|
316
|
+
});
|
|
317
|
+
if (data) {
|
|
318
|
+
this._dataView = data.dataView;
|
|
319
|
+
if (((_a = data.items) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
320
|
+
data.items = data.items.map(item => this.convertToPepRowData(item, data.dataView));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return data;
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
updateDataList(fromIndex, toIndex, pageIndex = undefined) {
|
|
327
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
328
|
+
if (this._dataSource.update) {
|
|
329
|
+
const dataList = yield this._dataSource.update({
|
|
330
|
+
searchString: this.searchString || undefined,
|
|
331
|
+
sorting: this._sorting || undefined,
|
|
332
|
+
fromIndex: fromIndex,
|
|
333
|
+
toIndex: toIndex,
|
|
334
|
+
pageIndex: pageIndex
|
|
119
335
|
});
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
336
|
+
if ((dataList === null || dataList === void 0 ? void 0 : dataList.length) > 0) {
|
|
337
|
+
return dataList.map(item => this.convertToPepRowData(item, this._dataView));
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
return [];
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
return [];
|
|
123
345
|
}
|
|
124
346
|
});
|
|
125
347
|
}
|
|
126
|
-
|
|
127
|
-
|
|
348
|
+
/**
|
|
349
|
+
* loads virtual scroll items from api
|
|
350
|
+
*/
|
|
351
|
+
onLoadItems(event) {
|
|
352
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
353
|
+
const list = yield this.updateDataList(event.fromIndex, event.toIndex);
|
|
354
|
+
const convertedList = this._dataConvertorService.convertListData(list);
|
|
355
|
+
this.pepList.updateItems(convertedList, event);
|
|
356
|
+
});
|
|
128
357
|
}
|
|
129
|
-
|
|
130
|
-
|
|
358
|
+
/**
|
|
359
|
+
* loads paging bulk from api
|
|
360
|
+
*/
|
|
361
|
+
onLoadPage(event) {
|
|
362
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
363
|
+
const fromIndex = event.pageIndex * event.pageSize;
|
|
364
|
+
const toIndex = Math.min(fromIndex + event.pageSize - 1, this.totalRowCount - 1);
|
|
365
|
+
const list = yield this.updateDataList(fromIndex, toIndex, event.pageIndex);
|
|
366
|
+
const convertedList = this._dataConvertorService.convertListData(list);
|
|
367
|
+
this.pepList.updatePage(convertedList, event);
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
ngOnDestroy() {
|
|
371
|
+
if (this._resize$) {
|
|
372
|
+
this._resize$.unsubscribe();
|
|
373
|
+
}
|
|
131
374
|
}
|
|
132
375
|
}
|
|
133
|
-
GenericListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: GenericListComponent, deps: [{ token: i1.PepDataConvertorService }, { token:
|
|
134
|
-
GenericListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: GenericListComponent, selector: "pep-generic-list", inputs: { dataSource: "dataSource", addPadding: "addPadding", title: "title", inline: "inline", showSearch: "showSearch",
|
|
376
|
+
GenericListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: GenericListComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i1.PepGenericListService }, { token: i2.PepDataConvertorService }, { token: i2.PepLayoutService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
377
|
+
GenericListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: GenericListComponent, selector: "pep-generic-list", inputs: { dataSource: "dataSource", actions: "actions", uuidMapping: "uuidMapping", addPadding: "addPadding", title: "title", inline: "inline", showSearch: "showSearch", noDataFoundMsg: "noDataFoundMsg", selectionType: "selectionType", supportSorting: "supportSorting", pager: "pager", showTopBar: "showTopBar", breadCrumbsItems: "breadCrumbsItems" }, outputs: { fieldClick: "fieldClick", valueChange: "valueChange", breadCrumbItemClick: "breadCrumbItemClick" }, viewQueries: [{ propertyName: "pepListContainer", first: true, predicate: ["pepListContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div>\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"breadCrumbsItems.length > 0\">\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n</div>\n\n<pep-page-layout *ngIf=\"!inline\" [addPadding]=\"addPadding\">\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length > 0\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n <div pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [title]=\"title\" [inline]=\"inline\">\n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n\n <pep-list-actions *ngIf=\"menuActions.length > 0\" [sizeType]=\"inline ? 'sm' : 'md'\" [actions]=\"menuActions\"\n (actionClick)=\"onActionItemClicked($event)\"></pep-list-actions>\n <pep-list-total [sizeType]=\"inline ? 'sm' : 'md'\" [totalRows]=\"totalRowCount\">\n </pep-list-total>\n\n <pep-search *ngIf=\"showSearch\" [value]=\"searchString\" [sizeType]=\"inline ? 'sm' : 'md'\"\n (search)=\"onSearchChanged($event)\">\n </pep-search>\n </pep-top-bar>\n</ng-template>\n\n<ng-template #breadCrumbsTemplate>\n <pep-bread-crumbs class=\"bread-crumbs\" [items]=\"breadCrumbsItems\" [addSpacing]=\"true\" [displayType]=\"'items'\"\n (itemClick)=\"onBreadCrumbItemClick($event)\"></pep-bread-crumbs>\n</ng-template>\n\n<ng-template #listTemplate>\n <div class=\"list-container\">\n <ng-container #pepListContainer></ng-container>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.list-container{height:100%}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}.noDataFoundMsg{height:100%;width:100%;background:rgba(26,26,26,.12);display:flex;justify-content:center;align-items:center}.bread-crumbs{padding:var(--pep-spacing-lg, 1rem) 0 var(--pep-spacing-sm, .5rem) 0}\n"], components: [{ type: i4.PepPageLayoutComponent, selector: "pep-page-layout", inputs: ["addPadding", "showShadow"] }, { type: i5.PepTopBarComponent, selector: "pep-top-bar", inputs: ["inline", "title"], outputs: ["footerStateChange"] }, { type: i6.PepListActionsComponent, selector: "pep-list-actions", inputs: ["actions", "sizeType", "xPosition", "hidden"], outputs: ["actionClick", "stateChange", "menuClick"] }, { type: i6.PepListTotalComponent, selector: "pep-list-total", inputs: ["totalRows", "totalAmount", "isMapView", "sizeType"] }, { type: i7.PepSearchComponent, selector: "pep-search", inputs: ["triggerOn", "autoCompleteTop", "sizeType", "autoCompleteValues", "shrink", "value", "searchControl", "useAsWebComponent"], outputs: ["search", "autocompleteChange", "stateChange"] }, { type: i8.PepBreadCrumbsComponent, selector: "pep-bread-crumbs", inputs: ["addSpacing", "items", "displayType"], outputs: ["itemClick"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
135
378
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: GenericListComponent, decorators: [{
|
|
136
379
|
type: Component,
|
|
137
380
|
args: [{
|
|
138
381
|
selector: 'pep-generic-list',
|
|
139
382
|
templateUrl: './generic-list.component.html',
|
|
140
|
-
styleUrls: ['./generic-list.component.scss']
|
|
383
|
+
styleUrls: ['./generic-list.component.scss']
|
|
141
384
|
}]
|
|
142
|
-
}], ctorParameters: function () { return [{ type: i1.PepDataConvertorService }, { type:
|
|
385
|
+
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i1.PepGenericListService }, { type: i2.PepDataConvertorService }, { type: i2.PepLayoutService }, { type: i3.TranslateService }]; }, propDecorators: { pepListContainer: [{
|
|
143
386
|
type: ViewChild,
|
|
144
|
-
args: [
|
|
387
|
+
args: ['pepListContainer', { read: ViewContainerRef }]
|
|
145
388
|
}], dataSource: [{
|
|
146
389
|
type: Input
|
|
390
|
+
}], actions: [{
|
|
391
|
+
type: Input
|
|
392
|
+
}], uuidMapping: [{
|
|
393
|
+
type: Input
|
|
147
394
|
}], addPadding: [{
|
|
148
395
|
type: Input
|
|
149
396
|
}], title: [{
|
|
@@ -152,13 +399,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImpor
|
|
|
152
399
|
type: Input
|
|
153
400
|
}], showSearch: [{
|
|
154
401
|
type: Input
|
|
155
|
-
}],
|
|
402
|
+
}], noDataFoundMsg: [{
|
|
403
|
+
type: Input
|
|
404
|
+
}], selectionType: [{
|
|
405
|
+
type: Input
|
|
406
|
+
}], supportSorting: [{
|
|
156
407
|
type: Input
|
|
157
|
-
}],
|
|
408
|
+
}], pager: [{
|
|
158
409
|
type: Input
|
|
159
|
-
}],
|
|
410
|
+
}], showTopBar: [{
|
|
411
|
+
type: Input
|
|
412
|
+
}], breadCrumbsItems: [{
|
|
160
413
|
type: Input
|
|
161
414
|
}], fieldClick: [{
|
|
162
415
|
type: Output
|
|
416
|
+
}], valueChange: [{
|
|
417
|
+
type: Output
|
|
418
|
+
}], breadCrumbItemClick: [{
|
|
419
|
+
type: Output
|
|
163
420
|
}] } });
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2dlbmVyaWMtbGlzdC9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvZ2VuZXJpYy1saXN0L2dlbmVyaWMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFHVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUdILFVBQVUsRUFFVixPQUFPLEdBQ1IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuQyxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ25CLE1BQU0sOEJBQThCLENBQUM7QUFPdEMsT0FBTyxFQUFxQixrQkFBa0IsRUFBZ0IsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7O0FBVXZILE1BQU0sT0FBTyxvQkFBb0I7SUFzQzdCLHlDQUF5QztJQUN6QyxpQ0FBaUM7SUFFakMsWUFDWSxvQkFBNkMsRUFDN0MsYUFBK0IsRUFDL0IsU0FBMkI7UUFGM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUF2Q3ZDLGdCQUFXLEdBQVUsRUFBRSxDQUFBO1FBRXZCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRzFCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUduQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBR3hCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFHL0Isa0JBQWEsR0FBVyxTQUFTLENBQUM7UUFHbEMsMkJBQXNC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cUJBQXFCLENBQUMsZUFBd0M7UUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7aUhBeEpRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDJYQUNsQixnQkFBZ0IsZ0RDdEMvQiw0NERBeUNjOzJGREpELG9CQUFvQjtrQkFMaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsK0JBQStCO29CQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztpQkFDL0M7NEtBRWdDLFVBQVU7c0JBQXRDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUczQixVQUFVO3NCQURULEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gICAgUGVwRGF0YUNvbnZlcnRvclNlcnZpY2UsXG4gICAgUGVwTGF5b3V0U2VydmljZSxcbiAgICBQZXBSb3dEYXRhLFxuICAgIFBlcFNjcmVlblNpemVUeXBlLFxuICAgIFBlcEd1aWQsXG4gIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHsgSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9mb3JtJztcbmltcG9ydCB7XG4gICAgUGVwTGlzdENvbXBvbmVudFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9saXN0JztcbmltcG9ydCB7XG4gICAgUGVwTWVudUl0ZW0sXG4gICAgSVBlcE1lbnVJdGVtQ2xpY2tFdmVudCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvbWVudSc7XG5pbXBvcnQgeyBJUGVwU2VhcmNoQ2xpY2tFdmVudCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL3NlYXJjaCc7XG4gIFxuaW1wb3J0IHsgR3JpZERhdGFWaWV3RmllbGQsIERhdGFWaWV3RmllbGRUeXBlcywgR3JpZERhdGFWaWV3IH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL3BhcGktc2RrL2Rpc3QvZW50aXRpZXMvZGF0YS12aWV3JztcbmltcG9ydCB7IEdlbmVyaWNMaXN0RGF0YVNvdXJjZSB9IGZyb20gJy4vZ2VuZXJpYy1saXN0Lm1vZGVsJztcblxuaW1wb3J0ICogYXMgdHdlZW4gZnJvbSAnQHR3ZWVuanMvdHdlZW4uanMnXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWdlbmVyaWMtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBAVmlld0NoaWxkKFBlcExpc3RDb21wb25lbnQpIGN1c3RvbUxpc3Q6IFBlcExpc3RDb21wb25lbnQgfCB1bmRlZmluZWQ7XG4gICAgXG4gICAgQElucHV0KClcbiAgICBkYXRhU291cmNlOiBHZW5lcmljTGlzdERhdGFTb3VyY2UgfCB1bmRlZmluZWQ7XG4gICAgZGF0YU9iamVjdHM6IGFueVtdID0gW11cbiAgXG4gICAgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcbiAgXG4gICAgQElucHV0KClcbiAgICBhZGRQYWRkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlOiBzdHJpbmcgPSAnJztcbiAgXG4gICAgQElucHV0KClcbiAgICBpbmxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gICAgQElucHV0KClcbiAgICBzaG93U2VhcmNoOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBcbiAgICBASW5wdXQoKVxuICAgIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9IFwiTm8gZGF0YVwiO1xuICBcbiAgICBASW5wdXQoKVxuICAgIGFsbG93TXVsdGlwbGVTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gICAgQE91dHB1dCgpXG4gICAgZmllbGRDbGljazogRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZENsaWNrRXZlbnQ+KCk7XG5cbiAgICAvLyBAT3V0cHV0KClcbiAgICAvLyBvbkFkZENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBtZW51SGFuZGxlcnM6IHsgW2tleTogc3RyaW5nXTogKG9iajogYW55KSA9PiBQcm9taXNlPHZvaWQ+IH0gPSB7fTtcbiAgICBtZW51QWN0aW9uczogQXJyYXk8UGVwTWVudUl0ZW0+ID0gW107XG4gICAgLy8gUGVwU2NyZWVuU2l6ZVR5cGUgPSBQZXBTY3JlZW5TaXplVHlwZTtcbiAgICAvLyBzY3JlZW5TaXplOiBQZXBTY3JlZW5TaXplVHlwZTtcbiAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGF0YUNvbnZlcnRvclNlcnZpY2U6IFBlcERhdGFDb252ZXJ0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQucGlwZSgpLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5zY3JlZW5TaXplID0gc2l6ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICBcbiAgICBwcml2YXRlIGxvYWRNZW51SXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdldE1lbnVBY3Rpb25zKCkudGhlbih4ID0+IHRoaXMubWVudUFjdGlvbnMgPSB4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9QZXBSb3dEYXRhKG9iamVjdDogYW55LCBkYXRhVmlldzogR3JpZERhdGFWaWV3KSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IG5ldyBQZXBSb3dEYXRhKCk7XG4gICAgICAgIHJvdy5GaWVsZHMgPSBbXTtcblxuICAgICAgICBpZiAoZGF0YVZpZXc/LkZpZWxkcyAmJiBkYXRhVmlldy5Db2x1bW5zKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YVZpZXcuRmllbGRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGRhdGFWaWV3LkZpZWxkc1tpbmRleF0gYXMgR3JpZERhdGFWaWV3RmllbGRcbiAgICAgICAgICAgICAgICByb3cuRmllbGRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBBcGlOYW1lOiBmaWVsZC5GaWVsZElELFxuICAgICAgICAgICAgICAgICAgICBUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChmaWVsZC5UaXRsZSksXG4gICAgICAgICAgICAgICAgICAgIFhBbGlnbm1lbnQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlOiAob2JqZWN0W2ZpZWxkLkZpZWxkSURdIHx8ICcnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICBWYWx1ZTogKG9iamVjdFtmaWVsZC5GaWVsZElEXSB8fCAnJykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgQ29sdW1uV2lkdGg6IGRhdGFWaWV3LkNvbHVtbnNbaW5kZXhdLldpZHRoLFxuICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsVmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICBPcHRpb25hbFZhbHVlczogW10sXG4gICAgICAgICAgICAgICAgICAgIEZpZWxkVHlwZTogRGF0YVZpZXdGaWVsZFR5cGVzW2ZpZWxkLlR5cGVdLFxuICAgICAgICAgICAgICAgICAgICBSZWFkT25seTogZmllbGQuUmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgIEVuYWJsZWQ6ICFmaWVsZC5SZWFkT25seVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9XG4gIFxuICAgIHByaXZhdGUgYXN5bmMgZ2V0TWVudUFjdGlvbnMoKTogUHJvbWlzZTxQZXBNZW51SXRlbVtdPiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBhd2FpdCB0aGlzLmRhdGFTb3VyY2U/LmdldEFjdGlvbnModGhpcy5nZXRNZW51T2JqZWN0cygpKTtcbiAgICAgICAgY29uc3QgcmVzOiBQZXBNZW51SXRlbVtdID0gW11cbiAgICAgICAgdGhpcy5tZW51SGFuZGxlcnMgPSB7fTtcbiAgICBcbiAgICAgICAgYWN0aW9ucz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBQZXBHdWlkLm5ld0d1aWQoKTtcbiAgICAgICAgICAgIHRoaXMubWVudUhhbmRsZXJzW3V1aWRdID0gaXRlbS5oYW5kbGVyO1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleTogdXVpZCxcbiAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRpdGxlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICBcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIFxuICAgIHByaXZhdGUgZ2V0TWVudU9iamVjdHMoKSB7XG4gICAgICAgIGxldCB1dWlkcyA9IHRoaXMuY3VzdG9tTGlzdD8uZ2V0U2VsZWN0ZWRJdGVtc0RhdGEoKS5yb3dzID8/IFtdO1xuICAgICAgICBpZiAodGhpcy5jdXN0b21MaXN0Py5nZXRJc0FsbFNlbGVjdGVkRm9yQWN0aW9ucygpKSB7XG4gICAgICAgICAgICB1dWlkcyA9IHRoaXMuZGF0YU9iamVjdHMubWFwKG9iaiA9PiBvYmouVUlEKS5maWx0ZXIoeCA9PiB1dWlkcy5pbmRleE9mKHgpICE9IC0xKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvYmplY3RzID0gdXVpZHMubWFwKHV1aWQgPT4gdGhpcy5nZXRPYmplY3QodXVpZCkpXG4gICAgICAgIHJldHVybiBvYmplY3RzO1xuICAgIH1cbiAgXG4gICAgcHJpdmF0ZSBnZXRPYmplY3QodXVpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFPYmplY3RzLmZpbmQob2JqID0+IG9iai5VSUQgPT09IHV1aWQpO1xuICAgIH1cbiAgICBcbiAgICBuZ09uSW5pdCgpIHtcbiAgICB9XG4gIFxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIFxuICAgIG9uTWVudUl0ZW1DbGlja2VkKGFjdGlvbjogSVBlcE1lbnVJdGVtQ2xpY2tFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnVIYW5kbGVyc1thY3Rpb24uc291cmNlLmtleV0odGhpcy5nZXRNZW51T2JqZWN0cygpKTtcbiAgICB9XG4gIFxuICAgIG9uU2VhcmNoQ2hhbmdlZChldmVudDogSVBlcFNlYXJjaENsaWNrRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSBldmVudC52YWx1ZVxuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgXG4gICAgYXN5bmMgcmVsb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21MaXN0ICYmIHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhT2JqZWN0cyA9IGF3YWl0IHRoaXMuZGF0YVNvdXJjZS5nZXRMaXN0KHtcbiAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nOiB0aGlzLnNlYXJjaFN0cmluZ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IGF3YWl0IHRoaXMuZGF0YVNvdXJjZS5nZXREYXRhVmlldygpO1xuICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhID0gdGhpcy5kYXRhT2JqZWN0cy5tYXAoeCA9PiB0aGlzLmNvbnZlcnRUb1BlcFJvd0RhdGEoeCwgZGF0YVZpZXcpKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFDb252ZXJ0b3JTZXJ2aWNlLmNvbnZlcnRMaXN0RGF0YSh0YWJsZURhdGEpO1xuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChvYmosIGkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhT2JqZWN0c1tpXS5VSUQgPSBvYmouVUlEO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbCA9IHRoaXMuZGF0YUNvbnZlcnRvclNlcnZpY2UuZ2V0VWlDb250cm9sKHRhYmxlRGF0YVswXSk7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUxpc3QuaW5pdExpc3REYXRhKHVpQ29udHJvbCwgZGF0YS5sZW5ndGgsIGRhdGEpO1xuICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5sb2FkTWVudUl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RlZFJvd3NDaGFuZ2VkKHNlbGVjdGVkUm93c0NvdW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5sb2FkTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgb25DdXN0b21pemVGaWVsZENsaWNrKGZpZWxkQ2xpY2tFdmVudDogSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQpIHtcbiAgICAgICAgdGhpcy5maWVsZENsaWNrLmVtaXQoZmllbGRDbGlja0V2ZW50KTtcbiAgICB9XG4gIFxufVxuICAiLCI8ZGl2ICpuZ0lmPVwiaW5saW5lXCIgY2xhc3M9XCJpbmxpbmUtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieyAnYWRkLXBhZGRpbmcnOiBhZGRQYWRkaW5nIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLXRvcC1iYXItY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BCYXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48cGVwLXBhZ2UtbGF5b3V0ICpuZ0lmPVwiIWlubGluZVwiIFthZGRQYWRkaW5nXT1cImFkZFBhZGRpbmdcIj5cbiAgICA8bmctY29udGFpbmVyIHBlcC10b3AtYXJlYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcEJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IHBlcC1tYWluLWFyZWEgY2xhc3M9XCJtYWluLWFyZWEtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvcGVwLXBhZ2UtbGF5b3V0PlxuICAgIFxuPG5nLXRlbXBsYXRlICN0b3BCYXJUZW1wbGF0ZT5cbiAgICA8cGVwLXRvcC1iYXIgW3RpdGxlXT1cInRpdGxlXCIgW2lubGluZV09XCJpbmxpbmVcIj5cbiAgICAgICAgPGRpdiBoZWFkZXItc3RhcnQtY29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltsZWZ0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBoZWFkZXItZW5kLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcmlnaHQtYnV0dG9uc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cGVwLWxpc3QtYWN0aW9ucyBbc2l6ZVR5cGVdPVwiaW5saW5lID8gJ3NtJyA6ICdtZCdcIiBbYWN0aW9uc109XCJtZW51QWN0aW9uc1wiIChhY3Rpb25DbGljayk9XCJvbk1lbnVJdGVtQ2xpY2tlZCgkZXZlbnQpXCI+PC9wZXAtbGlzdC1hY3Rpb25zPlxuICAgICAgICA8cGVwLWxpc3QtdG90YWwgW3NpemVUeXBlXT1cImlubGluZSA/ICdzbScgOiAnbWQnXCIgW3RvdGFsUm93c109XCJjdXN0b21MaXN0ID8gY3VzdG9tTGlzdC50b3RhbFJvd3MgOiAtMVwiPjwvcGVwLWxpc3QtdG90YWw+XG5cbiAgICAgICAgPHBlcC1zZWFyY2ggKm5nSWY9XCJzaG93U2VhcmNoXCIgW3NpemVUeXBlXT1cImlubGluZSA/ICdzbScgOiAnbWQnXCIgKHNlYXJjaCk9XCJvblNlYXJjaENoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICA8L3BlcC1zZWFyY2g+XG4gICAgPC9wZXAtdG9wLWJhcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdFRlbXBsYXRlPlxuICAgIDxkaXYgI2xpc3RDb250YWluZXIgY2xhc3M9XCJsaXN0LWNvbnRhaW5lclwiPlxuICAgICAgICA8cGVwLWxpc3Qgdmlld1R5cGU9XCJ0YWJsZVwiIFtzdXBwb3J0U29ydGluZ109XCJmYWxzZVwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uVHlwZUZvckFjdGlvbnNdPVwiYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiA/ICdtdWx0aScgOiAoYWxsb3dTZWxlY3Rpb24gPyAnc2luZ2xlJyA6ICdub25lJylcIiBbbm9EYXRhRm91bmRNc2ddPVwibm9EYXRhTWVzc2FnZVwiXG4gICAgICAgICAgICAoZmllbGRDbGljayk9XCJvbkN1c3RvbWl6ZUZpZWxkQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJzZWxlY3RlZFJvd3NDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgPC9wZXAtbGlzdD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
421
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2dlbmVyaWMtbGlzdC9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvZ2VuZXJpYy1saXN0L2dlbmVyaWMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEVBRW5CLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFHSCxVQUFVLEVBRVYsT0FBTyxFQUNQLFNBQVMsR0FDWixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBSWhCLGlCQUFpQixFQUVwQixNQUFNLDhCQUE4QixDQUFDO0FBWXRDLE9BQU8sRUFBcUIsa0JBQWtCLEVBQWdCLE1BQU0sa0RBQWtELENBQUM7QUFRdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFTcEMsTUFBTSxPQUFPLG9CQUFvQjtJQStHN0IsWUFDWSxTQUFtQyxFQUNuQyxtQkFBMEMsRUFDMUMscUJBQThDLEVBQzlDLGNBQWdDLEVBQ2hDLFVBQTRCO1FBSjVCLGNBQVMsR0FBVCxTQUFTLENBQTBCO1FBQ25DLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFDMUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF5QjtRQUM5QyxtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDaEMsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUE3R3hDLGdCQUFXLEdBQThCO1lBQ3JDLElBQUks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K0I7b0JBQzVDLFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDO2lCQUMvQzt1UEFJTyxnQkFBZ0I7c0JBRG5CLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBaUJyRCxVQUFVO3NCQURiLEtBQUs7Z0JBU04sT0FBTztzQkFETixLQUFLO2dCQVFOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSUYsY0FBYztzQkFEakIsS0FBSztnQkFNRixhQUFhO3NCQURoQixLQUFLO2dCQU1GLGNBQWM7c0JBRGpCLEtBQUs7Z0JBTUYsS0FBSztzQkFEUixLQUFLO2dCQU1OLFVBQVU7c0JBRFQsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixVQUFVO3NCQURULE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLG1CQUFtQjtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gICAgUGVwRGF0YUNvbnZlcnRvclNlcnZpY2UsXG4gICAgUGVwTGF5b3V0U2VydmljZSxcbiAgICBQZXBSb3dEYXRhLFxuICAgIE9iamVjdHNEYXRhUm93LFxuICAgIFBlcEd1aWQsXG4gICAgVUlDb250cm9sLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBQZXBMaXN0Q29tcG9uZW50LFxuICAgIFBlcFNlbGVjdGlvbkRhdGEsXG4gICAgSVBlcExpc3RMb2FkUGFnZUV2ZW50LFxuICAgIFBlcExpc3RTZWxlY3Rpb25UeXBlLFxuICAgIElQZXBMaXN0U29ydGluZ0NoYW5nZUV2ZW50LFxuICAgIERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIElQZXBMaXN0TG9hZEl0ZW1zRXZlbnRcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvbGlzdCc7XG5pbXBvcnQge1xuICAgIFBlcE1lbnVJdGVtLFxuICAgIElQZXBNZW51SXRlbUNsaWNrRXZlbnQsXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL21lbnUnO1xuaW1wb3J0IHsgSVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9mb3JtJztcbmltcG9ydCB7XG4gICAgUGVwQnJlYWRDcnVtYkl0ZW0sXG4gICAgSVBlcEJyZWFkQ3J1bWJJdGVtQ2xpY2tFdmVudFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9icmVhZC1jcnVtYnMnO1xuaW1wb3J0IHsgSVBlcFNlYXJjaENsaWNrRXZlbnQgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9zZWFyY2gnO1xuXG5pbXBvcnQgeyBHcmlkRGF0YVZpZXdGaWVsZCwgRGF0YVZpZXdGaWVsZFR5cGVzLCBHcmlkRGF0YVZpZXcgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvcGFwaS1zZGsvZGlzdC9lbnRpdGllcy9kYXRhLXZpZXcnO1xuaW1wb3J0IHtcbiAgICBJUGVwR2VuZXJpY0xpc3RJbml0RGF0YSxcbiAgICBJUGVwR2VuZXJpY0xpc3REYXRhU291cmNlLFxuICAgIElQZXBHZW5lcmljTGlzdFBhZ2VyLFxuICAgIElQZXBHZW5lcmljTGlzdEFjdGlvbnMsXG4gICAgSVBlcEdlbmVyaWNMaXN0VGFibGVJbnB1dHMsXG59IGZyb20gJy4vZ2VuZXJpYy1saXN0Lm1vZGVsJztcbmltcG9ydCB7IERhdGFWaWV3Q29udmVydGVyIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL2RhdGEtdmlld3MnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQZXBHZW5lcmljTGlzdFNlcnZpY2UgfSBmcm9tICcuL2dlbmVyaWMtbGlzdC5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1nZW5lcmljLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dlbmVyaWMtbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIF9wZXBMaXN0Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xuICAgIEBWaWV3Q2hpbGQoJ3BlcExpc3RDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgICBzZXQgcGVwTGlzdENvbnRhaW5lcih2YWw6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgdGhpcy5fcGVwTGlzdENvbnRhaW5lciA9IHZhbDtcbiAgICB9XG5cbiAgICBfZGF0YVNvdXJjZTogSVBlcEdlbmVyaWNMaXN0RGF0YVNvdXJjZSA9IHtcbiAgICAgICAgaW5pdDogYXN5bmMgKHBhcmFtczogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFWaWV3OiB7XG4gICAgICAgICAgICAgICAgICAgIFR5cGU6ICdHcmlkJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdG90YWxDb3VudDogLTEsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWw6IElQZXBHZW5lcmljTGlzdERhdGFTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IHZhbDtcbiAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcbiAgICAgICAgdGhpcy5fc29ydGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbnM6IElQZXBHZW5lcmljTGlzdEFjdGlvbnMgPSB7XG4gICAgICAgIGdldDogYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQElucHV0KClcbiAgICB1dWlkTWFwcGluZyA9ICdrZXknO1xuXG4gICAgQElucHV0KClcbiAgICBhZGRQYWRkaW5nID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIGlubGluZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBzaG93U2VhcmNoID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBub0RhdGFGb3VuZE1zZyh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl90YWJsZUlucHV0cy5ub0RhdGFGb3VuZE1zZyA9IHZhbDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25UeXBlKHZhbDogUGVwTGlzdFNlbGVjdGlvblR5cGUpIHtcbiAgICAgICAgdGhpcy5fdGFibGVJbnB1dHMuc2VsZWN0aW9uVHlwZSA9IHZhbDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdXBwb3J0U29ydGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdGFibGVJbnB1dHMuc3VwcG9ydFNvcnRpbmcgPSB2YWw7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgcGFnZXIodmFsOiBJUGVwR2VuZXJpY0xpc3RQYWdlcikge1xuICAgICAgICB0aGlzLl90YWJsZUlucHV0cy5wYWdlciA9IHZhbDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dUb3BCYXIgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYnJlYWRDcnVtYnNJdGVtczogUGVwQnJlYWRDcnVtYkl0ZW1bXSA9IG5ldyBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGZpZWxkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRDbGlja0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgYnJlYWRDcnVtYkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEJyZWFkQ3J1bWJJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIHNldCBwZXBMaXN0KHZhbDogUGVwTGlzdENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl9nZW5lcmljTGlzdFNlcnZpY2UucGVwTGlzdCA9IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgcGVwTGlzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dlbmVyaWNMaXN0U2VydmljZS5wZXBMaXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc2l6ZSQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIHByaXZhdGUgX2RhdGFWaWV3OiBHcmlkRGF0YVZpZXcgPSB7XG4gICAgICAgIFR5cGU6ICdHcmlkJ1xuICAgIH07XG4gICAgcHJpdmF0ZSBfdGFibGVJbnB1dHM6IElQZXBHZW5lcmljTGlzdFRhYmxlSW5wdXRzID0ge1xuICAgICAgICBzdXBwb3J0U29ydGluZzogZmFsc2UsXG4gICAgICAgIHNlbGVjdGlvblR5cGU6ICdzaW5nbGUnLFxuICAgICAgICBwYWdlcjoge1xuICAgICAgICAgICAgdHlwZTogJ3Njcm9sbCdcbiAgICAgICAgfSxcbiAgICAgICAgbm9EYXRhRm91bmRNc2c6ICcnXG4gICAgfTtcbiAgICB0b3RhbFJvd0NvdW50ID0gLTE7XG4gICAgc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgcHJpdmF0ZSBfc29ydGluZzogSVBlcExpc3RTb3J0aW5nQ2hhbmdlRXZlbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBtZW51SGFuZGxlcnM6IHsgW2tleTogc3RyaW5nXTogKG9iajogYW55KSA9PiBQcm9taXNlPHZvaWQ+IH0gPSB7fTtcbiAgICBtZW51QWN0aW9uczogQXJyYXk8UGVwTWVudUl0ZW0+ID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSBfZ2VuZXJpY0xpc3RTZXJ2aWNlOiBQZXBHZW5lcmljTGlzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2RhdGFDb252ZXJ0b3JTZXJ2aWNlOiBQZXBEYXRhQ29udmVydG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbGF5b3V0U2VydmljZTogUGVwTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZSQgPSB0aGlzLl9sYXlvdXRTZXJ2aWNlLm9uUmVzaXplJC5waXBlKCkuc3Vic2NyaWJlKChzaXplKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgIFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRUYWJsZSgpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3BlcExpc3RDb250YWluZXIpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZXBMaXN0Q29udGFpbmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVwTGlzdENvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuX3Jlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFBlcExpc3RDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX3BlcExpc3RDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xuICAgICAgICAgICAgICAgIHRoaXMucGVwTGlzdCA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgIC8vbWVyZ2Ugc2VsZWN0b3IgaW5wdXRzIHdpdGggY2FsbGJhY2sgaW5wdXRzXG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVJbnB1dHMgPSBhd2FpdCB0aGlzLmxvYWRUYWJsZUlucHV0cygpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgdG9JbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAodGFibGVJbnB1dHMucGFnZXI/LnR5cGUgPT09ICdwYWdlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9JbmRleCA9IGZyb21JbmRleCArICh0YWJsZUlucHV0cy5wYWdlcj8uc2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRSkgLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvSW5kZXggPSAxMDA7Ly9UTyBETyAtIGdldCByZWVzdWx0IGZyb20gLSB0aGlzLmN1c3RvbUxpc3QuZ2V0VG9wSXRlbXMoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmxvYWREYXRhKGZyb21JbmRleCwgdG9JbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50ID0gZGF0YT8udG90YWxDb3VudCB8fCAwO1xuXG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnZpZXdUeXBlID0gJ3RhYmxlJztcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc3VwcG9ydFNvcnRpbmcgPSB0YWJsZUlucHV0cy5zdXBwb3J0U29ydGluZztcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VsZWN0aW9uVHlwZUZvckFjdGlvbnMgPSB0YWJsZUlucHV0cy5zZWxlY3Rpb25UeXBlO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYWdlclR5cGUgPSB0YWJsZUlucHV0cy5wYWdlci50eXBlO1xuICAgICAgICAgICAgICAgIGlmICh0YWJsZUlucHV0cy5wYWdlci50eXBlID09PSAncGFnZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYWdlU2l6ZSA9IHRhYmxlSW5wdXRzLnBhZ2VyPy5zaXplIHx8IERFRkFVTFRfUEFHRV9TSVpFO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFnZUluZGV4ID0gdGFibGVJbnB1dHMucGFnZXI/LmluZGV4IHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ub0RhdGFGb3VuZE1zZyA9IHRhYmxlSW5wdXRzLm5vRGF0YUZvdW5kTXNnO1xuXG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmZpZWxkQ2xpY2suc3Vic2NyaWJlKCgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkN1c3RvbWl6ZUZpZWxkQ2xpY2soJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgkZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UubG9hZEl0ZW1zLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkSXRlbXMoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5sb2FkUGFnZS5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZFBhZ2UoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS52YWx1ZUNoYW5nZS5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkKCRldmVudClcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zb3J0aW5nQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Tb3J0aW5nQ2hhbmdlKCRldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29udmVydGVkTGlzdDogT2JqZWN0c0RhdGFSb3dbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhPy5pdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkTGlzdCA9IHRoaXMuX2RhdGFDb252ZXJ0b3JTZXJ2aWNlLmNvbnZlcnRMaXN0RGF0YShkYXRhLml0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1aUNvbnRyb2wgPSB0aGlzLmdldFVpQ29udHJvbChEYXRhVmlld0NvbnZlcnRlci50b1VJQ29udHJvbERhdGEoZGF0YS5kYXRhVmlldykpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaW5pdExpc3REYXRhKHVpQ29udHJvbCwgZGF0YS50b3RhbENvdW50LCBjb252ZXJ0ZWRMaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBjaGVja3MgaWYgdGhlIG9iamVjdCBjb250YWlucyBwcm9wZXJ0eVxuICAgICogQHBhcmFtIG9iaiBvYmplY3RcbiAgICAqIEBwYXJhbSBwcm9wIHByb3BlcnR5IG5hbWVcbiAgICAqIEByZXR1cm5zIHRydWUgaWYgY29udGFpbnMsIGZhbHNlIG90aGVyd2lzZVxuICAgICovXG4gICAgcHJpdmF0ZSBoYXNQcm9wZXJ0eShvYmo6IGFueSwgcHJvcDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb2FkcyBjYWxsYmFjayBpbnB1dHMgaW4gY2FzZSB0aGV5IGFyZSBwcm92aWRlZCBhbmQgbWVyZ2Ugd2l0aCBzZWxlY3RvciBpbnB1dHNcbiAgICAgKiBAcmV0dXJucyBtZXJnZWQgcGVwLWxpc3QgaW5wdXRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkVGFibGVJbnB1dHMoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlSW5wdXRzOiBhbnkgPSB7IC4uLnRoaXMuX3RhYmxlSW5wdXRzIH07XG5cbiAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UuaW5wdXRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dHM6IElQZXBHZW5lcmljTGlzdFRhYmxlSW5wdXRzID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5pbnB1dHMoKTtcbiAgICAgICAgICAgIGlmIChpbnB1dHMpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNQcm9wZXJ0eSh0YWJsZUlucHV0cywgaXRlbVswXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlSW5wdXRzW2l0ZW1bMF1dID0gaXRlbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhYmxlSW5wdXRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VWlDb250cm9sKGRhdGE6IGFueSk6IFVJQ29udHJvbCB7XG4gICAgICAgIGNvbnN0IHVpQ29udHJvbCA9IG5ldyBVSUNvbnRyb2woKTtcbiAgICAgICAgdWlDb250cm9sLkNvbnRyb2xGaWVsZHMgPSBbXTtcblxuICAgICAgICBpZiAoZGF0YT8uQ29udHJvbEZpZWxkcykge1xuICAgICAgICAgICAgdWlDb250cm9sLkNvbnRyb2xGaWVsZHMgPSBkYXRhLkNvbnRyb2xGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiB0aGlzLmNvbnZlcnRUb1VpQ29udHJvbEZpZWxkKGZpZWxkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdWlDb250cm9sO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZE1lbnVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYmxlSW5wdXRzLnNlbGVjdGlvblR5cGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5nZXRNZW51QWN0aW9ucygpLnRoZW4oXG4gICAgICAgICAgICAgICAgeCA9PiB0aGlzLm1lbnVBY3Rpb25zID0geFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFRvUGVwUm93RGF0YShvYmplY3Q6IGFueSwgZGF0YVZpZXc6IEdyaWREYXRhVmlldykge1xuICAgICAgICBjb25zdCByb3cgPSBuZXcgUGVwUm93RGF0YSgpO1xuICAgICAgICByb3cuVVVJRCA9IG9iamVjdFt0aGlzLnV1aWRNYXBwaW5nXSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIHJvdy5GaWVsZHMgPSBbXTtcblxuICAgICAgICBpZiAoZGF0YVZpZXc/LkZpZWxkcyAmJiBkYXRhVmlldy5Db2x1bW5zKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YVZpZXcuRmllbGRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZGF0YVZpZXcuRmllbGRzW2luZGV4XSBhcyBHcmlkRGF0YVZpZXdGaWVsZFxuICAgICAgICAgICAgICAgIHJvdy5GaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIEFwaU5hbWU6IGZpZWxkLkZpZWxkSUQsXG4gICAgICAgICAgICAgICAgICAgIFRpdGxlOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChmaWVsZC5UaXRsZSksXG4gICAgICAgICAgICAgICAgICAgIFhBbGlnbm1lbnQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlOiAob2JqZWN0W2ZpZWxkLkZpZWxkSURdIHx8ICcnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICBWYWx1ZTogKG9iamVjdFtmaWVsZC5GaWVsZElEXSB8fCAnJykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgQ29sdW1uV2lkdGg6IGRhdGFWaWV3LkNvbHVtbnNbaW5kZXhdLldpZHRoLFxuICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsVmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICBPcHRpb25hbFZhbHVlczogW10sXG4gICAgICAgICAgICAgICAgICAgIEZpZWxkVHlwZTogRGF0YVZpZXdGaWVsZFR5cGVzW2ZpZWxkLlR5cGVdLFxuICAgICAgICAgICAgICAgICAgICBSZWFkT25seTogZmllbGQuUmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgIEVuYWJsZWQ6ICFmaWVsZC5SZWFkT25seVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRUb1VpQ29udHJvbEZpZWxkKGZpZWxkOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIEFwaU5hbWU6IGZpZWxkLkFwaU5hbWUsXG4gICAgICAgICAgICBGaWVsZFR5cGU6IGZpZWxkLkZpZWxkVHlwZSxcbiAgICAgICAgICAgIFRpdGxlOiBmaWVsZC5UaXRsZSxcbiAgICAgICAgICAgIFJlYWRPbmx5OiBmaWVsZC5SZWFkT25seUZpZWxkLFxuICAgICAgICAgICAgQ29sdW1uV2lkdGg6IGZpZWxkLkNvbHVtbldpZHRoLFxuICAgICAgICAgICAgQ29sdW1uV2lkdGhUeXBlOiAxLFxuICAgICAgICAgICAgTGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgWDogZmllbGQuTGF5b3V0LlgsXG4gICAgICAgICAgICAgICAgWTogZmllbGQuTGF5b3V0LlksXG4gICAgICAgICAgICAgICAgV2lkdGg6IGZpZWxkLkxheW91dC5XaWR0aCxcbiAgICAgICAgICAgICAgICBIZWlnaHQ6IGZpZWxkLkxheW91dC5GaWVsZF9IZWlnaHQsXG4gICAgICAgICAgICAgICAgWEFsaWdubWVudDogZmllbGQuTGF5b3V0LnhBbGlnbm1lbnQsXG4gICAgICAgICAgICAgICAgWUFsaWdubWVudDogZmllbGQuTGF5b3V0LnlBbGlnbm1lbnQsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldE1lbnVBY3Rpb25zKCk6IFByb21pc2U8UGVwTWVudUl0ZW1bXT4ge1xuICAgICAgICBjb25zdCByZXM6IFBlcE1lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRNZW51T2JqZWN0cygpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBhd2FpdCB0aGlzLmFjdGlvbnMuZ2V0KHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMubWVudUhhbmRsZXJzID0ge307XG4gICAgICAgICAgICBhY3Rpb25zPy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBQZXBHdWlkLm5ld0d1aWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVIYW5kbGVyc1t1dWlkXSA9IGl0ZW0uaGFuZGxlcjtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdXVpZCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1lbnVPYmplY3RzKCkge1xuICAgICAgICBjb25zdCBtZW51T2JqZWN0czogYW55ID0ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBuZXcgUGVwU2VsZWN0aW9uRGF0YSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMucGVwTGlzdCkge1xuICAgICAgICAgICAgbWVudU9iamVjdHMuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICBtZW51T2JqZWN0cy5kYXRhID0gdGhpcy5wZXBMaXN0LmdldFNlbGVjdGVkSXRlbXNEYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVudU9iamVjdHM7XG4gICAgfVxuXG4gICAgb25BY3Rpb25JdGVtQ2xpY2tlZChhY3Rpb246IElQZXBNZW51SXRlbUNsaWNrRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRNZW51T2JqZWN0cygpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubWVudUhhbmRsZXJzW2FjdGlvbi5zb3VyY2Uua2V5XShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlYXJjaENoYW5nZWQoZXZlbnQ6IElQZXBTZWFyY2hDbGlja0V2ZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gZXZlbnQudmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdFRhYmxlKCk7XG4gICAgfVxuXG4gICAgb25TZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZFJvd3NDb3VudDogbnVtYmVyKSB7XG4gICAgICAgIC8vbG9hZGluZyBtZW51IGl0ZW1zIGFmdGVyIHBlcC1saXN0IHNlbGVjdGVkIGl0ZW1zIGFyZSB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkTWVudUl0ZW1zKCk7XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIG9uQ3VzdG9taXplRmllbGRDbGljayhmaWVsZENsaWNrRXZlbnQ6IElQZXBGb3JtRmllbGRDbGlja0V2ZW50KSB7XG4gICAgICAgIHRoaXMuZmllbGRDbGljay5lbWl0KGZpZWxkQ2xpY2tFdmVudCk7XG4gICAgfVxuXG4gICAgb25CcmVhZENydW1iSXRlbUNsaWNrKGV2ZW50OiBJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50KSB7XG4gICAgICAgIHRoaXMuYnJlYWRDcnVtYkl0ZW1DbGljay5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlZChldmVudDogSVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblNvcnRpbmdDaGFuZ2UoZXZlbnQ6IElQZXBMaXN0U29ydGluZ0NoYW5nZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3NvcnRpbmcgPSBldmVudDtcbiAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxvYWREYXRhKGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpOiBQcm9taXNlPElQZXBHZW5lcmljTGlzdEluaXREYXRhPiB7XG4gICAgICAgIGNvbnN0IGRhdGE6IElQZXBHZW5lcmljTGlzdEluaXREYXRhID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5pbml0KHtcbiAgICAgICAgICAgIHNlYXJjaFN0cmluZzogdGhpcy5zZWFyY2hTdHJpbmcgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgc29ydGluZzogdGhpcy5fc29ydGluZyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICAgICAgICAgIHRvSW5kZXg6IHRvSW5kZXhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFWaWV3ID0gZGF0YS5kYXRhVmlldztcblxuICAgICAgICAgICAgaWYgKGRhdGEuaXRlbXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBkYXRhLml0ZW1zID0gZGF0YS5pdGVtcy5tYXAoaXRlbSA9PiB0aGlzLmNvbnZlcnRUb1BlcFJvd0RhdGEoaXRlbSwgZGF0YS5kYXRhVmlldykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGFzeW5jIHVwZGF0ZURhdGFMaXN0KGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIsIHBhZ2VJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlLnVwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YUxpc3QgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nOiB0aGlzLnNlYXJjaFN0cmluZyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc29ydGluZzogdGhpcy5fc29ydGluZyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZnJvbUluZGV4OiBmcm9tSW5kZXgsXG4gICAgICAgICAgICAgICAgdG9JbmRleDogdG9JbmRleCxcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhTGlzdD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhTGlzdC5tYXAoaXRlbSA9PiB0aGlzLmNvbnZlcnRUb1BlcFJvd0RhdGEoaXRlbSwgdGhpcy5fZGF0YVZpZXcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9hZHMgdmlydHVhbCBzY3JvbGwgaXRlbXMgZnJvbSBhcGlcbiAgICAgKi9cbiAgICBhc3luYyBvbkxvYWRJdGVtcyhldmVudDogSVBlcExpc3RMb2FkSXRlbXNFdmVudCkge1xuICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgdGhpcy51cGRhdGVEYXRhTGlzdChldmVudC5mcm9tSW5kZXgsIGV2ZW50LnRvSW5kZXgpO1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRMaXN0ID0gdGhpcy5fZGF0YUNvbnZlcnRvclNlcnZpY2UuY29udmVydExpc3REYXRhKGxpc3QpO1xuICAgICAgICB0aGlzLnBlcExpc3QudXBkYXRlSXRlbXMoY29udmVydGVkTGlzdCwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGxvYWRzIHBhZ2luZyBidWxrIGZyb20gYXBpXG4gICAgICovXG4gICAgYXN5bmMgb25Mb2FkUGFnZShldmVudDogSVBlcExpc3RMb2FkUGFnZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZyb21JbmRleCA9IGV2ZW50LnBhZ2VJbmRleCAqIGV2ZW50LnBhZ2VTaXplO1xuICAgICAgICBjb25zdCB0b0luZGV4ID0gTWF0aC5taW4oZnJvbUluZGV4ICsgZXZlbnQucGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsUm93Q291bnQgLSAxKTtcbiAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IHRoaXMudXBkYXRlRGF0YUxpc3QoZnJvbUluZGV4LCB0b0luZGV4LCBldmVudC5wYWdlSW5kZXgpO1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRMaXN0ID0gdGhpcy5fZGF0YUNvbnZlcnRvclNlcnZpY2UuY29udmVydExpc3REYXRhKGxpc3QpO1xuICAgICAgICB0aGlzLnBlcExpc3QudXBkYXRlUGFnZShjb252ZXJ0ZWRMaXN0LCBldmVudCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXNpemUkKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemUkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiIsIjxkaXYgKm5nSWY9XCJpbmxpbmVcIiBjbGFzcz1cImlubGluZS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ICdhZGQtcGFkZGluZyc6IGFkZFBhZGRpbmcgfVwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VG9wQmFyXCIgY2xhc3M9XCJpbmxpbmUtdG9wLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BCYXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJyZWFkQ3J1bWJzSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJyZWFkQ3J1bWJzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxwZXAtcGFnZS1sYXlvdXQgKm5nSWY9XCIhaW5saW5lXCIgW2FkZFBhZGRpbmddPVwiYWRkUGFkZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG9wQmFyXCIgcGVwLXRvcC1hcmVhPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9wQmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnJlYWRDcnVtYnNJdGVtcy5sZW5ndGggPiAwXCIgcGVwLXRvcC1hcmVhPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnJlYWRDcnVtYnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgcGVwLW1haW4tYXJlYSBjbGFzcz1cIm1haW4tYXJlYS1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9wZXAtcGFnZS1sYXlvdXQ+XG5cbjxuZy10ZW1wbGF0ZSAjdG9wQmFyVGVtcGxhdGU+XG4gICAgPHBlcC10b3AtYmFyIFt0aXRsZV09XCJ0aXRsZVwiIFtpbmxpbmVdPVwiaW5saW5lXCI+XG4gICAgICAgIDxkaXYgaGVhZGVyLXN0YXJ0LWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGVmdC1idXR0b25zXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaGVhZGVyLWVuZC1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3JpZ2h0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cGVwLWxpc3QtYWN0aW9ucyAqbmdJZj1cIm1lbnVBY3Rpb25zLmxlbmd0aCA+IDBcIiBbc2l6ZVR5cGVdPVwiaW5saW5lID8gJ3NtJyA6ICdtZCdcIiBbYWN0aW9uc109XCJtZW51QWN0aW9uc1wiXG4gICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25JdGVtQ2xpY2tlZCgkZXZlbnQpXCI+PC9wZXAtbGlzdC1hY3Rpb25zPlxuICAgICAgICA8cGVwLWxpc3QtdG90YWwgW3NpemVUeXBlXT1cImlubGluZSA/ICdzbScgOiAnbWQnXCIgW3RvdGFsUm93c109XCJ0b3RhbFJvd0NvdW50XCI+XG4gICAgICAgIDwvcGVwLWxpc3QtdG90YWw+XG5cbiAgICAgICAgPHBlcC1zZWFyY2ggKm5nSWY9XCJzaG93U2VhcmNoXCIgW3ZhbHVlXT1cInNlYXJjaFN0cmluZ1wiIFtzaXplVHlwZV09XCJpbmxpbmUgPyAnc20nIDogJ21kJ1wiXG4gICAgICAgICAgICAoc2VhcmNoKT1cIm9uU2VhcmNoQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgIDwvcGVwLXNlYXJjaD5cbiAgICA8L3BlcC10b3AtYmFyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNicmVhZENydW1ic1RlbXBsYXRlPlxuICAgIDxwZXAtYnJlYWQtY3J1bWJzIGNsYXNzPVwiYnJlYWQtY3J1bWJzXCIgW2l0ZW1zXT1cImJyZWFkQ3J1bWJzSXRlbXNcIiBbYWRkU3BhY2luZ109XCJ0cnVlXCIgW2Rpc3BsYXlUeXBlXT1cIidpdGVtcydcIlxuICAgICAgICAoaXRlbUNsaWNrKT1cIm9uQnJlYWRDcnVtYkl0ZW1DbGljaygkZXZlbnQpXCI+PC9wZXAtYnJlYWQtY3J1bWJzPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0VGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgI3BlcExpc3RDb250YWluZXI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|