@colijnit/homedecorator 258.1.1 → 258.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/core/enum/icon.enum.d.ts +1 -0
- package/app/core/enum/message-type.enum.d.ts +2 -1
- package/app/core/interface/message-with-payload.interface.d.ts +1 -0
- package/app/core/model/homedecorator-settings-options.d.ts +1 -1
- package/app/core/model/homedecorator-settings.d.ts +3 -0
- package/app/core/service/3dm-api.d.ts +2 -2
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +9 -1
- package/app/core/service/homedecorator-connector.service.d.ts +15 -2
- package/app/core/service/utils.service.d.ts +1 -1
- package/app/core/utils/object.utils.d.ts +2 -0
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/wall-measurements.service.d.ts +2 -0
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +3 -0
- package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +2 -0
- package/app/plugins/product-configurator/product-configurator-selector-list-of-values.component.scss +28 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-button.component.d.ts +19 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-button.component.scss +38 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.d.ts +20 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.scss +0 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.d.ts +19 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-tile.component.scss +56 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.d.ts +20 -0
- package/app/plugins/product-configurator/product-configurator-selector.component.d.ts +26 -0
- package/app/plugins/product-configurator/product-configurator-selector.component.scss +46 -0
- package/app/plugins/product-configurator/product-configurator.component.d.ts +38 -0
- package/app/plugins/product-configurator/product-configurator.component.scss +35 -0
- package/app/plugins/product-configurator/product-configurator.module.d.ts +18 -0
- package/app/plugins/product-configurator/template_variables.scss +13 -0
- package/app/plugins/render/model/blender-render-settings.d.ts +10 -0
- package/app/plugins/render/model/blender-scene-settings.d.ts +18 -0
- package/app/plugins/render/render-controls/render-controls.component.d.ts +19 -7
- package/app/plugins/render/service/new-render.service.d.ts +21 -4
- package/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.scss +1 -1
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +5 -0
- package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +4 -0
- package/app/plugins/threedselector/threedselector/threedselector.component.scss +17 -0
- package/app/plugins/threedselector/threedselector.module.d.ts +2 -1
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/assets/icons/circle_regular.svg +0 -0
- package/bundles/colijnit-homedecorator.umd.js +1986 -835
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/icon.enum.js +2 -1
- package/esm2015/app/core/enum/message-type.enum.js +2 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +2 -2
- package/esm2015/app/core/model/homedecorator-settings.js +3 -1
- package/esm2015/app/core/model/icon.js +2 -1
- package/esm2015/app/core/service/3dm-api.js +15 -22
- package/esm2015/app/core/service/homedecorator-app-event.service.js +3 -2
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +65 -7
- package/esm2015/app/core/service/homedecorator-connector.service.js +150 -6
- package/esm2015/app/core/service/homedecorator-settings.service.js +8 -1
- package/esm2015/app/core/service/utils.service.js +116 -93
- package/esm2015/app/core/utils/object.utils.js +13 -1
- package/esm2015/app/homedecorator.component.js +1 -2
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/core3d.component.js +2 -2
- package/esm2015/app/plugins/core3d/service/wall-measurements.service.js +7 -1
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +98 -50
- package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +4 -4
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +21 -11
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-button.component.js +67 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.js +57 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.js +75 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.js +90 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector.component.js +253 -0
- package/esm2015/app/plugins/product-configurator/product-configurator.component.js +151 -0
- package/esm2015/app/plugins/product-configurator/product-configurator.module.js +115 -0
- package/esm2015/app/plugins/render/model/blender-render-settings.js +3 -0
- package/esm2015/app/plugins/render/model/blender-scene-settings.js +10 -0
- package/esm2015/app/plugins/render/model/render-parameters.js +3 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +532 -446
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +6 -40
- package/esm2015/app/plugins/render/service/new-render.service.js +212 -44
- package/esm2015/app/plugins/render/service/render.service.js +6 -9
- package/esm2015/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.js +1 -1
- package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +12 -10
- package/esm2015/app/plugins/threedselector/element-buttons/element-buttons.component.js +2 -2
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +55 -1
- package/esm2015/app/plugins/threedselector/threedselector/service/load-furniture.service.js +3 -3
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +64 -15
- package/esm2015/app/plugins/threedselector/threedselector/utils/asset.utils.js +1 -1
- package/esm2015/app/plugins/threedselector/threedselector.module.js +8 -4
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +1 -1
- package/esm2015/app/shared/category-library/category-library.component.js +1 -1
- package/fesm2015/colijnit-homedecorator.js +2522 -1149
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +4 -4
- package/styles.scss +1 -1
|
@@ -685,7 +685,7 @@ export class RoomPlannerComponent {
|
|
|
685
685
|
if (object.metadata) {
|
|
686
686
|
this.showContextMenu = false;
|
|
687
687
|
yield this._connectorAdapterService.initConnector(object.metadata.externalSettings ? object.metadata.externalSettings.settings : this.settingsService.settings, object.metadata.externalSettings ? object.metadata.externalSettings.name : undefined, false, object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId ? object.metadata.externalSettings.externalSourceId : null);
|
|
688
|
-
const json = yield this._connectorService.addToCart(+object.metadata.goodId, object.metadata.goodType, 1,
|
|
688
|
+
const json = yield this._connectorService.addToCart(+object.metadata.goodId, object.metadata.goodType, 1, object.metadata.itemId, !!(object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId));
|
|
689
689
|
if (object.metadata.externalSettings) {
|
|
690
690
|
const externalSource = {
|
|
691
691
|
article: json,
|
|
@@ -971,7 +971,7 @@ RoomPlannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
|
|
|
971
971
|
*ngIf="selectedObject && selectedObject.elevationAdjustable"
|
|
972
972
|
[item]="selectedObject">
|
|
973
973
|
</button-elevation>
|
|
974
|
-
<ng-container *ngIf="salableObject">
|
|
974
|
+
<ng-container *ngIf="salableObject && this.settingsService.settings.showAddToCart">
|
|
975
975
|
<div class="toolbar__divider context-menu"></div>
|
|
976
976
|
<div (click)="addToCart(selectedObject)" class="rp-item-context-menu-item add-to-cart-button">
|
|
977
977
|
<span class="icon"><mat-icon class="homedecorator-material-icons" [svgIcon]="'cart-shopping-regular'"></mat-icon></span>
|
|
@@ -1104,14 +1104,15 @@ RoomPlannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
|
|
|
1104
1104
|
></rp-toolbar-icon>
|
|
1105
1105
|
</ng-template>
|
|
1106
1106
|
<ng-template #toolbarIconCart>
|
|
1107
|
-
<span class="toolbar__divider"></span>
|
|
1108
|
-
<rp-toolbar-icon
|
|
1107
|
+
<span *ngIf="this.settingsService.settings.showAddToCart" class="toolbar__divider"></span>
|
|
1108
|
+
<rp-toolbar-icon *ngIf="this.settingsService.settings.showAddToCart"
|
|
1109
|
+
class="add-to-cart-button"
|
|
1109
1110
|
matIcon="cart-shopping-regular"
|
|
1110
1111
|
tooltip="{{'ADD_TO_CART' | localize}}"
|
|
1111
1112
|
(onClick)="addAllToCart()"
|
|
1112
1113
|
[showLabel]="phoneSizeScreen"
|
|
1113
1114
|
></rp-toolbar-icon>
|
|
1114
|
-
<span class="toolbar__divider"></span>
|
|
1115
|
+
<span *ngIf="this.settingsService.settings.showAddToCart" class="toolbar__divider"></span>
|
|
1115
1116
|
</ng-template>
|
|
1116
1117
|
|
|
1117
1118
|
<ng-template #toolbarSnappingIcon>
|
|
@@ -1377,7 +1378,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1377
1378
|
*ngIf="selectedObject && selectedObject.elevationAdjustable"
|
|
1378
1379
|
[item]="selectedObject">
|
|
1379
1380
|
</button-elevation>
|
|
1380
|
-
<ng-container *ngIf="salableObject">
|
|
1381
|
+
<ng-container *ngIf="salableObject && this.settingsService.settings.showAddToCart">
|
|
1381
1382
|
<div class="toolbar__divider context-menu"></div>
|
|
1382
1383
|
<div (click)="addToCart(selectedObject)" class="rp-item-context-menu-item add-to-cart-button">
|
|
1383
1384
|
<span class="icon"><mat-icon class="homedecorator-material-icons" [svgIcon]="'cart-shopping-regular'"></mat-icon></span>
|
|
@@ -1510,14 +1511,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1510
1511
|
></rp-toolbar-icon>
|
|
1511
1512
|
</ng-template>
|
|
1512
1513
|
<ng-template #toolbarIconCart>
|
|
1513
|
-
<span class="toolbar__divider"></span>
|
|
1514
|
-
<rp-toolbar-icon
|
|
1514
|
+
<span *ngIf="this.settingsService.settings.showAddToCart" class="toolbar__divider"></span>
|
|
1515
|
+
<rp-toolbar-icon *ngIf="this.settingsService.settings.showAddToCart"
|
|
1516
|
+
class="add-to-cart-button"
|
|
1515
1517
|
matIcon="cart-shopping-regular"
|
|
1516
1518
|
tooltip="{{'ADD_TO_CART' | localize}}"
|
|
1517
1519
|
(onClick)="addAllToCart()"
|
|
1518
1520
|
[showLabel]="phoneSizeScreen"
|
|
1519
1521
|
></rp-toolbar-icon>
|
|
1520
|
-
<span class="toolbar__divider"></span>
|
|
1522
|
+
<span *ngIf="this.settingsService.settings.showAddToCart" class="toolbar__divider"></span>
|
|
1521
1523
|
</ng-template>
|
|
1522
1524
|
|
|
1523
1525
|
<ng-template #toolbarSnappingIcon>
|
|
@@ -1777,4 +1779,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1777
1779
|
type: HostListener,
|
|
1778
1780
|
args: ['document:keydown', ['$event']]
|
|
1779
1781
|
}] } });
|
|
1780
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS1wbGFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcm9vbS1wbGFubmVyL3Jvb20tcGxhbm5lci9yb29tLXBsYW5uZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFckMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHM0QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsVUFBVSxFQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFtQixVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBb0J4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFJakUsT0FBTyxFQUFD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QUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0osY0FBYztzQkFBMUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ08sbUJBQW1CO3NCQUFwRSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDRixlQUFlO3NCQUE1RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDTSxtQkFBbUI7c0JBQXBFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUUxQixVQUFVO3NCQUEvQixXQUFXO3VCQUFDLE9BQU87Z0JBQ1gsU0FBUztzQkFBakIsS0FBSztnQkFFSSxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQW9GQSxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0V1bGVyLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7UGx1Z2luSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9wbHVnaW4taW50ZXJmYWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5uZXJDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL2Zsb29ycGxhbm5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtJY29uTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2ljb24tbmFtZS5lbnVtJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL3ZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IHtUaHJlZWRNb2RlbH0gZnJvbSAnLi4vLi4vY29yZTNkL21vZGVsL3RocmVlZC1tb2RlbCc7XHJcbmltcG9ydCB7Q2F0ZWdvcnl9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY2F0ZWdvcnknO1xyXG5pbXBvcnQge1xyXG4gIGlzQ3VzdG9tQ3lsaW5kZXJUeXBlLFxyXG4gIGlzQ3VzdG9tQ3lsaW5kZXJXYWxsVHlwZSxcclxuICBpc0N1c3RvbVNoYXBlVHlwZSxcclxuICBpc0N1c3RvbVNoYXBlV2FsbFR5cGUsXHJcbiAgaXNGdXJuaXR1cmVUeXBlLFxyXG4gIGlzV2FsbFR5cGVcclxufSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvZmFjdG9yeSc7XHJcbmltcG9ydCB7Q29ybmVyLCBIYWxmRWRnZSwgSW5XYWxsSXRlbSwgUm9vbSwgV2FsbCwgV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtR3JvdXB9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7TW9kZWxzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvbW9kZWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvcHJlc2V0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjcmVlblNpemVBbmFseXNpc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zY3JlZW4tc2l6ZS1hbmFseXNpcy9zY3JlZW4tc2l6ZS1hbmFseXNpcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5TZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0h1ZFNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2h1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtSb29tU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvaXRlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtU2VyaWFsaXphdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9pdGVtLXNlcmlhbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7TGlnaHRzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvbGlnaHRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbktleX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1NlbGVjdGVkV2FsbEV2ZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC13YWxsLWV2ZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7U2VsZWN0ZWRGbG9vckV2ZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC1mbG9vci1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NjcmVlblNpemVJbmZvfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2NyZWVuLXNpemUtYW5hbHlzaXMvc2NyZWVuLXNpemUtaW5mbyc7XHJcbmltcG9ydCB7Q3VzdG9tU2hhcGVGbG9vckl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tc2hhcGUtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tU2hhcGVXYWxsSXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1zaGFwZS13YWxsLWl0ZW0nO1xyXG5pbXBvcnQge0N1c3RvbUN5bGluZGVyRmxvb3JJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLWN5bGluZGVyLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0N1c3RvbUN5bGluZGVyV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tY3lsaW5kZXItd2FsbC1pdGVtJztcclxuaW1wb3J0IHtEcmFnZ2VkRGF0YX0gZnJvbSAnLi4vLi4vY29yZTNkL2ludGVyZmFjZS9kcmFnZ2VkLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtUZXh0dXJlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUnO1xyXG5pbXBvcnQge0luZm9EaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbmZvLWRpYWxvZy9pbmZvLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge01vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9jb3JlM2QvaW50ZXJmYWNlL21vZGVsLmludGVyZmFjZSc7XHJcbmltcG9ydCB7S2V5fSBmcm9tICcuLi9jb25zdC9rZXknO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGxhbmUtaXRlbSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Blcm1hbmVudFN0b3JlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3Blcm1hbmVudC1zdG9yZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDdXN0b21CdXR0b259IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY3VzdG9tLWJ1dHRvbic7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2ludGVyZmFjZS9leHRlcm5hbC1zb3VyY2UtYXJ0aWNsZS1hZGQuaW50ZXJmYWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtcm9vbS1wbGFubmVyJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cIlJvb21QbGFubmVyXCI+XHJcbiAgICAgIDxmbG9vci1wbGFubmVyXHJcbiAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgIChzZWxlY3RlZFdhbGxDaGFuZ2UpPVwic2VsZWN0V2FsbCgkZXZlbnQpXCI+PC9mbG9vci1wbGFubmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHJwLWNvbnRleHQtbWVudVxyXG4gICAgICAqbmdJZj1cIiF2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSAmJiBzaG93Q29udGV4dE1lbnUgJiYgc2VsZWN0ZWRXYWxsXCJcclxuICAgICAgW29wZW5Nb3VzZUV2ZW50XT1cImNvbnRleHRNZW51TW91c2VFdmVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcCBcIj5cclxuICAgICAgICA8ZGl2IChjbGljayk9XCJzaG93U2VsZWN0ZWRXYWxsU2lkZWJhcigpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLldhbmRNYWdpY1NwYXJrbGVzKVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTkZJR1VSRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3JwLWNvbnRleHQtbWVudT5cclxuXHJcbiAgICA8cnAtY29udGV4dC1tZW51XHJcbiAgICAgICpuZ0lmPVwiIXZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpICYmIHNob3dDb250ZXh0TWVudSAmJiBzZWxlY3RlZEZsb29yXCJcclxuICAgICAgW29wZW5Nb3VzZUV2ZW50XT1cImNvbnRleHRNZW51TW91c2VFdmVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcFwiPlxyXG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNob3dTZWxlY3RlZEZsb29yU2lkZWJhcigpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtIFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5XYW5kTWFnaWNTcGFya2xlcylcIj48L2NvLWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT05GSUdVUkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9ycC1jb250ZXh0LW1lbnU+XHJcbiAgICA8cnAtaXRlbS1jb250ZXh0LW1lbnVcclxuICAgICAgKm5nSWY9XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgJiYgc2hvd0NvbnRleHRNZW51ICYmICFzaG93R3JvdXBNZW51XCJcclxuICAgICAgW2l0ZW1dPVwic2VsZWN0ZWRPYmplY3RcIlxyXG4gICAgICAoZGVsZXRlUHJlc3NlZCk9XCJoYW5kbGVEZWxldGVPYmplY3QoKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1jbG9zZVwiIChjbGljayk9XCJjbG9zZUNvbnRleHRNZW51KClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xvc2UtaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uWG1hcmtMaWdodClcIj48L2NvLWljb24+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLnNlbGVjdGVkT2JqZWN0XCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1oZWFkZXJcIj5cclxuICAgICAgICAgIDxwICpuZ0lmPVwidGhpcy5zZWxlY3RlZE9iamVjdC5uYW1lXCI+e3sgdGhpcy5zZWxlY3RlZE9iamVjdC5uYW1lIH19PC9wPlxyXG4gICAgICAgICAgPHAgKm5nSWY9XCIhdGhpcy5zZWxlY3RlZE9iamVjdC5uYW1lXCI+e3sgJ1NFTEVDVEVEX09CSkVDVCcgfCBsb2NhbGl6ZSB9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NldHRpbmdzQnV0dG9uXCIgKGNsaWNrKT1cInNob3dTZWxlY3RlZE9iamVjdFNpZGViYXIoKVwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0gXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLldhbmRNYWdpY1NwYXJrbGVzKVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTkZJR1VSRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NvbmZpZ3VyYXRpb25CdXR0b25cIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGN1c3RvbUJ1dHRvbiBvZiBtb2RlbHNTZXJ2aWNlLmN1c3RvbUJ1dHRvbnNcIiAoY2xpY2spPVwiaGFuZGxlQ29uZmlndXJhdGlvbkJ1dHRvbkNsaWNrKGN1c3RvbUJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0gXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uV2FuZE1hZ2ljU3BhcmtsZXMpXCI+PC9jby1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT05GSUdVUkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvcHlCdXR0b25cIiAoY2xpY2spPVwiY29weVNlbGVjdGVkT2JqZWN0KClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uQ29weUxpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPUFknIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVCdXR0b25cIiAoY2xpY2spPVwicmVtb3ZlU2VsZWN0ZWRPYmplY3QoKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5UcmFzaENhbkxpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ1JFTU9WRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJzdGFydEdyb3VwU2VsZWN0aW9uKClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uTGlua0xpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0dST1VQJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvbnZlcnNpb25CdXR0b24gJiYgc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNob3dDb252ZXJzaW9uQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAoY2xpY2spPVwic2VuZENvbnZlcnNpb25Ub1RhZ01hbmFnZXIoKVwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwiYWRkU2VsZWN0ZWRDbGFzcyA/ICdjb252ZXJzaW9uLWJ1dHRvbi1zZWxlY3RlZCcgOiAnJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmFkZF9zaG9wcGluZ19jYXJ0PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTlZFUlNJT04nIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaWNvbi1zZWxlY3RlZFwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QVJCdXR0b25cIiAoY2xpY2spPVwic3RhcnRBUlNlc3Npb24oKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPndlZWtlbmQ8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQVInIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbi1lbGV2YXRpb25cclxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRPYmplY3QgJiYgc2VsZWN0ZWRPYmplY3QuZWxldmF0aW9uQWRqdXN0YWJsZVwiXHJcbiAgICAgICAgICBbaXRlbV09XCJzZWxlY3RlZE9iamVjdFwiPlxyXG4gICAgICAgIDwvYnV0dG9uLWVsZXZhdGlvbj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2FsYWJsZU9iamVjdFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXJfX2RpdmlkZXIgY29udGV4dC1tZW51XCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IChjbGljayk9XCJhZGRUb0NhcnQoc2VsZWN0ZWRPYmplY3QpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtIGFkZC10by1jYXJ0LWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCIgW3N2Z0ljb25dPVwiJ2NhcnQtc2hvcHBpbmctcmVndWxhcidcIj48L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdBRERfVE9fQ0FSVCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcnAtaXRlbS1jb250ZXh0LW1lbnU+XHJcblxyXG4gICAgPHJwLWl0ZW0tY29udGV4dC1tZW51ICpuZ0lmPVwiIXZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpICYmIHNob3dDb250ZXh0TWVudSAmJiBzaG93R3JvdXBNZW51ICYmICF1c2VySXNHcm91cGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwic2VsZWN0ZWRPYmplY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVQcmVzc2VkKT1cImhhbmRsZURlbGV0ZU9iamVjdCgpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS13cmFwXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnNcIiAoY2xpY2spPVwib25Hcm91cENsaWNrKClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uTGlua0xpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0dST1VQJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnNcIiAoY2xpY2spPVwib25Vbkdyb3VwQ2xpY2soKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5MaW5rU2xhc2hMaWdodClcIj48L2NvLWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdVTkdST1VQJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnNcIiAoY2xpY2spPVwicmVtb3ZlU2VsZWN0ZWRPYmplY3QoKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5UcmFzaENhbkxpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ1JFTU9WRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xvY2tCdXR0b24gJiYgc2VsZWN0ZWRPYmplY3QgJiYgc2hvd0dyb3VwRWRpdE1lbnVCdXR0b25zXCIgKGNsaWNrKT1cInRvZ2dsZUxvY2tTZWxlY3RlZE9iamVjdCgpXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCIgbWF0VG9vbHRpcD1cInt7IChzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnVU5MT0NLJyA6ICdMT0NLJykgfCBsb2NhbGl6ZSB9fVwiPlxyXG4gICAgICAgICAgICA8Y28taWNvbiAqbmdJZj1cInNlbGVjdGVkT2JqZWN0LmxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnbG9jaycgOiAnbG9ja19vcGVuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uTG9ja0xpZ2h0KVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgPGNvLWljb24gKm5nSWY9XCIhc2VsZWN0ZWRPYmplY3QubG9ja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3RleHRDb250ZW50XT1cInNlbGVjdGVkT2JqZWN0LmxvY2tlZCA/ICdsb2NrJyA6ICdsb2NrX29wZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5Mb2NrT3BlbkxpZ2h0KVwiPjwvY28taWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAoc2VsZWN0ZWRPYmplY3QubG9ja2VkID8gJ1VOTE9DSycgOiAnTE9DSycpIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9ycC1pdGVtLWNvbnRleHQtbWVudT5cclxuICAgIDxycC1yaWdodC1jb250ZXh0LW1lbnVcclxuICAgICAgKm5nSWY9XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgJiYgc2hvd0NvbnRleHRNZW51ICYmICFzaG93R3JvdXBNZW51XCJcclxuICAgICAgW2l0ZW1dPVwic2VsZWN0ZWRPYmplY3RcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJwLXJpZ2h0LWNvbnRleHQtbWVudS13cmFwXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dMb2NrQnV0dG9uICYmIHNlbGVjdGVkT2JqZWN0XCIgKGNsaWNrKT1cInRvZ2dsZUxvY2tTZWxlY3RlZE9iamVjdCgpXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwicnAtcmlnaHQtY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiIG1hdFRvb2x0aXA9XCJ7eyAoc2VsZWN0ZWRPYmplY3QubG9ja2VkID8gJ1VOTE9DSycgOiAnTE9DSycpIHwgbG9jYWxpemUgfX1cIj5cclxuICAgICAgICAgICAgPGNvLWljb24gKm5nSWY9XCJzZWxlY3RlZE9iamVjdC5sb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbdGV4dENvbnRlbnRdPVwic2VsZWN0ZWRPYmplY3QubG9ja2VkID8gJ2xvY2snIDogJ2xvY2tfb3BlbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLkxvY2tMaWdodClcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgIDxjby1pY29uICpuZ0lmPVwiIXNlbGVjdGVkT2JqZWN0LmxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnbG9jaycgOiAnbG9ja19vcGVuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uTG9ja09wZW5MaWdodClcIj48L2NvLWljb24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dDb25maWd1cmF0aW9uQnV0dG9uXCIgKGNsaWNrKT1cInNob3dTZWxlY3RlZFRocmVlZE9iamVjdFNpZGViYXIoKVwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cInJwLXJpZ2h0LWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIiBtYXRUb29sdGlwPVwie3snU0VUVElOR1MnIHwgbG9jYWxpemV9fVwiPlxyXG4gICAgICAgICAgICA8Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLlNldHRpbmdzKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3JwLXJpZ2h0LWNvbnRleHQtbWVudT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhckljb25MaWJyYXJ5PlxyXG4gICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgKm5nSWY9XCIhcGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwidmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgfHwgdmlld01vZGVTZXJ2aWNlLmlzV2Fsa1Rocm91Z2hWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgIG1hdEljb249XCJob3VzZVwiXHJcbiAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuQXJjaGl0ZWN0dXJlIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgKG9uQ2xpY2spPVwic2hvd0xpYnJhcnlDYXRlZ29yaWVzKClcIlxyXG4gICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uQWNjZXNzb2lyZXM+XHJcbiAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICBbZGlzYWJsZWRdPVwidmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgfHwgdmlld01vZGVTZXJ2aWNlLmlzV2Fsa1Rocm91Z2hWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgIG1hdEljb249XCJmbG93ZXJcIlxyXG4gICAgICAgIHRvb2x0aXA9XCJ7e2ljb25OYW1lLkFjY2Vzc29yaWVzIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgKG9uQ2xpY2spPVwic2hvd0FjY2Vzc29pcmVDYXRlZ29yaWVzKClcIlxyXG4gICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uMmRWaWV3PlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRvb2xiYXJfX2RpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICAqbmdJZj1cIiFwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICAgIG1hdEljb249XCJkcmF3X3NxdWFyZVwiXHJcbiAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuVHdvZEZsb29ycGxhbiB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCAhZGVza3RvcFNpemVTY3JlZW5cIlxyXG4gICAgICAgIChvbkNsaWNrKT1cInVwZGF0ZU1vZGUodmlld01vZGVzLkZsb29yUGxhbjJELCB0cnVlKVwiXHJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhclNob3dEaWFncmFtPlxyXG4gICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgKm5nSWY9XCJkaWFncmFtVG9nZ2xlQXZhaWxhYmxlICYmIHZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpXCJcclxuICAgICAgICBtYXRJY29uPVwiaW1hZ2Vfc2xhc2hfcmVndWxhclwiXHJcbiAgICAgICAgdG9vbHRpcD1cIidUb2dnbGUgYWNodGVyZ3JvbmQnXCJcclxuICAgICAgICAob25DbGljayk9XCJ0b2dnbGVEaWFncmFtKClcIlxyXG4gICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uM2RWaWV3PlxyXG4gICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgbWF0SWNvbj1cImN1YmVcIlxyXG4gICAgICAgIHRvb2x0aXA9XCJ7e2ljb25OYW1lLlRocmVlZFJvb21wbGFuIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cInZpZXdNb2RlU2VydmljZS5pczNkVmlld0FjdGl2ZSgpIHx8ICF0aHJlZWRJY29uQXZhaWxhYmxlXCJcclxuICAgICAgICAob25DbGljayk9XCJ1cGRhdGVNb2RlKHZpZXdNb2Rlcy5Sb29tUGxhbjNELCB0cnVlKVwiXHJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxycC16b29tLWNvbnRyb2xzXHJcbiAgICAgIFt2aXNpYmxlXT1cInZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpXCJcclxuICAgICAgKG9uWm9vbUluKT1cInpvb21JbigpXCJcclxuICAgICAgKG9uWm9vbVJlc2V0KT1cInpvb21SZXNldCgpXCJcclxuICAgICAgKG9uWm9vbU91dCk9XCJ6b29tT3V0KClcIlxyXG4gICAgPjwvcnAtem9vbS1jb250cm9scz5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uU2V0dGluZ3M+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgICAgIG1hdEljb249XCJzZXR0aW5nc1wiXHJcbiAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuU2V0dGluZ3MgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAob25DbGljayk9XCJzaG93U2V0dGluZ3MoKVwiXHJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbkNhcnQ+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPHJwLXRvb2xiYXItaWNvbiBjbGFzcz1cImFkZC10by1jYXJ0LWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbWF0SWNvbj1cImNhcnQtc2hvcHBpbmctcmVndWxhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7J0FERF9UT19DQVJUJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZEFsbFRvQ2FydCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sYmFyX19kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJTbmFwcGluZ0ljb24+XHJcbiAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICAqbmdJZj1cInRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlUGxhY2VtZW50U25hcHBpbmdcIlxyXG4gICAgICAgIG1hdEljb249XCJtYWduZXRcIlxyXG4gICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZU9iamVjdFNuYXBwaW5nKClcIlxyXG4gICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICB0b29sdGlwPVwie3snVE9HR0xFX09CSkVDVF9TTkFQUElOR19PRkYnIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuXHJcbiAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICAqbmdJZj1cIiF0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVBsYWNlbWVudFNuYXBwaW5nXCJcclxuICAgICAgICBtYXRJY29uPVwibWFnbmV0X3N0cmlrZXRocm91Z2hcIlxyXG4gICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZU9iamVjdFNuYXBwaW5nKClcIlxyXG4gICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICB0b29sdGlwPVwie3snVE9HR0xFX09CSkVDVF9TTkFQUElOR19PTicgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNzZXR0aW5nc1NpZGViYXI+XHJcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdTRVRUSU5HUycgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgIDwvaGVhZGVyPlxyXG4gICAgICA8cnAtc2V0dGluZ3NcclxuICAgICAgICBbcGxhY2VDYW1lcmFEaXNhYmxlZF09XCJ2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCBpdGVtU2VydmljZS5nZXRXYWxrdGhyb3VnaENhbWVyYSgpXCJcclxuICAgICAgICBbbWluV2FsbEhlaWdodF09XCJnZXRNaW5HbG9iYWxXYWxsSGVpZ2h0KClcIlxyXG4gICAgICAgIChvbldhbGxzSGVpZ2h0VXBkYXRlKT1cIndhbGxzSGVpZ2h0VXBkYXRlZCgkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L3JwLXNldHRpbmdzPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2NhdGVnb3JpZXNTaWRlYmFyPlxyXG4gICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnQVJDSElURUNUVVJFJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgPC9oZWFkZXI+XHJcbiAgICAgIDxycC1jYXRlZ29yeS1saWJyYXJ5XHJcbiAgICAgICAgW2NhdGVnb3JpZXNdPVwiY2F0ZWdvcmllc1wiXHJcbiAgICAgICAgKGNhdGVnb3J5Q2xpY2spPVwic2hvd0xpYnJhcnlDYXRlZ29yeSgkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L3JwLWNhdGVnb3J5LWxpYnJhcnk+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhcj5cclxuICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ0FDQ0VTU09JUkVTJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgPC9oZWFkZXI+XHJcbiAgICAgIDxycC1jYXRlZ29yeS1saWJyYXJ5XHJcbiAgICAgICAgW2NhdGVnb3JpZXNdPVwiYWNjZXNzb2lyZUNhdGVnb3JpZXNcIlxyXG4gICAgICAgIChjYXRlZ29yeUNsaWNrKT1cInNob3dMaWJyYXJ5Q2F0ZWdvcnkoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9ycC1jYXRlZ29yeS1saWJyYXJ5PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2N1c3RvbVNoYXBlQ3JlYXRvclNpZGVCYXI+XHJcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdDVVNUT01fU0hBUEVfQ1JFQVRPUicgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgIDwvaGVhZGVyPlxyXG4gICAgICA8cnAtY3VzdG9tLXNoYXBlLWNyZWF0b3IgW3NoYXBlXT1cInNlbGVjdGVkT2JqZWN0XCI+PC9ycC1jdXN0b20tc2hhcGUtY3JlYXRvcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNjdXN0b21DeWxpbmRlckNyZWF0b3JTaWRlQmFyPlxyXG4gICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnQ1VTVE9NX1NIQVBFX0NSRUFUT1InIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICA8L2hlYWRlcj5cclxuICAgICAgPGN1c3RvbS1jeWxpbmRlci1jcmVhdG9yIFtzaGFwZV09XCJzZWxlY3RlZE9iamVjdFwiPjwvY3VzdG9tLWN5bGluZGVyLWNyZWF0b3I+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlicmFyeVNpZGViYXI+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cIndpdGgtc2Nyb2xsYWJsZS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2hvd0FjdGl2ZUNhdGVnb3J5U2lkZWJhcigpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5hcnJvd19iYWNrX2lvczwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7IHNlbGVjdGVkQ2F0ZWdvcnkubmFtZSB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICA8cCBjbGFzcz1cIm1hdC1ib2R5XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5LmRlc2NyaXB0aW9uXCI+e3sgc2VsZWN0ZWRDYXRlZ29yeS5kZXNjcmlwdGlvbiB8IGxvY2FsaXplIH19PC9wPlxyXG4gICAgICAgIDxzZWN0aW9uIGZ4RmxleD1cImdyb3dcIiAqbmdJZj1cImxpYnJhcnlPYmplY3RzPy5sZW5ndGggPiAwIHx8IGhhc0N1c3RvbU9iamVjdHMoKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0N1c3RvbU9iamVjdHMoKVwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3sgJ0NVU1RPTScgfCBsb2NhbGl6ZSB9fTwvaDM+XHJcbiAgICAgICAgICAgIDxycC1vYmplY3QtbGlicmFyeVxyXG4gICAgICAgICAgICAgIFtvYmplY3RzXT1cImN1c3RvbU9iamVjdHNcIlxyXG4gICAgICAgICAgICAgIChzZXREcmFnZ2VkKT1cInNldERyYWdnZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKHJlbGVhc2VEcmFnZ2VkKT1cInJlbGVhc2VEcmFnZ2VkKClcIlxyXG4gICAgICAgICAgICAgIChvbk9iamVjdENsaWNrKT1cIm9uT2JqZWN0TGlicmFyeUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvcnAtb2JqZWN0LWxpYnJhcnk+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlicmFyeU9iamVjdHM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMlwiPnt7ICdMSUJSQVJZJyB8IGxvY2FsaXplIH19PC9oMz5cclxuICAgICAgICAgICAgPHJwLW9iamVjdC1saWJyYXJ5XHJcbiAgICAgICAgICAgICAgW29iamVjdHNdPVwibGlicmFyeU9iamVjdHNcIlxyXG4gICAgICAgICAgICAgIChzZXREcmFnZ2VkKT1cInNldERyYWdnZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKHJlbGVhc2VEcmFnZ2VkKT1cInJlbGVhc2VEcmFnZ2VkKClcIlxyXG4gICAgICAgICAgICAgIChvbk9iamVjdENsaWNrKT1cIm9uT2JqZWN0TGlicmFyeUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvcnAtb2JqZWN0LWxpYnJhcnk+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3NlbGVjdGVkT2JqZWN0U2lkZWJhcj5cclxuICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ09CSkVDVCcgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgIDwvaGVhZGVyPlxyXG4gICAgICA8cnAtc2VsZWN0ZWQtb2JqZWN0XHJcbiAgICAgICAgW29iamVjdF09XCJzZWxlY3RlZE9iamVjdFwiXHJcbiAgICAgICAgKG9uU2VsZWN0ZWRPYmplY3RDaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRPYmplY3RIdWQoKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9ycC1zZWxlY3RlZC1vYmplY3Q+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWRXYWxsU2lkZWJhcj5cclxuICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ1dBTEwnfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgIDwvaGVhZGVyPlxyXG4gICAgICA8cnAtc2VsZWN0ZWQtd2FsbFxyXG4gICAgICAgIFt3YWxsXT1cInNlbGVjdGVkV2FsbFwiXHJcbiAgICAgICAgW3RleHR1cmVQbGFuZV09XCJzZWxlY3RlZEVkZ2VzWzBdXCJcclxuICAgICAgICBbbWluV2FsbEhlaWdodF09XCJnZXRNaW5XYWxsSGVpZ2h0KHNlbGVjdGVkV2FsbClcIlxyXG4gICAgICAgIFttYXhXYWxsSGVpZ2h0XT1cIm1heFdhbGxIZWlnaHRcIlxyXG4gICAgICAgIFttYXhXYWxsVGhpY2tuZXNzXT1cIm1heFdhbGxUaGlja25lc3NcIlxyXG4gICAgICAgIFttYXhXYWxsTGVuZ3RoXT1cIm1heFdhbGxMZW5ndGhcIlxyXG4gICAgICAgIFttaW5XYWxsTGVuZ3RoXT1cIm1pbldhbGxMZW5ndGhcIlxyXG4gICAgICAgIChyZW1vdmUpPVwicmVtb3ZlV2FsbCgkZXZlbnQpXCJcclxuICAgICAgICAoc2V0TGVuZ3RoKT1cInNldFdhbGxMZW5ndGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNldEhlaWdodCk9XCJzZXRXYWxsSGVpZ2h0KCRldmVudClcIlxyXG4gICAgICAgIChzZXRUaGlja25lc3MpPVwic2V0V2FsbFRoaWNrbmVzcygkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0Q29ybmVyKT1cInNlbGVjdENvcm5lcigkZXZlbnQpXCJcclxuICAgICAgICAoc2V0VGV4dHVyZSk9XCJzZXRXYWxsVGV4dHVyZSgkZXZlbnQpXCJcclxuICAgICAgICAoc2V0Q29sb3IpPVwic2V0V2FsbENvbG9yKCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvcnAtc2VsZWN0ZWQtd2FsbD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZFRocmVlZE9iamVjdFNpZGViYXI+XHJcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiIFt0ZXh0Q29udGVudF09XCInU0VUVElOR1MnIHwgbG9jYWxpemVcIj48L2gyPlxyXG4gICAgICA8L2hlYWRlcj5cclxuICAgICAgPHJwLXNlbGVjdGVkLXRocmVlZC1vYmplY3RcclxuICAgICAgICBbb2JqZWN0XT1cInNlbGVjdGVkT2JqZWN0XCJcclxuICAgICAgICBbc2hvd0NvcHldPVwic2hvd0NvcHlCdXR0b25cIlxyXG4gICAgICAgIFtzaG93RGVsZXRlXT1cInNob3dEZWxldGVCdXR0b25cIlxyXG4gICAgICAgIFtzaG93TG9ja109XCJzaG93TG9ja0J1dHRvblwiXHJcbiAgICAgICAgKG9uU2VsZWN0ZWRPYmplY3RDaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRPYmplY3RIdWQoKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9ycC1zZWxlY3RlZC10aHJlZWQtb2JqZWN0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3NlbGVjdGVkRmxvb3JTaWRlYmFyPlxyXG4gICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnRkxPT1InIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICA8cnAtc2VsZWN0ZWQtZmxvb3JcclxuICAgICAgICBbZmxvb3JdPVwic2VsZWN0ZWRGbG9vclwiXHJcbiAgICAgICAgW3RleHR1cmVQbGFuZV09XCJzZWxlY3RlZEZsb29yXCJcclxuICAgICAgICAoc2V0VGV4dHVyZSk9XCJzZXRGbG9vclRleHR1cmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNldENvbG9yKT1cInNldEZsb29yQ29sb3IoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRmxvb3JDbG9zZWQpPVwic2VsZWN0ZWRGbG9vciA9IHVuZGVmaW5lZFwiXHJcbiAgICAgID5cclxuICAgICAgPC9ycC1zZWxlY3RlZC1mbG9vcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJJc0dyb3VwaW5nXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS13cmFwIG1ycC1zYXZlLWdyb3VwaW5nXCIgKm5nSWY9XCJ1c2VySXNHcm91cGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCIgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+Y2hlY2s8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnR1JPVVBJTkcnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIiAoY2xpY2spPVwiY2FuY2VsR3JvdXBTZWxlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNhbmNlbDwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDQU5DRUwnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIGAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcm9vbS1wbGFubmVyLmNvbXBvbmVudC5zY3NzJ10vKixcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCovXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb29tUGxhbm5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBQbHVnaW5JbnRlcmZhY2Uge1xyXG4gIEBWaWV3Q2hpbGQoRmxvb3JwbGFubmVyQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSlcclxuICBwdWJsaWMgZmxvb3JwbGFubmVyOiBGbG9vcnBsYW5uZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25MaWJyYXJ5Jywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uTGlicmFyeTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbkFjY2Vzc29pcmVzJywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uQWNjZXNzb2lyZXM6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25TZXR0aW5ncycsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvblNldHRpbmdzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uMmRWaWV3Jywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uMmRWaWV3OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJTaG93RGlhZ3JhbScsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFyU2hvd0RpYWdyYW06IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb24zZFZpZXcnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb24zZFZpZXc6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnY2F0ZWdvcmllc1NpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgY2F0ZWdvcmllc1NpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBhY2Nlc3NvaXJlc0NhdGVnb3JpZXNTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbVNoYXBlQ3JlYXRvclNpZGVCYXInLCB7c3RhdGljOiB0cnVlfSkgY3VzdG9tU2hhcGVDcmVhdG9yU2lkZUJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdjdXN0b21DeWxpbmRlckNyZWF0b3JTaWRlQmFyJywge3N0YXRpYzogdHJ1ZX0pIGN1c3RvbUN5bGluZGVyQ3JlYXRvclNpZGVCYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2V0dGluZ3NTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNldHRpbmdzU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdsaWJyYXJ5U2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBsaWJyYXJ5U2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RlZE9iamVjdFNpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0ZWRPYmplY3RTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkV2FsbFNpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0ZWRXYWxsU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RlZFRocmVlZE9iamVjdFNpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkRmxvb3JTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkRmxvb3JTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uRmFxJywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uRmFxOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uRmVlZGJhY2snLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25GZWVkYmFjazogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbkNhcnQnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25DYXJ0OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJTbmFwcGluZ0ljb24nLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhclNuYXBwaW5nSWNvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGxheWVyQ2xhc3MgPSAnbGF5ZXInO1xyXG4gIEBJbnB1dCgpIGlzTG9hZGluZzogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIGRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNob3dQbHVnaW4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZm9jdXNDb250cm9scyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IGljb246IHR5cGVvZiBJY29uRW51bSA9IEljb25FbnVtO1xyXG4gIHB1YmxpYyByZWFkb25seSBpY29uTmFtZTogdHlwZW9mIEljb25OYW1lID0gSWNvbk5hbWU7XHJcbiAgcHVibGljIHJlYWRvbmx5IHZpZXdNb2RlczogdHlwZW9mIFZpZXdNb2RlID0gVmlld01vZGU7XHJcblxyXG4gIG9iamVjdHM6IFRocmVlZE1vZGVsW107XHJcbiAgY3VzdG9tT2JqZWN0czogVGhyZWVkTW9kZWxbXTtcclxuICBsaWJyYXJ5T2JqZWN0czogVGhyZWVkTW9kZWxbXTtcclxuICBjYXRlZ29yaWVzOiBDYXRlZ29yeVtdO1xyXG4gIGFjY2Vzc29pcmVDYXRlZ29yaWVzOiBDYXRlZ29yeVtdO1xyXG4gIHNlbGVjdGVkQ2F0ZWdvcnk6IENhdGVnb3J5O1xyXG4gIHNob3dDb250ZXh0TWVudTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHNlbGVjdGVkV2FsbDogV2FsbDtcclxuICBzZWxlY3RlZEVkZ2U6IHN0cmluZztcclxuICBzZWxlY3RlZEZsb29yOiBGbG9vclBsYW5lSXRlbTtcclxuICBzZWxlY3RlZFJvb206IFJvb207XHJcbiAgc2VsZWN0ZWRPYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyB3YWxsTGVuZ3RoSW5mb0RpYWxvZ0VuYWJsZWQgPSB0cnVlO1xyXG4gIHB1YmxpYyBtYXhXYWxsSGVpZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIG1heFdhbGxUaGlja25lc3M6IG51bWJlcjtcclxuICBwdWJsaWMgbWF4V2FsbExlbmd0aDogbnVtYmVyO1xyXG4gIHB1YmxpYyBtaW5XYWxsTGVuZ3RoOiBudW1iZXI7XHJcbiAgcHVibGljIGRlc2t0b3BTaXplU2NyZWVuOiBib29sZWFuO1xyXG4gIHB1YmxpYyB0YWJsZXRTaXplU2NyZWVuOiBib29sZWFuO1xyXG4gIHB1YmxpYyBwaG9uZVNpemVTY3JlZW46IGJvb2xlYW47XHJcbiAgcHVibGljIGNvbnRleHRNZW51TW91c2VFdmVudDogTW91c2VFdmVudDtcclxuICBwdWJsaWMgc2hvd1NldHRpbmdzQnV0dG9uOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzaG93Q29uZmlndXJhdGlvbkJ1dHRvbjogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd0RlbGV0ZUJ1dHRvbjogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd0xvY2tCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBzaG93QVJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBzaG93Q29weUJ1dHRvbjogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd0dyb3VwTWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0ljb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdXNlcklzR3JvdXBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0NvbnZlcnNpb25CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYWRkU2VsZWN0ZWRDbGFzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzYWxhYmxlT2JqZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHRocmVlZEljb25BdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGlhZ3JhbVRvZ2dsZUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHByaXZhdGUgX21vZGUgPSBWaWV3TW9kZS5Sb29tUGxhbjNEO1xyXG4gIHByaXZhdGUgX2NhdGFsb2dJc1Nob3duOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2Jsb2NrTGVmdFNpZGVCYXIgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgaWNvblNlcnZpY2U6IEhvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIG1vZGVsc1NlcnZpY2U6IE1vZGVsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRzU2VydmljZTogUHJlc2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjcmVlbkFuYWx5c2lzOiBTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29ycGxhblNlcnZpY2U6IEZsb29ycGxhblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2h1ZFNlcnZpY2U6IEh1ZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb29tU2VydmljZTogUm9vbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcmlhbGl6YXRpb25TZXJ2aWNlOiBJdGVtU2VyaWFsaXphdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9saWdodHNTZXJ2aWNlOiBMaWdodHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXJTZXJ2aWNlOiBBclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHVibGljIHNldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2dvb2dsZVRhZ01hbmFnZXI6IEdvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcGVybWFuZW50U3RvcmVTZXJ2aWNlOiBQZXJtYW5lbnRTdG9yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3JTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3ByZXNldHNTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIGhhbmRsZURvY0tleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRFZGdlcygpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkV2FsbCAmJiB0aGlzLnNlbGVjdGVkRWRnZSA/XHJcbiAgICAgIFt0aGlzLnNlbGVjdGVkV2FsbFt0aGlzLnNlbGVjdGVkRWRnZV1dIDpcclxuICAgICAgW3RoaXMuc2VsZWN0ZWRXYWxsICYmIHRoaXMuc2VsZWN0ZWRXYWxsLmJhY2tFZGdlLFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXYWxsICYmIHRoaXMuc2VsZWN0ZWRXYWxsLmZyb250RWRnZVxyXG4gICAgICBdLmZpbHRlcihlZGdlID0+IGVkZ2UpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm1heFdhbGxIZWlnaHQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5Lk1heFdhbGxIZWlnaHQpO1xyXG4gICAgdGhpcy5tYXhXYWxsVGhpY2tuZXNzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5NYXhXYWxsVGhpY2tuZXNzKTtcclxuICAgIHRoaXMubWF4V2FsbExlbmd0aCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuTWF4V2FsbExlbmd0aCk7XHJcbiAgICB0aGlzLm1pbldhbGxMZW5ndGggPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5Lk1pbldhbGxMZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbkxpYnJhcnksXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDIwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25BY2Nlc3NvaXJlcyxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogMjAwXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbjJkVmlldyxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogNDAwXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFyU2hvd0RpYWdyYW0sXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDQwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb24zZFZpZXcsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDQwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25TZXR0aW5ncyxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogNTAwXHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgLy8gICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbkZhcSxcclxuICAgIC8vICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgLy8gICBwcmlvcml0eTogNjAwXHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgLy8gICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbkZlZWRiYWNrLFxyXG4gICAgLy8gICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAvLyAgIHByaW9yaXR5OiA3MDBcclxuICAgIC8vIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uQ2FydCxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogMTAwMFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJTbmFwcGluZ0ljb24sXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDEyMDBcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2FwcFNlcnZpY2UuY2F0ZWdvcmllc0xvYWRlZC5zdWJzY3JpYmUoKGNhdGVnb3JpZXM6IENhdGVnb3J5W10pID0+IHtcclxuICAgICAgICBpZiAoY2F0ZWdvcmllcykge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gdGhpcy5fYXBwU2VydmljZS5nZXRDYXRlZ29yaWVzKCdhcmNoaXRlY3R1cmUnKTtcclxuICAgICAgICAgIHRoaXMuYWNjZXNzb2lyZUNhdGVnb3JpZXMgPSB0aGlzLl9hcHBTZXJ2aWNlLmdldENhdGVnb3JpZXMoJ2FjY2Vzc29pcmVzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy52aWV3TW9kZVNlcnZpY2Uudmlld01vZGVDaGFuZ2VkLnN1YnNjcmliZSgobW9kZTogVmlld01vZGUpID0+IHRoaXMuX3ZpZXdNb2RlQ2hhbmdlZChtb2RlKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TZXQyRFZpZXcsICh7c2VuZFVwZGF0ZXN9KSA9PiB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuRmxvb3JQbGFuMkQsIHNlbmRVcGRhdGVzKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TZXQzRFZpZXcsICh7c2VuZFVwZGF0ZXN9KSA9PiB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuUm9vbVBsYW4zRCwgc2VuZFVwZGF0ZXMpKSxcclxuICAgICAgdGhpcy5faW5pdFNjcmVlblNpemVIYW5kbGluZygpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuR3JvdXBNb2RlQ2hhbmdlZCwgKHtzaG93R3JvdXBNZW51fSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0dyb3VwTWVudSA9IHNob3dHcm91cE1lbnU7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSXRlbVNlbGVjdGVkLCAoaXRlbSkgPT4gdGhpcy5vYmplY3RTZWxlY3RlZChpdGVtKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtVW5zZWxlY3RlZCwgKGl0ZW0pID0+IHRoaXMub2JqZWN0VW5zZWxlY3RlZCgpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxlZnRTaWRlYmFyQ2xvc2VDbGlja2VkLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXYWxsID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2UpLFxyXG4gICAgICB0aGlzLl9yb29tU2VydmljZS53YWxsU2VsZWN0ZWQuc3Vic2NyaWJlKChzZWxlY3RlZFdhbGxFdmVudDogU2VsZWN0ZWRXYWxsRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZsb29yKSB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RXYWxsKHNlbGVjdGVkV2FsbEV2ZW50KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3Jvb21TZXJ2aWNlLmZsb29yU2VsZWN0ZWQuc3Vic2NyaWJlKChzZWxlY3RlZEZsb29yRXZlbnQ6IFNlbGVjdGVkRmxvb3JFdmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV2FsbCkge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTGVmdFNpZGViYXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkV2FsbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RGbG9vcihzZWxlY3RlZEZsb29yRXZlbnQpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5faXRlbVNlcnZpY2UuY29weUl0ZW0uc3Vic2NyaWJlKChpdGVtOiBJdGVtKSA9PiB0aGlzLl9jb3B5SXRlbShpdGVtKSksXHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmRlbGV0ZUl0ZW0uc3Vic2NyaWJlKChpdGVtOiBJdGVtKSA9PiB0aGlzLl9yZW1vdmVPYmplY3QoaXRlbSkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU2hvd1Byb2R1Y3RDYXRhbG9nLCAoKSA9PiB0aGlzLl9jYXRhbG9nSXNTaG93biA9IHRydWUpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nLCAoKSA9PiB0aGlzLl9jYXRhbG9nSXNTaG93biA9IGZhbHNlKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkJsb2NrTGVmdFNpZGViYXIsIChibG9jaykgPT4gdGhpcy5fYmxvY2tMZWZ0U2lkZUJhciA9IGJsb2NrKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlNob3dGdXJuaXR1cmVTaWRlYmFyLCAoY2F0ZWdvcnk6IENhdGVnb3J5KSA9PiB0aGlzLnNob3dMaWJyYXJ5Q2F0ZWdvcnkoY2F0ZWdvcnkpKSxcclxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9iamVjdE1vdmluZ09yUm90YXRpbmcuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2UpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuRmxvb3JQbGFuZUF2YWlsYWJsZSwgKCkgPT4gdGhpcy5fc2V0VGhyZWVkQXZhaWxhYmxlKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFNjYWxlZERpYWdyYW0sIChpbnB1dCkgPT4gdGhpcy5lbmFibGVEaWFncmFtVG9nZ2xlKGlucHV0KSksXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2hvd0FSQnV0dG9uID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93QXJCdXR0b24gJiYgYXdhaXQgdGhpcy5fYXJTZXJ2aWNlLmFyU3VwcG9ydGVkKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uTGlicmFyeSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9vbGJhckljb25BY2Nlc3NvaXJlcyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9vbGJhckljb25TZXR0aW5ncyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9vbGJhckljb24yZFZpZXcgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJTaG93RGlhZ3JhbSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9vbGJhckljb24zZFZpZXcgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmNhdGVnb3JpZXNTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5hY2Nlc3NvaXJlc0NhdGVnb3JpZXNTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jdXN0b21TaGFwZUNyZWF0b3JTaWRlQmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jdXN0b21DeWxpbmRlckNyZWF0b3JTaWRlQmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZXR0aW5nc1NpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmxpYnJhcnlTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdFNpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbFNpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vclNpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRTY3JlZW5TaXplSGFuZGxpbmcoKTogU3Vic2NyaXB0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9zY3JlZW5BbmFseXNpcy5zY3JlZW5TaXplQ2hhbmdlZC5zdWJzY3JpYmUoKGluZm86IFNjcmVlblNpemVJbmZvKSA9PiB7XHJcbiAgICAgIHRoaXMuZGVza3RvcFNpemVTY3JlZW4gPSBpbmZvLmlzRGVza3RvcFNpemU7XHJcbiAgICAgIHRoaXMudGFibGV0U2l6ZVNjcmVlbiA9IGluZm8uaXNUYWJsZXRTaXplO1xyXG4gICAgICB0aGlzLnBob25lU2l6ZVNjcmVlbiA9IGluZm8uaXNQaG9uZVNpemU7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGVza3RvcFNpemVTY3JlZW4gJiYgKHRoaXMudmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgfHwgdGhpcy52aWV3TW9kZVNlcnZpY2UuaXNWUlZpZXdBY3RpdmUoKSkpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuUm9vbVBsYW4zRCwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmlld01vZGVDaGFuZ2VkKG1vZGU6IFZpZXdNb2RlKSB7XHJcbiAgICB0aGlzLl9tb2RlID0gbW9kZTtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICB9XHJcblxyXG4gIG9iamVjdFNlbGVjdGVkKG9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cCkge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5zYWxhYmxlT2JqZWN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0ID0gb2JqZWN0O1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgSXRlbUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuc2hvd0dyb3VwTWVudSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvd0dyb3VwRWRpdE1lbnVCdXR0b25zID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIEl0ZW0pIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEgJiYgdGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YS5nb29kSWQpIHtcclxuICAgICAgICB0aGlzLnNhbGFibGVPYmplY3QgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2hvd0dyb3VwTWVudSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dTZXR0aW5nc0J1dHRvbiA9IHRoaXMuX2hhc1NldHRpbmdzKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICB0aGlzLnNob3dDb25maWd1cmF0aW9uQnV0dG9uID0gdGhpcy5faXNDb25maWd1cmFibGUodGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIHRoaXMuc2hvd0RlbGV0ZUJ1dHRvbiA9IHRoaXMuX2lzRGVsZXRhYmxlKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICB0aGlzLnNob3dDb3B5QnV0dG9uID0gdGhpcy5faXNDb3B5YWJsZSh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgdGhpcy5zaG93Q29udmVyc2lvbkJ1dHRvbiA9IHRoaXMuX2lzQ29udmVyc2lvbkl0ZW0odGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YS5jb252ZXJzaW9uR1RNU2VuZCkge1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWRDbGFzcyA9IHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuY29udmVyc2lvbkdUTVNlbmQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZGRTZWxlY3RlZENsYXNzID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91dGlsc1NlcnZpY2UuZm9yY2VDaGFuZ2VEZXRlY3Rpb24odGhpcy5fY2QsIHRoaXMsICdzZWxlY3RlZE9iamVjdCcpO1xyXG4gICAgdGhpcy5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1NlbGVjdGVkT2JqZWN0U2lkZWJhcigpIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcblxyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhO1xyXG4gICAgaWYgKG1ldGFkYXRhICYmIChpc0N1c3RvbVNoYXBlVHlwZShtZXRhZGF0YS5pdGVtVHlwZSkgfHwgaXNDdXN0b21TaGFwZVdhbGxUeXBlKG1ldGFkYXRhLml0ZW1UeXBlKSkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5jdXN0b21TaGFwZUNyZWF0b3JTaWRlQmFyKTtcclxuICAgIH0gZWxzZSBpZiAobWV0YWRhdGEgJiYgKGlzQ3VzdG9tQ3lsaW5kZXJUeXBlKG1ldGFkYXRhLml0ZW1UeXBlKSB8fCBpc0N1c3RvbUN5bGluZGVyV2FsbFR5cGUobWV0YWRhdGEuaXRlbVR5cGUpKSkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLmN1c3RvbUN5bGluZGVyQ3JlYXRvclNpZGVCYXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZE9iamVjdFNpZGViYXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNvbmZpZ3VyYXRpb25CdXR0b25DbGljayhidG46IEN1c3RvbUJ1dHRvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIGJ0bi5oYW5kbGVyKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBGbG9vclBsYW5lSXRlbSkge1xyXG4gICAgICB0aGlzLnNob3dTZWxlY3RlZEZsb29yU2lkZWJhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb2JqZWN0VW5zZWxlY3RlZCgpIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuc2hvd0dyb3VwTWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93R3JvdXBFZGl0TWVudUJ1dHRvbnMgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkT2JqZWN0SHVkKCkge1xyXG4gICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVEZWxldGVPYmplY3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdCAmJiB0aGlzLl9pc0RlbGV0YWJsZSh0aGlzLnNlbGVjdGVkT2JqZWN0KSkge1xyXG4gICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkT2JqZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RlZE9iamVjdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9yZW1vdmVPYmplY3QodGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcbiAgICB0aGlzLm9iamVjdFVuc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVMb2NrU2VsZWN0ZWRPYmplY3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdC5sb2NrZWQgPSAhdGhpcy5zZWxlY3RlZE9iamVjdC5sb2NrZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVPYmplY3Qob2JqZWN0OiBJdGVtIHwgSXRlbUdyb3VwKSB7XHJcbiAgICBpZiAoaXNXYWxsVHlwZShvYmplY3QudXNlckRhdGEuaXRlbVR5cGUpKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRXYWxsID0gKDxXYWxsSXRlbT5vYmplY3QpLmN1cnJlbnRXYWxsO1xyXG4gICAgICBpZiAoY3VycmVudFdhbGwpIHtcclxuICAgICAgICBjdXJyZW50V2FsbC5yZW1vdmVJdGVtKDxJdGVtPm9iamVjdCk7XHJcbiAgICAgICAgY3VycmVudFdhbGwucmVtb3ZlT25JdGVtKDxJdGVtPm9iamVjdCk7XHJcbiAgICAgICAgY3VycmVudFdhbGwuZmlyZVJlZHJhdygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzRnVybml0dXJlVHlwZShvYmplY3QudXNlckRhdGEuaXRlbVR5cGUpKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVtb3ZlU2VsZWN0ZWRGdXJuaXR1cmUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAob2JqZWN0LmNhbkJlUmVtb3ZlZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JlbW92ZUl0ZW0ob2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9iamVjdC5yZW1vdmVkKCk7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVJdGVtKG9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cCkge1xyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShvYmplY3QpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdyZW1vdmVPYmplY3QnfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb3B5U2VsZWN0ZWRPYmplY3QoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fY29weUl0ZW0odGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jb3B5SXRlbShvcmlnaW5hbDogSXRlbSB8IEl0ZW1Hcm91cCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgaXNDdXN0b21TaGFwZUl0ZW06IGJvb2xlYW4gPSBvcmlnaW5hbCBpbnN0YW5jZW9mIEN1c3RvbVNoYXBlRmxvb3JJdGVtO1xyXG4gICAgY29uc3QgaXNDdXN0b21TaGFwZVdhbGxJdGVtOiBib29sZWFuID0gb3JpZ2luYWwgaW5zdGFuY2VvZiBDdXN0b21TaGFwZVdhbGxJdGVtO1xyXG4gICAgY29uc3QgaXNDdXN0b21DeWxpbmRlckl0ZW06IGJvb2xlYW4gPSBvcmlnaW5hbCBpbnN0YW5jZW9mIEN1c3RvbUN5bGluZGVyRmxvb3JJdGVtO1xyXG4gICAgY29uc3QgaXNDdXN0b21DeWxpbmRlcldhbGxJdGVtOiBib29sZWFuID0gb3JpZ2luYWwgaW5zdGFuY2VvZiBDdXN0b21DeWxpbmRlcldhbGxJdGVtO1xyXG4gICAgY29uc3QgaXNSZXNpemFibGVEb29yT3JXaW5kb3c6IGJvb2xlYW4gPSBvcmlnaW5hbCBpbnN0YW5jZW9mIEluV2FsbEl0ZW0gJiYgb3JpZ2luYWwuaXNDdXN0b207XHJcbiAgICBpZiAoaXNDdXN0b21TaGFwZUl0ZW0gfHwgaXNDdXN0b21TaGFwZVdhbGxJdGVtIHx8IGlzQ3VzdG9tQ3lsaW5kZXJJdGVtIHx8IGlzQ3VzdG9tQ3lsaW5kZXJXYWxsSXRlbSB8fCBpc1Jlc2l6YWJsZURvb3JPcldpbmRvdykge1xyXG4gICAgICBjb25zdCBjb3B5ID0gKG9yaWdpbmFsIGFzIEN1c3RvbVNoYXBlRmxvb3JJdGVtIHwgSW5XYWxsSXRlbSkuY2xvbmVJdGVtKCk7XHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oY29weSk7XHJcbiAgICAgIGlmIChjb3B5IGluc3RhbmNlb2YgV2FsbEl0ZW0pIHtcclxuICAgICAgICBjb25zdCBjbG9zZXN0V2FsbEVkZ2UgPSB0aGlzLl9yb29tU2VydmljZS5nZXRDbG9zZXN0V2FsbEVkZ2Uob3JpZ2luYWwucG9zaXRpb24ueCwgb3JpZ2luYWwucG9zaXRpb24ueik7XHJcbiAgICAgICAgY29weS5wbGFjZU9uRWRnZShjbG9zZXN0V2FsbEVkZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0RHJhZywgY29weSk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU3RhcnREcmFnLCBvcmlnaW5hbC5wb3NpdGlvbik7XHJcbiAgICB9IGVsc2UgaWYgKG9yaWdpbmFsLnVzZXJEYXRhICYmIG9yaWdpbmFsLnVzZXJEYXRhLml0ZW1JZGVudGlmaWVyKSB7XHJcbiAgICAgIGlmIChvcmlnaW5hbC5tZXRhZGF0YS50aGlyZFBhcnR5TW9kZWwpIHtcclxuICAgICAgICAvLyBXaGVuIGl0J3MgYSB0aGlyZCBwYXJ0eSBtb2RlbCwgd2Ugc2hvdWxkIGp1c3QgY2xvbmUgdGhlIE9iamVjdCgzRClcclxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkNsb25lVGhpcmRQYXJ0eU1vZGVsLCBvcmlnaW5hbCBhcyBJdGVtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkNvcHlJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1UsIG9yaWdpbmFsIGFzIEl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkcmFnZ2VkRGF0YTogRHJhZ2dlZERhdGEgPSB7XHJcbiAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZSxcclxuICAgICAgICB0eXBlOiBvcmlnaW5hbC5tZXRhZGF0YS5pdGVtVHlwZSxcclxuICAgICAgICBpT25lOiBmYWxzZSxcclxuICAgICAgICBvdmVycmlkZXM6IHtcclxuICAgICAgICAgIHJvdGF0aW9uOiBvcmlnaW5hbC5yb3RhdGlvbiAmJiBvcmlnaW5hbC5yb3RhdGlvbi5jbG9uZSgpLFxyXG4gICAgICAgICAgLy8gc2NhbGU6IG9yaWdpbmFsLnNjYWxlICYmIG9yaWdpbmFsLnNjYWxlLmNsb25lKCksXHJcbiAgICAgICAgICBvcGVuaW5nOiAob3JpZ2luYWwgYXMgYW55KS5vcGVuaW5nLFxyXG4gICAgICAgICAgdGV4dHVyZTogKG9yaWdpbmFsIGFzIGFueSkudGV4dHVyZSxcclxuICAgICAgICAgIGlzQ29weTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXREcmFnLCBkcmFnZ2VkRGF0YSk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU3RhcnREcmFnLCBvcmlnaW5hbC5wb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB6b29tUmVzZXQoKSB7XHJcbiAgICB0aGlzLmZsb29ycGxhbm5lci56b29tUmVzZXQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYW50Wm9vbU91dCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29ycGxhbm5lci5jYW50Wm9vbU91dDtcclxuICB9XHJcblxyXG4gIGdldCBjYW50Wm9vbUluKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JwbGFubmVyLmNhbnRab29tSW47XHJcbiAgfVxyXG5cclxuICB6b29tT3V0KCkge1xyXG4gICAgdGhpcy5mbG9vcnBsYW5uZXIuem9vbU91dCgpO1xyXG4gIH1cclxuXHJcbiAgem9vbUluKCkge1xyXG4gICAgdGhpcy5mbG9vcnBsYW5uZXIuem9vbUluKCk7XHJcbiAgfVxyXG5cclxuICB1bnNlbGVjdEFsbCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWRnZSA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbCA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0ID0gbnVsbDtcclxuICAgIGlmICghdGhpcy5fYmxvY2tMZWZ0U2lkZUJhcikge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlTW9kZSh2YWx1ZTogVmlld01vZGUsIHNlbmRVcGRhdGVzID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcclxuICAgIGlmIChzZW5kVXBkYXRlcykge1xyXG4gICAgICB0aGlzLnZpZXdNb2RlU2VydmljZS5zZXRWaWV3TW9kZSh0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldFNpemUoKSwgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRDZW50ZXIoKSwgdmFsdWUpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlZpZXdNb2RlQ2hhbmdlZCwgdmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZURpYWdyYW0oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlRvZ2dsZURpYWdyYW0pO1xyXG4gIH1cclxuXHJcbiAgc2hvd0xpYnJhcnlDYXRlZ29yaWVzKCkge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5jYXRlZ29yaWVzU2lkZWJhcik7XHJcbiAgICB0aGlzLl9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZSA9IHRoaXMuY2F0ZWdvcmllc1NpZGViYXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0FjY2Vzc29pcmVDYXRlZ29yaWVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5hY2Nlc3NvaXJlc0NhdGVnb3JpZXNTaWRlYmFyKTtcclxuICAgIHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlID0gdGhpcy5hY2Nlc3NvaXJlc0NhdGVnb3JpZXNTaWRlYmFyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dBY3RpdmVDYXRlZ29yeVNpZGViYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLl9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93TGlicmFyeUNhdGVnb3J5KGNhdGVnb3J5OiBDYXRlZ29yeSkge1xyXG4gICAgdGhpcy5vYmplY3RzID0gYXdhaXQgdGhpcy5tb2RlbHNTZXJ2aWNlLmdldEl0ZW1zRnJvbUNhdGVnb3J5KGNhdGVnb3J5LmlkKTtcclxuICAgIHRoaXMuY3VzdG9tT2JqZWN0cyA9IHRoaXMub2JqZWN0cy5maWx0ZXIob2JqZWN0ID0+IG9iamVjdC5pc0N1c3RvbSk7XHJcbiAgICB0aGlzLmxpYnJhcnlPYmplY3RzID0gdGhpcy5vYmplY3RzLmZpbHRlcihvYmplY3QgPT4gIW9iamVjdC5pc0N1c3RvbSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPSBjYXRlZ29yeTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMubGlicmFyeVNpZGViYXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVuYWJsZURpYWdyYW1Ub2dnbGUoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFncmFtVG9nZ2xlQXZhaWxhYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNob3dTZXR0aW5ncygpIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2V0dGluZ3NTaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRBbGxUb0NhcnQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlT2JqZWN0U25hcHBpbmcoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVBsYWNlbWVudFNuYXBwaW5nID0gIXRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlUGxhY2VtZW50U25hcHBpbmc7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVzID0gW1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWRnZSAmJiB0aGlzLnNlbGVjdGVkV2FsbCAmJiB0aGlzLnNlbGVjdGVkV2FsbFt0aGlzLnNlbGVjdGVkRWRnZV0sXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRXYWxsLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmxvb3IsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RcclxuICAgIF07XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlID0gc2VsZWN0YWJsZXNbMF07XHJcbiAgICBpZiAoc2VsZWN0YWJsZSkge1xyXG4gICAgICB0aGlzLl9tb2RlID0gVmlld01vZGUuUm9vbVBsYW4zRDtcclxuICAgICAgdGhpcy5zaG93UGx1Z2luLmVtaXQoc2VsZWN0YWJsZSk7XHJcbiAgICB9IGVsc2UgaWYgKCFzZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMuZG9uZS5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kRWRnZVdhbGxQbGFjZW1lbnQod2FsbCwgZWRnZSkge1xyXG4gICAgY29uc3QgZWRnZVBsYWNlbWVudHMgPSBbJ2Zyb250RWRnZScsICdiYWNrRWRnZSddO1xyXG4gICAgcmV0dXJuIGVkZ2VQbGFjZW1lbnRzLnJlZHVjZSgocGxhY2VtZW50LCBwKSA9PiB7XHJcbiAgICAgIGlmICh3YWxsW3BdID09PSBlZGdlKSB7XHJcbiAgICAgICAgcGxhY2VtZW50ID0gcDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGxhY2VtZW50O1xyXG4gICAgfSwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0V2FsbChzZWxlY3RlZFdhbGxFdmVudDogU2VsZWN0ZWRXYWxsRXZlbnQpIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsID0gc2VsZWN0ZWRXYWxsRXZlbnQud2FsbDtcclxuICAgIHRoaXMuY29udGV4dE1lbnVNb3VzZUV2ZW50ID0gc2VsZWN0ZWRXYWxsRXZlbnQuZXZlbnQ7XHJcbiAgICBpZiAoc2VsZWN0ZWRXYWxsRXZlbnQud2FsbCkge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRXYWxsRXZlbnQuZWRnZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFZGdlID0gdGhpcy5maW5kRWRnZVdhbGxQbGFjZW1lbnQoc2VsZWN0ZWRXYWxsRXZlbnQud2FsbCwgc2VsZWN0ZWRXYWxsRXZlbnQuZWRnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkpIHtcclxuICAgICAgICB0aGlzLnNob3dTZWxlY3RlZFdhbGxTaWRlYmFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1NlbGVjdGVkV2FsbFNpZGViYXIoKSB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZFdhbGxTaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93U2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyKCkge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEZsb29yKHNlbGVjdGVkRmxvb3JFdmVudDogU2VsZWN0ZWRGbG9vckV2ZW50KSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm9vbSA9IHNlbGVjdGVkRmxvb3JFdmVudC5yb29tO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZsb29yID0gc2VsZWN0ZWRGbG9vckV2ZW50LnJvb20uZmxvb3JQbGFuZTtcclxuICAgIHRoaXMuY29udGV4dE1lbnVNb3VzZUV2ZW50ID0gc2VsZWN0ZWRGbG9vckV2ZW50LmV2ZW50O1xyXG4gICAgaWYgKHNlbGVjdGVkRmxvb3JFdmVudC5yb29tKSB7XHJcbiAgICAgIGlmICh0aGlzLnZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRGbG9vclNpZGViYXIoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93U2VsZWN0ZWRGbG9vclNpZGViYXIoKSB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZEZsb29yU2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0Rmxvb3JUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX3Jvb21TZXJ2aWNlLnNldEZsb29yVGV4dHVyZSh0aGlzLnNlbGVjdGVkUm9vbSwgdGV4dHVyZSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ2Zsb29yVGV4dHVyZScsIHBhdGNoOiBmYWxzZX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEZsb29yQ29sb3IoY29sb3I6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fcm9vbVNlcnZpY2Uuc2V0Rmxvb3JDb2xvcih0aGlzLnNlbGVjdGVkUm9vbSwgY29sb3IpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdmbG9vckNvbG9yJywgcGF0Y2g6IGZhbHNlfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVXYWxsKHdhbGw6IFdhbGwpIHtcclxuICAgIHdhbGwucmVtb3ZlKCk7XHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnJlbW92ZVdhbGwod2FsbCk7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3JlbW92ZVdhbGwnfSk7XHJcbiAgfVxyXG5cclxuICBzZXRXYWxsTGVuZ3RoKHtsZW5ndGgsIGF0RW5kLCBlZGdlfTogeyBsZW5ndGg6IG51bWJlciwgYXRFbmQ6IGJvb2xlYW4sIGVkZ2U/OiBIYWxmRWRnZSB9KSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5zZWxlY3RlZFdhbGw7XHJcbiAgICBjb25zdCBvcmlnTGVuZ3RoID0gZWRnZSA/IGVkZ2UuaW50ZXJpb3JEaXN0YW5jZSgpIDogd2FsbC5sZW5ndGg7XHJcbiAgICBjb25zdCBzdGFydCA9IGF0RW5kID8gd2FsbC5nZXRTdGFydCgpIDogd2FsbC5nZXRFbmQoKTtcclxuICAgIGNvbnN0IGVuZCA9IGF0RW5kID8gd2FsbC5nZXRFbmQoKSA6IHdhbGwuZ2V0U3RhcnQoKTtcclxuICAgIGNvbnN0IGR4ID0gZW5kLnggLSBzdGFydC54O1xyXG4gICAgY29uc3QgZHkgPSBlbmQueSAtIHN0YXJ0Lnk7XHJcbiAgICBjb25zdCBrID0gbGVuZ3RoIC8gb3JpZ0xlbmd0aDtcclxuICAgIGVuZC5tb3ZlKGsgKiBkeCArIHN0YXJ0LngsIGsgKiBkeSArIHN0YXJ0LnkpO1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS51cGRhdGUoKTtcclxuICAgIC8vIHRoaXMuX3Jvb21TZXJ2aWNlLnVwZGF0ZUZsb29yc0FuZEVkZ2VzKCkudGhlbigoKSA9PiB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYU1vdmVtZW50Q2hhbmdlZC5uZXh0KCkpO1xyXG4gICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQubmV4dCgpO1xyXG4gICAgdGhpcy5fbGlnaHRzU2VydmljZS51cGRhdGVBbGxPZmZzZXRzKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3dhbGxMZW5ndGgnfSk7XHJcblxyXG4gICAgaWYgKHRoaXMud2FsbExlbmd0aEluZm9EaWFsb2dFbmFibGVkICYmIHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd0RldGFpbGVkV2FsbE1lYXN1cmVtZW50cykpIHtcclxuICAgICAgaWYgKGVkZ2UgJiYgTWF0aC5yb3VuZChlZGdlLmludGVyaW9yRGlzdGFuY2UoKSkgIT09IGxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1dhbGxMZW5ndGhJbmZvRGlhbG9nKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dXYWxsTGVuZ3RoSW5mb0RpYWxvZygpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZy5vcGVuKEluZm9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRpdGxlOiAnSW5mbycsXHJcbiAgICAgICAgbWVzc2FnZTpcclxuICAgICAgICAgIGBSZXN1bHRpbmcgbGVuZ3RoIG9mIHdhbGwgc2xpZ2h0bHkgZGlmZmVycyBmcm9tIGxlbmd0aCB5b3Ugc3BlY2lmaWVkLlxyXG4gICAgICAgICAgVG8gZnVydGhlciByZWZpbmUgbGVuZ3RoIG9mIHRoZSB3YWxsLCB1c2UgMkQgZmxvb3JwbGFuIGJsdWVwcmludC5gXHJcbiAgICAgIH0sXHJcbiAgICAgIG1heFdpZHRoOiAnNTAwcHgnXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3N1YnMucHVzaChkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoZG9udFNob3dBZ2FpbiA9PiB7XHJcbiAgICAgIHRoaXMud2FsbExlbmd0aEluZm9EaWFsb2dFbmFibGVkID0gIWRvbnRTaG93QWdhaW47XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBzZXRXYWxsSGVpZ2h0KGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbC5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS51cGRhdGVDZWlsaW5ncygpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFdhbGwuZmlyZVJlZHJhdygpO1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS51cGRhdGUoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnd2FsbEhlaWdodCd9KTtcclxuICB9XHJcblxyXG4gIHNldFdhbGxUaGlja25lc3ModGhpY2tuZXNzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsLnRoaWNrbmVzcyA9IHRoaWNrbmVzcztcclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UudXBkYXRlKCk7XHJcbiAgICAvLyB0aGlzLl9yb29tU2VydmljZS51cGRhdGVGbG9vcnNBbmRFZGdlcygpLnRoZW4oKCkgPT4gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQubmV4dCgpKTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLm5leHQoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsLmZpcmVSZWRyYXcoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnd2FsbFRoaWNrbmVzcyd9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRXYWxsVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkRWRnZXMuZm9yRWFjaChhc3luYyAoZWRnZSkgPT4gYXdhaXQgZWRnZS5zZXRUZXh0dXJlKHRleHR1cmUpKTtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5zZWxlY3RlZEVkZ2VzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNlbGVjdGVkRWRnZXNbaV0uc2V0VGV4dHVyZSh0ZXh0dXJlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3dhbGxUZXh0dXJlJywgcGF0Y2g6IGZhbHNlfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0V2FsbENvbG9yKGNvbG9yOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFZGdlcy5mb3JFYWNoKGFzeW5jIChlZGdlKSA9PiBhd2FpdCBlZGdlLnNldENvbG9yKGNvbG9yKSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICd3YWxsQ29sb3InLCBwYXRjaDogZmFsc2V9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdENvcm5lcihjb3JuZXI6IENvcm5lcikge1xyXG4gICAgdGhpcy5mbG9vcnBsYW5uZXIuc2VsZWN0Q29ybmVyKGNvcm5lcik7XHJcbiAgfVxyXG5cclxuICBnZXRNaW5XYWxsSGVpZ2h0KHdhbGw6IFdhbGwpOiBudW1iZXIge1xyXG4gICAgaWYgKCF3YWxsKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBjb25zdCBjYXN0ZWRXYWxsOiBhbnkgPSB3YWxsO1xyXG5cclxuICAgIGlmIChjYXN0ZWRXYWxsLml0ZW1zKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjYXN0ZWRXYWxsLml0ZW1zKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gTWF0aC5tYXgocmVzdWx0LCBpdGVtLmhhbGZTaXplLnkgKyBpdGVtLnBvc2l0aW9uLnkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhc3RlZFdhbGwub25JdGVtcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2FzdGVkV2FsbC5vbkl0ZW1zKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gTWF0aC5tYXgocmVzdWx0LCBpdGVtLmhhbGZTaXplLnkgKyBpdGVtLnBvc2l0aW9uLnkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE1hdGguY2VpbChyZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluR2xvYmFsV2FsbEhlaWdodCgpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgd2FsbHMgPSB0aGlzLl9yb29tU2VydmljZS53YWxscztcclxuICAgIGlmICghd2FsbHMpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgLi4ud2FsbHMubWFwKHRoaXMuZ2V0TWluV2FsbEhlaWdodCkpO1xyXG4gIH1cclxuXHJcbiAgd2FsbHNIZWlnaHRVcGRhdGVkKGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS51cGRhdGVXYWxsSGVpZ2h0cyhoZWlnaHQpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICd3YWxsSGVpZ2h0J30pO1xyXG4gIH1cclxuXHJcbiAgc2V0RHJhZ2dlZChvYmplY3Q6IE1vZGVsSW50ZXJmYWNlKSB7XHJcbiAgICBjb25zdCBkcmFnZ2VkRGF0YTogRHJhZ2dlZERhdGEgPSB7XHJcbiAgICAgIG5hbWU6IG9iamVjdC5uYW1lLFxyXG4gICAgICB0eXBlOiArb2JqZWN0LnR5cGUsXHJcbiAgICAgIGlPbmU6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXREcmFnLCBkcmFnZ2VkRGF0YSk7XHJcbiAgfVxyXG5cclxuICByZWxlYXNlRHJhZ2dlZCgpIHtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuRXhpdERyYWcpO1xyXG4gIH1cclxuXHJcbiAgbG9hZEZsb29yUGxhbihkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5sb2FkRmxvb3JwbGFuKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0QVJTZXNzaW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgY29uc3QgYXJPYmplY3QgPSB0aGlzLnNlbGVjdGVkT2JqZWN0LmNsb25lVmlzaWJsZSgpO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYXJNb2RlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdChhck9iamVjdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkVG9DYXJ0KG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAob2JqZWN0Lm1ldGFkYXRhKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmluaXRDb25uZWN0b3IoXHJcbiAgICAgICAgb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MgPyBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncyA6IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLFxyXG4gICAgICAgIG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzID8gb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MubmFtZSA6IHVuZGVmaW5lZCxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncyAmJiBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZUlkID8gb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2VJZCA6IG51bGxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yU2VydmljZS5hZGRUb0NhcnQoXHJcbiAgICAgICAgK29iamVjdC5tZXRhZGF0YS5nb29kSWQsIG9iamVjdC5tZXRhZGF0YS5nb29kVHlwZSwgMSwgK29iamVjdC5tZXRhZGF0YS5pdGVtSWQsICEhKG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzICYmIG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLmV4dGVybmFsU291cmNlSWQpKTtcclxuICAgICAgaWYgKG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxTb3VyY2U6IEV4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZSA9IHtcclxuICAgICAgICAgIGFydGljbGU6IGpzb24sXHJcbiAgICAgICAgICBxdWFudGl0eTogMSxcclxuICAgICAgICAgIGNhdGFsb2dEZWZpbml0aW9uOiBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5jYXRhbG9nRGVmaW5pdGlvbixcclxuICAgICAgICAgIGV4dGVybmFsU291cmNlOiB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5nZXRFeHRlcm5hbFNvdXJjZUZyb21JZChvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZUlkKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmFkZEV4dGVybmFsU291cmNlVG9DYXJ0Lm5leHQoZXh0ZXJuYWxTb3VyY2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hZGRUb0NhcnQubmV4dCh7YXJ0aWNsZToganNvbiwgcXVhbnRpdHk6IDF9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZEl0ZW1zKGRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW1Nb2RlbCBvZiBkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBuZXcgVmVjdG9yMyhpdGVtTW9kZWwueHBvcywgaXRlbU1vZGVsLnlwb3MsIGl0ZW1Nb2RlbC56cG9zKTtcclxuICAgICAgICBjb25zdCBvdmVycmlkZXMgPSB7XHJcbiAgICAgICAgICB3aWR0aDogaXRlbU1vZGVsLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBpdGVtTW9kZWwuaGVpZ2h0LFxyXG4gICAgICAgICAgdGV4dHVyZTogaXRlbU1vZGVsLnRleHR1cmUsXHJcbiAgICAgICAgICByb3RhdGlvbjogbmV3IEV1bGVyKDAsIGl0ZW1Nb2RlbC5yb3RhdGlvbiwgMCksXHJcbiAgICAgICAgICBvcGVuaW5nOiBpdGVtTW9kZWwub3BlbmluZyxcclxuICAgICAgICAgIGZyYW1lQ29sb3I6IGl0ZW1Nb2RlbC5mcmFtZUNvbG9yLFxyXG4gICAgICAgICAgZG9vckNvbG9yOiBpdGVtTW9kZWwuZG9vckNvbG9yLFxyXG4gICAgICAgICAgd2luZG93Q29sb3I6IGl0ZW1Nb2RlbC53aW5kb3dDb2xvcixcclxuICAgICAgICAgIGxvY2tlZDogaXRlbU1vZGVsLmxvY2tlZCxcclxuICAgICAgICAgIGlzR2xhc3M6IGl0ZW1Nb2RlbC5pc0dsYXNzXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBtb2RlbERhdGEgPSBhd2FpdCB0aGlzLm1vZGVsc1NlcnZpY2UuZ2V0KGl0ZW1Nb2RlbC5pdGVtX25hbWUsIG92ZXJyaWRlcyk7XHJcbiAgICAgICAgaWYgKG1vZGVsRGF0YSkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEpzb25JdGVtKG1vZGVsRGF0YSwgcG9zaXRpb24pO1xyXG4gICAgICAgICAgaWYgKGl0ZW1Nb2RlbC5pdGVtR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVhdHRhY2hUb0l0ZW1Hcm91cChpdGVtTW9kZWwuaXRlbUdyb3VwLCBpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgV2FsbEl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvc2VzdFdhbGxFZGdlID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Q2xvc2VzdFdhbGxFZGdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnopO1xyXG4gICAgICAgICAgICBpdGVtLnBsYWNlT25FZGdlKGNsb3Nlc3RXYWxsRWRnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihgVW5hYmxlIHRvIGdldCBtb2RlbCBmb3IgJHtpdGVtTW9kZWwuaXRlbV9uYW1lfSBmcm9tIE1vZGVsc1NlcnZpY2VgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRPYmplY3RzKHtpdGVtcywgZmxvb3JwbGFufSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLmxvYWRJdGVtcyhpdGVtcyksXHJcbiAgICAgIHRoaXMubG9hZEZsb29yUGxhbihmbG9vcnBsYW4pLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weVNjZW5lSW5zdGFuY2Uoc2F2ZUFzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiByZXNvbHZlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2JqZWN0cygpIHtcclxuICAgIGNvbnN0IGl0ZW1zVG9TYXZlID0gdGhpcy5faXRlbVNlcnZpY2UuZ2V0Tm9uRnVybml0dXJlKCkubWFwKGkgPT4gdGhpcy5faXRlbVNlcmlhbGl6YXRpb25TZXJ2aWNlLml0ZW1Ub09iamVjdChpKSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmbG9vcnBsYW46IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uuc2F2ZUZsb29ycGxhbigpLFxyXG4gICAgICBpdGVtczogaXRlbXNUb1NhdmVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBoYXNDdXN0b21PYmplY3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tT2JqZWN0cy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT2JqZWN0TGlicmFyeUNsaWNrKG9iamVjdDogTW9kZWxJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgIHRoaXMucmVsZWFzZURyYWdnZWQoKTtcclxuICAgIHRoaXMuc2V0RHJhZ2dlZChvYmplY3QpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIHt4OiAwLCB5OiAwfSk7XHJcbiAgICBpZiAob2JqZWN0Lm5hbWUgPT09ICdXYWxrdGhyb3VnaCBDYW1lcmEnKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkdyb3VwQ2xpY2soKSB7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkdyb3VwT2JqZWN0cyk7XHJcbiAgICB0aGlzLnVzZXJJc0dyb3VwaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEdyb3VwU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySXNHcm91cGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5DYW5jZWxHcm91cE9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBvblVuR3JvdXBDbGljaygpIHtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuVW5ncm91cE9iamVjdHMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlQ29udGV4dE1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0R3JvdXBTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlQ29udGV4dE1lbnUoKTtcclxuICAgIHRoaXMudXNlcklzR3JvdXBpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TdGFydEdyb3VwT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kQ29udmVyc2lvblRvVGFnTWFuYWdlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFydGljbGU6IEl0ZW0gfCBJdGVtR3JvdXAgPSB0aGlzLnNlbGVjdGVkT2JqZWN0O1xyXG4gICAgbGV0IGNvbnZlcnNpb25BY3Rpb246IHN0cmluZztcclxuICAgIGlmIChhcnRpY2xlIGluc3RhbmNlb2YgSXRlbSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YS5jb252ZXJzaW9uR1RNU2VuZCkge1xyXG4gICAgICAgIGNvbnZlcnNpb25BY3Rpb24gPSAncmVtb3ZlJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hZGRTZWxlY3RlZENsYXNzID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udmVyc2lvbkFjdGlvbiA9ICdhZGQnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuY29udmVyc2lvbkdUTVNlbmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWRDbGFzcyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kUHJvZHVjdENvbnZlcnNpb24oYXJ0aWNsZS5tZXRhZGF0YSwgY29udmVyc2lvbkFjdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYXNTZXR0aW5ncyhpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlzQ3VzdG9tU2hhcGU6IGJvb2xlYW4gPSBpdGVtLm1ldGFkYXRhICYmIChcclxuICAgICAgaXNDdXN0b21TaGFwZVR5cGUoaXRlbS5tZXRhZGF0YS5pdGVtVHlwZSkgfHxcclxuICAgICAgaXNDdXN0b21TaGFwZVdhbGxUeXBlKGl0ZW0ubWV0YWRhdGEuaXRlbVR5cGUpIHx8XHJcbiAgICAgIGlzQ3VzdG9tQ3lsaW5kZXJUeXBlKGl0ZW0ubWV0YWRhdGEuaXRlbVR5cGUpIHx8XHJcbiAgICAgIGlzQ3VzdG9tQ3lsaW5kZXJXYWxsVHlwZShpdGVtLm1ldGFkYXRhLml0ZW1UeXBlKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGhhc0NvbmZpZ3VyYWJsZVRleHR1cmU6IGJvb2xlYW4gPSAhIWl0ZW0gJiYgISEoaXRlbS5tZXRhZGF0YSAmJiBpdGVtLm1ldGFkYXRhLnRleHR1cmUpO1xyXG4gICAgY29uc3QgaGFzT3BlbmluZ0F0dHJpYnV0ZTogYm9vbGVhbiA9ICEhaXRlbSAmJiAhIWl0ZW0ub3BlbmluZztcclxuICAgIGNvbnN0IGlzU2NhbGFibGU6IGJvb2xlYW4gPSAhIWl0ZW0gJiYgISEoaXRlbS5tZXRhZGF0YSAmJiBpdGVtLm1ldGFkYXRhLnNjYWxhYmxlKTtcclxuXHJcbiAgICByZXR1cm4gaXNDdXN0b21TaGFwZSB8fCBoYXNDb25maWd1cmFibGVUZXh0dXJlIHx8IGhhc09wZW5pbmdBdHRyaWJ1dGUgfHwgaXNTY2FsYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzQ29uZmlndXJhYmxlKGl0ZW06IEl0ZW0gfCBJdGVtR3JvdXApOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhKGl0ZW0gaW5zdGFuY2VvZiBJdGVtR3JvdXApICYmICEhaXRlbSAmJiAhIWl0ZW0ubWV0YWRhdGEgJiYgISFpdGVtLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyICYmIGl0ZW0uY29uZmlndXJhYmxlICYmXHJcbiAgICAgICFpdGVtLmFsbHdheXNDb25maWd1cmVNb2RlICYmICFpdGVtLm9ic29sZXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDb252ZXJzaW9uSXRlbShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXRlbS5tZXRhZGF0YS5pb25lKSB7XHJcbiAgICAgIHJldHVybiBpdGVtLm1ldGFkYXRhLmlvbmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0RlbGV0YWJsZShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIShpdGVtIGluc3RhbmNlb2YgUm9vbSB8fCBpdGVtIGluc3RhbmNlb2YgV2FsbCkgJiZcclxuICAgICAgKChpdGVtIGluc3RhbmNlb2YgSXRlbSAmJiBpdGVtLmNhbkRlbGV0ZSkgfHwgIShpdGVtIGluc3RhbmNlb2YgSXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDb3B5YWJsZShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpc05vdFJvb21PcldhbGxPckRlY29yYXRpb246IGJvb2xlYW4gPSAhKGl0ZW0gaW5zdGFuY2VvZiBSb29tIHx8IGl0ZW0gaW5zdGFuY2VvZiBXYWxsIHx8IGl0ZW0gaW5zdGFuY2VvZiBGbG9vclBsYW5lSXRlbSk7XHJcbiAgICBjb25zdCBpc0NvcHlhYmxlSXRlbTogYm9vbGVhbiA9ICgoaXRlbSBpbnN0YW5jZW9mIEl0ZW0gJiYgaXRlbS5jYW5Db3B5ICYmICFpdGVtLm9ic29sZXRlKSB8fCAhKGl0ZW0gaW5zdGFuY2VvZiBJdGVtKSkgJiZcclxuICAgICAgIXRoaXMuX2l0ZW1TZXJ2aWNlLmdldFdhbGt0aHJvdWdoQ2FtZXJhKCk7XHJcbiAgICByZXR1cm4gaXNOb3RSb29tT3JXYWxsT3JEZWNvcmF0aW9uICYmIGlzQ29weWFibGVJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhdHRhY2hUb0l0ZW1Hcm91cChpdGVtR3JvdXAsIG9iamVjdCkge1xyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShvYmplY3QpO1xyXG4gICAgaXRlbUdyb3VwLmFkZEl0ZW0ob2JqZWN0KTtcclxuICAgIGl0ZW1Hcm91cC5jcmVhdGVCb3VuZGFyeUJveCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgY2FzZSBLZXkuQzpcclxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlICE9PSBWaWV3TW9kZS5GbG9vclBsYW4yRCAmJiAhdGhpcy5fdGV4dElucHV0QWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TaG93UHJvZHVjdENhdGFsb2cpO1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEtleS5BOlxyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlICE9PSBudWxsICYmIHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlID09PSB0aGlzLmNhdGVnb3JpZXNTaWRlYmFyKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgICAgICAgIC8vICAgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgPSBudWxsO1xyXG4gICAgICAgICAgLy8gfSBlbHNlXHJcbiAgICAgICAgICBpZiAodGhpcy5fbW9kZSAhPT0gVmlld01vZGUuRmxvb3JQbGFuMkQgJiYgIXRoaXMuX2NhdGFsb2dJc1Nob3duICYmICF0aGlzLl90ZXh0SW5wdXRBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dMaWJyYXJ5Q2F0ZWdvcmllcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBLZXkuVjpcclxuICAgICAgICAgIGlmICghdGhpcy5fY2F0YWxvZ0lzU2hvd24gJiYgIXRoaXMuX3RleHRJbnB1dEFjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlID09PSBWaWV3TW9kZS5Sb29tUGxhbjNEKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLkZsb29yUGxhbjJELCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuUm9vbVBsYW4zRCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgS2V5LkVzYzpcclxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlICE9PSBWaWV3TW9kZS5GbG9vclBsYW4yRCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90ZXh0SW5wdXRBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpbnB1dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaW5wdXRzWzBdLnR5cGUgPT09ICd0ZXh0JyAmJiBpbnB1dHNbaV0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldFRocmVlZEF2YWlsYWJsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudGhyZWVkSWNvbkF2YWlsYWJsZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1782
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS1wbGFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcm9vbS1wbGFubmVyL3Jvb20tcGxhbm5lci9yb29tLXBsYW5uZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFckMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHM0QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsVUFBVSxFQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFtQixVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBb0J4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFJakUsT0FBTyxFQUFD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LE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0osY0FBYztzQkFBMUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ08sbUJBQW1CO3NCQUFwRSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDRixlQUFlO3NCQUE1RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDTSxtQkFBbUI7c0JBQXBFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUUxQixVQUFVO3NCQUEvQixXQUFXO3VCQUFDLE9BQU87Z0JBQ1gsU0FBUztzQkFBakIsS0FBSztnQkFFSSxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQW9GQSxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0V1bGVyLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7UGx1Z2luSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9wbHVnaW4taW50ZXJmYWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5uZXJDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL2Zsb29ycGxhbm5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtJY29uTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2ljb24tbmFtZS5lbnVtJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL3ZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IHtUaHJlZWRNb2RlbH0gZnJvbSAnLi4vLi4vY29yZTNkL21vZGVsL3RocmVlZC1tb2RlbCc7XHJcbmltcG9ydCB7Q2F0ZWdvcnl9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY2F0ZWdvcnknO1xyXG5pbXBvcnQge1xyXG4gIGlzQ3VzdG9tQ3lsaW5kZXJUeXBlLFxyXG4gIGlzQ3VzdG9tQ3lsaW5kZXJXYWxsVHlwZSxcclxuICBpc0N1c3RvbVNoYXBlVHlwZSxcclxuICBpc0N1c3RvbVNoYXBlV2FsbFR5cGUsXHJcbiAgaXNGdXJuaXR1cmVUeXBlLFxyXG4gIGlzV2FsbFR5cGVcclxufSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvZmFjdG9yeSc7XHJcbmltcG9ydCB7Q29ybmVyLCBIYWxmRWRnZSwgSW5XYWxsSXRlbSwgUm9vbSwgV2FsbCwgV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtR3JvdXB9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7TW9kZWxzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvbW9kZWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvcHJlc2V0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjcmVlblNpemVBbmFseXNpc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zY3JlZW4tc2l6ZS1hbmFseXNpcy9zY3JlZW4tc2l6ZS1hbmFseXNpcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5TZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0h1ZFNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2h1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtSb29tU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvaXRlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtU2VyaWFsaXphdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9pdGVtLXNlcmlhbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7TGlnaHRzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvbGlnaHRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbktleX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1NlbGVjdGVkV2FsbEV2ZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC13YWxsLWV2ZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7U2VsZWN0ZWRGbG9vckV2ZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC1mbG9vci1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NjcmVlblNpemVJbmZvfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2NyZWVuLXNpemUtYW5hbHlzaXMvc2NyZWVuLXNpemUtaW5mbyc7XHJcbmltcG9ydCB7Q3VzdG9tU2hhcGVGbG9vckl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tc2hhcGUtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tU2hhcGVXYWxsSXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1zaGFwZS13YWxsLWl0ZW0nO1xyXG5pbXBvcnQge0N1c3RvbUN5bGluZGVyRmxvb3JJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLWN5bGluZGVyLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0N1c3RvbUN5bGluZGVyV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tY3lsaW5kZXItd2FsbC1pdGVtJztcclxuaW1wb3J0IHtEcmFnZ2VkRGF0YX0gZnJvbSAnLi4vLi4vY29yZTNkL2ludGVyZmFjZS9kcmFnZ2VkLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtUZXh0dXJlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUnO1xyXG5pbXBvcnQge0luZm9EaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbmZvLWRpYWxvZy9pbmZvLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge01vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9jb3JlM2QvaW50ZXJmYWNlL21vZGVsLmludGVyZmFjZSc7XHJcbmltcG9ydCB7S2V5fSBmcm9tICcuLi9jb25zdC9rZXknO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGxhbmUtaXRlbSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Blcm1hbmVudFN0b3JlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3Blcm1hbmVudC1zdG9yZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDdXN0b21CdXR0b259IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY3VzdG9tLWJ1dHRvbic7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2ludGVyZmFjZS9leHRlcm5hbC1zb3VyY2UtYXJ0aWNsZS1hZGQuaW50ZXJmYWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtcm9vbS1wbGFubmVyJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cIlJvb21QbGFubmVyXCI+XHJcbiAgICAgIDxmbG9vci1wbGFubmVyXHJcbiAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgIChzZWxlY3RlZFdhbGxDaGFuZ2UpPVwic2VsZWN0V2FsbCgkZXZlbnQpXCI+PC9mbG9vci1wbGFubmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHJwLWNvbnRleHQtbWVudVxyXG4gICAgICAqbmdJZj1cIiF2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSAmJiBzaG93Q29udGV4dE1lbnUgJiYgc2VsZWN0ZWRXYWxsXCJcclxuICAgICAgW29wZW5Nb3VzZUV2ZW50XT1cImNvbnRleHRNZW51TW91c2VFdmVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcCBcIj5cclxuICAgICAgICA8ZGl2IChjbGljayk9XCJzaG93U2VsZWN0ZWRXYWxsU2lkZWJhcigpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLldhbmRNYWdpY1NwYXJrbGVzKVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTkZJR1VSRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3JwLWNvbnRleHQtbWVudT5cclxuXHJcbiAgICA8cnAtY29udGV4dC1tZW51XHJcbiAgICAgICpuZ0lmPVwiIXZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpICYmIHNob3dDb250ZXh0TWVudSAmJiBzZWxlY3RlZEZsb29yXCJcclxuICAgICAgW29wZW5Nb3VzZUV2ZW50XT1cImNvbnRleHRNZW51TW91c2VFdmVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcFwiPlxyXG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNob3dTZWxlY3RlZEZsb29yU2lkZWJhcigpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtIFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5XYW5kTWFnaWNTcGFya2xlcylcIj48L2NvLWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT05GSUdVUkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9ycC1jb250ZXh0LW1lbnU+XHJcbiAgICA8cnAtaXRlbS1jb250ZXh0LW1lbnVcclxuICAgICAgKm5nSWY9XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgJiYgc2hvd0NvbnRleHRNZW51ICYmICFzaG93R3JvdXBNZW51XCJcclxuICAgICAgW2l0ZW1dPVwic2VsZWN0ZWRPYmplY3RcIlxyXG4gICAgICAoZGVsZXRlUHJlc3NlZCk9XCJoYW5kbGVEZWxldGVPYmplY3QoKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1jbG9zZVwiIChjbGljayk9XCJjbG9zZUNvbnRleHRNZW51KClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xvc2UtaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uWG1hcmtMaWdodClcIj48L2NvLWljb24+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLnNlbGVjdGVkT2JqZWN0XCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1oZWFkZXJcIj5cclxuICAgICAgICAgIDxwICpuZ0lmPVwidGhpcy5zZWxlY3RlZE9iamVjdC5uYW1lXCI+e3sgdGhpcy5zZWxlY3RlZE9iamVjdC5uYW1lIH19PC9wPlxyXG4gICAgICAgICAgPHAgKm5nSWY9XCIhdGhpcy5zZWxlY3RlZE9iamVjdC5uYW1lXCI+e3sgJ1NFTEVDVEVEX09CSkVDVCcgfCBsb2NhbGl6ZSB9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NldHRpbmdzQnV0dG9uXCIgKGNsaWNrKT1cInNob3dTZWxlY3RlZE9iamVjdFNpZGViYXIoKVwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0gXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLldhbmRNYWdpY1NwYXJrbGVzKVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTkZJR1VSRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NvbmZpZ3VyYXRpb25CdXR0b25cIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGN1c3RvbUJ1dHRvbiBvZiBtb2RlbHNTZXJ2aWNlLmN1c3RvbUJ1dHRvbnNcIiAoY2xpY2spPVwiaGFuZGxlQ29uZmlndXJhdGlvbkJ1dHRvbkNsaWNrKGN1c3RvbUJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0gXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uV2FuZE1hZ2ljU3BhcmtsZXMpXCI+PC9jby1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT05GSUdVUkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvcHlCdXR0b25cIiAoY2xpY2spPVwiY29weVNlbGVjdGVkT2JqZWN0KClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uQ29weUxpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPUFknIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVCdXR0b25cIiAoY2xpY2spPVwicmVtb3ZlU2VsZWN0ZWRPYmplY3QoKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5UcmFzaENhbkxpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ1JFTU9WRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJzdGFydEdyb3VwU2VsZWN0aW9uKClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uTGlua0xpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0dST1VQJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvbnZlcnNpb25CdXR0b24gJiYgc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNob3dDb252ZXJzaW9uQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAoY2xpY2spPVwic2VuZENvbnZlcnNpb25Ub1RhZ01hbmFnZXIoKVwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwiYWRkU2VsZWN0ZWRDbGFzcyA/ICdjb252ZXJzaW9uLWJ1dHRvbi1zZWxlY3RlZCcgOiAnJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmFkZF9zaG9wcGluZ19jYXJ0PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTlZFUlNJT04nIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaWNvbi1zZWxlY3RlZFwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QVJCdXR0b25cIiAoY2xpY2spPVwic3RhcnRBUlNlc3Npb24oKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPndlZWtlbmQ8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQVInIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbi1lbGV2YXRpb25cclxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRPYmplY3QgJiYgc2VsZWN0ZWRPYmplY3QuZWxldmF0aW9uQWRqdXN0YWJsZVwiXHJcbiAgICAgICAgICBbaXRlbV09XCJzZWxlY3RlZE9iamVjdFwiPlxyXG4gICAgICAgIDwvYnV0dG9uLWVsZXZhdGlvbj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2FsYWJsZU9iamVjdCAmJiB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zaG93QWRkVG9DYXJ0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlciBjb250ZXh0LW1lbnVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImFkZFRvQ2FydChzZWxlY3RlZE9iamVjdClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0gYWRkLXRvLWNhcnQtYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiBbc3ZnSWNvbl09XCInY2FydC1zaG9wcGluZy1yZWd1bGFyJ1wiPjwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0FERF9UT19DQVJUJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9ycC1pdGVtLWNvbnRleHQtbWVudT5cclxuXHJcbiAgICA8cnAtaXRlbS1jb250ZXh0LW1lbnUgKm5nSWY9XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgJiYgc2hvd0NvbnRleHRNZW51ICYmIHNob3dHcm91cE1lbnUgJiYgIXVzZXJJc0dyb3VwaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJzZWxlY3RlZE9iamVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZVByZXNzZWQpPVwiaGFuZGxlRGVsZXRlT2JqZWN0KClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LXdyYXBcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5MaW5rTGlnaHQpXCI+PC9jby1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnR1JPVVAnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJvblVuR3JvdXBDbGljaygpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLkxpbmtTbGFzaExpZ2h0KVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ1VOR1JPVVAnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJyZW1vdmVTZWxlY3RlZE9iamVjdCgpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLlRyYXNoQ2FuTGlnaHQpXCI+PC9jby1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnUkVNT1ZFJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93TG9ja0J1dHRvbiAmJiBzZWxlY3RlZE9iamVjdCAmJiBzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnNcIiAoY2xpY2spPVwidG9nZ2xlTG9ja1NlbGVjdGVkT2JqZWN0KClcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIiBtYXRUb29sdGlwPVwie3sgKHNlbGVjdGVkT2JqZWN0LmxvY2tlZCA/ICdVTkxPQ0snIDogJ0xPQ0snKSB8IGxvY2FsaXplIH19XCI+XHJcbiAgICAgICAgICAgIDxjby1pY29uICpuZ0lmPVwic2VsZWN0ZWRPYmplY3QubG9ja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3RleHRDb250ZW50XT1cInNlbGVjdGVkT2JqZWN0LmxvY2tlZCA/ICdsb2NrJyA6ICdsb2NrX29wZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5Mb2NrTGlnaHQpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICA8Y28taWNvbiAqbmdJZj1cIiFzZWxlY3RlZE9iamVjdC5sb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbdGV4dENvbnRlbnRdPVwic2VsZWN0ZWRPYmplY3QubG9ja2VkID8gJ2xvY2snIDogJ2xvY2tfb3BlbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLkxvY2tPcGVuTGlnaHQpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IChzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnVU5MT0NLJyA6ICdMT0NLJykgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3JwLWl0ZW0tY29udGV4dC1tZW51PlxyXG4gICAgPHJwLXJpZ2h0LWNvbnRleHQtbWVudVxyXG4gICAgICAqbmdJZj1cIiF2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSAmJiBzaG93Q29udGV4dE1lbnUgJiYgIXNob3dHcm91cE1lbnVcIlxyXG4gICAgICBbaXRlbV09XCJzZWxlY3RlZE9iamVjdFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtcmlnaHQtY29udGV4dC1tZW51LXdyYXBcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xvY2tCdXR0b24gJiYgc2VsZWN0ZWRPYmplY3RcIiAoY2xpY2spPVwidG9nZ2xlTG9ja1NlbGVjdGVkT2JqZWN0KClcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJycC1yaWdodC1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCIgbWF0VG9vbHRpcD1cInt7IChzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnVU5MT0NLJyA6ICdMT0NLJykgfCBsb2NhbGl6ZSB9fVwiPlxyXG4gICAgICAgICAgICA8Y28taWNvbiAqbmdJZj1cInNlbGVjdGVkT2JqZWN0LmxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnbG9jaycgOiAnbG9ja19vcGVuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uTG9ja0xpZ2h0KVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgPGNvLWljb24gKm5nSWY9XCIhc2VsZWN0ZWRPYmplY3QubG9ja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3RleHRDb250ZW50XT1cInNlbGVjdGVkT2JqZWN0LmxvY2tlZCA/ICdsb2NrJyA6ICdsb2NrX29wZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbi5Mb2NrT3BlbkxpZ2h0KVwiPjwvY28taWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvbmZpZ3VyYXRpb25CdXR0b25cIiAoY2xpY2spPVwic2hvd1NlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcigpXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwicnAtcmlnaHQtY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiIG1hdFRvb2x0aXA9XCJ7eydTRVRUSU5HUycgfCBsb2NhbGl6ZX19XCI+XHJcbiAgICAgICAgICAgIDxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uU2V0dGluZ3MpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcnAtcmlnaHQtY29udGV4dC1tZW51PlxyXG4gICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbkxpYnJhcnk+XHJcbiAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICAqbmdJZj1cIiFwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCB2aWV3TW9kZVNlcnZpY2UuaXNXYWxrVGhyb3VnaFZpZXdBY3RpdmUoKVwiXHJcbiAgICAgICAgbWF0SWNvbj1cImhvdXNlXCJcclxuICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5BcmNoaXRlY3R1cmUgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAob25DbGljayk9XCJzaG93TGlicmFyeUNhdGVnb3JpZXMoKVwiXHJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhckljb25BY2Nlc3NvaXJlcz5cclxuICAgICAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCB2aWV3TW9kZVNlcnZpY2UuaXNXYWxrVGhyb3VnaFZpZXdBY3RpdmUoKVwiXHJcbiAgICAgICAgbWF0SWNvbj1cImZsb3dlclwiXHJcbiAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuQWNjZXNzb3JpZXMgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAob25DbGljayk9XCJzaG93QWNjZXNzb2lyZUNhdGVnb3JpZXMoKVwiXHJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhckljb24yZFZpZXc+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgICAgICpuZ0lmPVwiIXBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgbWF0SWNvbj1cImRyYXdfc3F1YXJlXCJcclxuICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5Ud29kRmxvb3JwbGFuIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cInZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpIHx8ICFkZXNrdG9wU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgKG9uQ2xpY2spPVwidXBkYXRlTW9kZSh2aWV3TW9kZXMuRmxvb3JQbGFuMkQsIHRydWUpXCJcclxuICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICN0b29sYmFyU2hvd0RpYWdyYW0+XHJcbiAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICAqbmdJZj1cImRpYWdyYW1Ub2dnbGVBdmFpbGFibGUgJiYgdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgIG1hdEljb249XCJpbWFnZV9zbGFzaF9yZWd1bGFyXCJcclxuICAgICAgICB0b29sdGlwPVwiJ1RvZ2dsZSBhY2h0ZXJncm9uZCdcIlxyXG4gICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZURpYWdyYW0oKVwiXHJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhckljb24zZFZpZXc+XHJcbiAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICBtYXRJY29uPVwiY3ViZVwiXHJcbiAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuVGhyZWVkUm9vbXBsYW4gfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwidmlld01vZGVTZXJ2aWNlLmlzM2RWaWV3QWN0aXZlKCkgfHwgIXRocmVlZEljb25BdmFpbGFibGVcIlxyXG4gICAgICAgIChvbkNsaWNrKT1cInVwZGF0ZU1vZGUodmlld01vZGVzLlJvb21QbGFuM0QsIHRydWUpXCJcclxuICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPHJwLXpvb20tY29udHJvbHNcclxuICAgICAgW3Zpc2libGVdPVwidmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKClcIlxyXG4gICAgICAob25ab29tSW4pPVwiem9vbUluKClcIlxyXG4gICAgICAob25ab29tUmVzZXQpPVwiem9vbVJlc2V0KClcIlxyXG4gICAgICAob25ab29tT3V0KT1cInpvb21PdXQoKVwiXHJcbiAgICA+PC9ycC16b29tLWNvbnRyb2xzPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhckljb25TZXR0aW5ncz5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sYmFyX19kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgbWF0SWNvbj1cInNldHRpbmdzXCJcclxuICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5TZXR0aW5ncyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgIChvbkNsaWNrKT1cInNob3dTZXR0aW5ncygpXCJcclxuICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uQ2FydD5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJ0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zaG93QWRkVG9DYXJ0XCIgY2xhc3M9XCJ0b29sYmFyX19kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8cnAtdG9vbGJhci1pY29uICpuZ0lmPVwidGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2hvd0FkZFRvQ2FydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGQtdG8tY2FydC1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1hdEljb249XCJjYXJ0LXNob3BwaW5nLXJlZ3VsYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eydBRERfVE9fQ0FSVCcgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhZGRBbGxUb0NhcnQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwidGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2hvd0FkZFRvQ2FydFwiIGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICN0b29sYmFyU25hcHBpbmdJY29uPlxyXG4gICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgKm5nSWY9XCJ0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVBsYWNlbWVudFNuYXBwaW5nXCJcclxuICAgICAgICBtYXRJY29uPVwibWFnbmV0XCJcclxuICAgICAgICAob25DbGljayk9XCJ0b2dnbGVPYmplY3RTbmFwcGluZygpXCJcclxuICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgdG9vbHRpcD1cInt7J1RPR0dMRV9PQkpFQ1RfU05BUFBJTkdfT0ZGJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcblxyXG4gICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgKm5nSWY9XCIhdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VQbGFjZW1lbnRTbmFwcGluZ1wiXHJcbiAgICAgICAgbWF0SWNvbj1cIm1hZ25ldF9zdHJpa2V0aHJvdWdoXCJcclxuICAgICAgICAob25DbGljayk9XCJ0b2dnbGVPYmplY3RTbmFwcGluZygpXCJcclxuICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgdG9vbHRpcD1cInt7J1RPR0dMRV9PQkpFQ1RfU05BUFBJTkdfT04nIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc2V0dGluZ3NTaWRlYmFyPlxyXG4gICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnU0VUVElOR1MnIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICA8L2hlYWRlcj5cclxuICAgICAgPHJwLXNldHRpbmdzXHJcbiAgICAgICAgW3BsYWNlQ2FtZXJhRGlzYWJsZWRdPVwidmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgfHwgaXRlbVNlcnZpY2UuZ2V0V2Fsa3Rocm91Z2hDYW1lcmEoKVwiXHJcbiAgICAgICAgW21pbldhbGxIZWlnaHRdPVwiZ2V0TWluR2xvYmFsV2FsbEhlaWdodCgpXCJcclxuICAgICAgICAob25XYWxsc0hlaWdodFVwZGF0ZSk9XCJ3YWxsc0hlaWdodFVwZGF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9ycC1zZXR0aW5ncz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNjYXRlZ29yaWVzU2lkZWJhcj5cclxuICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ0FSQ0hJVEVDVFVSRScgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgIDwvaGVhZGVyPlxyXG4gICAgICA8cnAtY2F0ZWdvcnktbGlicmFyeVxyXG4gICAgICAgIFtjYXRlZ29yaWVzXT1cImNhdGVnb3JpZXNcIlxyXG4gICAgICAgIChjYXRlZ29yeUNsaWNrKT1cInNob3dMaWJyYXJ5Q2F0ZWdvcnkoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9ycC1jYXRlZ29yeS1saWJyYXJ5PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2FjY2Vzc29pcmVzQ2F0ZWdvcmllc1NpZGViYXI+XHJcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdBQ0NFU1NPSVJFUycgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgIDwvaGVhZGVyPlxyXG4gICAgICA8cnAtY2F0ZWdvcnktbGlicmFyeVxyXG4gICAgICAgIFtjYXRlZ29yaWVzXT1cImFjY2Vzc29pcmVDYXRlZ29yaWVzXCJcclxuICAgICAgICAoY2F0ZWdvcnlDbGljayk9XCJzaG93TGlicmFyeUNhdGVnb3J5KCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvcnAtY2F0ZWdvcnktbGlicmFyeT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNjdXN0b21TaGFwZUNyZWF0b3JTaWRlQmFyPlxyXG4gICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnQ1VTVE9NX1NIQVBFX0NSRUFUT1InIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICA8L2hlYWRlcj5cclxuICAgICAgPHJwLWN1c3RvbS1zaGFwZS1jcmVhdG9yIFtzaGFwZV09XCJzZWxlY3RlZE9iamVjdFwiPjwvcnAtY3VzdG9tLXNoYXBlLWNyZWF0b3I+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ3lsaW5kZXJDcmVhdG9yU2lkZUJhcj5cclxuICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ0NVU1RPTV9TSEFQRV9DUkVBVE9SJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgPC9oZWFkZXI+XHJcbiAgICAgIDxjdXN0b20tY3lsaW5kZXItY3JlYXRvciBbc2hhcGVdPVwic2VsZWN0ZWRPYmplY3RcIj48L2N1c3RvbS1jeWxpbmRlci1jcmVhdG9yPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2xpYnJhcnlTaWRlYmFyPlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJ3aXRoLXNjcm9sbGFibGUtc2VjdGlvblwiPlxyXG4gICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNob3dBY3RpdmVDYXRlZ29yeVNpZGViYXIoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+YXJyb3dfYmFja19pb3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyBzZWxlY3RlZENhdGVnb3J5Lm5hbWUgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtYXQtYm9keVwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeS5kZXNjcmlwdGlvblwiPnt7IHNlbGVjdGVkQ2F0ZWdvcnkuZGVzY3JpcHRpb24gfCBsb2NhbGl6ZSB9fTwvcD5cclxuICAgICAgICA8c2VjdGlvbiBmeEZsZXg9XCJncm93XCIgKm5nSWY9XCJsaWJyYXJ5T2JqZWN0cz8ubGVuZ3RoID4gMCB8fCBoYXNDdXN0b21PYmplY3RzKClcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNDdXN0b21PYmplY3RzKClcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMlwiPnt7ICdDVVNUT00nIHwgbG9jYWxpemUgfX08L2gzPlxyXG4gICAgICAgICAgICA8cnAtb2JqZWN0LWxpYnJhcnlcclxuICAgICAgICAgICAgICBbb2JqZWN0c109XCJjdXN0b21PYmplY3RzXCJcclxuICAgICAgICAgICAgICAoc2V0RHJhZ2dlZCk9XCJzZXREcmFnZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChyZWxlYXNlRHJhZ2dlZCk9XCJyZWxlYXNlRHJhZ2dlZCgpXCJcclxuICAgICAgICAgICAgICAob25PYmplY3RDbGljayk9XCJvbk9iamVjdExpYnJhcnlDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L3JwLW9iamVjdC1saWJyYXJ5PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpYnJhcnlPYmplY3RzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTJcIj57eyAnTElCUkFSWScgfCBsb2NhbGl6ZSB9fTwvaDM+XHJcbiAgICAgICAgICAgIDxycC1vYmplY3QtbGlicmFyeVxyXG4gICAgICAgICAgICAgIFtvYmplY3RzXT1cImxpYnJhcnlPYmplY3RzXCJcclxuICAgICAgICAgICAgICAoc2V0RHJhZ2dlZCk9XCJzZXREcmFnZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChyZWxlYXNlRHJhZ2dlZCk9XCJyZWxlYXNlRHJhZ2dlZCgpXCJcclxuICAgICAgICAgICAgICAob25PYmplY3RDbGljayk9XCJvbk9iamVjdExpYnJhcnlDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L3JwLW9iamVjdC1saWJyYXJ5PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZE9iamVjdFNpZGViYXI+XHJcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdPQkpFQ1QnIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICA8L2hlYWRlcj5cclxuICAgICAgPHJwLXNlbGVjdGVkLW9iamVjdFxyXG4gICAgICAgIFtvYmplY3RdPVwic2VsZWN0ZWRPYmplY3RcIlxyXG4gICAgICAgIChvblNlbGVjdGVkT2JqZWN0Q2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkT2JqZWN0SHVkKClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvcnAtc2VsZWN0ZWQtb2JqZWN0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3NlbGVjdGVkV2FsbFNpZGViYXI+XHJcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdXQUxMJ3wgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICA8L2hlYWRlcj5cclxuICAgICAgPHJwLXNlbGVjdGVkLXdhbGxcclxuICAgICAgICBbd2FsbF09XCJzZWxlY3RlZFdhbGxcIlxyXG4gICAgICAgIFt0ZXh0dXJlUGxhbmVdPVwic2VsZWN0ZWRFZGdlc1swXVwiXHJcbiAgICAgICAgW21pbldhbGxIZWlnaHRdPVwiZ2V0TWluV2FsbEhlaWdodChzZWxlY3RlZFdhbGwpXCJcclxuICAgICAgICBbbWF4V2FsbEhlaWdodF09XCJtYXhXYWxsSGVpZ2h0XCJcclxuICAgICAgICBbbWF4V2FsbFRoaWNrbmVzc109XCJtYXhXYWxsVGhpY2tuZXNzXCJcclxuICAgICAgICBbbWF4V2FsbExlbmd0aF09XCJtYXhXYWxsTGVuZ3RoXCJcclxuICAgICAgICBbbWluV2FsbExlbmd0aF09XCJtaW5XYWxsTGVuZ3RoXCJcclxuICAgICAgICAocmVtb3ZlKT1cInJlbW92ZVdhbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNldExlbmd0aCk9XCJzZXRXYWxsTGVuZ3RoKCRldmVudClcIlxyXG4gICAgICAgIChzZXRIZWlnaHQpPVwic2V0V2FsbEhlaWdodCgkZXZlbnQpXCJcclxuICAgICAgICAoc2V0VGhpY2tuZXNzKT1cInNldFdhbGxUaGlja25lc3MoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdENvcm5lcik9XCJzZWxlY3RDb3JuZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNldFRleHR1cmUpPVwic2V0V2FsbFRleHR1cmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNldENvbG9yKT1cInNldFdhbGxDb2xvcigkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L3JwLXNlbGVjdGVkLXdhbGw+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyPlxyXG4gICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ1NFVFRJTkdTJyB8IGxvY2FsaXplXCI+PC9oMj5cclxuICAgICAgPC9oZWFkZXI+XHJcbiAgICAgIDxycC1zZWxlY3RlZC10aHJlZWQtb2JqZWN0XHJcbiAgICAgICAgW29iamVjdF09XCJzZWxlY3RlZE9iamVjdFwiXHJcbiAgICAgICAgW3Nob3dDb3B5XT1cInNob3dDb3B5QnV0dG9uXCJcclxuICAgICAgICBbc2hvd0RlbGV0ZV09XCJzaG93RGVsZXRlQnV0dG9uXCJcclxuICAgICAgICBbc2hvd0xvY2tdPVwic2hvd0xvY2tCdXR0b25cIlxyXG4gICAgICAgIChvblNlbGVjdGVkT2JqZWN0Q2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkT2JqZWN0SHVkKClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvcnAtc2VsZWN0ZWQtdGhyZWVkLW9iamVjdD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZEZsb29yU2lkZWJhcj5cclxuICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ0ZMT09SJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgPHJwLXNlbGVjdGVkLWZsb29yXHJcbiAgICAgICAgW2Zsb29yXT1cInNlbGVjdGVkRmxvb3JcIlxyXG4gICAgICAgIFt0ZXh0dXJlUGxhbmVdPVwic2VsZWN0ZWRGbG9vclwiXHJcbiAgICAgICAgKHNldFRleHR1cmUpPVwic2V0Rmxvb3JUZXh0dXJlKCRldmVudClcIlxyXG4gICAgICAgIChzZXRDb2xvcik9XCJzZXRGbG9vckNvbG9yKCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZEZsb29yQ2xvc2VkKT1cInNlbGVjdGVkRmxvb3IgPSB1bmRlZmluZWRcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvcnAtc2VsZWN0ZWQtZmxvb3I+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySXNHcm91cGluZ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcCBtcnAtc2F2ZS1ncm91cGluZ1wiICpuZ0lmPVwidXNlcklzR3JvdXBpbmdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNoZWNrPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0dST1VQSU5HJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCIgKGNsaWNrKT1cImNhbmNlbEdyb3VwU2VsZWN0aW9uKClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jYW5jZWw8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQ0FOQ0VMJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogWycuL3Jvb20tcGxhbm5lci5jb21wb25lbnQuc2NzcyddLyosXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gqL1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUm9vbVBsYW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgUGx1Z2luSW50ZXJmYWNlIHtcclxuICBAVmlld0NoaWxkKEZsb29ycGxhbm5lckNvbXBvbmVudCwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgcHVibGljIGZsb29ycGxhbm5lcjogRmxvb3JwbGFubmVyQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uTGlicmFyeScsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbkxpYnJhcnk6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25BY2Nlc3NvaXJlcycsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbkFjY2Vzc29pcmVzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uU2V0dGluZ3MnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25TZXR0aW5nczogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbjJkVmlldycsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbjJkVmlldzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFyU2hvd0RpYWdyYW0nLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhclNob3dEaWFncmFtOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uM2RWaWV3Jywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uM2RWaWV3OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2NhdGVnb3JpZXNTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIGNhdGVnb3JpZXNTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2FjY2Vzc29pcmVzQ2F0ZWdvcmllc1NpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdjdXN0b21TaGFwZUNyZWF0b3JTaWRlQmFyJywge3N0YXRpYzogdHJ1ZX0pIGN1c3RvbVNoYXBlQ3JlYXRvclNpZGVCYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnY3VzdG9tQ3lsaW5kZXJDcmVhdG9yU2lkZUJhcicsIHtzdGF0aWM6IHRydWV9KSBjdXN0b21DeWxpbmRlckNyZWF0b3JTaWRlQmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NldHRpbmdzU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZXR0aW5nc1NpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnbGlicmFyeVNpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgbGlicmFyeVNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRPYmplY3RTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkT2JqZWN0U2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RlZFdhbGxTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkV2FsbFNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RlZEZsb29yU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWxlY3RlZEZsb29yU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbkZhcScsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbkZhcTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbkZlZWRiYWNrJywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uRmVlZGJhY2s6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25DYXJ0Jywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uQ2FydDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFyU25hcHBpbmdJY29uJywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJTbmFwcGluZ0ljb246IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBsYXllckNsYXNzID0gJ2xheWVyJztcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzaG93UGx1Z2luID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGZvY3VzQ29udHJvbHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyByZWFkb25seSBpY29uOiB0eXBlb2YgSWNvbkVudW0gPSBJY29uRW51bTtcclxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbk5hbWU6IHR5cGVvZiBJY29uTmFtZSA9IEljb25OYW1lO1xyXG4gIHB1YmxpYyByZWFkb25seSB2aWV3TW9kZXM6IHR5cGVvZiBWaWV3TW9kZSA9IFZpZXdNb2RlO1xyXG5cclxuICBvYmplY3RzOiBUaHJlZWRNb2RlbFtdO1xyXG4gIGN1c3RvbU9iamVjdHM6IFRocmVlZE1vZGVsW107XHJcbiAgbGlicmFyeU9iamVjdHM6IFRocmVlZE1vZGVsW107XHJcbiAgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXTtcclxuICBhY2Nlc3NvaXJlQ2F0ZWdvcmllczogQ2F0ZWdvcnlbXTtcclxuICBzZWxlY3RlZENhdGVnb3J5OiBDYXRlZ29yeTtcclxuICBzaG93Q29udGV4dE1lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzZWxlY3RlZFdhbGw6IFdhbGw7XHJcbiAgc2VsZWN0ZWRFZGdlOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRGbG9vcjogRmxvb3JQbGFuZUl0ZW07XHJcbiAgc2VsZWN0ZWRSb29tOiBSb29tO1xyXG4gIHNlbGVjdGVkT2JqZWN0OiBJdGVtIHwgSXRlbUdyb3VwO1xyXG5cclxuICBwdWJsaWMgd2FsbExlbmd0aEluZm9EaWFsb2dFbmFibGVkID0gdHJ1ZTtcclxuICBwdWJsaWMgbWF4V2FsbEhlaWdodDogbnVtYmVyO1xyXG4gIHB1YmxpYyBtYXhXYWxsVGhpY2tuZXNzOiBudW1iZXI7XHJcbiAgcHVibGljIG1heFdhbGxMZW5ndGg6IG51bWJlcjtcclxuICBwdWJsaWMgbWluV2FsbExlbmd0aDogbnVtYmVyO1xyXG4gIHB1YmxpYyBkZXNrdG9wU2l6ZVNjcmVlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgdGFibGV0U2l6ZVNjcmVlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgcGhvbmVTaXplU2NyZWVuOiBib29sZWFuO1xyXG4gIHB1YmxpYyBjb250ZXh0TWVudU1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQ7XHJcbiAgcHVibGljIHNob3dTZXR0aW5nc0J1dHRvbjogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd0NvbmZpZ3VyYXRpb25CdXR0b246IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dEZWxldGVCdXR0b246IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dMb2NrQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd0FSQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd0NvcHlCdXR0b246IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dHcm91cE1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0dyb3VwRWRpdE1lbnVCdXR0b25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dJY29uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHVzZXJJc0dyb3VwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dDb252ZXJzaW9uQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFkZFNlbGVjdGVkQ2xhc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2FsYWJsZU9iamVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0aHJlZWRJY29uQXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRpYWdyYW1Ub2dnbGVBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwcml2YXRlIF9tb2RlID0gVmlld01vZGUuUm9vbVBsYW4zRDtcclxuICBwcml2YXRlIF9jYXRhbG9nSXNTaG93bjogYm9vbGVhbjtcclxuICBwcml2YXRlIF9ibG9ja0xlZnRTaWRlQmFyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGljb25TZXJ2aWNlOiBIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZSxcclxuICAgIHB1YmxpYyB2aWV3TW9kZVNlcnZpY2U6IFZpZXdNb2RlU2VydmljZSxcclxuICAgIHB1YmxpYyBtb2RlbHNTZXJ2aWNlOiBNb2RlbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJlc2V0c1NlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwU2VydmljZTogSG9tZWRlY29yYXRvckFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY3JlZW5BbmFseXNpczogU2NyZWVuU2l6ZUFuYWx5c2lzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX3V0aWxzU2VydmljZTogVXRpbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vcnBsYW5TZXJ2aWNlOiBGbG9vcnBsYW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9odWRTZXJ2aWNlOiBIdWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJpYWxpemF0aW9uU2VydmljZTogSXRlbVNlcmlhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbGlnaHRzU2VydmljZTogTGlnaHRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FyU2VydmljZTogQXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIGl0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9nb29nbGVUYWdNYW5hZ2VyOiBHb29nbGVUYWdNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Blcm1hbmVudFN0b3JlU2VydmljZTogUGVybWFuZW50U3RvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29ubmVjdG9yU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3JBZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9wcmVzZXRzU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBoYW5kbGVEb2NLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkRWRnZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFdhbGwgJiYgdGhpcy5zZWxlY3RlZEVkZ2UgP1xyXG4gICAgICBbdGhpcy5zZWxlY3RlZFdhbGxbdGhpcy5zZWxlY3RlZEVkZ2VdXSA6XHJcbiAgICAgIFt0aGlzLnNlbGVjdGVkV2FsbCAmJiB0aGlzLnNlbGVjdGVkV2FsbC5iYWNrRWRnZSxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkV2FsbCAmJiB0aGlzLnNlbGVjdGVkV2FsbC5mcm9udEVkZ2VcclxuICAgICAgXS5maWx0ZXIoZWRnZSA9PiBlZGdlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5tYXhXYWxsSGVpZ2h0ID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5NYXhXYWxsSGVpZ2h0KTtcclxuICAgIHRoaXMubWF4V2FsbFRoaWNrbmVzcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuTWF4V2FsbFRoaWNrbmVzcyk7XHJcbiAgICB0aGlzLm1heFdhbGxMZW5ndGggPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5Lk1heFdhbGxMZW5ndGgpO1xyXG4gICAgdGhpcy5taW5XYWxsTGVuZ3RoID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5NaW5XYWxsTGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25MaWJyYXJ5LFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiAyMDBcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uQWNjZXNzb2lyZXMsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDIwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb24yZFZpZXcsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDQwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhclNob3dEaWFncmFtLFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiA0MDBcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uM2RWaWV3LFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiA0MDBcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uU2V0dGluZ3MsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDUwMFxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgIC8vICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25GYXEsXHJcbiAgICAvLyAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgIC8vICAgcHJpb3JpdHk6IDYwMFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgIC8vICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25GZWVkYmFjayxcclxuICAgIC8vICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgLy8gICBwcmlvcml0eTogNzAwXHJcbiAgICAvLyB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbkNhcnQsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDEwMDBcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFyU25hcHBpbmdJY29uLFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiAxMjAwXHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9hcHBTZXJ2aWNlLmNhdGVnb3JpZXNMb2FkZWQuc3Vic2NyaWJlKChjYXRlZ29yaWVzOiBDYXRlZ29yeVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGNhdGVnb3JpZXMpIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHRoaXMuX2FwcFNlcnZpY2UuZ2V0Q2F0ZWdvcmllcygnYXJjaGl0ZWN0dXJlJyk7XHJcbiAgICAgICAgICB0aGlzLmFjY2Vzc29pcmVDYXRlZ29yaWVzID0gdGhpcy5fYXBwU2VydmljZS5nZXRDYXRlZ29yaWVzKCdhY2Nlc3NvaXJlcycpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMudmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlQ2hhbmdlZC5zdWJzY3JpYmUoKG1vZGU6IFZpZXdNb2RlKSA9PiB0aGlzLl92aWV3TW9kZUNoYW5nZWQobW9kZSkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU2V0MkRWaWV3LCAoe3NlbmRVcGRhdGVzfSkgPT4gdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLkZsb29yUGxhbjJELCBzZW5kVXBkYXRlcykpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU2V0M0RWaWV3LCAoe3NlbmRVcGRhdGVzfSkgPT4gdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLlJvb21QbGFuM0QsIHNlbmRVcGRhdGVzKSksXHJcbiAgICAgIHRoaXMuX2luaXRTY3JlZW5TaXplSGFuZGxpbmcoKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkdyb3VwTW9kZUNoYW5nZWQsICh7c2hvd0dyb3VwTWVudX0pID0+IHtcclxuICAgICAgICB0aGlzLnNob3dHcm91cE1lbnUgPSBzaG93R3JvdXBNZW51O1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkl0ZW1TZWxlY3RlZCwgKGl0ZW0pID0+IHRoaXMub2JqZWN0U2VsZWN0ZWQoaXRlbSkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSXRlbVVuc2VsZWN0ZWQsIChpdGVtKSA9PiB0aGlzLm9iamVjdFVuc2VsZWN0ZWQoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5MZWZ0U2lkZWJhckNsb3NlQ2xpY2tlZCwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkV2FsbCA9IHVuZGVmaW5lZDtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlKSxcclxuICAgICAgdGhpcy5fcm9vbVNlcnZpY2Uud2FsbFNlbGVjdGVkLnN1YnNjcmliZSgoc2VsZWN0ZWRXYWxsRXZlbnQ6IFNlbGVjdGVkV2FsbEV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG9vcikge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTGVmdFNpZGViYXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmxvb3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0V2FsbChzZWxlY3RlZFdhbGxFdmVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9yb29tU2VydmljZS5mbG9vclNlbGVjdGVkLnN1YnNjcmliZSgoc2VsZWN0ZWRGbG9vckV2ZW50OiBTZWxlY3RlZEZsb29yRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFdhbGwpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdhbGwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0Rmxvb3Ioc2VsZWN0ZWRGbG9vckV2ZW50KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmNvcHlJdGVtLnN1YnNjcmliZSgoaXRlbTogSXRlbSkgPT4gdGhpcy5fY29weUl0ZW0oaXRlbSkpLFxyXG4gICAgICB0aGlzLl9pdGVtU2VydmljZS5kZWxldGVJdGVtLnN1YnNjcmliZSgoaXRlbTogSXRlbSkgPT4gdGhpcy5fcmVtb3ZlT2JqZWN0KGl0ZW0pKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlNob3dQcm9kdWN0Q2F0YWxvZywgKCkgPT4gdGhpcy5fY2F0YWxvZ0lzU2hvd24gPSB0cnVlKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZywgKCkgPT4gdGhpcy5fY2F0YWxvZ0lzU2hvd24gPSBmYWxzZSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5CbG9ja0xlZnRTaWRlYmFyLCAoYmxvY2spID0+IHRoaXMuX2Jsb2NrTGVmdFNpZGVCYXIgPSBibG9jayksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TaG93RnVybml0dXJlU2lkZWJhciwgKGNhdGVnb3J5OiBDYXRlZ29yeSkgPT4gdGhpcy5zaG93TGlicmFyeUNhdGVnb3J5KGNhdGVnb3J5KSksXHJcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vYmplY3RNb3ZpbmdPclJvdGF0aW5nLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkZsb29yUGxhbmVBdmFpbGFibGUsICgpID0+IHRoaXMuX3NldFRocmVlZEF2YWlsYWJsZSgpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRTY2FsZWREaWFncmFtLCAoaW5wdXQpID0+IHRoaXMuZW5hYmxlRGlhZ3JhbVRvZ2dsZShpbnB1dCkpLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNob3dBUkJ1dHRvbiA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd0FyQnV0dG9uICYmIGF3YWl0IHRoaXMuX2FyU2VydmljZS5hclN1cHBvcnRlZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy50b29sYmFySWNvbkxpYnJhcnkgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uQWNjZXNzb2lyZXMgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uU2V0dGluZ3MgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uMmRWaWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50b29sYmFyU2hvd0RpYWdyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uM2RWaWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jYXRlZ29yaWVzU2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuY3VzdG9tU2hhcGVDcmVhdG9yU2lkZUJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuY3VzdG9tQ3lsaW5kZXJDcmVhdG9yU2lkZUJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2V0dGluZ3NTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5saWJyYXJ5U2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZFdhbGxTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRocmVlZE9iamVjdFNpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmxvb3JTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0U2NyZWVuU2l6ZUhhbmRsaW5nKCk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2NyZWVuQW5hbHlzaXMuc2NyZWVuU2l6ZUNoYW5nZWQuc3Vic2NyaWJlKChpbmZvOiBTY3JlZW5TaXplSW5mbykgPT4ge1xyXG4gICAgICB0aGlzLmRlc2t0b3BTaXplU2NyZWVuID0gaW5mby5pc0Rlc2t0b3BTaXplO1xyXG4gICAgICB0aGlzLnRhYmxldFNpemVTY3JlZW4gPSBpbmZvLmlzVGFibGV0U2l6ZTtcclxuICAgICAgdGhpcy5waG9uZVNpemVTY3JlZW4gPSBpbmZvLmlzUGhvbmVTaXplO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmRlc2t0b3BTaXplU2NyZWVuICYmICh0aGlzLnZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpIHx8IHRoaXMudmlld01vZGVTZXJ2aWNlLmlzVlJWaWV3QWN0aXZlKCkpKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLlJvb21QbGFuM0QsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZpZXdNb2RlQ2hhbmdlZChtb2RlOiBWaWV3TW9kZSkge1xyXG4gICAgdGhpcy5fbW9kZSA9IG1vZGU7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgfVxyXG5cclxuICBvYmplY3RTZWxlY3RlZChvYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXApIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuc2FsYWJsZU9iamVjdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdCA9IG9iamVjdDtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xyXG4gICAgICB0aGlzLnNob3dHcm91cE1lbnUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dHcm91cEVkaXRNZW51QnV0dG9ucyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBJdGVtKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhICYmIHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuZ29vZElkKSB7XHJcbiAgICAgICAgdGhpcy5zYWxhYmxlT2JqZWN0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNob3dHcm91cE1lbnUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93U2V0dGluZ3NCdXR0b24gPSB0aGlzLl9oYXNTZXR0aW5ncyh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgdGhpcy5zaG93Q29uZmlndXJhdGlvbkJ1dHRvbiA9IHRoaXMuX2lzQ29uZmlndXJhYmxlKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICB0aGlzLnNob3dEZWxldGVCdXR0b24gPSB0aGlzLl9pc0RlbGV0YWJsZSh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgdGhpcy5zaG93Q29weUJ1dHRvbiA9IHRoaXMuX2lzQ29weWFibGUodGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIHRoaXMuc2hvd0NvbnZlcnNpb25CdXR0b24gPSB0aGlzLl9pc0NvbnZlcnNpb25JdGVtKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuY29udmVyc2lvbkdUTVNlbmQpIHtcclxuICAgICAgICB0aGlzLmFkZFNlbGVjdGVkQ2xhc3MgPSB0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWRDbGFzcyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdXRpbHNTZXJ2aWNlLmZvcmNlQ2hhbmdlRGV0ZWN0aW9uKHRoaXMuX2NkLCB0aGlzLCAnc2VsZWN0ZWRPYmplY3QnKTtcclxuICAgIHRoaXMuc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNob3dTZWxlY3RlZE9iamVjdFNpZGViYXIoKSB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG5cclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YTtcclxuICAgIGlmIChtZXRhZGF0YSAmJiAoaXNDdXN0b21TaGFwZVR5cGUobWV0YWRhdGEuaXRlbVR5cGUpIHx8IGlzQ3VzdG9tU2hhcGVXYWxsVHlwZShtZXRhZGF0YS5pdGVtVHlwZSkpKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuY3VzdG9tU2hhcGVDcmVhdG9yU2lkZUJhcik7XHJcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhICYmIChpc0N1c3RvbUN5bGluZGVyVHlwZShtZXRhZGF0YS5pdGVtVHlwZSkgfHwgaXNDdXN0b21DeWxpbmRlcldhbGxUeXBlKG1ldGFkYXRhLml0ZW1UeXBlKSkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5jdXN0b21DeWxpbmRlckNyZWF0b3JTaWRlQmFyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRPYmplY3RTaWRlYmFyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDb25maWd1cmF0aW9uQnV0dG9uQ2xpY2soYnRuOiBDdXN0b21CdXR0b24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICBidG4uaGFuZGxlcih0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgRmxvb3JQbGFuZUl0ZW0pIHtcclxuICAgICAgdGhpcy5zaG93U2VsZWN0ZWRGbG9vclNpZGViYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9iamVjdFVuc2VsZWN0ZWQoKSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNob3dHcm91cE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0dyb3VwRWRpdE1lbnVCdXR0b25zID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZE9iamVjdEh1ZCgpIHtcclxuICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRGVsZXRlT2JqZWN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QgJiYgdGhpcy5faXNEZWxldGFibGUodGhpcy5zZWxlY3RlZE9iamVjdCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZE9iamVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0ZWRPYmplY3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcmVtb3ZlT2JqZWN0KHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgdGhpcy5vYmplY3RVbnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlTG9ja1NlbGVjdGVkT2JqZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QubG9ja2VkID0gIXRoaXMuc2VsZWN0ZWRPYmplY3QubG9ja2VkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlT2JqZWN0KG9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cCkge1xyXG4gICAgaWYgKGlzV2FsbFR5cGUob2JqZWN0LnVzZXJEYXRhLml0ZW1UeXBlKSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50V2FsbCA9ICg8V2FsbEl0ZW0+b2JqZWN0KS5jdXJyZW50V2FsbDtcclxuICAgICAgaWYgKGN1cnJlbnRXYWxsKSB7XHJcbiAgICAgICAgY3VycmVudFdhbGwucmVtb3ZlSXRlbSg8SXRlbT5vYmplY3QpO1xyXG4gICAgICAgIGN1cnJlbnRXYWxsLnJlbW92ZU9uSXRlbSg8SXRlbT5vYmplY3QpO1xyXG4gICAgICAgIGN1cnJlbnRXYWxsLmZpcmVSZWRyYXcoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc0Z1cm5pdHVyZVR5cGUob2JqZWN0LnVzZXJEYXRhLml0ZW1UeXBlKSkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlbW92ZVNlbGVjdGVkRnVybml0dXJlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG9iamVjdC5jYW5CZVJlbW92ZWQoKSkge1xyXG4gICAgICB0aGlzLl9yZW1vdmVJdGVtKG9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmplY3QucmVtb3ZlZCgpO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlSXRlbShvYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXApIHtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0ob2JqZWN0KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAncmVtb3ZlT2JqZWN0J30pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29weVNlbGVjdGVkT2JqZWN0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX2NvcHlJdGVtKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY29weUl0ZW0ob3JpZ2luYWw6IEl0ZW0gfCBJdGVtR3JvdXApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGlzQ3VzdG9tU2hhcGVJdGVtOiBib29sZWFuID0gb3JpZ2luYWwgaW5zdGFuY2VvZiBDdXN0b21TaGFwZUZsb29ySXRlbTtcclxuICAgIGNvbnN0IGlzQ3VzdG9tU2hhcGVXYWxsSXRlbTogYm9vbGVhbiA9IG9yaWdpbmFsIGluc3RhbmNlb2YgQ3VzdG9tU2hhcGVXYWxsSXRlbTtcclxuICAgIGNvbnN0IGlzQ3VzdG9tQ3lsaW5kZXJJdGVtOiBib29sZWFuID0gb3JpZ2luYWwgaW5zdGFuY2VvZiBDdXN0b21DeWxpbmRlckZsb29ySXRlbTtcclxuICAgIGNvbnN0IGlzQ3VzdG9tQ3lsaW5kZXJXYWxsSXRlbTogYm9vbGVhbiA9IG9yaWdpbmFsIGluc3RhbmNlb2YgQ3VzdG9tQ3lsaW5kZXJXYWxsSXRlbTtcclxuICAgIGNvbnN0IGlzUmVzaXphYmxlRG9vck9yV2luZG93OiBib29sZWFuID0gb3JpZ2luYWwgaW5zdGFuY2VvZiBJbldhbGxJdGVtICYmIG9yaWdpbmFsLmlzQ3VzdG9tO1xyXG4gICAgaWYgKGlzQ3VzdG9tU2hhcGVJdGVtIHx8IGlzQ3VzdG9tU2hhcGVXYWxsSXRlbSB8fCBpc0N1c3RvbUN5bGluZGVySXRlbSB8fCBpc0N1c3RvbUN5bGluZGVyV2FsbEl0ZW0gfHwgaXNSZXNpemFibGVEb29yT3JXaW5kb3cpIHtcclxuICAgICAgY29uc3QgY29weSA9IChvcmlnaW5hbCBhcyBDdXN0b21TaGFwZUZsb29ySXRlbSB8IEluV2FsbEl0ZW0pLmNsb25lSXRlbSgpO1xyXG4gICAgICB0aGlzLl9pdGVtU2VydmljZS5hZGRJdGVtKGNvcHkpO1xyXG4gICAgICBpZiAoY29weSBpbnN0YW5jZW9mIFdhbGxJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgY2xvc2VzdFdhbGxFZGdlID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Q2xvc2VzdFdhbGxFZGdlKG9yaWdpbmFsLnBvc2l0aW9uLngsIG9yaWdpbmFsLnBvc2l0aW9uLnopO1xyXG4gICAgICAgIGNvcHkucGxhY2VPbkVkZ2UoY2xvc2VzdFdhbGxFZGdlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldERyYWcsIGNvcHkpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlN0YXJ0RHJhZywgb3JpZ2luYWwucG9zaXRpb24pO1xyXG4gICAgfSBlbHNlIGlmIChvcmlnaW5hbC51c2VyRGF0YSAmJiBvcmlnaW5hbC51c2VyRGF0YS5pdGVtSWRlbnRpZmllcikge1xyXG4gICAgICBpZiAob3JpZ2luYWwubWV0YWRhdGEudGhpcmRQYXJ0eU1vZGVsKSB7XHJcbiAgICAgICAgLy8gV2hlbiBpdCdzIGEgdGhpcmQgcGFydHkgbW9kZWwsIHdlIHNob3VsZCBqdXN0IGNsb25lIHRoZSBPYmplY3QoM0QpXHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5DbG9uZVRoaXJkUGFydHlNb2RlbCwgb3JpZ2luYWwgYXMgSXRlbSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5Db3B5SU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVLCBvcmlnaW5hbCBhcyBJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHJhZ2dlZERhdGE6IERyYWdnZWREYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWUsXHJcbiAgICAgICAgdHlwZTogb3JpZ2luYWwubWV0YWRhdGEuaXRlbVR5cGUsXHJcbiAgICAgICAgaU9uZTogZmFsc2UsXHJcbiAgICAgICAgb3ZlcnJpZGVzOiB7XHJcbiAgICAgICAgICByb3RhdGlvbjogb3JpZ2luYWwucm90YXRpb24gJiYgb3JpZ2luYWwucm90YXRpb24uY2xvbmUoKSxcclxuICAgICAgICAgIC8vIHNjYWxlOiBvcmlnaW5hbC5zY2FsZSAmJiBvcmlnaW5hbC5zY2FsZS5jbG9uZSgpLFxyXG4gICAgICAgICAgb3BlbmluZzogKG9yaWdpbmFsIGFzIGFueSkub3BlbmluZyxcclxuICAgICAgICAgIHRleHR1cmU6IChvcmlnaW5hbCBhcyBhbnkpLnRleHR1cmUsXHJcbiAgICAgICAgICBpc0NvcHk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0RHJhZywgZHJhZ2dlZERhdGEpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlN0YXJ0RHJhZywgb3JpZ2luYWwucG9zaXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgem9vbVJlc2V0KCkge1xyXG4gICAgdGhpcy5mbG9vcnBsYW5uZXIuem9vbVJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FudFpvb21PdXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vcnBsYW5uZXIuY2FudFpvb21PdXQ7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FudFpvb21JbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29ycGxhbm5lci5jYW50Wm9vbUluO1xyXG4gIH1cclxuXHJcbiAgem9vbU91dCgpIHtcclxuICAgIHRoaXMuZmxvb3JwbGFubmVyLnpvb21PdXQoKTtcclxuICB9XHJcblxyXG4gIHpvb21JbigpIHtcclxuICAgIHRoaXMuZmxvb3JwbGFubmVyLnpvb21JbigpO1xyXG4gIH1cclxuXHJcbiAgdW5zZWxlY3RBbGwoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmxvb3IgPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZEVkZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZFdhbGwgPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdCA9IG51bGw7XHJcbiAgICBpZiAoIXRoaXMuX2Jsb2NrTGVmdFNpZGVCYXIpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTGVmdFNpZGViYXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZU1vZGUodmFsdWU6IFZpZXdNb2RlLCBzZW5kVXBkYXRlcyA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XHJcbiAgICBpZiAoc2VuZFVwZGF0ZXMpIHtcclxuICAgICAgdGhpcy52aWV3TW9kZVNlcnZpY2Uuc2V0Vmlld01vZGUodGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRTaXplKCksIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Q2VudGVyKCksIHZhbHVlKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5WaWV3TW9kZUNoYW5nZWQsIHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVEaWFncmFtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5Ub2dnbGVEaWFncmFtKTtcclxuICB9XHJcblxyXG4gIHNob3dMaWJyYXJ5Q2F0ZWdvcmllcygpIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuY2F0ZWdvcmllc1NpZGViYXIpO1xyXG4gICAgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgPSB0aGlzLmNhdGVnb3JpZXNTaWRlYmFyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dBY2Nlc3NvaXJlQ2F0ZWdvcmllcygpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhcik7XHJcbiAgICB0aGlzLl9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZSA9IHRoaXMuYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93QWN0aXZlQ2F0ZWdvcnlTaWRlYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2hvd0xpYnJhcnlDYXRlZ29yeShjYXRlZ29yeTogQ2F0ZWdvcnkpIHtcclxuICAgIHRoaXMub2JqZWN0cyA9IGF3YWl0IHRoaXMubW9kZWxzU2VydmljZS5nZXRJdGVtc0Zyb21DYXRlZ29yeShjYXRlZ29yeS5pZCk7XHJcbiAgICB0aGlzLmN1c3RvbU9iamVjdHMgPSB0aGlzLm9iamVjdHMuZmlsdGVyKG9iamVjdCA9PiBvYmplY3QuaXNDdXN0b20pO1xyXG4gICAgdGhpcy5saWJyYXJ5T2JqZWN0cyA9IHRoaXMub2JqZWN0cy5maWx0ZXIob2JqZWN0ID0+ICFvYmplY3QuaXNDdXN0b20pO1xyXG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5ID0gY2F0ZWdvcnk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLmxpYnJhcnlTaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbmFibGVEaWFncmFtVG9nZ2xlKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhZ3JhbVRvZ2dsZUF2YWlsYWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLnNldHRpbmdzU2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkQWxsVG9DYXJ0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZU9iamVjdFNuYXBwaW5nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VQbGFjZW1lbnRTbmFwcGluZyA9ICF0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVBsYWNlbWVudFNuYXBwaW5nO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlcyA9IFtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVkZ2UgJiYgdGhpcy5zZWxlY3RlZFdhbGwgJiYgdGhpcy5zZWxlY3RlZFdhbGxbdGhpcy5zZWxlY3RlZEVkZ2VdLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkV2FsbCxcclxuICAgICAgdGhpcy5zZWxlY3RlZEZsb29yLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0XHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9IHNlbGVjdGFibGVzWzBdO1xyXG4gICAgaWYgKHNlbGVjdGFibGUpIHtcclxuICAgICAgdGhpcy5fbW9kZSA9IFZpZXdNb2RlLlJvb21QbGFuM0Q7XHJcbiAgICAgIHRoaXMuc2hvd1BsdWdpbi5lbWl0KHNlbGVjdGFibGUpO1xyXG4gICAgfSBlbHNlIGlmICghc2VsZWN0YWJsZSkge1xyXG4gICAgICB0aGlzLmRvbmUuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZEVkZ2VXYWxsUGxhY2VtZW50KHdhbGwsIGVkZ2UpIHtcclxuICAgIGNvbnN0IGVkZ2VQbGFjZW1lbnRzID0gWydmcm9udEVkZ2UnLCAnYmFja0VkZ2UnXTtcclxuICAgIHJldHVybiBlZGdlUGxhY2VtZW50cy5yZWR1Y2UoKHBsYWNlbWVudCwgcCkgPT4ge1xyXG4gICAgICBpZiAod2FsbFtwXSA9PT0gZWRnZSkge1xyXG4gICAgICAgIHBsYWNlbWVudCA9IHA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBsYWNlbWVudDtcclxuICAgIH0sIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFdhbGwoc2VsZWN0ZWRXYWxsRXZlbnQ6IFNlbGVjdGVkV2FsbEV2ZW50KSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbCA9IHNlbGVjdGVkV2FsbEV2ZW50LndhbGw7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51TW91c2VFdmVudCA9IHNlbGVjdGVkV2FsbEV2ZW50LmV2ZW50O1xyXG4gICAgaWYgKHNlbGVjdGVkV2FsbEV2ZW50LndhbGwpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkV2FsbEV2ZW50LmVkZ2UpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZSA9IHRoaXMuZmluZEVkZ2VXYWxsUGxhY2VtZW50KHNlbGVjdGVkV2FsbEV2ZW50LndhbGwsIHNlbGVjdGVkV2FsbEV2ZW50LmVkZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRXYWxsU2lkZWJhcigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dTZWxlY3RlZFdhbGxTaWRlYmFyKCkge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRXYWxsU2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1NlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcigpIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLnNlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGbG9vcihzZWxlY3RlZEZsb29yRXZlbnQ6IFNlbGVjdGVkRmxvb3JFdmVudCkge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvb20gPSBzZWxlY3RlZEZsb29yRXZlbnQucm9vbTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IHNlbGVjdGVkRmxvb3JFdmVudC5yb29tLmZsb29yUGxhbmU7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51TW91c2VFdmVudCA9IHNlbGVjdGVkRmxvb3JFdmVudC5ldmVudDtcclxuICAgIGlmIChzZWxlY3RlZEZsb29yRXZlbnQucm9vbSkge1xyXG4gICAgICBpZiAodGhpcy52aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdGVkRmxvb3JTaWRlYmFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1NlbGVjdGVkRmxvb3JTaWRlYmFyKCkge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRGbG9vclNpZGViYXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldEZsb29yVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9yb29tU2VydmljZS5zZXRGbG9vclRleHR1cmUodGhpcy5zZWxlY3RlZFJvb20sIHRleHR1cmUpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdmbG9vclRleHR1cmUnLCBwYXRjaDogZmFsc2V9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGbG9vckNvbG9yKGNvbG9yOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Jvb21TZXJ2aWNlLnNldEZsb29yQ29sb3IodGhpcy5zZWxlY3RlZFJvb20sIGNvbG9yKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnZmxvb3JDb2xvcicsIHBhdGNoOiBmYWxzZX0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKSB7XHJcbiAgICB3YWxsLnJlbW92ZSgpO1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yZW1vdmVXYWxsKHdhbGwpO1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdyZW1vdmVXYWxsJ30pO1xyXG4gIH1cclxuXHJcbiAgc2V0V2FsbExlbmd0aCh7bGVuZ3RoLCBhdEVuZCwgZWRnZX06IHsgbGVuZ3RoOiBudW1iZXIsIGF0RW5kOiBib29sZWFuLCBlZGdlPzogSGFsZkVkZ2UgfSkge1xyXG4gICAgY29uc3Qgd2FsbCA9IHRoaXMuc2VsZWN0ZWRXYWxsO1xyXG4gICAgY29uc3Qgb3JpZ0xlbmd0aCA9IGVkZ2UgPyBlZGdlLmludGVyaW9yRGlzdGFuY2UoKSA6IHdhbGwubGVuZ3RoO1xyXG4gICAgY29uc3Qgc3RhcnQgPSBhdEVuZCA/IHdhbGwuZ2V0U3RhcnQoKSA6IHdhbGwuZ2V0RW5kKCk7XHJcbiAgICBjb25zdCBlbmQgPSBhdEVuZCA/IHdhbGwuZ2V0RW5kKCkgOiB3YWxsLmdldFN0YXJ0KCk7XHJcbiAgICBjb25zdCBkeCA9IGVuZC54IC0gc3RhcnQueDtcclxuICAgIGNvbnN0IGR5ID0gZW5kLnkgLSBzdGFydC55O1xyXG4gICAgY29uc3QgayA9IGxlbmd0aCAvIG9yaWdMZW5ndGg7XHJcbiAgICBlbmQubW92ZShrICogZHggKyBzdGFydC54LCBrICogZHkgKyBzdGFydC55KTtcclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UudXBkYXRlKCk7XHJcbiAgICAvLyB0aGlzLl9yb29tU2VydmljZS51cGRhdGVGbG9vcnNBbmRFZGdlcygpLnRoZW4oKCkgPT4gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQubmV4dCgpKTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLm5leHQoKTtcclxuICAgIHRoaXMuX2xpZ2h0c1NlcnZpY2UudXBkYXRlQWxsT2Zmc2V0cygpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICd3YWxsTGVuZ3RoJ30pO1xyXG5cclxuICAgIGlmICh0aGlzLndhbGxMZW5ndGhJbmZvRGlhbG9nRW5hYmxlZCAmJiB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LlNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHMpKSB7XHJcbiAgICAgIGlmIChlZGdlICYmIE1hdGgucm91bmQoZWRnZS5pbnRlcmlvckRpc3RhbmNlKCkpICE9PSBsZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnNob3dXYWxsTGVuZ3RoSW5mb0RpYWxvZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93V2FsbExlbmd0aEluZm9EaWFsb2coKSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogJ0luZm8nLFxyXG4gICAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgICBgUmVzdWx0aW5nIGxlbmd0aCBvZiB3YWxsIHNsaWdodGx5IGRpZmZlcnMgZnJvbSBsZW5ndGggeW91IHNwZWNpZmllZC5cclxuICAgICAgICAgIFRvIGZ1cnRoZXIgcmVmaW5lIGxlbmd0aCBvZiB0aGUgd2FsbCwgdXNlIDJEIGZsb29ycGxhbiBibHVlcHJpbnQuYFxyXG4gICAgICB9LFxyXG4gICAgICBtYXhXaWR0aDogJzUwMHB4J1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGRvbnRTaG93QWdhaW4gPT4ge1xyXG4gICAgICB0aGlzLndhbGxMZW5ndGhJbmZvRGlhbG9nRW5hYmxlZCA9ICFkb250U2hvd0FnYWluO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0V2FsbEhlaWdodChoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFdhbGwuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgdGhpcy5fcm9vbVNlcnZpY2UudXBkYXRlQ2VpbGluZ3MoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsLmZpcmVSZWRyYXcoKTtcclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UudXBkYXRlKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3dhbGxIZWlnaHQnfSk7XHJcbiAgfVxyXG5cclxuICBzZXRXYWxsVGhpY2tuZXNzKHRoaWNrbmVzczogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbC50aGlja25lc3MgPSB0aGlja25lc3M7XHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnVwZGF0ZSgpO1xyXG4gICAgLy8gdGhpcy5fcm9vbVNlcnZpY2UudXBkYXRlRmxvb3JzQW5kRWRnZXMoKS50aGVuKCgpID0+IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLm5leHQoKSk7XHJcbiAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYU1vdmVtZW50Q2hhbmdlZC5uZXh0KCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbC5maXJlUmVkcmF3KCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3dhbGxUaGlja25lc3MnfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0V2FsbFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZEVkZ2VzLmZvckVhY2goYXN5bmMgKGVkZ2UpID0+IGF3YWl0IGVkZ2Uuc2V0VGV4dHVyZSh0ZXh0dXJlKSk7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuc2VsZWN0ZWRFZGdlcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYXdhaXQgdGhpcy5zZWxlY3RlZEVkZ2VzW2ldLnNldFRleHR1cmUodGV4dHVyZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICd3YWxsVGV4dHVyZScsIHBhdGNoOiBmYWxzZX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFdhbGxDb2xvcihjb2xvcjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWRnZXMuZm9yRWFjaChhc3luYyAoZWRnZSkgPT4gYXdhaXQgZWRnZS5zZXRDb2xvcihjb2xvcikpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnd2FsbENvbG9yJywgcGF0Y2g6IGZhbHNlfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDb3JuZXIoY29ybmVyOiBDb3JuZXIpIHtcclxuICAgIHRoaXMuZmxvb3JwbGFubmVyLnNlbGVjdENvcm5lcihjb3JuZXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluV2FsbEhlaWdodCh3YWxsOiBXYWxsKTogbnVtYmVyIHtcclxuICAgIGlmICghd2FsbCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgY29uc3QgY2FzdGVkV2FsbDogYW55ID0gd2FsbDtcclxuXHJcbiAgICBpZiAoY2FzdGVkV2FsbC5pdGVtcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2FzdGVkV2FsbC5pdGVtcykge1xyXG4gICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgaXRlbS5oYWxmU2l6ZS55ICsgaXRlbS5wb3NpdGlvbi55KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjYXN0ZWRXYWxsLm9uSXRlbXMpIHtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNhc3RlZFdhbGwub25JdGVtcykge1xyXG4gICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgaXRlbS5oYWxmU2l6ZS55ICsgaXRlbS5wb3NpdGlvbi55KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBNYXRoLmNlaWwocmVzdWx0KTtcclxuICB9XHJcblxyXG4gIGdldE1pbkdsb2JhbFdhbGxIZWlnaHQoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHdhbGxzID0gdGhpcy5fcm9vbVNlcnZpY2Uud2FsbHM7XHJcbiAgICBpZiAoIXdhbGxzKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIC4uLndhbGxzLm1hcCh0aGlzLmdldE1pbldhbGxIZWlnaHQpKTtcclxuICB9XHJcblxyXG4gIHdhbGxzSGVpZ2h0VXBkYXRlZChoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcm9vbVNlcnZpY2UudXBkYXRlV2FsbEhlaWdodHMoaGVpZ2h0KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnd2FsbEhlaWdodCd9KTtcclxuICB9XHJcblxyXG4gIHNldERyYWdnZWQob2JqZWN0OiBNb2RlbEludGVyZmFjZSkge1xyXG4gICAgY29uc3QgZHJhZ2dlZERhdGE6IERyYWdnZWREYXRhID0ge1xyXG4gICAgICBuYW1lOiBvYmplY3QubmFtZSxcclxuICAgICAgdHlwZTogK29iamVjdC50eXBlLFxyXG4gICAgICBpT25lOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0RHJhZywgZHJhZ2dlZERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZURyYWdnZWQoKSB7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkV4aXREcmFnKTtcclxuICB9XHJcblxyXG4gIGxvYWRGbG9vclBsYW4oZGF0YSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubG9hZEZsb29ycGxhbihkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydEFSU2Vzc2lvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgIGNvbnN0IGFyT2JqZWN0ID0gdGhpcy5zZWxlY3RlZE9iamVjdC5jbG9uZVZpc2libGUoKTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFyTW9kZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QoYXJPYmplY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZFRvQ2FydChvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKG9iamVjdC5tZXRhZGF0YSkge1xyXG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgICBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5pbml0Q29ubmVjdG9yKFxyXG4gICAgICAgIG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzID8gb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3MgOiB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncyxcclxuICAgICAgICBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncyA/IG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLm5hbWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MgJiYgb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2VJZCA/IG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLmV4dGVybmFsU291cmNlSWQgOiBudWxsXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3RvclNlcnZpY2UuYWRkVG9DYXJ0KFxyXG4gICAgICAgICtvYmplY3QubWV0YWRhdGEuZ29vZElkLCBvYmplY3QubWV0YWRhdGEuZ29vZFR5cGUsIDEsIG9iamVjdC5tZXRhZGF0YS5pdGVtSWQsICEhKG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzICYmIG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLmV4dGVybmFsU291cmNlSWQpKTtcclxuICAgICAgaWYgKG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxTb3VyY2U6IEV4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZSA9IHtcclxuICAgICAgICAgIGFydGljbGU6IGpzb24sXHJcbiAgICAgICAgICBxdWFudGl0eTogMSxcclxuICAgICAgICAgIGNhdGFsb2dEZWZpbml0aW9uOiBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5jYXRhbG9nRGVmaW5pdGlvbixcclxuICAgICAgICAgIGV4dGVybmFsU291cmNlOiB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5nZXRFeHRlcm5hbFNvdXJjZUZyb21JZChvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZUlkKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmFkZEV4dGVybmFsU291cmNlVG9DYXJ0Lm5leHQoZXh0ZXJuYWxTb3VyY2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hZGRUb0NhcnQubmV4dCh7YXJ0aWNsZToganNvbiwgcXVhbnRpdHk6IDF9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZEl0ZW1zKGRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW1Nb2RlbCBvZiBkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBuZXcgVmVjdG9yMyhpdGVtTW9kZWwueHBvcywgaXRlbU1vZGVsLnlwb3MsIGl0ZW1Nb2RlbC56cG9zKTtcclxuICAgICAgICBjb25zdCBvdmVycmlkZXMgPSB7XHJcbiAgICAgICAgICB3aWR0aDogaXRlbU1vZGVsLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBpdGVtTW9kZWwuaGVpZ2h0LFxyXG4gICAgICAgICAgdGV4dHVyZTogaXRlbU1vZGVsLnRleHR1cmUsXHJcbiAgICAgICAgICByb3RhdGlvbjogbmV3IEV1bGVyKDAsIGl0ZW1Nb2RlbC5yb3RhdGlvbiwgMCksXHJcbiAgICAgICAgICBvcGVuaW5nOiBpdGVtTW9kZWwub3BlbmluZyxcclxuICAgICAgICAgIGZyYW1lQ29sb3I6IGl0ZW1Nb2RlbC5mcmFtZUNvbG9yLFxyXG4gICAgICAgICAgZG9vckNvbG9yOiBpdGVtTW9kZWwuZG9vckNvbG9yLFxyXG4gICAgICAgICAgd2luZG93Q29sb3I6IGl0ZW1Nb2RlbC53aW5kb3dDb2xvcixcclxuICAgICAgICAgIGxvY2tlZDogaXRlbU1vZGVsLmxvY2tlZCxcclxuICAgICAgICAgIGlzR2xhc3M6IGl0ZW1Nb2RlbC5pc0dsYXNzXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBtb2RlbERhdGEgPSBhd2FpdCB0aGlzLm1vZGVsc1NlcnZpY2UuZ2V0KGl0ZW1Nb2RlbC5pdGVtX25hbWUsIG92ZXJyaWRlcyk7XHJcbiAgICAgICAgaWYgKG1vZGVsRGF0YSkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEpzb25JdGVtKG1vZGVsRGF0YSwgcG9zaXRpb24pO1xyXG4gICAgICAgICAgaWYgKGl0ZW1Nb2RlbC5pdGVtR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVhdHRhY2hUb0l0ZW1Hcm91cChpdGVtTW9kZWwuaXRlbUdyb3VwLCBpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgV2FsbEl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvc2VzdFdhbGxFZGdlID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Q2xvc2VzdFdhbGxFZGdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnopO1xyXG4gICAgICAgICAgICBpdGVtLnBsYWNlT25FZGdlKGNsb3Nlc3RXYWxsRWRnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihgVW5hYmxlIHRvIGdldCBtb2RlbCBmb3IgJHtpdGVtTW9kZWwuaXRlbV9uYW1lfSBmcm9tIE1vZGVsc1NlcnZpY2VgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRPYmplY3RzKHtpdGVtcywgZmxvb3JwbGFufSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLmxvYWRJdGVtcyhpdGVtcyksXHJcbiAgICAgIHRoaXMubG9hZEZsb29yUGxhbihmbG9vcnBsYW4pLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weVNjZW5lSW5zdGFuY2Uoc2F2ZUFzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiByZXNvbHZlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2JqZWN0cygpIHtcclxuICAgIGNvbnN0IGl0ZW1zVG9TYXZlID0gdGhpcy5faXRlbVNlcnZpY2UuZ2V0Tm9uRnVybml0dXJlKCkubWFwKGkgPT4gdGhpcy5faXRlbVNlcmlhbGl6YXRpb25TZXJ2aWNlLml0ZW1Ub09iamVjdChpKSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmbG9vcnBsYW46IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uuc2F2ZUZsb29ycGxhbigpLFxyXG4gICAgICBpdGVtczogaXRlbXNUb1NhdmVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBoYXNDdXN0b21PYmplY3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tT2JqZWN0cy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT2JqZWN0TGlicmFyeUNsaWNrKG9iamVjdDogTW9kZWxJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgIHRoaXMucmVsZWFzZURyYWdnZWQoKTtcclxuICAgIHRoaXMuc2V0RHJhZ2dlZChvYmplY3QpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIHt4OiAwLCB5OiAwfSk7XHJcbiAgICBpZiAob2JqZWN0Lm5hbWUgPT09ICdXYWxrdGhyb3VnaCBDYW1lcmEnKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkdyb3VwQ2xpY2soKSB7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkdyb3VwT2JqZWN0cyk7XHJcbiAgICB0aGlzLnVzZXJJc0dyb3VwaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEdyb3VwU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySXNHcm91cGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5DYW5jZWxHcm91cE9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBvblVuR3JvdXBDbGljaygpIHtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuVW5ncm91cE9iamVjdHMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlQ29udGV4dE1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0R3JvdXBTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlQ29udGV4dE1lbnUoKTtcclxuICAgIHRoaXMudXNlcklzR3JvdXBpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TdGFydEdyb3VwT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kQ29udmVyc2lvblRvVGFnTWFuYWdlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFydGljbGU6IEl0ZW0gfCBJdGVtR3JvdXAgPSB0aGlzLnNlbGVjdGVkT2JqZWN0O1xyXG4gICAgbGV0IGNvbnZlcnNpb25BY3Rpb246IHN0cmluZztcclxuICAgIGlmIChhcnRpY2xlIGluc3RhbmNlb2YgSXRlbSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YS5jb252ZXJzaW9uR1RNU2VuZCkge1xyXG4gICAgICAgIGNvbnZlcnNpb25BY3Rpb24gPSAncmVtb3ZlJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hZGRTZWxlY3RlZENsYXNzID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udmVyc2lvbkFjdGlvbiA9ICdhZGQnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuY29udmVyc2lvbkdUTVNlbmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWRDbGFzcyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kUHJvZHVjdENvbnZlcnNpb24oYXJ0aWNsZS5tZXRhZGF0YSwgY29udmVyc2lvbkFjdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYXNTZXR0aW5ncyhpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlzQ3VzdG9tU2hhcGU6IGJvb2xlYW4gPSBpdGVtLm1ldGFkYXRhICYmIChcclxuICAgICAgaXNDdXN0b21TaGFwZVR5cGUoaXRlbS5tZXRhZGF0YS5pdGVtVHlwZSkgfHxcclxuICAgICAgaXNDdXN0b21TaGFwZVdhbGxUeXBlKGl0ZW0ubWV0YWRhdGEuaXRlbVR5cGUpIHx8XHJcbiAgICAgIGlzQ3VzdG9tQ3lsaW5kZXJUeXBlKGl0ZW0ubWV0YWRhdGEuaXRlbVR5cGUpIHx8XHJcbiAgICAgIGlzQ3VzdG9tQ3lsaW5kZXJXYWxsVHlwZShpdGVtLm1ldGFkYXRhLml0ZW1UeXBlKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGhhc0NvbmZpZ3VyYWJsZVRleHR1cmU6IGJvb2xlYW4gPSAhIWl0ZW0gJiYgISEoaXRlbS5tZXRhZGF0YSAmJiBpdGVtLm1ldGFkYXRhLnRleHR1cmUpO1xyXG4gICAgY29uc3QgaGFzT3BlbmluZ0F0dHJpYnV0ZTogYm9vbGVhbiA9ICEhaXRlbSAmJiAhIWl0ZW0ub3BlbmluZztcclxuICAgIGNvbnN0IGlzU2NhbGFibGU6IGJvb2xlYW4gPSAhIWl0ZW0gJiYgISEoaXRlbS5tZXRhZGF0YSAmJiBpdGVtLm1ldGFkYXRhLnNjYWxhYmxlKTtcclxuXHJcbiAgICByZXR1cm4gaXNDdXN0b21TaGFwZSB8fCBoYXNDb25maWd1cmFibGVUZXh0dXJlIHx8IGhhc09wZW5pbmdBdHRyaWJ1dGUgfHwgaXNTY2FsYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzQ29uZmlndXJhYmxlKGl0ZW06IEl0ZW0gfCBJdGVtR3JvdXApOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhKGl0ZW0gaW5zdGFuY2VvZiBJdGVtR3JvdXApICYmICEhaXRlbSAmJiAhIWl0ZW0ubWV0YWRhdGEgJiYgISFpdGVtLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyICYmIGl0ZW0uY29uZmlndXJhYmxlICYmXHJcbiAgICAgICFpdGVtLmFsbHdheXNDb25maWd1cmVNb2RlICYmICFpdGVtLm9ic29sZXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDb252ZXJzaW9uSXRlbShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXRlbS5tZXRhZGF0YS5pb25lKSB7XHJcbiAgICAgIHJldHVybiBpdGVtLm1ldGFkYXRhLmlvbmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0RlbGV0YWJsZShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIShpdGVtIGluc3RhbmNlb2YgUm9vbSB8fCBpdGVtIGluc3RhbmNlb2YgV2FsbCkgJiZcclxuICAgICAgKChpdGVtIGluc3RhbmNlb2YgSXRlbSAmJiBpdGVtLmNhbkRlbGV0ZSkgfHwgIShpdGVtIGluc3RhbmNlb2YgSXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDb3B5YWJsZShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpc05vdFJvb21PcldhbGxPckRlY29yYXRpb246IGJvb2xlYW4gPSAhKGl0ZW0gaW5zdGFuY2VvZiBSb29tIHx8IGl0ZW0gaW5zdGFuY2VvZiBXYWxsIHx8IGl0ZW0gaW5zdGFuY2VvZiBGbG9vclBsYW5lSXRlbSk7XHJcbiAgICBjb25zdCBpc0NvcHlhYmxlSXRlbTogYm9vbGVhbiA9ICgoaXRlbSBpbnN0YW5jZW9mIEl0ZW0gJiYgaXRlbS5jYW5Db3B5ICYmICFpdGVtLm9ic29sZXRlKSB8fCAhKGl0ZW0gaW5zdGFuY2VvZiBJdGVtKSkgJiZcclxuICAgICAgIXRoaXMuX2l0ZW1TZXJ2aWNlLmdldFdhbGt0aHJvdWdoQ2FtZXJhKCk7XHJcbiAgICByZXR1cm4gaXNOb3RSb29tT3JXYWxsT3JEZWNvcmF0aW9uICYmIGlzQ29weWFibGVJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhdHRhY2hUb0l0ZW1Hcm91cChpdGVtR3JvdXAsIG9iamVjdCkge1xyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShvYmplY3QpO1xyXG4gICAgaXRlbUdyb3VwLmFkZEl0ZW0ob2JqZWN0KTtcclxuICAgIGl0ZW1Hcm91cC5jcmVhdGVCb3VuZGFyeUJveCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgY2FzZSBLZXkuQzpcclxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlICE9PSBWaWV3TW9kZS5GbG9vclBsYW4yRCAmJiAhdGhpcy5fdGV4dElucHV0QWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TaG93UHJvZHVjdENhdGFsb2cpO1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEtleS5BOlxyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlICE9PSBudWxsICYmIHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlID09PSB0aGlzLmNhdGVnb3JpZXNTaWRlYmFyKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgICAgICAgIC8vICAgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgPSBudWxsO1xyXG4gICAgICAgICAgLy8gfSBlbHNlXHJcbiAgICAgICAgICBpZiAodGhpcy5fbW9kZSAhPT0gVmlld01vZGUuRmxvb3JQbGFuMkQgJiYgIXRoaXMuX2NhdGFsb2dJc1Nob3duICYmICF0aGlzLl90ZXh0SW5wdXRBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dMaWJyYXJ5Q2F0ZWdvcmllcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBLZXkuVjpcclxuICAgICAgICAgIGlmICghdGhpcy5fY2F0YWxvZ0lzU2hvd24gJiYgIXRoaXMuX3RleHRJbnB1dEFjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlID09PSBWaWV3TW9kZS5Sb29tUGxhbjNEKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLkZsb29yUGxhbjJELCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuUm9vbVBsYW4zRCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgS2V5LkVzYzpcclxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlICE9PSBWaWV3TW9kZS5GbG9vclBsYW4yRCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90ZXh0SW5wdXRBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpbnB1dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaW5wdXRzWzBdLnR5cGUgPT09ICd0ZXh0JyAmJiBpbnB1dHNbaV0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldFRocmVlZEF2YWlsYWJsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudGhyZWVkSWNvbkF2YWlsYWJsZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|