@wavemaker/app-ng-runtime 11.14.2-rc.6311 → 11.15.0-1.246

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 (177) hide show
  1. package/build-task/bundles/index.umd.js +13 -2
  2. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
  3. package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
  4. package/build-task/fesm2022/index.mjs +13 -2
  5. package/build-task/fesm2022/index.mjs.map +1 -1
  6. package/components/base/bundles/index.umd.js +271 -128
  7. package/components/base/esm2022/public_api.mjs +2 -2
  8. package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
  9. package/components/base/esm2022/utils/live-utils.mjs +10 -7
  10. package/components/base/esm2022/utils/widget-utils.mjs +8 -1
  11. package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
  12. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
  13. package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
  14. package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
  15. package/components/base/fesm2022/index.mjs +273 -129
  16. package/components/base/fesm2022/index.mjs.map +1 -1
  17. package/components/base/public_api.d.ts +1 -1
  18. package/components/base/utils/autolayout-utils.d.ts +29 -0
  19. package/components/base/utils/widget-utils.d.ts +1 -0
  20. package/components/base/widgets/common/container/container.directive.d.ts +7 -9
  21. package/components/basic/label/bundles/index.umd.js +4 -0
  22. package/components/basic/label/esm2022/label.directive.mjs +5 -1
  23. package/components/basic/label/fesm2022/index.mjs +4 -0
  24. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  25. package/components/basic/search/bundles/index.umd.js +13 -11
  26. package/components/basic/search/esm2022/search.component.mjs +14 -12
  27. package/components/basic/search/fesm2022/index.mjs +13 -11
  28. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  29. package/components/chart/bundles/index.umd.js +2 -2
  30. package/components/chart/esm2022/chart.utils.mjs +3 -3
  31. package/components/chart/fesm2022/index.mjs +2 -2
  32. package/components/chart/fesm2022/index.mjs.map +1 -1
  33. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
  34. package/components/containers/accordion/accordion.directive.d.ts +4 -0
  35. package/components/containers/accordion/bundles/index.umd.js +34 -0
  36. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
  37. package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
  38. package/components/containers/accordion/fesm2022/index.mjs +36 -2
  39. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  40. package/components/containers/tabs/bundles/index.umd.js +34 -0
  41. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
  42. package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
  43. package/components/containers/tabs/fesm2022/index.mjs +36 -2
  44. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  45. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
  46. package/components/containers/tabs/tabs.component.d.ts +5 -1
  47. package/components/containers/wizard/bundles/index.umd.js +46 -2
  48. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
  49. package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
  50. package/components/containers/wizard/fesm2022/index.mjs +48 -4
  51. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  52. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
  53. package/components/containers/wizard/wizard.component.d.ts +1 -0
  54. package/components/data/form/bundles/index.umd.js +28 -1
  55. package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
  56. package/components/data/form/esm2022/form.component.mjs +24 -2
  57. package/components/data/form/esm2022/form.props.mjs +3 -2
  58. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
  59. package/components/data/form/fesm2022/index.mjs +29 -2
  60. package/components/data/form/fesm2022/index.mjs.map +1 -1
  61. package/components/data/form/form.component.d.ts +3 -0
  62. package/components/data/list/bundles/index.umd.js +0 -9
  63. package/components/data/list/esm2022/list-item.directive.mjs +1 -10
  64. package/components/data/list/fesm2022/index.mjs +0 -9
  65. package/components/data/list/fesm2022/index.mjs.map +1 -1
  66. package/components/data/pagination/bundles/index.umd.js +6 -2
  67. package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
  68. package/components/data/pagination/fesm2022/index.mjs +6 -2
  69. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  70. package/components/data/table/bundles/index.umd.js +21 -4
  71. package/components/data/table/esm2022/table.component.mjs +22 -5
  72. package/components/data/table/fesm2022/index.mjs +21 -4
  73. package/components/data/table/fesm2022/index.mjs.map +1 -1
  74. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
  75. package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
  76. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
  77. package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
  78. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  79. package/components/input/checkbox/bundles/index.umd.js +12 -3
  80. package/components/input/checkbox/checkbox.component.d.ts +2 -0
  81. package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
  82. package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
  83. package/components/input/checkbox/fesm2022/index.mjs +12 -3
  84. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  85. package/components/input/checkboxset/bundles/index.umd.js +12 -1
  86. package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
  87. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
  88. package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
  89. package/components/input/checkboxset/fesm2022/index.mjs +12 -1
  90. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  91. package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
  92. package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
  93. package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
  94. package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
  95. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
  96. package/components/input/epoch/date/bundles/index.umd.js +4 -3
  97. package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
  98. package/components/input/epoch/date/fesm2022/index.mjs +4 -3
  99. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  100. package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
  101. package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
  102. package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
  103. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
  104. package/components/input/file-upload/bundles/index.umd.js +1 -1
  105. package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
  106. package/components/input/file-upload/fesm2022/index.mjs +1 -1
  107. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  108. package/components/input/radioset/bundles/index.umd.js +13 -1
  109. package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
  110. package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
  111. package/components/input/radioset/fesm2022/index.mjs +13 -1
  112. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  113. package/components/input/radioset/radioset.component.d.ts +1 -0
  114. package/components/input/slider/bundles/index.umd.js +86 -16
  115. package/components/input/slider/esm2022/slider.component.mjs +76 -9
  116. package/components/input/slider/esm2022/slider.props.mjs +5 -1
  117. package/components/input/slider/fesm2022/index.mjs +79 -8
  118. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  119. package/components/input/slider/slider.component.d.ts +12 -3
  120. package/components/input/text/bundles/index.umd.js +24 -3
  121. package/components/input/text/esm2022/input-text/input-text.component.mjs +6 -3
  122. package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
  123. package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
  124. package/components/input/text/fesm2022/index.mjs +24 -3
  125. package/components/input/text/fesm2022/index.mjs.map +1 -1
  126. package/components/input/text/input-text/input-text.component.d.ts +4 -0
  127. package/components/input/text/number-locale/number-locale.d.ts +12 -0
  128. package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
  129. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
  130. package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
  131. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  132. package/components/navigation/popover/bundles/index.umd.js +12 -0
  133. package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
  134. package/components/navigation/popover/fesm2022/index.mjs +12 -0
  135. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  136. package/components/navigation/popover/popover.component.d.ts +2 -0
  137. package/components/page/default/bundles/index.umd.js +0 -4
  138. package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
  139. package/components/page/default/fesm2022/index.mjs +0 -4
  140. package/components/page/default/fesm2022/index.mjs.map +1 -1
  141. package/components/page/header/bundles/index.umd.js +4 -3
  142. package/components/page/header/esm2022/header.component.mjs +5 -4
  143. package/components/page/header/fesm2022/index.mjs +4 -3
  144. package/components/page/header/fesm2022/index.mjs.map +1 -1
  145. package/components/page/header/header.component.d.ts +2 -1
  146. package/core/bundles/index.umd.js +90 -6
  147. package/core/enums/enums.d.ts +1 -0
  148. package/core/esm2022/enums/enums.mjs +2 -1
  149. package/core/esm2022/utils/build-utils.mjs +5 -1
  150. package/core/esm2022/utils/utils.mjs +5 -2
  151. package/core/esm2022/utils/watcher.mjs +83 -4
  152. package/core/fesm2022/index.mjs +91 -4
  153. package/core/fesm2022/index.mjs.map +1 -1
  154. package/core/utils/watcher.d.ts +2 -0
  155. package/npm-shrinkwrap.json +2 -2
  156. package/oAuth/esm2022/oAuth.service.mjs +1 -1
  157. package/oAuth/fesm2022/index.mjs.map +1 -1
  158. package/oAuth/oAuth.service.d.ts +1 -1
  159. package/package-lock.json +2 -2
  160. package/package.json +1 -1
  161. package/runtime/base/bundles/index.umd.js +33 -31
  162. package/runtime/base/components/base-prefab.component.d.ts +6 -4
  163. package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
  164. package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
  165. package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
  166. package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
  167. package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
  168. package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
  169. package/runtime/base/fesm2022/index.mjs +34 -31
  170. package/runtime/base/fesm2022/index.mjs.map +1 -1
  171. package/runtime/base/runtime-base.module.d.ts +2 -1
  172. package/runtime/dynamic/app/app.config.d.ts +1 -1
  173. package/runtime/dynamic/bundles/index.umd.js +1 -1
  174. package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
  175. package/runtime/dynamic/fesm2022/index.mjs +2 -2
  176. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  177. package/scripts/datatable/datatable.js +17 -15
@@ -120,6 +120,7 @@
120
120
  this.trailingZeroDecimalPipe = trailingZeroDecimalPipe;
121
121
  this.isDefaultQuery = true;
122
122
  this.decimalValue = '';
123
+ this.invalidPattern = false;
123
124
  this.selectedLocale = i18nService.getSelectedLocale();
124
125
  this.DECIMAL = i1.getLocaleNumberSymbol(this.localefilter || this.selectedLocale, i1.NumberSymbol.Decimal);
125
126
  this.GROUP = i1.getLocaleNumberSymbol(this.localefilter || this.selectedLocale, i1.NumberSymbol.Group);
@@ -326,6 +327,10 @@
326
327
  else {
327
328
  this.displayValue = input.value = this.transformNumber(this.proxyModel);
328
329
  }
330
+ if (this.trailingzero) {
331
+ const regexObj = new RegExp(this.regexPattern);
332
+ this.invalidPattern = !regexObj.test(this.displayValue);
333
+ }
329
334
  // in safari browser, setSelectionRange will focus the input by default, which may invoke the focus event on widget.
330
335
  // Hence preventing the setSelectionRange when default value is set i.e. widget is not focused.
331
336
  if (this.updateon === 'default' && !this.isDefaultQuery) {
@@ -526,6 +531,13 @@
526
531
  },
527
532
  };
528
533
  }
534
+ if (this.invalidPattern) {
535
+ return {
536
+ pattern: {
537
+ valid: false
538
+ }
539
+ };
540
+ }
529
541
  this.validateType = '';
530
542
  /* WMS-18269 | Extending the existing validation for 'required' */
531
543
  if (this['show'] && this['required']) {
@@ -622,6 +634,9 @@
622
634
  this.onInputChange(nv);
623
635
  }
624
636
  }
637
+ else if (key === 'regexp') {
638
+ this.regexPattern = nv;
639
+ }
625
640
  else {
626
641
  super.onPropertyChange(key, nv, ov);
627
642
  }
@@ -911,7 +926,10 @@
911
926
  ['type', { value: 'text', ...base.PROP_STRING }],
912
927
  ['updateon', base.PROP_STRING],
913
928
  ['conditionalclass', base.PROP_ANY],
914
- ['conditionalstyle', base.PROP_ANY]
929
+ ['conditionalstyle', base.PROP_ANY],
930
+ ['trailingiconclass', base.PROP_STRING],
931
+ ['leadingiconclass', base.PROP_STRING],
932
+ ['supportingtext', base.PROP_STRING]
915
933
  ]);
916
934
  const registerProps = () => {
917
935
  base.register('wm-input-text', inputTextTypeProps);
@@ -1005,6 +1023,9 @@
1005
1023
  super.ngOnInit();
1006
1024
  this.isFocused = !!this.datavalue;
1007
1025
  }
1026
+ iconClickEvent($event, type) {
1027
+ this.invokeEventCallback(type, { $event });
1028
+ }
1008
1029
  ngOnDestroy() {
1009
1030
  // MEMORY LEAK FIX: Clear all ViewChild references
1010
1031
  this.inputEl = null;
@@ -1018,7 +1039,7 @@
1018
1039
  base.provideAs(InputTextComponent, i2.NG_VALUE_ACCESSOR, true),
1019
1040
  base.provideAs(InputTextComponent, i2.NG_VALIDATORS, true),
1020
1041
  base.provideAsWidgetRef(InputTextComponent)
1021
- ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "ngModel", first: true, predicate: i2.NgModel, descendants: true }, { propertyName: "imask", first: true, predicate: ["input"], descendants: true, read: i3.IMaskDirective }], usesInheritance: true, ngImport: i0__namespace, template: "<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"conditionalclass\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n", dependencies: [{ kind: "ngmodule", type: i1.CommonModule }, { kind: "directive", type: i1__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1__namespace.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: i2.FormsModule }, { kind: "directive", type: i2__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2__namespace.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: i3.IMaskModule }, { kind: "directive", type: i3__namespace.IMaskDirective, selector: "[imask]", inputs: ["imask", "unmask", "imaskElement"], outputs: ["accept", "complete"], exportAs: ["imask"] }] }); }
1042
+ ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "ngModel", first: true, predicate: i2.NgModel, descendants: true }, { propertyName: "imask", first: true, predicate: ["input"], descendants: true, read: i3.IMaskDirective }], usesInheritance: true, ngImport: i0__namespace, template: "<button class=\"btn-leading-icon\" type=\"button\" name=\"leadingIcon\" *ngIf=\"leadingiconclass\" (click)=\"iconClickEvent($event, 'leadingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"leadingiconclass\"></i>\n</button>\n<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"[leadingiconclass ? 'with-leading-icon' : '', trailingiconclass ? 'with-trailing-icon' : '', conditionalclass || '']\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n<button class=\"btn-trailing-icon\" type=\"button\" name=\"trailingIcon\" *ngIf=\"trailingiconclass\" (click)=\"iconClickEvent($event, 'trailingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"trailingiconclass\"></i>\n</button>\n<p class=\"app-label help-block supporting-text\" *ngIf=\"supportingtext\" name=\"supportingText\">{{supportingtext}}</p>\n\n", dependencies: [{ kind: "ngmodule", type: i1.CommonModule }, { kind: "directive", type: i1__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1__namespace.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: i2.FormsModule }, { kind: "directive", type: i2__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2__namespace.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: i3.IMaskModule }, { kind: "directive", type: i3__namespace.IMaskDirective, selector: "[imask]", inputs: ["imask", "unmask", "imaskElement"], outputs: ["accept", "complete"], exportAs: ["imask"] }] }); }
1022
1043
  }
1023
1044
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: InputTextComponent, decorators: [{
1024
1045
  type: i0.Component,
@@ -1026,7 +1047,7 @@
1026
1047
  base.provideAs(InputTextComponent, i2.NG_VALUE_ACCESSOR, true),
1027
1048
  base.provideAs(InputTextComponent, i2.NG_VALIDATORS, true),
1028
1049
  base.provideAsWidgetRef(InputTextComponent)
1029
- ], template: "<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"conditionalclass\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n" }]
1050
+ ], template: "<button class=\"btn-leading-icon\" type=\"button\" name=\"leadingIcon\" *ngIf=\"leadingiconclass\" (click)=\"iconClickEvent($event, 'leadingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"leadingiconclass\"></i>\n</button>\n<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"[leadingiconclass ? 'with-leading-icon' : '', trailingiconclass ? 'with-trailing-icon' : '', conditionalclass || '']\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n<button class=\"btn-trailing-icon\" type=\"button\" name=\"trailingIcon\" *ngIf=\"trailingiconclass\" (click)=\"iconClickEvent($event, 'trailingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"trailingiconclass\"></i>\n</button>\n<p class=\"app-label help-block supporting-text\" *ngIf=\"supportingtext\" name=\"supportingText\">{{supportingtext}}</p>\n\n" }]
1030
1051
  }], ctorParameters: () => [{ type: i0__namespace.Injector }, { type: undefined, decorators: [{
1031
1052
  type: i0.Inject,
1032
1053
  args: ['EXPLICIT_CONTEXT']
@@ -89,6 +89,9 @@ export class InputTextComponent extends BaseInput {
89
89
  super.ngOnInit();
90
90
  this.isFocused = !!this.datavalue;
91
91
  }
92
+ iconClickEvent($event, type) {
93
+ this.invokeEventCallback(type, { $event });
94
+ }
92
95
  ngOnDestroy() {
93
96
  // MEMORY LEAK FIX: Clear all ViewChild references
94
97
  this.inputEl = null;
@@ -102,7 +105,7 @@ export class InputTextComponent extends BaseInput {
102
105
  provideAs(InputTextComponent, NG_VALUE_ACCESSOR, true),
103
106
  provideAs(InputTextComponent, NG_VALIDATORS, true),
104
107
  provideAsWidgetRef(InputTextComponent)
105
- ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "ngModel", first: true, predicate: NgModel, descendants: true }, { propertyName: "imask", first: true, predicate: ["input"], descendants: true, read: IMaskDirective }], usesInheritance: true, ngImport: i0, template: "<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"conditionalclass\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: IMaskModule }, { kind: "directive", type: i3.IMaskDirective, selector: "[imask]", inputs: ["imask", "unmask", "imaskElement"], outputs: ["accept", "complete"], exportAs: ["imask"] }] }); }
108
+ ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "ngModel", first: true, predicate: NgModel, descendants: true }, { propertyName: "imask", first: true, predicate: ["input"], descendants: true, read: IMaskDirective }], usesInheritance: true, ngImport: i0, template: "<button class=\"btn-leading-icon\" type=\"button\" name=\"leadingIcon\" *ngIf=\"leadingiconclass\" (click)=\"iconClickEvent($event, 'leadingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"leadingiconclass\"></i>\n</button>\n<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"[leadingiconclass ? 'with-leading-icon' : '', trailingiconclass ? 'with-trailing-icon' : '', conditionalclass || '']\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n<button class=\"btn-trailing-icon\" type=\"button\" name=\"trailingIcon\" *ngIf=\"trailingiconclass\" (click)=\"iconClickEvent($event, 'trailingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"trailingiconclass\"></i>\n</button>\n<p class=\"app-label help-block supporting-text\" *ngIf=\"supportingtext\" name=\"supportingText\">{{supportingtext}}</p>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: IMaskModule }, { kind: "directive", type: i3.IMaskDirective, selector: "[imask]", inputs: ["imask", "unmask", "imaskElement"], outputs: ["accept", "complete"], exportAs: ["imask"] }] }); }
106
109
  }
107
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputTextComponent, decorators: [{
108
111
  type: Component,
@@ -110,7 +113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
110
113
  provideAs(InputTextComponent, NG_VALUE_ACCESSOR, true),
111
114
  provideAs(InputTextComponent, NG_VALIDATORS, true),
112
115
  provideAsWidgetRef(InputTextComponent)
113
- ], template: "<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"conditionalclass\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n" }]
116
+ ], template: "<button class=\"btn-leading-icon\" type=\"button\" name=\"leadingIcon\" *ngIf=\"leadingiconclass\" (click)=\"iconClickEvent($event, 'leadingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"leadingiconclass\"></i>\n</button>\n<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"[leadingiconclass ? 'with-leading-icon' : '', trailingiconclass ? 'with-trailing-icon' : '', conditionalclass || '']\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n<button class=\"btn-trailing-icon\" type=\"button\" name=\"trailingIcon\" *ngIf=\"trailingiconclass\" (click)=\"iconClickEvent($event, 'trailingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"trailingiconclass\"></i>\n</button>\n<p class=\"app-label help-block supporting-text\" *ngIf=\"supportingtext\" name=\"supportingText\">{{supportingtext}}</p>\n\n" }]
114
117
  }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined, decorators: [{
115
118
  type: Inject,
116
119
  args: ['EXPLICIT_CONTEXT']
@@ -126,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
126
129
  type: ViewChild,
127
130
  args: ['input', { read: IMaskDirective }]
128
131
  }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvdGV4dC9zcmMvaW5wdXQtdGV4dC9pbnB1dC10ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC90ZXh0L3NyYy9pbnB1dC10ZXh0L2lucHV0LXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFFN0MsTUFBTSxhQUFhLEdBQWtCO0lBQ2pDLFVBQVUsRUFBRSxlQUFlO0lBQzNCLFNBQVMsRUFBRSxtQkFBbUI7Q0FDakMsQ0FBQztBQWFGLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxTQUFTO2FBQ3RDLG9CQUFlLEdBQUcsYUFBYSxFQUFF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QUUsQ0FBQztJQUN4QixDQUFDOytHQTdHUSxrQkFBa0IsMENBNEJRLGtCQUFrQjttR0E1QjVDLGtCQUFrQixvTUFOaEI7WUFDUCxTQUFTLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1lBQ3RELFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDO1lBQ2xELGtCQUFrQixDQUFDLGtCQUFrQixDQUFDO1NBQ3pDLG9LQTJCVSxPQUFPLDRHQUNTLGNBQWMsb0RDckQ3Qyw4OEJBMEJBLDJDRFJZLFlBQVksaU5BQUUsV0FBVyx1b0NBQUUsV0FBVzs7NEZBU3JDLGtCQUFrQjtrQkFYOUIsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxZQUNyQyw2SUFBNkksYUFFNUk7d0JBQ1AsU0FBUyxxQkFBcUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO3dCQUN0RCxTQUFTLHFCQUFxQixhQUFhLEVBQUUsSUFBSSxDQUFDO3dCQUNsRCxrQkFBa0Isb0JBQW9CO3FCQUN6Qzs7MEJBOEIyQixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5Q0FKNUIsT0FBTztzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNkLE9BQU87c0JBQTFCLFNBQVM7dUJBQUMsT0FBTztnQkFDMEIsS0FBSztzQkFBaEQsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBQyxJQUFJLEVBQUUsY0FBYyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSU1hc2tNb2R1bGUgfSBmcm9tICdhbmd1bGFyLWltYXNrJztcbmltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ01vZGVsfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7SVdpZGdldENvbmZpZywgcHJvdmlkZUFzLCBwcm92aWRlQXNXaWRnZXRSZWZ9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL2lucHV0LXRleHQucHJvcHMnO1xuaW1wb3J0IHtCYXNlSW5wdXR9IGZyb20gJy4uL2Jhc2UtaW5wdXQvYmFzZS1pbnB1dCc7XG5pbXBvcnQge0lNYXNrRGlyZWN0aXZlfSBmcm9tICdhbmd1bGFyLWltYXNrJztcblxuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20taW5wdXQtdGV4dCcsXG4gICAgaG9zdENsYXNzOiAnYXBwLWlucHV0LXdyYXBwZXInXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIElNYXNrTW9kdWxlXSxcbiAgICBzZWxlY3RvcjogJ3dtLWlucHV0W3R5cGU9XCJ0ZXh0XCJdLCB3bS1pbnB1dDpub3QoW3R5cGVdKSwgd20taW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdLCB3bS1pbnB1dFt0eXBlPVwic2VhcmNoXCJdLCB3bS1pbnB1dFt0eXBlPVwidGVsXCJdLCB3bS1pbnB1dFt0eXBlPVwidXJsXCJdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhJbnB1dFRleHRDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKElucHV0VGV4dENvbXBvbmVudCwgTkdfVkFMSURBVE9SUywgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihJbnB1dFRleHRDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dFRleHRDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWF4Y2hhcnM6IG51bWJlcjtcbiAgICBwdWJsaWMgcmVnZXhwOiBzdHJpbmc7XG4gICAgcHVibGljIGRpc3BsYXlmb3JtYXQ6IHN0cmluZztcbiAgICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIHR5cGU6IGFueTtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcbiAgICBwdWJsaWMgY29uZGl0aW9uYWxjbGFzczogYW55O1xuICAgIHB1YmxpYyBjb25kaXRpb25hbHN0eWxlOiBhbnk7XG4gICAgcHVibGljIHRhYmluZGV4OiBhbnk7XG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBhbnk7XG4gICAgcHVibGljIHNob3J0Y3V0a2V5OiBzdHJpbmc7XG4gICAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbjtcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlOiBhbnk7XG4gICAgcHVibGljIG1hc2tWYWw6IGFueTtcbiAgICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuICAgIHByaXZhdGUgbGF6eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gICAgcHVibGljIGFyaWFsYWJlbDogc3RyaW5nO1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7c3RhdGljOiB0cnVlfSkgaW5wdXRFbDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKE5nTW9kZWwpIG5nTW9kZWw6IE5nTW9kZWw7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7cmVhZDogSU1hc2tEaXJlY3RpdmV9KSBpbWFzazogSU1hc2tEaXJlY3RpdmU8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgLyogRGVmaW5lIHRoZSBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlci4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSB3aWRnZXQgcHJvcGVydHkgKi9cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KSB7XG4gICAgICAgIC8qTW9uaXRvcmluZyBjaGFuZ2VzIGZvciBzdHlsZXMgb3IgcHJvcGVydGllcyBhbmQgYWNjb3JkaW5nbHkgaGFuZGxpbmcgcmVzcGVjdGl2ZSBjaGFuZ2VzLiovXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkaXNwbGF5Zm9ybWF0JzpcbiAgICAgICAgICAgICAgICB0aGlzLm1hc2tWYWwgPSB0aGlzLmRpc3BsYXlmb3JtYXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZvckRpc3BsYXlGb3JtYXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3dkaXNwbGF5Zm9ybWF0b24nOlxuICAgICAgICAgICAgICAgIHRoaXMubGF6eSA9IG52ID09PSAna2V5cHJlc3MnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBtYXNrKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5Zm9ybWF0ICYmICghdGhpcy5wbGFjZWhvbGRlciB8fCAodGhpcy5wbGFjZWhvbGRlciAmJiB0aGlzLmlzRm9jdXNlZCkpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1hc2s6IHRoaXMubWFza1ZhbCxcbiAgICAgICAgICAgICAgICBsYXp5OiB0aGlzLmxhenksXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJzknOiAvXFxkLyxcbiAgICAgICAgICAgICAgICAgICAgJ0EnOiAvW2EtekEtWl0vLFxuICAgICAgICAgICAgICAgICAgICAnYSc6IC9bYS16XS8sXG4gICAgICAgICAgICAgICAgICAgICcqJzogL1xcdy9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2hvdyBkaXNwbGF5IGZvcm1hdCBvbiBmb2N1cyBvciB3aGVuIGl0IGhhcyBhIGRhdGEgdmFsdWUgcHJlc2VudC4gRWxzZSBzaG93IHRoZSBwbGFjZWhvbGRlclxuICAgIHB1YmxpYyBjaGVja0ZvckRpc3BsYXlGb3JtYXQoJGV2ZW50Pykge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5Zm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9ICgoJGV2ZW50ICYmICRldmVudC50eXBlID09PSAnZm9jdXMnKSB8fCB0aGlzLmRhdGF2YWx1ZSkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAvLyBEbyBub3Qgc2hvdyBmb3JtYXQgcGxhY2Vob2xkZXIgd2hlbiBubyB2YWx1ZSBpcyBwcmVzZW50IG9uIGJsdXJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0ZvY3VzZWQgJiYgdGhpcy5pbWFzayAmJiB0aGlzLmltYXNrLm1hc2tSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYXNrLm1hc2tSZWYudXBkYXRlT3B0aW9ucyh7IGxhenk6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgLy8gb24gYmx1ciwgd2hlbiBubyB2YWx1ZSBpcyBwcmVzZW50IGFzc2lnbiBtYXNrcmVmIHRvIG51bGwsIGFzIGluIHNvbWUgY2FzZXMgKHdoZXJlIGZvcm1hdCBwYWxjZWhvbGRlciBzdGFydHMgd2l0aCBwcmFudGhlc2lzKSB0aGUgZm9ybWF0IHBsYWNlaG9sZGVyIGlzIHN0aWxsIHNob3duLiBXTVMtMjAxMjRcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YXZhbHVlICYmIHRoaXMuaW1hc2subWFza1JlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYXNrLm1hc2tSZWYudmFsdWUgPSB0aGlzLmRhdGF2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gZGlzcGxheSBmb3JtYXQgaXMgZHluYW1pY2FsbHkgcG9wdWxhdGVkLCBjdXJzb3IgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiB0aGUgZm9ybWF0LCByZWFkanVzdGluZyB0aGUgY3Vyc29yIHBvc2l0aW9uIGJhc2VkIG9uIG1hc2tlZCBpbnB1dCB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIEFkZGluZyB0aW1lb3V0LCBhcyB0aGUgYmVsb3cgY29kZSBzaG91bGQgYmUgb24gaG9sZCB1bnRpbCBpbWFzayBtb2RlbCBpcyBnZW5lcmF0ZWRcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hc2sgJiYgdGhpcy5pbWFzay5tYXNrUmVmICYmIHRoaXMuaW1hc2subWFza1JlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFza1ZhbEluZGV4ID0gdGhpcy5pbWFzay5tYXNrUmVmLnZhbHVlLmluZGV4T2YoJ18nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudGVyZWRNYXNrVmFsID0gbWFza1ZhbEluZGV4ID49IDAgPyB0aGlzLmltYXNrLm1hc2tSZWYudmFsdWUuc2xpY2UoMCwgbWFza1ZhbEluZGV4KS5sZW5ndGggOiB0aGlzLmltYXNrLm1hc2tSZWYudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGVyZWRNYXNrVmFsICE9PSB0aGlzLmltYXNrLm1hc2tSZWYuY3Vyc29yUG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFzay5tYXNrUmVmLnVwZGF0ZUN1cnNvcihlbnRlcmVkTWFza1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbWFzayAmJiB0aGlzLmltYXNrLm1hc2tSZWYpIHsgLy8gV2hlbiBkaXNwbGF5IGZvcm1hdCBpcyBib3VuZCB2aWEgY29uZGl0aW9uLCByZW1vdmUgdGhlIHBsYWNlaG9sZGVyIHdoZW4gdGhlIGZvcm1hdCBpcyBub3QgYXBwbGljYWJsZVxuICAgICAgICAgICAgdGhpcy5pbWFzay5tYXNrUmVmLnVwZGF0ZU9wdGlvbnMoeyBsYXp5OiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gd2hlbiBkaXNwbGF5IGZvcm1hdCBpcyByZW1vdmVkIGFzc2lnbiBpbnB1dCB2YWx1ZSB0byB0aGUgZGF0YXZhbHVlIGF0dHIuIFdNUy0yMDEyNFxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmRhdGF2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9ICEhdGhpcy5kYXRhdmFsdWU7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgYWxsIFZpZXdDaGlsZCByZWZlcmVuY2VzXG4gICAgICAgIHRoaXMuaW5wdXRFbCA9IG51bGw7XG4gICAgICAgIHRoaXMubmdNb2RlbCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW1hc2sgPSBudWxsO1xuXG4gICAgICAgIC8vIENhbGwgcGFyZW50IG5nT25EZXN0cm95IChCYXNlSW5wdXQg4oaSIEJhc2VGb3JtQ3VzdG9tQ29tcG9uZW50IOKGkiBTdHlsYWJsZUNvbXBvbmVudCDihpIgQmFzZUNvbXBvbmVudClcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYXBwLXRleHRib3hcIlxuICAgICAgIGZvY3VzLXRhcmdldFxuICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhbGFiZWxcIlxuICAgICAgIFsobmdNb2RlbCldPVwiZGF0YXZhbHVlXCJcbiAgICAgICBbaW1hc2tdPVwibWFza1wiXG4gICAgICAgW3VubWFza109XCJ0cnVlXCJcbiAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwibmdNb2RlbE9wdGlvbnNcIlxuICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgIFttYXhsZW5ndGhdPVwibWF4Y2hhcnNcIlxuICAgICAgIFtwYXR0ZXJuXT1cInJlZ2V4cFwiXG4gICAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICBbYXR0ci5hY2Nlc3NrZXldPVwic2hvcnRjdXRrZXlcIlxuICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICBbbmdDbGFzc109XCJjb25kaXRpb25hbGNsYXNzXCJcbiAgICAgICBbbmdTdHlsZV09XCJjb25kaXRpb25hbHN0eWxlXCJcbiAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigkZXZlbnQpOyBjaGVja0ZvckRpc3BsYXlGb3JtYXQoJGV2ZW50KVwiXG4gICAgICAgKGZvY3VzKT1cImNoZWNrRm9yRGlzcGxheUZvcm1hdCgkZXZlbnQpXCJcbiAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSA/ICdvbicgOiAnb2ZmJ1wiXG4gICAgICAgKGtleXVwLmVudGVyKT1cImZsdXNoVmlld0NoYW5nZXMoaW5wdXQudmFsdWUpXCJcbiAgICAgICAjaW5wdXQ+XG4iXX0=
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvdGV4dC9zcmMvaW5wdXQtdGV4dC9pbnB1dC10ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC90ZXh0L3NyYy9pbnB1dC10ZXh0L2lucHV0LXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFFN0MsTUFBTSxhQUFhLEdBQWtCO0lBQ2pDLFVBQVUsRUFBRSxlQUFlO0lBQzNCLFNBQVMsRUFBRSxtQkFBbUI7Q0FDakMsQ0FBQztBQWFGLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxTQUFTO2FBQ3RDLG9CQUFlLEdBQUcsYUFBYSxFQUFF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QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUVsQixvR0FBb0c7UUFDcEcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBcEhRLGtCQUFrQiwwQ0ErQlEsa0JBQWtCO21HQS9CNUMsa0JBQWtCLG9NQU5oQjtZQUNQLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUM7WUFDdEQsU0FBUyxDQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUM7WUFDbEQsa0JBQWtCLENBQUMsa0JBQWtCLENBQUM7U0FDekMsb0tBOEJVLE9BQU8sNEdBQ1MsY0FBYyxvREN4RDdDLDBvREFrQ0EsMkNEaEJZLFlBQVkscVRBQUUsV0FBVyx1b0NBQUUsV0FBVzs7NEZBU3JDLGtCQUFrQjtrQkFYOUIsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxZQUNyQyw2SUFBNkksYUFFNUk7d0JBQ1AsU0FBUyxxQkFBcUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO3dCQUN0RCxTQUFTLHFCQUFxQixhQUFhLEVBQUUsSUFBSSxDQUFDO3dCQUNsRCxrQkFBa0Isb0JBQW9CO3FCQUN6Qzs7MEJBaUMyQixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5Q0FKNUIsT0FBTztzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNkLE9BQU87c0JBQTFCLFNBQVM7dUJBQUMsT0FBTztnQkFDMEIsS0FBSztzQkFBaEQsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBQyxJQUFJLEVBQUUsY0FBYyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSU1hc2tNb2R1bGUgfSBmcm9tICdhbmd1bGFyLWltYXNrJztcbmltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ01vZGVsfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7SVdpZGdldENvbmZpZywgcHJvdmlkZUFzLCBwcm92aWRlQXNXaWRnZXRSZWZ9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL2lucHV0LXRleHQucHJvcHMnO1xuaW1wb3J0IHtCYXNlSW5wdXR9IGZyb20gJy4uL2Jhc2UtaW5wdXQvYmFzZS1pbnB1dCc7XG5pbXBvcnQge0lNYXNrRGlyZWN0aXZlfSBmcm9tICdhbmd1bGFyLWltYXNrJztcblxuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20taW5wdXQtdGV4dCcsXG4gICAgaG9zdENsYXNzOiAnYXBwLWlucHV0LXdyYXBwZXInXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIElNYXNrTW9kdWxlXSxcbiAgICBzZWxlY3RvcjogJ3dtLWlucHV0W3R5cGU9XCJ0ZXh0XCJdLCB3bS1pbnB1dDpub3QoW3R5cGVdKSwgd20taW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdLCB3bS1pbnB1dFt0eXBlPVwic2VhcmNoXCJdLCB3bS1pbnB1dFt0eXBlPVwidGVsXCJdLCB3bS1pbnB1dFt0eXBlPVwidXJsXCJdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhJbnB1dFRleHRDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKElucHV0VGV4dENvbXBvbmVudCwgTkdfVkFMSURBVE9SUywgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihJbnB1dFRleHRDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dFRleHRDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWF4Y2hhcnM6IG51bWJlcjtcbiAgICBwdWJsaWMgcmVnZXhwOiBzdHJpbmc7XG4gICAgcHVibGljIGRpc3BsYXlmb3JtYXQ6IHN0cmluZztcbiAgICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIHR5cGU6IGFueTtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcbiAgICBwdWJsaWMgY29uZGl0aW9uYWxjbGFzczogYW55O1xuICAgIHB1YmxpYyBjb25kaXRpb25hbHN0eWxlOiBhbnk7XG4gICAgcHVibGljIHRhYmluZGV4OiBhbnk7XG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBhbnk7XG4gICAgcHVibGljIHNob3J0Y3V0a2V5OiBzdHJpbmc7XG4gICAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbjtcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlOiBhbnk7XG4gICAgcHVibGljIG1hc2tWYWw6IGFueTtcbiAgICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuICAgIHByaXZhdGUgbGF6eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gICAgcHVibGljIGFyaWFsYWJlbDogc3RyaW5nO1xuICAgIHB1YmxpYyB0cmFpbGluZ2ljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBsZWFkaW5naWNvbmNsYXNzOiBzdHJpbmc7XG4gICAgcHVibGljIHN1cHBvcnRpbmd0ZXh0OiBzdHJpbmdcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0Jywge3N0YXRpYzogdHJ1ZX0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChOZ01vZGVsKSBuZ01vZGVsOiBOZ01vZGVsO1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0Jywge3JlYWQ6IElNYXNrRGlyZWN0aXZlfSkgaW1hc2s6IElNYXNrRGlyZWN0aXZlPGFueT47XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgIH1cblxuICAgIC8qIERlZmluZSB0aGUgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgd2lkZ2V0IHByb3BlcnR5ICovXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdikge1xuICAgICAgICAvKk1vbml0b3JpbmcgY2hhbmdlcyBmb3Igc3R5bGVzIG9yIHByb3BlcnRpZXMgYW5kIGFjY29yZGluZ2x5IGhhbmRsaW5nIHJlc3BlY3RpdmUgY2hhbmdlcy4qL1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZGlzcGxheWZvcm1hdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrVmFsID0gdGhpcy5kaXNwbGF5Zm9ybWF0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tGb3JEaXNwbGF5Rm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93ZGlzcGxheWZvcm1hdG9uJzpcbiAgICAgICAgICAgICAgICB0aGlzLmxhenkgPSBudiA9PT0gJ2tleXByZXNzJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbWFzaygpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheWZvcm1hdCAmJiAoIXRoaXMucGxhY2Vob2xkZXIgfHwgKHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5pc0ZvY3VzZWQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtYXNrOiB0aGlzLm1hc2tWYWwsXG4gICAgICAgICAgICAgICAgbGF6eTogdGhpcy5sYXp5LFxuICAgICAgICAgICAgICAgIGRlZmluaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICc5JzogL1xcZC8sXG4gICAgICAgICAgICAgICAgICAgICdBJzogL1thLXpBLVpdLyxcbiAgICAgICAgICAgICAgICAgICAgJ2EnOiAvW2Etel0vLFxuICAgICAgICAgICAgICAgICAgICAnKic6IC9cXHcvXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNob3cgZGlzcGxheSBmb3JtYXQgb24gZm9jdXMgb3Igd2hlbiBpdCBoYXMgYSBkYXRhIHZhbHVlIHByZXNlbnQuIEVsc2Ugc2hvdyB0aGUgcGxhY2Vob2xkZXJcbiAgICBwdWJsaWMgY2hlY2tGb3JEaXNwbGF5Rm9ybWF0KCRldmVudD8pIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheWZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSAoKCRldmVudCAmJiAkZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJykgfHwgdGhpcy5kYXRhdmFsdWUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgLy8gRG8gbm90IHNob3cgZm9ybWF0IHBsYWNlaG9sZGVyIHdoZW4gbm8gdmFsdWUgaXMgcHJlc2VudCBvbiBibHVyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNGb2N1c2VkICYmIHRoaXMuaW1hc2sgJiYgdGhpcy5pbWFzay5tYXNrUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFzay5tYXNrUmVmLnVwZGF0ZU9wdGlvbnMoeyBsYXp5OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIG9uIGJsdXIsIHdoZW4gbm8gdmFsdWUgaXMgcHJlc2VudCBhc3NpZ24gbWFza3JlZiB0byBudWxsLCBhcyBpbiBzb21lIGNhc2VzICh3aGVyZSBmb3JtYXQgcGFsY2Vob2xkZXIgc3RhcnRzIHdpdGggcHJhbnRoZXNpcykgdGhlIGZvcm1hdCBwbGFjZWhvbGRlciBpcyBzdGlsbCBzaG93bi4gV01TLTIwMTI0XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGF2YWx1ZSAmJiB0aGlzLmltYXNrLm1hc2tSZWYudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFzay5tYXNrUmVmLnZhbHVlID0gdGhpcy5kYXRhdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIGRpc3BsYXkgZm9ybWF0IGlzIGR5bmFtaWNhbGx5IHBvcHVsYXRlZCwgY3Vyc29yIHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGZvcm1hdCwgcmVhZGp1c3RpbmcgdGhlIGN1cnNvciBwb3NpdGlvbiBiYXNlZCBvbiBtYXNrZWQgaW5wdXQgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyBBZGRpbmcgdGltZW91dCwgYXMgdGhlIGJlbG93IGNvZGUgc2hvdWxkIGJlIG9uIGhvbGQgdW50aWwgaW1hc2sgbW9kZWwgaXMgZ2VuZXJhdGVkXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYXNrICYmIHRoaXMuaW1hc2subWFza1JlZiAmJiB0aGlzLmltYXNrLm1hc2tSZWYudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc2tWYWxJbmRleCA9IHRoaXMuaW1hc2subWFza1JlZi52YWx1ZS5pbmRleE9mKCdfJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRlcmVkTWFza1ZhbCA9IG1hc2tWYWxJbmRleCA+PSAwID8gdGhpcy5pbWFzay5tYXNrUmVmLnZhbHVlLnNsaWNlKDAsIG1hc2tWYWxJbmRleCkubGVuZ3RoIDogdGhpcy5pbWFzay5tYXNrUmVmLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRlcmVkTWFza1ZhbCAhPT0gdGhpcy5pbWFzay5tYXNrUmVmLmN1cnNvclBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hc2subWFza1JlZi51cGRhdGVDdXJzb3IoZW50ZXJlZE1hc2tWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW1hc2sgJiYgdGhpcy5pbWFzay5tYXNrUmVmKSB7IC8vIFdoZW4gZGlzcGxheSBmb3JtYXQgaXMgYm91bmQgdmlhIGNvbmRpdGlvbiwgcmVtb3ZlIHRoZSBwbGFjZWhvbGRlciB3aGVuIHRoZSBmb3JtYXQgaXMgbm90IGFwcGxpY2FibGVcbiAgICAgICAgICAgIHRoaXMuaW1hc2subWFza1JlZi51cGRhdGVPcHRpb25zKHsgbGF6eTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIC8vIHdoZW4gZGlzcGxheSBmb3JtYXQgaXMgcmVtb3ZlZCBhc3NpZ24gaW5wdXQgdmFsdWUgdG8gdGhlIGRhdGF2YWx1ZSBhdHRyLiBXTVMtMjAxMjRcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5kYXRhdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSAhIXRoaXMuZGF0YXZhbHVlO1xuICAgIH1cblxuICAgIGljb25DbGlja0V2ZW50KCRldmVudCwgdHlwZTogc3RyaW5nKXtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKHR5cGUsIHsgJGV2ZW50IH0pXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgYWxsIFZpZXdDaGlsZCByZWZlcmVuY2VzXG4gICAgICAgIHRoaXMuaW5wdXRFbCA9IG51bGw7XG4gICAgICAgIHRoaXMubmdNb2RlbCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW1hc2sgPSBudWxsO1xuXG4gICAgICAgIC8vIENhbGwgcGFyZW50IG5nT25EZXN0cm95IChCYXNlSW5wdXQg4oaSIEJhc2VGb3JtQ3VzdG9tQ29tcG9uZW50IOKGkiBTdHlsYWJsZUNvbXBvbmVudCDihpIgQmFzZUNvbXBvbmVudClcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8YnV0dG9uIGNsYXNzPVwiYnRuLWxlYWRpbmctaWNvblwiIHR5cGU9XCJidXR0b25cIiBuYW1lPVwibGVhZGluZ0ljb25cIiAqbmdJZj1cImxlYWRpbmdpY29uY2xhc3NcIiAoY2xpY2spPVwiaWNvbkNsaWNrRXZlbnQoJGV2ZW50LCAnbGVhZGluZ2ljb25jbGljaycpXCI+XG4gICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW25nQ2xhc3NdPVwibGVhZGluZ2ljb25jbGFzc1wiPjwvaT5cbjwvYnV0dG9uPlxuPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGFwcC10ZXh0Ym94XCJcbiAgICAgICBmb2N1cy10YXJnZXRcbiAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYWxhYmVsXCJcbiAgICAgICBbKG5nTW9kZWwpXT1cImRhdGF2YWx1ZVwiXG4gICAgICAgW2ltYXNrXT1cIm1hc2tcIlxuICAgICAgIFt1bm1hc2tdPVwidHJ1ZVwiXG4gICAgICAgW25nTW9kZWxPcHRpb25zXT1cIm5nTW9kZWxPcHRpb25zXCJcbiAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICBbbWF4bGVuZ3RoXT1cIm1heGNoYXJzXCJcbiAgICAgICBbcGF0dGVybl09XCJyZWdleHBcIlxuICAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgW25nQ2xhc3NdPVwiW2xlYWRpbmdpY29uY2xhc3MgPyAnd2l0aC1sZWFkaW5nLWljb24nIDogJycsIHRyYWlsaW5naWNvbmNsYXNzID8gJ3dpdGgtdHJhaWxpbmctaWNvbicgOiAnJywgY29uZGl0aW9uYWxjbGFzcyB8fCAnJ11cIlxuICAgICAgIFtuZ1N0eWxlXT1cImNvbmRpdGlvbmFsc3R5bGVcIlxuICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAoYmx1cik9XCJoYW5kbGVCbHVyKCRldmVudCk7IGNoZWNrRm9yRGlzcGxheUZvcm1hdCgkZXZlbnQpXCJcbiAgICAgICAoZm9jdXMpPVwiY2hlY2tGb3JEaXNwbGF5Rm9ybWF0KCRldmVudClcIlxuICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlID8gJ29uJyA6ICdvZmYnXCJcbiAgICAgICAoa2V5dXAuZW50ZXIpPVwiZmx1c2hWaWV3Q2hhbmdlcyhpbnB1dC52YWx1ZSlcIlxuICAgICAgICNpbnB1dD5cbjxidXR0b24gY2xhc3M9XCJidG4tdHJhaWxpbmctaWNvblwiIHR5cGU9XCJidXR0b25cIiBuYW1lPVwidHJhaWxpbmdJY29uXCIgKm5nSWY9XCJ0cmFpbGluZ2ljb25jbGFzc1wiIChjbGljayk9XCJpY29uQ2xpY2tFdmVudCgkZXZlbnQsICd0cmFpbGluZ2ljb25jbGljaycpXCI+XG4gICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW25nQ2xhc3NdPVwidHJhaWxpbmdpY29uY2xhc3NcIj48L2k+XG48L2J1dHRvbj5cbjxwIGNsYXNzPVwiYXBwLWxhYmVsIGhlbHAtYmxvY2sgc3VwcG9ydGluZy10ZXh0XCIgKm5nSWY9XCJzdXBwb3J0aW5ndGV4dFwiIG5hbWU9XCJzdXBwb3J0aW5nVGV4dFwiPnt7c3VwcG9ydGluZ3RleHR9fTwvcD5cblxuIl19
@@ -28,7 +28,10 @@ export const inputTextTypeProps = new Map([
28
28
  ['type', { value: 'text', ...PROP_STRING }],
29
29
  ['updateon', PROP_STRING],
30
30
  ['conditionalclass', PROP_ANY],
31
- ['conditionalstyle', PROP_ANY]
31
+ ['conditionalstyle', PROP_ANY],
32
+ ['trailingiconclass', PROP_STRING],
33
+ ['leadingiconclass', PROP_STRING],
34
+ ['supportingtext', PROP_STRING]
32
35
  ]);
33
36
  export const registerProps = () => {
34
37
  register('wm-input-text', inputTextTypeProps);
@@ -43,4 +46,4 @@ export const registerProps = () => {
43
46
  mergeTextProps(inputNumberTypeProps);
44
47
  registerFormWidget(FormWidgetType.TEXT, new Map(formTextProps));
45
48
  };
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGV4dC5wcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC90ZXh0L3NyYy9pbnB1dC10ZXh0L2lucHV0LXRleHQucHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR3hDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUNyQztJQUNJLENBQUMsY0FBYyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFlBQVksRUFBQyxDQUFDO0lBQ2hELENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQztJQUMzQixDQUFDLFVBQVUsRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUMsQ0FBQztJQUM1QyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7SUFDdEIsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUM7SUFDN0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQzFCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztJQUMxQixDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUM7SUFDOUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUMxQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7SUFDekIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLENBQUMsYUFBYSxFQUFFLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO0lBQ3RELENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztJQUMxQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7SUFDdkIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO0lBQzFCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztJQUM1QixDQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUMsQ0FBQztJQUN4QyxDQUFDLHFCQUFxQixFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLFFBQVEsRUFBQyxDQUFDO0lBQ3ZELENBQUMsVUFBVSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO0lBQ3hDLENBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO0lBQ3pDLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQztJQUN6QixDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztJQUM5QixDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztDQUNqQyxDQUNKLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQzlCLFFBQVEsQ0FDSixlQUFlLEVBQ2Ysa0JBQWtCLENBQ3JCLENBQUM7SUFDRixrQkFBa0IsQ0FDZCxjQUFjLENBQUMsUUFBUSxFQUN2QixJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUM5QixDQUFDO0lBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUVsRCxNQUFNLGNBQWMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQ2pDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQztJQUNGLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3ZDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3BDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3BDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JDLGtCQUFrQixDQUNkLGNBQWMsQ0FBQyxJQUFJLEVBQ25CLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUN6QixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQUk9QX0FOWSwgUFJPUF9CT09MRUFOLCBQUk9QX05VTUJFUiwgUFJPUF9TVFJJTkcsIHJlZ2lzdGVyLCByZWdpc3RlckZvcm1XaWRnZXR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtGb3JtV2lkZ2V0VHlwZX0gZnJvbSAnQHdtL2NvcmUnO1xuXG5cbmltcG9ydCB7aW5wdXROdW1iZXJUeXBlUHJvcHN9IGZyb20gJy4uL2lucHV0LW51bWJlci9pbnB1dC1udW1iZXIucHJvcHMnO1xuaW1wb3J0IHtpbnB1dENhbGVuZGFyVHlwZVByb3BzfSBmcm9tICcuLi9pbnB1dC1jYWxlbmRhci9pbnB1dC1jYWxlbmRhci5wcm9wcyc7XG5pbXBvcnQge2lucHV0Q29sb3JUeXBlUHJvcHN9IGZyb20gJy4uL2lucHV0LWNvbG9yL2lucHV0LWNvbG9yLnByb3BzJztcbmltcG9ydCB7aW5wdXRFbWFpbFR5cGVQcm9wc30gZnJvbSAnLi4vaW5wdXQtZW1haWwvaW5wdXQtZW1haWwucHJvcHMnO1xuXG5leHBvcnQgY29uc3QgaW5wdXRUZXh0VHlwZVByb3BzID0gbmV3IE1hcChcbiAgICBbXG4gICAgICAgIFsnYXV0b2NvbXBsZXRlJywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgWydhdXRvZm9jdXMnLCBQUk9QX0JPT0xFQU5dLFxuICAgICAgICBbJ2F1dG90cmltJywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgWydjbGFzcycsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgWydkYXRhdmFsdWVzb3VyY2UnLCBQUk9QX0FOWV0sXG4gICAgICAgIFsnZGF0YXZhbHVlJywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ2Rpc2FibGVkJywgUFJPUF9CT09MRUFOXSxcbiAgICAgICAgWydkaXNwbGF5Zm9ybWF0JywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ2hpbnQnLCBQUk9QX1NUUklOR10sXG4gICAgICAgIFsnYXJpYWxhYmVsJywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ21heGNoYXJzJywgUFJPUF9OVU1CRVJdLFxuICAgICAgICBbJ25hbWUnLCBQUk9QX1NUUklOR10sXG4gICAgICAgIFsncGxhY2Vob2xkZXInLCB7dmFsdWU6ICdFbnRlciB0ZXh0JywgLi4uUFJPUF9TVFJJTkd9XSxcbiAgICAgICAgWydyZWFkb25seScsIFBST1BfQk9PTEVBTl0sXG4gICAgICAgIFsncmVnZXhwJywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ3JlcXVpcmVkJywgUFJPUF9CT09MRUFOXSxcbiAgICAgICAgWydzaG9ydGN1dGtleScsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgWydzaG93Jywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgWydzaG93ZGlzcGxheWZvcm1hdG9uJywge3ZhbHVlOiAnYWx3YXlzJywgLi4uUFJPUF9BTll9XSxcbiAgICAgICAgWyd0YWJpbmRleCcsIHt2YWx1ZTogMCwgLi4uUFJPUF9OVU1CRVJ9XSxcbiAgICAgICAgWyd0eXBlJywge3ZhbHVlOiAndGV4dCcsIC4uLlBST1BfU1RSSU5HfV0sXG4gICAgICAgIFsndXBkYXRlb24nLCBQUk9QX1NUUklOR10sXG4gICAgICAgIFsnY29uZGl0aW9uYWxjbGFzcycsIFBST1BfQU5ZXSxcbiAgICAgICAgWydjb25kaXRpb25hbHN0eWxlJywgUFJPUF9BTlldXG4gICAgXVxuKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyUHJvcHMgPSAoKSA9PiB7XG4gICAgcmVnaXN0ZXIoXG4gICAgICAgICd3bS1pbnB1dC10ZXh0JyxcbiAgICAgICAgaW5wdXRUZXh0VHlwZVByb3BzXG4gICAgKTtcbiAgICByZWdpc3RlckZvcm1XaWRnZXQoXG4gICAgICAgIEZvcm1XaWRnZXRUeXBlLlBBU1NXT1JELFxuICAgICAgICBuZXcgTWFwKGlucHV0VGV4dFR5cGVQcm9wcylcbiAgICApO1xuICAgIGNvbnN0IGZvcm1UZXh0UHJvcHMgPSBuZXcgTWFwKGlucHV0VGV4dFR5cGVQcm9wcyk7XG5cbiAgICBjb25zdCBtZXJnZVRleHRQcm9wcyA9ICh0eXBlUHJvcHMpID0+IHtcbiAgICAgICAgdHlwZVByb3BzLmZvckVhY2goKHY6IGFueSwgaykgPT4gZm9ybVRleHRQcm9wcy5zZXQoaywgdikpO1xuICAgIH07XG4gICAgbWVyZ2VUZXh0UHJvcHMoaW5wdXRDYWxlbmRhclR5cGVQcm9wcyk7XG4gICAgbWVyZ2VUZXh0UHJvcHMoaW5wdXRDb2xvclR5cGVQcm9wcyk7XG4gICAgbWVyZ2VUZXh0UHJvcHMoaW5wdXRFbWFpbFR5cGVQcm9wcyk7XG4gICAgbWVyZ2VUZXh0UHJvcHMoaW5wdXROdW1iZXJUeXBlUHJvcHMpO1xuICAgIHJlZ2lzdGVyRm9ybVdpZGdldChcbiAgICAgICAgRm9ybVdpZGdldFR5cGUuVEVYVCxcbiAgICAgICAgbmV3IE1hcChmb3JtVGV4dFByb3BzKVxuICAgICk7XG59O1xuIl19
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGV4dC5wcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC90ZXh0L3NyYy9pbnB1dC10ZXh0L2lucHV0LXRleHQucHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR3hDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUNyQztJQUNJLENBQUMsY0FBYyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFlBQVksRUFBQyxDQUFDO0lBQ2hELENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQztJQUMzQixDQUFDLFVBQVUsRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUMsQ0FBQztJQUM1QyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7SUFDdEIsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUM7SUFDN0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQzFCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztJQUMxQixDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUM7SUFDOUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUMxQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7SUFDekIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLENBQUMsYUFBYSxFQUFFLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO0lBQ3RELENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztJQUMxQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7SUFDdkIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO0lBQzFCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztJQUM1QixDQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUMsQ0FBQztJQUN4QyxDQUFDLHFCQUFxQixFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLFFBQVEsRUFBQyxDQUFDO0lBQ3ZELENBQUMsVUFBVSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO0lBQ3hDLENBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO0lBQ3pDLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQztJQUN6QixDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztJQUM5QixDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztJQUM5QixDQUFDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQztJQUNsQyxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztJQUNqQyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQztDQUNsQyxDQUNKLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQzlCLFFBQVEsQ0FDSixlQUFlLEVBQ2Ysa0JBQWtCLENBQ3JCLENBQUM7SUFDRixrQkFBa0IsQ0FDZCxjQUFjLENBQUMsUUFBUSxFQUN2QixJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUM5QixDQUFDO0lBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUVsRCxNQUFNLGNBQWMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQ2pDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQztJQUNGLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3ZDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3BDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3BDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JDLGtCQUFrQixDQUNkLGNBQWMsQ0FBQyxJQUFJLEVBQ25CLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUN6QixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQUk9QX0FOWSwgUFJPUF9CT09MRUFOLCBQUk9QX05VTUJFUiwgUFJPUF9TVFJJTkcsIHJlZ2lzdGVyLCByZWdpc3RlckZvcm1XaWRnZXR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtGb3JtV2lkZ2V0VHlwZX0gZnJvbSAnQHdtL2NvcmUnO1xuXG5cbmltcG9ydCB7aW5wdXROdW1iZXJUeXBlUHJvcHN9IGZyb20gJy4uL2lucHV0LW51bWJlci9pbnB1dC1udW1iZXIucHJvcHMnO1xuaW1wb3J0IHtpbnB1dENhbGVuZGFyVHlwZVByb3BzfSBmcm9tICcuLi9pbnB1dC1jYWxlbmRhci9pbnB1dC1jYWxlbmRhci5wcm9wcyc7XG5pbXBvcnQge2lucHV0Q29sb3JUeXBlUHJvcHN9IGZyb20gJy4uL2lucHV0LWNvbG9yL2lucHV0LWNvbG9yLnByb3BzJztcbmltcG9ydCB7aW5wdXRFbWFpbFR5cGVQcm9wc30gZnJvbSAnLi4vaW5wdXQtZW1haWwvaW5wdXQtZW1haWwucHJvcHMnO1xuXG5leHBvcnQgY29uc3QgaW5wdXRUZXh0VHlwZVByb3BzID0gbmV3IE1hcChcbiAgICBbXG4gICAgICAgIFsnYXV0b2NvbXBsZXRlJywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgWydhdXRvZm9jdXMnLCBQUk9QX0JPT0xFQU5dLFxuICAgICAgICBbJ2F1dG90cmltJywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgWydjbGFzcycsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgWydkYXRhdmFsdWVzb3VyY2UnLCBQUk9QX0FOWV0sXG4gICAgICAgIFsnZGF0YXZhbHVlJywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ2Rpc2FibGVkJywgUFJPUF9CT09MRUFOXSxcbiAgICAgICAgWydkaXNwbGF5Zm9ybWF0JywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ2hpbnQnLCBQUk9QX1NUUklOR10sXG4gICAgICAgIFsnYXJpYWxhYmVsJywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ21heGNoYXJzJywgUFJPUF9OVU1CRVJdLFxuICAgICAgICBbJ25hbWUnLCBQUk9QX1NUUklOR10sXG4gICAgICAgIFsncGxhY2Vob2xkZXInLCB7dmFsdWU6ICdFbnRlciB0ZXh0JywgLi4uUFJPUF9TVFJJTkd9XSxcbiAgICAgICAgWydyZWFkb25seScsIFBST1BfQk9PTEVBTl0sXG4gICAgICAgIFsncmVnZXhwJywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ3JlcXVpcmVkJywgUFJPUF9CT09MRUFOXSxcbiAgICAgICAgWydzaG9ydGN1dGtleScsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgWydzaG93Jywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgWydzaG93ZGlzcGxheWZvcm1hdG9uJywge3ZhbHVlOiAnYWx3YXlzJywgLi4uUFJPUF9BTll9XSxcbiAgICAgICAgWyd0YWJpbmRleCcsIHt2YWx1ZTogMCwgLi4uUFJPUF9OVU1CRVJ9XSxcbiAgICAgICAgWyd0eXBlJywge3ZhbHVlOiAndGV4dCcsIC4uLlBST1BfU1RSSU5HfV0sXG4gICAgICAgIFsndXBkYXRlb24nLCBQUk9QX1NUUklOR10sXG4gICAgICAgIFsnY29uZGl0aW9uYWxjbGFzcycsIFBST1BfQU5ZXSxcbiAgICAgICAgWydjb25kaXRpb25hbHN0eWxlJywgUFJPUF9BTlldLFxuICAgICAgICBbJ3RyYWlsaW5naWNvbmNsYXNzJywgUFJPUF9TVFJJTkddLFxuICAgICAgICBbJ2xlYWRpbmdpY29uY2xhc3MnLCBQUk9QX1NUUklOR10sXG4gICAgICAgIFsnc3VwcG9ydGluZ3RleHQnLCBQUk9QX1NUUklOR11cbiAgICBdXG4pO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJQcm9wcyA9ICgpID0+IHtcbiAgICByZWdpc3RlcihcbiAgICAgICAgJ3dtLWlucHV0LXRleHQnLFxuICAgICAgICBpbnB1dFRleHRUeXBlUHJvcHNcbiAgICApO1xuICAgIHJlZ2lzdGVyRm9ybVdpZGdldChcbiAgICAgICAgRm9ybVdpZGdldFR5cGUuUEFTU1dPUkQsXG4gICAgICAgIG5ldyBNYXAoaW5wdXRUZXh0VHlwZVByb3BzKVxuICAgICk7XG4gICAgY29uc3QgZm9ybVRleHRQcm9wcyA9IG5ldyBNYXAoaW5wdXRUZXh0VHlwZVByb3BzKTtcblxuICAgIGNvbnN0IG1lcmdlVGV4dFByb3BzID0gKHR5cGVQcm9wcykgPT4ge1xuICAgICAgICB0eXBlUHJvcHMuZm9yRWFjaCgodjogYW55LCBrKSA9PiBmb3JtVGV4dFByb3BzLnNldChrLCB2KSk7XG4gICAgfTtcbiAgICBtZXJnZVRleHRQcm9wcyhpbnB1dENhbGVuZGFyVHlwZVByb3BzKTtcbiAgICBtZXJnZVRleHRQcm9wcyhpbnB1dENvbG9yVHlwZVByb3BzKTtcbiAgICBtZXJnZVRleHRQcm9wcyhpbnB1dEVtYWlsVHlwZVByb3BzKTtcbiAgICBtZXJnZVRleHRQcm9wcyhpbnB1dE51bWJlclR5cGVQcm9wcyk7XG4gICAgcmVnaXN0ZXJGb3JtV2lkZ2V0KFxuICAgICAgICBGb3JtV2lkZ2V0VHlwZS5URVhULFxuICAgICAgICBuZXcgTWFwKGZvcm1UZXh0UHJvcHMpXG4gICAgKTtcbn07XG4iXX0=
@@ -12,6 +12,7 @@ let NumberLocale = class NumberLocale extends BaseInput {
12
12
  this.trailingZeroDecimalPipe = trailingZeroDecimalPipe;
13
13
  this.isDefaultQuery = true;
14
14
  this.decimalValue = '';
15
+ this.invalidPattern = false;
15
16
  this.selectedLocale = i18nService.getSelectedLocale();
16
17
  this.DECIMAL = getLocaleNumberSymbol(this.localefilter || this.selectedLocale, NumberSymbol.Decimal);
17
18
  this.GROUP = getLocaleNumberSymbol(this.localefilter || this.selectedLocale, NumberSymbol.Group);
@@ -218,6 +219,10 @@ let NumberLocale = class NumberLocale extends BaseInput {
218
219
  else {
219
220
  this.displayValue = input.value = this.transformNumber(this.proxyModel);
220
221
  }
222
+ if (this.trailingzero) {
223
+ const regexObj = new RegExp(this.regexPattern);
224
+ this.invalidPattern = !regexObj.test(this.displayValue);
225
+ }
221
226
  // in safari browser, setSelectionRange will focus the input by default, which may invoke the focus event on widget.
222
227
  // Hence preventing the setSelectionRange when default value is set i.e. widget is not focused.
223
228
  if (this.updateon === 'default' && !this.isDefaultQuery) {
@@ -418,6 +423,13 @@ let NumberLocale = class NumberLocale extends BaseInput {
418
423
  },
419
424
  };
420
425
  }
426
+ if (this.invalidPattern) {
427
+ return {
428
+ pattern: {
429
+ valid: false
430
+ }
431
+ };
432
+ }
421
433
  this.validateType = '';
422
434
  /* WMS-18269 | Extending the existing validation for 'required' */
423
435
  if (this['show'] && this['required']) {
@@ -514,6 +526,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
514
526
  this.onInputChange(nv);
515
527
  }
516
528
  }
529
+ else if (key === 'regexp') {
530
+ this.regexPattern = nv;
531
+ }
517
532
  else {
518
533
  super.onPropertyChange(key, nv, ov);
519
534
  }
@@ -536,4 +551,4 @@ NumberLocale = __decorate([
536
551
  TrailingZeroDecimalPipe, Object])
537
552
  ], NumberLocale);
538
553
  export { NumberLocale };
539
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC90ZXh0L3NyYy9udW1iZXItbG9jYWxlL251bWJlci1sb2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN4RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWhHLElBQXNCLFlBQVksR0FBbEMsTUFBc0IsWUFBYSxTQUFRLFNBQVM7SUF5QmhELFlBQ0ksR0FBYSxFQUNiLE1BQXFCLEVBQ2IsV0FBZ0MsRUFDaEMsdUJBQWdELEVBQ2hCLGVBQW9CO1FBRTVELEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBSjVCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBdEJwRCxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQXlCOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsT0FB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SSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7SUFDTSxPQUFPLENBQUMsTUFBc0I7UUFDakMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEQsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsS0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixPQUFPO1lBQ1gsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBRUosQ0FBQTtBQWprQnFCLFlBQVk7SUE4QnpCLFdBQUEsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFBRSxXQUFBLFFBQVEsRUFBRSxDQUFBO3FDQUpsQyxRQUFRLFVBRVEsbUJBQW1CO1FBQ1AsdUJBQXVCO0dBN0IxQyxZQUFZLENBaWtCakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0b3IsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlTnVtYmVyU3ltYm9sLCBOdW1iZXJTeW1ib2wgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge0Fic3RyYWN0STE4blNlcnZpY2UsIGlzRGVmaW5lZH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgSVdpZGdldENvbmZpZywgVHJhaWxpbmdaZXJvRGVjaW1hbFBpcGUsIElOUFVUTU9ERSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyBCYXNlSW5wdXQgfSBmcm9tICcuLi9iYXNlLWlucHV0L2Jhc2UtaW5wdXQnO1xuaW1wb3J0IHtpbmNsdWRlcywgaW50ZXJzZWN0aW9uLCBpc051bGwsIGlzU3RyaW5nLCBpc1VuZGVmaW5lZCwgcm91bmQsIHRvQXJyYXl9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE51bWJlckxvY2FsZSBleHRlbmRzIEJhc2VJbnB1dCBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBERUNJTUFMOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBHUk9VUDogc3RyaW5nO1xuICAgIHByaXZhdGUgc2VsZWN0ZWRMb2NhbGU6IHN0cmluZztcbiAgICBwcml2YXRlIHByb3h5TW9kZWw6IG51bWJlcjtcbiAgICBwcml2YXRlIG51bWJlck5vdEluUmFuZ2U6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0ludmFsaWROdW1iZXI6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0RlZmF1bHRRdWVyeTogYm9vbGVhbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBkZWNpbWFsVmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIG51bWJlcmZpbHRlcjogc3RyaW5nO1xuICAgIHByaXZhdGUgbG9jYWxlZmlsdGVyOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5OiBib29sZWFuO1xuXG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgcHVibGljIG1pbnZhbHVlOiBudW1iZXI7XG4gICAgcHVibGljIG1heHZhbHVlOiBudW1iZXI7XG4gICAgcHVibGljIHVwZGF0ZW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHN0ZXA6IG51bWJlcjtcbiAgICBwdWJsaWMgdHJhaWxpbmd6ZXJvOiBib29sZWFuO1xuICAgIHByaXZhdGUgdmFsaWRhdGVUeXBlOiBzdHJpbmc7XG4gICAgcHVibGljIGlucHV0bW9kZTogc3RyaW5nO1xuICAgIHB1YmxpYyBkZWNpbWFscGxhY2VzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBsYXN0VmFsSXNEZWNpbWFsOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGNvbmZpZzogSVdpZGdldENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFpbGluZ1plcm9EZWNpbWFsUGlwZTogVHJhaWxpbmdaZXJvRGVjaW1hbFBpcGUsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIGNvbmZpZywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9IGkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlKCk7XG4gICAgICAgIHRoaXMuREVDSU1BTCA9IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZWZpbHRlciB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCk7XG4gICAgICAgIHRoaXMuR1JPVVAgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wodGhpcy5sb2NhbGVmaWx0ZXIgfHwgdGhpcy5zZWxlY3RlZExvY2FsZSwgTnVtYmVyU3ltYm9sLkdyb3VwKTtcbiAgICAgICAgdGhpcy5udW1iZXJmaWx0ZXIgPSAnMS4wLTE2JztcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0dGVyIGZvciB0aGUgZGF0YXZhbHVlLlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzZXQgZGF0YXZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5sYXN0VmFsSXNEZWNpbWFsID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRleHQgdmFsdWUgdG8gbnVsbCBpZiBkYXRhIHZhbHVlIGlzIGVtcHR5LlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChpbmNsdWRlcyhbbnVsbCwgdW5kZWZpbmVkLCAnJ10sIHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHByZXZEYXRhVmFsdWUgPSAgKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBpbnB1dC52YWx1ZSA9IHRoaXMucHJveHlNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNzY0OF06IFdoZW4gYSBkZWNpbWFsIHZhbHVlIGlzIGVudGVyZWQgKGUuZy4sIFwiMy5cIiksIGRhdGF2YWx1ZSBhbmQgcHJldkRhdGF2YWx1ZSBiZWNvbWUgbnVsbCBhcyBpdCBpcyBhbiBpbnZhbGlkIG51bWJlci5cbiAgICAgICAgICAgIC8vIGhhbmRsZUNoYW5nZSgpIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgaW52YWxpZCBkYXRhdmFsdWUgKGUuZy4sIFwiMy5cIikgaXMgcmVtb3ZlZCwgYW5kIHRoZSB2YWx1ZSBiZWNvbWVzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikuXG4gICAgICAgICAgICBpZiAoKHByZXZEYXRhVmFsdWUgfHwgcHJldkRhdGFWYWx1ZSA9PSAwIHx8IHByZXZEYXRhVmFsdWUgPT0gbnVsbCkgJiYgIXRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgd2lkZ2V0IGhhcyBkZWZhdWx0IHZhbHVlIGFuZCBpZiB3ZSBjaGFuZ2UgdGhlIGxvY2FsZSwgdGhlIHZhbHVlIHNob3VsZCBiZSBpbiBzZWxlY3RlZCBsb2NhbGUgZm9ybWF0LlxuICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgaXNMb2NhbGl6ZWROdW1iZXIgPSBpc1N0cmluZyh2YWx1ZSkgJiYgaW5jbHVkZXModmFsdWUsIHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGlzTG9jYWxpemVkTnVtYmVyID8gKHZhbHVlIGFzIGFueSkuc3BsaXQodGhpcy5ERUNJTUFMKSA6IGlzU3RyaW5nKHZhbHVlKSAmJiAodmFsdWUgYXMgYW55KS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICBsZXQgZGVjaW1hbFBsYWNlc0F0dHJWYWwgPSB0aGlzLmdldEF0dHIoJ2RlY2ltYWxwbGFjZXMnKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxwbGFjZXMgPSBkZWNpbWFsUGxhY2VzQXR0clZhbCAhPT0gJycgJiYgZGVjaW1hbFBsYWNlc0F0dHJWYWwgIT09IHVuZGVmaW5lZCA/IE51bWJlcihkZWNpbWFsUGxhY2VzQXR0clZhbCkgOiBOYU47XG4gICAgICAgICAgICBpZih0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgIWlzTmFOKGRlY2ltYWxwbGFjZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYoZGVjaW1hbHBsYWNlcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IGlzTG9jYWxpemVkTnVtYmVyID8gcGFydHNbMF0gOiB0aGlzLnRyYW5zZm9ybU51bWJlcihwYXJ0c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRlY2ltYWxwbGFjZXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gcGFydHNbMV0gJiYgcGFydHNbMV0uc3Vic3RyaW5nKDAsIGRlY2ltYWxwbGFjZXMpIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZihpc0xvY2FsaXplZE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueSkgPSB0aGlzLmRlY2ltYWxWYWx1ZS5sZW5ndGggPyBgJHtwYXJ0c1swXX0ke3RoaXMuREVDSU1BTH0ke3RoaXMuZGVjaW1hbFZhbHVlfWAgOiBwYXJ0c1swXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gTnVtYmVyLnBhcnNlRmxvYXQoU3RyaW5nKHZhbHVlKSkudG9GaXhlZChkZWNpbWFscGxhY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IGlzTG9jYWxpemVkTnVtYmVyID8gdmFsdWUgOiB0aGlzLnRyYW5zZm9ybU51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1iZXJSZWcgPSAvXFxkLztcbiAgICAgICAgY29uc3Qgc3RyVmFsID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IG1vZGVsO1xuICAgICAgICAvLyBXaGVuIHRoZSBpbnB1dCB2YWx1ZSBvbmx5IGNvbnRhaW5zIHNlcGVyYXRvciwgZG8gbm90IGNvbnZlcnQgdGhlIHNlcGVydGFvciBpbnRvIDBcbiAgICAgICAgaWYgKG51bWJlclJlZy50ZXN0KHN0clZhbCkpIHtcbiAgICAgICAgICAgIG1vZGVsID0gdGhpcy5wYXJzZU51bWJlcihzdHJWYWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZWwgPSBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbiBrZXlwcmVzcywgaWYgdGhlIHVzZXIgdHlwZXMgYSBkZWNpbWFsIGFuZCBpcyBzdGlsbCBhY3RpdmUgb24gdGhlIGlucHV0IGRvIG5vdCB0aHJvdyBlcnJvci5cbiAgICAgICAgaWYgKGlzTmFOKG1vZGVsKSAmJiBzdHJWYWxbc3RyVmFsLmxlbmd0aCAtIDFdID09PSB0aGlzLkRFQ0lNQUwgJiYgdGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScgJiYgdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dDpmb2N1cycpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0VmFsSXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgYSB2YWxpZCBudW1iZXIgZm9ybSB0aGUgdGV4dC5cbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyB2YWxpZCBvciBpZiBudW1iZXIgaXMgbm90IGluIHJhbmdlIHVwZGF0ZSB0aGUgbW9kZWwgdmFsdWUuXG4gICAgICAgIGlmICghdGhpcy5sYXN0VmFsSXNEZWNpbWFsICYmIHRoaXMuaXNWYWxpZChtb2RlbCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IG1vZGVsO1xuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBkaXNwbGF5IHZhbHVlIGluIHRoZSB0ZXh0IGJveC5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHQoKTtcbiAgICAgICAgICAgIC8vIERvIG5vdCB0cmlnZ2VyIG9uY2hhbmdlIGV2ZW50IGZvciBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShtb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRoZSBhY3R1YWwgbW9kZWwgdmFsdWUgb2YgdGhlIHdpZGdldC5cbiAgICBnZXQgZGF0YXZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3h5TW9kZWw7XG4gICAgfVxuXG4gICAgLy8gcmVzZXRzIGFsbCB0aGUgZmxhZ3MgcmVsYXRlZCB0byB0aGUgd2lkZ2V0J3MgdmFsaWRhdGlvbi5cbiAgICBwcm90ZWN0ZWQgcmVzZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgdGhpcy5pc0ludmFsaWROdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5udW1iZXJOb3RJblJhbmdlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB2YWxpZGF0aW9ucyBmb3IgdGhlIG51bWJlciBiZWZvcmUgdXBkYXRpbmcgdGhlIHdpZGdldCBtb2RlbC4gbGlrZSB2YWxpZGF0aW5nIG1pbiBhbmQgbWF4IHZhbHVlIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgbnVtYmVyIHRvIGJlIHZhbGlkYXRlZFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkKHZhbDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIGlkIG51bWJlciBpcyBpbmZpbml0ZSB0aGVuIGNvbnNpZGVyIGl0IGFzIGludmFsaWQgdmFsdWVcbiAgICAgICAgbGV0IGludmFsaWREZWNpbWFsUGxhY2VzID0gZmFsc2U7XG4gICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiAhaXNOYU4odGhpcy5kZWNpbWFscGxhY2VzKSAmJiB0aGlzLmRlY2ltYWxwbGFjZXMgPj0gMCkge1xuICAgICAgICAgICAgaW52YWxpZERlY2ltYWxQbGFjZXMgPSB0aGlzLmNvdW50RGVjaW1hbHModmFsKSA+IHRoaXMuZGVjaW1hbHBsYWNlcztcbiAgICAgICAgfSBlbHNlIGlmKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuc3RlcCkgJiYgdGhpcy5jb3VudERlY2ltYWxzKHZhbCkgPiB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSkge1xuICAgICAgICAgICAgaW52YWxpZERlY2ltYWxQbGFjZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTih2YWwpIHx8ICFpc0Zpbml0ZSh2YWwpIHx8IGludmFsaWREZWNpbWFsUGxhY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmlzSW52YWxpZE51bWJlciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UodmFsKSkge1xuICAgICAgICAgICAgdGhpcy5udW1iZXJOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIGEgdmFsaWQgbnVtYmVyIGJ5IHZhbGlkYXRpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUluUmFuZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5taW52YWx1ZSkgJiYgdmFsdWUgPCB0aGlzLm1pbnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtaW52YWx1ZSc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taW52YWx1ZTtcblxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5tYXh2YWx1ZSkgJiYgdmFsdWUgPiB0aGlzLm1heHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtYXh2YWx1ZSc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXh2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydCBudW1iZXIgdG8gbG9jYWxpemVkIG51bWJlciB1c2luZyBhbmd1bGFyIGRlY2ltYWwgcGlwZS4gZWcgMTAsMDAsMDAwIG9yIDEsMDAwLDAwMFxuICAgICAqIEBwYXJhbSBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtTnVtYmVyKG51bWJlciwgbnVtYmVyZmlsdGVyPyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbCA9IG51bWJlcmZpbHRlciA/IG51bWJlcmZpbHRlciA6IHRoaXMubnVtYmVyZmlsdGVyO1xuICAgICAgICByZXR1cm4gdGhpcy50cmFpbGluZ1plcm9EZWNpbWFsUGlwZS50cmFuc2Zvcm0obnVtYmVyLCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBmaWx0ZXJWYWwsIHRoaXMubG9jYWxlZmlsdGVyLCB0aGlzLnRyYWlsaW5nemVybywgdGhpcy5kZWNpbWFsVmFsdWUsICEhbnVtYmVyZmlsdGVyLCB0aGlzLmkxOG5TZXJ2aWNlPy5nZXR3aWRnZXRMb2NhbGUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzZXRzIHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHRleHQgYm94LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBjdXJzb3IgcG9zaXRpb24gaW5kZXggZm9ybSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzZXRDdXJzb3JQb3NpdGlvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3Igc2hvdWxkIGJlIGdpdmVuIGZvcm0gcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgbGV0IHBvc2l0aW9uID0gaW5wdXQudmFsdWUubGVuZ3RoIC0gdmFsdWU7XG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPCAwID8gMCA6IHBvc2l0aW9uO1xuICAgICAgICAvLyBzZXQgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dCBib3guXG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHBhcnNlcyB0aGUgTG9jYWxpemVkIG51bWJlcihzdHJpbmcpIHRvIGEgdmFsaWQgbnVtYmVyLlxuICAgICAqIGlmIHRoZSBzdHJpbmcgZG9zZSBub3QgcmVzdWx0IHRvIGEgdmFsaWQgbnVtYmVyIHRoZW4gcmV0dXJucyBOYU4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbCBMb2NhbGl6ZWQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZU51bWJlcih2YWw6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIC8vIFdNUy0yMjE3OTogc3BsaXQgbnVtYmVyIGJhc2VkIG9uIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpbiB0aGUgdmFsXG4gICAgICAgIC8vIHNwbGl0cyBzdHJpbmcgaW50byB0d28gcGFydHMuIGRlY2ltYWwgYW5kIG51bWJlci5cbiAgICAgICAgY29uc3QgcGFydHMgPSB2YWwuc3BsaXQodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUwgPyAodmFsLmluZGV4T2YodGhpcy5ERUNJTUFMKSA+IC0xID8gdGhpcy5ERUNJTUFMIDogJy4nKSA6IHRoaXMuREVDSU1BTCk7XG4gICAgICAgIGlmICghcGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBudW1iZXIgaGF2ZSBkZWNpbWFsIHBvaW50IGFuZCBub3QgaGF2ZSBhIGRlY2ltYWwgdmFsdWUgdGhlbiByZXR1cm4uXG4gICAgICAgIGlmIChwYXJ0c1sxXSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwbGFjZXMgYWxsIGdyb3VwIHNlcGFyYXRvcnMgZm9ybSB0aGUgbnVtYmVyLlxuICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIocGFydHNbMF0uc3BsaXQodGhpcy5HUk9VUCkuam9pbignJykpO1xuICAgICAgICBjb25zdCBkZWNpbWFsID0gTnVtYmVyKGAwLiR7cGFydHNbMV0gfHwgMH1gKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihudW1iZXIpIHx8IE51bWJlci5pc05hTihkZWNpbWFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdW0gPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFyc2VGbG9hdCgobnVtYmVyICsgZGVjaW1hbCkudG9GaXhlZChwYXJ0c1sxXS5sZW5ndGgpKSA6IG51bWJlciArIGRlY2ltYWw7XG4gICAgICAgIC8vIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUgdGhlbiBjYWxjdWxhdGUgdGhlIG51bWJlciBhcyBudW1iZXIgLSBkZWNpbWFsXG4gICAgICAgIC8vIEV4OiBudW1iZXIgPSAtMTIzIGFuZCBkZWNpbWFsID0gMC40NSB0aGVuIG51bWJlciAtIGRlY2ltYWwgPSAtMTIzLTA0NSA9IC0xMjMuNDVcbiAgICAgICAgLy8gSWYgZW50ZXJlZCBudW1iZXIgaXMgLTAuMSB0byAtMC45IHRoZW4gdGhlIG51bWJlciBpcyAtMCBhbmQgZGVjaW1hbCBpcyAwLjEgdG8gMC45LiBOb3cgY2FsYWN1bGF0ZSB0aGUgbnVtYmVyIGFzIG51bWJlci1kZWNpbWFsXG4gICAgICAgIC8vIEV4OiBudW1iZXIgPSAtMCBhbmQgZGVjaW1hbCA9IDAuMSB0aGVuIG51bWJlci1kZWNpbWFsID0gLTAtMC4xID0gLTAuMVxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmlzKDAsIG51bWJlcikgPyBzdW0gOiBudW1iZXIgLSBkZWNpbWFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXIgPiAwID8gc3VtIDogbnVtYmVyIC0gZGVjaW1hbDtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGVzIHRoZSB3aWRnZXRzIHRleHQgdmFsdWUuXG4gICAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5VGV4dCgpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgcG9zaXRpb246IG51bWJlciA9IGlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICBjb25zdCBwcmVWYWx1ZTogc3RyaW5nID0gaW5wdXQudmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwcmVWYWx1ZS5zcGxpdCh0aGlzLkRFQ0lNQUwpO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCAmJiBzdGVwVmFsKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5wcm94eU1vZGVsLCBgMS4ke3N0ZXBWYWx9LSR7c3RlcFZhbH1gKTtcbiAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gdGhpcy5kZWNpbWFsVmFsdWUucmVwbGFjZSgvXFxEL2csJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBpbnB1dC52YWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMucHJveHlNb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gc2FmYXJpIGJyb3dzZXIsIHNldFNlbGVjdGlvblJhbmdlIHdpbGwgZm9jdXMgdGhlIGlucHV0IGJ5IGRlZmF1bHQsIHdoaWNoIG1heSBpbnZva2UgdGhlIGZvY3VzIGV2ZW50IG9uIHdpZGdldC5cbiAgICAgICAgLy8gSGVuY2UgcHJldmVudGluZyB0aGUgc2V0U2VsZWN0aW9uUmFuZ2Ugd2hlbiBkZWZhdWx0IHZhbHVlIGlzIHNldCBpLmUuIHdpZGdldCBpcyBub3QgZm9jdXNlZC5cbiAgICAgICAgaWYgKHRoaXMudXBkYXRlb24gPT09ICdkZWZhdWx0JyAmJiAhdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEN1cnNvclBvc2l0aW9uKHByZVZhbHVlLmxlbmd0aCAtIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RlcCBsZW5ndGggc2V0IGluIHRoZSBzdHVkaW9cbiAgICBwcml2YXRlIHN0ZXBMZW5ndGgoKSB7XG4gICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSAnSU5QVVRNT0RFLk5BVFVSQUwnICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpICYmIHRoaXMuZGVjaW1hbHBsYWNlcyA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFscGxhY2VzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBMZW4gPSB0aGlzLnN0ZXAudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAoc3RlcExlbi5sZW5ndGggPT09IDEgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcExlblsxXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgY3VycmVuY3kgd2lkZ2V0IGhhcyBpbnB1dCBtb2RlIGFzIG5hdHVyYWwgYW5kIHRyYWlsaW5nIHplcm8gaXMgZGVmaW5lZCBvciBub3RcbiAgICBwdWJsaWMgaXNOYXR1cmFsQ3VycmVuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgdGhpcy53aWRnZXRUeXBlID09PSAnd20tY3VycmVuY3knICYmICEhdGhpcy50cmFpbGluZ3plcm87XG4gICAgfVxuXG4gICAgICAgLyoqXG4gICAgICogQHBhcmFtIHZhbHVlIGNvbnRhaW5zIHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBpbnB1dCBib3hcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSB1c2VyIGlucHV0IHZhbHVlLCBpbnRvIGZpbmFuY2lhbCBtb2RlLlxuICAgICAqIE51bWJlciBzdGFydHMgZnJvbSBoaWdoZXN0IHByZWNlc2lvbiBkZWNpbWFsLCBvbiB0eXBpbmcgbnVtYmVyIHNoaWZ0cyB0byB0aGUgbGVmdFxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0Q2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICBjb25zdCBwcmV2RGF0YVZhbHVlID0gIHRoaXMuZ2V0UHJldkRhdGFWYWx1ZSgpO1xuICAgICAgICAvLyBXTVMtMjIzNTUsIFRyaWdnZXIgY2hhbmdlIGNiIGlmIHZhbHVlIGV4aXN0cyBvciB2YWx1ZSBpcyBlbXB0eSBidXQgZGF0YXZhbHVlIGV4aXN0cyAod2hlbiB2YWx1ZSBpcyBzZWxlY3RlZCBhbmQgZGVsZXRlZCkuXG4gICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNzA0MV06IEVuc3VyZSB0aGUgY2hhbmdlIGNhbGxiYWNrIGZvciB0aGUgbnVtYmVyIHdpZGdldCB0cmlnZ2VycyBvbmx5IG9uIGZvY3VzIG91dCAod2hlbiB1cGRhdGVvbiBpcyBzZXQgdG8gYmx1ciksXG4gICAgICAgICAgIC8vIG5vdCBkdXJpbmcgaW5pdGlhbCBpbnB1dCB3aGVuIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIG51bGwuXG4gICAgICAgIGlmIChpc0RlZmluZWQodmFsdWUpICYmICh2YWx1ZSAhPT0gJycgfHwgdGhpcy5kYXRhdmFsdWUgfHwgdGhpcy5kYXRhdmFsdWUgPT0gMCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldFR5cGUgPT09IFwid20tbnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dG1vZGUgPT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDE6IHdoZW4gdGhlcmUgaXMgbm8gZGVmYXVsdCB2YWx1ZSwgcHJldkRhdGFWYWx1ZSBpcyB1bmRlZmluZWQgJiYgdGhpcy5kYXRhdmFsdWUgaXMgbnVsbFxuICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDI6IHdoZW4gdGhlcmUgZGVmYXVsdCB2YWx1ZSwgcHJldkRhdGFWYWx1ZSBpcyBlcXVhbCB0byB0aGlzLmRhdGF2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoISgocHJldkRhdGFWYWx1ZSA9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhdmFsdWUgPT0gbnVsbCkgfHwgKHByZXZEYXRhVmFsdWUgPT0gdGhpcy5kYXRhdmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocHJldkRhdGFWYWx1ZSA9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhdmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIGN1cnJlbmN5IHdpZGdldFxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RlcFZhbCB8fCB0aGlzLmlucHV0bW9kZSAhPT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFuY2lhbFZhbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIGVudGVyZWQgYnkgdGhlIHVzZXIsIGZvcm1hdCB0aGUgaW5wdXRcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIHByb3ZpZGVkIGFzIGRlZmF1bHQgdmFsdWUsIHNraXAgZm9ybWF0dGluZ1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsSW5XaG9sZU51bSA9IHBhcnNlSW50KHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxEL2csJycpKTtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHZhbEluV2hvbGVOdW0gKiAgdGhpcy5zdGVwO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgaWYgKCFpc05hTihmaW5hbmNpYWxWYWwpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVwZGF0ZSBvbiBrZXkgaXMgc2V0IGtleXByZXNzLCB1cGRhdGUgdGhlIGRhdGF2YWx1ZSBlbHNlIHVwZGF0ZSBvbmx5IHRoZSBkaXNwbGF5IHZhbHVlXG4gICAgICAgICAgICBpZiAodGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHBhcnNlRmxvYXQoZmluYW5jaWFsVmFsLnRvRml4ZWQoc3RlcFZhbCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBmaW5hbmNpYWxWYWwudG9GaXhlZChzdGVwVmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uICE9PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBtb2RlIGlzIGZpbmFuY2lhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBzZXQgdG8gZmFsc2UsIE9uIGZvY3VzIHNldCBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgT24gYmx1ciBzdHJpcCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIEluIGN1cnJlbmN5LCBpbnB1dG1vZGUgaXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBhbmQgc3RlcCBhcmUgZGVmaW5lZCwgb24gYmx1ciBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgb24gZm9jdXMgc3RyaXAgdGhlIHplcm9zXG4gICAgcHVibGljIGNoZWNrRm9yVHJhaWxpbmdaZXJvcygkZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICBjb25zdCBmaW5hbmNpYWxNb2RlID0gIXRoaXMudHJhaWxpbmd6ZXJvICYmIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyJ3MgbGFzdCBpbnB1dCBpcyBhIGRlY2ltYWwgYW5kIG5vdCBhY3RpdmUgb24gaW5wdXQgZmllbGQsIHRocm93IGVycm9yXG4gICAgICAgIGlmICh0aGlzLmxhc3RWYWxJc0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaW5hbmNpYWxNb2RlICYmICF0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcFZhbCAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG51bWJlcmZpbHRlcjtcbiAgICAgICAgICAgIGlmICgoZmluYW5jaWFsTW9kZSAmJiAkZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJykgfHwgKHRoaXMuaXNOYXR1cmFsQ3VycmVuY3koKSAmJiAkZXZlbnQudHlwZSA9PT0gJ2JsdXInKSkge1xuICAgICAgICAgICAgICAgIG51bWJlcmZpbHRlciA9IGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMuZGF0YXZhbHVlLCBudW1iZXJmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGEgbnVtYmVyIGhhdmUuXG4gICAgICogQHBhcmFtIHZhbHVlOiBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIHByaXZhdGUgY291bnREZWNpbWFscyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gbnVtYmVyIGFuZCBoYW5kbGUgc2NpZW50aWZpYyBub3RhdGlvblxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHJldHVybiAwO1xuXG4gICAgICAgIC8vIEdldCB0aGUgZXhwb25lbnRpYWwgZm9ybSB0byBoYW5kbGUgc2NpZW50aWZpYyBub3RhdGlvbiBwcm9wZXJseVxuICAgICAgICBjb25zdCBleHBvbmVudGlhbFN0ciA9IG51bS50b0V4cG9uZW50aWFsKCk7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZXhwb25lbnRpYWxTdHIubWF0Y2goL14tP1xcZCpcXC4/KFxcZCspP2UoWystXVxcZCspJC8pO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSBtYXRjaFsxXSA/IG1hdGNoWzFdLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICBjb25zdCBleHBvbmVudCA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBkZWNpbWFscyAtIGV4cG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIHJlZ3VsYXIgZGVjaW1hbCBjb3VudGluZ1xuICAgICAgICBjb25zdCBkZWNpbWFsU3RyID0gbnVtLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxpemVkTnVtYmVyID0gaW5jbHVkZXMoZGVjaW1hbFN0ciwgdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBpc0xvY2FsaXplZE51bWJlciA/IGRlY2ltYWxTdHIuc3BsaXQodGhpcy5ERUNJTUFMKSA6IGRlY2ltYWxTdHIuc3BsaXQoJy4nKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzWzFdID8gcGFydHNbMV0ubGVuZ3RoIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBoYW5kbGVzIHRoZSBhcnJvdyBwcmVzcyBldmVudC4gSW5jcmVhc2VzIG9yIGRlY3JlYXNlcyB0aGUgbnVtYmVyLiB0cmlnZ2VyZWQgZm9tIHRoZSB0ZW1wbGF0ZVxuICAgICAqIEBwYXJhbSAkZXZlbnQga2V5Ym9hcmQgZXZlbnQuXG4gICAgICogQHBhcmFtIGtleSBpZGVudGlmaWVyIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIG9uQXJyb3dQcmVzcygkZXZlbnQsIGtleSkge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGVwID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsID0gJGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC8sL2csICcnKTtcblxuICAgICAgICAvLyBwcm94eU1vZGVsIHRvIGJlIHVwZGF0ZWQgZnJvbSAkZXZlbnQudGFyZ2V0LnZhbHVlIGlmIHByZXNlbnQgdG8gc3VwcG9ydCBhcnJvdyBrZXlzIHdoZW4gaW5wdXQgY2hhbmdlcyBlbHNlIHBpY2sgdXAgZnJvbSB0aGlzLnByb3h5bW9kZWxcbiAgICAgICAgbGV0IHByb3h5TW9kZWw7XG4gICAgICAgIGlmICh0YXJnZXRWYWwgJiYgIWlzTmFOKHBhcnNlRmxvYXQodGFyZ2V0VmFsKSkpIHtcbiAgICAgICAgICAgIHByb3h5TW9kZWwgPSBwYXJzZUZsb2F0KHRhcmdldFZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm94eU1vZGVsID0gdGhpcy5wcm94eU1vZGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICAgIC8vIGlmIHRoZSBudW1iZXIgaXMgbm90IGluIHJhbmdlIGFuZCB3aGVuIGFycm93IGJ1dHRvbnMgYXJlIHByZXNzZWQgbmVlZCB0byBnZXQgYXBwcm9wcmlhdGUgbnVtYmVyIHZhbHVlLlxuICAgICAgICBpZiAodGhpcy5udW1iZXJOb3RJblJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5wYXJzZU51bWJlcih0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICAvLyB0YWtlIHRoZSB0ZXh0Ym94IHZhbHVlIGFzIGN1cnJlbnQgbW9kZWwgaWYgdGhlIHZhbHVlIGlzIHZhbGlkLlxuICAgICAgICAgICAgaWYgKCFpc05hTihpbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgcHJveHlNb2RlbCA9IGlucHV0VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJveHlNb2RlbCkgfHwgaXNOdWxsKHByb3h5TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgcHJveHlNb2RlbCA9IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UoKHRoaXMubWludmFsdWUgfHwgMCkpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVJblJhbmdlKHByb3h5TW9kZWwgKyAoa2V5ID09PSAnVVAnID8gdGhpcy5zdGVwIDogLXRoaXMuc3RlcCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5ID09PSAnVVAnICYmIHByb3h5TW9kZWwgPD0gdmFsdWUpIHx8IChrZXkgPT09ICdET1dOJyAmJiBwcm94eU1vZGVsID49IHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbFJvdW5kVmFsdWUgPSBNYXRoLm1heCh0aGlzLmNvdW50RGVjaW1hbHMocHJveHlNb2RlbCksIHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBtb2RlbFByb3h5LlxuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gcm91bmQodmFsdWUsIGRlY2ltYWxSb3VuZFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMucHJveHlNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGhlIGZyb20gd2lkZ2V0LiB0byBjaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIHZhbGlkIG9yIG5vdC5cbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbnZhbGlkTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm51bWJlck5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbnVtYmVyTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICAvKiBXTVMtMTgyNjkgfCBFeHRlbmRpbmcgdGhlIGV4aXN0aW5nIHZhbGlkYXRpb24gZm9yICdyZXF1aXJlZCcgKi9cbiAgICAgICAgaWYgKHRoaXNbJ3Nob3cnXSAmJiB0aGlzWydyZXF1aXJlZCddKSB7XG4gICAgICAgICAgICByZXR1cm4gKCEhYy52YWx1ZSB8fCBjLnZhbHVlID09PSAwKSA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlSW5wdXRFbnRyeSgkZXZlbnQpIHtcblxuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYWxsb3cgYWN0aW9ucyBpZiBjb250cm9sIGtleSBpcyBwcmVzc2VkIG9yIGlmIGJhY2tzcGFjZSBpcyBwcmVzc2VkLiAoZm9yIE1vemlsbGEpLlxuICAgICAgICBpZiAoJGV2ZW50LmN0cmxLZXkgfHwgaW5jbHVkZXMoWydCYWNrc3BhY2UnLCAnQXJyb3dSaWdodCcsICdBcnJvd0xlZnQnLCAnVGFiJywgJ0VudGVyJywgJ0RlbGV0ZSddLCAkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgUmVnRXhwKGBeW1xcXFxkXFxcXHMtLC5lKyR7dGhpcy5HUk9VUH0ke3RoaXMuREVDSU1BTH1dJGAsICdpJyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSAkZXZlbnQudGFyZ2V0Py52YWx1ZXx8XCJcIjtcblxuICAgICAgICAvLyB3aGVuIGlucHV0IG1vZGUgaXMgZmluYW5jaWFsLCBkbyBub3QgcmVzdHJpY3QgdXNlciBvbiBlbnRlcmluZyB0aGUgdmFsdWUgd2hlbiBzdGVwIHZhbHVlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAgICAgIGNvbnN0IHNraXBTdGVwVmFsaWRhdGlvbiA9IHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlcyBpZiB1c2VyIGVuZXRlcnMgbW9yZSB0aGFuIDE2IGRpZ2l0c1xuICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsID0gIHBhcnNlSW50KGlucHV0VmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEQvZywnJykpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZFZhbC50b1N0cmluZygpLmxlbmd0aCA+IDE1KSB7XG4gICAgICAgICAgICAgICAgLy8gV01TLTIyMzIxOiBJZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBNQVhfU0FGRV9JTlRFR0VSIChtb3JlIHRoYW4gMTUgbnVtYmVycykuXG4gICAgICAgICAgICAgICAgLy8gdXNlciBzZWxlY3RzIGEgcmFuZ2Ugb2YgZGlnaXRzIGFuZCBwcmVzc2VzIGEga2V5LlxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0aHJvdyB2YWxpZGF0aW9uIG9mIGV4Y2VlZGVkIG51bWJlciBhcyBzZWxlY3RlZCByYW5nZSB2YWx1ZSB3aWxsIGJlIGRlbGV0ZWQuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkVmFsICYmIHNlbGVjdGVkVmFsLnRvU3RyaW5nKCkgJiYgc2VsZWN0ZWRWYWwuZm9jdXNOb2RlID09PSB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkYXRlcyBlbnRlcmluZyBvZiBkZWNpbWFsIHZhbHVlcyBvbmx5IHdoZW4gdXNlciBwcm92aWRlcyBkZWNpbWFsIGxpbWl0KGkuZSBzdGVwIGNvbnRhaW5zIGRlY2ltYWwgdmFsdWVzKS5cbiAgICAgICAgLy8gUmVzdHJpY3QgdXNlciBmcm9tIGVudGVyaW5nIG9ubHkgaWYgdGhlIGRlY2ltYWwgbGltaXQgaXMgcmVhY2hlZCBhbmQgdGhlIG5ldyBkaWdpdCBpcyBlbnRlcmVkIGluIGRlY2ltYWwgcGxhY2VcbiAgICAgICAgLy8gaWYgKCFza2lwU3RlcFZhbGlkYXRpb24gJiYgaW5wdXRWYWx1ZSAmJiB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSAmJiAodGhpcy5jb3VudERlY2ltYWxzKGlucHV0VmFsdWUpID49IHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKSAmJiAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID49IGlucHV0VmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHZhbGlkYXRlcyBpZiB1c2VyIGVudGVyZWQgYW4gaW52YWxpZCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmICghdmFsaWRpdHkudGVzdCgkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpKSB7XG4gICAgICAgICAgICBpZih0aGlzLmRlY2ltYWxwbGFjZXMgPT09IDAgJiYgdGhpcy5ERUNJTUFMID09PSAkZXZlbnQua2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBpbmNsdWRlcyhpbnB1dFZhbHVlLCB0aGlzLkRFQ0lNQUwpID8gKGlucHV0VmFsdWUgYXMgYW55KS5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogaW5wdXRWYWx1ZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgY29uc3QgaXNDdXJzb3JQb3NpdGlvbkF0RGVjaW1hbFBsYWNlID0gJGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCA+IHBhcnRzWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVjaW1hbHBsYWNlcyA+IDAgJiYgdGhpcy5jb3VudERlY2ltYWxzKGlucHV0VmFsdWUpID49IHRoaXMuZGVjaW1hbHBsYWNlcyAmJiBpc0N1cnNvclBvc2l0aW9uQXREZWNpbWFsUGxhY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21tYSBjYW5ub3QgYmUgZW50ZXJlZCBjb25zZWN1dGl2ZWx5XG4gICAgICAgIGlmIChpbmNsdWRlcyhpbnB1dFZhbHVlLCAnLCcpICYmIGlucHV0VmFsdWVbaW5wdXRWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJywnICYmICRldmVudC5rZXkgPT09ICcsJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYSBkZWNpbWFsIHZhbHVlIGNhbiBiZSBlbnRlcmVkIG9ubHkgb25jZSBpbiB0aGUgaW5wdXQuXG4gICAgICAgIGlmIChpbmNsdWRlcyhpbnB1dFZhbHVlLCB0aGlzLkRFQ0lNQUwpICYmICRldmVudC5rZXkgPT09IHRoaXMuREVDSU1BTCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vICdlJyBjYW4gYmUgZW50ZXJlZCBvbmx5IG9uY2UgaW4gdGhlIGlucHV0LlxuICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKHRvQXJyYXkoaW5wdXRWYWx1ZSksIFsnZScsICdFJ10pLmxlbmd0aCAmJiBpbmNsdWRlcygnZUUnLCAkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaW5jbHVkZXMoaW5wdXRWYWx1ZSwgJysnKSB8fCBpbmNsdWRlcyhpbnB1dFZhbHVlLCAnLScpKSAmJiAoJGV2ZW50LmtleSA9PT0gJysnIHx8ICRldmVudC5rZXkgPT09ICctJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgYWxsb3cgdXNlciB0byBlbnRlciBvbmx5IHNwYWNlIHdpdGhvdXQgYW55IGlucHV0IHZhbHVlXG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSAmJiAkZXZlbnQuY29kZSA9PT0gJ1NwYWNlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQmFja3NwYWNlKCRldmVudCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRGVsZXRlKCRldmVudCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW50ZXIoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YXZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKCRldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMIHx8ICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnYmx1cicpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9ICRldmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdtaW52YWx1ZScgfHwga2V5ID09PSAnbWF4dmFsdWUnKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQobnYpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGF2YWx1ZScgJiYgIW92KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05hdHVyYWxDdXJyZW5jeSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZvclRyYWlsaW5nWmVyb3Moe3R5cGU6ICdibHVyJ30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIG9uUGFzdGUoJGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBwYXN0ZWREYXRhID0gJGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hhciBvZiBwYXN0ZWREYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBtb2NrRXZlbnQgPSBuZXcgS2V5Ym9hcmRFdmVudCgna2V5cHJlc3MnLCB7IGtleTogY2hhciB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRlSW5wdXRFbnRyeShtb2NrRXZlbnQpPT09ZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
554
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC90ZXh0L3NyYy9udW1iZXItbG9jYWxlL251bWJlci1sb2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN4RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWhHLElBQXNCLFlBQVksR0FBbEMsTUFBc0IsWUFBYSxTQUFRLFNBQVM7SUEyQmhELFlBQ0ksR0FBYSxFQUNiLE1BQXFCLEVBQ2IsV0FBZ0MsRUFDaEMsdUJBQWdELEVBQ2hCLGVBQW9CO1FBRTVELEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBSjVCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBeEJwRCxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQWEzQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQWNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsRUFB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RUFBRSxDQUFDLENBQUM7WUFDL0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsT0FBTztZQUNYLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUVKLENBQUE7QUFqbEJxQixZQUFZO0lBZ0N6QixXQUFBLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQUUsV0FBQSxRQUFRLEVBQUUsQ0FBQTtxQ0FKbEMsUUFBUSxVQUVRLG1CQUFtQjtRQUNQLHVCQUF1QjtHQS9CMUMsWUFBWSxDQWlsQmpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdG9yLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldExvY2FsZU51bWJlclN5bWJvbCwgTnVtYmVyU3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtBYnN0cmFjdEkxOG5TZXJ2aWNlLCBpc0RlZmluZWR9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IElXaWRnZXRDb25maWcsIFRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLCBJTlBVVE1PREUgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgQmFzZUlucHV0IH0gZnJvbSAnLi4vYmFzZS1pbnB1dC9iYXNlLWlucHV0JztcbmltcG9ydCB7aW5jbHVkZXMsIGludGVyc2VjdGlvbiwgaXNOdWxsLCBpc1N0cmluZywgaXNVbmRlZmluZWQsIHJvdW5kLCB0b0FycmF5fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOdW1iZXJMb2NhbGUgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgREVDSU1BTDogc3RyaW5nO1xuICAgIHByaXZhdGUgR1JPVVA6IHN0cmluZztcbiAgICBwcml2YXRlIHNlbGVjdGVkTG9jYWxlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwcm94eU1vZGVsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBudW1iZXJOb3RJblJhbmdlOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNJbnZhbGlkTnVtYmVyOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNEZWZhdWx0UXVlcnk6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHByaXZhdGUgZGVjaW1hbFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBudW1iZXJmaWx0ZXI6IHN0cmluZztcbiAgICBwcml2YXRlIGxvY2FsZWZpbHRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyBtaW52YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyBtYXh2YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyB1cGRhdGVvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBzdGVwOiBudW1iZXI7XG4gICAgcHVibGljIHRyYWlsaW5nemVybzogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVnZXhQYXR0ZXJuOiBzdHJpbmc7XG4gICAgcHVibGljIGludmFsaWRQYXR0ZXJuOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgaW5wdXRtb2RlOiBzdHJpbmc7XG4gICAgcHVibGljIGRlY2ltYWxwbGFjZXM6IG51bWJlcjtcbiAgICBwcml2YXRlIGxhc3RWYWxJc0RlY2ltYWw6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBwcml2YXRlIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlOiBUcmFpbGluZ1plcm9EZWNpbWFsUGlwZSxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgY29uZmlnLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICAgICAgdGhpcy5ERUNJTUFMID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlZmlsdGVyIHx8IHRoaXMuc2VsZWN0ZWRMb2NhbGUsIE51bWJlclN5bWJvbC5EZWNpbWFsKTtcbiAgICAgICAgdGhpcy5HUk9VUCA9IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZWZpbHRlciB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBOdW1iZXJTeW1ib2wuR3JvdXApO1xuICAgICAgICB0aGlzLm51bWJlcmZpbHRlciA9ICcxLjAtMTYnO1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBTZXR0ZXIgZm9yIHRoZSBkYXRhdmFsdWUuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHNldCBkYXRhdmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGV4dCB2YWx1ZSB0byBudWxsIGlmIGRhdGEgdmFsdWUgaXMgZW1wdHkuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKGluY2x1ZGVzKFtudWxsLCB1bmRlZmluZWQsICcnXSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgcHJldkRhdGFWYWx1ZSA9ICAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy5wcm94eU1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTI3NjQ4XTogV2hlbiBhIGRlY2ltYWwgdmFsdWUgaXMgZW50ZXJlZCAoZS5nLiwgXCIzLlwiKSwgZGF0YXZhbHVlIGFuZCBwcmV2RGF0YXZhbHVlIGJlY29tZSBudWxsIGFzIGl0IGlzIGFuIGludmFsaWQgbnVtYmVyLlxuICAgICAgICAgICAgLy8gaGFuZGxlQ2hhbmdlKCkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBpbnZhbGlkIGRhdGF2YWx1ZSAoZS5nLiwgXCIzLlwiKSBpcyByZW1vdmVkLCBhbmQgdGhlIHZhbHVlIGJlY29tZXMgYW4gZW1wdHkgc3RyaW5nIChcIlwiKS5cbiAgICAgICAgICAgIGlmICgocHJldkRhdGFWYWx1ZSB8fCBwcmV2RGF0YVZhbHVlID09IDAgfHwgcHJldkRhdGFWYWx1ZSA9PSBudWxsKSAmJiAhdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSB3aWRnZXQgaGFzIGRlZmF1bHQgdmFsdWUgYW5kIGlmIHdlIGNoYW5nZSB0aGUgbG9jYWxlLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGluIHNlbGVjdGVkIGxvY2FsZSBmb3JtYXQuXG4gICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBpc0xvY2FsaXplZE51bWJlciA9IGlzU3RyaW5nKHZhbHVlKSAmJiBpbmNsdWRlcyh2YWx1ZSwgdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaXNMb2NhbGl6ZWROdW1iZXIgPyAodmFsdWUgYXMgYW55KS5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogaXNTdHJpbmcodmFsdWUpICYmICh2YWx1ZSBhcyBhbnkpLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICAgIGxldCBkZWNpbWFsUGxhY2VzQXR0clZhbCA9IHRoaXMuZ2V0QXR0cignZGVjaW1hbHBsYWNlcycpO1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbHBsYWNlcyA9IGRlY2ltYWxQbGFjZXNBdHRyVmFsICE9PSAnJyAmJiBkZWNpbWFsUGxhY2VzQXR0clZhbCAhPT0gdW5kZWZpbmVkID8gTnVtYmVyKGRlY2ltYWxQbGFjZXNBdHRyVmFsKSA6IE5hTjtcbiAgICAgICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiAhaXNOYU4oZGVjaW1hbHBsYWNlcykpIHtcbiAgICAgICAgICAgICAgICBpZihkZWNpbWFscGxhY2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyBwYXJ0c1swXSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHBhcnRzWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGVjaW1hbHBsYWNlcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSAmJiBwYXJ0c1sxXS5zdWJzdHJpbmcoMCwgZGVjaW1hbHBsYWNlcykgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzTG9jYWxpemVkTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IHRoaXMuZGVjaW1hbFZhbHVlLmxlbmd0aCA/IGAke3BhcnRzWzBdfSR7dGhpcy5ERUNJTUFMfSR7dGhpcy5kZWNpbWFsVmFsdWV9YCA6IHBhcnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueSkgPSBOdW1iZXIucGFyc2VGbG9hdChTdHJpbmcodmFsdWUpKS50b0ZpeGVkKGRlY2ltYWxwbGFjZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyB2YWx1ZSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bWJlclJlZyA9IC9cXGQvO1xuICAgICAgICBjb25zdCBzdHJWYWwgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgIC8vIFdoZW4gdGhlIGlucHV0IHZhbHVlIG9ubHkgY29udGFpbnMgc2VwZXJhdG9yLCBkbyBub3QgY29udmVydCB0aGUgc2VwZXJ0YW9yIGludG8gMFxuICAgICAgICBpZiAobnVtYmVyUmVnLnRlc3Qoc3RyVmFsKSkge1xuICAgICAgICAgICAgbW9kZWwgPSB0aGlzLnBhcnNlTnVtYmVyKHN0clZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIGtleXByZXNzLCBpZiB0aGUgdXNlciB0eXBlcyBhIGRlY2ltYWwgYW5kIGlzIHN0aWxsIGFjdGl2ZSBvbiB0aGUgaW5wdXQgZG8gbm90IHRocm93IGVycm9yLlxuICAgICAgICBpZiAoaXNOYU4obW9kZWwpICYmIHN0clZhbFtzdHJWYWwubGVuZ3RoIC0gMV0gPT09IHRoaXMuREVDSU1BTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnY2hhbmdlJyAmJiB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0OmZvY3VzJykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBhIHZhbGlkIG51bWJlciBmb3JtIHRoZSB0ZXh0LlxuICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIHZhbGlkIG9yIGlmIG51bWJlciBpcyBub3QgaW4gcmFuZ2UgdXBkYXRlIHRoZSBtb2RlbCB2YWx1ZS5cbiAgICAgICAgaWYgKCF0aGlzLmxhc3RWYWxJc0RlY2ltYWwgJiYgdGhpcy5pc1ZhbGlkKG1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gbW9kZWw7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGRpc3BsYXkgdmFsdWUgaW4gdGhlIHRleHQgYm94LlxuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dCgpO1xuICAgICAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgb25jaGFuZ2UgZXZlbnQgZm9yIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKG1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybnMgdGhlIGFjdHVhbCBtb2RlbCB2YWx1ZSBvZiB0aGUgd2lkZ2V0LlxuICAgIGdldCBkYXRhdmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHlNb2RlbDtcbiAgICB9XG5cbiAgICAvLyByZXNldHMgYWxsIHRoZSBmbGFncyByZWxhdGVkIHRvIHRoZSB3aWRnZXQncyB2YWxpZGF0aW9uLlxuICAgIHByb3RlY3RlZCByZXNldFZhbGlkYXRpb25zKCkge1xuICAgICAgICB0aGlzLmlzSW52YWxpZE51bWJlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHZhbGlkYXRpb25zIGZvciB0aGUgbnVtYmVyIGJlZm9yZSB1cGRhdGluZyB0aGUgd2lkZ2V0IG1vZGVsLiBsaWtlIHZhbGlkYXRpbmcgbWluIGFuZCBtYXggdmFsdWUgZm9yIHRoZSB3aWRnZXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbCBudW1iZXIgdG8gYmUgdmFsaWRhdGVkXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWQodmFsOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaWQgbnVtYmVyIGlzIGluZmluaXRlIHRoZW4gY29uc2lkZXIgaXQgYXMgaW52YWxpZCB2YWx1ZVxuICAgICAgICBsZXQgaW52YWxpZERlY2ltYWxQbGFjZXMgPSBmYWxzZTtcbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpICYmIHRoaXMuZGVjaW1hbHBsYWNlcyA+PSAwKSB7XG4gICAgICAgICAgICBpbnZhbGlkRGVjaW1hbFBsYWNlcyA9IHRoaXMuY291bnREZWNpbWFscyh2YWwpID4gdGhpcy5kZWNpbWFscGxhY2VzO1xuICAgICAgICB9IGVsc2UgaWYoIU51bWJlci5pc0ludGVnZXIodGhpcy5zdGVwKSAmJiB0aGlzLmNvdW50RGVjaW1hbHModmFsKSA+IHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKSB7XG4gICAgICAgICAgICBpbnZhbGlkRGVjaW1hbFBsYWNlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKHZhbCkgfHwgIWlzRmluaXRlKHZhbCkgfHwgaW52YWxpZERlY2ltYWxQbGFjZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnZhbGlkTnVtYmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICE9PSB0aGlzLmdldFZhbHVlSW5SYW5nZSh2YWwpKSB7XG4gICAgICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYSB2YWxpZCBudW1iZXIgYnkgdmFsaWRhdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhbHVlSW5SYW5nZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1pbnZhbHVlKSAmJiB2YWx1ZSA8IHRoaXMubWludmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21pbnZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1pbnZhbHVlO1xuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1heHZhbHVlKSAmJiB2YWx1ZSA+IHRoaXMubWF4dmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21heHZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1heHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0IG51bWJlciB0byBsb2NhbGl6ZWQgbnVtYmVyIHVzaW5nIGFuZ3VsYXIgZGVjaW1hbCBwaXBlLiBlZyAxMCwwMCwwMDAgb3IgMSwwMDAsMDAwXG4gICAgICogQHBhcmFtIG51bWJlclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1OdW1iZXIobnVtYmVyLCBudW1iZXJmaWx0ZXI/KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsID0gbnVtYmVyZmlsdGVyID8gbnVtYmVyZmlsdGVyIDogdGhpcy5udW1iZXJmaWx0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLnRyYW5zZm9ybShudW1iZXIsIHRoaXMuc2VsZWN0ZWRMb2NhbGUsIGZpbHRlclZhbCwgdGhpcy5sb2NhbGVmaWx0ZXIsIHRoaXMudHJhaWxpbmd6ZXJvLCB0aGlzLmRlY2ltYWxWYWx1ZSwgISFudW1iZXJmaWx0ZXIsIHRoaXMuaTE4blNlcnZpY2U/LmdldHdpZGdldExvY2FsZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNldHMgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dCBib3guXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIGN1cnNvciBwb3NpdGlvbiBpbmRleCBmb3JtIGxlZnQgdG8gcmlnaHQuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldEN1cnNvclBvc2l0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGN1cnNvciBzaG91bGQgYmUgZ2l2ZW4gZm9ybSByaWdodCB0byBsZWZ0LlxuICAgICAgICBsZXQgcG9zaXRpb24gPSBpbnB1dC52YWx1ZS5sZW5ndGggLSB2YWx1ZTtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA8IDAgPyAwIDogcG9zaXRpb247XG4gICAgICAgIC8vIHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB0ZXh0IGJveC5cbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgcGFyc2VzIHRoZSBMb2NhbGl6ZWQgbnVtYmVyKHN0cmluZykgdG8gYSB2YWxpZCBudW1iZXIuXG4gICAgICogaWYgdGhlIHN0cmluZyBkb3NlIG5vdCByZXN1bHQgdG8gYSB2YWxpZCBudW1iZXIgdGhlbiByZXR1cm5zIE5hTi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsIExvY2FsaXplZCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlTnVtYmVyKHZhbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgLy8gV01TLTIyMTc5OiBzcGxpdCBudW1iZXIgYmFzZWQgb24gdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGluIHRoZSB2YWxcbiAgICAgICAgLy8gc3BsaXRzIHN0cmluZyBpbnRvIHR3byBwYXJ0cy4gZGVjaW1hbCBhbmQgbnVtYmVyLlxuICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbC5zcGxpdCh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCA/ICh2YWwuaW5kZXhPZih0aGlzLkRFQ0lNQUwpID4gLTEgPyB0aGlzLkRFQ0lNQUwgOiAnLicpIDogdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG51bWJlciBoYXZlIGRlY2ltYWwgcG9pbnQgYW5kIG5vdCBoYXZlIGEgZGVjaW1hbCB2YWx1ZSB0aGVuIHJldHVybi5cbiAgICAgICAgaWYgKHBhcnRzWzFdID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXBsYWNlcyBhbGwgZ3JvdXAgc2VwYXJhdG9ycyBmb3JtIHRoZSBudW1iZXIuXG4gICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihwYXJ0c1swXS5zcGxpdCh0aGlzLkdST1VQKS5qb2luKCcnKSk7XG4gICAgICAgIGNvbnN0IGRlY2ltYWwgPSBOdW1iZXIoYDAuJHtwYXJ0c1sxXSB8fCAwfWApO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG51bWJlcikgfHwgTnVtYmVyLmlzTmFOKGRlY2ltYWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1bSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJzZUZsb2F0KChudW1iZXIgKyBkZWNpbWFsKS50b0ZpeGVkKHBhcnRzWzFdLmxlbmd0aCkpIDogbnVtYmVyICsgZGVjaW1hbDtcbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSB0aGVuIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIGFzIG51bWJlciAtIGRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0xMjMgYW5kIGRlY2ltYWwgPSAwLjQ1IHRoZW4gbnVtYmVyIC0gZGVjaW1hbCA9IC0xMjMtMDQ1ID0gLTEyMy40NVxuICAgICAgICAvLyBJZiBlbnRlcmVkIG51bWJlciBpcyAtMC4xIHRvIC0wLjkgdGhlbiB0aGUgbnVtYmVyIGlzIC0wIGFuZCBkZWNpbWFsIGlzIDAuMSB0byAwLjkuIE5vdyBjYWxhY3VsYXRlIHRoZSBudW1iZXIgYXMgbnVtYmVyLWRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0wIGFuZCBkZWNpbWFsID0gMC4xIHRoZW4gbnVtYmVyLWRlY2ltYWwgPSAtMC0wLjEgPSAtMC4xXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuaXMoMCwgbnVtYmVyKSA/IHN1bSA6IG51bWJlciAtIGRlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlciA+IDAgPyBzdW0gOiBudW1iZXIgLSBkZWNpbWFsO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIHdpZGdldHMgdGV4dCB2YWx1ZS5cbiAgICBwcml2YXRlIHVwZGF0ZURpc3BsYXlUZXh0KCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwb3NpdGlvbjogbnVtYmVyID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIGNvbnN0IHByZVZhbHVlOiBzdHJpbmcgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHByZVZhbHVlLnNwbGl0KHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBWYWwgPSB0aGlzLnN0ZXBMZW5ndGgoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHN0ZXBWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gaW5wdXQudmFsdWUgPSB0aGlzLnRyYW5zZm9ybU51bWJlcih0aGlzLnByb3h5TW9kZWwsIGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWApO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSB0aGlzLmRlY2ltYWxWYWx1ZS5yZXBsYWNlKC9cXEQvZywnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5wcm94eU1vZGVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMudHJhaWxpbmd6ZXJvKSB7XG4gICAgICAgICAgICBjb25zdCByZWdleE9iaiA9IG5ldyBSZWdFeHAodGhpcy5yZWdleFBhdHRlcm4pO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkUGF0dGVybiA9ICFyZWdleE9iai50ZXN0KHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiBzYWZhcmkgYnJvd3Nlciwgc2V0U2VsZWN0aW9uUmFuZ2Ugd2lsbCBmb2N1cyB0aGUgaW5wdXQgYnkgZGVmYXVsdCwgd2hpY2ggbWF5IGludm9rZSB0aGUgZm9jdXMgZXZlbnQgb24gd2lkZ2V0LlxuICAgICAgICAvLyBIZW5jZSBwcmV2ZW50aW5nIHRoZSBzZXRTZWxlY3Rpb25SYW5nZSB3aGVuIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGkuZS4gd2lkZ2V0IGlzIG5vdCBmb2N1c2VkLlxuICAgICAgICBpZiAodGhpcy51cGRhdGVvbiA9PT0gJ2RlZmF1bHQnICYmICF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q3Vyc29yUG9zaXRpb24ocHJlVmFsdWUubGVuZ3RoIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGVwIGxlbmd0aCBzZXQgaW4gdGhlIHN0dWRpb1xuICAgIHByaXZhdGUgc3RlcExlbmd0aCgpIHtcbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09ICdJTlBVVE1PREUuTkFUVVJBTCcgJiYgIWlzTmFOKHRoaXMuZGVjaW1hbHBsYWNlcykgJiYgdGhpcy5kZWNpbWFscGxhY2VzID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxwbGFjZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcExlbiA9IHRoaXMuc3RlcC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmIChzdGVwTGVuLmxlbmd0aCA9PT0gMSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwTGVuWzFdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjdXJyZW5jeSB3aWRnZXQgaGFzIGlucHV0IG1vZGUgYXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBkZWZpbmVkIG9yIG5vdFxuICAgIHB1YmxpYyBpc05hdHVyYWxDdXJyZW5jeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiB0aGlzLndpZGdldFR5cGUgPT09ICd3bS1jdXJyZW5jeScgJiYgISF0aGlzLnRyYWlsaW5nemVybztcbiAgICB9XG5cbiAgICAgICAvKipcbiAgICAgKiBAcGFyYW0gdmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGlucHV0IGJveFxuICAgICAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHVzZXIgaW5wdXQgdmFsdWUsIGludG8gZmluYW5jaWFsIG1vZGUuXG4gICAgICogTnVtYmVyIHN0YXJ0cyBmcm9tIGhpZ2hlc3QgcHJlY2VzaW9uIGRlY2ltYWwsIG9uIHR5cGluZyBudW1iZXIgc2hpZnRzIHRvIHRoZSBsZWZ0XG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IHByZXZEYXRhVmFsdWUgPSAgdGhpcy5nZXRQcmV2RGF0YVZhbHVlKCk7XG4gICAgICAgIC8vIFdNUy0yMjM1NSwgVHJpZ2dlciBjaGFuZ2UgY2IgaWYgdmFsdWUgZXhpc3RzIG9yIHZhbHVlIGlzIGVtcHR5IGJ1dCBkYXRhdmFsdWUgZXhpc3RzICh3aGVuIHZhbHVlIGlzIHNlbGVjdGVkIGFuZCBkZWxldGVkKS5cbiAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTI3MDQxXTogRW5zdXJlIHRoZSBjaGFuZ2UgY2FsbGJhY2sgZm9yIHRoZSBudW1iZXIgd2lkZ2V0IHRyaWdnZXJzIG9ubHkgb24gZm9jdXMgb3V0ICh3aGVuIHVwZGF0ZW9uIGlzIHNldCB0byBibHVyKSxcbiAgICAgICAgICAgLy8gbm90IGR1cmluZyBpbml0aWFsIGlucHV0IHdoZW4gdGhlIHByZXZpb3VzIHZhbHVlIGlzIHVuZGVmaW5lZCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgbnVsbC5cbiAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgKHZhbHVlICE9PSAnJyB8fCB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLmRhdGF2YWx1ZSA9PSAwKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0VHlwZSA9PT0gXCJ3bS1udW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PSBJTlBVVE1PREUuRklOQU5DSUFMKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMTogd2hlbiB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlLCBwcmV2RGF0YVZhbHVlIGlzIHVuZGVmaW5lZCAmJiB0aGlzLmRhdGF2YWx1ZSBpcyBudWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMjogd2hlbiB0aGVyZSBkZWZhdWx0IHZhbHVlLCBwcmV2RGF0YVZhbHVlIGlzIGVxdWFsIHRvIHRoaXMuZGF0YXZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGlmICghKChwcmV2RGF0YVZhbHVlID09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGF2YWx1ZSA9PSBudWxsKSB8fCAocHJldkRhdGFWYWx1ZSA9PSB0aGlzLmRhdGF2YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShwcmV2RGF0YVZhbHVlID09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGF2YWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gY3VycmVuY3kgd2lkZ2V0XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGVwVmFsIHx8IHRoaXMuaW5wdXRtb2RlICE9PSBJTlBVVE1PREUuRklOQU5DSUFMKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmluYW5jaWFsVmFsO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGUgdmFsdWUgaXMgZW50ZXJlZCBieSB0aGUgdXNlciwgZm9ybWF0IHRoZSBpbnB1dFxuICAgICAgICAgKiBJZiB0aGUgdmFsdWUgaXMgcHJvdmlkZWQgYXMgZGVmYXVsdCB2YWx1ZSwgc2tpcCBmb3JtYXR0aW5nXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgZmluYW5jaWFsVmFsID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2YWxJbldob2xlTnVtID0gcGFyc2VJbnQodmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEQvZywnJykpO1xuICAgICAgICAgICAgZmluYW5jaWFsVmFsID0gdmFsSW5XaG9sZU51bSAqICB0aGlzLnN0ZXA7XG4gICAgICAgIH1cblxuICAgICAgICAgICBpZiAoIWlzTmFOKGZpbmFuY2lhbFZhbCkpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gdXBkYXRlIG9uIGtleSBpcyBzZXQga2V5cHJlc3MsIHVwZGF0ZSB0aGUgZGF0YXZhbHVlIGVsc2UgdXBkYXRlIG9ubHkgdGhlIGRpc3BsYXkgdmFsdWVcbiAgICAgICAgICAgIGlmICh0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gcGFyc2VGbG9hdChmaW5hbmNpYWxWYWwudG9GaXhlZChzdGVwVmFsKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGZpbmFuY2lhbFZhbC50b0ZpeGVkKHN0ZXBWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubmdNb2RlbE9wdGlvbnMudXBkYXRlT24gIT09ICdibHVyJykge1xuICAgICAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIElucHV0IG1vZGUgaXMgZmluYW5jaWFsIGFuZCB0cmFpbGluZyB6ZXJvIGlzIHNldCB0byBmYWxzZSwgT24gZm9jdXMgc2V0IGRpc3BsYXkgdmFsIHRvIGZpeGVkIHBvaW50IG5vdGF0aW9uIGFuZCBPbiBibHVyIHN0cmlwIHRyYWlsaW5nIHplcm9zXG4gICAgLy8gSW4gY3VycmVuY3ksIGlucHV0bW9kZSBpcyBuYXR1cmFsIGFuZCB0cmFpbGluZyB6ZXJvIGFuZCBzdGVwIGFyZSBkZWZpbmVkLCBvbiBibHVyIGRpc3BsYXkgdmFsIHRvIGZpeGVkIHBvaW50IG5vdGF0aW9uIGFuZCBvbiBmb2N1cyBzdHJpcCB0aGUgemVyb3NcbiAgICBwdWJsaWMgY2hlY2tGb3JUcmFpbGluZ1plcm9zKCRldmVudCkge1xuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGZpbmFuY2lhbE1vZGUgPSAhdGhpcy50cmFpbGluZ3plcm8gJiYgdGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUw7XG5cbiAgICAgICAgLy8gSWYgdGhlIHVzZXIncyBsYXN0IGlucHV0IGlzIGEgZGVjaW1hbCBhbmQgbm90IGFjdGl2ZSBvbiBpbnB1dCBmaWVsZCwgdGhyb3cgZXJyb3JcbiAgICAgICAgaWYgKHRoaXMubGFzdFZhbElzRGVjaW1hbCkge1xuICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZpbmFuY2lhbE1vZGUgJiYgIXRoaXMuaXNOYXR1cmFsQ3VycmVuY3koKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwVmFsICYmIHRoaXMuZGF0YXZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyZmlsdGVyO1xuICAgICAgICAgICAgaWYgKChmaW5hbmNpYWxNb2RlICYmICRldmVudC50eXBlID09PSAnZm9jdXMnKSB8fCAodGhpcy5pc05hdHVyYWxDdXJyZW5jeSgpICYmICRldmVudC50eXBlID09PSAnYmx1cicpKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyZmlsdGVyID0gYDEuJHtzdGVwVmFsfS0ke3N0ZXBWYWx9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5kYXRhdmFsdWUsIG51bWJlcmZpbHRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgYSBudW1iZXIgaGF2ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWU6IG51bWJlclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBjb3VudERlY2ltYWxzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udmVydCB0byBudW1iZXIgYW5kIGhhbmRsZSBzY2llbnRpZmljIG5vdGF0aW9uXG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSkgcmV0dXJuIDA7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBleHBvbmVudGlhbCBmb3JtIHRvIGhhbmRsZSBzY2llbnRpZmljIG5vdGF0aW9uIHByb3Blcmx5XG4gICAgICAgIGNvbnN0IGV4cG9uZW50aWFsU3RyID0gbnVtLnRvRXhwb25lbnRpYWwoKTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBleHBvbmVudGlhbFN0ci5tYXRjaCgvXi0/XFxkKlxcLj8oXFxkKyk/ZShbKy1dXFxkKykkLyk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IG1hdGNoWzFdID8gbWF0Y2hbMV0ubGVuZ3RoIDogMDtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9uZW50ID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGRlY2ltYWxzIC0gZXhwb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gcmVndWxhciBkZWNpbWFsIGNvdW50aW5nXG4gICAgICAgIGNvbnN0IGRlY2ltYWxTdHIgPSBudW0udG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgaXNMb2NhbGl6ZWROdW1iZXIgPSBpbmNsdWRlcyhkZWNpbWFsU3RyLCB0aGlzLkRFQ0lNQUwpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGlzTG9jYWxpemVkTnVtYmVyID8gZGVjaW1hbFN0ci5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogZGVjaW1hbFN0ci5zcGxpdCgnLicpO1xuICAgICAgICByZXR1cm4gcGFydHNbMV0gPyBwYXJ0c1sxXS5sZW5ndGggOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGhhbmRsZXMgdGhlIGFycm93IHByZXNzIGV2ZW50LiBJbmNyZWFzZXMgb3IgZGVjcmVhc2VzIHRoZSBudW1iZXIuIHRyaWdnZXJlZCBmb20gdGhlIHRlbXBsYXRlXG4gICAgICogQHBhcmFtICRldmVudCBrZXlib2FyZCBldmVudC5cbiAgICAgKiBAcGFyYW0ga2V5IGlkZW50aWZpZXIgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIG51bWJlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BcnJvd1ByZXNzKCRldmVudCwga2V5KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLnN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXRWYWwgPSAkZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoLywvZywgJycpO1xuXG4gICAgICAgIC8vIHByb3h5TW9kZWwgdG8gYmUgdXBkYXRlZCBmcm9tICRldmVudC50YXJnZXQudmFsdWUgaWYgcHJlc2VudCB0byBzdXBwb3J0IGFycm93IGtleXMgd2hlbiBpbnB1dCBjaGFuZ2VzIGVsc2UgcGljayB1cCBmcm9tIHRoaXMucHJveHltb2RlbFxuICAgICAgICBsZXQgcHJveHlNb2RlbDtcbiAgICAgICAgaWYgKHRhcmdldFZhbCAmJiAhaXNOYU4ocGFyc2VGbG9hdCh0YXJnZXRWYWwpKSkge1xuICAgICAgICAgICAgcHJveHlNb2RlbCA9IHBhcnNlRmxvYXQodGFyZ2V0VmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3h5TW9kZWwgPSB0aGlzLnByb3h5TW9kZWw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyBub3QgaW4gcmFuZ2UgYW5kIHdoZW4gYXJyb3cgYnV0dG9ucyBhcmUgcHJlc3NlZCBuZWVkIHRvIGdldCBhcHByb3ByaWF0ZSBudW1iZXIgdmFsdWUuXG4gICAgICAgIGlmICh0aGlzLm51bWJlck5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLnBhcnNlTnVtYmVyKHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIC8vIHRha2UgdGhlIHRleHRib3ggdmFsdWUgYXMgY3VycmVudCBtb2RlbCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGlucHV0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFZhbHVlSW5SYW5nZShpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICBwcm94eU1vZGVsID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwcm94eU1vZGVsKSB8fCBpc051bGwocHJveHlNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICBwcm94eU1vZGVsID0gdmFsdWUgPSB0aGlzLmdldFZhbHVlSW5SYW5nZSgodGhpcy5taW52YWx1ZSB8fCAwKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UocHJveHlNb2RlbCArIChrZXkgPT09ICdVUCcgPyB0aGlzLnN0ZXAgOiAtdGhpcy5zdGVwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChrZXkgPT09ICdVUCcgJiYgcHJveHlNb2RlbCA8PSB2YWx1ZSkgfHwgKGtleSA9PT0gJ0RPV04nICYmIHByb3h5TW9kZWwgPj0gdmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFsUm91bmRWYWx1ZSA9IE1hdGgubWF4KHRoaXMuY291bnREZWNpbWFscyhwcm94eU1vZGVsKSwgdGhpcy5jb3VudERlY2ltYWxzKHRoaXMuc3RlcCkpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIG1vZGVsUHJveHkuXG4gICAgICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSByb3VuZCh2YWx1ZSwgZGVjaW1hbFJvdW5kVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dCgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5wcm94eU1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB0aGUgZnJvbSB3aWRnZXQuIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHZhbHVlIGVudGVyZWQgaXMgdmFsaWQgb3Igbm90LlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCkge1xuICAgICAgICBpZiAodGhpcy5pc0ludmFsaWROdW1iZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJyc7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGludmFsaWROdW1iZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubnVtYmVyTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBudW1iZXJOb3RJblJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuaW52YWxpZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjoge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJyc7XG4gICAgICAgIC8qIFdNUy0xODI2OSB8IEV4dGVuZGluZyB0aGUgZXhpc3RpbmcgdmFsaWRhdGlvbiBmb3IgJ3JlcXVpcmVkJyAqL1xuICAgICAgICBpZiAodGhpc1snc2hvdyddICYmIHRoaXNbJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgICAgIHJldHVybiAoISFjLnZhbHVlIHx8IGMudmFsdWUgPT09IDApID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGVJbnB1dEVudHJ5KCRldmVudCkge1xuXG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UXVlcnkgPSBmYWxzZTtcblxuICAgICAgICAvLyBhbGxvdyBhY3Rpb25zIGlmIGNvbnRyb2wga2V5IGlzIHByZXNzZWQgb3IgaWYgYmFja3NwYWNlIGlzIHByZXNzZWQuIChmb3IgTW96aWxsYSkuXG4gICAgICAgIGlmICgkZXZlbnQuY3RybEtleSB8fCBpbmNsdWRlcyhbJ0JhY2tzcGFjZScsICdBcnJvd1JpZ2h0JywgJ0Fycm93TGVmdCcsICdUYWInLCAnRW50ZXInLCAnRGVsZXRlJ10sICRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGl0eSA9IG5ldyBSZWdFeHAoYF5bXFxcXGRcXFxccy0sLmUrJHt0aGlzLkdST1VQfSR7dGhpcy5ERUNJTUFMfV0kYCwgJ2knKTtcbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9ICRldmVudC50YXJnZXQ/LnZhbHVlfHxcIlwiO1xuXG4gICAgICAgIC8vIHdoZW4gaW5wdXQgbW9kZSBpcyBmaW5hbmNpYWwsIGRvIG5vdCByZXN0cmljdCB1c2VyIG9uIGVudGVyaW5nIHRoZSB2YWx1ZSB3aGVuIHN0ZXAgdmFsdWUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICAgICAgY29uc3Qgc2tpcFN0ZXBWYWxpZGF0aW9uID0gdGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUw7XG5cbiAgICAgICAgLy8gVmFsaWRhdGVzIGlmIHVzZXIgZW5ldGVycyBtb3JlIHRoYW4gMTYgZGlnaXRzXG4gICAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWwgPSAgcGFyc2VJbnQoaW5wdXRWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcRC9nLCcnKSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVmFsLnRvU3RyaW5nKCkubGVuZ3RoID4gMTUpIHtcbiAgICAgICAgICAgICAgICAvLyBXTVMtMjIzMjE6IElmIHRoZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIE1BWF9TQUZFX0lOVEVHRVIgKG1vcmUgdGhhbiAxNSBudW1iZXJzKS5cbiAgICAgICAgICAgICAgICAvLyB1c2VyIHNlbGVjdHMgYSByYW5nZSBvZiBkaWdpdHMgYW5kIHByZXNzZXMgYSBrZXkuXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IHRocm93IHZhbGlkYXRpb24gb2YgZXhjZWVkZWQgbnVtYmVyIGFzIHNlbGVjdGVkIHJhbmdlIHZhbHVlIHdpbGwgYmUgZGVsZXRlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWwgJiYgc2VsZWN0ZWRWYWwudG9TdHJpbmcoKSAmJiBzZWxlY3RlZFZhbC5mb2N1c05vZGUgPT09IHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWRhdGVzIGVudGVyaW5nIG9mIGRlY2ltYWwgdmFsdWVzIG9ubHkgd2hlbiB1c2VyIHByb3ZpZGVzIGRlY2ltYWwgbGltaXQoaS5lIHN0ZXAgY29udGFpbnMgZGVjaW1hbCB2YWx1ZXMpLlxuICAgICAgICAvLyBSZXN0cmljdCB1c2VyIGZyb20gZW50ZXJpbmcgb25seSBpZiB0aGUgZGVjaW1hbCBsaW1pdCBpcyByZWFjaGVkIGFuZCB0aGUgbmV3IGRpZ2l0IGlzIGVudGVyZWQgaW4gZGVjaW1hbCBwbGFjZVxuICAgICAgICAvLyBpZiAoIXNraXBTdGVwVmFsaWRhdGlvbiAmJiBpbnB1dFZhbHVlICYmIHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApICYmICh0aGlzLmNvdW50RGVjaW1hbHMoaW5wdXRWYWx1ZSkgPj0gdGhpcy5jb3VudERlY2ltYWxzKHRoaXMuc3RlcCkpICYmICRldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgPj0gaW5wdXRWYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gdmFsaWRhdGVzIGlmIHVzZXIgZW50ZXJlZCBhbiBpbnZhbGlkIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKCF2YWxpZGl0eS50ZXN0KCRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgIWlzTmFOKHRoaXMuZGVjaW1hbHBsYWNlcykpIHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVjaW1hbHBsYWNlcyA9PT0gMCAmJiB0aGlzLkRFQ0lNQUwgPT09ICRldmVudC5rZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGluY2x1ZGVzKGlucHV0VmFsdWUsIHRoaXMuREVDSU1BTCkgPyAoaW5wdXRWYWx1ZSBhcyBhbnkpLnNwbGl0KHRoaXMuREVDSU1BTCkgOiBpbnB1dFZhbHVlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBjb25zdCBpc0N1cnNvclBvc2l0aW9uQXREZWNpbWFsUGxhY2UgPSAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID4gcGFydHNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgaWYodGhpcy5kZWNpbWFscGxhY2VzID4gMCAmJiB0aGlzLmNvdW50RGVjaW1hbHMoaW5wdXRWYWx1ZSkgPj0gdGhpcy5kZWNpbWFscGxhY2VzICYmIGlzQ3Vyc29yUG9zaXRpb25BdERlY2ltYWxQbGFjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbW1hIGNhbm5vdCBiZSBlbnRlcmVkIGNvbnNlY3V0aXZlbHlcbiAgICAgICAgaWYgKGluY2x1ZGVzKGlucHV0VmFsdWUsICcsJykgJiYgaW5wdXRWYWx1ZVtpbnB1dFZhbHVlLmxlbmd0aCAtIDFdID09PSAnLCcgJiYgJGV2ZW50LmtleSA9PT0gJywnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhIGRlY2ltYWwgdmFsdWUgY2FuIGJlIGVudGVyZWQgb25seSBvbmNlIGluIHRoZSBpbnB1dC5cbiAgICAgICAgaWYgKGluY2x1ZGVzKGlucHV0VmFsdWUsIHRoaXMuREVDSU1BTCkgJiYgJGV2ZW50LmtleSA9PT0gdGhpcy5ERUNJTUFMKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gJ2UnIGNhbiBiZSBlbnRlcmVkIG9ubHkgb25jZSBpbiB0aGUgaW5wdXQuXG4gICAgICAgIGlmIChpbnRlcnNlY3Rpb24odG9BcnJheShpbnB1dFZhbHVlKSwgWydlJywgJ0UnXSkubGVuZ3RoICYmIGluY2x1ZGVzKCdlRScsICRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChpbmNsdWRlcyhpbnB1dFZhbHVlLCAnKycpIHx8IGluY2x1ZGVzKGlucHV0VmFsdWUsICctJykpICYmICgkZXZlbnQua2V5ID09PSAnKycgfHwgJGV2ZW50LmtleSA9PT0gJy0nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvIG5vdCBhbGxvdyB1c2VyIHRvIGVudGVyIG9ubHkgc3BhY2Ugd2l0aG91dCBhbnkgaW5wdXQgdmFsdWVcbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlICYmICRldmVudC5jb2RlID09PSAnU3BhY2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25CYWNrc3BhY2UoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UXVlcnkgPSBmYWxzZTtcbiAgICB9XG4gICAgb25EZWxldGUoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UXVlcnkgPSBmYWxzZTtcbiAgICB9XG4gICAgb25FbnRlcigkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgfHwgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHRoaXMubmdNb2RlbE9wdGlvbnMudXBkYXRlT24gPT09ICdibHVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gJGV2ZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ21pbnZhbHVlJyB8fCBrZXkgPT09ICdtYXh2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZChudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGF0YXZhbHVlJyAmJiAhb3YpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yVHJhaWxpbmdaZXJvcyh7dHlwZTogJ2JsdXInfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZShudik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZihrZXkgPT09ICdyZWdleHAnKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4UGF0dGVybiA9IG52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIG9uUGFzdGUoJGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBwYXN0ZWREYXRhID0gJGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hhciBvZiBwYXN0ZWREYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBtb2NrRXZlbnQgPSBuZXcgS2V5Ym9hcmRFdmVudCgna2V5cHJlc3MnLCB7IGtleTogY2hhciB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRlSW5wdXRFbnRyeShtb2NrRXZlbnQpPT09ZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==