@coreui/angular-pro 4.5.28 → 4.5.30

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 (25) hide show
  1. package/esm2022/lib/backdrop/backdrop.service.mjs +53 -29
  2. package/esm2022/lib/backdrop/index.mjs +2 -0
  3. package/esm2022/lib/backdrop/public_api.mjs +2 -0
  4. package/esm2022/lib/modal/modal/modal.component.mjs +86 -57
  5. package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +5 -5
  6. package/esm2022/lib/multi-select/multi-select-option/multi-select-option.component.mjs +50 -63
  7. package/esm2022/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +4 -4
  8. package/esm2022/lib/offcanvas/offcanvas/offcanvas.component.mjs +48 -57
  9. package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +9 -3
  10. package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +21 -3
  11. package/esm2022/lib/smart-table/smart-table.type.mjs +1 -1
  12. package/esm2022/public-api.mjs +2 -1
  13. package/fesm2022/coreui-angular-pro.mjs +289 -233
  14. package/fesm2022/coreui-angular-pro.mjs.map +1 -1
  15. package/lib/backdrop/backdrop.service.d.ts +7 -10
  16. package/lib/backdrop/index.d.ts +1 -0
  17. package/lib/backdrop/public_api.d.ts +1 -0
  18. package/lib/modal/modal/modal.component.d.ts +13 -13
  19. package/lib/multi-select/multi-select-option/multi-select-option.component.d.ts +8 -12
  20. package/lib/offcanvas/offcanvas/offcanvas.component.d.ts +12 -10
  21. package/lib/smart-table/smart-table/smart-table.component.d.ts +3 -0
  22. package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +4 -1
  23. package/lib/smart-table/smart-table.type.d.ts +2 -0
  24. package/package.json +1 -1
  25. package/public-api.d.ts +1 -0
@@ -1,9 +1,9 @@
1
- import { Component, EventEmitter, HostBinding, HostListener, Inject, Input, Output, PLATFORM_ID } from '@angular/core';
2
- import { DOCUMENT, isPlatformBrowser } from '@angular/common';
3
1
  import { animate, state, style, transition, trigger } from '@angular/animations';
4
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
5
- import { filter } from 'rxjs/operators';
2
+ import { DOCUMENT, isPlatformBrowser } from '@angular/common';
3
+ import { booleanAttribute, Component, DestroyRef, EventEmitter, HostBinding, HostListener, inject, Inject, Input, Output, PLATFORM_ID } from '@angular/core';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
5
  import { A11yModule } from '@angular/cdk/a11y';
6
+ import { filter } from 'rxjs/operators';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../offcanvas.service";
9
9
  import * as i2 from "../../backdrop/backdrop.service";
@@ -11,6 +11,7 @@ import * as i3 from "@angular/cdk/layout";
11
11
  import * as i4 from "@angular/cdk/a11y";
12
12
  let nextId = 0;
13
13
  export class OffcanvasComponent {
14
+ #destroyRef;
14
15
  constructor(document, platformId, renderer, hostElement, offcanvasService, backdropService, breakpointObserver) {
15
16
  this.document = document;
16
17
  this.platformId = platformId;
@@ -19,6 +20,7 @@ export class OffcanvasComponent {
19
20
  this.offcanvasService = offcanvasService;
20
21
  this.backdropService = backdropService;
21
22
  this.breakpointObserver = breakpointObserver;
23
+ this.#destroyRef = inject(DestroyRef);
22
24
  /**
23
25
  * Apply a backdrop on body while offcanvas is open.
24
26
  * @type boolean | 'static'
@@ -57,43 +59,31 @@ export class OffcanvasComponent {
57
59
  * @default true
58
60
  */
59
61
  this.ariaModal = true;
62
+ this.#show = false;
63
+ /**
64
+ * Allow body scrolling while offcanvas is visible.
65
+ * @type boolean
66
+ * @default false
67
+ */
68
+ this.scroll = false;
69
+ this.#visible = false;
60
70
  /**
61
71
  * Event triggered on visible change.
72
+ * @type EventEmitter<boolean>
62
73
  */
63
74
  this.visibleChange = new EventEmitter();
64
- this.#scroll = false;
65
- this.#visible = false;
66
- this.#show = false;
67
75
  }
68
- #scroll;
69
- #visible;
70
76
  #activeBackdrop;
71
- #scrollbarWidth;
72
- #stateToggleSubscription;
73
77
  #backdropClickSubscription;
74
78
  #layoutChangeSubscription;
75
79
  #show;
76
- get scroll() {
77
- return this.#scroll;
78
- }
79
- /**
80
- * Allow body scrolling while offcanvas is visible.
81
- * @type boolean
82
- * @default false
83
- */
84
- set scroll(value) {
85
- this.#scroll = coerceBooleanProperty(value);
86
- }
87
- get visible() {
88
- return this.#visible;
89
- }
90
80
  /**
91
81
  * Toggle the visibility of offcanvas component.
92
82
  * @type boolean
93
83
  * @default false
94
84
  */
95
85
  set visible(value) {
96
- this.#visible = coerceBooleanProperty(value);
86
+ this.#visible = value;
97
87
  if (this.#visible) {
98
88
  this.setBackdrop(this.backdrop);
99
89
  this.setFocus();
@@ -104,6 +94,10 @@ export class OffcanvasComponent {
104
94
  this.layoutChangeSubscribe(this.#visible);
105
95
  this.visibleChange.emit(value);
106
96
  }
97
+ get visible() {
98
+ return this.#visible;
99
+ }
100
+ #visible;
107
101
  get hostClasses() {
108
102
  return {
109
103
  offcanvas: typeof this.responsive === 'boolean',
@@ -137,11 +131,9 @@ export class OffcanvasComponent {
137
131
  return breakpointValue ? `${parseFloat(breakpointValue.trim()) - 0.02}px` : false;
138
132
  }
139
133
  animateStart(event) {
140
- const scrollbarWidth = this.#scrollbarWidth;
141
134
  if (event.toState === 'visible') {
142
135
  if (!this.scroll) {
143
- this.renderer.setStyle(this.document.body, 'overflow', 'hidden');
144
- this.renderer.setStyle(this.document.body, 'padding-right', scrollbarWidth);
136
+ this.backdropService.hideScrollbar();
145
137
  }
146
138
  this.renderer.addClass(this.hostElement.nativeElement, 'showing');
147
139
  }
@@ -171,7 +163,6 @@ export class OffcanvasComponent {
171
163
  }
172
164
  }
173
165
  ngOnInit() {
174
- this.#scrollbarWidth = this.backdropService.scrollbarWidth;
175
166
  this.stateToggleSubscribe();
176
167
  setTimeout(() => {
177
168
  // hotfix to avoid offcanvas flicker on the first render
@@ -180,33 +171,30 @@ export class OffcanvasComponent {
180
171
  }
181
172
  ngOnDestroy() {
182
173
  this.offcanvasService.toggle({ show: false, id: this.id });
183
- this.stateToggleSubscribe(false);
184
174
  }
185
175
  setFocus() {
186
176
  if (isPlatformBrowser(this.platformId)) {
187
177
  setTimeout(() => this.hostElement.nativeElement.focus());
188
178
  }
189
179
  }
190
- stateToggleSubscribe(subscribe = true) {
191
- if (subscribe) {
192
- this.#stateToggleSubscription =
193
- this.offcanvasService.offcanvasState$.subscribe((action) => {
194
- if (this === action.offcanvas || this.id === action.id) {
195
- if ('show' in action) {
196
- this.visible =
197
- action?.show === 'toggle' ? !this.visible : action.show;
198
- }
199
- }
200
- });
201
- }
202
- else {
203
- this.#stateToggleSubscription?.unsubscribe();
204
- }
180
+ stateToggleSubscribe() {
181
+ this.offcanvasService.offcanvasState$
182
+ .pipe(takeUntilDestroyed(this.#destroyRef))
183
+ .subscribe((action) => {
184
+ if (this === action.offcanvas || this.id === action.id) {
185
+ if ('show' in action) {
186
+ this.visible =
187
+ action?.show === 'toggle' ? !this.visible : action.show;
188
+ }
189
+ }
190
+ });
205
191
  }
206
192
  backdropClickSubscribe(subscribe = true) {
207
193
  if (subscribe) {
208
194
  this.#backdropClickSubscription =
209
- this.backdropService.backdropClick$.subscribe((clicked) => {
195
+ this.backdropService.backdropClick$
196
+ .pipe(takeUntilDestroyed(this.#destroyRef))
197
+ .subscribe((clicked) => {
210
198
  this.offcanvasService.toggle({ show: !clicked, id: this.id });
211
199
  });
212
200
  }
@@ -215,7 +203,6 @@ export class OffcanvasComponent {
215
203
  }
216
204
  }
217
205
  setBackdrop(setBackdrop) {
218
- this.#scrollbarWidth = this.backdropService.scrollbarWidth;
219
206
  this.#activeBackdrop = !!setBackdrop ? this.backdropService.setBackdrop('offcanvas')
220
207
  : this.backdropService.clearBackdrop(this.#activeBackdrop);
221
208
  setBackdrop === true ? this.backdropClickSubscribe()
@@ -229,7 +216,7 @@ export class OffcanvasComponent {
229
216
  const responsiveBreakpoint = `(max-width: ${this.responsiveBreakpoint})`;
230
217
  const layoutChanges = this.breakpointObserver.observe([responsiveBreakpoint]);
231
218
  this.#layoutChangeSubscription = layoutChanges
232
- .pipe(filter(breakpointState => !breakpointState.matches))
219
+ .pipe(filter(breakpointState => !breakpointState.matches), takeUntilDestroyed(this.#destroyRef))
233
220
  .subscribe((breakpointState) => {
234
221
  this.visible = breakpointState.matches;
235
222
  });
@@ -239,7 +226,7 @@ export class OffcanvasComponent {
239
226
  }
240
227
  }
241
228
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OffcanvasComponent, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.OffcanvasService }, { token: i2.BackdropService }, { token: i3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
242
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OffcanvasComponent, isStandalone: true, selector: "c-offcanvas", inputs: { backdrop: "backdrop", keyboard: "keyboard", placement: "placement", responsive: "responsive", id: "id", role: "role", ariaModal: "ariaModal", scroll: "scroll", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, host: { listeners: { "@showHide.start": "animateStart($event)", "@showHide.done": "animateDone($event)", "document:keydown": "onKeyDownHandler($event)" }, properties: { "attr.role": "this.role", "attr.aria-modal": "this.ariaModal", "class": "this.hostClasses", "attr.aria-hidden": "this.ariaHidden", "attr.tabindex": "this.tabIndex", "@showHide": "this.animateTrigger" } }, exportAs: ["cOffcanvas"], ngImport: i0, template: "<div cdkTrapFocus cdkTrapFocusAutoCapture>\n <ng-content></ng-content>\n</div>\n\n", styles: [":host{display:none}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], animations: [
229
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: OffcanvasComponent, isStandalone: true, selector: "c-offcanvas", inputs: { backdrop: "backdrop", keyboard: ["keyboard", "keyboard", booleanAttribute], placement: "placement", responsive: "responsive", id: "id", role: "role", ariaModal: ["ariaModal", "ariaModal", booleanAttribute], scroll: ["scroll", "scroll", booleanAttribute], visible: ["visible", "visible", booleanAttribute] }, outputs: { visibleChange: "visibleChange" }, host: { listeners: { "@showHide.start": "animateStart($event)", "@showHide.done": "animateDone($event)", "document:keydown": "onKeyDownHandler($event)" }, properties: { "attr.role": "this.role", "attr.aria-modal": "this.ariaModal", "class": "this.hostClasses", "attr.aria-hidden": "this.ariaHidden", "attr.tabindex": "this.tabIndex", "@showHide": "this.animateTrigger" } }, exportAs: ["cOffcanvas"], ngImport: i0, template: "<div cdkTrapFocus cdkTrapFocusAutoCapture>\n <ng-content></ng-content>\n</div>\n\n", styles: [":host{display:none}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], animations: [
243
230
  trigger('showHide', [
244
231
  state('visible', style({
245
232
  // visibility: 'visible'
@@ -273,7 +260,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
273
260
  }] }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.OffcanvasService }, { type: i2.BackdropService }, { type: i3.BreakpointObserver }]; }, propDecorators: { backdrop: [{
274
261
  type: Input
275
262
  }], keyboard: [{
276
- type: Input
263
+ type: Input,
264
+ args: [{ transform: booleanAttribute }]
277
265
  }], placement: [{
278
266
  type: Input
279
267
  }], responsive: [{
@@ -286,16 +274,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
286
274
  type: HostBinding,
287
275
  args: ['attr.role']
288
276
  }], ariaModal: [{
289
- type: Input
277
+ type: Input,
278
+ args: [{ transform: booleanAttribute }]
290
279
  }, {
291
280
  type: HostBinding,
292
281
  args: ['attr.aria-modal']
293
- }], visibleChange: [{
294
- type: Output
295
282
  }], scroll: [{
296
- type: Input
283
+ type: Input,
284
+ args: [{ transform: booleanAttribute }]
297
285
  }], visible: [{
298
- type: Input
286
+ type: Input,
287
+ args: [{ transform: booleanAttribute }]
288
+ }], visibleChange: [{
289
+ type: Output
299
290
  }], hostClasses: [{
300
291
  type: HostBinding,
301
292
  args: ['class']
@@ -318,4 +309,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
318
309
  type: HostListener,
319
310
  args: ['document:keydown', ['$event']]
320
311
  }] } });
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmY2FudmFzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvb2ZmY2FudmFzL29mZmNhbnZhcy9vZmZjYW52YXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9vZmZjYW52YXMvb2ZmY2FudmFzL29mZmNhbnZhcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzVFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQUUvQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUEyQmYsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUM0QixRQUFrQixFQUNmLFVBQWUsRUFDcEMsUUFBbUIsRUFDbkIsV0FBdUIsRUFDdkIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLGtCQUFzQztRQU5wQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2YsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25C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QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgYW5pbWF0ZSwgQW5pbWF0aW9uRXZlbnQsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50U3RhdGUgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCYWNrZHJvcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9iYWNrZHJvcC9iYWNrZHJvcC5zZXJ2aWNlJztcbmltcG9ydCB7IE9mZmNhbnZhc1NlcnZpY2UgfSBmcm9tICcuLi9vZmZjYW52YXMuc2VydmljZSc7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5sZXQgbmV4dElkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1vZmZjYW52YXMnLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignc2hvd0hpZGUnLCBbXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgLy8gdmlzaWJpbGl0eTogJ3Zpc2libGUnXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgLy8gdmlzaWJpbGl0eTogJ2hpZGRlbidcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlIDw9PiAqJywgW2FuaW1hdGUoJzMwMG1zJyldKVxuICAgIF0pXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9vZmZjYW52YXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vZmZjYW52YXMuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjT2ZmY2FudmFzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ExMXlNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIE9mZmNhbnZhc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIG9mZmNhbnZhc1NlcnZpY2U6IE9mZmNhbnZhc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYWNrZHJvcFNlcnZpY2U6IEJhY2tkcm9wU2VydmljZSxcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXG4gICkge31cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2Nyb2xsOiBCb29sZWFuSW5wdXQ7XG4gIC8qKlxuICAgKiBBcHBseSBhIGJhY2tkcm9wIG9uIGJvZHkgd2hpbGUgb2ZmY2FudmFzIGlzIG9wZW4uXG4gICAqIEB0eXBlIGJvb2xlYW4gfCAnc3RhdGljJ1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBiYWNrZHJvcDogYm9vbGVhbiB8ICdzdGF0aWMnID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvZmZjYW52YXMgd2hlbiBlc2NhcGUga2V5IGlzIHByZXNzZWQgW2RvY3NdXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkga2V5Ym9hcmQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnRzIHBsYWNlbWVudCwgdGhlcmXigJlzIG5vIGRlZmF1bHQgcGxhY2VtZW50LlxuICAgKiBAdHlwZSB7J3N0YXJ0JyB8ICdlbmQnIHwgJ3RvcCcgfCAnYm90dG9tJ31cbiAgICogQGRlZmF1bHQgJ3N0YXJ0J1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2VtZW50OiBzdHJpbmcgfCAnc3RhcnQnIHwgJ2VuZCcgfCAndG9wJyB8ICdib3R0b20nID0gJ3N0YXJ0JztcblxuICAvKipcbiAgICogUmVzcG9uc2l2ZSBvZmZjYW52YXMgcHJvcGVydHkgaGlkZXMgY29udGVudCBvdXRzaWRlIHRoZSB2aWV3cG9ydCBmcm9tIGEgc3BlY2lmaWVkIGJyZWFrcG9pbnQgYW5kIGRvd24uXG4gICAqIEB0eXBlIGJvb2xlYW4gfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJ3h4bCc7XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQHNpbmNlIDQuMy4xMFxuICAgKi9cbiAgQElucHV0KCkgcmVzcG9uc2l2ZT86IGJvb2xlYW4gfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJ3h4bCcgPSB0cnVlO1xuICBASW5wdXQoKSBpZCA9IGBvZmZjYW52YXMtJHt0aGlzLnBsYWNlbWVudH0tJHtuZXh0SWQrK31gO1xuICAvKipcbiAgICogRGVmYXVsdCByb2xlIGZvciBvZmZjYW52YXMuIFtkb2NzXVxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ2RpYWxvZydcbiAgICovXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdkaWFsb2cnO1xuICAvKipcbiAgICogU2V0IGFyaWEtbW9kYWwgaHRtbCBhdHRyIGZvciBvZmZjYW52YXMuIFtkb2NzXVxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW1vZGFsJykgYXJpYU1vZGFsID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEV2ZW50IHRyaWdnZXJlZCBvbiB2aXNpYmxlIGNoYW5nZS5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAjc2Nyb2xsID0gZmFsc2U7XG4gICN2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gICNhY3RpdmVCYWNrZHJvcCE6IEhUTUxEaXZFbGVtZW50O1xuICAjc2Nyb2xsYmFyV2lkdGghOiBzdHJpbmc7XG4gICNzdGF0ZVRvZ2dsZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgI2JhY2tkcm9wQ2xpY2tTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gICNsYXlvdXRDaGFuZ2VTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gICNzaG93ID0gZmFsc2U7XG5cbiAgZ2V0IHNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy4jc2Nyb2xsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGJvZHkgc2Nyb2xsaW5nIHdoaWxlIG9mZmNhbnZhcyBpcyB2aXNpYmxlLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jc2Nyb2xsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiN2aXNpYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBvZmZjYW52YXMgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI3Zpc2libGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmICh0aGlzLiN2aXNpYmxlKSB7XG4gICAgICB0aGlzLnNldEJhY2tkcm9wKHRoaXMuYmFja2Ryb3ApO1xuICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldEJhY2tkcm9wKGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5sYXlvdXRDaGFuZ2VTdWJzY3JpYmUodGhpcy4jdmlzaWJsZSk7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBvZmZjYW52YXM6IHR5cGVvZiB0aGlzLnJlc3BvbnNpdmUgPT09ICdib29sZWFuJyxcbiAgICAgIFtgb2ZmY2FudmFzLSR7dGhpcy5yZXNwb25zaXZlfWBdOiB0eXBlb2YgdGhpcy5yZXNwb25zaXZlICE9PSAnYm9vbGVhbicsXG4gICAgICBbYG9mZmNhbnZhcy0ke3RoaXMucGxhY2VtZW50fWBdOiAhIXRoaXMucGxhY2VtZW50LFxuICAgICAgc2hvdzogdGhpcy5zaG93XG4gICAgfTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpXG4gIGdldCBhcmlhSGlkZGVuKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlID8gbnVsbCA6IHRydWU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgdGFiSW5kZXgoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuICctMSc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ0BzaG93SGlkZScpXG4gIGdldCBhbmltYXRlVHJpZ2dlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZpc2libGUgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbiAgfVxuXG4gIGdldCBzaG93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGUgJiYgdGhpcy4jc2hvdztcbiAgfVxuXG4gIHNldCBzaG93KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jc2hvdyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc3BvbnNpdmVCcmVha3BvaW50KCk6IHN0cmluZyB8IGZhbHNlIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucmVzcG9uc2l2ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGNvbnN0IHJlc3BvbnNpdmVCcmVha3BvaW50ID0gdGhpcy5yZXNwb25zaXZlO1xuICAgIGNvbnN0IGJyZWFrcG9pbnRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS1jdWktYnJlYWtwb2ludC0ke3Jlc3BvbnNpdmVCcmVha3BvaW50LnRyaW0oKX1gKSB8fCBmYWxzZTtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlID8gYCR7cGFyc2VGbG9hdChicmVha3BvaW50VmFsdWUudHJpbSgpKSAtIDAuMDJ9cHhgIDogZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdAc2hvd0hpZGUuc3RhcnQnLCBbJyRldmVudCddKVxuICBhbmltYXRlU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLiNzY3JvbGxiYXJXaWR0aDtcbiAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICBpZiAoIXRoaXMuc2Nyb2xsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCAncGFkZGluZy1yaWdodCcsIHNjcm9sbGJhcldpZHRoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnc2hvd2luZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2hpZGluZycpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ0BzaG93SGlkZS5kb25lJywgWyckZXZlbnQnXSlcbiAgYW5pbWF0ZURvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnc2hvd2luZycpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnaGlkaW5nJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksICdwYWRkaW5nUmlnaHQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNob3cgPSB0aGlzLnZpc2libGU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgJiZcbiAgICAgIHRoaXMua2V5Ym9hcmQgJiZcbiAgICAgIHRoaXMudmlzaWJsZSAmJlxuICAgICAgdGhpcy5iYWNrZHJvcCAhPT0gJ3N0YXRpYydcbiAgICApIHtcbiAgICAgIHRoaXMub2ZmY2FudmFzU2VydmljZS50b2dnbGUoeyBzaG93OiBmYWxzZSwgaWQ6IHRoaXMuaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jc2Nyb2xsYmFyV2lkdGggPSB0aGlzLmJhY2tkcm9wU2VydmljZS5zY3JvbGxiYXJXaWR0aDtcbiAgICB0aGlzLnN0YXRlVG9nZ2xlU3Vic2NyaWJlKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBob3RmaXggdG8gYXZvaWQgb2ZmY2FudmFzIGZsaWNrZXIgb24gdGhlIGZpcnN0IHJlbmRlclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ2ZsZXgnKTtcbiAgICB9KVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vZmZjYW52YXNTZXJ2aWNlLnRvZ2dsZSh7IHNob3c6IGZhbHNlLCBpZDogdGhpcy5pZCB9KTtcbiAgICB0aGlzLnN0YXRlVG9nZ2xlU3Vic2NyaWJlKGZhbHNlKTtcbiAgfVxuXG4gIHNldEZvY3VzKCk6IHZvaWQge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRlVG9nZ2xlU3Vic2NyaWJlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLiNzdGF0ZVRvZ2dsZVN1YnNjcmlwdGlvbiA9XG4gICAgICAgIHRoaXMub2ZmY2FudmFzU2VydmljZS5vZmZjYW52YXNTdGF0ZSQuc3Vic2NyaWJlKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAodGhpcyA9PT0gYWN0aW9uLm9mZmNhbnZhcyB8fCB0aGlzLmlkID09PSBhY3Rpb24uaWQpIHtcbiAgICAgICAgICAgIGlmICgnc2hvdycgaW4gYWN0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9XG4gICAgICAgICAgICAgICAgYWN0aW9uPy5zaG93ID09PSAndG9nZ2xlJyA/ICF0aGlzLnZpc2libGUgOiBhY3Rpb24uc2hvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNzdGF0ZVRvZ2dsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJhY2tkcm9wQ2xpY2tTdWJzY3JpYmUoc3Vic2NyaWJlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMuI2JhY2tkcm9wQ2xpY2tTdWJzY3JpcHRpb24gPVxuICAgICAgICB0aGlzLmJhY2tkcm9wU2VydmljZS5iYWNrZHJvcENsaWNrJC5zdWJzY3JpYmUoKGNsaWNrZWQpID0+IHtcbiAgICAgICAgICB0aGlzLm9mZmNhbnZhc1NlcnZpY2UudG9nZ2xlKHsgc2hvdzogIWNsaWNrZWQsIGlkOiB0aGlzLmlkIH0pO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jYmFja2Ryb3BDbGlja1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEJhY2tkcm9wKHNldEJhY2tkcm9wOiBib29sZWFuIHwgJ3N0YXRpYycpOiB2b2lkIHtcbiAgICB0aGlzLiNzY3JvbGxiYXJXaWR0aCA9IHRoaXMuYmFja2Ryb3BTZXJ2aWNlLnNjcm9sbGJhcldpZHRoO1xuICAgIHRoaXMuI2FjdGl2ZUJhY2tkcm9wID0gISFzZXRCYWNrZHJvcCA/IHRoaXMuYmFja2Ryb3BTZXJ2aWNlLnNldEJhY2tkcm9wKCdvZmZjYW52YXMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuYmFja2Ryb3BTZXJ2aWNlLmNsZWFyQmFja2Ryb3AodGhpcy4jYWN0aXZlQmFja2Ryb3ApO1xuICAgIHNldEJhY2tkcm9wID09PSB0cnVlID8gdGhpcy5iYWNrZHJvcENsaWNrU3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuYmFja2Ryb3BDbGlja1N1YnNjcmliZShmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGxheW91dENoYW5nZVN1YnNjcmliZShzdWJzY3JpYmU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG5cbiAgICBpZiAoc3Vic2NyaWJlKSB7XG5cbiAgICAgIGlmICghdGhpcy5yZXNwb25zaXZlQnJlYWtwb2ludCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNpdmVCcmVha3BvaW50ID0gYChtYXgtd2lkdGg6ICR7dGhpcy5yZXNwb25zaXZlQnJlYWtwb2ludH0pYDtcblxuICAgICAgY29uc3QgbGF5b3V0Q2hhbmdlcyA9IHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW3Jlc3BvbnNpdmVCcmVha3BvaW50XSk7XG5cbiAgICAgIHRoaXMuI2xheW91dENoYW5nZVN1YnNjcmlwdGlvbiA9IGxheW91dENoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGJyZWFrcG9pbnRTdGF0ZSA9PiAhYnJlYWtwb2ludFN0YXRlLm1hdGNoZXMpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYnJlYWtwb2ludFN0YXRlOiBCcmVha3BvaW50U3RhdGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGJyZWFrcG9pbnRTdGF0ZS5tYXRjaGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jbGF5b3V0Q2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjZGtUcmFwRm9jdXMgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG4iXX0=
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmY2FudmFzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvb2ZmY2FudmFzL29mZmNhbnZhcy9vZmZjYW52YXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9vZmZjYW52YXMvb2ZmY2FudmFzL29mZmNhbnZhcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFrQixLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUVWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixXQUFXLEVBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBS3hDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQTJCZixNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFdBQVcsQ0FBc0I7SUFFakMsWUFDNEIsUUFBa0IsRUFDZixVQUFlLEVBQ3BDLFFBQW1CLEVBQ25CLFdBQXVCLEVBQ3ZCLGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxrQkFBc0M7UUFOcEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNmLGVB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QS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTzdCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBUUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBTTZCLElBQUk7c0JBQXRDLEtBQUs7O3NCQUFJLFdBQVc7dUJBQUMsV0FBVztnQkFNdUMsU0FBUztzQkFBaEYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTs7c0JBQUcsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBWTlCLE1BQU07c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUWxDLE9BQU87c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkF1Qm5CLGFBQWE7c0JBQS9CLE1BQU07Z0JBR0gsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU87Z0JBV2hCLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBTTNCLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxlQUFlO2dCQU14QixjQUFjO3NCQURqQixXQUFXO3VCQUFDLFdBQVc7Z0JBd0J4QixZQUFZO3NCQURYLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBYTNDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFnQjFDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgQW5pbWF0aW9uRXZlbnQsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50U3RhdGUgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCYWNrZHJvcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9iYWNrZHJvcC9iYWNrZHJvcC5zZXJ2aWNlJztcbmltcG9ydCB7IE9mZmNhbnZhc1NlcnZpY2UgfSBmcm9tICcuLi9vZmZjYW52YXMuc2VydmljZSc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLW9mZmNhbnZhcycsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzaG93SGlkZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAndmlzaWJsZScsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAvLyB2aXNpYmlsaXR5OiAndmlzaWJsZSdcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAvLyB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPD0+IConLCBbYW5pbWF0ZSgnMzAwbXMnKV0pXG4gICAgXSlcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL29mZmNhbnZhcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29mZmNhbnZhcy5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NPZmZjYW52YXMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQTExeU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgT2ZmY2FudmFzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICNkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgb2ZmY2FudmFzU2VydmljZTogT2ZmY2FudmFzU2VydmljZSxcbiAgICBwcml2YXRlIGJhY2tkcm9wU2VydmljZTogQmFja2Ryb3BTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBBcHBseSBhIGJhY2tkcm9wIG9uIGJvZHkgd2hpbGUgb2ZmY2FudmFzIGlzIG9wZW4uXG4gICAqIEB0eXBlIGJvb2xlYW4gfCAnc3RhdGljJ1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBiYWNrZHJvcDogYm9vbGVhbiB8ICdzdGF0aWMnID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvZmZjYW52YXMgd2hlbiBlc2NhcGUga2V5IGlzIHByZXNzZWQgW2RvY3NdXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGtleWJvYXJkID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ29tcG9uZW50cyBwbGFjZW1lbnQsIHRoZXJl4oCZcyBubyBkZWZhdWx0IHBsYWNlbWVudC5cbiAgICogQHR5cGUgeydzdGFydCcgfCAnZW5kJyB8ICd0b3AnIHwgJ2JvdHRvbSd9XG4gICAqIEBkZWZhdWx0ICdzdGFydCdcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlbWVudDogc3RyaW5nIHwgJ3N0YXJ0JyB8ICdlbmQnIHwgJ3RvcCcgfCAnYm90dG9tJyA9ICdzdGFydCc7XG5cbiAgLyoqXG4gICAqIFJlc3BvbnNpdmUgb2ZmY2FudmFzIHByb3BlcnR5IGhpZGVzIGNvbnRlbnQgb3V0c2lkZSB0aGUgdmlld3BvcnQgZnJvbSBhIHNwZWNpZmllZCBicmVha3BvaW50IGFuZCBkb3duLlxuICAgKiBAdHlwZSBib29sZWFuIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJyB8ICd4eGwnO1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBzaW5jZSA0LjMuMTBcbiAgICovXG4gIEBJbnB1dCgpIHJlc3BvbnNpdmU/OiBib29sZWFuIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJyB8ICd4eGwnID0gdHJ1ZTtcbiAgQElucHV0KCkgaWQgPSBgb2ZmY2FudmFzLSR7dGhpcy5wbGFjZW1lbnR9LSR7bmV4dElkKyt9YDtcbiAgLyoqXG4gICAqIERlZmF1bHQgcm9sZSBmb3Igb2ZmY2FudmFzLiBbZG9jc11cbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdkaWFsb2cnXG4gICAqL1xuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGUgPSAnZGlhbG9nJztcbiAgLyoqXG4gICAqIFNldCBhcmlhLW1vZGFsIGh0bWwgYXR0ciBmb3Igb2ZmY2FudmFzLiBbZG9jc11cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWwgPSB0cnVlO1xuXG4gICNhY3RpdmVCYWNrZHJvcCE6IEhUTUxEaXZFbGVtZW50O1xuICAjYmFja2Ryb3BDbGlja1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgI2xheW91dENoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgI3Nob3cgPSBmYWxzZTtcblxuICAvKipcbiAgICogQWxsb3cgYm9keSBzY3JvbGxpbmcgd2hpbGUgb2ZmY2FudmFzIGlzIHZpc2libGUuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIG9mZmNhbnZhcyBjb21wb25lbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI3Zpc2libGUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy4jdmlzaWJsZSkge1xuICAgICAgdGhpcy5zZXRCYWNrZHJvcCh0aGlzLmJhY2tkcm9wKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRCYWNrZHJvcChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMubGF5b3V0Q2hhbmdlU3Vic2NyaWJlKHRoaXMuI3Zpc2libGUpO1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiN2aXNpYmxlO1xuICB9XG5cbiAgI3Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRXZlbnQgdHJpZ2dlcmVkIG9uIHZpc2libGUgY2hhbmdlLlxuICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8Ym9vbGVhbj5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBvZmZjYW52YXM6IHR5cGVvZiB0aGlzLnJlc3BvbnNpdmUgPT09ICdib29sZWFuJyxcbiAgICAgIFtgb2ZmY2FudmFzLSR7dGhpcy5yZXNwb25zaXZlfWBdOiB0eXBlb2YgdGhpcy5yZXNwb25zaXZlICE9PSAnYm9vbGVhbicsXG4gICAgICBbYG9mZmNhbnZhcy0ke3RoaXMucGxhY2VtZW50fWBdOiAhIXRoaXMucGxhY2VtZW50LFxuICAgICAgc2hvdzogdGhpcy5zaG93XG4gICAgfTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpXG4gIGdldCBhcmlhSGlkZGVuKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlID8gbnVsbCA6IHRydWU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgdGFiSW5kZXgoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuICctMSc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ0BzaG93SGlkZScpXG4gIGdldCBhbmltYXRlVHJpZ2dlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZpc2libGUgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbiAgfVxuXG4gIGdldCBzaG93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGUgJiYgdGhpcy4jc2hvdztcbiAgfVxuXG4gIHNldCBzaG93KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jc2hvdyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc3BvbnNpdmVCcmVha3BvaW50KCk6IHN0cmluZyB8IGZhbHNlIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucmVzcG9uc2l2ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGNvbnN0IHJlc3BvbnNpdmVCcmVha3BvaW50ID0gdGhpcy5yZXNwb25zaXZlO1xuICAgIGNvbnN0IGJyZWFrcG9pbnRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS1jdWktYnJlYWtwb2ludC0ke3Jlc3BvbnNpdmVCcmVha3BvaW50LnRyaW0oKX1gKSB8fCBmYWxzZTtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlID8gYCR7cGFyc2VGbG9hdChicmVha3BvaW50VmFsdWUudHJpbSgpKSAtIDAuMDJ9cHhgIDogZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdAc2hvd0hpZGUuc3RhcnQnLCBbJyRldmVudCddKVxuICBhbmltYXRlU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgaWYgKCF0aGlzLnNjcm9sbCkge1xuICAgICAgICB0aGlzLmJhY2tkcm9wU2VydmljZS5oaWRlU2Nyb2xsYmFyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3Nob3dpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdoaWRpbmcnKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdAc2hvd0hpZGUuZG9uZScsIFsnJGV2ZW50J10pXG4gIGFuaW1hdGVEb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3Nob3dpbmcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50b1N0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2hpZGluZycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCAncGFkZGluZ1JpZ2h0Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zaG93ID0gdGhpcy52aXNpYmxlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICAgICB0aGlzLmtleWJvYXJkICYmXG4gICAgICB0aGlzLnZpc2libGUgJiZcbiAgICAgIHRoaXMuYmFja2Ryb3AgIT09ICdzdGF0aWMnXG4gICAgKSB7XG4gICAgICB0aGlzLm9mZmNhbnZhc1NlcnZpY2UudG9nZ2xlKHsgc2hvdzogZmFsc2UsIGlkOiB0aGlzLmlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVUb2dnbGVTdWJzY3JpYmUoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGhvdGZpeCB0byBhdm9pZCBvZmZjYW52YXMgZmxpY2tlciBvbiB0aGUgZmlyc3QgcmVuZGVyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnZmxleCcpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vZmZjYW52YXNTZXJ2aWNlLnRvZ2dsZSh7IHNob3c6IGZhbHNlLCBpZDogdGhpcy5pZCB9KTtcbiAgfVxuXG4gIHNldEZvY3VzKCk6IHZvaWQge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRlVG9nZ2xlU3Vic2NyaWJlKCk6IHZvaWQge1xuICAgIHRoaXMub2ZmY2FudmFzU2VydmljZS5vZmZjYW52YXNTdGF0ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGFjdGlvbikgPT4ge1xuICAgICAgICBpZiAodGhpcyA9PT0gYWN0aW9uLm9mZmNhbnZhcyB8fCB0aGlzLmlkID09PSBhY3Rpb24uaWQpIHtcbiAgICAgICAgICBpZiAoJ3Nob3cnIGluIGFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlID1cbiAgICAgICAgICAgICAgYWN0aW9uPy5zaG93ID09PSAndG9nZ2xlJyA/ICF0aGlzLnZpc2libGUgOiBhY3Rpb24uc2hvdztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiYWNrZHJvcENsaWNrU3Vic2NyaWJlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLiNiYWNrZHJvcENsaWNrU3Vic2NyaXB0aW9uID1cbiAgICAgICAgdGhpcy5iYWNrZHJvcFNlcnZpY2UuYmFja2Ryb3BDbGljayRcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChjbGlja2VkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9mZmNhbnZhc1NlcnZpY2UudG9nZ2xlKHsgc2hvdzogIWNsaWNrZWQsIGlkOiB0aGlzLmlkIH0pO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNiYWNrZHJvcENsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0QmFja2Ryb3Aoc2V0QmFja2Ryb3A6IGJvb2xlYW4gfCAnc3RhdGljJyk6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2ZUJhY2tkcm9wID0gISFzZXRCYWNrZHJvcCA/IHRoaXMuYmFja2Ryb3BTZXJ2aWNlLnNldEJhY2tkcm9wKCdvZmZjYW52YXMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuYmFja2Ryb3BTZXJ2aWNlLmNsZWFyQmFja2Ryb3AodGhpcy4jYWN0aXZlQmFja2Ryb3ApO1xuICAgIHNldEJhY2tkcm9wID09PSB0cnVlID8gdGhpcy5iYWNrZHJvcENsaWNrU3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuYmFja2Ryb3BDbGlja1N1YnNjcmliZShmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGxheW91dENoYW5nZVN1YnNjcmliZShzdWJzY3JpYmU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG5cbiAgICBpZiAoc3Vic2NyaWJlKSB7XG5cbiAgICAgIGlmICghdGhpcy5yZXNwb25zaXZlQnJlYWtwb2ludCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNpdmVCcmVha3BvaW50ID0gYChtYXgtd2lkdGg6ICR7dGhpcy5yZXNwb25zaXZlQnJlYWtwb2ludH0pYDtcblxuICAgICAgY29uc3QgbGF5b3V0Q2hhbmdlcyA9IHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW3Jlc3BvbnNpdmVCcmVha3BvaW50XSk7XG5cbiAgICAgIHRoaXMuI2xheW91dENoYW5nZVN1YnNjcmlwdGlvbiA9IGxheW91dENoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGJyZWFrcG9pbnRTdGF0ZSA9PiAhYnJlYWtwb2ludFN0YXRlLm1hdGNoZXMpLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJyZWFrcG9pbnRTdGF0ZTogQnJlYWtwb2ludFN0YXRlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSBicmVha3BvaW50U3RhdGUubWF0Y2hlcztcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2xheW91dENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2RrVHJhcEZvY3VzIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuIl19