@colijnit/homedecorator 256.1.0 → 256.1.3
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/model/homedecorator-settings.d.ts +1 -0
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/help/help-dialog/help-dialog.component.scss +10 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +5 -11
- package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +1 -0
- package/app/plugins/render/service/new-render.service.d.ts +0 -2
- package/app/plugins/render/service/render.service.d.ts +1 -2
- package/assets/hdri/std_env_v2_A.hdr +0 -0
- package/assets/hdri/std_env_v2_B.hdr +0 -0
- package/assets/hdri/std_env_v2_C.hdr +0 -0
- package/assets/hdri/std_env_v2_D.hdr +0 -0
- package/assets/hdri/std_env_v2_E.hdr +46 -0
- package/bundles/colijnit-homedecorator.umd.js +106 -253
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/core/model/homedecorator-settings.js +1 -1
- package/esm2015/app/core/service/homedecorator-settings.service.js +4 -1
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/service/lights.service.js +6 -5
- package/esm2015/app/plugins/core3d/service/scene.service.js +20 -20
- package/esm2015/app/plugins/help/help-dialog/help-dialog.component.js +1 -1
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +50 -75
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +23 -15
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -3
- package/esm2015/app/plugins/render/service/new-render.service.js +1 -1
- package/esm2015/app/plugins/render/service/render.service.js +88 -77
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/floorplan.service.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +2 -2
- package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +7 -7
- package/esm2015/app/shared/category-library/category-library.component.js +1 -1
- package/fesm2015/colijnit-homedecorator.js +206 -202
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/homedecorator-globals.scss +3 -0
- package/package.json +1 -1
package/esm2015/app/plugins/room-planner/components/floorplanner/service/floorplan.service.js
CHANGED
|
@@ -267,8 +267,8 @@ export class FloorplanService {
|
|
|
267
267
|
return __awaiter(this, void 0, void 0, function* () {
|
|
268
268
|
const roomCorners = this.findRooms(this._corners);
|
|
269
269
|
yield this._roomService.updateRooms(roomCorners);
|
|
270
|
-
this.redrawFloorplan();
|
|
271
270
|
this.roomsUpdated.next();
|
|
271
|
+
this.redrawFloorplan();
|
|
272
272
|
});
|
|
273
273
|
}
|
|
274
274
|
mergeWithIntersected(corner) {
|
|
@@ -533,4 +533,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
533
533
|
providedIn: 'root'
|
|
534
534
|
}]
|
|
535
535
|
}], ctorParameters: function () { return [{ type: i1.RoomService }, { type: i2.ItemService }]; } });
|
|
536
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3JwbGFuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDOUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sdUNBQXVDLENBQUM7QUFJckYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFFakUsTUFBTTtBQUNOLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBS3JDLE1BQU0sT0FBTyxnQkFBZ0I7SUE0QjNCLDhCQUE4QjtJQUM5QixZQUNVLFlBQXlCLEVBQ3pCLFlBQXlCO1FBRHpCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBN0I1QixpQkFBWSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2xELGVBQVUsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNoRCxXQUFNLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbkQsTUFBTTtRQUNFLGFBQVEsR0FBYSxFQUFF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e1ZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb3JuZXIsIEluV2FsbEl0ZW0sIFJvb20sIFdhbGx9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQgdHlwZSB7SXRlbX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0nO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtjb3JuZXJUb2xlcmFuY2V9IGZyb20gJy4uL2NvbnN0L2RlZmF1bHRzJztcclxuaW1wb3J0IHtDb3JuZXJVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2NvcmUvY29ybmVyLXV0aWxzJztcclxuXHJcbi8qKiAqL1xyXG5jb25zdCBkZWZhdWx0Rmxvb3JQbGFuVG9sZXJhbmNlID0gMC4xO1xyXG5jb25zdCBkZWZhdWx0Q29ybmVyU25hcFRvbGVyYW5jZSA9IDAuNjtcclxuY29uc3QgZGVmYXVsdFdhbGxTbmFwVG9sZXJhbmNlID0gMC40O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmxvb3JwbGFuU2VydmljZSB7XHJcblxyXG4gIHB1YmxpYyByb29tc1VwZGF0ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHB1YmxpYyByb29tTG9hZGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgcmVkcmF3OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfY29ybmVyczogQ29ybmVyW10gPSBbXTtcclxuXHJcbiAgLyoqICovXHJcbiAgLy8gcHJpdmF0ZSByZWRyYXdfY2FsbGJhY2tzID0gJC5DYWxsYmFja3MoKTtcclxuICAvL1xyXG4gIC8vIC8qKiAqL1xyXG4gIC8vIHByaXZhdGUgdXBkYXRlZF9yb29tcyA9ICQuQ2FsbGJhY2tzKCk7XHJcbiAgLy9cclxuICAvLyAvKiogKi9cclxuICAvLyBwdWJsaWMgcm9vbUxvYWRpbmdDYWxsYmFja3MgPSAkLkNhbGxiYWNrcygpO1xyXG4gIC8vIHB1YmxpYyByb29tTG9hZGVkQ2FsbGJhY2tzID0gJC5DYWxsYmFja3MoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmxvb3IgdGV4dHVyZXMgYXJlIG93bmVkIGJ5IHRoZSBmbG9vcnBsYW4sIGJlY2F1c2Ugcm9vbSBvYmplY3RzIGFyZVxyXG4gICAqIGRlc3Ryb3llZCBhbmQgY3JlYXRlZCBlYWNoIHRpbWUgd2UgY2hhbmdlIHRoZSBmbG9vcnBsYW4uXHJcbiAgICogZmxvb3JUZXh0dXJlcyBpcyBhIG1hcCBvZiByb29tIFVVSURzIChzdHJpbmcpIHRvIGEgb2JqZWN0IHdpdGhcclxuICAgKiB1cmwgYW5kIHNjYWxlIGF0dHJpYnV0ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZmxvb3JUZXh0dXJlcyA9IHt9O1xyXG4gIHByaXZhdGUgX2Zsb29yQ29sb3JzID0ge307XHJcblxyXG4gIC8qKiBDb25zdHJ1Y3RzIGEgZmxvb3JwbGFuLiAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkcmF3Rmxvb3JwbGFuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWRyYXcubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyB3YWxsLlxyXG4gICAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgY29ybmVyLlxyXG4gICAqIEBwYXJhbSBlbmQgaGUgZW5kIGNvcm5lci5cclxuICAgKiBAcmV0dXJucyBUaGUgbmV3IHdhbGwuXHJcbiAgICovXHJcbiAgcHVibGljIG5ld1dhbGwoc3RhcnQ6IENvcm5lciwgZW5kOiBDb3JuZXIsIHVwZGF0ZSA9IHRydWUpOiBXYWxsIHtcclxuICAgIGNvbnN0IHdhbGwgPSB0aGlzLl9yb29tU2VydmljZS5jcmVhdGVXYWxsKHN0YXJ0LCBlbmQpO1xyXG4gICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdhbGw7XHJcbiAgfVxyXG5cclxuICAvKiogUmVtb3ZlcyBhIHdhbGwuXHJcbiAgICogQHBhcmFtIHdhbGwgVGhlIHdhbGwgdG8gYmUgcmVtb3ZlZC5cclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKSB7XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS5yZW1vdmVXYWxsKHdhbGwpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBuZXcgY29ybmVyLlxyXG4gICAqIEBwYXJhbSB4IFRoZSB4IGNvb3JkaW5hdGUuXHJcbiAgICogQHBhcmFtIHkgVGhlIHkgY29vcmRpbmF0ZS5cclxuICAgKiBAcGFyYW0gaWQgQW4gb3B0aW9uYWwgaWQuIElmIHVuc3BlY2lmaWVkLCB0aGUgaWQgd2lsbCBiZSBjcmVhdGVkIGludGVybmFsbHkuXHJcbiAgICogQHJldHVybnMgVGhlIG5ldyBjb3JuZXIuXHJcbiAgICovXHJcbiAgcHVibGljIG5ld0Nvcm5lcih4OiBudW1iZXIsIHk6IG51bWJlciwgaWQ/OiBzdHJpbmcpOiBDb3JuZXIge1xyXG4gICAgY29uc3QgY29ybmVyID0gbmV3IENvcm5lcih4LCB5LCBpZCk7XHJcbiAgICB0aGlzLl9jb3JuZXJzLnB1c2goY29ybmVyKTtcclxuICAgIHJldHVybiBjb3JuZXI7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0cyB0aGUgd2FsbHMuICovXHJcbiAgcHVibGljIGdldFdhbGxzKCk6IFdhbGxbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm9vbVNlcnZpY2Uud2FsbHM7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0cyBvcnBoYW4gd2FsbHMgKi9cclxuICBwdWJsaWMgZ2V0T3JwaGFuV2FsbHMoKTogV2FsbFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9yb29tU2VydmljZS5vcnBoYW5XYWxscztcclxuICB9XHJcblxyXG4gIC8qKiBHZXRzIHRoZSBjb3JuZXJzLiAqL1xyXG4gIHB1YmxpYyBnZXRDb3JuZXJzKCk6IENvcm5lcltdIHtcclxuICAgIHJldHVybiB0aGlzLl9jb3JuZXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgb3JwaGFuIGNvcm5lcnMgKi9cclxuICBwdWJsaWMgZ2V0T3JwaGFuQ29ybmVycygpOiBDb3JuZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ybmVycy5maWx0ZXIoKGNvcm5lcjogQ29ybmVyKSA9PiBjb3JuZXIuc3RhcnRXYWxscy5sZW5ndGggPT09IDAgJiYgY29ybmVyLmVuZFdhbGxzLmxlbmd0aCA9PT0gMCk7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0cyB0aGUgcm9vbXMuICovXHJcbiAgcHVibGljIGdldFJvb21zKCk6IFJvb21bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm9vbVNlcnZpY2Uucm9vbXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbXMoKTogSXRlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtU2VydmljZS5nZXRXYWxsSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVybGFwcGVkQ29ybmVyKHg6IG51bWJlciwgeTogbnVtYmVyLCBzbmFwPzogYm9vbGVhbik6IENvcm5lciB7XHJcbiAgICBjb25zdCB0b2xlcmFuY2UgPSBzbmFwID8gZGVmYXVsdENvcm5lclNuYXBUb2xlcmFuY2UgOiBkZWZhdWx0Rmxvb3JQbGFuVG9sZXJhbmNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9jb3JuZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLl9jb3JuZXJzW2ldLmRpc3RhbmNlRnJvbSh4LCB5KSA8IHRvbGVyYW5jZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb3JuZXJzW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3JuZXJJblNuYXBEaXN0YW5jZShcclxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgZXhjbHVkZUNvcm5lcnMgPSBbXVxyXG4gICk6IENvcm5lciB7XHJcbiAgICBjb25zdCBzbmFwVG9sZXJhbmNlID0gc25hcCA/IGRlZmF1bHRDb3JuZXJTbmFwVG9sZXJhbmNlIDogZGVmYXVsdEZsb29yUGxhblRvbGVyYW5jZTtcclxuICAgIGNvbnN0IHNuYXBDb3JuZXJzID0gdGhpcy5fY29ybmVyc1xyXG4gICAgICAuZmlsdGVyKGMgPT4gIWV4Y2x1ZGVDb3JuZXJzLmZpbmQoZWMgPT4gZWMueCA9PT0gYy54ICogMTAwICAmJiBlYy55ID09PSBjLnkgKiAxMDApKVxyXG4gICAgICAubWFwKGMgPT4gKHtcclxuICAgICAgICBkaXN0YW5jZTogYy5kaXN0YW5jZUZyb20oeCwgeSksXHJcbiAgICAgICAgY29ybmVyOiBjXHJcbiAgICAgIH0pKVxyXG4gICAgICAuZmlsdGVyKHNjID0+IHNjLmRpc3RhbmNlIDwgc25hcFRvbGVyYW5jZSlcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlKTtcclxuICAgIGlmIChzbmFwQ29ybmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBzbmFwQ29ybmVyc1swXS5jb3JuZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB3YWxsSW5TbmFwRGlzdGFuY2UoXHJcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgc25hcD86IGJvb2xlYW4sIHdhbGxFbmQ/XHJcbiAgKTogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9IHtcclxuICAgIGNvbnN0IHNuYXBUb2xlcmFuY2UgPSBzbmFwID8gZGVmYXVsdFdhbGxTbmFwVG9sZXJhbmNlIDogZGVmYXVsdEZsb29yUGxhblRvbGVyYW5jZTtcclxuICAgIGNvbnN0IHNuYXBXYWxscyA9IHRoaXMuZ2V0V2FsbHMoKVxyXG4gICAgICAuZmlsdGVyKHcgPT4gIXdhbGxFbmQgfHwgIXcuaXNUb09yRnJvbSh3YWxsRW5kLngsIHdhbGxFbmQueSkpXHJcbiAgICAgIC5tYXAodyA9PiAoe1xyXG4gICAgICAgIGRpc3RhbmNlOiB3LmRpc3RhbmNlRnJvbSh4LCB5KSxcclxuICAgICAgICB3YWxsOiB3XHJcbiAgICAgIH0pKVxyXG4gICAgICAuZmlsdGVyKHN3ID0+IHN3LmRpc3RhbmNlIDwgc25hcFRvbGVyYW5jZSlcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlKTtcclxuICAgIGlmIChzbmFwV2FsbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gc25hcFdhbGxzWzBdLndhbGwuY2xvc2VzdFBvaW50VG8oeCwgeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVybGFwcGVkV2FsbCh4OiBudW1iZXIsIHk6IG51bWJlciwgdG9sZXJhbmNlPzogbnVtYmVyKTogV2FsbCB7XHJcbiAgICB0b2xlcmFuY2UgPSB0b2xlcmFuY2UgfHwgZGVmYXVsdEZsb29yUGxhblRvbGVyYW5jZTtcclxuICAgIGNvbnN0IHdhbGxzOiBXYWxsW10gPSB0aGlzLmdldFdhbGxzKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdhbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh3YWxsc1tpXS5kaXN0YW5jZUZyb20oeCwgeSkgPCB0b2xlcmFuY2UpIHtcclxuICAgICAgICByZXR1cm4gd2FsbHNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJsYXBwZWRJdGVtKHg6IG51bWJlciwgeTogbnVtYmVyLCB0b2xlcmFuY2U/OiBudW1iZXIpOiBJdGVtIHtcclxuICAgIHRvbGVyYW5jZSA9IHRvbGVyYW5jZSB8fCBkZWZhdWx0Rmxvb3JQbGFuVG9sZXJhbmNlO1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChpdGVtc1tpXSBpbnN0YW5jZW9mIEluV2FsbEl0ZW0pIHtcclxuICAgICAgICBpZiAoKGl0ZW1zW2ldIGFzIEluV2FsbEl0ZW0pLmRpc3RhbmNlRnJvbTJkKHgsIHkpIDwgdG9sZXJhbmNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVybGFwcGVkRmxvb3IoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBSb29tIHtcclxuICAgIHJldHVybiB0aGlzLmdldFJvb21zKCkuZmluZChyb29tID0+IHtcclxuICAgICAgY29uc3QgcG9seWdvbiA9IENvcm5lclV0aWxzLlBvbHlnb25Gcm9tQ29ybmVycyhyb29tLmludGVyaW9yQ29ybmVycyk7XHJcbiAgICAgIHJldHVybiBVdGlscy5wb2ludEluUG9seWdvbih4LCB5LCBwb2x5Z29uKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gaW1wb3J0IGFuZCBleHBvcnQgLS0gY2xlYW51cFxyXG5cclxuICBwdWJsaWMgc2F2ZUZsb29ycGxhbigpIHtcclxuICAgIGNvbnN0IGZsb29ycGxhbiA9IHtcclxuICAgICAgY29ybmVyczoge30sXHJcbiAgICAgIHdhbGxzOiBbXSxcclxuICAgICAgd2FsbFRleHR1cmVzOiBbXSxcclxuICAgICAgZmxvb3JUZXh0dXJlczoge30sXHJcbiAgICAgIG5ld0Zsb29yVGV4dHVyZXM6IHt9LFxyXG4gICAgICBuZXdGbG9vckNvbG9yczoge31cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fY29ybmVycy5mb3JFYWNoKGNvcm5lciA9PiB7XHJcbiAgICAgIGZsb29ycGxhbi5jb3JuZXJzW2Nvcm5lci5pZF0gPSB7XHJcbiAgICAgICAgJ3gnOiBjb3JuZXIueCxcclxuICAgICAgICAneSc6IGNvcm5lci55XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldFdhbGxzKCkuZm9yRWFjaCh3YWxsID0+IHtcclxuICAgICAgZmxvb3JwbGFuLndhbGxzLnB1c2goe1xyXG4gICAgICAgICdjb3JuZXIxJzogd2FsbC5nZXRTdGFydCgpLmlkLFxyXG4gICAgICAgICdjb3JuZXIyJzogd2FsbC5nZXRFbmQoKS5pZCxcclxuICAgICAgICAnaGVpZ2h0Jzogd2FsbC5oZWlnaHQsXHJcbiAgICAgICAgJ3RoaWNrbmVzcyc6IHdhbGwudGhpY2tuZXNzLFxyXG4gICAgICAgICdmcm9udFRleHR1cmUnOiB3YWxsLmZyb250VGV4dHVyZSxcclxuICAgICAgICAnYmFja1RleHR1cmUnOiB3YWxsLmJhY2tUZXh0dXJlLFxyXG4gICAgICAgICdmcm9udENvbG9yJzogd2FsbC5mcm9udENvbG9yLFxyXG4gICAgICAgICdiYWNrQ29sb3InOiB3YWxsLmJhY2tDb2xvclxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXMgPSB0aGlzLl9yb29tU2VydmljZS5mbG9vclRleHR1cmVzO1xyXG4gICAgZmxvb3JwbGFuLm5ld0Zsb29yQ29sb3JzID0gdGhpcy5fcm9vbVNlcnZpY2UuZmxvb3JDb2xvcnM7XHJcbiAgICByZXR1cm4gZmxvb3JwbGFuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRGbG9vcnBsYW4oZmxvb3JwbGFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyB0aGlzLnJvb21Mb2FkaW5nQ2FsbGJhY2tzLmZpcmUoKTtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICBjb25zdCBjb3JuZXJzID0ge307XHJcbiAgICBpZiAoZmxvb3JwbGFuID09IG51bGwgfHwgISgnY29ybmVycycgaW4gZmxvb3JwbGFuKSB8fCAhKCd3YWxscycgaW4gZmxvb3JwbGFuKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGlkIGluIGZsb29ycGxhbi5jb3JuZXJzKSB7XHJcbiAgICAgIGlmIChmbG9vcnBsYW4uY29ybmVyc1tpZF0pIHtcclxuICAgICAgICBjb25zdCBjb3JuZXIgPSBmbG9vcnBsYW4uY29ybmVyc1tpZF07XHJcbiAgICAgICAgY29ybmVyc1tpZF0gPSB0aGlzLm5ld0Nvcm5lcihjb3JuZXIueCwgY29ybmVyLnksIGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZmxvb3JwbGFuLndhbGxzLmZvckVhY2god2FsbCA9PiB7XHJcbiAgICAgIGlmIChjb3JuZXJzW3dhbGwuY29ybmVyMV0gJiYgY29ybmVyc1t3YWxsLmNvcm5lcjJdKSB7XHJcbiAgICAgICAgY29uc3QgbmV3V2FsbCA9IHRoaXMubmV3V2FsbChcclxuICAgICAgICAgIGNvcm5lcnNbd2FsbC5jb3JuZXIxXSwgY29ybmVyc1t3YWxsLmNvcm5lcjJdLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKHdhbGwuZnJvbnRUZXh0dXJlKSB7XHJcbiAgICAgICAgICBuZXdXYWxsLmZyb250VGV4dHVyZSA9IHdhbGwuZnJvbnRUZXh0dXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2FsbC5iYWNrVGV4dHVyZSkge1xyXG4gICAgICAgICAgbmV3V2FsbC5iYWNrVGV4dHVyZSA9IHdhbGwuYmFja1RleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3YWxsLmZyb250Q29sb3IpIHtcclxuICAgICAgICAgIG5ld1dhbGwuZnJvbnRDb2xvciA9IHdhbGwuZnJvbnRDb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdhbGwuYmFja0NvbG9yKSB7XHJcbiAgICAgICAgICBuZXdXYWxsLmJhY2tDb2xvciA9IHdhbGwuYmFja0NvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2FsbC5oZWlnaHQpIHtcclxuICAgICAgICAgIG5ld1dhbGwuaGVpZ2h0ID0gd2FsbC5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3YWxsLnRoaWNrbmVzcykge1xyXG4gICAgICAgICAgbmV3V2FsbC50aGlja25lc3MgPSB3YWxsLnRoaWNrbmVzcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICgnbmV3Rmxvb3JUZXh0dXJlcycgaW4gZmxvb3JwbGFuKSB7XHJcbiAgICAgIC8vIHRoaXMuZmxvb3JUZXh0dXJlcyA9IGZsb29ycGxhbi5uZXdGbG9vclRleHR1cmVzO1xyXG4gICAgICB0aGlzLl9yb29tU2VydmljZS5mbG9vclRleHR1cmVzID0gZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXM7XHJcbiAgICB9XHJcbiAgICBpZiAoJ25ld0Zsb29yQ29sb3JzJyBpbiBmbG9vcnBsYW4pIHtcclxuICAgICAgLy8gdGhpcy5mbG9vckNvbG9ycyA9IGZsb29ycGxhbi5uZXdGbG9vckNvbG9ycztcclxuICAgICAgdGhpcy5fcm9vbVNlcnZpY2UuZmxvb3JDb2xvcnMgPSBmbG9vcnBsYW4ubmV3Rmxvb3JDb2xvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIC8vIGF3YWl0IHRoaXMuX3Jvb21TZXJ2aWNlLnVwZGF0ZUZsb29yc0FuZEVkZ2VzKCk7XHJcbiAgICB0aGlzLnJvb21Mb2FkZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHJvb21zXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJvb21Db3JuZXJzID0gdGhpcy5maW5kUm9vbXModGhpcy5fY29ybmVycyk7XHJcbiAgICBhd2FpdCB0aGlzLl9yb29tU2VydmljZS51cGRhdGVSb29tcyhyb29tQ29ybmVycyk7XHJcbiAgICB0aGlzLnJlZHJhd0Zsb29ycGxhbigpO1xyXG4gICAgdGhpcy5yb29tc1VwZGF0ZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1lcmdlV2l0aEludGVyc2VjdGVkKGNvcm5lcjogQ29ybmVyKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjaGVjayBjb3JuZXJzXHJcbiAgICBjb25zdCBjb21iaW5lV2l0aENvcm5lciA9IHRoaXMuZ2V0Q29ybmVycygpLmZpbmQoKGM6IENvcm5lcikgPT5cclxuICAgICAgY29ybmVyLmRpc3RhbmNlRnJvbUNvcm5lcihjKSA8IGNvcm5lclRvbGVyYW5jZSAmJiBjb3JuZXIgIT09IGMpO1xyXG4gICAgaWYgKGNvbWJpbmVXaXRoQ29ybmVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbWJpbmVDb3JuZXJzKGNvcm5lciwgY29tYmluZVdpdGhDb3JuZXIpO1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIGNoZWNrIHdhbGxzXHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxscygpLmZpbmQoKHc6IFdhbGwpID0+XHJcbiAgICAgIGNvcm5lci5kaXN0YW5jZUZyb21XYWxsKHcpIDwgY29ybmVyVG9sZXJhbmNlICYmICFjb3JuZXIuaXNXYWxsQ29ubmVjdGVkKHcpKTtcclxuICAgIGlmICh3YWxsKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbiB0byBiZSBvbiB3YWxsXHJcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShjb3JuZXIueCwgY29ybmVyLnksXHJcbiAgICAgICAgd2FsbC5nZXRTdGFydCgpLngsIHdhbGwuZ2V0U3RhcnQoKS55LFxyXG4gICAgICAgIHdhbGwuZ2V0RW5kKCkueCwgd2FsbC5nZXRFbmQoKS55KTtcclxuICAgICAgY29ybmVyLnggPSBpbnRlcnNlY3Rpb24ueDtcclxuICAgICAgY29ybmVyLnkgPSBpbnRlcnNlY3Rpb24ueTtcclxuICAgICAgLy8gbWVyZ2UgdGhpcyBjb3JuZXIgaW50byB3YWxsIGJ5IGJyZWFraW5nIHdhbGwgaW50byB0d28gcGFydHNcclxuICAgICAgdGhpcy5zcGxpdFdhbGwod2FsbCwgY29ybmVyKTtcclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkQ29ybmVyc0ZvckludGVyc2VjdGlvbnMoKSB7XHJcbiAgICBjb25zdCBpbnRlcnNlY3RzID0gdGhpcy5nZXRXYWxscygpLm1hcCh3YWxsID0+ICh7XHJcbiAgICAgIHdhbGwsXHJcbiAgICAgIGludGVyc2VjdGluZ1dhbGw6IHRoaXMuX2dldEZpcnN0SW50ZXJzZWN0aW5nV2FsbCh3YWxsKVxyXG4gICAgfSkpLmZpbHRlcihpID0+IGkuaW50ZXJzZWN0aW5nV2FsbCk7XHJcbiAgICBpZiAoaW50ZXJzZWN0cy5sZW5ndGggPCAyKSB7IHJldHVybjsgfVxyXG4gICAgY29uc3QgdzEgPSBpbnRlcnNlY3RzWzBdLndhbGw7XHJcbiAgICBjb25zdCB3MiA9IGludGVyc2VjdHNbMF0uaW50ZXJzZWN0aW5nV2FsbDtcclxuICAgIGNvbnN0IGludGVyc2VjdGlvbkNvb3JkcyA9IFV0aWxzLmxpbmVzSW50ZXJzZWN0aW9uKFxyXG4gICAgICB3MS5nZXRTdGFydFgoKSwgdzEuZ2V0U3RhcnRZKCksXHJcbiAgICAgIHcxLmdldEVuZFgoKSwgdzEuZ2V0RW5kWSgpLFxyXG4gICAgICB3Mi5nZXRTdGFydFgoKSwgdzIuZ2V0U3RhcnRZKCksXHJcbiAgICAgIHcyLmdldEVuZFgoKSwgdzIuZ2V0RW5kWSgpKTtcclxuICAgIGlmIChpbnRlcnNlY3Rpb25Db29yZHMubGVuZ3RoICE9PSAyKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGNvbnN0IG5ld0Nvcm5lciA9IHRoaXMubmV3Q29ybmVyKFxyXG4gICAgICBpbnRlcnNlY3Rpb25Db29yZHNbMF0sXHJcbiAgICAgIGludGVyc2VjdGlvbkNvb3Jkc1sxXVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3BsaXRXYWxsKHcxLCBuZXdDb3JuZXIpO1xyXG4gICAgdGhpcy5zcGxpdFdhbGwodzIsIG5ld0Nvcm5lcik7XHJcblxyXG4gICAgdGhpcy5hZGRDb3JuZXJzRm9ySW50ZXJzZWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNwbGl0V2FsbCh3YWxsOiBXYWxsLCBjb3JuZXI6IENvcm5lcik6IFdhbGwge1xyXG4gICAgY29uc3QgbmV3V2FsbCA9IHRoaXMubmV3V2FsbChjb3JuZXIsIHdhbGwuZ2V0RW5kKCksIGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBwcmV2Q29ybmVyID0gd2FsbC5nZXRFbmQoKTtcclxuICAgIHdhbGwuc2V0RW5kKGNvcm5lcik7XHJcblxyXG4gICAgY29ybmVyLnJlbW92ZUR1cGxpY2F0ZVdhbGxzKCk7XHJcbiAgICBwcmV2Q29ybmVyLnJlbW92ZUR1cGxpY2F0ZVdhbGxzKCk7XHJcblxyXG4gICAgcmV0dXJuIG5ld1dhbGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjZW50ZXIgb2YgdGhlIGZsb29ycGxhbiBpbiB0aGUgeSBwbGFuZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDZW50ZXIoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBkaW0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yMygoZGltLngubWluICsgZGltLngubWF4KSAqIDAuNSwgMCwgKGRpbS55Lm1pbiArIGRpbS55Lm1heCkgKiAwLjUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNpemUoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBkaW0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yMyhkaW0ueC5tYXggLSBkaW0ueC5taW4sIDAsIGRpbS55Lm1heCAtIGRpbS55Lm1pbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGltZW5zaW9ucyhzY2FsZTogbnVtYmVyID0gMSk6IGFueSB7XHJcblxyXG4gICAgbGV0IHhNaW4gPSBJbmZpbml0eTtcclxuICAgIGxldCB4TWF4ID0gLUluZmluaXR5O1xyXG4gICAgbGV0IHlNaW4gPSBJbmZpbml0eTtcclxuICAgIGxldCB5TWF4ID0gLUluZmluaXR5O1xyXG4gICAgdGhpcy5fY29ybmVycy5mb3JFYWNoKChjb3JuZXIpID0+IHtcclxuICAgICAgaWYgKGNvcm5lci54IDwgeE1pbikgeyB4TWluID0gY29ybmVyLng7IH1cclxuICAgICAgaWYgKGNvcm5lci54ID4geE1heCkgeyB4TWF4ID0gY29ybmVyLng7IH1cclxuICAgICAgaWYgKGNvcm5lci55IDwgeU1pbikgeyB5TWluID0gY29ybmVyLnk7IH1cclxuICAgICAgaWYgKGNvcm5lci55ID4geU1heCkgeyB5TWF4ID0gY29ybmVyLnk7IH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeDoge21pbjogeE1pbiAqIHNjYWxlLCBtYXg6IHhNYXggKiBzY2FsZX0sXHJcbiAgICAgIHk6IHttaW46IHlNaW4gKiBzY2FsZSwgbWF4OiB5TWF4ICogc2NhbGV9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZU9ycGhhbkNvcm5lcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldE9ycGhhbkNvcm5lcnMoKS5mb3JFYWNoKChjb3JuZXI6IENvcm5lcikgPT4ge1xyXG4gICAgICB0aGlzLl9yZW1vdmVDb3JuZXIoY29ybmVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgICogRmluZCB0aGUgXCJyb29tc1wiIGluIG91ciBwbGFuYXIgc3RyYWlnaHQtbGluZSBncmFwaC5cclxuICAgICogUm9vbXMgYXJlIHNldCBvZiB0aGUgc21hbGxlc3QgKGJ5IGFyZWEpIHBvc3NpYmxlIGN5Y2xlcyBpbiB0aGlzIGdyYXBoLlxyXG4gICAgKiBAcGFyYW0gY29ybmVycyBUaGUgY29ybmVycyBvZiB0aGUgZmxvb3JwbGFuLlxyXG4gICAgKiBAcmV0dXJucyBUaGUgcm9vbXMsIGVhY2ggcm9vbSBhcyBhbiBhcnJheSBvZiBjb3JuZXJzLlxyXG4gICAgKi9cclxuICBwdWJsaWMgZmluZFJvb21zKGNvcm5lcnM6IENvcm5lcltdKTogQ29ybmVyW11bXSB7XHJcblxyXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlVGhldGEocHJldmlvdXNDb3JuZXI6IENvcm5lciwgY3VycmVudENvcm5lcjogQ29ybmVyLCBuZXh0Q29ybmVyOiBDb3JuZXIpIHtcclxuICAgICAgY29uc3QgdGhldGEgPSBVdGlscy5hbmdsZTJwaShcclxuICAgICAgICBwcmV2aW91c0Nvcm5lci54IC0gY3VycmVudENvcm5lci54LFxyXG4gICAgICAgIHByZXZpb3VzQ29ybmVyLnkgLSBjdXJyZW50Q29ybmVyLnksXHJcbiAgICAgICAgbmV4dENvcm5lci54IC0gY3VycmVudENvcm5lci54LFxyXG4gICAgICAgIG5leHRDb3JuZXIueSAtIGN1cnJlbnRDb3JuZXIueSk7XHJcbiAgICAgIHJldHVybiB0aGV0YTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVSb29tcyhyb29tQXJyYXk6IENvcm5lcltdW10pOiBDb3JuZXJbXVtdIHtcclxuICAgICAgY29uc3QgcmVzdWx0czogQ29ybmVyW11bXSA9IFtdO1xyXG4gICAgICBjb25zdCBsb29rdXAgPSB7fTtcclxuICAgICAgY29uc3QgaGFzaEZ1bmMgPSBmdW5jdGlvbiAoY29ybmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvcm5lci5pZDtcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgc2VwID0gJy0nO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvb21BcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vIHJvb21zIGFyZSBjeWNsZXMsIHNoaWZ0IGl0IGFyb3VuZCB0byBjaGVjayB1bmlxdWVuZXNzXHJcbiAgICAgICAgbGV0IGFkZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHN0cjtcclxuICAgICAgICBjb25zdCByb29tID0gcm9vbUFycmF5W2ldO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm9vbS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgcm9vbVNoaWZ0ID0gVXRpbHMuY3ljbGUocm9vbSwgaik7XHJcbiAgICAgICAgICBzdHIgPSBVdGlscy5tYXAocm9vbVNoaWZ0LCBoYXNoRnVuYykuam9pbihzZXApO1xyXG4gICAgICAgICAgaWYgKGxvb2t1cC5oYXNPd25Qcm9wZXJ0eShzdHIpKSB7XHJcbiAgICAgICAgICAgIGFkZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkKSB7XHJcbiAgICAgICAgICByZXN1bHRzLnB1c2gocm9vbUFycmF5W2ldKTtcclxuICAgICAgICAgIGxvb2t1cFtzdHJdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZFRpZ2h0ZXN0Q3ljbGUoZmlyc3RDb3JuZXI6IENvcm5lciwgc2Vjb25kQ29ybmVyOiBDb3JuZXIpOiBDb3JuZXJbXSB7XHJcbiAgICAgIGNvbnN0IHN0YWNrOiB7XHJcbiAgICAgICAgY29ybmVyOiBDb3JuZXIsXHJcbiAgICAgICAgcHJldmlvdXNDb3JuZXJzOiBDb3JuZXJbXVxyXG4gICAgICB9W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBuZXh0ID0ge1xyXG4gICAgICAgIGNvcm5lcjogc2Vjb25kQ29ybmVyLFxyXG4gICAgICAgIHByZXZpb3VzQ29ybmVyczogW2ZpcnN0Q29ybmVyXVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCB2aXNpdGVkID0ge307XHJcbiAgICAgIHZpc2l0ZWRbZmlyc3RDb3JuZXIuaWRdID0gdHJ1ZTtcclxuXHJcbiAgICAgIHdoaWxlIChuZXh0KSB7XHJcbiAgICAgICAgLy8gdXBkYXRlIHByZXZpb3VzIGNvcm5lcnMsIGN1cnJlbnQgY29ybmVyLCBhbmQgdmlzaXRlZCBjb3JuZXJzXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvcm5lciA9IG5leHQuY29ybmVyO1xyXG4gICAgICAgIHZpc2l0ZWRbY3VycmVudENvcm5lci5pZF0gPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBkaWQgd2UgbWFrZSBpdCBiYWNrIHRvIHRoZSBzdGFydENvcm5lcj9cclxuICAgICAgICBpZiAobmV4dC5jb3JuZXIgPT09IGZpcnN0Q29ybmVyICYmIGN1cnJlbnRDb3JuZXIgIT09IHNlY29uZENvcm5lcikge1xyXG4gICAgICAgICAgcmV0dXJuIG5leHQucHJldmlvdXNDb3JuZXJzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWRkVG9TdGFjazogQ29ybmVyW10gPSBbXTtcclxuICAgICAgICBjb25zdCBhZGphY2VudENvcm5lcnMgPSBuZXh0LmNvcm5lci5hZGphY2VudENvcm5lcnMoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkamFjZW50Q29ybmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgbmV4dENvcm5lciA9IGFkamFjZW50Q29ybmVyc1tpXTtcclxuXHJcbiAgICAgICAgICAvLyBpcyB0aGlzIHdoZXJlIHdlIGNhbWUgZnJvbT9cclxuICAgICAgICAgIC8vIGdpdmUgYW4gZXhjZXB0aW9uIGlmIGl0cyB0aGUgZmlyc3QgY29ybmVyIGFuZCB3ZSBhcmVuJ3QgYXQgdGhlIHNlY29uZCBjb3JuZXJcclxuICAgICAgICAgIGlmIChuZXh0Q29ybmVyLmlkIGluIHZpc2l0ZWQgJiZcclxuICAgICAgICAgICAgIShuZXh0Q29ybmVyID09PSBmaXJzdENvcm5lciAmJiBjdXJyZW50Q29ybmVyICE9PSBzZWNvbmRDb3JuZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIG5vcGUsIHRocm93IGl0IG9uIHRoZSBxdWV1ZVxyXG4gICAgICAgICAgYWRkVG9TdGFjay5wdXNoKG5leHRDb3JuZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNDb3JuZXJzID0gbmV4dC5wcmV2aW91c0Nvcm5lcnMuc2xpY2UoMCk7XHJcbiAgICAgICAgcHJldmlvdXNDb3JuZXJzLnB1c2goY3VycmVudENvcm5lcik7XHJcbiAgICAgICAgaWYgKGFkZFRvU3RhY2subGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgLy8gdmlzaXQgdGhlIG9uZXMgd2l0aCBzbWFsbGVzdCB0aGV0YSBmaXJzdFxyXG4gICAgICAgICAgY29uc3QgcHJldmlvdXNDb3JuZXIgPSBuZXh0LnByZXZpb3VzQ29ybmVyc1tuZXh0LnByZXZpb3VzQ29ybmVycy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgIGFkZFRvU3RhY2suc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICByZXR1cm4gKGNhbGN1bGF0ZVRoZXRhKHByZXZpb3VzQ29ybmVyLCBjdXJyZW50Q29ybmVyLCBiKSAtXHJcbiAgICAgICAgICAgICAgY2FsY3VsYXRlVGhldGEocHJldmlvdXNDb3JuZXIsIGN1cnJlbnRDb3JuZXIsIGEpKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFkZFRvU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gYWRkIHRvIHRoZSBzdGFja1xyXG4gICAgICAgICAgYWRkVG9TdGFjay5mb3JFYWNoKChjb3JuZXIpID0+IHtcclxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XHJcbiAgICAgICAgICAgICAgY29ybmVyOiBjb3JuZXIsXHJcbiAgICAgICAgICAgICAgcHJldmlvdXNDb3JuZXJzOiBwcmV2aW91c0Nvcm5lcnNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcCBvZmYgdGhlIG5leHQgb25lXHJcbiAgICAgICAgbmV4dCA9IHN0YWNrLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaW5kIHRpZ2h0ZXN0IGxvb3BzLCBmb3IgZWFjaCBjb3JuZXIsIGZvciBlYWNoIGFkamFjZW50XHJcbiAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzLCBvbmx5IGNoZWNrIGNvcm5lcnMgd2l0aCA+IDIgYWRqYWNlbnRzLCBvciBpc29sYXRlZCBjeWNsZXNcclxuICAgIGNvbnN0IGxvb3BzOiBDb3JuZXJbXVtdID0gW107XHJcblxyXG4gICAgY29ybmVycy5mb3JFYWNoKChmaXJzdENvcm5lcikgPT4ge1xyXG4gICAgICBmaXJzdENvcm5lci5hZGphY2VudENvcm5lcnMoKS5mb3JFYWNoKChzZWNvbmRDb3JuZXIpID0+IHtcclxuICAgICAgICBsb29wcy5wdXNoKGZpbmRUaWdodGVzdEN5Y2xlKGZpcnN0Q29ybmVyLCBzZWNvbmRDb3JuZXIpKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyByZW1vdmUgZHVwbGljYXRlc1xyXG4gICAgY29uc3QgdW5pcXVlTG9vcHMgPSByZW1vdmVEdXBsaWNhdGVSb29tcyhsb29wcyk7XHJcbiAgICAvLyByZW1vdmUgQ1cgbG9vcHNcclxuICAgIGNvbnN0IHVuaXF1ZUNDV0xvb3BzID0gVXRpbHMucmVtb3ZlSWYodW5pcXVlTG9vcHMsIFV0aWxzLmlzQ2xvY2t3aXNlKTtcclxuXHJcbiAgICByZXR1cm4gdW5pcXVlQ0NXTG9vcHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICB0aGlzLl9jb3JuZXJzID0gW107XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RJbnRlcnNlY3RpbmdXYWxsKGZpcnN0V2FsbDogV2FsbCk6IFdhbGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0V2FsbHMoKS5maW5kKHNlY29uZFdhbGwgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fd2FsbHNJbnRlcnNlY3RpbmcoZmlyc3RXYWxsLCBzZWNvbmRXYWxsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlU2NlbmUoKTogdm9pZCB7XHJcblxyXG4gIH1cclxuXHJcbiAgLyogd2FsbCBpbnRlcnNlY3RpbmcgYnV0IG5vdCBpbiBjb3JuZXJzICovXHJcbiAgcHJpdmF0ZSBfZ2V0QWxsSW50ZXJzZWN0aW5nV2FsbHMoZmlyc3RXYWxsOiBXYWxsKTogV2FsbFtdIHtcclxuICAgIHJldHVybiB0aGlzLmdldFdhbGxzKCkuZmlsdGVyKHNlY29uZFdhbGwgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fd2FsbHNJbnRlcnNlY3RpbmcoZmlyc3RXYWxsLCBzZWNvbmRXYWxsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfd2FsbHNJbnRlcnNlY3RpbmcoZmlyc3RXYWxsOiBXYWxsLCBzZWNvbmRXYWxsOiBXYWxsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZmlyc3RXYWxsID09PSBzZWNvbmRXYWxsKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgY29uc3QgY29ybmVycyA9IG5ldyBTZXQoW1xyXG4gICAgICBmaXJzdFdhbGwuZ2V0RW5kKCksXHJcbiAgICAgIGZpcnN0V2FsbC5nZXRTdGFydCgpLFxyXG4gICAgICBzZWNvbmRXYWxsLmdldEVuZCgpLFxyXG4gICAgICBzZWNvbmRXYWxsLmdldFN0YXJ0KClcclxuICAgIF0pO1xyXG4gICAgaWYgKGNvcm5lcnMuc2l6ZSAhPT0gNCkgIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gICAgaWYgKCFVdGlscy5saW5lTGluZUludGVyc2VjdChcclxuICAgICAgZmlyc3RXYWxsLmdldFN0YXJ0WCgpLCBmaXJzdFdhbGwuZ2V0U3RhcnRZKCksXHJcbiAgICAgIGZpcnN0V2FsbC5nZXRFbmRYKCksIGZpcnN0V2FsbC5nZXRFbmRZKCksXHJcbiAgICAgIHNlY29uZFdhbGwuZ2V0U3RhcnRYKCksIHNlY29uZFdhbGwuZ2V0U3RhcnRZKCksXHJcbiAgICAgIHNlY29uZFdhbGwuZ2V0RW5kWCgpLCBzZWNvbmRXYWxsLmdldEVuZFkoKSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludGVyc2VjdHMgPSBVdGlscy5saW5lc0ludGVyc2VjdGlvbihcclxuICAgICAgZmlyc3RXYWxsLmdldFN0YXJ0WCgpLCBmaXJzdFdhbGwuZ2V0U3RhcnRZKCksXHJcbiAgICAgIGZpcnN0V2FsbC5nZXRFbmRYKCksIGZpcnN0V2FsbC5nZXRFbmRZKCksXHJcbiAgICAgIHNlY29uZFdhbGwuZ2V0U3RhcnRYKCksIHNlY29uZFdhbGwuZ2V0U3RhcnRZKCksXHJcbiAgICAgIHNlY29uZFdhbGwuZ2V0RW5kWCgpLCBzZWNvbmRXYWxsLmdldEVuZFkoKVxyXG4gICAgKTtcclxuICAgIGlmIChpbnRlcnNlY3RzKSB7XHJcbiAgICAgIGNvbnN0IFt4LCB5XSA9IGludGVyc2VjdHM7XHJcbiAgICAgIGNvbnN0IGluQ29ybmVyID1cclxuICAgICAgICAoeCA9PT0gZmlyc3RXYWxsLmdldFN0YXJ0WCgpICYmIHkgPT09IGZpcnN0V2FsbC5nZXRTdGFydFkoKSkgfHxcclxuICAgICAgICAoeCA9PT0gZmlyc3RXYWxsLmdldEVuZFgoKSAmJiB5ID09PSBmaXJzdFdhbGwuZ2V0RW5kWSgpKTtcclxuICAgICAgcmV0dXJuICFpbkNvcm5lcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKiogUmVtb3ZlcyBhIGNvcm5lci5cclxuICAgKiBAcGFyYW0gY29ybmVyIFRoZSBjb3JuZXIgdG8gYmUgcmVtb3ZlZC5cclxuICAgKi9cclxuICBwcml2YXRlIF9yZW1vdmVDb3JuZXIoY29ybmVyOiBDb3JuZXIpIHtcclxuICAgIFV0aWxzLnJlbW92ZVZhbHVlKHRoaXMuX2Nvcm5lcnMsIGNvcm5lcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21iaW5lQ29ybmVycyhhOiBDb3JuZXIsIGI6IENvcm5lcikge1xyXG4gICAgLy8gdXBkYXRlIHBvc2l0aW9uIHRvIG90aGVyIGNvcm5lcidzXHJcbiAgICBhLnggPSBiLng7XHJcbiAgICBhLnkgPSBiLnk7XHJcbiAgICAvLyBhYnNvcmIgdGhlIG90aGVyIGNvcm5lcidzIHdhbGxTdGFydHMgYW5kIHdhbGxFbmRzXHJcbiAgICBhLmFic29yYldhbGxzRnJvbShiKTtcclxuICAgIC8vIGRlbGV0ZSB0aGUgb3RoZXIgY29ybmVyXHJcbiAgICBiLnJlbW92ZUFsbCgpO1xyXG4gICAgYS5yZW1vdmVEdXBsaWNhdGVXYWxscygpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
536
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3JwbGFuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDOUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sdUNBQXVDLENBQUM7QUFJckYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFFakUsTUFBTTtBQUNOLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBS3JDLE1BQU0sT0FBTyxnQkFBZ0I7SUE0QjNCLDhCQUE4QjtJQUM5QixZQUNVLFlBQXlCLEVBQ3pCLFlBQXlCO1FBRHpCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBN0I1QixpQkFBWSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2xELGVBQVUsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNoRCxXQUFNLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbkQsTUFBTTtRQUNFLGFBQVEsR0FBYSxFQUFF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e1ZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb3JuZXIsIEluV2FsbEl0ZW0sIFJvb20sIFdhbGx9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQgdHlwZSB7SXRlbX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0nO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtjb3JuZXJUb2xlcmFuY2V9IGZyb20gJy4uL2NvbnN0L2RlZmF1bHRzJztcclxuaW1wb3J0IHtDb3JuZXJVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2NvcmUvY29ybmVyLXV0aWxzJztcclxuXHJcbi8qKiAqL1xyXG5jb25zdCBkZWZhdWx0Rmxvb3JQbGFuVG9sZXJhbmNlID0gMC4xO1xyXG5jb25zdCBkZWZhdWx0Q29ybmVyU25hcFRvbGVyYW5jZSA9IDAuNjtcclxuY29uc3QgZGVmYXVsdFdhbGxTbmFwVG9sZXJhbmNlID0gMC40O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmxvb3JwbGFuU2VydmljZSB7XHJcblxyXG4gIHB1YmxpYyByb29tc1VwZGF0ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHB1YmxpYyByb29tTG9hZGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgcmVkcmF3OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfY29ybmVyczogQ29ybmVyW10gPSBbXTtcclxuXHJcbiAgLyoqICovXHJcbiAgLy8gcHJpdmF0ZSByZWRyYXdfY2FsbGJhY2tzID0gJC5DYWxsYmFja3MoKTtcclxuICAvL1xyXG4gIC8vIC8qKiAqL1xyXG4gIC8vIHByaXZhdGUgdXBkYXRlZF9yb29tcyA9ICQuQ2FsbGJhY2tzKCk7XHJcbiAgLy9cclxuICAvLyAvKiogKi9cclxuICAvLyBwdWJsaWMgcm9vbUxvYWRpbmdDYWxsYmFja3MgPSAkLkNhbGxiYWNrcygpO1xyXG4gIC8vIHB1YmxpYyByb29tTG9hZGVkQ2FsbGJhY2tzID0gJC5DYWxsYmFja3MoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmxvb3IgdGV4dHVyZXMgYXJlIG93bmVkIGJ5IHRoZSBmbG9vcnBsYW4sIGJlY2F1c2Ugcm9vbSBvYmplY3RzIGFyZVxyXG4gICAqIGRlc3Ryb3llZCBhbmQgY3JlYXRlZCBlYWNoIHRpbWUgd2UgY2hhbmdlIHRoZSBmbG9vcnBsYW4uXHJcbiAgICogZmxvb3JUZXh0dXJlcyBpcyBhIG1hcCBvZiByb29tIFVVSURzIChzdHJpbmcpIHRvIGEgb2JqZWN0IHdpdGhcclxuICAgKiB1cmwgYW5kIHNjYWxlIGF0dHJpYnV0ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZmxvb3JUZXh0dXJlcyA9IHt9O1xyXG4gIHByaXZhdGUgX2Zsb29yQ29sb3JzID0ge307XHJcblxyXG4gIC8qKiBDb25zdHJ1Y3RzIGEgZmxvb3JwbGFuLiAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkcmF3Rmxvb3JwbGFuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWRyYXcubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyB3YWxsLlxyXG4gICAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgY29ybmVyLlxyXG4gICAqIEBwYXJhbSBlbmQgaGUgZW5kIGNvcm5lci5cclxuICAgKiBAcmV0dXJucyBUaGUgbmV3IHdhbGwuXHJcbiAgICovXHJcbiAgcHVibGljIG5ld1dhbGwoc3RhcnQ6IENvcm5lciwgZW5kOiBDb3JuZXIsIHVwZGF0ZSA9IHRydWUpOiBXYWxsIHtcclxuICAgIGNvbnN0IHdhbGwgPSB0aGlzLl9yb29tU2VydmljZS5jcmVhdGVXYWxsKHN0YXJ0LCBlbmQpO1xyXG4gICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdhbGw7XHJcbiAgfVxyXG5cclxuICAvKiogUmVtb3ZlcyBhIHdhbGwuXHJcbiAgICogQHBhcmFtIHdhbGwgVGhlIHdhbGwgdG8gYmUgcmVtb3ZlZC5cclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKSB7XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS5yZW1vdmVXYWxsKHdhbGwpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBuZXcgY29ybmVyLlxyXG4gICAqIEBwYXJhbSB4IFRoZSB4IGNvb3JkaW5hdGUuXHJcbiAgICogQHBhcmFtIHkgVGhlIHkgY29vcmRpbmF0ZS5cclxuICAgKiBAcGFyYW0gaWQgQW4gb3B0aW9uYWwgaWQuIElmIHVuc3BlY2lmaWVkLCB0aGUgaWQgd2lsbCBiZSBjcmVhdGVkIGludGVybmFsbHkuXHJcbiAgICogQHJldHVybnMgVGhlIG5ldyBjb3JuZXIuXHJcbiAgICovXHJcbiAgcHVibGljIG5ld0Nvcm5lcih4OiBudW1iZXIsIHk6IG51bWJlciwgaWQ/OiBzdHJpbmcpOiBDb3JuZXIge1xyXG4gICAgY29uc3QgY29ybmVyID0gbmV3IENvcm5lcih4LCB5LCBpZCk7XHJcbiAgICB0aGlzLl9jb3JuZXJzLnB1c2goY29ybmVyKTtcclxuICAgIHJldHVybiBjb3JuZXI7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0cyB0aGUgd2FsbHMuICovXHJcbiAgcHVibGljIGdldFdhbGxzKCk6IFdhbGxbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm9vbVNlcnZpY2Uud2FsbHM7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0cyBvcnBoYW4gd2FsbHMgKi9cclxuICBwdWJsaWMgZ2V0T3JwaGFuV2FsbHMoKTogV2FsbFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9yb29tU2VydmljZS5vcnBoYW5XYWxscztcclxuICB9XHJcblxyXG4gIC8qKiBHZXRzIHRoZSBjb3JuZXJzLiAqL1xyXG4gIHB1YmxpYyBnZXRDb3JuZXJzKCk6IENvcm5lcltdIHtcclxuICAgIHJldHVybiB0aGlzLl9jb3JuZXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgb3JwaGFuIGNvcm5lcnMgKi9cclxuICBwdWJsaWMgZ2V0T3JwaGFuQ29ybmVycygpOiBDb3JuZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ybmVycy5maWx0ZXIoKGNvcm5lcjogQ29ybmVyKSA9PiBjb3JuZXIuc3RhcnRXYWxscy5sZW5ndGggPT09IDAgJiYgY29ybmVyLmVuZFdhbGxzLmxlbmd0aCA9PT0gMCk7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0cyB0aGUgcm9vbXMuICovXHJcbiAgcHVibGljIGdldFJvb21zKCk6IFJvb21bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm9vbVNlcnZpY2Uucm9vbXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbXMoKTogSXRlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtU2VydmljZS5nZXRXYWxsSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVybGFwcGVkQ29ybmVyKHg6IG51bWJlciwgeTogbnVtYmVyLCBzbmFwPzogYm9vbGVhbik6IENvcm5lciB7XHJcbiAgICBjb25zdCB0b2xlcmFuY2UgPSBzbmFwID8gZGVmYXVsdENvcm5lclNuYXBUb2xlcmFuY2UgOiBkZWZhdWx0Rmxvb3JQbGFuVG9sZXJhbmNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9jb3JuZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLl9jb3JuZXJzW2ldLmRpc3RhbmNlRnJvbSh4LCB5KSA8IHRvbGVyYW5jZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb3JuZXJzW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3JuZXJJblNuYXBEaXN0YW5jZShcclxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgZXhjbHVkZUNvcm5lcnMgPSBbXVxyXG4gICk6IENvcm5lciB7XHJcbiAgICBjb25zdCBzbmFwVG9sZXJhbmNlID0gc25hcCA/IGRlZmF1bHRDb3JuZXJTbmFwVG9sZXJhbmNlIDogZGVmYXVsdEZsb29yUGxhblRvbGVyYW5jZTtcclxuICAgIGNvbnN0IHNuYXBDb3JuZXJzID0gdGhpcy5fY29ybmVyc1xyXG4gICAgICAuZmlsdGVyKGMgPT4gIWV4Y2x1ZGVDb3JuZXJzLmZpbmQoZWMgPT4gZWMueCA9PT0gYy54ICogMTAwICAmJiBlYy55ID09PSBjLnkgKiAxMDApKVxyXG4gICAgICAubWFwKGMgPT4gKHtcclxuICAgICAgICBkaXN0YW5jZTogYy5kaXN0YW5jZUZyb20oeCwgeSksXHJcbiAgICAgICAgY29ybmVyOiBjXHJcbiAgICAgIH0pKVxyXG4gICAgICAuZmlsdGVyKHNjID0+IHNjLmRpc3RhbmNlIDwgc25hcFRvbGVyYW5jZSlcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlKTtcclxuICAgIGlmIChzbmFwQ29ybmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBzbmFwQ29ybmVyc1swXS5jb3JuZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB3YWxsSW5TbmFwRGlzdGFuY2UoXHJcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgc25hcD86IGJvb2xlYW4sIHdhbGxFbmQ/XHJcbiAgKTogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9IHtcclxuICAgIGNvbnN0IHNuYXBUb2xlcmFuY2UgPSBzbmFwID8gZGVmYXVsdFdhbGxTbmFwVG9sZXJhbmNlIDogZGVmYXVsdEZsb29yUGxhblRvbGVyYW5jZTtcclxuICAgIGNvbnN0IHNuYXBXYWxscyA9IHRoaXMuZ2V0V2FsbHMoKVxyXG4gICAgICAuZmlsdGVyKHcgPT4gIXdhbGxFbmQgfHwgIXcuaXNUb09yRnJvbSh3YWxsRW5kLngsIHdhbGxFbmQueSkpXHJcbiAgICAgIC5tYXAodyA9PiAoe1xyXG4gICAgICAgIGRpc3RhbmNlOiB3LmRpc3RhbmNlRnJvbSh4LCB5KSxcclxuICAgICAgICB3YWxsOiB3XHJcbiAgICAgIH0pKVxyXG4gICAgICAuZmlsdGVyKHN3ID0+IHN3LmRpc3RhbmNlIDwgc25hcFRvbGVyYW5jZSlcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlKTtcclxuICAgIGlmIChzbmFwV2FsbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gc25hcFdhbGxzWzBdLndhbGwuY2xvc2VzdFBvaW50VG8oeCwgeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVybGFwcGVkV2FsbCh4OiBudW1iZXIsIHk6IG51bWJlciwgdG9sZXJhbmNlPzogbnVtYmVyKTogV2FsbCB7XHJcbiAgICB0b2xlcmFuY2UgPSB0b2xlcmFuY2UgfHwgZGVmYXVsdEZsb29yUGxhblRvbGVyYW5jZTtcclxuICAgIGNvbnN0IHdhbGxzOiBXYWxsW10gPSB0aGlzLmdldFdhbGxzKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdhbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh3YWxsc1tpXS5kaXN0YW5jZUZyb20oeCwgeSkgPCB0b2xlcmFuY2UpIHtcclxuICAgICAgICByZXR1cm4gd2FsbHNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJsYXBwZWRJdGVtKHg6IG51bWJlciwgeTogbnVtYmVyLCB0b2xlcmFuY2U/OiBudW1iZXIpOiBJdGVtIHtcclxuICAgIHRvbGVyYW5jZSA9IHRvbGVyYW5jZSB8fCBkZWZhdWx0Rmxvb3JQbGFuVG9sZXJhbmNlO1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChpdGVtc1tpXSBpbnN0YW5jZW9mIEluV2FsbEl0ZW0pIHtcclxuICAgICAgICBpZiAoKGl0ZW1zW2ldIGFzIEluV2FsbEl0ZW0pLmRpc3RhbmNlRnJvbTJkKHgsIHkpIDwgdG9sZXJhbmNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVybGFwcGVkRmxvb3IoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBSb29tIHtcclxuICAgIHJldHVybiB0aGlzLmdldFJvb21zKCkuZmluZChyb29tID0+IHtcclxuICAgICAgY29uc3QgcG9seWdvbiA9IENvcm5lclV0aWxzLlBvbHlnb25Gcm9tQ29ybmVycyhyb29tLmludGVyaW9yQ29ybmVycyk7XHJcbiAgICAgIHJldHVybiBVdGlscy5wb2ludEluUG9seWdvbih4LCB5LCBwb2x5Z29uKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gaW1wb3J0IGFuZCBleHBvcnQgLS0gY2xlYW51cFxyXG5cclxuICBwdWJsaWMgc2F2ZUZsb29ycGxhbigpIHtcclxuICAgIGNvbnN0IGZsb29ycGxhbiA9IHtcclxuICAgICAgY29ybmVyczoge30sXHJcbiAgICAgIHdhbGxzOiBbXSxcclxuICAgICAgd2FsbFRleHR1cmVzOiBbXSxcclxuICAgICAgZmxvb3JUZXh0dXJlczoge30sXHJcbiAgICAgIG5ld0Zsb29yVGV4dHVyZXM6IHt9LFxyXG4gICAgICBuZXdGbG9vckNvbG9yczoge31cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fY29ybmVycy5mb3JFYWNoKGNvcm5lciA9PiB7XHJcbiAgICAgIGZsb29ycGxhbi5jb3JuZXJzW2Nvcm5lci5pZF0gPSB7XHJcbiAgICAgICAgJ3gnOiBjb3JuZXIueCxcclxuICAgICAgICAneSc6IGNvcm5lci55XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldFdhbGxzKCkuZm9yRWFjaCh3YWxsID0+IHtcclxuICAgICAgZmxvb3JwbGFuLndhbGxzLnB1c2goe1xyXG4gICAgICAgICdjb3JuZXIxJzogd2FsbC5nZXRTdGFydCgpLmlkLFxyXG4gICAgICAgICdjb3JuZXIyJzogd2FsbC5nZXRFbmQoKS5pZCxcclxuICAgICAgICAnaGVpZ2h0Jzogd2FsbC5oZWlnaHQsXHJcbiAgICAgICAgJ3RoaWNrbmVzcyc6IHdhbGwudGhpY2tuZXNzLFxyXG4gICAgICAgICdmcm9udFRleHR1cmUnOiB3YWxsLmZyb250VGV4dHVyZSxcclxuICAgICAgICAnYmFja1RleHR1cmUnOiB3YWxsLmJhY2tUZXh0dXJlLFxyXG4gICAgICAgICdmcm9udENvbG9yJzogd2FsbC5mcm9udENvbG9yLFxyXG4gICAgICAgICdiYWNrQ29sb3InOiB3YWxsLmJhY2tDb2xvclxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXMgPSB0aGlzLl9yb29tU2VydmljZS5mbG9vclRleHR1cmVzO1xyXG4gICAgZmxvb3JwbGFuLm5ld0Zsb29yQ29sb3JzID0gdGhpcy5fcm9vbVNlcnZpY2UuZmxvb3JDb2xvcnM7XHJcbiAgICByZXR1cm4gZmxvb3JwbGFuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRGbG9vcnBsYW4oZmxvb3JwbGFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyB0aGlzLnJvb21Mb2FkaW5nQ2FsbGJhY2tzLmZpcmUoKTtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICBjb25zdCBjb3JuZXJzID0ge307XHJcbiAgICBpZiAoZmxvb3JwbGFuID09IG51bGwgfHwgISgnY29ybmVycycgaW4gZmxvb3JwbGFuKSB8fCAhKCd3YWxscycgaW4gZmxvb3JwbGFuKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGlkIGluIGZsb29ycGxhbi5jb3JuZXJzKSB7XHJcbiAgICAgIGlmIChmbG9vcnBsYW4uY29ybmVyc1tpZF0pIHtcclxuICAgICAgICBjb25zdCBjb3JuZXIgPSBmbG9vcnBsYW4uY29ybmVyc1tpZF07XHJcbiAgICAgICAgY29ybmVyc1tpZF0gPSB0aGlzLm5ld0Nvcm5lcihjb3JuZXIueCwgY29ybmVyLnksIGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZmxvb3JwbGFuLndhbGxzLmZvckVhY2god2FsbCA9PiB7XHJcbiAgICAgIGlmIChjb3JuZXJzW3dhbGwuY29ybmVyMV0gJiYgY29ybmVyc1t3YWxsLmNvcm5lcjJdKSB7XHJcbiAgICAgICAgY29uc3QgbmV3V2FsbCA9IHRoaXMubmV3V2FsbChcclxuICAgICAgICAgIGNvcm5lcnNbd2FsbC5jb3JuZXIxXSwgY29ybmVyc1t3YWxsLmNvcm5lcjJdLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKHdhbGwuZnJvbnRUZXh0dXJlKSB7XHJcbiAgICAgICAgICBuZXdXYWxsLmZyb250VGV4dHVyZSA9IHdhbGwuZnJvbnRUZXh0dXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2FsbC5iYWNrVGV4dHVyZSkge1xyXG4gICAgICAgICAgbmV3V2FsbC5iYWNrVGV4dHVyZSA9IHdhbGwuYmFja1RleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3YWxsLmZyb250Q29sb3IpIHtcclxuICAgICAgICAgIG5ld1dhbGwuZnJvbnRDb2xvciA9IHdhbGwuZnJvbnRDb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdhbGwuYmFja0NvbG9yKSB7XHJcbiAgICAgICAgICBuZXdXYWxsLmJhY2tDb2xvciA9IHdhbGwuYmFja0NvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2FsbC5oZWlnaHQpIHtcclxuICAgICAgICAgIG5ld1dhbGwuaGVpZ2h0ID0gd2FsbC5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3YWxsLnRoaWNrbmVzcykge1xyXG4gICAgICAgICAgbmV3V2FsbC50aGlja25lc3MgPSB3YWxsLnRoaWNrbmVzcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICgnbmV3Rmxvb3JUZXh0dXJlcycgaW4gZmxvb3JwbGFuKSB7XHJcbiAgICAgIC8vIHRoaXMuZmxvb3JUZXh0dXJlcyA9IGZsb29ycGxhbi5uZXdGbG9vclRleHR1cmVzO1xyXG4gICAgICB0aGlzLl9yb29tU2VydmljZS5mbG9vclRleHR1cmVzID0gZmxvb3JwbGFuLm5ld0Zsb29yVGV4dHVyZXM7XHJcbiAgICB9XHJcbiAgICBpZiAoJ25ld0Zsb29yQ29sb3JzJyBpbiBmbG9vcnBsYW4pIHtcclxuICAgICAgLy8gdGhpcy5mbG9vckNvbG9ycyA9IGZsb29ycGxhbi5uZXdGbG9vckNvbG9ycztcclxuICAgICAgdGhpcy5fcm9vbVNlcnZpY2UuZmxvb3JDb2xvcnMgPSBmbG9vcnBsYW4ubmV3Rmxvb3JDb2xvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIC8vIGF3YWl0IHRoaXMuX3Jvb21TZXJ2aWNlLnVwZGF0ZUZsb29yc0FuZEVkZ2VzKCk7XHJcbiAgICB0aGlzLnJvb21Mb2FkZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHJvb21zXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJvb21Db3JuZXJzID0gdGhpcy5maW5kUm9vbXModGhpcy5fY29ybmVycyk7XHJcbiAgICBhd2FpdCB0aGlzLl9yb29tU2VydmljZS51cGRhdGVSb29tcyhyb29tQ29ybmVycyk7XHJcbiAgICB0aGlzLnJvb21zVXBkYXRlZC5uZXh0KCk7XHJcbiAgICB0aGlzLnJlZHJhd0Zsb29ycGxhbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1lcmdlV2l0aEludGVyc2VjdGVkKGNvcm5lcjogQ29ybmVyKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjaGVjayBjb3JuZXJzXHJcbiAgICBjb25zdCBjb21iaW5lV2l0aENvcm5lciA9IHRoaXMuZ2V0Q29ybmVycygpLmZpbmQoKGM6IENvcm5lcikgPT5cclxuICAgICAgY29ybmVyLmRpc3RhbmNlRnJvbUNvcm5lcihjKSA8IGNvcm5lclRvbGVyYW5jZSAmJiBjb3JuZXIgIT09IGMpO1xyXG4gICAgaWYgKGNvbWJpbmVXaXRoQ29ybmVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbWJpbmVDb3JuZXJzKGNvcm5lciwgY29tYmluZVdpdGhDb3JuZXIpO1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIGNoZWNrIHdhbGxzXHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxscygpLmZpbmQoKHc6IFdhbGwpID0+XHJcbiAgICAgIGNvcm5lci5kaXN0YW5jZUZyb21XYWxsKHcpIDwgY29ybmVyVG9sZXJhbmNlICYmICFjb3JuZXIuaXNXYWxsQ29ubmVjdGVkKHcpKTtcclxuICAgIGlmICh3YWxsKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbiB0byBiZSBvbiB3YWxsXHJcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShjb3JuZXIueCwgY29ybmVyLnksXHJcbiAgICAgICAgd2FsbC5nZXRTdGFydCgpLngsIHdhbGwuZ2V0U3RhcnQoKS55LFxyXG4gICAgICAgIHdhbGwuZ2V0RW5kKCkueCwgd2FsbC5nZXRFbmQoKS55KTtcclxuICAgICAgY29ybmVyLnggPSBpbnRlcnNlY3Rpb24ueDtcclxuICAgICAgY29ybmVyLnkgPSBpbnRlcnNlY3Rpb24ueTtcclxuICAgICAgLy8gbWVyZ2UgdGhpcyBjb3JuZXIgaW50byB3YWxsIGJ5IGJyZWFraW5nIHdhbGwgaW50byB0d28gcGFydHNcclxuICAgICAgdGhpcy5zcGxpdFdhbGwod2FsbCwgY29ybmVyKTtcclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkQ29ybmVyc0ZvckludGVyc2VjdGlvbnMoKSB7XHJcbiAgICBjb25zdCBpbnRlcnNlY3RzID0gdGhpcy5nZXRXYWxscygpLm1hcCh3YWxsID0+ICh7XHJcbiAgICAgIHdhbGwsXHJcbiAgICAgIGludGVyc2VjdGluZ1dhbGw6IHRoaXMuX2dldEZpcnN0SW50ZXJzZWN0aW5nV2FsbCh3YWxsKVxyXG4gICAgfSkpLmZpbHRlcihpID0+IGkuaW50ZXJzZWN0aW5nV2FsbCk7XHJcbiAgICBpZiAoaW50ZXJzZWN0cy5sZW5ndGggPCAyKSB7IHJldHVybjsgfVxyXG4gICAgY29uc3QgdzEgPSBpbnRlcnNlY3RzWzBdLndhbGw7XHJcbiAgICBjb25zdCB3MiA9IGludGVyc2VjdHNbMF0uaW50ZXJzZWN0aW5nV2FsbDtcclxuICAgIGNvbnN0IGludGVyc2VjdGlvbkNvb3JkcyA9IFV0aWxzLmxpbmVzSW50ZXJzZWN0aW9uKFxyXG4gICAgICB3MS5nZXRTdGFydFgoKSwgdzEuZ2V0U3RhcnRZKCksXHJcbiAgICAgIHcxLmdldEVuZFgoKSwgdzEuZ2V0RW5kWSgpLFxyXG4gICAgICB3Mi5nZXRTdGFydFgoKSwgdzIuZ2V0U3RhcnRZKCksXHJcbiAgICAgIHcyLmdldEVuZFgoKSwgdzIuZ2V0RW5kWSgpKTtcclxuICAgIGlmIChpbnRlcnNlY3Rpb25Db29yZHMubGVuZ3RoICE9PSAyKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGNvbnN0IG5ld0Nvcm5lciA9IHRoaXMubmV3Q29ybmVyKFxyXG4gICAgICBpbnRlcnNlY3Rpb25Db29yZHNbMF0sXHJcbiAgICAgIGludGVyc2VjdGlvbkNvb3Jkc1sxXVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3BsaXRXYWxsKHcxLCBuZXdDb3JuZXIpO1xyXG4gICAgdGhpcy5zcGxpdFdhbGwodzIsIG5ld0Nvcm5lcik7XHJcblxyXG4gICAgdGhpcy5hZGRDb3JuZXJzRm9ySW50ZXJzZWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNwbGl0V2FsbCh3YWxsOiBXYWxsLCBjb3JuZXI6IENvcm5lcik6IFdhbGwge1xyXG4gICAgY29uc3QgbmV3V2FsbCA9IHRoaXMubmV3V2FsbChjb3JuZXIsIHdhbGwuZ2V0RW5kKCksIGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBwcmV2Q29ybmVyID0gd2FsbC5nZXRFbmQoKTtcclxuICAgIHdhbGwuc2V0RW5kKGNvcm5lcik7XHJcblxyXG4gICAgY29ybmVyLnJlbW92ZUR1cGxpY2F0ZVdhbGxzKCk7XHJcbiAgICBwcmV2Q29ybmVyLnJlbW92ZUR1cGxpY2F0ZVdhbGxzKCk7XHJcblxyXG4gICAgcmV0dXJuIG5ld1dhbGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjZW50ZXIgb2YgdGhlIGZsb29ycGxhbiBpbiB0aGUgeSBwbGFuZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDZW50ZXIoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBkaW0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yMygoZGltLngubWluICsgZGltLngubWF4KSAqIDAuNSwgMCwgKGRpbS55Lm1pbiArIGRpbS55Lm1heCkgKiAwLjUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNpemUoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBkaW0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yMyhkaW0ueC5tYXggLSBkaW0ueC5taW4sIDAsIGRpbS55Lm1heCAtIGRpbS55Lm1pbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGltZW5zaW9ucyhzY2FsZTogbnVtYmVyID0gMSk6IGFueSB7XHJcblxyXG4gICAgbGV0IHhNaW4gPSBJbmZpbml0eTtcclxuICAgIGxldCB4TWF4ID0gLUluZmluaXR5O1xyXG4gICAgbGV0IHlNaW4gPSBJbmZpbml0eTtcclxuICAgIGxldCB5TWF4ID0gLUluZmluaXR5O1xyXG4gICAgdGhpcy5fY29ybmVycy5mb3JFYWNoKChjb3JuZXIpID0+IHtcclxuICAgICAgaWYgKGNvcm5lci54IDwgeE1pbikgeyB4TWluID0gY29ybmVyLng7IH1cclxuICAgICAgaWYgKGNvcm5lci54ID4geE1heCkgeyB4TWF4ID0gY29ybmVyLng7IH1cclxuICAgICAgaWYgKGNvcm5lci55IDwgeU1pbikgeyB5TWluID0gY29ybmVyLnk7IH1cclxuICAgICAgaWYgKGNvcm5lci55ID4geU1heCkgeyB5TWF4ID0gY29ybmVyLnk7IH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeDoge21pbjogeE1pbiAqIHNjYWxlLCBtYXg6IHhNYXggKiBzY2FsZX0sXHJcbiAgICAgIHk6IHttaW46IHlNaW4gKiBzY2FsZSwgbWF4OiB5TWF4ICogc2NhbGV9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZU9ycGhhbkNvcm5lcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldE9ycGhhbkNvcm5lcnMoKS5mb3JFYWNoKChjb3JuZXI6IENvcm5lcikgPT4ge1xyXG4gICAgICB0aGlzLl9yZW1vdmVDb3JuZXIoY29ybmVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgICogRmluZCB0aGUgXCJyb29tc1wiIGluIG91ciBwbGFuYXIgc3RyYWlnaHQtbGluZSBncmFwaC5cclxuICAgICogUm9vbXMgYXJlIHNldCBvZiB0aGUgc21hbGxlc3QgKGJ5IGFyZWEpIHBvc3NpYmxlIGN5Y2xlcyBpbiB0aGlzIGdyYXBoLlxyXG4gICAgKiBAcGFyYW0gY29ybmVycyBUaGUgY29ybmVycyBvZiB0aGUgZmxvb3JwbGFuLlxyXG4gICAgKiBAcmV0dXJucyBUaGUgcm9vbXMsIGVhY2ggcm9vbSBhcyBhbiBhcnJheSBvZiBjb3JuZXJzLlxyXG4gICAgKi9cclxuICBwdWJsaWMgZmluZFJvb21zKGNvcm5lcnM6IENvcm5lcltdKTogQ29ybmVyW11bXSB7XHJcblxyXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlVGhldGEocHJldmlvdXNDb3JuZXI6IENvcm5lciwgY3VycmVudENvcm5lcjogQ29ybmVyLCBuZXh0Q29ybmVyOiBDb3JuZXIpIHtcclxuICAgICAgY29uc3QgdGhldGEgPSBVdGlscy5hbmdsZTJwaShcclxuICAgICAgICBwcmV2aW91c0Nvcm5lci54IC0gY3VycmVudENvcm5lci54LFxyXG4gICAgICAgIHByZXZpb3VzQ29ybmVyLnkgLSBjdXJyZW50Q29ybmVyLnksXHJcbiAgICAgICAgbmV4dENvcm5lci54IC0gY3VycmVudENvcm5lci54LFxyXG4gICAgICAgIG5leHRDb3JuZXIueSAtIGN1cnJlbnRDb3JuZXIueSk7XHJcbiAgICAgIHJldHVybiB0aGV0YTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVSb29tcyhyb29tQXJyYXk6IENvcm5lcltdW10pOiBDb3JuZXJbXVtdIHtcclxuICAgICAgY29uc3QgcmVzdWx0czogQ29ybmVyW11bXSA9IFtdO1xyXG4gICAgICBjb25zdCBsb29rdXAgPSB7fTtcclxuICAgICAgY29uc3QgaGFzaEZ1bmMgPSBmdW5jdGlvbiAoY29ybmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvcm5lci5pZDtcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgc2VwID0gJy0nO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvb21BcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vIHJvb21zIGFyZSBjeWNsZXMsIHNoaWZ0IGl0IGFyb3VuZCB0byBjaGVjayB1bmlxdWVuZXNzXHJcbiAgICAgICAgbGV0IGFkZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHN0cjtcclxuICAgICAgICBjb25zdCByb29tID0gcm9vbUFycmF5W2ldO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm9vbS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgcm9vbVNoaWZ0ID0gVXRpbHMuY3ljbGUocm9vbSwgaik7XHJcbiAgICAgICAgICBzdHIgPSBVdGlscy5tYXAocm9vbVNoaWZ0LCBoYXNoRnVuYykuam9pbihzZXApO1xyXG4gICAgICAgICAgaWYgKGxvb2t1cC5oYXNPd25Qcm9wZXJ0eShzdHIpKSB7XHJcbiAgICAgICAgICAgIGFkZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkKSB7XHJcbiAgICAgICAgICByZXN1bHRzLnB1c2gocm9vbUFycmF5W2ldKTtcclxuICAgICAgICAgIGxvb2t1cFtzdHJdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZFRpZ2h0ZXN0Q3ljbGUoZmlyc3RDb3JuZXI6IENvcm5lciwgc2Vjb25kQ29ybmVyOiBDb3JuZXIpOiBDb3JuZXJbXSB7XHJcbiAgICAgIGNvbnN0IHN0YWNrOiB7XHJcbiAgICAgICAgY29ybmVyOiBDb3JuZXIsXHJcbiAgICAgICAgcHJldmlvdXNDb3JuZXJzOiBDb3JuZXJbXVxyXG4gICAgICB9W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBuZXh0ID0ge1xyXG4gICAgICAgIGNvcm5lcjogc2Vjb25kQ29ybmVyLFxyXG4gICAgICAgIHByZXZpb3VzQ29ybmVyczogW2ZpcnN0Q29ybmVyXVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCB2aXNpdGVkID0ge307XHJcbiAgICAgIHZpc2l0ZWRbZmlyc3RDb3JuZXIuaWRdID0gdHJ1ZTtcclxuXHJcbiAgICAgIHdoaWxlIChuZXh0KSB7XHJcbiAgICAgICAgLy8gdXBkYXRlIHByZXZpb3VzIGNvcm5lcnMsIGN1cnJlbnQgY29ybmVyLCBhbmQgdmlzaXRlZCBjb3JuZXJzXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvcm5lciA9IG5leHQuY29ybmVyO1xyXG4gICAgICAgIHZpc2l0ZWRbY3VycmVudENvcm5lci5pZF0gPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBkaWQgd2UgbWFrZSBpdCBiYWNrIHRvIHRoZSBzdGFydENvcm5lcj9cclxuICAgICAgICBpZiAobmV4dC5jb3JuZXIgPT09IGZpcnN0Q29ybmVyICYmIGN1cnJlbnRDb3JuZXIgIT09IHNlY29uZENvcm5lcikge1xyXG4gICAgICAgICAgcmV0dXJuIG5leHQucHJldmlvdXNDb3JuZXJzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWRkVG9TdGFjazogQ29ybmVyW10gPSBbXTtcclxuICAgICAgICBjb25zdCBhZGphY2VudENvcm5lcnMgPSBuZXh0LmNvcm5lci5hZGphY2VudENvcm5lcnMoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkamFjZW50Q29ybmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgbmV4dENvcm5lciA9IGFkamFjZW50Q29ybmVyc1tpXTtcclxuXHJcbiAgICAgICAgICAvLyBpcyB0aGlzIHdoZXJlIHdlIGNhbWUgZnJvbT9cclxuICAgICAgICAgIC8vIGdpdmUgYW4gZXhjZXB0aW9uIGlmIGl0cyB0aGUgZmlyc3QgY29ybmVyIGFuZCB3ZSBhcmVuJ3QgYXQgdGhlIHNlY29uZCBjb3JuZXJcclxuICAgICAgICAgIGlmIChuZXh0Q29ybmVyLmlkIGluIHZpc2l0ZWQgJiZcclxuICAgICAgICAgICAgIShuZXh0Q29ybmVyID09PSBmaXJzdENvcm5lciAmJiBjdXJyZW50Q29ybmVyICE9PSBzZWNvbmRDb3JuZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIG5vcGUsIHRocm93IGl0IG9uIHRoZSBxdWV1ZVxyXG4gICAgICAgICAgYWRkVG9TdGFjay5wdXNoKG5leHRDb3JuZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNDb3JuZXJzID0gbmV4dC5wcmV2aW91c0Nvcm5lcnMuc2xpY2UoMCk7XHJcbiAgICAgICAgcHJldmlvdXNDb3JuZXJzLnB1c2goY3VycmVudENvcm5lcik7XHJcbiAgICAgICAgaWYgKGFkZFRvU3RhY2subGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgLy8gdmlzaXQgdGhlIG9uZXMgd2l0aCBzbWFsbGVzdCB0aGV0YSBmaXJzdFxyXG4gICAgICAgICAgY29uc3QgcHJldmlvdXNDb3JuZXIgPSBuZXh0LnByZXZpb3VzQ29ybmVyc1tuZXh0LnByZXZpb3VzQ29ybmVycy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgIGFkZFRvU3RhY2suc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICByZXR1cm4gKGNhbGN1bGF0ZVRoZXRhKHByZXZpb3VzQ29ybmVyLCBjdXJyZW50Q29ybmVyLCBiKSAtXHJcbiAgICAgICAgICAgICAgY2FsY3VsYXRlVGhldGEocHJldmlvdXNDb3JuZXIsIGN1cnJlbnRDb3JuZXIsIGEpKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFkZFRvU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gYWRkIHRvIHRoZSBzdGFja1xyXG4gICAgICAgICAgYWRkVG9TdGFjay5mb3JFYWNoKChjb3JuZXIpID0+IHtcclxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XHJcbiAgICAgICAgICAgICAgY29ybmVyOiBjb3JuZXIsXHJcbiAgICAgICAgICAgICAgcHJldmlvdXNDb3JuZXJzOiBwcmV2aW91c0Nvcm5lcnNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcCBvZmYgdGhlIG5leHQgb25lXHJcbiAgICAgICAgbmV4dCA9IHN0YWNrLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaW5kIHRpZ2h0ZXN0IGxvb3BzLCBmb3IgZWFjaCBjb3JuZXIsIGZvciBlYWNoIGFkamFjZW50XHJcbiAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzLCBvbmx5IGNoZWNrIGNvcm5lcnMgd2l0aCA+IDIgYWRqYWNlbnRzLCBvciBpc29sYXRlZCBjeWNsZXNcclxuICAgIGNvbnN0IGxvb3BzOiBDb3JuZXJbXVtdID0gW107XHJcblxyXG4gICAgY29ybmVycy5mb3JFYWNoKChmaXJzdENvcm5lcikgPT4ge1xyXG4gICAgICBmaXJzdENvcm5lci5hZGphY2VudENvcm5lcnMoKS5mb3JFYWNoKChzZWNvbmRDb3JuZXIpID0+IHtcclxuICAgICAgICBsb29wcy5wdXNoKGZpbmRUaWdodGVzdEN5Y2xlKGZpcnN0Q29ybmVyLCBzZWNvbmRDb3JuZXIpKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyByZW1vdmUgZHVwbGljYXRlc1xyXG4gICAgY29uc3QgdW5pcXVlTG9vcHMgPSByZW1vdmVEdXBsaWNhdGVSb29tcyhsb29wcyk7XHJcbiAgICAvLyByZW1vdmUgQ1cgbG9vcHNcclxuICAgIGNvbnN0IHVuaXF1ZUNDV0xvb3BzID0gVXRpbHMucmVtb3ZlSWYodW5pcXVlTG9vcHMsIFV0aWxzLmlzQ2xvY2t3aXNlKTtcclxuXHJcbiAgICByZXR1cm4gdW5pcXVlQ0NXTG9vcHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICB0aGlzLl9jb3JuZXJzID0gW107XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RJbnRlcnNlY3RpbmdXYWxsKGZpcnN0V2FsbDogV2FsbCk6IFdhbGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0V2FsbHMoKS5maW5kKHNlY29uZFdhbGwgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fd2FsbHNJbnRlcnNlY3RpbmcoZmlyc3RXYWxsLCBzZWNvbmRXYWxsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlU2NlbmUoKTogdm9pZCB7XHJcblxyXG4gIH1cclxuXHJcbiAgLyogd2FsbCBpbnRlcnNlY3RpbmcgYnV0IG5vdCBpbiBjb3JuZXJzICovXHJcbiAgcHJpdmF0ZSBfZ2V0QWxsSW50ZXJzZWN0aW5nV2FsbHMoZmlyc3RXYWxsOiBXYWxsKTogV2FsbFtdIHtcclxuICAgIHJldHVybiB0aGlzLmdldFdhbGxzKCkuZmlsdGVyKHNlY29uZFdhbGwgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fd2FsbHNJbnRlcnNlY3RpbmcoZmlyc3RXYWxsLCBzZWNvbmRXYWxsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfd2FsbHNJbnRlcnNlY3RpbmcoZmlyc3RXYWxsOiBXYWxsLCBzZWNvbmRXYWxsOiBXYWxsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZmlyc3RXYWxsID09PSBzZWNvbmRXYWxsKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgY29uc3QgY29ybmVycyA9IG5ldyBTZXQoW1xyXG4gICAgICBmaXJzdFdhbGwuZ2V0RW5kKCksXHJcbiAgICAgIGZpcnN0V2FsbC5nZXRTdGFydCgpLFxyXG4gICAgICBzZWNvbmRXYWxsLmdldEVuZCgpLFxyXG4gICAgICBzZWNvbmRXYWxsLmdldFN0YXJ0KClcclxuICAgIF0pO1xyXG4gICAgaWYgKGNvcm5lcnMuc2l6ZSAhPT0gNCkgIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gICAgaWYgKCFVdGlscy5saW5lTGluZUludGVyc2VjdChcclxuICAgICAgZmlyc3RXYWxsLmdldFN0YXJ0WCgpLCBmaXJzdFdhbGwuZ2V0U3RhcnRZKCksXHJcbiAgICAgIGZpcnN0V2FsbC5nZXRFbmRYKCksIGZpcnN0V2FsbC5nZXRFbmRZKCksXHJcbiAgICAgIHNlY29uZFdhbGwuZ2V0U3RhcnRYKCksIHNlY29uZFdhbGwuZ2V0U3RhcnRZKCksXHJcbiAgICAgIHNlY29uZFdhbGwuZ2V0RW5kWCgpLCBzZWNvbmRXYWxsLmdldEVuZFkoKSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludGVyc2VjdHMgPSBVdGlscy5saW5lc0ludGVyc2VjdGlvbihcclxuICAgICAgZmlyc3RXYWxsLmdldFN0YXJ0WCgpLCBmaXJzdFdhbGwuZ2V0U3RhcnRZKCksXHJcbiAgICAgIGZpcnN0V2FsbC5nZXRFbmRYKCksIGZpcnN0V2FsbC5nZXRFbmRZKCksXHJcbiAgICAgIHNlY29uZFdhbGwuZ2V0U3RhcnRYKCksIHNlY29uZFdhbGwuZ2V0U3RhcnRZKCksXHJcbiAgICAgIHNlY29uZFdhbGwuZ2V0RW5kWCgpLCBzZWNvbmRXYWxsLmdldEVuZFkoKVxyXG4gICAgKTtcclxuICAgIGlmIChpbnRlcnNlY3RzKSB7XHJcbiAgICAgIGNvbnN0IFt4LCB5XSA9IGludGVyc2VjdHM7XHJcbiAgICAgIGNvbnN0IGluQ29ybmVyID1cclxuICAgICAgICAoeCA9PT0gZmlyc3RXYWxsLmdldFN0YXJ0WCgpICYmIHkgPT09IGZpcnN0V2FsbC5nZXRTdGFydFkoKSkgfHxcclxuICAgICAgICAoeCA9PT0gZmlyc3RXYWxsLmdldEVuZFgoKSAmJiB5ID09PSBmaXJzdFdhbGwuZ2V0RW5kWSgpKTtcclxuICAgICAgcmV0dXJuICFpbkNvcm5lcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKiogUmVtb3ZlcyBhIGNvcm5lci5cclxuICAgKiBAcGFyYW0gY29ybmVyIFRoZSBjb3JuZXIgdG8gYmUgcmVtb3ZlZC5cclxuICAgKi9cclxuICBwcml2YXRlIF9yZW1vdmVDb3JuZXIoY29ybmVyOiBDb3JuZXIpIHtcclxuICAgIFV0aWxzLnJlbW92ZVZhbHVlKHRoaXMuX2Nvcm5lcnMsIGNvcm5lcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21iaW5lQ29ybmVycyhhOiBDb3JuZXIsIGI6IENvcm5lcikge1xyXG4gICAgLy8gdXBkYXRlIHBvc2l0aW9uIHRvIG90aGVyIGNvcm5lcidzXHJcbiAgICBhLnggPSBiLng7XHJcbiAgICBhLnkgPSBiLnk7XHJcbiAgICAvLyBhYnNvcmIgdGhlIG90aGVyIGNvcm5lcidzIHdhbGxTdGFydHMgYW5kIHdhbGxFbmRzXHJcbiAgICBhLmFic29yYldhbGxzRnJvbShiKTtcclxuICAgIC8vIGRlbGV0ZSB0aGUgb3RoZXIgY29ybmVyXHJcbiAgICBiLnJlbW92ZUFsbCgpO1xyXG4gICAgYS5yZW1vdmVEdXBsaWNhdGVXYWxscygpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -172,8 +172,8 @@ export class RoomService {
|
|
|
172
172
|
roomCorners.forEach((corners) => {
|
|
173
173
|
this.rooms.push(new Room(corners, this._defaultFloorTexture));
|
|
174
174
|
});
|
|
175
|
-
yield this.updateFloorsAndEdges();
|
|
176
175
|
this._assignOrphanEdges();
|
|
176
|
+
yield this.updateFloorsAndEdges();
|
|
177
177
|
this.walls.forEach(wall => wall.updateWallItems());
|
|
178
178
|
});
|
|
179
179
|
}
|
|
@@ -330,4 +330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
330
330
|
providedIn: 'root'
|
|
331
331
|
}]
|
|
332
332
|
}], ctorParameters: function () { return [{ type: i1.HomedecoratorAppService }, { type: i2.SceneService }, { type: i3.FloorService }, { type: i4.CeilingService }, { type: i5.CameraService }, { type: i6.ItemService }, { type: i7.ConfigurationService }, { type: i8.ViewModeService }, { type: i9.PresetsService }, { type: i10.ArService }]; } });
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQWV6RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDakYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPcEQsTUFBTSxPQUFPLFdBQVc7SUFnQnRCLFlBQ1UsV0FBb0MsRUFDcEMsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0IsZUFBK0IsRUFDL0IsY0FBNkIsRUFDN0IsWUFBeUIsRUFDekIscUJBQTJDLEVBQzNDLGdCQUFpQyxFQUNqQyxjQUE4QixFQUM5QixVQUFxQjtRQVRyQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxtQkFBYyxHQUFk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TTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtNZXNoLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb3JuZXIsIEVkZ2UsIEhhbGZFZGdlLCBSb29tLCBXYWxsfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzJztcclxuaW1wb3J0IHtTZWxlY3RlZFdhbGxFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2Uvc2VsZWN0ZWQtd2FsbC1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NlbGVjdGVkRmxvb3JFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2Uvc2VsZWN0ZWQtZmxvb3ItZXZlbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtFZGdlVmlzaWJpbGl0eUNoYW5nZXN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pbnRlcmZhY2UvZWRnZS12aXNpYmlsaXR5LWNoYW5nZXMnO1xyXG5pbXBvcnQge1RleHR1cmV9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7Q2VpbGluZ1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NlaWxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7UHJlc2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGV9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvZW51bS92aWV3LW1vZGUuZW51bSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbkRhdGF9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2NvbmZpZ3VyYXRpb24tZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25LZXl9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvZW51bS9jb25maWd1cmF0aW9uLWtleS5lbnVtJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge1RocmVlTWVzaH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2l0ZW1zL3RocmVlLW1lc2gnO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVJdGVtfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGxhbmUtaXRlbSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb29tU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyByb29tczogUm9vbVtdID0gW107XHJcbiAgcHVibGljIHdhbGxzOiBXYWxsW10gPSBbXTtcclxuICBwdWJsaWMgb3JwaGFuV2FsbHM6IFdhbGxbXSA9IFtdO1xyXG4gIHB1YmxpYyBmbG9vclRleHR1cmVzOiB7fTtcclxuICBwdWJsaWMgZmxvb3JDb2xvcnM6IHt9O1xyXG5cclxuICBwdWJsaWMgd2FsbFNlbGVjdGVkOiBTdWJqZWN0PFNlbGVjdGVkV2FsbEV2ZW50PiA9IG5ldyBTdWJqZWN0PFNlbGVjdGVkV2FsbEV2ZW50PigpO1xyXG4gIHB1YmxpYyBmbG9vclNlbGVjdGVkOiBTdWJqZWN0PFNlbGVjdGVkRmxvb3JFdmVudD4gPSBuZXcgU3ViamVjdDxTZWxlY3RlZEZsb29yRXZlbnQ+KCk7XHJcbiAgcHVibGljIGVkZ2VWaXNpYmlsaXR5Q2hhbmdlZDogU3ViamVjdDxFZGdlVmlzaWJpbGl0eUNoYW5nZXM+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZWRnZXM6IEVkZ2VbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdEZsb29yVGV4dHVyZTogVGV4dHVyZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZWlsaW5nU2VydmljZTogQ2VpbGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmlld01vZGVTZXJ2aWNlOiBWaWV3TW9kZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRTZXJ2aWNlOiBQcmVzZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FyU2VydmljZTogQXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2FwcFNlcnZpY2UuZmxvb3JUZXh0dXJlc0xvYWRlZC5zdWJzY3JpYmUoKGZsb29yczogVGV4dHVyZVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGZsb29ycykge1xyXG4gICAgICAgICAgdGhpcy5fZGVmYXVsdEZsb29yVGV4dHVyZSA9IGZsb29ycy5maW5kKGYgPT4gZi5kZWZhdWx0ID09PSB0cnVlICYmICFmLnVzZVN0YW5kYWxvbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVFZGdlVmlzaWJpbGl0eSh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbikpLFxyXG4gICAgICB0aGlzLl9wcmVzZXRTZXJ2aWNlLmFmdGVyTG9hZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlRWRnZVZpc2liaWxpdHkodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEucG9zaXRpb24pKSxcclxuICAgICAgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgbW9kZSA9PiB7XHJcbiAgICAgICAgaWYgKChtb2RlID09PSBWaWV3TW9kZS5Sb29tUGxhbjNEIHx8IG1vZGUgPT09IFZpZXdNb2RlLlRvcFZpZXcpICYmICFfYXJTZXJ2aWNlLmFyTW9kZUhhc0JlZW5BY3RpdmUoKSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVGbG9vcnNBbmRFZGdlcygpO1xyXG4gICAgICAgICAgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnJvb20zRFVwZGF0ZWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFZpZXdNb2RlLlZSKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXRBbGxFZGdlc1Zpc2libGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHMgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93SGlkZVdhbGxzKGNoYW5nZWRbQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHNdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RmlsbGVyUGxhbmVzKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRnZXMucmVkdWNlKChwbGFuZXMsIGVkZ2UpID0+IHtcclxuICAgICAgY29uc3QgZmlsbGVycyA9IGVkZ2UuZ2V0VG9wU2lkZUZpbGxlcnMoKTtcclxuICAgICAgcmV0dXJuIHBsYW5lcy5jb25jYXQoZmlsbGVycyk7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmxvb3JQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIHJldHVybiBVdGlscy5tYXAodGhpcy5yb29tcywgKHJvb206IFJvb20pID0+IHtcclxuICAgICAgcmV0dXJuIHJvb20uZmxvb3JQbGFuZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yVGV4dHVyZSh1dWlkOiBzdHJpbmcpOiBUZXh0dXJlIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yVGV4dHVyZXNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JUZXh0dXJlKHJvb206IFJvb20sIHRleHR1cmU6IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlc1tyb29tLmdldFV1aWQoKV0gPSB0ZXh0dXJlO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5zZXRGbG9vclRleHR1cmUocm9vbSwgdGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmxvb3JUZXh0dXJlKHV1aWQ6IHN0cmluZykge1xyXG4gICAgZGVsZXRlIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGbG9vckNvbG9yKHV1aWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JDb2xvcnNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JDb2xvcihyb29tOiBSb29tLCBjb2xvcjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZsb29yQ29sb3JzW3Jvb20uZ2V0VXVpZCgpXSA9IGNvbG9yO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yQ29sb3Iocm9vbSwgY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUZsb29yQ29sb3IodXVpZDogc3RyaW5nKSB7XHJcbiAgICBkZWxldGUgdGhpcy5mbG9vckNvbG9yc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VzKCk6IEhhbGZFZGdlW10ge1xyXG4gICAgY29uc3QgZWRnZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgZWRnZXMucHVzaCh3YWxsLmZyb250RWRnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdhbGwuYmFja0VkZ2UpIHtcclxuICAgICAgICBlZGdlcy5wdXNoKHdhbGwuYmFja0VkZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBlZGdlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDbG9zZXN0V2FsbEVkZ2UoaXRlbVg6IG51bWJlciwgaXRlbVo6IG51bWJlcik6IEhhbGZFZGdlIHtcclxuICAgIGNvbnN0IHdhbGxFZGdlcyA9IHRoaXMud2FsbEVkZ2VzKCk7XHJcblxyXG4gICAgbGV0IHdhbGxFZGdlID0gbnVsbDtcclxuICAgIGxldCBtaW5EaXN0YW5jZSA9IG51bGw7XHJcblxyXG4gICAgd2FsbEVkZ2VzLmZvckVhY2goKGVkZ2U6IEhhbGZFZGdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gZWRnZS5kaXN0YW5jZVRvKGl0ZW1YLCBpdGVtWik7XHJcbiAgICAgIGlmIChtaW5EaXN0YW5jZSA9PT0gbnVsbCB8fCBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XHJcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB3YWxsRWRnZSA9IGVkZ2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3YWxsRWRnZTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIGNvbnN0IHBsYW5lcyA9IFtdO1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIGlmICh3YWxsLmZyb250RWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuZnJvbnRFZGdlLnBsYW5lKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuYmFja0VkZ2UucGxhbmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwbGFuZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2VpbGluZ1BsYW5lcygpOiBNZXNoW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnBsYW5lcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3YWxsUmVtb3ZlZCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChpKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlV2FsbChzdGFydDogQ29ybmVyLCBlbmQ6IENvcm5lcik6IFdhbGwge1xyXG4gICAgY29uc3Qgd2FsbCA9IG5ldyBXYWxsKHN0YXJ0LCBlbmQpO1xyXG4gICAgd2FsbC5oZWlnaHQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxIZWlnaHQpIC8gMTAwO1xyXG4gICAgd2FsbC50aGlja25lc3MgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxUaGlja25lc3MpIC8gMTAwO1xyXG4gICAgdGhpcy53YWxscy5wdXNoKHdhbGwpO1xyXG4gICAgcmV0dXJuIHdhbGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShpKSk7XHJcbiAgICBVdGlscy5yZW1vdmVWYWx1ZSh0aGlzLndhbGxzLCB3YWxsKTtcclxuICAgIHdhbGwucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlV2FsbEhlaWdodHMobmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCh3YWxsID0+IHtcclxuICAgICAgd2FsbC5oZWlnaHQgPSBuZXdIZWlnaHQgLyAxMDA7XHJcbiAgICAgIHdhbGwuZmlyZVJlZHJhdygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVJvb21zKHJvb21Db3JuZXJzOiBDb3JuZXJbXVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnJlc2V0RnJvbnRCYWNrKCkpO1xyXG4gICAgdGhpcy5yb29tcy5mb3JFYWNoKHIgPT4gci5kaXNwb3NlKCkpO1xyXG4gICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gICAgcm9vbUNvcm5lcnMuZm9yRWFjaCgoY29ybmVyczogQ29ybmVyW10pID0+IHtcclxuICAgICAgdGhpcy5yb29tcy5wdXNoKG5ldyBSb29tKGNvcm5lcnMsICB0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlKSk7XHJcbiAgICB9KTtcclxuICAgIGF3YWl0IHRoaXMudXBkYXRlRmxvb3JzQW5kRWRnZXMoKTtcclxuICAgIHRoaXMuX2Fzc2lnbk9ycGhhbkVkZ2VzKCk7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnVwZGF0ZVdhbGxJdGVtcygpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCgod2FsbCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZVdhbGwod2FsbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMud2FsbHMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZmxvb3JDb2xvcnMgPSB7fTtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlcyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFdhbGwoZXZlbnQ6IE1vdXNlRXZlbnQsIHdhbGw6IFdhbGwsIGVkZ2U6IEhhbGZFZGdlKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxTZWxlY3RlZC5uZXh0KHtldmVudDogZXZlbnQsIHdhbGw6IHdhbGwsIGVkZ2U6IGVkZ2V9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RGbG9vcihldmVudDogTW91c2VFdmVudCwgcm9vbTogUm9vbSk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9vclNlbGVjdGVkLm5leHQoe2V2ZW50OiBldmVudCwgcm9vbTogcm9vbX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJvb21DZW50ZXIoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBmbG9vcnMgPSB0aGlzLmZsb29yUGxhbmVzKCk7XHJcbiAgICByZXR1cm4gZmxvb3JzICYmIGZsb29ycy5sZW5ndGggPiAwID8gZmxvb3JzWzBdLnBvc2l0aW9uIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVGbG9vcnNBbmRFZGdlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5yZW1vdmVGbG9vcnMoKTtcclxuICAgIHRoaXMuX2VkZ2VzLmZvckVhY2goKGVkZ2U6IEVkZ2UpID0+IHtcclxuICAgICAgZWRnZS5nZXRQbGFuZXMoKS5mb3JFYWNoKChwbGFuZTogTWVzaCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QocGxhbmUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZWRnZXMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAvLyBkcmF3IGZsb29yc1xyXG4gICAgY29uc3Qgc29ydGVkUm9vbXM6IFJvb21bXSA9IHRoaXMucm9vbXMuc29ydCgoYSwgYikgPT4gYS5hcmVhIC0gYi5hcmVhKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUm9vbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgcm9vbTogUm9vbSA9IHNvcnRlZFJvb21zW2ldO1xyXG4gICAgICBjb25zdCBzdG9yZWRDb2xvciA9IHRoaXMuZ2V0Rmxvb3JDb2xvcihyb29tLmdldFV1aWQoKSk7XHJcbiAgICAgIGNvbnN0IHN0b3JlZFRleHR1cmUgPSB0aGlzLmdldEZsb29yVGV4dHVyZShyb29tLmdldFV1aWQoKSk7XHJcbiAgICAgIGNvbnN0IGNvbG9yID0gc3RvcmVkQ29sb3IgPyBzdG9yZWRDb2xvciA6IHJvb20uZmxvb3JDb2xvcjtcclxuICAgICAgY29uc3QgdGV4dHVyZSA9IHN0b3JlZFRleHR1cmUgPyBzdG9yZWRUZXh0dXJlIDogKHJvb20uZmxvb3JUZXh0dXJlID8gcm9vbS5mbG9vclRleHR1cmUgOiB1bmRlZmluZWQpO1xyXG4gICAgICBjb25zdCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbSA9IGF3YWl0IHRoaXMuX2Zsb29yU2VydmljZS5nZW5lcmF0ZUZsb29yUGxhbmUoXHJcbiAgICAgICAgICBzdG9yZWRUZXh0dXJlID8gbnVsbCA6IGNvbG9yLCBzdG9yZWRDb2xvciA/IChzdG9yZWRUZXh0dXJlID8gdGV4dHVyZSA6IG51bGwpIDogdGV4dHVyZSwgcm9vbS5pbnRlcmlvckNvcm5lcnMsIHNvcnRlZFJvb21zLnNsaWNlKDAsIGkpKTtcclxuICAgICAgZmxvb3JQbGFuZS5jaGlsZHJlblswXS51c2VyRGF0YS5yb29tID0gcm9vbTtcclxuICAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICByb29tLmZsb29yQ29sb3IgPSBjb2xvcjtcclxuICAgICAgcm9vbS5mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIH1cclxuICAgIC8vIGF3YWl0IHRoaXMucm9vbXNcclxuICAgIC8vICAgLnNvcnQoKGEsIGIpID0+IGEuYXJlYSAtIGIuYXJlYSlcclxuICAgIC8vICAgLmZvckVhY2goYXN5bmMgKHJvb20sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgLy8gICAgIGNvbnN0IHN0b3JlZENvbG9yID0gdGhpcy5nZXRGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIC8vICAgICBjb25zdCBzdG9yZWRUZXh0dXJlID0gdGhpcy5nZXRGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbG9yID0gc3RvcmVkQ29sb3IgPyBzdG9yZWRDb2xvciA6IHJvb20uZmxvb3JDb2xvcjtcclxuICAgIC8vICAgICBjb25zdCB0ZXh0dXJlID0gc3RvcmVkVGV4dHVyZSA/IHN0b3JlZFRleHR1cmUgOiAocm9vbS5mbG9vclRleHR1cmUgPyByb29tLmZsb29yVGV4dHVyZSA6IHVuZGVmaW5lZCk7XHJcbiAgICAvLyAgICAgY29uc3QgZmxvb3JQbGFuZTogRmxvb3JQbGFuZUl0ZW0gPSBhd2FpdCB0aGlzLl9mbG9vclNlcnZpY2UuZ2VuZXJhdGVGbG9vclBsYW5lKFxyXG4gICAgLy8gICAgICAgc3RvcmVkVGV4dHVyZSA/IG51bGwgOiBjb2xvciwgc3RvcmVkQ29sb3IgPyAoc3RvcmVkVGV4dHVyZSA/IHRleHR1cmUgOiBudWxsKSA6IHRleHR1cmUsIHJvb20uaW50ZXJpb3JDb3JuZXJzLCBhcnJheS5zbGljZSgwLCBpbmRleCkpO1xyXG4gICAgLy8gICAgIGZsb29yUGxhbmUudXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAvLyAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JDb2xvciA9IGNvbG9yO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JQbGFuZSA9IGZsb29yUGxhbmU7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy9cclxuICAgIC8vIGRyYXcgZWRnZXNcclxuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy53YWxsRWRnZXMoKTtcclxuICAgIGlmIChlZGdlcyAmJiBlZGdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBoYWxmRWRnZSA9IGVkZ2VzW2ldO1xyXG4gICAgICAgIGNvbnN0IG5ld0VkZ2U6IEVkZ2UgPSBuZXcgRWRnZShoYWxmRWRnZSk7XHJcbiAgICAgICAgYXdhaXQgbmV3RWRnZS5pbml0KCk7XHJcbiAgICAgICAgaGFsZkVkZ2UuZWRnZXMucHVzaChuZXdFZGdlKTtcclxuICAgICAgICB0aGlzLl9lZGdlcy5wdXNoKG5ld0VkZ2UpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5lcyA9IG5ld0VkZ2UuZ2V0UGxhbmVzKCk7XHJcbiAgICAgICAgcGxhbmVzLmZvckVhY2goKHBsYW5lKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYWRkT2JqZWN0KHBsYW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRyYXcgY2VpbGluZ3NcclxuICAgIHRoaXMudXBkYXRlQ2VpbGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDZWlsaW5ncygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnJlbW92ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLnJvb21zXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmFyZWEgLSBiLmFyZWEpXHJcbiAgICAgIC5mb3JFYWNoKChyb29tOiBSb29tKSA9PiB7XHJcbiAgICAgICAgcm9vbS51cGRhdGVXYWxsSGVpZ2h0cygpO1xyXG4gICAgICAgIGNvbnN0IGNlaWxpbmc6IFRocmVlTWVzaCA9IHRoaXMuX2NlaWxpbmdTZXJ2aWNlLmdlbmVyYXRlQ2VpbGluZ1BsYW5lKDB4ZTVlNWU1LCByb29tLmludGVyaW9yQ29ybmVycywgcm9vbS5lZGdlSGVpZ2h0cyk7XHJcbiAgICAgICAgaWYgKGNlaWxpbmcpIHtcclxuICAgICAgICAgIGNlaWxpbmcudXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAgICAgICByb29tLmNlaWxpbmdQbGFuZSA9IGNlaWxpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldEFsbFJvb21zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0hpZGVXYWxscyhzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2godyA9PiB3LnNob3dIaWRlV2FsbChzaG93KSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRWRnZVZpc2liaWxpdHkoY2FtZXJhUG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbEVkZ2VzKCkuZm9yRWFjaChlID0+IHtcclxuICAgICAgY29uc3QgdmlzaWJpbGl0eUNoYW5nZSA9IGUudXBkYXRlVmlzaWJpbGl0eShjYW1lcmFQb3NpdGlvbik7XHJcbiAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgZWRnZVZpc2liaWxpdHlDaGFuZ2VzOiBFZGdlVmlzaWJpbGl0eUNoYW5nZXMgPSB7XHJcbiAgICAgICAgICBlZGdlOiBlLFxyXG4gICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eUNoYW5nZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lZGdlVmlzaWJpbGl0eUNoYW5nZWQubmV4dChlZGdlVmlzaWJpbGl0eUNoYW5nZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEFsbEVkZ2VzVmlzaWJsZSgpIHtcclxuICAgIHRoaXMud2FsbEVkZ2VzKCkuZm9yRWFjaCgoZTogSGFsZkVkZ2UpID0+IHtcclxuICAgICAgZS51cGRhdGVWaXNpYmxpdHkodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IGVkZ2VWaXNpYmlsaXR5Q2hhbmdlczogRWRnZVZpc2liaWxpdHlDaGFuZ2VzID0ge1xyXG4gICAgICAgIGVkZ2U6IGUsXHJcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkZ2VWaXNpYmlsaXR5Q2hhbmdlZC5uZXh0KGVkZ2VWaXNpYmlsaXR5Q2hhbmdlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUZsb29yVGV4dHVyZXMoKSB7XHJcbiAgICBjb25zdCB1dWlkcyA9IFV0aWxzLm1hcCh0aGlzLnJvb21zLCBmdW5jdGlvbiAocm9vbSkge1xyXG4gICAgICByZXR1cm4gcm9vbS5nZXRVdWlkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHV1aWQgaW4gdGhpcy5mbG9vclRleHR1cmVzKSB7XHJcbiAgICAgIGlmICghVXRpbHMuaGFzVmFsdWUodXVpZHMsIHV1aWQpKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXNzaWduT3JwaGFuRWRnZXMoKSB7XHJcbiAgICAvLyBraW5kYSBoYWNreVxyXG4gICAgLy8gZmluZCBvcnBoYW5lZCB3YWxsIHNlZ21lbnRzIChpLmUuIG5vdCBwYXJ0IG9mIHJvb21zKSBhbmRcclxuICAgIC8vIGdpdmUgdGhlbSBlZGdlc1xyXG4gICAgdGhpcy5vcnBoYW5XYWxscyA9IFtdO1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIGlmICghd2FsbC5iYWNrRWRnZSAmJiAhd2FsbC5mcm9udEVkZ2UpIHtcclxuICAgICAgICB3YWxsLm9ycGhhbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgYmFjayA9IG5ldyBIYWxmRWRnZShudWxsLCB3YWxsLCBmYWxzZSk7XHJcbiAgICAgICAgYmFjay5nZW5lcmF0ZVBsYW5lKCk7XHJcbiAgICAgICAgY29uc3QgZnJvbnQgPSBuZXcgSGFsZkVkZ2UobnVsbCwgd2FsbCwgdHJ1ZSk7XHJcbiAgICAgICAgZnJvbnQuZ2VuZXJhdGVQbGFuZSgpO1xyXG4gICAgICAgIHdhbGwudXBkYXRlSW5XYWxsSXRlbXMoKTtcclxuICAgICAgICB0aGlzLm9ycGhhbldhbGxzLnB1c2god2FsbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQWV6RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDakYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPcEQsTUFBTSxPQUFPLFdBQVc7SUFnQnRCLFlBQ1UsV0FBb0MsRUFDcEMsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0IsZUFBK0IsRUFDL0IsY0FBNkIsRUFDN0IsWUFBeUIsRUFDekIscUJBQTJDLEVBQzNDLGdCQUFpQyxFQUNqQyxjQUE4QixFQUM5QixVQUFxQjtRQVRyQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxtQkFBYyxHQUFk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TTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtNZXNoLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb3JuZXIsIEVkZ2UsIEhhbGZFZGdlLCBSb29tLCBXYWxsfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzJztcclxuaW1wb3J0IHtTZWxlY3RlZFdhbGxFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2Uvc2VsZWN0ZWQtd2FsbC1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NlbGVjdGVkRmxvb3JFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2Uvc2VsZWN0ZWQtZmxvb3ItZXZlbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtFZGdlVmlzaWJpbGl0eUNoYW5nZXN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pbnRlcmZhY2UvZWRnZS12aXNpYmlsaXR5LWNoYW5nZXMnO1xyXG5pbXBvcnQge1RleHR1cmV9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7Q2VpbGluZ1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NlaWxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7UHJlc2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGV9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvZW51bS92aWV3LW1vZGUuZW51bSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbkRhdGF9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2NvbmZpZ3VyYXRpb24tZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25LZXl9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvZW51bS9jb25maWd1cmF0aW9uLWtleS5lbnVtJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge1RocmVlTWVzaH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2l0ZW1zL3RocmVlLW1lc2gnO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVJdGVtfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGxhbmUtaXRlbSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb29tU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyByb29tczogUm9vbVtdID0gW107XHJcbiAgcHVibGljIHdhbGxzOiBXYWxsW10gPSBbXTtcclxuICBwdWJsaWMgb3JwaGFuV2FsbHM6IFdhbGxbXSA9IFtdO1xyXG4gIHB1YmxpYyBmbG9vclRleHR1cmVzOiB7fTtcclxuICBwdWJsaWMgZmxvb3JDb2xvcnM6IHt9O1xyXG5cclxuICBwdWJsaWMgd2FsbFNlbGVjdGVkOiBTdWJqZWN0PFNlbGVjdGVkV2FsbEV2ZW50PiA9IG5ldyBTdWJqZWN0PFNlbGVjdGVkV2FsbEV2ZW50PigpO1xyXG4gIHB1YmxpYyBmbG9vclNlbGVjdGVkOiBTdWJqZWN0PFNlbGVjdGVkRmxvb3JFdmVudD4gPSBuZXcgU3ViamVjdDxTZWxlY3RlZEZsb29yRXZlbnQ+KCk7XHJcbiAgcHVibGljIGVkZ2VWaXNpYmlsaXR5Q2hhbmdlZDogU3ViamVjdDxFZGdlVmlzaWJpbGl0eUNoYW5nZXM+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZWRnZXM6IEVkZ2VbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdEZsb29yVGV4dHVyZTogVGV4dHVyZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZWlsaW5nU2VydmljZTogQ2VpbGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmlld01vZGVTZXJ2aWNlOiBWaWV3TW9kZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRTZXJ2aWNlOiBQcmVzZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FyU2VydmljZTogQXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2FwcFNlcnZpY2UuZmxvb3JUZXh0dXJlc0xvYWRlZC5zdWJzY3JpYmUoKGZsb29yczogVGV4dHVyZVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGZsb29ycykge1xyXG4gICAgICAgICAgdGhpcy5fZGVmYXVsdEZsb29yVGV4dHVyZSA9IGZsb29ycy5maW5kKGYgPT4gZi5kZWZhdWx0ID09PSB0cnVlICYmICFmLnVzZVN0YW5kYWxvbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVFZGdlVmlzaWJpbGl0eSh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbikpLFxyXG4gICAgICB0aGlzLl9wcmVzZXRTZXJ2aWNlLmFmdGVyTG9hZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlRWRnZVZpc2liaWxpdHkodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEucG9zaXRpb24pKSxcclxuICAgICAgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgbW9kZSA9PiB7XHJcbiAgICAgICAgaWYgKChtb2RlID09PSBWaWV3TW9kZS5Sb29tUGxhbjNEIHx8IG1vZGUgPT09IFZpZXdNb2RlLlRvcFZpZXcpICYmICFfYXJTZXJ2aWNlLmFyTW9kZUhhc0JlZW5BY3RpdmUoKSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVGbG9vcnNBbmRFZGdlcygpO1xyXG4gICAgICAgICAgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnJvb20zRFVwZGF0ZWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFZpZXdNb2RlLlZSKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXRBbGxFZGdlc1Zpc2libGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHMgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93SGlkZVdhbGxzKGNoYW5nZWRbQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHNdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RmlsbGVyUGxhbmVzKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRnZXMucmVkdWNlKChwbGFuZXMsIGVkZ2UpID0+IHtcclxuICAgICAgY29uc3QgZmlsbGVycyA9IGVkZ2UuZ2V0VG9wU2lkZUZpbGxlcnMoKTtcclxuICAgICAgcmV0dXJuIHBsYW5lcy5jb25jYXQoZmlsbGVycyk7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmxvb3JQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIHJldHVybiBVdGlscy5tYXAodGhpcy5yb29tcywgKHJvb206IFJvb20pID0+IHtcclxuICAgICAgcmV0dXJuIHJvb20uZmxvb3JQbGFuZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yVGV4dHVyZSh1dWlkOiBzdHJpbmcpOiBUZXh0dXJlIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yVGV4dHVyZXNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JUZXh0dXJlKHJvb206IFJvb20sIHRleHR1cmU6IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlc1tyb29tLmdldFV1aWQoKV0gPSB0ZXh0dXJlO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5zZXRGbG9vclRleHR1cmUocm9vbSwgdGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmxvb3JUZXh0dXJlKHV1aWQ6IHN0cmluZykge1xyXG4gICAgZGVsZXRlIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGbG9vckNvbG9yKHV1aWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JDb2xvcnNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JDb2xvcihyb29tOiBSb29tLCBjb2xvcjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZsb29yQ29sb3JzW3Jvb20uZ2V0VXVpZCgpXSA9IGNvbG9yO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yQ29sb3Iocm9vbSwgY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUZsb29yQ29sb3IodXVpZDogc3RyaW5nKSB7XHJcbiAgICBkZWxldGUgdGhpcy5mbG9vckNvbG9yc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VzKCk6IEhhbGZFZGdlW10ge1xyXG4gICAgY29uc3QgZWRnZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgZWRnZXMucHVzaCh3YWxsLmZyb250RWRnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdhbGwuYmFja0VkZ2UpIHtcclxuICAgICAgICBlZGdlcy5wdXNoKHdhbGwuYmFja0VkZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBlZGdlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDbG9zZXN0V2FsbEVkZ2UoaXRlbVg6IG51bWJlciwgaXRlbVo6IG51bWJlcik6IEhhbGZFZGdlIHtcclxuICAgIGNvbnN0IHdhbGxFZGdlcyA9IHRoaXMud2FsbEVkZ2VzKCk7XHJcblxyXG4gICAgbGV0IHdhbGxFZGdlID0gbnVsbDtcclxuICAgIGxldCBtaW5EaXN0YW5jZSA9IG51bGw7XHJcblxyXG4gICAgd2FsbEVkZ2VzLmZvckVhY2goKGVkZ2U6IEhhbGZFZGdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gZWRnZS5kaXN0YW5jZVRvKGl0ZW1YLCBpdGVtWik7XHJcbiAgICAgIGlmIChtaW5EaXN0YW5jZSA9PT0gbnVsbCB8fCBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XHJcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB3YWxsRWRnZSA9IGVkZ2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3YWxsRWRnZTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIGNvbnN0IHBsYW5lcyA9IFtdO1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIGlmICh3YWxsLmZyb250RWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuZnJvbnRFZGdlLnBsYW5lKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuYmFja0VkZ2UucGxhbmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwbGFuZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2VpbGluZ1BsYW5lcygpOiBNZXNoW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnBsYW5lcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3YWxsUmVtb3ZlZCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChpKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlV2FsbChzdGFydDogQ29ybmVyLCBlbmQ6IENvcm5lcik6IFdhbGwge1xyXG4gICAgY29uc3Qgd2FsbCA9IG5ldyBXYWxsKHN0YXJ0LCBlbmQpO1xyXG4gICAgd2FsbC5oZWlnaHQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxIZWlnaHQpIC8gMTAwO1xyXG4gICAgd2FsbC50aGlja25lc3MgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxUaGlja25lc3MpIC8gMTAwO1xyXG4gICAgdGhpcy53YWxscy5wdXNoKHdhbGwpO1xyXG4gICAgcmV0dXJuIHdhbGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShpKSk7XHJcbiAgICBVdGlscy5yZW1vdmVWYWx1ZSh0aGlzLndhbGxzLCB3YWxsKTtcclxuICAgIHdhbGwucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlV2FsbEhlaWdodHMobmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCh3YWxsID0+IHtcclxuICAgICAgd2FsbC5oZWlnaHQgPSBuZXdIZWlnaHQgLyAxMDA7XHJcbiAgICAgIHdhbGwuZmlyZVJlZHJhdygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVJvb21zKHJvb21Db3JuZXJzOiBDb3JuZXJbXVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnJlc2V0RnJvbnRCYWNrKCkpO1xyXG4gICAgdGhpcy5yb29tcy5mb3JFYWNoKHIgPT4gci5kaXNwb3NlKCkpO1xyXG4gICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gICAgcm9vbUNvcm5lcnMuZm9yRWFjaCgoY29ybmVyczogQ29ybmVyW10pID0+IHtcclxuICAgICAgdGhpcy5yb29tcy5wdXNoKG5ldyBSb29tKGNvcm5lcnMsICB0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlKSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2Fzc2lnbk9ycGhhbkVkZ2VzKCk7XHJcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUZsb29yc0FuZEVkZ2VzKCk7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnVwZGF0ZVdhbGxJdGVtcygpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCgod2FsbCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZVdhbGwod2FsbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMud2FsbHMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZmxvb3JDb2xvcnMgPSB7fTtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlcyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFdhbGwoZXZlbnQ6IE1vdXNlRXZlbnQsIHdhbGw6IFdhbGwsIGVkZ2U6IEhhbGZFZGdlKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxTZWxlY3RlZC5uZXh0KHtldmVudDogZXZlbnQsIHdhbGw6IHdhbGwsIGVkZ2U6IGVkZ2V9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RGbG9vcihldmVudDogTW91c2VFdmVudCwgcm9vbTogUm9vbSk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9vclNlbGVjdGVkLm5leHQoe2V2ZW50OiBldmVudCwgcm9vbTogcm9vbX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJvb21DZW50ZXIoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBmbG9vcnMgPSB0aGlzLmZsb29yUGxhbmVzKCk7XHJcbiAgICByZXR1cm4gZmxvb3JzICYmIGZsb29ycy5sZW5ndGggPiAwID8gZmxvb3JzWzBdLnBvc2l0aW9uIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVGbG9vcnNBbmRFZGdlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5yZW1vdmVGbG9vcnMoKTtcclxuICAgIHRoaXMuX2VkZ2VzLmZvckVhY2goKGVkZ2U6IEVkZ2UpID0+IHtcclxuICAgICAgZWRnZS5nZXRQbGFuZXMoKS5mb3JFYWNoKChwbGFuZTogTWVzaCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QocGxhbmUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZWRnZXMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAvLyBkcmF3IGZsb29yc1xyXG4gICAgY29uc3Qgc29ydGVkUm9vbXM6IFJvb21bXSA9IHRoaXMucm9vbXMuc29ydCgoYSwgYikgPT4gYS5hcmVhIC0gYi5hcmVhKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUm9vbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgcm9vbTogUm9vbSA9IHNvcnRlZFJvb21zW2ldO1xyXG4gICAgICBjb25zdCBzdG9yZWRDb2xvciA9IHRoaXMuZ2V0Rmxvb3JDb2xvcihyb29tLmdldFV1aWQoKSk7XHJcbiAgICAgIGNvbnN0IHN0b3JlZFRleHR1cmUgPSB0aGlzLmdldEZsb29yVGV4dHVyZShyb29tLmdldFV1aWQoKSk7XHJcbiAgICAgIGNvbnN0IGNvbG9yID0gc3RvcmVkQ29sb3IgPyBzdG9yZWRDb2xvciA6IHJvb20uZmxvb3JDb2xvcjtcclxuICAgICAgY29uc3QgdGV4dHVyZSA9IHN0b3JlZFRleHR1cmUgPyBzdG9yZWRUZXh0dXJlIDogKHJvb20uZmxvb3JUZXh0dXJlID8gcm9vbS5mbG9vclRleHR1cmUgOiB1bmRlZmluZWQpO1xyXG4gICAgICBjb25zdCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbSA9IGF3YWl0IHRoaXMuX2Zsb29yU2VydmljZS5nZW5lcmF0ZUZsb29yUGxhbmUoXHJcbiAgICAgICAgICBzdG9yZWRUZXh0dXJlID8gbnVsbCA6IGNvbG9yLCBzdG9yZWRDb2xvciA/IChzdG9yZWRUZXh0dXJlID8gdGV4dHVyZSA6IG51bGwpIDogdGV4dHVyZSwgcm9vbS5pbnRlcmlvckNvcm5lcnMsIHNvcnRlZFJvb21zLnNsaWNlKDAsIGkpKTtcclxuICAgICAgZmxvb3JQbGFuZS5jaGlsZHJlblswXS51c2VyRGF0YS5yb29tID0gcm9vbTtcclxuICAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICByb29tLmZsb29yQ29sb3IgPSBjb2xvcjtcclxuICAgICAgcm9vbS5mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIH1cclxuICAgIC8vIGF3YWl0IHRoaXMucm9vbXNcclxuICAgIC8vICAgLnNvcnQoKGEsIGIpID0+IGEuYXJlYSAtIGIuYXJlYSlcclxuICAgIC8vICAgLmZvckVhY2goYXN5bmMgKHJvb20sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgLy8gICAgIGNvbnN0IHN0b3JlZENvbG9yID0gdGhpcy5nZXRGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIC8vICAgICBjb25zdCBzdG9yZWRUZXh0dXJlID0gdGhpcy5nZXRGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbG9yID0gc3RvcmVkQ29sb3IgPyBzdG9yZWRDb2xvciA6IHJvb20uZmxvb3JDb2xvcjtcclxuICAgIC8vICAgICBjb25zdCB0ZXh0dXJlID0gc3RvcmVkVGV4dHVyZSA/IHN0b3JlZFRleHR1cmUgOiAocm9vbS5mbG9vclRleHR1cmUgPyByb29tLmZsb29yVGV4dHVyZSA6IHVuZGVmaW5lZCk7XHJcbiAgICAvLyAgICAgY29uc3QgZmxvb3JQbGFuZTogRmxvb3JQbGFuZUl0ZW0gPSBhd2FpdCB0aGlzLl9mbG9vclNlcnZpY2UuZ2VuZXJhdGVGbG9vclBsYW5lKFxyXG4gICAgLy8gICAgICAgc3RvcmVkVGV4dHVyZSA/IG51bGwgOiBjb2xvciwgc3RvcmVkQ29sb3IgPyAoc3RvcmVkVGV4dHVyZSA/IHRleHR1cmUgOiBudWxsKSA6IHRleHR1cmUsIHJvb20uaW50ZXJpb3JDb3JuZXJzLCBhcnJheS5zbGljZSgwLCBpbmRleCkpO1xyXG4gICAgLy8gICAgIGZsb29yUGxhbmUudXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAvLyAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JDb2xvciA9IGNvbG9yO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JQbGFuZSA9IGZsb29yUGxhbmU7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy9cclxuICAgIC8vIGRyYXcgZWRnZXNcclxuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy53YWxsRWRnZXMoKTtcclxuICAgIGlmIChlZGdlcyAmJiBlZGdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBoYWxmRWRnZSA9IGVkZ2VzW2ldO1xyXG4gICAgICAgIGNvbnN0IG5ld0VkZ2U6IEVkZ2UgPSBuZXcgRWRnZShoYWxmRWRnZSk7XHJcbiAgICAgICAgYXdhaXQgbmV3RWRnZS5pbml0KCk7XHJcbiAgICAgICAgaGFsZkVkZ2UuZWRnZXMucHVzaChuZXdFZGdlKTtcclxuICAgICAgICB0aGlzLl9lZGdlcy5wdXNoKG5ld0VkZ2UpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5lcyA9IG5ld0VkZ2UuZ2V0UGxhbmVzKCk7XHJcbiAgICAgICAgcGxhbmVzLmZvckVhY2goKHBsYW5lKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYWRkT2JqZWN0KHBsYW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRyYXcgY2VpbGluZ3NcclxuICAgIHRoaXMudXBkYXRlQ2VpbGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDZWlsaW5ncygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnJlbW92ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLnJvb21zXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmFyZWEgLSBiLmFyZWEpXHJcbiAgICAgIC5mb3JFYWNoKChyb29tOiBSb29tKSA9PiB7XHJcbiAgICAgICAgcm9vbS51cGRhdGVXYWxsSGVpZ2h0cygpO1xyXG4gICAgICAgIGNvbnN0IGNlaWxpbmc6IFRocmVlTWVzaCA9IHRoaXMuX2NlaWxpbmdTZXJ2aWNlLmdlbmVyYXRlQ2VpbGluZ1BsYW5lKDB4ZTVlNWU1LCByb29tLmludGVyaW9yQ29ybmVycywgcm9vbS5lZGdlSGVpZ2h0cyk7XHJcbiAgICAgICAgaWYgKGNlaWxpbmcpIHtcclxuICAgICAgICAgIGNlaWxpbmcudXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAgICAgICByb29tLmNlaWxpbmdQbGFuZSA9IGNlaWxpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldEFsbFJvb21zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0hpZGVXYWxscyhzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2godyA9PiB3LnNob3dIaWRlV2FsbChzaG93KSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRWRnZVZpc2liaWxpdHkoY2FtZXJhUG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbEVkZ2VzKCkuZm9yRWFjaChlID0+IHtcclxuICAgICAgY29uc3QgdmlzaWJpbGl0eUNoYW5nZSA9IGUudXBkYXRlVmlzaWJpbGl0eShjYW1lcmFQb3NpdGlvbik7XHJcbiAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgZWRnZVZpc2liaWxpdHlDaGFuZ2VzOiBFZGdlVmlzaWJpbGl0eUNoYW5nZXMgPSB7XHJcbiAgICAgICAgICBlZGdlOiBlLFxyXG4gICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eUNoYW5nZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lZGdlVmlzaWJpbGl0eUNoYW5nZWQubmV4dChlZGdlVmlzaWJpbGl0eUNoYW5nZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEFsbEVkZ2VzVmlzaWJsZSgpIHtcclxuICAgIHRoaXMud2FsbEVkZ2VzKCkuZm9yRWFjaCgoZTogSGFsZkVkZ2UpID0+IHtcclxuICAgICAgZS51cGRhdGVWaXNpYmxpdHkodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IGVkZ2VWaXNpYmlsaXR5Q2hhbmdlczogRWRnZVZpc2liaWxpdHlDaGFuZ2VzID0ge1xyXG4gICAgICAgIGVkZ2U6IGUsXHJcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkZ2VWaXNpYmlsaXR5Q2hhbmdlZC5uZXh0KGVkZ2VWaXNpYmlsaXR5Q2hhbmdlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUZsb29yVGV4dHVyZXMoKSB7XHJcbiAgICBjb25zdCB1dWlkcyA9IFV0aWxzLm1hcCh0aGlzLnJvb21zLCBmdW5jdGlvbiAocm9vbSkge1xyXG4gICAgICByZXR1cm4gcm9vbS5nZXRVdWlkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHV1aWQgaW4gdGhpcy5mbG9vclRleHR1cmVzKSB7XHJcbiAgICAgIGlmICghVXRpbHMuaGFzVmFsdWUodXVpZHMsIHV1aWQpKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXNzaWduT3JwaGFuRWRnZXMoKSB7XHJcbiAgICAvLyBraW5kYSBoYWNreVxyXG4gICAgLy8gZmluZCBvcnBoYW5lZCB3YWxsIHNlZ21lbnRzIChpLmUuIG5vdCBwYXJ0IG9mIHJvb21zKSBhbmRcclxuICAgIC8vIGdpdmUgdGhlbSBlZGdlc1xyXG4gICAgdGhpcy5vcnBoYW5XYWxscyA9IFtdO1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIGlmICghd2FsbC5iYWNrRWRnZSAmJiAhd2FsbC5mcm9udEVkZ2UpIHtcclxuICAgICAgICB3YWxsLm9ycGhhbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgYmFjayA9IG5ldyBIYWxmRWRnZShudWxsLCB3YWxsLCBmYWxzZSk7XHJcbiAgICAgICAgYmFjay5nZW5lcmF0ZVBsYW5lKCk7XHJcbiAgICAgICAgY29uc3QgZnJvbnQgPSBuZXcgSGFsZkVkZ2UobnVsbCwgd2FsbCwgdHJ1ZSk7XHJcbiAgICAgICAgZnJvbnQuZ2VuZXJhdGVQbGFuZSgpO1xyXG4gICAgICAgIHdhbGwudXBkYXRlSW5XYWxsSXRlbXMoKTtcclxuICAgICAgICB0aGlzLm9ycGhhbldhbGxzLnB1c2god2FsbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|