@colijnit/homedecorator 255.1.4 → 255.1.5
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/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/presets.service.d.ts +3 -1
- package/app/homedecorator.component.d.ts +3 -1
- package/app/plugins/core3d/service/floor.service.d.ts +3 -1
- package/app/plugins/core3d/service/post-processing.service.d.ts +16 -4
- package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +10 -2
- package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +180 -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/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/texture-editor/texture-editor.component.d.ts +4 -1
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +0 -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 +514 -423
- 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/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/presets.service.js +13 -5
- package/esm2015/app/core/utils/material.utils.js +3 -3
- package/esm2015/app/homedecorator.component.js +25 -19
- package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +2 -2
- 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/service/ar.service.js +2 -1
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +2 -2
- package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +96 -35
- package/esm2015/app/plugins/core3d/service/scene.service.js +17 -11
- package/esm2015/app/plugins/core3d/service/ssr.service.js +1 -52
- 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 +264 -168
- package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
- 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 +24 -12
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
- package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +4 -15
- 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/model-dialog/model-dialog-furniture-list.component.js +3 -3
- package/fesm2015/colijnit-homedecorator.js +682 -483
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,17 +15,20 @@ import { ThreeMesh } from '../items/three-mesh';
|
|
|
15
15
|
import { isNill } from '../../../core/utils/function/is-nill.function';
|
|
16
16
|
import { FloorPlaneItem } from '../items/floor-plane-item';
|
|
17
17
|
import { ItemType } from '../items/item-type';
|
|
18
|
+
import { MessageType } from '../../../core/enum/message-type.enum';
|
|
18
19
|
import * as i0 from "@angular/core";
|
|
19
20
|
import * as i1 from "./scene.service";
|
|
20
21
|
import * as i2 from "./outline.service";
|
|
21
22
|
import * as i3 from "./item.service";
|
|
22
23
|
import * as i4 from "../../../core/service/homedecorator-settings.service";
|
|
24
|
+
import * as i5 from "../../../core/service/message-bus.service";
|
|
23
25
|
export class FloorService {
|
|
24
|
-
constructor(_sceneService, _outlineService, _itemService, _settingsService) {
|
|
26
|
+
constructor(_sceneService, _outlineService, _itemService, _settingsService, _messageService) {
|
|
25
27
|
this._sceneService = _sceneService;
|
|
26
28
|
this._outlineService = _outlineService;
|
|
27
29
|
this._itemService = _itemService;
|
|
28
30
|
this._settingsService = _settingsService;
|
|
31
|
+
this._messageService = _messageService;
|
|
29
32
|
this._floors = [];
|
|
30
33
|
this._subs = [];
|
|
31
34
|
this._subs.push(this._sceneService.sceneInitialized.subscribe((initialized) => {
|
|
@@ -70,6 +73,8 @@ export class FloorService {
|
|
|
70
73
|
else {
|
|
71
74
|
this._updateFloorMaterial(this._floors[0], floorMaterial, texture);
|
|
72
75
|
}
|
|
76
|
+
// emit new texture for appearance-section
|
|
77
|
+
this._messageService.emit(MessageType.ChangeTexture, texture);
|
|
73
78
|
// room.floorColor = null;
|
|
74
79
|
});
|
|
75
80
|
}
|
|
@@ -221,12 +226,12 @@ export class FloorService {
|
|
|
221
226
|
return floorCenter;
|
|
222
227
|
}
|
|
223
228
|
}
|
|
224
|
-
FloorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorService, deps: [{ token: i1.SceneService }, { token: i2.OutlineService }, { token: i3.ItemService }, { token: i4.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
229
|
+
FloorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorService, deps: [{ token: i1.SceneService }, { token: i2.OutlineService }, { token: i3.ItemService }, { token: i4.HomedecoratorSettingsService }, { token: i5.MessageBusService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
225
230
|
FloorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorService, providedIn: 'root' });
|
|
226
231
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorService, decorators: [{
|
|
227
232
|
type: Injectable,
|
|
228
233
|
args: [{
|
|
229
234
|
providedIn: 'root'
|
|
230
235
|
}]
|
|
231
|
-
}], ctorParameters: function () { return [{ type: i1.SceneService }, { type: i2.OutlineService }, { type: i3.ItemService }, { type: i4.HomedecoratorSettingsService }]; } });
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFDTCxjQUFjLEVBQ2QsS0FBSyxFQUNMLFVBQVUsRUFFVixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixJQUFJLEVBQ0osYUFBYSxFQUNiLEtBQUssRUFDTCxhQUFhLEVBQ2IsT0FBTyxFQUNQLE9BQU8sRUFDUixNQUFNLE9BQU8sQ0FBQztBQUdmLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHcEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFHckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBTzVDLE1BQU0sT0FBTyxZQUFZO0lBb0J2QixZQUNZLGFBQTJCLEVBQzNCLGVBQStCLEVBQy9CLFlBQXlCLEVBQzNCLGdCQUE4QztRQUg1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE4QjtRQW5CaEQsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFDL0IsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFvQmpDLElBQUksQ0FBQyxLQUFL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QUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDbEIsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2lCQUMzQjthQUNGO1lBQ0QsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDakMsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztLQUFBO0lBRU8sZUFBZSxDQUFDLE9BQWlCO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDbEMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM5QixRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOzswR0FwT1UsWUFBWTs4R0FBWixZQUFZLGNBRlgsTUFBTTs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDb2xvcixcclxuICBEb3VibGVTaWRlLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1lc2gsXHJcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXHJcbiAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsXHJcbiAgUGF0aCxcclxuICBQbGFuZUdlb21ldHJ5LFxyXG4gIFNoYXBlLFxyXG4gIFNoYXBlR2VvbWV0cnksXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtDb3JuZXIsIFJvb219IGZyb20gJy4uL2l0ZW1zL3dhbGwtb2JqZWN0cyc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtNYXRlcmlhbFV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL21hdGVyaWFsLnV0aWxzJztcclxuaW1wb3J0IHtUaHJlZU1lc2h9IGZyb20gJy4uL2l0ZW1zL3RocmVlLW1lc2gnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtPdXRsaW5lU2VydmljZX0gZnJvbSAnLi9vdXRsaW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JQbGFuZUl0ZW19IGZyb20gJy4uL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW1UeXBlfSBmcm9tICcuLi9pdGVtcy9pdGVtLXR5cGUnO1xyXG5pbXBvcnQge1JlZmxlY3Rvcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL29iamVjdHMvUmVmbGVjdG9yJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZsb29yU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHByaXZhdGUgX2dyb3VuZFBsYW5lOiBNZXNoO1xyXG4gIHByaXZhdGUgX2Zsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtO1xyXG5cclxuICBwcml2YXRlIF9mbG9vcnM6IEZsb29yUGxhbmVJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9taXJyb3JQbGFuZTogUmVmbGVjdG9yO1xyXG5cclxuICBwdWJsaWMgZ2V0IGdyb3VuZFBsYW5lKCk6IE1lc2gge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dyb3VuZFBsYW5lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBncm91bmRQbGFuZShtZXNoOiBNZXNoKSB7XHJcbiAgICB0aGlzLl9ncm91bmRQbGFuZSA9IG1lc2g7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmxvb3JUb0NvbmZpZ3VyZTogRmxvb3JQbGFuZUl0ZW07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBfb3V0bGluZVNlcnZpY2U6IE91dGxpbmVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lSW5pdGlhbGl6ZWQuc3Vic2NyaWJlKChpbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChpbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgdGhpcy5fY3JlYXRlR3JvdW5kUGxhbmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gKCkgPT4gdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgVXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLl9ncm91bmRQbGFuZSk7XHJcbiAgICB0aGlzLl9mbG9vcnMuZm9yRWFjaChmID0+IFV0aWxzLkRpc3Bvc2VPYmplY3QoZikpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yUGxhbmUoKTogRmxvb3JQbGFuZUl0ZW0ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zsb29yUGxhbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0Rmxvb3JUZXh0dXJlKHJvb206IFJvb20sIHRleHR1cmU6IFRleHR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbTtcclxuICAgIGlmIChyb29tKSB7XHJcbiAgICAgIGZsb29yUGxhbmUgPSByb29tLmZsb29yUGxhbmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmbG9vclBsYW5lID0gdGhpcy5fZmxvb3JzWzBdO1xyXG4gICAgfVxyXG4gICAgZmxvb3JQbGFuZS5yZXNldEdlb21ldHJ5KCk7XHJcbiAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLnNpbXBsZVBsYW5lKSB7XHJcbiAgICAgIGZsb29yUGxhbmUudXBkYXRlR2VvbWV0cnkobmV3IFBsYW5lR2VvbWV0cnkoNiwgNikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmxvb3JNYXRlcmlhbCA9IGF3YWl0IHRoaXMuX2NyZWF0ZUZsb29yTWF0ZXJpYWwobnVsbCwgdGV4dHVyZSk7XHJcbiAgICBpZiAocm9vbSkge1xyXG4gICAgICB0aGlzLl91cGRhdGVGbG9vck1hdGVyaWFsKHJvb20uZmxvb3JQbGFuZSwgZmxvb3JNYXRlcmlhbCwgdGV4dHVyZSk7XHJcbiAgICAgIHJvb20uZmxvb3JUZXh0dXJlID0gdGV4dHVyZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZUZsb29yTWF0ZXJpYWwodGhpcy5fZmxvb3JzWzBdLCBmbG9vck1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgIH1cclxuICAgIC8vIHJvb20uZmxvb3JDb2xvciA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0Rmxvb3JDb2xvcihyb29tOiBSb29tLCBjb2xvcjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBjb25zdCBmbG9vclBsYW5lID0gdGhpcy5nZW5lcmF0ZUZsb29yUGxhbmUoY29sb3IsIG51bGwsIHJvb20uY29ybmVycyk7XHJcbiAgICAvLyBmbG9vclBsYW5lLnVzZXJEYXRhID0ge3Jvb206IHJvb219O1xyXG4gICAgLy8gdGhpcy5yZW1vdmVGbG9vcihyb29tLmZsb29yUGxhbmUsIGZhbHNlKTtcclxuICAgIC8vIHJvb20uZmxvb3JQbGFuZSA9IGZsb29yUGxhbmU7XHJcbiAgICBjb25zdCBmbG9vck1hdGVyaWFsID0gYXdhaXQgdGhpcy5fY3JlYXRlRmxvb3JNYXRlcmlhbChjb2xvciwgbnVsbCk7XHJcbiAgICB0aGlzLl91cGRhdGVGbG9vck1hdGVyaWFsKHJvb20uZmxvb3JQbGFuZSwgZmxvb3JNYXRlcmlhbCk7XHJcbiAgICByb29tLmZsb29yVGV4dHVyZSA9IG51bGw7XHJcbiAgICByb29tLmZsb29yQ29sb3IgPSBjb2xvcjtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UudXBkYXRlUGF0aFRyYWNlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZ2hMaWdodEZsb29yKGZsb29yT2JqZWN0OiBGbG9vclBsYW5lSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKGZsb29yT2JqZWN0ICYmIGZsb29yT2JqZWN0LnV1aWQpIHtcclxuICAgICAgY29uc3QgY3VycmVudEZsb29yOiBGbG9vclBsYW5lSXRlbSA9IHRoaXMuX2Zsb29ycy5maW5kKGYgPT4gZi51dWlkID09PSBmbG9vck9iamVjdC51dWlkKTtcclxuICAgICAgaWYgKGN1cnJlbnRGbG9vcikge1xyXG4gICAgICAgIHRoaXMuX291dGxpbmVTZXJ2aWNlLnNob3dPdXRsaW5lKGN1cnJlbnRGbG9vcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1bkhpZ2hMaWdodEZsb29ycygpOiB2b2lkIHtcclxuICAgIHRoaXMuX291dGxpbmVTZXJ2aWNlLmhpZGVPdXRsaW5lKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uZmlndXJlRmxvb3IoZmxvb3JPYmplY3Q6IEZsb29yUGxhbmVJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsb29yVG9Db25maWd1cmUgPSBmbG9vck9iamVjdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVGbG9vcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mbG9vcnMuZm9yRWFjaChmbG9vciA9PiB7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QoZmxvb3IpO1xyXG4gICAgICB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGZsb29yKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZmxvb3JzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVGbG9vclBsYW5lKFxyXG4gICAgY29sb3I6IENvbG9yIHwgc3RyaW5nIHwgbnVtYmVyLCB0ZXh0dXJlPzogVGV4dHVyZSwgY29ybmVycz86IENvcm5lcltdLCBuZXN0ZWRSb29tcz86IGFueSwgZmxvb3JHZW9tZXRyeT86IEJ1ZmZlckdlb21ldHJ5KTogUHJvbWlzZTxGbG9vclBsYW5lSXRlbT4ge1xyXG4gICAgbGV0IGdlb21ldHJ5LCBzaGFwZTtcclxuICAgIGlmIChjb3JuZXJzKSB7XHJcbiAgICAgIGNvbnN0IHBvaW50cyA9IGNvcm5lcnMubWFwKGNvcm5lciA9PlxyXG4gICAgICAgIG5ldyBWZWN0b3IyKGNvcm5lci54LCBjb3JuZXIueSkpO1xyXG4gICAgICBzaGFwZSA9IG5ldyBTaGFwZShwb2ludHMpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGhvbGVzIGZvciBuZXN0ZWQgcm9vbXNcclxuICAgICAgaWYgKG5lc3RlZFJvb21zKSB7XHJcbiAgICAgICAgbmVzdGVkUm9vbXNcclxuICAgICAgICAgIC5tYXAoKG5lc3RlZFJvb20pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5lc3RlZFJvb20uaW50ZXJpb3JDb3JuZXJzLm1hcChjb3JuZXIgPT5cclxuICAgICAgICAgICAgICBuZXcgVmVjdG9yMihjb3JuZXIueCwgY29ybmVyLnkpKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKG5lc3RlZFJvb20gPT4gVXRpbHMucG9seWdvbkluc2lkZVBvbHlnb24obmVzdGVkUm9vbSwgcG9pbnRzKSlcclxuICAgICAgICAgIC5maWx0ZXIoKG5lc3RlZFJvb20sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlcclxuICAgICAgICAgICAgICAuc2xpY2UoaW5kZXggKyAxKVxyXG4gICAgICAgICAgICAgIC5ldmVyeShsYXJnZXJOZXN0ZWRSb29tID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMucG9seWdvbkluc2lkZVBvbHlnb24obmVzdGVkUm9vbSwgbGFyZ2VyTmVzdGVkUm9vbSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmZvckVhY2goaG9sZVBvaW50ID0+IHNoYXBlLmhvbGVzLnB1c2gobmV3IFBhdGgoaG9sZVBvaW50KSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZmxvb3JHZW9tZXRyeSkge1xyXG4gICAgICBnZW9tZXRyeSA9IGZsb29yR2VvbWV0cnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBnZW9tZXRyeSA9IG5ldyBTaGFwZUdlb21ldHJ5KHNoYXBlKS5jZW50ZXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAvLyBmbG9vck1hdGVyaWFsLm1ldGFsbmVzcyA9IDA7XHJcbiAgICBnZW9tZXRyeS5yb3RhdGVYKE1hdGguUEkgLyAyKTtcclxuXHJcbiAgICBjb25zdCBmbG9vck1hdGVyaWFsID0gYXdhaXQgdGhpcy5fY3JlYXRlRmxvb3JNYXRlcmlhbChjb2xvciwgdGV4dHVyZSk7XHJcblxyXG4gICAgY29uc3QgZmxvb3JNZXNoOiBNZXNoID0gbmV3IFRocmVlTWVzaChnZW9tZXRyeSwgZmxvb3JNYXRlcmlhbCk7XHJcbiAgICBjb25zdCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbSA9IG5ldyBGbG9vclBsYW5lSXRlbSh7aXRlbVR5cGU6IEl0ZW1UeXBlLkZsb29yRGVjb3JhdGlvbn0sIGZsb29yTWVzaCk7XHJcbiAgICBmbG9vclBsYW5lLm5hbWUgPSAnZmxvb3ItcGxhbmUnO1xyXG4gICAgLy8gZmxvb3JQbGFuZS5yb3RhdGlvbi5zZXQoTWF0aC5QSSAvIDIsIDAsIDApO1xyXG4gICAgZmxvb3JQbGFuZS5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuICAgIGZsb29yUGxhbmUuY2FzdFNoYWRvdyA9IGZhbHNlO1xyXG4gICAgY29uc3QgZmxvb3JDZW50ZXIgPSBjb3JuZXJzID8gdGhpcy5fZ2V0Rmxvb3JDZW50ZXIoY29ybmVycykgOiBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgIGZsb29yUGxhbmUucG9zaXRpb24uc2V0KGZsb29yQ2VudGVyLngsIDAuMDAwMSwgZmxvb3JDZW50ZXIueik7XHJcbiAgICB0aGlzLl9hZGRGbG9vcihmbG9vclBsYW5lLCBmYWxzZSk7XHJcbiAgICB0aGlzLl9mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmxvb3JQbGFuZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGbG9vclkoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9ncm91bmRQbGFuZS5wb3NpdGlvbi55O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUZsb29yKGZsb29yOiBGbG9vclBsYW5lSXRlbSwgZm9yY2VSZW5kZXI6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mbG9vcnMuc3BsaWNlKHRoaXMuX2Zsb29ycy5pbmRleE9mKGZsb29yKSwgMSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KGZsb29yLCBmb3JjZVJlbmRlcik7XHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGZsb29yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZEZsb29yKGZsb29yOiBGbG9vclBsYW5lSXRlbSwgZm9yY2VSZW5kZXI6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mbG9vcnMucHVzaChmbG9vcik7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYWRkT2JqZWN0KGZsb29yLCBmb3JjZVJlbmRlcik7XHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5hZGRJdGVtKGZsb29yLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVGbG9vck1hdGVyaWFsKGZsb29yOiBGbG9vclBsYW5lSXRlbSwgZmxvb3JNYXRlcmlhbDogTWF0ZXJpYWwsIHRleHR1cmU/OiBUZXh0dXJlKTogdm9pZCB7XHJcbiAgICBVdGlscy5EaXNwb3NlTWF0ZXJpYWwoZmxvb3IuZ2V0TWF0ZXJpYWwoKSk7XHJcbiAgICBmbG9vci5mbG9vck1hdGVyaWFsID0gZmxvb3JNYXRlcmlhbDtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UudXBkYXRlUGF0aFRyYWNlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlR3JvdW5kUGxhbmUoKTogdm9pZCB7XHJcbiAgICAvLyBncm91bmQgcGxhbmUgdXNlZCB0byBmaW5kIGludGVyc2VjdGlvbnNcclxuICAgIGNvbnN0IHNpemUgPSAxMDAwO1xyXG4gICAgdGhpcy5fZ3JvdW5kUGxhbmUgPSBuZXcgTWVzaChcclxuICAgICAgbmV3IFBsYW5lR2VvbWV0cnkoc2l6ZSwgc2l6ZSksXHJcbiAgICAgIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7dmlzaWJsZTogZmFsc2UsIHRyYW5zcGFyZW50OiB0cnVlLCBvcGFjaXR5OiAwfSkpO1xyXG4gICAgdGhpcy5fZ3JvdW5kUGxhbmUucm90YXRpb24ueCA9IC1NYXRoLlBJIC8gMjtcclxuICAgIHRoaXMuX2dyb3VuZFBsYW5lLm5hbWUgPSAnZ3JvdW5kLXBsYW5lJztcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QodGhpcy5fZ3JvdW5kUGxhbmUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlRmxvb3JNYXRlcmlhbChjb2xvcjogQ29sb3IgfCBzdHJpbmcgfCBudW1iZXIsIHRleHR1cmU/OiBUZXh0dXJlKTogUHJvbWlzZTxNZXNoU3RhbmRhcmRNYXRlcmlhbD4ge1xyXG4gICAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xyXG4gICAgICBzaWRlOiBEb3VibGVTaWRlXHJcbiAgICB9O1xyXG4gICAgaWYgKGNvbG9yKSB7XHJcbiAgICAgIG9wdGlvbnMuY29sb3IgPSBjb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmbG9vck1hdGVyaWFsID0gbmV3IE1lc2hTdGFuZGFyZE1hdGVyaWFsKG9wdGlvbnMpOyAvLyBUT0RPOiBUeXBlIG9mIG1hdGVyaWFsIHNob3VsZCBiZSBiYXNlZCBvbiBhdmFpbGFibGUgbWFwc1xyXG4gICAgZmxvb3JNYXRlcmlhbC5wb2x5Z29uT2Zmc2V0ID0gdHJ1ZTtcclxuICAgIGZsb29yTWF0ZXJpYWwucG9seWdvbk9mZnNldEZhY3RvciA9IDAuNTtcclxuICAgIGZsb29yTWF0ZXJpYWwubmFtZSA9ICdkZWZhdWx0X2Zsb29ybWF0ZXJpYWwnO1xyXG4gICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgYXdhaXQgTWF0ZXJpYWxVdGlscy5HZXRNYXRlcmlhbE1hcHMoZmxvb3JNYXRlcmlhbCwgdGV4dHVyZSk7XHJcbiAgICAgIC8vIFJvdWdobmVzcyB2YWx1ZSBpcyBzZXQgdG8gMC44IGlmIG5vIHZhbHVlIGlzIGRlZmluZWQsIHRoaXMgcHJldmVudHMgaGlnaGx5IHJlZmxlY3RpdmUgZmxvb3JzXHJcbiAgICAgIGlmICh0ZXh0dXJlLmNvbG9yKSB7XHJcbiAgICAgICAgZmxvb3JNYXRlcmlhbC5jb2xvciA9IG5ldyBDb2xvcihwYXJzZUludCh0ZXh0dXJlLmNvbG9yLCAwKSk7XHJcbiAgICAgIH1cclxuICAgICAgZmxvb3JNYXRlcmlhbC5yb3VnaG5lc3MgPSAhaXNOaWxsKHRleHR1cmUucm91Z2huZXNzKSA/IHRleHR1cmUucm91Z2huZXNzIDogMC44O1xyXG4gICAgICBmbG9vck1hdGVyaWFsLm1ldGFsbmVzcyA9ICFpc05pbGwodGV4dHVyZS5tZXRhbG5lc3MpID8gdGV4dHVyZS5tZXRhbG5lc3MgOiAwO1xyXG4gICAgICBmbG9vck1hdGVyaWFsLmJ1bXBTY2FsZSA9ICFpc05pbGwodGV4dHVyZS5idW1wU2NhbGUpID8gdGV4dHVyZS5idW1wU2NhbGUgOiAxO1xyXG4gICAgICBpZiAodGV4dHVyZS5taXJyb3IpIHtcclxuICAgICAgICBmbG9vck1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICBmbG9vck1hdGVyaWFsLm9wYWNpdHkgPSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmbG9vck1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIHJldHVybiBmbG9vck1hdGVyaWFsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Rmxvb3JDZW50ZXIoY29ybmVyczogQ29ybmVyW10pOiBWZWN0b3IzIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IGNvcm5lcnMubWFwKGNvcm5lciA9PlxyXG4gICAgICBuZXcgVmVjdG9yMyhjb3JuZXIueCwgMCwgY29ybmVyLnkpKTtcclxuICAgIGNvbnN0IGZsb29yQ2VudGVyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIGNvbnN0IGZsb29yR2VvID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCkuc2V0RnJvbVBvaW50cyhwb2ludHMpO1xyXG4gICAgZmxvb3JHZW8uY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICBmbG9vckdlby5ib3VuZGluZ0JveC5nZXRDZW50ZXIoZmxvb3JDZW50ZXIpO1xyXG4gICAgcmV0dXJuIGZsb29yQ2VudGVyO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
236
|
+
}], ctorParameters: function () { return [{ type: i1.SceneService }, { type: i2.OutlineService }, { type: i3.ItemService }, { type: i4.HomedecoratorSettingsService }, { type: i5.MessageBusService }]; } });
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFDTCxjQUFjLEVBQ2QsS0FBSyxFQUNMLFVBQVUsRUFFVixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixJQUFJLEVBQ0osYUFBYSxFQUNiLEtBQUssRUFDTCxhQUFhLEVBQ2IsT0FBTyxFQUNQLE9BQU8sRUFDUixNQUFNLE9BQU8sQ0FBQztBQUdmLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHcEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFHckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFLakUsTUFBTSxPQUFPLFlBQVk7SUFvQnZCLFlBQ1UsYUFBMkIsRUFDM0IsZUFBK0IsRUFDL0IsWUFBeUIsRUFDekIsZ0JBQThDLEVBQzlDLGVBQWtDO1FBSmxDLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQThCO1FBQzlDLG9CQUFlLEdBQWYsZUFB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QUFDOzswR0F2T1UsWUFBWTs4R0FBWixZQUFZLGNBRlgsTUFBTTs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDb2xvcixcclxuICBEb3VibGVTaWRlLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1lc2gsXHJcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXHJcbiAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsXHJcbiAgUGF0aCxcclxuICBQbGFuZUdlb21ldHJ5LFxyXG4gIFNoYXBlLFxyXG4gIFNoYXBlR2VvbWV0cnksXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtDb3JuZXIsIFJvb219IGZyb20gJy4uL2l0ZW1zL3dhbGwtb2JqZWN0cyc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtNYXRlcmlhbFV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL21hdGVyaWFsLnV0aWxzJztcclxuaW1wb3J0IHtUaHJlZU1lc2h9IGZyb20gJy4uL2l0ZW1zL3RocmVlLW1lc2gnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtPdXRsaW5lU2VydmljZX0gZnJvbSAnLi9vdXRsaW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JQbGFuZUl0ZW19IGZyb20gJy4uL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW1UeXBlfSBmcm9tICcuLi9pdGVtcy9pdGVtLXR5cGUnO1xyXG5pbXBvcnQge1JlZmxlY3Rvcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL29iamVjdHMvUmVmbGVjdG9yJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmxvb3JTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBfZ3JvdW5kUGxhbmU6IE1lc2g7XHJcbiAgcHJpdmF0ZSBfZmxvb3JQbGFuZTogRmxvb3JQbGFuZUl0ZW07XHJcblxyXG4gIHByaXZhdGUgX2Zsb29yczogRmxvb3JQbGFuZUl0ZW1bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHByaXZhdGUgX21pcnJvclBsYW5lOiBSZWZsZWN0b3I7XHJcblxyXG4gIHB1YmxpYyBnZXQgZ3JvdW5kUGxhbmUoKTogTWVzaCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ3JvdW5kUGxhbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGdyb3VuZFBsYW5lKG1lc2g6IE1lc2gpIHtcclxuICAgIHRoaXMuX2dyb3VuZFBsYW5lID0gbWVzaDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmbG9vclRvQ29uZmlndXJlOiBGbG9vclBsYW5lSXRlbTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX291dGxpbmVTZXJ2aWNlOiBPdXRsaW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmVJbml0aWFsaXplZC5zdWJzY3JpYmUoKGluaXRpYWxpemVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9jcmVhdGVHcm91bmRQbGFuZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSAoKSA9PiB0aGlzLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICBVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuX2dyb3VuZFBsYW5lKTtcclxuICAgIHRoaXMuX2Zsb29ycy5mb3JFYWNoKGYgPT4gVXRpbHMuRGlzcG9zZU9iamVjdChmKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rmxvb3JQbGFuZSgpOiBGbG9vclBsYW5lSXRlbSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxvb3JQbGFuZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRGbG9vclRleHR1cmUocm9vbTogUm9vbSwgdGV4dHVyZTogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGZsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtO1xyXG4gICAgaWYgKHJvb20pIHtcclxuICAgICAgZmxvb3JQbGFuZSA9IHJvb20uZmxvb3JQbGFuZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZsb29yUGxhbmUgPSB0aGlzLl9mbG9vcnNbMF07XHJcbiAgICB9XHJcbiAgICBmbG9vclBsYW5lLnJlc2V0R2VvbWV0cnkoKTtcclxuICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUuc2ltcGxlUGxhbmUpIHtcclxuICAgICAgZmxvb3JQbGFuZS51cGRhdGVHZW9tZXRyeShuZXcgUGxhbmVHZW9tZXRyeSg2LCA2KSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmbG9vck1hdGVyaWFsID0gYXdhaXQgdGhpcy5fY3JlYXRlRmxvb3JNYXRlcmlhbChudWxsLCB0ZXh0dXJlKTtcclxuICAgIGlmIChyb29tKSB7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZUZsb29yTWF0ZXJpYWwocm9vbS5mbG9vclBsYW5lLCBmbG9vck1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdXBkYXRlRmxvb3JNYXRlcmlhbCh0aGlzLl9mbG9vcnNbMF0sIGZsb29yTWF0ZXJpYWwsIHRleHR1cmUpO1xyXG4gICAgfVxyXG4gICAgLy8gZW1pdCBuZXcgdGV4dHVyZSBmb3IgYXBwZWFyYW5jZS1zZWN0aW9uXHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkNoYW5nZVRleHR1cmUsIHRleHR1cmUpO1xyXG4gICAgLy8gcm9vbS5mbG9vckNvbG9yID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRGbG9vckNvbG9yKHJvb206IFJvb20sIGNvbG9yOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGNvbnN0IGZsb29yUGxhbmUgPSB0aGlzLmdlbmVyYXRlRmxvb3JQbGFuZShjb2xvciwgbnVsbCwgcm9vbS5jb3JuZXJzKTtcclxuICAgIC8vIGZsb29yUGxhbmUudXNlckRhdGEgPSB7cm9vbTogcm9vbX07XHJcbiAgICAvLyB0aGlzLnJlbW92ZUZsb29yKHJvb20uZmxvb3JQbGFuZSwgZmFsc2UpO1xyXG4gICAgLy8gcm9vbS5mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIGNvbnN0IGZsb29yTWF0ZXJpYWwgPSBhd2FpdCB0aGlzLl9jcmVhdGVGbG9vck1hdGVyaWFsKGNvbG9yLCBudWxsKTtcclxuICAgIHRoaXMuX3VwZGF0ZUZsb29yTWF0ZXJpYWwocm9vbS5mbG9vclBsYW5lLCBmbG9vck1hdGVyaWFsKTtcclxuICAgIHJvb20uZmxvb3JUZXh0dXJlID0gbnVsbDtcclxuICAgIHJvb20uZmxvb3JDb2xvciA9IGNvbG9yO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlnaExpZ2h0Rmxvb3IoZmxvb3JPYmplY3Q6IEZsb29yUGxhbmVJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAoZmxvb3JPYmplY3QgJiYgZmxvb3JPYmplY3QudXVpZCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Rmxvb3I6IEZsb29yUGxhbmVJdGVtID0gdGhpcy5fZmxvb3JzLmZpbmQoZiA9PiBmLnV1aWQgPT09IGZsb29yT2JqZWN0LnV1aWQpO1xyXG4gICAgICBpZiAoY3VycmVudEZsb29yKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0bGluZVNlcnZpY2Uuc2hvd091dGxpbmUoY3VycmVudEZsb29yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVuSGlnaExpZ2h0Rmxvb3JzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3V0bGluZVNlcnZpY2UuaGlkZU91dGxpbmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25maWd1cmVGbG9vcihmbG9vck9iamVjdDogRmxvb3JQbGFuZUl0ZW0pOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvb3JUb0NvbmZpZ3VyZSA9IGZsb29yT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUZsb29ycygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zsb29ycy5mb3JFYWNoKGZsb29yID0+IHtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChmbG9vcik7XHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0oZmxvb3IpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9mbG9vcnMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUZsb29yUGxhbmUoXHJcbiAgICBjb2xvcjogQ29sb3IgfCBzdHJpbmcgfCBudW1iZXIsIHRleHR1cmU/OiBUZXh0dXJlLCBjb3JuZXJzPzogQ29ybmVyW10sIG5lc3RlZFJvb21zPzogYW55LCBmbG9vckdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnkpOiBQcm9taXNlPEZsb29yUGxhbmVJdGVtPiB7XHJcbiAgICBsZXQgZ2VvbWV0cnksIHNoYXBlO1xyXG4gICAgaWYgKGNvcm5lcnMpIHtcclxuICAgICAgY29uc3QgcG9pbnRzID0gY29ybmVycy5tYXAoY29ybmVyID0+XHJcbiAgICAgICAgbmV3IFZlY3RvcjIoY29ybmVyLngsIGNvcm5lci55KSk7XHJcbiAgICAgIHNoYXBlID0gbmV3IFNoYXBlKHBvaW50cyk7XHJcblxyXG4gICAgICAvLyBjcmVhdGUgaG9sZXMgZm9yIG5lc3RlZCByb29tc1xyXG4gICAgICBpZiAobmVzdGVkUm9vbXMpIHtcclxuICAgICAgICBuZXN0ZWRSb29tc1xyXG4gICAgICAgICAgLm1hcCgobmVzdGVkUm9vbSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmVzdGVkUm9vbS5pbnRlcmlvckNvcm5lcnMubWFwKGNvcm5lciA9PlxyXG4gICAgICAgICAgICAgIG5ldyBWZWN0b3IyKGNvcm5lci54LCBjb3JuZXIueSkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5maWx0ZXIobmVzdGVkUm9vbSA9PiBVdGlscy5wb2x5Z29uSW5zaWRlUG9seWdvbihuZXN0ZWRSb29tLCBwb2ludHMpKVxyXG4gICAgICAgICAgLmZpbHRlcigobmVzdGVkUm9vbSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnJheVxyXG4gICAgICAgICAgICAgIC5zbGljZShpbmRleCArIDEpXHJcbiAgICAgICAgICAgICAgLmV2ZXJ5KGxhcmdlck5lc3RlZFJvb20gPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFVdGlscy5wb2x5Z29uSW5zaWRlUG9seWdvbihuZXN0ZWRSb29tLCBsYXJnZXJOZXN0ZWRSb29tKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZm9yRWFjaChob2xlUG9pbnQgPT4gc2hhcGUuaG9sZXMucHVzaChuZXcgUGF0aChob2xlUG9pbnQpKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmbG9vckdlb21ldHJ5KSB7XHJcbiAgICAgIGdlb21ldHJ5ID0gZmxvb3JHZW9tZXRyeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdlb21ldHJ5ID0gbmV3IFNoYXBlR2VvbWV0cnkoc2hhcGUpLmNlbnRlcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIC8vIGZsb29yTWF0ZXJpYWwubWV0YWxuZXNzID0gMDtcclxuICAgIGdlb21ldHJ5LnJvdGF0ZVgoTWF0aC5QSSAvIDIpO1xyXG5cclxuICAgIGNvbnN0IGZsb29yTWF0ZXJpYWwgPSBhd2FpdCB0aGlzLl9jcmVhdGVGbG9vck1hdGVyaWFsKGNvbG9yLCB0ZXh0dXJlKTtcclxuXHJcbiAgICBjb25zdCBmbG9vck1lc2g6IE1lc2ggPSBuZXcgVGhyZWVNZXNoKGdlb21ldHJ5LCBmbG9vck1hdGVyaWFsKTtcclxuICAgIGNvbnN0IGZsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtID0gbmV3IEZsb29yUGxhbmVJdGVtKHtpdGVtVHlwZTogSXRlbVR5cGUuRmxvb3JEZWNvcmF0aW9ufSwgZmxvb3JNZXNoKTtcclxuICAgIGZsb29yUGxhbmUubmFtZSA9ICdmbG9vci1wbGFuZSc7XHJcbiAgICAvLyBmbG9vclBsYW5lLnJvdGF0aW9uLnNldChNYXRoLlBJIC8gMiwgMCwgMCk7XHJcbiAgICBmbG9vclBsYW5lLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgZmxvb3JQbGFuZS5jYXN0U2hhZG93ID0gZmFsc2U7XHJcbiAgICBjb25zdCBmbG9vckNlbnRlciA9IGNvcm5lcnMgPyB0aGlzLl9nZXRGbG9vckNlbnRlcihjb3JuZXJzKSA6IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgZmxvb3JQbGFuZS5wb3NpdGlvbi5zZXQoZmxvb3JDZW50ZXIueCwgMC4wMDAxLCBmbG9vckNlbnRlci56KTtcclxuICAgIHRoaXMuX2FkZEZsb29yKGZsb29yUGxhbmUsIGZhbHNlKTtcclxuICAgIHRoaXMuX2Zsb29yUGxhbmUgPSBmbG9vclBsYW5lO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHJldHVybiBmbG9vclBsYW5lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yWSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dyb3VuZFBsYW5lLnBvc2l0aW9uLnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRmxvb3IoZmxvb3I6IEZsb29yUGxhbmVJdGVtLCBmb3JjZVJlbmRlcjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zsb29ycy5zcGxpY2UodGhpcy5fZmxvb3JzLmluZGV4T2YoZmxvb3IpLCAxKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QoZmxvb3IsIGZvcmNlUmVuZGVyKTtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0oZmxvb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkRmxvb3IoZmxvb3I6IEZsb29yUGxhbmVJdGVtLCBmb3JjZVJlbmRlcjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zsb29ycy5wdXNoKGZsb29yKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QoZmxvb3IsIGZvcmNlUmVuZGVyKTtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oZmxvb3IsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUZsb29yTWF0ZXJpYWwoZmxvb3I6IEZsb29yUGxhbmVJdGVtLCBmbG9vck1hdGVyaWFsOiBNYXRlcmlhbCwgdGV4dHVyZT86IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIFV0aWxzLkRpc3Bvc2VNYXRlcmlhbChmbG9vci5nZXRNYXRlcmlhbCgpKTtcclxuICAgIGZsb29yLmZsb29yTWF0ZXJpYWwgPSBmbG9vck1hdGVyaWFsO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVHcm91bmRQbGFuZSgpOiB2b2lkIHtcclxuICAgIC8vIGdyb3VuZCBwbGFuZSB1c2VkIHRvIGZpbmQgaW50ZXJzZWN0aW9uc1xyXG4gICAgY29uc3Qgc2l6ZSA9IDEwMDA7XHJcbiAgICB0aGlzLl9ncm91bmRQbGFuZSA9IG5ldyBNZXNoKFxyXG4gICAgICBuZXcgUGxhbmVHZW9tZXRyeShzaXplLCBzaXplKSxcclxuICAgICAgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHt2aXNpYmxlOiBmYWxzZSwgdHJhbnNwYXJlbnQ6IHRydWUsIG9wYWNpdHk6IDB9KSk7XHJcbiAgICB0aGlzLl9ncm91bmRQbGFuZS5yb3RhdGlvbi54ID0gLU1hdGguUEkgLyAyO1xyXG4gICAgdGhpcy5fZ3JvdW5kUGxhbmUubmFtZSA9ICdncm91bmQtcGxhbmUnO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdCh0aGlzLl9ncm91bmRQbGFuZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVGbG9vck1hdGVyaWFsKGNvbG9yOiBDb2xvciB8IHN0cmluZyB8IG51bWJlciwgdGV4dHVyZT86IFRleHR1cmUpOiBQcm9taXNlPE1lc2hTdGFuZGFyZE1hdGVyaWFsPiB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XHJcbiAgICAgIHNpZGU6IERvdWJsZVNpZGVcclxuICAgIH07XHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgb3B0aW9ucy5jb2xvciA9IGNvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZsb29yTWF0ZXJpYWwgPSBuZXcgTWVzaFN0YW5kYXJkTWF0ZXJpYWwob3B0aW9ucyk7IC8vIFRPRE86IFR5cGUgb2YgbWF0ZXJpYWwgc2hvdWxkIGJlIGJhc2VkIG9uIGF2YWlsYWJsZSBtYXBzXHJcbiAgICBmbG9vck1hdGVyaWFsLnBvbHlnb25PZmZzZXQgPSB0cnVlO1xyXG4gICAgZmxvb3JNYXRlcmlhbC5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC41O1xyXG4gICAgZmxvb3JNYXRlcmlhbC5uYW1lID0gJ2RlZmF1bHRfZmxvb3JtYXRlcmlhbCc7XHJcbiAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICBhd2FpdCBNYXRlcmlhbFV0aWxzLkdldE1hdGVyaWFsTWFwcyhmbG9vck1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgICAgLy8gUm91Z2huZXNzIHZhbHVlIGlzIHNldCB0byAwLjggaWYgbm8gdmFsdWUgaXMgZGVmaW5lZCwgdGhpcyBwcmV2ZW50cyBoaWdobHkgcmVmbGVjdGl2ZSBmbG9vcnNcclxuICAgICAgaWYgKHRleHR1cmUuY29sb3IpIHtcclxuICAgICAgICBmbG9vck1hdGVyaWFsLmNvbG9yID0gbmV3IENvbG9yKHBhcnNlSW50KHRleHR1cmUuY29sb3IsIDApKTtcclxuICAgICAgfVxyXG4gICAgICBmbG9vck1hdGVyaWFsLnJvdWdobmVzcyA9ICFpc05pbGwodGV4dHVyZS5yb3VnaG5lc3MpID8gdGV4dHVyZS5yb3VnaG5lc3MgOiAwLjg7XHJcbiAgICAgIGZsb29yTWF0ZXJpYWwubWV0YWxuZXNzID0gIWlzTmlsbCh0ZXh0dXJlLm1ldGFsbmVzcykgPyB0ZXh0dXJlLm1ldGFsbmVzcyA6IDA7XHJcbiAgICAgIGZsb29yTWF0ZXJpYWwuYnVtcFNjYWxlID0gIWlzTmlsbCh0ZXh0dXJlLmJ1bXBTY2FsZSkgPyB0ZXh0dXJlLmJ1bXBTY2FsZSA6IDE7XHJcbiAgICAgIGlmICh0ZXh0dXJlLm1pcnJvcikge1xyXG4gICAgICAgIGZsb29yTWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIGZsb29yTWF0ZXJpYWwub3BhY2l0eSA9IDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZsb29yTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZsb29yTWF0ZXJpYWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRGbG9vckNlbnRlcihjb3JuZXJzOiBDb3JuZXJbXSk6IFZlY3RvcjMge1xyXG4gICAgY29uc3QgcG9pbnRzID0gY29ybmVycy5tYXAoY29ybmVyID0+XHJcbiAgICAgIG5ldyBWZWN0b3IzKGNvcm5lci54LCAwLCBjb3JuZXIueSkpO1xyXG4gICAgY29uc3QgZmxvb3JDZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgY29uc3QgZmxvb3JHZW8gPSBuZXcgQnVmZmVyR2VvbWV0cnkoKS5zZXRGcm9tUG9pbnRzKHBvaW50cyk7XHJcbiAgICBmbG9vckdlby5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuICAgIGZsb29yR2VvLmJvdW5kaW5nQm94LmdldENlbnRlcihmbG9vckNlbnRlcik7XHJcbiAgICByZXR1cm4gZmxvb3JDZW50ZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Color,
|
|
2
|
+
import { Color, HalfFloatType, WebGLRenderTarget } from 'three';
|
|
3
3
|
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';
|
|
4
4
|
import GUI from 'three/examples/jsm/libs/lil-gui.module.min';
|
|
5
5
|
import { N8AOPass } from 'n8ao';
|
|
6
6
|
import { ConfigurationKey } from '../../../core/enum/configuration-key.enum';
|
|
7
|
-
import { TAARenderPass } from 'three/examples/jsm/postprocessing/TAARenderPass';
|
|
8
7
|
import { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass';
|
|
9
8
|
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass';
|
|
9
|
+
import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader';
|
|
10
|
+
import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';
|
|
11
|
+
import { BlendShader } from 'three/examples/jsm/shaders/BlendShader';
|
|
10
12
|
import * as i0 from "@angular/core";
|
|
11
13
|
import * as i1 from "../../../core/service/configuration.service";
|
|
12
14
|
export class PostProcessingService {
|
|
@@ -43,37 +45,87 @@ export class PostProcessingService {
|
|
|
43
45
|
this._renderer = renderer;
|
|
44
46
|
this._scene = scene;
|
|
45
47
|
this._camera = camera;
|
|
46
|
-
this.
|
|
48
|
+
this._width = width;
|
|
49
|
+
this._height = height;
|
|
50
|
+
this._postProcessingGui = new GUI();
|
|
51
|
+
this._postProcessingGui.hide();
|
|
52
|
+
this._renderPass = new RenderPass(this._scene, this._camera);
|
|
53
|
+
this._outputPass = new OutputPass();
|
|
54
|
+
this._initAoComposer();
|
|
55
|
+
this._initAaComposer();
|
|
56
|
+
this._initBlendComposer();
|
|
57
|
+
}
|
|
58
|
+
_initAaComposer() {
|
|
59
|
+
this._aaRenderTarget = new WebGLRenderTarget(this._width, this._height, {
|
|
60
|
+
samples: 4,
|
|
61
|
+
type: HalfFloatType /*,
|
|
62
|
+
minFilter: NearestFilter,
|
|
63
|
+
magFilter: NearestFilter,
|
|
64
|
+
format: RGBAFormat,
|
|
65
|
+
colorSpace: SRGBColorSpace*/
|
|
66
|
+
});
|
|
67
|
+
this._aaComposer = new EffectComposer(this._renderer, this._aaRenderTarget);
|
|
68
|
+
this._aaComposer.renderToScreen = false;
|
|
69
|
+
const fxaaPass = new ShaderPass(FXAAShader);
|
|
70
|
+
const pixelRatio = this._renderer.getPixelRatio();
|
|
71
|
+
// fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / (this._width * pixelRatio);
|
|
72
|
+
// fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / (this._height * pixelRatio);
|
|
73
|
+
fxaaPass.uniforms['resolution'].value.x = 1 / (this._width * pixelRatio);
|
|
74
|
+
fxaaPass.uniforms['resolution'].value.y = 1 / (this._height * pixelRatio);
|
|
75
|
+
// this._taaRenderPass = new TAARenderPass(this._scene, this._camera, 0x000000, 0);
|
|
76
|
+
// this._taaRenderPass.unbiased = true;
|
|
77
|
+
// this._taaRenderPass.sampleLevel = 4;
|
|
78
|
+
// this._renderPass.enabled = false;
|
|
79
|
+
// sao
|
|
80
|
+
// this._saoPass = new SAOPass( this._scene, this._camera, new Vector2(2048, 2048));
|
|
81
|
+
// this._saoPass.resolution.set(2048, 2048);
|
|
82
|
+
// this._saoPass.renderToScreen = true;
|
|
83
|
+
// this._saoPass.enabled = true;
|
|
84
|
+
this._aaComposer.addPass(this._renderPass);
|
|
85
|
+
// this._aaComposer.addPass(this._taaRenderPass);
|
|
86
|
+
this._aaComposer.addPass(fxaaPass);
|
|
87
|
+
this._aaComposer.addPass(this._outputPass);
|
|
88
|
+
this._createGuiTaaPass();
|
|
89
|
+
}
|
|
90
|
+
_initAoComposer() {
|
|
91
|
+
this._aoRenderTarget = new WebGLRenderTarget(this._width, this._height, {
|
|
92
|
+
samples: 4,
|
|
93
|
+
type: HalfFloatType /*,
|
|
47
94
|
minFilter: NearestFilter,
|
|
48
95
|
magFilter: NearestFilter,
|
|
49
96
|
format: RGBAFormat,
|
|
50
|
-
colorSpace: SRGBColorSpace
|
|
97
|
+
colorSpace: SRGBColorSpace*/
|
|
51
98
|
});
|
|
52
|
-
this.
|
|
53
|
-
this.
|
|
54
|
-
this.
|
|
55
|
-
this.
|
|
56
|
-
this._n8aoPass =
|
|
57
|
-
this._n8aoPass.
|
|
58
|
-
this._n8aoPass.debugMode = true;
|
|
99
|
+
this._aoComposer = new EffectComposer(this._renderer, this._aoRenderTarget);
|
|
100
|
+
this._aoComposer.renderToScreen = false;
|
|
101
|
+
this._n8aoPass = new N8AOPass(this._scene, this._camera, this._width, this._height);
|
|
102
|
+
// this._n8aoPass.configuration.gammaCorrection = false;
|
|
103
|
+
// this._n8aoPass.renderToScreen = false;
|
|
104
|
+
// this._n8aoPass.debugMode = true;
|
|
59
105
|
// const smaaPass = new SMAAPass(width, height);
|
|
60
106
|
// this._composer.addPass(smaaPass);
|
|
61
|
-
// const fxaaPass = new ShaderPass(FXAAShader);
|
|
62
|
-
// const pixelRatio = this._renderer.getPixelRatio();
|
|
63
|
-
// fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / (width * pixelRatio);
|
|
64
|
-
// fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / (height * pixelRatio);
|
|
65
|
-
this._outputPass = new OutputPass();
|
|
66
|
-
this._taaRenderPass = new TAARenderPass(this._scene, this._camera, 0x000000, 0);
|
|
67
|
-
this._taaRenderPass.unbiased = false;
|
|
68
|
-
this._taaRenderPass.sampleLevel = 4;
|
|
69
|
-
this._renderPass = new RenderPass(this._scene, this._camera);
|
|
70
107
|
// this._renderPass.enabled = false;
|
|
71
|
-
|
|
72
|
-
this.
|
|
73
|
-
this.
|
|
74
|
-
this.
|
|
108
|
+
// sao
|
|
109
|
+
// this._saoPass = new SAOPass( this._scene, this._camera, new Vector2(2048, 2048));
|
|
110
|
+
// this._saoPass.resolution.set(2048, 2048);
|
|
111
|
+
// this._saoPass.renderToScreen = true;
|
|
112
|
+
// this._saoPass.enabled = true;
|
|
113
|
+
this._aoComposer.addPass(this._renderPass);
|
|
114
|
+
this._aoComposer.addPass(this._n8aoPass);
|
|
115
|
+
this._aoComposer.addPass(this._outputPass);
|
|
116
|
+
// this._composer.addPass(this._saoPass);
|
|
117
|
+
// this._aoComposer.addPass(this._aoOutputPass);
|
|
75
118
|
this._createGui();
|
|
76
|
-
|
|
119
|
+
}
|
|
120
|
+
_initBlendComposer() {
|
|
121
|
+
this._blendShader = new ShaderPass(BlendShader);
|
|
122
|
+
this._blendShader.uniforms.tDiffuse1.value = this._aaRenderTarget.texture;
|
|
123
|
+
this._blendShader.uniforms.tDiffuse2.value = this._aoRenderTarget.texture;
|
|
124
|
+
// blendShader.uniforms['mixRatio'].value = 0.9;
|
|
125
|
+
this._blendComposer = new EffectComposer(this._renderer);
|
|
126
|
+
this._blendComposer.renderToScreen = true;
|
|
127
|
+
this._blendComposer.addPass(this._renderPass);
|
|
128
|
+
this._blendComposer.addPass(this._blendShader);
|
|
77
129
|
}
|
|
78
130
|
_updatePass() {
|
|
79
131
|
this._n8aoPass.configuration.aoRadius = this._effectController.aoRadius;
|
|
@@ -94,10 +146,8 @@ export class PostProcessingService {
|
|
|
94
146
|
this.render();
|
|
95
147
|
}
|
|
96
148
|
_createGuiTaaPass() {
|
|
97
|
-
this._taaPassGui = new GUI();
|
|
98
|
-
this._taaPassGui.hide();
|
|
99
149
|
const param = { TAAEnabled: '1', TAASampleLevel: 0 };
|
|
100
|
-
this.
|
|
150
|
+
this._postProcessingGui.add(param, 'TAAEnabled', {
|
|
101
151
|
'Disabled': '0',
|
|
102
152
|
'Enabled': '1'
|
|
103
153
|
}).onFinishChange(() => {
|
|
@@ -106,7 +156,7 @@ export class PostProcessingService {
|
|
|
106
156
|
}
|
|
107
157
|
this.render();
|
|
108
158
|
});
|
|
109
|
-
this.
|
|
159
|
+
this._postProcessingGui.add(param, 'TAASampleLevel', {
|
|
110
160
|
'Level 0: 1 Sample': 0,
|
|
111
161
|
'Level 1: 2 Samples': 1,
|
|
112
162
|
'Level 2: 4 Samples': 2,
|
|
@@ -119,13 +169,16 @@ export class PostProcessingService {
|
|
|
119
169
|
}
|
|
120
170
|
this.render();
|
|
121
171
|
});
|
|
122
|
-
this._taaPassGui.open();
|
|
123
172
|
}
|
|
124
173
|
setSize(width, height) {
|
|
125
|
-
this.
|
|
174
|
+
this._aoComposer.setSize(width, height);
|
|
175
|
+
this._aaComposer.setSize(width, height);
|
|
176
|
+
this._blendComposer.setSize(width, height);
|
|
126
177
|
}
|
|
127
178
|
render() {
|
|
128
|
-
this.
|
|
179
|
+
this._aaComposer.render();
|
|
180
|
+
this._aoComposer.render();
|
|
181
|
+
this._blendComposer.render();
|
|
129
182
|
}
|
|
130
183
|
showGui() {
|
|
131
184
|
this._postProcessingGui.show(true);
|
|
@@ -137,8 +190,16 @@ export class PostProcessingService {
|
|
|
137
190
|
show ? this.showGui() : this.hideGui();
|
|
138
191
|
}
|
|
139
192
|
_createGui() {
|
|
140
|
-
|
|
141
|
-
this._postProcessingGui.
|
|
193
|
+
const param = { Enabled: '1' };
|
|
194
|
+
this._postProcessingGui.add(param, 'Enabled', {
|
|
195
|
+
'Disabled': '0',
|
|
196
|
+
'Enabled': '1'
|
|
197
|
+
}).onFinishChange(() => {
|
|
198
|
+
if (this._aoComposer) {
|
|
199
|
+
this._aoComposer.renderToScreen = (param.Enabled === '1');
|
|
200
|
+
}
|
|
201
|
+
this.render();
|
|
202
|
+
});
|
|
142
203
|
this._postProcessingGui.add(this._effectController, 'aoSamples', 1.0, 64.0, 1.0).onChange(() => this._updatePass());
|
|
143
204
|
this._postProcessingGui.add(this._effectController, 'denoiseSamples', 1.0, 64.0, 1.0).onChange(() => this._updatePass());
|
|
144
205
|
this._postProcessingGui.add(this._effectController, 'denoiseRadius', 0.0, 24.0, 0.01).onChange(() => this._updatePass());
|
|
@@ -184,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
184
245
|
providedIn: 'root'
|
|
185
246
|
}]
|
|
186
247
|
}], ctorParameters: function () { return [{ type: i1.ConfigurationService }]; } });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL2NvcmUzZC9zZXJ2aWNlL3Bvc3QtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUNMLEtBQUssRUFDTCxXQUFXLEVBQUUsWUFBWSxFQUN6QixhQUFhLEVBRWIsVUFBVSxFQUVWLGNBQWMsRUFBRSxlQUFlLEVBRS9CLGlCQUFpQixFQUNsQixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUNoRixPQUFPLEdBQUcsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTlCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRzNFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDOzs7QUFReEUsTUFBTSxPQUFPLHFCQUFxQjtJQWdDaEMsWUFDVSxxQkFBMkM7UUFBM0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQjtRQXRCN0Msc0JBQWlCLEdBQUc7WUFDMUIsU0FBUyxFQUFFLElBQUk7WUFDZixjQUFjLEVBQUUsR0FBRztZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsR0FBRztZQUNiLGVBQWUsRUFBRSxHQUFHO1lBQ3BCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxvQkFBb0IsRUFBRSxJQUFJO1lB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RUFBRSxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pKLENBQUM7O21IQTNNVSxxQkFBcUI7dUhBQXJCLHFCQUFxQixjQUZwQixNQUFNOzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29sb3IsXHJcbiAgRGVwdGhGb3JtYXQsIERlcHRoVGV4dHVyZSxcclxuICBOZWFyZXN0RmlsdGVyLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFJHQkFGb3JtYXQsXHJcbiAgU2NlbmUsXHJcbiAgU1JHQkNvbG9yU3BhY2UsIFVuc2lnbmVkSW50VHlwZSxcclxuICBXZWJHTFJlbmRlcmVyLFxyXG4gIFdlYkdMUmVuZGVyVGFyZ2V0XHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0VmZmVjdENvbXBvc2VyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvRWZmZWN0Q29tcG9zZXInO1xyXG5pbXBvcnQgR1VJIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saWJzL2xpbC1ndWkubW9kdWxlLm1pbic7XHJcbmltcG9ydCB7TjhBT1Bhc3N9IGZyb20gJ244YW8nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25EYXRhfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jb25maWd1cmF0aW9uLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7VEFBUmVuZGVyUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1RBQVJlbmRlclBhc3MnO1xyXG5pbXBvcnQge091dHB1dFBhc3N9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9PdXRwdXRQYXNzJztcclxuaW1wb3J0IHtSZW5kZXJQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvUmVuZGVyUGFzcyc7XHJcbmltcG9ydCB7RlhBQVNoYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3NoYWRlcnMvRlhBQVNoYWRlcic7XHJcbmltcG9ydCB7U2hhZGVyUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1NoYWRlclBhc3MnO1xyXG5pbXBvcnQge1NNQUFQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvU01BQVBhc3MnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9zdFByb2Nlc3NpbmdTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9zZXI6IEVmZmVjdENvbXBvc2VyO1xyXG4gIHByaXZhdGUgX244YW9QYXNzOiBOOEFPUGFzcztcclxuICBwcml2YXRlIF90YWFSZW5kZXJQYXNzOiBUQUFSZW5kZXJQYXNzO1xyXG4gIHByaXZhdGUgX291dHB1dFBhc3M6IE91dHB1dFBhc3M7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyUGFzczogUmVuZGVyUGFzcztcclxuICBwcml2YXRlIF9zY2VuZTogU2NlbmU7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXI7XHJcbiAgcHJpdmF0ZSBfY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICBwcml2YXRlIF9yZW5kZXJUYXJnZXQ6IFdlYkdMUmVuZGVyVGFyZ2V0O1xyXG4gIHByaXZhdGUgX2VmZmVjdENvbnRyb2xsZXIgPSB7XHJcbiAgICBhb1NhbXBsZXM6IDMyLjAsXHJcbiAgICBkZW5vaXNlU2FtcGxlczogOC4wLFxyXG4gICAgZGVub2lzZVJhZGl1czogMTIuMCxcclxuICAgIGFvUmFkaXVzOiA1LjAsXHJcbiAgICBkaXN0YW5jZUZhbGxvZmY6IDEuMCxcclxuICAgIHNjcmVlblNwYWNlUmFkaXVzOiBmYWxzZSxcclxuICAgIGhhbGZSZXM6IGZhbHNlLFxyXG4gICAgZGVwdGhBd2FyZVVwc2FtcGxpbmc6IHRydWUsXHJcbiAgICB0cmFuc3BhcmVuY3lBd2FyZTogdHJ1ZSxcclxuICAgIGludGVuc2l0eTogMi41LFxyXG4gICAgcmVuZGVyTW9kZTogJ0NvbWJpbmVkJyxcclxuICAgIGNvbG9yOiBbMCwgMCwgMF0sXHJcbiAgICBjb2xvck11bHRpcGx5OiB0cnVlLFxyXG4gICAgc3RlbmNpbDogdHJ1ZSxcclxuICAgIGFjY3VtdWxhdGU6IGZhbHNlXHJcbiAgfTtcclxuICBwcml2YXRlIF9wb3N0UHJvY2Vzc2luZ0d1aTogR1VJO1xyXG4gIHByaXZhdGUgX3RhYVBhc3NHdWk6IEdVSTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKENvbmZpZ3VyYXRpb25LZXkuU2hvd1Bvc3RQcm9jZXNzaW5nU2V0dGluZ3MgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2hvd0hpZGVHdWkoY2hhbmdlZFtDb25maWd1cmF0aW9uS2V5LlNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0KHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUsIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcclxuICAgIHRoaXMuX2NhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwge1xyXG4gICAgICBtaW5GaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXHJcbiAgICAgIG1hZ0ZpbHRlcjogTmVhcmVzdEZpbHRlcixcclxuICAgICAgZm9ybWF0OiBSR0JBRm9ybWF0LFxyXG4gICAgICBjb2xvclNwYWNlOiBTUkdCQ29sb3JTcGFjZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQuc2FtcGxlcyA9IDQ7XHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlID0gbmV3IERlcHRoVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBVbnNpZ25lZEludFR5cGUpO1xyXG4gICAgdGhpcy5fcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5mb3JtYXQgPSBEZXB0aEZvcm1hdDtcclxuICAgIHRoaXMuX2NvbXBvc2VyID0gbmV3IEVmZmVjdENvbXBvc2VyKHRoaXMuX3JlbmRlcmVyLCB0aGlzLl9yZW5kZXJUYXJnZXQpO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MgPSBuZXcgTjhBT1Bhc3Moc2NlbmUsIGNhbWVyYSwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmdhbW1hQ29ycmVjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuZGVidWdNb2RlID0gdHJ1ZTtcclxuICAgIC8vIGNvbnN0IHNtYWFQYXNzID0gbmV3IFNNQUFQYXNzKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgLy8gdGhpcy5fY29tcG9zZXIuYWRkUGFzcyhzbWFhUGFzcyk7XHJcblxyXG4gICAgLy8gY29uc3QgZnhhYVBhc3MgPSBuZXcgU2hhZGVyUGFzcyhGWEFBU2hhZGVyKTtcclxuICAgIC8vIGNvbnN0IHBpeGVsUmF0aW8gPSB0aGlzLl9yZW5kZXJlci5nZXRQaXhlbFJhdGlvKCk7XHJcbiAgICAvLyBmeGFhUGFzcy5tYXRlcmlhbC51bmlmb3Jtc1sgJ3Jlc29sdXRpb24nIF0udmFsdWUueCA9IDEgLyAod2lkdGggKiBwaXhlbFJhdGlvKTtcclxuICAgIC8vIGZ4YWFQYXNzLm1hdGVyaWFsLnVuaWZvcm1zWyAncmVzb2x1dGlvbicgXS52YWx1ZS55ID0gMSAvIChoZWlnaHQgKiBwaXhlbFJhdGlvKTtcclxuXHJcbiAgICB0aGlzLl9vdXRwdXRQYXNzID0gbmV3IE91dHB1dFBhc3MoKTtcclxuXHJcbiAgICB0aGlzLl90YWFSZW5kZXJQYXNzID0gbmV3IFRBQVJlbmRlclBhc3ModGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSwgMHgwMDAwMDAsIDApO1xyXG4gICAgdGhpcy5fdGFhUmVuZGVyUGFzcy51bmJpYXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fdGFhUmVuZGVyUGFzcy5zYW1wbGVMZXZlbCA9IDQ7XHJcblxyXG4gICAgdGhpcy5fcmVuZGVyUGFzcyA9IG5ldyBSZW5kZXJQYXNzKHRoaXMuX3NjZW5lLCB0aGlzLl9jYW1lcmEpO1xyXG4gICAgLy8gdGhpcy5fcmVuZGVyUGFzcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5fY29tcG9zZXIuYWRkUGFzcyh0aGlzLl9yZW5kZXJQYXNzKTtcclxuICAgIHRoaXMuX2NvbXBvc2VyLmFkZFBhc3ModGhpcy5fdGFhUmVuZGVyUGFzcyk7XHJcbiAgICB0aGlzLl9jb21wb3Nlci5hZGRQYXNzKHRoaXMuX244YW9QYXNzKTtcclxuICAgIHRoaXMuX2NvbXBvc2VyLmFkZFBhc3ModGhpcy5fb3V0cHV0UGFzcyk7XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlR3VpKCk7XHJcbiAgICB0aGlzLl9jcmVhdGVHdWlUYWFQYXNzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVQYXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hb1JhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9SYWRpdXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmRpc3RhbmNlRmFsbG9mZiA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi50cmFuc3BhcmVuY3lBd2FyZSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIudHJhbnNwYXJlbmN5QXdhcmU7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmludGVuc2l0eSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuaW50ZW5zaXR5O1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hb1NhbXBsZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvU2FtcGxlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVub2lzZVJhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGVub2lzZVJhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVub2lzZVNhbXBsZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlbm9pc2VTYW1wbGVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5zdGVuY2lsID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5zdGVuY2lsO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5yZW5kZXJNb2RlID0gWydDb21iaW5lZCcsICdBTycsICdObyBBTycsICdTcGxpdCcsICdTcGxpdCBBTyddLmluZGV4T2YodGhpcy5fZWZmZWN0Q29udHJvbGxlci5yZW5kZXJNb2RlKTtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uY29sb3IgPSBuZXcgQ29sb3IodGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclswXSwgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclsxXSwgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclsyXSk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLnNjcmVlblNwYWNlUmFkaXVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5zY3JlZW5TcGFjZVJhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uaGFsZlJlcyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuaGFsZlJlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVwdGhBd2FyZVVwc2FtcGxpbmcgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlcHRoQXdhcmVVcHNhbXBsaW5nO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5jb2xvck11bHRpcGx5ID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvck11bHRpcGx5O1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hY2N1bXVsYXRlID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5hY2N1bXVsYXRlO1xyXG4gICAgdGhpcy5yZW5kZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUd1aVRhYVBhc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YWFQYXNzR3VpID0gbmV3IEdVSSgpO1xyXG4gICAgdGhpcy5fdGFhUGFzc0d1aS5oaWRlKCk7XHJcbiAgICBjb25zdCBwYXJhbSA9IHsgVEFBRW5hYmxlZDogJzEnLCBUQUFTYW1wbGVMZXZlbDogMCB9O1xyXG4gICAgdGhpcy5fdGFhUGFzc0d1aS5hZGQoIHBhcmFtLCAnVEFBRW5hYmxlZCcsIHtcclxuICAgICAgJ0Rpc2FibGVkJzogJzAnLFxyXG4gICAgICAnRW5hYmxlZCc6ICcxJ1xyXG4gICAgfSApLm9uRmluaXNoQ2hhbmdlKCAoKSA9PiB7XHJcblxyXG4gICAgICBpZiAoIHRoaXMuX3RhYVJlbmRlclBhc3MgKSB7XHJcbiAgICAgICAgdGhpcy5fdGFhUmVuZGVyUGFzcy5lbmFibGVkID0gKCBwYXJhbS5UQUFFbmFibGVkID09PSAnMScgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSApO1xyXG5cclxuICAgIHRoaXMuX3RhYVBhc3NHdWkuYWRkKCBwYXJhbSwgJ1RBQVNhbXBsZUxldmVsJywge1xyXG4gICAgICAnTGV2ZWwgMDogMSBTYW1wbGUnOiAwLFxyXG4gICAgICAnTGV2ZWwgMTogMiBTYW1wbGVzJzogMSxcclxuICAgICAgJ0xldmVsIDI6IDQgU2FtcGxlcyc6IDIsXHJcbiAgICAgICdMZXZlbCAzOiA4IFNhbXBsZXMnOiAzLFxyXG4gICAgICAnTGV2ZWwgNDogMTYgU2FtcGxlcyc6IDQsXHJcbiAgICAgICdMZXZlbCA1OiAzMiBTYW1wbGVzJzogNVxyXG4gICAgfSApLm9uRmluaXNoQ2hhbmdlKCAoKSA9PiB7XHJcblxyXG4gICAgICBpZiAoIHRoaXMuX3RhYVJlbmRlclBhc3MgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3RhYVJlbmRlclBhc3Muc2FtcGxlTGV2ZWwgPSBwYXJhbS5UQUFTYW1wbGVMZXZlbDtcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gKTtcclxuXHJcbiAgICB0aGlzLl90YWFQYXNzR3VpLm9wZW4oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21wb3Nlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbXBvc2VyLnJlbmRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5zaG93KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93SGlkZUd1aShzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBzaG93ID8gdGhpcy5zaG93R3VpKCkgOiB0aGlzLmhpZGVHdWkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUd1aSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpID0gbmV3IEdVSSgpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuaGlkZSgpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdhb1NhbXBsZXMnLCAxLjAsIDY0LjAsIDEuMCkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGVub2lzZVNhbXBsZXMnLCAxLjAsIDY0LjAsIDEuMCkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGVub2lzZVJhZGl1cycsIDAuMCwgMjQuMCwgMC4wMSkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIGNvbnN0IGFvciA9IHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnYW9SYWRpdXMnLCAxLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICBjb25zdCBkZiA9IHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGlzdGFuY2VGYWxsb2ZmJywgMC4wLCAxMC4wLCAwLjAxKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdzY3JlZW5TcGFjZVJhZGl1cycpLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvUmFkaXVzID0gNDguMDtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRpc3RhbmNlRmFsbG9mZiA9IDAuMjtcclxuICAgICAgICBhb3IuX21pbiA9IDA7XHJcbiAgICAgICAgYW9yLl9tYXggPSA2NDtcclxuICAgICAgICBkZi5fbWluID0gMDtcclxuICAgICAgICBkZi5fbWF4ID0gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvUmFkaXVzID0gNS4wO1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmID0gMS4wO1xyXG4gICAgICAgIGFvci5fbWluID0gMTtcclxuICAgICAgICBhb3IuX21heCA9IDEwO1xyXG4gICAgICAgIGRmLl9taW4gPSAwO1xyXG4gICAgICAgIGRmLl9tYXggPSAxMDtcclxuICAgICAgfVxyXG4gICAgICBhb3IudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICBkZi51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZVBhc3MoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdoYWxmUmVzJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAndHJhbnNwYXJlbmN5QXdhcmUnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkZXB0aEF3YXJlVXBzYW1wbGluZycpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3N0ZW5jaWwnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdpbnRlbnNpdHknLCAwLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGRDb2xvcih0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnY29sb3InKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdjb2xvck11bHRpcGx5Jykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnYWNjdW11bGF0ZScpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3JlbmRlck1vZGUnLCBbJ0NvbWJpbmVkJywgJ0FPJywgJ05vIEFPJywgJ1NwbGl0JywgJ1NwbGl0IEFPJ10pLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL2NvcmUzZC9zZXJ2aWNlL3Bvc3QtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUNMLEtBQUssRUFDc0IsYUFBYSxFQU94QyxpQkFBaUIsRUFDbEIsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDaEYsT0FBTyxHQUFHLE1BQU0sNENBQTRDLENBQUM7QUFDN0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUkzRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFJeEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdDQUF3QyxDQUFDOzs7QUFLbkUsTUFBTSxPQUFPLHFCQUFxQjtJQXlDaEMsWUFDVSxxQkFBMkM7UUFBM0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQjtRQXJCN0Msc0JBQWlCLEdBQUc7WUFDMUIsU0FBUyxFQUFFLElBQUk7WUFDZixjQUFjLEVBQUUsR0FBRztZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsR0FBRztZQUNiLGVBQWUsRUFBRSxHQUFHO1lBQ3BCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsT0FB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Q0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDekosQ0FBQzs7bUhBdFJVLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb2xvcixcclxuICBEZXB0aEZvcm1hdCwgRGVwdGhUZXh0dXJlLCBIYWxmRmxvYXRUeXBlLFxyXG4gIE5lYXJlc3RGaWx0ZXIsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgUkdCQUZvcm1hdCxcclxuICBTY2VuZSxcclxuICBTUkdCQ29sb3JTcGFjZSwgVW5zaWduZWRJbnRUeXBlLCBWZWN0b3IyLFxyXG4gIFdlYkdMUmVuZGVyZXIsXHJcbiAgV2ViR0xSZW5kZXJUYXJnZXRcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7RWZmZWN0Q29tcG9zZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9FZmZlY3RDb21wb3Nlcic7XHJcbmltcG9ydCBHVUkgZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xpYnMvbGlsLWd1aS5tb2R1bGUubWluJztcclxuaW1wb3J0IHtOOEFPUGFzc30gZnJvbSAnbjhhbyc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbkRhdGF9IGZyb20gJy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2NvbmZpZ3VyYXRpb24tZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25LZXl9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9jb25maWd1cmF0aW9uLWtleS5lbnVtJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtUQUFSZW5kZXJQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvVEFBUmVuZGVyUGFzcyc7XHJcbmltcG9ydCB7T3V0cHV0UGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL091dHB1dFBhc3MnO1xyXG5pbXBvcnQge1JlbmRlclBhc3N9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9SZW5kZXJQYXNzJztcclxuaW1wb3J0IHtGWEFBU2hhZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vc2hhZGVycy9GWEFBU2hhZGVyJztcclxuaW1wb3J0IHtTaGFkZXJQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvU2hhZGVyUGFzcyc7XHJcbmltcG9ydCB7U01BQVBhc3N9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9TTUFBUGFzcyc7XHJcbmltcG9ydCB7U0FPUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1NBT1Bhc3MnO1xyXG5pbXBvcnQge1NTQU9QYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvU1NBT1Bhc3MnO1xyXG5pbXBvcnQge0JsZW5kU2hhZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vc2hhZGVycy9CbGVuZFNoYWRlcic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3N0UHJvY2Vzc2luZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIF9hYUNvbXBvc2VyOiBFZmZlY3RDb21wb3NlcjtcclxuICBwcml2YXRlIF9hb0NvbXBvc2VyOiBFZmZlY3RDb21wb3NlcjtcclxuICBwcml2YXRlIF9ibGVuZENvbXBvc2VyOiBFZmZlY3RDb21wb3NlcjtcclxuICBwcml2YXRlIF9uOGFvUGFzczogTjhBT1Bhc3M7XHJcbiAgcHJpdmF0ZSBfdGFhUmVuZGVyUGFzczogVEFBUmVuZGVyUGFzcztcclxuICBwcml2YXRlIF9hYU91dHB1dFBhc3M6IE91dHB1dFBhc3M7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyUGFzczogUmVuZGVyUGFzcztcclxuICBwcml2YXRlIF9vdXRwdXRQYXNzOiBPdXRwdXRQYXNzO1xyXG4gIHByaXZhdGUgX2FvUmVuZGVyUGFzczogUmVuZGVyUGFzcztcclxuICBwcml2YXRlIF9zYW9QYXNzOiBTQU9QYXNzO1xyXG4gIHByaXZhdGUgX3NzYW9QYXNzOiBTU0FPUGFzcztcclxuICBwcml2YXRlIF9zY2VuZTogU2NlbmU7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXI7XHJcbiAgcHJpdmF0ZSBfY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICBwcml2YXRlIF9hYVJlbmRlclRhcmdldDogV2ViR0xSZW5kZXJUYXJnZXQ7XHJcbiAgcHJpdmF0ZSBfYW9SZW5kZXJUYXJnZXQ6IFdlYkdMUmVuZGVyVGFyZ2V0O1xyXG4gIHByaXZhdGUgX2JsZW5kU2hhZGVyOiBTaGFkZXJQYXNzO1xyXG4gIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZWZmZWN0Q29udHJvbGxlciA9IHtcclxuICAgIGFvU2FtcGxlczogMzIuMCxcclxuICAgIGRlbm9pc2VTYW1wbGVzOiA4LjAsXHJcbiAgICBkZW5vaXNlUmFkaXVzOiAxMi4wLFxyXG4gICAgYW9SYWRpdXM6IDUuMCxcclxuICAgIGRpc3RhbmNlRmFsbG9mZjogMS4wLFxyXG4gICAgc2NyZWVuU3BhY2VSYWRpdXM6IGZhbHNlLFxyXG4gICAgaGFsZlJlczogZmFsc2UsXHJcbiAgICBkZXB0aEF3YXJlVXBzYW1wbGluZzogdHJ1ZSxcclxuICAgIHRyYW5zcGFyZW5jeUF3YXJlOiB0cnVlLFxyXG4gICAgaW50ZW5zaXR5OiAyLjUsXHJcbiAgICByZW5kZXJNb2RlOiAnQ29tYmluZWQnLFxyXG4gICAgY29sb3I6IFswLCAwLCAwXSxcclxuICAgIGNvbG9yTXVsdGlwbHk6IHRydWUsXHJcbiAgICBzdGVuY2lsOiB0cnVlLFxyXG4gICAgYWNjdW11bGF0ZTogZmFsc2VcclxuICB9O1xyXG4gIHByaXZhdGUgX3Bvc3RQcm9jZXNzaW5nR3VpOiBHVUk7XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2Uub25DaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2VkOiBDb25maWd1cmF0aW9uRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChDb25maWd1cmF0aW9uS2V5LlNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzIGluIGNoYW5nZWQpIHtcclxuICAgICAgICAgIHRoaXMuX3Nob3dIaWRlR3VpKGNoYW5nZWRbQ29uZmlndXJhdGlvbktleS5TaG93UG9zdFByb2Nlc3NpbmdTZXR0aW5nc10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdChyZW5kZXJlcjogV2ViR0xSZW5kZXJlciwgc2NlbmU6IFNjZW5lLCBjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlcjtcclxuICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7XHJcbiAgICB0aGlzLl9jYW1lcmEgPSBjYW1lcmE7XHJcbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xyXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkgPSBuZXcgR1VJKCk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5oaWRlKCk7XHJcbiAgICB0aGlzLl9yZW5kZXJQYXNzID0gbmV3IFJlbmRlclBhc3ModGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSk7XHJcbiAgICB0aGlzLl9vdXRwdXRQYXNzID0gbmV3IE91dHB1dFBhc3MoKTtcclxuICAgIHRoaXMuX2luaXRBb0NvbXBvc2VyKCk7XHJcbiAgICB0aGlzLl9pbml0QWFDb21wb3NlcigpO1xyXG4gICAgdGhpcy5faW5pdEJsZW5kQ29tcG9zZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRBYUNvbXBvc2VyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYWFSZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCwge1xyXG4gICAgICBzYW1wbGVzOiA0LFxyXG4gICAgICB0eXBlOiBIYWxmRmxvYXRUeXBlLyosXHJcbiAgICAgIG1pbkZpbHRlcjogTmVhcmVzdEZpbHRlcixcclxuICAgICAgbWFnRmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxyXG4gICAgICBmb3JtYXQ6IFJHQkFGb3JtYXQsXHJcbiAgICAgIGNvbG9yU3BhY2U6IFNSR0JDb2xvclNwYWNlKi9cclxuICAgIH0pO1xyXG4gICAgdGhpcy5fYWFDb21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3Nlcih0aGlzLl9yZW5kZXJlciwgdGhpcy5fYWFSZW5kZXJUYXJnZXQpO1xyXG4gICAgdGhpcy5fYWFDb21wb3Nlci5yZW5kZXJUb1NjcmVlbiA9IGZhbHNlO1xyXG4gICAgY29uc3QgZnhhYVBhc3MgPSBuZXcgU2hhZGVyUGFzcyhGWEFBU2hhZGVyKTtcclxuICAgIGNvbnN0IHBpeGVsUmF0aW8gPSB0aGlzLl9yZW5kZXJlci5nZXRQaXhlbFJhdGlvKCk7XHJcbiAgICAvLyBmeGFhUGFzcy5tYXRlcmlhbC51bmlmb3Jtc1sgJ3Jlc29sdXRpb24nIF0udmFsdWUueCA9IDEgLyAodGhpcy5fd2lkdGggKiBwaXhlbFJhdGlvKTtcclxuICAgIC8vIGZ4YWFQYXNzLm1hdGVyaWFsLnVuaWZvcm1zWyAncmVzb2x1dGlvbicgXS52YWx1ZS55ID0gMSAvICh0aGlzLl9oZWlnaHQgKiBwaXhlbFJhdGlvKTtcclxuICAgIGZ4YWFQYXNzLnVuaWZvcm1zWyAncmVzb2x1dGlvbicgXS52YWx1ZS54ID0gMSAvICh0aGlzLl93aWR0aCAqIHBpeGVsUmF0aW8pO1xyXG4gICAgZnhhYVBhc3MudW5pZm9ybXNbICdyZXNvbHV0aW9uJyBdLnZhbHVlLnkgPSAxIC8gKHRoaXMuX2hlaWdodCAqIHBpeGVsUmF0aW8pO1xyXG5cclxuXHJcbiAgICAvLyB0aGlzLl90YWFSZW5kZXJQYXNzID0gbmV3IFRBQVJlbmRlclBhc3ModGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSwgMHgwMDAwMDAsIDApO1xyXG4gICAgLy8gdGhpcy5fdGFhUmVuZGVyUGFzcy51bmJpYXNlZCA9IHRydWU7XHJcbiAgICAvLyB0aGlzLl90YWFSZW5kZXJQYXNzLnNhbXBsZUxldmVsID0gNDtcclxuXHJcbiAgICAvLyB0aGlzLl9yZW5kZXJQYXNzLmVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzYW9cclxuICAgIC8vIHRoaXMuX3Nhb1Bhc3MgPSBuZXcgU0FPUGFzcyggdGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSwgbmV3IFZlY3RvcjIoMjA0OCwgMjA0OCkpO1xyXG4gICAgLy8gdGhpcy5fc2FvUGFzcy5yZXNvbHV0aW9uLnNldCgyMDQ4LCAyMDQ4KTtcclxuICAgIC8vIHRoaXMuX3Nhb1Bhc3MucmVuZGVyVG9TY3JlZW4gPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5fc2FvUGFzcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9hYUNvbXBvc2VyLmFkZFBhc3ModGhpcy5fcmVuZGVyUGFzcyk7XHJcbiAgICAvLyB0aGlzLl9hYUNvbXBvc2VyLmFkZFBhc3ModGhpcy5fdGFhUmVuZGVyUGFzcyk7XHJcbiAgICB0aGlzLl9hYUNvbXBvc2VyLmFkZFBhc3MoZnhhYVBhc3MpO1xyXG4gICAgdGhpcy5fYWFDb21wb3Nlci5hZGRQYXNzKHRoaXMuX291dHB1dFBhc3MpO1xyXG5cclxuICAgIHRoaXMuX2NyZWF0ZUd1aVRhYVBhc3MoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRBb0NvbXBvc2VyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYW9SZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCwge1xyXG4gICAgICBzYW1wbGVzOiA0LFxyXG4gICAgICB0eXBlOiBIYWxmRmxvYXRUeXBlLyosXHJcbiAgICAgIG1pbkZpbHRlcjogTmVhcmVzdEZpbHRlcixcclxuICAgICAgbWFnRmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxyXG4gICAgICBmb3JtYXQ6IFJHQkFGb3JtYXQsXHJcbiAgICAgIGNvbG9yU3BhY2U6IFNSR0JDb2xvclNwYWNlKi9cclxuICAgIH0pO1xyXG4gICAgdGhpcy5fYW9Db21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3Nlcih0aGlzLl9yZW5kZXJlciwgdGhpcy5fYW9SZW5kZXJUYXJnZXQpO1xyXG4gICAgdGhpcy5fYW9Db21wb3Nlci5yZW5kZXJUb1NjcmVlbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX244YW9QYXNzID0gbmV3IE44QU9QYXNzKHRoaXMuX3NjZW5lLCB0aGlzLl9jYW1lcmEsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgLy8gdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5nYW1tYUNvcnJlY3Rpb24gPSBmYWxzZTtcclxuICAgIC8vIHRoaXMuX244YW9QYXNzLnJlbmRlclRvU2NyZWVuID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLl9uOGFvUGFzcy5kZWJ1Z01vZGUgPSB0cnVlO1xyXG4gICAgLy8gY29uc3Qgc21hYVBhc3MgPSBuZXcgU01BQVBhc3Mod2lkdGgsIGhlaWdodCk7XHJcbiAgICAvLyB0aGlzLl9jb21wb3Nlci5hZGRQYXNzKHNtYWFQYXNzKTtcclxuXHJcbiAgICAvLyB0aGlzLl9yZW5kZXJQYXNzLmVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzYW9cclxuICAgIC8vIHRoaXMuX3Nhb1Bhc3MgPSBuZXcgU0FPUGFzcyggdGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSwgbmV3IFZlY3RvcjIoMjA0OCwgMjA0OCkpO1xyXG4gICAgLy8gdGhpcy5fc2FvUGFzcy5yZXNvbHV0aW9uLnNldCgyMDQ4LCAyMDQ4KTtcclxuICAgIC8vIHRoaXMuX3Nhb1Bhc3MucmVuZGVyVG9TY3JlZW4gPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5fc2FvUGFzcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9hb0NvbXBvc2VyLmFkZFBhc3ModGhpcy5fcmVuZGVyUGFzcyk7XHJcbiAgICB0aGlzLl9hb0NvbXBvc2VyLmFkZFBhc3ModGhpcy5fbjhhb1Bhc3MpO1xyXG4gICAgdGhpcy5fYW9Db21wb3Nlci5hZGRQYXNzKHRoaXMuX291dHB1dFBhc3MpO1xyXG4gICAgLy8gdGhpcy5fY29tcG9zZXIuYWRkUGFzcyh0aGlzLl9zYW9QYXNzKTtcclxuICAgIC8vIHRoaXMuX2FvQ29tcG9zZXIuYWRkUGFzcyh0aGlzLl9hb091dHB1dFBhc3MpO1xyXG5cclxuICAgIHRoaXMuX2NyZWF0ZUd1aSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdEJsZW5kQ29tcG9zZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9ibGVuZFNoYWRlciA9IG5ldyBTaGFkZXJQYXNzKEJsZW5kU2hhZGVyKTtcclxuICAgIHRoaXMuX2JsZW5kU2hhZGVyLnVuaWZvcm1zLnREaWZmdXNlMS52YWx1ZSA9IHRoaXMuX2FhUmVuZGVyVGFyZ2V0LnRleHR1cmU7XHJcbiAgICB0aGlzLl9ibGVuZFNoYWRlci51bmlmb3Jtcy50RGlmZnVzZTIudmFsdWUgPSB0aGlzLl9hb1JlbmRlclRhcmdldC50ZXh0dXJlO1xyXG4gICAgLy8gYmxlbmRTaGFkZXIudW5pZm9ybXNbJ21peFJhdGlvJ10udmFsdWUgPSAwLjk7XHJcblxyXG4gICAgdGhpcy5fYmxlbmRDb21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3Nlcih0aGlzLl9yZW5kZXJlcik7XHJcbiAgICB0aGlzLl9ibGVuZENvbXBvc2VyLnJlbmRlclRvU2NyZWVuID0gdHJ1ZTtcclxuICAgIHRoaXMuX2JsZW5kQ29tcG9zZXIuYWRkUGFzcyh0aGlzLl9yZW5kZXJQYXNzKTtcclxuICAgIHRoaXMuX2JsZW5kQ29tcG9zZXIuYWRkUGFzcyh0aGlzLl9ibGVuZFNoYWRlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVQYXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hb1JhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9SYWRpdXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmRpc3RhbmNlRmFsbG9mZiA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi50cmFuc3BhcmVuY3lBd2FyZSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIudHJhbnNwYXJlbmN5QXdhcmU7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmludGVuc2l0eSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuaW50ZW5zaXR5O1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hb1NhbXBsZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvU2FtcGxlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVub2lzZVJhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGVub2lzZVJhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVub2lzZVNhbXBsZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlbm9pc2VTYW1wbGVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5zdGVuY2lsID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5zdGVuY2lsO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5yZW5kZXJNb2RlID0gWydDb21iaW5lZCcsICdBTycsICdObyBBTycsICdTcGxpdCcsICdTcGxpdCBBTyddLmluZGV4T2YodGhpcy5fZWZmZWN0Q29udHJvbGxlci5yZW5kZXJNb2RlKTtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uY29sb3IgPSBuZXcgQ29sb3IodGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclswXSwgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclsxXSwgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclsyXSk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLnNjcmVlblNwYWNlUmFkaXVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5zY3JlZW5TcGFjZVJhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uaGFsZlJlcyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuaGFsZlJlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVwdGhBd2FyZVVwc2FtcGxpbmcgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlcHRoQXdhcmVVcHNhbXBsaW5nO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5jb2xvck11bHRpcGx5ID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvck11bHRpcGx5O1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hY2N1bXVsYXRlID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5hY2N1bXVsYXRlO1xyXG4gICAgdGhpcy5yZW5kZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUd1aVRhYVBhc3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXJhbSA9IHsgVEFBRW5hYmxlZDogJzEnLCBUQUFTYW1wbGVMZXZlbDogMCB9O1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKCBwYXJhbSwgJ1RBQUVuYWJsZWQnLCB7XHJcbiAgICAgICdEaXNhYmxlZCc6ICcwJyxcclxuICAgICAgJ0VuYWJsZWQnOiAnMSdcclxuICAgIH0gKS5vbkZpbmlzaENoYW5nZSggKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCB0aGlzLl90YWFSZW5kZXJQYXNzICkge1xyXG4gICAgICAgIHRoaXMuX3RhYVJlbmRlclBhc3MuZW5hYmxlZCA9ICggcGFyYW0uVEFBRW5hYmxlZCA9PT0gJzEnICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gKTtcclxuXHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQoIHBhcmFtLCAnVEFBU2FtcGxlTGV2ZWwnLCB7XHJcbiAgICAgICdMZXZlbCAwOiAxIFNhbXBsZSc6IDAsXHJcbiAgICAgICdMZXZlbCAxOiAyIFNhbXBsZXMnOiAxLFxyXG4gICAgICAnTGV2ZWwgMjogNCBTYW1wbGVzJzogMixcclxuICAgICAgJ0xldmVsIDM6IDggU2FtcGxlcyc6IDMsXHJcbiAgICAgICdMZXZlbCA0OiAxNiBTYW1wbGVzJzogNCxcclxuICAgICAgJ0xldmVsIDU6IDMyIFNhbXBsZXMnOiA1XHJcbiAgICB9ICkub25GaW5pc2hDaGFuZ2UoICgpID0+IHtcclxuXHJcbiAgICAgIGlmICggdGhpcy5fdGFhUmVuZGVyUGFzcyApIHtcclxuXHJcbiAgICAgICAgdGhpcy5fdGFhUmVuZGVyUGFzcy5zYW1wbGVMZXZlbCA9IHBhcmFtLlRBQVNhbXBsZUxldmVsO1xyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FvQ29tcG9zZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHRoaXMuX2FhQ29tcG9zZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHRoaXMuX2JsZW5kQ29tcG9zZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hYUNvbXBvc2VyLnJlbmRlcigpO1xyXG4gICAgdGhpcy5fYW9Db21wb3Nlci5yZW5kZXIoKTtcclxuICAgIHRoaXMuX2JsZW5kQ29tcG9zZXIucmVuZGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0d1aSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLnNob3codHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUd1aSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dIaWRlR3VpKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHNob3cgPyB0aGlzLnNob3dHdWkoKSA6IHRoaXMuaGlkZUd1aSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlR3VpKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFyYW0gPSB7IEVuYWJsZWQ6ICcxJ307XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQocGFyYW0sICdFbmFibGVkJywge1xyXG4gICAgICAnRGlzYWJsZWQnOiAnMCcsXHJcbiAgICAgICdFbmFibGVkJzogJzEnXHJcbiAgICB9ICkub25GaW5pc2hDaGFuZ2UoICgpID0+IHtcclxuICAgICAgaWYgKCB0aGlzLl9hb0NvbXBvc2VyICkge1xyXG4gICAgICAgIHRoaXMuX2FvQ29tcG9zZXIucmVuZGVyVG9TY3JlZW4gPSAoIHBhcmFtLkVuYWJsZWQgPT09ICcxJyApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9ICk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2FvU2FtcGxlcycsIDEuMCwgNjQuMCwgMS4wKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkZW5vaXNlU2FtcGxlcycsIDEuMCwgNjQuMCwgMS4wKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkZW5vaXNlUmFkaXVzJywgMC4wLCAyNC4wLCAwLjAxKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgY29uc3QgYW9yID0gdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdhb1JhZGl1cycsIDEuMCwgMTAuMCwgMC4wMSkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIGNvbnN0IGRmID0gdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkaXN0YW5jZUZhbGxvZmYnLCAwLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3NjcmVlblNwYWNlUmFkaXVzJykub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9SYWRpdXMgPSA0OC4wO1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmID0gMC4yO1xyXG4gICAgICAgIGFvci5fbWluID0gMDtcclxuICAgICAgICBhb3IuX21heCA9IDY0O1xyXG4gICAgICAgIGRmLl9taW4gPSAwO1xyXG4gICAgICAgIGRmLl9tYXggPSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9SYWRpdXMgPSA1LjA7XHJcbiAgICAgICAgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5kaXN0YW5jZUZhbGxvZmYgPSAxLjA7XHJcbiAgICAgICAgYW9yLl9taW4gPSAxO1xyXG4gICAgICAgIGFvci5fbWF4ID0gMTA7XHJcbiAgICAgICAgZGYuX21pbiA9IDA7XHJcbiAgICAgICAgZGYuX21heCA9IDEwO1xyXG4gICAgICB9XHJcbiAgICAgIGFvci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgIGRmLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgdGhpcy5fdXBkYXRlUGFzcygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2hhbGZSZXMnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICd0cmFuc3BhcmVuY3lBd2FyZScpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2RlcHRoQXdhcmVVcHNhbXBsaW5nJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnc3RlbmNpbCcpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2ludGVuc2l0eScsIDAuMCwgMTAuMCwgMC4wMSkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZENvbG9yKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdjb2xvcicpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2NvbG9yTXVsdGlwbHknKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdhY2N1bXVsYXRlJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAncmVuZGVyTW9kZScsIFsnQ29tYmluZWQnLCAnQU8nLCAnTm8gQU8nLCAnU3BsaXQnLCAnU3BsaXQgQU8nXSkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICB9XHJcbn1cclxuIl19
|