@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
|
@@ -21,6 +21,7 @@ import * as i6 from "./configuration.service";
|
|
|
21
21
|
import * as i7 from "../../service/local-storage.service";
|
|
22
22
|
import * as i8 from "./progress.service";
|
|
23
23
|
import * as i9 from "../../plugins/core3d/service/scene.service";
|
|
24
|
+
import * as i10 from "./homedecorator-app-event.service";
|
|
24
25
|
const presetEmpty = {
|
|
25
26
|
floorplan: {
|
|
26
27
|
corners: {},
|
|
@@ -38,7 +39,7 @@ const modelEmpty = JSON.stringify(presetEmpty);
|
|
|
38
39
|
// }
|
|
39
40
|
//
|
|
40
41
|
export class PresetsService {
|
|
41
|
-
constructor(_appStateService, _permanentStoreService, _jsonUtils, _messageService, _settingsService, _configurationService, _storageService, _progressService, _sceneService) {
|
|
42
|
+
constructor(_appStateService, _permanentStoreService, _jsonUtils, _messageService, _settingsService, _configurationService, _storageService, _progressService, _sceneService, _eventService) {
|
|
42
43
|
this._appStateService = _appStateService;
|
|
43
44
|
this._permanentStoreService = _permanentStoreService;
|
|
44
45
|
this._jsonUtils = _jsonUtils;
|
|
@@ -48,6 +49,7 @@ export class PresetsService {
|
|
|
48
49
|
this._storageService = _storageService;
|
|
49
50
|
this._progressService = _progressService;
|
|
50
51
|
this._sceneService = _sceneService;
|
|
52
|
+
this._eventService = _eventService;
|
|
51
53
|
// public static presetsPath = '/assets/presets';
|
|
52
54
|
this.isLoading = false;
|
|
53
55
|
this.beforeLoad = new Subject();
|
|
@@ -104,11 +106,17 @@ export class PresetsService {
|
|
|
104
106
|
preset.model = JSON.stringify(json);
|
|
105
107
|
}
|
|
106
108
|
const modelObj = JSON.parse(preset.model);
|
|
109
|
+
if (modelObj.floorplan && modelObj.floorplan.corners && Object.keys(modelObj.floorplan.corners).length > 0) {
|
|
110
|
+
this._eventService.dirty.next(true);
|
|
111
|
+
}
|
|
107
112
|
return JSON.stringify(!modelObj.hasOwnProperty('needRescale') ? this._reScaleModel(modelObj) : modelObj);
|
|
108
113
|
}));
|
|
109
114
|
}
|
|
110
115
|
_loadSavedRoomFromCloud(code) {
|
|
111
|
-
this._loadRoomPlan(() => new Promise(resolve =>
|
|
116
|
+
this._loadRoomPlan(() => new Promise(resolve => {
|
|
117
|
+
this._eventService.dirty.next(true);
|
|
118
|
+
this._permanentStoreService.load(code).subscribe((json) => resolve(JSON.stringify(json)));
|
|
119
|
+
}));
|
|
112
120
|
}
|
|
113
121
|
_clear() {
|
|
114
122
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -286,12 +294,12 @@ export class PresetsService {
|
|
|
286
294
|
}
|
|
287
295
|
}
|
|
288
296
|
}
|
|
289
|
-
PresetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PresetsService, deps: [{ token: i1.AppStateService }, { token: i2.PermanentStoreService }, { token: i3.JsonUtilsService }, { token: i4.MessageBusService }, { token: i5.HomedecoratorSettingsService }, { token: i6.ConfigurationService }, { token: i7.LocalStorageService }, { token: i8.ProgressService }, { token: i9.SceneService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
297
|
+
PresetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PresetsService, deps: [{ token: i1.AppStateService }, { token: i2.PermanentStoreService }, { token: i3.JsonUtilsService }, { token: i4.MessageBusService }, { token: i5.HomedecoratorSettingsService }, { token: i6.ConfigurationService }, { token: i7.LocalStorageService }, { token: i8.ProgressService }, { token: i9.SceneService }, { token: i10.HomedecoratorAppEventService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
290
298
|
PresetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PresetsService, providedIn: 'root' });
|
|
291
299
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PresetsService, decorators: [{
|
|
292
300
|
type: Injectable,
|
|
293
301
|
args: [{
|
|
294
302
|
providedIn: 'root'
|
|
295
303
|
}]
|
|
296
|
-
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.PermanentStoreService }, { type: i3.JsonUtilsService }, { type: i4.MessageBusService }, { type: i5.HomedecoratorSettingsService }, { type: i6.ConfigurationService }, { type: i7.LocalStorageService }, { type: i8.ProgressService }, { type: i9.SceneService }]; } });
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFVdkMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7OztBQUl0RCxNQUFNLFdBQVcsR0FBRztJQUNsQixTQUFTLEVBQUU7UUFDVCxPQUFPLEVBQUUsRUFBRTtRQUNYLEtBQUssRUFBRSxFQUFFO1FBQ1QsWUFBWSxFQUFFLEVBQUU7UUFDaEIsYUFBYSxFQUFFLEVBQUU7UUFDakIsZ0JBQWdCLEVBQUUsRUFBRTtLQUNyQjtJQUNELEtBQUssRUFBRSxFQUFFO0NBQ1YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFL0MsNEJBQTRCO0FBQzVCLHNCQUFzQjtBQUN0QixvQkFBb0I7QUFDcEIsSUFBSTtBQUNKLEVBQUU7QUFJRixNQUFNLE9BQU8sY0FBYztJQWF6QixZQUNVLGdCQUFpQyxFQUNqQyxzQkFBNkMsRUFDN0MsVUFBNEIsRUFDNUIsZUFBa0MsRUFDbEMsZ0JBQThDLEVBQzlDLHFCQUEyQyxFQUMzQyxlQUFvQyxFQUNwQyxnQkFBaUMsRUFDakMsYUFBMkI7UUFSM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFt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SUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDekM7U0FDRjtJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsT0FBWTtRQUM5QixJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDdEMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BGO1lBQ0QsdUNBQXVDO1lBQ3ZDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDMUMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztTQUNyQztJQUNILENBQUM7OzRHQWpSVSxjQUFjO2dIQUFkLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7VmVjdG9yMiwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1BsdWdpbkludGVyZmFjZX0gZnJvbSAnLi4vLi4vcGx1Z2lucy9wbHVnaW4taW50ZXJmYWNlJztcclxuaW1wb3J0IHtBcHBTdGF0ZVNlcnZpY2UsIFN0YXRlVmFsdWV9IGZyb20gJy4vYXBwLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Blcm1hbmVudFN0b3JlU2VydmljZX0gZnJvbSAnLi9wZXJtYW5lbnQtc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7SnNvblV0aWxzU2VydmljZX0gZnJvbSAnLi9qc29uLXV0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gJy4vcHJvZ3Jlc3Muc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1ByZXNldH0gZnJvbSAnLi4vbW9kZWwvcHJlc2V0JztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uL3BsdWdpbnMvY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcblxyXG5jb25zdCBwcmVzZXRFbXB0eSA9IHtcclxuICBmbG9vcnBsYW46IHtcclxuICAgIGNvcm5lcnM6IHt9LFxyXG4gICAgd2FsbHM6IFtdLFxyXG4gICAgd2FsbFRleHR1cmVzOiBbXSxcclxuICAgIGZsb29yVGV4dHVyZXM6IHt9LFxyXG4gICAgbmV3Rmxvb3JUZXh0dXJlczoge31cclxuICB9LFxyXG4gIGl0ZW1zOiBbXVxyXG59O1xyXG5cclxuY29uc3QgbW9kZWxFbXB0eSA9IEpTT04uc3RyaW5naWZ5KHByZXNldEVtcHR5KTtcclxuXHJcbi8vIGV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0IHtcclxuLy8gICBmaWxlbmFtZTogc3RyaW5nO1xyXG4vLyAgIG1vZGVsPzogc3RyaW5nO1xyXG4vLyB9XHJcbi8vXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFByZXNldHNTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgLy8gcHVibGljIHN0YXRpYyBwcmVzZXRzUGF0aCA9ICcvYXNzZXRzL3ByZXNldHMnO1xyXG5cclxuICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHVibGljIGJlZm9yZUxvYWQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHVibGljIGFmdGVyTG9hZCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwdWJsaWMgcGx1Z2luczogQXJyYXk8UGx1Z2luSW50ZXJmYWNlPiA9IFtdO1xyXG4gIHB1YmxpYyBhc3NldFBhdGg6IHN0cmluZztcclxuICBwdWJsaWMgc3RhdGVDcmVhdGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9hcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Blcm1hbmVudFN0b3JlU2VydmljZTogUGVybWFuZW50U3RvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfanNvblV0aWxzOiBKc29uVXRpbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5nc0xvYWRlZC5zdWJzY3JpYmUoKGluaXRpYWxpemVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICB0aGlzLmFzc2V0UGF0aCA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbVByZXNldCwgKHByZXNldDogUHJlc2V0KSA9PiB0aGlzLl9sb2FkU2F2ZWRSb29tRnJvbVByZXNldChwcmVzZXQpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbUNsb3VkLCAoY29kZTogc3RyaW5nKSA9PiB0aGlzLl9sb2FkU2F2ZWRSb29tRnJvbUNsb3VkKGNvZGUpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuX2FwcFN0YXRlU2VydmljZS5pbml0KHtcclxuICAgICAgY3JlYXRlU3RhdGU6ICgpID0+IHRoaXMuY3JlYXRlU3RhdGUoKSxcclxuICAgICAgYXBwbHlTdGF0ZTogKG1vZGVsOiBhbnkpID0+IHRoaXMuX2FwcGx5U3RhdGVBbmRLZWVwQ2FtZXJhUG9zaXRpb24obW9kZWwpLFxyXG4gICAgfSwgbW9kZWxFbXB0eSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXIocGx1Z2luOiBQbHVnaW5JbnRlcmZhY2UpIHtcclxuICAgIHRoaXMucGx1Z2lucy5wdXNoKHBsdWdpbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVvcGVuU3RhdGUobW9kZWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fYXBwbHlTdGF0ZUFuZEtlZXBDYW1lcmFQb3NpdGlvbihtb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlU3RhdGUoKTogU3RhdGVWYWx1ZSB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHtjb25maWc6IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldCgpLCBuZWVkUmVzY2FsZTogZmFsc2V9O1xyXG4gICAgdGhpcy5wbHVnaW5zLmZvckVhY2goaGFuZGxlciA9PiBPYmplY3QuYXNzaWduKHN0YXRlLCBoYW5kbGVyLmdldE9iamVjdHMoKSkpO1xyXG4gICAgY29uc3Qgc3RhdGVKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSk7XHJcbiAgICBjb25zdCBqc29uUGFyc2VkID0gSlNPTi5wYXJzZShzdGF0ZUpzb24pO1xyXG4gICAgaWYgKGpzb25QYXJzZWQgJiYganNvblBhcnNlZC5mdXJuaXR1cmUpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqc29uUGFyc2VkLmZ1cm5pdHVyZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChqc29uUGFyc2VkLmZ1cm5pdHVyZVtpXSAmJiBqc29uUGFyc2VkLmZ1cm5pdHVyZVtpXS5lbGV2YXRpb25GaXhlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmVsZXZhdGlvbkZpeGVkID0gdHJ1ZTtcclxuICAgICAgICAgIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmZpeGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGpzb25QYXJzZWQuZnVybml0dXJlW2ldICYmIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3MgJiYganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncykge1xyXG4gICAgICAgICAganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy5wYXNzd29yZCA9ICcnO1xyXG4gICAgICAgICAganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy51c2VybmFtZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgb3V0cHV0OiBzdHJpbmcgPSBqc29uUGFyc2VkID8gSlNPTi5zdHJpbmdpZnkoanNvblBhcnNlZCkgOiAnJztcclxuICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNhdmVDdXJyZW50U3RhdGUob3V0cHV0KTtcclxuICAgIHRoaXMuc3RhdGVDcmVhdGVkLm5leHQoKTtcclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkU2F2ZWRSb29tRnJvbVByZXNldChwcmVzZXQ6IFByZXNldCkge1xyXG4gICAgdGhpcy5fbG9hZFJvb21QbGFuKFxyXG4gICAgICBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcclxuICAgICAgICBpZiAoIXByZXNldC5tb2RlbCkge1xyXG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYXNzZXRQYXRoICsgcHJlc2V0LmZpbGVuYW1lO1xyXG4gICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuX2pzb25VdGlscy5yZWFkSnNvbkZpbGUocGF0aCwgZmFsc2UpO1xyXG4gICAgICAgICAgcHJlc2V0Lm1vZGVsID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZGVsT2JqOiBhbnkgPSBKU09OLnBhcnNlKHByZXNldC5tb2RlbCk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCFtb2RlbE9iai5oYXNPd25Qcm9wZXJ0eSgnbmVlZFJlc2NhbGUnKSA/IHRoaXMuX3JlU2NhbGVNb2RlbChtb2RlbE9iaikgOiBtb2RlbE9iaik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkU2F2ZWRSb29tRnJvbUNsb3VkKGNvZGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbG9hZFJvb21QbGFuKFxyXG4gICAgICAoKTogUHJvbWlzZTxzdHJpbmc+ID0+IG5ldyBQcm9taXNlPHN0cmluZz4oXHJcbiAgICAgICAgcmVzb2x2ZSA9PlxyXG4gICAgICAgICAgdGhpcy5fcGVybWFuZW50U3RvcmVTZXJ2aWNlLmxvYWQoY29kZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAoanNvbjogc3RyaW5nKSA9PiByZXNvbHZlKEpTT04uc3RyaW5naWZ5KGpzb24pKVxyXG4gICAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNob3dMb2FkaW5nSW5kaWNhdG9yLCB7fSk7XHJcbiAgICBhd2FpdCB0aGlzLl9hcHBseVN0YXRlKG1vZGVsRW1wdHkpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZFJvb21QbGFuKGxvYWRNb2RlbDogRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2hvd0xvYWRpbmdJbmRpY2F0b3IsIHt9KTtcclxuICAgIGF3YWl0IHRoaXMuX2NsZWFyKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IGxvYWRNb2RlbCgpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9hcHBseVN0YXRlKG1vZGVsKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5DbGVhclN0YXRlLCBtb2RlbCk7XHJcbiAgICAgIGNvbnN0IHBhcnNlZE1vZGVsOiB7fSA9IEpTT04ucGFyc2UobW9kZWwpO1xyXG4gICAgICBpZiAocGFyc2VkTW9kZWwuaGFzT3duUHJvcGVydHkoJ2NvbmZpZycpKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2Uuc2V0KHBhcnNlZE1vZGVsWydjb25maWcnXSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMb2FkaW5nSW5kaWNhdG9yKTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2FwcGx5U3RhdGUobW9kZWw6IFN0YXRlVmFsdWUpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5fcGFyc2VNb2RlbChtb2RlbCk7XHJcbiAgICBpZiAoZGF0YVsnY29uZmlnJ10/LklzTGltaXRlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICBkYXRhWyd2aWV3J10udGFyZ2V0LnkgPSAwO1xyXG4gICAgfVxyXG4gICAgZGF0YSA9IHsuLi5kYXRhLCBrZWVwQ2FtZXJhUG9zaXRpb246IGZhbHNlfTtcclxuICAgIGF3YWl0IHRoaXMuX2FwcGx5KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYXBwbHlTdGF0ZUFuZEtlZXBDYW1lcmFQb3NpdGlvbihtb2RlbDogU3RhdGVWYWx1ZSkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLl9wYXJzZU1vZGVsKG1vZGVsKTtcclxuICAgIGRhdGEgPSB7Li4uZGF0YSwga2VlcENhbWVyYVBvc2l0aW9uOiB0cnVlfTtcclxuICAgIGF3YWl0IHRoaXMuX2FwcGx5KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcGFyc2VNb2RlbChtb2RlbDogU3RhdGVWYWx1ZSkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UobW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYXBwbHkoZGF0YSkge1xyXG4gICAgdGhpcy5iZWZvcmVMb2FkLm5leHQoZGF0YSk7XHJcbiAgICBjb25zdCBpdGVtc0Rvd25sb2FkOiBhbnlbXSA9IGRhdGEuaXRlbXMgJiYgZGF0YS5pdGVtcy5sZW5ndGggPiAwID8gZGF0YS5pdGVtcy5jb25jYXQoZGF0YS5mdXJuaXR1cmUpIDogZGF0YS5mdXJuaXR1cmU7XHJcbiAgICBhd2FpdCB0aGlzLl9wcm9ncmVzc1NlcnZpY2UucHJlcGFyZURvd25sb2FkcyhpdGVtc0Rvd25sb2FkKTtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucGx1Z2lucy5tYXAoXHJcbiAgICAgIGFzeW5jIChwbHVnaW46IFBsdWdpbkludGVyZmFjZSkgPT4gYXdhaXQgcGx1Z2luLmxvYWRPYmplY3RzKGRhdGEpXHJcbiAgICApKTtcclxuICAgIHRoaXMuX3Byb2dyZXNzU2VydmljZS5maW5pc2hEb3dubG9hZHMoKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgICB0aGlzLmFmdGVyTG9hZC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVTY2FsZU1vZGVsKG1vZGVsT2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKG1vZGVsT2JqLnZpZXcpIHtcclxuICAgICAgbW9kZWxPYmoudmlldy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKG1vZGVsT2JqLnZpZXcucG9zaXRpb24ueCwgbW9kZWxPYmoudmlldy5wb3NpdGlvbi55LCBtb2RlbE9iai52aWV3LnBvc2l0aW9uLnopLmRpdmlkZVNjYWxhcigxMDApO1xyXG4gICAgICBtb2RlbE9iai52aWV3LnBhbiA9IG5ldyBWZWN0b3IzKG1vZGVsT2JqLnZpZXcucGFuLngsIG1vZGVsT2JqLnZpZXcucGFuLnksIG1vZGVsT2JqLnZpZXcucGFuLnopLmRpdmlkZVNjYWxhcigxMDApO1xyXG4gICAgICBtb2RlbE9iai52aWV3LnRhcmdldCA9IG5ldyBWZWN0b3IzKG1vZGVsT2JqLnZpZXcudGFyZ2V0LngsIG1vZGVsT2JqLnZpZXcudGFyZ2V0LnksIG1vZGVsT2JqLnZpZXcudGFyZ2V0LnopLmRpdmlkZVNjYWxhcigxMDApO1xyXG4gICAgfVxyXG4gICAgaWYgKG1vZGVsT2JqLmZsb29ycGxhbikge1xyXG4gICAgICBpZiAobW9kZWxPYmouZmxvb3JwbGFuLmNvcm5lcnMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtb2RlbE9iai5mbG9vcnBsYW4uY29ybmVycykge1xyXG4gICAgICAgICAgaWYgKG1vZGVsT2JqLmZsb29ycGxhbi5jb3JuZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgbW9kZWxPYmouZmxvb3JwbGFuLmNvcm5lcnNba2V5XSA9XHJcbiAgICAgICAgICAgICAgbmV3IFZlY3RvcjIobW9kZWxPYmouZmxvb3JwbGFuLmNvcm5lcnNba2V5XS54LCBtb2RlbE9iai5mbG9vcnBsYW4uY29ybmVyc1trZXldLnkpLmRpdmlkZVNjYWxhcigxMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobW9kZWxPYmouZmxvb3JwbGFuLndhbGxzKSB7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgbW9kZWxPYmouZmxvb3JwbGFuLndhbGxzW2ldLmhlaWdodCA9IG1vZGVsT2JqLmZsb29ycGxhbi53YWxsc1tpXS5oZWlnaHQgLyAxMDA7XHJcbiAgICAgICAgICBtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHNbaV0udGhpY2tuZXNzID0gbW9kZWxPYmouZmxvb3JwbGFuLndhbGxzW2ldLnRoaWNrbmVzcyAvIDEwMDtcclxuICAgICAgICAgIGlmIChtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHNbaV0uaGFzT3duUHJvcGVydHkoJ2Zyb250VGV4dHVyZScpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpeFRleHR1cmUobW9kZWxPYmouZmxvb3JwbGFuLndhbGxzW2ldLmZyb250VGV4dHVyZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAobW9kZWxPYmouZmxvb3JwbGFuLndhbGxzW2ldLmhhc093blByb3BlcnR5KCdiYWNrVGV4dHVyZScpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpeFRleHR1cmUobW9kZWxPYmouZmxvb3JwbGFuLndhbGxzW2ldLmJhY2tUZXh0dXJlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZGVsT2JqLmZsb29ycGxhbi5uZXdGbG9vclRleHR1cmVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbW9kZWxPYmouZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXMpIHtcclxuICAgICAgICAgIGlmIChtb2RlbE9iai5mbG9vcnBsYW4ubmV3Rmxvb3JUZXh0dXJlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIG1vZGVsT2JqLmZsb29ycGxhbi5uZXdGbG9vclRleHR1cmVzW2tleV0udGlsZVNpemUgPSBtb2RlbE9iai5mbG9vcnBsYW4ubmV3Rmxvb3JUZXh0dXJlc1trZXldLnRpbGVTaXplIC8gMTAwO1xyXG4gICAgICAgICAgICBpZiAobW9kZWxPYmouZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXNba2V5XS5oYXNPd25Qcm9wZXJ0eSgnb2Zmc2V0JykpIHtcclxuICAgICAgICAgICAgICBtb2RlbE9iai5mbG9vcnBsYW4ubmV3Rmxvb3JUZXh0dXJlc1trZXldLm9mZnNldCA9XHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMihcclxuICAgICAgICAgICAgICAgICAgbW9kZWxPYmouZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXNba2V5XS5vZmZzZXQueCxcclxuICAgICAgICAgICAgICAgICAgbW9kZWxPYmouZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXNba2V5XS5vZmZzZXQueSkuZGl2aWRlU2NhbGFyKDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChtb2RlbE9iai5pdGVtcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVsT2JqLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG1vZGVsT2JqLml0ZW1zW2ldO1xyXG4gICAgICAgIHRoaXMuX3NjYWxlRGltZW5zaW9uc0FuZFBvc2l0aW9ucyhpdGVtKTtcclxuICAgICAgICB0aGlzLl9zY2FsZVRleHR1cmVzKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobW9kZWxPYmouZnVybml0dXJlKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kZWxPYmouZnVybml0dXJlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG1vZGVsT2JqLmZ1cm5pdHVyZVtpXTtcclxuICAgICAgICB0aGlzLl9zY2FsZURpbWVuc2lvbnNBbmRQb3NpdGlvbnMoaXRlbSk7XHJcbiAgICAgICAgdGhpcy5fc2NhbGVUZXh0dXJlcyhpdGVtKTtcclxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXRlbS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FsZURpbWVuc2lvbnNBbmRQb3NpdGlvbnMoaXRlbS5jaGlsZHJlbltqXSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYWxlVGV4dHVyZXMoaXRlbS5jaGlsZHJlbltqXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kZWxPYmo7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zY2FsZURpbWVuc2lvbnNBbmRQb3NpdGlvbnMoaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICBpdGVtLndpZHRoID0gaXRlbS53aWR0aCAvIDEwMDtcclxuICAgIGl0ZW0uaGVpZ2h0ID0gaXRlbS5oZWlnaHQgLyAxMDA7XHJcbiAgICBpdGVtLmRlcHRoID0gaXRlbS5kZXB0aCAvIDEwMDtcclxuICAgIGl0ZW0ueHBvcyA9IGl0ZW0ueHBvcyAvIDEwMDtcclxuICAgIGl0ZW0ueXBvcyA9IGl0ZW0ueXBvcyAvIDEwMDtcclxuICAgIGl0ZW0uenBvcyA9IGl0ZW0uenBvcyAvIDEwMDtcclxuICAgIGl0ZW0uZWxldmF0aW9uID0gaXRlbS5lbGV2YXRpb24gLyAxMDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zY2FsZVRleHR1cmVzKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGl0ZW0udGV4dHVyZSkge1xyXG4gICAgICAvLyBpdGVtLnRleHR1cmUuc2NhbGUgPSBpdGVtLnRleHR1cmUuc2NhbGUgPyBpdGVtLnRleHR1cmUuc2NhbGUgLyAxMDAgOiAxO1xyXG4gICAgICAvLyBpdGVtLnRleHR1cmUudGlsZVNpemUgPSBpdGVtLnRleHR1cmUudGlsZVNpemUgLyAxMDA7XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2tpbicpKSB7XHJcbiAgICAgIGlmIChpdGVtLnNraW4uaGFzT3duUHJvcGVydHkoJ2JhY2snKSAmJiBpdGVtLnNraW4uYmFjay5oYXNPd25Qcm9wZXJ0eSgndGV4dHVyZScpKSB7XHJcbiAgICAgICAgdGhpcy5fZml4VGV4dHVyZShpdGVtLnNraW4uYmFjay50ZXh0dXJlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbS5za2luLmhhc093blByb3BlcnR5KCdib3R0b20nKSAmJiBpdGVtLnNraW4uYm90dG9tLmhhc093blByb3BlcnR5KCd0ZXh0dXJlJykpIHtcclxuICAgICAgICB0aGlzLl9maXhUZXh0dXJlKGl0ZW0uc2tpbi5ib3R0b20udGV4dHVyZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW0uc2tpbi5oYXNPd25Qcm9wZXJ0eSgnZnJvbnQnKSAmJiBpdGVtLnNraW4uZnJvbnQuaGFzT3duUHJvcGVydHkoJ3RleHR1cmUnKSkge1xyXG4gICAgICAgIHRoaXMuX2ZpeFRleHR1cmUoaXRlbS5za2luLmZyb250LnRleHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnNraW4uaGFzT3duUHJvcGVydHkoJ2xlZnQnKSAmJiBpdGVtLnNraW4ubGVmdC5oYXNPd25Qcm9wZXJ0eSgndGV4dHVyZScpKSB7XHJcbiAgICAgICAgdGhpcy5fZml4VGV4dHVyZShpdGVtLnNraW4ubGVmdC50ZXh0dXJlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbS5za2luLmhhc093blByb3BlcnR5KCdyaWdodCcpICYmIGl0ZW0uc2tpbi5yaWdodC5oYXNPd25Qcm9wZXJ0eSgndGV4dHVyZScpKSB7XHJcbiAgICAgICAgdGhpcy5fZml4VGV4dHVyZShpdGVtLnNraW4ucmlnaHQudGV4dHVyZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW0uc2tpbi5oYXNPd25Qcm9wZXJ0eSgndG9wJykgJiYgaXRlbS5za2luLnRvcC5oYXNPd25Qcm9wZXJ0eSgndGV4dHVyZScpKSB7XHJcbiAgICAgICAgdGhpcy5fZml4VGV4dHVyZShpdGVtLnNraW4udG9wLnRleHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnNraW4uaGFzT3duUHJvcGVydHkoJ2FsbCcpICYmIGl0ZW0uc2tpbi5hbGwuaGFzT3duUHJvcGVydHkoJ3RleHR1cmUnKSkge1xyXG4gICAgICAgIHRoaXMuX2ZpeFRleHR1cmUoaXRlbS5za2luLmFsbC50ZXh0dXJlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZml4VGV4dHVyZSh0ZXh0dXJlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgIHRleHR1cmUuaGVpZ2h0ID0gdGV4dHVyZS5oZWlnaHQgLyAxMDA7XHJcbiAgICAgIGlmICh0ZXh0dXJlLmhhc093blByb3BlcnR5KCdvZmZzZXQnKSkge1xyXG4gICAgICAgIHRleHR1cmUub2Zmc2V0ID0gbmV3IFZlY3RvcjIodGV4dHVyZS5vZmZzZXQueCwgdGV4dHVyZS5vZmZzZXQueSkuZGl2aWRlU2NhbGFyKDEwMCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdGV4dHVyZS5zY2FsZSA9IHRleHR1cmUuc2NhbGUgLyAxMDA7XHJcbiAgICAgIHRleHR1cmUudGlsZVNpemUgPSB0ZXh0dXJlLnRpbGVTaXplIC8gMTAwO1xyXG4gICAgICB0ZXh0dXJlLndpZHRoID0gdGV4dHVyZS53aWR0aCAvIDEwMDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
304
|
+
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.PermanentStoreService }, { type: i3.JsonUtilsService }, { type: i4.MessageBusService }, { type: i5.HomedecoratorSettingsService }, { type: i6.ConfigurationService }, { type: i7.LocalStorageService }, { type: i8.ProgressService }, { type: i9.SceneService }, { type: i10.HomedecoratorAppEventService }]; } });
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFVdkMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFLdEQsTUFBTSxXQUFXLEdBQUc7SUFDbEIsU0FBUyxFQUFFO1FBQ1QsT0FBTyxFQUFFLEVBQUU7UUFDWCxLQUFLLEVBQUUsRUFBRTtRQUNULFlBQVksRUFBRSxFQUFFO1FBQ2hCLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLGdCQUFnQixFQUFFLEVBQUU7S0FDckI7SUFDRCxLQUFLLEVBQUUsRUFBRTtDQUNWLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRS9DLDRCQUE0QjtBQUM1QixzQkFBc0I7QUFDdEIsb0JBQW9CO0FBQ3BCLElBQUk7QUFDSixFQUFFO0FBSUYsTUFBTSxPQUFPLGNBQWM7SUFhekIsWUFDVSxnQkFBaUMsRUFDakMsc0JBQTZDLEVBQzdDLFVBQTRCLEVBQzVCLGVBQWtDLEVBQ2xDLGdCQUE4QyxFQUM5QyxxQkFBMkMsRUFDM0MsZUFBb0MsRUFDcEMsZ0JBQWlDLEVBQ2pDLGFBQTJCLEVBQzNCLGFBQTJDO1FBVDNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3QyxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixvQkFBZSxH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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtWZWN0b3IyLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7UGx1Z2luSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9wbHVnaW5zL3BsdWdpbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0FwcFN0YXRlU2VydmljZSwgU3RhdGVWYWx1ZX0gZnJvbSAnLi9hcHAtc3RhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7UGVybWFuZW50U3RvcmVTZXJ2aWNlfSBmcm9tICcuL3Blcm1hbmVudC1zdG9yZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtKc29uVXRpbHNTZXJ2aWNlfSBmcm9tICcuL2pzb24tdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4vbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7TG9jYWxTdG9yYWdlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSAnLi9wcm9ncmVzcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7UHJlc2V0fSBmcm9tICcuLi9tb2RlbC9wcmVzZXQnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vcGx1Z2lucy9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3ItYXBwLWV2ZW50LnNlcnZpY2UnO1xyXG5cclxuY29uc3QgcHJlc2V0RW1wdHkgPSB7XHJcbiAgZmxvb3JwbGFuOiB7XHJcbiAgICBjb3JuZXJzOiB7fSxcclxuICAgIHdhbGxzOiBbXSxcclxuICAgIHdhbGxUZXh0dXJlczogW10sXHJcbiAgICBmbG9vclRleHR1cmVzOiB7fSxcclxuICAgIG5ld0Zsb29yVGV4dHVyZXM6IHt9XHJcbiAgfSxcclxuICBpdGVtczogW11cclxufTtcclxuXHJcbmNvbnN0IG1vZGVsRW1wdHkgPSBKU09OLnN0cmluZ2lmeShwcmVzZXRFbXB0eSk7XHJcblxyXG4vLyBleHBvcnQgaW50ZXJmYWNlIFByZXNldCB7XHJcbi8vICAgZmlsZW5hbWU6IHN0cmluZztcclxuLy8gICBtb2RlbD86IHN0cmluZztcclxuLy8gfVxyXG4vL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcmVzZXRzU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vIHB1YmxpYyBzdGF0aWMgcHJlc2V0c1BhdGggPSAnL2Fzc2V0cy9wcmVzZXRzJztcclxuXHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBiZWZvcmVMb2FkID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIHB1YmxpYyBhZnRlckxvYWQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHVibGljIHBsdWdpbnM6IEFycmF5PFBsdWdpbkludGVyZmFjZT4gPSBbXTtcclxuICBwdWJsaWMgYXNzZXRQYXRoOiBzdHJpbmc7XHJcbiAgcHVibGljIHN0YXRlQ3JlYXRlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wZXJtYW5lbnRTdG9yZVNlcnZpY2U6IFBlcm1hbmVudFN0b3JlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2pzb25VdGlsczogSnNvblV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3N0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJvZ3Jlc3NTZXJ2aWNlOiBQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZTogSG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NMb2FkZWQuc3Vic2NyaWJlKChpbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChpbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgdGhpcy5hc3NldFBhdGggPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkUm9vbUZyb21QcmVzZXQsIChwcmVzZXQ6IFByZXNldCkgPT4gdGhpcy5fbG9hZFNhdmVkUm9vbUZyb21QcmVzZXQocHJlc2V0KSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkUm9vbUZyb21DbG91ZCwgKGNvZGU6IHN0cmluZykgPT4gdGhpcy5fbG9hZFNhdmVkUm9vbUZyb21DbG91ZChjb2RlKSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9hcHBTdGF0ZVNlcnZpY2UuaW5pdCh7XHJcbiAgICAgIGNyZWF0ZVN0YXRlOiAoKSA9PiB0aGlzLmNyZWF0ZVN0YXRlKCksXHJcbiAgICAgIGFwcGx5U3RhdGU6IChtb2RlbDogYW55KSA9PiB0aGlzLl9hcHBseVN0YXRlQW5kS2VlcENhbWVyYVBvc2l0aW9uKG1vZGVsKSxcclxuICAgIH0sIG1vZGVsRW1wdHkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyKHBsdWdpbjogUGx1Z2luSW50ZXJmYWNlKSB7XHJcbiAgICB0aGlzLnBsdWdpbnMucHVzaChwbHVnaW4pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlb3BlblN0YXRlKG1vZGVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FwcGx5U3RhdGVBbmRLZWVwQ2FtZXJhUG9zaXRpb24obW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVN0YXRlKCk6IFN0YXRlVmFsdWUge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB7Y29uZmlnOiB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXQoKSwgbmVlZFJlc2NhbGU6IGZhbHNlfTtcclxuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKGhhbmRsZXIgPT4gT2JqZWN0LmFzc2lnbihzdGF0ZSwgaGFuZGxlci5nZXRPYmplY3RzKCkpKTtcclxuICAgIGNvbnN0IHN0YXRlSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc3RhdGUpO1xyXG4gICAgY29uc3QganNvblBhcnNlZCA9IEpTT04ucGFyc2Uoc3RhdGVKc29uKTtcclxuICAgIGlmIChqc29uUGFyc2VkICYmIGpzb25QYXJzZWQuZnVybml0dXJlKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwganNvblBhcnNlZC5mdXJuaXR1cmUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoanNvblBhcnNlZC5mdXJuaXR1cmVbaV0gJiYganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZWxldmF0aW9uRml4ZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBqc29uUGFyc2VkLmZ1cm5pdHVyZVtpXS5lbGV2YXRpb25GaXhlZCA9IHRydWU7XHJcbiAgICAgICAgICBqc29uUGFyc2VkLmZ1cm5pdHVyZVtpXS5maXhlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChqc29uUGFyc2VkLmZ1cm5pdHVyZVtpXSAmJiBqc29uUGFyc2VkLmZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzICYmIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3MpIHtcclxuICAgICAgICAgIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3MucGFzc3dvcmQgPSAnJztcclxuICAgICAgICAgIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3MudXNlcm5hbWUgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IG91dHB1dDogc3RyaW5nID0ganNvblBhcnNlZCA/IEpTT04uc3RyaW5naWZ5KGpzb25QYXJzZWQpIDogJyc7XHJcbiAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zYXZlQ3VycmVudFN0YXRlKG91dHB1dCk7XHJcbiAgICB0aGlzLnN0YXRlQ3JlYXRlZC5uZXh0KCk7XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZFNhdmVkUm9vbUZyb21QcmVzZXQocHJlc2V0OiBQcmVzZXQpIHtcclxuICAgIHRoaXMuX2xvYWRSb29tUGxhbihcclxuICAgICAgYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XHJcbiAgICAgICAgaWYgKCFwcmVzZXQubW9kZWwpIHtcclxuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmFzc2V0UGF0aCArIHByZXNldC5maWxlbmFtZTtcclxuICAgICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCB0aGlzLl9qc29uVXRpbHMucmVhZEpzb25GaWxlKHBhdGgsIGZhbHNlKTtcclxuICAgICAgICAgIHByZXNldC5tb2RlbCA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RlbE9iajogYW55ID0gSlNPTi5wYXJzZShwcmVzZXQubW9kZWwpO1xyXG4gICAgICAgIGlmIChtb2RlbE9iai5mbG9vcnBsYW4gJiYgbW9kZWxPYmouZmxvb3JwbGFuLmNvcm5lcnMgJiYgT2JqZWN0LmtleXMobW9kZWxPYmouZmxvb3JwbGFuLmNvcm5lcnMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5kaXJ0eS5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoIW1vZGVsT2JqLmhhc093blByb3BlcnR5KCduZWVkUmVzY2FsZScpID8gdGhpcy5fcmVTY2FsZU1vZGVsKG1vZGVsT2JqKSA6IG1vZGVsT2JqKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRTYXZlZFJvb21Gcm9tQ2xvdWQoY29kZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sb2FkUm9vbVBsYW4oXHJcbiAgICAgICgpOiBQcm9taXNlPHN0cmluZz4gPT4gbmV3IFByb21pc2U8c3RyaW5nPihcclxuICAgICAgICByZXNvbHZlID0+IHtcclxuICAgICAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5kaXJ0eS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5fcGVybWFuZW50U3RvcmVTZXJ2aWNlLmxvYWQoY29kZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAoanNvbjogc3RyaW5nKSA9PiByZXNvbHZlKEpTT04uc3RyaW5naWZ5KGpzb24pKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2hvd0xvYWRpbmdJbmRpY2F0b3IsIHt9KTtcclxuICAgIGF3YWl0IHRoaXMuX2FwcGx5U3RhdGUobW9kZWxFbXB0eSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMb2FkaW5nSW5kaWNhdG9yKTtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkUm9vbVBsYW4obG9hZE1vZGVsOiBGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TaG93TG9hZGluZ0luZGljYXRvciwge30pO1xyXG4gICAgYXdhaXQgdGhpcy5fY2xlYXIoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgbG9hZE1vZGVsKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2FwcGx5U3RhdGUobW9kZWwpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkNsZWFyU3RhdGUsIG1vZGVsKTtcclxuICAgICAgY29uc3QgcGFyc2VkTW9kZWw6IHt9ID0gSlNPTi5wYXJzZShtb2RlbCk7XHJcbiAgICAgIGlmIChwYXJzZWRNb2RlbC5oYXNPd25Qcm9wZXJ0eSgnY29uZmlnJykpIHtcclxuICAgICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5zZXQocGFyc2VkTW9kZWxbJ2NvbmZpZyddKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxvYWRpbmdJbmRpY2F0b3IpO1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYXBwbHlTdGF0ZShtb2RlbDogU3RhdGVWYWx1ZSkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLl9wYXJzZU1vZGVsKG1vZGVsKTtcclxuICAgIGlmIChkYXRhWydjb25maWcnXT8uSXNMaW1pdGVkID09PSB0cnVlKSB7XHJcbiAgICAgIGRhdGFbJ3ZpZXcnXS50YXJnZXQueSA9IDA7XHJcbiAgICB9XHJcbiAgICBkYXRhID0gey4uLmRhdGEsIGtlZXBDYW1lcmFQb3NpdGlvbjogZmFsc2V9O1xyXG4gICAgYXdhaXQgdGhpcy5fYXBwbHkoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hcHBseVN0YXRlQW5kS2VlcENhbWVyYVBvc2l0aW9uKG1vZGVsOiBTdGF0ZVZhbHVlKSB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuX3BhcnNlTW9kZWwobW9kZWwpO1xyXG4gICAgZGF0YSA9IHsuLi5kYXRhLCBrZWVwQ2FtZXJhUG9zaXRpb246IHRydWV9O1xyXG4gICAgYXdhaXQgdGhpcy5fYXBwbHkoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wYXJzZU1vZGVsKG1vZGVsOiBTdGF0ZVZhbHVlKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShtb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hcHBseShkYXRhKSB7XHJcbiAgICB0aGlzLmJlZm9yZUxvYWQubmV4dChkYXRhKTtcclxuICAgIGNvbnN0IGl0ZW1zRG93bmxvYWQ6IGFueVtdID0gZGF0YS5pdGVtcyAmJiBkYXRhLml0ZW1zLmxlbmd0aCA+IDAgPyBkYXRhLml0ZW1zLmNvbmNhdChkYXRhLmZ1cm5pdHVyZSkgOiBkYXRhLmZ1cm5pdHVyZTtcclxuICAgIGF3YWl0IHRoaXMuX3Byb2dyZXNzU2VydmljZS5wcmVwYXJlRG93bmxvYWRzKGl0ZW1zRG93bmxvYWQpO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5wbHVnaW5zLm1hcChcclxuICAgICAgYXN5bmMgKHBsdWdpbjogUGx1Z2luSW50ZXJmYWNlKSA9PiBhd2FpdCBwbHVnaW4ubG9hZE9iamVjdHMoZGF0YSlcclxuICAgICkpO1xyXG4gICAgdGhpcy5fcHJvZ3Jlc3NTZXJ2aWNlLmZpbmlzaERvd25sb2FkcygpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICAgIHRoaXMuYWZ0ZXJMb2FkLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZVNjYWxlTW9kZWwobW9kZWxPYmo6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAobW9kZWxPYmoudmlldykge1xyXG4gICAgICBtb2RlbE9iai52aWV3LnBvc2l0aW9uID0gbmV3IFZlY3RvcjMobW9kZWxPYmoudmlldy5wb3NpdGlvbi54LCBtb2RlbE9iai52aWV3LnBvc2l0aW9uLnksIG1vZGVsT2JqLnZpZXcucG9zaXRpb24ueikuZGl2aWRlU2NhbGFyKDEwMCk7XHJcbiAgICAgIG1vZGVsT2JqLnZpZXcucGFuID0gbmV3IFZlY3RvcjMobW9kZWxPYmoudmlldy5wYW4ueCwgbW9kZWxPYmoudmlldy5wYW4ueSwgbW9kZWxPYmoudmlldy5wYW4ueikuZGl2aWRlU2NhbGFyKDEwMCk7XHJcbiAgICAgIG1vZGVsT2JqLnZpZXcudGFyZ2V0ID0gbmV3IFZlY3RvcjMobW9kZWxPYmoudmlldy50YXJnZXQueCwgbW9kZWxPYmoudmlldy50YXJnZXQueSwgbW9kZWxPYmoudmlldy50YXJnZXQueikuZGl2aWRlU2NhbGFyKDEwMCk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9kZWxPYmouZmxvb3JwbGFuKSB7XHJcbiAgICAgIGlmIChtb2RlbE9iai5mbG9vcnBsYW4uY29ybmVycykge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZGVsT2JqLmZsb29ycGxhbi5jb3JuZXJzKSB7XHJcbiAgICAgICAgICBpZiAobW9kZWxPYmouZmxvb3JwbGFuLmNvcm5lcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICBtb2RlbE9iai5mbG9vcnBsYW4uY29ybmVyc1trZXldID1cclxuICAgICAgICAgICAgICBuZXcgVmVjdG9yMihtb2RlbE9iai5mbG9vcnBsYW4uY29ybmVyc1trZXldLngsIG1vZGVsT2JqLmZsb29ycGxhbi5jb3JuZXJzW2tleV0ueSkuZGl2aWRlU2NhbGFyKDEwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHMpIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IG1vZGVsT2JqLmZsb29ycGxhbi53YWxscy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHNbaV0uaGVpZ2h0ID0gbW9kZWxPYmouZmxvb3JwbGFuLndhbGxzW2ldLmhlaWdodCAvIDEwMDtcclxuICAgICAgICAgIG1vZGVsT2JqLmZsb29ycGxhbi53YWxsc1tpXS50aGlja25lc3MgPSBtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHNbaV0udGhpY2tuZXNzIC8gMTAwO1xyXG4gICAgICAgICAgaWYgKG1vZGVsT2JqLmZsb29ycGxhbi53YWxsc1tpXS5oYXNPd25Qcm9wZXJ0eSgnZnJvbnRUZXh0dXJlJykpIHtcclxuICAgICAgICAgICAgdGhpcy5fZml4VGV4dHVyZShtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHNbaV0uZnJvbnRUZXh0dXJlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHNbaV0uaGFzT3duUHJvcGVydHkoJ2JhY2tUZXh0dXJlJykpIHtcclxuICAgICAgICAgICAgdGhpcy5fZml4VGV4dHVyZShtb2RlbE9iai5mbG9vcnBsYW4ud2FsbHNbaV0uYmFja1RleHR1cmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobW9kZWxPYmouZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtb2RlbE9iai5mbG9vcnBsYW4ubmV3Rmxvb3JUZXh0dXJlcykge1xyXG4gICAgICAgICAgaWYgKG1vZGVsT2JqLmZsb29ycGxhbi5uZXdGbG9vclRleHR1cmVzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgbW9kZWxPYmouZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXNba2V5XS50aWxlU2l6ZSA9IG1vZGVsT2JqLmZsb29ycGxhbi5uZXdGbG9vclRleHR1cmVzW2tleV0udGlsZVNpemUgLyAxMDA7XHJcbiAgICAgICAgICAgIGlmIChtb2RlbE9iai5mbG9vcnBsYW4ubmV3Rmxvb3JUZXh0dXJlc1trZXldLmhhc093blByb3BlcnR5KCdvZmZzZXQnKSkge1xyXG4gICAgICAgICAgICAgIG1vZGVsT2JqLmZsb29ycGxhbi5uZXdGbG9vclRleHR1cmVzW2tleV0ub2Zmc2V0ID1cclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKFxyXG4gICAgICAgICAgICAgICAgICBtb2RlbE9iai5mbG9vcnBsYW4ubmV3Rmxvb3JUZXh0dXJlc1trZXldLm9mZnNldC54LFxyXG4gICAgICAgICAgICAgICAgICBtb2RlbE9iai5mbG9vcnBsYW4ubmV3Rmxvb3JUZXh0dXJlc1trZXldLm9mZnNldC55KS5kaXZpZGVTY2FsYXIoMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG1vZGVsT2JqLml0ZW1zKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kZWxPYmouaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gbW9kZWxPYmouaXRlbXNbaV07XHJcbiAgICAgICAgdGhpcy5fc2NhbGVEaW1lbnNpb25zQW5kUG9zaXRpb25zKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuX3NjYWxlVGV4dHVyZXMoaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChtb2RlbE9iai5mdXJuaXR1cmUpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2RlbE9iai5mdXJuaXR1cmUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gbW9kZWxPYmouZnVybml0dXJlW2ldO1xyXG4gICAgICAgIHRoaXMuX3NjYWxlRGltZW5zaW9uc0FuZFBvc2l0aW9ucyhpdGVtKTtcclxuICAgICAgICB0aGlzLl9zY2FsZVRleHR1cmVzKGl0ZW0pO1xyXG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpdGVtLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYWxlRGltZW5zaW9uc0FuZFBvc2l0aW9ucyhpdGVtLmNoaWxkcmVuW2pdKTtcclxuICAgICAgICAgICAgdGhpcy5fc2NhbGVUZXh0dXJlcyhpdGVtLmNoaWxkcmVuW2pdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb2RlbE9iajtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NjYWxlRGltZW5zaW9uc0FuZFBvc2l0aW9ucyhpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgIGl0ZW0ud2lkdGggPSBpdGVtLndpZHRoIC8gMTAwO1xyXG4gICAgaXRlbS5oZWlnaHQgPSBpdGVtLmhlaWdodCAvIDEwMDtcclxuICAgIGl0ZW0uZGVwdGggPSBpdGVtLmRlcHRoIC8gMTAwO1xyXG4gICAgaXRlbS54cG9zID0gaXRlbS54cG9zIC8gMTAwO1xyXG4gICAgaXRlbS55cG9zID0gaXRlbS55cG9zIC8gMTAwO1xyXG4gICAgaXRlbS56cG9zID0gaXRlbS56cG9zIC8gMTAwO1xyXG4gICAgaXRlbS5lbGV2YXRpb24gPSBpdGVtLmVsZXZhdGlvbiAvIDEwMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NjYWxlVGV4dHVyZXMoaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoaXRlbS50ZXh0dXJlKSB7XHJcbiAgICAgIC8vIGl0ZW0udGV4dHVyZS5zY2FsZSA9IGl0ZW0udGV4dHVyZS5zY2FsZSA/IGl0ZW0udGV4dHVyZS5zY2FsZSAvIDEwMCA6IDE7XHJcbiAgICAgIC8vIGl0ZW0udGV4dHVyZS50aWxlU2l6ZSA9IGl0ZW0udGV4dHVyZS50aWxlU2l6ZSAvIDEwMDtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLmhhc093blByb3BlcnR5KCdza2luJykpIHtcclxuICAgICAgaWYgKGl0ZW0uc2tpbi5oYXNPd25Qcm9wZXJ0eSgnYmFjaycpICYmIGl0ZW0uc2tpbi5iYWNrLmhhc093blByb3BlcnR5KCd0ZXh0dXJlJykpIHtcclxuICAgICAgICB0aGlzLl9maXhUZXh0dXJlKGl0ZW0uc2tpbi5iYWNrLnRleHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnNraW4uaGFzT3duUHJvcGVydHkoJ2JvdHRvbScpICYmIGl0ZW0uc2tpbi5ib3R0b20uaGFzT3duUHJvcGVydHkoJ3RleHR1cmUnKSkge1xyXG4gICAgICAgIHRoaXMuX2ZpeFRleHR1cmUoaXRlbS5za2luLmJvdHRvbS50ZXh0dXJlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbS5za2luLmhhc093blByb3BlcnR5KCdmcm9udCcpICYmIGl0ZW0uc2tpbi5mcm9udC5oYXNPd25Qcm9wZXJ0eSgndGV4dHVyZScpKSB7XHJcbiAgICAgICAgdGhpcy5fZml4VGV4dHVyZShpdGVtLnNraW4uZnJvbnQudGV4dHVyZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW0uc2tpbi5oYXNPd25Qcm9wZXJ0eSgnbGVmdCcpICYmIGl0ZW0uc2tpbi5sZWZ0Lmhhc093blByb3BlcnR5KCd0ZXh0dXJlJykpIHtcclxuICAgICAgICB0aGlzLl9maXhUZXh0dXJlKGl0ZW0uc2tpbi5sZWZ0LnRleHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnNraW4uaGFzT3duUHJvcGVydHkoJ3JpZ2h0JykgJiYgaXRlbS5za2luLnJpZ2h0Lmhhc093blByb3BlcnR5KCd0ZXh0dXJlJykpIHtcclxuICAgICAgICB0aGlzLl9maXhUZXh0dXJlKGl0ZW0uc2tpbi5yaWdodC50ZXh0dXJlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbS5za2luLmhhc093blByb3BlcnR5KCd0b3AnKSAmJiBpdGVtLnNraW4udG9wLmhhc093blByb3BlcnR5KCd0ZXh0dXJlJykpIHtcclxuICAgICAgICB0aGlzLl9maXhUZXh0dXJlKGl0ZW0uc2tpbi50b3AudGV4dHVyZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW0uc2tpbi5oYXNPd25Qcm9wZXJ0eSgnYWxsJykgJiYgaXRlbS5za2luLmFsbC5oYXNPd25Qcm9wZXJ0eSgndGV4dHVyZScpKSB7XHJcbiAgICAgICAgdGhpcy5fZml4VGV4dHVyZShpdGVtLnNraW4uYWxsLnRleHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maXhUZXh0dXJlKHRleHR1cmU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgdGV4dHVyZS5oZWlnaHQgPSB0ZXh0dXJlLmhlaWdodCAvIDEwMDtcclxuICAgICAgaWYgKHRleHR1cmUuaGFzT3duUHJvcGVydHkoJ29mZnNldCcpKSB7XHJcbiAgICAgICAgdGV4dHVyZS5vZmZzZXQgPSBuZXcgVmVjdG9yMih0ZXh0dXJlLm9mZnNldC54LCB0ZXh0dXJlLm9mZnNldC55KS5kaXZpZGVTY2FsYXIoMTAwKTtcclxuICAgICAgfVxyXG4gICAgICAvLyB0ZXh0dXJlLnNjYWxlID0gdGV4dHVyZS5zY2FsZSAvIDEwMDtcclxuICAgICAgdGV4dHVyZS50aWxlU2l6ZSA9IHRleHR1cmUudGlsZVNpemUgLyAxMDA7XHJcbiAgICAgIHRleHR1cmUud2lkdGggPSB0ZXh0dXJlLndpZHRoIC8gMTAwO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -9,7 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import * as THREE from 'three';
|
|
11
11
|
import { SRGBColorSpace, Vector2 } from 'three';
|
|
12
|
-
import * as md5 from 'md5';
|
|
13
12
|
import { TextureType } from '../model/texture-type';
|
|
14
13
|
export class MaterialUtils {
|
|
15
14
|
static SetAssetPath(path) {
|
|
@@ -131,7 +130,8 @@ export class MaterialUtils {
|
|
|
131
130
|
let srcKey = src;
|
|
132
131
|
let type = 'image/jpeg';
|
|
133
132
|
if (isDataUri) {
|
|
134
|
-
srcKey = md5(src);
|
|
133
|
+
// srcKey = md5(src);
|
|
134
|
+
srcKey = src;
|
|
135
135
|
if (src.indexOf('image/png') > -1) {
|
|
136
136
|
type = 'image/png';
|
|
137
137
|
}
|
|
@@ -404,4 +404,4 @@ MaterialUtils.assetPath = '';
|
|
|
404
404
|
MaterialUtils.imgElement = undefined;
|
|
405
405
|
MaterialUtils.imageCache = new Map();
|
|
406
406
|
MaterialUtils.textureCache = new Map();
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9jb3JlL3V0aWxzL21hdGVyaWFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBdUIsY0FBYyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUNwRSxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUUzQixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFPbEQsTUFBTSxPQUFPLGFBQWE7SUFnQmpCLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBWTtRQUNyQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVc7UUFDdkIsYUFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNyQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTSxNQUFNLENBQUMsT0FBTyxDQUNuQixHQUFXLEVBQUUsT0FBZ0IsRUFBRSxRQUFnQixFQUFFLE9BQWdCLEVBQUUsT0FBZ0IsRUFBRSxVQUEwQixFQUFFLFlBQXFCO1FBQ3RJLE1BQU0sS0FBSyxHQUFXLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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LElBQUksT0FBTyxDQUFDLENBQUMsT0FBaUIsRUFBRSxFQUFFO1lBQ3ZDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDckMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUM7WUFDRixhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTdhc0IseUJBQVcsR0FBRyxDQUFDLENBQUM7QUFDaEIsMkJBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztJQUNqRSxLQUFLLEVBQUUsUUFBUTtJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLE9BQU8sRUFBRSxHQUFHO0NBQ2IsQ0FBQyxDQUFDO0FBQ1csMkJBQWEsR0FBRyxJQUFJLENBQUM7QUFDcEIsdUJBQVMsR0FBVyxFQUFFLENBQUM7QUFFdkIsd0JBQVUsR0FBcUIsU0FBUyxDQUFDO0FBRTFDLHdCQUFVLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7QUFDakQsMEJBQVksR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtNZXNoU3RhbmRhcmRNYXRlcmlhbCwgU1JHQkNvbG9yU3BhY2UsIFZlY3RvcjJ9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0ICogYXMgbWQ1IGZyb20gJ21kNSc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7VGV4dHVyZVR5cGV9IGZyb20gJy4uL21vZGVsL3RleHR1cmUtdHlwZSc7XHJcblxyXG5pbnRlcmZhY2UgSW1hZ2VDYWNoZWRLZXkge1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIHJlc2l6ZTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVXRpbHMge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNhbnZhc1JhdGlvID0gNDtcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRXaW5kb3cgPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe1xyXG4gICAgY29sb3I6IDB4MDAwMDAwLFxyXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICBvcGFjaXR5OiAwLjBcclxuICB9KTtcclxuICBwdWJsaWMgc3RhdGljIE1BWF9ESU1FTlNJT04gPSAxMjAwO1xyXG4gIHByaXZhdGUgc3RhdGljIGFzc2V0UGF0aDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGltZ0VsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW1hZ2VDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBIVE1MSW1hZ2VFbGVtZW50PigpO1xyXG4gIHB1YmxpYyBzdGF0aWMgdGV4dHVyZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFRIUkVFLlRleHR1cmU+KCk7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2V0QXNzZXRQYXRoKHBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgTWF0ZXJpYWxVdGlscy5hc3NldFBhdGggPSBwYXRoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBDbGVhckNhY2hlcygpOiB2b2lkIHtcclxuICAgIE1hdGVyaWFsVXRpbHMuaW1hZ2VDYWNoZS5jbGVhcigpO1xyXG4gICAgY29uc3QgdGV4dHVyZXMgPSBBcnJheS5mcm9tKE1hdGVyaWFsVXRpbHMudGV4dHVyZUNhY2hlLnZhbHVlcygpKTtcclxuICAgIHRleHR1cmVzLmZvckVhY2goKHQpID0+IHQuZGlzcG9zZSgpKTtcclxuICAgIE1hdGVyaWFsVXRpbHMudGV4dHVyZUNhY2hlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEZyb21VcmwoXHJcbiAgICB1cmw6IHN0cmluZywgc3RyZXRjaDogYm9vbGVhbiwgdGlsZVNpemU6IG51bWJlciwgcmVwZWF0WD86IG51bWJlciwgcmVwZWF0WT86IG51bWJlciwgZGltZW5zaW9ucz86IFRIUkVFLlZlY3RvcjIsIHRpbGVSb3RhdGlvbj86IG51bWJlcik6IFByb21pc2U8VEhSRUUuVGV4dHVyZT4ge1xyXG4gICAgY29uc3QgcmF0aW86IG51bWJlciA9IGRpbWVuc2lvbnMgPyAoZGltZW5zaW9ucy54IC8gZGltZW5zaW9ucy55KSA6IDE7IC8vIFJlcXVpcmVkIHRvIGtlZXAgc2NhbGUgZXF1YWwgb24gc3VyZmFjZXMgb2YgYW55IGRpbWVuc2lvblxyXG4gICAgY29uc3QgdGlsZVNpemVNYXg6IG51bWJlciA9IDMwMDtcclxuXHJcbiAgICBpZiAodGhpcy50ZXh0dXJlQ2FjaGUuaGFzKHVybCkpIHtcclxuICAgICAgY29uc3QgdGV4dHVyZSA9IHRoaXMudGV4dHVyZUNhY2hlLmdldCh1cmwpLmNsb25lKCk7XHJcbiAgICAgIHRpbGVTaXplID0gKHRpbGVTaXplTWF4IC8gMTAwKSArIDAuMDEgLSB0aWxlU2l6ZTsgLy8gU2NhbGUgbmVnYXRpdmVseVxyXG4gICAgICBpZiAoIXN0cmV0Y2gpIHtcclxuICAgICAgICB0ZXh0dXJlLnJlcGVhdCA9IHJlcGVhdFggPyBuZXcgVmVjdG9yMigocmVwZWF0WCAqIHJhdGlvKSAqIHRpbGVTaXplLCAocmVwZWF0WSAqIHJhdGlvKSAqIHRpbGVTaXplKSA6XHJcbiAgICAgICAgICBuZXcgVmVjdG9yMih0aWxlU2l6ZSAqIHJhdGlvLCB0aWxlU2l6ZSAqIHJhdGlvKTtcclxuICAgICAgICB0ZXh0dXJlLnJvdGF0aW9uID0gdGlsZVJvdGF0aW9uID8gLXRpbGVSb3RhdGlvbiA6IDA7XHJcbiAgICAgICAgdGV4dHVyZS5jZW50ZXIgPSBuZXcgVmVjdG9yMigwLjUsIDAuNSk7XHJcbiAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0ZXh0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGV4dHVyZUxvYWRlciA9IG5ldyBUSFJFRS5UZXh0dXJlTG9hZGVyKCk7XHJcbiAgICAgICAgdGV4dHVyZUxvYWRlci5sb2FkKFxyXG4gICAgICAgICAgTWF0ZXJpYWxVdGlscy5hc3NldFBhdGggKyB1cmwsXHJcbiAgICAgICAgICB0aHJlZVRleHR1cmUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXN0cmV0Y2gpIHtcclxuICAgICAgICAgICAgICB0aHJlZVRleHR1cmUud3JhcFQgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgICAgICAgICAgICB0aHJlZVRleHR1cmUud3JhcFMgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgICAgICAgICAgICB0aHJlZVRleHR1cmUucmVwZWF0ID0gcmVwZWF0WCA/IG5ldyBWZWN0b3IyKChyZXBlYXRYICogcmF0aW8pICogdGlsZVNpemUsIChyZXBlYXRZICogcmF0aW8pICogdGlsZVNpemUpIDpcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKHRpbGVTaXplICogcmF0aW8sIHRpbGVTaXplICogcmF0aW8pO1xyXG4gICAgICAgICAgICAgIHRocmVlVGV4dHVyZS5yb3RhdGlvbiA9IHRpbGVSb3RhdGlvbiA/IC10aWxlUm90YXRpb24gOiAwO1xyXG4gICAgICAgICAgICAgIHRocmVlVGV4dHVyZS5jZW50ZXIgPSBuZXcgVmVjdG9yMigwLjUsIDAuNSk7XHJcbiAgICAgICAgICAgICAgdGhyZWVUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJlZVRleHR1cmUuYW5pc290cm9weSA9IDE2O1xyXG4gICAgICAgICAgICBNYXRlcmlhbFV0aWxzLnRleHR1cmVDYWNoZS5zZXQodXJsLCB0aHJlZVRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aHJlZVRleHR1cmUpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHVuZGVmaW5lZCwgLy8gb25wcm9ncmVzc1xyXG4gICAgICAgICAgcmVqZWN0XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8gdXNlIGNhbnZhcyB0byBjcmVhdGUgcm90YXRlZCB0ZXh0dXJlc1xyXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgUm90YXRlZENhbnZhc1RleHR1cmUodGV4dHVyZTogVGV4dHVyZSwgdGV4dHVyZVVSTDogc3RyaW5nLCBkaW1lbnNpb25zOiBUSFJFRS5WZWN0b3IyLCBhZGp1c3RTY2FsZTogYm9vbGVhbiwgcmVwZWF0WD86IG51bWJlciwgcmVwZWF0WT86IG51bWJlcik6IFByb21pc2U8VEhSRUUuVGV4dHVyZT4ge1xyXG4gICAgY29uc3QgaW1nID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQodGV4dHVyZVVSTCk7XHJcbiAgICByZXR1cm4gTWF0ZXJpYWxVdGlscy5DcmVhdGVUaWxlTWFwKGltZywgdGV4dHVyZSwgZGltZW5zaW9ucywgYWRqdXN0U2NhbGUsIHJlcGVhdFgsIHJlcGVhdFkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhc3luYyBDdXN0b21UaWxlTWFwVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlLCBkaW1lbnNpb25zOiBUSFJFRS5WZWN0b3IyKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XHJcbiAgICBsZXQgaW1nID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQodGV4dHVyZS5kYXRhKTtcclxuICAgIGlmIChNYXRlcmlhbFV0aWxzLlRleHR1cmVTb3VyY2VNb2RpZmllZCh0ZXh0dXJlKSkge1xyXG4gICAgICBpbWcgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkNyZWF0ZVNoaWZ0ZWREYXRhVXJsKGltZywgdGV4dHVyZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByYXRpbzogbnVtYmVyID0gZGltZW5zaW9ucy54IC8gZGltZW5zaW9ucy55O1xyXG4gICAgY29uc3QgdGlsZVNpemVNYXg6IG51bWJlciA9IDMwMDtcclxuICAgIGNvbnN0IG5ld1RpbGVTaXplOiBudW1iZXIgPSAodGlsZVNpemVNYXggLyAxMDApICsgMC4wMSAtIHRleHR1cmUudGlsZVNpemU7IC8vIFNjYWxlIG5lZ2F0aXZlbHlcclxuICAgIGNvbnN0IHQ6IFRIUkVFLlRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZSgpO1xyXG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAvLyBXaGVuIGltZyBpcyBjYWNoZWQgaXQgaXMgcmV0dXJuZWQgYXMgYSBiYXNlNjQgc3RyaW5nLCB0aGlzIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhbiBJbWFnZSBzaW5jZSBUZXh0dXJlIGRvZXMgbm90IGFjY2VwdCBiYXNlNjQgYXMgaW1hZ2UgZGF0YVxyXG4gICAgaWYgKGltZy50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2RhdGEnKSkge1xyXG4gICAgICBpbWFnZS5zcmMgPSBpbWcudG9TdHJpbmcoKTtcclxuICAgICAgdC5pbWFnZSA9IGltYWdlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdC5pbWFnZSA9IGltZztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRleHR1cmUuc3RyZXRjaCkge1xyXG4gICAgICB0LndyYXBUID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7XHJcbiAgICAgIHQud3JhcFMgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgICAgdC5yZXBlYXQgPSB0ZXh0dXJlLnJlcGVhdFggPyBuZXcgVmVjdG9yMigodGV4dHVyZS5yZXBlYXRYICogcmF0aW8pICogbmV3VGlsZVNpemUsICh0ZXh0dXJlLnJlcGVhdFkgKiByYXRpbykgKiBuZXdUaWxlU2l6ZSkgOlxyXG4gICAgICAgIG5ldyBWZWN0b3IyKG5ld1RpbGVTaXplICogcmF0aW8sIG5ld1RpbGVTaXplICogcmF0aW8pO1xyXG4gICAgICB0LnJvdGF0aW9uID0gdGV4dHVyZS50aWxlUm90YXRpb24gPyAtdGV4dHVyZS50aWxlUm90YXRpb24gOiAwO1xyXG4gICAgICB0LmNlbnRlciA9IG5ldyBWZWN0b3IyKDAuNSwgMC41KTtcclxuICAgICAgdC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0LmFuaXNvdHJvcHkgPSAxNjtcclxuICAgIHJldHVybiB0O1xyXG4gIH1cclxuXHJcbi8vIHVzZSBjYW52YXMgdG8gY3JlYXRlIHRleHR1cmUgZnJvbSBwaG90b1xyXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgRnJvbUltYWdlKHRleHR1cmU6IFRleHR1cmUvKiwgZGltZW5zaW9uczogVEhSRUUuVmVjdG9yMiovKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XHJcbiAgICBjb25zdCBpbWcgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkxvYWRJbWFnZUNhY2hlZCh0ZXh0dXJlLmRhdGEpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5HZXRDYW52YXNGcm9tSW1hZ2VUZXh0dXJlKGltZywgdGV4dHVyZSwgdHJ1ZSk7XHJcbiAgICBjb25zdCB0aHJlZVRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZShjYW52YXMpO1xyXG4gICAgdGhyZWVUZXh0dXJlLmNvbG9yU3BhY2UgPSBTUkdCQ29sb3JTcGFjZTtcclxuICAgIHRocmVlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICByZXR1cm4gdGhyZWVUZXh0dXJlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhc3luYyBSZWFkQW5kUmVzaXplUGhvdG9Bc0RhdGFVUkwoZmlsZTogRmlsZSk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xyXG4gICAgY29uc3QgaW1hZ2VTcmM6IHN0cmluZyA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuUmVhZEZpbGVBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICByZXR1cm4gTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQoaW1hZ2VTcmMsIGZhbHNlKTtcclxuICAgIC8vIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgICAvLyByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgLy8gICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAvLyAgICAgLy8gY29uc3QgdHJhbnNwYXJhbnQgPSBmaWxlLm5hbWUuZW5kc1dpdGgoJy5wbmcnKTtcclxuICAgIC8vICAgICBjb25zdCBjYW52YXMgPSBNYXRlcmlhbFV0aWxzLkdldENhbnZhc0Zyb21JbWFnZVRleHR1cmUoaW1hZ2UpO1xyXG4gICAgLy8gICAgIGNvbnN0IG5ld1NyYyA9IGNhbnZhcy50b0RhdGFVUkwoYGltYWdlLyR7ZmlsZS5uYW1lLmVuZHNXaXRoKCcucG5nJykgPyAncG5nJyA6ICdqcGcnfWApO1xyXG4gICAgLy8gICAgIC8vIGNvbnN0IG5ld1NyYyA9IE1hdGVyaWFsVXRpbHMuUmVzaXplSW1hZ2UoaW1hZ2UsIHRyYW5zcGFyYW50KTtcclxuICAgIC8vICAgICByZXNvbHZlKG5ld1NyYyk7XHJcbiAgICAvLyAgIH07XHJcbiAgICAvLyAgIGltYWdlLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgLy8gICBpbWFnZS5zcmMgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLlJlYWRGaWxlQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIExvYWRJbWFnZUNhY2hlZChzcmM6IHN0cmluZywgcmVzaXplOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xyXG4gICAgbGV0IGltYWdlQ2FjaGVkS2V5U3RyaW5nID0gJyc7XHJcbiAgICBjb25zdCBpc0RhdGFVcmkgPSBzcmMuaW5kZXhPZignYmFzZTY0JykgPiAtMTtcclxuICAgIGxldCBzcmNLZXk6IHN0cmluZyA9IHNyYztcclxuICAgIGxldCB0eXBlOiBzdHJpbmcgPSAnaW1hZ2UvanBlZyc7XHJcblxyXG4gICAgaWYgKGlzRGF0YVVyaSkge1xyXG4gICAgICBzcmNLZXkgPSBtZDUoc3JjKTtcclxuICAgICAgaWYgKHNyYy5pbmRleE9mKCdpbWFnZS9wbmcnKSA+IC0xKSB7XHJcbiAgICAgICAgdHlwZSA9ICdpbWFnZS9wbmcnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBleHQ6IHN0cmluZyA9IHNyYy5zdWJzdHIoc3JjLmxhc3RJbmRleE9mKCcuJykgKyAxLCBzcmMubGVuZ3RoKTtcclxuICAgICAgaWYgKGV4dC5pbmRleE9mKCdwbmcnKSA+IC0xKSB7XHJcbiAgICAgICAgdHlwZSA9ICdpbWFnZS9wbmcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbWFnZUNhY2hlZEtleTogSW1hZ2VDYWNoZWRLZXkgPSB7XHJcbiAgICAgIHNyYzogc3JjS2V5LFxyXG4gICAgICByZXNpemU6IHJlc2l6ZVxyXG4gICAgfTtcclxuICAgIGltYWdlQ2FjaGVkS2V5U3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoaW1hZ2VDYWNoZWRLZXkpO1xyXG4gICAgY29uc3QgaW1hZ2VGcm9tQ2FjaGUgPSB0aGlzLmltYWdlQ2FjaGUuZ2V0KGltYWdlQ2FjaGVkS2V5U3RyaW5nKTtcclxuICAgIGlmIChpbWFnZUZyb21DYWNoZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGltYWdlRnJvbUNhY2hlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnQW5vbnltb3VzJztcclxuICAgIGltYWdlLnNyYyA9IGlzRGF0YVVyaSA/IHNyYyA6IChzcmMuc3RhcnRzV2l0aChNYXRlcmlhbFV0aWxzLmFzc2V0UGF0aCkgPyBzcmMgOiBNYXRlcmlhbFV0aWxzLmFzc2V0UGF0aCArIHNyYyk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc2l6ZSkge1xyXG4gICAgICAgICAgY29uc3QgcmVzaXplZEltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICByZXNpemVkSW1hZ2Uub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlQ2FjaGUuc2V0KGltYWdlQ2FjaGVkS2V5U3RyaW5nLCByZXNpemVkSW1hZ2UpO1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc2l6ZWRJbWFnZSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmVzaXplZEltYWdlLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG5cclxuICAgICAgICAgIC8vIEN1cnJlbnRseSBhbHdheXMgZm9yY2luZyB0cmFuc3BhcmVuY3kgdG8gZW5zdXJlIGFscGhhIGNoYW5uZWwgaXMgYWNjb3VudGVkIGZvci5cclxuICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IE1hdGVyaWFsVXRpbHMuR2V0Q2FudmFzRnJvbUltYWdlVGV4dHVyZShpbWFnZSk7XHJcbiAgICAgICAgICBjb25zdCByZXNpemVkSW1hZ2VTcmMgPSBjYW52YXMudG9EYXRhVVJMKHR5cGUpO1xyXG4gICAgICAgICAgLy8gY29uc3QgcmVzaXplZEltYWdlU3JjID0gTWF0ZXJpYWxVdGlscy5SZXNpemVJbWFnZShpbWFnZSwgdHJ1ZSk7XHJcbiAgICAgICAgICByZXNpemVkSW1hZ2Uuc3JjID0gcmVzaXplZEltYWdlU3JjO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmltYWdlQ2FjaGUuc2V0KGltYWdlQ2FjaGVkS2V5U3RyaW5nLCBpbWFnZSk7XHJcbiAgICAgICAgICByZXNvbHZlKGltYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIGltYWdlLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGFzeW5jIEdldE1hdGVyaWFsTWFwcyhtYXRlcmlhbDogTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIHRleHR1cmU6IFRleHR1cmUsIGRpbWVuc2lvbnM/OiBWZWN0b3IyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0ZXh0dXJlLnR5cGUpIHtcclxuICAgICAgY2FzZSBUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuOlxyXG4gICAgICAgIG1hdGVyaWFsLm1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuQ3VzdG9tVGlsZVRleHR1cmUodGV4dHVyZSk7XHJcbiAgICAgICAgbWF0ZXJpYWwubWFwLmNvbG9yU3BhY2UgPSBTUkdCQ29sb3JTcGFjZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNhc2UgVGV4dHVyZVR5cGUuQmFzaWM6XHJcbiAgICAgICAgbWF0ZXJpYWwubWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Sb3RhdGVkSW1hZ2VUZXh0dXJlKHRleHR1cmUsIHRleHR1cmUudXJsKTtcclxuICAgICAgICBtYXRlcmlhbC5tYXAuY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY2FzZSBUZXh0dXJlVHlwZS5QQlI6XHJcbiAgICAgICAgaWYgKHRleHR1cmUubWF0ZXJpYWxpemVVcmwpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1hdGVyaWFsaXplTWFwcyhtYXRlcmlhbCwgdGV4dHVyZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1hdGVyaWFsLm1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuUm90YXRlZEltYWdlVGV4dHVyZSh0ZXh0dXJlLCB0ZXh0dXJlLnVybCk7XHJcbiAgICAgICAgICBtYXRlcmlhbC5tYXAuY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgICAgICAgbWF0ZXJpYWwucm91Z2huZXNzTWFwID0gdGV4dHVyZS5yb3VnaG5lc3NNYXAgPyBhd2FpdCBNYXRlcmlhbFV0aWxzLlJvdGF0ZWRJbWFnZVRleHR1cmUodGV4dHVyZSwgdGV4dHVyZS5yb3VnaG5lc3NNYXApIDogbnVsbDtcclxuICAgICAgICAgIG1hdGVyaWFsLmJ1bXBNYXAgPSB0ZXh0dXJlLmJ1bXBNYXAgPyBhd2FpdCBNYXRlcmlhbFV0aWxzLlJvdGF0ZWRJbWFnZVRleHR1cmUodGV4dHVyZSwgdGV4dHVyZS5idW1wTWFwKSA6IG51bGw7XHJcbiAgICAgICAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSB0ZXh0dXJlLm5vcm1hbE1hcCA/IGF3YWl0IE1hdGVyaWFsVXRpbHMuUm90YXRlZEltYWdlVGV4dHVyZSh0ZXh0dXJlLCB0ZXh0dXJlLm5vcm1hbE1hcCkgOiBudWxsO1xyXG4gICAgICAgICAgbWF0ZXJpYWwubWV0YWxuZXNzTWFwID0gdGV4dHVyZS5tZXRhbG5lc3NNYXAgPyBhd2FpdCBNYXRlcmlhbFV0aWxzLlJvdGF0ZWRJbWFnZVRleHR1cmUodGV4dHVyZSwgdGV4dHVyZS5tZXRhbG5lc3NNYXApIDogbnVsbDtcclxuICAgICAgICAgIG1hdGVyaWFsLmFvTWFwID0gdGV4dHVyZS5hb01hcCA/IGF3YWl0IE1hdGVyaWFsVXRpbHMuUm90YXRlZEltYWdlVGV4dHVyZSh0ZXh0dXJlLCB0ZXh0dXJlLmFvTWFwKSA6IG51bGw7XHJcbiAgICAgICAgICBtYXRlcmlhbC5hbHBoYU1hcCA9IHRleHR1cmUuYWxwaGFNYXAgPyBhd2FpdCBNYXRlcmlhbFV0aWxzLlJvdGF0ZWRJbWFnZVRleHR1cmUodGV4dHVyZSwgdGV4dHVyZS5hbHBoYU1hcCkgOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGFzeW5jIGxvYWRNYXRlcmlhbGl6ZU1hcHMobWF0ZXJpYWw6IE1lc2hTdGFuZGFyZE1hdGVyaWFsLCB0ZXh0dXJlOiBUZXh0dXJlKSB7XHJcbiAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS5tYXRlcmlhbGl6ZVVybCArICdfZGlmZnVzZU9yaWdpbmFsLmpwZycsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pO1xyXG4gICAgbWF0ZXJpYWwubm9ybWFsTWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUubWF0ZXJpYWxpemVVcmwgKyAnX25vcm1hbC5qcGcnLCB0ZXh0dXJlLnN0cmV0Y2gsIHRleHR1cmUudGlsZVNpemUsIHRleHR1cmUucmVwZWF0WCwgdGV4dHVyZS5yZXBlYXRZLCB0ZXh0dXJlLmRpbWVuc2lvbnMsIHRleHR1cmUudGlsZVJvdGF0aW9uKTtcclxuICAgIG1hdGVyaWFsLnJvdWdobmVzc01hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbVVybCh0ZXh0dXJlLm1hdGVyaWFsaXplVXJsICsgJ19zbW9vdGhuZXNzLmpwZycsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pO1xyXG4gICAgbWF0ZXJpYWwubWV0YWxuZXNzTWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUubWF0ZXJpYWxpemVVcmwgKyAnX21ldGFsbGljLmpwZycsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pO1xyXG4gICAgbWF0ZXJpYWwuYW9NYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS5tYXRlcmlhbGl6ZVVybCArICdfYW8uanBnJywgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCB0ZXh0dXJlLnJlcGVhdFgsIHRleHR1cmUucmVwZWF0WSwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbik7XHJcbiAgICAvLyBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS5tYXRlcmlhbGl6ZVVybCArICdfaGVpZ2h0LmpwZycsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFkpO1xyXG4gICAgbWF0ZXJpYWwubWFwLmNvbG9yU3BhY2UgPSBTUkdCQ29sb3JTcGFjZTtcclxuICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgR2V0Q2FudmFzRnJvbUltYWdlVGV4dHVyZShpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHRleHR1cmU/OiBUZXh0dXJlLCBzaGlmdD86IGJvb2xlYW4sIGZsaXA/OiBib29sZWFuKTogSFRNTENhbnZhc0VsZW1lbnQge1xyXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjb25zdCB1c2VEaW1lbnNpb25zOiBib29sZWFuID0gdGV4dHVyZSAmJiAhIXRleHR1cmUuZGltZW5zaW9ucztcclxuICAgIGNvbnN0IGltZ1JhdGlvID0gaW1nLndpZHRoIC8gaW1nLmhlaWdodDtcclxuICAgIGxldCBtYXBSYXRpbyA9IDE7XHJcbiAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuICAgIGlmICh1c2VEaW1lbnNpb25zKSB7XHJcbiAgICAgIG1hcFJhdGlvID0gdGV4dHVyZS5kaW1lbnNpb25zLnggLyB0ZXh0dXJlLmRpbWVuc2lvbnMueTtcclxuICAgICAgY2FudmFzLndpZHRoID0gdGV4dHVyZS5kaW1lbnNpb25zLnggKiBNYXRlcmlhbFV0aWxzLmNhbnZhc1JhdGlvO1xyXG4gICAgICBjYW52YXMuaGVpZ2h0ID0gdGV4dHVyZS5kaW1lbnNpb25zLnkgKiBNYXRlcmlhbFV0aWxzLmNhbnZhc1JhdGlvO1xyXG4gICAgfVxyXG4gICAgbGV0IHRleHR1cmVXaWR0aDtcclxuICAgIGxldCB0ZXh0dXJlSGVpZ2h0O1xyXG4gICAgaWYgKGltZ1JhdGlvIDwgbWFwUmF0aW8pIHtcclxuICAgICAgLy8gd2lkZXIgdGhhbiB0aGUgcGljdHVyZTogc3RyZXRjaCB0aGUgd2lkdGggb2YgcGljdHVyZVxyXG4gICAgICB0ZXh0dXJlV2lkdGggPSBjYW52YXMud2lkdGg7XHJcbiAgICAgIHRleHR1cmVIZWlnaHQgPSB0ZXh0dXJlV2lkdGggLyBpbWdSYXRpbztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGhpZ2hlciB0aGFuIHRoZSBwaWN0dXJlOiBzdHJldGNoIHRoZSBoZWlnaHQgb2YgcGljdHVyZVxyXG4gICAgICB0ZXh0dXJlSGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcclxuICAgICAgdGV4dHVyZVdpZHRoID0gdGV4dHVyZUhlaWdodCAqIGltZ1JhdGlvO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGlsZUN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIGNvbnN0IHNjYWxlTm9ybSA9ICh0ZXh0dXJlICYmIHRleHR1cmUuc2NhbGUgPyB0ZXh0dXJlLnNjYWxlIDogMTAwKSAvIDEwMDtcclxuXHJcbiAgICBjb25zdCBvZmZzZXQ6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigwLCAwKTtcclxuICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUub2Zmc2V0KSB7XHJcbiAgICAgIG9mZnNldC5jb3B5KHRleHR1cmUub2Zmc2V0KS5kaXZpZGVTY2FsYXIoc2NhbGVOb3JtKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc1g6IG51bWJlciA9IHRleHR1cmVXaWR0aCAqIHNjYWxlTm9ybSAvIDI7XHJcbiAgICBjb25zdCB0cmFuc1k6IG51bWJlciA9IHRleHR1cmVIZWlnaHQgKiBzY2FsZU5vcm0gLyAyO1xyXG5cclxuICAgIGlmIChmbGlwKSB7XHJcbiAgICAgIHRpbGVDdHgudHJhbnNsYXRlKHRleHR1cmVXaWR0aCwgMCk7XHJcbiAgICAgIHRpbGVDdHguc2NhbGUoLTEsIDEpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNoaWZ0KSB7XHJcbiAgICAgIHRpbGVDdHgudHJhbnNsYXRlKFxyXG4gICAgICAgIHRyYW5zWCArICh1c2VEaW1lbnNpb25zID8gTWF0ZXJpYWxVdGlscy5jYW52YXNSYXRpbyA6IDEpICogb2Zmc2V0LngsXHJcbiAgICAgICAgdHJhbnNZICsgKHVzZURpbWVuc2lvbnMgPyBNYXRlcmlhbFV0aWxzLmNhbnZhc1JhdGlvIDogMSkgKiBvZmZzZXQueSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGV4dHVyZSAmJiAhIXRleHR1cmUucm90YXRpb24pIHtcclxuICAgICAgdGlsZUN0eC5yb3RhdGUodGV4dHVyZS5yb3RhdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aWxlQ3R4LmRyYXdJbWFnZShcclxuICAgICAgaW1nLFxyXG4gICAgICAwLFxyXG4gICAgICAwLFxyXG4gICAgICBpbWcud2lkdGgsXHJcbiAgICAgIGltZy5oZWlnaHQsXHJcbiAgICAgIChzaGlmdCA/IC10cmFuc1ggOiAwKSxcclxuICAgICAgKHNoaWZ0ID8gLXRyYW5zWSA6IDApLFxyXG4gICAgICB0ZXh0dXJlV2lkdGggKiBzY2FsZU5vcm0sXHJcbiAgICAgIHRleHR1cmVIZWlnaHQgKiBzY2FsZU5vcm1cclxuICAgICk7XHJcbiAgICByZXR1cm4gY2FudmFzO1xyXG4gIH1cclxuXHJcbiAgLy8gdXNlIGNhbnZhcyB0byBjcmVhdGUgdGV4dHVyZSBmcm9tIGZsaXBwZWQgcGhvdG9cclxuICBwdWJsaWMgc3RhdGljIGFzeW5jIEZyb21GbGlwcGVkSW1hZ2UodGV4dHVyZTogVGV4dHVyZSwgZGltZW5zaW9uczogVEhSRUUuVmVjdG9yMik6IFByb21pc2U8VEhSRUUuVGV4dHVyZT4ge1xyXG4gICAgY29uc3Qgb3JpZ0ltZyA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuTG9hZEltYWdlQ2FjaGVkKHRleHR1cmUuZGF0YSk7XHJcbiAgICBjb25zdCBjYW52YXMgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkdldENhbnZhc0Zyb21JbWFnZVRleHR1cmUob3JpZ0ltZywgdGV4dHVyZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgY29uc3QgdGhyZWVUZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoY2FudmFzKTtcclxuICAgIHRocmVlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICByZXR1cm4gdGhyZWVUZXh0dXJlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ3JlYXRlU2hpZnRlZERhdGFVcmwoaW1nOiBIVE1MSW1hZ2VFbGVtZW50LCB0ZXh0dXJlOiBUZXh0dXJlKTogYW55IHtcclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY29uc3Qgc2hpZnRDdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGNvbnN0IHRleHR1cmVXaWR0aCA9IGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcclxuICAgIGNvbnN0IHRleHR1cmVIZWlnaHQgPSBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuICAgIGNvbnN0IHNjYWxlTm9ybSA9IHRleHR1cmUuc2NhbGUgLyAxMDA7XHJcblxyXG4gICAgY29uc3QgdHJhbnNYID0gdGV4dHVyZS5vZmZzZXQueCAvIHNjYWxlTm9ybSArIHRleHR1cmVXaWR0aCAqIHNjYWxlTm9ybSAvIDI7XHJcbiAgICBjb25zdCB0cmFuc1kgPSB0ZXh0dXJlLm9mZnNldC55IC8gc2NhbGVOb3JtICsgdGV4dHVyZUhlaWdodCAqIHNjYWxlTm9ybSAvIDI7XHJcbiAgICBzaGlmdEN0eC50cmFuc2xhdGUodHJhbnNYLCB0cmFuc1kpO1xyXG5cclxuICAgIGlmICghIXRleHR1cmUucm90YXRpb24pIHtcclxuICAgICAgc2hpZnRDdHgucm90YXRlKHRleHR1cmUucm90YXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHNoaWZ0Q3R4LmRyYXdJbWFnZShcclxuICAgICAgaW1nLFxyXG4gICAgICAtdGV4dHVyZVdpZHRoICogc2NhbGVOb3JtIC8gMixcclxuICAgICAgLXRleHR1cmVIZWlnaHQgKiBzY2FsZU5vcm0gLyAyLFxyXG4gICAgICB0ZXh0dXJlV2lkdGggKiBzY2FsZU5vcm0sXHJcbiAgICAgIHRleHR1cmVIZWlnaHQgKiBzY2FsZU5vcm1cclxuICAgICk7XHJcblxyXG4gICAgaWYgKCEhdGV4dHVyZS5yb3RhdGlvbikge1xyXG4gICAgICBzaGlmdEN0eC5yb3RhdGUoLXRleHR1cmUucm90YXRpb24pO1xyXG4gICAgfVxyXG4gICAgc2hpZnRDdHgudHJhbnNsYXRlKC10cmFuc1gsIC10cmFuc1kpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCk7XHJcbiAgfVxyXG5cclxuICAvLyB1c2UgY2FudmFzIHRvIGNyZWF0ZSBjdXN0b20gdGV4dHVyZXNcclxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBDdXN0b21UaWxlVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XHJcbiAgICBjb25zdCBpbWcgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkxvYWRJbWFnZUNhY2hlZCh0ZXh0dXJlLmRhdGEpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5HZXRDYW52YXNGcm9tSW1hZ2VUZXh0dXJlKGltZywgdGV4dHVyZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICByZXR1cm4gTWF0ZXJpYWxVdGlscy5DcmVhdGVUaWxlRnJvbVRleHR1cmUoY2FudmFzLCB0ZXh0dXJlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIFJvdGF0ZWRJbWFnZVRleHR1cmUodGV4dHVyZTogVGV4dHVyZSwgdGV4dHVyZVVSTDogc3RyaW5nKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XHJcbiAgICBjb25zdCBpbWcgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkxvYWRJbWFnZUNhY2hlZCh0ZXh0dXJlVVJMKTtcclxuICAgIGNvbnN0IGNhbnZhcyA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuR2V0Q2FudmFzRnJvbUltYWdlVGV4dHVyZShpbWcsIHRleHR1cmUsIGZhbHNlLCB0cnVlKTtcclxuICAgIHJldHVybiBNYXRlcmlhbFV0aWxzLkNyZWF0ZVRpbGVGcm9tVGV4dHVyZShjYW52YXMsIHRleHR1cmUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgQ3JlYXRlVGlsZURhdGFVcmwoaW1nOiBIVE1MSW1hZ2VFbGVtZW50LCB0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh0eXBlb2YgaW1nID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpbWcgPSBhd2FpdCB0aGlzLkNyZWF0ZUltYWdlRWxlbWVudEZyb21Tb3VyY2UoaW1nKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY29uc3QgdGlsZVVuaXQgPSBpbWcud2lkdGggPCBpbWcuaGVpZ2h0ID8gaW1nLndpZHRoIDogaW1nLmhlaWdodDtcclxuICAgIGNhbnZhcy53aWR0aCA9IE1hdGVyaWFsVXRpbHMuY2FudmFzUmF0aW8gKiB0ZXh0dXJlLnRpbGVTaXplICogMTAwO1xyXG4gICAgY2FudmFzLmhlaWdodCA9IE1hdGVyaWFsVXRpbHMuY2FudmFzUmF0aW8gKiB0ZXh0dXJlLnRpbGVTaXplICogMTAwO1xyXG4gICAgY29uc3QgdGlsZUN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgdGlsZUN0eC5kcmF3SW1hZ2UoXHJcbiAgICAgIGltZyxcclxuICAgICAgMCwgMCxcclxuICAgICAgdGlsZVVuaXQsIHRpbGVVbml0LFxyXG4gICAgICAwLCAwLFxyXG4gICAgICBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHRcclxuICAgICk7XHJcbiAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgQ3JlYXRlVGlsZU1hcChpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHRleHR1cmU6IFRleHR1cmUsIG9EaW1lbnNpb25zOiBUSFJFRS5WZWN0b3IyLCBhZGp1c3RTY2FsZTogYm9vbGVhbiwgcmVwZWF0WD86IG51bWJlciwgcmVwZWF0WT86IG51bWJlcik6IFByb21pc2U8VEhSRUUuVGV4dHVyZT4ge1xyXG4gICAgaWYgKHR5cGVvZiBpbWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGltZyA9IGF3YWl0IHRoaXMuQ3JlYXRlSW1hZ2VFbGVtZW50RnJvbVNvdXJjZShpbWcpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IGFkanVzdFNjYWxlID8gb0RpbWVuc2lvbnMubXVsdGlwbHlTY2FsYXIoTWF0ZXJpYWxVdGlscy5jYW52YXNSYXRpbykgOiBvRGltZW5zaW9ucy5jbG9uZSgpO1xyXG4gICAgZGltZW5zaW9ucy54ID0gcmVwZWF0WCA/IGRpbWVuc2lvbnMueCAqIHJlcGVhdFggOiBkaW1lbnNpb25zLng7XHJcbiAgICBkaW1lbnNpb25zLnkgPSByZXBlYXRZID8gZGltZW5zaW9ucy55ICogcmVwZWF0WSA6IGRpbWVuc2lvbnMueTtcclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY2FudmFzLndpZHRoID0gZGltZW5zaW9ucy54O1xyXG4gICAgY2FudmFzLmhlaWdodCA9IGRpbWVuc2lvbnMueTtcclxuICAgIGNvbnN0IHJvdGF0aW9uID0gdGV4dHVyZS50aWxlUm90YXRpb247XHJcbiAgICBjb25zdCBpbWdTaXplID0gTWF0ZXJpYWxVdGlscy5jYW52YXNSYXRpbyAqIHRleHR1cmUudGlsZVNpemUgKiAxMDA7XHJcbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIC8vIHVzZSB0cmFuc2xhdGlvbiB0byBlbnN1cmUgdGhhdCB0ZXh0dXJlIGlzIHJvdGF0ZWQgYXJvdW5kIGNlbnRlclxyXG4gICAgY3R4LnRyYW5zbGF0ZShkaW1lbnNpb25zLnggLyAyLCBkaW1lbnNpb25zLnkgLyAyKTtcclxuICAgIGN0eC5yb3RhdGUocm90YXRpb24pO1xyXG4gICAgY3R4LnRyYW5zbGF0ZSgtZGltZW5zaW9ucy54IC8gMiwgLWRpbWVuc2lvbnMueSAvIDIpO1xyXG4gICAgLy8gY2FsY3VsYXRlIGJvdW5kaW5nIGJveCBzaXplIG9mIHJvdGF0ZWQgdGV4dHVyZVxyXG4gICAgY29uc3QgYmJIZWlnaHQgPSBNYXRoLmFicyhkaW1lbnNpb25zLnkgKiBNYXRoLmNvcyhyb3RhdGlvbikpICsgTWF0aC5hYnMoZGltZW5zaW9ucy54ICogTWF0aC5zaW4ocm90YXRpb24pKTtcclxuICAgIGNvbnN0IGJiV2lkdGggPSBNYXRoLmFicyhkaW1lbnNpb25zLnggKiBNYXRoLmNvcyhyb3RhdGlvbikpICsgTWF0aC5hYnMoZGltZW5zaW9ucy55ICogTWF0aC5zaW4ocm90YXRpb24pKTtcclxuICAgIC8vIGRyYXcgaW1hZ2VzIHRvIGNhbnZhcyB0byBjcmVhdGUgdGV4dHVyZVxyXG4gICAgZm9yIChsZXQgaSA9IE1hdGguZmxvb3IoLWJiV2lkdGggLyAyIC8gaW1nU2l6ZSk7IGkgPD0gYmJXaWR0aCAvIDIgLyBpbWdTaXplOyBpKyspIHtcclxuICAgICAgZm9yIChsZXQgaiA9IE1hdGguZmxvb3IoLWJiSGVpZ2h0IC8gMiAvIGltZ1NpemUpOyBqIDw9IGJiSGVpZ2h0IC8gMiAvIGltZ1NpemU7IGorKykge1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCBpICogaW1nU2l6ZSArIGRpbWVuc2lvbnMueCAvIDIsIGogKiBpbWdTaXplICsgZGltZW5zaW9ucy55IC8gMiwgaW1nU2l6ZSwgaW1nU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHRocmVlVGV4dHVyZSA9IG5ldyBUSFJFRS5UZXh0dXJlKGNhbnZhcyk7XHJcbiAgICB0aHJlZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRocmVlVGV4dHVyZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIENyZWF0ZVRpbGVGcm9tVGV4dHVyZShjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCB0ZXh0dXJlOiBUZXh0dXJlKTogVEhSRUUuVGV4dHVyZSB7XHJcbiAgICBjb25zdCB0aHJlZVRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZShjYW52YXMpO1xyXG4gICAgdGhyZWVUZXh0dXJlLndyYXBUID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7XHJcbiAgICB0aHJlZVRleHR1cmUud3JhcFMgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgIGNvbnN0IHJlcGVhdFg6IG51bWJlciA9IHRleHR1cmUudGlsZVNpemUgPyAodGV4dHVyZS5yZXBlYXRYID8gdGV4dHVyZS5yZXBlYXRYIDogMSkgLyB0ZXh0dXJlLnRpbGVTaXplIDogMTtcclxuICAgIGNvbnN0IHJlcGVhdFk6IG51bWJlciA9IHRleHR1cmUudGlsZVNpemUgPyAodGV4dHVyZS5yZXBlYXRZID8gdGV4dHVyZS5yZXBlYXRZIDogMSkgLyB0ZXh0dXJlLnRpbGVTaXplIDogMTtcclxuICAgIHRocmVlVGV4dHVyZS5yZXBlYXQuc2V0KHJlcGVhdFgsIHJlcGVhdFkpO1xyXG4gICAgdGhyZWVUZXh0dXJlLnJvdGF0aW9uID0gKHRleHR1cmUudGlsZVJvdGF0aW9uIHx8IDApICsgTWF0aC5QSTtcclxuICAgIHRocmVlVGV4dHVyZS5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICB0aHJlZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRocmVlVGV4dHVyZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIFJlYWRGaWxlQXNEYXRhVVJMKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTtcclxuICAgICAgZmlsZVJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KGVycm9yKTtcclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBUZXh0dXJlU291cmNlTW9kaWZpZWQodGV4dHVyZTogVGV4dHVyZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGV4dHVyZS5yb3RhdGlvbiB8fCB0ZXh0dXJlLnNjYWxlICE9PSAxMDBcclxuICAgICAgfHwgISF0ZXh0dXJlLm9mZnNldC54IHx8ICEhdGV4dHVyZS5vZmZzZXQueTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIENyZWF0ZUltYWdlRWxlbWVudEZyb21Tb3VyY2Uoc3JjOiBzdHJpbmcpOiBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+IHtcclxuICAgIGlmICghTWF0ZXJpYWxVdGlscy5pbWdFbGVtZW50KSB7XHJcbiAgICAgIE1hdGVyaWFsVXRpbHMuaW1nRWxlbWVudCA9IG5ldyBJbWFnZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICBNYXRlcmlhbFV0aWxzLmltZ0VsZW1lbnQub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoTWF0ZXJpYWxVdGlscy5pbWdFbGVtZW50KTtcclxuICAgICAgfTtcclxuICAgICAgTWF0ZXJpYWxVdGlscy5pbWdFbGVtZW50LnNyYyA9IHNyYztcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
407
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9jb3JlL3V0aWxzL21hdGVyaWFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBdUIsY0FBYyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUdwRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFPbEQsTUFBTSxPQUFPLGFBQWE7SUFnQmpCLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBWTtRQUNyQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVc7UUFDdkIsYUFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNyQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTSxNQUFNLENBQUMsT0FBTyxDQUNuQixHQUFXLEVBQUUsT0FBZ0IsRUFBRSxRQUFnQixFQUFFLE9BQWdCLEVBQUUsT0FBZ0IsRUFBRSxVQUEwQixFQUFFLFlBQXFCO1FBQ3RJLE1BQU0sS0FBSyxHQUFXLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNERBQTREO1FBQ2xJLE1BQU0s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Q3ZDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDckMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUM7WUFDRixhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTlhc0IseUJBQVcsR0FBRyxDQUFDLENBQUM7QUFDaEIsMkJBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztJQUNqRSxLQUFLLEVBQUUsUUFBUTtJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLE9BQU8sRUFBRSxHQUFHO0NBQ2IsQ0FBQyxDQUFDO0FBQ1csMkJBQWEsR0FBRyxJQUFJLENBQUM7QUFDcEIsdUJBQVMsR0FBVyxFQUFFLENBQUM7QUFFdkIsd0JBQVUsR0FBcUIsU0FBUyxDQUFDO0FBRTFDLHdCQUFVLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7QUFDakQsMEJBQVksR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtNZXNoU3RhbmRhcmRNYXRlcmlhbCwgU1JHQkNvbG9yU3BhY2UsIFZlY3RvcjJ9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0ICogYXMgbWQ1IGZyb20gJ21kNSc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7VGV4dHVyZVR5cGV9IGZyb20gJy4uL21vZGVsL3RleHR1cmUtdHlwZSc7XHJcblxyXG5pbnRlcmZhY2UgSW1hZ2VDYWNoZWRLZXkge1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIHJlc2l6ZTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVXRpbHMge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNhbnZhc1JhdGlvID0gNDtcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRXaW5kb3cgPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe1xyXG4gICAgY29sb3I6IDB4MDAwMDAwLFxyXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICBvcGFjaXR5OiAwLjBcclxuICB9KTtcclxuICBwdWJsaWMgc3RhdGljIE1BWF9ESU1FTlNJT04gPSAxMjAwO1xyXG4gIHByaXZhdGUgc3RhdGljIGFzc2V0UGF0aDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGltZ0VsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW1hZ2VDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBIVE1MSW1hZ2VFbGVtZW50PigpO1xyXG4gIHB1YmxpYyBzdGF0aWMgdGV4dHVyZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFRIUkVFLlRleHR1cmU+KCk7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2V0QXNzZXRQYXRoKHBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgTWF0ZXJpYWxVdGlscy5hc3NldFBhdGggPSBwYXRoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBDbGVhckNhY2hlcygpOiB2b2lkIHtcclxuICAgIE1hdGVyaWFsVXRpbHMuaW1hZ2VDYWNoZS5jbGVhcigpO1xyXG4gICAgY29uc3QgdGV4dHVyZXMgPSBBcnJheS5mcm9tKE1hdGVyaWFsVXRpbHMudGV4dHVyZUNhY2hlLnZhbHVlcygpKTtcclxuICAgIHRleHR1cmVzLmZvckVhY2goKHQpID0+IHQuZGlzcG9zZSgpKTtcclxuICAgIE1hdGVyaWFsVXRpbHMudGV4dHVyZUNhY2hlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEZyb21VcmwoXHJcbiAgICB1cmw6IHN0cmluZywgc3RyZXRjaDogYm9vbGVhbiwgdGlsZVNpemU6IG51bWJlciwgcmVwZWF0WD86IG51bWJlciwgcmVwZWF0WT86IG51bWJlciwgZGltZW5zaW9ucz86IFRIUkVFLlZlY3RvcjIsIHRpbGVSb3RhdGlvbj86IG51bWJlcik6IFByb21pc2U8VEhSRUUuVGV4dHVyZT4ge1xyXG4gICAgY29uc3QgcmF0aW86IG51bWJlciA9IGRpbWVuc2lvbnMgPyAoZGltZW5zaW9ucy54IC8gZGltZW5zaW9ucy55KSA6IDE7IC8vIFJlcXVpcmVkIHRvIGtlZXAgc2NhbGUgZXF1YWwgb24gc3VyZmFjZXMgb2YgYW55IGRpbWVuc2lvblxyXG4gICAgY29uc3QgdGlsZVNpemVNYXg6IG51bWJlciA9IDMwMDtcclxuXHJcbiAgICBpZiAodGhpcy50ZXh0dXJlQ2FjaGUuaGFzKHVybCkpIHtcclxuICAgICAgY29uc3QgdGV4dHVyZSA9IHRoaXMudGV4dHVyZUNhY2hlLmdldCh1cmwpLmNsb25lKCk7XHJcbiAgICAgIHRpbGVTaXplID0gKHRpbGVTaXplTWF4IC8gMTAwKSArIDAuMDEgLSB0aWxlU2l6ZTsgLy8gU2NhbGUgbmVnYXRpdmVseVxyXG4gICAgICBpZiAoIXN0cmV0Y2gpIHtcclxuICAgICAgICB0ZXh0dXJlLnJlcGVhdCA9IHJlcGVhdFggPyBuZXcgVmVjdG9yMigocmVwZWF0WCAqIHJhdGlvKSAqIHRpbGVTaXplLCAocmVwZWF0WSAqIHJhdGlvKSAqIHRpbGVTaXplKSA6XHJcbiAgICAgICAgICBuZXcgVmVjdG9yMih0aWxlU2l6ZSAqIHJhdGlvLCB0aWxlU2l6ZSAqIHJhdGlvKTtcclxuICAgICAgICB0ZXh0dXJlLnJvdGF0aW9uID0gdGlsZVJvdGF0aW9uID8gLXRpbGVSb3RhdGlvbiA6IDA7XHJcbiAgICAgICAgdGV4dHVyZS5jZW50ZXIgPSBuZXcgVmVjdG9yMigwLjUsIDAuNSk7XHJcbiAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0ZXh0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGV4dHVyZUxvYWRlciA9IG5ldyBUSFJFRS5UZXh0dXJlTG9hZGVyKCk7XHJcbiAgICAgICAgdGV4dHVyZUxvYWRlci5sb2FkKFxyXG4gICAgICAgICAgTWF0ZXJpYWxVdGlscy5hc3NldFBhdGggKyB1cmwsXHJcbiAgICAgICAgICB0aHJlZVRleHR1cmUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXN0cmV0Y2gpIHtcclxuICAgICAgICAgICAgICB0aHJlZVRleHR1cmUud3JhcFQgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgICAgICAgICAgICB0aHJlZVRleHR1cmUud3JhcFMgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgICAgICAgICAgICB0aHJlZVRleHR1cmUucmVwZWF0ID0gcmVwZWF0WCA/IG5ldyBWZWN0b3IyKChyZXBlYXRYICogcmF0aW8pICogdGlsZVNpemUsIChyZXBlYXRZICogcmF0aW8pICogdGlsZVNpemUpIDpcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKHRpbGVTaXplICogcmF0aW8sIHRpbGVTaXplICogcmF0aW8pO1xyXG4gICAgICAgICAgICAgIHRocmVlVGV4dHVyZS5yb3RhdGlvbiA9IHRpbGVSb3RhdGlvbiA/IC10aWxlUm90YXRpb24gOiAwO1xyXG4gICAgICAgICAgICAgIHRocmVlVGV4dHVyZS5jZW50ZXIgPSBuZXcgVmVjdG9yMigwLjUsIDAuNSk7XHJcbiAgICAgICAgICAgICAgdGhyZWVUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJlZVRleHR1cmUuYW5pc290cm9weSA9IDE2O1xyXG4gICAgICAgICAgICBNYXRlcmlhbFV0aWxzLnRleHR1cmVDYWNoZS5zZXQodXJsLCB0aHJlZVRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aHJlZVRleHR1cmUpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHVuZGVmaW5lZCwgLy8gb25wcm9ncmVzc1xyXG4gICAgICAgICAgcmVqZWN0XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8gdXNlIGNhbnZhcyB0byBjcmVhdGUgcm90YXRlZCB0ZXh0dXJlc1xyXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgUm90YXRlZENhbnZhc1RleHR1cmUodGV4dHVyZTogVGV4dHVyZSwgdGV4dHVyZVVSTDogc3RyaW5nLCBkaW1lbnNpb25zOiBUSFJFRS5WZWN0b3IyLCBhZGp1c3RTY2FsZTogYm9vbGVhbiwgcmVwZWF0WD86IG51bWJlciwgcmVwZWF0WT86IG51bWJlcik6IFByb21pc2U8VEhSRUUuVGV4dHVyZT4ge1xyXG4gICAgY29uc3QgaW1nID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQodGV4dHVyZVVSTCk7XHJcbiAgICByZXR1cm4gTWF0ZXJpYWxVdGlscy5DcmVhdGVUaWxlTWFwKGltZywgdGV4dHVyZSwgZGltZW5zaW9ucywgYWRqdXN0U2NhbGUsIHJlcGVhdFgsIHJlcGVhdFkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhc3luYyBDdXN0b21UaWxlTWFwVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlLCBkaW1lbnNpb25zOiBUSFJFRS5WZWN0b3IyKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XHJcbiAgICBsZXQgaW1nID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQodGV4dHVyZS5kYXRhKTtcclxuICAgIGlmIChNYXRlcmlhbFV0aWxzLlRleHR1cmVTb3VyY2VNb2RpZmllZCh0ZXh0dXJlKSkge1xyXG4gICAgICBpbWcgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkNyZWF0ZVNoaWZ0ZWREYXRhVXJsKGltZywgdGV4dHVyZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByYXRpbzogbnVtYmVyID0gZGltZW5zaW9ucy54IC8gZGltZW5zaW9ucy55O1xyXG4gICAgY29uc3QgdGlsZVNpemVNYXg6IG51bWJlciA9IDMwMDtcclxuICAgIGNvbnN0IG5ld1RpbGVTaXplOiBudW1iZXIgPSAodGlsZVNpemVNYXggLyAxMDApICsgMC4wMSAtIHRleHR1cmUudGlsZVNpemU7IC8vIFNjYWxlIG5lZ2F0aXZlbHlcclxuICAgIGNvbnN0IHQ6IFRIUkVFLlRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZSgpO1xyXG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAvLyBXaGVuIGltZyBpcyBjYWNoZWQgaXQgaXMgcmV0dXJuZWQgYXMgYSBiYXNlNjQgc3RyaW5nLCB0aGlzIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhbiBJbWFnZSBzaW5jZSBUZXh0dXJlIGRvZXMgbm90IGFjY2VwdCBiYXNlNjQgYXMgaW1hZ2UgZGF0YVxyXG4gICAgaWYgKGltZy50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2RhdGEnKSkge1xyXG4gICAgICBpbWFnZS5zcmMgPSBpbWcudG9TdHJpbmcoKTtcclxuICAgICAgdC5pbWFnZSA9IGltYWdlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdC5pbWFnZSA9IGltZztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRleHR1cmUuc3RyZXRjaCkge1xyXG4gICAgICB0LndyYXBUID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7XHJcbiAgICAgIHQud3JhcFMgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgICAgdC5yZXBlYXQgPSB0ZXh0dXJlLnJlcGVhdFggPyBuZXcgVmVjdG9yMigodGV4dHVyZS5yZXBlYXRYICogcmF0aW8pICogbmV3VGlsZVNpemUsICh0ZXh0dXJlLnJlcGVhdFkgKiByYXRpbykgKiBuZXdUaWxlU2l6ZSkgOlxyXG4gICAgICAgIG5ldyBWZWN0b3IyKG5ld1RpbGVTaXplICogcmF0aW8sIG5ld1RpbGVTaXplICogcmF0aW8pO1xyXG4gICAgICB0LnJvdGF0aW9uID0gdGV4dHVyZS50aWxlUm90YXRpb24gPyAtdGV4dHVyZS50aWxlUm90YXRpb24gOiAwO1xyXG4gICAgICB0LmNlbnRlciA9IG5ldyBWZWN0b3IyKDAuNSwgMC41KTtcclxuICAgICAgdC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0LmFuaXNvdHJvcHkgPSAxNjtcclxuICAgIHJldHVybiB0O1xyXG4gIH1cclxuXHJcbi8vIHVzZSBjYW52YXMgdG8gY3JlYXRlIHRleHR1cmUgZnJvbSBwaG90b1xyXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgRnJvbUltYWdlKHRleHR1cmU6IFRleHR1cmUvKiwgZGltZW5zaW9uczogVEhSRUUuVmVjdG9yMiovKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XHJcbiAgICBjb25zdCBpbWcgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkxvYWRJbWFnZUNhY2hlZCh0ZXh0dXJlLmRhdGEpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5HZXRDYW52YXNGcm9tSW1hZ2VUZXh0dXJlKGltZywgdGV4dHVyZSwgdHJ1ZSk7XHJcbiAgICBjb25zdCB0aHJlZVRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZShjYW52YXMpO1xyXG4gICAgdGhyZWVUZXh0dXJlLmNvbG9yU3BhY2UgPSBTUkdCQ29sb3JTcGFjZTtcclxuICAgIHRocmVlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICByZXR1cm4gdGhyZWVUZXh0dXJlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhc3luYyBSZWFkQW5kUmVzaXplUGhvdG9Bc0RhdGFVUkwoZmlsZTogRmlsZSk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xyXG4gICAgY29uc3QgaW1hZ2VTcmM6IHN0cmluZyA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuUmVhZEZpbGVBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICByZXR1cm4gTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQoaW1hZ2VTcmMsIGZhbHNlKTtcclxuICAgIC8vIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgICAvLyByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgLy8gICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAvLyAgICAgLy8gY29uc3QgdHJhbnNwYXJhbnQgPSBmaWxlLm5hbWUuZW5kc1dpdGgoJy5wbmcnKTtcclxuICAgIC8vICAgICBjb25zdCBjYW52YXMgPSBNYXRlcmlhbFV0aWxzLkdldENhbnZhc0Zyb21JbWFnZVRleHR1cmUoaW1hZ2UpO1xyXG4gICAgLy8gICAgIGNvbnN0IG5ld1NyYyA9IGNhbnZhcy50b0RhdGFVUkwoYGltYWdlLyR7ZmlsZS5uYW1lLmVuZHNXaXRoKCcucG5nJykgPyAncG5nJyA6ICdqcGcnfWApO1xyXG4gICAgLy8gICAgIC8vIGNvbnN0IG5ld1NyYyA9IE1hdGVyaWFsVXRpbHMuUmVzaXplSW1hZ2UoaW1hZ2UsIHRyYW5zcGFyYW50KTtcclxuICAgIC8vICAgICByZXNvbHZlKG5ld1NyYyk7XHJcbiAgICAvLyAgIH07XHJcbiAgICAvLyAgIGltYWdlLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgLy8gICBpbWFnZS5zcmMgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLlJlYWRGaWxlQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIExvYWRJbWFnZUNhY2hlZChzcmM6IHN0cmluZywgcmVzaXplOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xyXG4gICAgbGV0IGltYWdlQ2FjaGVkS2V5U3RyaW5nID0gJyc7XHJcbiAgICBjb25zdCBpc0RhdGFVcmkgPSBzcmMuaW5kZXhPZignYmFzZTY0JykgPiAtMTtcclxuICAgIGxldCBzcmNLZXk6IHN0cmluZyA9IHNyYztcclxuICAgIGxldCB0eXBlOiBzdHJpbmcgPSAnaW1hZ2UvanBlZyc7XHJcblxyXG4gICAgaWYgKGlzRGF0YVVyaSkge1xyXG4gICAgICAvLyBzcmNLZXkgPSBtZDUoc3JjKTtcclxuICAgICAgc3JjS2V5ID0gc3JjO1xyXG4gICAgICBpZiAoc3JjLmluZGV4T2YoJ2ltYWdlL3BuZycpID4gLTEpIHtcclxuICAgICAgICB0eXBlID0gJ2ltYWdlL3BuZyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGV4dDogc3RyaW5nID0gc3JjLnN1YnN0cihzcmMubGFzdEluZGV4T2YoJy4nKSArIDEsIHNyYy5sZW5ndGgpO1xyXG4gICAgICBpZiAoZXh0LmluZGV4T2YoJ3BuZycpID4gLTEpIHtcclxuICAgICAgICB0eXBlID0gJ2ltYWdlL3BuZyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGltYWdlQ2FjaGVkS2V5OiBJbWFnZUNhY2hlZEtleSA9IHtcclxuICAgICAgc3JjOiBzcmNLZXksXHJcbiAgICAgIHJlc2l6ZTogcmVzaXplXHJcbiAgICB9O1xyXG4gICAgaW1hZ2VDYWNoZWRLZXlTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShpbWFnZUNhY2hlZEtleSk7XHJcbiAgICBjb25zdCBpbWFnZUZyb21DYWNoZSA9IHRoaXMuaW1hZ2VDYWNoZS5nZXQoaW1hZ2VDYWNoZWRLZXlTdHJpbmcpO1xyXG4gICAgaWYgKGltYWdlRnJvbUNhY2hlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaW1hZ2VGcm9tQ2FjaGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xyXG4gICAgaW1hZ2Uuc3JjID0gaXNEYXRhVXJpID8gc3JjIDogKHNyYy5zdGFydHNXaXRoKE1hdGVyaWFsVXRpbHMuYXNzZXRQYXRoKSA/IHNyYyA6IE1hdGVyaWFsVXRpbHMuYXNzZXRQYXRoICsgc3JjKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBpZiAocmVzaXplKSB7XHJcbiAgICAgICAgICBjb25zdCByZXNpemVkSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICAgIHJlc2l6ZWRJbWFnZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VDYWNoZS5zZXQoaW1hZ2VDYWNoZWRLZXlTdHJpbmcsIHJlc2l6ZWRJbWFnZSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzaXplZEltYWdlKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXNpemVkSW1hZ2Uub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XHJcblxyXG4gICAgICAgICAgLy8gQ3VycmVudGx5IGFsd2F5cyBmb3JjaW5nIHRyYW5zcGFyZW5jeSB0byBlbnN1cmUgYWxwaGEgY2hhbm5lbCBpcyBhY2NvdW50ZWQgZm9yLlxyXG4gICAgICAgICAgY29uc3QgY2FudmFzID0gTWF0ZXJpYWxVdGlscy5HZXRDYW52YXNGcm9tSW1hZ2VUZXh0dXJlKGltYWdlKTtcclxuICAgICAgICAgIGNvbnN0IHJlc2l6ZWRJbWFnZVNyYyA9IGNhbnZhcy50b0RhdGFVUkwodHlwZSk7XHJcbiAgICAgICAgICAvLyBjb25zdCByZXNpemVkSW1hZ2VTcmMgPSBNYXRlcmlhbFV0aWxzLlJlc2l6ZUltYWdlKGltYWdlLCB0cnVlKTtcclxuICAgICAgICAgIHJlc2l6ZWRJbWFnZS5zcmMgPSByZXNpemVkSW1hZ2VTcmM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaW1hZ2VDYWNoZS5zZXQoaW1hZ2VDYWNoZWRLZXlTdHJpbmcsIGltYWdlKTtcclxuICAgICAgICAgIHJlc29sdmUoaW1hZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgaW1hZ2Uub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgR2V0TWF0ZXJpYWxNYXBzKG1hdGVyaWFsOiBNZXNoU3RhbmRhcmRNYXRlcmlhbCwgdGV4dHVyZTogVGV4dHVyZSwgZGltZW5zaW9ucz86IFZlY3RvcjIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRleHR1cmUudHlwZSkge1xyXG4gICAgICBjYXNlIFRleHR1cmVUeXBlLkN1c3RvbVBhdHRlcm46XHJcbiAgICAgICAgbWF0ZXJpYWwubWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5DdXN0b21UaWxlVGV4dHVyZSh0ZXh0dXJlKTtcclxuICAgICAgICBtYXRlcmlhbC5tYXAuY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY2FzZSBUZXh0dXJlVHlwZS5CYXNpYzpcclxuICAgICAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLlJvdGF0ZWRJbWFnZVRleHR1cmUodGV4dHVyZSwgdGV4dHVyZS51cmwpO1xyXG4gICAgICAgIG1hdGVyaWFsLm1hcC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBjYXNlIFRleHR1cmVUeXBlLlBCUjpcclxuICAgICAgICBpZiAodGV4dHVyZS5tYXRlcmlhbGl6ZVVybCkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWF0ZXJpYWxpemVNYXBzKG1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWF0ZXJpYWwubWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Sb3RhdGVkSW1hZ2VUZXh0dXJlKHRleHR1cmUsIHRleHR1cmUudXJsKTtcclxuICAgICAgICAgIG1hdGVyaWFsLm1hcC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICAgICAgICBtYXRlcmlhbC5yb3VnaG5lc3NNYXAgPSB0ZXh0dXJlLnJvdWdobmVzc01hcCA/IGF3YWl0IE1hdGVyaWFsVXRpbHMuUm90YXRlZEltYWdlVGV4dHVyZSh0ZXh0dXJlLCB0ZXh0dXJlLnJvdWdobmVzc01hcCkgOiBudWxsO1xyXG4gICAgICAgICAgbWF0ZXJpYWwuYnVtcE1hcCA9IHRleHR1cmUuYnVtcE1hcCA/IGF3YWl0IE1hdGVyaWFsVXRpbHMuUm90YXRlZEltYWdlVGV4dHVyZSh0ZXh0dXJlLCB0ZXh0dXJlLmJ1bXBNYXApIDogbnVsbDtcclxuICAgICAgICAgIG1hdGVyaWFsLm5vcm1hbE1hcCA9IHRleHR1cmUubm9ybWFsTWFwID8gYXdhaXQgTWF0ZXJpYWxVdGlscy5Sb3RhdGVkSW1hZ2VUZXh0dXJlKHRleHR1cmUsIHRleHR1cmUubm9ybWFsTWFwKSA6IG51bGw7XHJcbiAgICAgICAgICBtYXRlcmlhbC5tZXRhbG5lc3NNYXAgPSB0ZXh0dXJlLm1ldGFsbmVzc01hcCA/IGF3YWl0IE1hdGVyaWFsVXRpbHMuUm90YXRlZEltYWdlVGV4dHVyZSh0ZXh0dXJlLCB0ZXh0dXJlLm1ldGFsbmVzc01hcCkgOiBudWxsO1xyXG4gICAgICAgICAgbWF0ZXJpYWwuYW9NYXAgPSB0ZXh0dXJlLmFvTWFwID8gYXdhaXQgTWF0ZXJpYWxVdGlscy5Sb3RhdGVkSW1hZ2VUZXh0dXJlKHRleHR1cmUsIHRleHR1cmUuYW9NYXApIDogbnVsbDtcclxuICAgICAgICAgIG1hdGVyaWFsLmFscGhhTWFwID0gdGV4dHVyZS5hbHBoYU1hcCA/IGF3YWl0IE1hdGVyaWFsVXRpbHMuUm90YXRlZEltYWdlVGV4dHVyZSh0ZXh0dXJlLCB0ZXh0dXJlLmFscGhhTWFwKSA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbG9hZE1hdGVyaWFsaXplTWFwcyhtYXRlcmlhbDogTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIHRleHR1cmU6IFRleHR1cmUpIHtcclxuICAgIG1hdGVyaWFsLm1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbVVybCh0ZXh0dXJlLm1hdGVyaWFsaXplVXJsICsgJ19kaWZmdXNlT3JpZ2luYWwuanBnJywgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCB0ZXh0dXJlLnJlcGVhdFgsIHRleHR1cmUucmVwZWF0WSwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbik7XHJcbiAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS5tYXRlcmlhbGl6ZVVybCArICdfbm9ybWFsLmpwZycsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pO1xyXG4gICAgbWF0ZXJpYWwucm91Z2huZXNzTWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUubWF0ZXJpYWxpemVVcmwgKyAnX3Ntb290aG5lc3MuanBnJywgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCB0ZXh0dXJlLnJlcGVhdFgsIHRleHR1cmUucmVwZWF0WSwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbik7XHJcbiAgICBtYXRlcmlhbC5tZXRhbG5lc3NNYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS5tYXRlcmlhbGl6ZVVybCArICdfbWV0YWxsaWMuanBnJywgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCB0ZXh0dXJlLnJlcGVhdFgsIHRleHR1cmUucmVwZWF0WSwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbik7XHJcbiAgICBtYXRlcmlhbC5hb01hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbVVybCh0ZXh0dXJlLm1hdGVyaWFsaXplVXJsICsgJ19hby5qcGcnLCB0ZXh0dXJlLnN0cmV0Y2gsIHRleHR1cmUudGlsZVNpemUsIHRleHR1cmUucmVwZWF0WCwgdGV4dHVyZS5yZXBlYXRZLCB0ZXh0dXJlLmRpbWVuc2lvbnMsIHRleHR1cmUudGlsZVJvdGF0aW9uKTtcclxuICAgIC8vIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbVVybCh0ZXh0dXJlLm1hdGVyaWFsaXplVXJsICsgJ19oZWlnaHQuanBnJywgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCB0ZXh0dXJlLnJlcGVhdFgsIHRleHR1cmUucmVwZWF0WSk7XHJcbiAgICBtYXRlcmlhbC5tYXAuY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRDYW52YXNGcm9tSW1hZ2VUZXh0dXJlKGltZzogSFRNTEltYWdlRWxlbWVudCwgdGV4dHVyZT86IFRleHR1cmUsIHNoaWZ0PzogYm9vbGVhbiwgZmxpcD86IGJvb2xlYW4pOiBIVE1MQ2FudmFzRWxlbWVudCB7XHJcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGNvbnN0IHVzZURpbWVuc2lvbnM6IGJvb2xlYW4gPSB0ZXh0dXJlICYmICEhdGV4dHVyZS5kaW1lbnNpb25zO1xyXG4gICAgY29uc3QgaW1nUmF0aW8gPSBpbWcud2lkdGggLyBpbWcuaGVpZ2h0O1xyXG4gICAgbGV0IG1hcFJhdGlvID0gMTtcclxuICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgaWYgKHVzZURpbWVuc2lvbnMpIHtcclxuICAgICAgbWFwUmF0aW8gPSB0ZXh0dXJlLmRpbWVuc2lvbnMueCAvIHRleHR1cmUuZGltZW5zaW9ucy55O1xyXG4gICAgICBjYW52YXMud2lkdGggPSB0ZXh0dXJlLmRpbWVuc2lvbnMueCAqIE1hdGVyaWFsVXRpbHMuY2FudmFzUmF0aW87XHJcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSB0ZXh0dXJlLmRpbWVuc2lvbnMueSAqIE1hdGVyaWFsVXRpbHMuY2FudmFzUmF0aW87XHJcbiAgICB9XHJcbiAgICBsZXQgdGV4dHVyZVdpZHRoO1xyXG4gICAgbGV0IHRleHR1cmVIZWlnaHQ7XHJcbiAgICBpZiAoaW1nUmF0aW8gPCBtYXBSYXRpbykge1xyXG4gICAgICAvLyB3aWRlciB0aGFuIHRoZSBwaWN0dXJlOiBzdHJldGNoIHRoZSB3aWR0aCBvZiBwaWN0dXJlXHJcbiAgICAgIHRleHR1cmVXaWR0aCA9IGNhbnZhcy53aWR0aDtcclxuICAgICAgdGV4dHVyZUhlaWdodCA9IHRleHR1cmVXaWR0aCAvIGltZ1JhdGlvO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaGlnaGVyIHRoYW4gdGhlIHBpY3R1cmU6IHN0cmV0Y2ggdGhlIGhlaWdodCBvZiBwaWN0dXJlXHJcbiAgICAgIHRleHR1cmVIZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0dXJlV2lkdGggPSB0ZXh0dXJlSGVpZ2h0ICogaW1nUmF0aW87XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aWxlQ3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgY29uc3Qgc2NhbGVOb3JtID0gKHRleHR1cmUgJiYgdGV4dHVyZS5zY2FsZSA/IHRleHR1cmUuc2NhbGUgOiAxMDApIC8gMTAwO1xyXG5cclxuICAgIGNvbnN0IG9mZnNldDogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKDAsIDApO1xyXG4gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS5vZmZzZXQpIHtcclxuICAgICAgb2Zmc2V0LmNvcHkodGV4dHVyZS5vZmZzZXQpLmRpdmlkZVNjYWxhcihzY2FsZU5vcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zWDogbnVtYmVyID0gdGV4dHVyZVdpZHRoICogc2NhbGVOb3JtIC8gMjtcclxuICAgIGNvbnN0IHRyYW5zWTogbnVtYmVyID0gdGV4dHVyZUhlaWdodCAqIHNjYWxlTm9ybSAvIDI7XHJcblxyXG4gICAgaWYgKGZsaXApIHtcclxuICAgICAgdGlsZUN0eC50cmFuc2xhdGUodGV4dHVyZVdpZHRoLCAwKTtcclxuICAgICAgdGlsZUN0eC5zY2FsZSgtMSwgMSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2hpZnQpIHtcclxuICAgICAgdGlsZUN0eC50cmFuc2xhdGUoXHJcbiAgICAgICAgdHJhbnNYICsgKHVzZURpbWVuc2lvbnMgPyBNYXRlcmlhbFV0aWxzLmNhbnZhc1JhdGlvIDogMSkgKiBvZmZzZXQueCxcclxuICAgICAgICB0cmFuc1kgKyAodXNlRGltZW5zaW9ucyA/IE1hdGVyaWFsVXRpbHMuY2FudmFzUmF0aW8gOiAxKSAqIG9mZnNldC55KTtcclxuICAgIH1cclxuICAgIGlmICh0ZXh0dXJlICYmICEhdGV4dHVyZS5yb3RhdGlvbikge1xyXG4gICAgICB0aWxlQ3R4LnJvdGF0ZSh0ZXh0dXJlLnJvdGF0aW9uKTtcclxuICAgIH1cclxuICAgIHRpbGVDdHguZHJhd0ltYWdlKFxyXG4gICAgICBpbWcsXHJcbiAgICAgIDAsXHJcbiAgICAgIDAsXHJcbiAgICAgIGltZy53aWR0aCxcclxuICAgICAgaW1nLmhlaWdodCxcclxuICAgICAgKHNoaWZ0ID8gLXRyYW5zWCA6IDApLFxyXG4gICAgICAoc2hpZnQgPyAtdHJhbnNZIDogMCksXHJcbiAgICAgIHRleHR1cmVXaWR0aCAqIHNjYWxlTm9ybSxcclxuICAgICAgdGV4dHVyZUhlaWdodCAqIHNjYWxlTm9ybVxyXG4gICAgKTtcclxuICAgIHJldHVybiBjYW52YXM7XHJcbiAgfVxyXG5cclxuICAvLyB1c2UgY2FudmFzIHRvIGNyZWF0ZSB0ZXh0dXJlIGZyb20gZmxpcHBlZCBwaG90b1xyXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgRnJvbUZsaXBwZWRJbWFnZSh0ZXh0dXJlOiBUZXh0dXJlLCBkaW1lbnNpb25zOiBUSFJFRS5WZWN0b3IyKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XHJcbiAgICBjb25zdCBvcmlnSW1nID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQodGV4dHVyZS5kYXRhKTtcclxuICAgIGNvbnN0IGNhbnZhcyA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuR2V0Q2FudmFzRnJvbUltYWdlVGV4dHVyZShvcmlnSW1nLCB0ZXh0dXJlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICBjb25zdCB0aHJlZVRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZShjYW52YXMpO1xyXG4gICAgdGhyZWVUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aHJlZVRleHR1cmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBDcmVhdGVTaGlmdGVkRGF0YVVybChpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHRleHR1cmU6IFRleHR1cmUpOiBhbnkge1xyXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjb25zdCBzaGlmdEN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY29uc3QgdGV4dHVyZVdpZHRoID0gY2FudmFzLndpZHRoID0gaW1nLndpZHRoO1xyXG4gICAgY29uc3QgdGV4dHVyZUhlaWdodCA9IGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgY29uc3Qgc2NhbGVOb3JtID0gdGV4dHVyZS5zY2FsZSAvIDEwMDtcclxuXHJcbiAgICBjb25zdCB0cmFuc1ggPSB0ZXh0dXJlLm9mZnNldC54IC8gc2NhbGVOb3JtICsgdGV4dHVyZVdpZHRoICogc2NhbGVOb3JtIC8gMjtcclxuICAgIGNvbnN0IHRyYW5zWSA9IHRleHR1cmUub2Zmc2V0LnkgLyBzY2FsZU5vcm0gKyB0ZXh0dXJlSGVpZ2h0ICogc2NhbGVOb3JtIC8gMjtcclxuICAgIHNoaWZ0Q3R4LnRyYW5zbGF0ZSh0cmFuc1gsIHRyYW5zWSk7XHJcblxyXG4gICAgaWYgKCEhdGV4dHVyZS5yb3RhdGlvbikge1xyXG4gICAgICBzaGlmdEN0eC5yb3RhdGUodGV4dHVyZS5yb3RhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgc2hpZnRDdHguZHJhd0ltYWdlKFxyXG4gICAgICBpbWcsXHJcbiAgICAgIC10ZXh0dXJlV2lkdGggKiBzY2FsZU5vcm0gLyAyLFxyXG4gICAgICAtdGV4dHVyZUhlaWdodCAqIHNjYWxlTm9ybSAvIDIsXHJcbiAgICAgIHRleHR1cmVXaWR0aCAqIHNjYWxlTm9ybSxcclxuICAgICAgdGV4dHVyZUhlaWdodCAqIHNjYWxlTm9ybVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoISF0ZXh0dXJlLnJvdGF0aW9uKSB7XHJcbiAgICAgIHNoaWZ0Q3R4LnJvdGF0ZSgtdGV4dHVyZS5yb3RhdGlvbik7XHJcbiAgICB9XHJcbiAgICBzaGlmdEN0eC50cmFuc2xhdGUoLXRyYW5zWCwgLXRyYW5zWSk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoKTtcclxuICB9XHJcblxyXG4gIC8vIHVzZSBjYW52YXMgdG8gY3JlYXRlIGN1c3RvbSB0ZXh0dXJlc1xyXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIEN1c3RvbVRpbGVUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUpOiBQcm9taXNlPFRIUkVFLlRleHR1cmU+IHtcclxuICAgIGNvbnN0IGltZyA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuTG9hZEltYWdlQ2FjaGVkKHRleHR1cmUuZGF0YSk7XHJcbiAgICBjb25zdCBjYW52YXMgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkdldENhbnZhc0Zyb21JbWFnZVRleHR1cmUoaW1nLCB0ZXh0dXJlLCB0cnVlLCB0cnVlKTtcclxuICAgIHJldHVybiBNYXRlcmlhbFV0aWxzLkNyZWF0ZVRpbGVGcm9tVGV4dHVyZShjYW52YXMsIHRleHR1cmUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgUm90YXRlZEltYWdlVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlLCB0ZXh0dXJlVVJMOiBzdHJpbmcpOiBQcm9taXNlPFRIUkVFLlRleHR1cmU+IHtcclxuICAgIGNvbnN0IGltZyA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuTG9hZEltYWdlQ2FjaGVkKHRleHR1cmVVUkwpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5HZXRDYW52YXNGcm9tSW1hZ2VUZXh0dXJlKGltZywgdGV4dHVyZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgcmV0dXJuIE1hdGVyaWFsVXRpbHMuQ3JlYXRlVGlsZUZyb21UZXh0dXJlKGNhbnZhcywgdGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBDcmVhdGVUaWxlRGF0YVVybChpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHRleHR1cmU6IFRleHR1cmUpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHR5cGVvZiBpbWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGltZyA9IGF3YWl0IHRoaXMuQ3JlYXRlSW1hZ2VFbGVtZW50RnJvbVNvdXJjZShpbWcpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjb25zdCB0aWxlVW5pdCA9IGltZy53aWR0aCA8IGltZy5oZWlnaHQgPyBpbWcud2lkdGggOiBpbWcuaGVpZ2h0O1xyXG4gICAgY2FudmFzLndpZHRoID0gTWF0ZXJpYWxVdGlscy5jYW52YXNSYXRpbyAqIHRleHR1cmUudGlsZVNpemUgKiAxMDA7XHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gTWF0ZXJpYWxVdGlscy5jYW52YXNSYXRpbyAqIHRleHR1cmUudGlsZVNpemUgKiAxMDA7XHJcbiAgICBjb25zdCB0aWxlQ3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICB0aWxlQ3R4LmRyYXdJbWFnZShcclxuICAgICAgaW1nLFxyXG4gICAgICAwLCAwLFxyXG4gICAgICB0aWxlVW5pdCwgdGlsZVVuaXQsXHJcbiAgICAgIDAsIDAsXHJcbiAgICAgIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodFxyXG4gICAgKTtcclxuICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBDcmVhdGVUaWxlTWFwKGltZzogSFRNTEltYWdlRWxlbWVudCwgdGV4dHVyZTogVGV4dHVyZSwgb0RpbWVuc2lvbnM6IFRIUkVFLlZlY3RvcjIsIGFkanVzdFNjYWxlOiBib29sZWFuLCByZXBlYXRYPzogbnVtYmVyLCByZXBlYXRZPzogbnVtYmVyKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XHJcbiAgICBpZiAodHlwZW9mIGltZyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaW1nID0gYXdhaXQgdGhpcy5DcmVhdGVJbWFnZUVsZW1lbnRGcm9tU291cmNlKGltZyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkaW1lbnNpb25zID0gYWRqdXN0U2NhbGUgPyBvRGltZW5zaW9ucy5tdWx0aXBseVNjYWxhcihNYXRlcmlhbFV0aWxzLmNhbnZhc1JhdGlvKSA6IG9EaW1lbnNpb25zLmNsb25lKCk7XHJcbiAgICBkaW1lbnNpb25zLnggPSByZXBlYXRYID8gZGltZW5zaW9ucy54ICogcmVwZWF0WCA6IGRpbWVuc2lvbnMueDtcclxuICAgIGRpbWVuc2lvbnMueSA9IHJlcGVhdFkgPyBkaW1lbnNpb25zLnkgKiByZXBlYXRZIDogZGltZW5zaW9ucy55O1xyXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSBkaW1lbnNpb25zLng7XHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gZGltZW5zaW9ucy55O1xyXG4gICAgY29uc3Qgcm90YXRpb24gPSB0ZXh0dXJlLnRpbGVSb3RhdGlvbjtcclxuICAgIGNvbnN0IGltZ1NpemUgPSBNYXRlcmlhbFV0aWxzLmNhbnZhc1JhdGlvICogdGV4dHVyZS50aWxlU2l6ZSAqIDEwMDtcclxuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgLy8gdXNlIHRyYW5zbGF0aW9uIHRvIGVuc3VyZSB0aGF0IHRleHR1cmUgaXMgcm90YXRlZCBhcm91bmQgY2VudGVyXHJcbiAgICBjdHgudHJhbnNsYXRlKGRpbWVuc2lvbnMueCAvIDIsIGRpbWVuc2lvbnMueSAvIDIpO1xyXG4gICAgY3R4LnJvdGF0ZShyb3RhdGlvbik7XHJcbiAgICBjdHgudHJhbnNsYXRlKC1kaW1lbnNpb25zLnggLyAyLCAtZGltZW5zaW9ucy55IC8gMik7XHJcbiAgICAvLyBjYWxjdWxhdGUgYm91bmRpbmcgYm94IHNpemUgb2Ygcm90YXRlZCB0ZXh0dXJlXHJcbiAgICBjb25zdCBiYkhlaWdodCA9IE1hdGguYWJzKGRpbWVuc2lvbnMueSAqIE1hdGguY29zKHJvdGF0aW9uKSkgKyBNYXRoLmFicyhkaW1lbnNpb25zLnggKiBNYXRoLnNpbihyb3RhdGlvbikpO1xyXG4gICAgY29uc3QgYmJXaWR0aCA9IE1hdGguYWJzKGRpbWVuc2lvbnMueCAqIE1hdGguY29zKHJvdGF0aW9uKSkgKyBNYXRoLmFicyhkaW1lbnNpb25zLnkgKiBNYXRoLnNpbihyb3RhdGlvbikpO1xyXG4gICAgLy8gZHJhdyBpbWFnZXMgdG8gY2FudmFzIHRvIGNyZWF0ZSB0ZXh0dXJlXHJcbiAgICBmb3IgKGxldCBpID0gTWF0aC5mbG9vcigtYmJXaWR0aCAvIDIgLyBpbWdTaXplKTsgaSA8PSBiYldpZHRoIC8gMiAvIGltZ1NpemU7IGkrKykge1xyXG4gICAgICBmb3IgKGxldCBqID0gTWF0aC5mbG9vcigtYmJIZWlnaHQgLyAyIC8gaW1nU2l6ZSk7IGogPD0gYmJIZWlnaHQgLyAyIC8gaW1nU2l6ZTsgaisrKSB7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIGkgKiBpbWdTaXplICsgZGltZW5zaW9ucy54IC8gMiwgaiAqIGltZ1NpemUgKyBkaW1lbnNpb25zLnkgLyAyLCBpbWdTaXplLCBpbWdTaXplKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgdGhyZWVUZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoY2FudmFzKTtcclxuICAgIHRocmVlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICByZXR1cm4gdGhyZWVUZXh0dXJlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ3JlYXRlVGlsZUZyb21UZXh0dXJlKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIHRleHR1cmU6IFRleHR1cmUpOiBUSFJFRS5UZXh0dXJlIHtcclxuICAgIGNvbnN0IHRocmVlVGV4dHVyZSA9IG5ldyBUSFJFRS5UZXh0dXJlKGNhbnZhcyk7XHJcbiAgICB0aHJlZVRleHR1cmUud3JhcFQgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgIHRocmVlVGV4dHVyZS53cmFwUyA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xyXG4gICAgY29uc3QgcmVwZWF0WDogbnVtYmVyID0gdGV4dHVyZS50aWxlU2l6ZSA/ICh0ZXh0dXJlLnJlcGVhdFggPyB0ZXh0dXJlLnJlcGVhdFggOiAxKSAvIHRleHR1cmUudGlsZVNpemUgOiAxO1xyXG4gICAgY29uc3QgcmVwZWF0WTogbnVtYmVyID0gdGV4dHVyZS50aWxlU2l6ZSA/ICh0ZXh0dXJlLnJlcGVhdFkgPyB0ZXh0dXJlLnJlcGVhdFkgOiAxKSAvIHRleHR1cmUudGlsZVNpemUgOiAxO1xyXG4gICAgdGhyZWVUZXh0dXJlLnJlcGVhdC5zZXQocmVwZWF0WCwgcmVwZWF0WSk7XHJcbiAgICB0aHJlZVRleHR1cmUucm90YXRpb24gPSAodGV4dHVyZS50aWxlUm90YXRpb24gfHwgMCkgKyBNYXRoLlBJO1xyXG4gICAgdGhyZWVUZXh0dXJlLmNvbG9yU3BhY2UgPSBTUkdCQ29sb3JTcGFjZTtcclxuICAgIHRocmVlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICByZXR1cm4gdGhyZWVUZXh0dXJlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgUmVhZEZpbGVBc0RhdGFVUkwoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4gcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpO1xyXG4gICAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgICBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIFRleHR1cmVTb3VyY2VNb2RpZmllZCh0ZXh0dXJlOiBUZXh0dXJlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0ZXh0dXJlLnJvdGF0aW9uIHx8IHRleHR1cmUuc2NhbGUgIT09IDEwMFxyXG4gICAgICB8fCAhIXRleHR1cmUub2Zmc2V0LnggfHwgISF0ZXh0dXJlLm9mZnNldC55O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ3JlYXRlSW1hZ2VFbGVtZW50RnJvbVNvdXJjZShzcmM6IHN0cmluZyk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xyXG4gICAgaWYgKCFNYXRlcmlhbFV0aWxzLmltZ0VsZW1lbnQpIHtcclxuICAgICAgTWF0ZXJpYWxVdGlscy5pbWdFbGVtZW50ID0gbmV3IEltYWdlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIE1hdGVyaWFsVXRpbHMuaW1nRWxlbWVudC5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShNYXRlcmlhbFV0aWxzLmltZ0VsZW1lbnQpO1xyXG4gICAgICB9O1xyXG4gICAgICBNYXRlcmlhbFV0aWxzLmltZ0VsZW1lbnQuc3JjID0gc3JjO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|