@c8y/ngx-components 1021.73.6 → 1021.73.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"store-branding.service.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/store-branding.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store-branding.service.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/store-branding.service.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { AfterViewInit, ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
- import { AbstractControl, ControlValueAccessor, FormGroup, ValidationErrors, Validator } from '@angular/forms';
2
+ import { AbstractControl, ControlValueAccessor, FormControl, FormGroup, ValidationErrors, Validator } from '@angular/forms';
3
3
  import { BsDatepickerDirective } from 'ngx-bootstrap/datepicker';
4
4
  import { PickedDates } from '../date-picker';
5
5
  import { DateFormatService } from '../common/date-format.service';
@@ -37,6 +37,7 @@ export declare class DateTimePickerComponent implements ControlValueAccessor, Va
37
37
  config: DateAndTimeOptions;
38
38
  onDateSelected: EventEmitter<PickedDates>;
39
39
  date: Date;
40
+ time: Date | null;
40
41
  form: FormGroup;
41
42
  defaultPlaceholder: "Select a date…";
42
43
  datepicker: BsDatepickerDirective;
@@ -49,6 +50,8 @@ export declare class DateTimePickerComponent implements ControlValueAccessor, Va
49
50
  ngOnInit(): void;
50
51
  ngOnDestroy(): void;
51
52
  ngAfterViewInit(): void;
53
+ onTimeChange(time: Date): void;
54
+ get dateControl(): FormControl;
52
55
  /**
53
56
  * Control Value Accessor - If form value changes by external factor, update date property and internal form with new value.
54
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"date-time-picker.component.d.ts","sourceRoot":"","sources":["../../../core/date-time-picker/date-time-picker.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EAEjB,YAAY,EAGZ,SAAS,EACT,MAAM,EAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,oBAAoB,EAEpB,SAAS,EAGT,gBAAgB,EAChB,SAAS,EAGV,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,qBAAqB,EAAsB,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;;AAOlE,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,oBAAoB,GAAG,MAAM,CAAC;AAE5F,qBA4Ba,uBACX,YAAW,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS;IAgE1E,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,iBAAiB;IA/D3B,OAAO,EAAE,IAAI,CAAC;IAEd,IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IAED,OAAO,EAAE,IAAI,CAAC;IAEd,IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IAGD,WAAW,EAAE,MAAM,CAAC;IAGpB,eAAe,EAAE,MAAM,CAAC;IAGxB,gBAAgB,UAAS;IAGzB,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;;OAUG;IAEH,QAAQ,EAAE,QAAQ,CAAiB;IAGnC,MAAM,EAAE,kBAAkB,CAIxB;IAGF,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC,CAAsB;IAE/D,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAEhB,kBAAkB,mBAA6B;IAEb,UAAU,EAAE,qBAAqB,CAAC;IAEpE,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,wBAAwB,CAA4C;IAC5E,OAAO,CAAC,QAAQ,CAAgC;gBAGtC,EAAE,EAAE,iBAAiB,EACrB,iBAAiB,EAAE,iBAAiB;IAkB9C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAY;IAE7C,SAAS,EAAE,MAAM,IAAI,CAAY;IAEjC,QAAQ,IAAI,IAAI;IAShB,WAAW,IAAI,IAAI;IAKnB,eAAe,IAAI,IAAI;IAIvB;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgB/B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAI/B,iBAAiB,CAAC,SAAS,EAAE,GAAG;IAIhC,gBAAgB,CAAC,QAAQ,EAAE,OAAO;IAOlC,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,gBAAgB,GAAG,IAAI;IAY5D,WAAW;IASX,OAAO;IASP,IAAI,IAAI,IAAI;IAIZ,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAsBzC;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,cAAc;yCArPX,uBAAuB;2CAAvB,uBAAuB;CAwPnC"}
1
+ {"version":3,"file":"date-time-picker.component.d.ts","sourceRoot":"","sources":["../../../core/date-time-picker/date-time-picker.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EAEjB,YAAY,EAGZ,SAAS,EACT,MAAM,EAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,SAAS,EAGT,gBAAgB,EAChB,SAAS,EAGV,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,qBAAqB,EAAsB,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;;AAOlE,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,oBAAoB,GAAG,MAAM,CAAC;AAE5F,qBA4Ba,uBACX,YAAW,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS;IAiE1E,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,iBAAiB;IAhE3B,OAAO,EAAE,IAAI,CAAC;IAEd,IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IAED,OAAO,EAAE,IAAI,CAAC;IAEd,IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IAGD,WAAW,EAAE,MAAM,CAAC;IAGpB,eAAe,EAAE,MAAM,CAAC;IAGxB,gBAAgB,UAAS;IAGzB,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;;OAUG;IAEH,QAAQ,EAAE,QAAQ,CAAiB;IAGnC,MAAM,EAAE,kBAAkB,CAIxB;IAGF,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC,CAAsB;IAE/D,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAEhB,kBAAkB,mBAA6B;IAEb,UAAU,EAAE,qBAAqB,CAAC;IAEpE,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,wBAAwB,CAA4C;IAC5E,OAAO,CAAC,QAAQ,CAAgC;gBAGtC,EAAE,EAAE,iBAAiB,EACrB,iBAAiB,EAAE,iBAAiB;IAoB9C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAY;IAE7C,SAAS,EAAE,MAAM,IAAI,CAAY;IAEjC,QAAQ,IAAI,IAAI;IAShB,WAAW,IAAI,IAAI;IAKnB,eAAe,IAAI,IAAI;IAIvB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI9B,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAiB/B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAI/B,iBAAiB,CAAC,SAAS,EAAE,GAAG;IAIhC,gBAAgB,CAAC,QAAQ,EAAE,OAAO;IAOlC,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,gBAAgB,GAAG,IAAI;IAY5D,WAAW;IASX,OAAO;IASP,IAAI,IAAI,IAAI;IAIZ,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAsBzC;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA+CnB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,cAAc;yCAzQX,uBAAuB;2CAAvB,uBAAuB;CA4QnC"}
@@ -356,9 +356,18 @@ export class StoreBrandingService {
356
356
  return JSON.parse(brandingAsJSONString);
357
357
  }
358
358
  async getPublicOptionsApp() {
359
- let { data: apps } = await this.applicationService.listByName(this.manifestValues.name);
360
- apps = apps.filter(app => app.owner?.tenant?.id === this.appState.currentTenant.value?.name);
361
- return apps[0];
359
+ try {
360
+ const { data: manifest } = await this.applicationService.getManifestOfContextPath(this.manifestValues.contextPath);
361
+ const { data: app } = await this.applicationService.detail(manifest.id);
362
+ if (app.owner.tenant.id !== this.appState.currentTenant.value?.name) {
363
+ return undefined;
364
+ }
365
+ return app;
366
+ }
367
+ catch (e) {
368
+ // e.g. reached when no app with the given context path exists
369
+ return undefined;
370
+ }
362
371
  }
363
372
  async createPublicOptionsApp() {
364
373
  const { data: app } = await this.applicationService.create(this.manifestValues);
@@ -371,4 +380,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
371
380
  type: Injectable,
372
381
  args: [{ providedIn: 'root' }]
373
382
  }], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i1.InventoryService }, { type: i1.InventoryBinaryService }, { type: i2.ZipService }, { type: i1.FetchClient }, { type: i3.BrandingVersionService }, { type: i2.AppStateService }, { type: i4.StaticAssetsService }, { type: i2.ThemeSwitcherService }, { type: i5.BrandingTrackingService }] });
374
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYnJhbmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL3N0b3JlLWJyYW5kaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBSVgsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7OztBQTJCdEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBZ0IvQixZQUNVLGtCQUFzQyxFQUN0QyxTQUEyQixFQUMzQixNQUE4QixFQUM5QixHQUFlLEVBQ2YsS0FBa0IsRUFDbEIsc0JBQThDLEVBQzlDLFFBQXlCLEVBQ3pCLFlBQWlDLEVBQ2pDLGFB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YmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBGZXRjaENsaWVudCxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25CaW5hcnksXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICBJbnZlbnRvcnlTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSwgVGhlbWVTd2l0Y2hlclNlcnZpY2UsIFppcFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGRlZmVyLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJyYW5kaW5nVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuL2JyYW5kaW5nLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBCcmFuZGluZ09wdGlvbnNKc29uLCBhbGxCcmFuZGluZ0NTU1ZhcnMsIG51bWJlckJyYW5kaW5nVmFycyB9IGZyb20gJy4vYnJhbmRpbmcudHlwZSc7XG5pbXBvcnQgeyBTdGF0aWNBc3NldCwgU3RhdGljQXNzZXRzU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvc3RhdGljLWFzc2V0cy9kYXRhJztcbmltcG9ydCB7IEJyYW5kaW5nVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi9icmFuZGluZy10cmFja2luZy5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZFZlcnNpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHJldmlzaW9uOiBudW1iZXI7XG4gIHZlcnNpb246IHN0cmluZztcbiAgdGFnczogc3RyaW5nW107XG4gIG93bmVyPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlZD86IHN0cmluZztcbiAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZGluZ0ZpbGVEZXRhaWxzIHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgYmxvYjogQmxvYjtcbiAganNvbkNvbnRlbnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRpbmdGaWxlRGV0YWlsc0xlZ2FjeSB7XG4gIHBhdGg6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgYmxvYj86IEJsb2I7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHVybFdyYXBwZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2VydmljZSB0byBsb2FkIGFuZCBzdG9yZSB0aGUgYnJhbmRpbmcgb2YgdGhlIHRlbmFudC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTdG9yZUJyYW5kaW5nU2VydmljZSB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lcyA9IHtcbiAgICBvcHRpb25zOiAnb3B0aW9ucy5qc29uJyxcbiAgICBtYW5pZmVzdDogJ2N1bXVsb2NpdHkuanNvbicsXG4gICAgZXhwb3J0WmlwTmFtZTogJ3B1YmxpYy1vcHRpb25zLnppcCdcbiAgfSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbWFuaWZlc3RWYWx1ZXMgPSB7XG4gICAgbmFtZTogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBjb250ZXh0UGF0aDogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBrZXk6ICdwdWJsaWMtb3B0aW9ucy1rZXknLFxuICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gY29udGFpbmluZyBzdGF0aWMgYXNzZXRzIHVzZWQgYnkgZS5nLiBicmFuZGluZy4nLFxuICAgIG5vQXBwU3dpdGNoZXI6IHRydWUsXG4gICAgdHlwZTogQXBwbGljYXRpb25UeXBlLkhPU1RFRCxcbiAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRFxuICB9IGFzIGNvbnN0IHNhdGlzZmllcyBJQXBwbGljYXRpb247XG4gIHJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4obnVsbCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZXRjaDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1ZlcnNpb25TZXJ2aWNlOiBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0YXRpY0Fzc2V0czogU3RhdGljQXNzZXRzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU3dpdGNoZXI6IFRoZW1lU3dpdGNoZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdUcmFja2luZzogQnJhbmRpbmdUcmFja2luZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBgbGF0ZXN0YCB0YWcgb24gdGhlIHByb3ZpZGVkIGJyYW5kaW5nIHZlcnNpb24uIE1ha2luZyBpdCB0aGUgZ2xvYmFsIGFjdGl2ZSBicmFuZGluZy5cbiAgICovXG4gIGFzeW5jIG1hcmtBc0FjdGl2ZShicmFuZGluZ1ZlcnNpb246IEJyYW5kVmVyc2lvbiwgYXBwPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGFwcCB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGNvbnN0IHRhZ3MgPSBicmFuZGluZ1ZlcnNpb24udGFncyB8fCBbXTtcbiAgICBjb25zdCB2ZXJzaW9uID0gYnJhbmRpbmdWZXJzaW9uLnZlcnNpb247XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcocHVibGljT3B0aW9ucywgdmVyc2lvbiwgWy4uLnRhZ3MsICdsYXRlc3QnXSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBuZXcgdGFiIHdpdGggdG8gcHJldmlldyB0aGUgYnJhbmRpbmcuIFRoZSBicmFuZGluZyBtdXN0IGhhdmUgYmVlbiBzYXZlZCBiZWZvcmVoYW5kLlxuICAgKiBAcGFyYW0gYnJhbmRpbmdOYW1lIHRoZSBuYW1lIG9mIHRoZSBicmFuZGluZyB0byBiZSBwcmV2aWV3ZWRcbiAgICovXG4gIG9wZW5QcmV2aWV3Rm9yQnJhbmRpbmcoYnJhbmRpbmdOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcub3BlblByZXZpZXdGb3JCcmFuZGluZygpO1xuICAgIHdpbmRvdy5vcGVuKFxuICAgICAgYC9hcHBzLyR7XG4gICAgICAgIHRoaXMuYXBwU3RhdGUuY3VycmVudEFwcGxpY2F0aW9uLnZhbHVlPy5jb250ZXh0UGF0aCB8fCAnY29ja3BpdCdcbiAgICAgIH0vaW5kZXguaHRtbD9icmFuZGluZ1ByZXZpZXc9dHJ1ZSZkeW5hbWljT3B0aW9uc1VybD0vYXBwcy9wdWJsaWMvcHVibGljLW9wdGlvbnNAJHticmFuZGluZ05hbWV9L29wdGlvbnMuanNvbmAsXG4gICAgICAnX2JsYW5rJyxcbiAgICAgICdub29wZW5lcixub3JlZmVycmVyJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYnJhbmRpbmdzIG9mIHRoZSB0ZW5hbnQuXG4gICAqIElmIG5vIHB1YmxpYyBvcHRpb25zIGFwcCBpcyBmb3VuZCwgcHVibGljT3B0aW9ucyB3aWxsIGJlIHVuZGVmaW5lZCBhbmQgdmFyaWFudHMgYW4gZW1wdHkgYXJyYXkuXG4gICAqIEZvciBvbGQgYnJhbmRpbmdzIChjcmVhdGVkIHdpdGhvdXQgdmVyc2lvbmluZykgYSBkZWZhdWx0IHZlcnNpb24gaXMgcmV0dXJuZWQuXG4gICAqL1xuICBhc3luYyBsb2FkQnJhbmRpbmdWYXJpYW50cyhcbiAgICBhcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7IHB1YmxpY09wdGlvbnM6IElBcHBsaWNhdGlvbiB8IHVuZGVmaW5lZDsgdmFyaWFudHM6IEJyYW5kVmVyc2lvbltdIH0+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG4gICAgaWYgKCFwdWJsaWNPcHRpb25zKSB7XG4gICAgICByZXR1cm4geyBwdWJsaWNPcHRpb25zOiB1bmRlZmluZWQsIHZhcmlhbnRzOiBbXSB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IHZlcnNpb25zIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0VmVyc2lvbnMocHVibGljT3B0aW9ucyk7XG4gICAgbGV0IG1hcHBlZFZlcnNpb25zOiBCcmFuZFZlcnNpb25bXSA9XG4gICAgICB2ZXJzaW9uc1xuICAgICAgICA/Lm1hcCh0bXAgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIGl0ZXJhdGlvbiB9ID1cbiAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLnNwbGl0QnJhbmRpbmdJbnRvTmFtZUFuZEl0ZXJhdGlvbih0bXAudmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByZXZpc2lvbjogaXRlcmF0aW9uLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpZDogdG1wLmJpbmFyeUlkLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiB0bXAudmVyc2lvbixcbiAgICAgICAgICAgICAgdGFnczogdG1wLnRhZ3MgfHwgW10sXG4gICAgICAgICAgICAgIHB1YmxpY09wdGlvbnNBcHA6IHB1YmxpY09wdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgdmVyc2lvbicsIHRtcCwgZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgPy5maWx0ZXIoQm9vbGVhbikgfHwgW107XG4gICAgaWYgKCF2ZXJzaW9ucyAmJiBwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCkge1xuICAgICAgbWFwcGVkVmVyc2lvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgaWQ6IHB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICAgIHZlcnNpb246ICdkZWZhdWx0LTEnLFxuICAgICAgICAgIHJldmlzaW9uOiAxLFxuICAgICAgICAgIHRhZ3M6IFsnbGF0ZXN0JywgJ2RlZmF1bHQnXSxcbiAgICAgICAgICBwdWJsaWNPcHRpb25zQXBwOiBwdWJsaWNPcHRpb25zXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFudHMgPSBhd2FpdCB0aGlzLmdldE1ldGFkYXRhT2ZCcmFuZGluZ0JpbmFyaWVzKG1hcHBlZFZlcnNpb25zKTtcbiAgICByZXR1cm4geyBwdWJsaWNPcHRpb25zLCB2YXJpYW50cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIHRoZSBicmFuZGluZyBpcyBub3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIGFmdGVyIGNyZWF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIHdhaXQgZm9yIHRoZSBicmFuZGluZyB0byBiZSBwcmVzZW50LlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgYnJhbmRpbmcgdG8gYmUgcmV0cmlldmVkLlxuICAgKi9cbiAgYXN5bmMgd2FpdEZvckJyYW5kaW5nVG9CZVByZXNlbnQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbnVtYmVyT2ZBdHRlbXB0cyA9IDEyMDtcbiAgICBjb25zdCBzbGVlcER1cmF0aW9uSW5TZWNvbmRzID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mQXR0ZW1wdHM7IGkrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gZG8gbm90IHNsZWVwIGJlZm9yZSB0aGUgZmlyc3QgYXR0ZW1wdFxuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBzbGVlcER1cmF0aW9uSW5TZWNvbmRzICogMV8wMDApKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbik7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgQnJhbmRpbmcgXCIke3ZlcnNpb259XCIgYXZhaWxhYmxlIG5vdy5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYEJyYW5kaW5nIFwiJHt2ZXJzaW9ufVwiIG5vdCB5ZXQgcHJlc2VudCwgcmV0cnlpbmcgaW4gJHtzbGVlcER1cmF0aW9uSW5TZWNvbmRzfSBzZWNvbmRzLi4uYCxcbiAgICAgICAgICBlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBCcmFuZGluZyBcIiR7dmVyc2lvbn1cIiBub3QgYXZhaWxhYmxlIGFmdGVyICR7bnVtYmVyT2ZBdHRlbXB0cyAqIHNsZWVwRHVyYXRpb25JblNlY29uZHN9IHNlY29uZHMsIGdpdmluZyB1cC5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGNyZWF0ZSBhIHRoZSBpbml0aWFsIGJyYW5kaW5nIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgYXBwbGllZCBDU1MgdmFyaWFibGVzLlxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhcnRlZFVzaW5nQnJhbmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWxsVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgdGhlbWVUb1JldHJpZXZlVmFycyA9IFsnbGlnaHQnLCAnZGFyayddIGFzIGNvbnN0O1xuICAgIGNvbnN0IHVucmV0cmlldmFibGVWYXJzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHRoZW1lIG9mIHRoZW1lVG9SZXRyaWV2ZVZhcnMpIHtcbiAgICAgIHRoaXMudGhlbWVTd2l0Y2hlci50ZW1wb3JhcnlDaGFuZ2VUaGVtZSh0aGVtZSk7XG4gICAgICBjb25zdCBzdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgICAgY29uc3QgdmFyaWFibGVzVG9Ta2lwID0gW1xuICAgICAgICAnbmF2aWdhdG9yLXBsYXRmb3JtLWxvZ28nLFxuICAgICAgICAnYnJhbmQtbG9nby1pbWcnXG4gICAgICBdIHNhdGlzZmllcyAodHlwZW9mIGFsbEJyYW5kaW5nQ1NTVmFycylbbnVtYmVyXVtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gYWxsQnJhbmRpbmdDU1NWYXJzXG4gICAgICAgIC5maWx0ZXIoY3NzVmFyID0+ICF2YXJpYWJsZXNUb1NraXAuaW5jbHVkZXMoY3NzVmFyIGFzIGFueSkpXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdFZhbHVlID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoYC0tJHtrZXl9YCk7XG4gICAgICAgICAgY29uc3QgYzh5UHJlZml4ZWRWYWx1ZSA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKGAtLWM4eS0ke2tleX1gKTtcbiAgICAgICAgICBjb25zdCBuZXdLZXkgPSB0aGVtZSA9PT0gJ2xpZ2h0JyA/IGtleSA6IGBkYXJrLSR7a2V5fWA7XG4gICAgICAgICAgaWYgKCFkaXJlY3RWYWx1ZSAmJiAhYzh5UHJlZml4ZWRWYWx1ZSkge1xuICAgICAgICAgICAgdW5yZXRyaWV2YWJsZVZhcnMucHVzaChuZXdLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyID0gZGlyZWN0VmFsdWUgfHwgYzh5UHJlZml4ZWRWYWx1ZTtcbiAgICAgICAgICBpZiAobnVtYmVyQnJhbmRpbmdWYXJzLmluY2x1ZGVzKGtleSBhcyBhbnkpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoL1tBLVphLXpdL2csICcnKS50cmltKCkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYEZhaWxlZCB0byBwYXJzZSBudW1iZXIgZm9yIFwiJHtrZXl9XCIgdmFsdWUgdGhhdCBmYWlsZWQgdG8gcGFyc2U6IFwiJHt2YWx1ZX1cImAsXG4gICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJldiwgeyBbbmV3S2V5XTogdmFsdWUgfSk7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYWxsVmFyaWFibGVzLCB2YWx1ZXMpO1xuICAgIH1cbiAgICB0aGlzLnRoZW1lU3dpdGNoZXIucmVzZXRUZW1wb3JhcnlUaGVtZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlUHVibGljT3B0aW9uc0FwcEZyb21Jbmhlcml0ZWRPcHRpb25zKGFsbFZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFppcEZvckJpbmFyeShcbiAgICBiaW5hcnlJZDogc3RyaW5nLFxuICAgIGZpbGVOYW1lOiBzdHJpbmcgPSB0aGlzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lXG4gICk6IE9ic2VydmFibGU8RmlsZT4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB0aGlzLmJpbmFyeS5kb3dubG9hZChiaW5hcnlJZCkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuYmxvYigpKSxcbiAgICAgIG1hcChibG9iID0+IG5ldyBGaWxlKFtibG9iXSwgZmlsZU5hbWUpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgcHVibGljIG9wdGlvbnMgYXBwIGFuZCB0aGVyZWZvcmUgYWxsIGJyYW5kaW5ncy5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlQWxsQnJhbmRpbmdzKHB1YmxpY09wdGlvbnM/OiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBwdWJsaWNPcHRpb25zID0gcHVibGljT3B0aW9ucyB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShwdWJsaWNPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmhhbmNlcyB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmVyc2lvbnMgd2l0aCBtZXRhZGF0YSBmcm9tIHRoZSBsaW5rZWQgYmluYXJpZXMuXG4gICAqIEl0IHdpbGwgYWRkIHRoZSBvd25lciBhbmQgbGFzdFVwZGF0ZWQgZmllbGRzIHRvIHRoZSB2ZXJzaW9ucy5cbiAgICogVGhlIHByb3ZpZGVkIGFycmF5IGlzIGFsdGVyZWQuXG4gICAqL1xuICBhc3luYyBnZXRNZXRhZGF0YU9mQnJhbmRpbmdCaW5hcmllcyh2ZXJzaW9uczogQnJhbmRWZXJzaW9uW10pOiBQcm9taXNlPEJyYW5kVmVyc2lvbltdPiB7XG4gICAgY29uc3QgYmluYXJ5SWRzID0gdW5pcSh2ZXJzaW9ucy5tYXAodG1wID0+IHRtcC5pZCkpO1xuICAgIGlmICghYmluYXJ5SWRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25zO1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IG1ldGFkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIGlkczogYmluYXJ5SWRzLmpvaW4oJywnKSxcbiAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHZlcnNpb25zLm1hcCh2ZXJzaW9uID0+IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhRm9yVmVyc2lvbiA9XG4gICAgICAgIG1ldGFkYXRhLmZpbmQodG1wID0+IHRtcC5pZCA9PT0gdmVyc2lvbi5pZCkgfHwgKHt9IGFzIElNYW5hZ2VkT2JqZWN0KTtcbiAgICAgIGNvbnN0IHsgb3duZXIsIGxhc3RVcGRhdGVkIH0gPSBtZXRhZGF0YUZvclZlcnNpb247XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih2ZXJzaW9uLCB7IG93bmVyLCBsYXN0VXBkYXRlZCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgYXMgYSBuZXcgdmVyc2lvbiBmb3IgdGhlIHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgc2F2ZUJyYW5kaW5nKFxuICAgIGJsb2I6IEJsb2IgfCBGaWxlLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgZmlsZSA9IGJsb2IgaW5zdGFuY2VvZiBGaWxlID8gYmxvYiA6IG5ldyBGaWxlKFtibG9iXSwgYHB1YmxpYy1vcHRpb25zLSR7dmVyc2lvbn0uemlwYCk7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnNBcHAgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcblxuICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5IH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZVxuICAgICAgLmJpbmFyeShwdWJsaWNPcHRpb25zKVxuICAgICAgLnVwbG9hZEFwcGxpY2F0aW9uVmVyc2lvbihmaWxlLCB2ZXJzaW9uLCB0YWdzKTtcbiAgICBpZiAoIXB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkIHx8IHRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoe1xuICAgICAgICBpZDogcHVibGljT3B0aW9ucy5pZCxcbiAgICAgICAgYWN0aXZlVmVyc2lvbklkOiBgJHtiaW5hcnkuYmluYXJ5SWR9YFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFRyaWdnZXJCcmFuZGluZ1ZhcmlhbnRzLm5leHQoKTtcbiAgICByZXR1cm4geyB2ZXJzaW9uLCBiaW5hcnksIHRhZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgYnJhbmRpbmcgdmVyc2lvbiBmcm9tIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcsIHB1YmxpY09wdGlvbnM/OiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBwdWJsaWNPcHRpb25zID0gcHVibGljT3B0aW9ucyB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZVZlcnNpb25QYWNrYWdlKHB1YmxpY09wdGlvbnMsIHsgdmVyc2lvbiB9KTtcbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmxvYiBvZiBhIHppcCBmaWxlIGNvbnRhaW5pbmcgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIG9wdGlvbnMgKG9wdGlvbnMuanNvbikgYW5kIHRoZSBtYW5pZmVzdCAoY3VtdWxvY2l0eS5qc29uKS5cbiAgICovXG4gIGFzeW5jIGdldEJyYW5kaW5nWmlwKGNvbnRlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IFByb21pc2U8QmxvYj4ge1xuICAgIGNvbnRlbnQubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgY29udGVudEFzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY29udGVudCk7XG4gICAgY29uc3QgemlwID0gYXdhaXQgdGhpcy56aXAuY3JlYXRlWmlwKFtcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVzLm9wdGlvbnMsIGJsb2I6IG5ldyBCbG9iKFtjb250ZW50QXNTdHJpbmddKSB9LFxuICAgICAgeyBmaWxlTmFtZTogdGhpcy5maWxlTmFtZXMubWFuaWZlc3QsIGJsb2I6IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeSh0aGlzLm1hbmlmZXN0VmFsdWVzKV0pIH1cbiAgICBdKTtcbiAgICByZXR1cm4gemlwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgYnJhbmRpbmcgdmVyc2lvbiB0byB0aGUgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBhZGRCcmFuZGluZyhcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgY29udGVudDogQnJhbmRpbmdPcHRpb25zSnNvbiA9IHt9LFxuICAgIHRhZ3M6IHN0cmluZ1tdID0gW10sXG4gICAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgYmluYXJ5OiBJQXBwbGljYXRpb25CaW5hcnk7XG4gICAgdGFnczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCB6aXAgPSBhd2FpdCB0aGlzLmdldEJyYW5kaW5nWmlwKGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2F2ZUJyYW5kaW5nKHppcCwgdmVyc2lvbiwgdGFncywgcHVibGljT3B0aW9uc0FwcCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYnJhbmRpbmcgb3B0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHZlcnNpb24uXG4gICAqIElmIG5vIGJyYW5kaW5nIHdhcyBmb3VuZCAoZS5nLiBzdGF0dXMgNDA0KSwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKi9cbiAgYXN5bmMgZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbih2ZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxCcmFuZGluZ09wdGlvbnNKc29uPiB7XG4gICAgY29uc3QgdXJsID0gYC9hcHBzL3B1YmxpYy9wdWJsaWMtb3B0aW9ucyR7dmVyc2lvbiA/IGBAJHt2ZXJzaW9ufWAgOiAnJ30vJHt0aGlzLmZpbGVOYW1lcy5vcHRpb25zfT9ub2NhY2hlPSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2guZmV0Y2godXJsKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBjb250ZW50IGFzIEJyYW5kaW5nT3B0aW9uc0pzb247XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBuZXcgaXRlcmF0aW9uIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgYnJhbmRpbmcuXG4gICAqL1xuICBhc3luYyBzYXZlRXhpc3RpbmdCcmFuZGluZyhcbiAgICBicmFuZGluZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuICAgIHRhZ3NPZkN1cnJlbnRWZXJzaW9uOiBzdHJpbmdbXSA9IFtdLFxuICAgIG5ld1ZlcnNpb24/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCk7XG4gICAgY29uc3QgdmVyc2lvblRvQmVTZXQgPSBuZXdWZXJzaW9uXG4gICAgICA/IHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKG5ld1ZlcnNpb24pXG4gICAgICA6IHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5idW1wQnJhbmRpbmdJdGVyYXRpb24oY3VycmVudFZlcnNpb24pO1xuXG4gICAgY29uc3QgZmluYWxUYWdzID0gdGFnc09mQ3VycmVudFZlcnNpb247XG4gICAgLy8gb25seSBhcHBseSBsYXRlc3QgdGFnIGRpcmVjdGx5XG4gICAgLy8gdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGUgbGF0ZXN0IHRhZyBpbiB0aGUgYmFja2VuZCwgdGhhdCBhbGxvd3MgdG8gZGlyZWN0bHkgbW92ZSBpdCB3aGlsZSB1cGxvYWRpbmcgdGhlIG5ldyB2ZXJzaW9uLlxuICAgIC8vIGZvciBhbGwgb3RoZXIgdGFncyB0aGlzIHJlc3VsdHMgaW4gYSA0MDkgY29uZmxpY3QuIFdlIHRoZXJlZm9yZSBuZWVkIHRvIGZpcnN0IGRlbGV0ZSB0aGUgb2xkIHZlcnNpb24sIGJlZm9yZSBzZXR0aW5nIHRoZSBvdGhlciB0YWdzIG9uIHRoZSBuZXcgdmVyc2lvbi5cbiAgICBpZiAoIW5ld1ZlcnNpb24pIHtcbiAgICAgIHRhZ3NPZkN1cnJlbnRWZXJzaW9uID0gdGFnc09mQ3VycmVudFZlcnNpb24uZmlsdGVyKHRhZyA9PiB0YWcgPT09ICdsYXRlc3QnKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGRCcmFuZGluZyh2ZXJzaW9uVG9CZVNldCwgYnJhbmRpbmcsIHRhZ3NPZkN1cnJlbnRWZXJzaW9uLCBwdWJsaWNPcHRpb25zKTtcbiAgICBpZiAoIW5ld1ZlcnNpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQnJhbmRpbmdWZXJzaW9uKGN1cnJlbnRWZXJzaW9uLCBwdWJsaWNPcHRpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUucmVzLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcocHVibGljT3B0aW9ucywgdmVyc2lvblRvQmVTZXQsIGZpbmFsVGFncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcnNpb25Ub0JlU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIGN1cnJlbnQgYnJhbmRpbmcgb3B0aW9ucyB3aXRoIHRoZSBwcm92aWRlZCBicmFuZGluZyB2YXJpYWJsZXMgYW5kIGNyZWF0ZXMgYSBuZXcgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBBbnkgYXNzZXRzIGluIHRoZSBicmFuZGluZyB3aWxsIGJlIGNsb25lZC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVB1YmxpY09wdGlvbnNBcHBGcm9tSW5oZXJpdGVkT3B0aW9ucyhicmFuZGluZ1ZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgbGV0IGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbjtcbiAgICBsZXQgZmFsbEJhY2tCcmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgPSBhd2FpdCB0aGlzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24oKTtcbiAgICAgIGZhbGxCYWNrQnJhbmRpbmcgPSBjbG9uZURlZXAoY3VycmVudGx5QXBwbGllZEJyYW5kaW5nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBnZXQgY3VycmVudGx5IGFwcGxpZWQgYnJhbmRpbmcsIHByb2NlZWRpbmcgd2l0aCBlbXB0eSBicmFuZGluZy4nLCBlKTtcbiAgICB9XG5cbiAgICBpZiAoYnJhbmRpbmdWYXJzKSB7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgPSBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgfHwge307XG4gICAgICBjb25zdCBicmFuZGluZ0Nzc1ZhcnMgPSBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzIHx8IHt9O1xuICAgICAgT2JqZWN0LmFzc2lnbihicmFuZGluZ0Nzc1ZhcnMsIGJyYW5kaW5nVmFycyk7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzID0gYnJhbmRpbmdDc3NWYXJzO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgb2xkQXNzZXRzLCBuZXdBc3NldHMgfSA9IGF3YWl0IHRoaXMuc3RhdGljQXNzZXRzLmNsb25lQXNzZXRzSW50b1RlbmFudCgnYnJhbmRpbmcnKTtcbiAgICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gdGhpcy5yZXBsYWNlQnJhbmRpbmdBc3NldHNJbkJyYW5kaW5nT3B0aW9ucyhcbiAgICAgICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcsXG4gICAgICAgICAgb2xkQXNzZXRzLFxuICAgICAgICAgIG5ld0Fzc2V0c1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byByZWxvY2F0ZSBicmFuZGluZyBhc3NldHMgaW50byBjdXJyZW50IHRlbmFudC4nLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwdWJsaWNPcHRpb25zQXBwID0gYXdhaXQgdGhpcy5jcmVhdGVQdWJsaWNPcHRpb25zQXBwKCk7XG5cbiAgICBjb25zdCBkZWZhdWx0QnJhbmRpbmdOYW1lID0gYGRlZmF1bHRgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWRkQnJhbmRpbmcoXG4gICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbihkZWZhdWx0QnJhbmRpbmdOYW1lKSxcbiAgICAgIGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyB8fCB7fSxcbiAgICAgIFsnbGF0ZXN0JywgZGVmYXVsdEJyYW5kaW5nTmFtZV0sXG4gICAgICBwdWJsaWNPcHRpb25zQXBwXG4gICAgKTtcblxuICAgIGNvbnN0IGZhbGxiYWNrQnJhbmRpbmdOYW1lID0gYGZhbGxiYWNrYDtcbiAgICBhd2FpdCB0aGlzLmFkZEJyYW5kaW5nKFxuICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24oZmFsbGJhY2tCcmFuZGluZ05hbWUpLFxuICAgICAgZmFsbEJhY2tCcmFuZGluZyxcbiAgICAgIFtmYWxsYmFja0JyYW5kaW5nTmFtZV0sXG4gICAgICBwdWJsaWNPcHRpb25zQXBwXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGFzc2V0cyBpbiB0aGUgYnJhbmRpbmcgb3B0aW9ucyB3aXRoIHRoZSBuZXcgYXNzZXRzLlxuICAgKiBHb2VzIHRocm91Z2ggdGhlIHByb3ZpZGVkIGBvbGRBc3NldHNgIGFuZCByZXBsYWNlcyB0aGVpciBvY2N1cnJlbmNlcyBpbiB0aGUgYnJhbmRpbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBgbmV3QXNzZXRzYCBlbnRyeSBzaGFyaW5nIHRoZSBzYW1lIGZpbGVOYW1lLlxuICAgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIGJyYW5kaW5nIG9wdGlvbnMuXG4gICAqL1xuICByZXBsYWNlQnJhbmRpbmdBc3NldHNJbkJyYW5kaW5nT3B0aW9ucyhcbiAgICBicmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbixcbiAgICBvbGRBc3NldHM6IFN0YXRpY0Fzc2V0W10sXG4gICAgbmV3QXNzZXRzOiBTdGF0aWNBc3NldFtdXG4gICk6IEJyYW5kaW5nT3B0aW9uc0pzb24ge1xuICAgIGxldCBicmFuZGluZ0FzSlNPTlN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGJyYW5kaW5nKTtcbiAgICBmb3IgKGNvbnN0IG9sZEFzc2V0IG9mIG9sZEFzc2V0cykge1xuICAgICAgY29uc3QgbmV3TG9jYXRlZEFzc2V0ID0gbmV3QXNzZXRzLmZpbmQodG1wID0+IHRtcC5maWxlTmFtZSA9PT0gb2xkQXNzZXQuZmlsZU5hbWUpO1xuICAgICAgaWYgKCFuZXdMb2NhdGVkQXNzZXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgcGF0aCBpcyB0aGUgc2FtZSwgd2UgZG9uJ3QgbmVlZCB0byByZXBsYWNlIGl0LlxuICAgICAgaWYgKG9sZEFzc2V0LnBhdGggPT09IG5ld0xvY2F0ZWRBc3NldC5wYXRoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiB1c2UgcHJvcGVyIHJlcGxhY2VBbGwgb25jZSBpdCdzIGF2YWlsYWJsZSB3aXRoIGVzMjAyMVxuICAgICAgYnJhbmRpbmdBc0pTT05TdHJpbmcgPSBicmFuZGluZ0FzSlNPTlN0cmluZy5zcGxpdChvbGRBc3NldC5wYXRoKS5qb2luKG5ld0xvY2F0ZWRBc3NldC5wYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYnJhbmRpbmdBc0pTT05TdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQdWJsaWNPcHRpb25zQXBwKCkge1xuICAgIGxldCB7IGRhdGE6IGFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeU5hbWUodGhpcy5tYW5pZmVzdFZhbHVlcy5uYW1lKTtcbiAgICBhcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IGFwcC5vd25lcj8udGVuYW50Py5pZCA9PT0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlPy5uYW1lKTtcblxuICAgIHJldHVybiBhcHBzWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQdWJsaWNPcHRpb25zQXBwKCkge1xuICAgIGNvbnN0IHsgZGF0YTogYXBwIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jcmVhdGUodGhpcy5tYW5pZmVzdFZhbHVlcyk7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxufVxuIl19
383
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYnJhbmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL3N0b3JlLWJyYW5kaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBSVgsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7OztBQTJCdEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBZ0IvQixZQUNVLGtCQUFzQyxFQUN0QyxTQUEyQixFQUMzQixNQUE4QixFQUM5QixHQUFlLEVBQ2YsS0FBa0IsRUFDbEIsc0JBQThDLEVBQzlDLFFBQXlCLEVBQ3pCLFlBQWlDLEVBQ2pDLGFB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QUMsQ0FBQztRQUNoRixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7K0dBbGNVLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTs7NEZBQ25CLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBGZXRjaENsaWVudCxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25CaW5hcnksXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICBJbnZlbnRvcnlTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSwgVGhlbWVTd2l0Y2hlclNlcnZpY2UsIFppcFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGRlZmVyLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJyYW5kaW5nVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuL2JyYW5kaW5nLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBCcmFuZGluZ09wdGlvbnNKc29uLCBhbGxCcmFuZGluZ0NTU1ZhcnMsIG51bWJlckJyYW5kaW5nVmFycyB9IGZyb20gJy4vYnJhbmRpbmcudHlwZSc7XG5pbXBvcnQgeyBTdGF0aWNBc3NldCwgU3RhdGljQXNzZXRzU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvc3RhdGljLWFzc2V0cy9kYXRhJztcbmltcG9ydCB7IEJyYW5kaW5nVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi9icmFuZGluZy10cmFja2luZy5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZFZlcnNpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHJldmlzaW9uOiBudW1iZXI7XG4gIHZlcnNpb246IHN0cmluZztcbiAgdGFnczogc3RyaW5nW107XG4gIG93bmVyPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlZD86IHN0cmluZztcbiAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZGluZ0ZpbGVEZXRhaWxzIHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgYmxvYjogQmxvYjtcbiAganNvbkNvbnRlbnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRpbmdGaWxlRGV0YWlsc0xlZ2FjeSB7XG4gIHBhdGg6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgYmxvYj86IEJsb2I7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHVybFdyYXBwZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2VydmljZSB0byBsb2FkIGFuZCBzdG9yZSB0aGUgYnJhbmRpbmcgb2YgdGhlIHRlbmFudC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTdG9yZUJyYW5kaW5nU2VydmljZSB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lcyA9IHtcbiAgICBvcHRpb25zOiAnb3B0aW9ucy5qc29uJyxcbiAgICBtYW5pZmVzdDogJ2N1bXVsb2NpdHkuanNvbicsXG4gICAgZXhwb3J0WmlwTmFtZTogJ3B1YmxpYy1vcHRpb25zLnppcCdcbiAgfSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbWFuaWZlc3RWYWx1ZXMgPSB7XG4gICAgbmFtZTogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBjb250ZXh0UGF0aDogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBrZXk6ICdwdWJsaWMtb3B0aW9ucy1rZXknLFxuICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gY29udGFpbmluZyBzdGF0aWMgYXNzZXRzIHVzZWQgYnkgZS5nLiBicmFuZGluZy4nLFxuICAgIG5vQXBwU3dpdGNoZXI6IHRydWUsXG4gICAgdHlwZTogQXBwbGljYXRpb25UeXBlLkhPU1RFRCxcbiAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRFxuICB9IGFzIGNvbnN0IHNhdGlzZmllcyBJQXBwbGljYXRpb247XG4gIHJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4obnVsbCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZXRjaDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1ZlcnNpb25TZXJ2aWNlOiBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0YXRpY0Fzc2V0czogU3RhdGljQXNzZXRzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU3dpdGNoZXI6IFRoZW1lU3dpdGNoZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdUcmFja2luZzogQnJhbmRpbmdUcmFja2luZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBgbGF0ZXN0YCB0YWcgb24gdGhlIHByb3ZpZGVkIGJyYW5kaW5nIHZlcnNpb24uIE1ha2luZyBpdCB0aGUgZ2xvYmFsIGFjdGl2ZSBicmFuZGluZy5cbiAgICovXG4gIGFzeW5jIG1hcmtBc0FjdGl2ZShicmFuZGluZ1ZlcnNpb246IEJyYW5kVmVyc2lvbiwgYXBwPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGFwcCB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGNvbnN0IHRhZ3MgPSBicmFuZGluZ1ZlcnNpb24udGFncyB8fCBbXTtcbiAgICBjb25zdCB2ZXJzaW9uID0gYnJhbmRpbmdWZXJzaW9uLnZlcnNpb247XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcocHVibGljT3B0aW9ucywgdmVyc2lvbiwgWy4uLnRhZ3MsICdsYXRlc3QnXSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBuZXcgdGFiIHdpdGggdG8gcHJldmlldyB0aGUgYnJhbmRpbmcuIFRoZSBicmFuZGluZyBtdXN0IGhhdmUgYmVlbiBzYXZlZCBiZWZvcmVoYW5kLlxuICAgKiBAcGFyYW0gYnJhbmRpbmdOYW1lIHRoZSBuYW1lIG9mIHRoZSBicmFuZGluZyB0byBiZSBwcmV2aWV3ZWRcbiAgICovXG4gIG9wZW5QcmV2aWV3Rm9yQnJhbmRpbmcoYnJhbmRpbmdOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcub3BlblByZXZpZXdGb3JCcmFuZGluZygpO1xuICAgIHdpbmRvdy5vcGVuKFxuICAgICAgYC9hcHBzLyR7XG4gICAgICAgIHRoaXMuYXBwU3RhdGUuY3VycmVudEFwcGxpY2F0aW9uLnZhbHVlPy5jb250ZXh0UGF0aCB8fCAnY29ja3BpdCdcbiAgICAgIH0vaW5kZXguaHRtbD9icmFuZGluZ1ByZXZpZXc9dHJ1ZSZkeW5hbWljT3B0aW9uc1VybD0vYXBwcy9wdWJsaWMvcHVibGljLW9wdGlvbnNAJHticmFuZGluZ05hbWV9L29wdGlvbnMuanNvbmAsXG4gICAgICAnX2JsYW5rJyxcbiAgICAgICdub29wZW5lcixub3JlZmVycmVyJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYnJhbmRpbmdzIG9mIHRoZSB0ZW5hbnQuXG4gICAqIElmIG5vIHB1YmxpYyBvcHRpb25zIGFwcCBpcyBmb3VuZCwgcHVibGljT3B0aW9ucyB3aWxsIGJlIHVuZGVmaW5lZCBhbmQgdmFyaWFudHMgYW4gZW1wdHkgYXJyYXkuXG4gICAqIEZvciBvbGQgYnJhbmRpbmdzIChjcmVhdGVkIHdpdGhvdXQgdmVyc2lvbmluZykgYSBkZWZhdWx0IHZlcnNpb24gaXMgcmV0dXJuZWQuXG4gICAqL1xuICBhc3luYyBsb2FkQnJhbmRpbmdWYXJpYW50cyhcbiAgICBhcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7IHB1YmxpY09wdGlvbnM6IElBcHBsaWNhdGlvbiB8IHVuZGVmaW5lZDsgdmFyaWFudHM6IEJyYW5kVmVyc2lvbltdIH0+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG4gICAgaWYgKCFwdWJsaWNPcHRpb25zKSB7XG4gICAgICByZXR1cm4geyBwdWJsaWNPcHRpb25zOiB1bmRlZmluZWQsIHZhcmlhbnRzOiBbXSB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IHZlcnNpb25zIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0VmVyc2lvbnMocHVibGljT3B0aW9ucyk7XG4gICAgbGV0IG1hcHBlZFZlcnNpb25zOiBCcmFuZFZlcnNpb25bXSA9XG4gICAgICB2ZXJzaW9uc1xuICAgICAgICA/Lm1hcCh0bXAgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIGl0ZXJhdGlvbiB9ID1cbiAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLnNwbGl0QnJhbmRpbmdJbnRvTmFtZUFuZEl0ZXJhdGlvbih0bXAudmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByZXZpc2lvbjogaXRlcmF0aW9uLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpZDogdG1wLmJpbmFyeUlkLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiB0bXAudmVyc2lvbixcbiAgICAgICAgICAgICAgdGFnczogdG1wLnRhZ3MgfHwgW10sXG4gICAgICAgICAgICAgIHB1YmxpY09wdGlvbnNBcHA6IHB1YmxpY09wdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgdmVyc2lvbicsIHRtcCwgZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgPy5maWx0ZXIoQm9vbGVhbikgfHwgW107XG4gICAgaWYgKCF2ZXJzaW9ucyAmJiBwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCkge1xuICAgICAgbWFwcGVkVmVyc2lvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgaWQ6IHB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICAgIHZlcnNpb246ICdkZWZhdWx0LTEnLFxuICAgICAgICAgIHJldmlzaW9uOiAxLFxuICAgICAgICAgIHRhZ3M6IFsnbGF0ZXN0JywgJ2RlZmF1bHQnXSxcbiAgICAgICAgICBwdWJsaWNPcHRpb25zQXBwOiBwdWJsaWNPcHRpb25zXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFudHMgPSBhd2FpdCB0aGlzLmdldE1ldGFkYXRhT2ZCcmFuZGluZ0JpbmFyaWVzKG1hcHBlZFZlcnNpb25zKTtcbiAgICByZXR1cm4geyBwdWJsaWNPcHRpb25zLCB2YXJpYW50cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIHRoZSBicmFuZGluZyBpcyBub3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIGFmdGVyIGNyZWF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIHdhaXQgZm9yIHRoZSBicmFuZGluZyB0byBiZSBwcmVzZW50LlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgYnJhbmRpbmcgdG8gYmUgcmV0cmlldmVkLlxuICAgKi9cbiAgYXN5bmMgd2FpdEZvckJyYW5kaW5nVG9CZVByZXNlbnQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbnVtYmVyT2ZBdHRlbXB0cyA9IDEyMDtcbiAgICBjb25zdCBzbGVlcER1cmF0aW9uSW5TZWNvbmRzID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mQXR0ZW1wdHM7IGkrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gZG8gbm90IHNsZWVwIGJlZm9yZSB0aGUgZmlyc3QgYXR0ZW1wdFxuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBzbGVlcER1cmF0aW9uSW5TZWNvbmRzICogMV8wMDApKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbik7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgQnJhbmRpbmcgXCIke3ZlcnNpb259XCIgYXZhaWxhYmxlIG5vdy5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYEJyYW5kaW5nIFwiJHt2ZXJzaW9ufVwiIG5vdCB5ZXQgcHJlc2VudCwgcmV0cnlpbmcgaW4gJHtzbGVlcER1cmF0aW9uSW5TZWNvbmRzfSBzZWNvbmRzLi4uYCxcbiAgICAgICAgICBlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBCcmFuZGluZyBcIiR7dmVyc2lvbn1cIiBub3QgYXZhaWxhYmxlIGFmdGVyICR7bnVtYmVyT2ZBdHRlbXB0cyAqIHNsZWVwRHVyYXRpb25JblNlY29uZHN9IHNlY29uZHMsIGdpdmluZyB1cC5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGNyZWF0ZSBhIHRoZSBpbml0aWFsIGJyYW5kaW5nIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgYXBwbGllZCBDU1MgdmFyaWFibGVzLlxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhcnRlZFVzaW5nQnJhbmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWxsVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgdGhlbWVUb1JldHJpZXZlVmFycyA9IFsnbGlnaHQnLCAnZGFyayddIGFzIGNvbnN0O1xuICAgIGNvbnN0IHVucmV0cmlldmFibGVWYXJzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHRoZW1lIG9mIHRoZW1lVG9SZXRyaWV2ZVZhcnMpIHtcbiAgICAgIHRoaXMudGhlbWVTd2l0Y2hlci50ZW1wb3JhcnlDaGFuZ2VUaGVtZSh0aGVtZSk7XG4gICAgICBjb25zdCBzdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgICAgY29uc3QgdmFyaWFibGVzVG9Ta2lwID0gW1xuICAgICAgICAnbmF2aWdhdG9yLXBsYXRmb3JtLWxvZ28nLFxuICAgICAgICAnYnJhbmQtbG9nby1pbWcnXG4gICAgICBdIHNhdGlzZmllcyAodHlwZW9mIGFsbEJyYW5kaW5nQ1NTVmFycylbbnVtYmVyXVtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gYWxsQnJhbmRpbmdDU1NWYXJzXG4gICAgICAgIC5maWx0ZXIoY3NzVmFyID0+ICF2YXJpYWJsZXNUb1NraXAuaW5jbHVkZXMoY3NzVmFyIGFzIGFueSkpXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdFZhbHVlID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoYC0tJHtrZXl9YCk7XG4gICAgICAgICAgY29uc3QgYzh5UHJlZml4ZWRWYWx1ZSA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKGAtLWM4eS0ke2tleX1gKTtcbiAgICAgICAgICBjb25zdCBuZXdLZXkgPSB0aGVtZSA9PT0gJ2xpZ2h0JyA/IGtleSA6IGBkYXJrLSR7a2V5fWA7XG4gICAgICAgICAgaWYgKCFkaXJlY3RWYWx1ZSAmJiAhYzh5UHJlZml4ZWRWYWx1ZSkge1xuICAgICAgICAgICAgdW5yZXRyaWV2YWJsZVZhcnMucHVzaChuZXdLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyID0gZGlyZWN0VmFsdWUgfHwgYzh5UHJlZml4ZWRWYWx1ZTtcbiAgICAgICAgICBpZiAobnVtYmVyQnJhbmRpbmdWYXJzLmluY2x1ZGVzKGtleSBhcyBhbnkpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoL1tBLVphLXpdL2csICcnKS50cmltKCkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYEZhaWxlZCB0byBwYXJzZSBudW1iZXIgZm9yIFwiJHtrZXl9XCIgdmFsdWUgdGhhdCBmYWlsZWQgdG8gcGFyc2U6IFwiJHt2YWx1ZX1cImAsXG4gICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJldiwgeyBbbmV3S2V5XTogdmFsdWUgfSk7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYWxsVmFyaWFibGVzLCB2YWx1ZXMpO1xuICAgIH1cbiAgICB0aGlzLnRoZW1lU3dpdGNoZXIucmVzZXRUZW1wb3JhcnlUaGVtZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlUHVibGljT3B0aW9uc0FwcEZyb21Jbmhlcml0ZWRPcHRpb25zKGFsbFZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFppcEZvckJpbmFyeShcbiAgICBiaW5hcnlJZDogc3RyaW5nLFxuICAgIGZpbGVOYW1lOiBzdHJpbmcgPSB0aGlzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lXG4gICk6IE9ic2VydmFibGU8RmlsZT4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB0aGlzLmJpbmFyeS5kb3dubG9hZChiaW5hcnlJZCkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuYmxvYigpKSxcbiAgICAgIG1hcChibG9iID0+IG5ldyBGaWxlKFtibG9iXSwgZmlsZU5hbWUpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgcHVibGljIG9wdGlvbnMgYXBwIGFuZCB0aGVyZWZvcmUgYWxsIGJyYW5kaW5ncy5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlQWxsQnJhbmRpbmdzKHB1YmxpY09wdGlvbnM/OiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBwdWJsaWNPcHRpb25zID0gcHVibGljT3B0aW9ucyB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShwdWJsaWNPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmhhbmNlcyB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmVyc2lvbnMgd2l0aCBtZXRhZGF0YSBmcm9tIHRoZSBsaW5rZWQgYmluYXJpZXMuXG4gICAqIEl0IHdpbGwgYWRkIHRoZSBvd25lciBhbmQgbGFzdFVwZGF0ZWQgZmllbGRzIHRvIHRoZSB2ZXJzaW9ucy5cbiAgICogVGhlIHByb3ZpZGVkIGFycmF5IGlzIGFsdGVyZWQuXG4gICAqL1xuICBhc3luYyBnZXRNZXRhZGF0YU9mQnJhbmRpbmdCaW5hcmllcyh2ZXJzaW9uczogQnJhbmRWZXJzaW9uW10pOiBQcm9taXNlPEJyYW5kVmVyc2lvbltdPiB7XG4gICAgY29uc3QgYmluYXJ5SWRzID0gdW5pcSh2ZXJzaW9ucy5tYXAodG1wID0+IHRtcC5pZCkpO1xuICAgIGlmICghYmluYXJ5SWRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25zO1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IG1ldGFkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIGlkczogYmluYXJ5SWRzLmpvaW4oJywnKSxcbiAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHZlcnNpb25zLm1hcCh2ZXJzaW9uID0+IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhRm9yVmVyc2lvbiA9XG4gICAgICAgIG1ldGFkYXRhLmZpbmQodG1wID0+IHRtcC5pZCA9PT0gdmVyc2lvbi5pZCkgfHwgKHt9IGFzIElNYW5hZ2VkT2JqZWN0KTtcbiAgICAgIGNvbnN0IHsgb3duZXIsIGxhc3RVcGRhdGVkIH0gPSBtZXRhZGF0YUZvclZlcnNpb247XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih2ZXJzaW9uLCB7IG93bmVyLCBsYXN0VXBkYXRlZCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgYXMgYSBuZXcgdmVyc2lvbiBmb3IgdGhlIHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgc2F2ZUJyYW5kaW5nKFxuICAgIGJsb2I6IEJsb2IgfCBGaWxlLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgZmlsZSA9IGJsb2IgaW5zdGFuY2VvZiBGaWxlID8gYmxvYiA6IG5ldyBGaWxlKFtibG9iXSwgYHB1YmxpYy1vcHRpb25zLSR7dmVyc2lvbn0uemlwYCk7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnNBcHAgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcblxuICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5IH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZVxuICAgICAgLmJpbmFyeShwdWJsaWNPcHRpb25zKVxuICAgICAgLnVwbG9hZEFwcGxpY2F0aW9uVmVyc2lvbihmaWxlLCB2ZXJzaW9uLCB0YWdzKTtcbiAgICBpZiAoIXB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkIHx8IHRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoe1xuICAgICAgICBpZDogcHVibGljT3B0aW9ucy5pZCxcbiAgICAgICAgYWN0aXZlVmVyc2lvbklkOiBgJHtiaW5hcnkuYmluYXJ5SWR9YFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFRyaWdnZXJCcmFuZGluZ1ZhcmlhbnRzLm5leHQoKTtcbiAgICByZXR1cm4geyB2ZXJzaW9uLCBiaW5hcnksIHRhZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgYnJhbmRpbmcgdmVyc2lvbiBmcm9tIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcsIHB1YmxpY09wdGlvbnM/OiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBwdWJsaWNPcHRpb25zID0gcHVibGljT3B0aW9ucyB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZVZlcnNpb25QYWNrYWdlKHB1YmxpY09wdGlvbnMsIHsgdmVyc2lvbiB9KTtcbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmxvYiBvZiBhIHppcCBmaWxlIGNvbnRhaW5pbmcgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIG9wdGlvbnMgKG9wdGlvbnMuanNvbikgYW5kIHRoZSBtYW5pZmVzdCAoY3VtdWxvY2l0eS5qc29uKS5cbiAgICovXG4gIGFzeW5jIGdldEJyYW5kaW5nWmlwKGNvbnRlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IFByb21pc2U8QmxvYj4ge1xuICAgIGNvbnRlbnQubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgY29udGVudEFzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY29udGVudCk7XG4gICAgY29uc3QgemlwID0gYXdhaXQgdGhpcy56aXAuY3JlYXRlWmlwKFtcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVzLm9wdGlvbnMsIGJsb2I6IG5ldyBCbG9iKFtjb250ZW50QXNTdHJpbmddKSB9LFxuICAgICAgeyBmaWxlTmFtZTogdGhpcy5maWxlTmFtZXMubWFuaWZlc3QsIGJsb2I6IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeSh0aGlzLm1hbmlmZXN0VmFsdWVzKV0pIH1cbiAgICBdKTtcbiAgICByZXR1cm4gemlwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgYnJhbmRpbmcgdmVyc2lvbiB0byB0aGUgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBhZGRCcmFuZGluZyhcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgY29udGVudDogQnJhbmRpbmdPcHRpb25zSnNvbiA9IHt9LFxuICAgIHRhZ3M6IHN0cmluZ1tdID0gW10sXG4gICAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgYmluYXJ5OiBJQXBwbGljYXRpb25CaW5hcnk7XG4gICAgdGFnczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCB6aXAgPSBhd2FpdCB0aGlzLmdldEJyYW5kaW5nWmlwKGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2F2ZUJyYW5kaW5nKHppcCwgdmVyc2lvbiwgdGFncywgcHVibGljT3B0aW9uc0FwcCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYnJhbmRpbmcgb3B0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHZlcnNpb24uXG4gICAqIElmIG5vIGJyYW5kaW5nIHdhcyBmb3VuZCAoZS5nLiBzdGF0dXMgNDA0KSwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKi9cbiAgYXN5bmMgZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbih2ZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxCcmFuZGluZ09wdGlvbnNKc29uPiB7XG4gICAgY29uc3QgdXJsID0gYC9hcHBzL3B1YmxpYy9wdWJsaWMtb3B0aW9ucyR7dmVyc2lvbiA/IGBAJHt2ZXJzaW9ufWAgOiAnJ30vJHt0aGlzLmZpbGVOYW1lcy5vcHRpb25zfT9ub2NhY2hlPSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2guZmV0Y2godXJsKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBjb250ZW50IGFzIEJyYW5kaW5nT3B0aW9uc0pzb247XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBuZXcgaXRlcmF0aW9uIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgYnJhbmRpbmcuXG4gICAqL1xuICBhc3luYyBzYXZlRXhpc3RpbmdCcmFuZGluZyhcbiAgICBicmFuZGluZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuICAgIHRhZ3NPZkN1cnJlbnRWZXJzaW9uOiBzdHJpbmdbXSA9IFtdLFxuICAgIG5ld1ZlcnNpb24/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCk7XG4gICAgY29uc3QgdmVyc2lvblRvQmVTZXQgPSBuZXdWZXJzaW9uXG4gICAgICA/IHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKG5ld1ZlcnNpb24pXG4gICAgICA6IHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5idW1wQnJhbmRpbmdJdGVyYXRpb24oY3VycmVudFZlcnNpb24pO1xuXG4gICAgY29uc3QgZmluYWxUYWdzID0gdGFnc09mQ3VycmVudFZlcnNpb247XG4gICAgLy8gb25seSBhcHBseSBsYXRlc3QgdGFnIGRpcmVjdGx5XG4gICAgLy8gdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGUgbGF0ZXN0IHRhZyBpbiB0aGUgYmFja2VuZCwgdGhhdCBhbGxvd3MgdG8gZGlyZWN0bHkgbW92ZSBpdCB3aGlsZSB1cGxvYWRpbmcgdGhlIG5ldyB2ZXJzaW9uLlxuICAgIC8vIGZvciBhbGwgb3RoZXIgdGFncyB0aGlzIHJlc3VsdHMgaW4gYSA0MDkgY29uZmxpY3QuIFdlIHRoZXJlZm9yZSBuZWVkIHRvIGZpcnN0IGRlbGV0ZSB0aGUgb2xkIHZlcnNpb24sIGJlZm9yZSBzZXR0aW5nIHRoZSBvdGhlciB0YWdzIG9uIHRoZSBuZXcgdmVyc2lvbi5cbiAgICBpZiAoIW5ld1ZlcnNpb24pIHtcbiAgICAgIHRhZ3NPZkN1cnJlbnRWZXJzaW9uID0gdGFnc09mQ3VycmVudFZlcnNpb24uZmlsdGVyKHRhZyA9PiB0YWcgPT09ICdsYXRlc3QnKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGRCcmFuZGluZyh2ZXJzaW9uVG9CZVNldCwgYnJhbmRpbmcsIHRhZ3NPZkN1cnJlbnRWZXJzaW9uLCBwdWJsaWNPcHRpb25zKTtcbiAgICBpZiAoIW5ld1ZlcnNpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQnJhbmRpbmdWZXJzaW9uKGN1cnJlbnRWZXJzaW9uLCBwdWJsaWNPcHRpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUucmVzLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcocHVibGljT3B0aW9ucywgdmVyc2lvblRvQmVTZXQsIGZpbmFsVGFncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcnNpb25Ub0JlU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIGN1cnJlbnQgYnJhbmRpbmcgb3B0aW9ucyB3aXRoIHRoZSBwcm92aWRlZCBicmFuZGluZyB2YXJpYWJsZXMgYW5kIGNyZWF0ZXMgYSBuZXcgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBBbnkgYXNzZXRzIGluIHRoZSBicmFuZGluZyB3aWxsIGJlIGNsb25lZC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVB1YmxpY09wdGlvbnNBcHBGcm9tSW5oZXJpdGVkT3B0aW9ucyhicmFuZGluZ1ZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgbGV0IGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbjtcbiAgICBsZXQgZmFsbEJhY2tCcmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgPSBhd2FpdCB0aGlzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24oKTtcbiAgICAgIGZhbGxCYWNrQnJhbmRpbmcgPSBjbG9uZURlZXAoY3VycmVudGx5QXBwbGllZEJyYW5kaW5nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBnZXQgY3VycmVudGx5IGFwcGxpZWQgYnJhbmRpbmcsIHByb2NlZWRpbmcgd2l0aCBlbXB0eSBicmFuZGluZy4nLCBlKTtcbiAgICB9XG5cbiAgICBpZiAoYnJhbmRpbmdWYXJzKSB7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgPSBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgfHwge307XG4gICAgICBjb25zdCBicmFuZGluZ0Nzc1ZhcnMgPSBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzIHx8IHt9O1xuICAgICAgT2JqZWN0LmFzc2lnbihicmFuZGluZ0Nzc1ZhcnMsIGJyYW5kaW5nVmFycyk7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzID0gYnJhbmRpbmdDc3NWYXJzO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgb2xkQXNzZXRzLCBuZXdBc3NldHMgfSA9IGF3YWl0IHRoaXMuc3RhdGljQXNzZXRzLmNsb25lQXNzZXRzSW50b1RlbmFudCgnYnJhbmRpbmcnKTtcbiAgICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gdGhpcy5yZXBsYWNlQnJhbmRpbmdBc3NldHNJbkJyYW5kaW5nT3B0aW9ucyhcbiAgICAgICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcsXG4gICAgICAgICAgb2xkQXNzZXRzLFxuICAgICAgICAgIG5ld0Fzc2V0c1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byByZWxvY2F0ZSBicmFuZGluZyBhc3NldHMgaW50byBjdXJyZW50IHRlbmFudC4nLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwdWJsaWNPcHRpb25zQXBwID0gYXdhaXQgdGhpcy5jcmVhdGVQdWJsaWNPcHRpb25zQXBwKCk7XG5cbiAgICBjb25zdCBkZWZhdWx0QnJhbmRpbmdOYW1lID0gYGRlZmF1bHRgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWRkQnJhbmRpbmcoXG4gICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbihkZWZhdWx0QnJhbmRpbmdOYW1lKSxcbiAgICAgIGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyB8fCB7fSxcbiAgICAgIFsnbGF0ZXN0JywgZGVmYXVsdEJyYW5kaW5nTmFtZV0sXG4gICAgICBwdWJsaWNPcHRpb25zQXBwXG4gICAgKTtcblxuICAgIGNvbnN0IGZhbGxiYWNrQnJhbmRpbmdOYW1lID0gYGZhbGxiYWNrYDtcbiAgICBhd2FpdCB0aGlzLmFkZEJyYW5kaW5nKFxuICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24oZmFsbGJhY2tCcmFuZGluZ05hbWUpLFxuICAgICAgZmFsbEJhY2tCcmFuZGluZyxcbiAgICAgIFtmYWxsYmFja0JyYW5kaW5nTmFtZV0sXG4gICAgICBwdWJsaWNPcHRpb25zQXBwXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGFzc2V0cyBpbiB0aGUgYnJhbmRpbmcgb3B0aW9ucyB3aXRoIHRoZSBuZXcgYXNzZXRzLlxuICAgKiBHb2VzIHRocm91Z2ggdGhlIHByb3ZpZGVkIGBvbGRBc3NldHNgIGFuZCByZXBsYWNlcyB0aGVpciBvY2N1cnJlbmNlcyBpbiB0aGUgYnJhbmRpbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBgbmV3QXNzZXRzYCBlbnRyeSBzaGFyaW5nIHRoZSBzYW1lIGZpbGVOYW1lLlxuICAgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIGJyYW5kaW5nIG9wdGlvbnMuXG4gICAqL1xuICByZXBsYWNlQnJhbmRpbmdBc3NldHNJbkJyYW5kaW5nT3B0aW9ucyhcbiAgICBicmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbixcbiAgICBvbGRBc3NldHM6IFN0YXRpY0Fzc2V0W10sXG4gICAgbmV3QXNzZXRzOiBTdGF0aWNBc3NldFtdXG4gICk6IEJyYW5kaW5nT3B0aW9uc0pzb24ge1xuICAgIGxldCBicmFuZGluZ0FzSlNPTlN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGJyYW5kaW5nKTtcbiAgICBmb3IgKGNvbnN0IG9sZEFzc2V0IG9mIG9sZEFzc2V0cykge1xuICAgICAgY29uc3QgbmV3TG9jYXRlZEFzc2V0ID0gbmV3QXNzZXRzLmZpbmQodG1wID0+IHRtcC5maWxlTmFtZSA9PT0gb2xkQXNzZXQuZmlsZU5hbWUpO1xuICAgICAgaWYgKCFuZXdMb2NhdGVkQXNzZXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgcGF0aCBpcyB0aGUgc2FtZSwgd2UgZG9uJ3QgbmVlZCB0byByZXBsYWNlIGl0LlxuICAgICAgaWYgKG9sZEFzc2V0LnBhdGggPT09IG5ld0xvY2F0ZWRBc3NldC5wYXRoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiB1c2UgcHJvcGVyIHJlcGxhY2VBbGwgb25jZSBpdCdzIGF2YWlsYWJsZSB3aXRoIGVzMjAyMVxuICAgICAgYnJhbmRpbmdBc0pTT05TdHJpbmcgPSBicmFuZGluZ0FzSlNPTlN0cmluZy5zcGxpdChvbGRBc3NldC5wYXRoKS5qb2luKG5ld0xvY2F0ZWRBc3NldC5wYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYnJhbmRpbmdBc0pTT05TdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQdWJsaWNPcHRpb25zQXBwKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGE6IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRNYW5pZmVzdE9mQ29udGV4dFBhdGgoXG4gICAgICAgIHRoaXMubWFuaWZlc3RWYWx1ZXMuY29udGV4dFBhdGhcbiAgICAgICk7XG4gICAgICBjb25zdCB7IGRhdGE6IGFwcCB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGV0YWlsKG1hbmlmZXN0LmlkKTtcbiAgICAgIGlmIChhcHAub3duZXIudGVuYW50LmlkICE9PSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRUZW5hbnQudmFsdWU/Lm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcHA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZS5nLiByZWFjaGVkIHdoZW4gbm8gYXBwIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgcGF0aCBleGlzdHNcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQdWJsaWNPcHRpb25zQXBwKCkge1xuICAgIGNvbnN0IHsgZGF0YTogYXBwIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jcmVhdGUodGhpcy5tYW5pZmVzdFZhbHVlcyk7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxufVxuIl19
@@ -52,8 +52,8 @@ export class DateTimePickerComponent {
52
52
  // eslint-disable-next-line @typescript-eslint/no-empty-function
53
53
  this.onTouched = () => { };
54
54
  this.form = new FormGroup({});
55
- this.form.addControl('date', new FormControl(null));
56
- this.form.addControl('time', new FormControl(null));
55
+ this.form.addControl('date', new FormControl(undefined));
56
+ this.form.addControl('time', new FormControl(undefined));
57
57
  this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {
58
58
  this.setDatetime(value);
59
59
  this.previousValue = value;
@@ -80,19 +80,26 @@ export class DateTimePickerComponent {
80
80
  ngAfterViewInit() {
81
81
  this.cd.detectChanges();
82
82
  }
83
+ onTimeChange(time) {
84
+ this.form.get('time').setValue(time, { emitEvent: true });
85
+ }
86
+ get dateControl() {
87
+ return this.form.get('date');
88
+ }
83
89
  /**
84
90
  * Control Value Accessor - If form value changes by external factor, update date property and internal form with new value.
85
91
  */
86
92
  writeValue(value) {
87
93
  if (typeof value === 'string' && value.length) {
88
94
  this.date = new Date(value);
95
+ this.time = this.date;
89
96
  this.form.setValue({
90
97
  date: new Date(value),
91
98
  time: this.date
92
99
  }, { emitEvent: false });
93
100
  }
94
101
  else {
95
- this.form.setValue({ date: null, time: null }, { emitEvent: false });
102
+ return;
96
103
  }
97
104
  this.previousValue = this.form.value;
98
105
  }
@@ -171,27 +178,33 @@ export class DateTimePickerComponent {
171
178
  // if date input is cleared from a previous correct value, clear form value:
172
179
  if (this.isInputCleared(dateTime)) {
173
180
  this.form.get('date').setValue(undefined, { emitEvent: false });
181
+ this.time = undefined;
174
182
  this.form.get('time').setValue(undefined, { emitEvent: false });
175
183
  this.onChange(null);
176
184
  return;
177
185
  }
186
+ const validTime = this.verifyDate(dateTime.time);
187
+ const validExistingTime = this.verifyDate(this.time);
188
+ const validDate = this.verifyDate(dateTime.date);
189
+ if (!validTime && !validExistingTime) {
190
+ // Ensure dateTime.date exists before using getFullYear:
191
+ if (dateTime.date) {
192
+ dateTime.time = new Date(dateTime.date.getFullYear(), dateTime.date.getMonth(), dateTime.date.getDate(), 0, 0, 0);
193
+ this.time = dateTime.time;
194
+ }
195
+ }
178
196
  // if both date and time is invalid, do set form value to null and stop:
179
- if (!this.verifyDate(dateTime.date) && !this.verifyDate(dateTime.time)) {
197
+ if (!validDate && !validTime) {
180
198
  this.onChange(null);
181
199
  return;
182
200
  }
183
201
  // If only time is provided, set Date to today:
184
- if (!this.verifyDate(dateTime.date) && this.verifyDate(dateTime.time)) {
202
+ if (!validDate && validTime) {
185
203
  dateTime.date = new Date(dateTime.time);
186
204
  }
187
- // If only date is provided, set time to 00:00:
188
- if (this.verifyDate(dateTime.date) && !this.verifyDate(dateTime.time)) {
189
- dateTime.time = new Date(dateTime.date.getFullYear(), dateTime.date.getMonth(), dateTime.date.getDate(), 0, 0, 0);
190
- this.form.get('time').setValue(dateTime.time, { emitEvent: false });
191
- }
192
205
  // Merge date and time, and emit as new form value:
193
206
  this.date = new Date(dateTime.date);
194
- this.date.setHours(dateTime.time.getHours(), dateTime.time.getMinutes());
207
+ this.date.setHours(this.time.getHours(), this.time.getMinutes());
195
208
  this.form.get('date').setValue(dateTime.date, { emitEvent: false });
196
209
  this.onChange(this.date.toISOString());
197
210
  }
@@ -214,7 +227,7 @@ export class DateTimePickerComponent {
214
227
  useExisting: forwardRef(() => DateTimePickerComponent),
215
228
  multi: true
216
229
  }
217
- ], viewQueries: [{ propertyName: "datepicker", first: true, predicate: BsDatepickerDirective, descendants: true }], ngImport: i0, template: "<div\n class=\"datetime-picker\"\n [ngSwitch]=\"dateType\"\n>\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateAndTime'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n data-cy=\"bootstrap-date-input\"\n style=\"min-width: 120px\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"form.get('date')\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [formControl]=\"form.get('time')\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Date'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"form.get('date')\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateRange'\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Select a date range' | translate }}\"\n [formControl]=\"form.get('date')\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n adaptivePosition: true,\n rangeInputFormat: dateInputFormat\n }\"\n bsDaterangepicker\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Time'\"\n >\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [formControl]=\"form.get('time')\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div *ngSwitchCase=\"'SingleDateRequired'\">\n <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: CloseDatePickerDirective, selector: "[closeDatepicker]", inputs: ["closeDatepicker"] }, { kind: "ngmodule", type: BsDatepickerModule }, { kind: "directive", type: i2.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i2.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i2.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i2.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TimepickerModule }, { kind: "component", type: i4.TimepickerComponent, selector: "timepicker", inputs: ["hourStep", "minuteStep", "secondsStep", "readonlyInput", "disabled", "mousewheel", "arrowkeys", "showSpinners", "showMeridian", "showMinutes", "showSeconds", "meridians", "min", "max", "hoursPlaceholder", "minutesPlaceholder", "secondsPlaceholder"], outputs: ["isValid", "meridianChange"] }, { kind: "component", type: DatePickerComponent, selector: "c8y-date-picker", inputs: ["placeholder", "dateInputFormat"], outputs: ["onDateSelected"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
230
+ ], viewQueries: [{ propertyName: "datepicker", first: true, predicate: BsDatepickerDirective, descendants: true }], ngImport: i0, template: "<div\n class=\"datetime-picker\"\n [ngSwitch]=\"dateType\"\n>\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateAndTime'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n data-cy=\"bootstrap-date-input\"\n style=\"min-width: 120px\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"dateControl\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [(ngModel)]=\"time\"\n (ngModelChange)=\"onTimeChange($event)\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Date'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"dateControl\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateRange'\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Select a date range' | translate }}\"\n [formControl]=\"dateControl\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n adaptivePosition: true,\n rangeInputFormat: dateInputFormat\n }\"\n bsDaterangepicker\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Time'\"\n >\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [(ngModel)]=\"time\"\n (ngModelChange)=\"onTimeChange($event)\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div *ngSwitchCase=\"'SingleDateRequired'\">\n <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: CloseDatePickerDirective, selector: "[closeDatepicker]", inputs: ["closeDatepicker"] }, { kind: "ngmodule", type: BsDatepickerModule }, { kind: "directive", type: i2.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i2.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i2.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i2.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TimepickerModule }, { kind: "component", type: i4.TimepickerComponent, selector: "timepicker", inputs: ["hourStep", "minuteStep", "secondsStep", "readonlyInput", "disabled", "mousewheel", "arrowkeys", "showSpinners", "showMeridian", "showMinutes", "showSeconds", "meridians", "min", "max", "hoursPlaceholder", "minutesPlaceholder", "secondsPlaceholder"], outputs: ["isValid", "meridianChange"] }, { kind: "component", type: DatePickerComponent, selector: "c8y-date-picker", inputs: ["placeholder", "dateInputFormat"], outputs: ["onDateSelected"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
218
231
  }
219
232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateTimePickerComponent, decorators: [{
220
233
  type: Component,
@@ -239,7 +252,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
239
252
  TimepickerModule,
240
253
  DatePickerComponent,
241
254
  C8yTranslatePipe
242
- ], template: "<div\n class=\"datetime-picker\"\n [ngSwitch]=\"dateType\"\n>\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateAndTime'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n data-cy=\"bootstrap-date-input\"\n style=\"min-width: 120px\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"form.get('date')\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [formControl]=\"form.get('time')\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Date'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"form.get('date')\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateRange'\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Select a date range' | translate }}\"\n [formControl]=\"form.get('date')\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n adaptivePosition: true,\n rangeInputFormat: dateInputFormat\n }\"\n bsDaterangepicker\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Time'\"\n >\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [formControl]=\"form.get('time')\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div *ngSwitchCase=\"'SingleDateRequired'\">\n <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n </div>\n </div>\n</div>\n" }]
255
+ ], template: "<div\n class=\"datetime-picker\"\n [ngSwitch]=\"dateType\"\n>\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateAndTime'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n data-cy=\"bootstrap-date-input\"\n style=\"min-width: 120px\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"dateControl\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [(ngModel)]=\"time\"\n (ngModelChange)=\"onTimeChange($event)\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Date'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"dateControl\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateRange'\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Select a date range' | translate }}\"\n [formControl]=\"dateControl\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n adaptivePosition: true,\n rangeInputFormat: dateInputFormat\n }\"\n bsDaterangepicker\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Time'\"\n >\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [(ngModel)]=\"time\"\n (ngModelChange)=\"onTimeChange($event)\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div *ngSwitchCase=\"'SingleDateRequired'\">\n <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n </div>\n </div>\n</div>\n" }]
243
256
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DateFormatService }], propDecorators: { _minDate: [{
244
257
  type: Input,
245
258
  args: ['minDate']
@@ -264,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
264
277
  type: ViewChild,
265
278
  args: [BsDatepickerDirective]
266
279
  }] } });
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixpQkFBaUIsRUFHakIsV0FBVyxFQUNYLG1CQUFtQixFQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJGLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JB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SyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixjQUNXLElBQUksV0FDUDt3QkFDUCxRQUFRO3dCQUNSLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4QixrQkFBa0I7d0JBQ2xCLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3FCQUNqQjtzSEFRRyxRQUFRO3NCQURYLEtBQUs7dUJBQUMsU0FBUztnQkFRWixRQUFRO3NCQURYLEtBQUs7dUJBQUMsU0FBUztnQkFNaEIsV0FBVztzQkFEVixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBZU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFRTixjQUFjO3NCQURiLE1BQU07Z0JBUTJCLFVBQVU7c0JBQTNDLFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbiAgRm9ybXNNb2R1bGUsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGVcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZmlyc3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSwgQnNEYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcbmltcG9ydCB7IFBpY2tlZERhdGVzIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDbG9zZURhdGVQaWNrZXJEaXJlY3RpdmUgfSBmcm9tICcuL2Nsb3NlLWRhdGUtcGlja2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUaW1lcGlja2VyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90aW1lcGlja2VyJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQzh5VHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uL2kxOG4vYzh5LXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IERhdGVGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL2RhdGUtZm9ybWF0LnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgRGF0ZUFuZFRpbWUge1xuICBkYXRlOiBEYXRlO1xuICB0aW1lOiBEYXRlO1xufVxuXG5pbnRlcmZhY2UgRGF0ZUFuZFRpbWVPcHRpb25zIHtcbiAgc2hvd1NwaW5uZXJzPzogYm9vbGVhbjtcbiAgc2hvd01lcmlkaWFuPzogYm9vbGVhbjtcbiAgc2hvd01pbnV0ZXM/OiBib29sZWFuO1xuICBzaG93U2Vjb25kcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERhdGVUeXBlID0gJ0RhdGVBbmRUaW1lJyB8ICdEYXRlJyB8ICdEYXRlUmFuZ2UnIHwgJ1NpbmdsZURhdGVSZXF1aXJlZCcgfCAnVGltZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRlLXRpbWUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1N3aXRjaCxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgQ2xvc2VEYXRlUGlja2VyRGlyZWN0aXZlLFxuICAgIEJzRGF0ZXBpY2tlck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRpbWVwaWNrZXJNb2R1bGUsXG4gICAgRGF0ZVBpY2tlckNvbXBvbmVudCxcbiAgICBDOHlUcmFuc2xhdGVQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICBtaW5EYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgnbWluRGF0ZScpXG4gIHNldCBfbWluRGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5taW5EYXRlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBtYXhEYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgnbWF4RGF0ZScpXG4gIHNldCBfbWF4RGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXhEYXRlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGRhdGVJbnB1dEZvcm1hdDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGFkYXB0aXZlUG9zaXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzaXplOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBkYXRlIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gRGF0ZUFuZFRpbWUgLSBEaXNwbGF5IGJvdGggZGF0ZSBhbmQgdGltZS5cbiAgICogQHBhcmFtIERhdGUgLSBEaXNwbGF5IG9ubHkgdGhlIGRhdGUgd2l0aG91dCB0aGUgdGltZS5cbiAgICogQHBhcmFtIERhdGVSYW5nZSAtIFNwZWNpZnkgYSByYW5nZSBvZiBkYXRlcy5cbiAgICogQHBhcmFtIFNpbmdsZURhdGVSZXF1aXJlZCAtIFJlcXVpcmUgdGhlIHNlbGVjdGlvbiBvZiBhIHNpbmdsZSBkYXRlLlxuICAgKiBAcGFyYW0gVGltZSAtIERpc3BsYXkgb25seSB0aGUgdGltZSB3aXRob3V0IHRoZSBkYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlICdEYXRlQW5kVGltZSdcbiAgICovXG4gIEBJbnB1dCgpXG4gIGRhdGVUeXBlOiBEYXRlVHlwZSA9ICdEYXRlQW5kVGltZSc7XG5cbiAgQElucHV0KClcbiAgY29uZmlnOiBEYXRlQW5kVGltZU9wdGlvbnMgPSB7XG4gICAgc2hvd01pbnV0ZXM6IHRydWUsXG4gICAgc2hvd1NlY29uZHM6IGZhbHNlLFxuICAgIHNob3dTcGlubmVyczogZmFsc2VcbiAgfTtcblxuICBAT3V0cHV0KClcbiAgb25EYXRlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxQaWNrZWREYXRlcz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZGF0ZTogRGF0ZTtcbiAgZm9ybTogRm9ybUdyb3VwO1xuXG4gIGRlZmF1bHRQbGFjZWhvbGRlciA9IGdldHRleHQoJ1NlbGVjdCBhIGRhdGXigKYnKTtcblxuICBAVmlld0NoaWxkKEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSkgZGF0ZXBpY2tlcjogQnNEYXRlcGlja2VyRGlyZWN0aXZlO1xuXG4gIHByaXZhdGUgcHJldmlvdXNWYWx1ZTogRGF0ZUFuZFRpbWU7XG4gIHByaXZhdGUgcHJldmlvdXNUaW1lUGlja2VyVmFsdWVzOiB7IGhvdXJzPzogbnVtYmVyOyBtaW51dGVzPzogbnVtYmVyIH0gPSB7fTtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBkYXRlRm9ybWF0U2VydmljZTogRGF0ZUZvcm1hdFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ2RhdGUnLCBuZXcgRm9ybUNvbnRyb2wobnVsbCkpO1xuICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCd0aW1lJywgbmV3IEZvcm1Db250cm9sKG51bGwpKTtcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlOiBEYXRlQW5kVGltZSkgPT4ge1xuICAgICAgdGhpcy5zZXREYXRldGltZSh2YWx1ZSk7XG4gICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm0uc3RhdHVzQ2hhbmdlc1xuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRlSW5wdXRGb3JtYXQpIHtcbiAgICAgIHRoaXMuZGF0ZUlucHV0Rm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0U2VydmljZS5nZXREYXRlRm9ybWF0KCk7XG4gICAgfVxuICAgIGlmICghKCdzaG93TWVyaWRpYW4nIGluIHRoaXMuY29uZmlnKSkge1xuICAgICAgdGhpcy5jb25maWcuc2hvd01lcmlkaWFuID0gdGhpcy5kYXRlRm9ybWF0U2VydmljZS5zaG91bGRVc2VNZXJpZGlhbkZvcm1hdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9sIFZhbHVlIEFjY2Vzc29yIC0gSWYgZm9ybSB2YWx1ZSBjaGFuZ2VzIGJ5IGV4dGVybmFsIGZhY3RvciwgdXBkYXRlIGRhdGUgcHJvcGVydHkgYW5kIGludGVybmFsIGZvcm0gd2l0aCBuZXcgdmFsdWUuXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKHZhbHVlKSxcbiAgICAgICAgICB0aW1lOiB0aGlzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh7IGRhdGU6IG51bGwsIHRpbWU6IG51bGwgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChkaXNhYmxlZCA9PT0gdGhpcy5mb3JtPy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaXNhYmxlZCA/IHRoaXMuZm9ybS5kaXNhYmxlKCkgOiB0aGlzLmZvcm0uZW5hYmxlKCk7XG4gIH1cblxuICB2YWxpZGF0ZShfY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICh0aGlzLmRhdGU/LmdldFRpbWUoKSA8IG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0VGltZSgpKSB7XG4gICAgICByZXR1cm4geyBkYXRlQmVmb3JlUmFuZ2VNaW46IHRydWUgfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZT8uZ2V0VGltZSgpID4gbmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRUaW1lKCkpIHtcbiAgICAgIHJldHVybiB7IGRhdGVBZnRlclJhbmdlTWF4OiB0cnVlIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgcmV0dXJuIHsgaW52YWxpZERhdGVUaW1lOiB0cnVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByZXZpb3VzRGF5KCkge1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuZGF0ZXBpY2tlci5pc09wZW47XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSAtIDEpO1xuICAgIHRoaXMuc2V0RGF0ZXRpbWUoeyBkYXRlOiB0aGlzLmRhdGUsIHRpbWU6IHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS52YWx1ZSB9KTtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXIuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIG5leHREYXkoKSB7XG4gICAgY29uc3QgaXNPcGVuID0gdGhpcy5kYXRlcGlja2VyLmlzT3BlbjtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZSh0aGlzLmRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgdGhpcy5zZXREYXRldGltZSh7IGRhdGU6IHRoaXMuZGF0ZSwgdGltZTogdGhpcy5mb3JtLmdldCgndGltZScpLnZhbHVlIH0pO1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVwaWNrZXIuaGlkZSgpO1xuICB9XG5cbiAgaGFuZGxlTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGhvdXJzID0gdGhpcy5mb3JtLmdldCgndGltZScpLnZhbHVlLmdldEhvdXJzKCk7XG4gICAgY29uc3QgbWludXRlcyA9IHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS52YWx1ZS5nZXRNaW51dGVzKCk7XG4gICAgLy8gZG93blxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50LmRlbHRhWSA+IDApIHtcbiAgICAgIGlmIChOdW1iZXIoaG91cnMpID09PSAyMyAmJiB0aGlzLnByZXZpb3VzVGltZVBpY2tlclZhbHVlcy5ob3VycyAhPT0gMjMpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0RheSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwXG4gICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzVGltZVBpY2tlclZhbHVlcy5ob3VycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHNjcm9sbGluZyB1cCBvbiBlbXB0eSBmb3JtIHNob3VsZCBub3QgcmVzdWx0IGluIGluY3JlYXNpbmcgZGF5LlxuICAgICAgfSBlbHNlIGlmIChOdW1iZXIoaG91cnMpID09PSAwICYmIHRoaXMucHJldmlvdXNUaW1lUGlja2VyVmFsdWVzLmhvdXJzICE9PSAwKSB7XG4gICAgICAgIHRoaXMubmV4dERheSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzVGltZVBpY2tlclZhbHVlcyA9IHsgaG91cnMsIG1pbnV0ZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBpbnRlcm5hbCBmb3JtIGNoYW5nZXMgaXRzIHZhbHVlLCB0aGVuIGNvbWJpbmUgZGF0ZSBhbmQgdGltZSBpbnRvIG9uZSBEYXRlIGFuZCBwYXNzIGl0cyBJU08gc3RyaW5nIHZhbHVlIHRvIG9uQ2hhbmdlIG1ldGhvZFxuICAgKiBAcGFyYW0gZGF0ZVRpbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0RGF0ZXRpbWUoZGF0ZVRpbWU6IERhdGVBbmRUaW1lKSB7XG4gICAgLy8gaWYgZGF0ZSBpbnB1dCBpcyBjbGVhcmVkIGZyb20gYSBwcmV2aW91cyBjb3JyZWN0IHZhbHVlLCBjbGVhciBmb3JtIHZhbHVlOlxuICAgIGlmICh0aGlzLmlzSW5wdXRDbGVhcmVkKGRhdGVUaW1lKSkge1xuICAgICAgdGhpcy5mb3JtLmdldCgnZGF0ZScpLnNldFZhbHVlKHVuZGVmaW5lZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5mb3JtLmdldCgndGltZScpLnNldFZhbHVlKHVuZGVmaW5lZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiBib3RoIGRhdGUgYW5kIHRpbWUgaXMgaW52YWxpZCwgZG8gc2V0IGZvcm0gdmFsdWUgdG8gbnVsbCBhbmQgc3RvcDpcbiAgICBpZiAoIXRoaXMudmVyaWZ5RGF0ZShkYXRlVGltZS5kYXRlKSAmJiAhdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLnRpbWUpKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJZiBvbmx5IHRpbWUgaXMgcHJvdmlkZWQsIHNldCBEYXRlIHRvIHRvZGF5OlxuICAgIGlmICghdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLmRhdGUpICYmIHRoaXMudmVyaWZ5RGF0ZShkYXRlVGltZS50aW1lKSkge1xuICAgICAgZGF0ZVRpbWUuZGF0ZSA9IG5ldyBEYXRlKGRhdGVUaW1lLnRpbWUpO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgZGF0ZSBpcyBwcm92aWRlZCwgc2V0IHRpbWUgdG8gMDA6MDA6XG4gICAgaWYgKHRoaXMudmVyaWZ5RGF0ZShkYXRlVGltZS5kYXRlKSAmJiAhdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLnRpbWUpKSB7XG4gICAgICBkYXRlVGltZS50aW1lID0gbmV3IERhdGUoXG4gICAgICAgIGRhdGVUaW1lLmRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgZGF0ZVRpbWUuZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICBkYXRlVGltZS5kYXRlLmdldERhdGUoKSxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS5zZXRWYWx1ZShkYXRlVGltZS50aW1lLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgZGF0ZSBhbmQgdGltZSwgYW5kIGVtaXQgYXMgbmV3IGZvcm0gdmFsdWU6XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoZGF0ZVRpbWUuZGF0ZSk7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKGRhdGVUaW1lLnRpbWUuZ2V0SG91cnMoKSwgZGF0ZVRpbWUudGltZS5nZXRNaW51dGVzKCkpO1xuICAgIHRoaXMuZm9ybS5nZXQoJ2RhdGUnKS5zZXRWYWx1ZShkYXRlVGltZS5kYXRlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGUudG9JU09TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeURhdGUodmFsdWU6IERhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5wdXRDbGVhcmVkKHZhbHVlOiBEYXRlQW5kVGltZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByZXZpb3VzVmFsdWU/LmRhdGUgJiYgdmFsdWUuZGF0ZSA9PT0gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZGF0ZXRpbWUtcGlja2VyXCJcbiAgW25nU3dpdGNoXT1cImRhdGVUeXBlXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidEYXRlQW5kVGltZSdcIlxuICAgIFtjbG9zZURhdGVwaWNrZXJdPVwiZGF0ZXBpY2tlclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBkYXRlcGlja2VyIHt7IHNpemUgPyAnZm9ybS1ncm91cC0nICsgc2l6ZSA6ICcnIH19XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBkYXRhLWN5PVwiYm9vdHN0cmFwLWRhdGUtaW5wdXRcIlxuICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTIwcHhcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgZGVmYXVsdFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgIFtvdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYnNDb25maWddPVwie1xuICAgICAgICAgIGN1c3RvbVRvZGF5Q2xhc3M6ICd0b2RheScsXG4gICAgICAgICAgZGF0ZUlucHV0Rm9ybWF0OiBkYXRlSW5wdXRGb3JtYXQsXG4gICAgICAgICAgYWRhcHRpdmVQb3NpdGlvbjogYWRhcHRpdmVQb3NpdGlvblxuICAgICAgICB9XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uZ2V0KCdkYXRlJylcIlxuICAgICAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPHRpbWVwaWNrZXJcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cCB7eyBzaXplID8gJ2Zvcm0tZ3JvdXAtJyArIHNpemUgOiAnJyB9fVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5nZXQoJ3RpbWUnKVwiXG4gICAgICBbc2hvd1NlY29uZHNdPVwiY29uZmlnLnNob3dTZWNvbmRzXCJcbiAgICAgIFtzaG93U3Bpbm5lcnNdPVwiY29uZmlnLnNob3dTcGlubmVyc1wiXG4gICAgICBbc2hvd01lcmlkaWFuXT1cImNvbmZpZy5zaG93TWVyaWRpYW5cIlxuICAgICAgKHdoZWVsKT1cImhhbmRsZU1vdXNlV2hlZWwoJGV2ZW50KVwiXG4gICAgPjwvdGltZXBpY2tlcj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidEYXRlJ1wiXG4gICAgW2Nsb3NlRGF0ZXBpY2tlcl09XCJkYXRlcGlja2VyXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRhdGVwaWNrZXIge3sgc2l6ZSA/ICdmb3JtLWdyb3VwLScgKyBzaXplIDogJycgfX1cIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCBkZWZhdWx0UGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICBic0RhdGVwaWNrZXJcbiAgICAgICAgW291dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFtic0NvbmZpZ109XCJ7XG4gICAgICAgICAgY3VzdG9tVG9kYXlDbGFzczogJ3RvZGF5JyxcbiAgICAgICAgICBkYXRlSW5wdXRGb3JtYXQ6IGRhdGVJbnB1dEZvcm1hdCxcbiAgICAgICAgICBhZGFwdGl2ZVBvc2l0aW9uOiBhZGFwdGl2ZVBvc2l0aW9uXG4gICAgICAgIH1cIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5nZXQoJ2RhdGUnKVwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidEYXRlUmFuZ2UnXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRhdGVwaWNrZXIge3sgc2l6ZSA/ICdmb3JtLWdyb3VwLScgKyBzaXplIDogJycgfX1cIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1NlbGVjdCBhIGRhdGUgcmFuZ2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uZ2V0KCdkYXRlJylcIlxuICAgICAgICBbYnNDb25maWddPVwie1xuICAgICAgICAgIGN1c3RvbVRvZGF5Q2xhc3M6ICd0b2RheScsXG4gICAgICAgICAgYWRhcHRpdmVQb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgICByYW5nZUlucHV0Rm9ybWF0OiBkYXRlSW5wdXRGb3JtYXRcbiAgICAgICAgfVwiXG4gICAgICAgIGJzRGF0ZXJhbmdlcGlja2VyXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ1RpbWUnXCJcbiAgPlxuICAgIDx0aW1lcGlja2VyXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAge3sgc2l6ZSA/ICdmb3JtLWdyb3VwLScgKyBzaXplIDogJycgfX1cIlxuICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uZ2V0KCd0aW1lJylcIlxuICAgICAgW3Nob3dTZWNvbmRzXT1cImNvbmZpZy5zaG93U2Vjb25kc1wiXG4gICAgICBbc2hvd1NwaW5uZXJzXT1cImNvbmZpZy5zaG93U3Bpbm5lcnNcIlxuICAgICAgW3Nob3dNZXJpZGlhbl09XCJjb25maWcuc2hvd01lcmlkaWFuXCJcbiAgICAgIFttaW51dGVzUGxhY2Vob2xkZXJdPVwiJ01NYE1JTlVURVNgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbaG91cnNQbGFjZWhvbGRlcl09XCInSEhgSE9VUlNgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbc2Vjb25kc1BsYWNlaG9sZGVyXT1cIidTU2BTRUNPTkRTYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgKHdoZWVsKT1cImhhbmRsZU1vdXNlV2hlZWwoJGV2ZW50KVwiXG4gICAgPjwvdGltZXBpY2tlcj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1NpbmdsZURhdGVSZXF1aXJlZCdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB7eyBzaXplID8gJ2Zvcm0tZ3JvdXAtJyArIHNpemUgOiAnJyB9fVwiPlxuICAgICAgPGM4eS1kYXRlLXBpY2tlciAob25EYXRlU2VsZWN0ZWQpPVwib25EYXRlU2VsZWN0ZWQuZW1pdCgkZXZlbnQpXCI+PC9jOHktZGF0ZS1waWNrZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixpQkFBaUIsRUFHakIsV0FBVyxFQUNYLG1CQUFtQixFQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJGLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JB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QWdCLHdaQUNoQixtQkFBbUIsZ0lBQ25CLGdCQUFnQjs7NEZBR1AsdUJBQXVCO2tCQTVCbkMsU0FBUzsrQkFDRSxzQkFBc0IsYUFFckI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQzs0QkFDdEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsUUFBUTt3QkFDUixZQUFZO3dCQUNaLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3dCQUNsQixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLGdCQUFnQjtxQkFDakI7c0hBUUcsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLFNBQVM7Z0JBUVosUUFBUTtzQkFEWCxLQUFLO3VCQUFDLFNBQVM7Z0JBTWhCLFdBQVc7c0JBRFYsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQWVOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBUU4sY0FBYztzQkFEYixNQUFNO2dCQVMyQixVQUFVO3NCQUEzQyxTQUFTO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZpcnN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBCc0RhdGVwaWNrZXJEaXJlY3RpdmUsIEJzRGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBQaWNrZWREYXRlcyB9IGZyb20gJy4uL2RhdGUtcGlja2VyJztcbmltcG9ydCB7IE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2xvc2VEYXRlUGlja2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9jbG9zZS1kYXRlLXBpY2tlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGltZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdGltZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEM4eVRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi9pMThuL2M4eS10cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBEYXRlRm9ybWF0U2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9kYXRlLWZvcm1hdC5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIERhdGVBbmRUaW1lIHtcbiAgZGF0ZTogRGF0ZTtcbiAgdGltZTogRGF0ZTtcbn1cblxuaW50ZXJmYWNlIERhdGVBbmRUaW1lT3B0aW9ucyB7XG4gIHNob3dTcGlubmVycz86IGJvb2xlYW47XG4gIHNob3dNZXJpZGlhbj86IGJvb2xlYW47XG4gIHNob3dNaW51dGVzPzogYm9vbGVhbjtcbiAgc2hvd1NlY29uZHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBEYXRlVHlwZSA9ICdEYXRlQW5kVGltZScgfCAnRGF0ZScgfCAnRGF0ZVJhbmdlJyB8ICdTaW5nbGVEYXRlUmVxdWlyZWQnIHwgJ1RpbWUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0ZS10aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlVGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIENsb3NlRGF0ZVBpY2tlckRpcmVjdGl2ZSxcbiAgICBCc0RhdGVwaWNrZXJNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUaW1lcGlja2VyTW9kdWxlLFxuICAgIERhdGVQaWNrZXJDb21wb25lbnQsXG4gICAgQzh5VHJhbnNsYXRlUGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgbWluRGF0ZTogRGF0ZTtcblxuICBASW5wdXQoJ21pbkRhdGUnKVxuICBzZXQgX21pbkRhdGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMubWluRGF0ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgbWF4RGF0ZTogRGF0ZTtcblxuICBASW5wdXQoJ21heERhdGUnKVxuICBzZXQgX21heERhdGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMubWF4RGF0ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBkYXRlSW5wdXRGb3JtYXQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBhZGFwdGl2ZVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2l6ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgZGF0ZSBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIERhdGVBbmRUaW1lIC0gRGlzcGxheSBib3RoIGRhdGUgYW5kIHRpbWUuXG4gICAqIEBwYXJhbSBEYXRlIC0gRGlzcGxheSBvbmx5IHRoZSBkYXRlIHdpdGhvdXQgdGhlIHRpbWUuXG4gICAqIEBwYXJhbSBEYXRlUmFuZ2UgLSBTcGVjaWZ5IGEgcmFuZ2Ugb2YgZGF0ZXMuXG4gICAqIEBwYXJhbSBTaW5nbGVEYXRlUmVxdWlyZWQgLSBSZXF1aXJlIHRoZSBzZWxlY3Rpb24gb2YgYSBzaW5nbGUgZGF0ZS5cbiAgICogQHBhcmFtIFRpbWUgLSBEaXNwbGF5IG9ubHkgdGhlIHRpbWUgd2l0aG91dCB0aGUgZGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAnRGF0ZUFuZFRpbWUnXG4gICAqL1xuICBASW5wdXQoKVxuICBkYXRlVHlwZTogRGF0ZVR5cGUgPSAnRGF0ZUFuZFRpbWUnO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpZzogRGF0ZUFuZFRpbWVPcHRpb25zID0ge1xuICAgIHNob3dNaW51dGVzOiB0cnVlLFxuICAgIHNob3dTZWNvbmRzOiBmYWxzZSxcbiAgICBzaG93U3Bpbm5lcnM6IGZhbHNlXG4gIH07XG5cbiAgQE91dHB1dCgpXG4gIG9uRGF0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8UGlja2VkRGF0ZXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGRhdGU6IERhdGU7XG4gIHRpbWU6IERhdGUgfCBudWxsO1xuICBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgZGVmYXVsdFBsYWNlaG9sZGVyID0gZ2V0dGV4dCgnU2VsZWN0IGEgZGF0ZeKApicpO1xuXG4gIEBWaWV3Q2hpbGQoQnNEYXRlcGlja2VyRGlyZWN0aXZlKSBkYXRlcGlja2VyOiBCc0RhdGVwaWNrZXJEaXJlY3RpdmU7XG5cbiAgcHJpdmF0ZSBwcmV2aW91c1ZhbHVlOiBEYXRlQW5kVGltZTtcbiAgcHJpdmF0ZSBwcmV2aW91c1RpbWVQaWNrZXJWYWx1ZXM6IHsgaG91cnM/OiBudW1iZXI7IG1pbnV0ZXM/OiBudW1iZXIgfSA9IHt9O1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRhdGVGb3JtYXRTZXJ2aWNlOiBEYXRlRm9ybWF0U2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnZGF0ZScsIG5ldyBGb3JtQ29udHJvbCh1bmRlZmluZWQpKTtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgndGltZScsIG5ldyBGb3JtQ29udHJvbCh1bmRlZmluZWQpKTtcblxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodmFsdWU6IERhdGVBbmRUaW1lKSA9PiB7XG4gICAgICB0aGlzLnNldERhdGV0aW1lKHZhbHVlKTtcbiAgICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUlucHV0Rm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGVJbnB1dEZvcm1hdCA9IHRoaXMuZGF0ZUZvcm1hdFNlcnZpY2UuZ2V0RGF0ZUZvcm1hdCgpO1xuICAgIH1cbiAgICBpZiAoISgnc2hvd01lcmlkaWFuJyBpbiB0aGlzLmNvbmZpZykpIHtcbiAgICAgIHRoaXMuY29uZmlnLnNob3dNZXJpZGlhbiA9IHRoaXMuZGF0ZUZvcm1hdFNlcnZpY2Uuc2hvdWxkVXNlTWVyaWRpYW5Gb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblRpbWVDaGFuZ2UodGltZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS5zZXRWYWx1ZSh0aW1lLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgfVxuXG4gIGdldCBkYXRlQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2RhdGUnKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9sIFZhbHVlIEFjY2Vzc29yIC0gSWYgZm9ybSB2YWx1ZSBjaGFuZ2VzIGJ5IGV4dGVybmFsIGZhY3RvciwgdXBkYXRlIGRhdGUgcHJvcGVydHkgYW5kIGludGVybmFsIGZvcm0gd2l0aCBuZXcgdmFsdWUuXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMudGltZSA9IHRoaXMuZGF0ZTtcbiAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKHZhbHVlKSxcbiAgICAgICAgICB0aW1lOiB0aGlzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlzYWJsZWQgPT09IHRoaXMuZm9ybT8uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGlzYWJsZWQgPyB0aGlzLmZvcm0uZGlzYWJsZSgpIDogdGhpcy5mb3JtLmVuYWJsZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoX2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAodGhpcy5kYXRlPy5nZXRUaW1lKCkgPCBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldFRpbWUoKSkge1xuICAgICAgcmV0dXJuIHsgZGF0ZUJlZm9yZVJhbmdlTWluOiB0cnVlIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGU/LmdldFRpbWUoKSA+IG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkuZ2V0VGltZSgpKSB7XG4gICAgICByZXR1cm4geyBkYXRlQWZ0ZXJSYW5nZU1heDogdHJ1ZSB9O1xuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIHJldHVybiB7IGludmFsaWREYXRlVGltZTogdHJ1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcmV2aW91c0RheSgpIHtcbiAgICBjb25zdCBpc09wZW4gPSB0aGlzLmRhdGVwaWNrZXIuaXNPcGVuO1xuICAgIHRoaXMuZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkgLSAxKTtcbiAgICB0aGlzLnNldERhdGV0aW1lKHsgZGF0ZTogdGhpcy5kYXRlLCB0aW1lOiB0aGlzLmZvcm0uZ2V0KCd0aW1lJykudmFsdWUgfSk7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5kYXRlcGlja2VyLnNob3coKTtcbiAgICB9XG4gIH1cblxuICBuZXh0RGF5KCkge1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuZGF0ZXBpY2tlci5pc09wZW47XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSArIDEpO1xuICAgIHRoaXMuc2V0RGF0ZXRpbWUoeyBkYXRlOiB0aGlzLmRhdGUsIHRpbWU6IHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS52YWx1ZSB9KTtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXIuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyLmhpZGUoKTtcbiAgfVxuXG4gIGhhbmRsZU1vdXNlV2hlZWwoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBob3VycyA9IHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS52YWx1ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSB0aGlzLmZvcm0uZ2V0KCd0aW1lJykudmFsdWUuZ2V0TWludXRlcygpO1xuICAgIC8vIGRvd25cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudC5kZWx0YVkgPiAwKSB7XG4gICAgICBpZiAoTnVtYmVyKGhvdXJzKSA9PT0gMjMgJiYgdGhpcy5wcmV2aW91c1RpbWVQaWNrZXJWYWx1ZXMuaG91cnMgIT09IDIzKSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNEYXkoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1cFxuICAgIGlmIChldmVudC5kZWx0YVkgPCAwKSB7XG4gICAgICBpZiAodGhpcy5wcmV2aW91c1RpbWVQaWNrZXJWYWx1ZXMuaG91cnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBzY3JvbGxpbmcgdXAgb24gZW1wdHkgZm9ybSBzaG91bGQgbm90IHJlc3VsdCBpbiBpbmNyZWFzaW5nIGRheS5cbiAgICAgIH0gZWxzZSBpZiAoTnVtYmVyKGhvdXJzKSA9PT0gMCAmJiB0aGlzLnByZXZpb3VzVGltZVBpY2tlclZhbHVlcy5ob3VycyAhPT0gMCkge1xuICAgICAgICB0aGlzLm5leHREYXkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c1RpbWVQaWNrZXJWYWx1ZXMgPSB7IGhvdXJzLCBtaW51dGVzIH07XG4gIH1cblxuICAvKipcbiAgICogSWYgaW50ZXJuYWwgZm9ybSBjaGFuZ2VzIGl0cyB2YWx1ZSwgdGhlbiBjb21iaW5lIGRhdGUgYW5kIHRpbWUgaW50byBvbmUgRGF0ZSBhbmQgcGFzcyBpdHMgSVNPIHN0cmluZyB2YWx1ZSB0byBvbkNoYW5nZSBtZXRob2RcbiAgICogQHBhcmFtIGRhdGVUaW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldERhdGV0aW1lKGRhdGVUaW1lOiBEYXRlQW5kVGltZSkge1xuICAgIC8vIGlmIGRhdGUgaW5wdXQgaXMgY2xlYXJlZCBmcm9tIGEgcHJldmlvdXMgY29ycmVjdCB2YWx1ZSwgY2xlYXIgZm9ybSB2YWx1ZTpcbiAgICBpZiAodGhpcy5pc0lucHV0Q2xlYXJlZChkYXRlVGltZSkpIHtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2RhdGUnKS5zZXRWYWx1ZSh1bmRlZmluZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMudGltZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS5zZXRWYWx1ZSh1bmRlZmluZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRUaW1lID0gdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLnRpbWUpO1xuICAgIGNvbnN0IHZhbGlkRXhpc3RpbmdUaW1lID0gdGhpcy52ZXJpZnlEYXRlKHRoaXMudGltZSk7XG4gICAgY29uc3QgdmFsaWREYXRlID0gdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLmRhdGUpO1xuXG4gICAgaWYgKCF2YWxpZFRpbWUgJiYgIXZhbGlkRXhpc3RpbmdUaW1lKSB7XG4gICAgICAvLyBFbnN1cmUgZGF0ZVRpbWUuZGF0ZSBleGlzdHMgYmVmb3JlIHVzaW5nIGdldEZ1bGxZZWFyOlxuICAgICAgaWYgKGRhdGVUaW1lLmRhdGUpIHtcbiAgICAgICAgZGF0ZVRpbWUudGltZSA9IG5ldyBEYXRlKFxuICAgICAgICAgIGRhdGVUaW1lLmRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICBkYXRlVGltZS5kYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgZGF0ZVRpbWUuZGF0ZS5nZXREYXRlKCksXG4gICAgICAgICAgMCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50aW1lID0gZGF0ZVRpbWUudGltZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBib3RoIGRhdGUgYW5kIHRpbWUgaXMgaW52YWxpZCwgZG8gc2V0IGZvcm0gdmFsdWUgdG8gbnVsbCBhbmQgc3RvcDpcbiAgICBpZiAoIXZhbGlkRGF0ZSAmJiAhdmFsaWRUaW1lKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgdGltZSBpcyBwcm92aWRlZCwgc2V0IERhdGUgdG8gdG9kYXk6XG4gICAgaWYgKCF2YWxpZERhdGUgJiYgdmFsaWRUaW1lKSB7XG4gICAgICBkYXRlVGltZS5kYXRlID0gbmV3IERhdGUoZGF0ZVRpbWUudGltZSk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgZGF0ZSBhbmQgdGltZSwgYW5kIGVtaXQgYXMgbmV3IGZvcm0gdmFsdWU6XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoZGF0ZVRpbWUuZGF0ZSk7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKHRoaXMudGltZS5nZXRIb3VycygpLCB0aGlzLnRpbWUuZ2V0TWludXRlcygpKTtcbiAgICB0aGlzLmZvcm0uZ2V0KCdkYXRlJykuc2V0VmFsdWUoZGF0ZVRpbWUuZGF0ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlLnRvSVNPU3RyaW5nKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlEYXRlKHZhbHVlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiBkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0lucHV0Q2xlYXJlZCh2YWx1ZTogRGF0ZUFuZFRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcmV2aW91c1ZhbHVlPy5kYXRlICYmIHZhbHVlLmRhdGUgPT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImRhdGV0aW1lLXBpY2tlclwiXG4gIFtuZ1N3aXRjaF09XCJkYXRlVHlwZVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICpuZ1N3aXRjaENhc2U9XCInRGF0ZUFuZFRpbWUnXCJcbiAgICBbY2xvc2VEYXRlcGlja2VyXT1cImRhdGVwaWNrZXJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZGF0ZXBpY2tlciB7eyBzaXplID8gJ2Zvcm0tZ3JvdXAtJyArIHNpemUgOiAnJyB9fVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgZGF0YS1jeT1cImJvb3RzdHJhcC1kYXRlLWlucHV0XCJcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDEyMHB4XCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IGRlZmF1bHRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGJzRGF0ZXBpY2tlclxuICAgICAgICBbb3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcbiAgICAgICAgICBjdXN0b21Ub2RheUNsYXNzOiAndG9kYXknLFxuICAgICAgICAgIGRhdGVJbnB1dEZvcm1hdDogZGF0ZUlucHV0Rm9ybWF0LFxuICAgICAgICAgIGFkYXB0aXZlUG9zaXRpb246IGFkYXB0aXZlUG9zaXRpb25cbiAgICAgICAgfVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJkYXRlQ29udHJvbFwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgICA8dGltZXBpY2tlclxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIHt7IHNpemUgPyAnZm9ybS1ncm91cC0nICsgc2l6ZSA6ICcnIH19XCJcbiAgICAgIFsobmdNb2RlbCldPVwidGltZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbc2hvd1NlY29uZHNdPVwiY29uZmlnLnNob3dTZWNvbmRzXCJcbiAgICAgIFtzaG93U3Bpbm5lcnNdPVwiY29uZmlnLnNob3dTcGlubmVyc1wiXG4gICAgICBbc2hvd01lcmlkaWFuXT1cImNvbmZpZy5zaG93TWVyaWRpYW5cIlxuICAgICAgKHdoZWVsKT1cImhhbmRsZU1vdXNlV2hlZWwoJGV2ZW50KVwiXG4gICAgICA+PC90aW1lcGlja2VyPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ0RhdGUnXCJcbiAgICBbY2xvc2VEYXRlcGlja2VyXT1cImRhdGVwaWNrZXJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZGF0ZXBpY2tlciB7eyBzaXplID8gJ2Zvcm0tZ3JvdXAtJyArIHNpemUgOiAnJyB9fVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IGRlZmF1bHRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGJzRGF0ZXBpY2tlclxuICAgICAgICBbb3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcbiAgICAgICAgICBjdXN0b21Ub2RheUNsYXNzOiAndG9kYXknLFxuICAgICAgICAgIGRhdGVJbnB1dEZvcm1hdDogZGF0ZUlucHV0Rm9ybWF0LFxuICAgICAgICAgIGFkYXB0aXZlUG9zaXRpb246IGFkYXB0aXZlUG9zaXRpb25cbiAgICAgICAgfVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJkYXRlQ29udHJvbFwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidEYXRlUmFuZ2UnXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRhdGVwaWNrZXIge3sgc2l6ZSA/ICdmb3JtLWdyb3VwLScgKyBzaXplIDogJycgfX1cIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1NlbGVjdCBhIGRhdGUgcmFuZ2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImRhdGVDb250cm9sXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcbiAgICAgICAgICBjdXN0b21Ub2RheUNsYXNzOiAndG9kYXknLFxuICAgICAgICAgIGFkYXB0aXZlUG9zaXRpb246IHRydWUsXG4gICAgICAgICAgcmFuZ2VJbnB1dEZvcm1hdDogZGF0ZUlucHV0Rm9ybWF0XG4gICAgICAgIH1cIlxuICAgICAgICBic0RhdGVyYW5nZXBpY2tlclxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidUaW1lJ1wiXG4gID5cbiAgICA8dGltZXBpY2tlclxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIHt7IHNpemUgPyAnZm9ybS1ncm91cC0nICsgc2l6ZSA6ICcnIH19XCJcbiAgICAgIFsobmdNb2RlbCldPVwidGltZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbc2hvd1NlY29uZHNdPVwiY29uZmlnLnNob3dTZWNvbmRzXCJcbiAgICAgIFtzaG93U3Bpbm5lcnNdPVwiY29uZmlnLnNob3dTcGlubmVyc1wiXG4gICAgICBbc2hvd01lcmlkaWFuXT1cImNvbmZpZy5zaG93TWVyaWRpYW5cIlxuICAgICAgW21pbnV0ZXNQbGFjZWhvbGRlcl09XCInTU1gTUlOVVRFU2AnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtob3Vyc1BsYWNlaG9sZGVyXT1cIidISGBIT1VSU2AnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzZWNvbmRzUGxhY2Vob2xkZXJdPVwiJ1NTYFNFQ09ORFNgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAod2hlZWwpPVwiaGFuZGxlTW91c2VXaGVlbCgkZXZlbnQpXCJcbiAgICA+PC90aW1lcGlja2VyPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInU2luZ2xlRGF0ZVJlcXVpcmVkJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHt7IHNpemUgPyAnZm9ybS1ncm91cC0nICsgc2l6ZSA6ICcnIH19XCI+XG4gICAgICA8Yzh5LWRhdGUtcGlja2VyIChvbkRhdGVTZWxlY3RlZCk9XCJvbkRhdGVTZWxlY3RlZC5lbWl0KCRldmVudClcIj48L2M4eS1kYXRlLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -711,9 +711,18 @@ class StoreBrandingService {
711
711
  return JSON.parse(brandingAsJSONString);
712
712
  }
713
713
  async getPublicOptionsApp() {
714
- let { data: apps } = await this.applicationService.listByName(this.manifestValues.name);
715
- apps = apps.filter(app => app.owner?.tenant?.id === this.appState.currentTenant.value?.name);
716
- return apps[0];
714
+ try {
715
+ const { data: manifest } = await this.applicationService.getManifestOfContextPath(this.manifestValues.contextPath);
716
+ const { data: app } = await this.applicationService.detail(manifest.id);
717
+ if (app.owner.tenant.id !== this.appState.currentTenant.value?.name) {
718
+ return undefined;
719
+ }
720
+ return app;
721
+ }
722
+ catch (e) {
723
+ // e.g. reached when no app with the given context path exists
724
+ return undefined;
725
+ }
717
726
  }
718
727
  async createPublicOptionsApp() {
719
728
  const { data: app } = await this.applicationService.create(this.manifestValues);