ng-tailwind 4.2.26 → 4.2.28

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 (91) hide show
  1. package/components/ngt-modal/ngt-modal.component.d.ts +2 -0
  2. package/esm2020/components/ngt-action/ngt-action.component.mjs +3 -3
  3. package/esm2020/components/ngt-action/ngt-action.module.mjs +4 -4
  4. package/esm2020/components/ngt-button/ngt-button.component.mjs +3 -3
  5. package/esm2020/components/ngt-button/ngt-button.module.mjs +4 -4
  6. package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +3 -3
  7. package/esm2020/components/ngt-checkbox/ngt-checkbox.module.mjs +4 -4
  8. package/esm2020/components/ngt-content/ngt-content.component.mjs +3 -3
  9. package/esm2020/components/ngt-content/ngt-content.module.mjs +4 -4
  10. package/esm2020/components/ngt-context-menu/ngt-context-menu.component.mjs +3 -3
  11. package/esm2020/components/ngt-context-menu/ngt-context-menu.directive.mjs +3 -3
  12. package/esm2020/components/ngt-context-menu/ngt-context-menu.module.mjs +4 -4
  13. package/esm2020/components/ngt-datatable/ngt-datatable.component.mjs +3 -3
  14. package/esm2020/components/ngt-datatable/ngt-datatable.module.mjs +4 -4
  15. package/esm2020/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +3 -3
  16. package/esm2020/components/ngt-datatable/ngt-td/ngt-td.component.mjs +3 -3
  17. package/esm2020/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +3 -3
  18. package/esm2020/components/ngt-datatable/ngt-th/ngt-th.component.mjs +3 -3
  19. package/esm2020/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +3 -3
  20. package/esm2020/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +3 -3
  21. package/esm2020/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +3 -3
  22. package/esm2020/components/ngt-date/ngt-date.component.mjs +3 -3
  23. package/esm2020/components/ngt-date/ngt-date.module.mjs +4 -4
  24. package/esm2020/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +3 -3
  25. package/esm2020/components/ngt-dropdown/ngt-dropdown.component.mjs +3 -3
  26. package/esm2020/components/ngt-dropdown/ngt-dropdown.module.mjs +4 -4
  27. package/esm2020/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +3 -3
  28. package/esm2020/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +3 -3
  29. package/esm2020/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +3 -3
  30. package/esm2020/components/ngt-dropzone/ngt-dropzone.component.mjs +5 -4
  31. package/esm2020/components/ngt-dropzone/ngt-dropzone.module.mjs +4 -4
  32. package/esm2020/components/ngt-floating-button/ngt-floating-button.component.mjs +3 -3
  33. package/esm2020/components/ngt-floating-button/ngt-floating-button.module.mjs +4 -4
  34. package/esm2020/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +3 -3
  35. package/esm2020/components/ngt-form/ngt-form.component.mjs +3 -3
  36. package/esm2020/components/ngt-form/ngt-form.module.mjs +4 -4
  37. package/esm2020/components/ngt-header-nav/ngt-header-nav.component.mjs +3 -3
  38. package/esm2020/components/ngt-header-nav/ngt-header-nav.module.mjs +4 -4
  39. package/esm2020/components/ngt-helper/ngt-helper.component.mjs +3 -3
  40. package/esm2020/components/ngt-helper/ngt-helper.module.mjs +4 -4
  41. package/esm2020/components/ngt-input/ngt-input.component.mjs +7 -4
  42. package/esm2020/components/ngt-input/ngt-input.module.mjs +4 -4
  43. package/esm2020/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +3 -3
  44. package/esm2020/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +3 -3
  45. package/esm2020/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +3 -3
  46. package/esm2020/components/ngt-modal/ngt-modal.component.mjs +13 -6
  47. package/esm2020/components/ngt-modal/ngt-modal.module.mjs +4 -4
  48. package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +3 -3
  49. package/esm2020/components/ngt-multi-select/ngt-multi-select.module.mjs +4 -4
  50. package/esm2020/components/ngt-pagination/ngt-pagination.component.mjs +3 -3
  51. package/esm2020/components/ngt-pagination/ngt-pagination.module.mjs +4 -4
  52. package/esm2020/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +3 -3
  53. package/esm2020/components/ngt-popover/ngt-popover.component.mjs +3 -3
  54. package/esm2020/components/ngt-popover/ngt-popover.directive.mjs +3 -3
  55. package/esm2020/components/ngt-popover/ngt-popover.module.mjs +4 -4
  56. package/esm2020/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +3 -3
  57. package/esm2020/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +3 -3
  58. package/esm2020/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +3 -3
  59. package/esm2020/components/ngt-portlet/ngt-portlet.component.mjs +3 -3
  60. package/esm2020/components/ngt-portlet/ngt-portlet.module.mjs +4 -4
  61. package/esm2020/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +3 -3
  62. package/esm2020/components/ngt-radio-button/ngt-radio-button.component.mjs +3 -3
  63. package/esm2020/components/ngt-radio-button/ngt-radio-button.module.mjs +4 -4
  64. package/esm2020/components/ngt-section/ngt-section.component.mjs +3 -3
  65. package/esm2020/components/ngt-section/ngt-section.module.mjs +4 -4
  66. package/esm2020/components/ngt-select/ngt-select.component.mjs +10 -8
  67. package/esm2020/components/ngt-select/ngt-select.directive.mjs +9 -9
  68. package/esm2020/components/ngt-select/ngt-select.module.mjs +4 -4
  69. package/esm2020/components/ngt-shining/ngt-shining.component.mjs +3 -3
  70. package/esm2020/components/ngt-shining/ngt-shining.module.mjs +4 -4
  71. package/esm2020/components/ngt-sidenav/ngt-sidenav.component.mjs +3 -3
  72. package/esm2020/components/ngt-sidenav/ngt-sidenav.module.mjs +4 -4
  73. package/esm2020/components/ngt-slider/ngt-slider.component.mjs +3 -3
  74. package/esm2020/components/ngt-slider/ngt-slider.module.mjs +4 -4
  75. package/esm2020/components/ngt-svg/ngt-svg.component.mjs +3 -3
  76. package/esm2020/components/ngt-svg/ngt-svg.module.mjs +4 -4
  77. package/esm2020/components/ngt-tag/ngt-tag.component.mjs +3 -3
  78. package/esm2020/components/ngt-tag/ngt-tag.module.mjs +4 -4
  79. package/esm2020/components/ngt-textarea/ngt-textarea.component.mjs +3 -3
  80. package/esm2020/components/ngt-textarea/ngt-textarea.module.mjs +4 -4
  81. package/esm2020/components/ngt-validation/ngt-validation.component.mjs +3 -3
  82. package/esm2020/components/ngt-validation/ngt-validation.module.mjs +4 -4
  83. package/esm2020/directives/ngt-stylizable/ngt-stylizable.directive.mjs +3 -3
  84. package/esm2020/directives/ngt-stylizable/ngt-stylizable.module.mjs +4 -4
  85. package/esm2020/helpers/input-mask/input-mask.helper.mjs +2 -1
  86. package/fesm2015/ng-tailwind.mjs +305 -291
  87. package/fesm2015/ng-tailwind.mjs.map +1 -1
  88. package/fesm2020/ng-tailwind.mjs +304 -290
  89. package/fesm2020/ng-tailwind.mjs.map +1 -1
  90. package/helpers/input-mask/input-mask.helper.d.ts +1 -0
  91. package/package.json +1 -1
@@ -316,6 +316,9 @@ export class NgtInputComponent extends NgtBaseNgModel {
316
316
  min: this.validateMinValueOnMask ? this.minValue : undefined,
317
317
  rightAlign: false
318
318
  },
319
+ [InputMaskEnum.NUMERIC_STRING]: {
320
+ regex: "[0-9]*",
321
+ },
319
322
  [InputMaskEnum.TIME]: '99:99',
320
323
  };
321
324
  if (this.mask == InputMaskEnum.DECIMAL) {
@@ -636,13 +639,13 @@ export class NgtInputComponent extends NgtBaseNgModel {
636
639
  this.subscriptions = [];
637
640
  }
638
641
  }
639
- NgtInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtInputComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i0.Renderer2 }, { token: i4.NgtHttpValidationService, optional: true, skipSelf: true }, { token: i5.NgtHttpResourceService, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i6.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
640
- NgtInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtInputComponent, selector: "ngt-input", inputs: { label: "label", placeholder: "placeholder", shining: "shining", loading: "loading", helpTitle: "helpTitle", helpTextColor: "helpTextColor", helpText: "helpText", innerLeftIcon: "innerLeftIcon", innerLeftIconColor: "innerLeftIconColor", innerRightIcon: "innerRightIcon", innerRightIconColor: "innerRightIconColor", decimalMaskPrecision: "decimalMaskPrecision", showCharactersLength: "showCharactersLength", uppercase: "uppercase", isDisabled: "isDisabled", isReadonly: "isReadonly", showRoundedIcon: "showRoundedIcon", type: "type", name: "name", mask: "mask", focus: "focus", allowClear: "allowClear", jit: "jit", findExistingResource: "findExistingResource", allowPhoneValidation: "allowPhoneValidation", validatePassword: "validatePassword", passwordableId: "passwordableId", passwordPolicyId: "passwordPolicyId", isRequired: "isRequired", uniqueResource: "uniqueResource", minValue: "minValue", maxValue: "maxValue", maxLength: "maxLength", minLength: "minLength", match: "match", multipleOf: "multipleOf", validateMinValueOnMask: "validateMinValueOnMask", externalServerDependency: "externalServerDependency", helperReverseYPosition: "helperReverseYPosition", helperAutoXReverse: "helperAutoXReverse" }, outputs: { onClickLeftIcon: "onClickLeftIcon", onClickRightIcon: "onClickRightIcon", validatePhoneResult: "validatePhoneResult" }, providers: [
642
+ NgtInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtInputComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i0.Renderer2 }, { token: i4.NgtHttpValidationService, optional: true, skipSelf: true }, { token: i5.NgtHttpResourceService, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i6.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
643
+ NgtInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtInputComponent, selector: "ngt-input", inputs: { label: "label", placeholder: "placeholder", shining: "shining", loading: "loading", helpTitle: "helpTitle", helpTextColor: "helpTextColor", helpText: "helpText", innerLeftIcon: "innerLeftIcon", innerLeftIconColor: "innerLeftIconColor", innerRightIcon: "innerRightIcon", innerRightIconColor: "innerRightIconColor", decimalMaskPrecision: "decimalMaskPrecision", showCharactersLength: "showCharactersLength", uppercase: "uppercase", isDisabled: "isDisabled", isReadonly: "isReadonly", showRoundedIcon: "showRoundedIcon", type: "type", name: "name", mask: "mask", focus: "focus", allowClear: "allowClear", jit: "jit", findExistingResource: "findExistingResource", allowPhoneValidation: "allowPhoneValidation", validatePassword: "validatePassword", passwordableId: "passwordableId", passwordPolicyId: "passwordPolicyId", isRequired: "isRequired", uniqueResource: "uniqueResource", minValue: "minValue", maxValue: "maxValue", maxLength: "maxLength", minLength: "minLength", match: "match", multipleOf: "multipleOf", validateMinValueOnMask: "validateMinValueOnMask", externalServerDependency: "externalServerDependency", helperReverseYPosition: "helperReverseYPosition", helperAutoXReverse: "helperAutoXReverse" }, outputs: { onClickLeftIcon: "onClickLeftIcon", onClickRightIcon: "onClickRightIcon", validatePhoneResult: "validatePhoneResult" }, providers: [
641
644
  NgtMakeProvider(NgtInputComponent),
642
645
  ], viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" class=\"mb-2 flex {{ ngtStyle.compile(['color.text', 'text', 'fontCase']) }}\" [hidden]='shining'>\n {{ label }}:\n\n <span *ngIf=\"isRequired\" class=\"text-red-500 font-bold text-md ml-1\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n <span [innerHtml]=\"helpText\"></span>\n </ngt-helper>\n</label>\n\n<div class=\"{{ shining ? 'hidden' : 'flex relative'}}\">\n <input autocomplete=\"new-password\"\n class=\"flex border appearance-none focus:outline-none leading-tight w-full {{ getInputPaddings() }} {{ ngtStyle.compile(['h', 'text', 'color.border', 'color.bg', 'color.text', 'rounded', 'cursor']) }}\"\n [disabled]=\"isDisabled\" [readonly]=\"isReadonly || loading\" [placeholder]=\"placeholder\"\n [style]=\"uppercase ? 'text-transform: uppercase!important':''\"\n [ngClass]=\"{'input-has-error border-red-700': formControl?.errors && (formControl?.dirty || (formContainer && formContainer['submitted']))}\"\n [attr.type]=\"inputProperties.htmlType\" #element>\n <span *ngIf=\"innerLeftIcon\"\n class=\"absolute self-center px-2 {{ innerLeftIconColor }} {{ onClickLeftIcon ? 'cursor-pointer' : '' }}\"\n (click)=\"onClickLeftIcon.emit()\">\n\n <ngt-svg *ngIf=\"!showRoundedIcon\" class=\"fill-current\" [src]='innerLeftIcon'></ngt-svg>\n <img *ngIf=\"showRoundedIcon\" class=\"rounded-full h-6\" [src]='innerLeftIcon'>\n </span>\n\n <div class=\"flex absolute h-full justify-end right-0 w-auto\">\n <span *ngIf=\"allowClear && value && !loading\" class=\"self-center right-0 px-2 text-red-400 cursor-pointer\"\n (click)='clearInput($event)'>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </span>\n\n <span *ngIf=\"loading\" class=\"self-center right-0 px-2 text-gray-500\">\n <div class=\"div-loader\"></div>\n </span>\n\n <span *ngIf=\"type == 'password' && value\" class=\"self-center px-2 cursor-pointer\">\n <svg *ngIf=\"element.type == 'password'\" class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\" (click)='showPassword()'>\n <path\n d=\"M.2 10a11 11 0 0 1 19.6 0A11 11 0 0 1 .2 10zm9.8 4a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0-2a2 2 0 1 1 0-4 2 2 0 0 1 0 4z\" />\n </svg>\n\n <svg *ngIf=\"element.type == 'text'\" class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\" (click)='hidePassword()'>\n <path\n d=\"M12.81 4.36l-1.77 1.78a4 4 0 0 0-4.9 4.9l-2.76 2.75C2.06 12.79.96 11.49.2 10a11 11 0 0 1 12.6-5.64zm3.8 1.85c1.33 1 2.43 2.3 3.2 3.79a11 11 0 0 1-12.62 5.64l1.77-1.78a4 4 0 0 0 4.9-4.9l2.76-2.75zm-.25-3.99l1.42 1.42L3.64 17.78l-1.42-1.42L16.36 2.22z\" />\n </svg>\n </span>\n\n <span *ngIf=\"innerRightIcon && type != 'password'\"\n class=\"self-center px-2 {{ innerRightIconColor }} {{ onClickRightIcon ? 'cursor-pointer' : '' }}\"\n (click)=\"onClickRightIcon.emit()\">\n <ngt-svg class=\"fill-current\" [src]='innerRightIcon'></ngt-svg>\n </span>\n </div>\n</div>\n\n<ng-container *ngIf=\"showCharactersLength && maxTotalCharsCount && !shining\">\n <p class=\"text-xs mt-1\">\n {{ ngtTranslateService.ngtTextAreaRemainingCharacters }}:\n <span class=\"font-semibold\">{{ getRemainingCharacters() }}</span>\n </p>\n</ng-container>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<input *ngIf='componentReady' type=\"hidden\" [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n\n<ng-content></ng-content>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\" [minValue]='minValue' [minLength]='minLength'>\n</ngt-validation>", styles: [".div-loader{width:20px;height:20px;border:3px solid #a0aec038;border-top-color:#a0aec0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i9.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i10.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "component", type: i11.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }], viewProviders: [
643
646
  { provide: ControlContainer, useExisting: NgForm }
644
647
  ] });
645
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtInputComponent, decorators: [{
648
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtInputComponent, decorators: [{
646
649
  type: Component,
647
650
  args: [{ selector: 'ngt-input', providers: [
648
651
  NgtMakeProvider(NgtInputComponent),
@@ -761,4 +764,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
761
764
  }], validatePhoneResult: [{
762
765
  type: Output
763
766
  }] } });
764
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1pbnB1dC9uZ3QtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWlucHV0L25ndC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sSUFBSSxFQUVKLFFBQVEsRUFDUixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVE1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWM1RixNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQXNFakQsWUFDWSxRQUFrQixFQUNFLHNCQUE4QyxFQUVuRSxhQUErQixFQUU5QixnQkFBa0MsRUFDbEMsUUFBbUIsRUFFbkIsb0JBQThDLEVBRTlDLGtCQUEwQyxFQUMxQyxjQUFpQyxFQUVsQyxtQkFBd0M7UUFFL0MsS0FBSyxFQUFFLENBQUM7UUFmQSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ0UsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUVuRSxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFFOUIscUJBQWdCLEdB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LElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxHQUFHO3NCQUFsQixLQUFLO2dCQUdVLG9CQUFvQjtzQkFBbkMsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBQ1Usd0JBQXdCO3NCQUF2QyxLQUFLO2dCQUNVLHNCQUFzQjtzQkFBckMsS0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBRVcsZUFBZTtzQkFBL0IsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsbUJBQW1CO3NCQUFuQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIENvbnRyb2xDb250YWluZXIsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RCYXNlTmdNb2RlbCwgTmd0TWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYmFzZS9uZ3QtYmFzZS1uZy1tb2RlbCc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgYXBwbHlJbnB1dE1hc2ssIElucHV0TWFza0VudW0sIHJlbW92ZUlucHV0TWFzayB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5wdXQtbWFzay9pbnB1dC1tYXNrLmhlbHBlcic7XG5pbXBvcnQge1xuICAgIE5ndEh0dHBGaW5kRXhpc3RpbmdSZXNvdXJjZUludGVyZmFjZSxcbiAgICBOZ3RIdHRwRmluZEV4aXN0aW5nUmVzb3VyY2VSZXNwb25zZSxcbiAgICBOZ3RIdHRwUmVzb3VyY2VTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSwgTmd0SHR0cFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtaHR0cC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0VHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3QtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1pbnB1dC5jb21wb25lbnQuY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIE5ndE1ha2VQcm92aWRlcihOZ3RJbnB1dENvbXBvbmVudCksXG4gICAgXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RJbnB1dENvbXBvbmVudCBleHRlbmRzIE5ndEJhc2VOZ01vZGVsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoXCJlbGVtZW50XCIsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLy8gVmlzdWFsXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlubmVyTGVmdEljb246IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5uZXJMZWZ0SWNvbkNvbG9yOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlubmVyUmlnaHRJY29uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlubmVyUmlnaHRJY29uQ29sb3I6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgZGVjaW1hbE1hc2tQcmVjaXNpb246IG51bWJlciA9IDI7XG4gICAgQElucHV0KCkgcHVibGljIHNob3dDaGFyYWN0ZXJzTGVuZ3RoOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIHVwcGVyY2FzZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy9CZWhhdmlvclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc1JlYWRvbmx5OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Um91bmRlZEljb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHR5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXNrOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd0NsZWFyOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBqaXQ6IGJvb2xlYW47XG5cbiAgICAvL1ZhbGlkYXRpb25zXG4gICAgQElucHV0KCkgcHVibGljIGZpbmRFeGlzdGluZ1Jlc291cmNlOiBOZ3RIdHRwRmluZEV4aXN0aW5nUmVzb3VyY2VJbnRlcmZhY2U7XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93UGhvbmVWYWxpZGF0aW9uOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0ZVBhc3N3b3JkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwYXNzd29yZGFibGVJZDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwYXNzd29yZFBvbGljeUlkOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHVuaXF1ZVJlc291cmNlOiBhbnk7XG4gICAgQElucHV0KCkgcHVibGljIG1pblZhbHVlOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIG1heFZhbHVlOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIG1heExlbmd0aDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtaW5MZW5ndGg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF0Y2g6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVPZjogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0ZU1pblZhbHVlT25NYXNrOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBleHRlcm5hbFNlcnZlckRlcGVuZGVuY3k6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlclJldmVyc2VZUG9zaXRpb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlckF1dG9YUmV2ZXJzZTogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbGlja0xlZnRJY29uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbGlja1JpZ2h0SWNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIHZhbGlkYXRlUGhvbmVSZXN1bHQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwdWJsaWMgbWF4VG90YWxDaGFyc0NvdW50OiBudW1iZXI7XG4gICAgcHVibGljIGV4aXN0aW5nUmVzb3VyY2VJZDogc3RyaW5nO1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeTogYm9vbGVhbjtcbiAgICBwdWJsaWMgaW5wdXRQcm9wZXJ0aWVzOiB7XG4gICAgICAgIGh0bWxUeXBlPzogc3RyaW5nO1xuICAgICAgICBsZW5ndGg/OiBudW1iZXI7XG4gICAgfSA9IHt9O1xuXG4gICAgcHVibGljIG5ndFN0eWxlOiBOZ3RTdHlsaXphYmxlU2VydmljZTtcblxuICAgIHByaXZhdGUgZW1haWxWYWxpZGF0b3JUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSBwYXNzd29yZFZhbGlkYXRvclRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIHBob25lVmFsaWRhdG9yVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgdW5pcXVlVmFsaWRhdG9yVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgc2VhcmNoRXhpc3RpbmdSZXNvdXJjZVRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndEZvcm1Db21wb25lbnQ6IE5ndEZvcm1Db21wb25lbnQsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RWYWxpZGF0aW9uU2VydmljZTogTmd0SHR0cFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFJlc291cmNlU2VydmljZTogTmd0SHR0cFJlc291cmNlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gdGhpcy5uZ3RGb3JtQ29tcG9uZW50LmlzU2hpbmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm1Db21wb25lbnQub25TaGluaW5nQ2hhbmdlLnN1YnNjcmliZSgoc2hpbmluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RJbnB1dCcsIHtcbiAgICAgICAgICAgIGg6ICdoLTEyJyxcbiAgICAgICAgICAgIHJvdW5kZWQ6ICdyb3VuZGVkJyxcbiAgICAgICAgICAgIHRleHQ6ICd0ZXh0LXNtJyxcbiAgICAgICAgICAgIGZvbnRDYXNlOiAnJyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnYm9yZGVyLWdyYXktNDAwIGZvY3VzOmJvcmRlci1ncmF5LTcwMCcsXG4gICAgICAgICAgICAgICAgYmc6ICdiZy1iZy13aGl0ZSBmb2N1czpiZy13aGl0ZScsXG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS04MDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGb2N1cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNGb2N1cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcklucHV0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcblxuICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zZXR1cE1hc2tzKGNoYW5nZXMubWFzayA/IGNoYW5nZXMubWFzay5wcmV2aW91c1ZhbHVlIDogbnVsbCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubWF0Y2ggfHwgY2hhbmdlcy5pc1JlcXVpcmVkIHx8IGNoYW5nZXMudHlwZSB8fCBjaGFuZ2VzLm1hc2sgfHwgY2hhbmdlcy5taW5WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMubWFzayA9PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZ2V0TmF0aXZlVmFsdWUoKSB8fCAodGhpcy52YWxpZGF0ZU1pblZhbHVlT25NYXNrKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5hdGl2ZVZhbHVlID0gdGhpcy5nZXROYXRpdmVWYWx1ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIGxldCBuZ01vZGVsVmFsdWUgPSB0aGlzLnJlbW92ZU1hc2tzKG5hdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKG5hdGl2ZVZhbHVlICYmIG5nTW9kZWxWYWx1ZSAhPSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5DRUxMUEhPTkUgfHwgdGhpcy5tYXNrID09IElucHV0TWFza0VudW0uSU5URVJOQVRJT05BTF9QSE9ORSlcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmFsbG93UGhvbmVWYWxpZGF0aW9uICYmIHRoaXMudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQaG9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5nTW9kZWxWYWx1ZSA9IHRoaXMucmVtb3ZlTWFza3ModmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgbmdNb2RlbFZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgIT0gbmF0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlYWR5KSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0UmVzb3VyY2VTZXJ2aWNlICYmIHRoaXMuZmluZEV4aXN0aW5nUmVzb3VyY2UgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIGVsZW1lbnQgbXVzdCBiZSBpbnNpZGUgYSA8Zm9ybSAjZm9ybT0nbmdGb3JtJz4gdGFnIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdldEVsZW1lbnRUaXRsZSgpIHx8IHRoaXMuZ2V0RWxlbWVudFRpdGxlKCkgPT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnRpdGxlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5wdXRQYWRkaW5ncygpIHtcbiAgICAgICAgbGV0IHBhZGRpbmdDbGFzczogc3RyaW5nID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5uZXJMZWZ0SWNvbikge1xuICAgICAgICAgICAgcGFkZGluZ0NsYXNzICs9ICdwbC04IHByLTQgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhZGRpbmdDbGFzcyArPSAncHgtNCAnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5uZXJSaWdodEljb24gfHwgdGhpcy5hbGxvd0NsZWFyIHx8IHRoaXMudHlwZSA9PSAncGFzc3dvcmQnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd0NsZWFyICYmIHRoaXMudmFsdWUgJiYgKHRoaXMuaW5uZXJSaWdodEljb24gfHwgdGhpcy50eXBlID09ICdwYXNzd29yZCcpKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0NsYXNzICs9ICdwci0xNiAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nQ2xhc3MgKz0gJ3ByLTggJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYWRkaW5nQ2xhc3M7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dQYXNzd29yZCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhpZGVQYXNzd29yZCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmdDaGFyYWN0ZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubWF4VG90YWxDaGFyc0NvdW50IC0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhUb3RhbENoYXJzQ291bnQgLSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWF4VG90YWxDaGFyc0NvdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbCAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB3YXRjaCA9IFwiY2hhbmdlXCI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmppdCkge1xuICAgICAgICAgICAgICAgIHdhdGNoICs9IFwiIGtleXVwIGtleWRvd24ga2V5cHJlc3NcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2F0Y2guc3BsaXQoJyAnKS5mb3JFYWNoKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZXZ0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVWYWx1ZSA9IHRoaXMucmVtb3ZlTWFza3ModGhpcy5nZXROYXRpdmVWYWx1ZSgpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSBuYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5hdGl2ZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID49IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhY2tzcGFjZSBhbmQgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9IDggJiYgZXZlbnQua2V5Q29kZSAhPSA0Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMubWF4VG90YWxDaGFyc0NvdW50ID0gdGhpcy5tYXhMZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5cHJlc3NcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoVmFsaWRhdG9yKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwUHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy50eXBlID09ICdlbWFpbCcpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5MZW5ndGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gJ2NucGotY3BmJyB8fCB0aGlzLm1hc2sgPT0gJ2NucGotY3BmLXJ1dCcgfHwgdGhpcy5tYXNrID09ICdjcGYnKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuY25wakNwZlZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gJ3RpbWUnKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMudGltZVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubWF0Y2hWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubWluVmFsdWVWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZU9mKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubXVsdGlwbGVPZlZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmV4dGVybmFsU2VydmVyRGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmV4dGVybmFsU2VydmVyRGVwZW5kZW5jeVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnVuaXF1ZVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy51bmlxdWVWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ2VtYWlsJyAmJiB0aGlzLmhhc0VtYWlsU2VydmljZVZhbGlkYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuZW1haWxWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ3Bhc3N3b3JkJyAmJiB0aGlzLnZhbGlkYXRlUGFzc3dvcmQgJiYgdGhpcy5oYXNQYXNzd29yZFZhbGlkYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMucGFzc3dvcmRWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cE1hc2tzKHByZXZpb3VzTWFzaz86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5tYXNrICE9IHByZXZpb3VzTWFzayAmJiAhdGhpcy5tYXNrKSB7XG4gICAgICAgICAgICByZW1vdmVJbnB1dE1hc2sodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWFza3MgPSB7XG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5DUEZdOiAnOTk5Ljk5OS45OTktOTknLFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ05QSl06ICc5OS45OTkuOTk5Lzk5OTktOTknLFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ1BGX0NOUEpfUlVUXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnOTk5Ljk5OS45OTktOTknLCAnOTk5OTk5OTk5OTk5JywgJzk5Ljk5OS45OTkvOTk5OS05OSddLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5DUEZfQ05QSl06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJzk5OS45OTkuOTk5LTk5JywgJzk5Ljk5OS45OTkvOTk5OS05OSddLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5ERUNJTUFMXToge1xuICAgICAgICAgICAgICAgIGRpZ2l0czogdGhpcy5kZWNpbWFsTWFza1ByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogJy4nLFxuICAgICAgICAgICAgICAgIHJhZGl4UG9pbnQ6ICcsJyxcbiAgICAgICAgICAgICAgICBhdXRvR3JvdXA6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVwZWF0OiAxNixcbiAgICAgICAgICAgICAgICByaWdodEFsaWduOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtYXg6IHRoaXMubWF4VmFsdWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ0VMTFBIT05FXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnKDk5KSA5OTktOTk5JywgJyg5OSkgOTk5OS05OTk5JywgJyg5OSkgOTk5OTktOTk5OSddLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5JTlRFUk5BVElPTkFMX1BIT05FXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnKzk5OSA5OSA5OTktOTk5JywgJys5OSAoOTkpIDk5OTktOTk5OScsICcrOTkgKDk5KSA5OTk5OS05OTk5JywgJys5OTkgKDk5KSA5OTk5LTk5OTknLCAnKzk5OSAoOTkpIDk5OTk5LTk5OTknXSxcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uUExBVEVdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWydBQUEtOSY5OSddLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5DRVBdOiAnOTk5OTktOTk5JyxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLklOVEVHRVJdOiB7XG4gICAgICAgICAgICAgICAgbWF4OiB0aGlzLm1heFZhbHVlLFxuICAgICAgICAgICAgICAgIG1pbjogdGhpcy52YWxpZGF0ZU1pblZhbHVlT25NYXNrID8gdGhpcy5taW5WYWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByaWdodEFsaWduOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLlRJTUVdOiAnOTk6OTknLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5ERUNJTUFMKSB7XG4gICAgICAgICAgICBhcHBseUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgSW5wdXRNYXNrRW51bS5ERUNJTUFMLCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5JTlRFR0VSKSB7XG4gICAgICAgICAgICBhcHBseUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgSW5wdXRNYXNrRW51bS5JTlRFR0VSLCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5SW5wdXRNYXNrKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBQcm9wZXJ0aWVzKCkge1xuICAgICAgICBsZXQgcHJvcHMgPSB7XG4gICAgICAgICAgICBzaG9ydFRleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAzMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAxMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb25nVGV4dDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDE1MFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4dHJhTG9uZ1RleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAzMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXN0b21UZXh0OiB7XG4gICAgICAgICAgICAgICAgaHRtbFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogdGhpcy5tYXhMZW5ndGhcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAxNTBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbWFpbDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDEwMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgaHRtbFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogOSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy50eXBlIGluIHByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0UHJvcGVydGllcyA9IHByb3BzW3RoaXMudHlwZV07XG4gICAgICAgICAgICB0aGlzLm1heExlbmd0aCA9IHRoaXMuaW5wdXRQcm9wZXJ0aWVzLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlR5cGUgW1wiICsgdGhpcy50eXBlICsgXCJdIGlzIG5vdCBhIHZhbGlkIHRhaWwtZm9ybS1pbnB1dCB0eXBlIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1pblZhbHVlVmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKSA8IHRoaXMubWluVmFsdWUgPyB7ICdtaW5WYWx1ZSc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtdWx0aXBsZU9mVmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNvbnRyb2wudmFsdWUgJSB0aGlzLm11bHRpcGxlT2YgIT09IDApID8geyAnbXVsdGlwbGVPZic6IHRydWUgfSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlcm5hbFNlcnZlckRlcGVuZGVuY3lWYWxpZGF0b3IoKSB7XG4gICAgICAgIC8vIFRPRE86IFZhbGlkYXIgdGVtcG8gZGUgcmVxdWlzacOnw6NvXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiAhY29udHJvbC52YWx1ZSA/IHsgJ2V4dGVybmFsU2VydmVyRGVwZW5kZW5jeSc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0aW1lVmFsaWRhdG9yKCkge1xuICAgICAgICBjb25zdCByZWdleEV4cCA9IG5ldyBSZWdFeHAoJ14oMFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kJyk7XG5cbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2V4RXhwLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ3RpbWUnOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY25wakNwZlZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA8PSAxMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRvckNQRihjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAnY3BmJzogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA9PSAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiB0aGlzLnZhbGlkYXRvckNOUEooY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2NucGonOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWF0Y2hWYWxpZGF0b3IoKSB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSB0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJ21hdGNoJzogdHJ1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtYWlsVmFsaWRhdG9yKCk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW1haWxWYWxpZGF0b3JUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZW1haWxWYWxpZGF0b3JUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWFpbFZhbGlkYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2UuZW1haWxWYWxpZGF0aW9uKHRoaXMudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlOiBOZ3RIdHRwVmFsaWRhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnZhbGlkID8gbnVsbCA6IHsgJ2VtYWlsJzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFzc3dvcmRWYWxpZGF0b3IoKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXNzd29yZFZhbGlkYXRvclRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5wYXNzd29yZFZhbGlkYXRvclRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3JkVmFsaWRhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZS5wYXNzd29yZFZhbGlkYXRpb24odGhpcy52YWx1ZSwgdGhpcy5wYXNzd29yZGFibGVJZCwgdGhpcy5wYXNzd29yZFBvbGljeUlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZTogTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnZhbGlkID8gbnVsbCA6IHsgJ2ludmFsaWRfcGFzc3dvcmQnOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlYXJjaEV4aXN0aW5nUmVzb3VyY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEV4aXN0aW5nUmVzb3VyY2VUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaEV4aXN0aW5nUmVzb3VyY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5maW5kRXhpc3RpbmdSZXNvdXJjZS52YWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMubmd0UmVzb3VyY2VTZXJ2aWNlLmZpbmRFeGlzdGluZyh0aGlzLmZpbmRFeGlzdGluZ1Jlc291cmNlKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZTogTmd0SHR0cEZpbmRFeGlzdGluZ1Jlc291cmNlUmVzcG9uc2UpID0+IHRoaXMuZXhpc3RpbmdSZXNvdXJjZUlkID0gcmVzcG9uc2UuaWQpXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRoaXMuZXhpc3RpbmdSZXNvdXJjZUlkID0gbnVsbClcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVBob25lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5waG9uZVZhbGlkYXRvclRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBob25lVmFsaWRhdG9yVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBob25lVmFsaWRhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZS5waG9uZVZhbGlkYXRpb24odGhpcy52YWx1ZSlcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4gdGhpcy52YWxpZGF0ZVBob25lUmVzdWx0LmVtaXQocmVzcG9uc2UpKVxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bmlxdWVWYWxpZGF0b3IoKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgICAgIGlmICghdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW4gb3JkZXIgdG8gdXNlIHVuaXF1ZSB2YWxpZGF0aW9uIHlvdSBtdXN0IHByb3ZpZGUgYSBpbXBsZW1lbnRhdGlvbiBmb3IgTmd0SHR0cFZhbGlkYXRpb25TZXJ2aWNlIGNsYXNzIVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy51bmlxdWVWYWxpZGF0b3JUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudW5pcXVlVmFsaWRhdG9yVGltZW91dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudW5pcXVlUmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVWYWxpZGF0b3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ndFZhbGlkYXRpb25TZXJ2aWNlLnVuaXF1ZSh0aGlzLnVuaXF1ZVJlc291cmNlLCB0aGlzLnZhbHVlKS50aGVuKChyZXNwb25zZTogTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS52YWxpZCA/IG51bGwgOiB7ICd1bmlxdWUnOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRvckNOUEoodmFsdWUpIHtcbiAgICAgICAgbGV0IGIgPSBbNiwgNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XG5cbiAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxkXS9nLCBcIlwiKSkubGVuZ3RoICE9IDE0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoLzB7MTR9Ly50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG4gPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IG4gKz0gdmFsdWVbaV0gKiBiWysraV0pIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZVsxMl0gIT0gKCgobiAlPSAxMSkgPCAyKSA/IDAgOiAxMSAtIG4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBuID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAxMjsgbiArPSB2YWx1ZVtpXSAqIGJbaSsrXSkge1xuICAgICAgICAgICAgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlWzEzXSAhPSAoKChuICU9IDExKSA8IDIpID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHZhbGlkYXRvckNQRih2YWx1ZSkge1xuICAgICAgICBsZXQgbnVtZXJvcywgZGlnaXRvcywgc29tYSwgaSwgcmVzdWx0YWRvLCBkaWdpdG9zX2lndWFpcztcblxuICAgICAgICBkaWdpdG9zX2lndWFpcyA9IDE7XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuY2hhckF0KGkpICE9IHZhbHVlLmNoYXJBdChpICsgMSkpIHtcbiAgICAgICAgICAgICAgICBkaWdpdG9zX2lndWFpcyA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZ2l0b3NfaWd1YWlzKSB7XG4gICAgICAgICAgICBudW1lcm9zID0gdmFsdWUuc3Vic3RyaW5nKDAsIDkpO1xuICAgICAgICAgICAgZGlnaXRvcyA9IHZhbHVlLnN1YnN0cmluZyg5KTtcbiAgICAgICAgICAgIHNvbWEgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxMDsgaSA+IDE7IGktLSkge1xuICAgICAgICAgICAgICAgIHNvbWEgKz0gbnVtZXJvcy5jaGFyQXQoMTAgLSBpKSAqIGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHRhZG8gIT0gZGlnaXRvcy5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bWVyb3MgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMTApO1xuICAgICAgICAgICAgc29tYSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDExOyBpID4gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgc29tYSArPSBudW1lcm9zLmNoYXJBdCgxMSAtIGkpICogaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0YWRvID0gc29tYSAlIDExIDwgMiA/IDAgOiAxMSAtIHNvbWEgJSAxMTtcblxuICAgICAgICAgICAgaWYgKHJlc3VsdGFkbyAhPSBkaWdpdG9zLmNoYXJBdCgxKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5hdGl2ZVZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50VGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU1hc2tzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMubWFzayA9PSBcImRlY2ltYWxcIikge1xuICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgKyBcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC4vZywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFzayA9PSBcImNucGotY3BmXCIgfHwgdGhpcy5tYXNrID09IFwiY3BmXCIgfHwgdGhpcy5tYXNrID09IFwiY25walwiIHx8IHRoaXMubWFzayA9PSBcImNucGotY3BmLXJ1dFwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSArIFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy4nLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnLicsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCctJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5DRUxMUEhPTkVcbiAgICAgICAgICAgIHx8IHRoaXMubWFzayA9PSBJbnB1dE1hc2tFbnVtLklOVEVSTkFUSU9OQUxfUEhPTkVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSArIFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJygnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnKScsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcgJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJyAnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnLScsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcrJywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzRW1haWxTZXJ2aWNlVmFsaWRhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLm5ndFZhbGlkYXRpb25TZXJ2aWNlPy5lbWFpbFZhbGlkYXRpb24gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQYXNzd29yZFZhbGlkYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZT8ucGFzc3dvcmRWYWxpZGF0aW9uID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJtYi0yIGZsZXgge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAndGV4dCcsICdmb250Q2FzZSddKSB9fVwiIFtoaWRkZW5dPSdzaGluaW5nJz5cbiAgICB7eyBsYWJlbCB9fTpcblxuICAgIDxzcGFuICpuZ0lmPVwiaXNSZXF1aXJlZFwiIGNsYXNzPVwidGV4dC1yZWQtNTAwIGZvbnQtYm9sZCB0ZXh0LW1kIG1sLTFcIj4qPC9zcGFuPlxuXG4gICAgPG5ndC1oZWxwZXIgKm5nSWY9XCJoZWxwVGV4dFwiIFtoZWxwVGl0bGVdPVwiaGVscFRpdGxlXCIgW2ljb25Db2xvcl09XCJoZWxwVGV4dENvbG9yXCJcbiAgICAgICAgW2hlbHBlclJldmVyc2VZUG9zaXRpb25dPVwiaGVscGVyUmV2ZXJzZVlQb3NpdGlvblwiIFthdXRvWFJldmVyc2VdPVwiaGVscGVyQXV0b1hSZXZlcnNlXCIgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwiaGVscFRleHRcIj48L3NwYW4+XG4gICAgPC9uZ3QtaGVscGVyPlxuPC9sYWJlbD5cblxuPGRpdiBjbGFzcz1cInt7IHNoaW5pbmcgPyAnaGlkZGVuJyA6ICdmbGV4IHJlbGF0aXZlJ319XCI+XG4gICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgIGNsYXNzPVwiZmxleCBib3JkZXIgYXBwZWFyYW5jZS1ub25lIGZvY3VzOm91dGxpbmUtbm9uZSBsZWFkaW5nLXRpZ2h0IHctZnVsbCB7eyBnZXRJbnB1dFBhZGRpbmdzKCkgfX0ge3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnLCAndGV4dCcsICdjb2xvci5ib3JkZXInLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCcsICdyb3VuZGVkJywgJ2N1cnNvciddKSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHkgfHwgbG9hZGluZ1wiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtzdHlsZV09XCJ1cHBlcmNhc2UgPyAndGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSFpbXBvcnRhbnQnOicnXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydpbnB1dC1oYXMtZXJyb3IgYm9yZGVyLXJlZC03MDAnOiBmb3JtQ29udHJvbD8uZXJyb3JzICYmIChmb3JtQ29udHJvbD8uZGlydHkgfHwgKGZvcm1Db250YWluZXIgJiYgZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10pKX1cIlxuICAgICAgICBbYXR0ci50eXBlXT1cImlucHV0UHJvcGVydGllcy5odG1sVHlwZVwiICNlbGVtZW50PlxuICAgIDxzcGFuICpuZ0lmPVwiaW5uZXJMZWZ0SWNvblwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgc2VsZi1jZW50ZXIgcHgtMiB7eyBpbm5lckxlZnRJY29uQ29sb3IgfX0ge3sgb25DbGlja0xlZnRJY29uID8gJ2N1cnNvci1wb2ludGVyJyA6ICcnIH19XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tMZWZ0SWNvbi5lbWl0KClcIj5cblxuICAgICAgICA8bmd0LXN2ZyAqbmdJZj1cIiFzaG93Um91bmRlZEljb25cIiBjbGFzcz1cImZpbGwtY3VycmVudFwiIFtzcmNdPSdpbm5lckxlZnRJY29uJz48L25ndC1zdmc+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJzaG93Um91bmRlZEljb25cIiBjbGFzcz1cInJvdW5kZWQtZnVsbCBoLTZcIiBbc3JjXT0naW5uZXJMZWZ0SWNvbic+XG4gICAgPC9zcGFuPlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWJzb2x1dGUgaC1mdWxsIGp1c3RpZnktZW5kIHJpZ2h0LTAgdy1hdXRvXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYWxsb3dDbGVhciAmJiB2YWx1ZSAmJiAhbG9hZGluZ1wiIGNsYXNzPVwic2VsZi1jZW50ZXIgcmlnaHQtMCBweC0yIHRleHQtcmVkLTQwMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAoY2xpY2spPSdjbGVhcklucHV0KCRldmVudCknPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImZpbGwtY3VycmVudCBzZWxmLWNlbnRlclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS4xIDE3LjJsLTUuMy01LjMgNS4zLTUuMy0xLjgtMS44LTUuMyA1LjQtNS4zLTUuMy0xLjggMS43IDUuMyA1LjMtNS4zIDUuM0w2LjcgMTlsNS4zLTUuMyA1LjMgNS4zIDEuOC0xLjh6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJzZWxmLWNlbnRlciByaWdodC0wIHB4LTIgdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1sb2FkZXJcIj48L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwidHlwZSA9PSAncGFzc3dvcmQnICYmIHZhbHVlXCIgY2xhc3M9XCJzZWxmLWNlbnRlciBweC0yIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZWxlbWVudC50eXBlID09ICdwYXNzd29yZCdcIiBjbGFzcz1cImZpbGwtY3VycmVudFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiAoY2xpY2spPSdzaG93UGFzc3dvcmQoKSc+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0uMiAxMGExMSAxMSAwIDAgMSAxOS42IDBBMTEgMTEgMCAwIDEgLjIgMTB6bTkuOCA0YTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOHptMC0yYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNHpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJlbGVtZW50LnR5cGUgPT0gJ3RleHQnXCIgY2xhc3M9XCJmaWxsLWN1cnJlbnRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgKGNsaWNrKT0naGlkZVBhc3N3b3JkKCknPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuODEgNC4zNmwtMS43NyAxLjc4YTQgNCAwIDAgMC00LjkgNC45bC0yLjc2IDIuNzVDMi4wNiAxMi43OS45NiAxMS40OS4yIDEwYTExIDExIDAgMCAxIDEyLjYtNS42NHptMy44IDEuODVjMS4zMyAxIDIuNDMgMi4zIDMuMiAzLjc5YTExIDExIDAgMCAxLTEyLjYyIDUuNjRsMS43Ny0xLjc4YTQgNCAwIDAgMCA0LjktNC45bDIuNzYtMi43NXptLS4yNS0zLjk5bDEuNDIgMS40MkwzLjY0IDE3Ljc4bC0xLjQyLTEuNDJMMTYuMzYgMi4yMnpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cImlubmVyUmlnaHRJY29uICYmIHR5cGUgIT0gJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyIHB4LTIge3sgaW5uZXJSaWdodEljb25Db2xvciB9fSAge3sgb25DbGlja1JpZ2h0SWNvbiA/ICdjdXJzb3ItcG9pbnRlcicgOiAnJyB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1JpZ2h0SWNvbi5lbWl0KClcIj5cbiAgICAgICAgICAgIDxuZ3Qtc3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50XCIgW3NyY109J2lubmVyUmlnaHRJY29uJz48L25ndC1zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NoYXJhY3RlcnNMZW5ndGggJiYgbWF4VG90YWxDaGFyc0NvdW50ICYmICFzaGluaW5nXCI+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIG10LTFcIj5cbiAgICAgICAge3sgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RUZXh0QXJlYVJlbWFpbmluZ0NoYXJhY3RlcnMgfX06XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IGdldFJlbWFpbmluZ0NoYXJhY3RlcnMoKSB9fTwvc3Bhbj5cbiAgICA8L3A+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnXSkgfX0gdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48aW5wdXQgKm5nSWY9J2NvbXBvbmVudFJlYWR5JyB0eXBlPVwiaGlkZGVuXCIgW25nTW9kZWxdPVwidmFsdWVcIiBbbmFtZV09XCJuYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCIgW21pblZhbHVlXT0nbWluVmFsdWUnIFttaW5MZW5ndGhdPSdtaW5MZW5ndGgnPlxuPC9uZ3QtdmFsaWRhdGlvbj4iXX0=
767
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1pbnB1dC9uZ3QtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWlucHV0L25ndC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sSUFBSSxFQUVKLFFBQVEsRUFDUixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVE1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWM1RixNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQXNFakQsWUFDWSxRQUFrQixFQUNFLHNCQUE4QyxFQUVuRSxhQUErQixFQUU5QixnQkFBa0MsRUFDbEMsUUFBbUIsRUFFbkIsb0JBQThDLEVBRTlDLGtCQUEwQyxFQUMxQyxjQUFpQyxFQUVsQyxtQkFBd0M7UUFFL0MsS0FBSyxFQUFFLENBQUM7UUFmQSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ0UsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUVuRSxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFFOUIscUJBQWdCLEdB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c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxHQUFHO3NCQUFsQixLQUFLO2dCQUdVLG9CQUFvQjtzQkFBbkMsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBQ1Usd0JBQXdCO3NCQUF2QyxLQUFLO2dCQUNVLHNCQUFzQjtzQkFBckMsS0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBRVcsZUFBZTtzQkFBL0IsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsbUJBQW1CO3NCQUFuQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIENvbnRyb2xDb250YWluZXIsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RCYXNlTmdNb2RlbCwgTmd0TWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYmFzZS9uZ3QtYmFzZS1uZy1tb2RlbCc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgYXBwbHlJbnB1dE1hc2ssIElucHV0TWFza0VudW0sIHJlbW92ZUlucHV0TWFzayB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5wdXQtbWFzay9pbnB1dC1tYXNrLmhlbHBlcic7XG5pbXBvcnQge1xuICAgIE5ndEh0dHBGaW5kRXhpc3RpbmdSZXNvdXJjZUludGVyZmFjZSxcbiAgICBOZ3RIdHRwRmluZEV4aXN0aW5nUmVzb3VyY2VSZXNwb25zZSxcbiAgICBOZ3RIdHRwUmVzb3VyY2VTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSwgTmd0SHR0cFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtaHR0cC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0VHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3QtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1pbnB1dC5jb21wb25lbnQuY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIE5ndE1ha2VQcm92aWRlcihOZ3RJbnB1dENvbXBvbmVudCksXG4gICAgXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RJbnB1dENvbXBvbmVudCBleHRlbmRzIE5ndEJhc2VOZ01vZGVsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoXCJlbGVtZW50XCIsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLy8gVmlzdWFsXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlubmVyTGVmdEljb246IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5uZXJMZWZ0SWNvbkNvbG9yOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlubmVyUmlnaHRJY29uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlubmVyUmlnaHRJY29uQ29sb3I6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgZGVjaW1hbE1hc2tQcmVjaXNpb246IG51bWJlciA9IDI7XG4gICAgQElucHV0KCkgcHVibGljIHNob3dDaGFyYWN0ZXJzTGVuZ3RoOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIHVwcGVyY2FzZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy9CZWhhdmlvclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc1JlYWRvbmx5OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Um91bmRlZEljb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHR5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXNrOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd0NsZWFyOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBqaXQ6IGJvb2xlYW47XG5cbiAgICAvL1ZhbGlkYXRpb25zXG4gICAgQElucHV0KCkgcHVibGljIGZpbmRFeGlzdGluZ1Jlc291cmNlOiBOZ3RIdHRwRmluZEV4aXN0aW5nUmVzb3VyY2VJbnRlcmZhY2U7XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93UGhvbmVWYWxpZGF0aW9uOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0ZVBhc3N3b3JkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwYXNzd29yZGFibGVJZDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwYXNzd29yZFBvbGljeUlkOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHVuaXF1ZVJlc291cmNlOiBhbnk7XG4gICAgQElucHV0KCkgcHVibGljIG1pblZhbHVlOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIG1heFZhbHVlOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIG1heExlbmd0aDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtaW5MZW5ndGg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF0Y2g6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVPZjogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0ZU1pblZhbHVlT25NYXNrOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBleHRlcm5hbFNlcnZlckRlcGVuZGVuY3k6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlclJldmVyc2VZUG9zaXRpb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlckF1dG9YUmV2ZXJzZTogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbGlja0xlZnRJY29uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbGlja1JpZ2h0SWNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIHZhbGlkYXRlUGhvbmVSZXN1bHQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwdWJsaWMgbWF4VG90YWxDaGFyc0NvdW50OiBudW1iZXI7XG4gICAgcHVibGljIGV4aXN0aW5nUmVzb3VyY2VJZDogc3RyaW5nO1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeTogYm9vbGVhbjtcbiAgICBwdWJsaWMgaW5wdXRQcm9wZXJ0aWVzOiB7XG4gICAgICAgIGh0bWxUeXBlPzogc3RyaW5nO1xuICAgICAgICBsZW5ndGg/OiBudW1iZXI7XG4gICAgfSA9IHt9O1xuXG4gICAgcHVibGljIG5ndFN0eWxlOiBOZ3RTdHlsaXphYmxlU2VydmljZTtcblxuICAgIHByaXZhdGUgZW1haWxWYWxpZGF0b3JUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSBwYXNzd29yZFZhbGlkYXRvclRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIHBob25lVmFsaWRhdG9yVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgdW5pcXVlVmFsaWRhdG9yVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgc2VhcmNoRXhpc3RpbmdSZXNvdXJjZVRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndEZvcm1Db21wb25lbnQ6IE5ndEZvcm1Db21wb25lbnQsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RWYWxpZGF0aW9uU2VydmljZTogTmd0SHR0cFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFJlc291cmNlU2VydmljZTogTmd0SHR0cFJlc291cmNlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gdGhpcy5uZ3RGb3JtQ29tcG9uZW50LmlzU2hpbmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm1Db21wb25lbnQub25TaGluaW5nQ2hhbmdlLnN1YnNjcmliZSgoc2hpbmluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RJbnB1dCcsIHtcbiAgICAgICAgICAgIGg6ICdoLTEyJyxcbiAgICAgICAgICAgIHJvdW5kZWQ6ICdyb3VuZGVkJyxcbiAgICAgICAgICAgIHRleHQ6ICd0ZXh0LXNtJyxcbiAgICAgICAgICAgIGZvbnRDYXNlOiAnJyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnYm9yZGVyLWdyYXktNDAwIGZvY3VzOmJvcmRlci1ncmF5LTcwMCcsXG4gICAgICAgICAgICAgICAgYmc6ICdiZy1iZy13aGl0ZSBmb2N1czpiZy13aGl0ZScsXG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS04MDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGb2N1cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNGb2N1cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcklucHV0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcblxuICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zZXR1cE1hc2tzKGNoYW5nZXMubWFzayA/IGNoYW5nZXMubWFzay5wcmV2aW91c1ZhbHVlIDogbnVsbCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubWF0Y2ggfHwgY2hhbmdlcy5pc1JlcXVpcmVkIHx8IGNoYW5nZXMudHlwZSB8fCBjaGFuZ2VzLm1hc2sgfHwgY2hhbmdlcy5taW5WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMubWFzayA9PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZ2V0TmF0aXZlVmFsdWUoKSB8fCAodGhpcy52YWxpZGF0ZU1pblZhbHVlT25NYXNrKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5hdGl2ZVZhbHVlID0gdGhpcy5nZXROYXRpdmVWYWx1ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIGxldCBuZ01vZGVsVmFsdWUgPSB0aGlzLnJlbW92ZU1hc2tzKG5hdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKG5hdGl2ZVZhbHVlICYmIG5nTW9kZWxWYWx1ZSAhPSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5DRUxMUEhPTkUgfHwgdGhpcy5tYXNrID09IElucHV0TWFza0VudW0uSU5URVJOQVRJT05BTF9QSE9ORSlcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmFsbG93UGhvbmVWYWxpZGF0aW9uICYmIHRoaXMudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQaG9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5nTW9kZWxWYWx1ZSA9IHRoaXMucmVtb3ZlTWFza3ModmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgbmdNb2RlbFZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgIT0gbmF0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlYWR5KSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0UmVzb3VyY2VTZXJ2aWNlICYmIHRoaXMuZmluZEV4aXN0aW5nUmVzb3VyY2UgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIGVsZW1lbnQgbXVzdCBiZSBpbnNpZGUgYSA8Zm9ybSAjZm9ybT0nbmdGb3JtJz4gdGFnIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdldEVsZW1lbnRUaXRsZSgpIHx8IHRoaXMuZ2V0RWxlbWVudFRpdGxlKCkgPT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnRpdGxlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5wdXRQYWRkaW5ncygpIHtcbiAgICAgICAgbGV0IHBhZGRpbmdDbGFzczogc3RyaW5nID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5uZXJMZWZ0SWNvbikge1xuICAgICAgICAgICAgcGFkZGluZ0NsYXNzICs9ICdwbC04IHByLTQgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhZGRpbmdDbGFzcyArPSAncHgtNCAnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5uZXJSaWdodEljb24gfHwgdGhpcy5hbGxvd0NsZWFyIHx8IHRoaXMudHlwZSA9PSAncGFzc3dvcmQnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd0NsZWFyICYmIHRoaXMudmFsdWUgJiYgKHRoaXMuaW5uZXJSaWdodEljb24gfHwgdGhpcy50eXBlID09ICdwYXNzd29yZCcpKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0NsYXNzICs9ICdwci0xNiAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nQ2xhc3MgKz0gJ3ByLTggJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYWRkaW5nQ2xhc3M7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dQYXNzd29yZCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhpZGVQYXNzd29yZCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmdDaGFyYWN0ZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubWF4VG90YWxDaGFyc0NvdW50IC0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhUb3RhbENoYXJzQ291bnQgLSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWF4VG90YWxDaGFyc0NvdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbCAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB3YXRjaCA9IFwiY2hhbmdlXCI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmppdCkge1xuICAgICAgICAgICAgICAgIHdhdGNoICs9IFwiIGtleXVwIGtleWRvd24ga2V5cHJlc3NcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2F0Y2guc3BsaXQoJyAnKS5mb3JFYWNoKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZXZ0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVWYWx1ZSA9IHRoaXMucmVtb3ZlTWFza3ModGhpcy5nZXROYXRpdmVWYWx1ZSgpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSBuYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5hdGl2ZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID49IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhY2tzcGFjZSBhbmQgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9IDggJiYgZXZlbnQua2V5Q29kZSAhPSA0Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMubWF4VG90YWxDaGFyc0NvdW50ID0gdGhpcy5tYXhMZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5cHJlc3NcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoVmFsaWRhdG9yKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwUHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy50eXBlID09ICdlbWFpbCcpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5MZW5ndGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gJ2NucGotY3BmJyB8fCB0aGlzLm1hc2sgPT0gJ2NucGotY3BmLXJ1dCcgfHwgdGhpcy5tYXNrID09ICdjcGYnKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuY25wakNwZlZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gJ3RpbWUnKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMudGltZVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubWF0Y2hWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubWluVmFsdWVWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZU9mKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubXVsdGlwbGVPZlZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmV4dGVybmFsU2VydmVyRGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmV4dGVybmFsU2VydmVyRGVwZW5kZW5jeVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnVuaXF1ZVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy51bmlxdWVWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ2VtYWlsJyAmJiB0aGlzLmhhc0VtYWlsU2VydmljZVZhbGlkYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuZW1haWxWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ3Bhc3N3b3JkJyAmJiB0aGlzLnZhbGlkYXRlUGFzc3dvcmQgJiYgdGhpcy5oYXNQYXNzd29yZFZhbGlkYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMucGFzc3dvcmRWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cE1hc2tzKHByZXZpb3VzTWFzaz86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5tYXNrICE9IHByZXZpb3VzTWFzayAmJiAhdGhpcy5tYXNrKSB7XG4gICAgICAgICAgICByZW1vdmVJbnB1dE1hc2sodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWFza3MgPSB7XG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5DUEZdOiAnOTk5Ljk5OS45OTktOTknLFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ05QSl06ICc5OS45OTkuOTk5Lzk5OTktOTknLFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ1BGX0NOUEpfUlVUXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnOTk5Ljk5OS45OTktOTknLCAnOTk5OTk5OTk5OTk5JywgJzk5Ljk5OS45OTkvOTk5OS05OSddLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5DUEZfQ05QSl06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJzk5OS45OTkuOTk5LTk5JywgJzk5Ljk5OS45OTkvOTk5OS05OSddLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5ERUNJTUFMXToge1xuICAgICAgICAgICAgICAgIGRpZ2l0czogdGhpcy5kZWNpbWFsTWFza1ByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogJy4nLFxuICAgICAgICAgICAgICAgIHJhZGl4UG9pbnQ6ICcsJyxcbiAgICAgICAgICAgICAgICBhdXRvR3JvdXA6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVwZWF0OiAxNixcbiAgICAgICAgICAgICAgICByaWdodEFsaWduOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtYXg6IHRoaXMubWF4VmFsdWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ0VMTFBIT05FXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnKDk5KSA5OTktOTk5JywgJyg5OSkgOTk5OS05OTk5JywgJyg5OSkgOTk5OTktOTk5OSddLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5JTlRFUk5BVElPTkFMX1BIT05FXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnKzk5OSA5OSA5OTktOTk5JywgJys5OSAoOTkpIDk5OTktOTk5OScsICcrOTkgKDk5KSA5OTk5OS05OTk5JywgJys5OTkgKDk5KSA5OTk5LTk5OTknLCAnKzk5OSAoOTkpIDk5OTk5LTk5OTknXSxcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uUExBVEVdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWydBQUEtOSY5OSddLFxuICAgICAgICAgICAgICAgIGtlZXBTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5DRVBdOiAnOTk5OTktOTk5JyxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLklOVEVHRVJdOiB7XG4gICAgICAgICAgICAgICAgbWF4OiB0aGlzLm1heFZhbHVlLFxuICAgICAgICAgICAgICAgIG1pbjogdGhpcy52YWxpZGF0ZU1pblZhbHVlT25NYXNrID8gdGhpcy5taW5WYWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByaWdodEFsaWduOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLk5VTUVSSUNfU1RSSU5HXToge1xuICAgICAgICAgICAgICAgIHJlZ2V4OiBcIlswLTldKlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLlRJTUVdOiAnOTk6OTknLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5ERUNJTUFMKSB7XG4gICAgICAgICAgICBhcHBseUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgSW5wdXRNYXNrRW51bS5ERUNJTUFMLCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5JTlRFR0VSKSB7XG4gICAgICAgICAgICBhcHBseUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgSW5wdXRNYXNrRW51bS5JTlRFR0VSLCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5SW5wdXRNYXNrKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBQcm9wZXJ0aWVzKCkge1xuICAgICAgICBsZXQgcHJvcHMgPSB7XG4gICAgICAgICAgICBzaG9ydFRleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAzMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAxMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb25nVGV4dDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDE1MFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4dHJhTG9uZ1RleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAzMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXN0b21UZXh0OiB7XG4gICAgICAgICAgICAgICAgaHRtbFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogdGhpcy5tYXhMZW5ndGhcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAxNTBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbWFpbDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDEwMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgaHRtbFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogOSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy50eXBlIGluIHByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0UHJvcGVydGllcyA9IHByb3BzW3RoaXMudHlwZV07XG4gICAgICAgICAgICB0aGlzLm1heExlbmd0aCA9IHRoaXMuaW5wdXRQcm9wZXJ0aWVzLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlR5cGUgW1wiICsgdGhpcy50eXBlICsgXCJdIGlzIG5vdCBhIHZhbGlkIHRhaWwtZm9ybS1pbnB1dCB0eXBlIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1pblZhbHVlVmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKSA8IHRoaXMubWluVmFsdWUgPyB7ICdtaW5WYWx1ZSc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtdWx0aXBsZU9mVmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNvbnRyb2wudmFsdWUgJSB0aGlzLm11bHRpcGxlT2YgIT09IDApID8geyAnbXVsdGlwbGVPZic6IHRydWUgfSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlcm5hbFNlcnZlckRlcGVuZGVuY3lWYWxpZGF0b3IoKSB7XG4gICAgICAgIC8vIFRPRE86IFZhbGlkYXIgdGVtcG8gZGUgcmVxdWlzacOnw6NvXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiAhY29udHJvbC52YWx1ZSA/IHsgJ2V4dGVybmFsU2VydmVyRGVwZW5kZW5jeSc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0aW1lVmFsaWRhdG9yKCkge1xuICAgICAgICBjb25zdCByZWdleEV4cCA9IG5ldyBSZWdFeHAoJ14oMFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kJyk7XG5cbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2V4RXhwLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ3RpbWUnOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY25wakNwZlZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA8PSAxMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRvckNQRihjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAnY3BmJzogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA9PSAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiB0aGlzLnZhbGlkYXRvckNOUEooY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2NucGonOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWF0Y2hWYWxpZGF0b3IoKSB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSB0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJ21hdGNoJzogdHJ1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtYWlsVmFsaWRhdG9yKCk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW1haWxWYWxpZGF0b3JUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZW1haWxWYWxpZGF0b3JUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWFpbFZhbGlkYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2UuZW1haWxWYWxpZGF0aW9uKHRoaXMudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlOiBOZ3RIdHRwVmFsaWRhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnZhbGlkID8gbnVsbCA6IHsgJ2VtYWlsJzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFzc3dvcmRWYWxpZGF0b3IoKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXNzd29yZFZhbGlkYXRvclRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5wYXNzd29yZFZhbGlkYXRvclRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3JkVmFsaWRhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZS5wYXNzd29yZFZhbGlkYXRpb24odGhpcy52YWx1ZSwgdGhpcy5wYXNzd29yZGFibGVJZCwgdGhpcy5wYXNzd29yZFBvbGljeUlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZTogTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnZhbGlkID8gbnVsbCA6IHsgJ2ludmFsaWRfcGFzc3dvcmQnOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlYXJjaEV4aXN0aW5nUmVzb3VyY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEV4aXN0aW5nUmVzb3VyY2VUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaEV4aXN0aW5nUmVzb3VyY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5maW5kRXhpc3RpbmdSZXNvdXJjZS52YWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMubmd0UmVzb3VyY2VTZXJ2aWNlLmZpbmRFeGlzdGluZyh0aGlzLmZpbmRFeGlzdGluZ1Jlc291cmNlKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZTogTmd0SHR0cEZpbmRFeGlzdGluZ1Jlc291cmNlUmVzcG9uc2UpID0+IHRoaXMuZXhpc3RpbmdSZXNvdXJjZUlkID0gcmVzcG9uc2UuaWQpXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRoaXMuZXhpc3RpbmdSZXNvdXJjZUlkID0gbnVsbClcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVBob25lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5waG9uZVZhbGlkYXRvclRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBob25lVmFsaWRhdG9yVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBob25lVmFsaWRhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZS5waG9uZVZhbGlkYXRpb24odGhpcy52YWx1ZSlcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4gdGhpcy52YWxpZGF0ZVBob25lUmVzdWx0LmVtaXQocmVzcG9uc2UpKVxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bmlxdWVWYWxpZGF0b3IoKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgICAgIGlmICghdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW4gb3JkZXIgdG8gdXNlIHVuaXF1ZSB2YWxpZGF0aW9uIHlvdSBtdXN0IHByb3ZpZGUgYSBpbXBsZW1lbnRhdGlvbiBmb3IgTmd0SHR0cFZhbGlkYXRpb25TZXJ2aWNlIGNsYXNzIVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy51bmlxdWVWYWxpZGF0b3JUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudW5pcXVlVmFsaWRhdG9yVGltZW91dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudW5pcXVlUmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVWYWxpZGF0b3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ndFZhbGlkYXRpb25TZXJ2aWNlLnVuaXF1ZSh0aGlzLnVuaXF1ZVJlc291cmNlLCB0aGlzLnZhbHVlKS50aGVuKChyZXNwb25zZTogTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS52YWxpZCA/IG51bGwgOiB7ICd1bmlxdWUnOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRvckNOUEoodmFsdWUpIHtcbiAgICAgICAgbGV0IGIgPSBbNiwgNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XG5cbiAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxkXS9nLCBcIlwiKSkubGVuZ3RoICE9IDE0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoLzB7MTR9Ly50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG4gPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IG4gKz0gdmFsdWVbaV0gKiBiWysraV0pIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZVsxMl0gIT0gKCgobiAlPSAxMSkgPCAyKSA/IDAgOiAxMSAtIG4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBuID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAxMjsgbiArPSB2YWx1ZVtpXSAqIGJbaSsrXSkge1xuICAgICAgICAgICAgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlWzEzXSAhPSAoKChuICU9IDExKSA8IDIpID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHZhbGlkYXRvckNQRih2YWx1ZSkge1xuICAgICAgICBsZXQgbnVtZXJvcywgZGlnaXRvcywgc29tYSwgaSwgcmVzdWx0YWRvLCBkaWdpdG9zX2lndWFpcztcblxuICAgICAgICBkaWdpdG9zX2lndWFpcyA9IDE7XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuY2hhckF0KGkpICE9IHZhbHVlLmNoYXJBdChpICsgMSkpIHtcbiAgICAgICAgICAgICAgICBkaWdpdG9zX2lndWFpcyA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZ2l0b3NfaWd1YWlzKSB7XG4gICAgICAgICAgICBudW1lcm9zID0gdmFsdWUuc3Vic3RyaW5nKDAsIDkpO1xuICAgICAgICAgICAgZGlnaXRvcyA9IHZhbHVlLnN1YnN0cmluZyg5KTtcbiAgICAgICAgICAgIHNvbWEgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxMDsgaSA+IDE7IGktLSkge1xuICAgICAgICAgICAgICAgIHNvbWEgKz0gbnVtZXJvcy5jaGFyQXQoMTAgLSBpKSAqIGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHRhZG8gIT0gZGlnaXRvcy5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bWVyb3MgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMTApO1xuICAgICAgICAgICAgc29tYSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDExOyBpID4gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgc29tYSArPSBudW1lcm9zLmNoYXJBdCgxMSAtIGkpICogaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0YWRvID0gc29tYSAlIDExIDwgMiA/IDAgOiAxMSAtIHNvbWEgJSAxMTtcblxuICAgICAgICAgICAgaWYgKHJlc3VsdGFkbyAhPSBkaWdpdG9zLmNoYXJBdCgxKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5hdGl2ZVZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50VGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU1hc2tzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMubWFzayA9PSBcImRlY2ltYWxcIikge1xuICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgKyBcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC4vZywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFzayA9PSBcImNucGotY3BmXCIgfHwgdGhpcy5tYXNrID09IFwiY3BmXCIgfHwgdGhpcy5tYXNrID09IFwiY25walwiIHx8IHRoaXMubWFzayA9PSBcImNucGotY3BmLXJ1dFwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSArIFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy4nLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnLicsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCctJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5DRUxMUEhPTkVcbiAgICAgICAgICAgIHx8IHRoaXMubWFzayA9PSBJbnB1dE1hc2tFbnVtLklOVEVSTkFUSU9OQUxfUEhPTkVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSArIFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJygnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnKScsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcgJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJyAnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnLScsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcrJywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzRW1haWxTZXJ2aWNlVmFsaWRhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLm5ndFZhbGlkYXRpb25TZXJ2aWNlPy5lbWFpbFZhbGlkYXRpb24gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQYXNzd29yZFZhbGlkYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZT8ucGFzc3dvcmRWYWxpZGF0aW9uID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJtYi0yIGZsZXgge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAndGV4dCcsICdmb250Q2FzZSddKSB9fVwiIFtoaWRkZW5dPSdzaGluaW5nJz5cbiAgICB7eyBsYWJlbCB9fTpcblxuICAgIDxzcGFuICpuZ0lmPVwiaXNSZXF1aXJlZFwiIGNsYXNzPVwidGV4dC1yZWQtNTAwIGZvbnQtYm9sZCB0ZXh0LW1kIG1sLTFcIj4qPC9zcGFuPlxuXG4gICAgPG5ndC1oZWxwZXIgKm5nSWY9XCJoZWxwVGV4dFwiIFtoZWxwVGl0bGVdPVwiaGVscFRpdGxlXCIgW2ljb25Db2xvcl09XCJoZWxwVGV4dENvbG9yXCJcbiAgICAgICAgW2hlbHBlclJldmVyc2VZUG9zaXRpb25dPVwiaGVscGVyUmV2ZXJzZVlQb3NpdGlvblwiIFthdXRvWFJldmVyc2VdPVwiaGVscGVyQXV0b1hSZXZlcnNlXCIgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwiaGVscFRleHRcIj48L3NwYW4+XG4gICAgPC9uZ3QtaGVscGVyPlxuPC9sYWJlbD5cblxuPGRpdiBjbGFzcz1cInt7IHNoaW5pbmcgPyAnaGlkZGVuJyA6ICdmbGV4IHJlbGF0aXZlJ319XCI+XG4gICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgIGNsYXNzPVwiZmxleCBib3JkZXIgYXBwZWFyYW5jZS1ub25lIGZvY3VzOm91dGxpbmUtbm9uZSBsZWFkaW5nLXRpZ2h0IHctZnVsbCB7eyBnZXRJbnB1dFBhZGRpbmdzKCkgfX0ge3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnLCAndGV4dCcsICdjb2xvci5ib3JkZXInLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCcsICdyb3VuZGVkJywgJ2N1cnNvciddKSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHkgfHwgbG9hZGluZ1wiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtzdHlsZV09XCJ1cHBlcmNhc2UgPyAndGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSFpbXBvcnRhbnQnOicnXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydpbnB1dC1oYXMtZXJyb3IgYm9yZGVyLXJlZC03MDAnOiBmb3JtQ29udHJvbD8uZXJyb3JzICYmIChmb3JtQ29udHJvbD8uZGlydHkgfHwgKGZvcm1Db250YWluZXIgJiYgZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10pKX1cIlxuICAgICAgICBbYXR0ci50eXBlXT1cImlucHV0UHJvcGVydGllcy5odG1sVHlwZVwiICNlbGVtZW50PlxuICAgIDxzcGFuICpuZ0lmPVwiaW5uZXJMZWZ0SWNvblwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgc2VsZi1jZW50ZXIgcHgtMiB7eyBpbm5lckxlZnRJY29uQ29sb3IgfX0ge3sgb25DbGlja0xlZnRJY29uID8gJ2N1cnNvci1wb2ludGVyJyA6ICcnIH19XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tMZWZ0SWNvbi5lbWl0KClcIj5cblxuICAgICAgICA8bmd0LXN2ZyAqbmdJZj1cIiFzaG93Um91bmRlZEljb25cIiBjbGFzcz1cImZpbGwtY3VycmVudFwiIFtzcmNdPSdpbm5lckxlZnRJY29uJz48L25ndC1zdmc+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJzaG93Um91bmRlZEljb25cIiBjbGFzcz1cInJvdW5kZWQtZnVsbCBoLTZcIiBbc3JjXT0naW5uZXJMZWZ0SWNvbic+XG4gICAgPC9zcGFuPlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWJzb2x1dGUgaC1mdWxsIGp1c3RpZnktZW5kIHJpZ2h0LTAgdy1hdXRvXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYWxsb3dDbGVhciAmJiB2YWx1ZSAmJiAhbG9hZGluZ1wiIGNsYXNzPVwic2VsZi1jZW50ZXIgcmlnaHQtMCBweC0yIHRleHQtcmVkLTQwMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAoY2xpY2spPSdjbGVhcklucHV0KCRldmVudCknPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImZpbGwtY3VycmVudCBzZWxmLWNlbnRlclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS4xIDE3LjJsLTUuMy01LjMgNS4zLTUuMy0xLjgtMS44LTUuMyA1LjQtNS4zLTUuMy0xLjggMS43IDUuMyA1LjMtNS4zIDUuM0w2LjcgMTlsNS4zLTUuMyA1LjMgNS4zIDEuOC0xLjh6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJzZWxmLWNlbnRlciByaWdodC0wIHB4LTIgdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1sb2FkZXJcIj48L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwidHlwZSA9PSAncGFzc3dvcmQnICYmIHZhbHVlXCIgY2xhc3M9XCJzZWxmLWNlbnRlciBweC0yIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZWxlbWVudC50eXBlID09ICdwYXNzd29yZCdcIiBjbGFzcz1cImZpbGwtY3VycmVudFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiAoY2xpY2spPSdzaG93UGFzc3dvcmQoKSc+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0uMiAxMGExMSAxMSAwIDAgMSAxOS42IDBBMTEgMTEgMCAwIDEgLjIgMTB6bTkuOCA0YTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOHptMC0yYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNHpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJlbGVtZW50LnR5cGUgPT0gJ3RleHQnXCIgY2xhc3M9XCJmaWxsLWN1cnJlbnRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgKGNsaWNrKT0naGlkZVBhc3N3b3JkKCknPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuODEgNC4zNmwtMS43NyAxLjc4YTQgNCAwIDAgMC00LjkgNC45bC0yLjc2IDIuNzVDMi4wNiAxMi43OS45NiAxMS40OS4yIDEwYTExIDExIDAgMCAxIDEyLjYtNS42NHptMy44IDEuODVjMS4zMyAxIDIuNDMgMi4zIDMuMiAzLjc5YTExIDExIDAgMCAxLTEyLjYyIDUuNjRsMS43Ny0xLjc4YTQgNCAwIDAgMCA0LjktNC45bDIuNzYtMi43NXptLS4yNS0zLjk5bDEuNDIgMS40MkwzLjY0IDE3Ljc4bC0xLjQyLTEuNDJMMTYuMzYgMi4yMnpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cImlubmVyUmlnaHRJY29uICYmIHR5cGUgIT0gJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyIHB4LTIge3sgaW5uZXJSaWdodEljb25Db2xvciB9fSAge3sgb25DbGlja1JpZ2h0SWNvbiA/ICdjdXJzb3ItcG9pbnRlcicgOiAnJyB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1JpZ2h0SWNvbi5lbWl0KClcIj5cbiAgICAgICAgICAgIDxuZ3Qtc3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50XCIgW3NyY109J2lubmVyUmlnaHRJY29uJz48L25ndC1zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NoYXJhY3RlcnNMZW5ndGggJiYgbWF4VG90YWxDaGFyc0NvdW50ICYmICFzaGluaW5nXCI+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIG10LTFcIj5cbiAgICAgICAge3sgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RUZXh0QXJlYVJlbWFpbmluZ0NoYXJhY3RlcnMgfX06XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IGdldFJlbWFpbmluZ0NoYXJhY3RlcnMoKSB9fTwvc3Bhbj5cbiAgICA8L3A+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnXSkgfX0gdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48aW5wdXQgKm5nSWY9J2NvbXBvbmVudFJlYWR5JyB0eXBlPVwiaGlkZGVuXCIgW25nTW9kZWxdPVwidmFsdWVcIiBbbmFtZV09XCJuYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCIgW21pblZhbHVlXT0nbWluVmFsdWUnIFttaW5MZW5ndGhdPSdtaW5MZW5ndGgnPlxuPC9uZ3QtdmFsaWRhdGlvbj4iXX0=
@@ -10,8 +10,8 @@ import { NgtInputComponent } from './ngt-input.component';
10
10
  import * as i0 from "@angular/core";
11
11
  export class NgtInputModule {
12
12
  }
13
- NgtInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- NgtInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NgtInputModule, declarations: [NgtInputComponent], imports: [CommonModule,
13
+ NgtInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ NgtInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: NgtInputModule, declarations: [NgtInputComponent], imports: [CommonModule,
15
15
  FormsModule,
16
16
  ReactiveFormsModule,
17
17
  NgtValidationModule,
@@ -19,7 +19,7 @@ NgtInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
19
19
  NgtSvgModule,
20
20
  NgtFormModule,
21
21
  NgtHelperModule], exports: [NgtInputComponent] });
22
- NgtInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtInputModule, imports: [CommonModule,
22
+ NgtInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtInputModule, imports: [CommonModule,
23
23
  FormsModule,
24
24
  ReactiveFormsModule,
25
25
  NgtValidationModule,
@@ -27,7 +27,7 @@ NgtInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
27
27
  NgtSvgModule,
28
28
  NgtFormModule,
29
29
  NgtHelperModule] });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtInputModule, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtInputModule, decorators: [{
31
31
  type: NgModule,
32
32
  args: [{
33
33
  declarations: [NgtInputComponent],
@@ -2,9 +2,9 @@ import { Component } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class NgtModalBodyComponent {
4
4
  }
5
- NgtModalBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtModalBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
- NgtModalBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtModalBodyComponent, selector: "ngt-modal-body", ngImport: i0, template: "<ng-content></ng-content>" });
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtModalBodyComponent, decorators: [{
5
+ NgtModalBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtModalBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ NgtModalBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtModalBodyComponent, selector: "ngt-modal-body", ngImport: i0, template: "<ng-content></ng-content>" });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtModalBodyComponent, decorators: [{
8
8
  type: Component,
9
9
  args: [{ selector: 'ngt-modal-body', template: "<ng-content></ng-content>" }]
10
10
  }] });
@@ -2,9 +2,9 @@ import { Component } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class NgtModalFooterComponent {
4
4
  }
5
- NgtModalFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtModalFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
- NgtModalFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtModalFooterComponent, selector: "ngt-modal-footer", ngImport: i0, template: "<div class=\"flex w-full py-1\">\n <ng-content></ng-content>\n</div>" });
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtModalFooterComponent, decorators: [{
5
+ NgtModalFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtModalFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ NgtModalFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtModalFooterComponent, selector: "ngt-modal-footer", ngImport: i0, template: "<div class=\"flex w-full py-1\">\n <ng-content></ng-content>\n</div>" });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtModalFooterComponent, decorators: [{
8
8
  type: Component,
9
9
  args: [{ selector: 'ngt-modal-footer', template: "<div class=\"flex w-full py-1\">\n <ng-content></ng-content>\n</div>" }]
10
10
  }] });
@@ -23,9 +23,9 @@ export class NgtModalHeaderComponent {
23
23
  }
24
24
  }
25
25
  NgtModalHeaderComponent.onCloseModalByHeader = new EventEmitter();
26
- NgtModalHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtModalHeaderComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
27
- NgtModalHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtModalHeaderComponent, selector: "ngt-modal-header", inputs: { disableDefaultCloses: "disableDefaultCloses" }, ngImport: i0, template: "<div\n class=\"flex w-full items-center {{ ngtStyle.compile(['px', 'py', 'pb', 'pt', 'pl', 'pr', 'mx', 'my', 'mb', 'mt', 'ml', 'mr']) }}\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"!disableDefaultCloses\">\n <div class=\"cursor-pointer z-50 absolute right-0 top-0 m-2\" (click)='emitOnCloseEvent()'>\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n <path\n d=\"M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z\">\n </path>\n </svg>\n </div>\n </ng-container>\n</div>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtModalHeaderComponent, decorators: [{
26
+ NgtModalHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtModalHeaderComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
27
+ NgtModalHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtModalHeaderComponent, selector: "ngt-modal-header", inputs: { disableDefaultCloses: "disableDefaultCloses" }, ngImport: i0, template: "<div\n class=\"flex w-full items-center {{ ngtStyle.compile(['px', 'py', 'pb', 'pt', 'pl', 'pr', 'mx', 'my', 'mb', 'mt', 'ml', 'mr']) }}\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"!disableDefaultCloses\">\n <div class=\"cursor-pointer z-50 absolute right-0 top-0 m-2\" (click)='emitOnCloseEvent()'>\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n <path\n d=\"M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z\">\n </path>\n </svg>\n </div>\n </ng-container>\n</div>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtModalHeaderComponent, decorators: [{
29
29
  type: Component,
30
30
  args: [{ selector: 'ngt-modal-header', template: "<div\n class=\"flex w-full items-center {{ ngtStyle.compile(['px', 'py', 'pb', 'pt', 'pl', 'pr', 'mx', 'my', 'mb', 'mt', 'ml', 'mr']) }}\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"!disableDefaultCloses\">\n <div class=\"cursor-pointer z-50 absolute right-0 top-0 m-2\" (click)='emitOnCloseEvent()'>\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n <path\n d=\"M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z\">\n </path>\n </svg>\n </div>\n </ng-container>\n</div>" }]
31
31
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NgtStylizableDirective, decorators: [{
@@ -1,5 +1,5 @@
1
1
  import { animate, state, style, transition, trigger } from '@angular/animations';
2
- import { Component, EventEmitter, Input, Optional, Output, Self } from '@angular/core';
2
+ import { Component, EventEmitter, Input, Optional, Output, Self, } from '@angular/core';
3
3
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
4
4
  import { NgtModalHeaderComponent } from './ngt-modal-header/ngt-modal-header.component';
5
5
  import * as i0 from "@angular/core";
@@ -18,6 +18,7 @@ export class NgtModalComponent {
18
18
  this.onCloseModal = new EventEmitter();
19
19
  this.onOpenModal = new EventEmitter();
20
20
  this.isOpen = false;
21
+ this.viewMode = false;
21
22
  this.keydownEventWasAdded = false;
22
23
  this.subscriptions = [];
23
24
  if (this.tailStylizableDirective) {
@@ -52,7 +53,10 @@ export class NgtModalComponent {
52
53
  this.keydownEventWasAdded = true;
53
54
  window.addEventListener('keydown', (event) => {
54
55
  if (event.keyCode == 27) {
55
- this.close();
56
+ if (this.viewMode) {
57
+ this.closeViewMode();
58
+ event.stopPropagation();
59
+ }
56
60
  }
57
61
  }, true);
58
62
  }
@@ -64,9 +68,12 @@ export class NgtModalComponent {
64
68
  this.subscriptions.forEach(subscription => subscription.unsubscribe());
65
69
  this.subscriptions = [];
66
70
  }
71
+ closeViewMode() {
72
+ this.viewMode = false;
73
+ }
67
74
  }
68
- NgtModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtModalComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
69
- NgtModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtModalComponent, selector: "ngt-modal", inputs: { customLayout: "customLayout", disableDefaultCloses: "disableDefaultCloses", ngtStyle: "ngtStyle" }, outputs: { onCloseModal: "onCloseModal", onOpenModal: "onOpenModal" }, ngImport: i0, template: "<div class=\"flex min-w-full relative justify-center text-gray-700\">\n <div *ngIf=\"isOpen\" class=\"flex fixed min-w-full h-full inset-0 px-6 py-6 md:py-0 md:px-0 justify-center\"\n style=\"background: rgba(0,0,0,.7); z-index: 1100 !important;\" @fade>\n <ng-container *ngIf=\"!disableDefaultCloses\">\n <button class=\"fixed inset-0 h-full w-full bg-black opacity-0 cursor-default z-0\" tabindex=\"-1\"\n type=\"button\" (click)='close()'>\n </button>\n </ng-container>\n\n <div class=\"{{ ngtStyle.compile(['w', 'overflow']) }} relative border border-teal-500 bg-white w-full self-center rounded shadow-lg z-10\"\n style=\"max-height: 85%;\">\n <div class=\"cursor-default text-left {{ ngtStyle.compile(['py', 'px']) }}\">\n <div *ngIf=\"!customLayout\">\n <ngt-modal-header class=\"w-full\" [disableDefaultCloses]=\"disableDefaultCloses\">\n <ng-content select='[header]'></ng-content>\n </ngt-modal-header>\n </div>\n\n <ng-container *ngIf=\"!customLayout\">\n <ngt-modal-body>\n <ng-content select='[body]'></ng-content>\n </ngt-modal-body>\n </ng-container>\n\n <!--Footer-->\n <ng-container *ngIf=\"!customLayout\">\n <ngt-modal-footer>\n <ng-content select='[footer]'></ng-content>\n </ngt-modal-footer>\n </ng-container>\n\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.NgtModalHeaderComponent, selector: "ngt-modal-header", inputs: ["disableDefaultCloses"] }, { kind: "component", type: i4.NgtModalBodyComponent, selector: "ngt-modal-body" }, { kind: "component", type: i5.NgtModalFooterComponent, selector: "ngt-modal-footer" }], animations: [
75
+ NgtModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtModalComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
76
+ NgtModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtModalComponent, selector: "ngt-modal", inputs: { customLayout: "customLayout", disableDefaultCloses: "disableDefaultCloses", ngtStyle: "ngtStyle" }, outputs: { onCloseModal: "onCloseModal", onOpenModal: "onOpenModal" }, ngImport: i0, template: "<div class=\"flex min-w-full relative justify-center text-gray-700\">\n <div *ngIf=\"isOpen\" class=\"flex fixed min-w-full h-full inset-0 px-6 py-6 md:py-0 md:px-0 justify-center\"\n style=\"background: rgba(0,0,0,.7); z-index: 1100 !important;\" @fade>\n <ng-container *ngIf=\"!disableDefaultCloses\">\n <button class=\"fixed inset-0 h-full w-full bg-black opacity-0 cursor-default z-0\" tabindex=\"-1\"\n type=\"button\" (click)='close()'>\n </button>\n </ng-container>\n\n <div class=\"{{ ngtStyle.compile(['w', 'overflow']) }} relative border border-teal-500 bg-white w-full self-center rounded shadow-lg z-10\"\n style=\"max-height: 85%;\">\n <div class=\"cursor-default text-left {{ ngtStyle.compile(['py', 'px']) }}\">\n <div *ngIf=\"!customLayout\">\n <ngt-modal-header class=\"w-full\" [disableDefaultCloses]=\"disableDefaultCloses\">\n <ng-content select='[header]'></ng-content>\n </ngt-modal-header>\n </div>\n\n <ng-container *ngIf=\"!customLayout\">\n <ngt-modal-body>\n <ng-content select='[body]'></ng-content>\n </ngt-modal-body>\n </ng-container>\n\n <!--Footer-->\n <ng-container *ngIf=\"!customLayout\">\n <ngt-modal-footer>\n <ng-content select='[footer]'></ng-content>\n </ngt-modal-footer>\n </ng-container>\n\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.NgtModalHeaderComponent, selector: "ngt-modal-header", inputs: ["disableDefaultCloses"] }, { kind: "component", type: i4.NgtModalBodyComponent, selector: "ngt-modal-body" }, { kind: "component", type: i5.NgtModalFooterComponent, selector: "ngt-modal-footer" }], animations: [
70
77
  trigger('fade', [
71
78
  state('void', style({ opacity: 0 })),
72
79
  transition(':enter, :leave', [
@@ -74,7 +81,7 @@ NgtModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
74
81
  ])
75
82
  ])
76
83
  ] });
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtModalComponent, decorators: [{
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtModalComponent, decorators: [{
78
85
  type: Component,
79
86
  args: [{ selector: 'ngt-modal', animations: [
80
87
  trigger('fade', [
@@ -99,4 +106,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
99
106
  }], onOpenModal: [{
100
107
  type: Output
101
108
  }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1tb2RhbC9uZ3QtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LW1vZGFsL25ndC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJcEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7QUFjeEYsTUFBTSxPQUFPLGlCQUFpQjtJQWExQixZQUNZLGlCQUFvQyxFQUNwQyxRQUFrQixFQUNFLHVCQUErQztRQUZuRSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDRSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXdCO1FBZi9ELGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUdyQyxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RELGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0QsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV2Qix5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsa0JBQWEsR0FBd0IsRUFB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LFFBQVE7NENBZkwsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFFVyxZQUFZO3NCQUE1QixNQUFNO2dCQUNVLFdBQVc7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0LCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RNb2RhbEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vbmd0LW1vZGFsLWhlYWRlci9uZ3QtbW9kYWwtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LW1vZGFsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2ZhZGUnLCBbXG4gICAgICAgICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXIsIDpsZWF2ZScsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKDMwMClcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RNb2RhbENvbXBvbmVudCB7XG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbUxheW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlRGVmYXVsdENsb3NlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ2xvc2VNb2RhbDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25PcGVuTW9kYWw6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHB1YmxpYyBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByaXZhdGUga2V5ZG93bkV2ZW50V2FzQWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgdGFpbFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmVcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMudGFpbFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLnRhaWxTdHlsaXphYmxlRGlyZWN0aXZlLmdldE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5ndFN0eWxlID0gbmV3IE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5ndFN0eWxlLmxvYWQodGhpcy5pbmplY3RvciwgJ05ndE1vZGFsJywge1xuICAgICAgICAgICAgdzogJ21kOm1heC13LW1kJyxcbiAgICAgICAgICAgIHB5OiAncHktNCcsXG4gICAgICAgICAgICBweDogJ3B4LTYnLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdvdmVyZmxvdy12aXNpYmxlJyxcbiAgICAgICAgICAgIGNvbG9yOiB7fVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcblxuICAgICAgICB0aGlzLm9uQ2xvc2VNb2RhbC5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW4oKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5hZGRLZXlkb3duRXZlbnRMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLmJpbmRPbkNsb3NlTW9kYWxCeUhlYWRlclN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIHRoaXMub25PcGVuTW9kYWwuZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkS2V5ZG93bkV2ZW50TGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlRGVmYXVsdENsb3NlcyAmJiAhdGhpcy5rZXlkb3duRXZlbnRXYXNBZGRlZCkge1xuICAgICAgICAgICAgdGhpcy5rZXlkb3duRXZlbnRXYXNBZGRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PSAyNykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRPbkNsb3NlTW9kYWxCeUhlYWRlclN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBOZ3RNb2RhbEhlYWRlckNvbXBvbmVudC5vbkNsb3NlTW9kYWxCeUhlYWRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggbWluLXctZnVsbCByZWxhdGl2ZSBqdXN0aWZ5LWNlbnRlciB0ZXh0LWdyYXktNzAwXCI+XG4gICAgPGRpdiAqbmdJZj1cImlzT3BlblwiIGNsYXNzPVwiZmxleCBmaXhlZCBtaW4tdy1mdWxsIGgtZnVsbCBpbnNldC0wIHB4LTYgcHktNiBtZDpweS0wIG1kOnB4LTAganVzdGlmeS1jZW50ZXJcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjcpOyB6LWluZGV4OiAxMTAwICFpbXBvcnRhbnQ7XCIgQGZhZGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGlzYWJsZURlZmF1bHRDbG9zZXNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmaXhlZCBpbnNldC0wIGgtZnVsbCB3LWZ1bGwgYmctYmxhY2sgb3BhY2l0eS0wIGN1cnNvci1kZWZhdWx0IHotMFwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPSdjbG9zZSgpJz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ3cnLCAnb3ZlcmZsb3cnXSkgfX0gcmVsYXRpdmUgYm9yZGVyIGJvcmRlci10ZWFsLTUwMCBiZy13aGl0ZSB3LWZ1bGwgc2VsZi1jZW50ZXIgcm91bmRlZCBzaGFkb3ctbGcgei0xMFwiXG4gICAgICAgICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDg1JTtcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItZGVmYXVsdCB0ZXh0LWxlZnQge3sgbmd0U3R5bGUuY29tcGlsZShbJ3B5JywgJ3B4J10pIH19XCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjdXN0b21MYXlvdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5ndC1tb2RhbC1oZWFkZXIgY2xhc3M9XCJ3LWZ1bGxcIiBbZGlzYWJsZURlZmF1bHRDbG9zZXNdPVwiZGlzYWJsZURlZmF1bHRDbG9zZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0nW2hlYWRlcl0nPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZ3QtbW9kYWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21MYXlvdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5ndC1tb2RhbC1ib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSdbYm9keV0nPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZ3QtbW9kYWwtYm9keT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDwhLS1Gb290ZXItLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbUxheW91dFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmd0LW1vZGFsLWZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0nW2Zvb3Rlcl0nPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZ3QtbW9kYWwtZm9vdGVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1tb2RhbC9uZ3QtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LW1vZGFsL25ndC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7OztBQWN4RixNQUFNLE9BQU8saUJBQWlCO0lBYzFCLFlBQ1ksaUJBQW9DLEVBQ3BDLFFBQWtCLEVBQ0UsdUJBQStDO1FBRm5FLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNFLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFoQi9ELGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUdyQyxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RELGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0QsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXpCLHlCQUFvQixHQUFZLEtBQUss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QUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNwQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7Z0NBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUM7NkJBQ2YsQ0FBQzt5QkFDTCxDQUFDO3FCQUNMOzswQkFtQkksSUFBSTs7MEJBQUksUUFBUTs0Q0FoQkwsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFFVyxZQUFZO3NCQUE1QixNQUFNO2dCQUNVLFdBQVc7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RNb2RhbEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vbmd0LW1vZGFsLWhlYWRlci9uZ3QtbW9kYWwtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LW1vZGFsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2ZhZGUnLCBbXG4gICAgICAgICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXIsIDpsZWF2ZScsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKDMwMClcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RNb2RhbENvbXBvbmVudCB7XG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbUxheW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlRGVmYXVsdENsb3NlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ2xvc2VNb2RhbDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25PcGVuTW9kYWw6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHB1YmxpYyBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgdmlld01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByaXZhdGUga2V5ZG93bkV2ZW50V2FzQWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgdGFpbFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmVcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMudGFpbFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLnRhaWxTdHlsaXphYmxlRGlyZWN0aXZlLmdldE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5ndFN0eWxlID0gbmV3IE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5ndFN0eWxlLmxvYWQodGhpcy5pbmplY3RvciwgJ05ndE1vZGFsJywge1xuICAgICAgICAgICAgdzogJ21kOm1heC13LW1kJyxcbiAgICAgICAgICAgIHB5OiAncHktNCcsXG4gICAgICAgICAgICBweDogJ3B4LTYnLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdvdmVyZmxvdy12aXNpYmxlJyxcbiAgICAgICAgICAgIGNvbG9yOiB7fVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcblxuICAgICAgICB0aGlzLm9uQ2xvc2VNb2RhbC5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW4oKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5hZGRLZXlkb3duRXZlbnRMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLmJpbmRPbkNsb3NlTW9kYWxCeUhlYWRlclN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIHRoaXMub25PcGVuTW9kYWwuZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkS2V5ZG93bkV2ZW50TGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlRGVmYXVsdENsb3NlcyAmJiAhdGhpcy5rZXlkb3duRXZlbnRXYXNBZGRlZCkge1xuICAgICAgICAgICAgdGhpcy5rZXlkb3duRXZlbnRXYXNBZGRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PSAyNykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVZpZXdNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kT25DbG9zZU1vZGFsQnlIZWFkZXJTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgTmd0TW9kYWxIZWFkZXJDb21wb25lbnQub25DbG9zZU1vZGFsQnlIZWFkZXIuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VWaWV3TW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IGZhbHNlO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LWZ1bGwgcmVsYXRpdmUganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTcwMFwiPlxuICAgIDxkaXYgKm5nSWY9XCJpc09wZW5cIiBjbGFzcz1cImZsZXggZml4ZWQgbWluLXctZnVsbCBoLWZ1bGwgaW5zZXQtMCBweC02IHB5LTYgbWQ6cHktMCBtZDpweC0wIGp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLC43KTsgei1pbmRleDogMTEwMCAhaW1wb3J0YW50O1wiIEBmYWRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVEZWZhdWx0Q2xvc2VzXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZml4ZWQgaW5zZXQtMCBoLWZ1bGwgdy1mdWxsIGJnLWJsYWNrIG9wYWNpdHktMCBjdXJzb3ItZGVmYXVsdCB6LTBcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT0nY2xvc2UoKSc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWyd3JywgJ292ZXJmbG93J10pIH19IHJlbGF0aXZlIGJvcmRlciBib3JkZXItdGVhbC01MDAgYmctd2hpdGUgdy1mdWxsIHNlbGYtY2VudGVyIHJvdW5kZWQgc2hhZG93LWxnIHotMTBcIlxuICAgICAgICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiA4NSU7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLWRlZmF1bHQgdGV4dC1sZWZ0IHt7IG5ndFN0eWxlLmNvbXBpbGUoWydweScsICdweCddKSB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY3VzdG9tTGF5b3V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZ3QtbW9kYWwtaGVhZGVyIGNsYXNzPVwidy1mdWxsXCIgW2Rpc2FibGVEZWZhdWx0Q2xvc2VzXT1cImRpc2FibGVEZWZhdWx0Q2xvc2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9J1toZWFkZXJdJz48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmd0LW1vZGFsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3VzdG9tTGF5b3V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZ3QtbW9kYWwtYm9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0nW2JvZHldJz48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmd0LW1vZGFsLWJvZHk+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tRm9vdGVyLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21MYXlvdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5ndC1tb2RhbC1mb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9J1tmb290ZXJdJz48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmd0LW1vZGFsLWZvb3Rlcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19