@microsoft/windows-admin-center-sdk 4.87.0 → 4.167.0
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/angular/assets/strings/cs-CZ/strings.json +1 -1
- package/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/fr-FR/strings.json +1 -1
- package/angular/assets/strings/hu-HU/strings.json +1 -1
- package/angular/assets/strings/id-ID/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ja-JP/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pl-PL/strings.json +1 -1
- package/angular/assets/strings/pt-BR/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/ru-RU/strings.json +1 -1
- package/angular/assets/strings/strings.json +1 -1
- package/angular/assets/strings/sv-SE/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/esm2020/src/controls/actions/containers/action-bar/action-bar.component.mjs +2 -2
- package/angular/esm2020/src/controls/actions/containers/action-container.component.mjs +2 -3
- package/angular/esm2020/src/controls/alert-bar/alert-bar.component.mjs +2 -2
- package/angular/esm2020/src/controls/breadcrumb-header/breadcrumb-header.component.mjs +1 -1
- package/angular/esm2020/src/controls/common/base.component.mjs +1 -1
- package/angular/esm2020/src/controls/common/spacer-base.component.mjs +25 -1
- package/angular/esm2020/src/controls/context-menu/context-menu.component.mjs +2 -3
- package/angular/esm2020/src/controls/data-table/data-table.component.mjs +7 -7
- package/angular/esm2020/src/controls/dialog/base-dialog.component.mjs +2 -4
- package/angular/esm2020/src/controls/dialog/confirmation-list-dialog/confirmation-list-dialog.component.mjs +2 -2
- package/angular/esm2020/src/controls/dropdown/dropdown.component.mjs +1 -4
- package/angular/esm2020/src/controls/form/form-field/clock/clock-form-field.component.mjs +10 -7
- package/angular/esm2020/src/controls/form/form-field/form-field.component.mjs +1 -1
- package/angular/esm2020/src/controls/form/form-field/number/number-form-field.component.mjs +22 -4
- package/angular/esm2020/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.mjs +5 -5
- package/angular/esm2020/src/controls/icon/icon-text/icon-text.component.mjs +6 -6
- package/angular/esm2020/src/controls/icon/layered-icon/status/status-icon.component.mjs +1 -1
- package/angular/esm2020/src/controls/layout/editable-layout.component.mjs +2 -3
- package/angular/esm2020/src/controls/node-credentials-form/node-credentials-form.component.mjs +2 -2
- package/angular/esm2020/src/controls/property-grid/property-grid.component.mjs +33 -13
- package/angular/esm2020/src/controls/schema/tabbed-form-loader.component.mjs +2 -2
- package/angular/esm2020/src/controls/settings/common-settings/common-settings.component.mjs +5 -5
- package/angular/esm2020/src/controls/settings/settings-form.directive.mjs +3 -7
- package/angular/esm2020/src/controls/settings/settings-form.service.mjs +2 -4
- package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
- package/angular/esm2020/src/controls/split-view/split-view.component.mjs +2 -2
- package/angular/esm2020/src/directives/router/router-link.directive.mjs +2 -2
- package/angular/esm2020/src/directives/svg/svg.directive.mjs +2 -3
- package/angular/esm2020/src/generated/strings.mjs +1 -1
- package/angular/esm2020/src/service/navigation.service.mjs +3 -8
- package/angular/esm2020/src/service/user-alive.service.mjs +2 -4
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +128 -73
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
- package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +116 -71
- package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
- package/angular/package.json +1 -1
- package/angular/src/controls/common/spacer-base.component.d.ts +11 -2
- package/angular/src/controls/form/form-field/number/number-form-field.component.d.ts +8 -0
- package/angular/src/controls/icon/icon-text/icon-text.component.d.ts +1 -1
- package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -0
- package/angular/src/directives/svg/svg.directive.d.ts +1 -2
- package/angular/src/generated/strings.d.ts +12 -0
- package/core/assets/strings/cs-CZ/strings.json +1 -1
- package/core/assets/strings/es-ES/strings.json +1 -1
- package/core/assets/strings/fr-FR/strings.json +1 -1
- package/core/assets/strings/hu-HU/strings.json +1 -1
- package/core/assets/strings/id-ID/strings.json +1 -1
- package/core/assets/strings/it-IT/strings.json +1 -1
- package/core/assets/strings/ja-JP/strings.json +1 -1
- package/core/assets/strings/ko-KR/strings.json +1 -1
- package/core/assets/strings/pl-PL/strings.json +1 -1
- package/core/assets/strings/pt-BR/strings.json +1 -1
- package/core/assets/strings/pt-PT/strings.json +1 -1
- package/core/assets/strings/ru-RU/strings.json +1 -1
- package/core/assets/strings/sv-SE/strings.json +1 -1
- package/core/assets/strings/tr-TR/strings.json +1 -1
- package/core/assets/strings/zh-CN/strings.json +1 -1
- package/core/assets/strings/zh-TW/strings.json +1 -1
- package/core/azure/azure-constants.d.ts +3 -2
- package/core/azure/azure-constants.d.ts.map +1 -1
- package/core/azure/azure-constants.js +11 -3
- package/core/azure/azure-constants.js.map +1 -1
- package/core/base/utilities.d.ts +3 -3
- package/core/base/utilities.d.ts.map +1 -1
- package/core/base/utilities.js +2 -2
- package/core/base/utilities.js.map +1 -1
- package/core/data/active-directory/active-directory.d.ts.map +1 -1
- package/core/data/active-directory/active-directory.js +1 -1
- package/core/data/active-directory/active-directory.js.map +1 -1
- package/core/data/cookie.d.ts.map +1 -1
- package/core/data/cookie.js +7 -0
- package/core/data/cookie.js.map +1 -1
- package/core/data/gateway-url-translator.d.ts +1 -0
- package/core/data/gateway-url-translator.d.ts.map +1 -1
- package/core/data/gateway-url-translator.js +21 -6
- package/core/data/gateway-url-translator.js.map +1 -1
- package/core/data/gateway-urls.d.ts +6 -0
- package/core/data/gateway-urls.d.ts.map +1 -1
- package/core/data/gateway-urls.js +8 -0
- package/core/data/gateway-urls.js.map +1 -1
- package/core/data/node-connection.d.ts.map +1 -1
- package/core/data/node-connection.js +0 -2
- package/core/data/node-connection.js.map +1 -1
- package/core/generated/powershell-scripts.d.ts.map +1 -1
- package/core/generated/powershell-scripts.js +1 -1
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +38 -16
- package/core/security/tool-condition-validator.d.ts.map +1 -1
- package/core/security/tool-condition-validator.js +5 -5
- package/core/security/tool-condition-validator.js.map +1 -1
- package/core/shared/server-inventory/server-inventory-cache.d.ts.map +1 -1
- package/core/shared/server-inventory/server-inventory-cache.js +1 -1
- package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
- package/core/shared/server-inventory/server-inventory.d.ts +4 -4
- package/core/shared/server-inventory/server-inventory.d.ts.map +1 -1
- package/core/shared/server-inventory/server-inventory.js +2 -2
- package/core/shared/server-inventory/server-inventory.js.map +1 -1
- package/microsoft-windows-admin-center-sdk-4.167.0.tgz +0 -0
- package/package.json +10 -8
- package/styles/css/main-v2.css +1 -1
- package/tools/code-formatter/.eslintrc.base.json +1 -0
- package/tools/code-formatter/lint.d.ts.map +1 -1
- package/tools/code-formatter/lint.js +7 -1
- package/tools/code-formatter/lint.js.map +1 -1
- package/tools/code-formatter/utilities.d.ts +7 -0
- package/tools/code-formatter/utilities.d.ts.map +1 -0
- package/tools/code-formatter/utilities.js +79 -0
- package/tools/code-formatter/utilities.js.map +1 -0
- package/tools/gulp-update-notes-resource/index.d.ts.map +1 -1
- package/tools/gulp-update-notes-resource/index.js +4 -4
- package/tools/gulp-update-notes-resource/index.js.map +1 -1
- package/tools/module-template/.eslintrc.json +3 -0
- package/tools/module-template/build/pipelines/ci-build.yml +2 -2
- package/tools/module-template/gulpfile.ts/common/utilities.ts +1 -0
- package/tools/wac-cli/src/angular15/configs/angular-json-config.d.ts +2 -7
- package/tools/wac-cli/src/angular15/configs/angular-json-config.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/configs/angular-json-config.js +8 -1
- package/tools/wac-cli/src/angular15/configs/angular-json-config.js.map +1 -1
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts +9 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +16 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js.map +1 -0
- package/tools/wac-cli/src/angular15/configs/package-json-config.d.ts +4 -0
- package/tools/wac-cli/src/angular15/configs/package-json-config.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/configs/package-json-config.js +13 -9
- package/tools/wac-cli/src/angular15/configs/package-json-config.js.map +1 -1
- package/tools/wac-cli/src/angular15/main.d.ts +20 -4
- package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/main.js +44 -8
- package/tools/wac-cli/src/angular15/main.js.map +1 -1
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts +18 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +49 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js.map +1 -0
- package/tools/wac-cli/templates/wac-template/package.json +3 -0
|
@@ -372,7 +372,7 @@ export class TabbedFormLoaderComponent extends ObjectPropertySchemaFieldLoaderCo
|
|
|
372
372
|
});
|
|
373
373
|
}
|
|
374
374
|
ngOnDestroy() {
|
|
375
|
-
this.subscriptions.forEach(sub => sub
|
|
375
|
+
this.subscriptions.forEach(sub => sub?.unsubscribe());
|
|
376
376
|
}
|
|
377
377
|
setupSchema(schema) {
|
|
378
378
|
for (let i = 0; i < schema.properties.length; i++) {
|
|
@@ -600,4 +600,4 @@ export class TabbedFormItemController {
|
|
|
600
600
|
});
|
|
601
601
|
}
|
|
602
602
|
}
|
|
603
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiYmVkLWZvcm0tbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NjaGVtYS90YWJiZWQtZm9ybS1sb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2NoZW1hL3RhYmJlZC1mb3JtLWxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0sRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25ILE9BQU8sRUFBeUQsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7O0lDVG5ELGtDQUEyRixhQUFBO0lBQ3RELFlBQWtDO0lBQUEsaUJBQUssRUFBQTs7O0lBQXZDLGVBQWtDO0lBQWxDLGtFQUFrQzs7O0lBVXpELDhCQUN3QztJQUFBLFlBQStCO0lBQUEsaUJBQUs7Ozs7SUFBMUUsNkRBQXFDO0lBQUMsZUFBK0I7SUFBL0IsMkRBQStCOzs7SUFXWiw0QkFDcEI7SUFBQSxpQkFB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UUFDekIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDOUIsT0FBTyxFQUFFLENBQUM7Z0JBQ2QsQ0FBQyxFQUNHLE1BQU0sQ0FBQyxFQUFFO29CQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nT3B0aW9ucyB9IGZyb20gJy4uL2RpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IE9iamVjdFByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQsIFNjaGVtYUZpZWxkSG9zdENvbXBvbmVudCB9IGZyb20gJy4vc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVNjaGVtYSwgU2NoZW1hQXJyYXlQcm9wZXJ0eSwgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTY2hlbWFEYXRhVHlwZVN0b3JlIH0gZnJvbSAnLi9zY2hlbWEtc3RvcmUnO1xyXG5pbXBvcnQgeyBTY2hlbWFVdGlsaXRpZXMgfSBmcm9tICcuL3NjaGVtYS11dGlsaXRpZXMnO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJiZWQtZm9ybS1sb2FkZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJiZWRGb3JtTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgT2JqZWN0UHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIHByaXZhdGUgY2FuY2VsTmV4dFJvdXRlR3VhcmQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICAgIHByaXZhdGUgb3JpZ2luYWxEYXRhOiBGb3JtRGF0YTtcclxuICAgIEBWaWV3Q2hpbGRyZW4oU2NoZW1hRmllbGRIb3N0Q29tcG9uZW50KVxyXG4gICAgZGVjbGFyZSBwcm90ZWN0ZWQgZmllbGRIb3N0Q29tcG9uZW50czogUXVlcnlMaXN0PFNjaGVtYUZpZWxkSG9zdENvbXBvbmVudD47XHJcbiAgICBAVmlld0NoaWxkcmVuKCduYXZMaW5rJylcclxuICAgIHByaXZhdGUgbmF2TGlua0VsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgICBwdWJsaWMgYmFzZVVybDogc3RyaW5nO1xyXG4gICAgcHVibGljIGFjdGl2ZUZvcm1OYW1lOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwcENvbnRleHRTZXJ2aWNlOiBBcHBDb250ZXh0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByZWdpc3RlckRhdGFUeXBlKCkge1xyXG4gICAgICAgIFNjaGVtYURhdGFUeXBlU3RvcmUucmVnaXN0ZXJEYXRhVHlwZSh7XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICd0YWJiZWQtZm9ybScsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSXRcXCdzIGEgc3BlY2lhbCBmb3JtIGZpZWxkIGNvbnRyb2wgdGhhdCByZWN1cnNpdmVseSByZW5kZXJzIGFsbCB0aGUgcHJvcGVydGllcyBhcyBmaWVsZHMuICdcclxuICAgICAgICAgICAgICAgICsgJ1RoaXMgaXMgbGlrZSBhIGNvbnRhaW5lciBvZiBvdGhlciBzY2hlbWEgaXRlbXMuJyxcclxuICAgICAgICAgICAgbG9hZGVyQ29tcG9uZW50OiBUYWJiZWRGb3JtTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBvcHRpb25Qcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5Cb29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2NoZWNrYm94JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc3VwcG9ydFJvdXRlJyxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6U3VwcG9ydCBSb3V0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYUFycmF5UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXksXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnc2ltcGxlLWxpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdncm91cHMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpHcm91cHMnLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtOiA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQ6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlSGVhZGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ2NvbGxhcHNlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkaXNwbGF5TmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOkRpc3BsYXkgTmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2NoZW1hQXJyYXlQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Zvcm1zJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6Rm9ybXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQ6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlSGVhZGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ2NvbGxhcHNlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6TmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVsaW5lOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Rpc3BsYXlOYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6RGlzcGxheSBOYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2ljb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpJY29uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZWxpbmU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdyZXNvdXJjZS1zdHJpbmctcGlja2VyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZUJ1dHRvblRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpTYXZlIGJ1dHRvbiB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNhdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVsaW5lOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Rpc2NhcmRCdXR0b25UZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6RGlzY2FyZCBCdXR0b24gVGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5kaXNjYXJkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlbGluZTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjbG9zZUJ1dHRvblRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpDYW5jZWwgQnV0dG9uIFRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xvc2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVsaW5lOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5Cb29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RvZ2dsZS1zd2l0Y2gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdoaWRlRm9vdGVyQWN0aW9uQnV0dG9uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6SGlkZSBhY3Rpb24gYnV0dG9ucyBpbiBmb290ZXInXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5QnlEZWZhdWx0OiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlCeURlZmF1bHQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBwcmVkZWZpbmVkT2JqZWN0UHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnPGZvcm0gMT4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnPGZvcm0gMj4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnPGZvcm0gMz4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHRhZ3M6IFsnZm9ybS1jb250YWluZXInXVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEJhc2VVcmwoKTtcclxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmluZGV4T2YoJz8nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlVXJsID0gdGhpcy5iYXNlVXJsLnNwbGl0KCc/JylbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZvcm1OYW1lID0gcGFyYW1zLm5hbWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVGb3JtQWN0aW9uKCdzd2l0Y2ggZm9ybScsIHRoaXMuYWN0aXZlRm9ybU5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gU2NoZW1hVXRpbGl0aWVzLmRlZXBDb3B5KHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZm9ybU5hbWUgaW4gdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoZm9ybU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnRGb3JtTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRm9ybUFjdGlvbignaW5pdGlhbGl6ZSBmb3JtJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZTogY3VycmVudEZvcm1OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvblN1Y2NlZWRlZDogKGZvcm1EYXRhKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbY3VycmVudEZvcm1OYW1lXSA9IGZvcm1EYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGFbY3VycmVudEZvcm1OYW1lXSA9IFNjaGVtYVV0aWxpdGllcy5kZWVwQ29weShmb3JtRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWVsZEhvc3RDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50cyA9IHRoaXMuZmllbGRIb3N0Q29tcG9uZW50cy50b0FycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50ID0gZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSBjdXJyZW50Rm9ybU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZEhvc3RDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRIb3N0Q29tcG9uZW50Lm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KShmb3JtTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlRm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2TGlua0VsZW1lbnRzLmZpcnN0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldHVwU2NoZW1hKHNjaGVtYTogRGF0YVNjaGVtYSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZW1hLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXNbaV0uZGlzYWJsZWRDb25kaXRpb24gPSAnZm9ybUNvbnRyb2xsZXIuY29udHJvbGxlci4nICsgc2NoZW1hLnByb3BlcnRpZXNbaV0ubmFtZSArICcuaXNEaXNhYmxlZCc7XHJcbiAgICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzW2ldLm9wdGlvbnMuYnVzeUNvbmRpdGlvbiA9ICdmb3JtQ29udHJvbGxlci5jb250cm9sbGVyLicgKyBzY2hlbWEucHJvcGVydGllc1tpXS5uYW1lICsgJy5pc0J1c3knO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3dpdGNoRm9ybShmb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVGb3JtTmFtZSA9IGZvcm1OYW1lO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUZvcm1BY3Rpb24oJ3N3aXRjaCBmb3JtJywgdGhpcy5hY3RpdmVGb3JtTmFtZSk7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxOZXh0Um91dGVHdWFyZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEZvcm1PcmlnaW5hbERhdGEoZm9ybU5hbWUsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxEYXRhW2Zvcm1OYW1lXSA9IFNjaGVtYVV0aWxpdGllcy5kZWVwQ29weShkYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBpc0Zvcm1CdXN5KGZvcm1OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZvcm1TY2hlbWEgPSBTY2hlbWFVdGlsaXRpZXMuZ2V0UHJvcGVydHlTY2hlbWFCeU5hbWUodGhpcy5wcm9wZXJ0eVNjaGVtYSwgdGhpcy5hY3RpdmVGb3JtTmFtZSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRGb3JtU2NoZW1hICYmIGN1cnJlbnRGb3JtU2NoZW1hLm9wdGlvbnMgJiYgY3VycmVudEZvcm1TY2hlbWEub3B0aW9ucy5idXN5Q29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZXZhbEV4cHJlc3Npb24oY3VycmVudEZvcm1TY2hlbWEub3B0aW9ucy5idXN5Q29uZGl0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5ldmFsRXhwcmVzc2lvbihjdXJyZW50Rm9ybVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNGb3JtRGlydHkoZm9ybU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5maWVsZEhvc3RDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudHMgPSB0aGlzLmZpZWxkSG9zdENvbXBvbmVudHMudG9BcnJheSgpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEhvc3RDb21wb25lbnQgPSBmaWVsZEhvc3RDb21wb25lbnRzLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnR5U2NoZW1hLm5hbWUgPT09IGZvcm1OYW1lKTtcclxuICAgICAgICAgICAgaWYgKGZpZWxkSG9zdENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmllbGRIb3N0Q29tcG9uZW50LmlzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGb290ZXJCdXR0b25IaWRlT3B0aW9uKGZvcm1OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmdyb3Vwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5ncm91cHNbaV0uZm9ybXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuZ3JvdXBzW2ldLmZvcm1zW2pdLm5hbWUgPT09IGZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmdyb3Vwc1tpXS5mb3Jtc1tqXS5oaWRlRm9vdGVyQWN0aW9uQnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEZvb3RlckJ1dHRvblRleHQoZm9ybU5hbWU6IHN0cmluZywgYnV0dG9uOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmdyb3Vwc1tpXS5mb3Jtcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5ncm91cHNbaV0uZm9ybXNbal0ubmFtZSA9PT0gZm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubG9jYWxpemUodGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmdyb3Vwc1tpXS5mb3Jtc1tqXS5zYXZlQnV0dG9uVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGlzY2FyZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvY2FsaXplKHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5ncm91cHNbaV0uZm9ybXNbal0uZGlzY2FyZEJ1dHRvblRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubG9jYWxpemUodGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmdyb3Vwc1tpXS5mb3Jtc1tqXS5jbG9zZUJ1dHRvblRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzRm9ybVZhbGlkKGZvcm1OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGRIb3N0Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEhvc3RDb21wb25lbnRzID0gdGhpcy5maWVsZEhvc3RDb21wb25lbnRzLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50ID0gZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSBmb3JtTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZEhvc3RDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpZWxkSG9zdENvbXBvbmVudC5pc1ZhbGlkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBvblNhdmVDbGljayhmb3JtTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlRm9ybUFjdGlvbignc3VibWl0Jywge1xyXG4gICAgICAgICAgICBmb3JtTmFtZTogZm9ybU5hbWUsXHJcbiAgICAgICAgICAgIG9uU3VjY2VlZGVkOiAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWVsZEhvc3RDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50cyA9IHRoaXMuZmllbGRIb3N0Q29tcG9uZW50cy50b0FycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50ID0gZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSBmb3JtTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkSG9zdENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEhvc3RDb21wb25lbnQubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBvbkRpc2NhcmRDbGljayhmb3JtTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGZvcm1EYXRhT3ZlcnJpZGluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlRm9ybUFjdGlvbigncmVzZXQgZm9ybScsIHtcclxuICAgICAgICAgICAgZm9ybU5hbWU6IGZvcm1OYW1lLFxyXG4gICAgICAgICAgICBvblN1Y2NlZWRlZDogKGZvcm1EYXRhKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3JtRGF0YU92ZXJyaWRpbmcgPSBmb3JtRGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFbZm9ybU5hbWVdID0gZm9ybURhdGFPdmVycmlkaW5nIHx8IFNjaGVtYVV0aWxpdGllcy5kZWVwQ29weSh0aGlzLm9yaWdpbmFsRGF0YVtmb3JtTmFtZV0pO1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkSG9zdENvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50cyA9IHRoaXMuZmllbGRIb3N0Q29tcG9uZW50cy50b0FycmF5KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudCA9IGZpZWxkSG9zdENvbXBvbmVudHMuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydHlTY2hlbWEubmFtZSA9PT0gZm9ybU5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoZmllbGRIb3N0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZEhvc3RDb21wb25lbnQubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBjYW5EZWFjdGl2YXRlKFxyXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxyXG4gICAgICAgIGNvbmZpcm1hdGlvbkRpYWxvZ09wdGlvbnM6IENvbmZpcm1hdGlvbkRpYWxvZ09wdGlvbnNcclxuICAgICk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGNvbnRpbnVlTmF2aWdhdGlvbjogT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbE5leHRSb3V0ZUd1YXJkKSB7XHJcbiAgICAgICAgICAgIGxldCBpc0Zvcm1EaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZvcm1OYW1lIGluIHRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShmb3JtTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Zvcm1EaXJ0eShmb3JtTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNGb3JtRGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzRm9ybURpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZU5hdmlnYXRpb24gPSB0aGlzLmRpYWxvZ1NlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuc2hvd0NvbmZpcm1hdGlvbihjb25maXJtYXRpb25EaWFsb2dPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgaXMgdG8gY29udGludWUgZWRpdGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzY2FyZENoYW5nZXMgPSAhcmVzdWx0LmNvbmZpcm1lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNjYXJkQ2hhbmdlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb250aW51ZU5hdmlnYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsTmV4dFJvdXRlR3VhcmQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRpbnVlTmF2aWdhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DbG9zZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUZvcm1BY3Rpb24oJ2Nsb3NlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRCYXNlVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHJvcGVydHlTY2hlbWEucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgnL2Zvcm0vJyArIHRoaXMucHJvcGVydHlTY2hlbWEucHJvcGVydGllc1tpXS5uYW1lLCAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWNvZGVVUkkocmVzdWx0KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmJlZEZvcm1Db250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBjb250cm9sbGVyOiB7IFtmb3JtTmFtZTogc3RyaW5nXTogVGFiYmVkRm9ybUl0ZW1Db250cm9sbGVyPGFueSwgYW55PiB9ID0ge307XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUYWJiZWRGb3JtSXRlbUNvbnRyb2xsZXI8VERhdGFNb2RlbCwgVFZpZXdNb2RlbD4ge1xyXG4gICAgcHJpdmF0ZSBpc0J1c3lJbnRlcm5hbCA9IHRydWU7XHJcbiAgICBwcml2YXRlIGlzRGlzYWJsZWRJbnRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBhYnN0cmFjdCBsb2FkRGF0YSgpOiBQcm9taXNlPFREYXRhTW9kZWw+O1xyXG4gICAgcHVibGljIGFic3RyYWN0IGNvbnZlcnREYXRhTW9kZWxUb1ZpZXdNb2RlbChkYXRhTW9kZWw6IFREYXRhTW9kZWwpOiBUVmlld01vZGVsO1xyXG4gICAgcHVibGljIGFic3RyYWN0IG1lcmdlVmlld01vZGVsVG9EYXRhTW9kZWwodmlld01vZGVsOiBUVmlld01vZGVsLCBkYXRhTW9kZWw6IFREYXRhTW9kZWwpOiBURGF0YU1vZGVsO1xyXG4gICAgcHVibGljIGFic3RyYWN0IHN1Ym1pdERhdGEoZGF0YU1vZGVsOiBURGF0YU1vZGVsKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHB1YmxpYyBhYnN0cmFjdCBvblNhdmluZyh2aWV3TW9kZWw6IFRWaWV3TW9kZWwpOiB2b2lkO1xyXG4gICAgcHVibGljIGFic3RyYWN0IG9uRmV0Y2hFcnJvcihlcnJvcjogYW55KTogdm9pZDtcclxuICAgIHB1YmxpYyBhYnN0cmFjdCBvblNhdmVFcnJvcihlcnJvcjogYW55KTogdm9pZDtcclxuICAgIHB1YmxpYyBhYnN0cmFjdCBvblNhdmVTdWNjZXNzKHZpZXdNb2RlbDogVFZpZXdNb2RlbCk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGlzQnVzeSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0J1c3lJbnRlcm5hbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkSW50ZXJuYWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXRpYWxpemUoKTogUHJvbWlzZTxUVmlld01vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFRWaWV3TW9kZWw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YSgpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdNb2RlbCA9IHRoaXMuY29udmVydERhdGFNb2RlbFRvVmlld01vZGVsKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQnVzeUludGVybmFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHZpZXdNb2RlbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlRGF0YSh2aWV3TW9kZWw6IFRWaWV3TW9kZWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLm9uU2F2aW5nKHZpZXdNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkSW50ZXJuYWwgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEYXRhTW9kZWwgPSB0aGlzLm1lcmdlVmlld01vZGVsVG9EYXRhTW9kZWwodmlld01vZGVsLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtaXREYXRhKG5ld0RhdGFNb2RlbCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkSW50ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZVN1Y2Nlc3Modmlld01vZGVsKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZEludGVybmFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TYXZlRXJyb3IocmVhc29uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtc2V0dGluZ3Mgc21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1wYWRkaW5nLWJvdHRvbS1sZ1wiPlxyXG4gIDxoZWFkZXIgKm5nSWY9XCJwcm9wZXJ0eVNjaGVtYS5sYWJlbFwiIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtbGF5b3V0LXRvb2wtaGVhZGVyXCI+XHJcbiAgICA8aDMgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lXCI+e3tsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5sYWJlbCl9fTwvaDM+XHJcbiAgPC9oZWFkZXI+XHJcbiAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2Utc3RhY2staCBzbWUtbGF5b3V0LXJlbGF0aXZlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWxheW91dC1hYnNvbHV0ZSBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay1oXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtc2V0dGluZ3MtbmF2aWdhdGlvbiBzbWUtcG9zaXRpb24tZmxleC1ub25lXCI+XHJcbiAgICAgICAgPG5hdiByb2xlPVwidGFibGlzdFwiIGNsYXNzPVwic21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtYXJyYW5nZS1zdGFjay12XCI+XHJcbiAgICAgICAgICA8dWxcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLWFycmFuZ2Utb3ZlcmZsb3ctaGlkZS14IHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8teVwiPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuZ3JvdXBzXCI+XHJcbiAgICAgICAgICAgICAgPG5hdj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInNtZS1tYXJnaW4tdG9wLXhzIHNtZS1tYXJnaW4tYm90dG9tLXhzXCIgKm5nSWY9XCJncm91cC5kaXNwbGF5TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJsb2NhbGl6ZShncm91cC5kaXNwbGF5TmFtZSlcIj57e2xvY2FsaXplKGdyb3VwLmRpc3BsYXlOYW1lKX19PC9oNT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZvcm0gb2YgZ3JvdXAuZm9ybXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhY29udGV4dC5pc0VkaXRvck1vZGUgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5zdXBwb3J0Um91dGVcIiAjbmF2TGlua1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic21lLXBhZGRpbmctc3F1aXNoLXYtc20gc21lLWFycmFuZ2Utc3RhY2staCBzbWUtc2NoZW1lLW5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICByb2xlPVwidGFiXCIgW3RpdGxlXT1cImxvY2FsaXplKGZvcm0uZGlzcGxheU5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJiYXNlVXJsKycvZm9ybS8nK2Zvcm0ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNtZS1hY3RpdmVdPVwiZm9ybS5uYW1lPT09YWN0aXZlRm9ybU5hbWVcIiAoY2xpY2spPVwic3dpdGNoRm9ybShmb3JtLm5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1pY29uIHNtZS1tYXJnaW4tcmlnaHQteHMge3tmb3JtLmljb259fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXMgc21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tsb2NhbGl6ZShmb3JtLmRpc3BsYXlOYW1lKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtd2lkdGgtc20gc21lLXBvc2l0aW9uLWNlbnRlci1oLWlubGluZVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNGb3JtRGlydHkoZm9ybS5uYW1lKVwiPio8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhKCFjb250ZXh0LmlzRWRpdG9yTW9kZSAmJiBwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLnN1cHBvcnRSb3V0ZSlcIiAjbmF2TGlua1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic21lLXBhZGRpbmctc3F1aXNoLXYtc20gc21lLWFycmFuZ2Utc3RhY2staCBzbWUtc2NoZW1lLW5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwibG9jYWxpemUoZm9ybS5kaXNwbGF5TmFtZSlcIiByb2xlPVwidGFiXCIgKGNsaWNrKT1cInN3aXRjaEZvcm0oZm9ybS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNtZS1hY3RpdmVdPVwiZm9ybS5uYW1lPT09YWN0aXZlRm9ybU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21lLWljb24gc21lLW1hcmdpbi1yaWdodC14cyB7e2Zvcm0uaWNvbn19XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpcyBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2xvY2FsaXplKGZvcm0uZGlzcGxheU5hbWUpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS13aWR0aC1zbSBzbWUtcG9zaXRpb24tY2VudGVyLWgtaW5saW5lXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0Zvcm1EaXJ0eShmb3JtLm5hbWUpXCI+Kjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWxheW91dC1yZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lIHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG9cIj5cclxuICAgICAgICAgIDxmb3JtICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiBwcm9wZXJ0eVNjaGVtYS5wcm9wZXJ0aWVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCJhY3RpdmVGb3JtTmFtZSE9PXByb3BlcnR5Lm5hbWVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay12XCI+XHJcbiAgICAgICAgICAgICAgPCEtLSA8c21lLXNjaGVtYS1maWVsZC1ob3N0ICNmaWVsZEhvc3QgW3Byb3BlcnR5U2NoZW1hXT1cInByb3BlcnR5XCIgWyhkYXRhKV09XCJkYXRhW3Byb3BlcnR5Lm5hbWVdXCJcclxuICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIiAoZGF0YU1hcmtlZEFzRGlydHkpPVwibWFya0RhdGFBc0RpcnR5KHByb3BlcnR5Lm5hbWUpXCIgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvXCI+XHJcbiAgICAgICAgPC9zbWUtc2NoZW1hLWZpZWxkLWhvc3Q+IC0tPlxyXG4gICAgICAgICAgICAgIDxzbWUtc2NoZW1hLWZpZWxkLWhvc3QgI2ZpZWxkSG9zdCBbcHJvcGVydHlTY2hlbWFdPVwicHJvcGVydHlcIiBbKGRhdGEpXT1cImRhdGFbcHJvcGVydHkubmFtZV1cIlxyXG4gICAgICAgICAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPlxyXG4gICAgICAgICAgICAgIDwvc21lLXNjaGVtYS1maWVsZC1ob3N0PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZ2V0Rm9vdGVyQnV0dG9uSGlkZU9wdGlvbihwcm9wZXJ0eS5uYW1lKVwiIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJzbWUtYnV0dG9uLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TYXZlQ2xpY2socHJvcGVydHkubmFtZSk7JGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gICAgICAgICAgICAgICAgICBbc21lRGlzYWJsZWRdPVwiIShpc0Zvcm1EaXJ0eShwcm9wZXJ0eS5uYW1lKSAmJiBpc0Zvcm1WYWxpZChwcm9wZXJ0eS5uYW1lKSAmJiAhaXNGb3JtQnVzeShwcm9wZXJ0eS5uYW1lKSlcIj57e2dldEZvb3RlckJ1dHRvblRleHQocHJvcGVydHkubmFtZSwnc2F2ZScpfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkRpc2NhcmRDbGljayhwcm9wZXJ0eS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzbWVEaXNhYmxlZF09XCIhKGlzRm9ybURpcnR5KHByb3BlcnR5Lm5hbWUpICYmICFpc0Zvcm1CdXN5KHByb3BlcnR5Lm5hbWUpKVwiPnt7Z2V0Rm9vdGVyQnV0dG9uVGV4dChwcm9wZXJ0eS5uYW1lLCdkaXNjYXJkJyl9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygpXCI+e3tnZXRGb290ZXJCdXR0b25UZXh0KHByb3BlcnR5Lm5hbWUsJ2Nsb3NlJyl9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
603
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiYmVkLWZvcm0tbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NjaGVtYS90YWJiZWQtZm9ybS1sb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2NoZW1hL3RhYmJlZC1mb3JtLWxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0sRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25ILE9BQU8sRUFBeUQsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7O0lDVG5ELGtDQUEyRixhQUFBO0lBQ3RELFlBQWtDO0lBQUEsaUJBQUssRUFBQTs7O0lBQXZDLGVBQWtDO0lBQWxDLGtFQUFrQzs7O0lBVXpELDhCQUN3QztJQUFBLFlBQStCO0lBQUEsaUJBQUs7Ozs7SUFBMUUsNkRBQXFDO0lBQUMsZUFBK0I7SUFBL0IsMkRBQStCOzs7SUFXWiw0QkFDcEI7SUFBQSxpQkFB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UUFDekIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDOUIsT0FBTyxFQUFFLENBQUM7Z0JBQ2QsQ0FBQyxFQUNHLE1BQU0sQ0FBQyxFQUFFO29CQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nT3B0aW9ucyB9IGZyb20gJy4uL2RpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IE9iamVjdFByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQsIFNjaGVtYUZpZWxkSG9zdENvbXBvbmVudCB9IGZyb20gJy4vc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVNjaGVtYSwgU2NoZW1hQXJyYXlQcm9wZXJ0eSwgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTY2hlbWFEYXRhVHlwZVN0b3JlIH0gZnJvbSAnLi9zY2hlbWEtc3RvcmUnO1xyXG5pbXBvcnQgeyBTY2hlbWFVdGlsaXRpZXMgfSBmcm9tICcuL3NjaGVtYS11dGlsaXRpZXMnO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJiZWQtZm9ybS1sb2FkZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJiZWRGb3JtTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgT2JqZWN0UHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIHByaXZhdGUgY2FuY2VsTmV4dFJvdXRlR3VhcmQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICAgIHByaXZhdGUgb3JpZ2luYWxEYXRhOiBGb3JtRGF0YTtcclxuICAgIEBWaWV3Q2hpbGRyZW4oU2NoZW1hRmllbGRIb3N0Q29tcG9uZW50KVxyXG4gICAgZGVjbGFyZSBwcm90ZWN0ZWQgZmllbGRIb3N0Q29tcG9uZW50czogUXVlcnlMaXN0PFNjaGVtYUZpZWxkSG9zdENvbXBvbmVudD47XHJcbiAgICBAVmlld0NoaWxkcmVuKCduYXZMaW5rJylcclxuICAgIHByaXZhdGUgbmF2TGlua0VsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgICBwdWJsaWMgYmFzZVVybDogc3RyaW5nO1xyXG4gICAgcHVibGljIGFjdGl2ZUZvcm1OYW1lOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwcENvbnRleHRTZXJ2aWNlOiBBcHBDb250ZXh0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByZWdpc3RlckRhdGFUeXBlKCkge1xyXG4gICAgICAgIFNjaGVtYURhdGFUeXBlU3RvcmUucmVnaXN0ZXJEYXRhVHlwZSh7XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICd0YWJiZWQtZm9ybScsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSXRcXCdzIGEgc3BlY2lhbCBmb3JtIGZpZWxkIGNvbnRyb2wgdGhhdCByZWN1cnNpdmVseSByZW5kZXJzIGFsbCB0aGUgcHJvcGVydGllcyBhcyBmaWVsZHMuICdcclxuICAgICAgICAgICAgICAgICsgJ1RoaXMgaXMgbGlrZSBhIGNvbnRhaW5lciBvZiBvdGhlciBzY2hlbWEgaXRlbXMuJyxcclxuICAgICAgICAgICAgbG9hZGVyQ29tcG9uZW50OiBUYWJiZWRGb3JtTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBvcHRpb25Qcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5Cb29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2NoZWNrYm94JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc3VwcG9ydFJvdXRlJyxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6U3VwcG9ydCBSb3V0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYUFycmF5UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXksXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnc2ltcGxlLWxpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdncm91cHMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpHcm91cHMnLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtOiA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQ6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlSGVhZGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ2NvbGxhcHNlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkaXNwbGF5TmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOkRpc3BsYXkgTmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2NoZW1hQXJyYXlQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Zvcm1zJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6Rm9ybXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQ6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlSGVhZGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ2NvbGxhcHNlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6TmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVsaW5lOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Rpc3BsYXlOYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6RGlzcGxheSBOYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2ljb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpJY29uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZWxpbmU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdyZXNvdXJjZS1zdHJpbmctcGlja2VyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZUJ1dHRvblRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpTYXZlIGJ1dHRvbiB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNhdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVsaW5lOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Rpc2NhcmRCdXR0b25UZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6RGlzY2FyZCBCdXR0b24gVGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5kaXNjYXJkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlbGluZTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjbG9zZUJ1dHRvblRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpDYW5jZWwgQnV0dG9uIFRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xvc2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVsaW5lOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5Cb29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RvZ2dsZS1zd2l0Y2gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdoaWRlRm9vdGVyQWN0aW9uQnV0dG9uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6SGlkZSBhY3Rpb24gYnV0dG9ucyBpbiBmb290ZXInXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5QnlEZWZhdWx0OiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlCeURlZmF1bHQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBwcmVkZWZpbmVkT2JqZWN0UHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnPGZvcm0gMT4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnPGZvcm0gMj4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnPGZvcm0gMz4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHRhZ3M6IFsnZm9ybS1jb250YWluZXInXVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEJhc2VVcmwoKTtcclxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmluZGV4T2YoJz8nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlVXJsID0gdGhpcy5iYXNlVXJsLnNwbGl0KCc/JylbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZvcm1OYW1lID0gcGFyYW1zLm5hbWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVGb3JtQWN0aW9uKCdzd2l0Y2ggZm9ybScsIHRoaXMuYWN0aXZlRm9ybU5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gU2NoZW1hVXRpbGl0aWVzLmRlZXBDb3B5KHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZm9ybU5hbWUgaW4gdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoZm9ybU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnRGb3JtTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRm9ybUFjdGlvbignaW5pdGlhbGl6ZSBmb3JtJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZTogY3VycmVudEZvcm1OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvblN1Y2NlZWRlZDogKGZvcm1EYXRhKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbY3VycmVudEZvcm1OYW1lXSA9IGZvcm1EYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGFbY3VycmVudEZvcm1OYW1lXSA9IFNjaGVtYVV0aWxpdGllcy5kZWVwQ29weShmb3JtRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWVsZEhvc3RDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50cyA9IHRoaXMuZmllbGRIb3N0Q29tcG9uZW50cy50b0FycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50ID0gZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSBjdXJyZW50Rm9ybU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZEhvc3RDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRIb3N0Q29tcG9uZW50Lm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KShmb3JtTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlRm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2TGlua0VsZW1lbnRzLmZpcnN0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWI/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXR1cFNjaGVtYShzY2hlbWE6IERhdGFTY2hlbWEpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjaGVtYS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzW2ldLmRpc2FibGVkQ29uZGl0aW9uID0gJ2Zvcm1Db250cm9sbGVyLmNvbnRyb2xsZXIuJyArIHNjaGVtYS5wcm9wZXJ0aWVzW2ldLm5hbWUgKyAnLmlzRGlzYWJsZWQnO1xyXG4gICAgICAgICAgICBzY2hlbWEucHJvcGVydGllc1tpXS5vcHRpb25zLmJ1c3lDb25kaXRpb24gPSAnZm9ybUNvbnRyb2xsZXIuY29udHJvbGxlci4nICsgc2NoZW1hLnByb3BlcnRpZXNbaV0ubmFtZSArICcuaXNCdXN5JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN3aXRjaEZvcm0oZm9ybU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRm9ybU5hbWUgPSBmb3JtTmFtZTtcclxuICAgICAgICB0aGlzLmV4ZWN1dGVGb3JtQWN0aW9uKCdzd2l0Y2ggZm9ybScsIHRoaXMuYWN0aXZlRm9ybU5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsTmV4dFJvdXRlR3VhcmQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRGb3JtT3JpZ2luYWxEYXRhKGZvcm1OYW1lLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YVtmb3JtTmFtZV0gPSBTY2hlbWFVdGlsaXRpZXMuZGVlcENvcHkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNGb3JtQnVzeShmb3JtTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb3JtU2NoZW1hID0gU2NoZW1hVXRpbGl0aWVzLmdldFByb3BlcnR5U2NoZW1hQnlOYW1lKHRoaXMucHJvcGVydHlTY2hlbWEsIHRoaXMuYWN0aXZlRm9ybU5hbWUpO1xyXG4gICAgICAgIGlmIChjdXJyZW50Rm9ybVNjaGVtYSAmJiBjdXJyZW50Rm9ybVNjaGVtYS5vcHRpb25zICYmIGN1cnJlbnRGb3JtU2NoZW1hLm9wdGlvbnMuYnVzeUNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmV2YWxFeHByZXNzaW9uKGN1cnJlbnRGb3JtU2NoZW1hLm9wdGlvbnMuYnVzeUNvbmRpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZXZhbEV4cHJlc3Npb24oY3VycmVudEZvcm1TY2hlbWEuZGlzYWJsZWRDb25kaXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzRm9ybURpcnR5KGZvcm1OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGRIb3N0Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEhvc3RDb21wb25lbnRzID0gdGhpcy5maWVsZEhvc3RDb21wb25lbnRzLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50ID0gZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSBmb3JtTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZEhvc3RDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpZWxkSG9zdENvbXBvbmVudC5pc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Rm9vdGVyQnV0dG9uSGlkZU9wdGlvbihmb3JtTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5ncm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuZ3JvdXBzW2ldLmZvcm1zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmdyb3Vwc1tpXS5mb3Jtc1tqXS5uYW1lID09PSBmb3JtTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5ncm91cHNbaV0uZm9ybXNbal0uaGlkZUZvb3RlckFjdGlvbkJ1dHRvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRGb290ZXJCdXR0b25UZXh0KGZvcm1OYW1lOiBzdHJpbmcsIGJ1dHRvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmdyb3Vwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5ncm91cHNbaV0uZm9ybXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuZ3JvdXBzW2ldLmZvcm1zW2pdLm5hbWUgPT09IGZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChidXR0b24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvY2FsaXplKHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5ncm91cHNbaV0uZm9ybXNbal0uc2F2ZUJ1dHRvblRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2NhcmQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5sb2NhbGl6ZSh0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuZ3JvdXBzW2ldLmZvcm1zW2pdLmRpc2NhcmRCdXR0b25UZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjbG9zZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvY2FsaXplKHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5ncm91cHNbaV0uZm9ybXNbal0uY2xvc2VCdXR0b25UZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBpc0Zvcm1WYWxpZChmb3JtTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkSG9zdENvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRIb3N0Q29tcG9uZW50cyA9IHRoaXMuZmllbGRIb3N0Q29tcG9uZW50cy50b0FycmF5KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudCA9IGZpZWxkSG9zdENvbXBvbmVudHMuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydHlTY2hlbWEubmFtZSA9PT0gZm9ybU5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoZmllbGRIb3N0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmaWVsZEhvc3RDb21wb25lbnQuaXNWYWxpZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25TYXZlQ2xpY2soZm9ybU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUZvcm1BY3Rpb24oJ3N1Ym1pdCcsIHtcclxuICAgICAgICAgICAgZm9ybU5hbWU6IGZvcm1OYW1lLFxyXG4gICAgICAgICAgICBvblN1Y2NlZWRlZDogKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGRIb3N0Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudHMgPSB0aGlzLmZpZWxkSG9zdENvbXBvbmVudHMudG9BcnJheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudCA9IGZpZWxkSG9zdENvbXBvbmVudHMuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydHlTY2hlbWEubmFtZSA9PT0gZm9ybU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZEhvc3RDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRIb3N0Q29tcG9uZW50Lm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25EaXNjYXJkQ2xpY2soZm9ybU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBmb3JtRGF0YU92ZXJyaWRpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUZvcm1BY3Rpb24oJ3Jlc2V0IGZvcm0nLCB7XHJcbiAgICAgICAgICAgIGZvcm1OYW1lOiBmb3JtTmFtZSxcclxuICAgICAgICAgICAgb25TdWNjZWVkZWQ6IChmb3JtRGF0YSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9ybURhdGFPdmVycmlkaW5nID0gZm9ybURhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhW2Zvcm1OYW1lXSA9IGZvcm1EYXRhT3ZlcnJpZGluZyB8fCBTY2hlbWFVdGlsaXRpZXMuZGVlcENvcHkodGhpcy5vcmlnaW5hbERhdGFbZm9ybU5hbWVdKTtcclxuICAgICAgICBpZiAodGhpcy5maWVsZEhvc3RDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudHMgPSB0aGlzLmZpZWxkSG9zdENvbXBvbmVudHMudG9BcnJheSgpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEhvc3RDb21wb25lbnQgPSBmaWVsZEhvc3RDb21wb25lbnRzLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnR5U2NoZW1hLm5hbWUgPT09IGZvcm1OYW1lKTtcclxuICAgICAgICAgICAgaWYgKGZpZWxkSG9zdENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgZmllbGRIb3N0Q29tcG9uZW50Lm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2FuRGVhY3RpdmF0ZShcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICAgICAgICBjb25maXJtYXRpb25EaWFsb2dPcHRpb25zOiBDb25maXJtYXRpb25EaWFsb2dPcHRpb25zXHJcbiAgICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBjb250aW51ZU5hdmlnYXRpb246IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxOZXh0Um91dGVHdWFyZCkge1xyXG4gICAgICAgICAgICBsZXQgaXNGb3JtRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmb3JtTmFtZSBpbiB0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoZm9ybU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGb3JtRGlydHkoZm9ybU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRm9ybURpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0Zvcm1EaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVOYXZpZ2F0aW9uID0gdGhpcy5kaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLnNob3dDb25maXJtYXRpb24oY29uZmlybWF0aW9uRGlhbG9nT3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlIGVkaXRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2NhcmRDaGFuZ2VzID0gIXJlc3VsdC5jb25maXJtZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlzY2FyZENoYW5nZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGludWVOYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbE5leHRSb3V0ZUd1YXJkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiBjb250aW51ZU5hdmlnYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmV4ZWN1dGVGb3JtQWN0aW9uKCdjbG9zZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0QmFzZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnR5U2NoZW1hLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoJy9mb3JtLycgKyB0aGlzLnByb3BlcnR5U2NoZW1hLnByb3BlcnRpZXNbaV0ubmFtZSwgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVjb2RlVVJJKHJlc3VsdCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUYWJiZWRGb3JtQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgY29udHJvbGxlcjogeyBbZm9ybU5hbWU6IHN0cmluZ106IFRhYmJlZEZvcm1JdGVtQ29udHJvbGxlcjxhbnksIGFueT4gfSA9IHt9O1xyXG59XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFiYmVkRm9ybUl0ZW1Db250cm9sbGVyPFREYXRhTW9kZWwsIFRWaWV3TW9kZWw+IHtcclxuICAgIHByaXZhdGUgaXNCdXN5SW50ZXJuYWwgPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBpc0Rpc2FibGVkSW50ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgbG9hZERhdGEoKTogUHJvbWlzZTxURGF0YU1vZGVsPjtcclxuICAgIHB1YmxpYyBhYnN0cmFjdCBjb252ZXJ0RGF0YU1vZGVsVG9WaWV3TW9kZWwoZGF0YU1vZGVsOiBURGF0YU1vZGVsKTogVFZpZXdNb2RlbDtcclxuICAgIHB1YmxpYyBhYnN0cmFjdCBtZXJnZVZpZXdNb2RlbFRvRGF0YU1vZGVsKHZpZXdNb2RlbDogVFZpZXdNb2RlbCwgZGF0YU1vZGVsOiBURGF0YU1vZGVsKTogVERhdGFNb2RlbDtcclxuICAgIHB1YmxpYyBhYnN0cmFjdCBzdWJtaXREYXRhKGRhdGFNb2RlbDogVERhdGFNb2RlbCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBwdWJsaWMgYWJzdHJhY3Qgb25TYXZpbmcodmlld01vZGVsOiBUVmlld01vZGVsKTogdm9pZDtcclxuICAgIHB1YmxpYyBhYnN0cmFjdCBvbkZldGNoRXJyb3IoZXJyb3I6IGFueSk6IHZvaWQ7XHJcbiAgICBwdWJsaWMgYWJzdHJhY3Qgb25TYXZlRXJyb3IoZXJyb3I6IGFueSk6IHZvaWQ7XHJcbiAgICBwdWJsaWMgYWJzdHJhY3Qgb25TYXZlU3VjY2Vzcyh2aWV3TW9kZWw6IFRWaWV3TW9kZWwpOiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyBpc0J1c3koKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNCdXN5SW50ZXJuYWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZEludGVybmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0aWFsaXplKCk6IFByb21pc2U8VFZpZXdNb2RlbD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxUVmlld01vZGVsPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3TW9kZWwgPSB0aGlzLmNvbnZlcnREYXRhTW9kZWxUb1ZpZXdNb2RlbChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0J1c3lJbnRlcm5hbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh2aWV3TW9kZWwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZURhdGEodmlld01vZGVsOiBUVmlld01vZGVsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5vblNhdmluZyh2aWV3TW9kZWwpO1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZEludGVybmFsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0YU1vZGVsID0gdGhpcy5tZXJnZVZpZXdNb2RlbFRvRGF0YU1vZGVsKHZpZXdNb2RlbCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0RGF0YShuZXdEYXRhTW9kZWwpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZEludGVybmFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNhdmVTdWNjZXNzKHZpZXdNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWRJbnRlcm5hbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZUVycm9yKHJlYXNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic21lLXNldHRpbmdzIHNtZS1sYXlvdXQtYWJzb2x1dGUtcGhvbmUtdXAgc21lLXBvc2l0aW9uLWluc2V0LW5vbmUgc21lLWFycmFuZ2Utc3RhY2stdiBzbWUtcGFkZGluZy1ib3R0b20tbGdcIj5cclxuICA8aGVhZGVyICpuZ0lmPVwicHJvcGVydHlTY2hlbWEubGFiZWxcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWxheW91dC10b29sLWhlYWRlclwiPlxyXG4gICAgPGgzIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiPnt7bG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpfX08L2gzPlxyXG4gIDwvaGVhZGVyPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1hcnJhbmdlLXN0YWNrLWggc21lLWxheW91dC1yZWxhdGl2ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1sYXlvdXQtYWJzb2x1dGUgc21lLXBvc2l0aW9uLWluc2V0LW5vbmUgc21lLWFycmFuZ2Utc3RhY2staFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLXNldHRpbmdzLW5hdmlnYXRpb24gc21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiPlxyXG4gICAgICAgIDxuYXYgcm9sZT1cInRhYmxpc3RcIiBjbGFzcz1cInNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWFycmFuZ2Utc3RhY2stdlwiPlxyXG4gICAgICAgICAgPHVsXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUteCBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvLXlcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cCBvZiBwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgIDxuYXY+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJzbWUtbWFyZ2luLXRvcC14cyBzbWUtbWFyZ2luLWJvdHRvbS14c1wiICpuZ0lmPVwiZ3JvdXAuZGlzcGxheU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwibG9jYWxpemUoZ3JvdXAuZGlzcGxheU5hbWUpXCI+e3tsb2NhbGl6ZShncm91cC5kaXNwbGF5TmFtZSl9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmb3JtIG9mIGdyb3VwLmZvcm1zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiIWNvbnRleHQuaXNFZGl0b3JNb2RlICYmIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuc3VwcG9ydFJvdXRlXCIgI25hdkxpbmtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtZS1wYWRkaW5nLXNxdWlzaC12LXNtIHNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXNjaGVtZS1uYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRhYlwiIFt0aXRsZV09XCJsb2NhbGl6ZShmb3JtLmRpc3BsYXlOYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiYmFzZVVybCsnL2Zvcm0vJytmb3JtLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zbWUtYWN0aXZlXT1cImZvcm0ubmFtZT09PWFjdGl2ZUZvcm1OYW1lXCIgKGNsaWNrKT1cInN3aXRjaEZvcm0oZm9ybS5uYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtaWNvbiBzbWUtbWFyZ2luLXJpZ2h0LXhzIHt7Zm9ybS5pY29ufX1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7bG9jYWxpemUoZm9ybS5kaXNwbGF5TmFtZSl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21lLXdpZHRoLXNtIHNtZS1wb3NpdGlvbi1jZW50ZXItaC1pbmxpbmVcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzRm9ybURpcnR5KGZvcm0ubmFtZSlcIj4qPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiISghY29udGV4dC5pc0VkaXRvck1vZGUgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5zdXBwb3J0Um91dGUpXCIgI25hdkxpbmtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtZS1wYWRkaW5nLXNxdWlzaC12LXNtIHNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXNjaGVtZS1uYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImxvY2FsaXplKGZvcm0uZGlzcGxheU5hbWUpXCIgcm9sZT1cInRhYlwiIChjbGljayk9XCJzd2l0Y2hGb3JtKGZvcm0ubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zbWUtYWN0aXZlXT1cImZvcm0ubmFtZT09PWFjdGl2ZUZvcm1OYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1pY29uIHNtZS1tYXJnaW4tcmlnaHQteHMge3tmb3JtLmljb259fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXMgc21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tsb2NhbGl6ZShmb3JtLmRpc3BsYXlOYW1lKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtd2lkdGgtc20gc21lLXBvc2l0aW9uLWNlbnRlci1oLWlubGluZVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNGb3JtRGlydHkoZm9ybS5uYW1lKVwiPio8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1sYXlvdXQtcmVsYXRpdmVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21lLWxheW91dC1hYnNvbHV0ZSBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvXCI+XHJcbiAgICAgICAgICA8Zm9ybSAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgcHJvcGVydHlTY2hlbWEucHJvcGVydGllczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IFtjbGFzcy5zbWUtbGF5b3V0LW5vbmVdPVwiYWN0aXZlRm9ybU5hbWUhPT1wcm9wZXJ0eS5uYW1lXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNtZS1sYXlvdXQtYWJzb2x1dGUtcGhvbmUtdXAgc21lLXBvc2l0aW9uLWluc2V0LW5vbmUgc21lLWFycmFuZ2Utc3RhY2stdlwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gPHNtZS1zY2hlbWEtZmllbGQtaG9zdCAjZmllbGRIb3N0IFtwcm9wZXJ0eVNjaGVtYV09XCJwcm9wZXJ0eVwiIFsoZGF0YSldPVwiZGF0YVtwcm9wZXJ0eS5uYW1lXVwiXHJcbiAgICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCIgKGRhdGFNYXJrZWRBc0RpcnR5KT1cIm1hcmtEYXRhQXNEaXJ0eShwcm9wZXJ0eS5uYW1lKVwiIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPlxyXG4gICAgICAgIDwvc21lLXNjaGVtYS1maWVsZC1ob3N0PiAtLT5cclxuICAgICAgICAgICAgICA8c21lLXNjaGVtYS1maWVsZC1ob3N0ICNmaWVsZEhvc3QgW3Byb3BlcnR5U2NoZW1hXT1cInByb3BlcnR5XCIgWyhkYXRhKV09XCJkYXRhW3Byb3BlcnR5Lm5hbWVdXCJcclxuICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIj5cclxuICAgICAgICAgICAgICA8L3NtZS1zY2hlbWEtZmllbGQtaG9zdD5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWdldEZvb3RlckJ1dHRvbkhpZGVPcHRpb24ocHJvcGVydHkubmFtZSlcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwic21lLWJ1dHRvbi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2F2ZUNsaWNrKHByb3BlcnR5Lm5hbWUpOyRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAgICAgICAgICAgICAgICAgW3NtZURpc2FibGVkXT1cIiEoaXNGb3JtRGlydHkocHJvcGVydHkubmFtZSkgJiYgaXNGb3JtVmFsaWQocHJvcGVydHkubmFtZSkgJiYgIWlzRm9ybUJ1c3kocHJvcGVydHkubmFtZSkpXCI+e3tnZXRGb290ZXJCdXR0b25UZXh0KHByb3BlcnR5Lm5hbWUsJ3NhdmUnKX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25EaXNjYXJkQ2xpY2socHJvcGVydHkubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICBbc21lRGlzYWJsZWRdPVwiIShpc0Zvcm1EaXJ0eShwcm9wZXJ0eS5uYW1lKSAmJiAhaXNGb3JtQnVzeShwcm9wZXJ0eS5uYW1lKSlcIj57e2dldEZvb3RlckJ1dHRvblRleHQocHJvcGVydHkubmFtZSwnZGlzY2FyZCcpfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlQ2xpY2soKVwiPnt7Z2V0Rm9vdGVyQnV0dG9uVGV4dChwcm9wZXJ0eS5uYW1lLCdjbG9zZScpfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -46,8 +46,8 @@ function CommonSettingsComponent_header_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
46
46
|
i0.ɵɵadvance(1);
|
|
47
47
|
i0.ɵɵtextInterpolate(ctx_r0.settingsTitle);
|
|
48
48
|
} }
|
|
49
|
-
function
|
|
50
|
-
i0.ɵɵelementStart(0, "
|
|
49
|
+
function CommonSettingsComponent_li_10_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
51
51
|
i0.ɵɵtext(1);
|
|
52
52
|
i0.ɵɵelementEnd();
|
|
53
53
|
} if (rf & 2) {
|
|
@@ -112,7 +112,7 @@ function CommonSettingsComponent_li_10_a_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
112
112
|
} }
|
|
113
113
|
function CommonSettingsComponent_li_10_Template(rf, ctx) { if (rf & 1) {
|
|
114
114
|
i0.ɵɵelementStart(0, "li", 14);
|
|
115
|
-
i0.ɵɵtemplate(1,
|
|
115
|
+
i0.ɵɵtemplate(1, CommonSettingsComponent_li_10_div_1_Template, 2, 3, "div", 15);
|
|
116
116
|
i0.ɵɵtemplate(2, CommonSettingsComponent_li_10_a_2_Template, 8, 21, "a", 16);
|
|
117
117
|
i0.ɵɵelementEnd();
|
|
118
118
|
} if (rf & 2) {
|
|
@@ -564,7 +564,7 @@ __decorate([
|
|
|
564
564
|
], CommonSettingsComponent.prototype, "onWindowBreakpointChanged", null);
|
|
565
565
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CommonSettingsComponent, [{
|
|
566
566
|
type: Component,
|
|
567
|
-
args: [{ selector: 'sme-common-settings', template: "<sme-settings [settingsTitle]=\"hackToolHeader ? '' : settingsTitle\" [class.sme-settings-external-header]=\"externalHeader\">\r\n <sme-settings-navigation class=\"sme-position-stretch-v-phone-up sme-position-stretch-h\" style=\"min-width: 160px\">\r\n <header class=\"sme-layout-tool-header\" *ngIf=\"hackToolHeader\">\r\n <h2 class=\"sme-position-flex-none sme-font-h3\" [attr.aria-label]=\"settingsTitle\">{{settingsTitle}}</h2>\r\n </header>\r\n <div role=\"region\" [attr.aria-label]=\"settingsTitle\" class=\"sme-position-stretch sme-arrange-stack-v\">\r\n <div class=\"sme-position-flex-none sme-focus-zone\">\r\n <form class=\"sme-margin-squish-v-sm\">\r\n <sme-form-field #searchTextBox type=\"search\" name=\"toolsListSearch\" [(ngModel)]=\"filter\" [placeholder]=\"searchBoxPlaceholder\"\r\n [autofocus]=\"true\" [count]=\"filteredSettings ? filteredSettings.length : 0\"\r\n (search)=\"onSearch()\"></sme-form-field>\r\n </form>\r\n </div>\r\n <nav role=\"tablist\" class=\"sme-arrange-stack-v sme-focus-zone\"\r\n [ngClass]=\"scrollableSecondaryNav ? 'sme-position-flex-auto sme-arrange-overflow-auto-y' : ''\">\r\n <ul class=\"sme-position-flex-auto sme-arrange-stack-v sme-arrange-overflow-hide-x sme-arrange-overflow-auto-y\"\r\n role=\"presentation\">\r\n <li *ngFor=\"let group of groupTools; let j = index\" class=\"sme-margin-inset-none\" role=\"presentation\">\r\n <
|
|
567
|
+
args: [{ selector: 'sme-common-settings', template: "<sme-settings [settingsTitle]=\"hackToolHeader ? '' : settingsTitle\" [class.sme-settings-external-header]=\"externalHeader\">\r\n <sme-settings-navigation class=\"sme-position-stretch-v-phone-up sme-position-stretch-h\" style=\"min-width: 160px\">\r\n <header class=\"sme-layout-tool-header\" *ngIf=\"hackToolHeader\">\r\n <h2 class=\"sme-position-flex-none sme-font-h3\" [attr.aria-label]=\"settingsTitle\">{{settingsTitle}}</h2>\r\n </header>\r\n <div role=\"region\" [attr.aria-label]=\"settingsTitle\" class=\"sme-position-stretch sme-arrange-stack-v\">\r\n <div class=\"sme-position-flex-none sme-focus-zone\">\r\n <form class=\"sme-margin-squish-v-sm\">\r\n <sme-form-field #searchTextBox type=\"search\" name=\"toolsListSearch\" [(ngModel)]=\"filter\" [placeholder]=\"searchBoxPlaceholder\"\r\n [autofocus]=\"true\" [count]=\"filteredSettings ? filteredSettings.length : 0\"\r\n (search)=\"onSearch()\"></sme-form-field>\r\n </form>\r\n </div>\r\n <nav role=\"tablist\" class=\"sme-arrange-stack-v sme-focus-zone\"\r\n [ngClass]=\"scrollableSecondaryNav ? 'sme-position-flex-auto sme-arrange-overflow-auto-y' : ''\">\r\n <ul class=\"sme-position-flex-auto sme-arrange-stack-v sme-arrange-overflow-hide-x sme-arrange-overflow-auto-y\"\r\n role=\"presentation\">\r\n <li *ngFor=\"let group of groupTools; let j = index\" class=\"sme-margin-inset-none\" role=\"presentation\">\r\n <div [id]=\"idBag.group + '-' + j\" class=\"sme-font-h4 sme-font-h4-settings\" *ngIf=\"group.group!==defaultGroup\"\r\n [title]=\"group.group\">{{ group.group }}</div>\r\n <a *ngFor=\"let setting of group.options; let i = index\"\r\n class=\"sme-padding-squish-v-sm sme-arrange-stack-h sme-arrange-stack-centered-v sme-scheme-nav-item\" role=\"tab\"\r\n href=\"setting.routeParams.extras && setting.routeParams.extras.replaceUrl\"\r\n [attr.aria-selected]=\"selectedSetting === setting\"\r\n [routerLink]=\"setting.routeParams.commands\" routerLinkActive=\"sme-active\"\r\n (smeRouterLinkActivated)=\"onSmeRouterLinkActivated(setting)\"\r\n [preserveFragment]=\"setting.routeParams.extras && setting.routeParams.extras.preserveFragment\"\r\n [skipLocationChange]=\"setting.routeParams.extras && setting.routeParams.extras.skipLocationChange\"\r\n [replaceUrl]=\"setting.routeParams.extras && setting.routeParams.extras.replaceUrl\"\r\n [queryParams]=\"setting.routeParams.extras && setting.routeParams.extras.queryParams\"\r\n [title]=\"setting.label\" attr.aria-labelledby=\"{{idBag.option}}-{{j}}-{{i}} {{idBag.group}}-{{j}}\">\r\n <div class=\"sme-margin-right-xs sme-layout-flex sme-position-flex-align-center\">\r\n <div *ngIf=\"setting.smeIconClassName\" class=\"sme-icon\" [ngClass]=\"getSmeIconClass(setting)\"></div>\r\n <div *ngIf=\"setting.urlIcon\" class=\"sme-url-icon\" [style.background-image]=\"setting.urlIcon\"></div>\r\n <div *ngIf=\"!setting.urlIcon && !setting.smeIconClassName\" class=\"sme-url-icon\" [style.background-image]=\"defaultIcon\"></div>\r\n </div>\r\n <div class=\"sme-position-flex-auto\">\r\n <span [id]=\"idBag.option + '-' + j + '-' + i\" [class.sme-dirty]=\"!!(setting.form && setting.form.dirty)\"\r\n [class.sme-pristine]=\"!(setting.form && setting.form.dirty)\" class=\"sme-font-label sme-layout-flex sme-position-flex-align-center\">{{ setting.label }}</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n <div *ngIf=\"hackShowOverlay\">\r\n <div *ngFor=\"let layer of layers\"\r\n class=\"sme-layout-absolute sme-position-inset-none sme-layer-above sme-scheme-backdrop-opaque\"\r\n (click)=\"onOverlayClick(layer)\"></div>\r\n </div>\r\n </sme-settings-navigation>\r\n <sme-settings-header *ngIf=\"!!showHeader\">\r\n <h3 id=\"sme-shell-setting-selectedTitle\" [attr.aria-label]=\"selectedSetting.label\" *ngIf=\"!!selectedSetting\">\r\n {{ selectedSetting.label }}</h3>\r\n </sme-settings-header>\r\n <sme-settings-content>\r\n <router-outlet></router-outlet>\r\n </sme-settings-content>\r\n <sme-settings-footer>\r\n <ng-content></ng-content>\r\n </sme-settings-footer>\r\n</sme-settings>\r\n" }]
|
|
568
568
|
}], function () { return [{ type: i0.Injector }, { type: i1.Router }, { type: i2.SettingsFormService }, { type: i0.IterableDiffers }, { type: i3.AppContextService }, { type: i4.RpcShellService }, { type: undefined, decorators: [{
|
|
569
569
|
type: Optional
|
|
570
570
|
}, {
|
|
@@ -595,4 +595,4 @@ __decorate([
|
|
|
595
595
|
type: ViewChild,
|
|
596
596
|
args: [SettingsComponent]
|
|
597
597
|
}], deferredOnLayoutChanged: [], onLayoutChanged: [], onWindowBreakpointChanged: [] }); })();
|
|
598
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NldHRpbmdzL2NvbW1vbi1zZXR0aW5ncy9jb21tb24tc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2V0dGluZ3MvY29tbW9uLXNldHRpbmdzL2NvbW1vbi1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFFTCxlQUFlLEVBSWYsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBR0gsTUFBTSxFQUVULE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDMUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFHdEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRWhGLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxv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QURuQixTQUFTO21CQUFDLGVBQWU7WUFJbkIsYUFBYTtrQkFEbkIsS0FBSztZQUlDLFFBQVE7a0JBRGQsS0FBSztZQUlDLFVBQVU7a0JBRGhCLEtBQUs7WUFJQyxlQUFlO2tCQURyQixLQUFLO1lBSUMsY0FBYztrQkFEcEIsS0FBSztZQU9DLGtCQUFrQjtrQkFEeEIsS0FBSztZQUlDLFNBQVM7a0JBRGYsS0FBSztZQVVDLHNCQUFzQjtrQkFENUIsS0FBSztZQUlDLGlCQUFpQjtrQkFEdkIsU0FBUzttQkFBQyxpQkFBaUI7WUFxRnBCLHVCQUF1QixNQUt2QixlQUFlLE1BS2YseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBEb0NoZWNrLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIEl0ZXJhYmxlRGlmZmVyLFxyXG4gICAgSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICAgIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBOYXZpZ2F0aW9uRXh0cmFzLFxyXG4gICAgUm91dGVyLFxyXG4gICAgUm91dGVyU3RhdGVTbmFwc2hvdFxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IERlYm91bmNlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMvZGVib3VuY2UuZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgTmV0IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL25ldCc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50TW9kdWxlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9tYW5pZmVzdC9lbnZpcm9ubWVudC1tb2R1bGVzJztcclxuaW1wb3J0IHsgUnBjT3ZlcmxheUNsb3NlQ2xpZW50IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvb3ZlcmxheS9ycGMtb3ZlcmxheS1jbG9zZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBScGNEaWFsb2dPdmVybGF5RGF0YSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL292ZXJsYXkvcnBjLW92ZXJsYXktbW9kZWwnO1xyXG5pbXBvcnQgeyBEZWZlcnJlZERhdGEgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9ycGMnO1xyXG5pbXBvcnQgeyBScGNUeXBlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvcnBjLWJhc2UnO1xyXG5pbXBvcnQgeyBScGNPdXRib3VuZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL3JwYy1vdXRib3VuZCc7XHJcbmltcG9ydCB7IEVNUFRZLCBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUnBjU2hlbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9ycGMtc2hlbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IFNlYXJjaEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm0nO1xyXG5pbXBvcnQgeyBDYW5Db21wb25lbnREZWFjdGl2YXRlIH0gZnJvbSAnLi4vc2V0dGluZ3MtY2FuLWRlYWN0aXZhdGUtZ3VhcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNldHRpbmdzRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXR0aW5ncy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4uL3NldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW0sIENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW1XaXRoRm9ybSB9IGZyb20gJy4vY29tbW9uLXNldHRpbmdzLW5hdmlnYXRpb24taXRlbSc7XHJcbmltcG9ydCB7IFNldHRpbmdzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgfSBmcm9tICcuL3NldHRpbmdzLXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXInO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cFRvb2xzTWVudSB7XHJcbiAgICBncm91cDogc3RyaW5nO1xyXG4gICAgb3B0aW9uczogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb250YWluZXIgYXJvdW5kIHNldHRpbmdzIGNvbXBvbmVudCwgaGFuZGxlcyBjb21tb24gc2V0dGluZ3MgYmVoYXZpb3IuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWNvbW1vbi1zZXR0aW5ncycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uU2V0dGluZ3NDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdDb21tb25TZXR0aW5nc0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBubyBoZWFkZXIgaXMgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LCB0aGUgY29udHJvbCB3aWxsIGRlcGVuZCBvbiBleHRlcm5hbCBoZWFkZXIgYmVpbmcgY3VzdG9taXplZFxyXG4gICAgICogRm9yIGluc3RhbmNlLCBhIGJyZWFkY3J1bWIgaGVhZGVyIGNhbiBiZSB1c2VkLiBBbmQgaW4gdGhpcyBjYXNlLCBubyBleHRyYSBzY3JvbGwgYmFyIGNhbiBiZSByZW5kZXJlZCBvbiBwaG9uZSBkb3duLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXh0ZXJuYWxIZWFkZXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjb21iaW5lZEZvcm06IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0R3JvdXAgPSAnZGVmYXVsdCc7XHJcbiAgICBwdWJsaWMgZ3JvdXBUb29sczogR3JvdXBUb29sc01lbnVbXTtcclxuICAgIHB1YmxpYyBsYXllcnM6IFJwY0RpYWxvZ092ZXJsYXlEYXRhW10gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFNldHRpbmc6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW07XHJcbiAgICBwdWJsaWMgZGVmYXVsdEljb246IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlYXJjaCBib3ggZmlsdGVyLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsdGVyID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWFyY2ggYm94IHBsYWNlaG9sZGVyLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNlYXJjaEJveFBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZmlsdGVyZWRTZXR0aW5nczogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVtdID0gW107XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoVGV4dEJveCcpXHJcbiAgICBwdWJsaWMgc2VhcmNoVGV4dEJveDogU2VhcmNoRm9ybUZpZWxkQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0dGluZ3NUaXRsZTogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0dGluZ3M6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW1bXTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dIZWFkZXIgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGFja1Nob3dPdmVybGF5ID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoYWNrVG9vbEhlYWRlciA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgY29ubmVjdGlvbiBzZXR0aW5ncyBwYWdlLCB0aGUgY29udGVudHMgYXJlIGFsbCBpZnJhbWUsIHNwZWNpYWwgbG9naWMgdG8gZ2V0IHJpZCBvZiB0aGUgZXh0cmEgc2Nyb2xsIGJhciBmb3IgaWZyYW1lLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbm5lY3Rpb25TZXR0aW5ncyA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYmFja1JvdXRlOiB7IGNvbW1hbmRzOiBhbnlbXSwgZXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgdGFiIGxpc3Qgc2hvd2luZyB0aGUgU2V0dGluZ3MgaXRlbXMgaXMgc2Nyb2xsYWJsZSBvciBub3RcclxuICAgICAqIERlZmF1bHQgdG8gdHJ1ZS4gQWxsb3dpbmcgc2VwYXJhdGUgc2Nyb2xsIGJhciBmb3IgdGhlIG5hdmJhciBhbmQgdGhlIHNlbGVjdGVkIFNldHRpbmdzLlxyXG4gICAgICogU2V0IHRvIGZhbHNlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB1c2UgcHJldmlvdXMgYmVoYXZpb3Igd2hlcmUgdGhlcmUgaXNcclxuICAgICAqIG9ubHkgMSBzaW5nbGUgc2Nyb2xsIGJhciBmb3IgYm90aCBuYXZiYXIgYW5kIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIFNldHRpbmdzIGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2Nyb2xsYWJsZVNlY29uZGFyeU5hdiA9IHRydWU7XHJcblxyXG4gICAgQFZpZXdDaGlsZChTZXR0aW5nc0NvbXBvbmVudClcclxuICAgIHB1YmxpYyBzZXR0aW5nc0NvbXBvbmVudDogU2V0dGluZ3NDb21wb25lbnQ7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXRlc3RGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBwcml2YXRlIGxhdGVzdFByaXN0aW5lRm9ybVZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIGxhdGVzdEZvcm1VcGRhdGVWYWx1ZUluQ29tcG9uZW50OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBzZXR0aW5nc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PjtcclxuICAgIHByaXZhdGUgYXV0b2ZvY3VzID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgc2V0dGluZ3NSZXNwb25zaXZlV2luZG93TWFuYWdlcjogU2V0dGluZ3NSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgc2V0dGluZ3NGb3JtczogU2V0dGluZ3NGb3JtU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgICAgIHByaXZhdGUgYXBwQ29udGV4dDogQXBwQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBycGNTaGVsbFNlcnZpY2U6IFJwY1NoZWxsU2VydmljZSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNNRV9MQVlPVVRfUFJPVklERVIpIGxheW91dDogTGF5b3V0XHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5jb21iaW5lZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLnNlYXJjaFBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiAobGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NSZXNwb25zaXZlV2luZG93TWFuYWdlciA9IG5ldyBTZXR0aW5nc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKGxheW91dCk7XHJcbiAgICAgICAgICAgIC8vIG9uIHBhcmVudCBsYXlvdXQgY2hhbmdlcywgcmUtZW1pdCB0aGUgbGF5b3V0IGNoYW5nZSB0byBvdXIgZXZlbnRcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSkpO1xyXG4gICAgICAgICAgICAvLyBvbiB3aW5kb3cgYnJlYWsgcG9pbnQgY2hhbmdlcywgZW1pdCB0aGUgZXZlbnQgYWJvdXQgY3JpdGljYWwgY2xhc3NlcyBhbmQgc3R5bGluZyB1cGRhdGVzIHNpZ25hbC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LndpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NGb3Jtcy5mb3JtQWRkZWQoKS5zdWJzY3JpYmUoKGZvcm1BZGRlZERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGR1cGxpY2F0ZXMgd2UgZmlyc3QgcmVtb3ZlIHRoZSBmb3JtIGlmIGl0IGV4aXN0c1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGb3JtID0gZm9ybUFkZGVkRGF0YS5mb3JtR3JvdXA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdFByaXN0aW5lRm9ybVZhbHVlID0gdGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShmb3JtQWRkZWREYXRhLmZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEZvcm1VcGRhdGVWYWx1ZUluQ29tcG9uZW50ID0gZm9ybUFkZGVkRGF0YS51cGRhdGVWYWx1ZUluQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUFjdGl2ZVBhbmVsKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5zZXR0aW5ncykuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBY3RpdmVQYW5lbCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oYWNrU2hvd092ZXJsYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJwY1NoZWxsU2VydmljZS5vdmVybGF5T3BlblN1YmplY3Quc3Vic2NyaWJlKChkZWZlcnJlZERhdGE6IERlZmVycmVkRGF0YTxScGNEaWFsb2dPdmVybGF5RGF0YSwgdm9pZD4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBvdmVybGF5IHRvb2xzIHdpdGggb25lIG1vcmUgbGF5ZXIgb3IgcmVtb3ZlIG9uZSBmcm9tIHRvcFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZERhdGEuZGF0YS5vdmVybGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzLnB1c2goZGVmZXJyZWREYXRhLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JwYyBPdmVybGF5Q2xvc2U6IGNsb3NlIHJlcXVlc3QgaXMgY2FsbGVkIHdoaWxlIGxheWVyIGlzIG5vIGxvbmdlciBhdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWREYXRhLmRlZmVycmVkLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2hvd0hlYWRlciAmJiAhdGhpcy5oYWNrVG9vbEhlYWRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsSGVhZGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SWNvbiA9IEVudmlyb25tZW50TW9kdWxlLmdldEZvcm1hdHRlZEljb25SZWZVcmwoJy9hc3NldHMvaWNvbnMvZGVmYXVsdC5zdmc/dj0xJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBpZiAoY2hhbmdlcy5zZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLnNldHRpbmdzKS5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3JlYXRlTWVudSgpO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBY3RpdmVQYW5lbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmVycmVkIGxheW91dCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwcml2YXRlIGRlZmVycmVkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgb25MYXlvdXRDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NSZXNwb25zaXZlV2luZG93TWFuYWdlci5zZXRJZnJhbWVIZWlnaHQodGhpcy5jb25uZWN0aW9uU2V0dGluZ3MsIHRoaXMuaG9zdEVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIG9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhvc3RFbGVtZW50IHx8ICF0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLm9uV2luZG93U2l6ZUNoYW5nZWRDb21tb25TZXR0aW5ncyh0aGlzLmNvbm5lY3Rpb25TZXR0aW5ncywgdGhpcy5ob3N0RWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcclxuICAgICAgICBzdXBlci5uZ0RvQ2hlY2soKTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0RpZmZlcikge1xyXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5zZXR0aW5nc0RpZmZlci5kaWZmKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVNZW51KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9jdXNFbGVtZW50cyA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cInRhYlwiXScpO1xyXG4gICAgICAgICAgICBpZiAoZm9jdXNFbGVtZW50cyAmJiBmb2N1c0VsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgZm9jdXNFbGVtZW50c1swXS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvZm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0dGluZyBUaXRsZSBoZWFkZXIgaXMgbWFuYWdlZCBieSBjaGlsZCBjb21wb25lbnQgdGhpcy5zZXR0aW5nc0NvbXBvbmVudCxcclxuICAgICAgICAvLyBhZnRlciBjdXJyZW50IHZpZXcgYW5kIGNoaWxkIHZpZXcgaGFzIGJlZW4gcmVuZGVyZWQsIHBhc3MgYWxvbmcgdGhlIHNlbGVjdGVkU2V0dGluZ1xyXG4gICAgICAgIC8vIHN0cmluZyBpZiBpdCBleGlzdHMgc28gY2hpbGQgdmlldyB3aWxsIHJlbmRlciB0aGUgdGl0bGVcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNldHRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNtZVJvdXRlckxpbmtBY3RpdmF0ZWQodGhpcy5zZWxlY3RlZFNldHRpbmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlTWVudSgpIHtcclxuICAgICAgICAvLyBCZWZvcmUgY3JlYXRpbmcgdGhlIFNldHRpbmdzIG1lbnUsIGZpbHRlciB0aGUgU2V0dGluZ3MgbWVudSB0byBvbmx5IGRpc3BsYXlcclxuICAgICAgICAvLyBpdGVtcyB0aGF0IG1hdGNoZXMgdGhlIGZpbHRlclxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZXR0aW5ncyA9IHRoaXMuZmlsdGVyU2V0dGluZygpO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFRvb2xzOiBHcm91cFRvb2xzTWVudVtdID0gW107XHJcbiAgICAgICAgZ3JvdXBUb29sc1snZGVmYXVsdCddID0geyBncm91cDogJ2RlZmF1bHQnLCBvcHRpb25zOiBbXSB9O1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZXR0aW5ncy5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghISFzZXR0aW5nLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cFRvb2xzWydkZWZhdWx0J10ub3B0aW9ucy5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhIWdyb3VwVG9vbHNbc2V0dGluZy5ncm91cF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cFRvb2xzW3NldHRpbmcuZ3JvdXBdID0geyBncm91cDogc2V0dGluZy5ncm91cCwgdGl0bGU6IHNldHRpbmcuZ3JvdXBUaXRsZSwgb3B0aW9uczogW10gfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGdyb3VwVG9vbHNbc2V0dGluZy5ncm91cF0ub3B0aW9ucy5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncm91cFRvb2xzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGdyb3VwVG9vbHMpIHtcclxuICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBUb29scy5wdXNoKGdyb3VwVG9vbHNbcHJvcF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZUFjdGl2ZVBhbmVsKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSA8Q29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtPnRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHNldHRpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nLmZvcm0gJiYgc2V0dGluZy5mb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoc2V0dGluZy5mb3JtKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLnVwZGF0ZVZhbHVlSW5Db21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NGb3Jtcy5uZXdGb3JtVmFsdWUoc2V0dGluZy5mb3JtLCBmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGb3JtLnNldFZhbHVlKGZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0Rm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm1zLnJlbW92ZUZvcm0oc2V0dGluZy5mb3JtKTtcclxuICAgICAgICBzZXR0aW5nLmZvcm0gPSB0aGlzLmxhdGVzdEZvcm07XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nLmZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tYmluZWRGb3JtLmNvbnRyb2xzW3NldHRpbmcubGFiZWxdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5zZXRDb250cm9sKHNldHRpbmcubGFiZWwsIHNldHRpbmcuZm9ybSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5hZGRDb250cm9sKHNldHRpbmcubGFiZWwsIHNldHRpbmcuZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldHRpbmcudXBkYXRlVmFsdWVJbkNvbXBvbmVudCA9IHRoaXMubGF0ZXN0Rm9ybVVwZGF0ZVZhbHVlSW5Db21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2NhcmRBbGxDaGlsZEZvcm1zKCkge1xyXG4gICAgICAgIC8vIEZvciB0aGUgY3VycmVudCBhY3RpdmUgc2V0dGluZywgd2UgbmVlZCB0byByZXNldCB0aGUgZm9ybSB0byBpdHNcclxuICAgICAgICAvLyBvcmlnaW5hbCBwcmlzdGluZSBmb3JtIHdoZW4gZGlzY2FyZGluZyBjaGFuZ2VzXHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2V0dGluZyA9IHRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdXaXRoRm9ybSA9IDxDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0+YWN0aXZlU2V0dGluZztcclxuICAgICAgICBpZiAoc2V0dGluZ1dpdGhGb3JtLmZvcm0pIHtcclxuICAgICAgICAgICAgc2V0dGluZ1dpdGhGb3JtLmZvcm0ucmVzZXQodGhpcy5sYXRlc3RQcmlzdGluZUZvcm1WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzLmZvckVhY2goKG90aGVyU2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3RoZXJTZXR0aW5nICE9PSBhY3RpdmVTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcnNldHRpbmdXaXRoRm9ybSA9IDxDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0+b3RoZXJTZXR0aW5nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm1zLnJlbW92ZUZvcm0ob3RoZXJzZXR0aW5nV2l0aEZvcm0uZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBvdGhlcnNldHRpbmdXaXRoRm9ybS5mb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbWJpbmVkRm9ybS5jb250cm9sc1tvdGhlcnNldHRpbmdXaXRoRm9ybS5sYWJlbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5yZW1vdmVDb250cm9sKG90aGVyc2V0dGluZ1dpdGhGb3JtLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY2NlcHRBbGxDaGlsZEZvcm1zVmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2V0dGluZyA9IHRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9yRWFjaCgoc2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nV2l0aEZvcm0gPSA8Q29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtPnNldHRpbmc7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nV2l0aEZvcm0uZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ1dpdGhGb3JtLmZvcm0ucmVzZXQodGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShzZXR0aW5nV2l0aEZvcm0uZm9ybSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNldHRpbmcgPT09IHNldHRpbmdXaXRoRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0UHJpc3RpbmVGb3JtVmFsdWUgPSB0aGlzLmdldFJhd1ZhbHVlUmVjdXJzaXZlKHNldHRpbmdXaXRoRm9ybS5mb3JtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTbWVJY29uQ2xhc3Moc2V0dGluZzogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IG5nQ2xhc3NQYXJhbWV0ZXIgPSB7fTtcclxuICAgICAgICBpZiAoc2V0dGluZy5zbWVJY29uQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIG5nQ2xhc3NQYXJhbWV0ZXJbc2V0dGluZy5zbWVJY29uQ2xhc3NOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZ0NsYXNzUGFyYW1ldGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5EZWFjdGl2YXRlKFxyXG4gICAgICAgIGNvbXBvbmVudDogQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSxcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQuY2FuRGVhY3RpdmF0ZShjb21wb25lbnQsIHJvdXRlLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtY29tbW9uLXNldHRpbmdzJ1xyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyB0aGUgaWRCYWcgdXNlZCBieSB0aGlzIGNvbXBvbmVudCB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZ3JvdXA6ICcnLFxyXG4gICAgICAgICAgICBvcHRpb246ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25PdmVybGF5Q2xpY2sobGF5ZXI6IFJwY0RpYWxvZ092ZXJsYXlEYXRhKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJScGMgPSB0aGlzLmFwcENvbnRleHQucnBjLnJwY01hbmFnZXIucnBjQ2hhbm5lbC5nZXRScGM8UnBjT3V0Ym91bmQ+KFxyXG4gICAgICAgICAgICBsYXllci5zb3VyY2VOYW1lLFxyXG4gICAgICAgICAgICBsYXllci5zb3VyY2VTdWJOYW1lLFxyXG4gICAgICAgICAgICBScGNUeXBlLk91dGJvdW5kXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmcm9tKFJwY092ZXJsYXlDbG9zZUNsaWVudC5vdmVybGF5Q2xvc2UodGhpcy5hcHBDb250ZXh0LnJwYywgeyBvdmVybGF5OiBmYWxzZSwgZGlhbG9nSWQ6IGxheWVyLmRpYWxvZ0lkIH0sIGxheWVyUnBjKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lm92ZXJsYXlDbG9zZWQgJiYgdGhpcy5sYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmFwcENvbnRleHQubm90aWZpY2F0aW9uLmNyZWF0ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uc2hvd0Vycm9yKHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5PdmVybGF5LmNsb3NlRXJyb3JUaXRsZSwgTmV0LmdldEVycm9yTWVzc2FnZShlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxheWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGNvbnRyb2wgYW5kIGFsbCBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbGx5LFxyXG4gICAgICogaW5jbHVkaW5nIGRpc2FibGVkIGNvbnRyb2xzLlxyXG4gICAgICpcclxuICAgICAqIFdvcmthcm91bmQgZm9yIG1pc3NpbmcgZnVuY3Rpb25hbGl0eSBhZGRlZCBpbiBsYXRlciB2ZXJzaW9ucyBvZiBhbmd1bGFyXHJcbiAgICAgKiBDdXJyZW50bHkgZ2V0UmF3VmFsdWUgb25seSByZXR1cm5zIHRoZSB2YWx1ZSBvZiBodGUgY3VycmVudCBjb250cm9sIGRpc2FibGVkXHJcbiAgICAgKiBjaGlsZHJlbiBidXQgb25seSBlbmFibGVkIGNvbnRyb2xzIG9mIG90aGVyIGRlc2NlbmRhbnRzOlxyXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9jb21taXQvMWVjZTczNjZjOGI2N2YzODdmYmUxM2Y4ZDEyOGMxOWY0YzUwZGQxOVxyXG4gICAgICpcclxuICAgICAqIE9uY2Ugd2UgdXBncmFkZSBhbmd1bGFyIHZlcnNpb24gd2UgY2FuIHJlbW92ZSB0aGlzIGNvZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZvcm1Db250cm9sIFRoZSBmb3JtIGNvbnRyb2wgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0UmF3VmFsdWVSZWN1cnNpdmUoZm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGFueSB7XHJcbiAgICAgICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ge307XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZvcm1Db250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gdGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShmb3JtQ29udHJvbC5jb250cm9sc1trZXldKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1Db250cm9sLmNvbnRyb2xzLm1hcCgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShjb250cm9sKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhpcy5zZWxlY3RlZFNldHRpbmcgdG8gdGhlIG5ld2x5IHNlbGVjdGVkIFNldHRpbmdzIGl0ZW0gd2hlbiB1c2VyIG5hdmlnYXRlIHRvIGEgbmV3IFNldHRpbmdzIGl0ZW1cclxuICAgICAqIEFsc28gY2FsbCB0aGUgY2hpbGQgY29tcG9uZW50IHRoaXMuc2V0dGluZ3NDb21wb25lbnQgdG8gdXBkYXRlIHRoZSBzZXR0aW5nc1RpdGxlIHRvIHJlZmxlY3QgdGhlIHRpdGxlXHJcbiAgICAgKiBvZiB0aGUgbmV3bHkgc2VsZWN0ZWQgU2V0dGluZ3MgaXRlbVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuZXdTZXR0aW5nIFRoZSBuZXdseSBzZWxlY3RlZCBTZXR0aW5ncyBpdGVtXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNtZVJvdXRlckxpbmtBY3RpdmF0ZWQobmV3U2V0dGluZzogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXR0aW5nID0gbmV3U2V0dGluZztcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0NvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzQ29tcG9uZW50LnVwZGF0ZVNlbGVjdGVkU2V0dGluZ1RpdGxlKG5ld1NldHRpbmcubGFiZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLnNldElmcmFtZUhlaWdodCh0aGlzLmNvbm5lY3Rpb25TZXR0aW5ncywgdGhpcy5ob3N0RWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgc2VhcmNoIGZpZWxkXHJcbiAgICAqL1xyXG4gICAgcHVibGljIG9uU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5zZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGaWx0ZXIgb3V0IHRoZSBzZXR0aW5ncyBJdGVtIGJhc2VkIG9uIHRoaXMuZmlsdGVyIHN0cmluZyBhbmQgbWF0Y2ggdGhlIHRpdGxlIG9mIFNldHRpbmdzIEl0ZW1zXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXR0aW5nKCk6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW1bXSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsb2NhbEZpbHRlciA9IHRoaXMuZmlsdGVyLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzZXR0aW5ncy5maWx0ZXIoc2V0dGluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmxhYmVsLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5kZXhPZihsb2NhbEZpbHRlcikgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIG5vdCBtYXRjaCB0aGUgZXhhY3QgdGl0bGUsIG5lZWQgdG8gbWF0Y2ggd2l0aCBrZXl3b3Jkc1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5rZXl3b3Jkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHNldHRpbmcua2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4ga2V5d29yZC5pbmRleE9mKGxvY2FsRmlsdGVyKSA+IC0xKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtc2V0dGluZ3MgW3NldHRpbmdzVGl0bGVdPVwiaGFja1Rvb2xIZWFkZXIgPyAnJyA6IHNldHRpbmdzVGl0bGVcIiBbY2xhc3Muc21lLXNldHRpbmdzLWV4dGVybmFsLWhlYWRlcl09XCJleHRlcm5hbEhlYWRlclwiPlxyXG4gIDxzbWUtc2V0dGluZ3MtbmF2aWdhdGlvbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoLXYtcGhvbmUtdXAgc21lLXBvc2l0aW9uLXN0cmV0Y2gtaFwiIHN0eWxlPVwibWluLXdpZHRoOiAxNjBweFwiPlxyXG4gICAgPGhlYWRlciBjbGFzcz1cInNtZS1sYXlvdXQtdG9vbC1oZWFkZXJcIiAqbmdJZj1cImhhY2tUb29sSGVhZGVyXCI+XHJcbiAgICAgIDxoMiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvbnQtaDNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNldHRpbmdzVGl0bGVcIj57e3NldHRpbmdzVGl0bGV9fTwvaDI+XHJcbiAgICA8L2hlYWRlcj5cclxuICAgIDxkaXYgcm9sZT1cInJlZ2lvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwic2V0dGluZ3NUaXRsZVwiIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2ggc21lLWFycmFuZ2Utc3RhY2stdlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwic21lLW1hcmdpbi1zcXVpc2gtdi1zbVwiPlxyXG4gICAgICAgICAgPHNtZS1mb3JtLWZpZWxkICNzZWFyY2hUZXh0Qm94IHR5cGU9XCJzZWFyY2hcIiBuYW1lPVwidG9vbHNMaXN0U2VhcmNoXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJcIiBbcGxhY2Vob2xkZXJdPVwic2VhcmNoQm94UGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIiBbY291bnRdPVwiZmlsdGVyZWRTZXR0aW5ncyA/IGZpbHRlcmVkU2V0dGluZ3MubGVuZ3RoIDogMFwiXHJcbiAgICAgICAgICAgIChzZWFyY2gpPVwib25TZWFyY2goKVwiPjwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5hdiByb2xlPVwidGFibGlzdFwiIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2stdiBzbWUtZm9jdXMtem9uZVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJzY3JvbGxhYmxlU2Vjb25kYXJ5TmF2ID8gJ3NtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0by15JyA6ICcnXCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUteCBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvLXlcIlxyXG4gICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cFRvb2xzOyBsZXQgaiA9IGluZGV4XCIgY2xhc3M9XCJzbWUtbWFyZ2luLWluc2V0LW5vbmVcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICAgIDxoNCBbaWRdPVwiaWRCYWcuZ3JvdXAgKyAnLScgKyBqXCIgY2xhc3M9XCJzbWUtZm9udC1oNCBzbWUtZm9udC1oNC1zZXR0aW5nc1wiICpuZ0lmPVwiZ3JvdXAuZ3JvdXAhPT1kZWZhdWx0R3JvdXBcIlxyXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJncm91cC5ncm91cFwiPnt7IGdyb3VwLmdyb3VwIH19PC9oND5cclxuICAgICAgICAgICAgPGEgKm5nRm9yPVwibGV0IHNldHRpbmcgb2YgZ3JvdXAub3B0aW9uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzbWUtcGFkZGluZy1zcXVpc2gtdi1zbSBzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1hcnJhbmdlLXN0YWNrLWNlbnRlcmVkLXYgc21lLXNjaGVtZS1uYXYtaXRlbVwiIHJvbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICAgIGhyZWY9XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcyAmJiBzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcy5yZXBsYWNlVXJsXCJcclxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGVkU2V0dGluZyA9PT0gc2V0dGluZ1wiXHJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5jb21tYW5kc1wiIHJvdXRlckxpbmtBY3RpdmU9XCJzbWUtYWN0aXZlXCJcclxuICAgICAgICAgICAgICAoc21lUm91dGVyTGlua0FjdGl2YXRlZCk9XCJvblNtZVJvdXRlckxpbmtBY3RpdmF0ZWQoc2V0dGluZylcIlxyXG4gICAgICAgICAgICAgIFtwcmVzZXJ2ZUZyYWdtZW50XT1cInNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzICYmIHNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzLnByZXNlcnZlRnJhZ21lbnRcIlxyXG4gICAgICAgICAgICAgIFtza2lwTG9jYXRpb25DaGFuZ2VdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMgJiYgc2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlXCJcclxuICAgICAgICAgICAgICBbcmVwbGFjZVVybF09XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcyAmJiBzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcy5yZXBsYWNlVXJsXCJcclxuICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMgJiYgc2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMucXVlcnlQYXJhbXNcIlxyXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJzZXR0aW5nLmxhYmVsXCIgYXR0ci5hcmlhLWxhYmVsbGVkYnk9XCJ7e2lkQmFnLm9wdGlvbn19LXt7an19LXt7aX19IHt7aWRCYWcuZ3JvdXB9fS17e2p9fVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtbWFyZ2luLXJpZ2h0LXhzIHNtZS1sYXlvdXQtZmxleCBzbWUtcG9zaXRpb24tZmxleC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZXR0aW5nLnNtZUljb25DbGFzc05hbWVcIiBjbGFzcz1cInNtZS1pY29uXCIgW25nQ2xhc3NdPVwiZ2V0U21lSWNvbkNsYXNzKHNldHRpbmcpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2V0dGluZy51cmxJY29uXCIgY2xhc3M9XCJzbWUtdXJsLWljb25cIiBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCJzZXR0aW5nLnVybEljb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2V0dGluZy51cmxJY29uICYmICFzZXR0aW5nLnNtZUljb25DbGFzc05hbWVcIiBjbGFzcz1cInNtZS11cmwtaWNvblwiIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cImRlZmF1bHRJY29uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtpZF09XCJpZEJhZy5vcHRpb24gKyAnLScgKyBqICsgJy0nICsgaVwiIFtjbGFzcy5zbWUtZGlydHldPVwiISEoc2V0dGluZy5mb3JtICYmIHNldHRpbmcuZm9ybS5kaXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc21lLXByaXN0aW5lXT1cIiEoc2V0dGluZy5mb3JtICYmIHNldHRpbmcuZm9ybS5kaXJ0eSlcIiBjbGFzcz1cInNtZS1mb250LWxhYmVsIHNtZS1sYXlvdXQtZmxleCBzbWUtcG9zaXRpb24tZmxleC1hbGlnbi1jZW50ZXJcIj57eyBzZXR0aW5nLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbmF2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaGFja1Nob3dPdmVybGF5XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxheWVyIG9mIGxheWVyc1wiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lIHNtZS1sYXllci1hYm92ZSBzbWUtc2NoZW1lLWJhY2tkcm9wLW9wYXF1ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uT3ZlcmxheUNsaWNrKGxheWVyKVwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9zbWUtc2V0dGluZ3MtbmF2aWdhdGlvbj5cclxuICA8c21lLXNldHRpbmdzLWhlYWRlciAqbmdJZj1cIiEhc2hvd0hlYWRlclwiPlxyXG4gICAgPGgzIGlkPVwic21lLXNoZWxsLXNldHRpbmctc2VsZWN0ZWRUaXRsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwic2VsZWN0ZWRTZXR0aW5nLmxhYmVsXCIgKm5nSWY9XCIhIXNlbGVjdGVkU2V0dGluZ1wiPlxyXG4gICAgICB7eyBzZWxlY3RlZFNldHRpbmcubGFiZWwgfX08L2gzPlxyXG4gIDwvc21lLXNldHRpbmdzLWhlYWRlcj5cclxuICA8c21lLXNldHRpbmdzLWNvbnRlbnQ+XHJcbiAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbiAgPC9zbWUtc2V0dGluZ3MtY29udGVudD5cclxuICA8c21lLXNldHRpbmdzLWZvb3Rlcj5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L3NtZS1zZXR0aW5ncy1mb290ZXI+XHJcbjwvc21lLXNldHRpbmdzPlxyXG4iXX0=
|
|
598
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NldHRpbmdzL2NvbW1vbi1zZXR0aW5ncy9jb21tb24tc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2V0dGluZ3MvY29tbW9uLXNldHRpbmdzL2NvbW1vbi1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFFTCxlQUFlLEVBSWYsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBR0gsTUFBTSxFQUVULE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDMUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFHdEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRWhGLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxv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QURuQixTQUFTO21CQUFDLGVBQWU7WUFJbkIsYUFBYTtrQkFEbkIsS0FBSztZQUlDLFFBQVE7a0JBRGQsS0FBSztZQUlDLFVBQVU7a0JBRGhCLEtBQUs7WUFJQyxlQUFlO2tCQURyQixLQUFLO1lBSUMsY0FBYztrQkFEcEIsS0FBSztZQU9DLGtCQUFrQjtrQkFEeEIsS0FBSztZQUlDLFNBQVM7a0JBRGYsS0FBSztZQVVDLHNCQUFzQjtrQkFENUIsS0FBSztZQUlDLGlCQUFpQjtrQkFEdkIsU0FBUzttQkFBQyxpQkFBaUI7WUFxRnBCLHVCQUF1QixNQUt2QixlQUFlLE1BS2YseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBEb0NoZWNrLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIEl0ZXJhYmxlRGlmZmVyLFxyXG4gICAgSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICAgIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBOYXZpZ2F0aW9uRXh0cmFzLFxyXG4gICAgUm91dGVyLFxyXG4gICAgUm91dGVyU3RhdGVTbmFwc2hvdFxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IERlYm91bmNlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMvZGVib3VuY2UuZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgTmV0IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL25ldCc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50TW9kdWxlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9tYW5pZmVzdC9lbnZpcm9ubWVudC1tb2R1bGVzJztcclxuaW1wb3J0IHsgUnBjT3ZlcmxheUNsb3NlQ2xpZW50IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvb3ZlcmxheS9ycGMtb3ZlcmxheS1jbG9zZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBScGNEaWFsb2dPdmVybGF5RGF0YSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL292ZXJsYXkvcnBjLW92ZXJsYXktbW9kZWwnO1xyXG5pbXBvcnQgeyBEZWZlcnJlZERhdGEgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9ycGMnO1xyXG5pbXBvcnQgeyBScGNUeXBlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvcnBjLWJhc2UnO1xyXG5pbXBvcnQgeyBScGNPdXRib3VuZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL3JwYy1vdXRib3VuZCc7XHJcbmltcG9ydCB7IEVNUFRZLCBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUnBjU2hlbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9ycGMtc2hlbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IFNlYXJjaEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm0nO1xyXG5pbXBvcnQgeyBDYW5Db21wb25lbnREZWFjdGl2YXRlIH0gZnJvbSAnLi4vc2V0dGluZ3MtY2FuLWRlYWN0aXZhdGUtZ3VhcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNldHRpbmdzRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXR0aW5ncy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4uL3NldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW0sIENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW1XaXRoRm9ybSB9IGZyb20gJy4vY29tbW9uLXNldHRpbmdzLW5hdmlnYXRpb24taXRlbSc7XHJcbmltcG9ydCB7IFNldHRpbmdzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgfSBmcm9tICcuL3NldHRpbmdzLXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXInO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cFRvb2xzTWVudSB7XHJcbiAgICBncm91cDogc3RyaW5nO1xyXG4gICAgb3B0aW9uczogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb250YWluZXIgYXJvdW5kIHNldHRpbmdzIGNvbXBvbmVudCwgaGFuZGxlcyBjb21tb24gc2V0dGluZ3MgYmVoYXZpb3IuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWNvbW1vbi1zZXR0aW5ncycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uU2V0dGluZ3NDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdDb21tb25TZXR0aW5nc0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBubyBoZWFkZXIgaXMgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LCB0aGUgY29udHJvbCB3aWxsIGRlcGVuZCBvbiBleHRlcm5hbCBoZWFkZXIgYmVpbmcgY3VzdG9taXplZFxyXG4gICAgICogRm9yIGluc3RhbmNlLCBhIGJyZWFkY3J1bWIgaGVhZGVyIGNhbiBiZSB1c2VkLiBBbmQgaW4gdGhpcyBjYXNlLCBubyBleHRyYSBzY3JvbGwgYmFyIGNhbiBiZSByZW5kZXJlZCBvbiBwaG9uZSBkb3duLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXh0ZXJuYWxIZWFkZXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjb21iaW5lZEZvcm06IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0R3JvdXAgPSAnZGVmYXVsdCc7XHJcbiAgICBwdWJsaWMgZ3JvdXBUb29sczogR3JvdXBUb29sc01lbnVbXTtcclxuICAgIHB1YmxpYyBsYXllcnM6IFJwY0RpYWxvZ092ZXJsYXlEYXRhW10gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFNldHRpbmc6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW07XHJcbiAgICBwdWJsaWMgZGVmYXVsdEljb246IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlYXJjaCBib3ggZmlsdGVyLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsdGVyID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWFyY2ggYm94IHBsYWNlaG9sZGVyLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNlYXJjaEJveFBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZmlsdGVyZWRTZXR0aW5nczogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVtdID0gW107XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoVGV4dEJveCcpXHJcbiAgICBwdWJsaWMgc2VhcmNoVGV4dEJveDogU2VhcmNoRm9ybUZpZWxkQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0dGluZ3NUaXRsZTogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0dGluZ3M6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW1bXTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dIZWFkZXIgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGFja1Nob3dPdmVybGF5ID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoYWNrVG9vbEhlYWRlciA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgY29ubmVjdGlvbiBzZXR0aW5ncyBwYWdlLCB0aGUgY29udGVudHMgYXJlIGFsbCBpZnJhbWUsIHNwZWNpYWwgbG9naWMgdG8gZ2V0IHJpZCBvZiB0aGUgZXh0cmEgc2Nyb2xsIGJhciBmb3IgaWZyYW1lLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbm5lY3Rpb25TZXR0aW5ncyA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYmFja1JvdXRlOiB7IGNvbW1hbmRzOiBhbnlbXSwgZXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgdGFiIGxpc3Qgc2hvd2luZyB0aGUgU2V0dGluZ3MgaXRlbXMgaXMgc2Nyb2xsYWJsZSBvciBub3RcclxuICAgICAqIERlZmF1bHQgdG8gdHJ1ZS4gQWxsb3dpbmcgc2VwYXJhdGUgc2Nyb2xsIGJhciBmb3IgdGhlIG5hdmJhciBhbmQgdGhlIHNlbGVjdGVkIFNldHRpbmdzLlxyXG4gICAgICogU2V0IHRvIGZhbHNlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB1c2UgcHJldmlvdXMgYmVoYXZpb3Igd2hlcmUgdGhlcmUgaXNcclxuICAgICAqIG9ubHkgMSBzaW5nbGUgc2Nyb2xsIGJhciBmb3IgYm90aCBuYXZiYXIgYW5kIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIFNldHRpbmdzIGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2Nyb2xsYWJsZVNlY29uZGFyeU5hdiA9IHRydWU7XHJcblxyXG4gICAgQFZpZXdDaGlsZChTZXR0aW5nc0NvbXBvbmVudClcclxuICAgIHB1YmxpYyBzZXR0aW5nc0NvbXBvbmVudDogU2V0dGluZ3NDb21wb25lbnQ7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXRlc3RGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBwcml2YXRlIGxhdGVzdFByaXN0aW5lRm9ybVZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIGxhdGVzdEZvcm1VcGRhdGVWYWx1ZUluQ29tcG9uZW50OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBzZXR0aW5nc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PjtcclxuICAgIHByaXZhdGUgYXV0b2ZvY3VzID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgc2V0dGluZ3NSZXNwb25zaXZlV2luZG93TWFuYWdlcjogU2V0dGluZ3NSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgc2V0dGluZ3NGb3JtczogU2V0dGluZ3NGb3JtU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgICAgIHByaXZhdGUgYXBwQ29udGV4dDogQXBwQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBycGNTaGVsbFNlcnZpY2U6IFJwY1NoZWxsU2VydmljZSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNNRV9MQVlPVVRfUFJPVklERVIpIGxheW91dDogTGF5b3V0XHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5jb21iaW5lZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLnNlYXJjaFBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiAobGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NSZXNwb25zaXZlV2luZG93TWFuYWdlciA9IG5ldyBTZXR0aW5nc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKGxheW91dCk7XHJcbiAgICAgICAgICAgIC8vIG9uIHBhcmVudCBsYXlvdXQgY2hhbmdlcywgcmUtZW1pdCB0aGUgbGF5b3V0IGNoYW5nZSB0byBvdXIgZXZlbnRcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSkpO1xyXG4gICAgICAgICAgICAvLyBvbiB3aW5kb3cgYnJlYWsgcG9pbnQgY2hhbmdlcywgZW1pdCB0aGUgZXZlbnQgYWJvdXQgY3JpdGljYWwgY2xhc3NlcyBhbmQgc3R5bGluZyB1cGRhdGVzIHNpZ25hbC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LndpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NGb3Jtcy5mb3JtQWRkZWQoKS5zdWJzY3JpYmUoKGZvcm1BZGRlZERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGR1cGxpY2F0ZXMgd2UgZmlyc3QgcmVtb3ZlIHRoZSBmb3JtIGlmIGl0IGV4aXN0c1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGb3JtID0gZm9ybUFkZGVkRGF0YS5mb3JtR3JvdXA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdFByaXN0aW5lRm9ybVZhbHVlID0gdGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShmb3JtQWRkZWREYXRhLmZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEZvcm1VcGRhdGVWYWx1ZUluQ29tcG9uZW50ID0gZm9ybUFkZGVkRGF0YS51cGRhdGVWYWx1ZUluQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUFjdGl2ZVBhbmVsKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5zZXR0aW5ncykuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBY3RpdmVQYW5lbCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oYWNrU2hvd092ZXJsYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJwY1NoZWxsU2VydmljZS5vdmVybGF5T3BlblN1YmplY3Quc3Vic2NyaWJlKChkZWZlcnJlZERhdGE6IERlZmVycmVkRGF0YTxScGNEaWFsb2dPdmVybGF5RGF0YSwgdm9pZD4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBvdmVybGF5IHRvb2xzIHdpdGggb25lIG1vcmUgbGF5ZXIgb3IgcmVtb3ZlIG9uZSBmcm9tIHRvcFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZERhdGEuZGF0YS5vdmVybGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzLnB1c2goZGVmZXJyZWREYXRhLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JwYyBPdmVybGF5Q2xvc2U6IGNsb3NlIHJlcXVlc3QgaXMgY2FsbGVkIHdoaWxlIGxheWVyIGlzIG5vIGxvbmdlciBhdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWREYXRhLmRlZmVycmVkLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2hvd0hlYWRlciAmJiAhdGhpcy5oYWNrVG9vbEhlYWRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsSGVhZGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SWNvbiA9IEVudmlyb25tZW50TW9kdWxlLmdldEZvcm1hdHRlZEljb25SZWZVcmwoJy9hc3NldHMvaWNvbnMvZGVmYXVsdC5zdmc/dj0xJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBpZiAoY2hhbmdlcy5zZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLnNldHRpbmdzKS5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3JlYXRlTWVudSgpO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBY3RpdmVQYW5lbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmVycmVkIGxheW91dCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwcml2YXRlIGRlZmVycmVkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgb25MYXlvdXRDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NSZXNwb25zaXZlV2luZG93TWFuYWdlci5zZXRJZnJhbWVIZWlnaHQodGhpcy5jb25uZWN0aW9uU2V0dGluZ3MsIHRoaXMuaG9zdEVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIG9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhvc3RFbGVtZW50IHx8ICF0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLm9uV2luZG93U2l6ZUNoYW5nZWRDb21tb25TZXR0aW5ncyh0aGlzLmNvbm5lY3Rpb25TZXR0aW5ncywgdGhpcy5ob3N0RWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcclxuICAgICAgICBzdXBlci5uZ0RvQ2hlY2soKTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0RpZmZlcikge1xyXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5zZXR0aW5nc0RpZmZlci5kaWZmKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVNZW51KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9jdXNFbGVtZW50cyA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cInRhYlwiXScpO1xyXG4gICAgICAgICAgICBpZiAoZm9jdXNFbGVtZW50cyAmJiBmb2N1c0VsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgZm9jdXNFbGVtZW50c1swXS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvZm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0dGluZyBUaXRsZSBoZWFkZXIgaXMgbWFuYWdlZCBieSBjaGlsZCBjb21wb25lbnQgdGhpcy5zZXR0aW5nc0NvbXBvbmVudCxcclxuICAgICAgICAvLyBhZnRlciBjdXJyZW50IHZpZXcgYW5kIGNoaWxkIHZpZXcgaGFzIGJlZW4gcmVuZGVyZWQsIHBhc3MgYWxvbmcgdGhlIHNlbGVjdGVkU2V0dGluZ1xyXG4gICAgICAgIC8vIHN0cmluZyBpZiBpdCBleGlzdHMgc28gY2hpbGQgdmlldyB3aWxsIHJlbmRlciB0aGUgdGl0bGVcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNldHRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNtZVJvdXRlckxpbmtBY3RpdmF0ZWQodGhpcy5zZWxlY3RlZFNldHRpbmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlTWVudSgpIHtcclxuICAgICAgICAvLyBCZWZvcmUgY3JlYXRpbmcgdGhlIFNldHRpbmdzIG1lbnUsIGZpbHRlciB0aGUgU2V0dGluZ3MgbWVudSB0byBvbmx5IGRpc3BsYXlcclxuICAgICAgICAvLyBpdGVtcyB0aGF0IG1hdGNoZXMgdGhlIGZpbHRlclxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZXR0aW5ncyA9IHRoaXMuZmlsdGVyU2V0dGluZygpO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFRvb2xzOiBHcm91cFRvb2xzTWVudVtdID0gW107XHJcbiAgICAgICAgZ3JvdXBUb29sc1snZGVmYXVsdCddID0geyBncm91cDogJ2RlZmF1bHQnLCBvcHRpb25zOiBbXSB9O1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZXR0aW5ncy5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghISFzZXR0aW5nLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cFRvb2xzWydkZWZhdWx0J10ub3B0aW9ucy5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhIWdyb3VwVG9vbHNbc2V0dGluZy5ncm91cF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cFRvb2xzW3NldHRpbmcuZ3JvdXBdID0geyBncm91cDogc2V0dGluZy5ncm91cCwgdGl0bGU6IHNldHRpbmcuZ3JvdXBUaXRsZSwgb3B0aW9uczogW10gfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGdyb3VwVG9vbHNbc2V0dGluZy5ncm91cF0ub3B0aW9ucy5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncm91cFRvb2xzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGdyb3VwVG9vbHMpIHtcclxuICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBUb29scy5wdXNoKGdyb3VwVG9vbHNbcHJvcF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZUFjdGl2ZVBhbmVsKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSA8Q29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtPnRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHNldHRpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nLmZvcm0gJiYgc2V0dGluZy5mb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoc2V0dGluZy5mb3JtKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLnVwZGF0ZVZhbHVlSW5Db21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NGb3Jtcy5uZXdGb3JtVmFsdWUoc2V0dGluZy5mb3JtLCBmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGb3JtLnNldFZhbHVlKGZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0Rm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm1zLnJlbW92ZUZvcm0oc2V0dGluZy5mb3JtKTtcclxuICAgICAgICBzZXR0aW5nLmZvcm0gPSB0aGlzLmxhdGVzdEZvcm07XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nLmZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tYmluZWRGb3JtLmNvbnRyb2xzW3NldHRpbmcubGFiZWxdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5zZXRDb250cm9sKHNldHRpbmcubGFiZWwsIHNldHRpbmcuZm9ybSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5hZGRDb250cm9sKHNldHRpbmcubGFiZWwsIHNldHRpbmcuZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldHRpbmcudXBkYXRlVmFsdWVJbkNvbXBvbmVudCA9IHRoaXMubGF0ZXN0Rm9ybVVwZGF0ZVZhbHVlSW5Db21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2NhcmRBbGxDaGlsZEZvcm1zKCkge1xyXG4gICAgICAgIC8vIEZvciB0aGUgY3VycmVudCBhY3RpdmUgc2V0dGluZywgd2UgbmVlZCB0byByZXNldCB0aGUgZm9ybSB0byBpdHNcclxuICAgICAgICAvLyBvcmlnaW5hbCBwcmlzdGluZSBmb3JtIHdoZW4gZGlzY2FyZGluZyBjaGFuZ2VzXHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2V0dGluZyA9IHRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdXaXRoRm9ybSA9IDxDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0+YWN0aXZlU2V0dGluZztcclxuICAgICAgICBpZiAoc2V0dGluZ1dpdGhGb3JtLmZvcm0pIHtcclxuICAgICAgICAgICAgc2V0dGluZ1dpdGhGb3JtLmZvcm0ucmVzZXQodGhpcy5sYXRlc3RQcmlzdGluZUZvcm1WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzLmZvckVhY2goKG90aGVyU2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3RoZXJTZXR0aW5nICE9PSBhY3RpdmVTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcnNldHRpbmdXaXRoRm9ybSA9IDxDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0+b3RoZXJTZXR0aW5nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm1zLnJlbW92ZUZvcm0ob3RoZXJzZXR0aW5nV2l0aEZvcm0uZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBvdGhlcnNldHRpbmdXaXRoRm9ybS5mb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbWJpbmVkRm9ybS5jb250cm9sc1tvdGhlcnNldHRpbmdXaXRoRm9ybS5sYWJlbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5yZW1vdmVDb250cm9sKG90aGVyc2V0dGluZ1dpdGhGb3JtLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY2NlcHRBbGxDaGlsZEZvcm1zVmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2V0dGluZyA9IHRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9yRWFjaCgoc2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nV2l0aEZvcm0gPSA8Q29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtPnNldHRpbmc7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nV2l0aEZvcm0uZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ1dpdGhGb3JtLmZvcm0ucmVzZXQodGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShzZXR0aW5nV2l0aEZvcm0uZm9ybSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNldHRpbmcgPT09IHNldHRpbmdXaXRoRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0UHJpc3RpbmVGb3JtVmFsdWUgPSB0aGlzLmdldFJhd1ZhbHVlUmVjdXJzaXZlKHNldHRpbmdXaXRoRm9ybS5mb3JtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTbWVJY29uQ2xhc3Moc2V0dGluZzogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IG5nQ2xhc3NQYXJhbWV0ZXIgPSB7fTtcclxuICAgICAgICBpZiAoc2V0dGluZy5zbWVJY29uQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIG5nQ2xhc3NQYXJhbWV0ZXJbc2V0dGluZy5zbWVJY29uQ2xhc3NOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZ0NsYXNzUGFyYW1ldGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5EZWFjdGl2YXRlKFxyXG4gICAgICAgIGNvbXBvbmVudDogQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSxcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQuY2FuRGVhY3RpdmF0ZShjb21wb25lbnQsIHJvdXRlLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtY29tbW9uLXNldHRpbmdzJ1xyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyB0aGUgaWRCYWcgdXNlZCBieSB0aGlzIGNvbXBvbmVudCB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZ3JvdXA6ICcnLFxyXG4gICAgICAgICAgICBvcHRpb246ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25PdmVybGF5Q2xpY2sobGF5ZXI6IFJwY0RpYWxvZ092ZXJsYXlEYXRhKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJScGMgPSB0aGlzLmFwcENvbnRleHQucnBjLnJwY01hbmFnZXIucnBjQ2hhbm5lbC5nZXRScGM8UnBjT3V0Ym91bmQ+KFxyXG4gICAgICAgICAgICBsYXllci5zb3VyY2VOYW1lLFxyXG4gICAgICAgICAgICBsYXllci5zb3VyY2VTdWJOYW1lLFxyXG4gICAgICAgICAgICBScGNUeXBlLk91dGJvdW5kXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmcm9tKFJwY092ZXJsYXlDbG9zZUNsaWVudC5vdmVybGF5Q2xvc2UodGhpcy5hcHBDb250ZXh0LnJwYywgeyBvdmVybGF5OiBmYWxzZSwgZGlhbG9nSWQ6IGxheWVyLmRpYWxvZ0lkIH0sIGxheWVyUnBjKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lm92ZXJsYXlDbG9zZWQgJiYgdGhpcy5sYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmFwcENvbnRleHQubm90aWZpY2F0aW9uLmNyZWF0ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uc2hvd0Vycm9yKHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5PdmVybGF5LmNsb3NlRXJyb3JUaXRsZSwgTmV0LmdldEVycm9yTWVzc2FnZShlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxheWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGNvbnRyb2wgYW5kIGFsbCBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbGx5LFxyXG4gICAgICogaW5jbHVkaW5nIGRpc2FibGVkIGNvbnRyb2xzLlxyXG4gICAgICpcclxuICAgICAqIFdvcmthcm91bmQgZm9yIG1pc3NpbmcgZnVuY3Rpb25hbGl0eSBhZGRlZCBpbiBsYXRlciB2ZXJzaW9ucyBvZiBhbmd1bGFyXHJcbiAgICAgKiBDdXJyZW50bHkgZ2V0UmF3VmFsdWUgb25seSByZXR1cm5zIHRoZSB2YWx1ZSBvZiBodGUgY3VycmVudCBjb250cm9sIGRpc2FibGVkXHJcbiAgICAgKiBjaGlsZHJlbiBidXQgb25seSBlbmFibGVkIGNvbnRyb2xzIG9mIG90aGVyIGRlc2NlbmRhbnRzOlxyXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9jb21taXQvMWVjZTczNjZjOGI2N2YzODdmYmUxM2Y4ZDEyOGMxOWY0YzUwZGQxOVxyXG4gICAgICpcclxuICAgICAqIE9uY2Ugd2UgdXBncmFkZSBhbmd1bGFyIHZlcnNpb24gd2UgY2FuIHJlbW92ZSB0aGlzIGNvZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZvcm1Db250cm9sIFRoZSBmb3JtIGNvbnRyb2wgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0UmF3VmFsdWVSZWN1cnNpdmUoZm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGFueSB7XHJcbiAgICAgICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ge307XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZvcm1Db250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gdGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShmb3JtQ29udHJvbC5jb250cm9sc1trZXldKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1Db250cm9sLmNvbnRyb2xzLm1hcCgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShjb250cm9sKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhpcy5zZWxlY3RlZFNldHRpbmcgdG8gdGhlIG5ld2x5IHNlbGVjdGVkIFNldHRpbmdzIGl0ZW0gd2hlbiB1c2VyIG5hdmlnYXRlIHRvIGEgbmV3IFNldHRpbmdzIGl0ZW1cclxuICAgICAqIEFsc28gY2FsbCB0aGUgY2hpbGQgY29tcG9uZW50IHRoaXMuc2V0dGluZ3NDb21wb25lbnQgdG8gdXBkYXRlIHRoZSBzZXR0aW5nc1RpdGxlIHRvIHJlZmxlY3QgdGhlIHRpdGxlXHJcbiAgICAgKiBvZiB0aGUgbmV3bHkgc2VsZWN0ZWQgU2V0dGluZ3MgaXRlbVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuZXdTZXR0aW5nIFRoZSBuZXdseSBzZWxlY3RlZCBTZXR0aW5ncyBpdGVtXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNtZVJvdXRlckxpbmtBY3RpdmF0ZWQobmV3U2V0dGluZzogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXR0aW5nID0gbmV3U2V0dGluZztcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0NvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzQ29tcG9uZW50LnVwZGF0ZVNlbGVjdGVkU2V0dGluZ1RpdGxlKG5ld1NldHRpbmcubGFiZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLnNldElmcmFtZUhlaWdodCh0aGlzLmNvbm5lY3Rpb25TZXR0aW5ncywgdGhpcy5ob3N0RWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgc2VhcmNoIGZpZWxkXHJcbiAgICAqL1xyXG4gICAgcHVibGljIG9uU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5zZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGaWx0ZXIgb3V0IHRoZSBzZXR0aW5ncyBJdGVtIGJhc2VkIG9uIHRoaXMuZmlsdGVyIHN0cmluZyBhbmQgbWF0Y2ggdGhlIHRpdGxlIG9mIFNldHRpbmdzIEl0ZW1zXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXR0aW5nKCk6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW1bXSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsb2NhbEZpbHRlciA9IHRoaXMuZmlsdGVyLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzZXR0aW5ncy5maWx0ZXIoc2V0dGluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmxhYmVsLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5kZXhPZihsb2NhbEZpbHRlcikgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIG5vdCBtYXRjaCB0aGUgZXhhY3QgdGl0bGUsIG5lZWQgdG8gbWF0Y2ggd2l0aCBrZXl3b3Jkc1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5rZXl3b3Jkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHNldHRpbmcua2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4ga2V5d29yZC5pbmRleE9mKGxvY2FsRmlsdGVyKSA+IC0xKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtc2V0dGluZ3MgW3NldHRpbmdzVGl0bGVdPVwiaGFja1Rvb2xIZWFkZXIgPyAnJyA6IHNldHRpbmdzVGl0bGVcIiBbY2xhc3Muc21lLXNldHRpbmdzLWV4dGVybmFsLWhlYWRlcl09XCJleHRlcm5hbEhlYWRlclwiPlxyXG4gIDxzbWUtc2V0dGluZ3MtbmF2aWdhdGlvbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoLXYtcGhvbmUtdXAgc21lLXBvc2l0aW9uLXN0cmV0Y2gtaFwiIHN0eWxlPVwibWluLXdpZHRoOiAxNjBweFwiPlxyXG4gICAgPGhlYWRlciBjbGFzcz1cInNtZS1sYXlvdXQtdG9vbC1oZWFkZXJcIiAqbmdJZj1cImhhY2tUb29sSGVhZGVyXCI+XHJcbiAgICAgIDxoMiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvbnQtaDNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNldHRpbmdzVGl0bGVcIj57e3NldHRpbmdzVGl0bGV9fTwvaDI+XHJcbiAgICA8L2hlYWRlcj5cclxuICAgIDxkaXYgcm9sZT1cInJlZ2lvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwic2V0dGluZ3NUaXRsZVwiIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2ggc21lLWFycmFuZ2Utc3RhY2stdlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwic21lLW1hcmdpbi1zcXVpc2gtdi1zbVwiPlxyXG4gICAgICAgICAgPHNtZS1mb3JtLWZpZWxkICNzZWFyY2hUZXh0Qm94IHR5cGU9XCJzZWFyY2hcIiBuYW1lPVwidG9vbHNMaXN0U2VhcmNoXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJcIiBbcGxhY2Vob2xkZXJdPVwic2VhcmNoQm94UGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIiBbY291bnRdPVwiZmlsdGVyZWRTZXR0aW5ncyA/IGZpbHRlcmVkU2V0dGluZ3MubGVuZ3RoIDogMFwiXHJcbiAgICAgICAgICAgIChzZWFyY2gpPVwib25TZWFyY2goKVwiPjwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5hdiByb2xlPVwidGFibGlzdFwiIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2stdiBzbWUtZm9jdXMtem9uZVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJzY3JvbGxhYmxlU2Vjb25kYXJ5TmF2ID8gJ3NtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0by15JyA6ICcnXCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUteCBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvLXlcIlxyXG4gICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cFRvb2xzOyBsZXQgaiA9IGluZGV4XCIgY2xhc3M9XCJzbWUtbWFyZ2luLWluc2V0LW5vbmVcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2lkXT1cImlkQmFnLmdyb3VwICsgJy0nICsgalwiIGNsYXNzPVwic21lLWZvbnQtaDQgc21lLWZvbnQtaDQtc2V0dGluZ3NcIiAqbmdJZj1cImdyb3VwLmdyb3VwIT09ZGVmYXVsdEdyb3VwXCJcclxuICAgICAgICAgICAgICBbdGl0bGVdPVwiZ3JvdXAuZ3JvdXBcIj57eyBncm91cC5ncm91cCB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8YSAqbmdGb3I9XCJsZXQgc2V0dGluZyBvZiBncm91cC5vcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNtZS1wYWRkaW5nLXNxdWlzaC12LXNtIHNtZS1hcnJhbmdlLXN0YWNrLWggc21lLWFycmFuZ2Utc3RhY2stY2VudGVyZWQtdiBzbWUtc2NoZW1lLW5hdi1pdGVtXCIgcm9sZT1cInRhYlwiXHJcbiAgICAgICAgICAgICAgaHJlZj1cInNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzICYmIHNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzLnJlcGxhY2VVcmxcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0ZWRTZXR0aW5nID09PSBzZXR0aW5nXCJcclxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmNvbW1hbmRzXCIgcm91dGVyTGlua0FjdGl2ZT1cInNtZS1hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIChzbWVSb3V0ZXJMaW5rQWN0aXZhdGVkKT1cIm9uU21lUm91dGVyTGlua0FjdGl2YXRlZChzZXR0aW5nKVwiXHJcbiAgICAgICAgICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMgJiYgc2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMucHJlc2VydmVGcmFnbWVudFwiXHJcbiAgICAgICAgICAgICAgW3NraXBMb2NhdGlvbkNoYW5nZV09XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcyAmJiBzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2VcIlxyXG4gICAgICAgICAgICAgIFtyZXBsYWNlVXJsXT1cInNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzICYmIHNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzLnJlcGxhY2VVcmxcIlxyXG4gICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcyAmJiBzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcy5xdWVyeVBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInNldHRpbmcubGFiZWxcIiBhdHRyLmFyaWEtbGFiZWxsZWRieT1cInt7aWRCYWcub3B0aW9ufX0te3tqfX0te3tpfX0ge3tpZEJhZy5ncm91cH19LXt7an19XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1tYXJnaW4tcmlnaHQteHMgc21lLWxheW91dC1mbGV4IHNtZS1wb3NpdGlvbi1mbGV4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNldHRpbmcuc21lSWNvbkNsYXNzTmFtZVwiIGNsYXNzPVwic21lLWljb25cIiBbbmdDbGFzc109XCJnZXRTbWVJY29uQ2xhc3Moc2V0dGluZylcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZXR0aW5nLnVybEljb25cIiBjbGFzcz1cInNtZS11cmwtaWNvblwiIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cInNldHRpbmcudXJsSWNvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzZXR0aW5nLnVybEljb24gJiYgIXNldHRpbmcuc21lSWNvbkNsYXNzTmFtZVwiIGNsYXNzPVwic21lLXVybC1pY29uXCIgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiZGVmYXVsdEljb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lkXT1cImlkQmFnLm9wdGlvbiArICctJyArIGogKyAnLScgKyBpXCIgW2NsYXNzLnNtZS1kaXJ0eV09XCIhIShzZXR0aW5nLmZvcm0gJiYgc2V0dGluZy5mb3JtLmRpcnR5KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zbWUtcHJpc3RpbmVdPVwiIShzZXR0aW5nLmZvcm0gJiYgc2V0dGluZy5mb3JtLmRpcnR5KVwiIGNsYXNzPVwic21lLWZvbnQtbGFiZWwgc21lLWxheW91dC1mbGV4IHNtZS1wb3NpdGlvbi1mbGV4LWFsaWduLWNlbnRlclwiPnt7IHNldHRpbmcubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9uYXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJoYWNrU2hvd092ZXJsYXlcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgbGF5ZXJzXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1sYXlvdXQtYWJzb2x1dGUgc21lLXBvc2l0aW9uLWluc2V0LW5vbmUgc21lLWxheWVyLWFib3ZlIHNtZS1zY2hlbWUtYmFja2Ryb3Atb3BhcXVlXCJcclxuICAgICAgICAoY2xpY2spPVwib25PdmVybGF5Q2xpY2sobGF5ZXIpXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L3NtZS1zZXR0aW5ncy1uYXZpZ2F0aW9uPlxyXG4gIDxzbWUtc2V0dGluZ3MtaGVhZGVyICpuZ0lmPVwiISFzaG93SGVhZGVyXCI+XHJcbiAgICA8aDMgaWQ9XCJzbWUtc2hlbGwtc2V0dGluZy1zZWxlY3RlZFRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWxlY3RlZFNldHRpbmcubGFiZWxcIiAqbmdJZj1cIiEhc2VsZWN0ZWRTZXR0aW5nXCI+XHJcbiAgICAgIHt7IHNlbGVjdGVkU2V0dGluZy5sYWJlbCB9fTwvaDM+XHJcbiAgPC9zbWUtc2V0dGluZ3MtaGVhZGVyPlxyXG4gIDxzbWUtc2V0dGluZ3MtY29udGVudD5cclxuICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuICA8L3NtZS1zZXR0aW5ncy1jb250ZW50PlxyXG4gIDxzbWUtc2V0dGluZ3MtZm9vdGVyPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvc21lLXNldHRpbmdzLWZvb3Rlcj5cclxuPC9zbWUtc2V0dGluZ3M+XHJcbiJdfQ==
|
|
@@ -12,9 +12,7 @@ export class SettingsFormDirective {
|
|
|
12
12
|
}
|
|
13
13
|
ngOnChanges(changes) {
|
|
14
14
|
if (this.smeUpdateDataInComponent && this.smeSettingsForm) {
|
|
15
|
-
|
|
16
|
-
this.updateDataInComponentSubscription.unsubscribe();
|
|
17
|
-
}
|
|
15
|
+
this.updateDataInComponentSubscription?.unsubscribe();
|
|
18
16
|
this.updateDataInComponentSubscription = this.formsService.updateFormValue().subscribe((data) => {
|
|
19
17
|
this.smeSettingsFormValueUpdate.emit(data.formGroupNewData);
|
|
20
18
|
});
|
|
@@ -27,9 +25,7 @@ export class SettingsFormDirective {
|
|
|
27
25
|
}
|
|
28
26
|
}
|
|
29
27
|
ngOnDestroy() {
|
|
30
|
-
|
|
31
|
-
this.updateDataInComponentSubscription.unsubscribe();
|
|
32
|
-
}
|
|
28
|
+
this.updateDataInComponentSubscription?.unsubscribe();
|
|
33
29
|
}
|
|
34
30
|
}
|
|
35
31
|
/** @nocollapse */ SettingsFormDirective.ɵfac = function SettingsFormDirective_Factory(t) { return new (t || SettingsFormDirective)(i0.ɵɵdirectiveInject(i1.SettingsFormService)); };
|
|
@@ -44,4 +40,4 @@ export class SettingsFormDirective {
|
|
|
44
40
|
}], smeSettingsFormValueUpdate: [{
|
|
45
41
|
type: Output
|
|
46
42
|
}] }); })();
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MtZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9zZXR0aW5ncy9zZXR0aW5ncy1mb3JtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXdCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFHOUQsTUFBTSxPQUFPLHFCQUFxQjtJQWE5QixZQUFvQixZQUFpQztRQUFqQyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFYOUMsb0JBQWUsR0FBYyxJQUFJLENBQUM7UUFNbEMsK0JBQTBCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUlyRCxZQUFPLEdBQWMsSUFBSSxDQUFDO0lBQ3dCLENBQUM7SUFFbkQsV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBRXRELElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM1RixJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUMzQyx5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsaUNBQWlDLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDMUQsQ0FBQzs7NkdBbENRLHFCQUFxQjt1R0FBckIscUJBQXFCO3VGQUFyQixxQkFBcUI7Y0FEakMsU0FBUztlQUFDLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFO3NFQUdqQyxlQUFlO2tCQURyQixLQUFLO1lBSUMsd0JBQXdCO2tCQUQ5QixLQUFLO1lBSUMsMEJBQTBCO2tCQURoQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNldHRpbmdzRm9ybVNlcnZpY2UgfSBmcm9tICcuL3NldHRpbmdzLWZvcm0uc2VydmljZSc7XHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbc21lU2V0dGluZ3NGb3JtXScgfSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdzRm9ybURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc21lU2V0dGluZ3NGb3JtOiBGb3JtR3JvdXAgPSBudWxsO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc21lVXBkYXRlRGF0YUluQ29tcG9uZW50OiBib29sZWFuO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNtZVNldHRpbmdzRm9ybVZhbHVlVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVEYXRhSW5Db21wb25lbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBwdWJsaWMgb2xkRm9ybTogRm9ybUdyb3VwID0gbnVsbDtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybXNTZXJ2aWNlOiBTZXR0aW5nc0Zvcm1TZXJ2aWNlKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGlmICh0aGlzLnNtZVVwZGF0ZURhdGFJbkNvbXBvbmVudCAmJiB0aGlzLnNtZVNldHRpbmdzRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFJbkNvbXBvbmVudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YUluQ29tcG9uZW50U3Vic2NyaXB0aW9uID0gdGhpcy5mb3Jtc1NlcnZpY2UudXBkYXRlRm9ybVZhbHVlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtZVNldHRpbmdzRm9ybVZhbHVlVXBkYXRlLmVtaXQoZGF0YS5mb3JtR3JvdXBOZXdEYXRhKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc21lU2V0dGluZ3NGb3JtJykpIHtcclxuICAgICAgICAgICAgLy8gVE9ETzogUmVnaXN0ZXIgdGhlIGZvcm0gaW4gdGhlIHNlcnZpY2VcclxuICAgICAgICAgICAgdGhpcy5mb3Jtc1NlcnZpY2UucmVtb3ZlRm9ybSh0aGlzLm9sZEZvcm0pO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1zU2VydmljZS5hZGRGb3JtKHRoaXMuc21lU2V0dGluZ3NGb3JtLCB0aGlzLnNtZVVwZGF0ZURhdGFJbkNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkRm9ybSA9IHRoaXMuc21lU2V0dGluZ3NGb3JtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhSW5Db21wb25lbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|