@po-ui/ng-components 14.1.0 → 14.3.0

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 (63) hide show
  1. package/esm2020/lib/components/po-breadcrumb/po-breadcrumb-dropdown/po-breadcrumb-dropdown.component.mjs +5 -3
  2. package/esm2020/lib/components/po-button/po-button-base.component.mjs +58 -8
  3. package/esm2020/lib/components/po-button/po-button-size.enum.mjs +6 -0
  4. package/esm2020/lib/components/po-button/po-button.component.mjs +4 -4
  5. package/esm2020/lib/components/po-button-group/po-button-group-base.component.mjs +8 -1
  6. package/esm2020/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
  7. package/esm2020/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +12 -12
  8. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox-base.component.mjs +11 -2
  9. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox.component.mjs +24 -12
  10. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +14 -20
  11. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.mjs +5 -4
  12. package/esm2020/lib/components/po-field/po-combo/po-combo-base.component.mjs +74 -43
  13. package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +17 -15
  14. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +3 -8
  15. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +2 -1
  16. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +25 -2
  17. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +5 -5
  18. package/esm2020/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +28 -2
  19. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.mjs +28 -2
  20. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.mjs +4 -4
  21. package/esm2020/lib/components/po-field/po-lookup/po-lookup.component.mjs +5 -3
  22. package/esm2020/lib/components/po-field/po-lookup/services/po-lookup-modal.service.mjs +6 -2
  23. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +2 -2
  24. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.mjs +9 -9
  25. package/esm2020/lib/components/po-field/po-select/po-select.component.mjs +90 -25
  26. package/esm2020/lib/components/po-field/po-upload/po-upload-base.service.mjs +4 -2
  27. package/esm2020/lib/components/po-list-view/po-list-view.component.mjs +3 -3
  28. package/esm2020/lib/components/po-table/po-table-base.component.mjs +21 -2
  29. package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +3 -3
  30. package/esm2020/lib/components/po-table/po-table.component.mjs +511 -476
  31. package/esm2020/lib/components/po-widget/po-widget-base.component.mjs +3 -2
  32. package/esm2020/lib/components/po-widget/po-widget.component.mjs +24 -12
  33. package/esm2020/lib/utils/util.mjs +21 -12
  34. package/fesm2015/po-ui-ng-components.mjs +1288 -952
  35. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  36. package/fesm2020/po-ui-ng-components.mjs +1266 -937
  37. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  38. package/lib/components/po-button/po-button-base.component.d.ts +29 -4
  39. package/lib/components/po-button/po-button-size.enum.d.ts +4 -0
  40. package/lib/components/po-button-group/po-button-group-base.component.d.ts +7 -0
  41. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +18 -0
  42. package/lib/components/po-field/po-checkbox/po-checkbox-base.component.d.ts +2 -1
  43. package/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.d.ts +2 -1
  44. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +27 -22
  45. package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +13 -1
  46. package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +21 -1
  47. package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.d.ts +21 -1
  48. package/lib/components/po-field/po-lookup/services/po-lookup-modal.service.d.ts +4 -0
  49. package/lib/components/po-field/po-select/po-select.component.d.ts +36 -7
  50. package/lib/components/po-table/po-table-base.component.d.ts +12 -1
  51. package/lib/components/po-table/po-table.component.d.ts +6 -0
  52. package/lib/components/po-widget/po-widget-base.component.d.ts +1 -0
  53. package/lib/utils/util.d.ts +2 -1
  54. package/package.json +4 -4
  55. package/po-ui-ng-components-14.3.0.tgz +0 -0
  56. package/schematics/ng-add/index.js +1 -1
  57. package/schematics/ng-update/v14/index.js +1 -1
  58. package/schematics/ng-update/v2/index.js +1 -1
  59. package/schematics/ng-update/v3/index.js +1 -1
  60. package/schematics/ng-update/v4/index.js +1 -1
  61. package/schematics/ng-update/v5/index.js +1 -1
  62. package/schematics/ng-update/v6/index.js +1 -1
  63. package/po-ui-ng-components-14.1.0.tgz +0 -0
@@ -1,11 +1,11 @@
1
1
  import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, Component, ElementRef, forwardRef, HostListener, ViewChild, Input, Output, EventEmitter } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
4
- import { isMobile, removeDuplicatedOptions, removeUndefinedAndNullOptions, validValue } from '../../../utils/util';
5
- import { PoControlPositionService } from './../../../services/po-control-position/po-control-position.service';
2
+ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild } from '@angular/core';
3
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { isMobile, removeDuplicatedOptions, removeDuplicatedOptionsWithFieldValue, removeUndefinedAndNullOptions, removeUndefinedAndNullOptionsWithFieldValue, validValue } from '../../../utils/util';
6
5
  import { PoKeyCodeEnum } from './../../../enums/po-key-code.enum';
7
- import { PoFieldValidateModel } from '../po-field-validate.model';
6
+ import { PoControlPositionService } from './../../../services/po-control-position/po-control-position.service';
8
7
  import { InputBoolean } from '../../../decorators';
8
+ import { PoFieldValidateModel } from '../po-field-validate.model';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "./../../../services/po-control-position/po-control-position.service";
11
11
  import * as i2 from "@angular/common";
@@ -28,9 +28,9 @@ function PoSelectComponent_option_4_Template(rf, ctx) { if (rf & 1) {
28
28
  } if (rf & 2) {
29
29
  const option_r7 = ctx.$implicit;
30
30
  const ctx_r2 = i0.ɵɵnextContext();
31
- i0.ɵɵproperty("disabled", ctx_r2.readonly)("value", option_r7.value);
31
+ i0.ɵɵproperty("disabled", ctx_r2.readonly)("value", option_r7 == null ? null : option_r7[ctx_r2.fieldValue]);
32
32
  i0.ɵɵadvance(1);
33
- i0.ɵɵtextInterpolate1(" ", option_r7 == null ? null : option_r7.label, " ");
33
+ i0.ɵɵtextInterpolate1(" ", option_r7 == null ? null : option_r7[ctx_r2.fieldLabel], " ");
34
34
  } }
35
35
  function PoSelectComponent_li_15_ng_container_2_Template(rf, ctx) { if (rf & 1) {
36
36
  i0.ɵɵelementContainer(0);
@@ -41,8 +41,9 @@ function PoSelectComponent_li_15_ng_template_3_Template(rf, ctx) { if (rf & 1) {
41
41
  i0.ɵɵelementEnd();
42
42
  } if (rf & 2) {
43
43
  const option_r10 = i0.ɵɵnextContext().$implicit;
44
+ const ctx_r13 = i0.ɵɵnextContext();
44
45
  i0.ɵɵadvance(1);
45
- i0.ɵɵtextInterpolate(option_r10 == null ? null : option_r10.label);
46
+ i0.ɵɵtextInterpolate(option_r10 == null ? null : option_r10[ctx_r13.fieldLabel]);
46
47
  } }
47
48
  function PoSelectComponent_li_15_ng_template_5_Template(rf, ctx) { }
48
49
  const _c4 = function (a0) { return { $implicit: a0 }; };
@@ -60,8 +61,8 @@ function PoSelectComponent_li_15_Template(rf, ctx) { if (rf & 1) {
60
61
  const _r12 = i0.ɵɵreference(4);
61
62
  const _r14 = i0.ɵɵreference(6);
62
63
  const ctx_r6 = i0.ɵɵnextContext();
63
- i0.ɵɵclassProp("po-select-item-selected", ctx_r6.selectedValue === option_r10.value);
64
- i0.ɵɵproperty("value", option_r10.value);
64
+ i0.ɵɵclassProp("po-select-item-selected", ctx_r6.selectedValue === (option_r10 == null ? null : option_r10[ctx_r6.fieldLabel]));
65
+ i0.ɵɵproperty("value", option_r10 == null ? null : option_r10[ctx_r6.fieldValue]);
65
66
  i0.ɵɵadvance(2);
66
67
  i0.ɵɵproperty("ngIf", ctx_r6.selectOptionTemplate)("ngIfThen", _r14)("ngIfElse", _r12);
67
68
  i0.ɵɵadvance(3);
@@ -73,6 +74,8 @@ const _c7 = function (a0, a1) { return { "po-field-icon-disabled": a0, "po-field
73
74
  const _c8 = function (a0) { return { "po-invisible": a0 }; };
74
75
  const poSelectContentOffset = 8;
75
76
  const poSelectContentPositionDefault = 'bottom';
77
+ const PO_SELECT_FIELD_LABEL_DEFAULT = 'label';
78
+ const PO_SELECT_FIELD_VALUE_DEFAULT = 'value';
76
79
  /**
77
80
  * @docsExtends PoFieldValidateModel
78
81
  *
@@ -96,6 +99,11 @@ const poSelectContentPositionDefault = 'bottom';
96
99
  * <file name='sample-po-select-customer-registration/sample-po-select-customer-registration.component.po.ts'> </file>
97
100
  * </example>
98
101
  *
102
+ * <example name="po-select-companies" title="PO Select Companies">
103
+ * <file name="sample-po-select-companies/sample-po-select-companies.component.html"> </file>
104
+ * <file name="sample-po-select-companies/sample-po-select-companies.component.ts"> </file>
105
+ * </example>
106
+ *
99
107
  * @description
100
108
  *
101
109
  * O componente po-select exibe uma lista de valores e permite que o usuário selecione um desses valores.
@@ -146,6 +154,8 @@ export class PoSelectComponent extends PoFieldValidateModel {
146
154
  this.isMobile = isMobile();
147
155
  this.open = false;
148
156
  this.selectIcon = 'po-icon-arrow-down';
157
+ this._fieldLabel = PO_SELECT_FIELD_LABEL_DEFAULT;
158
+ this._fieldValue = PO_SELECT_FIELD_VALUE_DEFAULT;
149
159
  this.onScroll = () => {
150
160
  this.controlPosition.adjustPosition(poSelectContentPositionDefault);
151
161
  };
@@ -168,14 +178,55 @@ export class PoSelectComponent extends PoFieldValidateModel {
168
178
  * ```
169
179
  */
170
180
  set options(options) {
171
- this._options = options;
172
- removeDuplicatedOptions(this._options);
173
- removeUndefinedAndNullOptions(this._options);
181
+ if (this.fieldLabel && this.fieldValue) {
182
+ options.map(option => {
183
+ option.label = option[this.fieldLabel];
184
+ option.value = option[this.fieldValue];
185
+ });
186
+ }
187
+ this.validateOptions([...options]);
174
188
  this.onUpdateOptions();
189
+ this._options = [...options];
175
190
  }
176
191
  get options() {
177
192
  return this._options;
178
193
  }
194
+ /**
195
+ * @optional
196
+ *
197
+ * @description
198
+ * Deve ser informado o nome da propriedade do objeto que será utilizado para a conversão dos itens apresentados na lista do componente
199
+ * (`p-options`), esta propriedade será responsável pelo texto de apresentação de cada item da lista.
200
+ *
201
+ * @default `label`
202
+ */
203
+ set fieldLabel(value) {
204
+ this._fieldLabel = value || PO_SELECT_FIELD_LABEL_DEFAULT;
205
+ if (this.options && this.options.length > 0) {
206
+ this.options = [...this.options];
207
+ }
208
+ }
209
+ get fieldLabel() {
210
+ return this._fieldLabel;
211
+ }
212
+ /**
213
+ * @optional
214
+ *
215
+ * @description
216
+ * Deve ser informado o nome da propriedade do objeto que será utilizado para a conversão dos itens apresentados na lista do componente
217
+ * (`p-options`), esta propriedade será responsável pelo valor de cada item da lista.
218
+ *
219
+ * @default `value`
220
+ */
221
+ set fieldValue(value) {
222
+ this._fieldValue = value || PO_SELECT_FIELD_VALUE_DEFAULT;
223
+ if (this.options && this.options.length > 0) {
224
+ this.options = [...this.options];
225
+ }
226
+ }
227
+ get fieldValue() {
228
+ return this._fieldValue;
229
+ }
179
230
  get isInvisibleSelectNative() {
180
231
  return this.readonly && this.isMobile;
181
232
  }
@@ -209,6 +260,8 @@ export class PoSelectComponent extends PoFieldValidateModel {
209
260
  if (change) {
210
261
  removeDuplicatedOptions(this.options);
211
262
  removeUndefinedAndNullOptions(this.options);
263
+ removeDuplicatedOptionsWithFieldValue(this.options, this.fieldValue);
264
+ removeUndefinedAndNullOptionsWithFieldValue(this.options, this.fieldValue);
212
265
  }
213
266
  }
214
267
  /**
@@ -275,12 +328,12 @@ export class PoSelectComponent extends PoFieldValidateModel {
275
328
  }
276
329
  // Atualiza valores
277
330
  updateValues(option) {
278
- if (this.selectedValue !== option.value) {
279
- this.selectedValue = option.value;
280
- this.selectElement.nativeElement.value = option.value;
281
- this.updateModel(option.value);
282
- this.displayValue = option.label;
283
- this.emitChange(option.value);
331
+ if (this.selectedValue !== option[this.fieldValue]) {
332
+ this.selectedValue = option[this.fieldValue];
333
+ this.selectElement.nativeElement.value = option[this.fieldValue];
334
+ this.updateModel(option[this.fieldValue]);
335
+ this.displayValue = option[this.fieldLabel];
336
+ this.emitChange(option[this.fieldValue]);
284
337
  }
285
338
  }
286
339
  // Esconde Content do Select quando for clicado fora
@@ -295,9 +348,9 @@ export class PoSelectComponent extends PoFieldValidateModel {
295
348
  const optionFound = this.findOptionValue(value);
296
349
  if (optionFound) {
297
350
  this.selectElement.nativeElement.value = optionFound.value;
298
- this.selectedValue = optionFound.value;
299
- this.displayValue = optionFound.label;
300
- this.setScrollPosition(optionFound.value);
351
+ this.selectedValue = optionFound[this.fieldValue];
352
+ this.displayValue = optionFound[this.fieldLabel];
353
+ this.setScrollPosition(optionFound[this.fieldValue]);
301
354
  }
302
355
  else if (validValue(this.selectedValue)) {
303
356
  this.selectElement.nativeElement.value = undefined;
@@ -380,6 +433,12 @@ export class PoSelectComponent extends PoFieldValidateModel {
380
433
  }
381
434
  }
382
435
  }
436
+ validateOptions(options) {
437
+ removeDuplicatedOptions(options);
438
+ removeUndefinedAndNullOptions(options);
439
+ removeDuplicatedOptionsWithFieldValue(options, this.fieldValue);
440
+ removeUndefinedAndNullOptionsWithFieldValue(options, this.fieldValue);
441
+ }
383
442
  }
384
443
  PoSelectComponent.ɵfac = function PoSelectComponent_Factory(t) { return new (t || PoSelectComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i1.PoControlPositionService)); };
385
444
  PoSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSelectComponent, selectors: [["po-select"]], viewQuery: function PoSelectComponent_Query(rf, ctx) { if (rf & 1) {
@@ -395,7 +454,7 @@ PoSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSelectC
395
454
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.selectButtonElement = _t.first);
396
455
  } }, hostBindings: function PoSelectComponent_HostBindings(rf, ctx) { if (rf & 1) {
397
456
  i0.ɵɵlistener("keydown", function PoSelectComponent_keydown_HostBindingHandler($event) { return ctx.onKeydown($event); });
398
- } }, inputs: { readonly: ["p-readonly", "readonly"], placeholder: ["p-placeholder", "placeholder"], options: ["p-options", "options"] }, outputs: { ngModelChange: "ngModelChange" }, features: [i0.ɵɵProvidersFeature([
457
+ } }, inputs: { readonly: ["p-readonly", "readonly"], placeholder: ["p-placeholder", "placeholder"], options: ["p-options", "options"], fieldLabel: ["p-field-label", "fieldLabel"], fieldValue: ["p-field-value", "fieldValue"] }, outputs: { ngModelChange: "ngModelChange" }, features: [i0.ɵɵProvidersFeature([
399
458
  {
400
459
  provide: NG_VALUE_ACCESSOR,
401
460
  useExisting: forwardRef(() => PoSelectComponent),
@@ -464,7 +523,7 @@ __decorate([
464
523
  multi: true
465
524
  },
466
525
  PoControlPositionService
467
- ], template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\n <select\n #select\n class=\"po-select\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'po-select-mobile': isMobile, 'po-invisible': isInvisibleSelectNative }\"\n [required]=\"required\"\n (change)=\"onSelectChange($event.target.value)\"\n (blur)=\"onBlur()\"\n >\n <option *ngIf=\"isMobile\" disabled hidden selected></option>\n <option *ngFor=\"let option of options\" [disabled]=\"readonly\" [value]=\"option.value\" (click)=\"onOptionClick(option)\">\n {{ option?.label }}\n </option>\n </select>\n\n <div class=\"po-select-container\">\n <div\n #selectButton\n class=\"po-select-button\"\n [ngClass]=\"{ 'po-select-button-disabled': disabled, 'po-select-button-readonly': readonly }\"\n (click)=\"toggleButton()\"\n >\n <span>{{ displayValue || placeholder }}</span>\n\n <div class=\"po-field-icon-container-right\">\n <span\n #icon\n class=\"po-icon {{ selectIcon }} po-field-icon\"\n [ngClass]=\"{ 'po-field-icon-disabled': disabled, 'po-field-icon-readonly': readonly }\"\n ></span>\n </div>\n </div>\n\n <ul #contentList class=\"po-select-content\" [ngClass]=\"{ 'po-invisible': isMobile }\">\n <li\n *ngFor=\"let option of options\"\n [class.po-select-item-selected]=\"selectedValue === option.value\"\n [value]=\"option.value\"\n (click)=\"onOptionClick(option)\"\n >\n <div class=\"po-select-item\">\n <ng-container *ngIf=\"selectOptionTemplate; then optionTemplate; else defaultOptionTemplate\"></ng-container>\n\n <ng-template #defaultOptionTemplate>\n <span>{{ option?.label }}</span>\n </ng-template>\n\n <ng-template\n #optionTemplate\n [ngTemplateOutlet]=\"selectOptionTemplate?.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n >\n </ng-template>\n </div>\n </li>\n </ul>\n </div>\n\n <po-field-container-bottom></po-field-container-bottom>\n</po-field-container>\n" }]
526
+ ], template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\n <select\n #select\n class=\"po-select\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'po-select-mobile': isMobile, 'po-invisible': isInvisibleSelectNative }\"\n [required]=\"required\"\n (change)=\"onSelectChange($event.target.value)\"\n (blur)=\"onBlur()\"\n >\n <option *ngIf=\"isMobile\" disabled hidden selected></option>\n <option\n *ngFor=\"let option of options\"\n [disabled]=\"readonly\"\n [value]=\"option?.[this.fieldValue]\"\n (click)=\"onOptionClick(option)\"\n >\n {{ option?.[this.fieldLabel] }}\n </option>\n </select>\n\n <div class=\"po-select-container\">\n <div\n #selectButton\n class=\"po-select-button\"\n [ngClass]=\"{ 'po-select-button-disabled': disabled, 'po-select-button-readonly': readonly }\"\n (click)=\"toggleButton()\"\n >\n <span>{{ displayValue || placeholder }}</span>\n\n <div class=\"po-field-icon-container-right\">\n <span\n #icon\n class=\"po-icon {{ selectIcon }} po-field-icon\"\n [ngClass]=\"{ 'po-field-icon-disabled': disabled, 'po-field-icon-readonly': readonly }\"\n ></span>\n </div>\n </div>\n\n <ul #contentList class=\"po-select-content\" [ngClass]=\"{ 'po-invisible': isMobile }\">\n <li\n *ngFor=\"let option of options\"\n [class.po-select-item-selected]=\"selectedValue === option?.[this.fieldLabel]\"\n [value]=\"option?.[this.fieldValue]\"\n (click)=\"onOptionClick(option)\"\n >\n <div class=\"po-select-item\">\n <ng-container *ngIf=\"selectOptionTemplate; then optionTemplate; else defaultOptionTemplate\"></ng-container>\n\n <ng-template #defaultOptionTemplate>\n <span>{{ option?.[this.fieldLabel] }}</span>\n </ng-template>\n\n <ng-template\n #optionTemplate\n [ngTemplateOutlet]=\"selectOptionTemplate?.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n >\n </ng-template>\n </div>\n </li>\n </ul>\n </div>\n\n <po-field-container-bottom></po-field-container-bottom>\n</po-field-container>\n" }]
468
527
  }], function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i0.Renderer2 }, { type: i1.PoControlPositionService }]; }, { contentList: [{
469
528
  type: ViewChild,
470
529
  args: ['contentList', { read: ElementRef, static: true }]
@@ -489,8 +548,14 @@ __decorate([
489
548
  }], options: [{
490
549
  type: Input,
491
550
  args: ['p-options']
551
+ }], fieldLabel: [{
552
+ type: Input,
553
+ args: ['p-field-label']
554
+ }], fieldValue: [{
555
+ type: Input,
556
+ args: ['p-field-value']
492
557
  }], onKeydown: [{
493
558
  type: HostListener,
494
559
  args: ['keydown', ['$event']]
495
560
  }] }); })();
496
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBR3ZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFHWixTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLDZCQUE2QixFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7OztJQ2QvQyw2QkFBMkQ7Ozs7SUFDM0Qsa0NBQW9IO0lBQWhDLDhOQUFTLGVBQUEsK0JBQXFCLENBQUEsSUFBQztJQUNqSCxZQUNGO0lBQUEsaUJBQVM7Ozs7SUFGOEIsMENBQXFCLDBCQUFBO0lBQzFELGVBQ0Y7SUFERSwyRUFDRjs7O0lBNkJNLHdCQUEyRzs7O0lBR3pHLDRCQUFNO0lBQUEsWUFB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QUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUNRLG1CQUFtQjtrQkFBakYsU0FBUzttQkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFnQnBDLGFBQWE7a0JBQXJDLE1BQU07bUJBQUMsZUFBZTtZQVdjLFFBQVE7a0JBQTVDLEtBQUs7bUJBQUMsWUFBWTtZQUdLLFdBQVc7a0JBQWxDLEtBQUs7bUJBQUMsZUFBZTtZQW9DRSxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUEwQm1CLFNBQVM7a0JBQTdDLFlBQVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBpc01vYmlsZSwgcmVtb3ZlRHVwbGljYXRlZE9wdGlvbnMsIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zLCB2YWxpZFZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWNvbnRyb2wtcG9zaXRpb24vcG8tY29udHJvbC1wb3NpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvS2V5Q29kZUVudW0gfSBmcm9tICcuLy4uLy4uLy4uL2VudW1zL3BvLWtleS1jb2RlLmVudW0nO1xuXG5pbXBvcnQgeyBQb1NlbGVjdE9wdGlvbiB9IGZyb20gJy4vcG8tc2VsZWN0LW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9GaWVsZFZhbGlkYXRlTW9kZWwgfSBmcm9tICcuLi9wby1maWVsZC12YWxpZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcblxuY29uc3QgcG9TZWxlY3RDb250ZW50T2Zmc2V0ID0gODtcbmNvbnN0IHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCA9ICdib3R0b20nO1xuXG4vKipcbiAqIEBkb2NzRXh0ZW5kcyBQb0ZpZWxkVmFsaWRhdGVNb2RlbFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXNlbGVjdC1iYXNpY1wiIHRpdGxlPVwiUE8gU2VsZWN0IEJhc2ljXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWJhc2ljL3NhbXBsZS1wby1zZWxlY3QtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1iYXNpYy9zYW1wbGUtcG8tc2VsZWN0LWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXNlbGVjdC1sYWJzXCIgdGl0bGU9XCJQTyBTZWxlY3QgTGFic1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1sYWJzL3NhbXBsZS1wby1zZWxlY3QtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWxhYnMvc2FtcGxlLXBvLXNlbGVjdC1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb25cIiB0aXRsZT1cIlBPIFNlbGVjdCAtIEN1c3RvbWVyIHJlZ2lzdHJhdGlvblwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uL3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPSdzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuZTJlLXNwZWMudHMnPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9J3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uL3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5wby50cyc+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGNvbXBvbmVudGUgcG8tc2VsZWN0IGV4aWJlIHVtYSBsaXN0YSBkZSB2YWxvcmVzIGUgcGVybWl0ZSBxdWUgbyB1c3XDoXJpbyBzZWxlY2lvbmUgdW0gZGVzc2VzIHZhbG9yZXMuXG4gKiBPcyB2YWxvcmVzIGxpc3RhZG9zIHBvZGVtIHNlciBmaXhvcyBvdSBkaW7Dom1pY29zIGRlIGFjb3JkbyBjb20gYSBuZWNlc3NpZGFkZSBkbyBkZXNlbnZvbHZlZG9yLCBkYW5kbyBtYWlzIGZsZXhpYmlsaWRhZGUgYW8gY29tcG9uZW50ZS5cbiAqIE8gcG8tc2VsZWN0IG7Do28gcGVybWl0ZSBxdWUgbyB1c3XDoXJpbyBpbmZvcm1lIHVtIHZhbG9yIGRpZmVyZW50ZSBkb3MgdmFsb3JlcyBsaXN0YWRvcywgaXNzbyBnYXJhbnRlIGEgY29uc2lzdMOqbmNpYSBkYSBpbmZvcm1hw6fDo28uXG4gKiBPIHBvLXNlbGVjdCBuw6NvIHBlcm1pdGUgcXVlIHNlamFtIHBhc3NhZG9zIHZhbG9yZXMgZHVwbGljYWRvcywgdW5kZWZpbmVkIGUgbnVsbCBwYXJhIGFzIG9ww6fDtWVzLCBleGNsdWluZG8tb3MgZGEgbGlzdGEuXG4gKlxuICogPiBBbyBwYXNzYXIgdW0gdmFsb3IgcGFyYSBvIF9tb2RlbF8gcXVlIG7Do28gZXN0w6EgbmEgbGlzdGEgZGUgb3DDp8O1ZXMsIG8gbWVzbW8gc2Vyw6EgZGVmaW5pZG8gY29tbyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBUYW1iw6ltIGV4aXN0ZSBhIHBvc3NpYmlsaWRhZGUgZGUgdXRpbGl6YXIgdW0gX3RlbXBsYXRlXyBwYXJhIGEgZXhpYmnDp8OjbyBkb3MgaXRlbnMgZGEgbGlzdGEsXG4gKiB2ZWphIG1haXMgZW0gKipbcC1jb21iby1vcHRpb24tdGVtcGxhdGVdKC9kb2N1bWVudGF0aW9uL3BvLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZSkqKi5cbiAqXG4gKiA+IE9iczogbyB0ZW1wbGF0ZSAqKltwLXNlbGVjdC1vcHRpb24tdGVtcGxhdGVdKC9kb2N1bWVudGF0aW9uL3BvLXNlbGVjdC1vcHRpb24tdGVtcGxhdGUpKiogc2Vyw6EgZGVwcmVjaWFkbyBuYSB2ZXJzw6NvIDE0LngueC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9TZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBvU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgUG9GaWVsZFZhbGlkYXRlTW9kZWw8YW55PiBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICBAVmlld0NoaWxkKCdjb250ZW50TGlzdCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRMaXN0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaWNvbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHNlbGVjdEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHNlbGVjdEJ1dHRvbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRnVuw6fDo28gcGFyYSBhdHVhbGl6YXIgbyBuZ01vZGVsIGRvIGNvbXBvbmVudGUsIG5lY2Vzc8OhcmlvIHF1YW5kbyBuw6NvIGZvciB1dGlsaXphZG8gZGVudHJvIGRhIHRhZyBmb3JtLlxuICAgKlxuICAgKiBOYSB2ZXJzw6NvIDEyLjIuMCBkbyBBbmd1bGFyIGEgdmVyaWZpY2HDp8OjbyBgc3RyaWN0VGVtcGxhdGVzYCB2ZW0gdHJ1ZSBjb21vIGRlZmF1bHQuIFBvcnRhbnRvLCBwYXJhIHV0aWxpemFyXG4gICAqIHR3by13YXkgYmluZGluZyBubyBjb21wb25lbnRlIGRldmUgc2UgdXRpbGl6YXIgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tc2VsZWN0IC4uLiBbbmdNb2RlbF09XCJzZWxlY3RNb2RlbFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdE1vZGVsID0gJGV2ZW50XCI+IDwvcG8tc2VsZWN0PlxuICAgKiBgYGBcbiAgICovXG4gIEBPdXRwdXQoJ25nTW9kZWxDaGFuZ2UnKSBuZ01vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBzb21lbnRlIHBhcmEgbGVpdHVyYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlYWRvbmx5JykgQElucHV0Qm9vbGVhbigpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE1lbnNhZ2VtIHF1ZSBhcGFyZWNlcsOhIGVucXVhbnRvIG5lbmh1bWEgb3DDp8OjbyBlc3RpdmVyIHNlbGVjaW9uYWRhLiAqL1xuICBASW5wdXQoJ3AtcGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICBkaXNwbGF5VmFsdWU7XG4gIGlzTW9iaWxlOiBhbnkgPSBpc01vYmlsZSgpO1xuICBtb2RlbFZhbHVlOiBhbnk7XG4gIG9uTW9kZWxDaGFuZ2U6IGFueTtcbiAgb3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZFZhbHVlOiBhbnk7XG4gIHNlbGVjdE9wdGlvblRlbXBsYXRlOiBhbnk7XG4gIHNlbGVjdEljb246IHN0cmluZyA9ICdwby1pY29uLWFycm93LWRvd24nO1xuICBzY3JvbGxQb3NpdGlvbjogbnVtYmVyO1xuXG4gIGV2ZW50TGlzdGVuZXJGdW5jdGlvbjogKCkgPT4gdm9pZDtcbiAgZXZlbnRSZXNpemVMaXN0ZW5lcjogKCkgPT4gdm9pZDtcblxuICBvbk1vZGVsVG91Y2hlZDogYW55O1xuICBwcm90ZWN0ZWQgY2xpY2tvdXRMaXN0ZW5lcjogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBkaWZmZXI6IGFueTtcbiAgcHJpdmF0ZSBfb3B0aW9uczogQXJyYXk8UG9TZWxlY3RPcHRpb24+O1xuXG4gIC8qKlxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZXZlIHNlciBkZWZpbmlkbyB1bWEgY29sZcOnw6NvIGRlIG9iamV0b3MgcXVlIGltcGxlbWVudGFtIGEgaW50ZXJmYWNlIGBQb1NlbGVjdE9wdGlvbmAuXG4gICAqXG4gICAqIENhc28gZXN0YSBsaXN0YSBlc3RpdmVyIHZhemlhLCBvIG1vZGVsIHNlcsOhIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiA+IEVzc2EgcHJvcHJpZWRhZGUgw6kgaW11dMOhdmVsLCBvdSBzZWphLCBzZW1wcmUgcXVlIHF1aXNlciBhdHVhbGl6YXIgYSBsaXN0YSBkZSBvcMOnw7VlcyBkaXNwb27DrXZlaXNcbiAgICogYXR1YWxpemUgYSByZWZlcsOqbmNpYSBkbyBvYmpldG86XG4gICAqXG4gICAqIGBgYFxuICAgKiAvLyBhdHVhbGl6YSBhIHJlZmVyw6puY2lhIGRvIG9iamV0byBnYXJhbnRpbmRvIGEgYXR1YWxpemHDp8OjbyBkbyB0ZW1wbGF0ZVxuICAgKiB0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLCB7IHZhbHVlOiAneCcsIGxhYmVsOiAnTm92YSBvcMOnw6NvJyB9XTtcbiAgICpcbiAgICogLy8gZXZpdGUsIHBvaXMgbsOjbyBhdHVhbGl6YSBhIHJlZmVyw6puY2lhIGRvIG9iamV0byBwb2RlbmRvIGdlcmFyIGF0cmFzb3MgbmEgYXR1YWxpemHDp8OjbyBkbyB0ZW1wbGF0ZVxuICAgKiB0aGlzLm9wdGlvbnMucHVzaCh7IHZhbHVlOiAneCcsIGxhYmVsOiAnTm92YSBvcMOnw6NvJyB9KTtcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9ucycpIHNldCBvcHRpb25zKG9wdGlvbnM6IEFycmF5PFBvU2VsZWN0T3B0aW9uPikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICAgIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICAgIHRoaXMub25VcGRhdGVPcHRpb25zKCk7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgY29udHJvbFBvc2l0aW9uOiBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRpZmZlciA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgZ2V0IGlzSW52aXNpYmxlU2VsZWN0TmF0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5ICYmIHRoaXMuaXNNb2JpbGU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlkb3duKCRldmVudD86IGFueSkge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gJGV2ZW50LndoaWNoIHx8ICRldmVudC5rZXlDb2RlO1xuXG4gICAgLy8gVHJhdGFtZW50b3MgcGFyYSBxdWFuZG8gbyByZWFkb25seSBmb3IgYXRpdmFkby5cbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgLy8gZGV2ZSBtYXRhciBvIGV2ZW50byBkbyB0ZWNsYWRvIGRldmlkbyBhIGFsdGVyYXIgbyB2YWxvciBkbyBtb2RlbCBtZXNtbyBjb20gb3Mgb3B0aW9ucyBmZWNoYWRvc1xuICAgICAgaWYgKGNoYXJDb2RlICE9PSBQb0tleUNvZGVFbnVtLnRhYikge1xuICAgICAgICB0aGlzLmRpc2FibGVEZWZhdWx0RXZlbnRBbmRUb2dnbGVCdXR0b24oKTtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2VsZWNpb25hIG9zIGl0ZW5zIGNvbSBhcyB0ZWNsYXMgXCJ1cFwiIGUgXCJkb3duXCJcbiAgICBpZiAoKCF0aGlzLm9wZW4gfHwgJGV2ZW50LmFsdEtleSkgJiYgKGNoYXJDb2RlID09PSBQb0tleUNvZGVFbnVtLmFycm93RG93biB8fCBjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5hcnJvd1VwKSkge1xuICAgICAgdGhpcy5kaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgLy8gQWJyZSBvIHBvLXNlbGVjdCBjb20gYXMgdGVjbGFzIFwiZW50ZXJcIiBlIFwiZXNwYcOnb1wiXG4gICAgaWYgKGNoYXJDb2RlID09PSBQb0tleUNvZGVFbnVtLmVudGVyIHx8IGNoYXJDb2RlID09PSBQb0tleUNvZGVFbnVtLnNwYWNlKSB7XG4gICAgICB0aGlzLmRpc2FibGVEZWZhdWx0RXZlbnRBbmRUb2dnbGVCdXR0b24oKTtcbiAgICB9XG5cbiAgICAvLyBGZWNoYSBvIHBvLXNlbGVjdCBjb20gYSB0ZWNsYSBcInRhYlwiXG4gICAgaWYgKHRoaXMub3BlbiAmJiBjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS50YWIpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVCdXR0b24oKTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgY29uc3QgY2hhbmdlID0gdGhpcy5kaWZmZXIuZGlmZih0aGlzLm9wdGlvbnMpO1xuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9TZWxlY3RDb21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvU2VsZWN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWxlY3Q6IFBvU2VsZWN0Q29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c1NlbGVjdCgpIHtcbiAgICogICB0aGlzLnNlbGVjdC5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVEcm9wRG93bigpIHtcbiAgICB0aGlzLnNlbGVjdEljb24gPSAncG8taWNvbi1hcnJvdy1kb3duJztcbiAgICB0aGlzLnNlbGVjdG9yKCcucG8tc2VsZWN0LWNvbnRhaW5lcicpLmNsYXNzTGlzdC5yZW1vdmUoJ3BvLXNlbGVjdC1zaG93Jyk7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQ/LigpO1xuICB9XG5cbiAgb25PcHRpb25DbGljayhvcHRpb246IFBvU2VsZWN0T3B0aW9uKSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uKTtcbiAgICB0aGlzLnRvZ2dsZUJ1dHRvbigpO1xuICB9XG5cbiAgLy8gQWx0ZXJhIG8gdmFsb3IgYW8gc2VsZWNpb25hciB1bSBpdGVtLlxuICBvblNlbGVjdENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcHRpb25Gb3VuZDogUG9TZWxlY3RPcHRpb24gPSB0aGlzLmZpbmRPcHRpb25WYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRpb25Gb3VuZCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlcyhvcHRpb25Gb3VuZCk7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24ob3B0aW9uRm91bmQudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uVXBkYXRlT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlKHRoaXMubW9kZWxWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVmFsdWUoaW5kZXgsIGNsaWVudEhlaWdodCkge1xuICAgIGNvbnN0IGhlaWdodFNjcm9sbFZhbHVlOiBudW1iZXIgPSBpbmRleCAqIHRoaXMuZ2V0U2VsZWN0SXRlbUhlaWdodCgpO1xuXG4gICAgcmV0dXJuICh0aGlzLnNjcm9sbFBvc2l0aW9uID0gaGVpZ2h0U2Nyb2xsVmFsdWUgPiBjbGllbnRIZWlnaHQgPyBoZWlnaHRTY3JvbGxWYWx1ZSA6IDApO1xuICB9XG5cbiAgc2VsZWN0b3IocXVlcnk6IHN0cmluZyk6IEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHF1ZXJ5KTtcbiAgfVxuXG4gIHRvZ2dsZUJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4gPyB0aGlzLmhpZGVEcm9wRG93bigpIDogdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgfVxuXG4gIC8vIEF0dWFsaXphIHZhbG9yZXNcbiAgdXBkYXRlVmFsdWVzKG9wdGlvbjogUG9TZWxlY3RPcHRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlICE9PSBvcHRpb24udmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVNb2RlbChvcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBvcHRpb24ubGFiZWw7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2Uob3B0aW9uLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBFc2NvbmRlIENvbnRlbnQgZG8gU2VsZWN0IHF1YW5kbyBmb3IgY2xpY2FkbyBmb3JhXG4gIHdhc0NsaWNrZWRPblRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnNlbGVjdEJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5pY29uRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVjZWJlIGFzIGFsdGVyYcOnw7VlcyBkbyBtb2RlbFxuICBvbldyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbkZvdW5kOiBQb1NlbGVjdE9wdGlvbiA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChvcHRpb25Gb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvcHRpb25Gb3VuZC52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbkZvdW5kLnZhbHVlO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBvcHRpb25Gb3VuZC5sYWJlbDtcbiAgICAgIHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24ob3B0aW9uRm91bmQudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsaWRWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZXh0cmFWYWxpZGF0aW9uKGM6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VxdWFsKHZhbHVlOiBhbnksIGlucHV0VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgodmFsdWUgfHwgdmFsdWUgPT09IDApICYmIGlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpID09PSBpbnB1dFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCAmJiBpbnB1dFZhbHVlICE9PSBudWxsKSB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7IC8vIFRyYW5zZm9ybWFuZG8gZW0gc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlID09PSBpbnB1dFZhbHVlO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBuZWNlc3PDoXJpbyBwYXJhIGJsb3F1ZWFyIG8gZXZlbnRvIGRlZmF1bHQgZG8gc2VsZWN0IG5hdGl2by5cbiAgLy8gQW8gdXRpbGl6YXIgZXZlbnQucHJldmVudERlZmF1bHQoKSwgbm9zIG5hdmVnYWRvcmVzIEZpcmVmb3ggZSBJRSBvIG1lc21vIG7Do28gY2FuY2VsYSBvIGV2ZW50by5cbiAgcHJpdmF0ZSBkaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCkge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgdGhpcy50b2dnbGVCdXR0b24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE9wdGlvblZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IHRoaXMuaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdEl0ZW1IZWlnaHQoKSB7XG4gICAgY29uc3Qgc2VsZWN0SXRlbSA9IHRoaXMuc2VsZWN0b3IoJ2Rpdi5wby1zZWxlY3QtaXRlbScpO1xuXG4gICAgcmV0dXJuIHNlbGVjdEl0ZW0gJiYgc2VsZWN0SXRlbS5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jbGlja291dExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndhc0NsaWNrZWRPblRvZ2dsZShldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tvdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja291dExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbkRyb3Bkb3duKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLnNldEVsZW1lbnRzKFxuICAgICAgdGhpcy5jb250ZW50TGlzdC5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9TZWxlY3RDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5zZWxlY3RCdXR0b25FbGVtZW50LFxuICAgICAgWyd0b3AnLCAnYm90dG9tJ10sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH1cblxuICBwcml2YXRlIHNldFNjcm9sbFBvc2l0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCB1bERyb3BkcHduID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwucG8tc2VsZWN0LWNvbnRlbnQnKTtcblxuICAgIGlmICh2YWx1ZSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3B0aW9uRm91bmQ6IFBvU2VsZWN0T3B0aW9uID0gdGhpcy5maW5kT3B0aW9uVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uRm91bmQpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wdGlvbnMuaW5kZXhPZihvcHRpb25Gb3VuZCk7XG4gICAgICAgIHVsRHJvcGRwd24uc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxWYWx1ZShpbmRleCwgdWxEcm9wZHB3bi5jbGllbnRIZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Ryb3Bkb3duKCkge1xuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0SWNvbiA9ICdwby1pY29uLWFycm93LXVwJztcbiAgICAgIHRoaXMuc2VsZWN0b3IoJy5wby1zZWxlY3QtY29udGFpbmVyJykuY2xhc3NMaXN0LmFkZCgncG8tc2VsZWN0LXNob3cnKTtcbiAgICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5zZXRQb3NpdGlvbkRyb3Bkb3duKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXIgW3AtbGFiZWxdPVwibGFiZWxcIiBbcC1oZWxwXT1cImhlbHBcIiBbcC1vcHRpb25hbF09XCIhcmVxdWlyZWQgJiYgb3B0aW9uYWxcIj5cbiAgPHNlbGVjdFxuICAgICNzZWxlY3RcbiAgICBjbGFzcz1cInBvLXNlbGVjdFwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3BvLXNlbGVjdC1tb2JpbGUnOiBpc01vYmlsZSwgJ3BvLWludmlzaWJsZSc6IGlzSW52aXNpYmxlU2VsZWN0TmF0aXZlIH1cIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuICA+XG4gICAgPG9wdGlvbiAqbmdJZj1cImlzTW9iaWxlXCIgZGlzYWJsZWQgaGlkZGVuIHNlbGVjdGVkPjwvb3B0aW9uPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiIChjbGljayk9XCJvbk9wdGlvbkNsaWNrKG9wdGlvbilcIj5cbiAgICAgIHt7IG9wdGlvbj8ubGFiZWwgfX1cbiAgICA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXNlbGVjdC1jb250YWluZXJcIj5cbiAgICA8ZGl2XG4gICAgICAjc2VsZWN0QnV0dG9uXG4gICAgICBjbGFzcz1cInBvLXNlbGVjdC1idXR0b25cIlxuICAgICAgW25nQ2xhc3NdPVwieyAncG8tc2VsZWN0LWJ1dHRvbi1kaXNhYmxlZCc6IGRpc2FibGVkLCAncG8tc2VsZWN0LWJ1dHRvbi1yZWFkb25seSc6IHJlYWRvbmx5IH1cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUJ1dHRvbigpXCJcbiAgICA+XG4gICAgICA8c3Bhbj57eyBkaXNwbGF5VmFsdWUgfHwgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwby1maWVsZC1pY29uLWNvbnRhaW5lci1yaWdodFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICNpY29uXG4gICAgICAgICAgY2xhc3M9XCJwby1pY29uIHt7IHNlbGVjdEljb24gfX0gcG8tZmllbGQtaWNvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAncG8tZmllbGQtaWNvbi1kaXNhYmxlZCc6IGRpc2FibGVkLCAncG8tZmllbGQtaWNvbi1yZWFkb25seSc6IHJlYWRvbmx5IH1cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8dWwgI2NvbnRlbnRMaXN0IGNsYXNzPVwicG8tc2VsZWN0LWNvbnRlbnRcIiBbbmdDbGFzc109XCJ7ICdwby1pbnZpc2libGUnOiBpc01vYmlsZSB9XCI+XG4gICAgICA8bGlcbiAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCJcbiAgICAgICAgW2NsYXNzLnBvLXNlbGVjdC1pdGVtLXNlbGVjdGVkXT1cInNlbGVjdGVkVmFsdWUgPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAoY2xpY2spPVwib25PcHRpb25DbGljayhvcHRpb24pXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLXNlbGVjdC1pdGVtXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE9wdGlvblRlbXBsYXRlOyB0aGVuIG9wdGlvblRlbXBsYXRlOyBlbHNlIGRlZmF1bHRPcHRpb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0T3B0aW9uVGVtcGxhdGU+XG4gICAgICAgICAgICA8c3Bhbj57eyBvcHRpb24/LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNvcHRpb25UZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0T3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG5cbiAgPHBvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+PC9wby1maWVsZC1jb250YWluZXItYm90dG9tPlxuPC9wby1maWVsZC1jb250YWluZXI+XG4iXX0=
561
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRixPQUFPLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixxQ0FBcUMsRUFDckMsNkJBQTZCLEVBQzdCLDJDQUEyQyxFQUMzQyxVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFFL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7SUNsQjlELDZCQUEyRDs7OztJQUMzRCxrQ0FLQztJQURDLDhOQUFTLGVBQUEsK0JBQXFCLENBQUEsSUFBQztJQUUvQixZQUNGO0lBQUEsaUJBQVM7Ozs7SUFMUCwwQ0FBcUIsa0VBQUE7SUFJckIsZUFDRjtJQURFLHdGQUNGOzs7SUE2Qk0sd0JB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QVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgaXNNb2JpbGUsXG4gIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zLFxuICByZW1vdmVEdXBsaWNhdGVkT3B0aW9uc1dpdGhGaWVsZFZhbHVlLFxuICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9ucyxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnNXaXRoRmllbGRWYWx1ZSxcbiAgdmFsaWRWYWx1ZVxufSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvS2V5Q29kZUVudW0gfSBmcm9tICcuLy4uLy4uLy4uL2VudW1zL3BvLWtleS1jb2RlLmVudW0nO1xuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgUG9GaWVsZFZhbGlkYXRlTW9kZWwgfSBmcm9tICcuLi9wby1maWVsZC12YWxpZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBQb1NlbGVjdE9wdGlvbiB9IGZyb20gJy4vcG8tc2VsZWN0LW9wdGlvbi5pbnRlcmZhY2UnO1xuXG5jb25zdCBwb1NlbGVjdENvbnRlbnRPZmZzZXQgPSA4O1xuY29uc3QgcG9TZWxlY3RDb250ZW50UG9zaXRpb25EZWZhdWx0ID0gJ2JvdHRvbSc7XG5jb25zdCBQT19TRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVCA9ICdsYWJlbCc7XG5jb25zdCBQT19TRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVCA9ICd2YWx1ZSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRmllbGRWYWxpZGF0ZU1vZGVsXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWJhc2ljXCIgdGl0bGU9XCJQTyBTZWxlY3QgQmFzaWNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtYmFzaWMvc2FtcGxlLXBvLXNlbGVjdC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWJhc2ljL3NhbXBsZS1wby1zZWxlY3QtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWxhYnNcIiB0aXRsZT1cIlBPIFNlbGVjdCBMYWJzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWxhYnMvc2FtcGxlLXBvLXNlbGVjdC1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtbGFicy9zYW1wbGUtcG8tc2VsZWN0LWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvblwiIHRpdGxlPVwiUE8gU2VsZWN0IC0gQ3VzdG9tZXIgcmVnaXN0cmF0aW9uXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9J3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uL3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5lMmUtc3BlYy50cyc+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT0nc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uY29tcG9uZW50LnBvLnRzJz4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1zZWxlY3QtY29tcGFuaWVzXCIgdGl0bGU9XCJQTyBTZWxlY3QgQ29tcGFuaWVzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy9zYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy9zYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBwby1zZWxlY3QgZXhpYmUgdW1hIGxpc3RhIGRlIHZhbG9yZXMgZSBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIHNlbGVjaW9uZSB1bSBkZXNzZXMgdmFsb3Jlcy5cbiAqIE9zIHZhbG9yZXMgbGlzdGFkb3MgcG9kZW0gc2VyIGZpeG9zIG91IGRpbsOibWljb3MgZGUgYWNvcmRvIGNvbSBhIG5lY2Vzc2lkYWRlIGRvIGRlc2Vudm9sdmVkb3IsIGRhbmRvIG1haXMgZmxleGliaWxpZGFkZSBhbyBjb21wb25lbnRlLlxuICogTyBwby1zZWxlY3QgbsOjbyBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGluZm9ybWUgdW0gdmFsb3IgZGlmZXJlbnRlIGRvcyB2YWxvcmVzIGxpc3RhZG9zLCBpc3NvIGdhcmFudGUgYSBjb25zaXN0w6puY2lhIGRhIGluZm9ybWHDp8Ojby5cbiAqIE8gcG8tc2VsZWN0IG7Do28gcGVybWl0ZSBxdWUgc2VqYW0gcGFzc2Fkb3MgdmFsb3JlcyBkdXBsaWNhZG9zLCB1bmRlZmluZWQgZSBudWxsIHBhcmEgYXMgb3DDp8O1ZXMsIGV4Y2x1aW5kby1vcyBkYSBsaXN0YS5cbiAqXG4gKiA+IEFvIHBhc3NhciB1bSB2YWxvciBwYXJhIG8gX21vZGVsXyBxdWUgbsOjbyBlc3TDoSBuYSBsaXN0YSBkZSBvcMOnw7VlcywgbyBtZXNtbyBzZXLDoSBkZWZpbmlkbyBjb21vIGB1bmRlZmluZWRgLlxuICpcbiAqIFRhbWLDqW0gZXhpc3RlIGEgcG9zc2liaWxpZGFkZSBkZSB1dGlsaXphciB1bSBfdGVtcGxhdGVfIHBhcmEgYSBleGliacOnw6NvIGRvcyBpdGVucyBkYSBsaXN0YSxcbiAqIHZlamEgbWFpcyBlbSAqKltwLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZV0oL2RvY3VtZW50YXRpb24vcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlKSoqLlxuICpcbiAqID4gT2JzOiBvIHRlbXBsYXRlICoqW3Atc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZV0oL2RvY3VtZW50YXRpb24vcG8tc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZSkqKiBzZXLDoSBkZXByZWNpYWRvIG5hIHZlcnPDo28gMTQueC54LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9TZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb1NlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUG9TZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBQb0ZpZWxkVmFsaWRhdGVNb2RlbDxhbnk+IGltcGxlbWVudHMgRG9DaGVjayB7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRMaXN0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgY29udGVudExpc3Q6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2ljb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uRWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0QnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0QnV0dG9uRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBGdW7Dp8OjbyBwYXJhIGF0dWFsaXphciBvIG5nTW9kZWwgZG8gY29tcG9uZW50ZSwgbmVjZXNzw6FyaW8gcXVhbmRvIG7Do28gZm9yIHV0aWxpemFkbyBkZW50cm8gZGEgdGFnIGZvcm0uXG4gICAqXG4gICAqIE5hIHZlcnPDo28gMTIuMi4wIGRvIEFuZ3VsYXIgYSB2ZXJpZmljYcOnw6NvIGBzdHJpY3RUZW1wbGF0ZXNgIHZlbSB0cnVlIGNvbW8gZGVmYXVsdC4gUG9ydGFudG8sIHBhcmEgdXRpbGl6YXJcbiAgICogdHdvLXdheSBiaW5kaW5nIG5vIGNvbXBvbmVudGUgZGV2ZSBzZSB1dGlsaXphciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1zZWxlY3QgLi4uIFtuZ01vZGVsXT1cInNlbGVjdE1vZGVsXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0TW9kZWwgPSAkZXZlbnRcIj4gPC9wby1zZWxlY3Q+XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgnbmdNb2RlbENoYW5nZScpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIHNvbWVudGUgcGFyYSBsZWl0dXJhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVhZG9ubHknKSBASW5wdXRCb29sZWFuKCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTWVuc2FnZW0gcXVlIGFwYXJlY2Vyw6EgZW5xdWFudG8gbmVuaHVtYSBvcMOnw6NvIGVzdGl2ZXIgc2VsZWNpb25hZGEuICovXG4gIEBJbnB1dCgncC1wbGFjZWhvbGRlcicpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIGRpc3BsYXlWYWx1ZTtcbiAgaXNNb2JpbGU6IGFueSA9IGlzTW9iaWxlKCk7XG4gIG1vZGVsVmFsdWU6IGFueTtcbiAgb25Nb2RlbENoYW5nZTogYW55O1xuICBvcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkVmFsdWU6IGFueTtcbiAgc2VsZWN0T3B0aW9uVGVtcGxhdGU6IGFueTtcbiAgc2VsZWN0SWNvbjogc3RyaW5nID0gJ3BvLWljb24tYXJyb3ctZG93bic7XG4gIHNjcm9sbFBvc2l0aW9uOiBudW1iZXI7XG5cbiAgZXZlbnRMaXN0ZW5lckZ1bmN0aW9uOiAoKSA9PiB2b2lkO1xuICBldmVudFJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIG9uTW9kZWxUb3VjaGVkOiBhbnk7XG4gIHByb3RlY3RlZCBjbGlja291dExpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGRpZmZlcjogYW55O1xuICBwcml2YXRlIF9maWVsZExhYmVsPzogc3RyaW5nID0gUE9fU0VMRUNUX0ZJRUxEX0xBQkVMX0RFRkFVTFQ7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSBQT19TRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVDtcbiAgcHJpdmF0ZSBfb3B0aW9uczogQXJyYXk8UG9TZWxlY3RPcHRpb24+IHwgQXJyYXk8YW55PjtcblxuICAvKipcbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgZGV2ZSBzZXIgZGVmaW5pZG8gdW1hIGNvbGXDp8OjbyBkZSBvYmpldG9zIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSBgUG9TZWxlY3RPcHRpb25gLlxuICAgKlxuICAgKiBDYXNvIGVzdGEgbGlzdGEgZXN0aXZlciB2YXppYSwgbyBtb2RlbCBzZXLDoSBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogPiBFc3NhIHByb3ByaWVkYWRlIMOpIGltdXTDoXZlbCwgb3Ugc2VqYSwgc2VtcHJlIHF1ZSBxdWlzZXIgYXR1YWxpemFyIGEgbGlzdGEgZGUgb3DDp8O1ZXMgZGlzcG9uw612ZWlzXG4gICAqIGF0dWFsaXplIGEgcmVmZXLDqm5jaWEgZG8gb2JqZXRvOlxuICAgKlxuICAgKiBgYGBcbiAgICogLy8gYXR1YWxpemEgYSByZWZlcsOqbmNpYSBkbyBvYmpldG8gZ2FyYW50aW5kbyBhIGF0dWFsaXphw6fDo28gZG8gdGVtcGxhdGVcbiAgICogdGhpcy5vcHRpb25zID0gWy4uLnRoaXMub3B0aW9ucywgeyB2YWx1ZTogJ3gnLCBsYWJlbDogJ05vdmEgb3DDp8OjbycgfV07XG4gICAqXG4gICAqIC8vIGV2aXRlLCBwb2lzIG7Do28gYXR1YWxpemEgYSByZWZlcsOqbmNpYSBkbyBvYmpldG8gcG9kZW5kbyBnZXJhciBhdHJhc29zIG5hIGF0dWFsaXphw6fDo28gZG8gdGVtcGxhdGVcbiAgICogdGhpcy5vcHRpb25zLnB1c2goeyB2YWx1ZTogJ3gnLCBsYWJlbDogJ05vdmEgb3DDp8OjbycgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbnMnKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuZmllbGRMYWJlbCAmJiB0aGlzLmZpZWxkVmFsdWUpIHtcbiAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICAgIG9wdGlvbi5sYWJlbCA9IG9wdGlvblt0aGlzLmZpZWxkTGFiZWxdO1xuICAgICAgICBvcHRpb24udmFsdWUgPSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVPcHRpb25zKFsuLi5vcHRpb25zXSk7XG4gICAgdGhpcy5vblVwZGF0ZU9wdGlvbnMoKTtcbiAgICB0aGlzLl9vcHRpb25zID0gWy4uLm9wdGlvbnNdO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGxhYmVsYFxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLWxhYmVsJykgc2V0IGZpZWxkTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2ZpZWxkTGFiZWwgPSB2YWx1ZSB8fCBQT19TRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVDtcbiAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zXTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERldmUgc2VyIGluZm9ybWFkbyBvIG5vbWUgZGEgcHJvcHJpZWRhZGUgZG8gb2JqZXRvIHF1ZSBzZXLDoSB1dGlsaXphZG8gcGFyYSBhIGNvbnZlcnPDo28gZG9zIGl0ZW5zIGFwcmVzZW50YWRvcyBuYSBsaXN0YSBkbyBjb21wb25lbnRlXG4gICAqIChgcC1vcHRpb25zYCksIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgcmVzcG9uc8OhdmVsIHBlbG8gdmFsb3IgZGUgY2FkYSBpdGVtIGRhIGxpc3RhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdmFsdWVgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBzZXQgZmllbGRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlIHx8IFBPX1NFTEVDVF9GSUVMRF9WQUxVRV9ERUZBVUxUO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWVsZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZFZhbHVlO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGdldCBpc0ludmlzaWJsZVNlbGVjdE5hdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSAmJiB0aGlzLmlzTW9iaWxlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bigkZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9ICRldmVudC53aGljaCB8fCAkZXZlbnQua2V5Q29kZTtcblxuICAgIC8vIFRyYXRhbWVudG9zIHBhcmEgcXVhbmRvIG8gcmVhZG9ubHkgZm9yIGF0aXZhZG8uXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIC8vIGRldmUgbWF0YXIgbyBldmVudG8gZG8gdGVjbGFkbyBkZXZpZG8gYSBhbHRlcmFyIG8gdmFsb3IgZG8gbW9kZWwgbWVzbW8gY29tIG9zIG9wdGlvbnMgZmVjaGFkb3NcbiAgICAgIGlmIChjaGFyQ29kZSAhPT0gUG9LZXlDb2RlRW51bS50YWIpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCk7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlbGVjaW9uYSBvcyBpdGVucyBjb20gYXMgdGVjbGFzIFwidXBcIiBlIFwiZG93blwiXG4gICAgaWYgKCghdGhpcy5vcGVuIHx8ICRldmVudC5hbHRLZXkpICYmIChjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5hcnJvd0Rvd24gfHwgY2hhckNvZGUgPT09IFBvS2V5Q29kZUVudW0uYXJyb3dVcCkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZURlZmF1bHRFdmVudEFuZFRvZ2dsZUJ1dHRvbigpO1xuICAgIH1cblxuICAgIC8vIEFicmUgbyBwby1zZWxlY3QgY29tIGFzIHRlY2xhcyBcImVudGVyXCIgZSBcImVzcGHDp29cIlxuICAgIGlmIChjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5lbnRlciB8fCBjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5zcGFjZSkge1xuICAgICAgdGhpcy5kaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgLy8gRmVjaGEgbyBwby1zZWxlY3QgY29tIGEgdGVjbGEgXCJ0YWJcIlxuICAgIGlmICh0aGlzLm9wZW4gJiYgY2hhckNvZGUgPT09IFBvS2V5Q29kZUVudW0udGFiKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9nZ2xlQnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGNvbnN0IGNoYW5nZSA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5vcHRpb25zKTtcbiAgICBpZiAoY2hhbmdlKSB7XG4gICAgICByZW1vdmVEdXBsaWNhdGVkT3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUodGhpcy5vcHRpb25zLCB0aGlzLmZpZWxkVmFsdWUpO1xuICAgICAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnNXaXRoRmllbGRWYWx1ZSh0aGlzLm9wdGlvbnMsIHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9TZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHNlbGVjdDogUG9TZWxlY3RDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzU2VsZWN0KCkge1xuICAgKiAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZURyb3BEb3duKCkge1xuICAgIHRoaXMuc2VsZWN0SWNvbiA9ICdwby1pY29uLWFycm93LWRvd24nO1xuICAgIHRoaXMuc2VsZWN0b3IoJy5wby1zZWxlY3QtY29udGFpbmVyJykuY2xhc3NMaXN0LnJlbW92ZSgncG8tc2VsZWN0LXNob3cnKTtcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZD8uKCk7XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uKTtcbiAgICB0aGlzLnRvZ2dsZUJ1dHRvbigpO1xuICB9XG5cbiAgLy8gQWx0ZXJhIG8gdmFsb3IgYW8gc2VsZWNpb25hciB1bSBpdGVtLlxuICBvblNlbGVjdENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcHRpb25Gb3VuZDogYW55ID0gdGhpcy5maW5kT3B0aW9uVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uRm91bmQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uRm91bmQpO1xuICAgICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG9wdGlvbkZvdW5kLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblVwZGF0ZU9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5vblNlbGVjdENoYW5nZSh0aGlzLm1vZGVsVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFZhbHVlKGluZGV4LCBjbGllbnRIZWlnaHQpIHtcbiAgICBjb25zdCBoZWlnaHRTY3JvbGxWYWx1ZTogbnVtYmVyID0gaW5kZXggKiB0aGlzLmdldFNlbGVjdEl0ZW1IZWlnaHQoKTtcblxuICAgIHJldHVybiAodGhpcy5zY3JvbGxQb3NpdGlvbiA9IGhlaWdodFNjcm9sbFZhbHVlID4gY2xpZW50SGVpZ2h0ID8gaGVpZ2h0U2Nyb2xsVmFsdWUgOiAwKTtcbiAgfVxuXG4gIHNlbGVjdG9yKHF1ZXJ5OiBzdHJpbmcpOiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihxdWVyeSk7XG4gIH1cblxuICB0b2dnbGVCdXR0b24oKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuID8gdGhpcy5oaWRlRHJvcERvd24oKSA6IHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICAvLyBBdHVhbGl6YSB2YWxvcmVzXG4gIHVwZGF0ZVZhbHVlcyhvcHRpb246IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgIT09IG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXTtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRMYWJlbF07XG4gICAgICB0aGlzLmVtaXRDaGFuZ2Uob3B0aW9uW3RoaXMuZmllbGRWYWx1ZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVzY29uZGUgQ29udGVudCBkbyBTZWxlY3QgcXVhbmRvIGZvciBjbGljYWRvIGZvcmFcbiAgd2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2VsZWN0QnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmljb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5oaWRlRHJvcERvd24oKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWNlYmUgYXMgYWx0ZXJhw6fDtWVzIGRvIG1vZGVsXG4gIG9uV3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uRm91bmQ6IGFueSA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChvcHRpb25Gb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvcHRpb25Gb3VuZC52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbkZvdW5kW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG9wdGlvbkZvdW5kW3RoaXMuZmllbGRMYWJlbF07XG4gICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG9wdGlvbkZvdW5kW3RoaXMuZmllbGRWYWx1ZV0pO1xuICAgIH0gZWxzZSBpZiAodmFsaWRWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZXh0cmFWYWxpZGF0aW9uKGM6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VxdWFsKHZhbHVlOiBhbnksIGlucHV0VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgodmFsdWUgfHwgdmFsdWUgPT09IDApICYmIGlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpID09PSBpbnB1dFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCAmJiBpbnB1dFZhbHVlICE9PSBudWxsKSB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7IC8vIFRyYW5zZm9ybWFuZG8gZW0gc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlID09PSBpbnB1dFZhbHVlO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBuZWNlc3PDoXJpbyBwYXJhIGJsb3F1ZWFyIG8gZXZlbnRvIGRlZmF1bHQgZG8gc2VsZWN0IG5hdGl2by5cbiAgLy8gQW8gdXRpbGl6YXIgZXZlbnQucHJldmVudERlZmF1bHQoKSwgbm9zIG5hdmVnYWRvcmVzIEZpcmVmb3ggZSBJRSBvIG1lc21vIG7Do28gY2FuY2VsYSBvIGV2ZW50by5cbiAgcHJpdmF0ZSBkaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCkge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgdGhpcy50b2dnbGVCdXR0b24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE9wdGlvblZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IHRoaXMuaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdEl0ZW1IZWlnaHQoKSB7XG4gICAgY29uc3Qgc2VsZWN0SXRlbSA9IHRoaXMuc2VsZWN0b3IoJ2Rpdi5wby1zZWxlY3QtaXRlbScpO1xuXG4gICAgcmV0dXJuIHNlbGVjdEl0ZW0gJiYgc2VsZWN0SXRlbS5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jbGlja291dExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndhc0NsaWNrZWRPblRvZ2dsZShldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tvdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja291dExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbkRyb3Bkb3duKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLnNldEVsZW1lbnRzKFxuICAgICAgdGhpcy5jb250ZW50TGlzdC5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9TZWxlY3RDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5zZWxlY3RCdXR0b25FbGVtZW50LFxuICAgICAgWyd0b3AnLCAnYm90dG9tJ10sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH1cblxuICBwcml2YXRlIHNldFNjcm9sbFBvc2l0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCB1bERyb3BkcHduID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwucG8tc2VsZWN0LWNvbnRlbnQnKTtcblxuICAgIGlmICh2YWx1ZSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3B0aW9uRm91bmQ6IGFueSA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKG9wdGlvbkZvdW5kKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2Yob3B0aW9uRm91bmQpO1xuICAgICAgICB1bERyb3BkcHduLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVmFsdWUoaW5kZXgsIHVsRHJvcGRwd24uY2xpZW50SGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dEcm9wZG93bigpIHtcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNlbGVjdEljb24gPSAncG8taWNvbi1hcnJvdy11cCc7XG4gICAgICB0aGlzLnNlbGVjdG9yKCcucG8tc2VsZWN0LWNvbnRhaW5lcicpLmNsYXNzTGlzdC5hZGQoJ3BvLXNlbGVjdC1zaG93Jyk7XG4gICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuc2V0UG9zaXRpb25Ecm9wZG93bigpO1xuICAgICAgdGhpcy5pbml0aWFsaXplTGlzdGVuZXJzKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9wdGlvbnMob3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zKG9wdGlvbnMpO1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUob3B0aW9ucywgdGhpcy5maWVsZFZhbHVlKTtcbiAgICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9uc1dpdGhGaWVsZFZhbHVlKG9wdGlvbnMsIHRoaXMuZmllbGRWYWx1ZSk7XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXIgW3AtbGFiZWxdPVwibGFiZWxcIiBbcC1oZWxwXT1cImhlbHBcIiBbcC1vcHRpb25hbF09XCIhcmVxdWlyZWQgJiYgb3B0aW9uYWxcIj5cbiAgPHNlbGVjdFxuICAgICNzZWxlY3RcbiAgICBjbGFzcz1cInBvLXNlbGVjdFwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3BvLXNlbGVjdC1tb2JpbGUnOiBpc01vYmlsZSwgJ3BvLWludmlzaWJsZSc6IGlzSW52aXNpYmxlU2VsZWN0TmF0aXZlIH1cIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuICA+XG4gICAgPG9wdGlvbiAqbmdJZj1cImlzTW9iaWxlXCIgZGlzYWJsZWQgaGlkZGVuIHNlbGVjdGVkPjwvb3B0aW9uPlxuICAgIDxvcHRpb25cbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXG4gICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgW3ZhbHVlXT1cIm9wdGlvbj8uW3RoaXMuZmllbGRWYWx1ZV1cIlxuICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sob3B0aW9uKVwiXG4gICAgPlxuICAgICAge3sgb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXSB9fVxuICAgIDwvb3B0aW9uPlxuICA8L3NlbGVjdD5cblxuICA8ZGl2IGNsYXNzPVwicG8tc2VsZWN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXZcbiAgICAgICNzZWxlY3RCdXR0b25cbiAgICAgIGNsYXNzPVwicG8tc2VsZWN0LWJ1dHRvblwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdwby1zZWxlY3QtYnV0dG9uLWRpc2FibGVkJzogZGlzYWJsZWQsICdwby1zZWxlY3QtYnV0dG9uLXJlYWRvbmx5JzogcmVhZG9ubHkgfVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQnV0dG9uKClcIlxuICAgID5cbiAgICAgIDxzcGFuPnt7IGRpc3BsYXlWYWx1ZSB8fCBwbGFjZWhvbGRlciB9fTwvc3Bhbj5cblxuICAgICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgI2ljb25cbiAgICAgICAgICBjbGFzcz1cInBvLWljb24ge3sgc2VsZWN0SWNvbiB9fSBwby1maWVsZC1pY29uXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwby1maWVsZC1pY29uLWRpc2FibGVkJzogZGlzYWJsZWQsICdwby1maWVsZC1pY29uLXJlYWRvbmx5JzogcmVhZG9ubHkgfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDx1bCAjY29udGVudExpc3QgY2xhc3M9XCJwby1zZWxlY3QtY29udGVudFwiIFtuZ0NsYXNzXT1cInsgJ3BvLWludmlzaWJsZSc6IGlzTW9iaWxlIH1cIj5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgICBbY2xhc3MucG8tc2VsZWN0LWl0ZW0tc2VsZWN0ZWRdPVwic2VsZWN0ZWRWYWx1ZSA9PT0gb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXVwiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24/Llt0aGlzLmZpZWxkVmFsdWVdXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sob3B0aW9uKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwby1zZWxlY3QtaXRlbVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RPcHRpb25UZW1wbGF0ZTsgdGhlbiBvcHRpb25UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0T3B0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE9wdGlvblRlbXBsYXRlPlxuICAgICAgICAgICAgPHNwYW4+e3sgb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjb3B0aW9uVGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdE9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbiB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuIl19
@@ -1,5 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { HttpEventType, HttpRequest, HttpResponse, HttpHeaders } from '@angular/common/http';
3
+ import { Subscription } from 'rxjs';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/common/http";
5
6
  export class PoUploadBaseService {
@@ -39,7 +40,8 @@ export class PoUploadBaseService {
39
40
  }
40
41
  }
41
42
  sendFile(url, file, headers, formData, uploadCallback, successCallback, errorCallback) {
42
- const request = this.getRequest(url, headers, formData).subscribe(event => {
43
+ let request = new Subscription();
44
+ request = this.getRequest(url, headers, formData).subscribe(event => {
43
45
  if (event.type === HttpEventType.UploadProgress) {
44
46
  this.addRequest(file, request);
45
47
  const percentDone = Math.round((100 * event.loaded) / event.total);
@@ -86,4 +88,4 @@ PoUploadBaseService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PoUp
86
88
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoUploadBaseService, [{
87
89
  type: Injectable
88
90
  }], function () { return [{ type: i1.HttpClient }]; }, null); })();
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdXBsb2FkLWJhc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby11cGxvYWQvcG8tdXBsb2FkLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBRUwsYUFBYSxFQUViLFdBQVcsRUFDWCxZQUFZLEVBQ1osV0FBVyxFQUNaLE1BQU0sc0JBQXNCLENBQUM7OztBQU85QixNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFIcEMsY0FBUyxHQUFXLE9BQU8sQ0FBQztRQUM1QixhQUFRLEdBQWUsRUFBRSxDQUFDO0lBRWEsQ0FBQztJQUV4Qzs7Ozs7Ozs7O09BU0c7SUFDSSxNQUFNLENBQ1gsR0FBVyxFQUNYLEtBQTBCLEVBQzFCLE9BQW1ELEVBQ25ELFNBQTRCLEVBQzVCLGNBQTZELEVBQzdELGVBQXlELEVBQ3pELGFBQXVEO1FBRXZELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQVE7WUFDdkIsSUFBSSxFQUFFLEVBQUU7WUFDUixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUM7UUFFRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBRW5DLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXhELDJFQUEyRTtZQUMzRSxJQUFJLFNBQVMsRUFBRTtnQkFDYixXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUU1QixRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUM3RjtJQUNILENBQUM7SUFFTSxRQUFRLENBQ2IsR0FBVyxFQUNYLElBQWtCLEVBQ2xCLE9BQW1ELEVBQ25ELFFBQWtCLEVBQ2xCLGNBQTZELEVBQzdELGVBQXlELEVBQ3pELGFBQXVEO1FBRXZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQy9ELEtBQUssQ0FBQyxFQUFFO1lBQ04sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxjQUFjLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUUvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25FLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDbkM7aUJBQU0sSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFO2dCQUN4Qyw4QkFBOEI7Z0JBQzlCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDOUI7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxHQUFzQixFQUFFLEVBQUU7WUFDekIsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxVQUFVLENBQ2YsR0FBVyxFQUNYLE9BQW1ELEVBQ25ELFFBQWtCO1FBRWxCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdDLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO1lBQ2pELGNBQWMsRUFBRSxJQUFJO1lBQ3BCLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQVMsRUFBRSxRQUFvQjtRQUN0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV4RSxJQUFJLFVBQVUsRUFBRTtZQUNkLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDbkMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0IsUUFBUSxFQUFFLENBQUM7U0FDWjtJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsVUFBZTtRQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFrQixFQUFFLE9BQXFCO1FBQ3pELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQzs7c0ZBakhVLG1CQUFtQjt5RUFBbkIsbUJBQW1CLFdBQW5CLG1CQUFtQjt1RkFBbkIsbUJBQW1CO2NBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBDbGllbnQsXG4gIEh0dHBFdmVudFR5cGUsXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwSGVhZGVyc1xufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IFBvVXBsb2FkRmlsZSB9IGZyb20gJy4vcG8tdXBsb2FkLWZpbGUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBvVXBsb2FkQmFzZVNlcnZpY2Uge1xuICBmb3JtRmllbGQ6IHN0cmluZyA9ICdmaWxlcyc7XG4gIHJlcXVlc3RzOiBBcnJheTxhbnk+ID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgZW52aWFyIG9zIGFycXVpdm9zIGFvIHNlcnZpZG9yLCBjb25mb3JtZSBvIHBhcsOibWV0cm8gVVJMLlxuICAgKlxuICAgKiBAcGFyYW0gdXJsIFVSTCBkYSByZXF1aXNpw6fDo28gYSBzZXIgZWZldHVhZGEuXG4gICAqIEBwYXJhbSBmaWxlcyBBcnF1aXZvcyBhIHNlcmVtIGVudmlhZG9zLlxuICAgKiBAcGFyYW0gdE9uVXBsb2FkIEZ1bsOnw6NvIGEgc2VyIGV4ZWN1dGFkYSBxdWFuZG8gbyBhcnF1aXZvIGZvciBlbnZpYWRvIGFvIHNlcnZpZG9yLlxuICAgKiBAcGFyYW0gdXBsb2FkQ2FsbGJhY2sgRnVuw6fDo28gcXVlIHNlcsOhIGV4ZWN1dGFkYSBlbnF1YW50byBvcyBhcnF1aXZvcyBlc3RpdmVyZW0gc2VuZG8gZW52aWFkb3MuXG4gICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgRnVuw6fDo28gYSBzZXIgZXhlY3V0YWRhIHF1YW5kbyBhIHJlcXVpc2nDp8OjbyBmb3IgZWZldHVhZGEgY29tIHN1Y2Vzc28uXG4gICAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIEZ1bsOnw6NvIGEgc2VyIGV4ZWN1dGFkYSBxdWFuZG8gYSByZXF1aXNpw6fDo28gZm9pIGVmZXR1YWRhIGNvbSBzdWNlc3NvLlxuICAgKi9cbiAgcHVibGljIHVwbG9hZChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBmaWxlczogQXJyYXk8UG9VcGxvYWRGaWxlPixcbiAgICBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH0sXG4gICAgdE9uVXBsb2FkOiBFdmVudEVtaXR0ZXI8YW55PixcbiAgICB1cGxvYWRDYWxsYmFjazogKGZpbGU6IFBvVXBsb2FkRmlsZSwgcGVyY2VudDogbnVtYmVyKSA9PiB2b2lkLFxuICAgIHN1Y2Nlc3NDYWxsYmFjazogKGZpbGU6IFBvVXBsb2FkRmlsZSwgZXZlbnQ6IGFueSkgPT4gdm9pZCxcbiAgICBlcnJvckNhbGxiYWNrOiAoZmlsZTogUG9VcGxvYWRGaWxlLCBldmVudDogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IGZpbGVzTGVuZ3RoID0gZmlsZXMubGVuZ3RoO1xuICAgIGNvbnN0IHVwbG9hZEV2ZW50OiBhbnkgPSB7XG4gICAgICBkYXRhOiB7fSxcbiAgICAgIGZpbGU6IG51bGxcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5yYXdGaWxlLm5hbWU7XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCh0aGlzLmZvcm1GaWVsZCwgZmlsZS5yYXdGaWxlLCBmaWxlTmFtZSk7XG5cbiAgICAgIC8vIEZ1bsOnw6NvIHVwbG9hZCwgb25kZSBvIGRlc2Vudm9sdmVkb3IgcG9kZSBlbnZpYXIgZGFkb3MgcGFyYSBhIHJlcXVpc2nDp8Ojby5cbiAgICAgIGlmICh0T25VcGxvYWQpIHtcbiAgICAgICAgdXBsb2FkRXZlbnRbJ2ZpbGUnXSA9IGZpbGU7XG4gICAgICAgIHRPblVwbG9hZC5lbWl0KHVwbG9hZEV2ZW50KTtcblxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2RhdGEnLCBKU09OLnN0cmluZ2lmeSh1cGxvYWRFdmVudC5kYXRhKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VuZEZpbGUodXJsLCBmaWxlLCBoZWFkZXJzLCBmb3JtRGF0YSwgdXBsb2FkQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbmRGaWxlKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGZpbGU6IFBvVXBsb2FkRmlsZSxcbiAgICBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH0sXG4gICAgZm9ybURhdGE6IEZvcm1EYXRhLFxuICAgIHVwbG9hZENhbGxiYWNrOiAoZmlsZTogUG9VcGxvYWRGaWxlLCBwZXJjZW50OiBudW1iZXIpID0+IHZvaWQsXG4gICAgc3VjY2Vzc0NhbGxiYWNrOiAoZmlsZTogUG9VcGxvYWRGaWxlLCBldmVudDogYW55KSA9PiB2b2lkLFxuICAgIGVycm9yQ2FsbGJhY2s6IChmaWxlOiBQb1VwbG9hZEZpbGUsIGV2ZW50OiBhbnkpID0+IHZvaWRcbiAgKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZ2V0UmVxdWVzdCh1cmwsIGhlYWRlcnMsIGZvcm1EYXRhKS5zdWJzY3JpYmUoXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgdGhpcy5hZGRSZXF1ZXN0KGZpbGUsIHJlcXVlc3QpO1xuXG4gICAgICAgICAgY29uc3QgcGVyY2VudERvbmUgPSBNYXRoLnJvdW5kKCgxMDAgKiBldmVudC5sb2FkZWQpIC8gZXZlbnQudG90YWwpO1xuICAgICAgICAgIHVwbG9hZENhbGxiYWNrKGZpbGUsIHBlcmNlbnREb25lKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xuICAgICAgICAgIC8vIFN1Y2Vzc28sIGFycXVpdm9zIGVudmlhZG9zLlxuICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmaWxlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICBlcnJvckNhbGxiYWNrKGZpbGUsIGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXF1ZXN0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IEFycmF5PHN0cmluZz4gfSxcbiAgICBmb3JtRGF0YTogRm9ybURhdGFcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBodHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzKTtcblxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgnUE9TVCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgaGVhZGVyczogaHR0cEhlYWRlcnNcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QocmVxKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wUmVxdWVzdEJ5RmlsZShmaWxlOiBhbnksIGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgcmVxdWVzdE9iaiA9IHRoaXMucmVxdWVzdHMuZmluZChyZXEgPT4gcmVxLmZpbGUudWlkID09PSBmaWxlLnVpZCk7XG5cbiAgICBpZiAocmVxdWVzdE9iaikge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmoucmVxdWVzdDtcbiAgICAgIHJlcXVlc3QudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMucmVtb3ZlUmVxdWVzdChyZXF1ZXN0T2JqKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZVJlcXVlc3QocmVxdWVzdE9iajogYW55KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnJlcXVlc3RzLmluZGV4T2YocmVxdWVzdE9iaik7XG4gICAgdGhpcy5yZXF1ZXN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgcHVibGljIGFkZFJlcXVlc3QoZmlsZTogUG9VcGxvYWRGaWxlLCByZXF1ZXN0OiBTdWJzY3JpcHRpb24pIHtcbiAgICBjb25zdCBoYXNSZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0cy5zb21lKHJlcSA9PiByZXEuZmlsZS51aWQgPT09IGZpbGUudWlkKTtcblxuICAgIGlmICghaGFzUmVxdWVzdCkge1xuICAgICAgdGhpcy5yZXF1ZXN0cy5wdXNoKHsgZmlsZSwgcmVxdWVzdCB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdXBsb2FkLWJhc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby11cGxvYWQvcG8tdXBsb2FkLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBRUwsYUFBYSxFQUViLFdBQVcsRUFDWCxZQUFZLEVBQ1osV0FBVyxFQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBR2hELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUhwQyxjQUFTLEdBQVcsT0FBTyxDQUFDO1FBQzVCLGFBQVEsR0FBZSxFQUFFLENBQUM7SUFFYSxDQUFDO0lBRXhDOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FDWCxHQUFXLEVBQ1gsS0FBMEIsRUFDMUIsT0FBbUQsRUFDbkQsU0FBNEIsRUFDNUIsY0FBNkQsRUFDN0QsZUFBeUQsRUFDekQsYUFBdUQ7UUFFdkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxNQUFNLFdBQVcsR0FBUTtZQUN2QixJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxRQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFFbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFeEQsMkVBQTJFO1lBQzNFLElBQUksU0FBUyxFQUFFO2dCQUNiLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRTVCLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDM0Q7WUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQzdGO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FDYixHQUFXLEVBQ1gsSUFBa0IsRUFDbEIsT0FBbUQsRUFDbkQsUUFBa0IsRUFDbEIsY0FBNkQsRUFDN0QsZUFBeUQsRUFDekQsYUFBdUQ7UUFFdkQsSUFBSSxPQUFPLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0MsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQ3pELEtBQUssQ0FBQyxFQUFFO1lBQ04sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxjQUFjLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUUvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25FLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDbkM7aUJBQU0sSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFO2dCQUN4Qyw4QkFBOEI7Z0JBQzlCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDOUI7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxHQUFzQixFQUFFLEVBQUU7WUFDekIsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxVQUFVLENBQ2YsR0FBVyxFQUNYLE9BQW1ELEVBQ25ELFFBQWtCO1FBRWxCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdDLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO1lBQ2pELGNBQWMsRUFBRSxJQUFJO1lBQ3BCLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQVMsRUFBRSxRQUFvQjtRQUN0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV4RSxJQUFJLFVBQVUsRUFBRTtZQUNkLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDbkMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0IsUUFBUSxFQUFFLENBQUM7U0FDWjtJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsVUFBZTtRQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFrQixFQUFFLE9BQXFCO1FBQ3pELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQzs7c0ZBbEhVLG1CQUFtQjt5RUFBbkIsbUJBQW1CLFdBQW5CLG1CQUFtQjt1RkFBbkIsbUJBQW1CO2NBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBDbGllbnQsXG4gIEh0dHBFdmVudFR5cGUsXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwSGVhZGVyc1xufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IFBvVXBsb2FkRmlsZSB9IGZyb20gJy4vcG8tdXBsb2FkLWZpbGUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBvVXBsb2FkQmFzZVNlcnZpY2Uge1xuICBmb3JtRmllbGQ6IHN0cmluZyA9ICdmaWxlcyc7XG4gIHJlcXVlc3RzOiBBcnJheTxhbnk+ID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgZW52aWFyIG9zIGFycXVpdm9zIGFvIHNlcnZpZG9yLCBjb25mb3JtZSBvIHBhcsOibWV0cm8gVVJMLlxuICAgKlxuICAgKiBAcGFyYW0gdXJsIFVSTCBkYSByZXF1aXNpw6fDo28gYSBzZXIgZWZldHVhZGEuXG4gICAqIEBwYXJhbSBmaWxlcyBBcnF1aXZvcyBhIHNlcmVtIGVudmlhZG9zLlxuICAgKiBAcGFyYW0gdE9uVXBsb2FkIEZ1bsOnw6NvIGEgc2VyIGV4ZWN1dGFkYSBxdWFuZG8gbyBhcnF1aXZvIGZvciBlbnZpYWRvIGFvIHNlcnZpZG9yLlxuICAgKiBAcGFyYW0gdXBsb2FkQ2FsbGJhY2sgRnVuw6fDo28gcXVlIHNlcsOhIGV4ZWN1dGFkYSBlbnF1YW50byBvcyBhcnF1aXZvcyBlc3RpdmVyZW0gc2VuZG8gZW52aWFkb3MuXG4gICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgRnVuw6fDo28gYSBzZXIgZXhlY3V0YWRhIHF1YW5kbyBhIHJlcXVpc2nDp8OjbyBmb3IgZWZldHVhZGEgY29tIHN1Y2Vzc28uXG4gICAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIEZ1bsOnw6NvIGEgc2VyIGV4ZWN1dGFkYSBxdWFuZG8gYSByZXF1aXNpw6fDo28gZm9pIGVmZXR1YWRhIGNvbSBzdWNlc3NvLlxuICAgKi9cbiAgcHVibGljIHVwbG9hZChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBmaWxlczogQXJyYXk8UG9VcGxvYWRGaWxlPixcbiAgICBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH0sXG4gICAgdE9uVXBsb2FkOiBFdmVudEVtaXR0ZXI8YW55PixcbiAgICB1cGxvYWRDYWxsYmFjazogKGZpbGU6IFBvVXBsb2FkRmlsZSwgcGVyY2VudDogbnVtYmVyKSA9PiB2b2lkLFxuICAgIHN1Y2Nlc3NDYWxsYmFjazogKGZpbGU6IFBvVXBsb2FkRmlsZSwgZXZlbnQ6IGFueSkgPT4gdm9pZCxcbiAgICBlcnJvckNhbGxiYWNrOiAoZmlsZTogUG9VcGxvYWRGaWxlLCBldmVudDogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IGZpbGVzTGVuZ3RoID0gZmlsZXMubGVuZ3RoO1xuICAgIGNvbnN0IHVwbG9hZEV2ZW50OiBhbnkgPSB7XG4gICAgICBkYXRhOiB7fSxcbiAgICAgIGZpbGU6IG51bGxcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5yYXdGaWxlLm5hbWU7XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCh0aGlzLmZvcm1GaWVsZCwgZmlsZS5yYXdGaWxlLCBmaWxlTmFtZSk7XG5cbiAgICAgIC8vIEZ1bsOnw6NvIHVwbG9hZCwgb25kZSBvIGRlc2Vudm9sdmVkb3IgcG9kZSBlbnZpYXIgZGFkb3MgcGFyYSBhIHJlcXVpc2nDp8Ojby5cbiAgICAgIGlmICh0T25VcGxvYWQpIHtcbiAgICAgICAgdXBsb2FkRXZlbnRbJ2ZpbGUnXSA9IGZpbGU7XG4gICAgICAgIHRPblVwbG9hZC5lbWl0KHVwbG9hZEV2ZW50KTtcblxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2RhdGEnLCBKU09OLnN0cmluZ2lmeSh1cGxvYWRFdmVudC5kYXRhKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VuZEZpbGUodXJsLCBmaWxlLCBoZWFkZXJzLCBmb3JtRGF0YSwgdXBsb2FkQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbmRGaWxlKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGZpbGU6IFBvVXBsb2FkRmlsZSxcbiAgICBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH0sXG4gICAgZm9ybURhdGE6IEZvcm1EYXRhLFxuICAgIHVwbG9hZENhbGxiYWNrOiAoZmlsZTogUG9VcGxvYWRGaWxlLCBwZXJjZW50OiBudW1iZXIpID0+IHZvaWQsXG4gICAgc3VjY2Vzc0NhbGxiYWNrOiAoZmlsZTogUG9VcGxvYWRGaWxlLCBldmVudDogYW55KSA9PiB2b2lkLFxuICAgIGVycm9yQ2FsbGJhY2s6IChmaWxlOiBQb1VwbG9hZEZpbGUsIGV2ZW50OiBhbnkpID0+IHZvaWRcbiAgKSB7XG4gICAgbGV0IHJlcXVlc3Q6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICByZXF1ZXN0ID0gdGhpcy5nZXRSZXF1ZXN0KHVybCwgaGVhZGVycywgZm9ybURhdGEpLnN1YnNjcmliZShcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICB0aGlzLmFkZFJlcXVlc3QoZmlsZSwgcmVxdWVzdCk7XG5cbiAgICAgICAgICBjb25zdCBwZXJjZW50RG9uZSA9IE1hdGgucm91bmQoKDEwMCAqIGV2ZW50LmxvYWRlZCkgLyBldmVudC50b3RhbCk7XG4gICAgICAgICAgdXBsb2FkQ2FsbGJhY2soZmlsZSwgcGVyY2VudERvbmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gU3VjZXNzbywgYXJxdWl2b3MgZW52aWFkb3MuXG4gICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZpbGUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGVycm9yQ2FsbGJhY2soZmlsZSwgZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFJlcXVlc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiB9LFxuICAgIGZvcm1EYXRhOiBGb3JtRGF0YVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKGhlYWRlcnMpO1xuXG4gICAgY29uc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KCdQT1NUJywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICBoZWFkZXJzOiBodHRwSGVhZGVyc1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChyZXEpO1xuICB9XG5cbiAgcHVibGljIHN0b3BSZXF1ZXN0QnlGaWxlKGZpbGU6IGFueSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCByZXF1ZXN0T2JqID0gdGhpcy5yZXF1ZXN0cy5maW5kKHJlcSA9PiByZXEuZmlsZS51aWQgPT09IGZpbGUudWlkKTtcblxuICAgIGlmIChyZXF1ZXN0T2JqKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iai5yZXF1ZXN0O1xuICAgICAgcmVxdWVzdC51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5yZW1vdmVSZXF1ZXN0KHJlcXVlc3RPYmopO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlUmVxdWVzdChyZXF1ZXN0T2JqOiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmVxdWVzdHMuaW5kZXhPZihyZXF1ZXN0T2JqKTtcbiAgICB0aGlzLnJlcXVlc3RzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cblxuICBwdWJsaWMgYWRkUmVxdWVzdChmaWxlOiBQb1VwbG9hZEZpbGUsIHJlcXVlc3Q6IFN1YnNjcmlwdGlvbikge1xuICAgIGNvbnN0IGhhc1JlcXVlc3QgPSB0aGlzLnJlcXVlc3RzLnNvbWUocmVxID0+IHJlcS5maWxlLnVpZCA9PT0gZmlsZS51aWQpO1xuXG4gICAgaWYgKCFoYXNSZXF1ZXN0KSB7XG4gICAgICB0aGlzLnJlcXVlc3RzLnB1c2goeyBmaWxlLCByZXF1ZXN0IH0pO1xuICAgIH1cbiAgfVxufVxuIl19