@sumaris-net/ngx-components 2.4.89 → 2.4.90-rc2
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/esm2020/src/app/admin/admin-routing.module.mjs +5 -5
- package/esm2020/src/app/admin/admin.module.mjs +5 -5
- package/esm2020/src/app/admin/services/person.service.mjs +4 -4
- package/esm2020/src/app/admin/services/validator/person.validator.mjs +4 -4
- package/esm2020/src/app/admin/users/users.mjs +4 -4
- package/esm2020/src/app/admin/users/users.module.mjs +5 -5
- package/esm2020/src/app/core/about/about.modal.mjs +4 -4
- package/esm2020/src/app/core/about/about.module.mjs +5 -5
- package/esm2020/src/app/core/account/account.module.mjs +5 -5
- package/esm2020/src/app/core/account/account.page.mjs +4 -4
- package/esm2020/src/app/core/auth/auth.form.mjs +4 -4
- package/esm2020/src/app/core/auth/auth.modal.mjs +4 -4
- package/esm2020/src/app/core/auth/auth.module.mjs +5 -5
- package/esm2020/src/app/core/core.module.mjs +5 -5
- package/esm2020/src/app/core/core.testing.module.mjs +5 -5
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +4 -4
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +5 -5
- package/esm2020/src/app/core/form/entity/editor.class.mjs +7 -7
- package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +4 -4
- package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +4 -4
- package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +4 -4
- package/esm2020/src/app/core/form/entity/entity.module.mjs +5 -5
- package/esm2020/src/app/core/form/form.class.mjs +4 -4
- package/esm2020/src/app/core/form/form.module.mjs +5 -5
- package/esm2020/src/app/core/form/form.utils.mjs +2 -2
- package/esm2020/src/app/core/form/list/list.form.mjs +4 -4
- package/esm2020/src/app/core/form/list/list.module.mjs +5 -5
- package/esm2020/src/app/core/form/properties/properties.form.mjs +4 -4
- package/esm2020/src/app/core/form/properties/properties.module.mjs +5 -5
- package/esm2020/src/app/core/form/properties/property.validator.mjs +4 -4
- package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +4 -4
- package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +5 -5
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +4 -4
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +5 -5
- package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +4 -4
- package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +4 -4
- package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +5 -5
- package/esm2020/src/app/core/graphql/graphql.module.mjs +5 -5
- package/esm2020/src/app/core/graphql/graphql.service.mjs +17 -6
- package/esm2020/src/app/core/home/home.mjs +4 -4
- package/esm2020/src/app/core/home/home.module.mjs +5 -5
- package/esm2020/src/app/core/icon/icon.component.mjs +4 -4
- package/esm2020/src/app/core/icon/icon.module.mjs +5 -5
- package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +4 -4
- package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +5 -5
- package/esm2020/src/app/core/menu/menu.component.mjs +4 -4
- package/esm2020/src/app/core/menu/menu.module.mjs +5 -5
- package/esm2020/src/app/core/menu/menu.service.mjs +4 -4
- package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +4 -4
- package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +5 -5
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +4 -4
- package/esm2020/src/app/core/peer/select-peer.module.mjs +5 -5
- package/esm2020/src/app/core/register/register-confirm.page.mjs +4 -4
- package/esm2020/src/app/core/register/register.form.mjs +4 -4
- package/esm2020/src/app/core/register/register.modal.mjs +4 -4
- package/esm2020/src/app/core/register/register.module.mjs +5 -5
- package/esm2020/src/app/core/services/account.service.mjs +4 -4
- package/esm2020/src/app/core/services/auth-guard.service.mjs +4 -4
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +4 -4
- package/esm2020/src/app/core/services/base-graphql-service.class.mjs +4 -4
- package/esm2020/src/app/core/services/config.service.mjs +4 -4
- package/esm2020/src/app/core/services/crypto.service.mjs +4 -4
- package/esm2020/src/app/core/services/local-settings.service.mjs +4 -4
- package/esm2020/src/app/core/services/network.service.mjs +4 -4
- package/esm2020/src/app/core/services/pipes/account.pipes.mjs +9 -9
- package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
- package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
- package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
- package/esm2020/src/app/core/services/platform.service.mjs +4 -4
- package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +4 -4
- package/esm2020/src/app/core/services/testing/referential.validator.mjs +4 -4
- package/esm2020/src/app/core/services/validator/account.validator.mjs +4 -4
- package/esm2020/src/app/core/services/validator/base.validator.class.mjs +4 -4
- package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +4 -4
- package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +4 -4
- package/esm2020/src/app/core/settings/settings.module.mjs +5 -5
- package/esm2020/src/app/core/settings/settings.page.mjs +4 -4
- package/esm2020/src/app/core/table/actions-column.component.mjs +4 -4
- package/esm2020/src/app/core/table/async-table.class.mjs +4 -4
- package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +4 -4
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +4 -4
- package/esm2020/src/app/core/table/memory-table.class.mjs +4 -4
- package/esm2020/src/app/core/table/table-select-columns.component.mjs +4 -4
- package/esm2020/src/app/core/table/table.class.mjs +4 -4
- package/esm2020/src/app/core/table/table.module.mjs +5 -5
- package/esm2020/src/app/core/table/testing/table-validator.service.mjs +4 -4
- package/esm2020/src/app/core/table/testing/table.testing.mjs +4 -4
- package/esm2020/src/app/core/table/testing/table.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/audio/audio.mjs +4 -4
- package/esm2020/src/app/shared/audio/audio.testing.mjs +4 -4
- package/esm2020/src/app/shared/audio/audio.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/capacitor/keyboard.mjs +4 -4
- package/esm2020/src/app/shared/debug/debug.component.mjs +4 -4
- package/esm2020/src/app/shared/debug/debug.module.mjs +5 -5
- package/esm2020/src/app/shared/directives/autofocus.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/autotitle.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/directives.module.mjs +5 -5
- package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/ng-var.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
- package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
- package/esm2020/src/app/shared/file/file.service.mjs +4 -4
- package/esm2020/src/app/shared/form/field.component.mjs +4 -4
- package/esm2020/src/app/shared/form/loading-spinner.mjs +4 -4
- package/esm2020/src/app/shared/gesture/gesture-config.mjs +4 -4
- package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +4 -4
- package/esm2020/src/app/shared/help/help.modal.mjs +4 -4
- package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +4 -4
- package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +4 -4
- package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +5 -5
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +4 -4
- package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +5 -5
- package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +4 -4
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +4 -4
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/image/image.module.mjs +5 -5
- package/esm2020/src/app/shared/image/image.service.mjs +4 -4
- package/esm2020/src/app/shared/logging/logging-service.class.mjs +4 -4
- package/esm2020/src/app/shared/logging/logging-service.module.mjs +5 -5
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +4 -4
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +5 -5
- package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +4 -4
- package/esm2020/src/app/shared/material/badge/badge.directive.mjs +4 -4
- package/esm2020/src/app/shared/material/badge/badge.module.mjs +5 -5
- package/esm2020/src/app/shared/material/badge/badge.test.mjs +4 -4
- package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +5 -5
- package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +4 -4
- package/esm2020/src/app/shared/material/chips/chips.module.mjs +5 -5
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +4 -4
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +5 -5
- package/esm2020/src/app/shared/material/datetime/material.date.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +4 -4
- package/esm2020/src/app/shared/material/duration/duration.module.mjs +5 -5
- package/esm2020/src/app/shared/material/duration/material.duration.mjs +4 -4
- package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +4 -4
- package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
- package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +4 -4
- package/esm2020/src/app/shared/material/material.module.mjs +5 -5
- package/esm2020/src/app/shared/material/material.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +5 -5
- package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +4 -4
- package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +4 -4
- package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
- package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +4 -4
- package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +5 -5
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +4 -4
- package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +25 -25
- package/esm2020/src/app/shared/pipes/colors.pipe.mjs +4 -4
- package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +7 -7
- package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/duration.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +4 -4
- package/esm2020/src/app/shared/pipes/form.pipes.mjs +19 -19
- package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +10 -10
- package/esm2020/src/app/shared/pipes/maps.pipe.mjs +13 -13
- package/esm2020/src/app/shared/pipes/math.pipes.mjs +13 -13
- package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +4 -4
- package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/pipes.module.mjs +5 -5
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +8 -8
- package/esm2020/src/app/shared/pipes/string.pipes.mjs +22 -22
- package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +9 -9
- package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +4 -4
- package/esm2020/src/app/shared/services/progress-bar.service.mjs +4 -4
- package/esm2020/src/app/shared/services/translate-context.service.mjs +4 -4
- package/esm2020/src/app/shared/shared-routing.module.mjs +8 -8
- package/esm2020/src/app/shared/shared.module.mjs +5 -5
- package/esm2020/src/app/shared/shared.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +4 -4
- package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +5 -5
- package/esm2020/src/app/shared/storage/storage.service.mjs +4 -4
- package/esm2020/src/app/shared/testing/observable.test.mjs +4 -4
- package/esm2020/src/app/shared/testing/tests.page.mjs +4 -4
- package/esm2020/src/app/shared/toast/toast.testing.mjs +4 -4
- package/esm2020/src/app/shared/toast/toast.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +4 -4
- package/esm2020/src/app/shared/toolbar/toolbar.mjs +4 -4
- package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +5 -5
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +4 -4
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +4 -4
- package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +4 -4
- package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +4 -4
- package/esm2020/src/app/social/job/job.module.mjs +5 -5
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +4 -4
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +4 -4
- package/esm2020/src/app/social/job/progression/job-progression.service.mjs +4 -4
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +4 -4
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +4 -4
- package/esm2020/src/app/social/job/testing/job.testing.module.mjs +5 -5
- package/esm2020/src/app/social/message/message.form.mjs +4 -4
- package/esm2020/src/app/social/message/message.modal.mjs +4 -4
- package/esm2020/src/app/social/message/message.module.mjs +5 -5
- package/esm2020/src/app/social/message/message.service.mjs +4 -4
- package/esm2020/src/app/social/social.module.mjs +5 -5
- package/esm2020/src/app/social/social.testing.module.mjs +5 -5
- package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +4 -4
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +4 -4
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +4 -4
- package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +5 -5
- package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +4 -4
- package/esm2020/src/app/social/user-event/user-event.module.mjs +5 -5
- package/esm2020/src/app/social/user-event/user-event.service.mjs +4 -4
- package/fesm2015/sumaris-net.ngx-components.mjs +833 -826
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +837 -826
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -105,10 +105,10 @@ export class CryptoService {
|
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
CryptoService._ready = false;
|
|
108
|
-
CryptoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
109
|
-
CryptoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
110
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
108
|
+
CryptoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CryptoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
109
|
+
CryptoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CryptoService, providedIn: 'root' });
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CryptoService, decorators: [{
|
|
111
111
|
type: Injectable,
|
|
112
112
|
args: [{ providedIn: 'root' }]
|
|
113
113
|
}] });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWhDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUVqRSxPQUFPLEVBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUMsVUFBVSxJQUFJLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQUV0RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUMsQ0FBQywyQkFBMkI7QUFFbEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLE1BQU0sRUFBVTtRQUNkLENBQUMsRUFBRSxJQUFJO1FBQ1AsQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsQ0FBQztLQUNMO0lBQ0QsT0FBTyxFQUFVO1FBQ2YsQ0FBQyxFQUFFLElBQUk7UUFDUCxDQUFDLEVBQUUsRUFBRTtRQUNMLENBQUMsRUFBRSxDQUFDO0tBQ0w7SUFDRCxNQUFNLEVBQVU7UUFDZCxDQUFDLEVBQUUsS0FBSztRQUNSLENBQUMsRUFBRSxFQUFFO1FB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QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQWU7UUFDakMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7O0FBekVjLG9CQUFNLEdBQUcsS0FBTSxDQUFBOzJHQUZuQixhQUFhOytHQUFiLGFBQWEsY0FERCxNQUFNOzRGQUNsQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Jhc2U1OH0gZnJvbSAnLi9iYXNlNTgnO1xuXG5pbXBvcnQge3NjcnlwdEVuY29kZX0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvL3NjcnlwdC9lbmNvZGUnO1xuaW1wb3J0IHtQYXJhbXN9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0by9zY3J5cHQvdHlwZXMnO1xuaW1wb3J0IHtjcnlwdG9XYWl0UmVhZHksIGVkMjU1MTlQYWlyRnJvbVNlZWQsIGVkMjU1MTlTaWduLCBlZDI1NTE5VmVyaWZ5fSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuXG5pbXBvcnQge3NoYTUxMn0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGE1MTInO1xuaW1wb3J0IHtzaGEyNTZ9IGZyb20gJ0Bub2JsZS9oYXNoZXMvc2hhMjU2JztcbmltcG9ydCB7dXRpbHN9IGZyb20gJ0Bub2JsZS9lZDI1NTE5JztcblxuaW1wb3J0IHtieXRlc1RvSGV4IGFzIHRvSGV4fSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7S2V5cGFpcn0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvL3R5cGVzJztcbmltcG9ydCB7ZGVjb2RlVVRGOCwgZGVjb2RlQmFzZTY0LCBlbmNvZGVCYXNlNjR9IGZyb20gJ3R3ZWV0bmFjbC11dGlsJztcblxuZXhwb3J0IGNvbnN0IEVEMjU1MTlfU0VFRF9MRU5HVEggPSAzMjsgLy8gTGVuZ3RoIG9mIGEgRUQyNTUxOSBzZWVkXG5cbmV4cG9ydCBjb25zdCBTQ1JZUFRfUEFSQU1TID0ge1xuICBTSU1QTEU6IDxQYXJhbXM+e1xuICAgIE46IDIwNDgsXG4gICAgcjogOCxcbiAgICBwOiAxXG4gIH0sXG4gIERFRkFVTFQ6IDxQYXJhbXM+e1xuICAgIE46IDQwOTYsXG4gICAgcjogMTYsXG4gICAgcDogMVxuICB9LFxuICBTRUNVUkU6IDxQYXJhbXM+e1xuICAgIE46IDE2Mzg0LFxuICAgIHI6IDMyLFxuICAgIHA6IDJcbiAgfSxcbiAgSEFSREVTVDogPFBhcmFtcz57XG4gICAgTjogNjU1MzYsXG4gICAgcjogMzIsXG4gICAgcDogNFxuICB9LFxuICBFWFRSRU1FOiA8UGFyYW1zPntcbiAgICBOOiAyNjIxNDQsXG4gICAgcjogNjQsXG4gICAgcDogOFxuICB9XG59O1xuXG5cbmV4cG9ydCB7S2V5cGFpcn07XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIENyeXB0b1NlcnZpY2Uge1xuXG4gIHByaXZhdGUgc3RhdGljIF9yZWFkeSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldCBzdGFydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkeTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9yZWFkeSkgcmV0dXJuOyAvLyBPS1xuXG4gICAgYXdhaXQgY3J5cHRvV2FpdFJlYWR5KCk7XG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgc2lnbiBrZXlwYWlyLCB1c2luZyBzY3J5cHQsIGZyb20gYSBzYWx0IGFuZCBhIHBhc3N3b3JkXG4gICAqXG4gICAqIEBwYXJhbSBzYWx0XG4gICAqIEBwYXJhbSBwYXNzd29yZFxuICAgKiBAcGFyYW0gc2NyeXB0UGFyYW1zXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc2NyeXB0S2V5cGFpcihzYWx0OiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIHNjcnlwdFBhcmFtcz86IFBhcmFtcyk6IFByb21pc2U8S2V5cGFpcj4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgY29uc3QgcGFzc3dvcmRVOGEgPSBkZWNvZGVVVEY4KHBhc3N3b3JkKTtcbiAgICBjb25zdCBzYWx0VThhID0gZGVjb2RlVVRGOChzYWx0KTtcbiAgICBjb25zdCByZXN1bHQgPSBzY3J5cHRFbmNvZGUocGFzc3dvcmRVOGEsIHNhbHRVOGEsIHNjcnlwdFBhcmFtcyB8fCBTQ1JZUFRfUEFSQU1TLkRFRkFVTFQpO1xuICAgIGNvbnN0IHNlZWQgPSByZXN1bHQucGFzc3dvcmQuc2xpY2UoMCwgRUQyNTUxOV9TRUVEX0xFTkdUSCk7XG4gICAgcmV0dXJuIGVkMjU1MTlQYWlyRnJvbVNlZWQoc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIG1lc3NhZ2UsIGZyb20gYSBrZXkgcGFpclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNpZ24obWVzc2FnZTogc3RyaW5nLCBrZXlwYWlyOiBLZXlwYWlyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3Qgc2lnID0gZWQyNTUxOVNpZ24obSwga2V5cGFpcik7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NChzaWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBtZXNzYWdlLCBmcm9tIGEga2V5IHBhaXJcbiAgICovXG4gIHN0YXRpYyBhc3luYyB2ZXJpZnkobWVzc2FnZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgcHVibGljS2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3Qgc2lnID0gZGVjb2RlQmFzZTY0KHNpZ25hdHVyZSk7XG4gICAgY29uc3QgcHViID0gQmFzZTU4LmRlY29kZShwdWJsaWNLZXkpO1xuICAgIHJldHVybiBlZDI1NTE5VmVyaWZ5KG0sIHNpZywgcHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEEyNTYpIGEgbWVzc2FnZSwgYXMgSGV4XG4gICAqL1xuICBzdGF0aWMgc2hhMjU2KG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSkgYXMgVWludDhBcnJheTtcbiAgICBjb25zdCBieXRlcyA9IHNoYTI1Nih1dGlscy5jb25jYXRCeXRlcyhtKSk7XG4gICAgcmV0dXJuIHRvSGV4KGJ5dGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEE1MTIpIGEgbWVzc2FnZSwgYXMgSGV4XG4gICAqL1xuICBzdGF0aWMgc2hhNTEyKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3QgYnl0ZXMgPSBzaGE1MTIodXRpbHMuY29uY2F0Qnl0ZXMobSkpO1xuICAgIHJldHVybiB0b0hleChieXRlcyk7XG4gIH1cblxuICBzdGF0aWMgZW5jb2RlQmFzZTY0KG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NChtKTtcbiAgfVxufVxuIl19
|
|
@@ -424,9 +424,9 @@ export class LocalSettingsService extends StartableService {
|
|
|
424
424
|
return page;
|
|
425
425
|
}
|
|
426
426
|
}
|
|
427
|
-
LocalSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
428
|
-
LocalSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
429
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
427
|
+
LocalSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LocalSettingsService, deps: [{ token: i1.TranslateService }, { token: i2.Platform }, { token: i3.Storage }, { token: ENVIRONMENT }, { token: APP_LOCAL_SETTINGS, optional: true }, { token: APP_LOCAL_SETTINGS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
428
|
+
LocalSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LocalSettingsService, providedIn: 'root' });
|
|
429
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LocalSettingsService, decorators: [{
|
|
430
430
|
type: Injectable,
|
|
431
431
|
args: [{
|
|
432
432
|
providedIn: 'root'
|
|
@@ -446,4 +446,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
446
446
|
type: Inject,
|
|
447
447
|
args: [APP_LOCAL_SETTINGS_OPTIONS]
|
|
448
448
|
}] }]; } });
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkxQyxPQUFPLEVBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbkosT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUUvRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFBLGNBQWMsQ0FBQyxDQUFDO0FBRWpGLG9EQUFvRDtBQUNwRCxNQUFNLGdCQUFnQixHQUFrQjtJQUN0QyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLE1BQU0sRUFBRSxXQUFXLENBQUMsYUFBYTtJQUNqQyxhQUFhLEVBQUUsV0FBVyxDQUFDLG9CQUFvQixJQUFJLE1BQU07SUFDekQsa0JBQWtCLEVBQUUsQ0FBQztDQUN0QixDQUFDO0FBWUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQXlCLHNCQUFzQixDQUFDLENBQUM7QUFDckcsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHNCQUFzQixDQUFDLENBQUM7QUFPM0csTUFBTSxPQUFPLG9CQUFxQixTQUFRLGdCQUErQjtJQW9DdkUsWUFDVSxTQUEyQixFQUMzQixRQUFrQixFQUNsQixPQUFnQixFQUNnQixXQUF3QixFQUNQLGVBQThCLEVBQ3ZDLE9BQTZCO1FBRTdFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVBSLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNnQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNQLG9CQUFlLEdBQWYsZUFBZSxDQUFlO1FBdkN6RixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUM7UUEyQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBQyxHQUFHLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsaUJBQWlCLElBQUksS0FBSyxDQUFDO1FBRTlELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUE5Q0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztJQUNyRyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxL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QXdEO2lCQUN6RDs7MEJBeUNJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDckMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlIH0gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcblxuaW1wb3J0IHtlcXVhbHMsIGdldFByb3BlcnR5QnlQYXRoLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHVuZGVmaW5lZElmTnVsbH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXAgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMYXRMb25nUGF0dGVybiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc0NhcGFjaXRvciwgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1NUT1JBR0VfS0VZID0gJ3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUyA9IFsnbW9iaWxlJywgJ3RvdWNoVWknLypkZXByZWNhdGVkKi9dO1xuXG4vLyBmaXhtZTogdGhpcyBjb25zdGFudCBwb2ludHMgdG8gc3RhdGljIGVudmlyb25tZW50XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBMb2NhbFNldHRpbmdzID0ge1xuICBhY2NvdW50SW5oZXJpdGFuY2U6IHRydWUsXG4gIGxvY2FsZTogZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSxcbiAgbGF0TG9uZ0Zvcm1hdDogZW52aXJvbm1lbnQuZGVmYXVsdExhdExvbmdGb3JtYXQgfHwgJ0RETU0nLFxuICBwYWdlSGlzdG9yeU1heFNpemU6IDNcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxTZXR0aW5nc09wdGlvbnMge1xuICBzZXJpYWxpemVBc1N0cmluZz86IGJvb2xlYW47IC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgb3B0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcDtcbn1cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucyB7XG4gIHJlbW92ZVBhdGhRdWVyeVBhcmFtcz86IGJvb2xlYW47XG4gIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NFVFRJTkdTID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4+KCdEZWZhdWx0TG9jYWxTZXR0aW5ncycpO1xuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPExvY2FsU2V0dGluZ3NPcHRpb25zPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xuICAvL2RlcHM6IFtBUFBfTE9DQUxfU0VUVElOR1MsIEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFNldHRpbmdzU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8TG9jYWxTZXR0aW5ncz4ge1xuXG4gIG9uQ2hhbmdlID0gbmV3IFN1YmplY3Q8TG9jYWxTZXR0aW5ncz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25EZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlcmlhbGl6ZUFzU3RyaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF8kcGVyc2lzdDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgZ2V0IHNldHRpbmdzKCk6IExvY2FsU2V0dGluZ3Mge1xuICAgIHJldHVybiB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubG9jYWxlIHx8IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xuICB9XG5cbiAgZ2V0IGxhdExvbmdGb3JtYXQoKTogTGF0TG9uZ1BhdHRlcm4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGF0TG9uZ0Zvcm1hdCB8fCAnRERNTSc7XG4gIH1cblxuICBnZXQgdXNhZ2VNb2RlKCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEudXNhZ2VNb2RlKSA/IHRoaXMuX2RhdGEudXNhZ2VNb2RlIDogKGlzQ2FwYWNpdG9yKHdpbmRvdykgfHwgaXNNb2JpbGUod2luZG93KSA/ICdGSUVMRCcgOiAnREVTSycpO1xuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fZGF0YS5tb2JpbGUpID8gdGhpcy5fZGF0YS5tb2JpbGUgOiBpc01vYmlsZSh3aW5kb3cpO1xuICB9XG5cbiAgc2V0IG1vYmlsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgfHwgW10pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1MpIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNldHRpbmdzOiBMb2NhbFNldHRpbmdzLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlMpIG9wdGlvbnM6IExvY2FsU2V0dGluZ3NPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLmRlZmF1bHRTZXR0aW5ncyA9IHsuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5nc307XG5cbiAgICB0aGlzLl9vcHRpb25EZWZzID0gT2JqZWN0LnZhbHVlcyhvcHRpb25zPy5vcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLl9zZXJpYWxpemVBc1N0cmluZyA9IG9wdGlvbnM/LnNlcmlhbGl6ZUFzU3RyaW5nIHx8IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNldERhdGEoKTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIENyZWF0aW5nIHNlcnZpY2UnKTtcbiAgfVxuXG4gIG5nT25TdGFydCgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3M+IHtcblxuICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBTdGFydGluZyBzZXJ2aWNlLi4uJyk7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlXG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB0aGlzLm1vYmlsZTtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHRoaXMudXNhZ2VNb2RlO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcmV0dXJuIHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgfVxuXG5cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNhZ2VNb2RlID09PSBtb2RlO1xuICB9XG5cbiAgaXNPbkZpZWxkTW9kZSh2YWx1ZT86IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpID09PSAnRklFTEQnO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsKHNldHRpbmdzKSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFJlc3RvcmluZyBwcmV2aW91cyBzZXR0aW5ncy4uLicpO1xuXG4gICAgICBjb25zdCByZXN0b3JlZERhdGEgPSAodHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJykgPyBKU09OLnBhcnNlKHNldHRpbmdzKSA6IHNldHRpbmdzO1xuXG4gICAgICAvLyBBdm9pZCB0byBvdmVycmlkZSB0cmFuc2llbnQgcHJvcGVydGllc1xuICAgICAgU0VUVElOR1NfVFJBTlNJRU5UX1BST1BFUlRJRVMuZm9yRWFjaCh0cmFuc2llbnRLZXkgPT4ge1xuICAgICAgICBkZWxldGUgcmVzdG9yZWREYXRhW3RyYW5zaWVudEtleV07XG4gICAgICB9KTtcblxuICAgICAgLy8gTWVyZ2UgaW50byBleGlzdGluZyBkYXRhXG4gICAgICBkYXRhID0gT2JqZWN0LmFzc2lnbihkYXRhLCByZXN0b3JlZERhdGEpO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQoZGF0YSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHNldFByb3BlcnR5PFQgPSBzdHJpbmc+KGtleU9yRGVmOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbiwgdmFsdWU6IFQsIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjsgaW1tZWRpYXRlPzogYm9vbGVhbn0pe1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAha2V5T3JEZWYpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eShrZXlPckRlZi5rZXksIHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzID0gdGhpcy5fZGF0YS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRoaXMuX2RhdGEucHJvcGVydGllc1trZXlPckRlZl0gPSBpc05pbCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseShvcHRzPy5pbW1lZGlhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb3BlcnR5KGtleU9yRGVmOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCBpc05vdE5pbChkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlIDoga2V5T3JEZWYuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZElmTnVsbChkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0Jvb2xlYW4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyAodmFsdWUgJiYgdmFsdWUgIT09ICdmYWxzZScpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0ludChkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBwYXJzZUludCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzTnVtYmVycyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gW3BhcnNlRmxvYXQodmFsdWUpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNTdHJpbmdzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnLCcpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5KHNldHRpbmdzOiBQYXJ0aWFsPExvY2FsU2V0dGluZ3M+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuX2RhdGEsIC4uLnNldHRpbmdzfTtcblxuICAgIGlmIChlcXVhbHMoZGF0YSwgdGhpcy5fZGF0YSkpIHJldHVybjsgLy8gU2tpcCBpZiBubyBjaGFuZ2VzXG5cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgIC8vIFNhdmUgbG9jYWxseVxuICAgIGlmIChvcHRzICYmIG9wdHMucGVyc2lzdEltbWVkaWF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7IC8vIE5vIEFXQUlUXG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhcHBseVByb3BlcnR5KGtleToga2V5b2YgTG9jYWxTZXR0aW5ncywgdmFsdWU6IGFueSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB7fTtcbiAgICBjaGFuZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICBhd2FpdCB0aGlzLmFwcGx5KGNoYW5nZXMsIG9wdHMpO1xuICB9XG5cbiAgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHBhZ2VJZDogc3RyaW5nLCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucGFnZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aCh0aGlzLl9kYXRhLnBhZ2VzLCBrZXkgKyAnLicgKyBwcm9wZXJ0eU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0YS5wYWdlc1trZXldO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5nKHBhZ2VJZDogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLnBhZ2VzID0gdGhpcy5fZGF0YS5wYWdlcyB8fCB7fTtcblxuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKHByb3BlcnR5TmFtZSkge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdGhpcy5fZGF0YS5wYWdlc1trZXldIHx8IHt9O1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gIH1cblxuXG4gIGdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBPZmZsaW5lRmVhdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBpc0VtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoIWZlYXR1cmVOYW1lKSB0aHJvdyBFcnJvcignTWlzc2luZyBcXCdmZWF0dXJlTmFtZVxcJyBhcmd1bWVudCcpO1xuXG4gICAgZmVhdHVyZU5hbWUgPSBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlTmFtZSArICcjJztcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZChmID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmVOYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmICghZmVhdHVyZSkgcmV0dXJuOyAvLyBOb3QgZm91bmRcbiAgICBpZiAodHlwZW9mIGZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBsYXN0U3luY0RhdGUgPSBmZWF0dXJlLnN1YnN0cmluZyhmZWF0dXJlUHJlZml4Lmxlbmd0aCk7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbJHtmZWF0dXJlTmFtZX1dIExhc3Qgc3luY2hyb25pemF0aW9uIGRhdGU6ICR7bGFzdFN5bmNEYXRlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUsXG4gICAgICAgIGxhc3RTeW5jRGF0ZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmU7XG4gIH1cblxuICBnZXRPZmZsaW5lRmVhdHVyZUxhc3RTeW5jRGF0ZShmZWF0dXJlTmFtZTogc3RyaW5nKTogTW9tZW50IHtcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG4gICAgcmV0dXJuIGZlYXR1cmUgJiYgZnJvbURhdGVJU09TdHJpbmcoZmVhdHVyZS5sYXN0U3luY0RhdGUpO1xuICB9XG5cbiAgaGFzT2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZmVhdHVyZU5hbWUpIHJldHVybiBpc05vdE5pbCh0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgaXNOb3RFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKTtcbiAgfVxuXG4gIHNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlOiBPZmZsaW5lRmVhdHVyZSkge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgW107XG5cbiAgICBmZWF0dXJlLm5hbWUgPSBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlLm5hbWUgKyAnIyc7XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmRJbmRleChmID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmUubmFtZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzW2V4aXN0aW5nSW5kZXhdID0gZmVhdHVyZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG4gIG1hcmtPZmZsaW5lRmVhdHVyZUFzU3luYyhmZWF0dXJlTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcblxuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgZmVhdHVyZSA9IDxPZmZsaW5lRmVhdHVyZT57XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxhc3RTeW5jRGF0ZTogRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZmVhdHVyZS5sYXN0U3luY0RhdGUgPSBEYXRlVXRpbHMubW9tZW50KCkudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlKTtcbiAgfVxuXG4gIHJlbW92ZU9mZmxpbmVGZWF0dXJlcygpIHtcbiAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSBbXTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmICB0aGlzLl9kYXRhLnByb3BlcnRpZXNbYHN1bWFyaXMuZmllbGQuJHtmaWVsZE5hbWV9LmF0dHJpYnV0ZXNgXTtcbiAgICAvLyBOb3RoaW5nIGZvdW5kIGluIHNldHRpbmdzOiByZXR1cm4gZGVmYXVsdHNcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGdldFBhZ2VGaWVsZERlZmF1bHRWYWx1ZShwYWdlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhwYWdlSWQsIGBmaWVsZC4ke2ZpZWxkTmFtZX0uZGVmYXVsdFZhbHVlYCk7XG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb24oZGVmOiBGb3JtRmllbGREZWZpbml0aW9uKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbkRlZnMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGRlZi5rZXkpICE9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQWRkaW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICB0aGlzLl9vcHRpb25EZWZzLnB1c2goZGVmKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9ucyhkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICAoZGVmcyB8fCBbXSkuZm9yRWFjaChkZWYgPT4gdGhpcy5yZWdpc3Rlck9wdGlvbihkZWYpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlblxuICApIHtcbiAgICAvLyBJZiBub3QgaW5zaWRlIHJlY3Vyc2l2ZSBjYWxsOiBmaWxsIHBhZ2UgaGlzdG9yeSBkZWZhdWx0c1xuICAgIGlmICghcGFnZUhpc3RvcnkpIHRoaXMuZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZSwgb3B0cyk7XG5cbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChwID0+IChcbiAgICAgIC8vIHNhbWUgcGF0aFxuICAgICAgcC5wYXRoID09PSBwYWdlLnBhdGhcbiAgICAgIC8vIG9yIHN1Yi1wYXRoXG4gICAgICB8fCBwYWdlLnBhdGguc3RhcnRzV2l0aChwLnBhdGggKyAnLycpKVxuICAgICk7XG5cbiAgICAvLyBOZXcgcGFnZTogaW5zZXJ0IGl0XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEFkZGluZyBwYWdlIHRvIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFnZSA9IHBhZ2VIaXN0b3J5W2luZGV4XTtcblxuICAgICAgLy8gU2FtZSBwYXRoOiByZXBsYWNlIGV4aXN0aW5nIHBhZ2VcbiAgICAgIGlmIChwYWdlSGlzdG9yeVtpbmRleF0ucGF0aCA9PT0gcGFnZS5wYXRoKSB7XG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFVwZGF0aW5nIGV4aXN0aW5nIHBhZ2UgaW4gaGlzdG9yeTogJywgcGFnZSk7XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gQ29weSBleGl0aW5nIGNoaWxkcmVuXG4gICAgICAgIHBhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IHNhbWUgcGF0aCAoc2hvdWxkIGJlIGEgcGFyZW50IHBhZ2UpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LCBpZiBub3QgZXhpc3RzXG4gICAgICAgIGV4aXN0aW5nUGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBhcmVudCB0aW1lXG4gICAgICAgIGV4aXN0aW5nUGFnZS50aW1lID0gcGFnZS50aW1lO1xuXG4gICAgICAgIC8vIEFkZCBwYWdlIGFzIHBhcmVudCdzIGNoaWxkcmVuIChyZWN1cnNpdmUgY2FsbClcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIG9wdHMsIGV4aXN0aW5nUGFnZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG5cbiAgICAgIC8vIElmIG1heCBoYXMgYmVlbiByZWFjaGVkLCByZW1vdmUgb2xkIHBhZ2VzXG4gICAgICBpZiAodGhpcy5fZGF0YS5wYWdlSGlzdG9yeS5sZW5ndGggPiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFnZXMgPSBwYWdlSGlzdG9yeS5zcGxpY2UodGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUsIHBhZ2VIaXN0b3J5Lmxlbmd0aCAtIHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBQYWdlcyByZW1vdmVkIGZyb20gaGlzdG9yeTogJywgcmVtb3ZlZFBhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbmV3IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KHBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlbilcbiAgKSB7XG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgocCA9PiBwLnBhdGggPT09IHBhdGgpO1xuICAgIGxldCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZlIHBhZ2UgaGlzdG9yeTogJywgcGF0aCk7XG4gICAgICAvLyBSZW1vdmUgdmFsdWVcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIHBhdGggb24gY2hpbGRyZW4gKHN0b3Agd2hlbiBmb3VuZClcbiAgICAgIGZvdW5kID0gcGFnZUhpc3RvcnlcbiAgICAgICAgLm1hcChwID0+IHAuY2hpbGRyZW4pXG4gICAgICAgIC5maWx0ZXIoaXNOb3RFbXB0eUFycmF5KVxuICAgICAgICAuZmluZEluZGV4KGNoaWxkcmVuID0+IHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCwgb3B0cywgY2hpbGRyZW4pKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKGZvdW5kICYmIHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJQYWdlSGlzdG9yeSgpIHtcbiAgICAvLyBSZXNldCBhbGwgcGFnZSBoaXN0b3J5XG4gICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIFtdLCB7cGVyc2lzdEltbWVkaWF0ZTogdHJ1ZX0pO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXNldERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuX2RhdGEgPSB7Li4udGhpcy5fZGF0YSwgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3N9O1xuXG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICBjb25zdCBkZWZhdWx0UGVlciA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIgJiYgUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIHRoaXMuX2RhdGEucGVlclVybCA9IGRlZmF1bHRQZWVyICYmIGRlZmF1bHRQZWVyLnVybCB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5zdGFydGVkKSB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RMb2NhbGx5KGltbWVkaWF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuXG4gICAgLy8gRXhlY3V0ZSBpbW1lZGlhdGVcbiAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmluZyBsb2NhbCBzZXR0aW5ncyBmcm9tIHN0b3JhZ2UnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gU3RvcmUgbG9jYWwgc2V0dGluZ3MnLCB0aGlzLl9kYXRhKTtcbiAgICAgICAgaWYgKHRoaXMuX3NlcmlhbGl6ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgLy8gRml4IHNlcmlhbGl6YXRpb24gZXJyb3IsIGluIFN1bWFyaXMtQXBwXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldChTRVRUSU5HU19TVE9SQUdFX0tFWSwgdGhpcy5fZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzoge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgfSk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGFnZVxcJywgXFwncGFnZS5wYXRoXFwnIG9yIFxcJ3BhZ2UudGl0bGVcXCcnKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IERhdGVVdGlscy5tb21lbnQoKTtcblxuICAgIC8vIENsZWFuIHRoZSB0aXRsZSAocmVtb3ZlIDxzbWFsbD4gdGFncylcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVUaXRsZVNtYWxsVGFnICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFnSW5kZXggPSBwYWdlLnRpdGxlLmluZGV4T2YoJzwvc21hbGw+Jyk7XG4gICAgICBpZiAodGFnSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnN1YnN0cmluZyh0YWdJbmRleCArICc8L3NtYWxsPicubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnJlcGxhY2UoL1sgXSpjbGFzcz0naGlkZGVuLXhzIGhpZGRlbi1zbScvZywgJycpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVQYXRoUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICBwYWdlLnBhdGggPSBwYWdlLnBhdGgucmVwbGFjZSgvWz9dLiokLywgJycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG59XG4iXX0=
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkxQyxPQUFPLEVBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbkosT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUUvRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFBLGNBQWMsQ0FBQyxDQUFDO0FBRWpGLG9EQUFvRDtBQUNwRCxNQUFNLGdCQUFnQixHQUFrQjtJQUN0QyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLE1BQU0sRUFBRSxXQUFXLENBQUMsYUFBYTtJQUNqQyxhQUFhLEVBQUUsV0FBVyxDQUFDLG9CQUFvQixJQUFJLE1BQU07SUFDekQsa0JBQWtCLEVBQUUsQ0FBQztDQUN0QixDQUFDO0FBWUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQXlCLHNCQUFzQixDQUFDLENBQUM7QUFDckcsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHNCQUFzQixDQUFDLENBQUM7QUFPM0csTUFBTSxPQUFPLG9CQUFxQixTQUFRLGdCQUErQjtJQW9DdkUsWUFDVSxTQUEyQixFQUMzQixRQUFrQixFQUNsQixPQUFnQixFQUNnQixXQUF3QixFQUNQLGVBQThCLEVBQ3ZDLE9BQTZCO1FBRTdFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVBSLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNnQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNQLG9CQUFlLEdBQWYsZUFBZSxDQUFlO1FBdkN6RixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUM7UUEyQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBQyxHQUFHLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsaUJBQWlCLElBQUksS0FBSyxDQUFDO1FBRTlELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUE5Q0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztJQUNyRyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxL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QXdEO2lCQUN6RDs7MEJBeUNJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDckMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlIH0gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcblxuaW1wb3J0IHtlcXVhbHMsIGdldFByb3BlcnR5QnlQYXRoLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHVuZGVmaW5lZElmTnVsbH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXAgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMYXRMb25nUGF0dGVybiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc0NhcGFjaXRvciwgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1NUT1JBR0VfS0VZID0gJ3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUyA9IFsnbW9iaWxlJywgJ3RvdWNoVWknLypkZXByZWNhdGVkKi9dO1xuXG4vLyBmaXhtZTogdGhpcyBjb25zdGFudCBwb2ludHMgdG8gc3RhdGljIGVudmlyb25tZW50XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBMb2NhbFNldHRpbmdzID0ge1xuICBhY2NvdW50SW5oZXJpdGFuY2U6IHRydWUsXG4gIGxvY2FsZTogZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSxcbiAgbGF0TG9uZ0Zvcm1hdDogZW52aXJvbm1lbnQuZGVmYXVsdExhdExvbmdGb3JtYXQgfHwgJ0RETU0nLFxuICBwYWdlSGlzdG9yeU1heFNpemU6IDNcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxTZXR0aW5nc09wdGlvbnMge1xuICBzZXJpYWxpemVBc1N0cmluZz86IGJvb2xlYW47IC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgb3B0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcDtcbn1cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucyB7XG4gIHJlbW92ZVBhdGhRdWVyeVBhcmFtcz86IGJvb2xlYW47XG4gIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NFVFRJTkdTID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4+KCdEZWZhdWx0TG9jYWxTZXR0aW5ncycpO1xuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPExvY2FsU2V0dGluZ3NPcHRpb25zPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xuICAvL2RlcHM6IFtBUFBfTE9DQUxfU0VUVElOR1MsIEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFNldHRpbmdzU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8TG9jYWxTZXR0aW5ncz4ge1xuXG4gIG9uQ2hhbmdlID0gbmV3IFN1YmplY3Q8TG9jYWxTZXR0aW5ncz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25EZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlcmlhbGl6ZUFzU3RyaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF8kcGVyc2lzdDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgZ2V0IHNldHRpbmdzKCk6IExvY2FsU2V0dGluZ3Mge1xuICAgIHJldHVybiB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubG9jYWxlIHx8IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xuICB9XG5cbiAgZ2V0IGxhdExvbmdGb3JtYXQoKTogTGF0TG9uZ1BhdHRlcm4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGF0TG9uZ0Zvcm1hdCB8fCAnRERNTSc7XG4gIH1cblxuICBnZXQgdXNhZ2VNb2RlKCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEudXNhZ2VNb2RlKSA/IHRoaXMuX2RhdGEudXNhZ2VNb2RlIDogKGlzQ2FwYWNpdG9yKHdpbmRvdykgfHwgaXNNb2JpbGUod2luZG93KSA/ICdGSUVMRCcgOiAnREVTSycpO1xuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fZGF0YS5tb2JpbGUpID8gdGhpcy5fZGF0YS5tb2JpbGUgOiBpc01vYmlsZSh3aW5kb3cpO1xuICB9XG5cbiAgc2V0IG1vYmlsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgfHwgW10pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1MpIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNldHRpbmdzOiBMb2NhbFNldHRpbmdzLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlMpIG9wdGlvbnM6IExvY2FsU2V0dGluZ3NPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLmRlZmF1bHRTZXR0aW5ncyA9IHsuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5nc307XG5cbiAgICB0aGlzLl9vcHRpb25EZWZzID0gT2JqZWN0LnZhbHVlcyhvcHRpb25zPy5vcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLl9zZXJpYWxpemVBc1N0cmluZyA9IG9wdGlvbnM/LnNlcmlhbGl6ZUFzU3RyaW5nIHx8IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNldERhdGEoKTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIENyZWF0aW5nIHNlcnZpY2UnKTtcbiAgfVxuXG4gIG5nT25TdGFydCgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3M+IHtcblxuICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBTdGFydGluZyBzZXJ2aWNlLi4uJyk7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlXG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB0aGlzLm1vYmlsZTtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHRoaXMudXNhZ2VNb2RlO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcmV0dXJuIHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgfVxuXG5cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNhZ2VNb2RlID09PSBtb2RlO1xuICB9XG5cbiAgaXNPbkZpZWxkTW9kZSh2YWx1ZT86IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpID09PSAnRklFTEQnO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsKHNldHRpbmdzKSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFJlc3RvcmluZyBwcmV2aW91cyBzZXR0aW5ncy4uLicpO1xuXG4gICAgICBjb25zdCByZXN0b3JlZERhdGEgPSAodHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJykgPyBKU09OLnBhcnNlKHNldHRpbmdzKSA6IHNldHRpbmdzO1xuXG4gICAgICAvLyBBdm9pZCB0byBvdmVycmlkZSB0cmFuc2llbnQgcHJvcGVydGllc1xuICAgICAgU0VUVElOR1NfVFJBTlNJRU5UX1BST1BFUlRJRVMuZm9yRWFjaCh0cmFuc2llbnRLZXkgPT4ge1xuICAgICAgICBkZWxldGUgcmVzdG9yZWREYXRhW3RyYW5zaWVudEtleV07XG4gICAgICB9KTtcblxuICAgICAgLy8gTWVyZ2UgaW50byBleGlzdGluZyBkYXRhXG4gICAgICBkYXRhID0gT2JqZWN0LmFzc2lnbihkYXRhLCByZXN0b3JlZERhdGEpO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQoZGF0YSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHNldFByb3BlcnR5PFQgPSBzdHJpbmc+KGtleU9yRGVmOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbiwgdmFsdWU6IFQsIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjsgaW1tZWRpYXRlPzogYm9vbGVhbn0pe1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAha2V5T3JEZWYpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eShrZXlPckRlZi5rZXksIHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzID0gdGhpcy5fZGF0YS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRoaXMuX2RhdGEucHJvcGVydGllc1trZXlPckRlZl0gPSBpc05pbCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseShvcHRzPy5pbW1lZGlhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb3BlcnR5KGtleU9yRGVmOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCBpc05vdE5pbChkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlIDoga2V5T3JEZWYuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZElmTnVsbChkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0Jvb2xlYW4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyAodmFsdWUgJiYgdmFsdWUgIT09ICdmYWxzZScpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0ludChkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBwYXJzZUludCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzTnVtYmVycyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gW3BhcnNlRmxvYXQodmFsdWUpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNTdHJpbmdzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnLCcpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5KHNldHRpbmdzOiBQYXJ0aWFsPExvY2FsU2V0dGluZ3M+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuX2RhdGEsIC4uLnNldHRpbmdzfTtcblxuICAgIGlmIChlcXVhbHMoZGF0YSwgdGhpcy5fZGF0YSkpIHJldHVybjsgLy8gU2tpcCBpZiBubyBjaGFuZ2VzXG5cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgIC8vIFNhdmUgbG9jYWxseVxuICAgIGlmIChvcHRzICYmIG9wdHMucGVyc2lzdEltbWVkaWF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7IC8vIE5vIEFXQUlUXG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhcHBseVByb3BlcnR5KGtleToga2V5b2YgTG9jYWxTZXR0aW5ncywgdmFsdWU6IGFueSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB7fTtcbiAgICBjaGFuZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICBhd2FpdCB0aGlzLmFwcGx5KGNoYW5nZXMsIG9wdHMpO1xuICB9XG5cbiAgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHBhZ2VJZDogc3RyaW5nLCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucGFnZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aCh0aGlzLl9kYXRhLnBhZ2VzLCBrZXkgKyAnLicgKyBwcm9wZXJ0eU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0YS5wYWdlc1trZXldO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5nKHBhZ2VJZDogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLnBhZ2VzID0gdGhpcy5fZGF0YS5wYWdlcyB8fCB7fTtcblxuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKHByb3BlcnR5TmFtZSkge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdGhpcy5fZGF0YS5wYWdlc1trZXldIHx8IHt9O1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gIH1cblxuXG4gIGdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBPZmZsaW5lRmVhdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBpc0VtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoIWZlYXR1cmVOYW1lKSB0aHJvdyBFcnJvcignTWlzc2luZyBcXCdmZWF0dXJlTmFtZVxcJyBhcmd1bWVudCcpO1xuXG4gICAgZmVhdHVyZU5hbWUgPSBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlTmFtZSArICcjJztcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZChmID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmVOYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmICghZmVhdHVyZSkgcmV0dXJuOyAvLyBOb3QgZm91bmRcbiAgICBpZiAodHlwZW9mIGZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBsYXN0U3luY0RhdGUgPSBmZWF0dXJlLnN1YnN0cmluZyhmZWF0dXJlUHJlZml4Lmxlbmd0aCk7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbJHtmZWF0dXJlTmFtZX1dIExhc3Qgc3luY2hyb25pemF0aW9uIGRhdGU6ICR7bGFzdFN5bmNEYXRlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUsXG4gICAgICAgIGxhc3RTeW5jRGF0ZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmU7XG4gIH1cblxuICBnZXRPZmZsaW5lRmVhdHVyZUxhc3RTeW5jRGF0ZShmZWF0dXJlTmFtZTogc3RyaW5nKTogTW9tZW50IHtcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG4gICAgcmV0dXJuIGZlYXR1cmUgJiYgZnJvbURhdGVJU09TdHJpbmcoZmVhdHVyZS5sYXN0U3luY0RhdGUpO1xuICB9XG5cbiAgaGFzT2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZmVhdHVyZU5hbWUpIHJldHVybiBpc05vdE5pbCh0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgaXNOb3RFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKTtcbiAgfVxuXG4gIHNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlOiBPZmZsaW5lRmVhdHVyZSkge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgW107XG5cbiAgICBmZWF0dXJlLm5hbWUgPSBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlLm5hbWUgKyAnIyc7XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmRJbmRleChmID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmUubmFtZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzW2V4aXN0aW5nSW5kZXhdID0gZmVhdHVyZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG4gIG1hcmtPZmZsaW5lRmVhdHVyZUFzU3luYyhmZWF0dXJlTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcblxuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgZmVhdHVyZSA9IDxPZmZsaW5lRmVhdHVyZT57XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxhc3RTeW5jRGF0ZTogRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZmVhdHVyZS5sYXN0U3luY0RhdGUgPSBEYXRlVXRpbHMubW9tZW50KCkudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlKTtcbiAgfVxuXG4gIHJlbW92ZU9mZmxpbmVGZWF0dXJlcygpIHtcbiAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSBbXTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmICB0aGlzLl9kYXRhLnByb3BlcnRpZXNbYHN1bWFyaXMuZmllbGQuJHtmaWVsZE5hbWV9LmF0dHJpYnV0ZXNgXTtcbiAgICAvLyBOb3RoaW5nIGZvdW5kIGluIHNldHRpbmdzOiByZXR1cm4gZGVmYXVsdHNcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGdldFBhZ2VGaWVsZERlZmF1bHRWYWx1ZShwYWdlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhwYWdlSWQsIGBmaWVsZC4ke2ZpZWxkTmFtZX0uZGVmYXVsdFZhbHVlYCk7XG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb24oZGVmOiBGb3JtRmllbGREZWZpbml0aW9uKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbkRlZnMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGRlZi5rZXkpICE9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQWRkaW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICB0aGlzLl9vcHRpb25EZWZzLnB1c2goZGVmKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9ucyhkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICAoZGVmcyB8fCBbXSkuZm9yRWFjaChkZWYgPT4gdGhpcy5yZWdpc3Rlck9wdGlvbihkZWYpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlblxuICApIHtcbiAgICAvLyBJZiBub3QgaW5zaWRlIHJlY3Vyc2l2ZSBjYWxsOiBmaWxsIHBhZ2UgaGlzdG9yeSBkZWZhdWx0c1xuICAgIGlmICghcGFnZUhpc3RvcnkpIHRoaXMuZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZSwgb3B0cyk7XG5cbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChwID0+IChcbiAgICAgIC8vIHNhbWUgcGF0aFxuICAgICAgcC5wYXRoID09PSBwYWdlLnBhdGhcbiAgICAgIC8vIG9yIHN1Yi1wYXRoXG4gICAgICB8fCBwYWdlLnBhdGguc3RhcnRzV2l0aChwLnBhdGggKyAnLycpKVxuICAgICk7XG5cbiAgICAvLyBOZXcgcGFnZTogaW5zZXJ0IGl0XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEFkZGluZyBwYWdlIHRvIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFnZSA9IHBhZ2VIaXN0b3J5W2luZGV4XTtcblxuICAgICAgLy8gU2FtZSBwYXRoOiByZXBsYWNlIGV4aXN0aW5nIHBhZ2VcbiAgICAgIGlmIChwYWdlSGlzdG9yeVtpbmRleF0ucGF0aCA9PT0gcGFnZS5wYXRoKSB7XG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFVwZGF0aW5nIGV4aXN0aW5nIHBhZ2UgaW4gaGlzdG9yeTogJywgcGFnZSk7XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gQ29weSBleGl0aW5nIGNoaWxkcmVuXG4gICAgICAgIHBhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IHNhbWUgcGF0aCAoc2hvdWxkIGJlIGEgcGFyZW50IHBhZ2UpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LCBpZiBub3QgZXhpc3RzXG4gICAgICAgIGV4aXN0aW5nUGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBhcmVudCB0aW1lXG4gICAgICAgIGV4aXN0aW5nUGFnZS50aW1lID0gcGFnZS50aW1lO1xuXG4gICAgICAgIC8vIEFkZCBwYWdlIGFzIHBhcmVudCdzIGNoaWxkcmVuIChyZWN1cnNpdmUgY2FsbClcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIG9wdHMsIGV4aXN0aW5nUGFnZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG5cbiAgICAgIC8vIElmIG1heCBoYXMgYmVlbiByZWFjaGVkLCByZW1vdmUgb2xkIHBhZ2VzXG4gICAgICBpZiAodGhpcy5fZGF0YS5wYWdlSGlzdG9yeS5sZW5ndGggPiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFnZXMgPSBwYWdlSGlzdG9yeS5zcGxpY2UodGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUsIHBhZ2VIaXN0b3J5Lmxlbmd0aCAtIHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBQYWdlcyByZW1vdmVkIGZyb20gaGlzdG9yeTogJywgcmVtb3ZlZFBhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbmV3IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KHBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlbilcbiAgKSB7XG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgocCA9PiBwLnBhdGggPT09IHBhdGgpO1xuICAgIGxldCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZlIHBhZ2UgaGlzdG9yeTogJywgcGF0aCk7XG4gICAgICAvLyBSZW1vdmUgdmFsdWVcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIHBhdGggb24gY2hpbGRyZW4gKHN0b3Agd2hlbiBmb3VuZClcbiAgICAgIGZvdW5kID0gcGFnZUhpc3RvcnlcbiAgICAgICAgLm1hcChwID0+IHAuY2hpbGRyZW4pXG4gICAgICAgIC5maWx0ZXIoaXNOb3RFbXB0eUFycmF5KVxuICAgICAgICAuZmluZEluZGV4KGNoaWxkcmVuID0+IHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCwgb3B0cywgY2hpbGRyZW4pKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKGZvdW5kICYmIHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJQYWdlSGlzdG9yeSgpIHtcbiAgICAvLyBSZXNldCBhbGwgcGFnZSBoaXN0b3J5XG4gICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIFtdLCB7cGVyc2lzdEltbWVkaWF0ZTogdHJ1ZX0pO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXNldERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuX2RhdGEgPSB7Li4udGhpcy5fZGF0YSwgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3N9O1xuXG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICBjb25zdCBkZWZhdWx0UGVlciA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIgJiYgUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIHRoaXMuX2RhdGEucGVlclVybCA9IGRlZmF1bHRQZWVyICYmIGRlZmF1bHRQZWVyLnVybCB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5zdGFydGVkKSB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RMb2NhbGx5KGltbWVkaWF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuXG4gICAgLy8gRXhlY3V0ZSBpbW1lZGlhdGVcbiAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmluZyBsb2NhbCBzZXR0aW5ncyBmcm9tIHN0b3JhZ2UnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gU3RvcmUgbG9jYWwgc2V0dGluZ3MnLCB0aGlzLl9kYXRhKTtcbiAgICAgICAgaWYgKHRoaXMuX3NlcmlhbGl6ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgLy8gRml4IHNlcmlhbGl6YXRpb24gZXJyb3IsIGluIFN1bWFyaXMtQXBwXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldChTRVRUSU5HU19TVE9SQUdFX0tFWSwgdGhpcy5fZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzoge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgfSk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGFnZVxcJywgXFwncGFnZS5wYXRoXFwnIG9yIFxcJ3BhZ2UudGl0bGVcXCcnKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IERhdGVVdGlscy5tb21lbnQoKTtcblxuICAgIC8vIENsZWFuIHRoZSB0aXRsZSAocmVtb3ZlIDxzbWFsbD4gdGFncylcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVUaXRsZVNtYWxsVGFnICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFnSW5kZXggPSBwYWdlLnRpdGxlLmluZGV4T2YoJzwvc21hbGw+Jyk7XG4gICAgICBpZiAodGFnSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnN1YnN0cmluZyh0YWdJbmRleCArICc8L3NtYWxsPicubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnJlcGxhY2UoL1sgXSpjbGFzcz0naGlkZGVuLXhzIGhpZGRlbi1zbScvZywgJycpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVQYXRoUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICBwYWdlLnBhdGggPSBwYWdlLnBhdGgucmVwbGFjZSgvWz9dLiokLywgJycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG59XG4iXX0=
|
|
@@ -563,9 +563,9 @@ export class NetworkService extends StartableObservableService {
|
|
|
563
563
|
}
|
|
564
564
|
}
|
|
565
565
|
}
|
|
566
|
-
NetworkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
567
|
-
NetworkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
568
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
566
|
+
NetworkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NetworkService, deps: [{ token: DOCUMENT }, { token: i1.Platform }, { token: i1.ModalController }, { token: i2.CryptoService }, { token: i3.Storage }, { token: i4.LocalSettingsService }, { token: i5.CacheService }, { token: i6.HttpClient }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }, { token: i7.Network, optional: true }, { token: i8.TranslateService, optional: true }, { token: i1.ToastController, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
567
|
+
NetworkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NetworkService, providedIn: 'root' });
|
|
568
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NetworkService, decorators: [{
|
|
569
569
|
type: Injectable,
|
|
570
570
|
args: [{ providedIn: 'root' }]
|
|
571
571
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
@@ -586,4 +586,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
586
586
|
}] }, { type: i1.ToastController, decorators: [{
|
|
587
587
|
type: Optional
|
|
588
588
|
}] }]; } });
|
|
589
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUd4QyxPQUFPLEVBQTBCLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQXVCLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztB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QyxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDcnlwdG9TZXJ2aWNlfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xuaW1wb3J0IHtQZWVyfSBmcm9tICcuL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7TW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0lTZWxlY3RQZWVyTW9kYWxPcHRpb25zLCBTZWxlY3RQZWVyTW9kYWx9IGZyb20gJy4uL3BlZXIvc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZSwgU0VUVElOR1NfU1RPUkFHRV9LRVl9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge1NwbGFzaFNjcmVlbn0gZnJvbSAnQGNhcGFjaXRvci9zcGxhc2gtc2NyZWVuJztcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmssIHNsZWVwLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtOZXR3b3JrfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbmV0d29yay9uZ3gnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2FjaGVTZXJ2aWNlfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPdmVybGF5RXZlbnREZXRhaWx9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7QXBwTWFuaWZlc3QsIE5vZGVJbmZvfSBmcm9tICcuL25ldHdvcmsudXRpbHMnO1xuaW1wb3J0IHtIdHRwVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC9odHRwL2h0dHAudXRpbHMnO1xuaW1wb3J0IHtWZXJzaW9uVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge1N0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0Nvbm5lY3Rpb25UeXBlLCBnZXRDb25uZWN0aW9uVHlwZSwgTmV0d29ya0V2ZW50VHlwZX0gZnJvbSAnLi9uZXR3b3JrLnR5cGVzJztcbmltcG9ydCB7QVBQX0xPR0dJTkdfU0VSVklDRX0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7SUxvZ2dlciwgSUxvZ2dpbmdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnZXIubW9kZWwnO1xuXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICAgIE1PQklMRTogIDEwMDAgKiA2MCAqIDEwIC8qIGV2ZXJ5IDEwIG1pbiAqLyxcbiAgICBERVNLVE9QOiAxMDAwICogNjAgKiA1IC8qIGV2ZXJ5IDUgbWluICovXG59O1xuXG5leHBvcnQgY29uc3QgUEVFUl9VUkxfUkVHRVhQID0gL14oaHR0cHxodHRwcyk6XFwvXFwvW14gXCI/I0BdKyQvO1xuXG4vKiAtLSBERVYgb25seSAodG8gZGVidWcgcmVmcmVzaCB0aW1lcilcbmNvbnN0IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QgPSB7XG4gICAgTU9CSUxFOiAgMTAwMCxcbiAgICBERVNLVE9QOiAxMDAwXG59Ki9cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxQZWVyLCBQZWVyPiB7XG5cbiAgb25QZWVyQ2hhbmdlcyA9IHRoaXMuc3RhcnRTdWJqZWN0LnBpcGUoXG4gICAgbWFwKHBlZXIgPT4gcGVlcj8udXJsKSxcbiAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KClcbiAgKTtcbiAgb25OZXR3b3JrU3RhdHVzQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblR5cGU+KG51bGwpO1xuICBvblJlc2V0TmV0d29ya0NhY2hlID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlcjtcbiAgcHJpdmF0ZSBfdGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoUGVyaW9kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaENvbmRpdGlvbjogKCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGV2aWNlQ29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlO1xuICBwcml2YXRlIF9mb3JjZU9mZmxpbmU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2xpc3RlbmVyczoge1xuICAgW2tleTogc3RyaW5nXTogKChkYXRhPzogYW55KSA9PiBQcm9taXNlPHZvaWQ+KVtdO1xuICB9ID0ge307XG5cbiAgZ2V0IG9ubGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSAhPT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgPT09ICdub25lJztcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uVHlwZSgpOiBDb25uZWN0aW9uVHlwZXtcbiAgICAvLyBJZiBmb3JjZSBvZmZsaW5lOiByZXR1cm4gJ25vbmUnXG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlT2ZmbGluZSAmJiAnbm9uZSdcbiAgICAgIC8vIEVsc2UsIHJldHVybiBkZXZpY2UgY29ubmVjdGlvbiB0eXBlIChvciB1bmtub3duKVxuICAgICAgfHwgKHRoaXMuc3RhcnRlZCAmJiB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSB8fCAndW5rbm93bicpO1xuICB9XG5cbiAgZ2V0IHBlZXIoKTogUGVlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN1YmplY3QudmFsdWU/LmNsb25lKCk7XG4gIH1cblxuICBzZXQgcGVlcihwZWVyOiBQZWVyKSB7XG4gICAgdGhpcy5yZXN0YXJ0KHBlZXIpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgY3J5cHRvU2VydmljZTogQ3J5cHRvU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9HR0lOR19TRVJWSUNFKSBwcml2YXRlIGxvZ2dpbmdTZXJ2aWNlOiBJTG9nZ2luZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZXR3b3JrOiBOZXR3b3JrLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXJcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuc2V0dGluZ3MubW9iaWxlO1xuICAgIHRoaXMuX2xvZ2dlciA9IHRoaXMubG9nZ2luZ1NlcnZpY2U/LmdldExvZ2dlcignbmV0d29yaycpO1xuXG4gICAgaWYgKHRoaXMuX21vYmlsZSkge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5NT0JJTEU7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24gPSAoKSA9PiB0aGlzLm9ubGluZTsgLy8gQ2hlY2sgb25seSB3aGVuIG9ubGluZSwgYW5kIHN0b3Agd2hlbiBvZmZsaW5lXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKHBlZXIgPT4gdGhpcy5uZ09uQWZ0ZXJTdGFydChwZWVyKSk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHlcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VD0gYW55PihldmVudFR5cGU6IE5ldHdvcmtFdmVudFR5cGUsIGNhbGxiYWNrOiAoZGF0YT86IFQpID0+IFByb21pc2U8YW55Pik6IFN1YnNjcmlwdGlvbiB7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAncGVlckNoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vblBlZXJDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAnc3RhdHVzQ2hhbmdlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh0eXBlKSA9PiBjYWxsYmFjayh0eXBlIGFzIHVua25vd24gYXMgVCkpO1xuXG4gICAgICBjYXNlICdyZXNldENhY2hlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyeU9ubGluZShvcHRzPzoge1xuICAgIHNob3dPZmZsaW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dPbmxpbmVUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd0xvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgYWZ0ZXJSZXRyeURlbGF5PzogbnVtYmVyO1xuICAgIGFmdGVyUmV0cnlQcm9taXNlPzogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gSWYgb2ZmbGluZSBtb2RlIG5vdCBmb3JjZWQsIGFuZCBkZXZpY2Ugc2F5cyB0aGVyZSBpcyBubyBjb25uZWN0aW9uOiBza2lwXG4gICAgaWYgKCF0aGlzLl9mb3JjZU9mZmxpbmUgfHwgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gU0hvdyBsb2FkaW5nIHRvYXN0XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzaG93TG9hZGluZ1RvYXN0ID0gIW9wdHMgfHwgb3B0cy5zaG93TG9hZGluZ1RvYXN0ICE9PSBmYWxzZTtcbiAgICBsZXQgbG9hZGluZ1RvYXN0OiBIVE1MSW9uVG9hc3RFbGVtZW50O1xuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5SRVRSWV9UT19DT05ORUNUJyxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgICBvbldpbGxQcmVzZW50OiB0ID0+IGxvYWRpbmdUb2FzdCA9IHR9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gQ2hlY2tpbmcgY29ubmVjdGlvbiB0byBwb2QuLi4nKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuXG4gICAgICBpZiAoIXNldHRpbmdzLnBlZXJVcmwpIHJldHVybiBmYWxzZTsgLy8gTm8gcGVlciBkZWZpbmUuIFNraXBcblxuICAgICAgY29uc3QgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgICBjb25zdCBwZWVySW5mbyA9IGF3YWl0IHRoaXMuY2hlY2tQZWVyQWxpdmUocGVlcik7XG4gICAgICBjb25zdCBwZWVyQWxpdmVBbmRDb21wYXRpYmxlID0gcGVlckluZm8gJiYgYXdhaXQgdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvKTtcbiAgICAgIGlmIChwZWVyQWxpdmVBbmRDb21wYXRpYmxlKSB7XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgb2ZmbGluZSBtb2RlXG4gICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAvLyBSZXN0YXJ0XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdGFydChwZWVyKTtcblxuICAgICAgICAvLyBXYWl0IGEgcHJvbWlzZSwgYmVmb3JlIHJlY2hlY2tcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCB0aGlzLm9ubGluZSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgbG9hZGluZyB0b2FzdCAod2l0aCBhIG1pbmltYWwgZGlzcGxheSBkdXJhdGlvbiBvZiAycylcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgc2xlZXAoMjAwMCAtIChEYXRlLm5vdygpIC0gbm93KSk7XG4gICAgICBpZiAobG9hZGluZ1RvYXN0KSBhd2FpdCBsb2FkaW5nVG9hc3QuZGlzbWlzcygpO1xuICAgIH1cblxuICAgIC8vIFJlY2hlY2sgbmV0d29yayBzdGF0dXNcbiAgICBjb25zdCBvbmxpbmUgPSB0aGlzLm9ubGluZTtcblxuICAgIC8vIERpc3BsYXkgYSB0b2FzdCB0byB1c2VyXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd09ubGluZVRvYXN0ICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9OTElORScsIHR5cGU6ICdpbmZvJ30pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcHRzICYmIG9wdHMuc2hvd09mZmxpbmVUb2FzdCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRGlzcGxheSB0b2FzdCAod2l0aG91dCBhd2FpdCwgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0IGNsb3NlIGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMuc2hvd09mZmxpbmVUb2FzdCh7c2hvd1JldHJ5QnV0dG9uOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQgJiYgb25saW5lO1xuICB9XG5cbiAgYXN5bmMgc2hvd09mZmxpbmVUb2FzdChvcHRzPzoge1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgc2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeVN1Y2Nlc3NUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5TG9hZGluZ1RvYXN0PzogYm9vbGVhbjtcbiAgICBvblJldHJ5U3VjY2Vzcz86ICgpID0+IHZvaWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybjsgLy8gU2tpcCBpZiBvbmxpbmVcblxuICAgIC8vIFRvYXN0IHdpdGggYSByZXRyeSBidXR0b25cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93UmV0cnlCdXR0b24gIT09IGZhbHNlKSB7XG5cbiAgICAgIGNvbnN0IHRvYXN0UmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAob3B0cyAmJiBvcHRzLm1lc3NhZ2UgfHwgJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnKSxcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiAxMDAwMDAsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAvLyByZWNvbm5lY3QgYnV0dG9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgcm9sZTogJ3JlZnJlc2gnLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTkVUV09SSy5CVE5fQ0hFQ0tfQUxJVkUnKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVzZXIgZG9uJ3QgY2xpY2sgcmVjb25uZWN0OiByZXR1cm5cbiAgICAgIGlmICghdG9hc3RSZXN1bHQgfHwgdG9hc3RSZXN1bHQucm9sZSAhPT0gJ3JlZnJlc2gnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGlmIG5ldHdvcmsgc3RhdGUgY2hhbmdlZCB0byBvbmxpbmU6IGV4aXQgaGVyZVxuICAgICAgaWYgKHRoaXMub25saW5lKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVHJ5IHRvIHJlY29ubmVjdFxuICAgICAgY29uc3Qgb25saW5lID0gYXdhaXQgdGhpcy50cnlPbmxpbmUoe1xuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0b0Jvb2xlYW4ob3B0cyAmJiBvcHRzLnNob3dSZXRyeVN1Y2Nlc3NUb2FzdCwgdHJ1ZSksXG4gICAgICAgIHNob3dMb2FkaW5nVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5TG9hZGluZ1RvYXN0LCB0cnVlKVxuICAgICAgfSk7XG4gICAgICBpZiAob25saW5lKSB7XG4gICAgICAgIC8vIENhbGwgc3VjY2VzcyBjYWxsYmFjayAoYXN5bmMpXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMub25SZXRyeVN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KG9wdHMub25SZXRyeVN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBvcHRzID0ge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzaG93UmV0cnlCdXR0b246IGZhbHNlLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIHRvYXN0LCB3aXRob3V0ICdhd2FpdCcsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCdzIGRpc21pc3NcbiAgICB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcsXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBlZXIgaXMgYWxpdmVcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckFsaXZlKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBjaGVja0NvbXBhdGlibGU/OiBib29sZWFuOyBkaXNwbGF5VG9hc3Q/OiBib29sZWFuIH0gKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuICAgICAgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUluZm8ocGVlcik7XG4gIH1cblxuICBhc3luYyBjaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvOiBOb2RlSW5mbywgb3B0cz86IHsgc2hvd1RvYXN0PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uKSByZXR1cm4gdHJ1ZTsgLy8gU2tpcCBjb21wYXRpYmlsaXR5IGNoZWNrXG5cbiAgICAvLyBDaGVjayB0aGUgbWluIHBvZCB2ZXJzaW9uLCBkZWZpbmVkIGJ5IHRoZSBhcHBcbiAgICBjb25zdCBpc0NvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24gJiYgVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZSh0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uLCBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24pO1xuXG4gICAgLy8gRGlzcGxheSB0b2FzdCwgaWYgbm90IGNvbXBhdGlibGVcbiAgICBpZiAoIWlzQ29tcGF0aWJsZSAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTkVUV09SSy5FUlJPUi5OT1RfQ09NUEFUSUJMRV9QRUVSJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge1xuICAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb25cbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQ29tcGF0aWJsZTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vZGVJbmZvKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICcvYXBpL25vZGUvaW5mbycpO1xuICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2NoZWNrUGVlckFsaXZlJywgYEdldHRpbmcgJyR7cGF0aH0nIC4uLmApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGE6Tm9kZUluZm8gPSBhd2FpdCB0aGlzLmdldChwYXRoKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2NoZWNrUGVlckFsaXZlJywgYFJlc3BvbnNlIG9mICcke3BhdGh9JzpcXG4ke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5lcnJvcignY2hlY2tQZWVyQWxpdmUnLCBgRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7ZXJyPy5tZXNzYWdlIHx8ICcnfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBNYW5pZmVzdChwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHtub2NhY2hlPzogYm9vbGVhbn0pOiBQcm9taXNlPEFwcE1hbmlmZXN0fHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgICBpZiAob3B0cz8ubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwnbWFuaWZlc3QuanNvblxcJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzJywgZXJyKTtcbiAgICAgIGVsc2UgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwnbWFuaWZlc3QuanNvblxcJy4nLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBWZXJzaW9uKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzID0ge25vY2FjaGU6IHRydWV9KTogUHJvbWlzZTxzdHJpbmd8dW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJ3ZlcnNpb24uYXBwdXAnKTtcbiAgICAgIGlmIChvcHRzLm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBWZXJzaW9uOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFRleHQocGF0aCwgb3B0cyk7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGFwcFZlcnNpb24pKSByZXR1cm4gYXBwVmVyc2lvbjtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwndmVyc2lvbi5hcHB1cFxcJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzJyk7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ3ZlcnNpb24uYXBwdXBcXCcuJywgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gVHJ5IGxvYWRpbmcgbWFuaWZlc3QuanNvblxuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRBcHBNYW5pZmVzdChwZWVyLCBvcHRzKTtcbiAgICByZXR1cm4gbWFuaWZlc3Q/LnZlcnNpb247XG4gIH1cblxuICBjb21wdXRlUGVlclBhdGgocGVlcjogc3RyaW5nIHwgUGVlciB8IHVuZGVmaW5lZCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBwZWVyID0gcGVlciB8fCB0aGlzLnBlZXI7XG4gICAgaWYgKCFwZWVyKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgbGV0IHBlZXJVcmwgPSAocGVlciBpbnN0YW5jZW9mIFBlZXIpID8gcGVlci51cmwgOiAocGVlciBhcyBzdHJpbmcpO1xuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICB9XG5cbiAgICAvLyBDb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICByZXR1cm4gcGVlclVybCArIHBhdGg7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmb3JjZSBvZmZsaW5lIG1vZGVcbiAgICovXG4gIHNldEZvcmNlT2ZmbGluZSh2YWx1ZT86IGJvb2xlYW4sIG9wdHM/OiB7XG4gICAgc2hvd1RvYXN0PzogYm9vbGVhbjsgLy8gRGlzcGxheSBhIHRvYXN0LCB3aGVuIG9mZmxpbmUgP1xuICB9KSB7XG4gICAgdmFsdWUgPSB0b0Jvb2xlYW4odmFsdWUsIHRydWUpO1xuICAgIGlmICh0aGlzLl9mb3JjZU9mZmxpbmUgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0Nvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcbiAgICAgIHRoaXMuX2ZvcmNlT2ZmbGluZSA9IHZhbHVlO1xuICAgICAgY29uc3QgY3VycmVudENvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcblxuICAgICAgaWYgKHByZXZpb3VzQ29ubmVjdGlvblR5cGUgIT09IGN1cnJlbnRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBDb25uZWN0aW9uIGNoYW5nZWQgdG8geyR7Y3VycmVudENvbm5lY3Rpb25UeXBlfX1gKTtcbiAgICAgICAgdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLm5leHQoY3VycmVudENvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBPZmZsaW5lIG1vZGU6IGFsZXJ0IHRoZSB1c2VyXG4gICAgICAgIGlmIChjdXJyZW50Q29ubmVjdGlvblR5cGUgPT09ICdub25lJyAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzogUGFydGlhbDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz4pOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgY29uc3QgJG9uUmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgY29uc3QgcGVlcnMkID0gJG9uUmVmcmVzaC5waXBlKFxuICAgICAgbWVyZ2VNYXAoKF8pID0+IHRoaXMuZ2V0RGVmYXVsdFBlZXJzKCkpLFxuICAgICAgbWFwKHBlZXJzID0+IHBlZXJzIHx8IFtdKVxuICAgICk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFNlbGVjdFBlZXJNb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+e1xuICAgICAgICBvblJlZnJlc2g6ICRvblJlZnJlc2gsXG4gICAgICAgIHBlZXJzOiBwZWVycyQsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0sXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgc2hvd0JhY2tkcm9wOiB0cnVlXG4gICAgfSk7XG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuICAgICRvblJlZnJlc2guZW1pdCgpO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XG4gICAgJG9uUmVmcmVzaC5jb21wbGV0ZSgpO1xuXG4gICAgcmV0dXJuIGRhdGEgJiYgKGRhdGEgYXMgUGVlcikgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDbGVhcmluZyBhbGwgY2FjaGVzLi4uJyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuY2xlYXJBbGwoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBFbWl0IGV2ZW50XG4gICAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZFxuICAgICAgICAgIHJldHVybiBzbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBBbGwgY2FjaGUgY2xlYXJlZCwgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KHBlZXI/OiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBTdGFydGluZyBuZXR3b3JrLi4uJyk7XG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICBwZWVyID0gcGVlciB8fCAoYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0byBoaWRlIHRoZSBzcGxhc2hzY3JlZW4sIGJlZm9yZSBvcGVuIHRoZSBtb2RhbFxuICAgIGlmICghcGVlcikgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgIC8vIE5vIHBlZXIgaW4gc2V0dGluZ3M6IGFzayB1c2VyIHRvIGNob29zZVxuICAgIHdoaWxlICghcGVlcikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIE5vIHBlZXIgZGVmaW5lZC4gQXNraW5nIHVzZXIgdG8gY2hvb3NlIGEgcGVlci4nKTtcbiAgICAgIHBlZXIgPSBhd2FpdCB0aGlzLnNob3dTZWxlY3RQZWVyTW9kYWwoe2FsbG93U2VsZWN0RG93blBlZXI6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gU3RhcnRpbmcgc2VydmljZSBbT0tdIHtwZWVyOiAnJHtwZWVyLnVybH0nLCBvbmxpbmU6ICR7dGhpcy5vbmxpbmV9fWApO1xuXG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPbkFmdGVyU3RhcnQocGVlcjogUGVlcikge1xuXG4gICAgLy8gV2FpdCBzZXR0aW5ncyBzdGFydHMsIHRoZW4gc2F2ZSBwZWVyIGluIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseSh7cGVlclVybDogcGVlci51cmx9KTtcblxuICAgIHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCh0aGlzLm5ldHdvcms/LnR5cGUgfHwgJ3Vua25vd24nKTtcblxuICAgIC8vIFN0YXJ0IHRoZSByZWZyZXNoIHRpbWVyXG4gICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuXG4gICAgLy8gTGlzdGVuIGZvciBkZXZpY2UgbmV0d29yayBjaGFuZ2VzXG4gICAgaWYgKHRoaXMubmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLm5ldHdvcmsub25EaXNjb25uZWN0KCkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCgnbm9uZScpKSk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMubmV0d29yay5vbkNvbm5lY3QoKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKHRoaXMubmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9ICh0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnKSA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG4gICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnBlZXJVcmwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBVc2UgcGVlciB7JHtzZXR0aW5ncy5wZWVyVXJsfX0gKGZvdW5kIGluIHRoZSBsb2NhbCBzdG9yYWdlKWApO1xuICAgICAgcmV0dXJuIFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdXNlIGRlZmF1bHQgcGVlciBpbiBlbnYsIGlmIGV4aXN0c1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIGlmIEFwcCBpcyBob3N0ZWQsIHRyeSB0aGUgd2ViIHNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudCAmJiB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbjtcbiAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgJiYgbG9jYXRpb24ucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpIHtcbiAgICAgICAgcmV0dXJuIGRldGVjdGVkUGVlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUGVlciBub3QgYWxpdmUsIGJ1dCBzaG91bGQgYmUgYXQgdGhlIHNhbWUgVVJMLCByZXRyeWluZyBlYWNoIDFzXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlcikge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGltZXIoMTAwMCwgMTAwMClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BTdWJqZWN0KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiBjb25zb2xlLndhcm4oYFtuZXR3b3JrLXNlcnZpY2VdIFdhaXRpbmcgcGVlciBiZSBiZSBhbGl2ZSwgYXQgeyR7ZGV0ZWN0ZWRQZWVyLnVybH19IC4uLmApKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuY2hlY2tQZWVyQWxpdmUoZGV0ZWN0ZWRQZWVyKSksXG4gICAgICAgICAgICBmaWx0ZXIoYWxpdmUgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gZGV0ZWN0ZWRQZWVyKSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0byBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wUmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFJlZnJlc2hUaW1lcigpe1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmc6IHNraXBcblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHJlZnJlc2ggdGltZXIsIGV2ZXJ5ICR7dGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kfW1zLi4uYCk7XG5cbiAgICBsZXQgbGFzdEluZm86IE5vZGVJbmZvO1xuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kLCB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2tpcCBzb21lIHRpbWVyIGV2ZW50IChzZWUgY29uc3RydWN0b3IpXG4gICAgICAgIGZpbHRlcih0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24pLFxuXG4gICAgICAgIC8vIENoZWNraW4gaWYgcGVlciBhbGl2ZVxuICAgICAgICB0YXAoKCkgPT4gIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5jaGVja1BlZXJBbGl2ZSh0aGlzLnBlZXIpKSxcblxuICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKGluZm8gPT4gISFpbmZvICE9PSAhIWxhc3RJbmZvKSxcbiAgICAgICAgdGFwKGluZm8gPT4gbGFzdEluZm8gPSBpbmZvKSxcblxuICAgICAgICAvLyBDaGVjayBjb21wYXRpYmlsaXR5XG4gICAgICAgIG1lcmdlTWFwKChpbmZvKSA9PiB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUoaW5mbywge3Nob3dUb2FzdDogdHJ1ZX0pKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYWxpdmUgPT4ge1xuICAgICAgICAgIGlmIChhbGl2ZSAmJiB0aGlzLm9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAgICAgLy8gUmVzdGFydCB0aGUgc2VydmljZSAodG8gZm9yY2UgcmUgYXV0aClcbiAgICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICghYWxpdmUgJiYgdGhpcy5vbmxpbmUpe1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUodHJ1ZSk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHNlcnZpY2VcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIFJlZnJlc2ggdGltZXIgc3RvcHBlZCcpKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRleHQocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ3RleHQnO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0VGV4dCh0aGlzLmh0dHAsIHRoaXMuZ2V0VXJpKHBhdGgpLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQ8VD4ocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG5cbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldEpzb248VD4odGhpcy5odHRwLCB0aGlzLmdldFVyaShwYXRoKSwgb3B0cyk7XG4gIH1cblxuICAvKiAtLSBQcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBnZXRVcmkocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdXJpID0gcGF0aDtcblxuICAgIC8vIElmIHBhdGggaXMgbm90IGFuIFVSSTogcHJlcGVuZCB3aXRoIHBlZXIgVVJMXG4gICAgaWYgKCF1cmkuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICF1cmkuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgbGV0IHBlZXJVcmwgPSAodGhpcy5wZWVyICYmIHRoaXMucGVlci51cmwpO1xuXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBVUkk6IGNvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgICAgdXJpID0gcGVlclVybCArIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiB1cmk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoY29ubmVjdGlvblR5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKTtcbiAgICBpZiAoY29ubmVjdGlvblR5cGUgIT09IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB7XG4gICAgICB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlIGFzIENvbm5lY3Rpb25UeXBlO1xuXG4gICAgICAvLyBJZiBOT1QgIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgZGF0YT86IFQpIHtcbiAgICBjb25zdCBob29rcyA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGhvb2tzKSkge1xuICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29yay1zZXJ2aWNlXSBUcmlnZ2VyICR7bmFtZX0gaG9vazogRXhlY3V0aW5nICR7aG9va3MubGVuZ3RofSBjYWxsYmFja3MuLi5gKTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGhvb2tzLm1hcChjYWxsYmFjayA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgIHJldHVybiBwcm9taXNlLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUd4QyxPQUFPLEVBQTBCLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQXVCLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztB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QyxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDcnlwdG9TZXJ2aWNlfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xuaW1wb3J0IHtQZWVyfSBmcm9tICcuL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7TW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0lTZWxlY3RQZWVyTW9kYWxPcHRpb25zLCBTZWxlY3RQZWVyTW9kYWx9IGZyb20gJy4uL3BlZXIvc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZSwgU0VUVElOR1NfU1RPUkFHRV9LRVl9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge1NwbGFzaFNjcmVlbn0gZnJvbSAnQGNhcGFjaXRvci9zcGxhc2gtc2NyZWVuJztcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmssIHNsZWVwLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtOZXR3b3JrfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbmV0d29yay9uZ3gnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2FjaGVTZXJ2aWNlfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPdmVybGF5RXZlbnREZXRhaWx9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7QXBwTWFuaWZlc3QsIE5vZGVJbmZvfSBmcm9tICcuL25ldHdvcmsudXRpbHMnO1xuaW1wb3J0IHtIdHRwVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC9odHRwL2h0dHAudXRpbHMnO1xuaW1wb3J0IHtWZXJzaW9uVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge1N0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0Nvbm5lY3Rpb25UeXBlLCBnZXRDb25uZWN0aW9uVHlwZSwgTmV0d29ya0V2ZW50VHlwZX0gZnJvbSAnLi9uZXR3b3JrLnR5cGVzJztcbmltcG9ydCB7QVBQX0xPR0dJTkdfU0VSVklDRX0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7SUxvZ2dlciwgSUxvZ2dpbmdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnZXIubW9kZWwnO1xuXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICAgIE1PQklMRTogIDEwMDAgKiA2MCAqIDEwIC8qIGV2ZXJ5IDEwIG1pbiAqLyxcbiAgICBERVNLVE9QOiAxMDAwICogNjAgKiA1IC8qIGV2ZXJ5IDUgbWluICovXG59O1xuXG5leHBvcnQgY29uc3QgUEVFUl9VUkxfUkVHRVhQID0gL14oaHR0cHxodHRwcyk6XFwvXFwvW14gXCI/I0BdKyQvO1xuXG4vKiAtLSBERVYgb25seSAodG8gZGVidWcgcmVmcmVzaCB0aW1lcilcbmNvbnN0IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QgPSB7XG4gICAgTU9CSUxFOiAgMTAwMCxcbiAgICBERVNLVE9QOiAxMDAwXG59Ki9cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxQZWVyLCBQZWVyPiB7XG5cbiAgb25QZWVyQ2hhbmdlcyA9IHRoaXMuc3RhcnRTdWJqZWN0LnBpcGUoXG4gICAgbWFwKHBlZXIgPT4gcGVlcj8udXJsKSxcbiAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KClcbiAgKTtcbiAgb25OZXR3b3JrU3RhdHVzQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblR5cGU+KG51bGwpO1xuICBvblJlc2V0TmV0d29ya0NhY2hlID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlcjtcbiAgcHJpdmF0ZSBfdGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoUGVyaW9kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaENvbmRpdGlvbjogKCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGV2aWNlQ29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlO1xuICBwcml2YXRlIF9mb3JjZU9mZmxpbmU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2xpc3RlbmVyczoge1xuICAgW2tleTogc3RyaW5nXTogKChkYXRhPzogYW55KSA9PiBQcm9taXNlPHZvaWQ+KVtdO1xuICB9ID0ge307XG5cbiAgZ2V0IG9ubGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSAhPT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgPT09ICdub25lJztcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uVHlwZSgpOiBDb25uZWN0aW9uVHlwZXtcbiAgICAvLyBJZiBmb3JjZSBvZmZsaW5lOiByZXR1cm4gJ25vbmUnXG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlT2ZmbGluZSAmJiAnbm9uZSdcbiAgICAgIC8vIEVsc2UsIHJldHVybiBkZXZpY2UgY29ubmVjdGlvbiB0eXBlIChvciB1bmtub3duKVxuICAgICAgfHwgKHRoaXMuc3RhcnRlZCAmJiB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSB8fCAndW5rbm93bicpO1xuICB9XG5cbiAgZ2V0IHBlZXIoKTogUGVlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN1YmplY3QudmFsdWU/LmNsb25lKCk7XG4gIH1cblxuICBzZXQgcGVlcihwZWVyOiBQZWVyKSB7XG4gICAgdGhpcy5yZXN0YXJ0KHBlZXIpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgY3J5cHRvU2VydmljZTogQ3J5cHRvU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9HR0lOR19TRVJWSUNFKSBwcml2YXRlIGxvZ2dpbmdTZXJ2aWNlOiBJTG9nZ2luZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZXR3b3JrOiBOZXR3b3JrLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXJcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuc2V0dGluZ3MubW9iaWxlO1xuICAgIHRoaXMuX2xvZ2dlciA9IHRoaXMubG9nZ2luZ1NlcnZpY2U/LmdldExvZ2dlcignbmV0d29yaycpO1xuXG4gICAgaWYgKHRoaXMuX21vYmlsZSkge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5NT0JJTEU7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24gPSAoKSA9PiB0aGlzLm9ubGluZTsgLy8gQ2hlY2sgb25seSB3aGVuIG9ubGluZSwgYW5kIHN0b3Agd2hlbiBvZmZsaW5lXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKHBlZXIgPT4gdGhpcy5uZ09uQWZ0ZXJTdGFydChwZWVyKSk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHlcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VD0gYW55PihldmVudFR5cGU6IE5ldHdvcmtFdmVudFR5cGUsIGNhbGxiYWNrOiAoZGF0YT86IFQpID0+IFByb21pc2U8YW55Pik6IFN1YnNjcmlwdGlvbiB7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAncGVlckNoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vblBlZXJDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAnc3RhdHVzQ2hhbmdlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh0eXBlKSA9PiBjYWxsYmFjayh0eXBlIGFzIHVua25vd24gYXMgVCkpO1xuXG4gICAgICBjYXNlICdyZXNldENhY2hlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyeU9ubGluZShvcHRzPzoge1xuICAgIHNob3dPZmZsaW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dPbmxpbmVUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd0xvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgYWZ0ZXJSZXRyeURlbGF5PzogbnVtYmVyO1xuICAgIGFmdGVyUmV0cnlQcm9taXNlPzogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gSWYgb2ZmbGluZSBtb2RlIG5vdCBmb3JjZWQsIGFuZCBkZXZpY2Ugc2F5cyB0aGVyZSBpcyBubyBjb25uZWN0aW9uOiBza2lwXG4gICAgaWYgKCF0aGlzLl9mb3JjZU9mZmxpbmUgfHwgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gU0hvdyBsb2FkaW5nIHRvYXN0XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzaG93TG9hZGluZ1RvYXN0ID0gIW9wdHMgfHwgb3B0cy5zaG93TG9hZGluZ1RvYXN0ICE9PSBmYWxzZTtcbiAgICBsZXQgbG9hZGluZ1RvYXN0OiBIVE1MSW9uVG9hc3RFbGVtZW50O1xuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5SRVRSWV9UT19DT05ORUNUJyxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgICBvbldpbGxQcmVzZW50OiB0ID0+IGxvYWRpbmdUb2FzdCA9IHR9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gQ2hlY2tpbmcgY29ubmVjdGlvbiB0byBwb2QuLi4nKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuXG4gICAgICBpZiAoIXNldHRpbmdzLnBlZXJVcmwpIHJldHVybiBmYWxzZTsgLy8gTm8gcGVlciBkZWZpbmUuIFNraXBcblxuICAgICAgY29uc3QgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgICBjb25zdCBwZWVySW5mbyA9IGF3YWl0IHRoaXMuY2hlY2tQZWVyQWxpdmUocGVlcik7XG4gICAgICBjb25zdCBwZWVyQWxpdmVBbmRDb21wYXRpYmxlID0gcGVlckluZm8gJiYgYXdhaXQgdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvKTtcbiAgICAgIGlmIChwZWVyQWxpdmVBbmRDb21wYXRpYmxlKSB7XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgb2ZmbGluZSBtb2RlXG4gICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAvLyBSZXN0YXJ0XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdGFydChwZWVyKTtcblxuICAgICAgICAvLyBXYWl0IGEgcHJvbWlzZSwgYmVmb3JlIHJlY2hlY2tcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCB0aGlzLm9ubGluZSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgbG9hZGluZyB0b2FzdCAod2l0aCBhIG1pbmltYWwgZGlzcGxheSBkdXJhdGlvbiBvZiAycylcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgc2xlZXAoMjAwMCAtIChEYXRlLm5vdygpIC0gbm93KSk7XG4gICAgICBpZiAobG9hZGluZ1RvYXN0KSBhd2FpdCBsb2FkaW5nVG9hc3QuZGlzbWlzcygpO1xuICAgIH1cblxuICAgIC8vIFJlY2hlY2sgbmV0d29yayBzdGF0dXNcbiAgICBjb25zdCBvbmxpbmUgPSB0aGlzLm9ubGluZTtcblxuICAgIC8vIERpc3BsYXkgYSB0b2FzdCB0byB1c2VyXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd09ubGluZVRvYXN0ICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9OTElORScsIHR5cGU6ICdpbmZvJ30pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcHRzICYmIG9wdHMuc2hvd09mZmxpbmVUb2FzdCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRGlzcGxheSB0b2FzdCAod2l0aG91dCBhd2FpdCwgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0IGNsb3NlIGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMuc2hvd09mZmxpbmVUb2FzdCh7c2hvd1JldHJ5QnV0dG9uOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQgJiYgb25saW5lO1xuICB9XG5cbiAgYXN5bmMgc2hvd09mZmxpbmVUb2FzdChvcHRzPzoge1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgc2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeVN1Y2Nlc3NUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5TG9hZGluZ1RvYXN0PzogYm9vbGVhbjtcbiAgICBvblJldHJ5U3VjY2Vzcz86ICgpID0+IHZvaWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybjsgLy8gU2tpcCBpZiBvbmxpbmVcblxuICAgIC8vIFRvYXN0IHdpdGggYSByZXRyeSBidXR0b25cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93UmV0cnlCdXR0b24gIT09IGZhbHNlKSB7XG5cbiAgICAgIGNvbnN0IHRvYXN0UmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAob3B0cyAmJiBvcHRzLm1lc3NhZ2UgfHwgJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnKSxcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiAxMDAwMDAsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAvLyByZWNvbm5lY3QgYnV0dG9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgcm9sZTogJ3JlZnJlc2gnLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTkVUV09SSy5CVE5fQ0hFQ0tfQUxJVkUnKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVzZXIgZG9uJ3QgY2xpY2sgcmVjb25uZWN0OiByZXR1cm5cbiAgICAgIGlmICghdG9hc3RSZXN1bHQgfHwgdG9hc3RSZXN1bHQucm9sZSAhPT0gJ3JlZnJlc2gnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGlmIG5ldHdvcmsgc3RhdGUgY2hhbmdlZCB0byBvbmxpbmU6IGV4aXQgaGVyZVxuICAgICAgaWYgKHRoaXMub25saW5lKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVHJ5IHRvIHJlY29ubmVjdFxuICAgICAgY29uc3Qgb25saW5lID0gYXdhaXQgdGhpcy50cnlPbmxpbmUoe1xuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0b0Jvb2xlYW4ob3B0cyAmJiBvcHRzLnNob3dSZXRyeVN1Y2Nlc3NUb2FzdCwgdHJ1ZSksXG4gICAgICAgIHNob3dMb2FkaW5nVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5TG9hZGluZ1RvYXN0LCB0cnVlKVxuICAgICAgfSk7XG4gICAgICBpZiAob25saW5lKSB7XG4gICAgICAgIC8vIENhbGwgc3VjY2VzcyBjYWxsYmFjayAoYXN5bmMpXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMub25SZXRyeVN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KG9wdHMub25SZXRyeVN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBvcHRzID0ge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzaG93UmV0cnlCdXR0b246IGZhbHNlLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIHRvYXN0LCB3aXRob3V0ICdhd2FpdCcsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCdzIGRpc21pc3NcbiAgICB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcsXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBlZXIgaXMgYWxpdmVcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckFsaXZlKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBjaGVja0NvbXBhdGlibGU/OiBib29sZWFuOyBkaXNwbGF5VG9hc3Q/OiBib29sZWFuIH0gKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuICAgICAgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUluZm8ocGVlcik7XG4gIH1cblxuICBhc3luYyBjaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvOiBOb2RlSW5mbywgb3B0cz86IHsgc2hvd1RvYXN0PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uKSByZXR1cm4gdHJ1ZTsgLy8gU2tpcCBjb21wYXRpYmlsaXR5IGNoZWNrXG5cbiAgICAvLyBDaGVjayB0aGUgbWluIHBvZCB2ZXJzaW9uLCBkZWZpbmVkIGJ5IHRoZSBhcHBcbiAgICBjb25zdCBpc0NvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24gJiYgVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZSh0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uLCBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24pO1xuXG4gICAgLy8gRGlzcGxheSB0b2FzdCwgaWYgbm90IGNvbXBhdGlibGVcbiAgICBpZiAoIWlzQ29tcGF0aWJsZSAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTkVUV09SSy5FUlJPUi5OT1RfQ09NUEFUSUJMRV9QRUVSJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge1xuICAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb25cbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQ29tcGF0aWJsZTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vZGVJbmZvKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICcvYXBpL25vZGUvaW5mbycpO1xuICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2NoZWNrUGVlckFsaXZlJywgYEdldHRpbmcgJyR7cGF0aH0nIC4uLmApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGE6Tm9kZUluZm8gPSBhd2FpdCB0aGlzLmdldChwYXRoKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2NoZWNrUGVlckFsaXZlJywgYFJlc3BvbnNlIG9mICcke3BhdGh9JzpcXG4ke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5lcnJvcignY2hlY2tQZWVyQWxpdmUnLCBgRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7ZXJyPy5tZXNzYWdlIHx8ICcnfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBNYW5pZmVzdChwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHtub2NhY2hlPzogYm9vbGVhbn0pOiBQcm9taXNlPEFwcE1hbmlmZXN0fHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgICBpZiAob3B0cz8ubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwnbWFuaWZlc3QuanNvblxcJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzJywgZXJyKTtcbiAgICAgIGVsc2UgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwnbWFuaWZlc3QuanNvblxcJy4nLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBWZXJzaW9uKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzID0ge25vY2FjaGU6IHRydWV9KTogUHJvbWlzZTxzdHJpbmd8dW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJ3ZlcnNpb24uYXBwdXAnKTtcbiAgICAgIGlmIChvcHRzLm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBWZXJzaW9uOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFRleHQocGF0aCwgb3B0cyk7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGFwcFZlcnNpb24pKSByZXR1cm4gYXBwVmVyc2lvbjtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwndmVyc2lvbi5hcHB1cFxcJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzJyk7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ3ZlcnNpb24uYXBwdXBcXCcuJywgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gVHJ5IGxvYWRpbmcgbWFuaWZlc3QuanNvblxuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRBcHBNYW5pZmVzdChwZWVyLCBvcHRzKTtcbiAgICByZXR1cm4gbWFuaWZlc3Q/LnZlcnNpb247XG4gIH1cblxuICBjb21wdXRlUGVlclBhdGgocGVlcjogc3RyaW5nIHwgUGVlciB8IHVuZGVmaW5lZCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBwZWVyID0gcGVlciB8fCB0aGlzLnBlZXI7XG4gICAgaWYgKCFwZWVyKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgbGV0IHBlZXJVcmwgPSAocGVlciBpbnN0YW5jZW9mIFBlZXIpID8gcGVlci51cmwgOiAocGVlciBhcyBzdHJpbmcpO1xuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICB9XG5cbiAgICAvLyBDb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICByZXR1cm4gcGVlclVybCArIHBhdGg7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmb3JjZSBvZmZsaW5lIG1vZGVcbiAgICovXG4gIHNldEZvcmNlT2ZmbGluZSh2YWx1ZT86IGJvb2xlYW4sIG9wdHM/OiB7XG4gICAgc2hvd1RvYXN0PzogYm9vbGVhbjsgLy8gRGlzcGxheSBhIHRvYXN0LCB3aGVuIG9mZmxpbmUgP1xuICB9KSB7XG4gICAgdmFsdWUgPSB0b0Jvb2xlYW4odmFsdWUsIHRydWUpO1xuICAgIGlmICh0aGlzLl9mb3JjZU9mZmxpbmUgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0Nvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcbiAgICAgIHRoaXMuX2ZvcmNlT2ZmbGluZSA9IHZhbHVlO1xuICAgICAgY29uc3QgY3VycmVudENvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcblxuICAgICAgaWYgKHByZXZpb3VzQ29ubmVjdGlvblR5cGUgIT09IGN1cnJlbnRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBDb25uZWN0aW9uIGNoYW5nZWQgdG8geyR7Y3VycmVudENvbm5lY3Rpb25UeXBlfX1gKTtcbiAgICAgICAgdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLm5leHQoY3VycmVudENvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBPZmZsaW5lIG1vZGU6IGFsZXJ0IHRoZSB1c2VyXG4gICAgICAgIGlmIChjdXJyZW50Q29ubmVjdGlvblR5cGUgPT09ICdub25lJyAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzogUGFydGlhbDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz4pOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgY29uc3QgJG9uUmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgY29uc3QgcGVlcnMkID0gJG9uUmVmcmVzaC5waXBlKFxuICAgICAgbWVyZ2VNYXAoKF8pID0+IHRoaXMuZ2V0RGVmYXVsdFBlZXJzKCkpLFxuICAgICAgbWFwKHBlZXJzID0+IHBlZXJzIHx8IFtdKVxuICAgICk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFNlbGVjdFBlZXJNb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+e1xuICAgICAgICBvblJlZnJlc2g6ICRvblJlZnJlc2gsXG4gICAgICAgIHBlZXJzOiBwZWVycyQsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0sXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgc2hvd0JhY2tkcm9wOiB0cnVlXG4gICAgfSk7XG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuICAgICRvblJlZnJlc2guZW1pdCgpO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XG4gICAgJG9uUmVmcmVzaC5jb21wbGV0ZSgpO1xuXG4gICAgcmV0dXJuIGRhdGEgJiYgKGRhdGEgYXMgUGVlcikgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDbGVhcmluZyBhbGwgY2FjaGVzLi4uJyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuY2xlYXJBbGwoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBFbWl0IGV2ZW50XG4gICAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZFxuICAgICAgICAgIHJldHVybiBzbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBBbGwgY2FjaGUgY2xlYXJlZCwgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KHBlZXI/OiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBTdGFydGluZyBuZXR3b3JrLi4uJyk7XG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICBwZWVyID0gcGVlciB8fCAoYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0byBoaWRlIHRoZSBzcGxhc2hzY3JlZW4sIGJlZm9yZSBvcGVuIHRoZSBtb2RhbFxuICAgIGlmICghcGVlcikgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgIC8vIE5vIHBlZXIgaW4gc2V0dGluZ3M6IGFzayB1c2VyIHRvIGNob29zZVxuICAgIHdoaWxlICghcGVlcikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIE5vIHBlZXIgZGVmaW5lZC4gQXNraW5nIHVzZXIgdG8gY2hvb3NlIGEgcGVlci4nKTtcbiAgICAgIHBlZXIgPSBhd2FpdCB0aGlzLnNob3dTZWxlY3RQZWVyTW9kYWwoe2FsbG93U2VsZWN0RG93blBlZXI6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gU3RhcnRpbmcgc2VydmljZSBbT0tdIHtwZWVyOiAnJHtwZWVyLnVybH0nLCBvbmxpbmU6ICR7dGhpcy5vbmxpbmV9fWApO1xuXG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPbkFmdGVyU3RhcnQocGVlcjogUGVlcikge1xuXG4gICAgLy8gV2FpdCBzZXR0aW5ncyBzdGFydHMsIHRoZW4gc2F2ZSBwZWVyIGluIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseSh7cGVlclVybDogcGVlci51cmx9KTtcblxuICAgIHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCh0aGlzLm5ldHdvcms/LnR5cGUgfHwgJ3Vua25vd24nKTtcblxuICAgIC8vIFN0YXJ0IHRoZSByZWZyZXNoIHRpbWVyXG4gICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuXG4gICAgLy8gTGlzdGVuIGZvciBkZXZpY2UgbmV0d29yayBjaGFuZ2VzXG4gICAgaWYgKHRoaXMubmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLm5ldHdvcmsub25EaXNjb25uZWN0KCkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCgnbm9uZScpKSk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMubmV0d29yay5vbkNvbm5lY3QoKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKHRoaXMubmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9ICh0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnKSA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG4gICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnBlZXJVcmwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBVc2UgcGVlciB7JHtzZXR0aW5ncy5wZWVyVXJsfX0gKGZvdW5kIGluIHRoZSBsb2NhbCBzdG9yYWdlKWApO1xuICAgICAgcmV0dXJuIFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdXNlIGRlZmF1bHQgcGVlciBpbiBlbnYsIGlmIGV4aXN0c1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIGlmIEFwcCBpcyBob3N0ZWQsIHRyeSB0aGUgd2ViIHNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudCAmJiB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbjtcbiAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgJiYgbG9jYXRpb24ucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpIHtcbiAgICAgICAgcmV0dXJuIGRldGVjdGVkUGVlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUGVlciBub3QgYWxpdmUsIGJ1dCBzaG91bGQgYmUgYXQgdGhlIHNhbWUgVVJMLCByZXRyeWluZyBlYWNoIDFzXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlcikge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGltZXIoMTAwMCwgMTAwMClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BTdWJqZWN0KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiBjb25zb2xlLndhcm4oYFtuZXR3b3JrLXNlcnZpY2VdIFdhaXRpbmcgcGVlciBiZSBiZSBhbGl2ZSwgYXQgeyR7ZGV0ZWN0ZWRQZWVyLnVybH19IC4uLmApKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuY2hlY2tQZWVyQWxpdmUoZGV0ZWN0ZWRQZWVyKSksXG4gICAgICAgICAgICBmaWx0ZXIoYWxpdmUgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gZGV0ZWN0ZWRQZWVyKSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0byBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wUmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFJlZnJlc2hUaW1lcigpe1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmc6IHNraXBcblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHJlZnJlc2ggdGltZXIsIGV2ZXJ5ICR7dGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kfW1zLi4uYCk7XG5cbiAgICBsZXQgbGFzdEluZm86IE5vZGVJbmZvO1xuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kLCB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2tpcCBzb21lIHRpbWVyIGV2ZW50IChzZWUgY29uc3RydWN0b3IpXG4gICAgICAgIGZpbHRlcih0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24pLFxuXG4gICAgICAgIC8vIENoZWNraW4gaWYgcGVlciBhbGl2ZVxuICAgICAgICB0YXAoKCkgPT4gIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5jaGVja1BlZXJBbGl2ZSh0aGlzLnBlZXIpKSxcblxuICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKGluZm8gPT4gISFpbmZvICE9PSAhIWxhc3RJbmZvKSxcbiAgICAgICAgdGFwKGluZm8gPT4gbGFzdEluZm8gPSBpbmZvKSxcblxuICAgICAgICAvLyBDaGVjayBjb21wYXRpYmlsaXR5XG4gICAgICAgIG1lcmdlTWFwKChpbmZvKSA9PiB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUoaW5mbywge3Nob3dUb2FzdDogdHJ1ZX0pKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYWxpdmUgPT4ge1xuICAgICAgICAgIGlmIChhbGl2ZSAmJiB0aGlzLm9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAgICAgLy8gUmVzdGFydCB0aGUgc2VydmljZSAodG8gZm9yY2UgcmUgYXV0aClcbiAgICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICghYWxpdmUgJiYgdGhpcy5vbmxpbmUpe1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUodHJ1ZSk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHNlcnZpY2VcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIFJlZnJlc2ggdGltZXIgc3RvcHBlZCcpKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRleHQocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ3RleHQnO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0VGV4dCh0aGlzLmh0dHAsIHRoaXMuZ2V0VXJpKHBhdGgpLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQ8VD4ocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG5cbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldEpzb248VD4odGhpcy5odHRwLCB0aGlzLmdldFVyaShwYXRoKSwgb3B0cyk7XG4gIH1cblxuICAvKiAtLSBQcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBnZXRVcmkocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdXJpID0gcGF0aDtcblxuICAgIC8vIElmIHBhdGggaXMgbm90IGFuIFVSSTogcHJlcGVuZCB3aXRoIHBlZXIgVVJMXG4gICAgaWYgKCF1cmkuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICF1cmkuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgbGV0IHBlZXJVcmwgPSAodGhpcy5wZWVyICYmIHRoaXMucGVlci51cmwpO1xuXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBVUkk6IGNvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgICAgdXJpID0gcGVlclVybCArIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiB1cmk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoY29ubmVjdGlvblR5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKTtcbiAgICBpZiAoY29ubmVjdGlvblR5cGUgIT09IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB7XG4gICAgICB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlIGFzIENvbm5lY3Rpb25UeXBlO1xuXG4gICAgICAvLyBJZiBOT1QgIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgZGF0YT86IFQpIHtcbiAgICBjb25zdCBob29rcyA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGhvb2tzKSkge1xuICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29yay1zZXJ2aWNlXSBUcmlnZ2VyICR7bmFtZX0gaG9vazogRXhlY3V0aW5nICR7aG9va3MubGVuZ3RofSBjYWxsYmFja3MuLi5gKTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGhvb2tzLm1hcChjYWxsYmFjayA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgIHJldHVybiBwcm9taXNlLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|