@colijnit/homedecorator 255.1.4 → 255.1.6
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/app/core/enum/message-type.enum.d.ts +3 -1
- package/app/core/interface/message-with-payload.interface.d.ts +6 -0
- package/app/core/model/homedecorator-settings-options.d.ts +2 -0
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
- package/app/core/service/homedecorator-connector.service.d.ts +5 -4
- package/app/core/service/homedecorator-settings.service.d.ts +2 -1
- package/app/core/service/presets.service.d.ts +3 -1
- package/app/homedecorator.component.d.ts +3 -1
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
- package/app/plugins/core3d/service/floor.service.d.ts +3 -1
- package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
- package/app/plugins/core3d/service/scene.service.d.ts +1 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
- package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
- package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
- package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
- package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
- package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
- package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
- package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
- package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
- package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
- package/assets/icons/dash-button.svg +7 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/retry-button.svg +7 -0
- package/bundles/colijnit-homedecorator.umd.js +822 -601
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/message-type.enum.js +3 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
- package/esm2015/app/core/service/3dm-api.js +4 -4
- package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
- package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
- package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
- package/esm2015/app/core/service/presets.service.js +13 -5
- package/esm2015/app/core/utils/material.utils.js +3 -3
- package/esm2015/app/homedecorator.component.js +26 -19
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
- package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/factory.js +3 -2
- package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
- package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
- package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
- package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
- package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
- package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
- package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
- package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
- package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
- package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
- package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
- package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
- package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
- package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
- package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
- package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
- package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
- package/fesm2015/colijnit-homedecorator.js +1656 -1322
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +1 -1
|
@@ -41,7 +41,6 @@ export class HomedecoratorConnectorService {
|
|
|
41
41
|
this.articleReceived = new Subject();
|
|
42
42
|
this.selectionsReceived = new Subject();
|
|
43
43
|
// public readonly decoNodesReceived: Subject<DecoNode[]> = new Subject<DecoNode[]>();
|
|
44
|
-
this.answerCountReceived = new Subject();
|
|
45
44
|
this.answersReceived = new Subject();
|
|
46
45
|
this.extraAnswerDataLoaded = new Subject();
|
|
47
46
|
// public readonly moodImagesReceived: Subject<{ answerOrSelection: Answer | Selection, imageData: string }> =
|
|
@@ -49,12 +48,11 @@ export class HomedecoratorConnectorService {
|
|
|
49
48
|
this.selectionsAndDecosLinked = new Subject();
|
|
50
49
|
this.connectionReset = new Subject();
|
|
51
50
|
this.selectionsToDisplay = [];
|
|
51
|
+
this.activeAnswers = [];
|
|
52
52
|
this._hideLoaderTimerTimeout = 500;
|
|
53
53
|
this._selections = [];
|
|
54
54
|
this._currentSelections = [];
|
|
55
55
|
this._decoNodes = [];
|
|
56
|
-
// private _activeQuestion: Question;
|
|
57
|
-
this._activeAnswers = [];
|
|
58
56
|
this._articlePrice = 0;
|
|
59
57
|
this._connectorOptions = new Options();
|
|
60
58
|
this._subs = [];
|
|
@@ -84,12 +82,6 @@ export class HomedecoratorConnectorService {
|
|
|
84
82
|
get currentSelections() {
|
|
85
83
|
return this._currentSelections;
|
|
86
84
|
}
|
|
87
|
-
// public get activeQuestion(): Question {
|
|
88
|
-
// return this._activeQuestion;
|
|
89
|
-
// }
|
|
90
|
-
get activeAnswers() {
|
|
91
|
-
return this._activeAnswers;
|
|
92
|
-
}
|
|
93
85
|
get activeSelection() {
|
|
94
86
|
return this._activeSelection;
|
|
95
87
|
}
|
|
@@ -137,6 +129,10 @@ export class HomedecoratorConnectorService {
|
|
|
137
129
|
this.selectionsToDisplay.length = 0;
|
|
138
130
|
this.decoNodes.length = 0;
|
|
139
131
|
}
|
|
132
|
+
emptyAnswersAndQuestion() {
|
|
133
|
+
this.activeAnswers.length = 0;
|
|
134
|
+
this.activeQuestion = undefined;
|
|
135
|
+
}
|
|
140
136
|
/**
|
|
141
137
|
* Used for obsolete furniture
|
|
142
138
|
* @param selections
|
|
@@ -211,8 +207,8 @@ export class HomedecoratorConnectorService {
|
|
|
211
207
|
}
|
|
212
208
|
getArticle(sku, branch) {
|
|
213
209
|
return __awaiter(this, void 0, void 0, function* () {
|
|
214
|
-
this.
|
|
215
|
-
this.
|
|
210
|
+
this.emptySelections();
|
|
211
|
+
this.emptyAnswersAndQuestion();
|
|
216
212
|
const article = yield this._connector.getArticle(sku, branch)
|
|
217
213
|
.catch(e => {
|
|
218
214
|
return Promise.reject(e);
|
|
@@ -236,6 +232,17 @@ export class HomedecoratorConnectorService {
|
|
|
236
232
|
return __awaiter(this, void 0, void 0, function* () {
|
|
237
233
|
const questionAndAnswers = yield this._connector.getQuestionAndAnswersAsync();
|
|
238
234
|
questionAndAnswers.answers = questionAndAnswers.answers.filter(a => this._isAnswerPublished(a));
|
|
235
|
+
// if (questionAndAnswers.question && !questionAndAnswers.question.grouped) {
|
|
236
|
+
this.handleAnswersReceived(questionAndAnswers.answers);
|
|
237
|
+
// }
|
|
238
|
+
this._appEventService.answerCountReceived.next(questionAndAnswers.answers.length);
|
|
239
|
+
if (questionAndAnswers.answers.length === 0) {
|
|
240
|
+
this.emptyAnswersAndQuestion();
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
this.activeQuestion = questionAndAnswers.question;
|
|
244
|
+
this.activeAnswers = questionAndAnswers.answers;
|
|
245
|
+
}
|
|
239
246
|
return questionAndAnswers;
|
|
240
247
|
});
|
|
241
248
|
}
|
|
@@ -441,15 +448,11 @@ export class HomedecoratorConnectorService {
|
|
|
441
448
|
});
|
|
442
449
|
}
|
|
443
450
|
handleAnswersReceived(answers) {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
this.
|
|
448
|
-
|
|
449
|
-
if (this._activeAnswers) {
|
|
450
|
-
this._loadPricesOfActiveAnswers();
|
|
451
|
-
}
|
|
452
|
-
});
|
|
451
|
+
this._preloadCachedImages(answers);
|
|
452
|
+
this.answersReceived.next(answers);
|
|
453
|
+
if (this.activeAnswers && this.activeAnswers.length > 0) {
|
|
454
|
+
this._loadPricesOfActiveAnswers();
|
|
455
|
+
}
|
|
453
456
|
}
|
|
454
457
|
_prepareSelectionsToDisplayImages() {
|
|
455
458
|
if (this.selectionsToDisplay && this.selectionsToDisplay.length > 0) {
|
|
@@ -554,7 +557,7 @@ export class HomedecoratorConnectorService {
|
|
|
554
557
|
if (answerPrices) {
|
|
555
558
|
// paste price data onto our current answer objects; AnswerPrice.selId corresponds to Answer.node
|
|
556
559
|
answerPrices.forEach(answerPrice => {
|
|
557
|
-
const answerMatch = this.
|
|
560
|
+
const answerMatch = this.activeAnswers.find(ans => ans.node === answerPrice.selId);
|
|
558
561
|
if (answerMatch) {
|
|
559
562
|
answerMatch.price = // temp fix for price until backend is ready
|
|
560
563
|
answerMatch.nodeLevel === 0 && answerPrice.addRetailPrice && answerMatch.seqO === 1 ?
|
|
@@ -603,4 +606,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
603
606
|
providedIn: 'root'
|
|
604
607
|
}]
|
|
605
608
|
}], ctorParameters: function () { return [{ type: i1.HomedecoratorConnectorAdapterService }, { type: i2.JsonUtilsService }, { type: i3.HomedecoratorSettingsService }, { type: i4.SkipButtonInfoService }, { type: i5.MessageBusService }, { type: i6.HomedecoratorAppEventService }, { type: i7.GoogleTagManagerService }]; } });
|
|
606
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFLNUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUsxRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFJN0UsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sMkVBQTJFLENBQUM7QUFDNUgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBS3ZHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFNcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7QUFJNUUsZ0hBQWdIO0FBSWhILE1BQU0sT0FBTyw2QkFBNkI7SUFrR3hDLFlBQ1UsVUFBZ0QsRUFDaEQsVUFBNEIsRUFDNUIsZ0JBQThDLEVBQzlDLHNCQUE2QyxFQUM3QyxlQUFrQyxFQUNsQyxnQkFBOEMsRUFDOUMsaUJBQTBDO1FBTjFDLGVBQVUsR0FBVixVQUFVLENBQXNDO1FBQ2hELGVB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QUFDO0tBQUE7OzJIQTVtQlUsNkJBQTZCOytIQUE3Qiw2QkFBNkIsY0FGNUIsTUFBTTs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtKc29uVXRpbHNTZXJ2aWNlfSBmcm9tICcuL2pzb24tdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7U2tpcEJ1dHRvbkluZm9TZXJ2aWNlfSBmcm9tICcuL3NraXAtYnV0dG9uLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4vbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vdXRpbHMvZnVuY3Rpb24vaXMtbmlsbC5mdW5jdGlvbic7XHJcbmltcG9ydCB7QXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlJztcclxuaW1wb3J0IHtEZWNvTm9kZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9kZWNvLW5vZGUnO1xyXG5pbXBvcnQge0Fuc3dlcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXInO1xyXG5pbXBvcnQge0ludGVybmFsUGFyYW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vaW50ZXJuYWwtcGFyYW0uZW51bSc7XHJcbmltcG9ydCB7Tm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9ub2RlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7QW5zd2VyUHJpY2V9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYW5zd2VyLXByaWNlJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24tYW5kLWFuc3dlcnMnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9jb25maWd1cmF0b3Itc3RhdGlzdGljcy1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7T3B0aW9uc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvb3B0aW9ucyc7XHJcbmltcG9ydCB7RGF0YVNlcnZpY2VSZXNwb25zZURhdGF9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhJztcclxuaW1wb3J0IHtBcnRpY2xlVGV4dH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXRleHQuYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mbyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm9SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mby1yZXF1ZXN0JztcclxuaW1wb3J0IHtDdXN0b21GbG9vckdyb3VwUmVzdWx0fSBmcm9tICcuLi8uLi9wbHVnaW5zL2NvcmUzZC9tb2RlbC9jdXN0b20tZmxvb3ItZ3JvdXAtcmVzdWx0JztcclxuaW1wb3J0IHtSZXN1bHRUeXBlfSBmcm9tICcuLi8uLi9wbHVnaW5zL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge0Vycm9yTWVzc2FnZX0gZnJvbSAnLi4vbW9kZWwvZXJyb3ItbWVzc2FnZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzfSBmcm9tICcuLi9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzJztcclxuaW1wb3J0IHtHb29kVHlwZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWZjb2RlL2dvb2QtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtGcm96ZW5BcnRpY2xlU2ltcGxlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Zyb3plbi1hcnRpY2xlLXNpbXBsZSc7XHJcbmltcG9ydCB7RnJvemVuQXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9mcm96ZW4tYXJ0aWNsZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlckV2ZW50fSBmcm9tICcuLi9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9nb29nbGUtdGFnLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLXNvdXJjZS5ibyc7XHJcblxyXG4vLyBIb2xkcyBhbGwgaU9ORSBiYWNrZW5kIHJlbGF0ZWQgc3RhdGUgYW5kIG1ldGhvZHMgZm9yIGEgcnVubmluZyBIb21lRGVjb3JhdG9yLiBUbyBiZSB1c2VkIGFueXdoZXJlIGludGVybmFsbHkuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIGdldCBhcnRpY2xlKCk6IEFydGljbGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FydGljbGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlY29Ob2RlcygpOiBEZWNvTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNvTm9kZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNlbGVjdGlvbnModmFsdWU6IFNlbGVjdGlvbltdKSB7XHJcbiAgICAvLyB0ZW1wIGZpeCBmb3IgcHJpY2VzIHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuX2FydGljbGVQcmljZSA9IHZhbHVlWzBdLmFydFJldGFpbFByaWNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYXJ0aWNsZVByaWNlID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuX3NlbGVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9ucygpOiBTZWxlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlbGVjdGlvbnMoKTogU2VsZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGdldCBhY3RpdmVRdWVzdGlvbigpOiBRdWVzdGlvbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYWN0aXZlUXVlc3Rpb247XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZUFuc3dlcnMoKTogQW5zd2VyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUFuc3dlcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZVNlbGVjdGlvbigpOiBTZWxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdG90YWxQcmljZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsUHJpY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3VsZFNob3dMb2FkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd0xvYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2hvdWxkU2hvd0xvYWRlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWRlTG9hZGVyVGltZW91dCk7XHJcbiAgICAgIHRoaXMuX3Nob3VsZFNob3dMb2FkZXIgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGlkZUxvYWRlclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zaG91bGRTaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sIHRoaXMuX2hpZGVMb2FkZXJUaW1lclRpbWVvdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnRyb2xsZXJJbml0aWFsaXplZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGFydGljbGVSZWNlaXZlZDogU3ViamVjdDxBcnRpY2xlPiA9IG5ldyBTdWJqZWN0PEFydGljbGU+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbnNSZWNlaXZlZDogU3ViamVjdDxTZWxlY3Rpb25bXT4gPSBuZXcgU3ViamVjdDxTZWxlY3Rpb25bXT4oKTtcclxuICAvLyBwdWJsaWMgcmVhZG9ubHkgZGVjb05vZGVzUmVjZWl2ZWQ6IFN1YmplY3Q8RGVjb05vZGVbXT4gPSBuZXcgU3ViamVjdDxEZWNvTm9kZVtdPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBhbnN3ZXJDb3VudFJlY2VpdmVkOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGFuc3dlcnNSZWNlaXZlZDogU3ViamVjdDxBbnN3ZXJbXT4gPSBuZXcgU3ViamVjdDxBbnN3ZXJbXT4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZXh0cmFBbnN3ZXJEYXRhTG9hZGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAvLyBwdWJsaWMgcmVhZG9ubHkgbW9vZEltYWdlc1JlY2VpdmVkOiBTdWJqZWN0PHsgYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbiwgaW1hZ2VEYXRhOiBzdHJpbmcgfT4gPVxyXG4gIC8vICAgbmV3IFN1YmplY3Q8e2Fuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXJ8U2VsZWN0aW9uLCBpbWFnZURhdGE6IHN0cmluZ30+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbnNBbmREZWNvc0xpbmtlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25SZXNldDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBhc3NldFBhdGg6IHN0cmluZztcclxuICBwdWJsaWMgc2VsZWN0aW9uc1RvRGlzcGxheTogU2VsZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfaGlkZUxvYWRlclRpbWVvdXQ6IGFueTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9oaWRlTG9hZGVyVGltZXJUaW1lb3V0OiBudW1iZXIgPSA1MDA7XHJcbiAgcHJpdmF0ZSBfYXJ0aWNsZTogQXJ0aWNsZTtcclxuICBwcml2YXRlIF9zZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2N1cnJlbnRTZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2RlY29Ob2RlczogRGVjb05vZGVbXSA9IFtdO1xyXG4gIC8vIHByaXZhdGUgX2FjdGl2ZVF1ZXN0aW9uOiBRdWVzdGlvbjtcclxuICBwcml2YXRlIF9hY3RpdmVBbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2FjdGl2ZVNlbGVjdGlvbjogU2VsZWN0aW9uO1xyXG4gIHByaXZhdGUgX2FydGljbGVQcmljZTogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxQcmljZTogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIF9zaG91bGRTaG93TG9hZGVyOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIF9jb25uZWN0b3JPcHRpb25zOiBPcHRpb25zID0gbmV3IE9wdGlvbnMoKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaW1hZ2VDYWNoZTogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3I6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2pzb25VdGlsczogSnNvblV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NraXBCdXR0b25JbmZvU2VydmljZTogU2tpcEJ1dHRvbkluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ29vZ2xlVGFnTWFuYWdlcjogR29vZ2xlVGFnTWFuYWdlclNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViVmlld1N0YXJ0dXBJbmZvKHJlcXVlc3Q6IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvUmVxdWVzdCk6IFByb21pc2U8RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuZ2V0V2ViVmlld1N0YXJ0dXBJbmZvKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXROb2RlSW5zdGFuY2Uoc2t1OiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuaW5pdE5vZGVJbnN0YW5jZShnb29kSWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZUluc3RhbmNlUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZDogc3RyaW5nLCBvbGRDb25uZWN0aW9uOiBzdHJpbmcsIG5ld0Nvbm5lY3Rpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZCwgb2xkQ29ubmVjdGlvbiwgbmV3Q29ubmVjdGlvbik7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW1wdHlTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZGVjb05vZGVzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIGZvciBvYnNvbGV0ZSBmdXJuaXR1cmVcclxuICAgKiBAcGFyYW0gc2VsZWN0aW9uc1xyXG4gICAqIEBwYXJhbSBleHRyYUluZm9cclxuICAgKi9cclxuICBwdWJsaWMgc2V0U2VsZWN0aW9ucyhzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSwgZXh0cmFJbmZvOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgLy8gdGhpcy5fb25TZWxlY3Rpb25zUmVjZWl2ZWQoc2VsZWN0aW9ucywgZXh0cmFJbmZvKTtcclxuICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zKHNlbGVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCBmb3Igb2Jzb2xldGUgZnVybml0dXJlXHJcbiAgICogQHBhcmFtIGRlY29Ob2Rlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXREZWNvTm9kZXMoZGVjb05vZGVzOiBEZWNvTm9kZVtdKSB7XHJcbiAgICB0aGlzLl9kZWNvTm9kZXMgPSBkZWNvTm9kZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdENvbm5lY3Rpb24oZm9yY2VSZWxvYWQ/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoKHRoaXMuX2luaXRpYWxpemVkIHx8IHRoaXMuX2luaXRpYWxpemluZykgJiYgIWZvcmNlUmVsb2FkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRpYWxpemluZyA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzZXR0aW5nczogSG9tZWRlY29yYXRvclNldHRpbmdzID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzO1xyXG4gICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1NldHRpbmdzIGFyZSBub3QgZGVmaW5lZCEnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9jb25uZWN0b3JPcHRpb25zID0gT2JqZWN0LmFzc2lnbihuZXcgT3B0aW9ucygpLCBzZXR0aW5ncyk7XHJcblxyXG4gICAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgICAgdGhpcy5fY29ubmVjdG9yLnNob3dMb2FkZXIuc3Vic2NyaWJlKHNob3dMb2FkZXIgPT4gdGhpcy5vblNob3dMb2FkZXJDaGFuZ2Uoc2hvd0xvYWRlcikpLFxyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5jb25uZWN0aW9uUmVzZXQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Db25uZWN0aW9uUmVzZXQoKSksXHJcbiAgICAgICAgLy8gdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkFkZFRvQ2FydCwgKCkgPT4gdGhpcy5hZGRUb0NhcnQoKSlcclxuICAgICAgKTtcclxuICAgICAgYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluaXRDb25uZWN0b3IodGhpcy5fY29ubmVjdG9yT3B0aW9ucywgdW5kZWZpbmVkLCBmb3JjZVJlbG9hZCk7XHJcbiAgICAgIC8vIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZXNzaW9uID0gdGhpcy5fY29ubmVjdG9yT3B0aW9ucy5zZXNzaW9uO1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXJJbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbnRlcm5hbFBhcmFtZXRlcihwYXJhbTogSW50ZXJuYWxQYXJhbSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldEludGVybmFsUGFyYW1ldGVyKHBhcmFtKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZDogbnVtYmVyLCBnb29kVHlwZTogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyLCBleHRlcm5hbFNvdXJjZTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSwgaW5zdGFuY2VJZD86IG51bWJlciwgY29uZmlndXJhdG9yU3RhdGlzdGljcz86IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCk6IFByb21pc2U8YW55PiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCBleHRlcm5hbFNvdXJjZSwgc2hvd0xvYWRlciwgaW5zdGFuY2VJZCwgY29uZmlndXJhdG9yU3RhdGlzdGljcyk7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgZ2V0SnNvbk1hdGNoVGFibGVBcnRpY2xlcygpOiBQcm9taXNlPGFueT4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRKc29uTWF0Y2hUYWJsZUFydGljbGVzKCk7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0SW5zdGFuY2UoaWQ6IHN0cmluZyk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5zZXRJbnN0YW5jZVRvQ29uZmlndXJlKGlkKS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSgpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlSW5zdGFuY2VSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weUluc3RhbmNlQW5kU2F2ZU9yaWdpbmFsQ29uZmlndXJhdGlvbihpbnN0YW5jZUlkOiBzdHJpbmcsIHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29weUluc3RhbmNlKGluc3RhbmNlSWQsIHRydWUsIHJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weUluc3RhbmNlQW5kTG9zZU9yaWdpbmFsQ29uZmlndXJhdGlvbihpbnN0YW5jZUlkOiBzdHJpbmcsIHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29weUluc3RhbmNlKGluc3RhbmNlSWQsIGZhbHNlLCByZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNhdmVDb25maWd1cmF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3Iuc2F2ZUNvbmZpZ3VyYXRpb25zKCk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignZXJyb3Igc2F2aW5nIGNvbmZpZ3VyYXRpb25zJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZShza3U6IHN0cmluZywgYnJhbmNoOiBzdHJpbmcpOiBQcm9taXNlPEFydGljbGU+IHtcclxuICAgIHRoaXMuc2VsZWN0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5fZGVjb05vZGVzID0gW107XHJcbiAgICBjb25zdCBhcnRpY2xlOiBBcnRpY2xlID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEFydGljbGUoc2t1LCBicmFuY2gpXHJcbiAgICAgIC5jYXRjaChlID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5hcnRpY2xlUmVjZWl2ZWQubmV4dChhcnRpY2xlKTtcclxuICAgIHJldHVybiBhcnRpY2xlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE1vb2RJbWFnZUZvckFuc3dlclNlbGVjdGlvbihhbnN3ZXJPclNlbGVjdGlvbjogQW5zd2VyIHwgU2VsZWN0aW9uLCB0aHVtYk5haWw6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb25uZWN0b3IuZ2V0TW9vZEltYWdlRm9yQW5zd2VyU2VsZWN0aW9uKGFuc3dlck9yU2VsZWN0aW9uLCB0aHVtYk5haWwpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGxvYWRTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgLy8gICB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkubGVuZ3RoID0gMDtcclxuICAvLyAgIHRoaXMuX2Nvbm5lY3Rvci5sb2FkU2VsZWN0aW9ucygpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHVibGljIGdldFF1ZXN0aW9uQW5kQW5zd2VycygpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuX2Nvbm5lY3Rvci5nZXRRdWVzdGlvbkFuZEFuc3dlcnMoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRRdWVzdGlvbkFuZEFuc3dlcnNBc3luYygpOiBQcm9taXNlPFF1ZXN0aW9uQW5kQW5zd2Vycz4ge1xyXG4gICAgY29uc3QgcXVlc3Rpb25BbmRBbnN3ZXJzOiBRdWVzdGlvbkFuZEFuc3dlcnMgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTtcclxuICAgIHF1ZXN0aW9uQW5kQW5zd2Vycy5hbnN3ZXJzID0gcXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnMuZmlsdGVyKGEgPT4gdGhpcy5faXNBbnN3ZXJQdWJsaXNoZWQoYSkpO1xyXG4gICAgcmV0dXJuIHF1ZXN0aW9uQW5kQW5zd2VycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3Rpb25zQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0U2VsZWN0aW9uc0FzeW5jKClcclxuICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5fcHJlcGFyZVNlbGVjdGlvbnMoc2VsZWN0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVjb3NBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2RlY29Ob2RlcyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXREZWNvc0FzeW5jKClcclxuICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlciwgaW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLnNlbGVjdEFuc3dlcihhbnN3ZXIsIGlucHV0KTtcclxuICAgIC8vIHRoaXMuc2VsZWN0QW5zd2VyQ2FsbGVkLm5leHQoYW5zd2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxBbnN3ZXIoZ2V0QW5zd2Vyc0FuZFF1ZXN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuY2FuY2VsQW5zd2VyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0U2VsZWN0aW9uKFxyXG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb24sIGZvcmNlQmFja1RvTm9kZT86IGJvb2xlYW4sIGFmdGVyPzogYm9vbGVhbiwgY29ubmVjdG9yPzogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgdGhpcy5fYWN0aXZlU2VsZWN0aW9uID0gc2VsZWN0aW9uO1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5zZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uLCBmb3JjZUJhY2tUb05vZGUsIGFmdGVyLCBjb25uZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IucmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFuc3dlckluZm8oYW5zd2VyOiBBbnN3ZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGFydGljbGVUZXh0czogQXJ0aWNsZVRleHRbXSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRBbnN3ZXJJbmZvKGFuc3dlcik7XHJcbiAgICB0aGlzLl9vbkFuc3dlckluZm9SZWNlaXZlZCh7YW5zd2VyOiBhbnN3ZXIsIGluZm86IGFydGljbGVUZXh0c30pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGV4dGVuZFdpdGhBbnN3ZXJUZXh0QW5kSW1hZ2UoYW5zd2VyOiBBbnN3ZXIsIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoYW5zd2VyLm5vZGVJZCkge1xyXG4gICAgICBpZiAoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKGFuc3dlci5ub2RlSWQpKSB7XHJcbiAgICAgICAgdGhpcy5fY29ubmVjdG9yLmdldEltYWdlRm9yQW5zd2VyT3JTZWxlY3Rpb24oYW5zd2VyLCA0LCB0cnVlLCBzaG93TG9hZGVyKS50aGVuKChpbWFnZURhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlSW1hZ2VSZWNlaXZlZChhbnN3ZXIsIGltYWdlRGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYW5zd2VyLmltYWdlRGF0YSA9IHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGFuc3dlci5ub2RlSWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9za2lwQnV0dG9uSW5mb1NlcnZpY2UuZ2V0U2tpcEJ1dHRvbkltYWdlQW5kVGV4dChhbnN3ZXIuZ29vZElkKS50aGVuKCh0ZXh0QW5kSW1hZ2UpID0+IHtcclxuICAgICAgICBhbnN3ZXIuYW5zd2VyID0gdGV4dEFuZEltYWdlLnRleHQ7XHJcbiAgICAgICAgYW5zd2VyLmNvbW1lcmNpYWxBbnN3ZXIgPSB0ZXh0QW5kSW1hZ2UudGV4dDtcclxuICAgICAgICBhbnN3ZXIuaW1hZ2VEYXRhID0gdGV4dEFuZEltYWdlLmltYWdlQm9keTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXh0ZW5kV2l0aFNlbGVjdGlvbkltYWdlKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNlbGVjdGlvbi5ub2RlSWQpIHtcclxuICAgICAgaWYgKCF0aGlzLl9pbWFnZUNhY2hlLmhhcyhzZWxlY3Rpb24ubm9kZUlkKSkge1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5nZXRJbWFnZUZvckFuc3dlck9yU2VsZWN0aW9uKHNlbGVjdGlvbiwgNCwgdHJ1ZSwgc2hvd0xvYWRlcikudGhlbigoaW1hZ2VEYXRhOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUltYWdlUmVjZWl2ZWQoc2VsZWN0aW9uLCBpbWFnZURhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGVjdGlvbi5pbWFnZURhdGEgPSB0aGlzLl9pbWFnZUNhY2hlLmdldChzZWxlY3Rpb24ubm9kZUlkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wcmVwYXJlU2VsZWN0aW9uc1RvRGlzcGxheUltYWdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzU2VsZWN0aW9uUHVibGlzaGVkKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0UHVibGljYXRpb25Db2RlKCkgPT09IDIgfHxcclxuICAgICAgKChpc05pbGwoc2VsZWN0aW9uLmhpZXJhcmNoaWNhbFB1YmxpY2F0aW9uQ29kZSkgfHwgKChzZWxlY3Rpb24uaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlICYgdGhpcy5fZ2V0UHVibGljYXRpb25Db2RlKCkpID4gMCkpICYmXHJcbiAgICAgIChcclxuICAgICAgICAoc2VsZWN0aW9uLm5vZGVUeXBlID09PSBOb2RlVHlwZS5RdWVzdGlvbiAmJiAoKChzZWxlY3Rpb24ucXVlc3Rpb25QdWJsaWNhdGlvbkNvZGUgJiB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGUoKSkgPiAwKSB8fFxyXG4gICAgICAgICAgaXNOaWxsKHNlbGVjdGlvbi5xdWVzdGlvblB1YmxpY2F0aW9uQ29kZSkpKSB8fFxyXG4gICAgICAgIChzZWxlY3Rpb24ubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFuc3dlciAmJiAoKChzZWxlY3Rpb24uYW5zd2VyUHVibGljYXRpb25Db2RlICYgdGhpcy5fZ2V0UHVibGljYXRpb25Db2RlKCkpID4gMCkgfHxcclxuICAgICAgICAgIGlzTmlsbChzZWxlY3Rpb24uYW5zd2VyUHVibGljYXRpb25Db2RlKSkpXHJcbiAgICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVNlbGVjdGlvbnMoc2VsZWN0aW9uczogU2VsZWN0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9ucyA9IHNlbGVjdGlvbnMuc2xpY2UoMCk7XHJcbiAgICB0aGlzLl9wcmVwYXJlU2VsZWN0aW9uc1RvRGlzcGxheSgpO1xyXG4gICAgbGV0IHRvdGFsUHJpY2UgPSAwO1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbnMpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0aW9ucy5mb3JFYWNoKHNlbGVjdGlvbiA9PiB7XHJcbiAgICAgICAgdG90YWxQcmljZSArPSBzZWxlY3Rpb24uYXJ0UmV0YWlsUHJpY2UgPyBzZWxlY3Rpb24uYXJ0UmV0YWlsUHJpY2UgOiAwO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3RvdGFsUHJpY2UgPSBNYXRoLnJvdW5kKCh0b3RhbFByaWNlICsgTnVtYmVyLkVQU0lMT04pICogMTAwKSAvIDEwMDtcclxuICAgIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25zID0gdGhpcy5zZWxlY3Rpb25zLnNsaWNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0aW9uc1RvRGlzcGxheSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZXBhcmVBbnN3ZXJzQW5kSW1hZ2VzKHRoaXMuc2VsZWN0aW9ucyk7XHJcbiAgICBjb25zdCBhbGxTZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IHRoaXMuc2VsZWN0aW9ucy5maWx0ZXIocyA9PiB0aGlzLl9pc1NlbGVjdGlvblB1Ymxpc2hlZChzKSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkgPSBhbGxTZWxlY3Rpb25zLmZpbHRlcihzID0+IHMubm9kZVR5cGUgIT09IE5vZGVUeXBlLkFydGljbGUgJiYgcy5wcmVzZW50YXRpb25MZXZlbCA9PT0gMSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnNSZWNlaXZlZC5uZXh0KHRoaXMuc2VsZWN0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlQW5zd2Vyc0FuZEltYWdlcyhzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gc2VsZWN0aW9uc1tpXTtcclxuICAgICAgaWYgKHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbCA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdGlvbkFuc3dlcnMoc2VsZWN0aW9uLCBzZWxlY3Rpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fcHJlbG9hZENhY2hlZEltYWdlcyh0aGlzLnNlbGVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VsZWN0aW9uQW5zd2VycyhzZWxlY3Rpb246IFNlbGVjdGlvbiwgc2VsZWN0aW9uczogU2VsZWN0aW9uW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuc3dlcnNGcm9tU2VsZWN0aW9uOiBTZWxlY3Rpb25bXSA9IHNlbGVjdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgIHMgPT4gcy5wYXJlbnRBcnROb2RlSWREZWNvICYmIHNlbGVjdGlvbi5ub2RlSWQgJiYgcy5wYXJlbnRBcnROb2RlSWREZWNvLnRvU3RyaW5nKCkgPT09IHNlbGVjdGlvbi5ub2RlSWQudG9TdHJpbmcoKSk7XHJcbiAgICB0aGlzLl9wcmVwYXJlU2VsZWN0aW9uc05leHRPcHRpb25WYWx1ZXMoYW5zd2Vyc0Zyb21TZWxlY3Rpb24pO1xyXG4gICAgc2VsZWN0aW9uLmxhc3RBbnN3ZXIgPSAoYW5zd2Vyc0Zyb21TZWxlY3Rpb24ubGVuZ3RoID4gMCkgJiYgYW5zd2Vyc0Zyb21TZWxlY3Rpb25bYW5zd2Vyc0Zyb21TZWxlY3Rpb24ubGVuZ3RoIC0gMV0uYW5zd2VyID9cclxuICAgICAgYW5zd2Vyc0Zyb21TZWxlY3Rpb25bYW5zd2Vyc0Zyb21TZWxlY3Rpb24ubGVuZ3RoIC0gMV0uYW5zd2VyLnRyaW0oKSA6XHJcbiAgICAgICcnO1xyXG4gICAgc2VsZWN0aW9uLmxhc3RBbnN3ZXJOb2RlSWQgPSBhbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggPiAwID8gYW5zd2Vyc0Zyb21TZWxlY3Rpb25bYW5zd2Vyc0Zyb21TZWxlY3Rpb24ubGVuZ3RoIC0gMV0ubm9kZUlkIDogdW5kZWZpbmVkO1xyXG4gICAgbGV0IGFuc3dlclRyZWU6IGFueTtcclxuICAgIGxldCBhbnN3ZXJUcmVlU3RyaW5nOiBzdHJpbmc7XHJcbiAgICBpZiAoYW5zd2Vyc0Zyb21TZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBhbnN3ZXJUcmVlID0gYW5zd2Vyc0Zyb21TZWxlY3Rpb25cclxuICAgICAgICAuZmlsdGVyKHMgPT4gdGhpcy5faXNTZWxlY3Rpb25QdWJsaXNoZWQocykgfHwgcy51c2VySW5wdXQpXHJcbiAgICAgICAgLm1hcCgoczogU2VsZWN0aW9uLCBpZHg6IG51bWJlciwgYXJyOiBTZWxlY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGl0bGU6IHMudXNlcklucHV0ID8gKHMuYW5zd2VyID8gcy5hbnN3ZXIudHJpbSgpIDogJycpIDogKHMucXVlc3Rpb24gPyBzLnF1ZXN0aW9uLnRyaW0oKSA6ICcnKSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHMuYW5zd2VyVHJlZVN0cmluZyA/IHMuYW5zd2VyVHJlZVN0cmluZyA6IChzLnVzZXJJbnB1dCA/IChzLnVzZXJJbnB1dFZhbHVlID8gcy51c2VySW5wdXRWYWx1ZS50cmltKCkgOiAnJykgOiAocy5hbnN3ZXIgPyBzLmFuc3dlci50cmltKCkgOiAnJykpLFxyXG4gICAgICAgICAgICBwcmljZTogcy5hcnRSZXRhaWxQcmljZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgYW5zd2VyVHJlZVN0cmluZyA9IGFuc3dlcnNGcm9tU2VsZWN0aW9uXHJcbiAgICAgICAgLmZpbHRlcihzID0+IHRoaXMuX2lzQWxsU2VsZWN0aW9uUHVibGlzaGVkKHMpIHx8IHMudXNlcklucHV0KVxyXG4gICAgICAgIC5tYXAoKHM6IFNlbGVjdGlvbiwgaWR4OiBudW1iZXIsIGFycjogU2VsZWN0aW9uW10pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHMudXNlcklucHV0ID8gKHMudXNlcklucHV0VmFsdWUgPyBzLnVzZXJJbnB1dFZhbHVlLnRyaW0oKSA6ICcnKSA6IChzLmFuc3dlciA/IHMuYW5zd2VyLnRyaW0oKSA6ICcnKVxyXG4gICAgICAgIH0pLmpvaW4oJyAtICcpO1xyXG4gICAgfVxyXG4gICAgc2VsZWN0aW9uLmFuc3dlclRyZWVTdHJpbmcgPSBhbnN3ZXJUcmVlU3RyaW5nO1xyXG4gICAgaWYgKGFuc3dlclRyZWUpIHtcclxuICAgICAgc2VsZWN0aW9uLmFuc3dlclRyZWUgPSBKU09OLnN0cmluZ2lmeShhbnN3ZXJUcmVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNlbGVjdGlvbi5hbnN3ZXJUcmVlID0gSlNPTi5zdHJpbmdpZnkoW3tcclxuICAgICAgICB0aXRsZTogc2VsZWN0aW9uLnVzZXJJbnB1dCA/IChzZWxlY3Rpb24uYW5zd2VyID8gc2VsZWN0aW9uLmFuc3dlci50cmltKCkgOiAnJykgOiAoc2VsZWN0aW9uLnF1ZXN0aW9uID8gc2VsZWN0aW9uLnF1ZXN0aW9uLnRyaW0oKSA6ICcnKSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0aW9uLnVzZXJJbnB1dCA/IChzZWxlY3Rpb24udXNlcklucHV0VmFsdWUgPyBzZWxlY3Rpb24udXNlcklucHV0VmFsdWUudHJpbSgpIDogJycpIDogKHNlbGVjdGlvbi5hbnN3ZXIgPyBzZWxlY3Rpb24uYW5zd2VyLnRyaW0oKSA6ICcnKSxcclxuICAgICAgICBwcmljZTogc2VsZWN0aW9uLmFydFJldGFpbFByaWNlXHJcbiAgICAgIH1dKTtcclxuICAgIH1cclxuICAgIGxldCB0b3RhbFByaWNlOiBudW1iZXIgPSAwOyAvLyB0ZW1wIGZpeCB1bnRpbCBiYWNrZW5kIGlzIHJlYWR5XHJcbiAgICBhbnN3ZXJzRnJvbVNlbGVjdGlvbi5mb3JFYWNoKChzOiBTZWxlY3Rpb24pID0+IHtcclxuICAgICAgdG90YWxQcmljZSArPSBzLmFydFJldGFpbFByaWNlID8gcy5hcnRSZXRhaWxQcmljZSA6IDA7IC8vIHRlbXAgZml4IHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgIH0pO1xyXG4gICAgKHNlbGVjdGlvbiBhcyBhbnkpLnRvdGFsUHJpY2UgPSB0b3RhbFByaWNlOyAvLyB0ZW1wIGZpeCB1bnRpbCBiYWNrZW5kIGlzIHJlYWR5XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1NlbGVjdGlvblB1Ymxpc2hlZChzOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAocy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuUXVlc3Rpb24gJiYgKCgocy5vcHRpb25TaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChzLm9wdGlvblNob3dPbikpKSB8fFxyXG4gICAgICAgIChzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BbnN3ZXIgJiYgKCgocy5ub2RlU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwocy5ub2RlU2hvd09uKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNBbGxTZWxlY3Rpb25QdWJsaXNoZWQoczogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLlF1ZXN0aW9uICYmICgoKHMub3B0aW9uU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwocy5vcHRpb25TaG93T24pKSkgfHxcclxuICAgICAgICAocy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuTmV4dE9wdGlvblZhbHVlICYmICgoKHMubm9kZVNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKHMubm9kZVNob3dPbikpKSB8fFxyXG4gICAgICAgIChzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BbnN3ZXIgJiYgKCgocy5ub2RlU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwocy5ub2RlU2hvd09uKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNBbnN3ZXJQdWJsaXNoZWQoYTogQW5zd2VyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKGlzTmlsbChhLmhpZXJhcmNoaWNhbFB1YmxpY2F0aW9uQ29kZSkgfHwgKChhLmhpZXJhcmNoaWNhbFB1YmxpY2F0aW9uQ29kZSAmIHRoaXMuX2dldFB1YmxpY2F0aW9uQ29kZSgpKSA+IDApKS8qICYmXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgICAoYS50eXBlID09PSBOb2RlVHlwZS5RdWVzdGlvbiAmJiAoKChhLm9wdGlvblNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKGEub3B0aW9uU2hvd09uKSkpIHx8XHJcbiAgICAgICAgICAgIChhLnR5cGUgPT09IE5vZGVUeXBlLkFuc3dlciAmJiAoKChhLm5vZGVTaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChhLm5vZGVTaG93T24pKSlcclxuICAgICAgICApKi87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVsb2FkQ2FjaGVkSW1hZ2VzKGFuc3dlcnNPclNlbGVjdGlvbnM6IEFuc3dlcltdIHwgU2VsZWN0aW9uW10pOiB2b2lkIHtcclxuICAgIGFuc3dlcnNPclNlbGVjdGlvbnMuZm9yRWFjaCgoYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoYW5zd2VyT3JTZWxlY3Rpb24ubm9kZUlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKGFuc3dlck9yU2VsZWN0aW9uLm5vZGVJZCkpIHtcclxuICAgICAgICAgIGFuc3dlck9yU2VsZWN0aW9uLmltYWdlRGF0YSA9IHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGFuc3dlck9yU2VsZWN0aW9uLm5vZGVJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhZGRUb0NhcnQoZ29vZElkOiBudW1iZXIsIGdvb2RUeXBlOiBzdHJpbmcsIHF1YW50aXR5OiBudW1iZXIsIGluc3RhbmNlSWQ6IG51bWJlciwgZXh0ZXJuYWxTb3VyY2U6IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgbGV0IGpzb246IHN0cmluZztcclxuICAgIGNvbnN0IHN0YXRpc3RpY3M6IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCA9IG5ldyBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQoKTtcclxuICAgIHN0YXRpc3RpY3MudXNlclR5cGUgPSAnSG9tZWRlY29yYXRvcic7XHJcbiAgICBzdGF0aXN0aWNzLnRyYW5zYWN0aW9uVHlwZSA9ICdTYWxlcyc7XHJcbiAgICBzdGF0aXN0aWNzLmFjdGlvbkRvbWFpbiA9ICdIb21lZGVjb3JhdG9yJztcclxuICAgIHN0YXRpc3RpY3Muc2Vzc2lvbklkID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNlc3Npb24gPyB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2Vzc2lvbi5zZXNzaW9uSWQgOiAndW5rbm93bic7XHJcbiAgICBzdGF0aXN0aWNzLndlYkhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIHN0YXRpc3RpY3MuYnVuZGxlSG9zdCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAganNvbiA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhnb29kSWQsIGdvb2RUeXBlLCBxdWFudGl0eSwgZXh0ZXJuYWxTb3VyY2UsIHRydWUsIGluc3RhbmNlSWQsIHN0YXRpc3RpY3MpO1xyXG4gICAgY29uc3QgZnJvemVuQXJ0aWNsZTogRnJvemVuQXJ0aWNsZVNpbXBsZSB8IEZyb3plbkFydGljbGUgPSBKU09OLnBhcnNlKGpzb24pO1xyXG4gICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kRXZlbnQoR29vZ2xlVGFnTWFuYWdlckV2ZW50LkFkZFRvQ2FydCwge1xyXG4gICAgICAnYXJ0aWNsZU5yJzogZnJvemVuQXJ0aWNsZS5hcnRpY2xlTnIsXHJcbiAgICAgICdwcm9kdWN0JzogZnJvemVuQXJ0aWNsZS5hcnRpY2xlTmFtZSxcclxuICAgICAgJ2NvbXBvc2l0aW9uJzogZnJvemVuQXJ0aWNsZSBpbnN0YW5jZW9mIEZyb3plbkFydGljbGUgPyBmcm96ZW5BcnRpY2xlLmNvbXBvc2l0aW9ucyA6IGZyb3plbkFydGljbGUuY29uZmlndXJhdGlvblRleHRcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQXJ0aWNsZUNyZWF0ZWQsIGpzb24pO1xyXG4gICAgcmV0dXJuIGpzb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlQW5zd2Vyc1JlY2VpdmVkKGFuc3dlcnM6IEFuc3dlcltdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9hY3RpdmVBbnN3ZXJzID0gYW5zd2VycztcclxuICAgIHRoaXMuYW5zd2VyQ291bnRSZWNlaXZlZC5uZXh0KHRoaXMuX2FjdGl2ZUFuc3dlcnMubGVuZ3RoKTtcclxuICAgIHRoaXMuX3ByZWxvYWRDYWNoZWRJbWFnZXMoYW5zd2Vycyk7XHJcbiAgICB0aGlzLmFuc3dlcnNSZWNlaXZlZC5uZXh0KGFuc3dlcnMpO1xyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZUFuc3dlcnMpIHtcclxuICAgICAgdGhpcy5fbG9hZFByaWNlc09mQWN0aXZlQW5zd2VycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVNlbGVjdGlvbnNUb0Rpc3BsYXlJbWFnZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5ICYmIHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXlbaV07XHJcbiAgICAgICAgY29uc3QgbGFzdEFuc3dlclNlbGVjdGlvbjogU2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9ucy5maW5kKHMgPT4gcy5ub2RlSWQgPT09IHNlbGVjdGlvbi5sYXN0QW5zd2VyTm9kZUlkKTtcclxuICAgICAgICBpZiAobGFzdEFuc3dlclNlbGVjdGlvbiAmJiAoc2VsZWN0aW9uLmdlbmVyaWMgfHwgc2VsZWN0aW9uLmdyb3VwZWQpKSB7XHJcbiAgICAgICAgICBpZiAoIWxhc3RBbnN3ZXJTZWxlY3Rpb24uaW1hZ2VEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5nZXRJbWFnZUZvckFuc3dlck9yU2VsZWN0aW9uKGxhc3RBbnN3ZXJTZWxlY3Rpb24sIDQsIHRydWUsIGZhbHNlKS50aGVuKChpbWFnZURhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUltYWdlUmVjZWl2ZWQobGFzdEFuc3dlclNlbGVjdGlvbiwgaW1hZ2VEYXRhKTtcclxuICAgICAgICAgICAgICBzZWxlY3Rpb24uaW1hZ2VEYXRhTGFzdEFuc3dlciA9IGxhc3RBbnN3ZXJTZWxlY3Rpb24uaW1hZ2VEYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5pbWFnZURhdGFMYXN0QW5zd2VyID0gbGFzdEFuc3dlclNlbGVjdGlvbi5pbWFnZURhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0aW9uc05leHRPcHRpb25WYWx1ZXMoc2VsZWN0aW9uczogU2VsZWN0aW9uW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gc2VsZWN0aW9ucy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IG5vdlRleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgZm9yIChsZXQgaSA9IGxlbjsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2ldO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uLm5vZGVUeXBlID09PSBOb2RlVHlwZS5OZXh0T3B0aW9uVmFsdWUpIHtcclxuICAgICAgICBub3ZUZXh0ID0gc2VsZWN0aW9uLmFuc3dlciArIChub3ZUZXh0ID8gYCAtICR7bm92VGV4dH1gIDogJycpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChub3ZUZXh0KSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uYW5zd2VyVHJlZVN0cmluZyA9IGAke3NlbGVjdGlvbi5hbnN3ZXJ9IC0gJHtub3ZUZXh0fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vdlRleHQgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UHVibGljYXRpb25Db2RlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldFB1YmxpY2F0aW9uQ29kZUJhc2VkT25Mb2dpbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBfb25EZWNvTm9kZXNSZWNlaXZlZChkZWNvTm9kZXM6IERlY29Ob2RlW10pOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuX2RlY29Ob2RlcyA9IGRlY29Ob2RlcztcclxuICAvLyAgIHRoaXMuZGVjb05vZGVzUmVjZWl2ZWQubmV4dChkZWNvTm9kZXMpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBfb25RdWVzdGlvblJlY2VpdmVkKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5fYWN0aXZlUXVlc3Rpb24gPSBxdWVzdGlvbjtcclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUltYWdlUmVjZWl2ZWQoYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbiwgaW1hZ2VEYXRhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpbWFnZURhdGFPclVybDogc3RyaW5nO1xyXG4gICAgaWYgKGltYWdlRGF0YSkge1xyXG4gICAgICBpZiAoaW1hZ2VEYXRhLm1hdGNoKC9kYXRhOmltYWdlLykgfHwgaW1hZ2VEYXRhLnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCBpbWFnZURhdGEuc3RhcnRzV2l0aCgnd3d3JykpIHtcclxuICAgICAgICBpbWFnZURhdGFPclVybCA9IGltYWdlRGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5hc3NldFBhdGggJiYgIXRoaXMuYXNzZXRQYXRoLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgIHRoaXMuYXNzZXRQYXRoICs9ICcvJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGltYWdlRGF0YS5zdGFydHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgIGltYWdlRGF0YSA9IGltYWdlRGF0YS5zdWJzdHIoMSwgaW1hZ2VEYXRhLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGltYWdlRGF0YU9yVXJsID0gKHRoaXMuYXNzZXRQYXRoID8gdGhpcy5hc3NldFBhdGggOiAnJykgKyBpbWFnZURhdGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICg8YW55PmFuc3dlck9yU2VsZWN0aW9uKS5pbWFnZURhdGEgPSBpbWFnZURhdGFPclVybCA9PT0gdW5kZWZpbmVkID8gJycgOiBpbWFnZURhdGFPclVybDtcclxuICAgIGlmIChpbWFnZURhdGFPclVybCkge1xyXG4gICAgICB0aGlzLl9jYWNoZUltYWdlKGFuc3dlck9yU2VsZWN0aW9uLm5vZGVJZCwgaW1hZ2VEYXRhT3JVcmwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FjaGVJbWFnZShpZDogbnVtYmVyLCBpbWFnZURhdGFPclVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbWFnZUNhY2hlLnNldChpZCwgaW1hZ2VEYXRhT3JVcmwpO1xyXG4gIH1cclxuXHJcbiAgLy8gd2lsbCBiZSB1c2VkL2ltcGxlbWVudGVkIGxhdGVyIG9uLCBvbiB0aGUgcHJvZHVjdCBkZXRhaWwgcGFnZVxyXG4gIC8vIHByaXZhdGUgX29uTW9vZEltYWdlUmVjZWl2ZWQobW9vZEltYWdlRGF0YTogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLm1vb2RJbWFnZXNSZWNlaXZlZC5uZXh0KG1vb2RJbWFnZURhdGEpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25BbnN3ZXJJbmZvUmVjZWl2ZWQoZGF0YTogeyBhbnN3ZXI6IEFuc3dlciwgaW5mbzogQXJ0aWNsZVRleHRbXSB9KTogdm9pZCB7XHJcbiAgICAvLyBAdG9kbyBjaGVjayB0aGlzXHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmFuc3dlciAmJiBkYXRhLmluZm8pIHtcclxuICAgICAgbGV0IGluZm9NZXNzYWdlID0gJyc7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW46IG51bWJlciA9IGRhdGEuaW5mby5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGluZm86IEFydGljbGVUZXh0ID0gZGF0YS5pbmZvW2ldO1xyXG4gICAgICAgIGluZm9NZXNzYWdlICs9IGluZm8uZGVzY3JpcHRpb24gKyAnXFxuXFxuJyArIGluZm8udGV4dDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuYXJ0aWNsZUluZm9SZWNlaXZlZC5uZXh0KGluZm9NZXNzYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNob3dMb2FkZXJDaGFuZ2Uoc2hvd0xvYWRlcjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fc2hvdWxkU2hvd0xvYWRlciA9IHNob3dMb2FkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Db25uZWN0aW9uUmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbm5lY3Rpb25SZXNldC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVJbnN0YW5jZVJlc3BvbnNlKHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSk6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhIHtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuaW5zdGFuY2VTZXQubmV4dChyZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgLy8gUE9TVENPTkRJVElPTjogY3VycmVudCBhY3RpdmVBbnN3ZXJzIGhhdmUgcHJpY2UgdmFsdWVzLlxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRQcmljZXNPZkFjdGl2ZUFuc3dlcnMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBhbnN3ZXJQcmljZXM6IEFuc3dlclByaWNlW10gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0QW5zd2VyUHJpY2VzKCk7XHJcbiAgICBpZiAoYW5zd2VyUHJpY2VzKSB7XHJcbiAgICAgIC8vIHBhc3RlIHByaWNlIGRhdGEgb250byBvdXIgY3VycmVudCBhbnN3ZXIgb2JqZWN0czsgQW5zd2VyUHJpY2Uuc2VsSWQgY29ycmVzcG9uZHMgdG8gQW5zd2VyLm5vZGVcclxuICAgICAgYW5zd2VyUHJpY2VzLmZvckVhY2goYW5zd2VyUHJpY2UgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFuc3dlck1hdGNoOiBBbnN3ZXIgPSB0aGlzLl9hY3RpdmVBbnN3ZXJzLmZpbmQoYW5zID0+IGFucy5ub2RlID09PSBhbnN3ZXJQcmljZS5zZWxJZCk7XHJcbiAgICAgICAgaWYgKGFuc3dlck1hdGNoKSB7XHJcbiAgICAgICAgICAoPGFueT5hbnN3ZXJNYXRjaCkucHJpY2UgPSAvLyB0ZW1wIGZpeCBmb3IgcHJpY2UgdW50aWwgYmFja2VuZCBpcyByZWFkeVxyXG4gICAgICAgICAgICAoPGFueT5hbnN3ZXJNYXRjaCkubm9kZUxldmVsID09PSAwICYmIGFuc3dlclByaWNlLmFkZFJldGFpbFByaWNlICYmICg8YW55PmFuc3dlck1hdGNoKS5zZXFPID09PSAxID9cclxuICAgICAgICAgICAgICBhbnN3ZXJQcmljZS5hZGRSZXRhaWxQcmljZSAtIHRoaXMuX2FydGljbGVQcmljZSA6XHJcbiAgICAgICAgICAgICAgYW5zd2VyUHJpY2UuYWRkUmV0YWlsUHJpY2U7XHJcbiAgICAgICAgICB0aGlzLmV4dHJhQW5zd2VyRGF0YUxvYWRlZC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NvcHlJbnN0YW5jZShcclxuICAgIG9yaWdpbmFsSW5zdGFuY2VJZDogc3RyaW5nLFxyXG4gICAgc2hvdWxkU2F2ZUN1cnJlbnRJbnN0YW5jZUlkOiBib29sZWFuLFxyXG4gICAgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0XHJcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IGNvcHlJbnN0YW5jZVJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5jb3B5SW5zdGFuY2Uob3JpZ2luYWxJbnN0YW5jZUlkLCBzaG91bGRTYXZlQ3VycmVudEluc3RhbmNlSWQpLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgaWYgKGUgPT09ICdFQ09OTkFCT1JURUQnIHx8IGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLlRpbWVvdXQ7XHJcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLlVua25vd247XHJcbiAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKGNvcHlJbnN0YW5jZVJlc3BvbnNlLnJlc3VsdE9iamVjdC5kYXRhKSk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKCFjb3B5SW5zdGFuY2VSZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKGNvcHlJbnN0YW5jZVJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQubWVzc2FnZXMubWFwKChtOiBhbnkpID0+IG0ubWVzc2FnZVR5cGUgPT09ICdFJykgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uTm90Rml4ZWQ7XHJcbiAgICAgICAgY29weUluc3RhbmNlUmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5tZXNzYWdlcy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKG0ubWVzc2FnZSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uUGFydGlhbGx5Rml4ZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IG5ld0luc3RhbmNlSWQ6IHN0cmluZyA9IGNvcHlJbnN0YW5jZVJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIHRoaXMuX2hhbmRsZUluc3RhbmNlUmVzcG9uc2UoY29weUluc3RhbmNlUmVzcG9uc2UpO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXdJbnN0YW5jZUlkKTtcclxuICB9XHJcbn1cclxuIl19
|
|
609
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFLNUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUsxRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFJN0UsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sMkVBQTJFLENBQUM7QUFDNUgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBS3ZHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFNcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7QUFLNUUsZ0hBQWdIO0FBSWhILE1BQU0sT0FBTyw2QkFBNkI7SUF5RnhDLFlBQ1UsVUFBZ0QsRUFDaEQsVUFBNEIsRUFDNUIsZ0JBQThDLEVBQzlDLHNCQUE2QyxFQUM3QyxlQUFrQyxFQUNsQyxnQkFBOEMsRUFDOUMsaUJBQTBDO1FBTjFDLGVBQVUsR0FBVixVQUFVLENBQXNDO1FBQ2hELGVB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QUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDL0I7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsMkJBQTJCLENBQUM7aUJBQzVEO2FBQ0Y7WUFDRCxNQUFNLGFBQWEsR0FBVyxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7WUFDaEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDbkQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7S0FBQTs7MkhBaG5CVSw2QkFBNkI7K0hBQTdCLDZCQUE2QixjQUY1QixNQUFNOzRGQUVQLDZCQUE2QjtrQkFIekMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0pzb25VdGlsc1NlcnZpY2V9IGZyb20gJy4vanNvbi11dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtTa2lwQnV0dG9uSW5mb1NlcnZpY2V9IGZyb20gJy4vc2tpcC1idXR0b24taW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7aXNOaWxsfSBmcm9tICcuLi91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtBcnRpY2xlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2FydGljbGUnO1xyXG5pbXBvcnQge0RlY29Ob2RlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2RlY28tbm9kZSc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7SW50ZXJuYWxQYXJhbX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9pbnRlcm5hbC1wYXJhbS5lbnVtJztcclxuaW1wb3J0IHtOb2RlVHlwZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL25vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtBbnN3ZXJQcmljZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXItcHJpY2UnO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge1F1ZXN0aW9uQW5kQW5zd2Vyc30gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9xdWVzdGlvbi1hbmQtYW5zd2Vycyc7XHJcbmltcG9ydCB7Q29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50fSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2NvbmZpZ3VyYXRvci1zdGF0aXN0aWNzLWVudmlyb25tZW50JztcclxuaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9vcHRpb25zJztcclxuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvZGF0YS1zZXJ2aWNlLXJlc3BvbnNlLWRhdGEnO1xyXG5pbXBvcnQge0FydGljbGVUZXh0fSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2FydGljbGUtdGV4dC5ibyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm99IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctc3RhcnR1cC1pbmZvJztcclxuaW1wb3J0IHtFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctc3RhcnR1cC1pbmZvLXJlcXVlc3QnO1xyXG5pbXBvcnQge0N1c3RvbUZsb29yR3JvdXBSZXN1bHR9IGZyb20gJy4uLy4uL3BsdWdpbnMvY29yZTNkL21vZGVsL2N1c3RvbS1mbG9vci1ncm91cC1yZXN1bHQnO1xyXG5pbXBvcnQge1Jlc3VsdFR5cGV9IGZyb20gJy4uLy4uL3BsdWdpbnMvY29yZTNkL2VudW0vcmVzdWx0LXR5cGUuZW51bSc7XHJcbmltcG9ydCB7RXJyb3JNZXNzYWdlfSBmcm9tICcuLi9tb2RlbC9lcnJvci1tZXNzYWdlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi9ob21lZGVjb3JhdG9yLWFwcC1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3N9IGZyb20gJy4uL21vZGVsL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3MnO1xyXG5pbXBvcnQge0dvb2RUeXBlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9lbnVtL3JlZmNvZGUvZ29vZC10eXBlLmVudW0nO1xyXG5pbXBvcnQge0Zyb3plbkFydGljbGVTaW1wbGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZnJvemVuLWFydGljbGUtc2ltcGxlJztcclxuaW1wb3J0IHtGcm96ZW5BcnRpY2xlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Zyb3plbi1hcnRpY2xlJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyRXZlbnR9IGZyb20gJy4uL2VudW0vZ29vZ2xlLXRhZy1tYW5hZ2VyLWV2ZW50LmVudW0nO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2dvb2dsZS10YWctbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZXh0ZXJuYWwtc291cmNlLmJvJztcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9xdWVzdGlvbic7XHJcblxyXG4vLyBIb2xkcyBhbGwgaU9ORSBiYWNrZW5kIHJlbGF0ZWQgc3RhdGUgYW5kIG1ldGhvZHMgZm9yIGEgcnVubmluZyBIb21lRGVjb3JhdG9yLiBUbyBiZSB1c2VkIGFueXdoZXJlIGludGVybmFsbHkuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIGdldCBhcnRpY2xlKCk6IEFydGljbGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FydGljbGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlY29Ob2RlcygpOiBEZWNvTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNvTm9kZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNlbGVjdGlvbnModmFsdWU6IFNlbGVjdGlvbltdKSB7XHJcbiAgICAvLyB0ZW1wIGZpeCBmb3IgcHJpY2VzIHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuX2FydGljbGVQcmljZSA9IHZhbHVlWzBdLmFydFJldGFpbFByaWNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYXJ0aWNsZVByaWNlID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuX3NlbGVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9ucygpOiBTZWxlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlbGVjdGlvbnMoKTogU2VsZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmVTZWxlY3Rpb24oKTogU2VsZWN0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRvdGFsUHJpY2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b3RhbFByaWNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG91bGRTaG93TG9hZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZFNob3dMb2FkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNob3VsZFNob3dMb2FkZXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5faGlkZUxvYWRlclRpbWVvdXQpO1xyXG4gICAgICB0aGlzLl9zaG91bGRTaG93TG9hZGVyID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hpZGVMb2FkZXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2hvdWxkU2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LCB0aGlzLl9oaWRlTG9hZGVyVGltZXJUaW1lb3V0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb250cm9sbGVySW5pdGlhbGl6ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHB1YmxpYyByZWFkb25seSBhcnRpY2xlUmVjZWl2ZWQ6IFN1YmplY3Q8QXJ0aWNsZT4gPSBuZXcgU3ViamVjdDxBcnRpY2xlPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25zUmVjZWl2ZWQ6IFN1YmplY3Q8U2VsZWN0aW9uW10+ID0gbmV3IFN1YmplY3Q8U2VsZWN0aW9uW10+KCk7XHJcbiAgLy8gcHVibGljIHJlYWRvbmx5IGRlY29Ob2Rlc1JlY2VpdmVkOiBTdWJqZWN0PERlY29Ob2RlW10+ID0gbmV3IFN1YmplY3Q8RGVjb05vZGVbXT4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYW5zd2Vyc1JlY2VpdmVkOiBTdWJqZWN0PEFuc3dlcltdPiA9IG5ldyBTdWJqZWN0PEFuc3dlcltdPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBleHRyYUFuc3dlckRhdGFMb2FkZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIC8vIHB1YmxpYyByZWFkb25seSBtb29kSW1hZ2VzUmVjZWl2ZWQ6IFN1YmplY3Q8eyBhbnN3ZXJPclNlbGVjdGlvbjogQW5zd2VyIHwgU2VsZWN0aW9uLCBpbWFnZURhdGE6IHN0cmluZyB9PiA9XHJcbiAgLy8gICBuZXcgU3ViamVjdDx7YW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlcnxTZWxlY3Rpb24sIGltYWdlRGF0YTogc3RyaW5nfT4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uc0FuZERlY29zTGlua2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvblJlc2V0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGFzc2V0UGF0aDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzZWxlY3Rpb25zVG9EaXNwbGF5OiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gIHB1YmxpYyBhY3RpdmVRdWVzdGlvbjogUXVlc3Rpb247XHJcbiAgcHVibGljIGFjdGl2ZUFuc3dlcnM6IEFuc3dlcltdID0gW107XHJcblxyXG4gIHByaXZhdGUgX2hpZGVMb2FkZXJUaW1lb3V0OiBhbnk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaGlkZUxvYWRlclRpbWVyVGltZW91dDogbnVtYmVyID0gNTAwO1xyXG4gIHByaXZhdGUgX2FydGljbGU6IEFydGljbGU7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9jdXJyZW50U2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9kZWNvTm9kZXM6IERlY29Ob2RlW10gPSBbXTtcclxuICBwcml2YXRlIF9hY3RpdmVTZWxlY3Rpb246IFNlbGVjdGlvbjtcclxuICBwcml2YXRlIF9hcnRpY2xlUHJpY2U6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX3RvdGFsUHJpY2U6IG51bWJlcjtcclxuXHJcbiAgcHJpdmF0ZSBfc2hvdWxkU2hvd0xvYWRlcjogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSBfY29ubmVjdG9yT3B0aW9uczogT3B0aW9ucyA9IG5ldyBPcHRpb25zKCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHByaXZhdGUgX2luaXRpYWxpemluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2ltYWdlQ2FjaGU6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY29ubmVjdG9yOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9qc29uVXRpbHM6IEpzb25VdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9za2lwQnV0dG9uSW5mb1NlcnZpY2U6IFNraXBCdXR0b25JbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FwcEV2ZW50U2VydmljZTogSG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX2dvb2dsZVRhZ01hbmFnZXI6IEdvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFdlYlZpZXdTdGFydHVwSW5mbyhyZXF1ZXN0OiBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3QpOiBQcm9taXNlPEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldFdlYlZpZXdTdGFydHVwSW5mbyhyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0Tm9kZUluc3RhbmNlKHNrdTogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgY29uc3QgZ29vZElkOiBudW1iZXIgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0R29vZElkRnJvbUFydGljbGVOcihza3UpO1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluaXROb2RlSW5zdGFuY2UoZ29vZElkKTtcclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVJbnN0YW5jZVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VDb25uZWN0aW9uKGluc3RhbmNlSWQ6IHN0cmluZywgb2xkQ29ubmVjdGlvbjogc3RyaW5nLCBuZXdDb25uZWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5jaGFuZ2VDb25uZWN0aW9uKGluc3RhbmNlSWQsIG9sZENvbm5lY3Rpb24sIG5ld0Nvbm5lY3Rpb24pO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVtcHR5U2VsZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5Lmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLmRlY29Ob2Rlcy5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVtcHR5QW5zd2Vyc0FuZFF1ZXN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3RpdmVBbnN3ZXJzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLmFjdGl2ZVF1ZXN0aW9uID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCBmb3Igb2Jzb2xldGUgZnVybml0dXJlXHJcbiAgICogQHBhcmFtIHNlbGVjdGlvbnNcclxuICAgKiBAcGFyYW0gZXh0cmFJbmZvXHJcbiAgICovXHJcbiAgcHVibGljIHNldFNlbGVjdGlvbnMoc2VsZWN0aW9uczogU2VsZWN0aW9uW10sIGV4dHJhSW5mbzogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIC8vIHRoaXMuX29uU2VsZWN0aW9uc1JlY2VpdmVkKHNlbGVjdGlvbnMsIGV4dHJhSW5mbyk7XHJcbiAgICB0aGlzLl9wcmVwYXJlU2VsZWN0aW9ucyhzZWxlY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgZm9yIG9ic29sZXRlIGZ1cm5pdHVyZVxyXG4gICAqIEBwYXJhbSBkZWNvTm9kZXNcclxuICAgKi9cclxuICBwdWJsaWMgc2V0RGVjb05vZGVzKGRlY29Ob2RlczogRGVjb05vZGVbXSkge1xyXG4gICAgdGhpcy5fZGVjb05vZGVzID0gZGVjb05vZGVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRDb25uZWN0aW9uKGZvcmNlUmVsb2FkPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCh0aGlzLl9pbml0aWFsaXplZCB8fCB0aGlzLl9pbml0aWFsaXppbmcpICYmICFmb3JjZVJlbG9hZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0aWFsaXppbmcgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc2V0dGluZ3M6IEhvbWVkZWNvcmF0b3JTZXR0aW5ncyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncztcclxuICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdTZXR0aW5ncyBhcmUgbm90IGRlZmluZWQhJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fY29ubmVjdG9yT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24obmV3IE9wdGlvbnMoKSwgc2V0dGluZ3MpO1xyXG5cclxuICAgICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5zaG93TG9hZGVyLnN1YnNjcmliZShzaG93TG9hZGVyID0+IHRoaXMub25TaG93TG9hZGVyQ2hhbmdlKHNob3dMb2FkZXIpKSxcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3IuY29ubmVjdGlvblJlc2V0LnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ29ubmVjdGlvblJlc2V0KCkpLFxyXG4gICAgICAgIC8vIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5BZGRUb0NhcnQsICgpID0+IHRoaXMuYWRkVG9DYXJ0KCkpXHJcbiAgICAgICk7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5pbml0Q29ubmVjdG9yKHRoaXMuX2Nvbm5lY3Rvck9wdGlvbnMsIHVuZGVmaW5lZCwgZm9yY2VSZWxvYWQpO1xyXG4gICAgICAvLyB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2Vzc2lvbiA9IHRoaXMuX2Nvbm5lY3Rvck9wdGlvbnMuc2Vzc2lvbjtcclxuICAgICAgdGhpcy5jb250cm9sbGVySW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5faW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW50ZXJuYWxQYXJhbWV0ZXIocGFyYW06IEludGVybmFsUGFyYW0pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRJbnRlcm5hbFBhcmFtZXRlcihwYXJhbSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhnb29kSWQ6IG51bWJlciwgZ29vZFR5cGU6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciwgZXh0ZXJuYWxTb3VyY2U6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICAgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWUsIGluc3RhbmNlSWQ/OiBudW1iZXIsIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3M/OiBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQpOiBQcm9taXNlPGFueT4ge1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhnb29kSWQsIGdvb2RUeXBlLCBxdWFudGl0eSwgZXh0ZXJuYWxTb3VyY2UsIHNob3dMb2FkZXIsIGluc3RhbmNlSWQsIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGdldEpzb25NYXRjaFRhYmxlQXJ0aWNsZXMoKTogUHJvbWlzZTxhbnk+IHtcclxuICAvLyAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuZ2V0SnNvbk1hdGNoVGFibGVBcnRpY2xlcygpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldEluc3RhbmNlKGlkOiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3Iuc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZShpZCkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0YVNlcnZpY2VSZXNwb25zZURhdGEoKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZUluc3RhbmNlUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvcHlJbnN0YW5jZUFuZFNhdmVPcmlnaW5hbENvbmZpZ3VyYXRpb24oaW5zdGFuY2VJZDogc3RyaW5nLCByZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvcHlJbnN0YW5jZShpbnN0YW5jZUlkLCB0cnVlLCByZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvcHlJbnN0YW5jZUFuZExvc2VPcmlnaW5hbENvbmZpZ3VyYXRpb24oaW5zdGFuY2VJZDogc3RyaW5nLCByZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvcHlJbnN0YW5jZShpbnN0YW5jZUlkLCBmYWxzZSwgcmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlQ29uZmlndXJhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLnNhdmVDb25maWd1cmF0aW9ucygpO1xyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIHNhdmluZyBjb25maWd1cmF0aW9ucycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGUoc2t1OiBzdHJpbmcsIGJyYW5jaDogc3RyaW5nKTogUHJvbWlzZTxBcnRpY2xlPiB7XHJcbiAgICB0aGlzLmVtcHR5U2VsZWN0aW9ucygpO1xyXG4gICAgdGhpcy5lbXB0eUFuc3dlcnNBbmRRdWVzdGlvbigpO1xyXG4gICAgY29uc3QgYXJ0aWNsZTogQXJ0aWNsZSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRBcnRpY2xlKHNrdSwgYnJhbmNoKVxyXG4gICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuYXJ0aWNsZVJlY2VpdmVkLm5leHQoYXJ0aWNsZSk7XHJcbiAgICByZXR1cm4gYXJ0aWNsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRNb29kSW1hZ2VGb3JBbnN3ZXJTZWxlY3Rpb24oYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbiwgdGh1bWJOYWlsOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29ubmVjdG9yLmdldE1vb2RJbWFnZUZvckFuc3dlclNlbGVjdGlvbihhbnN3ZXJPclNlbGVjdGlvbiwgdGh1bWJOYWlsKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBsb2FkU2VsZWN0aW9ucygpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPSAwO1xyXG4gIC8vICAgdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5Lmxlbmd0aCA9IDA7XHJcbiAgLy8gICB0aGlzLl9jb25uZWN0b3IubG9hZFNlbGVjdGlvbnMoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHB1YmxpYyBnZXRRdWVzdGlvbkFuZEFuc3dlcnMoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLl9jb25uZWN0b3IuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTogUHJvbWlzZTxRdWVzdGlvbkFuZEFuc3dlcnM+IHtcclxuICAgIGNvbnN0IHF1ZXN0aW9uQW5kQW5zd2VyczogUXVlc3Rpb25BbmRBbnN3ZXJzID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk7XHJcbiAgICBxdWVzdGlvbkFuZEFuc3dlcnMuYW5zd2VycyA9IHF1ZXN0aW9uQW5kQW5zd2Vycy5hbnN3ZXJzLmZpbHRlcihhID0+IHRoaXMuX2lzQW5zd2VyUHVibGlzaGVkKGEpKTtcclxuICAgIC8vIGlmIChxdWVzdGlvbkFuZEFuc3dlcnMucXVlc3Rpb24gJiYgIXF1ZXN0aW9uQW5kQW5zd2Vycy5xdWVzdGlvbi5ncm91cGVkKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQW5zd2Vyc1JlY2VpdmVkKHF1ZXN0aW9uQW5kQW5zd2Vycy5hbnN3ZXJzKTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hbnN3ZXJDb3VudFJlY2VpdmVkLm5leHQocXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnMubGVuZ3RoKTtcclxuICAgIGlmIChxdWVzdGlvbkFuZEFuc3dlcnMuYW5zd2Vycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5lbXB0eUFuc3dlcnNBbmRRdWVzdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmVRdWVzdGlvbiA9IHF1ZXN0aW9uQW5kQW5zd2Vycy5xdWVzdGlvbjtcclxuICAgICAgdGhpcy5hY3RpdmVBbnN3ZXJzID0gcXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlc3Rpb25BbmRBbnN3ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlbGVjdGlvbnNBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheS5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRTZWxlY3Rpb25zQXN5bmMoKVxyXG4gICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9wcmVwYXJlU2VsZWN0aW9ucyhzZWxlY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZWNvc0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZGVjb05vZGVzID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldERlY29zQXN5bmMoKVxyXG4gICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0QW5zd2VyKGFuc3dlcjogQW5zd2VyLCBpbnB1dD86IHN0cmluZyk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3Iuc2VsZWN0QW5zd2VyKGFuc3dlciwgaW5wdXQpO1xyXG4gICAgLy8gdGhpcy5zZWxlY3RBbnN3ZXJDYWxsZWQubmV4dChhbnN3ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEFuc3dlcihnZXRBbnN3ZXJzQW5kUXVlc3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5jYW5jZWxBbnN3ZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RTZWxlY3Rpb24oXHJcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbiwgZm9yY2VCYWNrVG9Ob2RlPzogYm9vbGVhbiwgYWZ0ZXI/OiBib29sZWFuLCBjb25uZWN0b3I/OiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICB0aGlzLl9hY3RpdmVTZWxlY3Rpb24gPSBzZWxlY3Rpb247XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLnNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb24sIGZvcmNlQmFja1RvTm9kZSwgYWZ0ZXIsIGNvbm5lY3Rvcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5kZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5yZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QW5zd2VySW5mbyhhbnN3ZXI6IEFuc3dlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYXJ0aWNsZVRleHRzOiBBcnRpY2xlVGV4dFtdID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEFuc3dlckluZm8oYW5zd2VyKTtcclxuICAgIHRoaXMuX29uQW5zd2VySW5mb1JlY2VpdmVkKHthbnN3ZXI6IGFuc3dlciwgaW5mbzogYXJ0aWNsZVRleHRzfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXh0ZW5kV2l0aEFuc3dlclRleHRBbmRJbWFnZShhbnN3ZXI6IEFuc3dlciwgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChhbnN3ZXIubm9kZUlkKSB7XHJcbiAgICAgIGlmICghdGhpcy5faW1hZ2VDYWNoZS5oYXMoYW5zd2VyLm5vZGVJZCkpIHtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3IuZ2V0SW1hZ2VGb3JBbnN3ZXJPclNlbGVjdGlvbihhbnN3ZXIsIDQsIHRydWUsIHNob3dMb2FkZXIpLnRoZW4oKGltYWdlRGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVJbWFnZVJlY2VpdmVkKGFuc3dlciwgaW1hZ2VEYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbnN3ZXIuaW1hZ2VEYXRhID0gdGhpcy5faW1hZ2VDYWNoZS5nZXQoYW5zd2VyLm5vZGVJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NraXBCdXR0b25JbmZvU2VydmljZS5nZXRTa2lwQnV0dG9uSW1hZ2VBbmRUZXh0KGFuc3dlci5nb29kSWQpLnRoZW4oKHRleHRBbmRJbWFnZSkgPT4ge1xyXG4gICAgICAgIGFuc3dlci5hbnN3ZXIgPSB0ZXh0QW5kSW1hZ2UudGV4dDtcclxuICAgICAgICBhbnN3ZXIuY29tbWVyY2lhbEFuc3dlciA9IHRleHRBbmRJbWFnZS50ZXh0O1xyXG4gICAgICAgIGFuc3dlci5pbWFnZURhdGEgPSB0ZXh0QW5kSW1hZ2UuaW1hZ2VCb2R5O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBleHRlbmRXaXRoU2VsZWN0aW9uSW1hZ2Uoc2VsZWN0aW9uOiBTZWxlY3Rpb24sIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoc2VsZWN0aW9uLm5vZGVJZCkge1xyXG4gICAgICBpZiAoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKHNlbGVjdGlvbi5ub2RlSWQpKSB7XHJcbiAgICAgICAgdGhpcy5fY29ubmVjdG9yLmdldEltYWdlRm9yQW5zd2VyT3JTZWxlY3Rpb24oc2VsZWN0aW9uLCA0LCB0cnVlLCBzaG93TG9hZGVyKS50aGVuKChpbWFnZURhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlSW1hZ2VSZWNlaXZlZChzZWxlY3Rpb24sIGltYWdlRGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLmltYWdlRGF0YSA9IHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHNlbGVjdGlvbi5ub2RlSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zVG9EaXNwbGF5SW1hZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNTZWxlY3Rpb25QdWJsaXNoZWQoc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGUoKSA9PT0gMiB8fFxyXG4gICAgICAoKGlzTmlsbChzZWxlY3Rpb24uaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlKSB8fCAoKHNlbGVjdGlvbi5oaWVyYXJjaGljYWxQdWJsaWNhdGlvbkNvZGUgJiB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGUoKSkgPiAwKSkgJiZcclxuICAgICAgKFxyXG4gICAgICAgIChzZWxlY3Rpb24ubm9kZVR5cGUgPT09IE5vZGVUeXBlLlF1ZXN0aW9uICYmICgoKHNlbGVjdGlvbi5xdWVzdGlvblB1YmxpY2F0aW9uQ29kZSAmIHRoaXMuX2dldFB1YmxpY2F0aW9uQ29kZSgpKSA+IDApIHx8XHJcbiAgICAgICAgICBpc05pbGwoc2VsZWN0aW9uLnF1ZXN0aW9uUHVibGljYXRpb25Db2RlKSkpIHx8XHJcbiAgICAgICAgKHNlbGVjdGlvbi5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQW5zd2VyICYmICgoKHNlbGVjdGlvbi5hbnN3ZXJQdWJsaWNhdGlvbkNvZGUgJiB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGUoKSkgPiAwKSB8fFxyXG4gICAgICAgICAgaXNOaWxsKHNlbGVjdGlvbi5hbnN3ZXJQdWJsaWNhdGlvbkNvZGUpKSlcclxuICAgICAgKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0aW9ucyhzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zID0gc2VsZWN0aW9ucy5zbGljZSgwKTtcclxuICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zVG9EaXNwbGF5KCk7XHJcbiAgICBsZXQgdG90YWxQcmljZSA9IDA7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0aW9ucykge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb25zLmZvckVhY2goc2VsZWN0aW9uID0+IHtcclxuICAgICAgICB0b3RhbFByaWNlICs9IHNlbGVjdGlvbi5hcnRSZXRhaWxQcmljZSA/IHNlbGVjdGlvbi5hcnRSZXRhaWxQcmljZSA6IDA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdG90YWxQcmljZSA9IE1hdGgucm91bmQoKHRvdGFsUHJpY2UgKyBOdW1iZXIuRVBTSUxPTikgKiAxMDApIC8gMTAwO1xyXG4gICAgdGhpcy5fY3VycmVudFNlbGVjdGlvbnMgPSB0aGlzLnNlbGVjdGlvbnMuc2xpY2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTZWxlY3Rpb25zVG9EaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJlcGFyZUFuc3dlcnNBbmRJbWFnZXModGhpcy5zZWxlY3Rpb25zKTtcclxuICAgIGNvbnN0IGFsbFNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gdGhpcy5zZWxlY3Rpb25zLmZpbHRlcihzID0+IHRoaXMuX2lzU2VsZWN0aW9uUHVibGlzaGVkKHMpKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheSA9IGFsbFNlbGVjdGlvbnMuZmlsdGVyKHMgPT4gcy5ub2RlVHlwZSAhPT0gTm9kZVR5cGUuQXJ0aWNsZSAmJiBzLnByZXNlbnRhdGlvbkxldmVsID09PSAxKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uc1JlY2VpdmVkLm5leHQodGhpcy5zZWxlY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVBbnN3ZXJzQW5kSW1hZ2VzKHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2ldO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0aW9uQW5zd2VycyhzZWxlY3Rpb24sIHNlbGVjdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wcmVsb2FkQ2FjaGVkSW1hZ2VzKHRoaXMuc2VsZWN0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3Rpb25BbnN3ZXJzKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgYW5zd2Vyc0Zyb21TZWxlY3Rpb246IFNlbGVjdGlvbltdID0gc2VsZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgcyA9PiBzLnBhcmVudEFydE5vZGVJZERlY28gJiYgc2VsZWN0aW9uLm5vZGVJZCAmJiBzLnBhcmVudEFydE5vZGVJZERlY28udG9TdHJpbmcoKSA9PT0gc2VsZWN0aW9uLm5vZGVJZC50b1N0cmluZygpKTtcclxuICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zTmV4dE9wdGlvblZhbHVlcyhhbnN3ZXJzRnJvbVNlbGVjdGlvbik7XHJcbiAgICBzZWxlY3Rpb24ubGFzdEFuc3dlciA9IChhbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggPiAwKSAmJiBhbnN3ZXJzRnJvbVNlbGVjdGlvblthbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggLSAxXS5hbnN3ZXIgP1xyXG4gICAgICBhbnN3ZXJzRnJvbVNlbGVjdGlvblthbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggLSAxXS5hbnN3ZXIudHJpbSgpIDpcclxuICAgICAgJyc7XHJcbiAgICBzZWxlY3Rpb24ubGFzdEFuc3dlck5vZGVJZCA9IGFuc3dlcnNGcm9tU2VsZWN0aW9uLmxlbmd0aCA+IDAgPyBhbnN3ZXJzRnJvbVNlbGVjdGlvblthbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggLSAxXS5ub2RlSWQgOiB1bmRlZmluZWQ7XHJcbiAgICBsZXQgYW5zd2VyVHJlZTogYW55O1xyXG4gICAgbGV0IGFuc3dlclRyZWVTdHJpbmc6IHN0cmluZztcclxuICAgIGlmIChhbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFuc3dlclRyZWUgPSBhbnN3ZXJzRnJvbVNlbGVjdGlvblxyXG4gICAgICAgIC5maWx0ZXIocyA9PiB0aGlzLl9pc1NlbGVjdGlvblB1Ymxpc2hlZChzKSB8fCBzLnVzZXJJbnB1dClcclxuICAgICAgICAubWFwKChzOiBTZWxlY3Rpb24sIGlkeDogbnVtYmVyLCBhcnI6IFNlbGVjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aXRsZTogcy51c2VySW5wdXQgPyAocy5hbnN3ZXIgPyBzLmFuc3dlci50cmltKCkgOiAnJykgOiAocy5xdWVzdGlvbiA/IHMucXVlc3Rpb24udHJpbSgpIDogJycpLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcy5hbnN3ZXJUcmVlU3RyaW5nID8gcy5hbnN3ZXJUcmVlU3RyaW5nIDogKHMudXNlcklucHV0ID8gKHMudXNlcklucHV0VmFsdWUgPyBzLnVzZXJJbnB1dFZhbHVlLnRyaW0oKSA6ICcnKSA6IChzLmFuc3dlciA/IHMuYW5zd2VyLnRyaW0oKSA6ICcnKSksXHJcbiAgICAgICAgICAgIHByaWNlOiBzLmFydFJldGFpbFByaWNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBhbnN3ZXJUcmVlU3RyaW5nID0gYW5zd2Vyc0Zyb21TZWxlY3Rpb25cclxuICAgICAgICAuZmlsdGVyKHMgPT4gdGhpcy5faXNBbGxTZWxlY3Rpb25QdWJsaXNoZWQocykgfHwgcy51c2VySW5wdXQpXHJcbiAgICAgICAgLm1hcCgoczogU2VsZWN0aW9uLCBpZHg6IG51bWJlciwgYXJyOiBTZWxlY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcy51c2VySW5wdXQgPyAocy51c2VySW5wdXRWYWx1ZSA/IHMudXNlcklucHV0VmFsdWUudHJpbSgpIDogJycpIDogKHMuYW5zd2VyID8gcy5hbnN3ZXIudHJpbSgpIDogJycpXHJcbiAgICAgICAgfSkuam9pbignIC0gJyk7XHJcbiAgICB9XHJcbiAgICBzZWxlY3Rpb24uYW5zd2VyVHJlZVN0cmluZyA9IGFuc3dlclRyZWVTdHJpbmc7XHJcbiAgICBpZiAoYW5zd2VyVHJlZSkge1xyXG4gICAgICBzZWxlY3Rpb24uYW5zd2VyVHJlZSA9IEpTT04uc3RyaW5naWZ5KGFuc3dlclRyZWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZWN0aW9uLmFuc3dlclRyZWUgPSBKU09OLnN0cmluZ2lmeShbe1xyXG4gICAgICAgIHRpdGxlOiBzZWxlY3Rpb24udXNlcklucHV0ID8gKHNlbGVjdGlvbi5hbnN3ZXIgPyBzZWxlY3Rpb24uYW5zd2VyLnRyaW0oKSA6ICcnKSA6IChzZWxlY3Rpb24ucXVlc3Rpb24gPyBzZWxlY3Rpb24ucXVlc3Rpb24udHJpbSgpIDogJycpLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3Rpb24udXNlcklucHV0ID8gKHNlbGVjdGlvbi51c2VySW5wdXRWYWx1ZSA/IHNlbGVjdGlvbi51c2VySW5wdXRWYWx1ZS50cmltKCkgOiAnJykgOiAoc2VsZWN0aW9uLmFuc3dlciA/IHNlbGVjdGlvbi5hbnN3ZXIudHJpbSgpIDogJycpLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3Rpb24uYXJ0UmV0YWlsUHJpY2VcclxuICAgICAgfV0pO1xyXG4gICAgfVxyXG4gICAgbGV0IHRvdGFsUHJpY2U6IG51bWJlciA9IDA7IC8vIHRlbXAgZml4IHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgIGFuc3dlcnNGcm9tU2VsZWN0aW9uLmZvckVhY2goKHM6IFNlbGVjdGlvbikgPT4ge1xyXG4gICAgICB0b3RhbFByaWNlICs9IHMuYXJ0UmV0YWlsUHJpY2UgPyBzLmFydFJldGFpbFByaWNlIDogMDsgLy8gdGVtcCBmaXggdW50aWwgYmFja2VuZCBpcyByZWFkeVxyXG4gICAgfSk7XHJcbiAgICAoc2VsZWN0aW9uIGFzIGFueSkudG90YWxQcmljZSA9IHRvdGFsUHJpY2U7IC8vIHRlbXAgZml4IHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VsZWN0aW9uUHVibGlzaGVkKHM6IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5RdWVzdGlvbiAmJiAoKChzLm9wdGlvblNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKHMub3B0aW9uU2hvd09uKSkpIHx8XHJcbiAgICAgICAgKHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFuc3dlciAmJiAoKChzLm5vZGVTaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChzLm5vZGVTaG93T24pKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0FsbFNlbGVjdGlvblB1Ymxpc2hlZChzOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAocy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuUXVlc3Rpb24gJiYgKCgocy5vcHRpb25TaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChzLm9wdGlvblNob3dPbikpKSB8fFxyXG4gICAgICAgIChzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5OZXh0T3B0aW9uVmFsdWUgJiYgKCgocy5ub2RlU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwocy5ub2RlU2hvd09uKSkpIHx8XHJcbiAgICAgICAgKHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFuc3dlciAmJiAoKChzLm5vZGVTaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChzLm5vZGVTaG93T24pKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0Fuc3dlclB1Ymxpc2hlZChhOiBBbnN3ZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoaXNOaWxsKGEuaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlKSB8fCAoKGEuaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlICYgdGhpcy5fZ2V0UHVibGljYXRpb25Db2RlKCkpID4gMCkpLyogJiZcclxuICAgICAgICAoXHJcbiAgICAgICAgICAgIChhLnR5cGUgPT09IE5vZGVUeXBlLlF1ZXN0aW9uICYmICgoKGEub3B0aW9uU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwoYS5vcHRpb25TaG93T24pKSkgfHxcclxuICAgICAgICAgICAgKGEudHlwZSA9PT0gTm9kZVR5cGUuQW5zd2VyICYmICgoKGEubm9kZVNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKGEubm9kZVNob3dPbikpKVxyXG4gICAgICAgICkqLztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZWxvYWRDYWNoZWRJbWFnZXMoYW5zd2Vyc09yU2VsZWN0aW9uczogQW5zd2VyW10gfCBTZWxlY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgYW5zd2Vyc09yU2VsZWN0aW9ucy5mb3JFYWNoKChhbnN3ZXJPclNlbGVjdGlvbjogQW5zd2VyIHwgU2VsZWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChhbnN3ZXJPclNlbGVjdGlvbi5ub2RlSWQpIHtcclxuICAgICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMoYW5zd2VyT3JTZWxlY3Rpb24ubm9kZUlkKSkge1xyXG4gICAgICAgICAgYW5zd2VyT3JTZWxlY3Rpb24uaW1hZ2VEYXRhID0gdGhpcy5faW1hZ2VDYWNoZS5nZXQoYW5zd2VyT3JTZWxlY3Rpb24ubm9kZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZFRvQ2FydChnb29kSWQ6IG51bWJlciwgZ29vZFR5cGU6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciwgaW5zdGFuY2VJZDogbnVtYmVyLCBleHRlcm5hbFNvdXJjZTogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBsZXQganNvbjogc3RyaW5nO1xyXG4gICAgY29uc3Qgc3RhdGlzdGljczogQ29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50ID0gbmV3IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCgpO1xyXG4gICAgc3RhdGlzdGljcy51c2VyVHlwZSA9ICdIb21lZGVjb3JhdG9yJztcclxuICAgIHN0YXRpc3RpY3MudHJhbnNhY3Rpb25UeXBlID0gJ1NhbGVzJztcclxuICAgIHN0YXRpc3RpY3MuYWN0aW9uRG9tYWluID0gJ0hvbWVkZWNvcmF0b3InO1xyXG4gICAgc3RhdGlzdGljcy5zZXNzaW9uSWQgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2Vzc2lvbiA/IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZXNzaW9uLnNlc3Npb25JZCA6ICd1bmtub3duJztcclxuICAgIHN0YXRpc3RpY3Mud2ViSG9zdCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgc3RhdGlzdGljcy5idW5kbGVIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgICBqc29uID0gYXdhaXQgdGhpcy5nZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCBleHRlcm5hbFNvdXJjZSwgdHJ1ZSwgaW5zdGFuY2VJZCwgc3RhdGlzdGljcyk7XHJcbiAgICBjb25zdCBmcm96ZW5BcnRpY2xlOiBGcm96ZW5BcnRpY2xlU2ltcGxlIHwgRnJvemVuQXJ0aWNsZSA9IEpTT04ucGFyc2UoanNvbik7XHJcbiAgICB0aGlzLl9nb29nbGVUYWdNYW5hZ2VyLnNlbmRFdmVudChHb29nbGVUYWdNYW5hZ2VyRXZlbnQuQWRkVG9DYXJ0LCB7XHJcbiAgICAgICdhcnRpY2xlTnInOiBmcm96ZW5BcnRpY2xlLmFydGljbGVOcixcclxuICAgICAgJ3Byb2R1Y3QnOiBmcm96ZW5BcnRpY2xlLmFydGljbGVOYW1lLFxyXG4gICAgICAnY29tcG9zaXRpb24nOiBmcm96ZW5BcnRpY2xlIGluc3RhbmNlb2YgRnJvemVuQXJ0aWNsZSA/IGZyb3plbkFydGljbGUuY29tcG9zaXRpb25zIDogZnJvemVuQXJ0aWNsZS5jb25maWd1cmF0aW9uVGV4dFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5BcnRpY2xlQ3JlYXRlZCwganNvbik7XHJcbiAgICByZXR1cm4ganNvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVBbnN3ZXJzUmVjZWl2ZWQoYW5zd2VyczogQW5zd2VyW10pOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZWxvYWRDYWNoZWRJbWFnZXMoYW5zd2Vycyk7XHJcbiAgICB0aGlzLmFuc3dlcnNSZWNlaXZlZC5uZXh0KGFuc3dlcnMpO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlQW5zd2VycyAmJiB0aGlzLmFjdGl2ZUFuc3dlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLl9sb2FkUHJpY2VzT2ZBY3RpdmVBbnN3ZXJzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0aW9uc1RvRGlzcGxheUltYWdlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkgJiYgdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheVtpXTtcclxuICAgICAgICBjb25zdCBsYXN0QW5zd2VyU2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9zZWxlY3Rpb25zLmZpbmQocyA9PiBzLm5vZGVJZCA9PT0gc2VsZWN0aW9uLmxhc3RBbnN3ZXJOb2RlSWQpO1xyXG4gICAgICAgIGlmIChsYXN0QW5zd2VyU2VsZWN0aW9uICYmIChzZWxlY3Rpb24uZ2VuZXJpYyB8fCBzZWxlY3Rpb24uZ3JvdXBlZCkpIHtcclxuICAgICAgICAgIGlmICghbGFzdEFuc3dlclNlbGVjdGlvbi5pbWFnZURhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29ubmVjdG9yLmdldEltYWdlRm9yQW5zd2VyT3JTZWxlY3Rpb24obGFzdEFuc3dlclNlbGVjdGlvbiwgNCwgdHJ1ZSwgZmFsc2UpLnRoZW4oKGltYWdlRGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5faGFuZGxlSW1hZ2VSZWNlaXZlZChsYXN0QW5zd2VyU2VsZWN0aW9uLCBpbWFnZURhdGEpO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5pbWFnZURhdGFMYXN0QW5zd2VyID0gbGFzdEFuc3dlclNlbGVjdGlvbi5pbWFnZURhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmltYWdlRGF0YUxhc3RBbnN3ZXIgPSBsYXN0QW5zd2VyU2VsZWN0aW9uLmltYWdlRGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTZWxlY3Rpb25zTmV4dE9wdGlvblZhbHVlcyhzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBzZWxlY3Rpb25zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgbm92VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgICBmb3IgKGxldCBpID0gbGVuOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHNlbGVjdGlvbnNbaV07XHJcbiAgICAgIGlmIChzZWxlY3Rpb24ubm9kZVR5cGUgPT09IE5vZGVUeXBlLk5leHRPcHRpb25WYWx1ZSkge1xyXG4gICAgICAgIG5vdlRleHQgPSBzZWxlY3Rpb24uYW5zd2VyICsgKG5vdlRleHQgPyBgIC0gJHtub3ZUZXh0fWAgOiAnJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKG5vdlRleHQpIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5hbnN3ZXJUcmVlU3RyaW5nID0gYCR7c2VsZWN0aW9uLmFuc3dlcn0gLSAke25vdlRleHR9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm92VGV4dCA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRQdWJsaWNhdGlvbkNvZGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuZ2V0UHVibGljYXRpb25Db2RlQmFzZWRPbkxvZ2luKCk7XHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIF9vbkRlY29Ob2Rlc1JlY2VpdmVkKGRlY29Ob2RlczogRGVjb05vZGVbXSk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5fZGVjb05vZGVzID0gZGVjb05vZGVzO1xyXG4gIC8vICAgdGhpcy5kZWNvTm9kZXNSZWNlaXZlZC5uZXh0KGRlY29Ob2Rlcyk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwcml2YXRlIF9vblF1ZXN0aW9uUmVjZWl2ZWQocXVlc3Rpb246IFF1ZXN0aW9uKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLl9hY3RpdmVRdWVzdGlvbiA9IHF1ZXN0aW9uO1xyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSW1hZ2VSZWNlaXZlZChhbnN3ZXJPclNlbGVjdGlvbjogQW5zd2VyIHwgU2VsZWN0aW9uLCBpbWFnZURhdGE6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGltYWdlRGF0YU9yVXJsOiBzdHJpbmc7XHJcbiAgICBpZiAoaW1hZ2VEYXRhKSB7XHJcbiAgICAgIGlmIChpbWFnZURhdGEubWF0Y2goL2RhdGE6aW1hZ2UvKSB8fCBpbWFnZURhdGEuc3RhcnRzV2l0aCgnaHR0cCcpIHx8IGltYWdlRGF0YS5zdGFydHNXaXRoKCd3d3cnKSkge1xyXG4gICAgICAgIGltYWdlRGF0YU9yVXJsID0gaW1hZ2VEYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmFzc2V0UGF0aCAmJiAhdGhpcy5hc3NldFBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICAgICAgdGhpcy5hc3NldFBhdGggKz0gJy8nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW1hZ2VEYXRhLnN0YXJ0c1dpdGgoJy8nKSkge1xyXG4gICAgICAgICAgaW1hZ2VEYXRhID0gaW1hZ2VEYXRhLnN1YnN0cigxLCBpbWFnZURhdGEubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW1hZ2VEYXRhT3JVcmwgPSAodGhpcy5hc3NldFBhdGggPyB0aGlzLmFzc2V0UGF0aCA6ICcnKSArIGltYWdlRGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKDxhbnk+YW5zd2VyT3JTZWxlY3Rpb24pLmltYWdlRGF0YSA9IGltYWdlRGF0YU9yVXJsID09PSB1bmRlZmluZWQgPyAnJyA6IGltYWdlRGF0YU9yVXJsO1xyXG4gICAgaWYgKGltYWdlRGF0YU9yVXJsKSB7XHJcbiAgICAgIHRoaXMuX2NhY2hlSW1hZ2UoYW5zd2VyT3JTZWxlY3Rpb24ubm9kZUlkLCBpbWFnZURhdGFPclVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYWNoZUltYWdlKGlkOiBudW1iZXIsIGltYWdlRGF0YU9yVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ltYWdlQ2FjaGUuc2V0KGlkLCBpbWFnZURhdGFPclVybCk7XHJcbiAgfVxyXG5cclxuICAvLyB3aWxsIGJlIHVzZWQvaW1wbGVtZW50ZWQgbGF0ZXIgb24sIG9uIHRoZSBwcm9kdWN0IGRldGFpbCBwYWdlXHJcbiAgLy8gcHJpdmF0ZSBfb25Nb29kSW1hZ2VSZWNlaXZlZChtb29kSW1hZ2VEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMubW9vZEltYWdlc1JlY2VpdmVkLm5leHQobW9vZEltYWdlRGF0YSk7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIF9vbkFuc3dlckluZm9SZWNlaXZlZChkYXRhOiB7IGFuc3dlcjogQW5zd2VyLCBpbmZvOiBBcnRpY2xlVGV4dFtdIH0pOiB2b2lkIHtcclxuICAgIC8vIEB0b2RvIGNoZWNrIHRoaXNcclxuICAgIGlmIChkYXRhICYmIGRhdGEuYW5zd2VyICYmIGRhdGEuaW5mbykge1xyXG4gICAgICBsZXQgaW5mb01lc3NhZ2UgPSAnJztcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbjogbnVtYmVyID0gZGF0YS5pbmZvLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaW5mbzogQXJ0aWNsZVRleHQgPSBkYXRhLmluZm9baV07XHJcbiAgICAgICAgaW5mb01lc3NhZ2UgKz0gaW5mby5kZXNjcmlwdGlvbiArICdcXG5cXG4nICsgaW5mby50ZXh0O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hcnRpY2xlSW5mb1JlY2VpdmVkLm5leHQoaW5mb01lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU2hvd0xvYWRlckNoYW5nZShzaG93TG9hZGVyOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaG91bGRTaG93TG9hZGVyID0gc2hvd0xvYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNvbm5lY3Rpb25SZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29ubmVjdGlvblJlc2V0Lm5leHQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUluc3RhbmNlUmVzcG9uc2UocmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEge1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5pbnN0YW5jZVNldC5uZXh0KHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICAvLyBQT1NUQ09ORElUSU9OOiBjdXJyZW50IGFjdGl2ZUFuc3dlcnMgaGF2ZSBwcmljZSB2YWx1ZXMuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZFByaWNlc09mQWN0aXZlQW5zd2VycygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGFuc3dlclByaWNlczogQW5zd2VyUHJpY2VbXSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRBbnN3ZXJQcmljZXMoKTtcclxuICAgIGlmIChhbnN3ZXJQcmljZXMpIHtcclxuICAgICAgLy8gcGFzdGUgcHJpY2UgZGF0YSBvbnRvIG91ciBjdXJyZW50IGFuc3dlciBvYmplY3RzOyBBbnN3ZXJQcmljZS5zZWxJZCBjb3JyZXNwb25kcyB0byBBbnN3ZXIubm9kZVxyXG4gICAgICBhbnN3ZXJQcmljZXMuZm9yRWFjaChhbnN3ZXJQcmljZSA9PiB7XHJcbiAgICAgICAgY29uc3QgYW5zd2VyTWF0Y2g6IEFuc3dlciA9IHRoaXMuYWN0aXZlQW5zd2Vycy5maW5kKGFucyA9PiBhbnMubm9kZSA9PT0gYW5zd2VyUHJpY2Uuc2VsSWQpO1xyXG4gICAgICAgIGlmIChhbnN3ZXJNYXRjaCkge1xyXG4gICAgICAgICAgKDxhbnk+YW5zd2VyTWF0Y2gpLnByaWNlID0gLy8gdGVtcCBmaXggZm9yIHByaWNlIHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgICAgICAgICAgKDxhbnk+YW5zd2VyTWF0Y2gpLm5vZGVMZXZlbCA9PT0gMCAmJiBhbnN3ZXJQcmljZS5hZGRSZXRhaWxQcmljZSAmJiAoPGFueT5hbnN3ZXJNYXRjaCkuc2VxTyA9PT0gMSA/XHJcbiAgICAgICAgICAgICAgYW5zd2VyUHJpY2UuYWRkUmV0YWlsUHJpY2UgLSB0aGlzLl9hcnRpY2xlUHJpY2UgOlxyXG4gICAgICAgICAgICAgIGFuc3dlclByaWNlLmFkZFJldGFpbFByaWNlO1xyXG4gICAgICAgICAgdGhpcy5leHRyYUFuc3dlckRhdGFMb2FkZWQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jb3B5SW5zdGFuY2UoXHJcbiAgICBvcmlnaW5hbEluc3RhbmNlSWQ6IHN0cmluZyxcclxuICAgIHNob3VsZFNhdmVDdXJyZW50SW5zdGFuY2VJZDogYm9vbGVhbixcclxuICAgIHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdFxyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBjb3B5SW5zdGFuY2VSZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPVxyXG4gICAgICBhd2FpdCB0aGlzLl9jb25uZWN0b3IuY29weUluc3RhbmNlKG9yaWdpbmFsSW5zdGFuY2VJZCwgc2hvdWxkU2F2ZUN1cnJlbnRJbnN0YW5jZUlkKS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgIGlmIChlID09PSAnRUNPTk5BQk9SVEVEJyB8fCBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5UaW1lb3V0O1xyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Vbmtub3duO1xyXG4gICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShjb3B5SW5zdGFuY2VSZXNwb25zZS5yZXN1bHRPYmplY3QuZGF0YSkpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICB9KTtcclxuICAgIGlmICghY29weUluc3RhbmNlUmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIGlmIChjb3B5SW5zdGFuY2VSZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0Lm1lc3NhZ2VzLm1hcCgobTogYW55KSA9PiBtLm1lc3NhZ2VUeXBlID09PSAnRScpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbk5vdEZpeGVkO1xyXG4gICAgICAgIGNvcHlJbnN0YW5jZVJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQubWVzc2FnZXMuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShtLm1lc3NhZ2UpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvblBhcnRpYWxseUZpeGVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdJbnN0YW5jZUlkOiBzdHJpbmcgPSBjb3B5SW5zdGFuY2VSZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB0aGlzLl9oYW5kbGVJbnN0YW5jZVJlc3BvbnNlKGNvcHlJbnN0YW5jZVJlc3BvbnNlKTtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3SW5zdGFuY2VJZCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { Injectable } from '@angular/core';
|
|
11
11
|
import { HomedecoratorSettings } from '../model/homedecorator-settings';
|
|
12
|
-
import { BehaviorSubject } from 'rxjs';
|
|
12
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
13
13
|
import { environment } from '../../../environments/environment';
|
|
14
14
|
import { isEmpty } from '../utils/function/is-empty.function';
|
|
15
15
|
import { HomedecoratorSettingsOptions } from '../model/homedecorator-settings-options';
|
|
@@ -24,6 +24,7 @@ export class HomedecoratorSettingsService {
|
|
|
24
24
|
this._dictionaryService = _dictionaryService;
|
|
25
25
|
this._connectorService = _connectorService;
|
|
26
26
|
this.settingsLoaded = new BehaviorSubject(false);
|
|
27
|
+
this.settingsChanged = new Subject();
|
|
27
28
|
this._settings = new HomedecoratorSettings();
|
|
28
29
|
// this._initializeSettings();
|
|
29
30
|
}
|
|
@@ -143,4 +144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
143
144
|
providedIn: 'root'
|
|
144
145
|
}]
|
|
145
146
|
}], ctorParameters: function () { return [{ type: i1.JsonUtilsService }, { type: i2.HomedecoratorDictionaryService }, { type: i3.HomedecoratorConnectorAdapterService }]; } });
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNyRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0RBQWtELENBQUM7Ozs7O0FBTy9FLE1BQU0sT0FBTyw0QkFBNEI7SUFrQnZDLFlBQ1UsaUJBQW1DLEVBQ25DLGtCQUFrRCxFQUNsRCxpQkFBdUQ7UUFGdkQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWdDO1FBQ2xELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0M7UUFQMUQsbUJBQWMsR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckUsY0FBUyxHQUEwQixJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFPckUsOEJBQThCO0lBQ2hDLENBQUM7SUF0QkQsSUFBVyxRQUFRLENBQUMsS0FBNEI7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBY00sd0JBQXdCLENBQUMsR0FBUTtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztTQUM3QztRQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0Y7UUFDRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQzthQUNoQztZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdkQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO2dCQUNuRixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxHQUFHLENBQUM7YUFDdEM7U0FDRjtRQUNELElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDbEU7UUFDRCxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLDJCQUEyQixDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM1RTthQUFNO1lBQ0wsaUNBQWlDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLEdBQUcsb0JBQW9CLENBQUM7U0FDaEU7SUFDSCxDQUFDO0lBRVksa0JBQWtCOztZQUM3QixJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzNCLHNEQUFzRDtnQkFDdEQsTUFBTSxZQUFZLEdBQVEsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1RyxJQUFJLFlBQVksRUFBRTtvQkFDaEIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNyQzthQUNGO1lBQ0QsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0tBQUE7SUFFWSxVQUFVLENBQUMsUUFBK0I7O1lBQ3JELElBQUksUUFBUSxFQUFFO2dCQUNaLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO2dCQUM1QixJQUFJO29CQUNGLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDNUYsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ3ZCLElBQUksSUFBSSxHQUFHLENBQUM7cUJBQ2I7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUNoQztnQkFBQyxPQUFPLENBQUMsRUFBRTtpQkFDWDthQUNGO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO2dCQUNsQyxJQUFJLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN2QixJQUFJLElBQUksR0FBRyxDQUFDO2lCQUNiO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzthQUN0QztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFO2dCQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3ZHLElBQUksYUFBYSxLQUFLLEdBQUcsRUFBRTtvQkFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7aUJBQy9DO2FBQ0Y7WUFDRCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN0SCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0tBQUE7SUFFYSxtQkFBbUI7O1lBQy9CLE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLFlBQVksR0FDaEIsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLFVBQVUsTUFBTSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0csSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUkscUJBQXFCLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDekUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDRCQUE0QixFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2FBQy9CO1FBQ0gsQ0FBQztLQUFBOzswSEF4SFUsNEJBQTRCOzhIQUE1Qiw0QkFBNEIsY0FGM0IsTUFBTTs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3N9IGZyb20gJy4uL21vZGVsL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3MnO1xyXG5pbXBvcnQge0pzb25VdGlsc1NlcnZpY2V9IGZyb20gJy4vanNvbi11dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2Vudmlyb25tZW50fSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge2lzRW1wdHl9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9uL2lzLWVtcHR5LmZ1bmN0aW9uJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NPcHRpb25zfSBmcm9tICcuLi9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzLW9wdGlvbnMnO1xyXG5pbXBvcnQge0ludGVybmFsUGFyYW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vaW50ZXJuYWwtcGFyYW0uZW51bSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3ItZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2Uge1xyXG5cclxuICBwdWJsaWMgc2V0IHNldHRpbmdzKHZhbHVlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3MpIHtcclxuICAgIHRoaXMuX3NldHRpbmdzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IEhvbWVkZWNvcmF0b3JTZXR0aW5ncyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzUHJpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhaXNFbXB0eSh0aGlzLnNldHRpbmdzLnVzZXJuYW1lKSAmJiAhaXNFbXB0eSh0aGlzLnNldHRpbmdzLnBhc3N3b3JkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXR0aW5nc0xvYWRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgX3NldHRpbmdzOiBIb21lZGVjb3JhdG9yU2V0dGluZ3MgPSBuZXcgSG9tZWRlY29yYXRvclNldHRpbmdzKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfanNvblV0aWxzU2VydmljZTogSnNvblV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpY3Rpb25hcnlTZXJ2aWNlOiBIb21lZGVjb3JhdG9yRGljdGlvbmFyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3JTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2VcclxuICApIHtcclxuICAgIC8vIHRoaXMuX2luaXRpYWxpemVTZXR0aW5ncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVNldHRpbmdzRnJvbU9iamVjdChvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgSG9tZWRlY29yYXRvclNldHRpbmdzKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvd25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zZXR0aW5ncy5vcHRpb25zKTtcclxuICAgIGNvbnN0IG93blJlbmRlclBhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnNldHRpbmdzLnJlbmRlclBhcmFtZXRlcnMpO1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc2V0dGluZ3MsIG9iaik7XHJcbiAgICBpZiAob2JqLnJlbmRlclBhcmFtZXRlcnMpIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5yZW5kZXJQYXJhbWV0ZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3duUmVuZGVyUGFyYW1ldGVycywgb2JqLnJlbmRlclBhcmFtZXRlcnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9iai5vcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3Mub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG93bk9wdGlvbnMsIG9iai5vcHRpb25zKTtcclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ2Fzc2V0UGF0aCcpKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MuYXNzZXRQYXRoID0gb2JqWydhc3NldFBhdGgnXTtcclxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXNzZXRQYXRoW3RoaXMuc2V0dGluZ3MuYXNzZXRQYXRoLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXR0aW5ncy50aHJlZURBc3NldFBhdGggPSB0aGlzLnNldHRpbmdzLmFzc2V0UGF0aDtcclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ3RocmVlREFzc2V0UGF0aCcpKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoID0gb2JqWyd0aHJlZURBc3NldFBhdGgnXTtcclxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoW3RoaXMuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnRocmVlREFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ2JsZW5kZXJSZW5kZXJTZXJ2aWNlJykpIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5ibGVuZGVyUmVuZGVyU2VydmljZSA9IG9ialsnYmxlbmRlclJlbmRlclNlcnZpY2UnXTtcclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ3VzZXIzRE1vZGVsVXBsb2FkRW5hYmxlZCcpKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MudXNlcjNETW9kZWxVcGxvYWRFbmFibGVkID0gb2JqWyd1c2VyM0RNb2RlbFVwbG9hZEVuYWJsZWQnXTtcclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ3Byb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQnKSkge1xyXG4gICAgICB0aGlzLnNldHRpbmdzLnByb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQgPSBvYmpbJ3Byb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQnXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNldCBmYWxsYmFjaywganVzdCB0byBiZSBzdXJlLlxyXG4gICAgICB0aGlzLnNldHRpbmdzLnByb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQgPSAnc2NlbmVfc3R1ZGlvX2VldmVlJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoZW52aXJvbm1lbnQudXNlU2V0dGluZ3MpIHtcclxuICAgICAgLy8gc2VlIGlmIHRoZXJlJ3MgYSBqc29uIGZpbGUgZm9yIGFwcGxpY2F0aW9uIHNldHRpbmdzXHJcbiAgICAgIGNvbnN0IGpzb25TZXR0aW5nczogYW55ID0gYXdhaXQgdGhpcy5fanNvblV0aWxzU2VydmljZS5yZWFkSnNvbkZpbGUoJy4vc2V0dGluZ3MvaW9uZS1jb25uZWN0b3IuanNvbicsIHRydWUpO1xyXG4gICAgICBpZiAoanNvblNldHRpbmdzKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKGpzb25TZXR0aW5ncyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuX2NoZWNrVXJsUGFyYW1ldGVycygpO1xyXG4gICAgdGhpcy5zZXR0aW5nc0xvYWRlZC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoc2V0dGluZ3M6IEhvbWVkZWNvcmF0b3JTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNldHRpbmdzKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2V0dGluZ3NGcm9tT2JqZWN0KHNldHRpbmdzKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zZXR0aW5ncy5hc3NldFBhdGgpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgcGF0aCA9IGF3YWl0IHRoaXMuX2Nvbm5lY3RvclNlcnZpY2UuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5HZW5lcmFsQXNzZXRVcmwpO1xyXG4gICAgICAgIGlmICghcGF0aC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgICAgICBwYXRoICs9ICcvJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5hc3NldFBhdGggPSBwYXRoO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zZXR0aW5ncy50aHJlZURBc3NldFBhdGgpIHtcclxuICAgICAgbGV0IHBhdGggPSBhd2FpdCB0aGlzLl9jb25uZWN0b3JTZXJ2aWNlLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uQXNzZXRVcmwpO1xyXG4gICAgICBpZiAoIXBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICAgIHBhdGggKz0gJy8nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoID0gcGF0aDtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zZXR0aW5ncy51c2VyM0RNb2RlbFVwbG9hZEVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgdXBsb2FkU2V0dGluZyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3RvclNlcnZpY2UuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5VUExPQURfM0RfTU9ERUwpO1xyXG4gICAgICBpZiAodXBsb2FkU2V0dGluZyA9PT0gJ0onKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy51c2VyM0RNb2RlbFVwbG9hZEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLl9kaWN0aW9uYXJ5U2VydmljZS5zZXREaWN0aW9uYXJ5KFxyXG4gICAgICB0aGlzLnNldHRpbmdzLmFzc2V0UGF0aCwgdGhpcy5zZXR0aW5ncy5jbGllbnQsIHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VDb2RlLCB0aGlzLnNldHRpbmdzLmFkZGl0aW9uYWxUcmFuc2xhdGlvbkZpbGUpO1xyXG4gICAgdGhpcy5zZXR0aW5nc0xvYWRlZC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2hlY2tVcmxQYXJhbWV0ZXJzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgIGNvbnN0IGNsaWVudCA9IHVybFBhcmFtcy5nZXQoJ2NsaWVudCcpO1xyXG4gICAgaWYgKGNsaWVudCkge1xyXG4gICAgICBjb25zdCBqc29uU2V0dGluZ3M6IGFueSA9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fanNvblV0aWxzU2VydmljZS5yZWFkSnNvbkZpbGUodGhpcy5zZXR0aW5ncy5hc3NldFBhdGggKyBgYXNzZXRzLyR7Y2xpZW50fS1zZXR0aW5ncy5qc29uYCwgZmFsc2UpO1xyXG4gICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihuZXcgSG9tZWRlY29yYXRvclNldHRpbmdzKCksIGpzb25TZXR0aW5ncyk7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3Mub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24obmV3IEhvbWVkZWNvcmF0b3JTZXR0aW5nc09wdGlvbnMoKSwgdGhpcy5zZXR0aW5ncy5vcHRpb25zKTtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5jbGllbnQgPSBjbGllbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDNUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDckYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtEQUFrRCxDQUFDOzs7OztBQU8vRSxNQUFNLE9BQU8sNEJBQTRCO0lBbUJ2QyxZQUNVLGlCQUFtQyxFQUNuQyxrQkFBa0QsRUFDbEQsaUJBQXVEO1FBRnZELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFnQztRQUNsRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNDO1FBUjFELG1CQUFjLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLG9CQUFlLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFcEQsY0FBUyxHQUEwQixJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFPckUsOEJBQThCO0lBQ2hDLENBQUM7SUF2QkQsSUFBVyxRQUFRLENBQUMsS0FBNEI7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJ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QUFRLENBQUMsU0FBUyxHQUFHLFVBQVUsTUFBTSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0csSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUkscUJBQXFCLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDekUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDRCQUE0QixFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2FBQy9CO1FBQ0gsQ0FBQztLQUFBOzswSEF6SFUsNEJBQTRCOzhIQUE1Qiw0QkFBNEIsY0FGM0IsTUFBTTs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3N9IGZyb20gJy4uL21vZGVsL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3MnO1xyXG5pbXBvcnQge0pzb25VdGlsc1NlcnZpY2V9IGZyb20gJy4vanNvbi11dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2Vudmlyb25tZW50fSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge2lzRW1wdHl9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9uL2lzLWVtcHR5LmZ1bmN0aW9uJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NPcHRpb25zfSBmcm9tICcuLi9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzLW9wdGlvbnMnO1xyXG5pbXBvcnQge0ludGVybmFsUGFyYW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vaW50ZXJuYWwtcGFyYW0uZW51bSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3ItZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2Uge1xyXG5cclxuICBwdWJsaWMgc2V0IHNldHRpbmdzKHZhbHVlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3MpIHtcclxuICAgIHRoaXMuX3NldHRpbmdzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IEhvbWVkZWNvcmF0b3JTZXR0aW5ncyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzUHJpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhaXNFbXB0eSh0aGlzLnNldHRpbmdzLnVzZXJuYW1lKSAmJiAhaXNFbXB0eSh0aGlzLnNldHRpbmdzLnBhc3N3b3JkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXR0aW5nc0xvYWRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHVibGljIHNldHRpbmdzQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgX3NldHRpbmdzOiBIb21lZGVjb3JhdG9yU2V0dGluZ3MgPSBuZXcgSG9tZWRlY29yYXRvclNldHRpbmdzKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfanNvblV0aWxzU2VydmljZTogSnNvblV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpY3Rpb25hcnlTZXJ2aWNlOiBIb21lZGVjb3JhdG9yRGljdGlvbmFyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3JTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2VcclxuICApIHtcclxuICAgIC8vIHRoaXMuX2luaXRpYWxpemVTZXR0aW5ncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVNldHRpbmdzRnJvbU9iamVjdChvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgSG9tZWRlY29yYXRvclNldHRpbmdzKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvd25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zZXR0aW5ncy5vcHRpb25zKTtcclxuICAgIGNvbnN0IG93blJlbmRlclBhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnNldHRpbmdzLnJlbmRlclBhcmFtZXRlcnMpO1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc2V0dGluZ3MsIG9iaik7XHJcbiAgICBpZiAob2JqLnJlbmRlclBhcmFtZXRlcnMpIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5yZW5kZXJQYXJhbWV0ZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3duUmVuZGVyUGFyYW1ldGVycywgb2JqLnJlbmRlclBhcmFtZXRlcnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9iai5vcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3Mub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG93bk9wdGlvbnMsIG9iai5vcHRpb25zKTtcclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ2Fzc2V0UGF0aCcpKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MuYXNzZXRQYXRoID0gb2JqWydhc3NldFBhdGgnXTtcclxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXNzZXRQYXRoW3RoaXMuc2V0dGluZ3MuYXNzZXRQYXRoLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXR0aW5ncy50aHJlZURBc3NldFBhdGggPSB0aGlzLnNldHRpbmdzLmFzc2V0UGF0aDtcclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ3RocmVlREFzc2V0UGF0aCcpKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoID0gb2JqWyd0aHJlZURBc3NldFBhdGgnXTtcclxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoW3RoaXMuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnRocmVlREFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ2JsZW5kZXJSZW5kZXJTZXJ2aWNlJykpIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5ibGVuZGVyUmVuZGVyU2VydmljZSA9IG9ialsnYmxlbmRlclJlbmRlclNlcnZpY2UnXTtcclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ3VzZXIzRE1vZGVsVXBsb2FkRW5hYmxlZCcpKSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MudXNlcjNETW9kZWxVcGxvYWRFbmFibGVkID0gb2JqWyd1c2VyM0RNb2RlbFVwbG9hZEVuYWJsZWQnXTtcclxuICAgIH1cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoJ3Byb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQnKSkge1xyXG4gICAgICB0aGlzLnNldHRpbmdzLnByb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQgPSBvYmpbJ3Byb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQnXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNldCBmYWxsYmFjaywganVzdCB0byBiZSBzdXJlLlxyXG4gICAgICB0aGlzLnNldHRpbmdzLnByb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQgPSAnc2NlbmVfc3R1ZGlvX2VldmVlJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoZW52aXJvbm1lbnQudXNlU2V0dGluZ3MpIHtcclxuICAgICAgLy8gc2VlIGlmIHRoZXJlJ3MgYSBqc29uIGZpbGUgZm9yIGFwcGxpY2F0aW9uIHNldHRpbmdzXHJcbiAgICAgIGNvbnN0IGpzb25TZXR0aW5nczogYW55ID0gYXdhaXQgdGhpcy5fanNvblV0aWxzU2VydmljZS5yZWFkSnNvbkZpbGUoJy4vc2V0dGluZ3MvaW9uZS1jb25uZWN0b3IuanNvbicsIHRydWUpO1xyXG4gICAgICBpZiAoanNvblNldHRpbmdzKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKGpzb25TZXR0aW5ncyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuX2NoZWNrVXJsUGFyYW1ldGVycygpO1xyXG4gICAgdGhpcy5zZXR0aW5nc0xvYWRlZC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoc2V0dGluZ3M6IEhvbWVkZWNvcmF0b3JTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNldHRpbmdzKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2V0dGluZ3NGcm9tT2JqZWN0KHNldHRpbmdzKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zZXR0aW5ncy5hc3NldFBhdGgpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgcGF0aCA9IGF3YWl0IHRoaXMuX2Nvbm5lY3RvclNlcnZpY2UuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5HZW5lcmFsQXNzZXRVcmwpO1xyXG4gICAgICAgIGlmICghcGF0aC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgICAgICBwYXRoICs9ICcvJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5hc3NldFBhdGggPSBwYXRoO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zZXR0aW5ncy50aHJlZURBc3NldFBhdGgpIHtcclxuICAgICAgbGV0IHBhdGggPSBhd2FpdCB0aGlzLl9jb25uZWN0b3JTZXJ2aWNlLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uQXNzZXRVcmwpO1xyXG4gICAgICBpZiAoIXBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICAgIHBhdGggKz0gJy8nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoID0gcGF0aDtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zZXR0aW5ncy51c2VyM0RNb2RlbFVwbG9hZEVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgdXBsb2FkU2V0dGluZyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3RvclNlcnZpY2UuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5VUExPQURfM0RfTU9ERUwpO1xyXG4gICAgICBpZiAodXBsb2FkU2V0dGluZyA9PT0gJ0onKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy51c2VyM0RNb2RlbFVwbG9hZEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLl9kaWN0aW9uYXJ5U2VydmljZS5zZXREaWN0aW9uYXJ5KFxyXG4gICAgICB0aGlzLnNldHRpbmdzLmFzc2V0UGF0aCwgdGhpcy5zZXR0aW5ncy5jbGllbnQsIHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VDb2RlLCB0aGlzLnNldHRpbmdzLmFkZGl0aW9uYWxUcmFuc2xhdGlvbkZpbGUpO1xyXG4gICAgdGhpcy5zZXR0aW5nc0xvYWRlZC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2hlY2tVcmxQYXJhbWV0ZXJzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgIGNvbnN0IGNsaWVudCA9IHVybFBhcmFtcy5nZXQoJ2NsaWVudCcpO1xyXG4gICAgaWYgKGNsaWVudCkge1xyXG4gICAgICBjb25zdCBqc29uU2V0dGluZ3M6IGFueSA9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fanNvblV0aWxzU2VydmljZS5yZWFkSnNvbkZpbGUodGhpcy5zZXR0aW5ncy5hc3NldFBhdGggKyBgYXNzZXRzLyR7Y2xpZW50fS1zZXR0aW5ncy5qc29uYCwgZmFsc2UpO1xyXG4gICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihuZXcgSG9tZWRlY29yYXRvclNldHRpbmdzKCksIGpzb25TZXR0aW5ncyk7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3Mub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24obmV3IEhvbWVkZWNvcmF0b3JTZXR0aW5nc09wdGlvbnMoKSwgdGhpcy5zZXR0aW5ncy5vcHRpb25zKTtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5jbGllbnQgPSBjbGllbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|