@microsoft/windows-admin-center-sdk 2.298.0 → 2.301.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/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/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +239 -568
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -7
- package/angular/esm2015/src/controls/alert-bar/alert-bar.component.js +5 -5
- package/angular/esm2015/src/controls/common/base.component.js +1 -8
- package/angular/esm2015/src/controls/data-table/data-table.component.js +9 -39
- package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +8 -11
- package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +9 -8
- package/angular/esm2015/src/controls/form/form-field/file/file-form-field.component.js +2 -14
- package/angular/esm2015/src/controls/form/form-field/form-field.component.js +2 -9
- package/angular/esm2015/src/controls/layout/layout-definition.component.js +2 -9
- package/angular/esm2015/src/controls/layout/layout.component.js +2 -11
- package/angular/esm2015/src/controls/master-view/master-view.component.js +5 -32
- package/angular/esm2015/src/controls/page-alert-bar/models/index.js +1 -1
- package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
- package/angular/esm2015/src/controls/pivot/pivot.component.js +4 -21
- package/angular/esm2015/src/controls/property-grid/property-grid-item.component.js +2 -50
- package/angular/esm2015/src/controls/property-grid/property-grid.component.js +60 -73
- package/angular/esm2015/src/controls/property-grid/property-grid.module.js +1 -5
- package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +70 -151
- package/angular/esm2015/src/controls/settings/settings.component.js +8 -48
- package/angular/esm2015/src/controls/settings/settings.module.js +9 -21
- package/angular/esm2015/src/controls/wizard/wizard.component.js +65 -55
- package/angular/esm2015/src/generated/strings.js +1 -1
- package/angular/esm2015/src/service/app-context.service.js +1 -3
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +239 -545
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/package.json +0 -2
- package/angular/src/controls/common/base.component.d.ts +0 -5
- package/angular/src/controls/data-table/data-table.component.d.ts +0 -15
- package/angular/src/controls/form/form-field/checklist/checklist-form-field.component.d.ts +0 -1
- package/angular/src/controls/form/form-field/file/file-form-field.component.d.ts +0 -4
- package/angular/src/controls/layout/layout-definition.component.d.ts +1 -6
- package/angular/src/controls/master-view/master-view.component.d.ts +2 -118
- package/angular/src/controls/page-alert-bar/models/index.d.ts +1 -1
- package/angular/src/controls/pivot/pivot-tab.component.d.ts +1 -0
- package/angular/src/controls/pivot/pivot.component.d.ts +0 -7
- package/angular/src/controls/property-grid/property-grid-item.component.d.ts +3 -53
- package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -1
- package/angular/src/controls/property-grid/property-grid.module.d.ts +3 -4
- package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +1 -32
- package/angular/src/controls/settings/settings.component.d.ts +1 -18
- package/angular/src/controls/settings/settings.module.d.ts +1 -3
- package/angular/src/generated/strings.d.ts +0 -3
- package/core/base/environment.d.ts +0 -10
- package/core/base/environment.js.map +1 -1
- package/core/data/gateway-connection.d.ts +0 -34
- package/core/data/gateway-connection.js +2 -59
- package/core/data/gateway-connection.js.map +1 -1
- package/core/data/node-connection.d.ts +0 -4
- package/core/data/node-connection.js.map +1 -1
- package/core/data/powershell.d.ts +0 -4
- package/core/data/powershell.js +0 -1
- package/core/data/powershell.js.map +1 -1
- package/core/diagnostics/sme-web-telemetry-models.d.ts +3 -20
- package/core/diagnostics/sme-web-telemetry-models.js +2 -6
- package/core/diagnostics/sme-web-telemetry-models.js.map +1 -1
- package/core/diagnostics/sme-web-telemetry.d.ts +1 -13
- package/core/diagnostics/sme-web-telemetry.js +11 -51
- package/core/diagnostics/sme-web-telemetry.js.map +1 -1
- package/core/generated/powershell-scripts.d.ts +0 -4
- package/core/generated/powershell-scripts.js +0 -4
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/index.d.ts +0 -2
- package/core/index.js +0 -1
- package/core/index.js.map +1 -1
- package/core/manifest/environment-modules.js +0 -10
- package/core/manifest/environment-modules.js.map +1 -1
- package/core/notification/powershell-notification.js +1 -1
- package/core/notification/powershell-notification.js.map +1 -1
- package/core/performance/performance-tracker.d.ts +0 -67
- package/core/performance/performance-tracker.js +4 -211
- package/core/performance/performance-tracker.js.map +1 -1
- package/core/rpc/credssp/rpc-credssp-model.d.ts +2 -27
- package/core/rpc/credssp/rpc-credssp-model.js +0 -10
- package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
- package/core/security/credssp-manager.d.ts +1 -15
- package/core/security/credssp-manager.js +0 -28
- package/core/security/credssp-manager.js.map +1 -1
- package/core/shared/gateway-inventory/gateway-inventory.d.ts +0 -10
- package/core/shared/gateway-inventory/gateway-inventory.js +0 -11
- package/core/shared/gateway-inventory/gateway-inventory.js.map +1 -1
- package/e2e/assets/strings/cs-CZ/strings.json +1 -1
- package/e2e/assets/strings/de-DE/strings.json +1 -1
- package/e2e/assets/strings/es-ES/strings.json +1 -1
- package/e2e/assets/strings/fr-FR/strings.json +1 -1
- package/e2e/assets/strings/hu-HU/strings.json +1 -1
- package/e2e/assets/strings/it-IT/strings.json +1 -1
- package/e2e/assets/strings/ja-JP/strings.json +1 -1
- package/e2e/assets/strings/ko-KR/strings.json +1 -1
- package/e2e/assets/strings/nl-NL/strings.json +1 -1
- package/e2e/assets/strings/pl-PL/strings.json +1 -1
- package/e2e/assets/strings/pt-BR/strings.json +1 -1
- package/e2e/assets/strings/pt-PT/strings.json +1 -1
- package/e2e/assets/strings/ru-RU/strings.json +1 -1
- package/e2e/assets/strings/strings.json +1 -1
- package/e2e/assets/strings/sv-SE/strings.json +1 -1
- package/e2e/assets/strings/tr-TR/strings.json +1 -1
- package/e2e/assets/strings/zh-CN/strings.json +1 -1
- package/e2e/assets/strings/zh-TW/strings.json +1 -1
- package/package.json +3 -5
- package/styles/css/main.css +1 -1
- package/tools/module-template/gulpfile.ts/index.ts +1 -1
- package/tools/package-lock.json +975 -14946
- package/tools/wac-cli/src/create/main.d.ts +3 -6
- package/tools/wac-cli/src/create/main.js +35 -87
- package/tools/wac-cli/src/create/main.js.map +1 -1
- package/tools/wac-cli/src/index.js +2 -2
- package/tools/wac-cli/src/index.js.map +1 -1
- package/tools/wac-cli/templates/{solution/manifest.json → manifest/solution-manifest.json} +0 -19
- package/tools/wac-cli/templates/{wac-template/src/manifest.json → manifest/tool-manifest.json} +0 -0
- package/tools/wac-cli/templates/wac-template/angular.json +2 -2
- package/tools/wac-cli/templates/wac-template/gulpfile.ts/config-data.ts +1 -1
- package/tools/wac-cli/templates/wac-template/package.json +8 -0
- package/tools/wac-cli/templates/wac-template/src/app/app-routing.module.ts +1 -1
- package/tools/wac-cli/templates/wac-template/src/main.ts +0 -2
- package/tools/wac-cli/templates/wac-template/src/polyfills.ts +1 -1
- package/tools/wac-cli/templates/wac-template/src/test.ts +2 -2
- package/core/data/gateway-status.d.ts +0 -24
- package/core/data/gateway-status.js +0 -3
- package/core/data/gateway-status.js.map +0 -1
- package/core/data/wdac-operations.d.ts +0 -123
- package/core/data/wdac-operations.js +0 -144
- package/core/data/wdac-operations.js.map +0 -1
- package/tools/wac-cli/templates/internal/npmrc.txt +0 -6
- package/tools/wac-cli/templates/internal/package.json +0 -101
- package/tools/wac-cli/templates/solution/strings.resjson +0 -16
- package/tools/wac-cli/templates/wac-template/src/version.ts +0 -3
- package/tools/wac-cli/templates/wac-template/version.json +0 -5
|
@@ -175,14 +175,7 @@ export class FormFieldComponent extends BaseComponent {
|
|
|
175
175
|
* The ID is based on the form field name that's set on the ngModel.
|
|
176
176
|
*/
|
|
177
177
|
get dataUtaId() {
|
|
178
|
-
|
|
179
|
-
const formFieldNameAttribute = this.getAttribute('formcontrolname') || this.getAttribute('name');
|
|
180
|
-
// Then, if no HTML attribute is set, try to get the name from the ngModel
|
|
181
|
-
const formFieldName = formFieldNameAttribute || this.ngModel && this.ngModel.name && this.ngModel.name.toString();
|
|
182
|
-
// If none of these are set, then look for the utaId input
|
|
183
|
-
const formFieldId = formFieldName || this.utaId;
|
|
184
|
-
// Finally, only set the data-uta-id attribute if neither name nor formcontrolname are set on the HTML already
|
|
185
|
-
return MsftSme.isNullOrUndefined(formFieldNameAttribute) ? formFieldId : undefined;
|
|
178
|
+
return this.utaId ? this.utaId : this.ngModel && this.ngModel.name && this.ngModel.name.toString();
|
|
186
179
|
}
|
|
187
180
|
/**
|
|
188
181
|
* Placeholder for the combined disabled state
|
|
@@ -994,4 +987,4 @@ const ɵSmeInternalFormFieldComponent_BaseFactory = /*@__PURE__*/ i0.ɵɵgetInhe
|
|
|
994
987
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SmeInternalFormFieldComponent, [{
|
|
995
988
|
type: Directive
|
|
996
989
|
}], null, null); })();
|
|
997
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDWSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsV0FBVyxFQUMvRyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQXFDLHVCQUF1QixFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBQ3BJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBOEMsa0NBQWtDLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6SCxPQUFPLEVBQWlDLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFekgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJB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QVU7WUFPVixPQUFPO2tCQURiLEtBQUs7WUFPQyxjQUFjO2tCQURwQixLQUFLO1lBT0MsY0FBYztrQkFEcEIsS0FBSztZQU9DLEtBQUs7a0JBRFgsS0FBSztZQVFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsa0JBQWtCO1lBOEZ4QixtQkFBbUI7a0JBRHpCLEtBQUs7WUFJQyxNQUFNO2tCQURaLE1BQU07WUFZQSxnQkFBZ0I7a0JBRHRCLFdBQVc7bUJBQUMseUNBQXlDO1lBTzNDLGtCQUFrQjtrQkFENUIsV0FBVzttQkFBQyw2Q0FBNkM7WUFXL0MsZ0JBQWdCO2tCQUQxQixXQUFXO21CQUFDLDJDQUEyQztZQVlqRCxXQUFXO2tCQURqQixLQUFLO1lBWUMsT0FBTyxNQU1OLFFBQVEsTUFNUixTQUFTLE1BTVQsY0FBYyxNQU1kLFVBQVUsTUFNVixNQUFNLE1BTUosaUJBQWlCLE1BR3BCLGtCQUFrQjtrQkFEeEIsS0FBSztZQTJRRSxvQkFBb0IsTUFVcEIseUJBQXlCO0FBeWRyQzs7O0dBR0c7QUFFSCxtREFBbUQ7QUFDbkQsTUFBTSxPQUFnQiw2QkFBc0MsU0FBUSxrQkFBbUM7O21LQUFqRiw2QkFBNkI7cUZBQTdCLDZCQUE2QjswRkFBN0IsNkJBQTZCO3VGQUE3Qiw2QkFBNkI7Y0FGbEQsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29udGVudENoaWxkLCBEaXJlY3RpdmUsIERvQ2hlY2ssXHJcbiAgICBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgWWllbGQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy95aWVsZC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBEb20gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RvbS9kb20nO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU21lSW5qZWN0IH0gZnJvbSAnLi4vLi4vY29tbW9uL2RlY29yYXRvcnMvaW5qZWN0aW9uLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBEaXNhYmxlZENoYW5nZWRFdmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9ldmVudHMvZGlzYWJsZWRDaGFuZ2VkLmV2ZW50JztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydCwgVmFsaWRhdGlvbkFsZXJ0cywgVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHksIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSB9IGZyb20gJy4vZm9ybS1maWVsZC1hY2Nlc3Nvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRBZ2dyZWdhdGFibGUsIEZvcm1GaWVsZEFnZ3JlZ2F0b3IsIFNNRV9GT1JNX0ZJRUxEX0FHR1JFR0FUT1JfUFJPVklERVIgfSBmcm9tICcuL2Zvcm0tZmllbGQtYWdncmVnYXRvcic7XHJcbmltcG9ydCB7IENoZWNrQXN5bmNWYWxpZGF0aW9uRXZlbnRBcmdzLCBGb3JtRmllbGRBc3luY1ZhbGlkYXRvckRpcmVjdGl2ZSB9IGZyb20gJy4vZm9ybS1maWVsZC1hc3luYy12YWxpZGF0b3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkQ29udGFpbmVyIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWNvbnRhaW5lcic7XHJcbmltcG9ydCB7IEZvcm1GaWVsZE9yaWVudGF0aW9uIH0gZnJvbSAnLi9mb3JtLWZpZWxkLW9yaWVudGF0aW9uJztcclxuaW1wb3J0IHsgQ2hlY2tWYWxpZGF0aW9uRXZlbnRBcmdzLCBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0tZmllbGQtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XHJcblxyXG4vKipcclxuICogQmFzZSBjb21wb25lbnQgY2xhc3MgZm9yIGZvcm0gZmllbGRzXHJcbiAqIEEgY2lyY3VsYXIgcmVmZXJlbmNlIHdvdWxkIGJlIGNyZWF0ZWQgYnkgaW5qZWN0aW5nIGJvdGggbmdNb2RlbFxyXG4gKiBhbmQgcHJvdmlkaW5nIEBzZWUgQ29udHJvbFZhbHVlQWNjZXNzb3IgYW5kIEBzZWUgVmFsaWRhdG9yIGltcGxlbWVudGF0aW9ucyBvbiB0aGUgc2FtZSBjb21wb25lbnQuXHJcbiAqIFRoZXJlZm9yZSwgd2UgaGF2ZSBicm9rZW4gdGhlIEZvcm1GaWVsZCBjb21wb25lbnQgaW50byAzIHBhcnRzLlxyXG4gKiAgLSBUaGUgQHNlZSBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUgaGFuZGxlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQHNlZSBWYWxpZGF0b3IgYW5kIEBzZWUgTkdfVkFMSURBVE9SU1xyXG4gKiAgLSBUaGUgQHNlZSBGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSBoYW5kbGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBAc2VlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGFuZCBAc2VlIE5HX1ZBTFVFX0FDQ0VTU09SXHJcbiAqICAtIFRoaXMgQHNlZSBGb3JtRmllbGRDb21wb25lbnQgaXMgb3VyIGdsdWUgdGhhdCBwdWxscyBpdCBhbGwgdG9nZXRoZXIgd2l0aCBsYWJlbHMgYW5kIGFsZXJ0cyBhbmQgaW5qZWN0cyB0aGUgTmdDb250cm9sIGluc3RhbmNlIHNhZmVseS5cclxuICpcclxuICogSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgYWxsIHRocmVlIGNvbXBvbmVudHMgbXVzdCB1c2UgdGhlIHNhbWUgYmFzZSBzZWxlY3RvciBAc2VlIEZvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvci5cclxuICogVGhpcyBpcyBlbmZvcmNlZCBpbiB0aGUgY29uc3RydWN0b3Igb2YgdGhpcyBjb21wb25lbnQsXHJcbiAqIEhvd2V2ZXIgdGhlIGRpcmVjdGl2ZXMgYXJlIGRvbmUgYnkgY29udmVudGlvbiBhbmQgd2lsbCBqdXN0IGNyYXNoIGlmIHRoZSBpbmplY3RvciBjYW5ub3QgZmluZCB0aGVtLlxyXG4gKlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAc21lRG9jIHtAbGFiZWwgRm9ybSBmaWVsZHMgQGlkIHNtZS1mb3JtLWZpZWxkcy1jb21wb25lbnR9XHJcbiAqXHJcbiAqIEBvdmVydmlld1xyXG4gKiBAZmlsZSB7QGZpbGVwYXRoIC4vZXhhbXBsZXMvb3ZlcnZpZXcubWR9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgU2VhcmNoIHdpdGggZW1waGFzaXplZCBzZWFyY2ggYnV0dG9uIEBpZCBzZWFyY2gtZW1waGFzaXN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1lbXBoYXNpemUuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1lbXBoYXNpemUuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgU2VhcmNoIHdpdGggaGlkZGVuIGxhYmVsIEBpZCBzZWFyY2gtaGlkZGVufVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtaGlkZGVuLWxhYmVsLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtaGlkZGVuLWxhYmVsLmNvbXBvbmVudC5odG1sfVxyXG4gICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBTZWFyY2ggd2l0aCByZXF1aXJlZCBmaWVsZCBAaWQgc2VhcmNoLXJlcXVpcmVkfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtcmVxdWlyZWQuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1yZXF1aXJlZC5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBDYWxlbmRhciBAaWQgY2FsZW5kYXJ9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQ2xvY2sgQGlkIGNsb2NrfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jbG9jay5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY2xvY2suY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgRGF0ZXRpbWUgQGlkIGRhdGV0aW1lfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9kYXRldGltZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGF0ZXRpbWUuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgVmFsaWRhdGlvbiBlcnJvciBAaWQgdmFsaWRhdGlvbi1lcnJvcn1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1lcnJvci5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1lcnJvci5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBWYWxpZGF0aW9uIHBlbmRpbmcgQGlkIHZhbGlkYXRpb24tcGVuZGluZ31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1wZW5kaW5nLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLXBlbmRpbmcuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgVmFsaWRhdGlvbiB3aXRoIGN1c3RvbSBtYXJrZG93biBAaWQgdmFsaWRhdGlvbi1tYXJrZG93bn1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1tYXJrZG93bi5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tbWFya2Rvd24uY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQmFzaWMgY29tYm9ib3ggQGlkIGNvbWJvYm94fVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3guY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQ29tYm9ib3ggd2l0aCBzZWFyY2ggQGlkIGNvbWJvYm94LXNlYXJjaH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtc2VhcmNoLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1zZWFyY2guY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgTXVsdGlwbGUgc2VsZWN0IGNvbWJveGJveCBAaWQgY29tYm9ib3gtbXVsdGl9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LW11bHRpLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1tdWx0aS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBNdWx0aXBsZSBzZWxlY3QgY29tYm9ib3ggd2l0aCBtaW53aWR0aCBAaWQgY29tYm9ib3gtbXVsdGktbWlud2lkdGh9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LW11bHRpLW1pbndpZHRoLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1tdWx0aS1taW53aWR0aC5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBNdWx0aXBsZSBzZWxlY3QgY29tYm9ib3ggd2l0aCBjdXN0b20gdG9vbHRpcCBAaWQgY3VzdG9tLXRvb2x0aXB9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2N1c3RvbS10b29sdGlwLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jdXN0b20tdG9vbHRpcC5jb21wb25lbnQuaHRtbH1cclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZvcm1GaWVsZENvbXBvbmVudDxUU3RyaW5ncywgVE1vZGVsPlxyXG4gICAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50PFRTdHJpbmdzPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjaywgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBGb3JtRmllbGRBZ2dyZWdhdGFibGUge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNlbGVjdG9yIHRoYXQgYWxsIGZvcm0gZmllbGRzIG11c3QgdXNlIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkgd2l0aFxyXG4gICAgICogQHNlZSBGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSBhbmQgQHNlZSBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBzZWxlY3RvciA9ICdzbWUtZm9ybS1maWVsZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdHlwZSBvZiBmaWVsZCB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguIFRoaXMgaXMgYSByZXF1aXJlZCBwcm9wZXJ0eVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHR5cGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBoZWFkZXIgb2YgdGhpcyBmb3JtIGZpZWxkIHNob3VsZCBiZSBoaWRkZW4gZnJvbSB2aWV3IChidXQgbm90IG5lY2Vzc2FyaWx5IGZyb20gYXJpYSlcclxuICAgICAqIE5vdCBzdXBwb3J0ZWQgb24gYWxsIGZvcm0gZmllbGRzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGlkZUhlYWRlcjogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0byBtYWludGFpbiB0aGUgc3BhY2UgbGVmdCBhZnRlciBoaWRkaW5nIGhlYWRlclxyXG4gICAgICovXHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoaWRlSGVhZGVyU3BhY2UgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhpcyByZXF1aXJlcyBhIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIHJlcXVpcmVzIGEgdmFsdWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdXRvZm9jdXM6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbnRlcm5hbCBmb3JtIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGlzIGNvbnRyb2wgdG8gdGhlIHVzZXJcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRlbXBsYXRlIHJlZiBvZiBhIHN1YmZvcm0gb2YgdGhpcyBjb21wb25lbnQuIFRoZSB3YXkgdGhpcyB0ZW1wbGF0ZSByZWYgaXMgdXNlZCB2YXJpZXMgZm9ybSBmaWVsZCB0byBmaWVsZFxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmKVxyXG4gICAgcHVibGljIHN1YkZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpZWxkOyBBIGRlc2NyaXB0aW9uIGZvciB0aGUgdXNlciBvZiB0aGUgbWVhbmluZyBhbmQgcHVycG9zZSBvZiB0aGlzIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxEZXNjcmlwdGlvbjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgZGVzY3JpcHRpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxEZXNjcmlwdGlvbiA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGV0YWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLWF1dG8taGVpZ2h0JylcclxuICAgIHB1YmxpYyBjb21wYWN0OiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLW1pbmltYWwnKVxyXG4gICAgcHVibGljIG1pbmltYWw6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyByZWFkb25seS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbnN0cnVjdGlvbnMgb2YgdGhpcyBjb250cm9sOyBBIGJ1aWx0IGluIGRlc2NyaXB0aW9uIGZvciB0aGUgdXNlciBvZiBob3cgdGhpcyBjb250cm9sIHdvcmtzLlxyXG4gICAgICogVGhpcyBzaG91bGQgYmUgcHJvdmlkZWQgYnkgdGhlIGNvbnRyb2wgYW5kIGFwcGxpZXMgdG8gYWxsIGluc3RhbmNlcyBvZiB0aGUgY29udHJvbCwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGFzIGFuIGF0dHJpYnV0ZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgaW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxJbnN0cnVjdGlvbnM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGluc3RydWN0aW9ucyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbEluc3RydWN0aW9ucyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGV0YWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgcHJvdmlkZWQsIHJlbmRlcnMgYSBjdXN0b20gdG9vbHRpcCBmb3IgdGhpcyBmaWVsZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHRvb2x0aXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b29sdGlwLiBJZiBub3QgcHJvdmlkZWQsIGRldGFpbHMgcHJvcGVydHkgd2lsbCBiZSB1c2VkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdG9vbHRpcDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgYmluZGluZyBjb250ZXh0IGZvciB0aGUgdG9vbHRpcFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHRvb2x0aXBDb250ZXh0OiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGZvcm0gY29udHJvbCBpcyB0cnVseSBkaXNhYmxlZFxyXG4gICAgICogVGhpcyB3aWxsIGJlIHRydWUgaWYgdGhlIGFjY2Vzc29yIChtb2RlbCksIGlucHV0LCBvciBhbmNlc3RvciBpcyBkaXNhYmxlZFxyXG4gICAgICogSXRzIHZhbHVlIGlzIHNldCBvbmx5IG9uIERvQ2hlY2suXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRydWUgaWYgd2UgYXJlIGRpc2FibGVkLCBvdXIgbW9kZWwgaXMgZGlzYWJsZWQgb3IgYW4gYW5jZXN0b3IgaXMgZGlzYWJsZWRcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvcm0gZmllbGQgaXMgcGVuZGluZyB2YWxpZGF0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcGVuZGluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5wZW5kaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbCAmJiB0aGlzLm5nTW9kZWwuZGlydHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLnRvdWNoZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtZGlzYWJsZWQnKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRpc2FibGVkJylcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJylcclxuICAgIHB1YmxpYyBnZXQgbG9hZGluZ09yRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykgPyB0cnVlIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgYm91bmQgaW5wdXQgb2YgdGhlIGRpc2FibGVkIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWUgPiBSZWFzb246IHNlZSAnZGlzYWJsZWQnIHByb3BlcnR5IGFib3ZlXHJcbiAgICBASW5wdXQoJ2Rpc2FibGVkJylcclxuICAgIHB1YmxpYyBkaXNhYmxlZElucHV0OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvcm0gZmllbGQgaXMgbG9hZGluZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWVzc2FnZSB0byBzaG93IHdoaWxlIGxvYWRpbmdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsb2FkaW5nTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1lc3NhZ2UgdG8gc2hvdyB3aGlsZSBwZW5kaW5nXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGVuZGluZ01lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBkYXRhVXRhSWQgaWYgcGFzc2VkIGluXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdXRhSWQ6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBmb3JtIGZpZWxkJ3MgVVRBIGlkIGdldHRlci5cclxuICAgICAqIFRoZSBJRCBpcyBiYXNlZCBvbiB0aGUgZm9ybSBmaWVsZCBuYW1lIHRoYXQncyBzZXQgb24gdGhlIG5nTW9kZWwuXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXV0YS1pZCcpXHJcbiAgICBwdWJsaWMgZ2V0IGRhdGFVdGFJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIEZpcnN0LCBnZXQgdGhlIG5hbWUgZnJvbSB0aGUgYXR0cmlidXRlIHNldCBpbiB0aGUgSFRNTFxyXG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZE5hbWVBdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZm9ybWNvbnRyb2xuYW1lJykgfHwgdGhpcy5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcclxuXHJcbiAgICAgICAgLy8gVGhlbiwgaWYgbm8gSFRNTCBhdHRyaWJ1dGUgaXMgc2V0LCB0cnkgdG8gZ2V0IHRoZSBuYW1lIGZyb20gdGhlIG5nTW9kZWxcclxuICAgICAgICBjb25zdCBmb3JtRmllbGROYW1lID0gZm9ybUZpZWxkTmFtZUF0dHJpYnV0ZSB8fCB0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLm5hbWUgJiYgdGhpcy5uZ01vZGVsLm5hbWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGVzZSBhcmUgc2V0LCB0aGVuIGxvb2sgZm9yIHRoZSB1dGFJZCBpbnB1dFxyXG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZElkID0gZm9ybUZpZWxkTmFtZSB8fCB0aGlzLnV0YUlkO1xyXG5cclxuICAgICAgICAvLyBGaW5hbGx5LCBvbmx5IHNldCB0aGUgZGF0YS11dGEtaWQgYXR0cmlidXRlIGlmIG5laXRoZXIgbmFtZSBub3IgZm9ybWNvbnRyb2xuYW1lIGFyZSBzZXQgb24gdGhlIEhUTUwgYWxyZWFkeVxyXG4gICAgICAgIHJldHVybiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGZvcm1GaWVsZE5hbWVBdHRyaWJ1dGUpID8gZm9ybUZpZWxkSWQgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGNvbWJpbmVkIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0IGludGVybmFsRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jZXN0b3JEaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkSW5wdXQgfHwgdGhpcy5kaXNhYmxlZEJ5TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGFuY2VzdG9yIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYW5jZXN0b3JEaXNhYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZSBpcyBiZWluZyByZWZsZWN0ZWQgaW4gdGhlIGN1cnJlbnQgbW9kZWxcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHBlY3REaXNhYmxlZEJ5QW5jZXN0b3I6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgZGlzYWJsZWQgc3RhdGUgaXMgYmVpbmcgcmVmbGVjdGVkIGluIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXhwZWN0RGlzYWJsZWRCeUlucHV0OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRpc2FibGVkQnlNb2RlbDogYm9vbGVhbjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGZpZWxkTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHN0cmluZ3MgPSAoPFN0cmluZ3M+TXNmdFNtZS5zZWxmKCkuUmVzb3VyY2VzLnN0cmluZ3MpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLlZhbGlkYXRpb247XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWwgfHwgKCh0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLm5hbWUpID8gdGhpcy5uZ01vZGVsLm5hbWUudG9TdHJpbmcoKSA6IHN0cmluZ3MuVW5rbm93bkZpZWxkTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBmaWVsZC5cclxuICAgICAqIHNhZmUgd3JhcHBlciBhcm91bmQgdGhpcy5hY2Nlc3Nvci52YWx1ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFRNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuYWNjZXNzb3Iud3JpdGVWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93SW5mb0J1YmJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKCEhdGhpcy5yZXNvbHZlZFRpdGxlIHx8ICEhdGhpcy5yZXNvbHZlZFRvb2x0aXBUZW1wbGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXNvbHZlZFRvb2x0aXBUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b29sdGlwVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXNvbHZlZFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCB8fCB0aGlzLmRldGFpbHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZ2dyZWdhdGUgcHJvcGVydHkgZm9yIHRoZSBkZXRhaWxzIGZvciBvZiB0aGlzIGNvbnRyb2wgKGRlc2NyaXB0aW9uIG1lcmdlZCB3aXRoIGluc3RydWN0aW9ucylcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRldGFpbHM6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGFsZXJ0IHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxlcnQ6IFZhbGlkYXRpb25BbGVydDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IG5vbi1lcnJvciBhbGVydHMgdG8gZGlzcGxheSBmb3IgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbm9uRXJyb3JBbGVydHM6IFZhbGlkYXRpb25BbGVydHM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBub24tZXJyb3IgYXN5bmMgYWxlcnRzIHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG5vbkVycm9yQXN5bmNBbGVydHM6IFZhbGlkYXRpb25BbGVydHM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCBpbW1lZGlhdGUgdmFsaWRhdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW1tZWRpYXRlVmFsaWRhdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxUTW9kZWw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBpbW1lZGlhdGVWYWxpZGF0aW9uLlxyXG4gICAgICogVGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3Nlc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGRlZmF1bHRJbW1lZGlhdGVWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLWVycm9yLWFsZXJ0LWJvcmRlcicpXHJcbiAgICBwdWJsaWMgZXJyb3JBbGVydEJvcmRlcjogQm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgaG9yaXpvbnRhbGx5XHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtb3JpZW50YXRpb24taG9yaXpvbnRhbCcpXHJcbiAgICBwdWJsaWMgZ2V0IGlzSG9yaXpvbnRhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgdmVydGljYWxseVxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLW9yaWVudGF0aW9uLXZlcnRpY2FsJylcclxuICAgIHB1YmxpYyBnZXQgaXNWZXJ0aWNhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGVzaXJlZCBvcmllbnRhdGlvbiBvZiB0aGUgZm9ybSBmaWVsZC5cclxuICAgICAqIFdoZW4gcHJvdmlkZWQsIHRoZSBmb3JtIGZpZWxkIHdpbGwgbm8gbG9uZ2VyIGR5bmFtaWNhbGx5IGNoYW5nIGl0cyBvcmllbnRhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGNhbGN1bGF0ZWQgb3JpZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbGN1bGF0ZWRPcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIE5nQ29udHJvbCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChOZ0NvbnRyb2wsIHRydWUpXHJcbiAgICBwdWJsaWMgbmdNb2RlbDogTmdDb250cm9sO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0ZWQgQHNlZSBGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSlcclxuICAgIHByaXZhdGUgYWNjZXNzb3I6IEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlPFRNb2RlbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUpXHJcbiAgICBwcml2YXRlIHZhbGlkYXRvcjogRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0ZWQgQHNlZSBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoRm9ybUZpZWxkQXN5bmNWYWxpZGF0b3JEaXJlY3RpdmUsIHRydWUpXHJcbiAgICBwcml2YXRlIGFzeW5jVmFsaWRhdG9yOiBGb3JtRmllbGRBc3luY1ZhbGlkYXRvckRpcmVjdGl2ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkQWdncmVnYXRvciBwYXJlbnQgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoU01FX0ZPUk1fRklFTERfQUdHUkVHQVRPUl9QUk9WSURFUiwgdHJ1ZSlcclxuICAgIHByaXZhdGUgYWdncmVnYXRvcjogRm9ybUZpZWxkQWdncmVnYXRvcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgTGF5b3V0IHBhcmVudCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChTTUVfTEFZT1VUX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlLCBza2lwU2VsZjogdHJ1ZSB9KVxyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgQ2hhbmdlRGV0ZWN0b3JSZWYgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpXHJcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZm9ybUZpZWxkQ29udGFpbmVyOiBGb3JtRmllbGRDb250YWluZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXR0ZXIgZm9yIHRoZSBhdmFpbGFibGUgd2lkdGggZm9yIHN1YmZpZWxkcyB0byBjb25zdW1lXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgc3ViRmllbGRMYXlvdXRXaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgcGxhY2Vob2xkZXIgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxEZXNjcmlwdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbnN0cnVjdGlvbnMgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxJbnN0cnVjdGlvbnM6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluaXRpYWxWYWx1ZTogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGluaXRpYWwgdmFsdWUgaGFzIGJlZW4gdHJhY2tlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHZhbHVlSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCB0byBiYXNlIGxheW91dCBkZWNpc2lvbnMgb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXQgbGF5b3V0V2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHsgcmV0dXJuIDA7IH1cclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQgPyBlbGVtZW50Lm9mZnNldFBhcmVudC5jbGllbnRXaWR0aCA6IGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBsYXlvdXQgd2lkdGggYXMgZGV0ZWN0ZWQgb24gdGhlIGxhc3QgRG9DaGVjaygpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSBvZiBAc2VlIEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICogQHBhcmFtIGluamVjdG9yIHRoZSBhbmd1bGFyIGluamVjdGlvbiBzZXJ2aWNlIGZvciB0aGUgYmFzZSBjbGFzc2VzIEBTbWVJbmplY3RhYmxlIEFubm90YXRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgICAgIHRoaXMuYXV0b2ZvY3VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy52YWx1ZUluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uID0gdGhpcy5kZWZhdWx0SW1tZWRpYXRlVmFsaWRhdGlvbjtcclxuICAgICAgICB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3RvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRNb2RlbD4oKTtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLkhvcml6b250YWw7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c2x5Q2hlY2tlZExheW91dFdpZHRoID0gdGhpcy5sYXlvdXRXaWR0aDtcclxuXHJcbiAgICAgICAgLy8gUnVudGltZSBMaW50aW5nIGlzIG5vdCBuZWNlc3NhcmlseSB1c2VmdWwgZm9yIGZyYW1ld29yayBjb250cm9scyBzdWNoIGFzXHJcbiAgICAgICAgLy8gZm9ybSBmaWVsZHMgc2luY2UgdGhleSBhcmUgZGVzaWduZWQgd2l0aCBhY2Nlc3NpYmlsaXR5IGluIG1pbmQuXHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3NtZS1saW50LWRpc2FibGUnLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIHNlbGVjdG9yIHRvIGJlIGluIHRoZSAnc21lLWZvcm0tZmllbGRbdHlwZT1cIjx0eXBlPlwiXScgZm9ybWF0XHJcbiAgICAgICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09IEZvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcikge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50cyBkZXJpdmVkIGZyb20gJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9IG11c3QgdXNlIGEgYmFzZSBzZWxlY3RvciBvZiAke0Zvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcn1bdHlwZT1cIi4uLlwiXWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25Jbml0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCJ0eXBlXCIgYXR0cmlidXRlIGlzIHJlcXVpcmVkIG9uIGFsbCAke0Zvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcn0gY29tcG9uZW50c2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm5nTW9kZWwpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Rm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yfSBjb21wb25lbnRzIHJlcXVpcmUgdGhlIHVzZSBvZiBhbiBOZ0NvbnRyb2wgZGlyZWN0aXZlIHN1Y2ggYXMgW25nTW9kZWxdLCBbZm9ybUNvbnRyb2xOYW1lXSwgb3IgW2Zvcm1Db250cm9sXWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLmNoZWNrVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLnZhbGlkO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci5pbW1lZGlhdGVWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1tZWRpYXRlVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLnZhbGlkO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci5pc0RpcnR5ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhvb2sgdXAgbGF5b3V0IGRpcmVjdGl2ZSB0byBnZXQgbGF5b3V0IHdpZHRoXHJcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy55aWVsZE9uTGF5b3V0Q2hhbmdlZCgpOyB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gb3VyIHZhbGlkYXRvcnMgY3VzdG9tVmFsaWRhdGUgZXZlbnQuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy52YWxpZGF0b3IuY3VzdG9tVmFsaWRhdGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAvLyBNZXJnZSBvdXIgYWxlcnRzIHdpdGggdGhlIGFsZXJ0cyBvYmplY3QgZ2l2ZW4gaW4gdGhlIGV2ZW50IGFyZ3NcclxuICAgICAgICAgICAgKGFyZ3M6IENoZWNrVmFsaWRhdGlvbkV2ZW50QXJncykgPT4geyBNc2Z0U21lLmRlZXBBc3NpZ24oYXJncy5hbGVydHMsIHRoaXMudmFsaWRhdGUoYXJncy5mb3JtQ29udHJvbCkpOyB9XHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgdmFsaWRhdG9ycyBhbGVydCBldmVudC5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbGlkYXRvci5hbGVydC5zdWJzY3JpYmUoKGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykgPT4geyB0aGlzLm9uQWxlcnQoYWxlcnRzKTsgfSkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvciAmJiAhdGhpcy5hc3luY1ZhbGlkYXRvci5jdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG91ciBhc3luY1ZhbGlkYXRvcnMgY3VzdG9tQXN5bmNWYWxpZGF0ZSBldmVudC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hc3luY1ZhbGlkYXRvci5jdXN0b21Bc3luY1ZhbGlkYXRlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIC8vIE1lcmdlIG91ciBhbGVydHMgd2l0aCB0aGUgYWxlcnRzIG9iamVjdCBnaXZlbiBpbiB0aGUgZXZlbnQgYXJnc1xyXG4gICAgICAgICAgICAgICAgKGFyZ3M6IENoZWNrQXN5bmNWYWxpZGF0aW9uRXZlbnRBcmdzKSA9PiB7IGFyZ3MuYWxlcnRzLnB1c2godGhpcy5hc3luY1ZhbGlkYXRlKGFyZ3MuZm9ybUNvbnRyb2wpKTsgfVxyXG4gICAgICAgICAgICApKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgYXN5bmNWYWxpZGF0b3JzIGFzeW5jQWxlcnQgZXZlbnQuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYXN5bmNWYWxpZGF0b3IuYXN5bmNBbGVydC5zdWJzY3JpYmUoKGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykgPT4geyB0aGlzLm9uQXN5bmNBbGVydChhbGVydHMpOyB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGxpc3RlbiB0byBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VzIGZyb20gb3VyIG1vZGVsXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hY2Nlc3Nvci5kaXNhYmxlZENoYW5nZS5zdWJzY3JpYmUoKGRpc2FibGVkID0+IHRoaXMubmdNb2RlbERpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCkpKSk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBuZ01vZGVsIHN0YXR1cyBjaGFuZ2VzLlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdNb2RlbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShzdGF0dXMgPT4gdGhpcy5vblN0YXR1c0NoYW5nZWQoc3RhdHVzKSkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdNb2RlbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vblZhbHVlQ2hhbmdlZCh2YWx1ZSkpKTtcclxuXHJcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHBhcmVudCBhZ2dyZWdhdG9yLCB0aGVuIHJlZ2lzdGVyIHRvIGl0XHJcbiAgICAgICAgaWYgKHRoaXMuYWdncmVnYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0b3IuYWRkRm9ybUZpZWxkKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gb3VyIG1vZGVsIG1heSBoYXZlIHN0YXJ0ZWQgaW4gdGhlIGRpc2FibGVkIHN0YXRlLCBzbyBpbml0aWFsaXplIG91ciB0cmFja2luZyBwcm9wZXJ0eSB0byB0aGUgY3VycmVudCBhY2Nlc3NvciBzdGF0ZS5cclxuICAgICAgICB0aGlzLmRpc2FibGVkQnlNb2RlbCA9IHRoaXMuYWNjZXNzb3IuZGlzYWJsZWQ7XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZSBvdXIgbW9kZWwgc3RhcnRzIGluIGEgcHJpc3RpbmUgc3RhdGVcclxuICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG5cclxuICAgICAgICAvLyBhIGJpdCBoYWNreSwgYnV0IHRoaXMgd29ya3MgdG8gdHJpZ2dlciB2YWxpZGF0aW9uIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGZvcm0gbG9hZHMuXHJcbiAgICAgICAgLy8gdGhpcyBtZXRob2QgZG9lcyBub3Qgd29yayBwcm9wZXJseSB3aXRoIGVkaXRhYmxlIGdyaWRzIHVzaW5nIGZvcm1GaWVsZENvbnRhaW5lciwgdXNlIGV4cGxpY2l0IGltbWVkaWF0ZVZhbGlkYXRpb24gY2FsbCBhYm92ZS5cclxuICAgICAgICBpZiAoIXRoaXMuZm9ybUZpZWxkQ29udGFpbmVyICYmIHRoaXMuaW1tZWRpYXRlVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIERvQ2hlY2sgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XHJcbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XHJcbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgb3VyIGxheW91dFxyXG4gICAgICAgIGNvbnN0IGxheW91dFdpZHRoID0gdGhpcy5sYXlvdXRXaWR0aDtcclxuICAgICAgICBpZiAobGF5b3V0V2lkdGggIT09IHRoaXMucHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByZXZpb3VzbHlDaGVja2VkTGF5b3V0V2lkdGggPSBsYXlvdXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHN5bmNocm9uaXplcyB0aGUgZXhwZWN0ZWQgZGlzYWJsZWQgc3RhdGUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBtb2RlbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBkaXNhYmxlID0gdGhpcy5pbnRlcm5hbERpc2FibGVkO1xyXG4gICAgICAgIGlmIChkaXNhYmxlID09PSB0aGlzLmFjY2Vzc29yLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXNhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuY2VzdG9yRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWRCeU1vZGVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkSW5wdXQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGZpZWxkc2V0IGFuY2VzdG9ycy4gT3VyIGFuY2VzdHJ5IHNob3VsZCBuZXZlciBjaGFuZ2UsIHNvIHdlIGNhbiBzYXZlIHBlcmYgYnkgY29sbGVjdGluZyB0aGlzIG5vdy5cclxuICAgICAgICBjb25zdCBmaWVsZHNldEFuY2VzdG9ycyA9IDxIVE1MRmllbGRTZXRFbGVtZW50W10+RG9tLmdldEFsbEFuY2VzdG9ycyhcclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAoZWxlbWVudCkgPT4gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdGSUVMRFNFVCdcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBsaXN0ZW4gdG8gdGhlIGN1c3RvbSBkaXNhYmxlZENoYW5nZWQgZXZlbnQgb24gb3VyIGFuY2VzdG9yIGZpZWxkc2V0c1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkQ2hhbmdlZE9ic2VydmFibGVzID0gZmllbGRzZXRBbmNlc3RvcnMubWFwKGYgPT4gZnJvbUV2ZW50KGYsIERpc2FibGVkQ2hhbmdlZEV2ZW50LnR5cGVOYW1lKSk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIG1lcmdlKC4uLmRpc2FibGVkQ2hhbmdlZE9ic2VydmFibGVzKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNlc3RvckRpc2FibGVkID0gZmllbGRzZXRBbmNlc3RvcnMuc29tZShmID0+IGYuZGlzYWJsZWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBpbml0aWFsaXplIG91ciBhbmNlc3RyYWwgZGlzYWJsZWQgc3RhdGVcclxuICAgICAgICB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgPSBmaWVsZHNldEFuY2VzdG9ycy5zb21lKGYgPT4gZi5kaXNhYmxlZCk7XHJcbiAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25EZXN0cm95IGludGVyZmFjZVxyXG4gICAgICogZGVyaXZlZCBjbGFzc2VzIGFyZSBhbHdheXMgZXhwZWN0ZWQgdG8gY2FsbCBzdXBlci5uZ09uRGVzdHJveSgpIHdoZW4gb3ZlcnJpZGluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgcGFyZW50IGFnZ3JlZ2F0b3IsIHRoZW4gcmVnaXN0ZXIgdG8gaXRcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci5yZW1vdmVGb3JtRmllbGQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG4gICAgICAgIC8vIDYwMHB4IGlzIGJyZWFrcG9pbnQgZm9yIGZvcm0gZmllbGQgdmVydGljYWwvaG9yaXpvbnRhbCBsYXlvdXRcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IGxheW91dFdpZHRoID49IDYwMCA/IEZvcm1GaWVsZE9yaWVudGF0aW9uLkhvcml6b250YWwgOiBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVkT3JpZW50YXRpb24gIT09IG9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlZE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnlpZWxkT25PcmllbnRhdGlvbkNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSBvcmllbnRhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHlpZWxkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uZ0lzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgeWllbGRPbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdJc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGZpZWxkIHRvIGl0cyBpbml0aWFsIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nTW9kZWwucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBiYXNlIG9uIHRoZSBpbml0aWFsIHZhbHVlcyB0eXBlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0Q2xlYXJWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSBmaWVsZHMgdmFsdWUgdG8gdGhlIGNsaXBib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvcHlUb0NsaXBib2FyZCgpIHtcclxuICAgICAgICBNc2Z0U21lLmNvcHlUb0NsaXBib2FyZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkRGlzcGxheUhlYWRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaGlkZUhlYWRlciAmJiAoISEodGhpcy5sYWJlbCB8fCB0aGlzLmRldGFpbHMpIHx8IHRoaXMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhpcyBmb3JtIGZpZWxkIGlzIHZhbGlkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgZm9ybSBmaWVsZCBpcyBkaXJ0eS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIHByaXN0aW5lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzUHJpc3RpbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIGRpcnR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzRGlydHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIGZvY3VzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvY3VzKCkge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICBuZXh0LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC5cclxuICAgICAqIEBwYXJhbSBkaXNhYmxlZCBUaGUgbmV3IGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBuZ01vZGVsRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdERpc2FibGVkID0gdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgfHwgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHBlY3REaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEJ5TW9kZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRCeU1vZGVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgdmFsdWUgdG8gdXNlIHdoZW4gY2xlYXJpbmcgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBpbml0aWFsIHZhbHVlIHR5cGVcclxuICAgICAqIERlcml2ZWQgZmllbGRzIG1heSBvdmVycmlkZSB0aGlzIHRvIGNoYW5nZSB0aGUgY2xlYXIgdmFsdWUgYmVoYXZpb3JcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldENsZWFyVmFsdWUoKTogVE1vZGVsIHtcclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxhbnk+W107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLmluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT4nJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIG9wdGlvbmFsbHkgYnkgZGVyaXZlZCBjb21wb25lbnRzLlxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFzeW5jVmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25BbGVydHM+IHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGFueSB0aW1lIHZhbHVlIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVEZXRhaWxzKCkge1xyXG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXTtcclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMuZGVzY3JpcHRpb24pKSB7XHJcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCh0aGlzLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmluc3RydWN0aW9ucykpIHtcclxuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHRoaXMuaW5zdHJ1Y3Rpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlcGFyYXRlIGRldGFpbHMgYW5kIGluc3RydWN0aW9ucyB3aXRoIGRvdWJsZSBsaW5lIGJyZWFrcy5cclxuICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzLmxlbmd0aCA+IDAgPyBkZXRhaWxzLmpvaW4oJ1xcblxcbicpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzIGluaXRpYWxpemF0aW9uLCBUaGVzZSBjbGFzc2VzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1mb3JtLWZpZWxkJ1xyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNoYW5nZXMsIGluIHRoZSBVSSBvciBwcm9ncmFtbWF0aWNhbGx5LlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLnJlcG9ydENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmdNb2RlbFsndXBkYXRlJ10ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hhbmdlLmVtaXQoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmUtY2FsY3VsYXRlZC5cclxuICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25TdGF0dXNDaGFuZ2VkKHN0YXR1czogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbGVydHMoKTtcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci51cGRhdGVTdGF0dXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25BbGVydChhbGVydHM6IFZhbGlkYXRpb25BbGVydHMpIHtcclxuICAgICAgICB0aGlzLm5vbkVycm9yQWxlcnRzID0gdGhpcy5yZW1vdmVFcnJvckFsZXJ0cyhhbGVydHMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25Bc3luY0FsZXJ0KGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIHRoaXMubm9uRXJyb3JBc3luY0FsZXJ0cyA9IHRoaXMucmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFsZXJ0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZXJyb3IgYWxlcnRzIGZyb20gYSBWYWxpZGF0aW9uQWxlcnQgT2JqZWN0c1xyXG4gICAgICogZXJyb3JzIHdpbGwgYmUgc3VyZmFjZWQgaW4gdGhlIHRoaXMubmdNb2RlbC5jb250cm9sLmVycm9ycyBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgdG8gZmlsdGVyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcbiAgICAgICAgY29uc3Qgbm9uRXJyb3JBbGVydHMgPSB7fTtcclxuICAgICAgICBPYmplY3Qua2V5cyhhbGVydHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWxlcnQgPSBhbGVydHNba2V5XTtcclxuICAgICAgICAgICAgaWYgKGFsZXJ0ICYmICg8VmFsaWRhdGlvbkFsZXJ0PmFsZXJ0KS52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgbm9uRXJyb3JBbGVydHNba2V5XSA9IGFsZXJ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vbkVycm9yQWxlcnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgZm9ybSBmaWVsZCBib3JkZXIgdG8gcmVmbGVjdCBlcnJvciBhbGVydHNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVCb3JkZXJTdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5hbGVydCAmJiB0aGlzLmFsZXJ0LnNldmVyaXR5ID09PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvclxyXG4gICAgICAgICAgICAmJiAodGhpcy5hbGVydC52YWxpZCB8fCB0aGlzLmFsZXJ0LnNob3dXaGVuUHJpc3RpbmUgfHwgdGhpcy5uZ01vZGVsLmRpcnR5KSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQWxlcnRCb3JkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JBbGVydEJvcmRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGFjdGl2ZSBhbGVydHMgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVBbGVydHMoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzO1xyXG4gICAgICAgIHRoaXMuYWxlcnQgPSBudWxsO1xyXG4gICAgICAgIC8vIFdoZW4gaW4gYSBsb2FkaW5nIHN0YXRlLCBzaG93IHRoYXQgYWxlcnQgb25seS5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQgPSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sb2FkaW5nTWVzc2FnZSB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLkxvYWRpbmcubWVzc2FnZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXaGVuIGluIGEgcGVuZGluZyBzdGF0ZSwgc2hvdyB0aGF0IGFsZXJ0IG9ubHkuXHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucGVuZGluZ01lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLlZhbGlkYXRpb24uUGVuZGluZy5tZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGdhdGhlciBvdXIgYWxlcnRzLlxyXG4gICAgICAgIGNvbnN0IGFsZXJ0c0FycmF5OiBNc2Z0U21lLk5hbWVWYWx1ZTxzdHJpbmcsIGFueT5bXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5ub25FcnJvckFsZXJ0cyk7XHJcbiAgICAgICAgdGhpcy5hZGRWaXNpYmxlQWxlcnRzKGFsZXJ0c0FycmF5LCB0aGlzLm5vbkVycm9yQXN5bmNBbGVydHMpO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZXJyb3JzKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYXIgYWN0aXZlIGFsZXJ0IGlmIHRoZXJlIGFyZSBubyBhbGVydHNcclxuICAgICAgICBpZiAoYWxlcnRzQXJyYXkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1GaWVsZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCb3JkZXJTdGF0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb3JtRmllbGRFcnJvck5hbWVzID0geyByZXF1aXJlZDogJ3JlcXVpcmVkJywgaW52YWxpZERpc3BsYXlWYWx1ZTogJ2ludmFsaWREaXNwbGF5VmFsdWUnIH07XHJcbiAgICAgICAgLy8gUHJlIHNvcnQgZm9yIGludmFsaWQgZGlzcGxheSBlcnJvcnMgdG8gY29tZSBiZWZvcmUgcmVxdWlyZWQgZXJyb3JzLCB0aGV5IGhhdmUgdGhlIHNhbWUgc2V2ZXJpdHlcclxuICAgICAgICBhbGVydHNBcnJheS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQgJiYgYi5uYW1lID09PSBmb3JtRmllbGRFcnJvck5hbWVzLmludmFsaWREaXNwbGF5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMuaW52YWxpZERpc3BsYXlWYWx1ZSAmJiBiLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWxlcnRzID0gYWxlcnRzQXJyYXlcclxuICAgICAgICAgICAgLm1hcChlID0+IHRoaXMuZ2V0QWxlcnQoZS5uYW1lLCBlLnZhbHVlKSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHNvcnQgb24gdmFsaWQgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChhLnZhbGlkICE9PSBiLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEudmFsaWQgPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IG9uIHNldmVyaXR5XHJcbiAgICAgICAgICAgICAgICBpZiAoYS5zZXZlcml0eSAhPT0gYi5zZXZlcml0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNldmVyaXR5IDwgYi5zZXZlcml0eSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhleSBhcmUgY29uc2lkZXJlZCBlcXVhbCBmb3Igc29ydGluZ1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzb3J0ZWRBbGVydHMuc29tZShhbGVydCA9PiB7XHJcbiAgICAgICAgICAgIC8vIFNob3cgYWxlcnQgaW4gdGhlc2Ugc2NlbmFyaW9zOlxyXG4gICAgICAgICAgICAvLyAtIElmIHRoZSBmb3JtIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBpdCBpcyBub3QgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgZm9ybVxyXG4gICAgICAgICAgICAvLyAtIElmIGEgY3VzdG9tIGFsZXJ0IG1hcmtzIHNob3dXaGVuUHJpc2l0aW5lIGFzIHRydWVcclxuICAgICAgICAgICAgLy8gLSBJZiB0aGUgYWxlcnQgaXMgbWFya2VkIGFzIHZhbGlkXHJcbiAgICAgICAgICAgIC8vIC0gQW55IG90aGVyIGFsZXJ0cyBhZnRlciB0aGUgZm9ybSBpcyBtYXJrZWQgYXMgZGlydHlcclxuICAgICAgICAgICAgaWYgKGFsZXJ0LnNldmVyaXR5ICE9PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvciB8fCBhbGVydC52YWxpZCB8fCBhbGVydC5zaG93V2hlblByaXN0aW5lIHx8IHRoaXMubmdNb2RlbC5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydCA9IGFsZXJ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQoYWxlcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUJvcmRlclN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRWaXNpYmxlQWxlcnRzKHRhcmdldDogTXNmdFNtZS5OYW1lVmFsdWU8c3RyaW5nLCBhbnk+W10sIGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIGlmICghTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChhbGVydHMpKSB7XHJcbiAgICAgICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleShhbGVydHMsIChrLCB2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISg8VmFsaWRhdGlvbkFsZXJ0PnYpLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKHsgbmFtZTogaywgdmFsdWU6IHYgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldHMgYW4gYWxlcnQgb2JqZWN0IGZyb20gYSBrZXkgYW5kIHZhbGlkYXRpb24gcmVzdWx0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRBbGVydChrZXk6IHN0cmluZywgYWxlcnQ6IFZhbGlkYXRpb25SZXN1bHQpOiBWYWxpZGF0aW9uQWxlcnQge1xyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBmYWxzZSwgbnVsbCwgb3IgdmFsaWQgd2l0aCBubyBtZXNzYWdlLCB0aGVuIGl0cyBub3QgcmVhbGx5IGFuIGFsZXJ0IHRoYXQgbmVlZHMgdG8gYmUgc2hvd24gYW5kIHNob3VsZCBiZSBpZ25vcmVkXHJcbiAgICAgICAgaWYgKGFsZXJ0ID09PSBmYWxzZVxyXG4gICAgICAgICAgICB8fCBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0KVxyXG4gICAgICAgICAgICB8fCAoKGFsZXJ0IGFzIFZhbGlkYXRpb25BbGVydCkudmFsaWQgPT09IHRydWUpICYmIE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKChhbGVydCBhcyBWYWxpZGF0aW9uQWxlcnQpLm1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHByb2Nlc3NlZEFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBhIHN0cmluZywgc2hvdyBpdCBhcyBhbiBlcnJvclxyXG4gICAgICAgIGlmICh0eXBlb2YgYWxlcnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogPHN0cmluZz5hbGVydFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBwcm9jZXNzZWRBbGVydCA9IHRoaXMuZ2V0S25vd25OZ0FsZXJ0KGtleSwgYWxlcnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGFsZXJ0IGlzIGEgc2ltcGxlIHRydWUsIHdlIGRvbnQgcmVhbGx5IGtub3cgaG93IHRvIGRlYWwgd2l0aCBpdCwgc28ganVzdCBjcmVhdGUgYW4gZW1wdHkgdmFsaWRhdGlvbiBvYmplY3RcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0gYWxlcnQgPT09IHRydWUgPyB7fSA6IHsgLi4uYWxlcnQgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB2YWxpZCBpcyBub3Qgc2V0LCB0aGVuIHNldCBpdCBleHBsaWNpdGx5IHRvIGZhbHNlXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChwcm9jZXNzZWRBbGVydC52YWxpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIG1lc3NhZ2UsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UocHJvY2Vzc2VkQWxlcnQubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5tZXNzYWdlID0gYFZhbGlkYXRpb24gZmFpbGVkOiAke2tleX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHNldmVyaXR5IGlzIG5vdCBzZXQgY29ycmVjdGx5IGFuZCB0aGUgZmllbGQgaXMgbm90IHZhbGlkLCB0aGVuIHNldCBpdCB0byBlcnJvclxyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydC52YWxpZCAmJiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKFZhbGlkYXRpb25BbGVydFNldmVyaXR5W3Byb2Nlc3NlZEFsZXJ0LnNldmVyaXR5XSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5zZXZlcml0eSA9IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkQWxlcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFuIGFsZXJ0IG9iamVjdCBmcm9tIGtub3duIGFuZ3VsYXIgYWxlcnQga2V5c1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0S25vd25OZ0FsZXJ0KGtleTogc3RyaW5nLCBhbGVydDogYW55KTogVmFsaWRhdGlvbkFsZXJ0IHtcclxuICAgICAgICBjb25zdCB2U3RyaW5ncyA9ICg8U3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncykuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uVmFsaWRhdGlvbjtcclxuICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICAgIC8vIGZpcnN0IGNoZWNrIGZvciBrbm93biBhbmd1bGFyICdidWlsdC1pbicgdmFsaWRhdGlvbnNcclxuXHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWluJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1pbi5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5taW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4Jzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5tYXgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuUmVxdWlyZWQuZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5FbWFpbC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5NaW5MZW5ndGguZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heExlbmd0aC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5yZXF1aXJlZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLlBhdHRlcm4uZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRQYXR0ZXJuKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UobWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2V2ZXJpdHkgPSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvcjtcclxuXHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShhbGVydCkpIHtcclxuICAgICAgICAgICAgLy8gbWVyZ2UgYWxlcnQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0XHJcbiAgICAgICAgICAgIHZhbGlkID0gISFhbGVydC52YWxpZDtcclxuICAgICAgICAgICAgc2V2ZXJpdHkgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0LnNldmVyaXR5KSA/IHNldmVyaXR5IDogYWxlcnQuc2V2ZXJpdHk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0Lm1lc3NhZ2UpID8gbWVzc2FnZSA6IGFsZXJ0Lm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWxpZDogdmFsaWQsXHJcbiAgICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSxcclxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBzb21lIGNhc2VzLCB3ZSBuZWVkIGEgY29tYmluZWQgdmVyc2lvbiBvZiB0aGUgbGFiZWwgYW5kIGRlc2NyaXB0aW9uIHNvIHRoYXQgdGhlIHNjcmVlbiByZWFkIGNhbiByZWFkIGl0IGFwcHJvcHJpYXRlbHkuXHJcbiAgICAgKiBDb21tb24gY2FzZXMgZm9yIHRoaXMgYXJlIHdoZW4gdXNpbmcgcm9sZT1cImdyb3VwXCIgb3Igcm9sZT1cInJhZGlvR3JvdXBcIiBiZWNhdXNlIHRoZXkgZG9lcyBub3Qgc3VwcG9ydCBhcmlhLWRlc2NyaWJlZGJ5XHJcbiAgICAgKiB3ZSBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBieSBzcGxpdHRpbmcgdGhlIGRlc2NyaXB0aW9uIGFuZCBhbmQgbGFiZWwgd2l0aCBhICcuJyAocGVyaW9kKVwiXHJcbiAgICAgKiBUT0RPOiB2ZXJpZnkgaG93IHRoaXMgbG9jYWxpemVzIG9yIGZpbmQgYSBiZXR0ZXIgd2F5LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYWJlbCB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMubGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9LiAke3RoaXMuZGVzY3JpcHRpb259YDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGJhc2UgY29tcG9uZW50IGZvciBTTUUgZm9yIGZpZWxkcy4gSXQgc2ltcGx5IHJlbW92ZXMgdGhlIG5lZWQgdG8gc3VwcGx5IHRoZSBzdHJpbmcgdHlwZSBwYXJhbWV0ZXIgdG8gRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAqIFRoaXMgY2xhc3MgaXMgZXhwb3J0ZWQgZnJvbSB0aGlzIGZpbGUsIGJ1dCBub3QgbWVhbnQgdG8gYmUgZXhwb3J0ZWQgZnJvbSBpbmRleC50cyBidW5kbGVzLlxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8VE1vZGVsPiBleHRlbmRzIEZvcm1GaWVsZENvbXBvbmVudDxTdHJpbmdzLCBUTW9kZWw+IHtcclxuICAgIC8vIFNob3VsZCBSZW1haW4gRW1wdHkuXHJcbn1cclxuIl19
|
|
990
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDWSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsV0FBVyxFQUMvRyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQXFDLHVCQUF1QixFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBQ3BJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBOEMsa0NBQWtDLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6SCxPQUFPLEVBQWlDLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFekgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJB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QyxnQkFBZ0I7a0JBRDFCLFdBQVc7bUJBQUMsMkNBQTJDO1lBWWpELFdBQVc7a0JBRGpCLEtBQUs7WUFZQyxPQUFPLE1BTU4sUUFBUSxNQU1SLFNBQVMsTUFNVCxjQUFjLE1BTWQsVUFBVSxNQU1WLE1BQU0sTUFNSixpQkFBaUIsTUFHcEIsa0JBQWtCO2tCQUR4QixLQUFLO1lBMlFFLG9CQUFvQixNQVVwQix5QkFBeUI7QUF5ZHJDOzs7R0FHRztBQUVILG1EQUFtRDtBQUNuRCxNQUFNLE9BQWdCLDZCQUFzQyxTQUFRLGtCQUFtQzs7bUtBQWpGLDZCQUE2QjtxRkFBN0IsNkJBQTZCOzBGQUE3Qiw2QkFBNkI7dUZBQTdCLDZCQUE2QjtjQUZsRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IERvbSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWVJbmplY3QgfSBmcm9tICcuLi8uLi9jb21tb24vZGVjb3JhdG9ycy9pbmplY3Rpb24uZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IERpc2FibGVkQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2V2ZW50cy9kaXNhYmxlZENoYW5nZWQuZXZlbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi8uLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkFsZXJ0LCBWYWxpZGF0aW9uQWxlcnRzLCBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eSwgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWFjY2Vzc29yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEFnZ3JlZ2F0YWJsZSwgRm9ybUZpZWxkQWdncmVnYXRvciwgU01FX0ZPUk1fRklFTERfQUdHUkVHQVRPUl9QUk9WSURFUiB9IGZyb20gJy4vZm9ybS1maWVsZC1hZ2dyZWdhdG9yJztcclxuaW1wb3J0IHsgQ2hlY2tBc3luY1ZhbGlkYXRpb25FdmVudEFyZ3MsIEZvcm1GaWVsZEFzeW5jVmFsaWRhdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWFzeW5jLXZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRDb250YWluZXIgfSBmcm9tICcuL2Zvcm0tZmllbGQtY29udGFpbmVyJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkT3JpZW50YXRpb24gfSBmcm9tICcuL2Zvcm0tZmllbGQtb3JpZW50YXRpb24nO1xyXG5pbXBvcnQgeyBDaGVja1ZhbGlkYXRpb25FdmVudEFyZ3MsIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSB9IGZyb20gJy4vZm9ybS1maWVsZC12YWxpZGF0b3IuZGlyZWN0aXZlJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNvbXBvbmVudCBjbGFzcyBmb3IgZm9ybSBmaWVsZHNcclxuICogQSBjaXJjdWxhciByZWZlcmVuY2Ugd291bGQgYmUgY3JlYXRlZCBieSBpbmplY3RpbmcgYm90aCBuZ01vZGVsXHJcbiAqIGFuZCBwcm92aWRpbmcgQHNlZSBDb250cm9sVmFsdWVBY2Nlc3NvciBhbmQgQHNlZSBWYWxpZGF0b3IgaW1wbGVtZW50YXRpb25zIG9uIHRoZSBzYW1lIGNvbXBvbmVudC5cclxuICogVGhlcmVmb3JlLCB3ZSBoYXZlIGJyb2tlbiB0aGUgRm9ybUZpZWxkIGNvbXBvbmVudCBpbnRvIDMgcGFydHMuXHJcbiAqICAtIFRoZSBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBoYW5kbGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBAc2VlIFZhbGlkYXRvciBhbmQgQHNlZSBOR19WQUxJREFUT1JTXHJcbiAqICAtIFRoZSBAc2VlIEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIGhhbmRsZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIEBzZWUgQ29udHJvbFZhbHVlQWNjZXNzb3IgYW5kIEBzZWUgTkdfVkFMVUVfQUNDRVNTT1JcclxuICogIC0gVGhpcyBAc2VlIEZvcm1GaWVsZENvbXBvbmVudCBpcyBvdXIgZ2x1ZSB0aGF0IHB1bGxzIGl0IGFsbCB0b2dldGhlciB3aXRoIGxhYmVscyBhbmQgYWxlcnRzIGFuZCBpbmplY3RzIHRoZSBOZ0NvbnRyb2wgaW5zdGFuY2Ugc2FmZWx5LlxyXG4gKlxyXG4gKiBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCBhbGwgdGhyZWUgY29tcG9uZW50cyBtdXN0IHVzZSB0aGUgc2FtZSBiYXNlIHNlbGVjdG9yIEBzZWUgRm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yLlxyXG4gKiBUaGlzIGlzIGVuZm9yY2VkIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGlzIGNvbXBvbmVudCxcclxuICogSG93ZXZlciB0aGUgZGlyZWN0aXZlcyBhcmUgZG9uZSBieSBjb252ZW50aW9uIGFuZCB3aWxsIGp1c3QgY3Jhc2ggaWYgdGhlIGluamVjdG9yIGNhbm5vdCBmaW5kIHRoZW0uXHJcbiAqXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBzbWVEb2Mge0BsYWJlbCBGb3JtIGZpZWxkcyBAaWQgc21lLWZvcm0tZmllbGRzLWNvbXBvbmVudH1cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9vdmVydmlldy5tZH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBTZWFyY2ggd2l0aCBlbXBoYXNpemVkIHNlYXJjaCBidXR0b24gQGlkIHNlYXJjaC1lbXBoYXNpc31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWVtcGhhc2l6ZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWVtcGhhc2l6ZS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBTZWFyY2ggd2l0aCBoaWRkZW4gbGFiZWwgQGlkIHNlYXJjaC1oaWRkZW59XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1oaWRkZW4tbGFiZWwuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1oaWRkZW4tbGFiZWwuY29tcG9uZW50Lmh0bWx9XHJcbiAgKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFNlYXJjaCB3aXRoIHJlcXVpcmVkIGZpZWxkIEBpZCBzZWFyY2gtcmVxdWlyZWR9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1yZXF1aXJlZC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLXJlcXVpcmVkLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIENhbGVuZGFyIEBpZCBjYWxlbmRhcn1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jYWxlbmRhci5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBDbG9jayBAaWQgY2xvY2t9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2Nsb2NrLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jbG9jay5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBEYXRldGltZSBAaWQgZGF0ZXRpbWV9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RhdGV0aW1lLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9kYXRldGltZS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBWYWxpZGF0aW9uIGVycm9yIEBpZCB2YWxpZGF0aW9uLWVycm9yfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFZhbGlkYXRpb24gcGVuZGluZyBAaWQgdmFsaWRhdGlvbi1wZW5kaW5nfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLXBlbmRpbmcuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tcGVuZGluZy5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBWYWxpZGF0aW9uIHdpdGggY3VzdG9tIG1hcmtkb3duIEBpZCB2YWxpZGF0aW9uLW1hcmtkb3dufVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLW1hcmtkb3duLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1tYXJrZG93bi5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBCYXNpYyBjb21ib2JveCBAaWQgY29tYm9ib3h9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBDb21ib2JveCB3aXRoIHNlYXJjaCBAaWQgY29tYm9ib3gtc2VhcmNofVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1zZWFyY2guY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LXNlYXJjaC5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBNdWx0aXBsZSBzZWxlY3QgY29tYm94Ym94IEBpZCBjb21ib2JveC1tdWx0aX1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGkuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LW11bHRpLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIE11bHRpcGxlIHNlbGVjdCBjb21ib2JveCB3aXRoIG1pbndpZHRoIEBpZCBjb21ib2JveC1tdWx0aS1taW53aWR0aH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGktbWlud2lkdGguY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LW11bHRpLW1pbndpZHRoLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIE11bHRpcGxlIHNlbGVjdCBjb21ib2JveCB3aXRoIGN1c3RvbSB0b29sdGlwIEBpZCBjdXN0b20tdG9vbHRpcH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY3VzdG9tLXRvb2x0aXAuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2N1c3RvbS10b29sdGlwLmNvbXBvbmVudC5odG1sfVxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRm9ybUZpZWxkQ29tcG9uZW50PFRTdHJpbmdzLCBUTW9kZWw+XHJcbiAgICBleHRlbmRzIEJhc2VDb21wb25lbnQ8VFN0cmluZ3M+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBEb0NoZWNrLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIEZvcm1GaWVsZEFnZ3JlZ2F0YWJsZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2VsZWN0b3IgdGhhdCBhbGwgZm9ybSBmaWVsZHMgbXVzdCB1c2UgaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSB3aXRoXHJcbiAgICAgKiBAc2VlIEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIGFuZCBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHNlbGVjdG9yID0gJ3NtZS1mb3JtLWZpZWxkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0eXBlIG9mIGZpZWxkIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gVGhpcyBpcyBhIHJlcXVpcmVkIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGhlYWRlciBvZiB0aGlzIGZvcm0gZmllbGQgc2hvdWxkIGJlIGhpZGRlbiBmcm9tIHZpZXcgKGJ1dCBub3QgbmVjZXNzYXJpbHkgZnJvbSBhcmlhKVxyXG4gICAgICogTm90IHN1cHBvcnRlZCBvbiBhbGwgZm9ybSBmaWVsZHNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoaWRlSGVhZGVyOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRvIG1haW50YWluIHRoZSBzcGFjZSBsZWZ0IGFmdGVyIGhpZGRpbmcgaGVhZGVyXHJcbiAgICAgKi9cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGVIZWFkZXJTcGFjZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIHJlcXVpcmVzIGEgdmFsdWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgcmVxdWlyZXMgYSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwbGFjZWhvbGRlciBmb3IgdGhlIGludGVybmFsIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoaXMgY29udHJvbCB0byB0aGUgdXNlclxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxhYmVsOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGVtcGxhdGUgcmVmIG9mIGEgc3ViZm9ybSBvZiB0aGlzIGNvbXBvbmVudC4gVGhlIHdheSB0aGlzIHRlbXBsYXRlIHJlZiBpcyB1c2VkIHZhcmllcyBmb3JtIGZpZWxkIHRvIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXHJcbiAgICBwdWJsaWMgc3ViRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmllbGQ7IEEgZGVzY3JpcHRpb24gZm9yIHRoZSB1c2VyIG9mIHRoZSBtZWFuaW5nIGFuZCBwdXJwb3NlIG9mIHRoaXMgZmllbGRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERlc2NyaXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbERlc2NyaXB0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEZXRhaWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtYXV0by1oZWlnaHQnKVxyXG4gICAgcHVibGljIGNvbXBhY3Q6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtbWluaW1hbCcpXHJcbiAgICBwdWJsaWMgbWluaW1hbDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtIGZpZWxkIGlzIHJlYWRvbmx5LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGluc3RydWN0aW9ucyBvZiB0aGlzIGNvbnRyb2w7IEEgYnVpbHQgaW4gZGVzY3JpcHRpb24gZm9yIHRoZSB1c2VyIG9mIGhvdyB0aGlzIGNvbnRyb2wgd29ya3MuXHJcbiAgICAgKiBUaGlzIHNob3VsZCBiZSBwcm92aWRlZCBieSB0aGUgY29udHJvbCBhbmQgYXBwbGllcyB0byBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjb250cm9sLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYXMgYW4gYXR0cmlidXRlLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBpbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEluc3RydWN0aW9ucztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgaW5zdHJ1Y3Rpb25zKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsSW5zdHJ1Y3Rpb25zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEZXRhaWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBwcm92aWRlZCwgcmVuZGVycyBhIGN1c3RvbSB0b29sdGlwIGZvciB0aGlzIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdG9vbHRpcFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvb2x0aXAuIElmIG5vdCBwcm92aWRlZCwgZGV0YWlscyBwcm9wZXJ0eSB3aWxsIGJlIHVzZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdG9vbHRpcENvbnRleHQ6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgZm9ybSBjb250cm9sIGlzIHRydWx5IGRpc2FibGVkXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgYWNjZXNzb3IgKG1vZGVsKSwgaW5wdXQsIG9yIGFuY2VzdG9yIGlzIGRpc2FibGVkXHJcbiAgICAgKiBJdHMgdmFsdWUgaXMgc2V0IG9ubHkgb24gRG9DaGVjay5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICAvLyByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgZGlzYWJsZWQsIG91ciBtb2RlbCBpcyBkaXNhYmxlZCBvciBhbiBhbmNlc3RvciBpcyBkaXNhYmxlZFxyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyBwZW5kaW5nIHZhbGlkYXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLnBlbmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbCAmJiB0aGlzLm5nTW9kZWwudG91Y2hlZDtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1kaXNhYmxlZCcpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxyXG4gICAgcHVibGljIGdldCBsb2FkaW5nT3JEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nKSA/IHRydWUgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBib3VuZCBpbnB1dCBvZiB0aGUgZGlzYWJsZWQgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZSA+IFJlYXNvbjogc2VlICdkaXNhYmxlZCcgcHJvcGVydHkgYWJvdmVcclxuICAgIEBJbnB1dCgnZGlzYWJsZWQnKVxyXG4gICAgcHVibGljIGRpc2FibGVkSW5wdXQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyBsb2FkaW5nXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXNzYWdlIHRvIHNob3cgd2hpbGUgbG9hZGluZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWVzc2FnZSB0byBzaG93IHdoaWxlIHBlbmRpbmdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBwZW5kaW5nTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGRhdGFVdGFJZCBpZiBwYXNzZWQgaW5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB1dGFJZDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZvcm0gZmllbGQncyBVVEEgaWQgZ2V0dGVyLlxyXG4gICAgICogVGhlIElEIGlzIGJhc2VkIG9uIHRoZSBmb3JtIGZpZWxkIG5hbWUgdGhhdCdzIHNldCBvbiB0aGUgbmdNb2RlbC5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdXRhLWlkJylcclxuICAgIHB1YmxpYyBnZXQgZGF0YVV0YUlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXRhSWQgPyB0aGlzLnV0YUlkIDogdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5uYW1lICYmIHRoaXMubmdNb2RlbC5uYW1lLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGNvbWJpbmVkIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0IGludGVybmFsRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jZXN0b3JEaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkSW5wdXQgfHwgdGhpcy5kaXNhYmxlZEJ5TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGFuY2VzdG9yIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYW5jZXN0b3JEaXNhYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZSBpcyBiZWluZyByZWZsZWN0ZWQgaW4gdGhlIGN1cnJlbnQgbW9kZWxcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHBlY3REaXNhYmxlZEJ5QW5jZXN0b3I6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgZGlzYWJsZWQgc3RhdGUgaXMgYmVpbmcgcmVmbGVjdGVkIGluIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXhwZWN0RGlzYWJsZWRCeUlucHV0OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRpc2FibGVkQnlNb2RlbDogYm9vbGVhbjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGZpZWxkTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHN0cmluZ3MgPSAoPFN0cmluZ3M+TXNmdFNtZS5zZWxmKCkuUmVzb3VyY2VzLnN0cmluZ3MpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLlZhbGlkYXRpb247XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWwgfHwgKCh0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLm5hbWUpID8gdGhpcy5uZ01vZGVsLm5hbWUudG9TdHJpbmcoKSA6IHN0cmluZ3MuVW5rbm93bkZpZWxkTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBmaWVsZC5cclxuICAgICAqIHNhZmUgd3JhcHBlciBhcm91bmQgdGhpcy5hY2Nlc3Nvci52YWx1ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFRNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuYWNjZXNzb3Iud3JpdGVWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93SW5mb0J1YmJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKCEhdGhpcy5yZXNvbHZlZFRpdGxlIHx8ICEhdGhpcy5yZXNvbHZlZFRvb2x0aXBUZW1wbGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXNvbHZlZFRvb2x0aXBUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b29sdGlwVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXNvbHZlZFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCB8fCB0aGlzLmRldGFpbHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZ2dyZWdhdGUgcHJvcGVydHkgZm9yIHRoZSBkZXRhaWxzIGZvciBvZiB0aGlzIGNvbnRyb2wgKGRlc2NyaXB0aW9uIG1lcmdlZCB3aXRoIGluc3RydWN0aW9ucylcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRldGFpbHM6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGFsZXJ0IHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxlcnQ6IFZhbGlkYXRpb25BbGVydDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IG5vbi1lcnJvciBhbGVydHMgdG8gZGlzcGxheSBmb3IgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbm9uRXJyb3JBbGVydHM6IFZhbGlkYXRpb25BbGVydHM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBub24tZXJyb3IgYXN5bmMgYWxlcnRzIHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG5vbkVycm9yQXN5bmNBbGVydHM6IFZhbGlkYXRpb25BbGVydHM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCBpbW1lZGlhdGUgdmFsaWRhdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW1tZWRpYXRlVmFsaWRhdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxUTW9kZWw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBpbW1lZGlhdGVWYWxpZGF0aW9uLlxyXG4gICAgICogVGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3Nlc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGRlZmF1bHRJbW1lZGlhdGVWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLWVycm9yLWFsZXJ0LWJvcmRlcicpXHJcbiAgICBwdWJsaWMgZXJyb3JBbGVydEJvcmRlcjogQm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgaG9yaXpvbnRhbGx5XHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtb3JpZW50YXRpb24taG9yaXpvbnRhbCcpXHJcbiAgICBwdWJsaWMgZ2V0IGlzSG9yaXpvbnRhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgdmVydGljYWxseVxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLW9yaWVudGF0aW9uLXZlcnRpY2FsJylcclxuICAgIHB1YmxpYyBnZXQgaXNWZXJ0aWNhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGVzaXJlZCBvcmllbnRhdGlvbiBvZiB0aGUgZm9ybSBmaWVsZC5cclxuICAgICAqIFdoZW4gcHJvdmlkZWQsIHRoZSBmb3JtIGZpZWxkIHdpbGwgbm8gbG9uZ2VyIGR5bmFtaWNhbGx5IGNoYW5nIGl0cyBvcmllbnRhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGNhbGN1bGF0ZWQgb3JpZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbGN1bGF0ZWRPcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIE5nQ29udHJvbCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChOZ0NvbnRyb2wsIHRydWUpXHJcbiAgICBwdWJsaWMgbmdNb2RlbDogTmdDb250cm9sO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0ZWQgQHNlZSBGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSlcclxuICAgIHByaXZhdGUgYWNjZXNzb3I6IEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlPFRNb2RlbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUpXHJcbiAgICBwcml2YXRlIHZhbGlkYXRvcjogRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0ZWQgQHNlZSBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoRm9ybUZpZWxkQXN5bmNWYWxpZGF0b3JEaXJlY3RpdmUsIHRydWUpXHJcbiAgICBwcml2YXRlIGFzeW5jVmFsaWRhdG9yOiBGb3JtRmllbGRBc3luY1ZhbGlkYXRvckRpcmVjdGl2ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkQWdncmVnYXRvciBwYXJlbnQgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoU01FX0ZPUk1fRklFTERfQUdHUkVHQVRPUl9QUk9WSURFUiwgdHJ1ZSlcclxuICAgIHByaXZhdGUgYWdncmVnYXRvcjogRm9ybUZpZWxkQWdncmVnYXRvcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgTGF5b3V0IHBhcmVudCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChTTUVfTEFZT1VUX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlLCBza2lwU2VsZjogdHJ1ZSB9KVxyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgQ2hhbmdlRGV0ZWN0b3JSZWYgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpXHJcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZm9ybUZpZWxkQ29udGFpbmVyOiBGb3JtRmllbGRDb250YWluZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXR0ZXIgZm9yIHRoZSBhdmFpbGFibGUgd2lkdGggZm9yIHN1YmZpZWxkcyB0byBjb25zdW1lXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgc3ViRmllbGRMYXlvdXRXaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgcGxhY2Vob2xkZXIgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxEZXNjcmlwdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbnN0cnVjdGlvbnMgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxJbnN0cnVjdGlvbnM6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluaXRpYWxWYWx1ZTogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGluaXRpYWwgdmFsdWUgaGFzIGJlZW4gdHJhY2tlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHZhbHVlSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCB0byBiYXNlIGxheW91dCBkZWNpc2lvbnMgb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXQgbGF5b3V0V2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHsgcmV0dXJuIDA7IH1cclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQgPyBlbGVtZW50Lm9mZnNldFBhcmVudC5jbGllbnRXaWR0aCA6IGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBsYXlvdXQgd2lkdGggYXMgZGV0ZWN0ZWQgb24gdGhlIGxhc3QgRG9DaGVjaygpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSBvZiBAc2VlIEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICogQHBhcmFtIGluamVjdG9yIHRoZSBhbmd1bGFyIGluamVjdGlvbiBzZXJ2aWNlIGZvciB0aGUgYmFzZSBjbGFzc2VzIEBTbWVJbmplY3RhYmxlIEFubm90YXRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgICAgIHRoaXMuYXV0b2ZvY3VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy52YWx1ZUluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uID0gdGhpcy5kZWZhdWx0SW1tZWRpYXRlVmFsaWRhdGlvbjtcclxuICAgICAgICB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3RvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRNb2RlbD4oKTtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLkhvcml6b250YWw7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c2x5Q2hlY2tlZExheW91dFdpZHRoID0gdGhpcy5sYXlvdXRXaWR0aDtcclxuXHJcbiAgICAgICAgLy8gUnVudGltZSBMaW50aW5nIGlzIG5vdCBuZWNlc3NhcmlseSB1c2VmdWwgZm9yIGZyYW1ld29yayBjb250cm9scyBzdWNoIGFzXHJcbiAgICAgICAgLy8gZm9ybSBmaWVsZHMgc2luY2UgdGhleSBhcmUgZGVzaWduZWQgd2l0aCBhY2Nlc3NpYmlsaXR5IGluIG1pbmQuXHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3NtZS1saW50LWRpc2FibGUnLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIHNlbGVjdG9yIHRvIGJlIGluIHRoZSAnc21lLWZvcm0tZmllbGRbdHlwZT1cIjx0eXBlPlwiXScgZm9ybWF0XHJcbiAgICAgICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09IEZvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcikge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50cyBkZXJpdmVkIGZyb20gJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9IG11c3QgdXNlIGEgYmFzZSBzZWxlY3RvciBvZiAke0Zvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcn1bdHlwZT1cIi4uLlwiXWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25Jbml0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCJ0eXBlXCIgYXR0cmlidXRlIGlzIHJlcXVpcmVkIG9uIGFsbCAke0Zvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcn0gY29tcG9uZW50c2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm5nTW9kZWwpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Rm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yfSBjb21wb25lbnRzIHJlcXVpcmUgdGhlIHVzZSBvZiBhbiBOZ0NvbnRyb2wgZGlyZWN0aXZlIHN1Y2ggYXMgW25nTW9kZWxdLCBbZm9ybUNvbnRyb2xOYW1lXSwgb3IgW2Zvcm1Db250cm9sXWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLmNoZWNrVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLnZhbGlkO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci5pbW1lZGlhdGVWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1tZWRpYXRlVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLnZhbGlkO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci5pc0RpcnR5ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhvb2sgdXAgbGF5b3V0IGRpcmVjdGl2ZSB0byBnZXQgbGF5b3V0IHdpZHRoXHJcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy55aWVsZE9uTGF5b3V0Q2hhbmdlZCgpOyB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gb3VyIHZhbGlkYXRvcnMgY3VzdG9tVmFsaWRhdGUgZXZlbnQuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy52YWxpZGF0b3IuY3VzdG9tVmFsaWRhdGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAvLyBNZXJnZSBvdXIgYWxlcnRzIHdpdGggdGhlIGFsZXJ0cyBvYmplY3QgZ2l2ZW4gaW4gdGhlIGV2ZW50IGFyZ3NcclxuICAgICAgICAgICAgKGFyZ3M6IENoZWNrVmFsaWRhdGlvbkV2ZW50QXJncykgPT4geyBNc2Z0U21lLmRlZXBBc3NpZ24oYXJncy5hbGVydHMsIHRoaXMudmFsaWRhdGUoYXJncy5mb3JtQ29udHJvbCkpOyB9XHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgdmFsaWRhdG9ycyBhbGVydCBldmVudC5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbGlkYXRvci5hbGVydC5zdWJzY3JpYmUoKGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykgPT4geyB0aGlzLm9uQWxlcnQoYWxlcnRzKTsgfSkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvciAmJiAhdGhpcy5hc3luY1ZhbGlkYXRvci5jdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG91ciBhc3luY1ZhbGlkYXRvcnMgY3VzdG9tQXN5bmNWYWxpZGF0ZSBldmVudC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hc3luY1ZhbGlkYXRvci5jdXN0b21Bc3luY1ZhbGlkYXRlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIC8vIE1lcmdlIG91ciBhbGVydHMgd2l0aCB0aGUgYWxlcnRzIG9iamVjdCBnaXZlbiBpbiB0aGUgZXZlbnQgYXJnc1xyXG4gICAgICAgICAgICAgICAgKGFyZ3M6IENoZWNrQXN5bmNWYWxpZGF0aW9uRXZlbnRBcmdzKSA9PiB7IGFyZ3MuYWxlcnRzLnB1c2godGhpcy5hc3luY1ZhbGlkYXRlKGFyZ3MuZm9ybUNvbnRyb2wpKTsgfVxyXG4gICAgICAgICAgICApKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgYXN5bmNWYWxpZGF0b3JzIGFzeW5jQWxlcnQgZXZlbnQuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYXN5bmNWYWxpZGF0b3IuYXN5bmNBbGVydC5zdWJzY3JpYmUoKGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykgPT4geyB0aGlzLm9uQXN5bmNBbGVydChhbGVydHMpOyB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGxpc3RlbiB0byBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VzIGZyb20gb3VyIG1vZGVsXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hY2Nlc3Nvci5kaXNhYmxlZENoYW5nZS5zdWJzY3JpYmUoKGRpc2FibGVkID0+IHRoaXMubmdNb2RlbERpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCkpKSk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBuZ01vZGVsIHN0YXR1cyBjaGFuZ2VzLlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdNb2RlbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShzdGF0dXMgPT4gdGhpcy5vblN0YXR1c0NoYW5nZWQoc3RhdHVzKSkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdNb2RlbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vblZhbHVlQ2hhbmdlZCh2YWx1ZSkpKTtcclxuXHJcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHBhcmVudCBhZ2dyZWdhdG9yLCB0aGVuIHJlZ2lzdGVyIHRvIGl0XHJcbiAgICAgICAgaWYgKHRoaXMuYWdncmVnYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0b3IuYWRkRm9ybUZpZWxkKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gb3VyIG1vZGVsIG1heSBoYXZlIHN0YXJ0ZWQgaW4gdGhlIGRpc2FibGVkIHN0YXRlLCBzbyBpbml0aWFsaXplIG91ciB0cmFja2luZyBwcm9wZXJ0eSB0byB0aGUgY3VycmVudCBhY2Nlc3NvciBzdGF0ZS5cclxuICAgICAgICB0aGlzLmRpc2FibGVkQnlNb2RlbCA9IHRoaXMuYWNjZXNzb3IuZGlzYWJsZWQ7XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZSBvdXIgbW9kZWwgc3RhcnRzIGluIGEgcHJpc3RpbmUgc3RhdGVcclxuICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG5cclxuICAgICAgICAvLyBhIGJpdCBoYWNreSwgYnV0IHRoaXMgd29ya3MgdG8gdHJpZ2dlciB2YWxpZGF0aW9uIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGZvcm0gbG9hZHMuXHJcbiAgICAgICAgLy8gdGhpcyBtZXRob2QgZG9lcyBub3Qgd29yayBwcm9wZXJseSB3aXRoIGVkaXRhYmxlIGdyaWRzIHVzaW5nIGZvcm1GaWVsZENvbnRhaW5lciwgdXNlIGV4cGxpY2l0IGltbWVkaWF0ZVZhbGlkYXRpb24gY2FsbCBhYm92ZS5cclxuICAgICAgICBpZiAoIXRoaXMuZm9ybUZpZWxkQ29udGFpbmVyICYmIHRoaXMuaW1tZWRpYXRlVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIERvQ2hlY2sgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XHJcbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XHJcbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgb3VyIGxheW91dFxyXG4gICAgICAgIGNvbnN0IGxheW91dFdpZHRoID0gdGhpcy5sYXlvdXRXaWR0aDtcclxuICAgICAgICBpZiAobGF5b3V0V2lkdGggIT09IHRoaXMucHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByZXZpb3VzbHlDaGVja2VkTGF5b3V0V2lkdGggPSBsYXlvdXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHN5bmNocm9uaXplcyB0aGUgZXhwZWN0ZWQgZGlzYWJsZWQgc3RhdGUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBtb2RlbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBkaXNhYmxlID0gdGhpcy5pbnRlcm5hbERpc2FibGVkO1xyXG4gICAgICAgIGlmIChkaXNhYmxlID09PSB0aGlzLmFjY2Vzc29yLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXNhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuY2VzdG9yRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWRCeU1vZGVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkSW5wdXQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGZpZWxkc2V0IGFuY2VzdG9ycy4gT3VyIGFuY2VzdHJ5IHNob3VsZCBuZXZlciBjaGFuZ2UsIHNvIHdlIGNhbiBzYXZlIHBlcmYgYnkgY29sbGVjdGluZyB0aGlzIG5vdy5cclxuICAgICAgICBjb25zdCBmaWVsZHNldEFuY2VzdG9ycyA9IDxIVE1MRmllbGRTZXRFbGVtZW50W10+RG9tLmdldEFsbEFuY2VzdG9ycyhcclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAoZWxlbWVudCkgPT4gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdGSUVMRFNFVCdcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBsaXN0ZW4gdG8gdGhlIGN1c3RvbSBkaXNhYmxlZENoYW5nZWQgZXZlbnQgb24gb3VyIGFuY2VzdG9yIGZpZWxkc2V0c1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkQ2hhbmdlZE9ic2VydmFibGVzID0gZmllbGRzZXRBbmNlc3RvcnMubWFwKGYgPT4gZnJvbUV2ZW50KGYsIERpc2FibGVkQ2hhbmdlZEV2ZW50LnR5cGVOYW1lKSk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIG1lcmdlKC4uLmRpc2FibGVkQ2hhbmdlZE9ic2VydmFibGVzKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNlc3RvckRpc2FibGVkID0gZmllbGRzZXRBbmNlc3RvcnMuc29tZShmID0+IGYuZGlzYWJsZWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBpbml0aWFsaXplIG91ciBhbmNlc3RyYWwgZGlzYWJsZWQgc3RhdGVcclxuICAgICAgICB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgPSBmaWVsZHNldEFuY2VzdG9ycy5zb21lKGYgPT4gZi5kaXNhYmxlZCk7XHJcbiAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25EZXN0cm95IGludGVyZmFjZVxyXG4gICAgICogZGVyaXZlZCBjbGFzc2VzIGFyZSBhbHdheXMgZXhwZWN0ZWQgdG8gY2FsbCBzdXBlci5uZ09uRGVzdHJveSgpIHdoZW4gb3ZlcnJpZGluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgcGFyZW50IGFnZ3JlZ2F0b3IsIHRoZW4gcmVnaXN0ZXIgdG8gaXRcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci5yZW1vdmVGb3JtRmllbGQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG4gICAgICAgIC8vIDYwMHB4IGlzIGJyZWFrcG9pbnQgZm9yIGZvcm0gZmllbGQgdmVydGljYWwvaG9yaXpvbnRhbCBsYXlvdXRcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IGxheW91dFdpZHRoID49IDYwMCA/IEZvcm1GaWVsZE9yaWVudGF0aW9uLkhvcml6b250YWwgOiBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVkT3JpZW50YXRpb24gIT09IG9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlZE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnlpZWxkT25PcmllbnRhdGlvbkNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSBvcmllbnRhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHlpZWxkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uZ0lzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgeWllbGRPbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdJc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGZpZWxkIHRvIGl0cyBpbml0aWFsIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nTW9kZWwucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBiYXNlIG9uIHRoZSBpbml0aWFsIHZhbHVlcyB0eXBlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0Q2xlYXJWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSBmaWVsZHMgdmFsdWUgdG8gdGhlIGNsaXBib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvcHlUb0NsaXBib2FyZCgpIHtcclxuICAgICAgICBNc2Z0U21lLmNvcHlUb0NsaXBib2FyZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkRGlzcGxheUhlYWRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaGlkZUhlYWRlciAmJiAoISEodGhpcy5sYWJlbCB8fCB0aGlzLmRldGFpbHMpIHx8IHRoaXMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhpcyBmb3JtIGZpZWxkIGlzIHZhbGlkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgZm9ybSBmaWVsZCBpcyBkaXJ0eS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIHByaXN0aW5lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzUHJpc3RpbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIGRpcnR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzRGlydHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIGZvY3VzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvY3VzKCkge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICBuZXh0LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC5cclxuICAgICAqIEBwYXJhbSBkaXNhYmxlZCBUaGUgbmV3IGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBuZ01vZGVsRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdERpc2FibGVkID0gdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgfHwgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHBlY3REaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEJ5TW9kZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRCeU1vZGVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgdmFsdWUgdG8gdXNlIHdoZW4gY2xlYXJpbmcgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBpbml0aWFsIHZhbHVlIHR5cGVcclxuICAgICAqIERlcml2ZWQgZmllbGRzIG1heSBvdmVycmlkZSB0aGlzIHRvIGNoYW5nZSB0aGUgY2xlYXIgdmFsdWUgYmVoYXZpb3JcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldENsZWFyVmFsdWUoKTogVE1vZGVsIHtcclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxhbnk+W107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLmluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT4nJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIG9wdGlvbmFsbHkgYnkgZGVyaXZlZCBjb21wb25lbnRzLlxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFzeW5jVmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25BbGVydHM+IHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGFueSB0aW1lIHZhbHVlIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVEZXRhaWxzKCkge1xyXG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXTtcclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMuZGVzY3JpcHRpb24pKSB7XHJcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCh0aGlzLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmluc3RydWN0aW9ucykpIHtcclxuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHRoaXMuaW5zdHJ1Y3Rpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlcGFyYXRlIGRldGFpbHMgYW5kIGluc3RydWN0aW9ucyB3aXRoIGRvdWJsZSBsaW5lIGJyZWFrcy5cclxuICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzLmxlbmd0aCA+IDAgPyBkZXRhaWxzLmpvaW4oJ1xcblxcbicpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzIGluaXRpYWxpemF0aW9uLCBUaGVzZSBjbGFzc2VzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1mb3JtLWZpZWxkJ1xyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNoYW5nZXMsIGluIHRoZSBVSSBvciBwcm9ncmFtbWF0aWNhbGx5LlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLnJlcG9ydENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmdNb2RlbFsndXBkYXRlJ10ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hhbmdlLmVtaXQoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmUtY2FsY3VsYXRlZC5cclxuICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25TdGF0dXNDaGFuZ2VkKHN0YXR1czogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbGVydHMoKTtcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci51cGRhdGVTdGF0dXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25BbGVydChhbGVydHM6IFZhbGlkYXRpb25BbGVydHMpIHtcclxuICAgICAgICB0aGlzLm5vbkVycm9yQWxlcnRzID0gdGhpcy5yZW1vdmVFcnJvckFsZXJ0cyhhbGVydHMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25Bc3luY0FsZXJ0KGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIHRoaXMubm9uRXJyb3JBc3luY0FsZXJ0cyA9IHRoaXMucmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFsZXJ0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZXJyb3IgYWxlcnRzIGZyb20gYSBWYWxpZGF0aW9uQWxlcnQgT2JqZWN0c1xyXG4gICAgICogZXJyb3JzIHdpbGwgYmUgc3VyZmFjZWQgaW4gdGhlIHRoaXMubmdNb2RlbC5jb250cm9sLmVycm9ycyBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgdG8gZmlsdGVyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcbiAgICAgICAgY29uc3Qgbm9uRXJyb3JBbGVydHMgPSB7fTtcclxuICAgICAgICBPYmplY3Qua2V5cyhhbGVydHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWxlcnQgPSBhbGVydHNba2V5XTtcclxuICAgICAgICAgICAgaWYgKGFsZXJ0ICYmICg8VmFsaWRhdGlvbkFsZXJ0PmFsZXJ0KS52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgbm9uRXJyb3JBbGVydHNba2V5XSA9IGFsZXJ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vbkVycm9yQWxlcnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgZm9ybSBmaWVsZCBib3JkZXIgdG8gcmVmbGVjdCBlcnJvciBhbGVydHNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVCb3JkZXJTdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5hbGVydCAmJiB0aGlzLmFsZXJ0LnNldmVyaXR5ID09PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvclxyXG4gICAgICAgICAgICAmJiAodGhpcy5hbGVydC52YWxpZCB8fCB0aGlzLmFsZXJ0LnNob3dXaGVuUHJpc3RpbmUgfHwgdGhpcy5uZ01vZGVsLmRpcnR5KSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQWxlcnRCb3JkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JBbGVydEJvcmRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGFjdGl2ZSBhbGVydHMgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVBbGVydHMoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzO1xyXG4gICAgICAgIHRoaXMuYWxlcnQgPSBudWxsO1xyXG4gICAgICAgIC8vIFdoZW4gaW4gYSBsb2FkaW5nIHN0YXRlLCBzaG93IHRoYXQgYWxlcnQgb25seS5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQgPSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sb2FkaW5nTWVzc2FnZSB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLkxvYWRpbmcubWVzc2FnZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXaGVuIGluIGEgcGVuZGluZyBzdGF0ZSwgc2hvdyB0aGF0IGFsZXJ0IG9ubHkuXHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucGVuZGluZ01lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLlZhbGlkYXRpb24uUGVuZGluZy5tZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGdhdGhlciBvdXIgYWxlcnRzLlxyXG4gICAgICAgIGNvbnN0IGFsZXJ0c0FycmF5OiBNc2Z0U21lLk5hbWVWYWx1ZTxzdHJpbmcsIGFueT5bXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5ub25FcnJvckFsZXJ0cyk7XHJcbiAgICAgICAgdGhpcy5hZGRWaXNpYmxlQWxlcnRzKGFsZXJ0c0FycmF5LCB0aGlzLm5vbkVycm9yQXN5bmNBbGVydHMpO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZXJyb3JzKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYXIgYWN0aXZlIGFsZXJ0IGlmIHRoZXJlIGFyZSBubyBhbGVydHNcclxuICAgICAgICBpZiAoYWxlcnRzQXJyYXkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1GaWVsZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCb3JkZXJTdGF0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb3JtRmllbGRFcnJvck5hbWVzID0geyByZXF1aXJlZDogJ3JlcXVpcmVkJywgaW52YWxpZERpc3BsYXlWYWx1ZTogJ2ludmFsaWREaXNwbGF5VmFsdWUnIH07XHJcbiAgICAgICAgLy8gUHJlIHNvcnQgZm9yIGludmFsaWQgZGlzcGxheSBlcnJvcnMgdG8gY29tZSBiZWZvcmUgcmVxdWlyZWQgZXJyb3JzLCB0aGV5IGhhdmUgdGhlIHNhbWUgc2V2ZXJpdHlcclxuICAgICAgICBhbGVydHNBcnJheS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQgJiYgYi5uYW1lID09PSBmb3JtRmllbGRFcnJvck5hbWVzLmludmFsaWREaXNwbGF5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMuaW52YWxpZERpc3BsYXlWYWx1ZSAmJiBiLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWxlcnRzID0gYWxlcnRzQXJyYXlcclxuICAgICAgICAgICAgLm1hcChlID0+IHRoaXMuZ2V0QWxlcnQoZS5uYW1lLCBlLnZhbHVlKSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHNvcnQgb24gdmFsaWQgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChhLnZhbGlkICE9PSBiLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEudmFsaWQgPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IG9uIHNldmVyaXR5XHJcbiAgICAgICAgICAgICAgICBpZiAoYS5zZXZlcml0eSAhPT0gYi5zZXZlcml0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNldmVyaXR5IDwgYi5zZXZlcml0eSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhleSBhcmUgY29uc2lkZXJlZCBlcXVhbCBmb3Igc29ydGluZ1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzb3J0ZWRBbGVydHMuc29tZShhbGVydCA9PiB7XHJcbiAgICAgICAgICAgIC8vIFNob3cgYWxlcnQgaW4gdGhlc2Ugc2NlbmFyaW9zOlxyXG4gICAgICAgICAgICAvLyAtIElmIHRoZSBmb3JtIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBpdCBpcyBub3QgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgZm9ybVxyXG4gICAgICAgICAgICAvLyAtIElmIGEgY3VzdG9tIGFsZXJ0IG1hcmtzIHNob3dXaGVuUHJpc2l0aW5lIGFzIHRydWVcclxuICAgICAgICAgICAgLy8gLSBJZiB0aGUgYWxlcnQgaXMgbWFya2VkIGFzIHZhbGlkXHJcbiAgICAgICAgICAgIC8vIC0gQW55IG90aGVyIGFsZXJ0cyBhZnRlciB0aGUgZm9ybSBpcyBtYXJrZWQgYXMgZGlydHlcclxuICAgICAgICAgICAgaWYgKGFsZXJ0LnNldmVyaXR5ICE9PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvciB8fCBhbGVydC52YWxpZCB8fCBhbGVydC5zaG93V2hlblByaXN0aW5lIHx8IHRoaXMubmdNb2RlbC5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydCA9IGFsZXJ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQoYWxlcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUJvcmRlclN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRWaXNpYmxlQWxlcnRzKHRhcmdldDogTXNmdFNtZS5OYW1lVmFsdWU8c3RyaW5nLCBhbnk+W10sIGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIGlmICghTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChhbGVydHMpKSB7XHJcbiAgICAgICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleShhbGVydHMsIChrLCB2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISg8VmFsaWRhdGlvbkFsZXJ0PnYpLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKHsgbmFtZTogaywgdmFsdWU6IHYgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldHMgYW4gYWxlcnQgb2JqZWN0IGZyb20gYSBrZXkgYW5kIHZhbGlkYXRpb24gcmVzdWx0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRBbGVydChrZXk6IHN0cmluZywgYWxlcnQ6IFZhbGlkYXRpb25SZXN1bHQpOiBWYWxpZGF0aW9uQWxlcnQge1xyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBmYWxzZSwgbnVsbCwgb3IgdmFsaWQgd2l0aCBubyBtZXNzYWdlLCB0aGVuIGl0cyBub3QgcmVhbGx5IGFuIGFsZXJ0IHRoYXQgbmVlZHMgdG8gYmUgc2hvd24gYW5kIHNob3VsZCBiZSBpZ25vcmVkXHJcbiAgICAgICAgaWYgKGFsZXJ0ID09PSBmYWxzZVxyXG4gICAgICAgICAgICB8fCBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0KVxyXG4gICAgICAgICAgICB8fCAoKGFsZXJ0IGFzIFZhbGlkYXRpb25BbGVydCkudmFsaWQgPT09IHRydWUpICYmIE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKChhbGVydCBhcyBWYWxpZGF0aW9uQWxlcnQpLm1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHByb2Nlc3NlZEFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBhIHN0cmluZywgc2hvdyBpdCBhcyBhbiBlcnJvclxyXG4gICAgICAgIGlmICh0eXBlb2YgYWxlcnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogPHN0cmluZz5hbGVydFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBwcm9jZXNzZWRBbGVydCA9IHRoaXMuZ2V0S25vd25OZ0FsZXJ0KGtleSwgYWxlcnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGFsZXJ0IGlzIGEgc2ltcGxlIHRydWUsIHdlIGRvbnQgcmVhbGx5IGtub3cgaG93IHRvIGRlYWwgd2l0aCBpdCwgc28ganVzdCBjcmVhdGUgYW4gZW1wdHkgdmFsaWRhdGlvbiBvYmplY3RcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0gYWxlcnQgPT09IHRydWUgPyB7fSA6IHsgLi4uYWxlcnQgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB2YWxpZCBpcyBub3Qgc2V0LCB0aGVuIHNldCBpdCBleHBsaWNpdGx5IHRvIGZhbHNlXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChwcm9jZXNzZWRBbGVydC52YWxpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIG1lc3NhZ2UsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UocHJvY2Vzc2VkQWxlcnQubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5tZXNzYWdlID0gYFZhbGlkYXRpb24gZmFpbGVkOiAke2tleX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHNldmVyaXR5IGlzIG5vdCBzZXQgY29ycmVjdGx5IGFuZCB0aGUgZmllbGQgaXMgbm90IHZhbGlkLCB0aGVuIHNldCBpdCB0byBlcnJvclxyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydC52YWxpZCAmJiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKFZhbGlkYXRpb25BbGVydFNldmVyaXR5W3Byb2Nlc3NlZEFsZXJ0LnNldmVyaXR5XSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5zZXZlcml0eSA9IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkQWxlcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFuIGFsZXJ0IG9iamVjdCBmcm9tIGtub3duIGFuZ3VsYXIgYWxlcnQga2V5c1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0S25vd25OZ0FsZXJ0KGtleTogc3RyaW5nLCBhbGVydDogYW55KTogVmFsaWRhdGlvbkFsZXJ0IHtcclxuICAgICAgICBjb25zdCB2U3RyaW5ncyA9ICg8U3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncykuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uVmFsaWRhdGlvbjtcclxuICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICAgIC8vIGZpcnN0IGNoZWNrIGZvciBrbm93biBhbmd1bGFyICdidWlsdC1pbicgdmFsaWRhdGlvbnNcclxuXHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWluJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1pbi5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5taW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4Jzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5tYXgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuUmVxdWlyZWQuZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5FbWFpbC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5NaW5MZW5ndGguZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heExlbmd0aC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5yZXF1aXJlZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLlBhdHRlcm4uZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRQYXR0ZXJuKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UobWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2V2ZXJpdHkgPSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvcjtcclxuXHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShhbGVydCkpIHtcclxuICAgICAgICAgICAgLy8gbWVyZ2UgYWxlcnQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0XHJcbiAgICAgICAgICAgIHZhbGlkID0gISFhbGVydC52YWxpZDtcclxuICAgICAgICAgICAgc2V2ZXJpdHkgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0LnNldmVyaXR5KSA/IHNldmVyaXR5IDogYWxlcnQuc2V2ZXJpdHk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0Lm1lc3NhZ2UpID8gbWVzc2FnZSA6IGFsZXJ0Lm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWxpZDogdmFsaWQsXHJcbiAgICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSxcclxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBzb21lIGNhc2VzLCB3ZSBuZWVkIGEgY29tYmluZWQgdmVyc2lvbiBvZiB0aGUgbGFiZWwgYW5kIGRlc2NyaXB0aW9uIHNvIHRoYXQgdGhlIHNjcmVlbiByZWFkIGNhbiByZWFkIGl0IGFwcHJvcHJpYXRlbHkuXHJcbiAgICAgKiBDb21tb24gY2FzZXMgZm9yIHRoaXMgYXJlIHdoZW4gdXNpbmcgcm9sZT1cImdyb3VwXCIgb3Igcm9sZT1cInJhZGlvR3JvdXBcIiBiZWNhdXNlIHRoZXkgZG9lcyBub3Qgc3VwcG9ydCBhcmlhLWRlc2NyaWJlZGJ5XHJcbiAgICAgKiB3ZSBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBieSBzcGxpdHRpbmcgdGhlIGRlc2NyaXB0aW9uIGFuZCBhbmQgbGFiZWwgd2l0aCBhICcuJyAocGVyaW9kKVwiXHJcbiAgICAgKiBUT0RPOiB2ZXJpZnkgaG93IHRoaXMgbG9jYWxpemVzIG9yIGZpbmQgYSBiZXR0ZXIgd2F5LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYWJlbCB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMubGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9LiAke3RoaXMuZGVzY3JpcHRpb259YDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGJhc2UgY29tcG9uZW50IGZvciBTTUUgZm9yIGZpZWxkcy4gSXQgc2ltcGx5IHJlbW92ZXMgdGhlIG5lZWQgdG8gc3VwcGx5IHRoZSBzdHJpbmcgdHlwZSBwYXJhbWV0ZXIgdG8gRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAqIFRoaXMgY2xhc3MgaXMgZXhwb3J0ZWQgZnJvbSB0aGlzIGZpbGUsIGJ1dCBub3QgbWVhbnQgdG8gYmUgZXhwb3J0ZWQgZnJvbSBpbmRleC50cyBidW5kbGVzLlxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8VE1vZGVsPiBleHRlbmRzIEZvcm1GaWVsZENvbXBvbmVudDxTdHJpbmdzLCBUTW9kZWw+IHtcclxuICAgIC8vIFNob3VsZCBSZW1haW4gRW1wdHkuXHJcbn1cclxuIl19
|
|
@@ -3,15 +3,10 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
export class LayoutDefinitionComponent {
|
|
4
4
|
constructor() {
|
|
5
5
|
this.until = Number.MAX_VALUE;
|
|
6
|
-
/**
|
|
7
|
-
* Setting addBottomPadding to True will add bottom padding to all layout-items,
|
|
8
|
-
* otherwise does NOT add bottom padding to any layout-items.
|
|
9
|
-
*/
|
|
10
|
-
this.addBottomPadding = true;
|
|
11
6
|
}
|
|
12
7
|
}
|
|
13
8
|
/** @nocollapse */ LayoutDefinitionComponent.ɵfac = function LayoutDefinitionComponent_Factory(t) { return new (t || LayoutDefinitionComponent)(); };
|
|
14
|
-
/** @nocollapse */ LayoutDefinitionComponent.ɵcmp = i0.ɵɵdefineComponent({ type: LayoutDefinitionComponent, selectors: [["sme-layout-definition"]], inputs: { until: "until", columns: "columns", name: "name"
|
|
9
|
+
/** @nocollapse */ LayoutDefinitionComponent.ɵcmp = i0.ɵɵdefineComponent({ type: LayoutDefinitionComponent, selectors: [["sme-layout-definition"]], inputs: { until: "until", columns: "columns", name: "name" }, decls: 0, vars: 0, template: function LayoutDefinitionComponent_Template(rf, ctx) { }, encapsulation: 2 });
|
|
15
10
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LayoutDefinitionComponent, [{
|
|
16
11
|
type: Component,
|
|
17
12
|
args: [{
|
|
@@ -24,7 +19,5 @@ export class LayoutDefinitionComponent {
|
|
|
24
19
|
type: Input
|
|
25
20
|
}], name: [{
|
|
26
21
|
type: Input
|
|
27
|
-
}], addBottomPadding: [{
|
|
28
|
-
type: Input
|
|
29
22
|
}] }); })();
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWRlZmluaXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbGF5b3V0L2xheW91dC1kZWZpbml0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNakQsTUFBTSxPQUFPLHlCQUF5QjtJQUp0QztRQU1XLFVBQUssR0FBVyxNQUFNLENBQUMsU0FBUyxDQUFDO0tBUTNDOztxSEFWWSx5QkFBeUI7aUZBQXpCLHlCQUF5Qjt1RkFBekIseUJBQXlCO2NBSnJDLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxRQUFRLEVBQUUsRUFBRTthQUNmO2dCQUdVLEtBQUs7a0JBRFgsS0FBSztZQUtDLE9BQU87a0JBRGIsS0FBSztZQUlDLElBQUk7a0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtbGF5b3V0LWRlZmluaXRpb24nLFxyXG4gICAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXREZWZpbml0aW9uQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdW50aWw6IG51bWJlciA9IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICAvLyBUT0RPOiBuZWVkIHRvIGRlZmluZSBzb21lIG5hbWVkIGJyZWFrcG9pbnQgdmFsdWUgLyBcInVudGlsXCIgdmFsdWVzIGxhdGVyLlxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY29sdW1uczogbnVtYmVyO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|
|
@@ -97,16 +97,7 @@ export class LayoutComponent extends CoreBaseComponent {
|
|
|
97
97
|
layoutItems[i].paddingRight = this.itemHorizontalSpace + 'px';
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
-
|
|
101
|
-
layoutItems[i].paddingBottom = this.itemVerticalSpace + 'px';
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
// If bottom padding already exists and currentLayoutDefinition.addBottomPadding is False
|
|
105
|
-
// Remove the bottom padding.
|
|
106
|
-
if (layoutItems[i].paddingBottom === this.itemVerticalSpace + 'px') {
|
|
107
|
-
layoutItems[i].paddingBottom = 0 + 'px';
|
|
108
|
-
}
|
|
109
|
-
}
|
|
100
|
+
layoutItems[i].paddingBottom = this.itemVerticalSpace + 'px';
|
|
110
101
|
layoutItems[i].width = percentage + '%';
|
|
111
102
|
layoutItems[i].ready();
|
|
112
103
|
}
|
|
@@ -159,4 +150,4 @@ export class LayoutComponent extends CoreBaseComponent {
|
|
|
159
150
|
}], layoutChanged: [{
|
|
160
151
|
type: Output
|
|
161
152
|
}] }); })();
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2xheW91dC9sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbGF5b3V0L2xheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFVLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFFOUQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxpQkFBaUI7SUFzQ2xELFlBQVksUUFBa0IsRUFBdUMsTUFBYztRQUMvRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEaUQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXJCNUUsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBR3pCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUd2QixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFHekIsZUFBVSxHQUE0RSxFQUFFLENBQUM7UUFHekYsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIsa0JBQWEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQVFoRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFD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Qjt1RUF0Q2xELGVBQWU7b0NBUVAsbUJBQW1CO29DQUduQix5QkFBeUI7Ozs7Ozs7UUN4QjlDLGtCQUFrRDs7dUZEYXJDLGVBQWU7Y0FKM0IsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDOztzQkF1Q29DLE1BQU07dUJBQUMsbUJBQW1CO3dCQTdCbkQsV0FBVztrQkFEbEIsZUFBZTttQkFBQyxtQkFBbUI7WUFJNUIsV0FBVztrQkFEbEIsZUFBZTttQkFBQyx5QkFBeUI7WUFNbkMsbUJBQW1CO2tCQUR6QixLQUFLO1lBSUMsaUJBQWlCO2tCQUR2QixLQUFLO1lBSUMsaUJBQWlCO2tCQUR2QixLQUFLO1lBSUMsVUFBVTtrQkFEaEIsS0FBSztZQUlDLFdBQVc7a0JBRGpCLEtBQUs7WUFJQyxhQUFhO2tCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE91dHB1dCwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IExheW91dERlZmluaXRpb25Db21wb25lbnQgfSBmcm9tICcuL2xheW91dC1kZWZpbml0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2xheW91dC1pdGVtLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogTGF5b3V0IGNvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1sYXlvdXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xheW91dC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExheW91dENvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnTGF5b3V0Q29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBAQ29udGVudENoaWxkcmVuKExheW91dEl0ZW1Db21wb25lbnQpXHJcbiAgICBwcml2YXRlIGxheW91dEl0ZW1zOiBRdWVyeUxpc3Q8TGF5b3V0SXRlbUNvbXBvbmVudD47XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihMYXlvdXREZWZpbml0aW9uQ29tcG9uZW50KVxyXG4gICAgcHJpdmF0ZSBkZWZpbml0aW9uczogUXVlcnlMaXN0PExheW91dERlZmluaXRpb25Db21wb25lbnQ+O1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50TGF5b3V0RGVmaW5pdGlvbjogTGF5b3V0RGVmaW5pdGlvbkNvbXBvbmVudDtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGl0ZW1Ib3Jpem9udGFsU3BhY2UgPSAzMjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGl0ZW1WZXJ0aWNhbFNwYWNlID0gMzI7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0cnlUb0ZpbGxXaG9sZVJvdyA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkZWZpbml0aW9uOiB7IFtjb2x1bW5Db3VudDogbnVtYmVyXTogeyBsb3dlcldpZHRoPzogbnVtYmVyLCB1cHBlcldpZHRoPzogbnVtYmVyIH0gfSA9IHt9O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGFkTGFzdEl0ZW0gPSBmYWxzZTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHVibGljIGdldCBjdXJyZW50TGF5b3V0RGVmaW5pdGlvbk5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbiA/IHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24ubmFtZSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvciwgQEluamVjdChTTUVfTEFZT1VUX1BST1ZJREVSKSBwcml2YXRlIGxheW91dDogTGF5b3V0KSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25MYXlvdXRDaGFuZ2VkKCkpKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGF5b3V0SXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkxheW91dENoYW5nZWQoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGRzIGNsYXNzZXMgbGlzdGVkIHRvIHRoZSByb290IGNvbXBvbmVudFxyXG4gICAgcHJvdGVjdGVkIGdldEluaXRpYWxIb3N0Q2xhc3NlcygpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1hcnJhbmdlLXdyYXBzdGFjay1oJ1xyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVMYXlvdXQoKTogdm9pZCB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dEl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXlvdXRXaWR0aCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXlvdXRJdGVtcyA9IHRoaXMubGF5b3V0SXRlbXMudG9BcnJheSgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtblNwYW5Ub3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsYXlvdXRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gY29sdW1uU3BhblRvdGFsICs9IGl0ZW0uY29sdW1uU3Bhbik7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLmRlZmluaXRpb25zLnRvQXJyYXkoKS5zb3J0KChhLCBiKSA9PiBhLnVudGlsIC0gYi51bnRpbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNMYXlvdXREZWZpbml0aW9uID0gdGhpcy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGRlZmluaXRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbkNvbHVtbnMgPSBkZWZpbml0aW9uc1tpXS5jb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRXaWR0aCA8PSBkZWZpbml0aW9uc1tpXS51bnRpbCB8fCAodGhpcy50cnlUb0ZpbGxXaG9sZVJvdyAmJiBjb2x1bW5TcGFuVG90YWwgPD0gZGVmaW5pdGlvbkNvbHVtbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50ID0gZGVmaW5pdGlvbkNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUhvcml6b250YWxTcGFjZVBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKHRoaXMuaXRlbUhvcml6b250YWxTcGFjZSAqIDEwMCAvIGxheW91dFdpZHRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkNvdW50TW9kaWZpZXIgPSB0aGlzLnBhZExhc3RJdGVtID8gMCA6IDE7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdmFpbGFibGVMYXlvdXRXaWR0aFBlcmNlbnRhZ2UgPSAxMDAgLSBpdGVtSG9yaXpvbnRhbFNwYWNlUGVyY2VudGFnZSAqIChjb2x1bW5Db3VudCAtIGNvbHVtbkNvdW50TW9kaWZpZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwZXJjZW50YWdlU29GYXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0SXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggKz0gbGF5b3V0SXRlbXNbaV0uY29sdW1uU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uSW5kZXggPT09IGNvbHVtbkNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRydWUsIGl0IG1lYW5zIHRoaXMgbGF5b3V0IGl0ZW0gaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3cuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0IGVuc3VyZXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3cgdXNlIHJlc3Qgb2YgdGhlIHBlcmNlbnRhZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4YW1wbGU6IElmIGl0J3MgYSAzIGNvbHVtbiBsYXlvdXQsIHRoZSBsYXN0IG9uZSdzIHBlcmNlbnRhZ2UgaXMgMzMuMzQlLCBub3QgMzMuMzMlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxMDAgLSBwZXJjZW50YWdlU29GYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2VTb0ZhciA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdSaWdodCA9IHRoaXMucGFkTGFzdEl0ZW0gPyB0aGlzLml0ZW1Ib3Jpem9udGFsU3BhY2UgKyAncHgnIDogJzBweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5QZXJjZW50YWdlID0gTWF0aC5yb3VuZChhdmFpbGFibGVMYXlvdXRXaWR0aFBlcmNlbnRhZ2UgKiAxMDAgLyBjb2x1bW5Db3VudCkgLyAxMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSBsYXlvdXRJdGVtc1tpXS5jb2x1bW5TcGFuICogKGNvbHVtblBlcmNlbnRhZ2UgKyBpdGVtSG9yaXpvbnRhbFNwYWNlUGVyY2VudGFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2VTb0ZhciArPSBwZXJjZW50YWdlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2VTb0ZhciA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHV0IGl0ZW0gb24gbmV4dCByb3cgaWYgaXQgaXMgdG9vIGJpZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZVNvRmFyID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdSaWdodCA9IHRoaXMucGFkTGFzdEl0ZW0gPyB0aGlzLml0ZW1Ib3Jpem9udGFsU3BhY2UgKyAncHgnIDogJzBweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSB0aGlzLml0ZW1Ib3Jpem9udGFsU3BhY2UgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRMYXlvdXREZWZpbml0aW9uLmFkZEJvdHRvbVBhZGRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ0JvdHRvbSA9IHRoaXMuaXRlbVZlcnRpY2FsU3BhY2UgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGJvdHRvbSBwYWRkaW5nIGFscmVhZHkgZXhpc3RzIGFuZCBjdXJyZW50TGF5b3V0RGVmaW5pdGlvbi5hZGRCb3R0b21QYWRkaW5nIGlzIEZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYm90dG9tIHBhZGRpbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRJdGVtc1tpXS5wYWRkaW5nQm90dG9tID09PSB0aGlzLml0ZW1WZXJ0aWNhbFNwYWNlICsgJ3B4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ0JvdHRvbSA9IDAgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLndpZHRoID0gcGVyY2VudGFnZSArICclJztcclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xheW91dERlZmluaXRpb24gIT09IHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1sYXlvdXQtaXRlbVwiPjwvbmctY29udGVudD5cclxuIl19
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2xheW91dC9sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbGF5b3V0L2xheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFVLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFFOUQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxpQkFBaUI7SUFzQ2xELFlBQVksUUFBa0IsRUFBdUMsTUFBYztRQUMvRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEaUQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXJCNUUsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBR3pCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUd2QixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFHekIsZUFBVSxHQUE0RSxFQUFFLENBQUM7UUFHekYsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIsa0JBQWEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQVFoRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQTNDRDs7T0FFRztJQUNILElBQWMsYUFBYTtRQUN2QixPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7SUE0QkQsSUFBVywyQkFBMkI7UUFDbEMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNqRixDQUFDO0lBVU0sZUFBZTtRQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU0sZUFBZTtRQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELDRDQUE0QztJQUNsQyxxQkFBcUI7UUFDM0IsT0FBTyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDeEMseUJBQXlCO1NBQzVCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxZQUFZO1FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUNuRixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBRXBCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9DLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRWhFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRWpGLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDO2dCQUM5RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzlDLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFDakQsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLElBQUksaUJBQWlCLENBQUMsRUFBRTt3QkFDekcsV0FBVyxHQUFHLGlCQUFpQixDQUFDO3dCQUNoQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNqRDtpQkFDSjtnQkFFRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQztnQkFDL0YsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckQsTUFBTSw4QkFBOEIsR0FBRyxHQUFHLEdBQUcsNkJBQTZCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztnQkFFakgsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN6QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQ25CLFdBQVcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO29CQUN6QyxJQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUU7d0JBQzdCLGlFQUFpRTt3QkFDakUsaUVBQWlFO3dCQUNqRSxzRkFBc0Y7d0JBQ3RGLFVBQVUsR0FBRyxHQUFHLEdBQUcsZUFBZSxDQUFDO3dCQUNuQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO3dCQUNwQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzt3QkFDekYsV0FBVyxHQUFHLENBQUMsQ0FBQztxQkFDbkI7eUJBQU07d0JBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUE4QixHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7d0JBQzlGLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsNkJBQTZCLENBQUMsQ0FBQzt3QkFDNUYsZUFBZSxJQUFJLFVBQVUsQ0FBQzt3QkFFOUIsSUFBSSxlQUFlLEdBQUcsR0FBRyxFQUFFOzRCQUN2Qix3Q0FBd0M7NEJBQ3hDLElBQUksVUFBVSxHQUFHLEdBQUcsRUFBRTtnQ0FDbEIsVUFBVSxHQUFHLEdBQUcsQ0FBQzs2QkFDcEI7NEJBQ0QsZUFBZSxHQUFHLENBQUMsQ0FBQzs0QkFDcEIsV0FBVyxHQUFHLENBQUMsQ0FBQzs0QkFDaEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7eUJBQzVGOzZCQUFNOzRCQUNILFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQzt5QkFDakU7cUJBQ0o7b0JBQ0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO29CQUM3RCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUM7b0JBQ3hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSx3QkFBd0IsS0FBSyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7b0JBQzNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDOUIsQ0FBQyxDQUFDLENBQUM7aUJBQ047YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7aUdBaklRLGVBQWUsMERBc0NnQixtQkFBbUI7dUVBdENsRCxlQUFlO29DQVFQLG1CQUFtQjtvQ0FHbkIseUJBQXlCOzs7Ozs7O1FDeEI5QyxrQkFBa0Q7O3VGRGFyQyxlQUFlO2NBSjNCLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsV0FBVyxFQUFFLHlCQUF5QjthQUN6Qzs7c0JBdUNvQyxNQUFNO3VCQUFDLG1CQUFtQjt3QkE3Qm5ELFdBQVc7a0JBRGxCLGVBQWU7bUJBQUMsbUJBQW1CO1lBSTVCLFdBQVc7a0JBRGxCLGVBQWU7bUJBQUMseUJBQXlCO1lBTW5DLG1CQUFtQjtrQkFEekIsS0FBSztZQUlDLGlCQUFpQjtrQkFEdkIsS0FBSztZQUlDLGlCQUFpQjtrQkFEdkIsS0FBSztZQUlDLFVBQVU7a0JBRGhCLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsYUFBYTtrQkFEbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dCwgU01FX0xBWU9VVF9QUk9WSURFUiB9IGZyb20gJy4uL2NvbW1vbi9sYXlvdXQnO1xyXG5pbXBvcnQgeyBMYXlvdXREZWZpbml0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtZGVmaW5pdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtaXRlbS5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIExheW91dCBjb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtbGF5b3V0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9sYXlvdXQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0xheW91dENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihMYXlvdXRJdGVtQ29tcG9uZW50KVxyXG4gICAgcHJpdmF0ZSBsYXlvdXRJdGVtczogUXVlcnlMaXN0PExheW91dEl0ZW1Db21wb25lbnQ+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oTGF5b3V0RGVmaW5pdGlvbkNvbXBvbmVudClcclxuICAgIHByaXZhdGUgZGVmaW5pdGlvbnM6IFF1ZXJ5TGlzdDxMYXlvdXREZWZpbml0aW9uQ29tcG9uZW50PjtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudExheW91dERlZmluaXRpb246IExheW91dERlZmluaXRpb25Db21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpdGVtSG9yaXpvbnRhbFNwYWNlID0gMzI7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpdGVtVmVydGljYWxTcGFjZSA9IDMyO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdHJ5VG9GaWxsV2hvbGVSb3cgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGVmaW5pdGlvbjogeyBbY29sdW1uQ291bnQ6IG51bWJlcl06IHsgbG93ZXJXaWR0aD86IG51bWJlciwgdXBwZXJXaWR0aD86IG51bWJlciB9IH0gPSB7fTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHBhZExhc3RJdGVtID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgbGF5b3V0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudExheW91dERlZmluaXRpb25OYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24gPyB0aGlzLmN1cnJlbnRMYXlvdXREZWZpbml0aW9uLm5hbWUgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgcHJpdmF0ZSBsYXlvdXQ6IExheW91dCkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxheW91dC5sYXlvdXRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxheW91dEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMub25MYXlvdXRDaGFuZ2VkKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkcyBjbGFzc2VzIGxpc3RlZCB0byB0aGUgcm9vdCBjb21wb25lbnRcclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtYXJyYW5nZS13cmFwc3RhY2staCdcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlTGF5b3V0KCk6IHZvaWQge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXRJdGVtcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgTnVtYmVyLk1BWF9WQUxVRTtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5Db3VudCA9IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0SXRlbXMgPSB0aGlzLmxheW91dEl0ZW1zLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5TcGFuVG90YWwgPSAwO1xyXG4gICAgICAgICAgICAgICAgbGF5b3V0SXRlbXMuZm9yRWFjaChpdGVtID0+IGNvbHVtblNwYW5Ub3RhbCArPSBpdGVtLmNvbHVtblNwYW4pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5kZWZpbml0aW9ucy50b0FycmF5KCkuc29ydCgoYSwgYikgPT4gYS51bnRpbCAtIGIudW50aWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzTGF5b3V0RGVmaW5pdGlvbiA9IHRoaXMuY3VycmVudExheW91dERlZmluaXRpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYXlvdXREZWZpbml0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBkZWZpbml0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25Db2x1bW5zID0gZGVmaW5pdGlvbnNbaV0uY29sdW1ucztcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGF5b3V0V2lkdGggPD0gZGVmaW5pdGlvbnNbaV0udW50aWwgfHwgKHRoaXMudHJ5VG9GaWxsV2hvbGVSb3cgJiYgY29sdW1uU3BhblRvdGFsIDw9IGRlZmluaXRpb25Db2x1bW5zKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db3VudCA9IGRlZmluaXRpb25Db2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYXlvdXREZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Ib3Jpem9udGFsU3BhY2VQZXJjZW50YWdlID0gTWF0aC5yb3VuZCh0aGlzLml0ZW1Ib3Jpem9udGFsU3BhY2UgKiAxMDAgLyBsYXlvdXRXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Db3VudE1vZGlmaWVyID0gdGhpcy5wYWRMYXN0SXRlbSA/IDAgOiAxO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlTGF5b3V0V2lkdGhQZXJjZW50YWdlID0gMTAwIC0gaXRlbUhvcml6b250YWxTcGFjZVBlcmNlbnRhZ2UgKiAoY29sdW1uQ291bnQgLSBjb2x1bW5Db3VudE1vZGlmaWVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcGVyY2VudGFnZVNvRmFyID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5JbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4ICs9IGxheW91dEl0ZW1zW2ldLmNvbHVtblNwYW47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID09PSBjb2x1bW5Db3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0cnVlLCBpdCBtZWFucyB0aGlzIGxheW91dCBpdGVtIGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm93LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBlbnN1cmVzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm93IHVzZSByZXN0IG9mIHRoZSBwZXJjZW50YWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGFtcGxlOiBJZiBpdCdzIGEgMyBjb2x1bW4gbGF5b3V0LCB0aGUgbGFzdCBvbmUncyBwZXJjZW50YWdlIGlzIDMzLjM0JSwgbm90IDMzLjMzJVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gMTAwIC0gcGVyY2VudGFnZVNvRmFyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlU29GYXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSB0aGlzLnBhZExhc3RJdGVtID8gdGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlICsgJ3B4JyA6ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uUGVyY2VudGFnZSA9IE1hdGgucm91bmQoYXZhaWxhYmxlTGF5b3V0V2lkdGhQZXJjZW50YWdlICogMTAwIC8gY29sdW1uQ291bnQpIC8gMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gbGF5b3V0SXRlbXNbaV0uY29sdW1uU3BhbiAqIChjb2x1bW5QZXJjZW50YWdlICsgaXRlbUhvcml6b250YWxTcGFjZVBlcmNlbnRhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlU29GYXIgKz0gcGVyY2VudGFnZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJjZW50YWdlU29GYXIgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHB1dCBpdGVtIG9uIG5leHQgcm93IGlmIGl0IGlzIHRvbyBiaWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJjZW50YWdlID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IDEwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2VTb0ZhciA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSB0aGlzLnBhZExhc3RJdGVtID8gdGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlICsgJ3B4JyA6ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ1JpZ2h0ID0gdGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nQm90dG9tID0gdGhpcy5pdGVtVmVydGljYWxTcGFjZSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ud2lkdGggPSBwZXJjZW50YWdlICsgJyUnO1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTGF5b3V0RGVmaW5pdGlvbiAhPT0gdGhpcy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheW91dENoYW5nZWQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwic21lLWxheW91dC1pdGVtXCI+PC9uZy1jb250ZW50PlxyXG4iXX0=
|