@vendure/admin-ui 2.0.4 → 2.0.5
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/core/common/component-registry-types.d.ts +1 -1
- package/core/common/version.d.ts +1 -1
- package/core/components/app-shell/app-shell.component.d.ts +1 -0
- package/core/providers/i18n/i18n.service.d.ts +4 -0
- package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +2 -2
- package/esm2022/catalog/components/product-detail/product-detail.component.mjs +2 -2
- package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +1 -1
- package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +7 -1
- package/esm2022/catalog/components/stock-location-detail/stock-location-detail.component.mjs +30 -30
- package/esm2022/core/app.config.mjs +3 -7
- package/esm2022/core/common/base-list.component.mjs +1 -1
- package/esm2022/core/common/component-registry-types.mjs +1 -1
- package/esm2022/core/common/generated-types.mjs +1 -1
- package/esm2022/core/common/version.mjs +2 -2
- package/esm2022/core/components/app-shell/app-shell.component.mjs +11 -9
- package/esm2022/core/components/theme-switcher/theme-switcher.component.mjs +1 -1
- package/esm2022/core/components/user-menu/user-menu.component.mjs +3 -3
- package/esm2022/core/data/data.module.mjs +3 -3
- package/esm2022/core/data/utils/transform-relation-custom-field-inputs.mjs +1 -1
- package/esm2022/core/providers/bulk-action-registry/bulk-action-types.mjs +1 -1
- package/esm2022/core/providers/dashboard-widget/dashboard-widget-types.mjs +1 -1
- package/esm2022/core/providers/data-table/data-table-filter-collection.mjs +1 -1
- package/esm2022/core/providers/i18n/i18n.service.mjs +15 -1
- package/esm2022/core/providers/page/page.service.mjs +1 -1
- package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +1 -1
- package/esm2022/core/shared/components/dropdown/dropdown-menu.component.mjs +29 -29
- package/esm2022/core/shared/components/dropdown/dropdown.component.mjs +1 -1
- package/esm2022/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +1 -1
- package/esm2022/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +1 -1
- package/esm2022/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +3 -3
- package/esm2022/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +12 -12
- package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.mjs +3 -3
- package/esm2022/core/shared/shared.module.mjs +1 -1
- package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +27 -27
- package/esm2022/order/components/draft-order-detail/draft-order-detail.component.mjs +3 -3
- package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +9 -9
- package/fesm2022/vendure-admin-ui-catalog.mjs +37 -31
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +69 -59
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-customer.mjs +26 -26
- package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-order.mjs +2 -2
- package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-settings.mjs +8 -8
- package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
- package/package.json +8 -8
- package/static/i18n-messages/ar.json +774 -0
- package/static/i18n-messages/cs.json +773 -773
- package/static/i18n-messages/de.json +773 -773
- package/static/i18n-messages/en.json +774 -774
- package/static/i18n-messages/es.json +773 -773
- package/static/i18n-messages/fr.json +773 -773
- package/static/i18n-messages/he.json +774 -0
- package/static/i18n-messages/it.json +773 -773
- package/static/i18n-messages/pl.json +773 -773
- package/static/i18n-messages/pt_BR.json +773 -773
- package/static/i18n-messages/pt_PT.json +773 -773
- package/static/i18n-messages/ru.json +773 -773
- package/static/i18n-messages/uk.json +773 -773
- package/static/i18n-messages/zh_Hans.json +773 -773
- package/static/i18n-messages/zh_Hant.json +773 -773
- package/static/vendure-ui-config.json +3 -0
|
@@ -59,5 +59,5 @@ export type ActionBarLocationId = PageLocationId;
|
|
|
59
59
|
*
|
|
60
60
|
* @docsCategory custom-detail-components
|
|
61
61
|
*/
|
|
62
|
-
export type CustomDetailComponentLocationId = 'administrator-profile' | 'administrator-detail' | 'channel-detail' | 'collection-detail' | 'country-detail' | 'customer-detail' | 'customer-group-detail' | 'facet-detail' | 'global-settings-detail' | 'order-detail' | 'payment-method-detail' | 'product-detail' | 'product-variant-detail' | 'promotion-detail' | 'seller-detail' | 'shipping-method-detail' | 'stock-location-detail' | 'tax-category-detail' | 'tax-rate-detail' | 'zone-detail';
|
|
62
|
+
export type CustomDetailComponentLocationId = 'administrator-profile' | 'administrator-detail' | 'channel-detail' | 'collection-detail' | 'country-detail' | 'customer-detail' | 'customer-group-detail' | 'draft-order-detail' | 'facet-detail' | 'global-settings-detail' | 'order-detail' | 'payment-method-detail' | 'product-detail' | 'product-variant-detail' | 'promotion-detail' | 'seller-detail' | 'shipping-method-detail' | 'stock-location-detail' | 'tax-category-detail' | 'tax-rate-detail' | 'zone-detail';
|
|
63
63
|
export type UIExtensionLocationId = ActionBarLocationId | CustomDetailComponentLocationId;
|
package/core/common/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const ADMIN_UI_VERSION = "2.0.
|
|
1
|
+
export declare const ADMIN_UI_VERSION = "2.0.5";
|
|
@@ -19,6 +19,7 @@ export declare class AppShellComponent implements OnInit {
|
|
|
19
19
|
private breadcrumbService;
|
|
20
20
|
userName$: Observable<string>;
|
|
21
21
|
uiLanguageAndLocale$: Observable<[LanguageCode, string | undefined]>;
|
|
22
|
+
direction$: Observable<'ltr' | 'rtl'>;
|
|
22
23
|
availableLanguages: LanguageCode[];
|
|
23
24
|
hideVendureBranding: boolean | undefined;
|
|
24
25
|
pageTitle$: Observable<string>;
|
|
@@ -24,6 +24,10 @@ export declare class I18nService {
|
|
|
24
24
|
* Translate the given key.
|
|
25
25
|
*/
|
|
26
26
|
translate(key: string | string[], params?: any): string;
|
|
27
|
+
/**
|
|
28
|
+
* Returns true if the given language code is a right-to-left language.
|
|
29
|
+
*/
|
|
30
|
+
isRTL(languageCode: LanguageCode): boolean;
|
|
27
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<I18nService, never>;
|
|
28
32
|
static ɵprov: i0.ɵɵInjectableDeclaration<I18nService>;
|
|
29
33
|
}
|
|
@@ -35,7 +35,7 @@ export class CollectionDetailComponent extends TypedBaseDetailComponent {
|
|
|
35
35
|
this.customFields = this.getCustomFieldConfig('Collection');
|
|
36
36
|
this.detailForm = this.formBuilder.group({
|
|
37
37
|
name: ['', Validators.required],
|
|
38
|
-
slug: ['', unicodePatternValidator(/^[\p{Letter}0-
|
|
38
|
+
slug: ['', unicodePatternValidator(/^[\p{Letter}0-9._-]+$/)],
|
|
39
39
|
description: '',
|
|
40
40
|
visible: false,
|
|
41
41
|
inheritFilters: true,
|
|
@@ -261,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
|
|
|
261
261
|
type: ViewChild,
|
|
262
262
|
args: ['collectionContents']
|
|
263
263
|
}] } });
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tZGV0YWlsL2NvbGxlY3Rpb24tZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWRldGFpbC9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFHVCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFHSCxtQkFBbUIsRUFPbkIseUJBQXlCLEVBRXpCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsaUJBQWlCLEVBS2pCLFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsdUJBQXVCLEdBRTFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBSTVHLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcs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QyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDcEQsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDbkYsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQixDQUN6QixVQUFtQyxFQUNuQyxtQkFBd0I7UUFFeEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLElBQUk7Z0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQzthQUNyQyxDQUFDLENBQUM7U0FDTixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7OEdBMVNRLHlCQUF5QjtrR0FBekIseUJBQXlCLDZNQ3hEdEMsbTdXQXFPQTs7MkZEN0thLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDSSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU07MlBBMkJkLGlCQUFpQjtzQkFBakQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQXNzZXQsXHJcbiAgICBDb2xsZWN0aW9uLFxyXG4gICAgQ09MTEVDVElPTl9GUkFHTUVOVCxcclxuICAgIENvbGxlY3Rpb25EZXRhaWxRdWVyeURvY3VtZW50LFxyXG4gICAgQ29sbGVjdGlvbkZyYWdtZW50LFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uLFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0LFxyXG4gICAgQ3JlYXRlQ29sbGVjdGlvbklucHV0LFxyXG4gICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZW5jb2RlQ29uZmlnQXJnVmFsdWUsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDb25maWdBcmdWYWx1ZSxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFR5cGVkQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yLFxyXG4gICAgVXBkYXRlQ29sbGVjdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL25vcm1hbGl6ZS1zdHJpbmcnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25Db250ZW50c0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbGxlY3Rpb24tY29udGVudHMvY29sbGVjdGlvbi1jb250ZW50cy5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTExFQ1RJT05fREVUQUlMX1FVRVJZID0gZ3FsYFxyXG4gICAgcXVlcnkgQ29sbGVjdGlvbkRldGFpbFF1ZXJ5KCRpZDogSUQhKSB7XHJcbiAgICAgICAgY29sbGVjdGlvbihpZDogJGlkKSB7XHJcbiAgICAgICAgICAgIC4uLkNvbGxlY3Rpb25cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAke0NPTExFQ1RJT05fRlJBR01FTlR9XHJcbmA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNvbGxlY3Rpb24tZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgQ29sbGVjdGlvbkRldGFpbFF1ZXJ5RG9jdW1lbnQsICdjb2xsZWN0aW9uJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnQ29sbGVjdGlvbicpO1xyXG4gICAgZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc2x1ZzogWycnLCB1bmljb2RlUGF0dGVyblZhbGlkYXRvcigvXltcXHB7TGV0dGVyfTAtOV8tXSskLyldLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgICBpbmhlcml0RmlsdGVyczogdHJ1ZSxcclxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcclxuICAgICAgICApLFxyXG4gICAgfSk7XHJcbiAgICBhc3NldENoYW5nZXM6IHsgYXNzZXRzPzogQXNzZXRbXTsgZmVhdHVyZWRBc3NldD86IEFzc2V0IH0gPSB7fTtcclxuICAgIGZpbHRlcnM6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbltdID0gW107XHJcbiAgICBhbGxGaWx0ZXJzOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uW10gPSBbXTtcclxuICAgIHVwZGF0ZWRGaWx0ZXJzJDogT2JzZXJ2YWJsZTxDb25maWd1cmFibGVPcGVyYXRpb25JbnB1dFtdPjtcclxuICAgIGluaGVyaXRGaWx0ZXJzJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGxpdmVQcmV2aWV3ID0gZmFsc2U7XHJcbiAgICBwYXJlbnRJZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPjtcclxuICAgIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb24gPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZUNvbGxlY3Rpb25dO1xyXG4gICAgcHJpdmF0ZSBmaWx0ZXJSZW1vdmVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBAVmlld0NoaWxkKCdjb2xsZWN0aW9uQ29udGVudHMnKSBjb250ZW50c0NvbXBvbmVudDogQ29sbGVjdGlvbkNvbnRlbnRzQ29tcG9uZW50O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxpdmVQcmV2aWV3ID0gdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldCgnbGl2ZVByZXZpZXdDb2xsZWN0aW9uQ29udGVudHMnKSA/PyBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmNvbGxlY3Rpb24uZ2V0Q29sbGVjdGlvbkZpbHRlcnMoKS5zaW5nbGUkLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFsbEZpbHRlcnMgPSByZXMuY29sbGVjdGlvbkZpbHRlcnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyc0Zvcm1BcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2ZpbHRlcnMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICAgIGNvbnN0IGluaGVyaXRGaWx0ZXJzQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2luaGVyaXRGaWx0ZXJzJykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgICAgIHRoaXMuaW5oZXJpdEZpbHRlcnMkID0gaW5oZXJpdEZpbHRlcnNDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlZEZpbHRlcnMkID0gbWVyZ2UoZmlsdGVyc0Zvcm1BcnJheS5zdGF0dXNDaGFuZ2VzLCB0aGlzLmZpbHRlclJlbW92ZWQkKS5waXBlKFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IGZpbHRlcnNGb3JtQXJyYXkudG91Y2hlZCksXHJcbiAgICAgICAgICAgIG1hcCgoKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBPcGVyYXRpb25zVG9JbnB1dHModGhpcy5maWx0ZXJzLCBmaWx0ZXJzRm9ybUFycmF5LnZhbHVlKS5maWx0ZXIoX2ZpbHRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGFsbCB0aGUgYXJndW1lbnRzIGhhdmUgdmFsaWQgdmFsdWVzLiBFLmcuIGEgbmV3bHktYWRkZWRcclxuICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgd2lsbCBub3QgeWV0IGhhdmUgdmFsaWQgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgX2ZpbHRlci5hcmd1bWVudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy52YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRJZCQgPSB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChwbSA9PiBwbS5nZXQoJ3BhcmVudElkJykgfHwgdW5kZWZpbmVkKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKHBhcmVudElkID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihwYXJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVudGl0eSQucGlwZShtYXAoY29sbGVjdGlvbiA9PiBjb2xsZWN0aW9uLnBhcmVudD8uaWQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJEZWZpbml0aW9uKF9maWx0ZXI6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbik6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb24gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFsbEZpbHRlcnMuZmluZChmID0+IGYuY29kZSA9PT0gX2ZpbHRlci5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3NldHNDaGFuZ2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIU9iamVjdC52YWx1ZXModGhpcy5hc3NldENoYW5nZXMpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNyZWF0aW5nIGEgbmV3IENvbGxlY3Rpb24sIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIHNsdWcgYmFzZWQgb24gdGhlIGNvbGxlY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlU2x1ZyhuYW1lVmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHNsdWdDb250cm9sID0gdGhpcy5kZXRhaWxGb3JtLmdldChbJ3NsdWcnXSk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gdGhpcy5lbnRpdHkgPyBmaW5kVHJhbnNsYXRpb24odGhpcy5lbnRpdHksIHRoaXMubGFuZ3VhZ2VDb2RlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2x1Z0lzRW1wdHkgPSAhY3VycmVudFRyYW5zbGF0aW9uIHx8ICFjdXJyZW50VHJhbnNsYXRpb24uc2x1ZztcclxuICAgICAgICBpZiAoc2x1Z0NvbnRyb2wgJiYgc2x1Z0NvbnRyb2wucHJpc3RpbmUgJiYgY3VycmVudFNsdWdJc0VtcHR5KSB7XHJcbiAgICAgICAgICAgIHNsdWdDb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZVN0cmluZyhgJHtuYW1lVmFsdWV9YCwgJy0nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEZpbHRlcihjb2xsZWN0aW9uRmlsdGVyOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBjb25zdCBhcmdzSGFzaCA9IGNvbGxlY3Rpb25GaWx0ZXIuYXJncy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChvdXRwdXQsIGFyZykgPT4gKHtcclxuICAgICAgICAgICAgICAgIC4uLm91dHB1dCxcclxuICAgICAgICAgICAgICAgIFthcmcubmFtZV06IGdldENvbmZpZ0FyZ1ZhbHVlKGFyZy52YWx1ZSksXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcnNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woe1xyXG4gICAgICAgICAgICAgICAgY29kZTogY29sbGVjdGlvbkZpbHRlci5jb2RlLFxyXG4gICAgICAgICAgICAgICAgYXJnczogYXJnc0hhc2gsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICBjb2RlOiBjb2xsZWN0aW9uRmlsdGVyLmNvZGUsXHJcbiAgICAgICAgICAgIGFyZ3M6IGNvbGxlY3Rpb25GaWx0ZXIuYXJncy5tYXAoYSA9PiAoeyBuYW1lOiBhLm5hbWUsIHZhbHVlOiBnZXRDb25maWdBcmdWYWx1ZShhLnZhbHVlKSB9KSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRmlsdGVyKGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBcnJheS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICBmaWx0ZXJzQXJyYXkubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJSZW1vdmVkJC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV0YWlsRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkQ29sbGVjdGlvbihcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiAnJyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogJycsXHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICBzbHVnOiAnJyxcclxuICAgICAgICAgICAgICAgIGlzUHJpdmF0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBicmVhZGNydW1iczogW10sXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlZEFzc2V0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXSxcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW10sXHJcbiAgICAgICAgICAgICAgICBpbmhlcml0RmlsdGVyczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50OiB7fSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLFxyXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlQ29kZSxcclxuICAgICAgICApIGFzIENyZWF0ZUNvbGxlY3Rpb25JbnB1dDtcclxuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdwYXJlbnRJZCcpO1xyXG4gICAgICAgIGlmIChwYXJlbnRJZCkge1xyXG4gICAgICAgICAgICBpbnB1dC5wYXJlbnRJZCA9IHBhcmVudElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmNvbGxlY3Rpb24uY3JlYXRlQ29sbGVjdGlvbihpbnB1dCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0NvbGxlY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBkYXRhLmNyZWF0ZUNvbGxlY3Rpb24uaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0NvbGxlY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbY2F0ZWdvcnksIGxhbmd1YWdlQ29kZV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZENvbGxlY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICApIGFzIFVwZGF0ZUNvbGxlY3Rpb25JbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLnVwZGF0ZUNvbGxlY3Rpb24oaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0NvbGxlY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudHNDb21wb25lbnQucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbkRlYWN0aXZhdGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmNhbkRlYWN0aXZhdGUoKSAmJiAhdGhpcy5hc3NldENoYW5nZXMuYXNzZXRzICYmICF0aGlzLmFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUxpdmVQcmV2aWV3KCkge1xyXG4gICAgICAgIHRoaXMubGl2ZVByZXZpZXcgPSAhdGhpcy5saXZlUHJldmlldztcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0KCdsaXZlUHJldmlld0NvbGxlY3Rpb25Db250ZW50cycsIHRoaXMubGl2ZVByZXZpZXcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGZvcm0gb24gY2hhbmdlcyB0byB0aGUgY2F0ZWdvcnkgb3IgY3VycmVudCBsYW5ndWFnZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZW50aXR5OiBDb2xsZWN0aW9uRnJhZ21lbnQsIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKGVudGl0eSwgbGFuZ3VhZ2VDb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24gPyBjdXJyZW50VHJhbnNsYXRpb24ubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICBzbHVnOiBjdXJyZW50VHJhbnNsYXRpb24gPyBjdXJyZW50VHJhbnNsYXRpb24uc2x1ZyA6ICcnLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLmRlc2NyaXB0aW9uIDogJycsXHJcbiAgICAgICAgICAgIHZpc2libGU6ICFlbnRpdHkuaXNQcml2YXRlLFxyXG4gICAgICAgICAgICBpbmhlcml0RmlsdGVyczogZW50aXR5LmluaGVyaXRGaWx0ZXJzLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBpZiAoZm9ybUFycmF5Lmxlbmd0aCAhPT0gZW50aXR5LmZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvcm1BcnJheS5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgZW50aXR5LmZpbHRlcnMuZm9yRWFjaChmID0+IHRoaXMuYWRkRmlsdGVyKGYpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5nZXQoWydjdXN0b21GaWVsZHMnXSksXHJcbiAgICAgICAgICAgICAgICBlbnRpdHksXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBjYXRlZ29yeSBhbmQgdGhlIHZhbHVlIG9mIHRoZSBmb3JtLCB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIHVwZGF0ZWQgY29weSBvZiB0aGUgY2F0ZWdvcnkgd2hpY2hcclxuICAgICAqIGNhbiB0aGVuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRDb2xsZWN0aW9uKFxyXG4gICAgICAgIGNhdGVnb3J5OiBDb2xsZWN0aW9uRnJhZ21lbnQsXHJcbiAgICAgICAgZm9ybTogdHlwZW9mIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IENyZWF0ZUNvbGxlY3Rpb25JbnB1dCB8IFVwZGF0ZUNvbGxlY3Rpb25JbnB1dCB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZENhdGVnb3J5ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogY2F0ZWdvcnksXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IGZvcm0udmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLmN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBzbHVnOiBjYXRlZ29yeS5zbHVnIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGNhdGVnb3J5LmRlc2NyaXB0aW9uIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnVwZGF0ZWRDYXRlZ29yeSxcclxuICAgICAgICAgICAgYXNzZXRJZHM6IHRoaXMuYXNzZXRDaGFuZ2VzLmFzc2V0cz8ubWFwKGEgPT4gYS5pZCksXHJcbiAgICAgICAgICAgIGZlYXR1cmVkQXNzZXRJZDogdGhpcy5hc3NldENoYW5nZXMuZmVhdHVyZWRBc3NldD8uaWQsXHJcbiAgICAgICAgICAgIGlzUHJpdmF0ZTogIWZvcm0udmFsdWUudmlzaWJsZSxcclxuICAgICAgICAgICAgZmlsdGVyczogdGhpcy5tYXBPcGVyYXRpb25zVG9JbnB1dHModGhpcy5maWx0ZXJzLCB0aGlzLmRldGFpbEZvcm0udmFsdWUuZmlsdGVycyksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcHMgYW4gYXJyYXkgb2YgY29uZGl0aW9ucyBvciBhY3Rpb25zIHRvIHRoZSBpbnB1dCBmb3JtYXQgZXhwZWN0ZWQgYnkgdGhlIEdyYXBoUUwgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG1hcE9wZXJhdGlvbnNUb0lucHV0cyhcclxuICAgICAgICBvcGVyYXRpb25zOiBDb25maWd1cmFibGVPcGVyYXRpb25bXSxcclxuICAgICAgICBmb3JtVmFsdWVPcGVyYXRpb25zOiBhbnksXHJcbiAgICApOiBDb25maWd1cmFibGVPcGVyYXRpb25JbnB1dFtdIHtcclxuICAgICAgICByZXR1cm4gb3BlcmF0aW9ucy5tYXAoKG8sIGkpID0+ICh7XHJcbiAgICAgICAgICAgIGNvZGU6IG8uY29kZSxcclxuICAgICAgICAgICAgYXJndW1lbnRzOiBPYmplY3QuZW50cmllcyhmb3JtVmFsdWVPcGVyYXRpb25zW2ldLmFyZ3MpLm1hcCgoW25hbWUsIHZhbHVlXSwgaikgPT4gKHtcclxuICAgICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZW5jb2RlQ29uZmlnQXJnVmFsdWUodmFsdWUpLFxyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cclxuICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICA8dmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgICAgIDx2ZHItbGFuZ3VhZ2Utc2VsZWN0b3JcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc05ldyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwiY29sbGVjdGlvbi1kZXRhaWxcIj48L3Zkci1hY3Rpb24tYmFyLWl0ZW1zPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzTmV3JCB8IGFzeW5jOyBlbHNlIHVwZGF0ZUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0uaW52YWxpZCB8fCBkZXRhaWxGb3JtLnByaXN0aW5lXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5jcmVhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZUJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGRldGFpbEZvcm0uaW52YWxpZCB8fCBkZXRhaWxGb3JtLnByaXN0aW5lKSAmJiAhYXNzZXRzQ2hhbmdlZCgpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLnVwZGF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPjwvdmRyLWFiLXJpZ2h0XHJcbiAgICAgICAgPlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCI+XHJcbiAgICA8dmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuICAgICAgICA8dmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cudmlzaWJpbGl0eScgfCB0cmFuc2xhdGVcIiBmb3I9XCJ2aXNpYmlsaXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2aXNpYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidmlzaWJpbGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmRyRGlzYWJsZWRdPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2aXNpYmxlLXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldGFpbEZvcm0udmFsdWUudmlzaWJsZTsgZWxzZSBwcml2YXRlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy5wdWJsaWMnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwcml2YXRlPnt7ICdjYXRhbG9nLnByaXZhdGUnIHwgdHJhbnNsYXRlIH19PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyBbZW50aXR5XT1cImVudGl0eVwiPjwvdmRyLXBhZ2UtZW50aXR5LWluZm8+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPC92ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuXHJcbiAgICAgICAgPHZkci1wYWdlLWJsb2NrICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGVudGl0eVwiXHJcbiAgICAgICAgICAgID48bmF2IHJvbGU9XCJuYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb2xsZWN0aW9uLWJyZWFkY3J1bWJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBicmVhZGNydW1iIG9mIGVudGl0eS5icmVhZGNydW1iczsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvY2F0YWxvZy9jb2xsZWN0aW9ucyddXCIgKm5nSWY9XCJpc0ZpcnN0XCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLnJvb3QtY29sbGVjdGlvbicgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9jYXRhbG9nL2NvbGxlY3Rpb25zJywgYnJlYWRjcnVtYi5pZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNGaXJzdCAmJiAhaXNMYXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBicmVhZGNydW1iLm5hbWUgfCB0cmFuc2xhdGUgfX08L2FcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMYXN0XCI+e3sgYnJlYWRjcnVtYi5uYW1lIHwgdHJhbnNsYXRlIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcblxyXG4gICAgICAgIDx2ZHItcGFnZS1ibG9jaz5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVNsdWcoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY2F0YWxvZy5zbHVnJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInNsdWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JzXT1cInsgcGF0dGVybjogKCdjYXRhbG9nLnNsdWctcGF0dGVybi1lcnJvcicgfCB0cmFuc2xhdGUpIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNsdWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2x1Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncmlkLXNwYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvbW1vbi5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItcmljaC10ZXh0LWVkaXRvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXJpY2gtdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmRcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cE5hbWU9XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInY29tbW9uLmN1c3RvbS1maWVsZHMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJDb2xsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdFxyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25JZD1cImNvbGxlY3Rpb24tZGV0YWlsXCJcclxuICAgICAgICAgICAgICAgIFtlbnRpdHkkXT1cImVudGl0eSRcIlxyXG4gICAgICAgICAgICAgICAgW2RldGFpbEZvcm1dPVwiZGV0YWlsRm9ybVwiXHJcbiAgICAgICAgICAgID48L3Zkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0PlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjYXRhbG9nLmFzc2V0cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItYXNzZXRzXHJcbiAgICAgICAgICAgICAgICAgICAgW2Fzc2V0c109XCJlbnRpdHk/LmFzc2V0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ZlYXR1cmVkQXNzZXRdPVwiZW50aXR5Py5mZWF0dXJlZEFzc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICBbdXBkYXRlUGVybWlzc2lvbnNdPVwidXBkYXRlUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhc3NldENoYW5nZXMgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLWFzc2V0cz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5maWx0ZXJzJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjYXRhbG9nLmZpbHRlci1pbmhlcml0YW5jZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcj1cImluaGVyaXRGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJUb2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaGVyaXRGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiaW5oZXJpdEZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidmlzaWJsZS10b2dnbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXRhaWxGb3JtLnZhbHVlLmluaGVyaXRGaWx0ZXJzOyBlbHNlIG5vSW5oZXJpdFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGFsb2cuaW5oZXJpdC1maWx0ZXJzLWZyb20tcGFyZW50JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Jbmhlcml0Pnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGFsb2cuZG8tbm90LWluaGVyaXQtZmlsdGVycycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnM7IGluZGV4IGFzIGk7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNvbmZpZ3VyYWJsZS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wZXJhdGlvbl09XCJmaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wZXJhdGlvbkRlZmluaXRpb25dPVwiZ2V0RmlsdGVyRGVmaW5pdGlvbihmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY29uZmlndXJhYmxlLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICp2ZHJJZlBlcm1pc3Npb25zPVwidXBkYXRlUGVybWlzc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdtYXJrZXRpbmcuYWRkLWNvbmRpdGlvbicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnUgdmRyUG9zaXRpb249XCJib3R0b20tbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgYWxsRmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEZpbHRlcihmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXIuZGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcblxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjb21tb24uY29udGVudHMnIHwgdHJhbnNsYXRlXCIgW3BhZGRpbmdYXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWNvbGxlY3Rpb24tY29udGVudHNcclxuICAgICAgICAgICAgICAgICAgICBbY29sbGVjdGlvbklkXT1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGFyZW50SWRdPVwicGFyZW50SWQkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt1cGRhdGVkRmlsdGVyc109XCJ1cGRhdGVkRmlsdGVycyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2luaGVyaXRGaWx0ZXJzXT1cImluaGVyaXRGaWx0ZXJzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld1VwZGF0ZWRGaWx0ZXJzXT1cImxpdmVQcmV2aWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAjY29sbGVjdGlvbkNvbnRlbnRzXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb3VudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50cy10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmNvbGxlY3Rpb24tY29udGVudHMnIHwgdHJhbnNsYXRlIH19ICh7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLnJlc3VsdHMtY291bnQnIHwgdHJhbnNsYXRlIDogeyBjb3VudDogY291bnQgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWNoZWNrYm94LXdyYXBwZXIgW2NsYXNzLmRpc2FibGVkXT1cImRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJyk/LnByaXN0aW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZXRhaWxGb3JtLmdldCgnZmlsdGVycycpPy5wcmlzdGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxpdmVQcmV2aWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlTGl2ZVByZXZpZXcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NhdGFsb2cubGl2ZS1wcmV2aWV3LWNvbnRlbnRzJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC92ZHItY29sbGVjdGlvbi1jb250ZW50cz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPC92ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tZGV0YWlsL2NvbGxlY3Rpb24tZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWRldGFpbC9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFHVCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFHSCxtQkFBbUIsRUFPbkIseUJBQXlCLEVBRXpCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsaUJBQWlCLEVBS2pCLFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsdUJBQXVCLEdBRTFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBSTVHLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcs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QyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDcEQsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDbkYsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQixDQUN6QixVQUFtQyxFQUNuQyxtQkFBd0I7UUFFeEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLElBQUk7Z0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQzthQUNyQyxDQUFDLENBQUM7U0FDTixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7OEdBMVNRLHlCQUF5QjtrR0FBekIseUJBQXlCLDZNQ3hEdEMsbTdXQXFPQTs7MkZEN0thLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDSSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU07MlBBMkJkLGlCQUFpQjtzQkFBakQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQXNzZXQsXHJcbiAgICBDb2xsZWN0aW9uLFxyXG4gICAgQ09MTEVDVElPTl9GUkFHTUVOVCxcclxuICAgIENvbGxlY3Rpb25EZXRhaWxRdWVyeURvY3VtZW50LFxyXG4gICAgQ29sbGVjdGlvbkZyYWdtZW50LFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uLFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0LFxyXG4gICAgQ3JlYXRlQ29sbGVjdGlvbklucHV0LFxyXG4gICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZW5jb2RlQ29uZmlnQXJnVmFsdWUsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDb25maWdBcmdWYWx1ZSxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFR5cGVkQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yLFxyXG4gICAgVXBkYXRlQ29sbGVjdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL25vcm1hbGl6ZS1zdHJpbmcnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25Db250ZW50c0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbGxlY3Rpb24tY29udGVudHMvY29sbGVjdGlvbi1jb250ZW50cy5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTExFQ1RJT05fREVUQUlMX1FVRVJZID0gZ3FsYFxyXG4gICAgcXVlcnkgQ29sbGVjdGlvbkRldGFpbFF1ZXJ5KCRpZDogSUQhKSB7XHJcbiAgICAgICAgY29sbGVjdGlvbihpZDogJGlkKSB7XHJcbiAgICAgICAgICAgIC4uLkNvbGxlY3Rpb25cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAke0NPTExFQ1RJT05fRlJBR01FTlR9XHJcbmA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNvbGxlY3Rpb24tZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgQ29sbGVjdGlvbkRldGFpbFF1ZXJ5RG9jdW1lbnQsICdjb2xsZWN0aW9uJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnQ29sbGVjdGlvbicpO1xyXG4gICAgZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc2x1ZzogWycnLCB1bmljb2RlUGF0dGVyblZhbGlkYXRvcigvXltcXHB7TGV0dGVyfTAtOS5fLV0rJC8pXSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgaW5oZXJpdEZpbHRlcnM6IHRydWUsXHJcbiAgICAgICAgZmlsdGVyczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXHJcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgKSxcclxuICAgIH0pO1xyXG4gICAgYXNzZXRDaGFuZ2VzOiB7IGFzc2V0cz86IEFzc2V0W107IGZlYXR1cmVkQXNzZXQ/OiBBc3NldCB9ID0ge307XHJcbiAgICBmaWx0ZXJzOiBDb25maWd1cmFibGVPcGVyYXRpb25bXSA9IFtdO1xyXG4gICAgYWxsRmlsdGVyczogQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbltdID0gW107XHJcbiAgICB1cGRhdGVkRmlsdGVycyQ6IE9ic2VydmFibGU8Q29uZmlndXJhYmxlT3BlcmF0aW9uSW5wdXRbXT47XHJcbiAgICBpbmhlcml0RmlsdGVycyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBsaXZlUHJldmlldyA9IGZhbHNlO1xyXG4gICAgcGFyZW50SWQkOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD47XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVDb2xsZWN0aW9uXTtcclxuICAgIHByaXZhdGUgZmlsdGVyUmVtb3ZlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgQFZpZXdDaGlsZCgnY29sbGVjdGlvbkNvbnRlbnRzJykgY29udGVudHNDb21wb25lbnQ6IENvbGxlY3Rpb25Db250ZW50c0NvbXBvbmVudDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5saXZlUHJldmlldyA9IHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXQoJ2xpdmVQcmV2aWV3Q29sbGVjdGlvbkNvbnRlbnRzJykgPz8gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLmdldENvbGxlY3Rpb25GaWx0ZXJzKCkuc2luZ2xlJC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hbGxGaWx0ZXJzID0gcmVzLmNvbGxlY3Rpb25GaWx0ZXJzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnNGb3JtQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBjb25zdCBpbmhlcml0RmlsdGVyc0NvbnRyb2wgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdpbmhlcml0RmlsdGVycycpIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAgICAgICB0aGlzLmluaGVyaXRGaWx0ZXJzJCA9IGluaGVyaXRGaWx0ZXJzQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZWRGaWx0ZXJzJCA9IG1lcmdlKGZpbHRlcnNGb3JtQXJyYXkuc3RhdHVzQ2hhbmdlcywgdGhpcy5maWx0ZXJSZW1vdmVkJCkucGlwZShcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiBmaWx0ZXJzRm9ybUFycmF5LnRvdWNoZWQpLFxyXG4gICAgICAgICAgICBtYXAoKCkgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMubWFwT3BlcmF0aW9uc1RvSW5wdXRzKHRoaXMuZmlsdGVycywgZmlsdGVyc0Zvcm1BcnJheS52YWx1ZSkuZmlsdGVyKF9maWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBhbGwgdGhlIGFyZ3VtZW50cyBoYXZlIHZhbGlkIHZhbHVlcy4gRS5nLiBhIG5ld2x5LWFkZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyIHdpbGwgbm90IHlldCBoYXZlIHZhbGlkIHZhbHVlc1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIF9maWx0ZXIuYXJndW1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcudmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucGFyZW50SWQkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocG0gPT4gcG0uZ2V0KCdwYXJlbnRJZCcpIHx8IHVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChwYXJlbnRJZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRpdHkkLnBpcGUobWFwKGNvbGxlY3Rpb24gPT4gY29sbGVjdGlvbi5wYXJlbnQ/LmlkKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyRGVmaW5pdGlvbihfZmlsdGVyOiBDb25maWd1cmFibGVPcGVyYXRpb24pOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGxGaWx0ZXJzLmZpbmQoZiA9PiBmLmNvZGUgPT09IF9maWx0ZXIuY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKHRoaXMuYXNzZXRDaGFuZ2VzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjcmVhdGluZyBhIG5ldyBDb2xsZWN0aW9uLCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBzbHVnIGJhc2VkIG9uIHRoZSBjb2xsZWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVNsdWcobmFtZVZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzbHVnQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydzbHVnJ10pO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IHRoaXMuZW50aXR5ID8gZmluZFRyYW5zbGF0aW9uKHRoaXMuZW50aXR5LCB0aGlzLmxhbmd1YWdlQ29kZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFNsdWdJc0VtcHR5ID0gIWN1cnJlbnRUcmFuc2xhdGlvbiB8fCAhY3VycmVudFRyYW5zbGF0aW9uLnNsdWc7XHJcbiAgICAgICAgaWYgKHNsdWdDb250cm9sICYmIHNsdWdDb250cm9sLnByaXN0aW5lICYmIGN1cnJlbnRTbHVnSXNFbXB0eSkge1xyXG4gICAgICAgICAgICBzbHVnQ29udHJvbC5zZXRWYWx1ZShub3JtYWxpemVTdHJpbmcoYCR7bmFtZVZhbHVlfWAsICctJykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRGaWx0ZXIoY29sbGVjdGlvbkZpbHRlcjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyc0FycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmlsdGVycycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgY29uc3QgYXJnc0hhc2ggPSBjb2xsZWN0aW9uRmlsdGVyLmFyZ3MucmVkdWNlKFxyXG4gICAgICAgICAgICAob3V0cHV0LCBhcmcpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAuLi5vdXRwdXQsXHJcbiAgICAgICAgICAgICAgICBbYXJnLm5hbWVdOiBnZXRDb25maWdBcmdWYWx1ZShhcmcudmFsdWUpLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmaWx0ZXJzQXJyYXkucHVzaChcclxuICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IGNvbGxlY3Rpb25GaWx0ZXIuY29kZSxcclxuICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3NIYXNoLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgY29kZTogY29sbGVjdGlvbkZpbHRlci5jb2RlLFxyXG4gICAgICAgICAgICBhcmdzOiBjb2xsZWN0aW9uRmlsdGVyLmFyZ3MubWFwKGEgPT4gKHsgbmFtZTogYS5uYW1lLCB2YWx1ZTogZ2V0Q29uZmlnQXJnVmFsdWUoYS52YWx1ZSkgfSkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZpbHRlcihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyc0FycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmlsdGVycycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICAgICAgICBmaWx0ZXJzQXJyYXkubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgZmlsdGVyc0FycmF5Lm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyUmVtb3ZlZCQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZENvbGxlY3Rpb24oXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlkOiAnJyxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogJycsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogJycsXHJcbiAgICAgICAgICAgICAgICBpc1ByaXZhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYnJlYWRjcnVtYnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZWRBc3NldDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW10sXHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgaW5oZXJpdEZpbHRlcnM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgIHBhcmVudDoge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgKSBhcyBDcmVhdGVDb2xsZWN0aW9uSW5wdXQ7XHJcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncGFyZW50SWQnKTtcclxuICAgICAgICBpZiAocGFyZW50SWQpIHtcclxuICAgICAgICAgICAgaW5wdXQucGFyZW50SWQgPSBwYXJlbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLmNyZWF0ZUNvbGxlY3Rpb24oaW5wdXQpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgZGF0YS5jcmVhdGVDb2xsZWN0aW9uLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW2NhdGVnb3J5LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRDb2xsZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVDb2xsZWN0aW9uSW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi51cGRhdGVDb2xsZWN0aW9uKGlucHV0KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRzQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0NvbGxlY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5EZWFjdGl2YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5jYW5EZWFjdGl2YXRlKCkgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmFzc2V0cyAmJiAhdGhpcy5hc3NldENoYW5nZXMuZmVhdHVyZWRBc3NldDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVMaXZlUHJldmlldygpIHtcclxuICAgICAgICB0aGlzLmxpdmVQcmV2aWV3ID0gIXRoaXMubGl2ZVByZXZpZXc7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldCgnbGl2ZVByZXZpZXdDb2xsZWN0aW9uQ29udGVudHMnLCB0aGlzLmxpdmVQcmV2aWV3KTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogQ29uZmlndXJhYmxlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBmb3JtIG9uIGNoYW5nZXMgdG8gdGhlIGNhdGVnb3J5IG9yIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogQ29sbGVjdGlvbkZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihlbnRpdHksIGxhbmd1YWdlQ29kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgc2x1ZzogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLnNsdWcgOiAnJyxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5kZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhZW50aXR5LmlzUHJpdmF0ZSxcclxuICAgICAgICAgICAgaW5oZXJpdEZpbHRlcnM6IGVudGl0eS5pbmhlcml0RmlsdGVycyxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmlsdGVycycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgaWYgKGZvcm1BcnJheS5sZW5ndGggIT09IGVudGl0eS5maWx0ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmb3JtQXJyYXkuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XHJcbiAgICAgICAgICAgIGVudGl0eS5maWx0ZXJzLmZvckVhY2goZiA9PiB0aGlzLmFkZEZpbHRlcihmKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0uZ2V0KFsnY3VzdG9tRmllbGRzJ10pLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5LFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgY2F0ZWdvcnkgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIGNhdGVnb3J5IHdoaWNoXHJcbiAgICAgKiBjYW4gdGhlbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkQ29sbGVjdGlvbihcclxuICAgICAgICBjYXRlZ29yeTogQ29sbGVjdGlvbkZyYWdtZW50LFxyXG4gICAgICAgIGZvcm06IHR5cGVvZiB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBDcmVhdGVDb2xsZWN0aW9uSW5wdXQgfCBVcGRhdGVDb2xsZWN0aW9uSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDYXRlZ29yeSA9IGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUoe1xyXG4gICAgICAgICAgICB0cmFuc2xhdGFibGU6IGNhdGVnb3J5LFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBmb3JtLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBjYXRlZ29yeS5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogY2F0ZWdvcnkuc2x1ZyB8fCAnJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjYXRlZ29yeS5kZXNjcmlwdGlvbiB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi51cGRhdGVkQ2F0ZWdvcnksXHJcbiAgICAgICAgICAgIGFzc2V0SWRzOiB0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHM/Lm1hcChhID0+IGEuaWQpLFxyXG4gICAgICAgICAgICBmZWF0dXJlZEFzc2V0SWQ6IHRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkLFxyXG4gICAgICAgICAgICBpc1ByaXZhdGU6ICFmb3JtLnZhbHVlLnZpc2libGUsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMubWFwT3BlcmF0aW9uc1RvSW5wdXRzKHRoaXMuZmlsdGVycywgdGhpcy5kZXRhaWxGb3JtLnZhbHVlLmZpbHRlcnMpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXBzIGFuIGFycmF5IG9mIGNvbmRpdGlvbnMgb3IgYWN0aW9ucyB0byB0aGUgaW5wdXQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBHcmFwaFFMIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtYXBPcGVyYXRpb25zVG9JbnB1dHMoXHJcbiAgICAgICAgb3BlcmF0aW9uczogQ29uZmlndXJhYmxlT3BlcmF0aW9uW10sXHJcbiAgICAgICAgZm9ybVZhbHVlT3BlcmF0aW9uczogYW55LFxyXG4gICAgKTogQ29uZmlndXJhYmxlT3BlcmF0aW9uSW5wdXRbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbnMubWFwKChvLCBpKSA9PiAoe1xyXG4gICAgICAgICAgICBjb2RlOiBvLmNvZGUsXHJcbiAgICAgICAgICAgIGFyZ3VtZW50czogT2JqZWN0LmVudHJpZXMoZm9ybVZhbHVlT3BlcmF0aW9uc1tpXS5hcmdzKS5tYXAoKFtuYW1lLCB2YWx1ZV0sIGopID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGVuY29kZUNvbmZpZ0FyZ1ZhbHVlKHZhbHVlKSxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImxhbmd1YWdlQ29kZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cImNvbGxlY3Rpb24tZGV0YWlsXCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc05ldyQgfCBhc3luYzsgZWxzZSB1cGRhdGVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZXRhaWxGb3JtLmludmFsaWQgfHwgZGV0YWlsRm9ybS5wcmlzdGluZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1cGRhdGVCdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihkZXRhaWxGb3JtLmludmFsaWQgfHwgZGV0YWlsRm9ybS5wcmlzdGluZSkgJiYgIWFzc2V0c0NoYW5nZWQoKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT48L3Zkci1hYi1yaWdodFxyXG4gICAgICAgID5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcbjxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiPlxyXG4gICAgPHZkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbiAgICAgICAgPHZkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnZpc2liaWxpdHknIHwgdHJhbnNsYXRlXCIgZm9yPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidmlzaWJsZS10b2dnbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXRhaWxGb3JtLnZhbHVlLnZpc2libGU7IGVsc2UgcHJpdmF0ZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGFsb2cucHVibGljJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJpdmF0ZT57eyAnY2F0YWxvZy5wcml2YXRlJyB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgZW50aXR5XCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXBhZ2UtZW50aXR5LWluZm8gW2VudGl0eV09XCJlbnRpdHlcIj48L3Zkci1wYWdlLWVudGl0eS1pbmZvPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcblxyXG4gICAgICAgIDx2ZHItcGFnZS1ibG9jayAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIlxyXG4gICAgICAgICAgICA+PG5hdiByb2xlPVwibmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29sbGVjdGlvbi1icmVhZGNydW1ic1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYnJlYWRjcnVtYiBvZiBlbnRpdHkuYnJlYWRjcnVtYnM7IGxldCBpc0ZpcnN0ID0gZmlyc3Q7IGxldCBpc0xhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL2NhdGFsb2cvY29sbGVjdGlvbnMnXVwiICpuZ0lmPVwiaXNGaXJzdFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy5yb290LWNvbGxlY3Rpb24nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvY2F0YWxvZy9jb2xsZWN0aW9ucycsIGJyZWFkY3J1bWIuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRmlyc3QgJiYgIWlzTGFzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgYnJlYWRjcnVtYi5uYW1lIHwgdHJhbnNsYXRlIH19PC9hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTGFzdFwiPnt7IGJyZWFkY3J1bWIubmFtZSB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L25hdj5cclxuICAgICAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG5cclxuICAgICAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVTbHVnKCRldmVudC50YXJnZXQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NhdGFsb2cuc2x1ZycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yc109XCJ7IHBhdHRlcm46ICgnY2F0YWxvZy5zbHVnLXBhdHRlcm4tZXJyb3InIHwgdHJhbnNsYXRlKSB9XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNsdWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JpZC1zcGFuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb21tb24uZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwic2x1Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXJpY2gtdGV4dC1lZGl0b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1yaWNoLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkXHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXBOYW1lPVwiY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiQ29sbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWN1c3RvbS1kZXRhaWwtY29tcG9uZW50LWhvc3RcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uSWQ9XCJjb2xsZWN0aW9uLWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgICAgICA+PC92ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5hc3NldHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWFzc2V0c1xyXG4gICAgICAgICAgICAgICAgICAgIFthc3NldHNdPVwiZW50aXR5Py5hc3NldHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmZWF0dXJlZEFzc2V0XT1cImVudGl0eT8uZmVhdHVyZWRBc3NldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3VwZGF0ZVBlcm1pc3Npb25zXT1cInVwZGF0ZVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXNzZXRDaGFuZ2VzID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgID48L3Zkci1hc3NldHM+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cuZmlsdGVycycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY2F0YWxvZy5maWx0ZXItaW5oZXJpdGFuY2UnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJpbmhlcml0RmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbmhlcml0RmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImluaGVyaXRGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2ZHJEaXNhYmxlZF09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZpc2libGUtdG9nZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGV0YWlsRm9ybS52YWx1ZS5pbmhlcml0RmlsdGVyczsgZWxzZSBub0luaGVyaXRcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLmluaGVyaXQtZmlsdGVycy1mcm9tLXBhcmVudCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSW5oZXJpdD57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLmRvLW5vdC1pbmhlcml0LWZpbHRlcnMnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jb25maWd1cmFibGUtaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlRmlsdGVyKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpb25dPVwiZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpb25EZWZpbml0aW9uXT1cImdldEZpbHRlckRlZmluaXRpb24oZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWNvbmZpZ3VyYWJsZS1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgdmRyRHJvcGRvd25UcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnbWFya2V0aW5nLmFkZC1jb25kaXRpb24nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFsbEZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyLmRlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY29tbW9uLmNvbnRlbnRzJyB8IHRyYW5zbGF0ZVwiIFtwYWRkaW5nWF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1jb2xsZWN0aW9uLWNvbnRlbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25JZF09XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmVudElkXT1cInBhcmVudElkJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbdXBkYXRlZEZpbHRlcnNdPVwidXBkYXRlZEZpbHRlcnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbmhlcml0RmlsdGVyc109XCJpbmhlcml0RmlsdGVycyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZXZpZXdVcGRhdGVkRmlsdGVyc109XCJsaXZlUHJldmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgI2NvbGxlY3Rpb25Db250ZW50c1xyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY291bnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudHMtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5jb2xsZWN0aW9uLWNvbnRlbnRzJyB8IHRyYW5zbGF0ZSB9fSAoe3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5yZXN1bHRzLWNvdW50JyB8IHRyYW5zbGF0ZSA6IHsgY291bnQ6IGNvdW50IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyIFtjbGFzcy5kaXNhYmxlZF09XCJkZXRhaWxGb3JtLmdldCgnZmlsdGVycycpPy5wcmlzdGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5nZXQoJ2ZpbHRlcnMnKT8ucHJpc3RpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsaXZlUHJldmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUxpdmVQcmV2aWV3KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjYXRhbG9nLmxpdmUtcHJldmlldy1jb250ZW50cycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWNvbGxlY3Rpb24tY29udGVudHM+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPC92ZHItcGFnZS1ibG9jaz5cclxuICAgIDwvdmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuPC9mb3JtPlxyXG4iXX0=
|
|
@@ -43,7 +43,7 @@ export class ProductDetailComponent extends TypedBaseDetailComponent {
|
|
|
43
43
|
enabled: true,
|
|
44
44
|
name: ['', Validators.required],
|
|
45
45
|
autoUpdateVariantNames: true,
|
|
46
|
-
slug: ['', unicodePatternValidator(/^[\p{Letter}0-
|
|
46
|
+
slug: ['', unicodePatternValidator(/^[\p{Letter}0-9._-]+$/)],
|
|
47
47
|
description: '',
|
|
48
48
|
facetValueIds: [[]],
|
|
49
49
|
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {})),
|
|
@@ -329,4 +329,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
|
|
|
329
329
|
type: Component,
|
|
330
330
|
args: [{ selector: 'vdr-product-detail2', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-flex-row\"></div>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermissions\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"updatePermissions\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <ng-container *ngIf=\"!(isNew$ | async)\">\r\n <vdr-card *vdrIfMultichannel [title]=\"'common.channels' | translate\">\r\n <vdr-form-item *vdrIfDefaultChannelActive>\r\n <div class=\"flex channel-assignment\">\r\n <div class=\"mb-2\">\r\n <ng-container *ngFor=\"let channel of productChannels$ | async\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n (iconClick)=\"removeFromChannel(channel.id)\"\r\n >\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n </div>\r\n <button class=\"button-small\" (click)=\"assignToChannel()\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'catalog.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </vdr-form-item>\r\n </vdr-card>\r\n </ng-container>\r\n <vdr-card *ngIf=\"entity?.optionGroups.length\" [title]=\"'catalog.product-options' | translate\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let optionGroup of entity?.optionGroups | sort : 'id'\"\r\n [colorFrom]=\"optionGroup.code\"\r\n [invert]=\"true\"\r\n >\r\n {{ optionGroup.name }}\r\n </vdr-chip>\r\n </div>\r\n <div>\r\n <a [routerLink]=\"['options']\" class=\"button-small mt-2\" *vdrIfPermissions=\"updatePermissions\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'catalog.edit-options' | translate }}\r\n </a>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.facets' | translate\">\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermissions | hasPermission\"\r\n (remove)=\"removeProductFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </div>\r\n <div>\r\n <button\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n (click)=\"selectProductFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\"></vdr-page-entity-info>\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block>\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <div>\r\n <vdr-form-field [label]=\"'catalog.product-name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <div *ngIf=\"(isNew$ | async) === false && detailForm.get(['name'])?.dirty\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n formControlName=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n </div>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n [label]=\"'common.description' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n ></vdr-rich-text-editor>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Product\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || entity?.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || entity?.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-assets>\r\n </vdr-card>\r\n\r\n <vdr-card [title]=\"'catalog.product-variants' | translate\" [paddingX]=\"isNew$ | async\">\r\n <div *ngIf=\"isNew$ | async; else variantList\">\r\n <vdr-generate-product-variants\r\n (variantsChange)=\"createVariantsConfig = $event\"\r\n ></vdr-generate-product-variants>\r\n </div>\r\n <ng-template #variantList>\r\n <vdr-product-variant-list\r\n [productId]=\"this.id\"\r\n [hideLanguageSelect]=\"true\"\r\n ></vdr-product-variant-list>\r\n </ng-template>\r\n <div class=\"mx-3\" *ngIf=\"(isNew$ | async) === false\">\r\n <a class=\"button\" [routerLink]=\"['manage-variants']\">\r\n <clr-icon shape=\"add-text\"></clr-icon>\r\n {{ 'catalog.manage-variants' | translate }}</a\r\n >\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [":host ::ng-deep trix-toolbar{top:24px}.facets,.options{display:flex;flex-wrap:wrap;gap:3px}vdr-action-bar clr-toggle-wrapper{margin-top:12px}.variant-filter{flex:1;display:flex}.variant-filter input{flex:1;max-width:initial;border-radius:3px 0 0 3px!important}.variant-filter .icon-button{border:1px solid var(--color-component-border-300);background-color:var(--color-component-bg-100);border-radius:0 3px 3px 0;border-left:none}.group-name{padding-right:6px}.view-mode{display:flex;flex-direction:column;justify-content:space-between}@media screen and (min-width: 768px){.view-mode{flex-direction:row}}.edit-variants-btn{margin-top:0}.channel-assignment{flex-wrap:wrap;max-height:144px}.pagination-row{display:flex;align-items:baseline;justify-content:space-between}\n"] }]
|
|
331
331
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ServerConfigService }, { type: i3.ProductDetailService }, { type: i4.FormBuilder }, { type: i2.ModalService }, { type: i2.NotificationService }, { type: i2.DataService }, { type: i0.ChangeDetectorRef }]; } });
|
|
332
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFJSCx5QkFBeUIsRUFFekIsZUFBZSxFQUNmLDRCQUE0QixFQVM1QixVQUFVLEVBQ1YsdUJBQXVCLEVBSXZCLHdCQUF3QixFQUN4Qix1QkFBdUIsR0FNMUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsSUFBSSxFQUNKLFNBQVMsRUFDVCxXQUFXLEVBQ1gsSUFBSSxHQUNQLE1B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bnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQXNzZXQsXHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ3JlYXRlUHJvZHVjdElucHV0LFxyXG4gICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZmluZFRyYW5zbGF0aW9uLFxyXG4gICAgZ2V0Q2hhbm5lbENvZGVGcm9tVXNlclN0YXR1cyxcclxuICAgIGdldERlZmF1bHRVaUxhbmd1YWdlLFxyXG4gICAgR2V0UHJvZHVjdERldGFpbERvY3VtZW50LFxyXG4gICAgR2V0UHJvZHVjdERldGFpbFF1ZXJ5LFxyXG4gICAgR2V0UHJvZHVjdFdpdGhWYXJpYW50c1F1ZXJ5LFxyXG4gICAgSXRlbU9mLFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQUk9EVUNUX0RFVEFJTF9GUkFHTUVOVCxcclxuICAgIFByb2R1Y3REZXRhaWxGcmFnbWVudCxcclxuICAgIFByb2R1Y3RWYXJpYW50RnJhZ21lbnQsXHJcbiAgICBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgdW5pY29kZVBhdHRlcm5WYWxpZGF0b3IsXHJcbiAgICBVcGRhdGVQcm9kdWN0SW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0TXV0YXRpb24sXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0LFxyXG4gICAgVXBkYXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb24sXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IG5vcm1hbGl6ZVN0cmluZyB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvbm9ybWFsaXplLXN0cmluZyc7XHJcbmltcG9ydCB7IERFRkFVTFRfQ0hBTk5FTF9DT0RFIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtY29uc3RhbnRzJztcclxuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi91bmlxdWUnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGNvbmNhdCwgRU1QVFksIGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gICAgbWFwLFxyXG4gICAgbWVyZ2VNYXAsXHJcbiAgICBzaGFyZVJlcGxheSxcclxuICAgIHNraXAsXHJcbiAgICBzd2l0Y2hNYXAsXHJcbiAgICBzd2l0Y2hNYXBUbyxcclxuICAgIHRha2UsXHJcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1mYWNldC1kaWFsb2cvYXBwbHktZmFjZXQtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2lnblByb2R1Y3RzVG9DaGFubmVsRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vYXNzaWduLXByb2R1Y3RzLXRvLWNoYW5uZWwtZGlhbG9nL2Fzc2lnbi1wcm9kdWN0cy10by1jaGFubmVsLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDcmVhdGVQcm9kdWN0VmFyaWFudHNDb25maWcgfSBmcm9tICcuLi9nZW5lcmF0ZS1wcm9kdWN0LXZhcmlhbnRzL2dlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHMuY29tcG9uZW50JztcclxuXHJcbmludGVyZmFjZSBTZWxlY3RlZEFzc2V0cyB7XHJcbiAgICBhc3NldHM/OiBBc3NldFtdO1xyXG4gICAgZmVhdHVyZWRBc3NldD86IEFzc2V0O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgR0VUX1BST0RVQ1RfREVUQUlMID0gZ3FsYFxyXG4gICAgcXVlcnkgR2V0UHJvZHVjdERldGFpbCgkaWQ6IElEISkge1xyXG4gICAgICAgIHByb2R1Y3QoaWQ6ICRpZCkge1xyXG4gICAgICAgICAgICAuLi5Qcm9kdWN0RGV0YWlsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgJHtQUk9EVUNUX0RFVEFJTF9GUkFHTUVOVH1cclxuYDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdC1kZXRhaWwyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgR2V0UHJvZHVjdERldGFpbERvY3VtZW50LCAncHJvZHVjdCc+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICAgIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3QnKTtcclxuICAgIGRldGFpbEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgYXV0b1VwZGF0ZVZhcmlhbnROYW1lczogdHJ1ZSxcclxuICAgICAgICBzbHVnOiBbJycsIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yKC9eW1xccHtMZXR0ZXJ9MC05Xy1dKyQvKV0sXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIGZhY2V0VmFsdWVJZHM6IFtbXSBhcyBzdHJpbmdbXV0sXHJcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgKSxcclxuICAgIH0pO1xyXG4gICAgYXNzZXRDaGFuZ2VzOiBTZWxlY3RlZEFzc2V0cyA9IHt9O1xyXG4gICAgcHJvZHVjdENoYW5uZWxzJDogT2JzZXJ2YWJsZTxQcm9kdWN0RGV0YWlsRnJhZ21lbnRbJ2NoYW5uZWxzJ10+O1xyXG4gICAgZmFjZXRWYWx1ZXMkOiBPYnNlcnZhYmxlPFByb2R1Y3REZXRhaWxGcmFnbWVudFsnZmFjZXRWYWx1ZXMnXT47XHJcbiAgICBjcmVhdGVWYXJpYW50c0NvbmZpZzogQ3JlYXRlUHJvZHVjdFZhcmlhbnRzQ29uZmlnID0geyBncm91cHM6IFtdLCB2YXJpYW50czogW10sIHN0b2NrTG9jYXRpb25JZDogJycgfTtcclxuICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9ucyA9IFtQZXJtaXNzaW9uLlVwZGF0ZUNhdGFsb2csIFBlcm1pc3Npb24uVXBkYXRlUHJvZHVjdF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdEZhY2V0VmFsdWVzJCA9IHRoaXMuZW50aXR5JC5waXBlKG1hcChwcm9kdWN0ID0+IHByb2R1Y3QuZmFjZXRWYWx1ZXMpKTtcclxuICAgICAgICBjb25zdCBwcm9kdWN0R3JvdXAgPSB0aGlzLmRldGFpbEZvcm07XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBjb25zdCBmb3JtRmFjZXRWYWx1ZUlkQ2hhbmdlcyQgPSBwcm9kdWN0R3JvdXAuZ2V0KCdmYWNldFZhbHVlSWRzJykhLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICBza2lwKDEpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaWRzID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0XHJcbiAgICAgICAgICAgICAgICAgICAgLmdldEZhY2V0VmFsdWVzKHsgZmlsdGVyOiB7IGlkOiB7IGluOiBpZHMgfSB9IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcFNpbmdsZSgoeyBmYWNldFZhbHVlcyB9KSA9PiBmYWNldFZhbHVlcy5pdGVtcyksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5mYWNldFZhbHVlcyQgPSBjb25jYXQoXHJcbiAgICAgICAgICAgIHByb2R1Y3RGYWNldFZhbHVlcyQucGlwZSh0YWtlKDEpKSxcclxuICAgICAgICAgICAgcHJvZHVjdEZhY2V0VmFsdWVzJC5waXBlKHN3aXRjaE1hcFRvKGZvcm1GYWNldFZhbHVlSWRDaGFuZ2VzJCkpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0Q2hhbm5lbHMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKHAgPT4gcC5jaGFubmVscykpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRGVmYXVsdENoYW5uZWwoY2hhbm5lbENvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjaGFubmVsQ29kZSA9PT0gREVGQVVMVF9DSEFOTkVMX0NPREU7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduVG9DaGFubmVsKCkge1xyXG4gICAgICAgIHRoaXMucHJvZHVjdENoYW5uZWxzJFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoY2hhbm5lbHMgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KEFzc2lnblByb2R1Y3RzVG9DaGFubmVsRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkczogW3RoaXMuaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYW5uZWxJZHM6IGNoYW5uZWxzLm1hcChjID0+IGMuaWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJvbUNoYW5uZWwoY2hhbm5lbElkOiBzdHJpbmcpIHtcclxuICAgICAgICBmcm9tKGdldENoYW5uZWxDb2RlRnJvbVVzZXJTdGF0dXModGhpcy5kYXRhU2VydmljZSwgY2hhbm5lbElkKSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgY2hhbm5lbENvZGUgfSkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXygnY2F0YWxvZy5yZW1vdmUtcHJvZHVjdC1mcm9tLWNoYW5uZWwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdjYXRhbG9nLnJlbW92ZS1mcm9tLWNoYW5uZWwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvblZhcnM6IHsgY2hhbm5lbENvZGUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QucmVtb3ZlUHJvZHVjdHNGcm9tQ2hhbm5lbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkczogW3RoaXMuaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogRU1QVFksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY2F0YWxvZy5ub3RpZnktcmVtb3ZlLXByb2R1Y3QtZnJvbS1jaGFubmVsLXN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY2F0YWxvZy5ub3RpZnktcmVtb3ZlLXByb2R1Y3QtZnJvbS1jaGFubmVsLWVycm9yJykpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3NpZ25WYXJpYW50VG9DaGFubmVsKHZhcmlhbnQ6IFByb2R1Y3RWYXJpYW50RnJhZ21lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQXNzaWduUHJvZHVjdHNUb0NoYW5uZWxEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWRzOiBbdGhpcy5pZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdFZhcmlhbnRJZHM6IFt2YXJpYW50LmlkXSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhbm5lbElkczogdmFyaWFudC5jaGFubmVscy5tYXAoYyA9PiBjLmlkKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVWYXJpYW50RnJvbUNoYW5uZWwoeyBjaGFubmVsSWQsIHZhcmlhbnQgfTogeyBjaGFubmVsSWQ6IHN0cmluZzsgdmFyaWFudDogUHJvZHVjdFZhcmlhbnRGcmFnbWVudCB9KSB7XHJcbiAgICAgICAgZnJvbShnZXRDaGFubmVsQ29kZUZyb21Vc2VyU3RhdHVzKHRoaXMuZGF0YVNlcnZpY2UsIGNoYW5uZWxJZCkpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IGNoYW5uZWxDb2RlIH0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8oJ2NhdGFsb2cucmVtb3ZlLXByb2R1Y3QtdmFyaWFudC1mcm9tLWNoYW5uZWwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdjYXRhbG9nLnJlbW92ZS1mcm9tLWNoYW5uZWwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvblZhcnM6IHsgY2hhbm5lbENvZGUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QucmVtb3ZlVmFyaWFudHNGcm9tQ2hhbm5lbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdFZhcmlhbnRJZHM6IFt2YXJpYW50LmlkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NhdGFsb2cubm90aWZ5LXJlbW92ZS12YXJpYW50LWZyb20tY2hhbm5lbC1zdWNjZXNzJykpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NhdGFsb2cubm90aWZ5LXJlbW92ZS12YXJpYW50LWZyb20tY2hhbm5lbC1lcnJvcicpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKHRoaXMuYXNzZXRDaGFuZ2VzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjcmVhdGluZyBhIG5ldyBwcm9kdWN0LCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBzbHVnIGJhc2VkIG9uIHRoZSBwcm9kdWN0IG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVNsdWcobmFtZVZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzbHVnQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ3NsdWcnKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb24gPSB0aGlzLmVudGl0eSA/IGZpbmRUcmFuc2xhdGlvbih0aGlzLmVudGl0eSwgdGhpcy5sYW5ndWFnZUNvZGUpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTbHVnSXNFbXB0eSA9ICFjdXJyZW50VHJhbnNsYXRpb24gfHwgIWN1cnJlbnRUcmFuc2xhdGlvbi5zbHVnO1xyXG4gICAgICAgIGlmIChzbHVnQ29udHJvbCAmJiBzbHVnQ29udHJvbC5wcmlzdGluZSAmJiBjdXJyZW50U2x1Z0lzRW1wdHkpIHtcclxuICAgICAgICAgICAgc2x1Z0NvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplU3RyaW5nKGAke25hbWVWYWx1ZX1gLCAnLScpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0UHJvZHVjdEZhY2V0VmFsdWUoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5RmFjZXRWYWx1ZU1vZGFsKCkuc3Vic2NyaWJlKGZhY2V0VmFsdWVJZHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmFjZXRWYWx1ZUlkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5kZXRhaWxGb3JtO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZhY2V0VmFsdWVJZHMgPSBwcm9kdWN0R3JvdXAudmFsdWUuZmFjZXRWYWx1ZUlkcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgIHByb2R1Y3RHcm91cC5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICAgICAgICBmYWNldFZhbHVlSWRzOiB1bmlxdWUoWy4uLmN1cnJlbnRGYWNldFZhbHVlSWRzLCAuLi5mYWNldFZhbHVlSWRzXSksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHByb2R1Y3RHcm91cC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJvZHVjdE9wdGlvbihpbnB1dDogVXBkYXRlUHJvZHVjdE9wdGlvbklucHV0ICYgeyBhdXRvVXBkYXRlOiBib29sZWFuIH0pIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3Byb2R1Y3QsIGxhbmd1YWdlQ29kZV0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS51cGRhdGVQcm9kdWN0T3B0aW9uKGlucHV0LCBwcm9kdWN0LCBsYW5ndWFnZUNvZGUpLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RPcHRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVQcm9kdWN0RmFjZXRWYWx1ZShmYWNldFZhbHVlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZGV0YWlsRm9ybTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RmFjZXRWYWx1ZUlkcyA9IHByb2R1Y3RHcm91cC52YWx1ZS5mYWNldFZhbHVlSWRzID8/IFtdO1xyXG4gICAgICAgIHByb2R1Y3RHcm91cC5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogY3VycmVudEZhY2V0VmFsdWVJZHMuZmlsdGVyKGlkID0+IGlkICE9PSBmYWNldFZhbHVlSWQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHByb2R1Y3RHcm91cC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGlzcGxheUZhY2V0VmFsdWVNb2RhbCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHNpemU6ICdtZCcsXHJcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUobWFwKGZhY2V0VmFsdWVzID0+IGZhY2V0VmFsdWVzICYmIGZhY2V0VmFsdWVzLm1hcCh2ID0+IHYuaWQpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZGV0YWlsRm9ybTtcclxuICAgICAgICBpZiAoIXByb2R1Y3RHcm91cC5kaXJ0eSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXdQcm9kdWN0ID0gdGhpcy5nZXRVcGRhdGVkUHJvZHVjdChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiAnJyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogJycsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogJycsXHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlZEFzc2V0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW10sXHJcbiAgICAgICAgICAgICAgICBvcHRpb25Hcm91cHM6IFtdLFxyXG4gICAgICAgICAgICAgICAgZmFjZXRWYWx1ZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgY2hhbm5lbHM6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwcm9kdWN0R3JvdXAgYXMgVW50eXBlZEZvcm1Hcm91cCxcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgKSBhcyBDcmVhdGVQcm9kdWN0SW5wdXQ7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZVxyXG4gICAgICAgICAgICAuY3JlYXRlUHJvZHVjdFdpdGhWYXJpYW50cyhuZXdQcm9kdWN0LCB0aGlzLmNyZWF0ZVZhcmlhbnRzQ29uZmlnLCB0aGlzLmxhbmd1YWdlQ29kZSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICh7IGNyZWF0ZVByb2R1Y3RWYXJpYW50cywgcHJvZHVjdElkIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIHByb2R1Y3RJZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbcHJvZHVjdCwgbGFuZ3VhZ2VDb2RlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZGV0YWlsRm9ybTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdElucHV0OiBVcGRhdGVQcm9kdWN0SW5wdXQgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhcmlhbnRzSW5wdXQ6IFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXRbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3RHcm91cC5kaXJ0eSB8fCB0aGlzLmFzc2V0c0NoYW5nZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRQcm9kdWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RHcm91cCBhcyBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFzIFVwZGF0ZVByb2R1Y3RJbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3REZXRhaWxTZXJ2aWNlLnVwZGF0ZVByb2R1Y3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9VcGRhdGU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0uZ2V0KFsncHJvZHVjdCcsICdhdXRvVXBkYXRlVmFyaWFudE5hbWVzJ10pPy52YWx1ZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50c0lucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTbHVnQWZ0ZXJTYXZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5EZWFjdGl2YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5jYW5EZWFjdGl2YXRlKCkgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmFzc2V0cyAmJiAhdGhpcy5hc3NldENoYW5nZXMuZmVhdHVyZWRBc3NldDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZhbHVlcyBvZiB0aGUgZm9ybSBvbiBjaGFuZ2VzIHRvIHRoZSBwcm9kdWN0IG9yIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKFxyXG4gICAgICAgIHByb2R1Y3Q6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeVsncHJvZHVjdCddPixcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihwcm9kdWN0LCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgZW5hYmxlZDogcHJvZHVjdC5lbmFibGVkLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24gPyBjdXJyZW50VHJhbnNsYXRpb24ubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICBzbHVnOiBjdXJyZW50VHJhbnNsYXRpb24gPyBjdXJyZW50VHJhbnNsYXRpb24uc2x1ZyA6ICcnLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLmRlc2NyaXB0aW9uIDogJycsXHJcbiAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IHByb2R1Y3QuZmFjZXRWYWx1ZXMubWFwKGZ2ID0+IGZ2LmlkKSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ2N1c3RvbUZpZWxkcyddKSxcclxuICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwcm9kdWN0IGFuZCB0aGUgdmFsdWUgb2YgdGhlIGRldGFpbEZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gdXBkYXRlZCBjb3B5IG9mIHRoZSBwcm9kdWN0IHdoaWNoXHJcbiAgICAgKiBjYW4gdGhlbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkUHJvZHVjdChcclxuICAgICAgICBwcm9kdWN0OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0RGV0YWlsUXVlcnlbJ3Byb2R1Y3QnXT4sXHJcbiAgICAgICAgcHJvZHVjdEZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IFVwZGF0ZVByb2R1Y3RJbnB1dCB8IENyZWF0ZVByb2R1Y3RJbnB1dCB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFByb2R1Y3QgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBwcm9kdWN0LFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBwcm9kdWN0Rm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBwcm9kdWN0Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBzbHVnOiBwcm9kdWN0LnNsdWcgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdC5kZXNjcmlwdGlvbiB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi51cGRhdGVkUHJvZHVjdCxcclxuICAgICAgICAgICAgYXNzZXRJZHM6IHRoaXMuYXNzZXRDaGFuZ2VzLmFzc2V0cz8ubWFwKGEgPT4gYS5pZCksXHJcbiAgICAgICAgICAgIGZlYXR1cmVkQXNzZXRJZDogdGhpcy5hc3NldENoYW5nZXMuZmVhdHVyZWRBc3NldD8uaWQsXHJcbiAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IHByb2R1Y3RGb3JtR3JvdXAudmFsdWUuZmFjZXRWYWx1ZUlkcyxcclxuICAgICAgICB9IGFzIFVwZGF0ZVByb2R1Y3RJbnB1dCB8IENyZWF0ZVByb2R1Y3RJbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzZXJ2ZXIgbWF5IGFsdGVyIHRoZSBzbHVnIHZhbHVlIGluIG9yZGVyIHRvIG5vcm1hbGl6ZSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3MgdXBvbiBzYXZpbmcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlU2x1Z0FmdGVyU2F2ZShyZXN1bHRzOiBBcnJheTxVcGRhdGVQcm9kdWN0TXV0YXRpb24gfCBVcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvbj4pIHtcclxuICAgICAgICBjb25zdCBmaXJzdFJlc3VsdCA9IHJlc3VsdHNbMF07XHJcbiAgICAgICAgY29uc3Qgc2x1Z0NvbnRyb2wgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFsncHJvZHVjdCcsICdzbHVnJ10pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBpc1VwZGF0ZU11dGF0aW9uKGlucHV0OiBhbnkpOiBpbnB1dCBpcyBVcGRhdGVQcm9kdWN0TXV0YXRpb24ge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuaGFzT3duUHJvcGVydHkoJ3VwZGF0ZVByb2R1Y3QnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzbHVnQ29udHJvbCAmJiBpc1VwZGF0ZU11dGF0aW9uKGZpcnN0UmVzdWx0KSkge1xyXG4gICAgICAgICAgICBzbHVnQ29udHJvbC5zZXRWYWx1ZShmaXJzdFJlc3VsdC51cGRhdGVQcm9kdWN0LnNsdWcsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2xyLWZsZXgtcm93XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDx2ZHItbGFuZ3VhZ2Utc2VsZWN0b3JcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc05ldyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cInByb2R1Y3QtZGV0YWlsXCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc05ldyQgfCBhc3luYzsgZWxzZSB1cGRhdGVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZXRhaWxGb3JtLmludmFsaWQgfHwgZGV0YWlsRm9ybS5wcmlzdGluZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1cGRhdGVCdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZGV0YWlsRm9ybS5pbnZhbGlkIHx8IGRldGFpbEZvcm0ucHJpc3RpbmUpICYmICFhc3NldHNDaGFuZ2VkKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICA8L3Zkci1hY3Rpb24tYmFyPlxyXG48L3Zkci1wYWdlLWJsb2NrPlxyXG5cclxuPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCI+XHJcbiAgICA8dmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuICAgICAgICA8dmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cudmlzaWJpbGl0eScgfCB0cmFuc2xhdGVcIiBmb3I9XCJ2aXNpYmlsaXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlciAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImVuYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRldGFpbEZvcm0uZ2V0KFsnZW5hYmxlZCddKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY29tbW9uLmVuYWJsZWQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGlzTmV3JCB8IGFzeW5jKVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1jYXJkICp2ZHJJZk11bHRpY2hhbm5lbCBbdGl0bGVdPVwiJ2NvbW1vbi5jaGFubmVscycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0taXRlbSAqdmRySWZEZWZhdWx0Q2hhbm5lbEFjdGl2ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2hhbm5lbC1hc3NpZ25tZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoYW5uZWwgb2YgcHJvZHVjdENoYW5uZWxzJCB8IGFzeW5jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNEZWZhdWx0Q2hhbm5lbChjaGFubmVsLmNvZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0aW1lcy1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGljb25DbGljayk9XCJyZW1vdmVGcm9tQ2hhbm5lbChjaGFubmVsLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hhbm5lbC1iYWRnZSBbY2hhbm5lbENvZGVdPVwiY2hhbm5lbC5jb2RlXCI+PC92ZHItY2hhbm5lbC1iYWRnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoYW5uZWwuY29kZSB8IGNoYW5uZWxDb2RlVG9MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXNtYWxsXCIgKGNsaWNrKT1cImFzc2lnblRvQ2hhbm5lbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwibGF5ZXJzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hc3NpZ24tdG8tY2hhbm5lbCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHZkci1jYXJkICpuZ0lmPVwiZW50aXR5Py5vcHRpb25Hcm91cHMubGVuZ3RoXCIgW3RpdGxlXT1cIidjYXRhbG9nLnByb2R1Y3Qtb3B0aW9ucycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBlbnRpdHk/Lm9wdGlvbkdyb3VwcyB8IHNvcnQgOiAnaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yRnJvbV09XCJvcHRpb25Hcm91cC5jb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ludmVydF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkdyb3VwLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnb3B0aW9ucyddXCIgY2xhc3M9XCJidXR0b24tc21hbGwgbXQtMlwiICp2ZHJJZlBlcm1pc3Npb25zPVwidXBkYXRlUGVybWlzc2lvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGVuY2lsXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuZWRpdC1vcHRpb25zJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjYXRhbG9nLmZhY2V0cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYWNldHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZhY2V0LXZhbHVlLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZhY2V0VmFsdWUgb2YgZmFjZXRWYWx1ZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmFjZXRWYWx1ZV09XCJmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJ1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZVByb2R1Y3RGYWNldFZhbHVlKGZhY2V0VmFsdWUuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItZmFjZXQtdmFsdWUtY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXNtYWxsIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByb2R1Y3RGYWNldFZhbHVlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmFkZC1mYWNldHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGVudGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvIFtlbnRpdHldPVwiZW50aXR5XCI+PC92ZHItcGFnZS1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG5cclxuICAgICAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGhpZGRlbiB4LWRhdGE9XCJwcmV2ZW50cyBlbnRlciBrZXkgZnJvbSB0cmlnZ2VyaW5nIG90aGVyIGJ1dHRvbnNcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cucHJvZHVjdC1uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVTbHVnKCRldmVudC50YXJnZXQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoaXNOZXckIHwgYXN5bmMpID09PSBmYWxzZSAmJiBkZXRhaWxGb3JtLmdldChbJ25hbWUnXSk/LmRpcnR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYXV0by11cGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRvVXBkYXRlVmFyaWFudE5hbWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy5hdXRvLXVwZGF0ZS1wcm9kdWN0LXZhcmlhbnQtbmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY2F0YWxvZy5zbHVnJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInNsdWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JzXT1cInsgcGF0dGVybjogJ2NhdGFsb2cuc2x1Zy1wYXR0ZXJuLWVycm9yJyB8IHRyYW5zbGF0ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNsdWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWdyaWQtc3BhblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29tbW9uLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInNsdWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JzXT1cInsgcGF0dGVybjogJ2NhdGFsb2cuc2x1Zy1wYXR0ZXJuLWVycm9yJyB8IHRyYW5zbGF0ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItcmljaC10ZXh0LWVkaXRvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1yaWNoLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY29tbW9uLmN1c3RvbS1maWVsZHMnIHwgdHJhbnNsYXRlXCIgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIlByb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cImRldGFpbEZvcm0uZ2V0KCdjdXN0b21GaWVsZHMnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdFxyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25JZD1cInByb2R1Y3QtZGV0YWlsXCJcclxuICAgICAgICAgICAgICAgIFtlbnRpdHkkXT1cImVudGl0eSRcIlxyXG4gICAgICAgICAgICAgICAgW2RldGFpbEZvcm1dPVwiZGV0YWlsRm9ybVwiXHJcbiAgICAgICAgICAgID48L3Zkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0PlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjYXRhbG9nLmFzc2V0cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItYXNzZXRzXHJcbiAgICAgICAgICAgICAgICAgICAgW2Fzc2V0c109XCJhc3NldENoYW5nZXMuYXNzZXRzIHx8IGVudGl0eT8uYXNzZXRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbZmVhdHVyZWRBc3NldF09XCJhc3NldENoYW5nZXMuZmVhdHVyZWRBc3NldCB8fCBlbnRpdHk/LmZlYXR1cmVkQXNzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt1cGRhdGVQZXJtaXNzaW9uc109XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhc3NldENoYW5nZXMgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLWFzc2V0cz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuXHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cucHJvZHVjdC12YXJpYW50cycgfCB0cmFuc2xhdGVcIiBbcGFkZGluZ1hdPVwiaXNOZXckIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc05ldyQgfCBhc3luYzsgZWxzZSB2YXJpYW50TGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZ2VuZXJhdGUtcHJvZHVjdC12YXJpYW50c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFyaWFudHNDaGFuZ2UpPVwiY3JlYXRlVmFyaWFudHNDb25maWcgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L3Zkci1nZW5lcmF0ZS1wcm9kdWN0LXZhcmlhbnRzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ZhcmlhbnRMaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItcHJvZHVjdC12YXJpYW50LWxpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2R1Y3RJZF09XCJ0aGlzLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVMYW5ndWFnZVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItcHJvZHVjdC12YXJpYW50LWxpc3Q+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTNcIiAqbmdJZj1cIihpc05ldyQgfCBhc3luYykgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidXR0b25cIiBbcm91dGVyTGlua109XCJbJ21hbmFnZS12YXJpYW50cyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFkZC10ZXh0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cubWFuYWdlLXZhcmlhbnRzJyB8IHRyYW5zbGF0ZSB9fTwvYVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8L3Zkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbjwvZm9ybT5cclxuIl19
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFJSCx5QkFBeUIsRUFFekIsZUFBZSxFQUNmLDRCQUE0QixFQVM1QixVQUFVLEVBQ1YsdUJBQXVCLEVBSXZCLHdCQUF3QixFQUN4Qix1QkFBdUIsR0FNMUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsSUFBSSxFQUNKLFNBQVMsRUFDVCxXQUFXLEVBQ1gsSUFBSSxHQUNQLE1B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bnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQXNzZXQsXHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ3JlYXRlUHJvZHVjdElucHV0LFxyXG4gICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZmluZFRyYW5zbGF0aW9uLFxyXG4gICAgZ2V0Q2hhbm5lbENvZGVGcm9tVXNlclN0YXR1cyxcclxuICAgIGdldERlZmF1bHRVaUxhbmd1YWdlLFxyXG4gICAgR2V0UHJvZHVjdERldGFpbERvY3VtZW50LFxyXG4gICAgR2V0UHJvZHVjdERldGFpbFF1ZXJ5LFxyXG4gICAgR2V0UHJvZHVjdFdpdGhWYXJpYW50c1F1ZXJ5LFxyXG4gICAgSXRlbU9mLFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQUk9EVUNUX0RFVEFJTF9GUkFHTUVOVCxcclxuICAgIFByb2R1Y3REZXRhaWxGcmFnbWVudCxcclxuICAgIFByb2R1Y3RWYXJpYW50RnJhZ21lbnQsXHJcbiAgICBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgdW5pY29kZVBhdHRlcm5WYWxpZGF0b3IsXHJcbiAgICBVcGRhdGVQcm9kdWN0SW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0TXV0YXRpb24sXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0LFxyXG4gICAgVXBkYXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb24sXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IG5vcm1hbGl6ZVN0cmluZyB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvbm9ybWFsaXplLXN0cmluZyc7XHJcbmltcG9ydCB7IERFRkFVTFRfQ0hBTk5FTF9DT0RFIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtY29uc3RhbnRzJztcclxuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi91bmlxdWUnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGNvbmNhdCwgRU1QVFksIGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gICAgbWFwLFxyXG4gICAgbWVyZ2VNYXAsXHJcbiAgICBzaGFyZVJlcGxheSxcclxuICAgIHNraXAsXHJcbiAgICBzd2l0Y2hNYXAsXHJcbiAgICBzd2l0Y2hNYXBUbyxcclxuICAgIHRha2UsXHJcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1mYWNldC1kaWFsb2cvYXBwbHktZmFjZXQtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2lnblByb2R1Y3RzVG9DaGFubmVsRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vYXNzaWduLXByb2R1Y3RzLXRvLWNoYW5uZWwtZGlhbG9nL2Fzc2lnbi1wcm9kdWN0cy10by1jaGFubmVsLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDcmVhdGVQcm9kdWN0VmFyaWFudHNDb25maWcgfSBmcm9tICcuLi9nZW5lcmF0ZS1wcm9kdWN0LXZhcmlhbnRzL2dlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHMuY29tcG9uZW50JztcclxuXHJcbmludGVyZmFjZSBTZWxlY3RlZEFzc2V0cyB7XHJcbiAgICBhc3NldHM/OiBBc3NldFtdO1xyXG4gICAgZmVhdHVyZWRBc3NldD86IEFzc2V0O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgR0VUX1BST0RVQ1RfREVUQUlMID0gZ3FsYFxyXG4gICAgcXVlcnkgR2V0UHJvZHVjdERldGFpbCgkaWQ6IElEISkge1xyXG4gICAgICAgIHByb2R1Y3QoaWQ6ICRpZCkge1xyXG4gICAgICAgICAgICAuLi5Qcm9kdWN0RGV0YWlsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgJHtQUk9EVUNUX0RFVEFJTF9GUkFHTUVOVH1cclxuYDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdC1kZXRhaWwyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgR2V0UHJvZHVjdERldGFpbERvY3VtZW50LCAncHJvZHVjdCc+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICAgIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3QnKTtcclxuICAgIGRldGFpbEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgYXV0b1VwZGF0ZVZhcmlhbnROYW1lczogdHJ1ZSxcclxuICAgICAgICBzbHVnOiBbJycsIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yKC9eW1xccHtMZXR0ZXJ9MC05Ll8tXSskLyldLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICBmYWNldFZhbHVlSWRzOiBbW10gYXMgc3RyaW5nW11dLFxyXG4gICAgICAgIGN1c3RvbUZpZWxkczogdGhpcy5mb3JtQnVpbGRlci5ncm91cChcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxyXG4gICAgICAgICksXHJcbiAgICB9KTtcclxuICAgIGFzc2V0Q2hhbmdlczogU2VsZWN0ZWRBc3NldHMgPSB7fTtcclxuICAgIHByb2R1Y3RDaGFubmVscyQ6IE9ic2VydmFibGU8UHJvZHVjdERldGFpbEZyYWdtZW50WydjaGFubmVscyddPjtcclxuICAgIGZhY2V0VmFsdWVzJDogT2JzZXJ2YWJsZTxQcm9kdWN0RGV0YWlsRnJhZ21lbnRbJ2ZhY2V0VmFsdWVzJ10+O1xyXG4gICAgY3JlYXRlVmFyaWFudHNDb25maWc6IENyZWF0ZVByb2R1Y3RWYXJpYW50c0NvbmZpZyA9IHsgZ3JvdXBzOiBbXSwgdmFyaWFudHM6IFtdLCBzdG9ja0xvY2F0aW9uSWQ6ICcnIH07XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbnMgPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZVByb2R1Y3RdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdERldGFpbFNlcnZpY2U6IFByb2R1Y3REZXRhaWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RGYWNldFZhbHVlcyQgPSB0aGlzLmVudGl0eSQucGlwZShtYXAocHJvZHVjdCA9PiBwcm9kdWN0LmZhY2V0VmFsdWVzKSk7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5kZXRhaWxGb3JtO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29uc3QgZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkID0gcHJvZHVjdEdyb3VwLmdldCgnZmFjZXRWYWx1ZUlkcycpIS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgc2tpcCgxKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGlkcyA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5mYWNldFxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGYWNldFZhbHVlcyh7IGZpbHRlcjogeyBpZDogeyBpbjogaWRzIH0gfSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXBTaW5nbGUoKHsgZmFjZXRWYWx1ZXMgfSkgPT4gZmFjZXRWYWx1ZXMuaXRlbXMpLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmFjZXRWYWx1ZXMkID0gY29uY2F0KFxyXG4gICAgICAgICAgICBwcm9kdWN0RmFjZXRWYWx1ZXMkLnBpcGUodGFrZSgxKSksXHJcbiAgICAgICAgICAgIHByb2R1Y3RGYWNldFZhbHVlcyQucGlwZShzd2l0Y2hNYXBUbyhmb3JtRmFjZXRWYWx1ZUlkQ2hhbmdlcyQpKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdENoYW5uZWxzJCA9IHRoaXMuZW50aXR5JC5waXBlKG1hcChwID0+IHAuY2hhbm5lbHMpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0RlZmF1bHRDaGFubmVsKGNoYW5uZWxDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gY2hhbm5lbENvZGUgPT09IERFRkFVTFRfQ0hBTk5FTF9DT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2lnblRvQ2hhbm5lbCgpIHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RDaGFubmVscyRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGNoYW5uZWxzID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZnJvbUNvbXBvbmVudChBc3NpZ25Qcm9kdWN0c1RvQ2hhbm5lbERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZHM6IFt0aGlzLmlkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFubmVsSWRzOiBjaGFubmVscy5tYXAoYyA9PiBjLmlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZyb21DaGFubmVsKGNoYW5uZWxJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgZnJvbShnZXRDaGFubmVsQ29kZUZyb21Vc2VyU3RhdHVzKHRoaXMuZGF0YVNlcnZpY2UsIGNoYW5uZWxJZCkpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IGNoYW5uZWxDb2RlIH0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8oJ2NhdGFsb2cucmVtb3ZlLXByb2R1Y3QtZnJvbS1jaGFubmVsJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlY29uZGFyeScsIGxhYmVsOiBfKCdjb21tb24uY2FuY2VsJykgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXygnY2F0YWxvZy5yZW1vdmUtZnJvbS1jaGFubmVsJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25WYXJzOiB7IGNoYW5uZWxDb2RlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnJlbW92ZVByb2R1Y3RzRnJvbUNoYW5uZWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZHM6IFt0aGlzLmlkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NhdGFsb2cubm90aWZ5LXJlbW92ZS1wcm9kdWN0LWZyb20tY2hhbm5lbC1zdWNjZXNzJykpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NhdGFsb2cubm90aWZ5LXJlbW92ZS1wcm9kdWN0LWZyb20tY2hhbm5lbC1lcnJvcicpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduVmFyaWFudFRvQ2hhbm5lbCh2YXJpYW50OiBQcm9kdWN0VmFyaWFudEZyYWdtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEFzc2lnblByb2R1Y3RzVG9DaGFubmVsRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkczogW3RoaXMuaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RWYXJpYW50SWRzOiBbdmFyaWFudC5pZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYW5uZWxJZHM6IHZhcmlhbnQuY2hhbm5lbHMubWFwKGMgPT4gYy5pZCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVmFyaWFudEZyb21DaGFubmVsKHsgY2hhbm5lbElkLCB2YXJpYW50IH06IHsgY2hhbm5lbElkOiBzdHJpbmc7IHZhcmlhbnQ6IFByb2R1Y3RWYXJpYW50RnJhZ21lbnQgfSkge1xyXG4gICAgICAgIGZyb20oZ2V0Q2hhbm5lbENvZGVGcm9tVXNlclN0YXR1cyh0aGlzLmRhdGFTZXJ2aWNlLCBjaGFubmVsSWQpKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBjaGFubmVsQ29kZSB9KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjYXRhbG9nLnJlbW92ZS1wcm9kdWN0LXZhcmlhbnQtZnJvbS1jaGFubmVsJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlY29uZGFyeScsIGxhYmVsOiBfKCdjb21tb24uY2FuY2VsJykgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXygnY2F0YWxvZy5yZW1vdmUtZnJvbS1jaGFubmVsJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25WYXJzOiB7IGNoYW5uZWxDb2RlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnJlbW92ZVZhcmlhbnRzRnJvbUNoYW5uZWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RWYXJpYW50SWRzOiBbdmFyaWFudC5pZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBFTVBUWSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjYXRhbG9nLm5vdGlmeS1yZW1vdmUtdmFyaWFudC1mcm9tLWNoYW5uZWwtc3VjY2VzcycpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjYXRhbG9nLm5vdGlmeS1yZW1vdmUtdmFyaWFudC1mcm9tLWNoYW5uZWwtZXJyb3InKSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2V0c0NoYW5nZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhT2JqZWN0LnZhbHVlcyh0aGlzLmFzc2V0Q2hhbmdlcykubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgY3JlYXRpbmcgYSBuZXcgcHJvZHVjdCwgYXV0b21hdGljYWxseSBnZW5lcmF0ZSB0aGUgc2x1ZyBiYXNlZCBvbiB0aGUgcHJvZHVjdCBuYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVTbHVnKG5hbWVWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2x1Z0NvbnRyb2wgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdzbHVnJyk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gdGhpcy5lbnRpdHkgPyBmaW5kVHJhbnNsYXRpb24odGhpcy5lbnRpdHksIHRoaXMubGFuZ3VhZ2VDb2RlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2x1Z0lzRW1wdHkgPSAhY3VycmVudFRyYW5zbGF0aW9uIHx8ICFjdXJyZW50VHJhbnNsYXRpb24uc2x1ZztcclxuICAgICAgICBpZiAoc2x1Z0NvbnRyb2wgJiYgc2x1Z0NvbnRyb2wucHJpc3RpbmUgJiYgY3VycmVudFNsdWdJc0VtcHR5KSB7XHJcbiAgICAgICAgICAgIHNsdWdDb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZVN0cmluZyhgJHtuYW1lVmFsdWV9YCwgJy0nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFByb2R1Y3RGYWNldFZhbHVlKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUZhY2V0VmFsdWVNb2RhbCgpLnN1YnNjcmliZShmYWNldFZhbHVlSWRzID0+IHtcclxuICAgICAgICAgICAgaWYgKGZhY2V0VmFsdWVJZHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZGV0YWlsRm9ybTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGYWNldFZhbHVlSWRzID0gcHJvZHVjdEdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMgPz8gW107XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogdW5pcXVlKFsuLi5jdXJyZW50RmFjZXRWYWx1ZUlkcywgLi4uZmFjZXRWYWx1ZUlkc10pLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByb2R1Y3RPcHRpb24oaW5wdXQ6IFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCAmIHsgYXV0b1VwZGF0ZTogYm9vbGVhbiB9KSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFtwcm9kdWN0LCBsYW5ndWFnZUNvZGVdKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UudXBkYXRlUHJvZHVjdE9wdGlvbihpbnB1dCwgcHJvZHVjdCwgbGFuZ3VhZ2VDb2RlKSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdE9wdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlUHJvZHVjdEZhY2V0VmFsdWUoZmFjZXRWYWx1ZUlkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwcm9kdWN0R3JvdXAgPSB0aGlzLmRldGFpbEZvcm07XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZhY2V0VmFsdWVJZHMgPSBwcm9kdWN0R3JvdXAudmFsdWUuZmFjZXRWYWx1ZUlkcyA/PyBbXTtcclxuICAgICAgICBwcm9kdWN0R3JvdXAucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IGN1cnJlbnRGYWNldFZhbHVlSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gZmFjZXRWYWx1ZUlkKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwcm9kdWN0R3JvdXAubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRpc3BsYXlGYWNldFZhbHVlTW9kYWwoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChBcHBseUZhY2V0RGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbWQnLFxyXG4gICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKG1hcChmYWNldFZhbHVlcyA9PiBmYWNldFZhbHVlcyAmJiBmYWNldFZhbHVlcy5tYXAodiA9PiB2LmlkKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICBjb25zdCBwcm9kdWN0R3JvdXAgPSB0aGlzLmRldGFpbEZvcm07XHJcbiAgICAgICAgaWYgKCFwcm9kdWN0R3JvdXAuZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV3UHJvZHVjdCA9IHRoaXMuZ2V0VXBkYXRlZFByb2R1Y3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlkOiAnJyxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogJycsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgIHNsdWc6ICcnLFxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZWRBc3NldDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW10sXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBzOiBbXSxcclxuICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVzOiBbXSxcclxuICAgICAgICAgICAgICAgIGNoYW5uZWxzOiBbXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcHJvZHVjdEdyb3VwIGFzIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICkgYXMgQ3JlYXRlUHJvZHVjdElucHV0O1xyXG4gICAgICAgIHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2VcclxuICAgICAgICAgICAgLmNyZWF0ZVByb2R1Y3RXaXRoVmFyaWFudHMobmV3UHJvZHVjdCwgdGhpcy5jcmVhdGVWYXJpYW50c0NvbmZpZywgdGhpcy5sYW5ndWFnZUNvZGUpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoeyBjcmVhdGVQcm9kdWN0VmFyaWFudHMsIHByb2R1Y3RJZCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBwcm9kdWN0SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3Byb2R1Y3QsIGxhbmd1YWdlQ29kZV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0R3JvdXAgPSB0aGlzLmRldGFpbEZvcm07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb2R1Y3RJbnB1dDogVXBkYXRlUHJvZHVjdElucHV0IHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YXJpYW50c0lucHV0OiBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0R3JvdXAuZGlydHkgfHwgdGhpcy5hc3NldHNDaGFuZ2VkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElucHV0ID0gdGhpcy5nZXRVcGRhdGVkUHJvZHVjdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAgYXMgVW50eXBlZEZvcm1Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVQcm9kdWN0SW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS51cGRhdGVQcm9kdWN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvVXBkYXRlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ3Byb2R1Y3QnLCAnYXV0b1VwZGF0ZVZhcmlhbnROYW1lcyddKT8udmFsdWUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHNJbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2x1Z0FmdGVyU2F2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuRGVhY3RpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuY2FuRGVhY3RpdmF0ZSgpICYmICF0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHMgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGZvcm0gb24gY2hhbmdlcyB0byB0aGUgcHJvZHVjdCBvciBjdXJyZW50IGxhbmd1YWdlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhcclxuICAgICAgICBwcm9kdWN0OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0V2l0aFZhcmlhbnRzUXVlcnlbJ3Byb2R1Y3QnXT4sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb24gPSBmaW5kVHJhbnNsYXRpb24ocHJvZHVjdCwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IHByb2R1Y3QuZW5hYmxlZCxcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgc2x1ZzogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLnNsdWcgOiAnJyxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5kZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBwcm9kdWN0LmZhY2V0VmFsdWVzLm1hcChmdiA9PiBmdi5pZCksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5nZXQoWydjdXN0b21GaWVsZHMnXSksXHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgcHJvZHVjdCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBkZXRhaWxGb3JtLCB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIHVwZGF0ZWQgY29weSBvZiB0aGUgcHJvZHVjdCB3aGljaFxyXG4gICAgICogY2FuIHRoZW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZFByb2R1Y3QoXHJcbiAgICAgICAgcHJvZHVjdDogTm9uTnVsbGFibGU8R2V0UHJvZHVjdERldGFpbFF1ZXJ5Wydwcm9kdWN0J10+LFxyXG4gICAgICAgIHByb2R1Y3RGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0SW5wdXQgfCBDcmVhdGVQcm9kdWN0SW5wdXQge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQcm9kdWN0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogcHJvZHVjdCxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogcHJvZHVjdEZvcm1Hcm91cC52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvZHVjdC5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogcHJvZHVjdC5zbHVnIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZFByb2R1Y3QsXHJcbiAgICAgICAgICAgIGFzc2V0SWRzOiB0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHM/Lm1hcChhID0+IGEuaWQpLFxyXG4gICAgICAgICAgICBmZWF0dXJlZEFzc2V0SWQ6IHRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkLFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBwcm9kdWN0Rm9ybUdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgfSBhcyBVcGRhdGVQcm9kdWN0SW5wdXQgfCBDcmVhdGVQcm9kdWN0SW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2VydmVyIG1heSBhbHRlciB0aGUgc2x1ZyB2YWx1ZSBpbiBvcmRlciB0byBub3JtYWxpemUgYW5kIGVuc3VyZSB1bmlxdWVuZXNzIHVwb24gc2F2aW5nLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZVNsdWdBZnRlclNhdmUocmVzdWx0czogQXJyYXk8VXBkYXRlUHJvZHVjdE11dGF0aW9uIHwgVXBkYXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb24+KSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSByZXN1bHRzWzBdO1xyXG4gICAgICAgIGNvbnN0IHNsdWdDb250cm9sID0gdGhpcy5kZXRhaWxGb3JtLmdldChbJ3Byb2R1Y3QnLCAnc2x1ZyddKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gaXNVcGRhdGVNdXRhdGlvbihpbnB1dDogYW55KTogaW5wdXQgaXMgVXBkYXRlUHJvZHVjdE11dGF0aW9uIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmhhc093blByb3BlcnR5KCd1cGRhdGVQcm9kdWN0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2x1Z0NvbnRyb2wgJiYgaXNVcGRhdGVNdXRhdGlvbihmaXJzdFJlc3VsdCkpIHtcclxuICAgICAgICAgICAgc2x1Z0NvbnRyb2wuc2V0VmFsdWUoZmlyc3RSZXN1bHQudXBkYXRlUHJvZHVjdC5zbHVnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cclxuICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICA8dmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNsci1mbGV4LXJvd1wiPjwvZGl2PlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImxhbmd1YWdlQ29kZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuXHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJwcm9kdWN0LWRldGFpbFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNOZXckIHwgYXN5bmM7IGVsc2UgdXBkYXRlQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGUoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5pbnZhbGlkIHx8IGRldGFpbEZvcm0ucHJpc3RpbmVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmNyZWF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwidXBkYXRlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGRldGFpbEZvcm0uaW52YWxpZCB8fCBkZXRhaWxGb3JtLnByaXN0aW5lKSAmJiAhYXNzZXRzQ2hhbmdlZCgpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLnVwZGF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuXHJcbjxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiPlxyXG4gICAgPHZkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbiAgICAgICAgPHZkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnZpc2liaWxpdHknIHwgdHJhbnNsYXRlXCIgZm9yPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXIgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJUb2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbmFibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJkZXRhaWxGb3JtLmdldChbJ2VuYWJsZWQnXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NvbW1vbi5lbmFibGVkJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpc05ldyQgfCBhc3luYylcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItY2FyZCAqdmRySWZNdWx0aWNoYW5uZWwgW3RpdGxlXT1cIidjb21tb24uY2hhbm5lbHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWl0ZW0gKnZkcklmRGVmYXVsdENoYW5uZWxBY3RpdmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNoYW5uZWwtYXNzaWdubWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGFubmVsIG9mIHByb2R1Y3RDaGFubmVscyQgfCBhc3luY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRGVmYXVsdENoYW5uZWwoY2hhbm5lbC5jb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwidGltZXMtY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpY29uQ2xpY2spPVwicmVtb3ZlRnJvbUNoYW5uZWwoY2hhbm5lbC5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoYW5uZWwtYmFkZ2UgW2NoYW5uZWxDb2RlXT1cImNoYW5uZWwuY29kZVwiPjwvdmRyLWNoYW5uZWwtYmFkZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGFubmVsLmNvZGUgfCBjaGFubmVsQ29kZVRvTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1zbWFsbFwiIChjbGljayk9XCJhc3NpZ25Ub0NoYW5uZWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImxheWVyc1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYXNzaWduLXRvLWNoYW5uZWwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCAqbmdJZj1cImVudGl0eT8ub3B0aW9uR3JvdXBzLmxlbmd0aFwiIFt0aXRsZV09XCInY2F0YWxvZy5wcm9kdWN0LW9wdGlvbnMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uR3JvdXAgb2YgZW50aXR5Py5vcHRpb25Hcm91cHMgfCBzb3J0IDogJ2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvckZyb21dPVwib3B0aW9uR3JvdXAuY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnZlcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Hcm91cC5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJ29wdGlvbnMnXVwiIGNsYXNzPVwiYnV0dG9uLXNtYWxsIG10LTJcIiAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBlbmNpbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmVkaXQtb3B0aW9ucycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5mYWNldHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFjZXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mYWNldC12YWx1ZS1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmYWNldFZhbHVlIG9mIGZhY2V0VmFsdWVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZhY2V0VmFsdWVdPVwiZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVQcm9kdWN0RmFjZXRWYWx1ZShmYWNldFZhbHVlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWZhY2V0LXZhbHVlLWNoaXA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zbWFsbCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcm9kdWN0RmFjZXRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtZmFjZXRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyBbZW50aXR5XT1cImVudGl0eVwiPjwvdmRyLXBhZ2UtZW50aXR5LWluZm8+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPC92ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuXHJcbiAgICAgICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBoaWRkZW4geC1kYXRhPVwicHJldmVudHMgZW50ZXIga2V5IGZyb20gdHJpZ2dlcmluZyBvdGhlciBidXR0b25zXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnByb2R1Y3QtbmFtZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlU2x1ZygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGlzTmV3JCB8IGFzeW5jKSA9PT0gZmFsc2UgJiYgZGV0YWlsRm9ybS5nZXQoWyduYW1lJ10pPy5kaXJ0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF1dG8tdXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXV0b1VwZGF0ZVZhcmlhbnROYW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NhdGFsb2cuYXV0by11cGRhdGUtcHJvZHVjdC12YXJpYW50LW5hbWUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NhdGFsb2cuc2x1ZycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yc109XCJ7IHBhdHRlcm46ICdjYXRhbG9nLnNsdWctcGF0dGVybi1lcnJvcicgfCB0cmFuc2xhdGUgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2x1Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncmlkLXNwYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvbW1vbi5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yc109XCJ7IHBhdHRlcm46ICdjYXRhbG9nLnNsdWctcGF0dGVybi1lcnJvcicgfCB0cmFuc2xhdGUgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXJpY2gtdGV4dC1lZGl0b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItcmljaC10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJQcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWN1c3RvbS1kZXRhaWwtY29tcG9uZW50LWhvc3RcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uSWQ9XCJwcm9kdWN0LWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgICAgICA+PC92ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5hc3NldHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWFzc2V0c1xyXG4gICAgICAgICAgICAgICAgICAgIFthc3NldHNdPVwiYXNzZXRDaGFuZ2VzLmFzc2V0cyB8fCBlbnRpdHk/LmFzc2V0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ZlYXR1cmVkQXNzZXRdPVwiYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQgfHwgZW50aXR5Py5mZWF0dXJlZEFzc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICBbdXBkYXRlUGVybWlzc2lvbnNdPVwidXBkYXRlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXNzZXRDaGFuZ2VzID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgID48L3Zkci1hc3NldHM+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcblxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjYXRhbG9nLnByb2R1Y3QtdmFyaWFudHMnIHwgdHJhbnNsYXRlXCIgW3BhZGRpbmdYXT1cImlzTmV3JCB8IGFzeW5jXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNOZXckIHwgYXN5bmM7IGVsc2UgdmFyaWFudExpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWdlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhcmlhbnRzQ2hhbmdlKT1cImNyZWF0ZVZhcmlhbnRzQ29uZmlnID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItZ2VuZXJhdGUtcHJvZHVjdC12YXJpYW50cz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN2YXJpYW50TGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLXByb2R1Y3QtdmFyaWFudC1saXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0SWRdPVwidGhpcy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlTGFuZ3VhZ2VTZWxlY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXByb2R1Y3QtdmFyaWFudC1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0zXCIgKm5nSWY9XCIoaXNOZXckIHwgYXN5bmMpID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnV0dG9uXCIgW3JvdXRlckxpbmtdPVwiWydtYW5hZ2UtdmFyaWFudHMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJhZGQtdGV4dFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLm1hbmFnZS12YXJpYW50cycgfCB0cmFuc2xhdGUgfX08L2FcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPC92ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|