@c8y/ngx-components 1021.22.68 → 1021.22.70

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.
Files changed (40) hide show
  1. package/core/common/interval-based-reload.abstract.d.ts +12 -1
  2. package/core/common/interval-based-reload.abstract.d.ts.map +1 -1
  3. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +15 -46
  4. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  5. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts +3 -0
  6. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts.map +1 -1
  7. package/datapoint-selector/datapoint-selection.model.d.ts +4 -6
  8. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  9. package/esm2022/core/common/interval-based-reload.abstract.mjs +50 -2
  10. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +47 -22
  11. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.mjs +1 -1
  12. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  13. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  14. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +9 -7
  15. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +3 -2
  16. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +9 -7
  17. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +48 -23
  18. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +8 -6
  20. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +10 -7
  22. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components.mjs +392 -346
  24. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  25. package/locales/de.po +9 -0
  26. package/locales/es.po +11 -1
  27. package/locales/fr.po +9 -0
  28. package/locales/ja_JP.po +9 -0
  29. package/locales/ko.po +9 -0
  30. package/locales/nl.po +9 -0
  31. package/locales/pl.po +9 -0
  32. package/locales/pt_BR.po +9 -0
  33. package/locales/zh_CN.po +9 -0
  34. package/locales/zh_TW.po +9 -0
  35. package/package.json +1 -1
  36. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +7 -2
  37. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  38. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
  39. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +7 -2
  40. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
@@ -1,11 +1,18 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { BehaviorSubject, Subscription } from 'rxjs';
3
3
  import { CountdownIntervalComponent } from '../countdown-interval';
4
+ import { GainsightService } from '../product-experience';
5
+ export declare const WIDGET_TYPE_VALUES: {
6
+ readonly ALARMS: "alarms";
7
+ readonly DATA_POINTS_TABLE: "dataPointsTable";
8
+ };
9
+ type WidgetType = (typeof WIDGET_TYPE_VALUES)[keyof typeof WIDGET_TYPE_VALUES];
4
10
  /**
5
11
  * Abstract class representing an interval reload functionality.
6
12
  * This class provides methods and properties for managing an interval-based reload mechanism.
7
13
  */
8
14
  export declare abstract class IntervalBasedReload {
15
+ protected gainsightService: GainsightService;
9
16
  abstract countdownIntervalComponent: CountdownIntervalComponent;
10
17
  /**
11
18
  * Holds the subscription to a countdown observable.
@@ -91,8 +98,9 @@ export declare abstract class IntervalBasedReload {
91
98
  * is set to false.
92
99
  *
93
100
  * @param $event - The MouseEvent that triggered this method.
101
+ * @param widgetType - The type of the widget that triggered the event
94
102
  */
95
- onToggleCountdownButtonState($event: MouseEvent): void;
103
+ onToggleCountdownButtonState($event: MouseEvent, widgetType: WidgetType): void;
96
104
  /**
97
105
  * This function listens for changes in the `isLoading` observable, filtering out any truthy values.
98
106
  * Once a falsy value is detected (indicating that loading has finished), it attempts to start the countdown.
@@ -126,5 +134,8 @@ export declare abstract class IntervalBasedReload {
126
134
  * Updates the countdown button tooltip text based on the state of the interval refresh toggle state.
127
135
  */
128
136
  protected abstract updateCountdownButtonTooltipText(): void;
137
+ private triggerGainsightEvent;
138
+ private determineComponentName;
129
139
  }
140
+ export {};
130
141
  //# sourceMappingURL=interval-based-reload.abstract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interval-based-reload.abstract.d.ts","sourceRoot":"","sources":["../../../core/common/interval-based-reload.abstract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAU,YAAY,EAAO,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;GAGG;AACH,8BAAsB,mBAAmB;IACvC,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;IAChE;;OAEG;IACH,SAAS,CAAC,qBAAqB,EAAE,YAAY,CAAC;IAC9C;;OAEG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C;;OAEG;IACH,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAE5C,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC;IAClD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IACtD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAE1C;;;;;;OAMG;IACH,eAAe,IAAI,IAAI;IAOvB;;;;;;;;;;;;;OAaG;IACH,eAAe,IAAI,IAAI;IAoBvB,QAAQ,CAAC,MAAM,IAAI,IAAI;IACvB;;OAEG;IACH,QAAQ,CAAC,cAAc,IAAI,IAAI;IAE/B;;;;;;;;;;;;;;OAcG;IACH,4BAA4B,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAmBtD;;;;;;;;;OASG;IACH,cAAc,IAAI,IAAI;IAWtB;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,IAAI,IAAI;IAEhC;;;;;;;OAOG;IACH,gBAAgB,IAAI,IAAI;IAMxB;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,gCAAgC,IAAI,IAAI;CAC5D"}
1
+ {"version":3,"file":"interval-based-reload.abstract.d.ts","sourceRoot":"","sources":["../../../core/common/interval-based-reload.abstract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,eAAe,EAAU,YAAY,EAAO,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAmBzD,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,KAAK,UAAU,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAE/E;;;GAGG;AACH,8BAAsB,mBAAmB;IACvC,SAAS,CAAC,gBAAgB,mBAA4B;IAEtD,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;IAChE;;OAEG;IACH,SAAS,CAAC,qBAAqB,EAAE,YAAY,CAAC;IAC9C;;OAEG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C;;OAEG;IACH,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAE5C,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC;IAClD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IACtD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAE1C;;;;;;OAMG;IACH,eAAe,IAAI,IAAI;IAOvB;;;;;;;;;;;;;OAaG;IACH,eAAe,IAAI,IAAI;IAoBvB,QAAQ,CAAC,MAAM,IAAI,IAAI;IACvB;;OAEG;IACH,QAAQ,CAAC,cAAc,IAAI,IAAI;IAE/B;;;;;;;;;;;;;;;OAeG;IACH,4BAA4B,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IA+B9E;;;;;;;;;OASG;IACH,cAAc,IAAI,IAAI;IAWtB;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,IAAI,IAAI;IAEhC;;;;;;;OAOG;IACH,gBAAgB,IAAI,IAAI;IAMxB;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,gCAAgC,IAAI,IAAI;IAE3D,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,sBAAsB;CAU/B"}
@@ -1,20 +1,18 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { AbstractControl, ControlValueAccessor, FormGroup, ValidationErrors, Validator } from '@angular/forms';
3
3
  import { DatapointAttributesFormValidationService } from './datapoint-attributes-form-validation.service';
4
+ import { AXIS_TYPES, AxisTypes, CHART_LINE_TYPES, CHART_RENDER_TYPES, ChartLineTypes, ChartRenderTypes } from './datapoint-attributes.model';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class DatapointAttributesFormComponent implements ControlValueAccessor, Validator, OnInit {
6
7
  private formValidations;
8
+ selectableChartRenderTypes: ChartRenderTypes[];
9
+ selectableChartLineTypes: ChartLineTypes[];
10
+ selectableAxisTypes: AxisTypes[];
7
11
  showTarget: boolean;
8
12
  showRange: boolean;
9
13
  showYellowRange: boolean;
10
14
  showRedRange: boolean;
11
- /**
12
- * Responsible for displaying the chart section in a form.
13
- * Form contains display selector, so if this flag is true
14
- * then the form won't be shown alone (the state of the showDisplay flag won't be taken into account).
15
- */
16
15
  showChart: boolean;
17
- showDisplay: boolean;
18
16
  showFormIfTemplateWasSelected: boolean;
19
17
  formGroup: FormGroup;
20
18
  range: FormGroup;
@@ -23,51 +21,17 @@ export declare class DatapointAttributesFormComponent implements ControlValueAcc
23
21
  chart: FormGroup;
24
22
  display: FormGroup;
25
23
  rawValue: any;
26
- CHART_RENDER_TYPES: readonly [{
27
- readonly val: "min";
28
- readonly text: "Minimum";
29
- }, {
30
- readonly val: "max";
31
- readonly text: "Maximum";
32
- }, {
33
- readonly val: "area";
34
- readonly text: "Minimum and maximum";
35
- }];
36
- CHART_LINE_TYPES: readonly [{
37
- readonly val: "line";
38
- readonly text: "Line";
39
- }, {
40
- readonly val: "points";
41
- readonly text: "Points";
42
- }, {
43
- readonly val: "linePoints";
44
- readonly text: "Line and points";
45
- }, {
46
- readonly val: "bars";
47
- readonly text: "Bars";
48
- }, {
49
- readonly val: "step-before";
50
- readonly text: "Step before";
51
- }, {
52
- readonly val: "step-after";
53
- readonly text: "Step after";
54
- }];
55
- AXIS_TYPES: readonly [{
56
- readonly val: any;
57
- readonly text: "Auto";
58
- }, {
59
- readonly val: "left";
60
- readonly text: "Left";
61
- }, {
62
- readonly val: "right";
63
- readonly text: "Right";
64
- }];
24
+ CHART_RENDER_TYPES: Array<(typeof CHART_RENDER_TYPES)[number]>;
25
+ CHART_LINE_TYPES: Array<(typeof CHART_LINE_TYPES)[number]>;
26
+ AXIS_TYPES: Array<(typeof AXIS_TYPES)[number]>;
65
27
  customValidationErrorMessages: {
66
28
  [formField: string]: {
67
29
  [validationError: string]: string;
68
30
  };
69
31
  };
70
32
  shouldForceInitialValidation: boolean;
33
+ showOnlyDisplayForm: boolean;
34
+ showChartForm: boolean;
71
35
  constructor(formValidations: DatapointAttributesFormValidationService);
72
36
  ngOnInit(): void;
73
37
  validate(_control: AbstractControl): ValidationErrors;
@@ -76,7 +40,12 @@ export declare class DatapointAttributesFormComponent implements ControlValueAcc
76
40
  registerOnTouched(fn: any): void;
77
41
  setDisabledState(isDisabled: boolean): void;
78
42
  private setSubForms;
43
+ private initializeFormVisibility;
44
+ private filterChartTypes;
45
+ private filterRenderTypes;
46
+ private filterLineTypes;
47
+ private filterAxisTypes;
79
48
  static ɵfac: i0.ɵɵFactoryDeclaration<DatapointAttributesFormComponent, never>;
80
- static ɵcmp: i0.ɵɵComponentDeclaration<DatapointAttributesFormComponent, "c8y-datapoint-attributes-form", never, { "showTarget": { "alias": "showTarget"; "required": false; }; "showRange": { "alias": "showRange"; "required": false; }; "showYellowRange": { "alias": "showYellowRange"; "required": false; }; "showRedRange": { "alias": "showRedRange"; "required": false; }; "showChart": { "alias": "showChart"; "required": false; }; "showDisplay": { "alias": "showDisplay"; "required": false; }; "showFormIfTemplateWasSelected": { "alias": "showFormIfTemplateWasSelected"; "required": false; }; }, {}, never, never, false, never>;
49
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatapointAttributesFormComponent, "c8y-datapoint-attributes-form", never, { "selectableChartRenderTypes": { "alias": "selectableChartRenderTypes"; "required": false; }; "selectableChartLineTypes": { "alias": "selectableChartLineTypes"; "required": false; }; "selectableAxisTypes": { "alias": "selectableAxisTypes"; "required": false; }; "showTarget": { "alias": "showTarget"; "required": false; }; "showRange": { "alias": "showRange"; "required": false; }; "showYellowRange": { "alias": "showYellowRange"; "required": false; }; "showRedRange": { "alias": "showRedRange"; "required": false; }; "showChart": { "alias": "showChart"; "required": false; }; "showFormIfTemplateWasSelected": { "alias": "showFormIfTemplateWasSelected"; "required": false; }; }, {}, never, never, false, never>;
81
50
  }
82
51
  //# sourceMappingURL=datapoint-attributes-form.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"datapoint-attributes-form.component.d.ts","sourceRoot":"","sources":["../../../datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,SAAS,EAGT,gBAAgB,EAChB,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,wCAAwC,EAAE,MAAM,gDAAgD,CAAC;;AAG1G,qBAgBa,gCAAiC,YAAW,oBAAoB,EAAE,SAAS,EAAE,MAAM;IA+BlF,OAAO,CAAC,eAAe;IA9B1B,UAAU,UAAQ;IAClB,SAAS,UAAQ;IACjB,eAAe,UAAQ;IACvB,YAAY,UAAQ;IAC7B;;;;OAIG;IACM,SAAS,UAAQ;IACjB,WAAW,UAAS;IACpB,6BAA6B,UAAS;IAC/C,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,SAAS,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,GAAG,CAAM;IACnB,kBAAkB;;;;;;;;;OAAsB;IACxC,gBAAgB;;;;;;;;;;;;;;;;;;OAAoB;IACpC,UAAU;;;;;;;;;OAAc;IAExB,6BAA6B,EAAE;QAC7B,CAAC,SAAS,EAAE,MAAM,GAAG;YACnB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;SACnC,CAAC;KACH,CAAM;IACP,4BAA4B,UAAQ;gBAEhB,eAAe,EAAE,wCAAwC;IAK7E,QAAQ,IAAI,IAAI;IAShB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,gBAAgB;IAOrD,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAe1B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAS/B,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAIhC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAO3C,OAAO,CAAC,WAAW;yCAvFR,gCAAgC;2CAAhC,gCAAgC;CAkG5C"}
1
+ {"version":3,"file":"datapoint-attributes-form.component.d.ts","sourceRoot":"","sources":["../../../datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,SAAS,EAGT,gBAAgB,EAChB,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,wCAAwC,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EACL,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;;AAEtC,qBAgBa,gCAAiC,YAAW,oBAAoB,EAAE,SAAS,EAAE,MAAM;IA8BlF,OAAO,CAAC,eAAe;IA7B1B,0BAA0B,EAAE,gBAAgB,EAAE,CAAM;IACpD,wBAAwB,EAAE,cAAc,EAAE,CAAM;IAChD,mBAAmB,EAAE,SAAS,EAAE,CAAM;IACtC,UAAU,UAAQ;IAClB,SAAS,UAAQ;IACjB,eAAe,UAAQ;IACvB,YAAY,UAAQ;IACpB,SAAS,UAAQ;IACjB,6BAA6B,UAAS;IAC/C,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,SAAS,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,GAAG,CAAM;IACnB,kBAAkB,EAAE,KAAK,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAkC;IAChG,gBAAgB,EAAE,KAAK,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAgC;IAC1F,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAA0B;IAExE,6BAA6B,EAAE;QAC7B,CAAC,SAAS,EAAE,MAAM,GAAG;YACnB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;SACnC,CAAC;KACH,CAAM;IACP,4BAA4B,UAAQ;IACpC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;gBAEH,eAAe,EAAE,wCAAwC;IAK7E,QAAQ,IAAI,IAAI;IAKhB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,gBAAgB;IAOrD,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAe1B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAS/B,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAIhC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAO3C,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;yCAhIZ,gCAAgC;2CAAhC,gCAAgC;CAuI5C"}
@@ -8,6 +8,7 @@ export declare const AXIS_TYPES: readonly [{
8
8
  readonly val: "right";
9
9
  readonly text: "Right";
10
10
  }];
11
+ export type AxisTypes = (typeof AXIS_TYPES)[1 | 2]['val'];
11
12
  export declare const CHART_LINE_TYPES: readonly [{
12
13
  readonly val: "line";
13
14
  readonly text: "Line";
@@ -27,6 +28,7 @@ export declare const CHART_LINE_TYPES: readonly [{
27
28
  readonly val: "step-after";
28
29
  readonly text: "Step after";
29
30
  }];
31
+ export type ChartLineTypes = (typeof CHART_LINE_TYPES)[number]['val'];
30
32
  export declare const CHART_RENDER_TYPES: readonly [{
31
33
  readonly val: "min";
32
34
  readonly text: "Minimum";
@@ -37,4 +39,5 @@ export declare const CHART_RENDER_TYPES: readonly [{
37
39
  readonly val: "area";
38
40
  readonly text: "Minimum and maximum";
39
41
  }];
42
+ export type ChartRenderTypes = (typeof CHART_RENDER_TYPES)[number]['val'];
40
43
  //# sourceMappingURL=datapoint-attributes.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"datapoint-attributes.model.d.ts","sourceRoot":"","sources":["../../../datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU;;;;;;;;;EAIb,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;;;;;EAIrB,CAAC"}
1
+ {"version":3,"file":"datapoint-attributes.model.d.ts","sourceRoot":"","sources":["../../../datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU;;;;;;;;;EAIb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AAEtE,eAAO,MAAM,kBAAkB;;;;;;;;;EAIrB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { IIdentified, IManagedObject } from '@c8y/client';
2
2
  import { MillerViewComponent } from '@c8y/ngx-components/assets-navigator';
3
+ import { AxisTypes, ChartLineTypes, ChartRenderTypes } from './datapoint-attributes-form/datapoint-attributes.model';
3
4
  export declare const DATAPOINT_LIBRARY_FRAGMENT = "c8y_Kpi";
4
5
  export interface KPIDetails {
5
6
  fragment: string;
@@ -39,12 +40,9 @@ export interface DatapointAttributesFormConfig {
39
40
  showRedRange: boolean;
40
41
  showChart: boolean;
41
42
  showFormIfTemplateWasSelected: boolean;
42
- /**
43
- * Indicates whether to show the display selector alone or not.
44
- * 'showChart' has a higher priority than 'showDisplay' because the display is part of the chart section.
45
- * Therefore, enabling 'showDisplay' will be ignored if 'showChart' is set to true.
46
- */
47
- showDisplay: boolean;
43
+ selectableChartRenderTypes: ChartRenderTypes[];
44
+ selectableChartLineTypes: ChartLineTypes[];
45
+ selectableAxisTypes: AxisTypes[];
48
46
  }
49
47
  export type DatapointSelectorModalAssetSelectorOptions = Omit<MillerViewComponent, 'multi' | 'singleColumn' | 'onSelected' | 'millerViewWrapper' | 'columns' | 'ngOnInit' | 'ngOnChanges' | 'addNewColumn' | 'onSelectionChange'>;
50
48
  //# sourceMappingURL=datapoint-selection.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"datapoint-selection.model.d.ts","sourceRoot":"","sources":["../../datapoint-selector/datapoint-selection.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,CAAC,0BAA0B,CAAC,EAAE,UAAU,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,6BAA6B,EAAE,OAAO,CAAC;IACvC;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,0CAA0C,GAAG,IAAI,CAC3D,mBAAmB,EACjB,OAAO,GACP,cAAc,GACd,YAAY,GACZ,mBAAmB,GACnB,SAAS,GACT,UAAU,GACV,aAAa,GACb,cAAc,GACd,mBAAmB,CACtB,CAAC"}
1
+ {"version":3,"file":"datapoint-selection.model.d.ts","sourceRoot":"","sources":["../../datapoint-selector/datapoint-selection.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,wDAAwD,CAAC;AAEhE,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,CAAC,0BAA0B,CAAC,EAAE,UAAU,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,6BAA6B,EAAE,OAAO,CAAC;IACvC,0BAA0B,EAAE,gBAAgB,EAAE,CAAC;IAC/C,wBAAwB,EAAE,cAAc,EAAE,CAAC;IAC3C,mBAAmB,EAAE,SAAS,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,0CAA0C,GAAG,IAAI,CAC3D,mBAAmB,EACjB,OAAO,GACP,cAAc,GACd,YAAY,GACZ,mBAAmB,GACnB,SAAS,GACT,UAAU,GACV,aAAa,GACb,cAAc,GACd,mBAAmB,CACtB,CAAC"}
@@ -1,9 +1,34 @@
1
+ import { inject } from '@angular/core';
1
2
  import { filter, tap } from 'rxjs';
3
+ import { GainsightService } from '../product-experience';
4
+ const PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD = {
5
+ EVENTS: {
6
+ INTERVAL_BASED_RELOAD: 'intervalBasedReload'
7
+ },
8
+ COMPONENTS: {
9
+ ALARM_WIDGET_ALARM_RELOAD: 'alarm-widget-alarms-reload',
10
+ DATAPOINTS_RELOAD: 'datapoints-reload'
11
+ },
12
+ ACTIONS: {
13
+ MANUALLY_CHANGED_COUNTDOWN_STATE: 'manuallyChangedCountdownState'
14
+ },
15
+ RESULT: {
16
+ MANUALLY_PAUSED_COUNTDOWN: 'manuallyPausedCountdown',
17
+ MANUALLY_RESUMED_COUNTDOWN: 'manuallyResumedCountdown'
18
+ }
19
+ };
20
+ export const WIDGET_TYPE_VALUES = {
21
+ ALARMS: 'alarms',
22
+ DATA_POINTS_TABLE: 'dataPointsTable'
23
+ };
2
24
  /**
3
25
  * Abstract class representing an interval reload functionality.
4
26
  * This class provides methods and properties for managing an interval-based reload mechanism.
5
27
  */
6
28
  export class IntervalBasedReload {
29
+ constructor() {
30
+ this.gainsightService = inject(GainsightService);
31
+ }
7
32
  /**
8
33
  * Stops the countdown and triggers a refresh action.
9
34
  * This function is responsible for halting the countdown interval component's operation.
@@ -60,20 +85,23 @@ export class IntervalBasedReload {
60
85
  * is set to false.
61
86
  *
62
87
  * @param $event - The MouseEvent that triggered this method.
88
+ * @param widgetType - The type of the widget that triggered the event
63
89
  */
64
- onToggleCountdownButtonState($event) {
90
+ onToggleCountdownButtonState($event, widgetType) {
65
91
  $event.preventDefault();
66
92
  this.isIntervalRefreshToggleOn = !this.isRefreshDisabled && !this.isIntervalRefreshToggleOn;
67
93
  this.updateCountdownButtonTooltipText();
68
94
  if (!this.isIntervalRefreshToggleOn) {
69
95
  this.disableCountdown();
70
96
  this.manuallyDisabledCountdown = true;
97
+ this.triggerGainsightEvent(widgetType, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.ACTIONS.MANUALLY_CHANGED_COUNTDOWN_STATE, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.RESULT.MANUALLY_PAUSED_COUNTDOWN);
71
98
  return;
72
99
  }
73
100
  const onRefreshToggleOn = this.isIntervalRefreshToggleOn && this.countdownSubscription.closed;
74
101
  if (onRefreshToggleOn) {
75
102
  this.enableCountdown();
76
103
  this.manuallyDisabledCountdown = false;
104
+ this.triggerGainsightEvent(widgetType, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.ACTIONS.MANUALLY_CHANGED_COUNTDOWN_STATE, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.RESULT.MANUALLY_RESUMED_COUNTDOWN);
77
105
  }
78
106
  }
79
107
  /**
@@ -106,5 +134,25 @@ export class IntervalBasedReload {
106
134
  this.countdownIntervalComponent?.stop();
107
135
  this.hideCountdown = true;
108
136
  }
137
+ triggerGainsightEvent(widgetType, action, result) {
138
+ if (widgetType) {
139
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.EVENTS.INTERVAL_BASED_RELOAD, {
140
+ action,
141
+ result,
142
+ component: this.determineComponentName(widgetType),
143
+ widget: widgetType
144
+ });
145
+ }
146
+ }
147
+ determineComponentName(widgetType) {
148
+ switch (widgetType) {
149
+ case WIDGET_TYPE_VALUES.ALARMS:
150
+ return PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.COMPONENTS.ALARM_WIDGET_ALARM_RELOAD;
151
+ case WIDGET_TYPE_VALUES.DATA_POINTS_TABLE:
152
+ return PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.COMPONENTS.DATAPOINTS_RELOAD;
153
+ default:
154
+ return '';
155
+ }
156
+ }
109
157
  }
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwtYmFzZWQtcmVsb2FkLmFic3RyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vaW50ZXJ2YWwtYmFzZWQtcmVsb2FkLmFic3RyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUIsTUFBTSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbEU7OztHQUdHO0FBQ0gsTUFBTSxPQUFnQixtQkFBbUI7SUE4Q3ZDOzs7Ozs7T0FNRztJQUNILGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILGVBQWU7UUFDYixzRUFBc0U7UUFDdEUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUVyRSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztZQUN2QyxPQUFPO1FBQ1QsQ0FBQztRQUVELGlGQUFpRjtRQUNqRixNQUFNLG1CQUFtQixHQUN2QixDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRWhGLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQVFEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsNEJBQTRCLENBQUMsTUFBa0I7UUFDN0MsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztRQUM1RixJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUV4QyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztZQUN0QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFFOUYsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUzthQUN4QyxJQUFJLENBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDeEMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQywwQkFBMEIsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFZRDs7Ozs7OztPQU9HO0lBQ0gsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0NBTUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBTdWJzY3JpcHRpb24sIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQgfSBmcm9tICcuLi9jb3VudGRvd24taW50ZXJ2YWwnO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyBhbiBpbnRlcnZhbCByZWxvYWQgZnVuY3Rpb25hbGl0eS5cbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgbWFuYWdpbmcgYW4gaW50ZXJ2YWwtYmFzZWQgcmVsb2FkIG1lY2hhbmlzbS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEludGVydmFsQmFzZWRSZWxvYWQge1xuICBhYnN0cmFjdCBjb3VudGRvd25JbnRlcnZhbENvbXBvbmVudDogQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBIb2xkcyB0aGUgc3Vic2NyaXB0aW9uIHRvIGEgY291bnRkb3duIG9ic2VydmFibGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY291bnRkb3duU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhdXRvLXJlZnJlc2ggaXMgZW5hYmxlZCBmb3IgdGhlIGRhdGFwb2ludHMgcmVsb2FkIGNvbXBvbmVudCB0aGF0IGlzIHNldCBpbiB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciByZWZyZXNoaW5nIHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgKiBJdCdzICd0cnVlJyB3aGVuIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8gdmlldyBhIG1lYXN1cmVtZW50LlxuICAgKi9cbiAgYWJzdHJhY3QgaXNSZWZyZXNoRGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXJyZW50IGlzTG9hZGluZyBzdGF0ZS4gQmFzZWQgb24gaXQgbmV4dCBjb3VudGRvd24gY3ljbGUgaXMgYmVpbmcgc3RhcnRlZC5cbiAgICovXG4gIGFic3RyYWN0IGlzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFsYXJtIGxpc3QgaXMgYmVpbmcgc2Nyb2xsZWQgb3Igbm90LlxuICAgKi9cbiAgYWJzdHJhY3QgaXNTY3JvbGxpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXJyZW50IHJlZnJlc2ggaW50ZXJ2YWwgc2V0IGluIGEgd2lkZ2V0IGNvbmZpZy5cbiAgICovXG4gIGFic3RyYWN0IHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgYSBjb3VudGRvd24gY3ljbGUgaGFzIGVuZGVkLlxuICAgKi9cbiAgYWJzdHJhY3Qgb25Db3VudGRvd25FbmRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+O1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGludGVydmFsIHJlZnJlc2ggdG9nZ2xlIGJ1dHRvbi5cbiAgICovXG4gIGFic3RyYWN0IGlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT246IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgdG9nZ2xlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3VudGRvd24gaGFzIGJlZW4gbWFudWFsbHkgZGlzYWJsZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgbWFudWFsbHlEaXNhYmxlZENvdW50ZG93bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb3VudGRvd24gdGltZXIgY29tcG9uZW50IGluIHRoZSBjdXJyZW50IGNvbXBvbmVudCdzIFVJLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGhpZGVDb3VudGRvd246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBjb3VudGRvd24gYW5kIHRyaWdnZXJzIGEgcmVmcmVzaCBhY3Rpb24uXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbHRpbmcgdGhlIGNvdW50ZG93biBpbnRlcnZhbCBjb21wb25lbnQncyBvcGVyYXRpb24uXG4gICAqIEFmdGVyIHN0b3BwaW5nIHRoZSBjb3VudGRvd24sIGl0IGVtaXRzIGFuIGBvbkNvdW50ZG93bkVuZGVkYCBldmVudC5cbiAgICogVGhpcyBldmVudCBpcyB1c2VkIHRvIGluZm9ybSBleHRlcm5hbCBjb21wb25lbnRzIHRoYXQgdGhlIGNvdW50ZG93biBoYXMgZW5kZWQsXG4gICAqIHR5cGljYWxseSBwcm9tcHRpbmcgdGhlbSB0byByZWxvYWQgb3IgcmVmcmVzaCB0aGVpciBkYXRhLlxuICAgKi9cbiAgYXV0b1JlZnJlc2hMaXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gJiYgdGhpcy5pc0F1dG9SZWZyZXNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXBvbmVudC5zdG9wKCk7XG4gICAgfVxuICAgIHRoaXMub25Db3VudGRvd25FbmRlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogTWFuYWdlcyB0aGUgY291bnRkb3duIHRpbWVyJ3MgdmlzaWJpbGl0eSBhbmQgc3RhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBzY3JvbGxpbmcuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHRvZ2dsZXMgdGhlIGNvdW50ZG93biB0aW1lciBiYXNlZCBvbiB0aGUgdXNlcidzIHNjcm9sbGluZyBiZWhhdmlvci4gSXQgdXNlc1xuICAgKiB0aGUgYGRpc2FibGVDb3VudGRvd25gIGFuZCBgZW5hYmxlQ291bnRkb3duYCBtZXRob2RzIGZvciBoYW5kbGluZyB0aGUgY291bnRkb3duIHN0YXRlLlxuICAgKlxuICAgKiAtIElmIHRoZSB1c2VyIGlzIHNjcm9sbGluZyBkb3duIHdoaWxlIHRoZSBjb3VudGRvd24gaXMgdmlzaWJsZSAoYGlzU2Nyb2xsaW5nYCBpcyB0cnVlIGFuZFxuICAgKiAgIGBoaWRlQ291bnRkb3duYCBpcyBmYWxzZSksIGBkaXNhYmxlQ291bnRkb3duYCBpcyBjYWxsZWQgdG8gc3RvcCBhbmQgaGlkZSB0aGUgY291bnRkb3duLFxuICAgKiAgIGFuZCBgaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbmAgaXMgc2V0IHRvIGZhbHNlLlxuICAgKlxuICAgKiAtIElmIHRoZSB1c2VyIGhhcyBzdG9wcGVkIHNjcm9sbGluZywgdGhlIGNvdW50ZG93biBzdWJzY3JpcHRpb24gaXMgY2xvc2VkLCBhbmQgdGhlIGNvdW50ZG93blxuICAgKiAgIGlzIGhpZGRlbiAoYCFpc1Njcm9sbGluZ2AsIGBjb3VudGRvd25TdWJzY3JpcHRpb24/LmNsb3NlZGAsIGBoaWRlQ291bnRkb3duYCksIGBlbmFibGVDb3VudGRvd25gXG4gICAqICAgaXMgY2FsbGVkIHRvIHNob3cgYW5kIHJlc3RhcnQgdGhlIGNvdW50ZG93biwgYW5kIGBpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIGhhbmRsZVNjcm9sbGluZygpOiB2b2lkIHtcbiAgICAvLyBDaGVja3MgaWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIGRvd24gd2hpbGUgdGhlIGNvdW50ZG93biBpcyB2aXNpYmxlXG4gICAgY29uc3Qgb25Vc2VyU2Nyb2xsRG93bkhpZGUgPSB0aGlzLmlzU2Nyb2xsaW5nICYmICF0aGlzLmhpZGVDb3VudGRvd247XG5cbiAgICBpZiAob25Vc2VyU2Nyb2xsRG93bkhpZGUpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUNvdW50ZG93bigpO1xuICAgICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSB1c2VyIGhhcyBzdG9wcGVkIHNjcm9sbGluZyBhbmQgdGhlIGNvdW50ZG93biBpcyBjdXJyZW50bHkgaGlkZGVuXG4gICAgY29uc3Qgb25Vc2VyU2Nyb2xsVG9wU2hvdyA9XG4gICAgICAhdGhpcy5pc1Njcm9sbGluZyAmJiB0aGlzLmNvdW50ZG93blN1YnNjcmlwdGlvbj8uY2xvc2VkICYmIHRoaXMuaGlkZUNvdW50ZG93bjtcblxuICAgIGlmIChvblVzZXJTY3JvbGxUb3BTaG93KSB7XG4gICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gPSB0cnVlO1xuICAgICAgdGhpcy5lbmFibGVDb3VudGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCByZWxvYWQoKTogdm9pZDtcbiAgLyoqXG4gICAqIFdyYXBwZXIgbWV0aG9kIHdoZXJlIGl0J3MgbmFtZSBiZXR0ZXIgZGVzY3JpYmVzIGEgY29udGV4dCB3aGVyZSBpdCB3YXMgY2FsbGVkLlxuICAgKi9cbiAgYWJzdHJhY3QgY291bnRkb3duRW5kZWQoKTogdm9pZDtcblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgdG9nZ2xlIHN0YXRlIG9mIHRoZSBjb3VudGRvd24gb24gYnV0dG9uIGNsaWNrLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCwgdHlwaWNhbGx5IGEgY2xpY2sgb24gdGhlIGNvdW50ZG93biB0b2dnbGUgYnV0dG9uLlxuICAgKiBJdCB0b2dnbGVzIGBpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uYCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb3VudGRvd24gdGltZXIuXG4gICAqXG4gICAqIC0gSWYgYGlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT25gIGlzIHNldCB0byBmYWxzZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBjb3VudGRvd24gc2hvdWxkIGJlIHN0b3BwZWQsXG4gICAqICAgYGRpc2FibGVDb3VudGRvd25gIGlzIGNhbGxlZCwgYW5kIGBtYW51YWxseURpc2FibGVkQ291bnRkb3duYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogLSBJZiBgaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbmAgaXMgdHJ1ZSBhbmQgdGhlIGNvdW50ZG93biBzdWJzY3JpcHRpb24gaXMgY2xvc2VkLCBpbmRpY2F0aW5nIHRoYXRcbiAgICogICB0aGUgY291bnRkb3duIGNhbiBiZSBzdGFydGVkLCBgZW5hYmxlQ291bnRkb3duYCBpcyBjYWxsZWQsIGFuZCBgbWFudWFsbHlEaXNhYmxlZENvdW50ZG93bmBcbiAgICogICBpcyBzZXQgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUgTW91c2VFdmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIG1ldGhvZC5cbiAgICovXG4gIG9uVG9nZ2xlQ291bnRkb3duQnV0dG9uU3RhdGUoJGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uID0gIXRoaXMuaXNSZWZyZXNoRGlzYWJsZWQgJiYgIXRoaXMuaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbjtcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZG93bkJ1dHRvblRvb2x0aXBUZXh0KCk7XG5cbiAgICBpZiAoIXRoaXMuaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbikge1xuICAgICAgdGhpcy5kaXNhYmxlQ291bnRkb3duKCk7XG4gICAgICB0aGlzLm1hbnVhbGx5RGlzYWJsZWRDb3VudGRvd24gPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9uUmVmcmVzaFRvZ2dsZU9uID0gdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uICYmIHRoaXMuY291bnRkb3duU3Vic2NyaXB0aW9uLmNsb3NlZDtcblxuICAgIGlmIChvblJlZnJlc2hUb2dnbGVPbikge1xuICAgICAgdGhpcy5lbmFibGVDb3VudGRvd24oKTtcbiAgICAgIHRoaXMubWFudWFsbHlEaXNhYmxlZENvdW50ZG93biA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGxpc3RlbnMgZm9yIGNoYW5nZXMgaW4gdGhlIGBpc0xvYWRpbmdgIG9ic2VydmFibGUsIGZpbHRlcmluZyBvdXQgYW55IHRydXRoeSB2YWx1ZXMuXG4gICAqIE9uY2UgYSBmYWxzeSB2YWx1ZSBpcyBkZXRlY3RlZCAoaW5kaWNhdGluZyB0aGF0IGxvYWRpbmcgaGFzIGZpbmlzaGVkKSwgaXQgYXR0ZW1wdHMgdG8gc3RhcnQgdGhlIGNvdW50ZG93bi5cbiAgICpcbiAgICogSU1QT1JUQU5UOiBJZiB0aGUgd2lkZ2V0J3MgY29uZmlndXJhdGlvbiAocmVmcmVzaEludGVydmFsLCBjaGVjayB0ZW1wbGF0ZSkgaXMgbm90IHNldCBwcmlvciB0byBleGVjdXRpbmcgY291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ/LnN0YXJ0LFxuICAgKiB0aGUgY291bnRkb3duIGludGVydmFsIHdpbGwgbm90IHN0YXJ0IVxuICAgKlxuICAgKiBAcGFyYW0gaW5qZWN0b3IgLSBUaGUgaW5qZWN0b3IgdXNlZCB0byBwcm92aWRlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXNcbiAgICogICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBgcnVuSW5JbmplY3Rpb25Db250ZXh0YC5cbiAgICovXG4gIHN0YXJ0Q291bnRkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuY291bnRkb3duU3Vic2NyaXB0aW9uID0gdGhpcy5pc0xvYWRpbmdcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaXNMb2FkaW5nID0+ICFCb29sZWFuKGlzTG9hZGluZykpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ/LnN0YXJ0KCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhbmQgc3RhcnRzIHRoZSBjb3VudGRvd24gdGltZXIuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG1ha2VzIHRoZSBjb3VudGRvd24gdmlzaWJsZSAoYGhpZGVDb3VudGRvd25gIGlzIHNldCB0byBmYWxzZSkgYW5kIHRoZW5cbiAgICogc3RhcnRzIHRoZSBjb3VudGRvd24gcHJvY2Vzcy4gSXQgZW5zdXJlcyB0aGUgY291bnRkb3duIHRpbWVyIGlzIHVwZGF0ZWQgaW1tZWRpYXRlbHlcbiAgICogYnkgdHJpZ2dlcmluZyBjaGFuZ2UgZGV0ZWN0aW9uIHdpdGggYGNkUmVmLmRldGVjdENoYW5nZXMoKWAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBjb3VudGRvd24uXG4gICAqIFRoaXMgbWV0aG9kIGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMgcmVxdWlyZWQgdG8gaW5pdGlhdGUgdGhlIGNvdW50ZG93biB0aW1lci5cbiAgICovXG4gIGFic3RyYWN0IGVuYWJsZUNvdW50ZG93bigpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBhbmQgaGlkZXMgdGhlIGNvdW50ZG93biB0aW1lci5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIG9uZ29pbmcgY291bnRkb3duIHByb2Nlc3MgYnlcbiAgICogc3RvcHBpbmcgdGhlIGBjb3VudGRvd25JbnRlcnZhbENvbXBvbmVudGAgaWYgaXQgZXhpc3RzLiBJdCB0aGVuIGhpZGVzIHRoZSBjb3VudGRvd24gdGltZXJcbiAgICogYnkgc2V0dGluZyBgaGlkZUNvdW50ZG93bmAgdG8gdHJ1ZS4gVGhpcyBtZXRob2QgZW5jYXBzdWxhdGVzIHRoZSBsb2dpYyByZXF1aXJlZCB0byBoYWx0IGFuZFxuICAgKiBjb25jZWFsIHRoZSBjb3VudGRvd24gdGltZXIuXG4gICAqL1xuICBkaXNhYmxlQ291bnRkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuY291bnRkb3duU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXBvbmVudD8uc3RvcCgpO1xuICAgIHRoaXMuaGlkZUNvdW50ZG93biA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY291bnRkb3duIGJ1dHRvbiB0b29sdGlwIHRleHQgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnZhbCByZWZyZXNoIHRvZ2dsZSBzdGF0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dCgpOiB2b2lkO1xufVxuIl19
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwtYmFzZWQtcmVsb2FkLmFic3RyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vaW50ZXJ2YWwtYmFzZWQtcmVsb2FkLmFic3RyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBbUIsTUFBTSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsTUFBTSx3Q0FBd0MsR0FBRztJQUMvQyxNQUFNLEVBQUU7UUFDTixxQkFBcUIsRUFBRSxxQkFBcUI7S0FDN0M7SUFDRCxVQUFVLEVBQUU7UUFDVix5QkFBeUIsRUFBRSw0QkFBNEI7UUFDdkQsaUJBQWlCLEVBQUUsbUJBQW1CO0tBQ3ZDO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsZ0NBQWdDLEVBQUUsK0JBQStCO0tBQ2xFO0lBQ0QsTUFBTSxFQUFFO1FBQ04seUJBQXlCLEVBQUUseUJBQXlCO1FBQ3BELDBCQUEwQixFQUFFLDBCQUEwQjtLQUN2RDtDQUNPLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixpQkFBaUIsRUFBRSxpQkFBaUI7Q0FDNUIsQ0FBQztBQUlYOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsbUJBQW1CO0lBQXpDO1FBQ1kscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUE4TnhELENBQUM7SUEvS0M7Ozs7OztPQU1HO0lBQ0gsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxDQUFDO1FBQ0Qs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aEMsd0NBQXdDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUNyRTtnQkFDRSxNQUFNO2dCQUNOLE1BQU07Z0JBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUM7Z0JBQ2xELE1BQU0sRUFBRSxVQUFVO2FBQ25CLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsVUFBc0I7UUFDbkQsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNuQixLQUFLLGtCQUFrQixDQUFDLE1BQU07Z0JBQzVCLE9BQU8sd0NBQXdDLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO1lBQ3ZGLEtBQUssa0JBQWtCLENBQUMsaUJBQWlCO2dCQUN2QyxPQUFPLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztZQUMvRTtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIFN1YnNjcmlwdGlvbiwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb3VudGRvd25JbnRlcnZhbENvbXBvbmVudCB9IGZyb20gJy4uL2NvdW50ZG93bi1pbnRlcnZhbCc7XG5pbXBvcnQgeyBHYWluc2lnaHRTZXJ2aWNlIH0gZnJvbSAnLi4vcHJvZHVjdC1leHBlcmllbmNlJztcblxuY29uc3QgUFJPRFVDVF9FWFBFUklFTkNFX0lOVEVSVkFMX0JBU0VEX1JFTE9BRCA9IHtcbiAgRVZFTlRTOiB7XG4gICAgSU5URVJWQUxfQkFTRURfUkVMT0FEOiAnaW50ZXJ2YWxCYXNlZFJlbG9hZCdcbiAgfSxcbiAgQ09NUE9ORU5UUzoge1xuICAgIEFMQVJNX1dJREdFVF9BTEFSTV9SRUxPQUQ6ICdhbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZCcsXG4gICAgREFUQVBPSU5UU19SRUxPQUQ6ICdkYXRhcG9pbnRzLXJlbG9hZCdcbiAgfSxcbiAgQUNUSU9OUzoge1xuICAgIE1BTlVBTExZX0NIQU5HRURfQ09VTlRET1dOX1NUQVRFOiAnbWFudWFsbHlDaGFuZ2VkQ291bnRkb3duU3RhdGUnXG4gIH0sXG4gIFJFU1VMVDoge1xuICAgIE1BTlVBTExZX1BBVVNFRF9DT1VOVERPV046ICdtYW51YWxseVBhdXNlZENvdW50ZG93bicsXG4gICAgTUFOVUFMTFlfUkVTVU1FRF9DT1VOVERPV046ICdtYW51YWxseVJlc3VtZWRDb3VudGRvd24nXG4gIH1cbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBXSURHRVRfVFlQRV9WQUxVRVMgPSB7XG4gIEFMQVJNUzogJ2FsYXJtcycsXG4gIERBVEFfUE9JTlRTX1RBQkxFOiAnZGF0YVBvaW50c1RhYmxlJ1xufSBhcyBjb25zdDtcblxudHlwZSBXaWRnZXRUeXBlID0gKHR5cGVvZiBXSURHRVRfVFlQRV9WQUxVRVMpW2tleW9mIHR5cGVvZiBXSURHRVRfVFlQRV9WQUxVRVNdO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyBhbiBpbnRlcnZhbCByZWxvYWQgZnVuY3Rpb25hbGl0eS5cbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgbWFuYWdpbmcgYW4gaW50ZXJ2YWwtYmFzZWQgcmVsb2FkIG1lY2hhbmlzbS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEludGVydmFsQmFzZWRSZWxvYWQge1xuICBwcm90ZWN0ZWQgZ2FpbnNpZ2h0U2VydmljZSA9IGluamVjdChHYWluc2lnaHRTZXJ2aWNlKTtcblxuICBhYnN0cmFjdCBjb3VudGRvd25JbnRlcnZhbENvbXBvbmVudDogQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBIb2xkcyB0aGUgc3Vic2NyaXB0aW9uIHRvIGEgY291bnRkb3duIG9ic2VydmFibGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY291bnRkb3duU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhdXRvLXJlZnJlc2ggaXMgZW5hYmxlZCBmb3IgdGhlIGRhdGFwb2ludHMgcmVsb2FkIGNvbXBvbmVudCB0aGF0IGlzIHNldCBpbiB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciByZWZyZXNoaW5nIHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgKiBJdCdzICd0cnVlJyB3aGVuIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8gdmlldyBhIG1lYXN1cmVtZW50LlxuICAgKi9cbiAgYWJzdHJhY3QgaXNSZWZyZXNoRGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXJyZW50IGlzTG9hZGluZyBzdGF0ZS4gQmFzZWQgb24gaXQgbmV4dCBjb3VudGRvd24gY3ljbGUgaXMgYmVpbmcgc3RhcnRlZC5cbiAgICovXG4gIGFic3RyYWN0IGlzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFsYXJtIGxpc3QgaXMgYmVpbmcgc2Nyb2xsZWQgb3Igbm90LlxuICAgKi9cbiAgYWJzdHJhY3QgaXNTY3JvbGxpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXJyZW50IHJlZnJlc2ggaW50ZXJ2YWwgc2V0IGluIGEgd2lkZ2V0IGNvbmZpZy5cbiAgICovXG4gIGFic3RyYWN0IHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgYSBjb3VudGRvd24gY3ljbGUgaGFzIGVuZGVkLlxuICAgKi9cbiAgYWJzdHJhY3Qgb25Db3VudGRvd25FbmRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+O1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGludGVydmFsIHJlZnJlc2ggdG9nZ2xlIGJ1dHRvbi5cbiAgICovXG4gIGFic3RyYWN0IGlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT246IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgdG9nZ2xlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3VudGRvd24gaGFzIGJlZW4gbWFudWFsbHkgZGlzYWJsZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgbWFudWFsbHlEaXNhYmxlZENvdW50ZG93bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb3VudGRvd24gdGltZXIgY29tcG9uZW50IGluIHRoZSBjdXJyZW50IGNvbXBvbmVudCdzIFVJLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGhpZGVDb3VudGRvd246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBjb3VudGRvd24gYW5kIHRyaWdnZXJzIGEgcmVmcmVzaCBhY3Rpb24uXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbHRpbmcgdGhlIGNvdW50ZG93biBpbnRlcnZhbCBjb21wb25lbnQncyBvcGVyYXRpb24uXG4gICAqIEFmdGVyIHN0b3BwaW5nIHRoZSBjb3VudGRvd24sIGl0IGVtaXRzIGFuIGBvbkNvdW50ZG93bkVuZGVkYCBldmVudC5cbiAgICogVGhpcyBldmVudCBpcyB1c2VkIHRvIGluZm9ybSBleHRlcm5hbCBjb21wb25lbnRzIHRoYXQgdGhlIGNvdW50ZG93biBoYXMgZW5kZWQsXG4gICAqIHR5cGljYWxseSBwcm9tcHRpbmcgdGhlbSB0byByZWxvYWQgb3IgcmVmcmVzaCB0aGVpciBkYXRhLlxuICAgKi9cbiAgYXV0b1JlZnJlc2hMaXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gJiYgdGhpcy5pc0F1dG9SZWZyZXNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXBvbmVudC5zdG9wKCk7XG4gICAgfVxuICAgIHRoaXMub25Db3VudGRvd25FbmRlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogTWFuYWdlcyB0aGUgY291bnRkb3duIHRpbWVyJ3MgdmlzaWJpbGl0eSBhbmQgc3RhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBzY3JvbGxpbmcuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHRvZ2dsZXMgdGhlIGNvdW50ZG93biB0aW1lciBiYXNlZCBvbiB0aGUgdXNlcidzIHNjcm9sbGluZyBiZWhhdmlvci4gSXQgdXNlc1xuICAgKiB0aGUgYGRpc2FibGVDb3VudGRvd25gIGFuZCBgZW5hYmxlQ291bnRkb3duYCBtZXRob2RzIGZvciBoYW5kbGluZyB0aGUgY291bnRkb3duIHN0YXRlLlxuICAgKlxuICAgKiAtIElmIHRoZSB1c2VyIGlzIHNjcm9sbGluZyBkb3duIHdoaWxlIHRoZSBjb3VudGRvd24gaXMgdmlzaWJsZSAoYGlzU2Nyb2xsaW5nYCBpcyB0cnVlIGFuZFxuICAgKiAgIGBoaWRlQ291bnRkb3duYCBpcyBmYWxzZSksIGBkaXNhYmxlQ291bnRkb3duYCBpcyBjYWxsZWQgdG8gc3RvcCBhbmQgaGlkZSB0aGUgY291bnRkb3duLFxuICAgKiAgIGFuZCBgaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbmAgaXMgc2V0IHRvIGZhbHNlLlxuICAgKlxuICAgKiAtIElmIHRoZSB1c2VyIGhhcyBzdG9wcGVkIHNjcm9sbGluZywgdGhlIGNvdW50ZG93biBzdWJzY3JpcHRpb24gaXMgY2xvc2VkLCBhbmQgdGhlIGNvdW50ZG93blxuICAgKiAgIGlzIGhpZGRlbiAoYCFpc1Njcm9sbGluZ2AsIGBjb3VudGRvd25TdWJzY3JpcHRpb24/LmNsb3NlZGAsIGBoaWRlQ291bnRkb3duYCksIGBlbmFibGVDb3VudGRvd25gXG4gICAqICAgaXMgY2FsbGVkIHRvIHNob3cgYW5kIHJlc3RhcnQgdGhlIGNvdW50ZG93biwgYW5kIGBpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIGhhbmRsZVNjcm9sbGluZygpOiB2b2lkIHtcbiAgICAvLyBDaGVja3MgaWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIGRvd24gd2hpbGUgdGhlIGNvdW50ZG93biBpcyB2aXNpYmxlXG4gICAgY29uc3Qgb25Vc2VyU2Nyb2xsRG93bkhpZGUgPSB0aGlzLmlzU2Nyb2xsaW5nICYmICF0aGlzLmhpZGVDb3VudGRvd247XG5cbiAgICBpZiAob25Vc2VyU2Nyb2xsRG93bkhpZGUpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUNvdW50ZG93bigpO1xuICAgICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSB1c2VyIGhhcyBzdG9wcGVkIHNjcm9sbGluZyBhbmQgdGhlIGNvdW50ZG93biBpcyBjdXJyZW50bHkgaGlkZGVuXG4gICAgY29uc3Qgb25Vc2VyU2Nyb2xsVG9wU2hvdyA9XG4gICAgICAhdGhpcy5pc1Njcm9sbGluZyAmJiB0aGlzLmNvdW50ZG93blN1YnNjcmlwdGlvbj8uY2xvc2VkICYmIHRoaXMuaGlkZUNvdW50ZG93bjtcblxuICAgIGlmIChvblVzZXJTY3JvbGxUb3BTaG93KSB7XG4gICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gPSB0cnVlO1xuICAgICAgdGhpcy5lbmFibGVDb3VudGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCByZWxvYWQoKTogdm9pZDtcbiAgLyoqXG4gICAqIFdyYXBwZXIgbWV0aG9kIHdoZXJlIGl0J3MgbmFtZSBiZXR0ZXIgZGVzY3JpYmVzIGEgY29udGV4dCB3aGVyZSBpdCB3YXMgY2FsbGVkLlxuICAgKi9cbiAgYWJzdHJhY3QgY291bnRkb3duRW5kZWQoKTogdm9pZDtcblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgdG9nZ2xlIHN0YXRlIG9mIHRoZSBjb3VudGRvd24gb24gYnV0dG9uIGNsaWNrLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCwgdHlwaWNhbGx5IGEgY2xpY2sgb24gdGhlIGNvdW50ZG93biB0b2dnbGUgYnV0dG9uLlxuICAgKiBJdCB0b2dnbGVzIGBpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uYCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb3VudGRvd24gdGltZXIuXG4gICAqXG4gICAqIC0gSWYgYGlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT25gIGlzIHNldCB0byBmYWxzZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBjb3VudGRvd24gc2hvdWxkIGJlIHN0b3BwZWQsXG4gICAqICAgYGRpc2FibGVDb3VudGRvd25gIGlzIGNhbGxlZCwgYW5kIGBtYW51YWxseURpc2FibGVkQ291bnRkb3duYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogLSBJZiBgaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbmAgaXMgdHJ1ZSBhbmQgdGhlIGNvdW50ZG93biBzdWJzY3JpcHRpb24gaXMgY2xvc2VkLCBpbmRpY2F0aW5nIHRoYXRcbiAgICogICB0aGUgY291bnRkb3duIGNhbiBiZSBzdGFydGVkLCBgZW5hYmxlQ291bnRkb3duYCBpcyBjYWxsZWQsIGFuZCBgbWFudWFsbHlEaXNhYmxlZENvdW50ZG93bmBcbiAgICogICBpcyBzZXQgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUgTW91c2VFdmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIG1ldGhvZC5cbiAgICogQHBhcmFtIHdpZGdldFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgd2lkZ2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudFxuICAgKi9cbiAgb25Ub2dnbGVDb3VudGRvd25CdXR0b25TdGF0ZSgkZXZlbnQ6IE1vdXNlRXZlbnQsIHdpZGdldFR5cGU6IFdpZGdldFR5cGUpOiB2b2lkIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gPSAhdGhpcy5pc1JlZnJlc2hEaXNhYmxlZCAmJiAhdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uO1xuICAgIHRoaXMudXBkYXRlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQoKTtcblxuICAgIGlmICghdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uKSB7XG4gICAgICB0aGlzLmRpc2FibGVDb3VudGRvd24oKTtcbiAgICAgIHRoaXMubWFudWFsbHlEaXNhYmxlZENvdW50ZG93biA9IHRydWU7XG5cbiAgICAgIHRoaXMudHJpZ2dlckdhaW5zaWdodEV2ZW50KFxuICAgICAgICB3aWRnZXRUeXBlLFxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfSU5URVJWQUxfQkFTRURfUkVMT0FELkFDVElPTlMuTUFOVUFMTFlfQ0hBTkdFRF9DT1VOVERPV05fU1RBVEUsXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9JTlRFUlZBTF9CQVNFRF9SRUxPQUQuUkVTVUxULk1BTlVBTExZX1BBVVNFRF9DT1VOVERPV05cbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb25SZWZyZXNoVG9nZ2xlT24gPSB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gJiYgdGhpcy5jb3VudGRvd25TdWJzY3JpcHRpb24uY2xvc2VkO1xuXG4gICAgaWYgKG9uUmVmcmVzaFRvZ2dsZU9uKSB7XG4gICAgICB0aGlzLmVuYWJsZUNvdW50ZG93bigpO1xuICAgICAgdGhpcy5tYW51YWxseURpc2FibGVkQ291bnRkb3duID0gZmFsc2U7XG5cbiAgICAgIHRoaXMudHJpZ2dlckdhaW5zaWdodEV2ZW50KFxuICAgICAgICB3aWRnZXRUeXBlLFxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfSU5URVJWQUxfQkFTRURfUkVMT0FELkFDVElPTlMuTUFOVUFMTFlfQ0hBTkdFRF9DT1VOVERPV05fU1RBVEUsXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9JTlRFUlZBTF9CQVNFRF9SRUxPQUQuUkVTVUxULk1BTlVBTExZX1JFU1VNRURfQ09VTlRET1dOXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGxpc3RlbnMgZm9yIGNoYW5nZXMgaW4gdGhlIGBpc0xvYWRpbmdgIG9ic2VydmFibGUsIGZpbHRlcmluZyBvdXQgYW55IHRydXRoeSB2YWx1ZXMuXG4gICAqIE9uY2UgYSBmYWxzeSB2YWx1ZSBpcyBkZXRlY3RlZCAoaW5kaWNhdGluZyB0aGF0IGxvYWRpbmcgaGFzIGZpbmlzaGVkKSwgaXQgYXR0ZW1wdHMgdG8gc3RhcnQgdGhlIGNvdW50ZG93bi5cbiAgICpcbiAgICogSU1QT1JUQU5UOiBJZiB0aGUgd2lkZ2V0J3MgY29uZmlndXJhdGlvbiAocmVmcmVzaEludGVydmFsLCBjaGVjayB0ZW1wbGF0ZSkgaXMgbm90IHNldCBwcmlvciB0byBleGVjdXRpbmcgY291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ/LnN0YXJ0LFxuICAgKiB0aGUgY291bnRkb3duIGludGVydmFsIHdpbGwgbm90IHN0YXJ0IVxuICAgKlxuICAgKiBAcGFyYW0gaW5qZWN0b3IgLSBUaGUgaW5qZWN0b3IgdXNlZCB0byBwcm92aWRlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXNcbiAgICogICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBgcnVuSW5JbmplY3Rpb25Db250ZXh0YC5cbiAgICovXG4gIHN0YXJ0Q291bnRkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuY291bnRkb3duU3Vic2NyaXB0aW9uID0gdGhpcy5pc0xvYWRpbmdcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaXNMb2FkaW5nID0+ICFCb29sZWFuKGlzTG9hZGluZykpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ/LnN0YXJ0KCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhbmQgc3RhcnRzIHRoZSBjb3VudGRvd24gdGltZXIuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG1ha2VzIHRoZSBjb3VudGRvd24gdmlzaWJsZSAoYGhpZGVDb3VudGRvd25gIGlzIHNldCB0byBmYWxzZSkgYW5kIHRoZW5cbiAgICogc3RhcnRzIHRoZSBjb3VudGRvd24gcHJvY2Vzcy4gSXQgZW5zdXJlcyB0aGUgY291bnRkb3duIHRpbWVyIGlzIHVwZGF0ZWQgaW1tZWRpYXRlbHlcbiAgICogYnkgdHJpZ2dlcmluZyBjaGFuZ2UgZGV0ZWN0aW9uIHdpdGggYGNkUmVmLmRldGVjdENoYW5nZXMoKWAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBjb3VudGRvd24uXG4gICAqIFRoaXMgbWV0aG9kIGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMgcmVxdWlyZWQgdG8gaW5pdGlhdGUgdGhlIGNvdW50ZG93biB0aW1lci5cbiAgICovXG4gIGFic3RyYWN0IGVuYWJsZUNvdW50ZG93bigpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBhbmQgaGlkZXMgdGhlIGNvdW50ZG93biB0aW1lci5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIG9uZ29pbmcgY291bnRkb3duIHByb2Nlc3MgYnlcbiAgICogc3RvcHBpbmcgdGhlIGBjb3VudGRvd25JbnRlcnZhbENvbXBvbmVudGAgaWYgaXQgZXhpc3RzLiBJdCB0aGVuIGhpZGVzIHRoZSBjb3VudGRvd24gdGltZXJcbiAgICogYnkgc2V0dGluZyBgaGlkZUNvdW50ZG93bmAgdG8gdHJ1ZS4gVGhpcyBtZXRob2QgZW5jYXBzdWxhdGVzIHRoZSBsb2dpYyByZXF1aXJlZCB0byBoYWx0IGFuZFxuICAgKiBjb25jZWFsIHRoZSBjb3VudGRvd24gdGltZXIuXG4gICAqL1xuICBkaXNhYmxlQ291bnRkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuY291bnRkb3duU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXBvbmVudD8uc3RvcCgpO1xuICAgIHRoaXMuaGlkZUNvdW50ZG93biA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY291bnRkb3duIGJ1dHRvbiB0b29sdGlwIHRleHQgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnZhbCByZWZyZXNoIHRvZ2dsZSBzdGF0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dCgpOiB2b2lkO1xuXG4gIHByaXZhdGUgdHJpZ2dlckdhaW5zaWdodEV2ZW50KHdpZGdldFR5cGU6IFdpZGdldFR5cGUsIGFjdGlvbjogc3RyaW5nLCByZXN1bHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh3aWRnZXRUeXBlKSB7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfSU5URVJWQUxfQkFTRURfUkVMT0FELkVWRU5UUy5JTlRFUlZBTF9CQVNFRF9SRUxPQUQsXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5kZXRlcm1pbmVDb21wb25lbnROYW1lKHdpZGdldFR5cGUpLFxuICAgICAgICAgIHdpZGdldDogd2lkZ2V0VHlwZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lQ29tcG9uZW50TmFtZSh3aWRnZXRUeXBlOiBXaWRnZXRUeXBlKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHdpZGdldFR5cGUpIHtcbiAgICAgIGNhc2UgV0lER0VUX1RZUEVfVkFMVUVTLkFMQVJNUzpcbiAgICAgICAgcmV0dXJuIFBST0RVQ1RfRVhQRVJJRU5DRV9JTlRFUlZBTF9CQVNFRF9SRUxPQUQuQ09NUE9ORU5UUy5BTEFSTV9XSURHRVRfQUxBUk1fUkVMT0FEO1xuICAgICAgY2FzZSBXSURHRVRfVFlQRV9WQUxVRVMuREFUQV9QT0lOVFNfVEFCTEU6XG4gICAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0VfSU5URVJWQUxfQkFTRURfUkVMT0FELkNPTVBPTkVOVFMuREFUQVBPSU5UU19SRUxPQUQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iXX0=