@rangertechnologies/ngnxt 2.1.242 → 2.1.243-beta

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 (90) hide show
  1. package/fesm2022/rangertechnologies-ngnxt.mjs +153 -185
  2. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  3. package/lib/components/image-cropper/component/image-cropper.component.d.ts +1 -1
  4. package/lib/components/pick-location/pick-location.component.d.ts +0 -1
  5. package/package.json +4 -6
  6. package/rangertechnologies-ngnxt-2.1.243-beta.tgz +0 -0
  7. package/esm2022/environments/version.mjs +0 -15
  8. package/esm2022/lib/ar.i18n.mjs +0 -29
  9. package/esm2022/lib/components/button/nxt-button.component.mjs +0 -165
  10. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -371
  11. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -274
  12. package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -51
  13. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -156
  14. package/esm2022/lib/components/datatable/datatable.component.mjs +0 -1625
  15. package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -283
  16. package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +0 -104
  17. package/esm2022/lib/components/image-cropper/component/cropper.state.mjs +0 -208
  18. package/esm2022/lib/components/image-cropper/component/image-cropper.component.mjs +0 -562
  19. package/esm2022/lib/components/image-cropper/interfaces/basic-event.interface.mjs +0 -2
  20. package/esm2022/lib/components/image-cropper/interfaces/cropper-options.interface.mjs +0 -2
  21. package/esm2022/lib/components/image-cropper/interfaces/cropper-position.interface.mjs +0 -2
  22. package/esm2022/lib/components/image-cropper/interfaces/dimensions.interface.mjs +0 -2
  23. package/esm2022/lib/components/image-cropper/interfaces/exif-transform.interface.mjs +0 -2
  24. package/esm2022/lib/components/image-cropper/interfaces/image-cropped-event.interface.mjs +0 -2
  25. package/esm2022/lib/components/image-cropper/interfaces/image-transform.interface.mjs +0 -2
  26. package/esm2022/lib/components/image-cropper/interfaces/index.mjs +0 -2
  27. package/esm2022/lib/components/image-cropper/interfaces/loaded-image.interface.mjs +0 -2
  28. package/esm2022/lib/components/image-cropper/interfaces/move-start.interface.mjs +0 -8
  29. package/esm2022/lib/components/image-cropper/services/crop.service.mjs +0 -139
  30. package/esm2022/lib/components/image-cropper/services/load-image.service.mjs +0 -194
  31. package/esm2022/lib/components/image-cropper/utils/cropper-position.utils.mjs +0 -239
  32. package/esm2022/lib/components/image-cropper/utils/exif.utils.mjs +0 -79
  33. package/esm2022/lib/components/image-cropper/utils/keyboard.utils.mjs +0 -40
  34. package/esm2022/lib/components/image-cropper/utils/percentage.utils.mjs +0 -4
  35. package/esm2022/lib/components/image-cropper/utils/resize.utils.mjs +0 -75
  36. package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +0 -403
  37. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +0 -2925
  38. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -101
  39. package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -234
  40. package/esm2022/lib/components/search-box/search-box.component.mjs +0 -413
  41. package/esm2022/lib/country.json +0 -43237
  42. package/esm2022/lib/en.i18n.mjs +0 -29
  43. package/esm2022/lib/i18n-config.service.mjs +0 -4
  44. package/esm2022/lib/i18n.component.mjs +0 -47
  45. package/esm2022/lib/i18n.module.mjs +0 -38
  46. package/esm2022/lib/i18n.pipe.mjs +0 -26
  47. package/esm2022/lib/i18n.service.mjs +0 -56
  48. package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
  49. package/esm2022/lib/interfaces/apimeta.mjs +0 -2
  50. package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
  51. package/esm2022/lib/model/bookletWrapper.mjs +0 -9
  52. package/esm2022/lib/model/changeWrapper.mjs +0 -11
  53. package/esm2022/lib/model/errorWrapper.mjs +0 -6
  54. package/esm2022/lib/nxt-app.component.mjs +0 -22
  55. package/esm2022/lib/nxt-app.module.mjs +0 -139
  56. package/esm2022/lib/nxt-app.service.mjs +0 -14
  57. package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -675
  58. package/esm2022/lib/pages/builder/element/element.component.mjs +0 -466
  59. package/esm2022/lib/pages/builder/form/form.component.mjs +0 -45
  60. package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +0 -89
  61. package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -1021
  62. package/esm2022/lib/pages/builder/templates/templates.component.mjs +0 -34
  63. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +0 -676
  64. package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +0 -1126
  65. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -841
  66. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2405
  67. package/esm2022/lib/pipe/custom-translate.pipe.mjs +0 -27
  68. package/esm2022/lib/pipe/date/date.pipe.mjs +0 -28
  69. package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +0 -28
  70. package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +0 -20
  71. package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +0 -20
  72. package/esm2022/lib/pipe/get-value.pipe.mjs +0 -48
  73. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -39
  74. package/esm2022/lib/pipe/time/time.pipe.mjs +0 -26
  75. package/esm2022/lib/sample.mjs +0 -3715
  76. package/esm2022/lib/services/change.service.mjs +0 -50
  77. package/esm2022/lib/services/country.service.mjs +0 -135
  78. package/esm2022/lib/services/data.service.mjs +0 -103
  79. package/esm2022/lib/services/form-builder.service.mjs +0 -375
  80. package/esm2022/lib/services/pdf-designer.service.mjs +0 -401
  81. package/esm2022/lib/services/salesforce.service.mjs +0 -46
  82. package/esm2022/lib/services/shared.service.mjs +0 -100
  83. package/esm2022/lib/services/storage.service.mjs +0 -44
  84. package/esm2022/lib/services/template.service.mjs +0 -351
  85. package/esm2022/lib/services/translation.service.mjs +0 -62
  86. package/esm2022/lib/tam.i18n.mjs +0 -29
  87. package/esm2022/lib/wrapper.mjs +0 -175
  88. package/esm2022/public-api.mjs +0 -25
  89. package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
  90. package/rangertechnologies-ngnxt-2.1.242.tgz +0 -0
@@ -1,104 +0,0 @@
1
- //MSM10JUL25
2
- import { Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import { FormsModule } from '@angular/forms';
5
- import { MatTooltipModule } from '@angular/material/tooltip';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/platform-browser";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@angular/forms";
10
- import * as i4 from "@angular/material/tooltip";
11
- export class IconSelectorComponent {
12
- sanitizer;
13
- allIcons;
14
- themeColor = '#ff0000'; // Default theme color
15
- height = '300px'; // Default height
16
- tooltipPosition = "above"; // above, below, left, right, before, after
17
- selectedIcon; // Selected icon name
18
- cdnIconURL = ""; // CDN URL for icons
19
- label = ''; // Input label
20
- labelFont = ''; // Input label font
21
- labelWeight = ''; // Input label Weight
22
- inputWeight = ''; // Input Weight
23
- labelSize = ''; // Input label Size
24
- labelColor = ''; // Input label Color
25
- showLabel = ''; // Input label Color
26
- required = false; // Required validation
27
- mode = 'edit'; // New mode input
28
- question = {};
29
- options = []; // For radio buttons
30
- iconSelected = new EventEmitter(); // Event emitter for selected icon
31
- filteredIcons = [];
32
- searchQuery = '';
33
- showDropdown = false;
34
- constructor(sanitizer) {
35
- this.sanitizer = sanitizer;
36
- }
37
- ngOnInit() {
38
- this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];
39
- }
40
- filterIcons() {
41
- if (!this.searchQuery) {
42
- this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];
43
- return;
44
- }
45
- this.filteredIcons = this.allIcons?.filter((icon) => icon?.name?.toLowerCase().includes(this.searchQuery?.toLowerCase()));
46
- }
47
- selectIcon(icon) {
48
- const iconSVG = this.getSVG(icon.svg);
49
- this.selectedIcon = iconSVG;
50
- this.iconSelected.emit(icon);
51
- }
52
- toggleDropdown() {
53
- this.showDropdown = !this.showDropdown;
54
- }
55
- getSVG(icon) {
56
- if (typeof icon === 'object') {
57
- return this.sanitizer.bypassSecurityTrustHtml(icon.changingThisBreaksApplicationSecurity || '');
58
- }
59
- return this.sanitizer.bypassSecurityTrustHtml(icon);
60
- }
61
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IconSelectorComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
62
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: IconSelectorComponent, isStandalone: true, selector: "nxt-icon-selector", inputs: { allIcons: "allIcons", themeColor: "themeColor", height: "height", tooltipPosition: "tooltipPosition", selectedIcon: "selectedIcon", cdnIconURL: "cdnIconURL", label: "label", labelFont: "labelFont", labelWeight: "labelWeight", inputWeight: "inputWeight", labelSize: "labelSize", labelColor: "labelColor", showLabel: "showLabel", required: "required", mode: "mode", question: "question", options: "options" }, outputs: { iconSelected: "iconSelected" }, ngImport: i0, template: "<!-- MSM10JUL25 for icon selector UI -->\n<div class=\"icon-selector\">\n <div class=\"selected-icon\" (click)=\"toggleDropdown()\">\n <span *ngIf=\"!selectedIcon\">Choose Icon</span>\n <div *ngIf=\"selectedIcon\" [innerHTML]=\"selectedIcon\" class=\"svg-container\"></div><span\n class=\"material-icons\">arrow_drop_down</span>\n </div>\n\n <div class=\"icon-selector-container\" [style.height]=\"height\" *ngIf=\"showDropdown\">\n <div class=\"search-container\">\n <div class=\"search-box\">\n <input type=\"text\" [(ngModel)]=\"searchQuery\" (input)=\"filterIcons()\" placeholder=\"Search icons...\"\n class=\"search-input\">\n </div>\n </div>\n\n <div class=\"icon-grid-container\" [style.max-height]=\"'calc(' + height + ' - 120px)'\">\n <div *ngIf=\"filteredIcons.length === 0\" class=\"no-results\">\n No icons found matching \"{{searchQuery}}\"\n </div>\n\n <div class=\"icon-grid\">\n <div *ngFor=\"let icon of filteredIcons\" class=\"icon-option\" [matTooltip]=icon.name\n [matTooltipPosition]=tooltipPosition>\n <div class=\"icon-option\">\n <div class=\"click-overlay\" (click)=\"selectIcon(icon); toggleDropdown()\"></div>\n <div [innerHTML]=\"getSVG(icon.svg)\" class=\"svg-container\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".icon-item svg{color:red}.icon-selector-container{padding:16px;max-width:400px;margin:0 auto;display:flex;flex-direction:column;border-radius:8px;box-shadow:0 2px 10px #0000001a;background-color:#fff;overflow:hidden}.search-container{margin:8px 0 16px}.icon-grid-container{overflow-y:scroll!important;padding-right:4px}.icon-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:5px}.icon-option{display:flex;align-items:center;justify-content:center;padding:6px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:#f5f5f5;aspect-ratio:1/1}.icon-option:hover{background-color:#e0e0e0;transform:scale(1.05)}.icon-option.selected{background-color:#e3f2fd;border:2px solid #2196f3}.no-results{text-align:center;padding:20px;color:#757575;font-style:italic}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}::-webkit-scrollbar-thumb{background:#888;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#555}.icon-selector{position:relative;display:inline-block}.selected-icon{display:flex;align-items:center;gap:4px;cursor:pointer;padding:3px;border:1px solid #ccc;border-radius:4px}.icon-dropdown{position:absolute;top:100%;left:0;z-index:1000;background:#fff;border:1px solid #ccc;border-radius:4px;max-height:200px;overflow-y:auto;display:grid;grid-template-columns:repeat(8,1fr);gap:5px;padding:3px}.icon-option{padding:3px;cursor:pointer;border-radius:4px;display:flex;justify-content:center}.icon-option:hover{background-color:#f0f0f0}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1}svg{width:20px!important;height:20px!important}.click-overlay{position:absolute;inset:0;z-index:1}.icon-option{position:relative;cursor:pointer}.svg-container{display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
63
- }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IconSelectorComponent, decorators: [{
65
- type: Component,
66
- args: [{ selector: 'nxt-icon-selector', imports: [CommonModule, FormsModule, MatTooltipModule], standalone: true, template: "<!-- MSM10JUL25 for icon selector UI -->\n<div class=\"icon-selector\">\n <div class=\"selected-icon\" (click)=\"toggleDropdown()\">\n <span *ngIf=\"!selectedIcon\">Choose Icon</span>\n <div *ngIf=\"selectedIcon\" [innerHTML]=\"selectedIcon\" class=\"svg-container\"></div><span\n class=\"material-icons\">arrow_drop_down</span>\n </div>\n\n <div class=\"icon-selector-container\" [style.height]=\"height\" *ngIf=\"showDropdown\">\n <div class=\"search-container\">\n <div class=\"search-box\">\n <input type=\"text\" [(ngModel)]=\"searchQuery\" (input)=\"filterIcons()\" placeholder=\"Search icons...\"\n class=\"search-input\">\n </div>\n </div>\n\n <div class=\"icon-grid-container\" [style.max-height]=\"'calc(' + height + ' - 120px)'\">\n <div *ngIf=\"filteredIcons.length === 0\" class=\"no-results\">\n No icons found matching \"{{searchQuery}}\"\n </div>\n\n <div class=\"icon-grid\">\n <div *ngFor=\"let icon of filteredIcons\" class=\"icon-option\" [matTooltip]=icon.name\n [matTooltipPosition]=tooltipPosition>\n <div class=\"icon-option\">\n <div class=\"click-overlay\" (click)=\"selectIcon(icon); toggleDropdown()\"></div>\n <div [innerHTML]=\"getSVG(icon.svg)\" class=\"svg-container\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".icon-item svg{color:red}.icon-selector-container{padding:16px;max-width:400px;margin:0 auto;display:flex;flex-direction:column;border-radius:8px;box-shadow:0 2px 10px #0000001a;background-color:#fff;overflow:hidden}.search-container{margin:8px 0 16px}.icon-grid-container{overflow-y:scroll!important;padding-right:4px}.icon-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:5px}.icon-option{display:flex;align-items:center;justify-content:center;padding:6px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:#f5f5f5;aspect-ratio:1/1}.icon-option:hover{background-color:#e0e0e0;transform:scale(1.05)}.icon-option.selected{background-color:#e3f2fd;border:2px solid #2196f3}.no-results{text-align:center;padding:20px;color:#757575;font-style:italic}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}::-webkit-scrollbar-thumb{background:#888;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#555}.icon-selector{position:relative;display:inline-block}.selected-icon{display:flex;align-items:center;gap:4px;cursor:pointer;padding:3px;border:1px solid #ccc;border-radius:4px}.icon-dropdown{position:absolute;top:100%;left:0;z-index:1000;background:#fff;border:1px solid #ccc;border-radius:4px;max-height:200px;overflow-y:auto;display:grid;grid-template-columns:repeat(8,1fr);gap:5px;padding:3px}.icon-option{padding:3px;cursor:pointer;border-radius:4px;display:flex;justify-content:center}.icon-option:hover{background-color:#f0f0f0}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1}svg{width:20px!important;height:20px!important}.click-overlay{position:absolute;inset:0;z-index:1}.icon-option{position:relative;cursor:pointer}.svg-container{display:flex;align-items:center;justify-content:center}\n"] }]
67
- }], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { allIcons: [{
68
- type: Input
69
- }], themeColor: [{
70
- type: Input
71
- }], height: [{
72
- type: Input
73
- }], tooltipPosition: [{
74
- type: Input
75
- }], selectedIcon: [{
76
- type: Input
77
- }], cdnIconURL: [{
78
- type: Input
79
- }], label: [{
80
- type: Input
81
- }], labelFont: [{
82
- type: Input
83
- }], labelWeight: [{
84
- type: Input
85
- }], inputWeight: [{
86
- type: Input
87
- }], labelSize: [{
88
- type: Input
89
- }], labelColor: [{
90
- type: Input
91
- }], showLabel: [{
92
- type: Input
93
- }], required: [{
94
- type: Input
95
- }], mode: [{
96
- type: Input
97
- }], question: [{
98
- type: Input
99
- }], options: [{
100
- type: Input
101
- }], iconSelected: [{
102
- type: Output
103
- }] } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9pY29uLXNlbGVjdG9yL2ljb24tc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvaWNvbi1zZWxlY3Rvci9pY29uLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQVU3RCxNQUFNLE9BQU8scUJBQXFCO0lBeUJ0QjtJQXhCRCxRQUFRLENBQUs7SUFDYixVQUFVLEdBQVcsU0FBUyxDQUFDLENBQUMsc0JBQXNCO0lBQ3RELE1BQU0sR0FBVyxPQUFPLENBQUMsQ0FBQyxpQkFBaUI7SUFDM0MsZUFBZSxHQUFXLE9BQU8sQ0FBQyxDQUFDLDJDQUEyQztJQUM5RSxZQUFZLENBQU0sQ0FBQyxxQkFBcUI7SUFDeEMsVUFBVSxHQUFXLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtJQUU3QyxLQUFLLEdBQVcsRUFBRSxDQUFDLENBQUUsY0FBYztJQUNuQyxTQUFTLEdBQVcsRUFBRSxDQUFDLENBQUUsbUJBQW1CO0lBQzVDLFdBQVcsR0FBVyxFQUFFLENBQUMsQ0FBRSxxQkFBcUI7SUFDaEQsV0FBVyxHQUFXLEVBQUUsQ0FBQyxDQUFFLGVBQWU7SUFDMUMsU0FBUyxHQUFX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QUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvL01TTTEwSlVMMjVcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnh0LWljb24tc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vaWNvbi1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlXSxcbiAgc3R5bGVVcmxzOiBbJy4vaWNvbi1zZWxlY3Rvci5jb21wb25lbnQuY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEljb25TZWxlY3RvckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGFsbEljb25zOiBbXTtcbiAgQElucHV0KCkgdGhlbWVDb2xvcjogc3RyaW5nID0gJyNmZjAwMDAnOyAvLyBEZWZhdWx0IHRoZW1lIGNvbG9yXG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gJzMwMHB4JzsgLy8gRGVmYXVsdCBoZWlnaHRcbiAgQElucHV0KCkgdG9vbHRpcFBvc2l0aW9uOiBzdHJpbmcgPSBcImFib3ZlXCI7IC8vIGFib3ZlLCBiZWxvdywgbGVmdCwgcmlnaHQsIGJlZm9yZSwgYWZ0ZXJcbiAgQElucHV0KCkgc2VsZWN0ZWRJY29uOiBhbnk7IC8vIFNlbGVjdGVkIGljb24gbmFtZVxuICBASW5wdXQoKSBjZG5JY29uVVJMOiBzdHJpbmcgPSBcIlwiOyAvLyBDRE4gVVJMIGZvciBpY29uc1xuXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJzsgIC8vIElucHV0IGxhYmVsXG4gIEBJbnB1dCgpIGxhYmVsRm9udDogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBsYWJlbCBmb250XG4gIEBJbnB1dCgpIGxhYmVsV2VpZ2h0OiBzdHJpbmcgPSAnJzsgIC8vIElucHV0IGxhYmVsIFdlaWdodFxuICBASW5wdXQoKSBpbnB1dFdlaWdodDogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBXZWlnaHRcbiAgQElucHV0KCkgbGFiZWxTaXplOiBzdHJpbmcgPSAnJzsgIC8vIElucHV0IGxhYmVsIFNpemVcbiAgQElucHV0KCkgbGFiZWxDb2xvcjogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBsYWJlbCBDb2xvclxuICBASW5wdXQoKSBzaG93TGFiZWw6IHN0cmluZyA9ICcnOyAgLy8gSW5wdXQgbGFiZWwgQ29sb3JcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIFJlcXVpcmVkIHZhbGlkYXRpb25cbiAgQElucHV0KCkgbW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ3ByaW50JyA9ICdlZGl0JzsgLy8gTmV3IG1vZGUgaW5wdXRcbiAgQElucHV0KCkgcXVlc3Rpb246IGFueSA9IHt9XG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107IC8vIEZvciByYWRpbyBidXR0b25zXG5cbiAgQE91dHB1dCgpIGljb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFdmVudCBlbWl0dGVyIGZvciBzZWxlY3RlZCBpY29uXG4gIGZpbHRlcmVkSWNvbnM6IGFueVtdID0gW107XG4gIHNlYXJjaFF1ZXJ5ID0gJyc7XG4gIHNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICApIHt9XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRJY29ucyA9IHRoaXMuYWxsSWNvbnMgIT0gbnVsbCAmJiB0aGlzLmFsbEljb25zLmxlbmd0aCA+IDAgPyBbLi4udGhpcy5hbGxJY29uc10gOiBbXTtcbiAgfVxuICBmaWx0ZXJJY29ucygpIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoUXVlcnkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJY29ucyA9IHRoaXMuYWxsSWNvbnMgIT0gbnVsbCAmJiB0aGlzLmFsbEljb25zLmxlbmd0aCA+IDAgPyBbLi4udGhpcy5hbGxJY29uc10gOiBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJlZEljb25zID0gdGhpcy5hbGxJY29ucz8uZmlsdGVyKChpY29uOiBhbnkpID0+XG4gICAgICBpY29uPy5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoUXVlcnk/LnRvTG93ZXJDYXNlKCkpXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdEljb24oaWNvbjogYW55KSB7XG4gICAgY29uc3QgaWNvblNWRyA9IHRoaXMuZ2V0U1ZHKGljb24uc3ZnKTtcbiAgICB0aGlzLnNlbGVjdGVkSWNvbiA9IGljb25TVkc7XG4gICAgdGhpcy5pY29uU2VsZWN0ZWQuZW1pdChpY29uKTtcbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gIXRoaXMuc2hvd0Ryb3Bkb3duO1xuICB9XG5cbiAgZ2V0U1ZHKGljb246IGFueSkge1xuICAgICAgaWYgKHR5cGVvZiBpY29uID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgICBpY29uLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHkgfHwgJydcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChpY29uKTtcbiAgfVxufVxuIiwiPCEtLSBNU00xMEpVTDI1IGZvciBpY29uIHNlbGVjdG9yIFVJIC0tPlxuPGRpdiBjbGFzcz1cImljb24tc2VsZWN0b3JcIj5cbiAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWljb25cIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiPlxuICAgIDxzcGFuICpuZ0lmPVwiIXNlbGVjdGVkSWNvblwiPkNob29zZSBJY29uPC9zcGFuPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEljb25cIiBbaW5uZXJIVE1MXT1cInNlbGVjdGVkSWNvblwiIGNsYXNzPVwic3ZnLWNvbnRhaW5lclwiPjwvZGl2PjxzcGFuXG4gICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+YXJyb3dfZHJvcF9kb3duPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWNvbi1zZWxlY3Rvci1jb250YWluZXJcIiBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiICpuZ0lmPVwic2hvd0Ryb3Bkb3duXCI+XG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYm94XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIiAoaW5wdXQpPVwiZmlsdGVySWNvbnMoKVwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGljb25zLi4uXCJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ncmlkLWNvbnRhaW5lclwiIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIidjYWxjKCcgKyBoZWlnaHQgKyAnIC0gMTIwcHgpJ1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkSWNvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJuby1yZXN1bHRzXCI+XG4gICAgICAgIE5vIGljb25zIGZvdW5kIG1hdGNoaW5nIFwie3tzZWFyY2hRdWVyeX19XCJcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ncmlkXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGljb24gb2YgZmlsdGVyZWRJY29uc1wiIGNsYXNzPVwiaWNvbi1vcHRpb25cIiBbbWF0VG9vbHRpcF09aWNvbi5uYW1lXG4gICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09dG9vbHRpcFBvc2l0aW9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLW9wdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrLW92ZXJsYXlcIiAoY2xpY2spPVwic2VsZWN0SWNvbihpY29uKTsgdG9nZ2xlRHJvcGRvd24oKVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFNWRyhpY29uLnN2ZylcIiBjbGFzcz1cInN2Zy1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -1,208 +0,0 @@
1
- import { checkCropperPosition } from '../utils/cropper-position.utils';
2
- export class CropperState {
3
- options = {
4
- format: 'png',
5
- output: 'blob',
6
- autoCrop: true,
7
- maintainAspectRatio: true,
8
- aspectRatio: 1,
9
- resetCropOnAspectRatioChange: true,
10
- resizeToWidth: 0,
11
- resizeToHeight: 0,
12
- cropperMinWidth: 0,
13
- cropperMinHeight: 0,
14
- cropperMaxHeight: 0,
15
- cropperMaxWidth: 0,
16
- cropperStaticWidth: 0,
17
- cropperStaticHeight: 0,
18
- canvasRotation: 0,
19
- roundCropper: false,
20
- onlyScaleDown: false,
21
- imageQuality: 92,
22
- backgroundColor: null,
23
- containWithinAspectRatio: false,
24
- hideResizeSquares: false,
25
- alignImage: 'center',
26
- cropperFrameAriaLabel: undefined,
27
- checkImageType: true,
28
- };
29
- loadedImage;
30
- maxSize;
31
- cropper = { x1: 0, x2: 0, y1: 0, y2: 0 };
32
- transform = {};
33
- // Internal
34
- cropperScaledMinWidth = 20;
35
- cropperScaledMinHeight = 20;
36
- cropperScaledMaxWidth = 20;
37
- cropperScaledMaxHeight = 20;
38
- stepSize = 3;
39
- setOptionsFromChanges(changes) {
40
- if (changes['options']?.currentValue) {
41
- this.setOptions(changes['options'].currentValue);
42
- }
43
- const options = Object.entries(changes)
44
- .filter(([key]) => key in this.options)
45
- .reduce((acc, [key, change]) => ({
46
- ...acc,
47
- [key]: change.currentValue,
48
- }), {});
49
- if (Object.keys(options).length > 0) {
50
- this.setOptions(options);
51
- }
52
- }
53
- setOptions(options) {
54
- this.options = {
55
- ...this.options,
56
- ...(options || {}),
57
- };
58
- this.validateOptions();
59
- if (!this.loadedImage?.transformed.image.complete || !this.maxSize) {
60
- return;
61
- }
62
- let positionPossiblyChanged = false;
63
- if ((this.options.maintainAspectRatio && options['aspectRatio']) ||
64
- options['maintainAspectRatio']) {
65
- this.setCropperScaledMinSize();
66
- this.setCropperScaledMaxSize();
67
- if (this.options.maintainAspectRatio &&
68
- (this.options.resetCropOnAspectRatioChange ||
69
- !this.aspectRatioIsCorrect())) {
70
- this.cropper = this.maxSizeCropperPosition();
71
- positionPossiblyChanged = true;
72
- }
73
- }
74
- else {
75
- if (options['cropperMinWidth'] || options['cropperMinHeight']) {
76
- this.setCropperScaledMinSize();
77
- positionPossiblyChanged = true;
78
- }
79
- if (options['cropperMaxWidth'] || options['cropperMaxHeight']) {
80
- this.setCropperScaledMaxSize();
81
- positionPossiblyChanged = true;
82
- }
83
- if (options['cropperStaticWidth'] || options['cropperStaticHeight']) {
84
- positionPossiblyChanged = true;
85
- }
86
- }
87
- if (positionPossiblyChanged) {
88
- this.cropper = checkCropperPosition(this.cropper, this, false);
89
- }
90
- }
91
- validateOptions() {
92
- if (this.options.maintainAspectRatio && !this.options.aspectRatio) {
93
- throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');
94
- }
95
- }
96
- setMaxSize(width, height) {
97
- this.maxSize = { width, height };
98
- this.setCropperScaledMinSize();
99
- this.setCropperScaledMaxSize();
100
- }
101
- setCropperScaledMinSize() {
102
- if (this.loadedImage?.transformed.size) {
103
- this.setCropperScaledMinWidth();
104
- this.setCropperScaledMinHeight();
105
- }
106
- else {
107
- this.cropperScaledMinWidth = 20;
108
- this.cropperScaledMinHeight = 20;
109
- }
110
- }
111
- setCropperScaledMinWidth() {
112
- this.cropperScaledMinWidth =
113
- this.options.cropperMinWidth > 0
114
- ? Math.max(20, (this.options.cropperMinWidth /
115
- this.loadedImage.transformed.size.width) *
116
- this.maxSize.width)
117
- : 20;
118
- }
119
- setCropperScaledMinHeight() {
120
- if (this.options.maintainAspectRatio) {
121
- this.cropperScaledMinHeight = Math.max(20, this.cropperScaledMinWidth / this.options.aspectRatio);
122
- }
123
- else if (this.options.cropperMinHeight > 0) {
124
- this.cropperScaledMinHeight = Math.max(20, (this.options.cropperMinHeight /
125
- this.loadedImage.transformed.size.height) *
126
- this.maxSize.height);
127
- }
128
- else {
129
- this.cropperScaledMinHeight = 20;
130
- }
131
- }
132
- setCropperScaledMaxSize() {
133
- if (this.loadedImage?.transformed.size) {
134
- const ratio = this.loadedImage.transformed.size.width / this.maxSize.width;
135
- this.cropperScaledMaxWidth =
136
- this.options.cropperMaxWidth > 20
137
- ? this.options.cropperMaxWidth / ratio
138
- : this.maxSize.width;
139
- this.cropperScaledMaxHeight =
140
- this.options.cropperMaxHeight > 20
141
- ? this.options.cropperMaxHeight / ratio
142
- : this.maxSize.height;
143
- if (this.options.maintainAspectRatio) {
144
- if (this.cropperScaledMaxWidth >
145
- this.cropperScaledMaxHeight * this.options.aspectRatio) {
146
- this.cropperScaledMaxWidth =
147
- this.cropperScaledMaxHeight * this.options.aspectRatio;
148
- }
149
- else if (this.cropperScaledMaxWidth <
150
- this.cropperScaledMaxHeight * this.options.aspectRatio) {
151
- this.cropperScaledMaxHeight =
152
- this.cropperScaledMaxWidth / this.options.aspectRatio;
153
- }
154
- }
155
- }
156
- else {
157
- this.cropperScaledMaxWidth = this.maxSize.width;
158
- this.cropperScaledMaxHeight = this.maxSize.height;
159
- }
160
- }
161
- equalsCropperPosition(cropper) {
162
- return ((this.cropper == null && cropper == null) ||
163
- (this.cropper != null &&
164
- cropper != null &&
165
- this.cropper.x1.toFixed(3) === cropper.x1.toFixed(3) &&
166
- this.cropper.y1.toFixed(3) === cropper.y1.toFixed(3) &&
167
- this.cropper.x2.toFixed(3) === cropper.x2.toFixed(3) &&
168
- this.cropper.y2.toFixed(3) === cropper.y2.toFixed(3)));
169
- }
170
- equalsTransformTranslate(transform) {
171
- return ((this.transform.translateH ?? 0) === (transform.translateH ?? 0) &&
172
- (this.transform.translateV ?? 0) === (transform.translateV ?? 0));
173
- }
174
- equalsTransform(transform) {
175
- return (this.equalsTransformTranslate(transform) &&
176
- (this.transform.scale ?? 1) === (transform.scale ?? 1) &&
177
- (this.transform.rotate ?? 0) === (transform.rotate ?? 0) &&
178
- (this.transform.flipH ?? false) === (transform.flipH ?? false) &&
179
- (this.transform.flipV ?? false) === (transform.flipV ?? false));
180
- }
181
- aspectRatioIsCorrect() {
182
- const currentCropAspectRatio = (this.cropper.x2 - this.cropper.x1) / (this.cropper.y2 - this.cropper.y1);
183
- return currentCropAspectRatio === this.options.aspectRatio;
184
- }
185
- resizeCropperPosition(oldMaxSize) {
186
- if (!this.cropper) {
187
- return;
188
- }
189
- if (oldMaxSize.width !== this.maxSize.width ||
190
- oldMaxSize.height !== this.maxSize.height) {
191
- this.cropper = {
192
- x1: (this.cropper.x1 * this.maxSize.width) / oldMaxSize.width,
193
- x2: (this.cropper.x2 * this.maxSize.width) / oldMaxSize.width,
194
- y1: (this.cropper.y1 * this.maxSize.height) / oldMaxSize.height,
195
- y2: (this.cropper.y2 * this.maxSize.height) / oldMaxSize.height,
196
- };
197
- }
198
- }
199
- maxSizeCropperPosition() {
200
- return {
201
- x1: 0,
202
- y1: 0,
203
- x2: this.maxSize.width,
204
- y2: this.maxSize.height,
205
- };
206
- }
207
- }
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvY29tcG9uZW50L2Nyb3BwZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsT0FBTyxHQUFtQjtRQUN4QixNQUFNLEVBQUUsS0FBSztRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFdBQVcsRUFBRSxDQUFDO1FBQ2QsNEJBQTRCLEVBQUUsSUFBSTtRQUNsQyxhQUFhLEVBQUUsQ0FBQztRQUNoQixjQUFjLEVBQUUsQ0FBQztRQUNqQixlQUFlLEVBQUUsQ0FBQztRQUNsQixnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsZUFBZSxFQUFFLENBQUM7UUFDbEIsa0JBQWtCLEVBQUUsQ0FBQztRQUNyQixtQkFBbUIsRUFBRSxDQUFDO1FBQ3RCLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLFlBQVksRUFBRSxLQUFLO1FBQ25CLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFlBQVksRUFBRSxFQUFFO1FBQ2hCLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLHdCQUF3QixFQUFFLEtBQUs7UUFDL0IsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixVQUFVLEVBQUUsUUFBUTtRQUNwQixxQkFBcUIsRUFBRSxTQUFTO1FBQ2hDLGNBQWMsRUFBRSxJQUFJO0tBQ3JCLENBQUM7SUFFRixXQUFXLENBQWU7SUFDMUIsT0FBTyxDQUFjO0lBQ3JCLE9BQU8sR0FBb0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxF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QUFDLE9BQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSztnQkFDOUQsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSztnQkFDOUQsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTTtnQkFDaEUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTTthQUNqRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsRUFBRSxFQUFFLENBQUM7WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxLQUFLO1lBQ3ZCLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLE1BQU07U0FDekIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENyb3BwZXJPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jcm9wcGVyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENyb3BwZXJQb3NpdGlvbixcbiAgRGltZW5zaW9ucyxcbiAgSW1hZ2VUcmFuc2Zvcm0sXG4gIExvYWRlZEltYWdlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNoZWNrQ3JvcHBlclBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvY3JvcHBlci1wb3NpdGlvbi51dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDcm9wcGVyU3RhdGUge1xuICBvcHRpb25zOiBDcm9wcGVyT3B0aW9ucyA9IHtcbiAgICBmb3JtYXQ6ICdwbmcnLFxuICAgIG91dHB1dDogJ2Jsb2InLFxuICAgIGF1dG9Dcm9wOiB0cnVlLFxuICAgIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUsXG4gICAgYXNwZWN0UmF0aW86IDEsXG4gICAgcmVzZXRDcm9wT25Bc3BlY3RSYXRpb0NoYW5nZTogdHJ1ZSxcbiAgICByZXNpemVUb1dpZHRoOiAwLFxuICAgIHJlc2l6ZVRvSGVpZ2h0OiAwLFxuICAgIGNyb3BwZXJNaW5XaWR0aDogMCxcbiAgICBjcm9wcGVyTWluSGVpZ2h0OiAwLFxuICAgIGNyb3BwZXJNYXhIZWlnaHQ6IDAsXG4gICAgY3JvcHBlck1heFdpZHRoOiAwLFxuICAgIGNyb3BwZXJTdGF0aWNXaWR0aDogMCxcbiAgICBjcm9wcGVyU3RhdGljSGVpZ2h0OiAwLFxuICAgIGNhbnZhc1JvdGF0aW9uOiAwLFxuICAgIHJvdW5kQ3JvcHBlcjogZmFsc2UsXG4gICAgb25seVNjYWxlRG93bjogZmFsc2UsXG4gICAgaW1hZ2VRdWFsaXR5OiA5MixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsXG4gICAgY29udGFpbldpdGhpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICBoaWRlUmVzaXplU3F1YXJlczogZmFsc2UsXG4gICAgYWxpZ25JbWFnZTogJ2NlbnRlcicsXG4gICAgY3JvcHBlckZyYW1lQXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gICAgY2hlY2tJbWFnZVR5cGU6IHRydWUsXG4gIH07XG5cbiAgbG9hZGVkSW1hZ2U/OiBMb2FkZWRJbWFnZTtcbiAgbWF4U2l6ZT86IERpbWVuc2lvbnM7XG4gIGNyb3BwZXI6IENyb3BwZXJQb3NpdGlvbiA9IHsgeDE6IDAsIHgyOiAwLCB5MTogMCwgeTI6IDAgfTtcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHt9O1xuXG4gIC8vIEludGVybmFsXG4gIGNyb3BwZXJTY2FsZWRNaW5XaWR0aCA9IDIwO1xuICBjcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNYXhXaWR0aCA9IDIwO1xuICBjcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID0gMjA7XG4gIHN0ZXBTaXplID0gMztcblxuICBzZXRPcHRpb25zRnJvbUNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKGNoYW5nZXNbJ29wdGlvbnMnXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmVudHJpZXMoY2hhbmdlcylcbiAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgaW4gdGhpcy5vcHRpb25zKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2tleSwgY2hhbmdlXSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2tleV06IGNoYW5nZS5jdXJyZW50VmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7fSBhcyBQYXJ0aWFsPENyb3BwZXJPcHRpb25zPlxuICAgICAgKTtcbiAgICBpZiAoT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogUGFydGlhbDxDcm9wcGVyT3B0aW9ucz4pOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAuLi4ob3B0aW9ucyB8fCB7fSksXG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlT3B0aW9ucygpO1xuXG4gICAgaWYgKCF0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5pbWFnZS5jb21wbGV0ZSB8fCAhdGhpcy5tYXhTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmIG9wdGlvbnNbJ2FzcGVjdFJhdGlvJ10pIHx8XG4gICAgICBvcHRpb25zWydtYWludGFpbkFzcGVjdFJhdGlvJ11cbiAgICApIHtcbiAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTtcbiAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1heFNpemUoKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8gJiZcbiAgICAgICAgKHRoaXMub3B0aW9ucy5yZXNldENyb3BPbkFzcGVjdFJhdGlvQ2hhbmdlIHx8XG4gICAgICAgICAgIXRoaXMuYXNwZWN0UmF0aW9Jc0NvcnJlY3QoKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNyb3BwZXIgPSB0aGlzLm1heFNpemVDcm9wcGVyUG9zaXRpb24oKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9uc1snY3JvcHBlck1pbldpZHRoJ10gfHwgb3B0aW9uc1snY3JvcHBlck1pbkhlaWdodCddKSB7XG4gICAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnNbJ2Nyb3BwZXJNYXhXaWR0aCddIHx8IG9wdGlvbnNbJ2Nyb3BwZXJNYXhIZWlnaHQnXSkge1xuICAgICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk7XG4gICAgICAgIHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zWydjcm9wcGVyU3RhdGljV2lkdGgnXSB8fCBvcHRpb25zWydjcm9wcGVyU3RhdGljSGVpZ2h0J10pIHtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvblBvc3NpYmx5Q2hhbmdlZCkge1xuICAgICAgdGhpcy5jcm9wcGVyID0gY2hlY2tDcm9wcGVyUG9zaXRpb24odGhpcy5jcm9wcGVyLCB0aGlzLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmICF0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2Bhc3BlY3RSYXRpb2Agc2hvdWxkID4gMCB3aGVuIGBtYWludGFpbkFzcGVjdFJhdGlvYCBpcyBlbmFibGVkJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZXRNYXhTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXhTaXplID0geyB3aWR0aCwgaGVpZ2h0IH07XG4gICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluU2l6ZSgpO1xuICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1heFNpemUoKTtcbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNaW5TaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5zaXplKSB7XG4gICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNaW5XaWR0aCgpO1xuICAgICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluSGVpZ2h0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbldpZHRoID0gMjA7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSAyMDtcbiAgICB9XG4gIH1cblxuICBzZXRDcm9wcGVyU2NhbGVkTWluV2lkdGgoKTogdm9pZCB7XG4gICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluV2lkdGggPVxuICAgICAgdGhpcy5vcHRpb25zLmNyb3BwZXJNaW5XaWR0aCA+IDBcbiAgICAgICAgPyBNYXRoLm1heChcbiAgICAgICAgICAgIDIwLFxuICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5jcm9wcGVyTWluV2lkdGggL1xuICAgICAgICAgICAgICB0aGlzLmxvYWRlZEltYWdlIS50cmFuc2Zvcm1lZC5zaXplLndpZHRoKSAqXG4gICAgICAgICAgICAgIHRoaXMubWF4U2l6ZSEud2lkdGhcbiAgICAgICAgICApXG4gICAgICAgIDogMjA7XG4gIH1cblxuICBzZXRDcm9wcGVyU2NhbGVkTWluSGVpZ2h0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbykge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIDIwLFxuICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5XaWR0aCAvIHRoaXMub3B0aW9ucy5hc3BlY3RSYXRpb1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jcm9wcGVyTWluSGVpZ2h0ID4gMCkge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIDIwLFxuICAgICAgICAodGhpcy5vcHRpb25zLmNyb3BwZXJNaW5IZWlnaHQgL1xuICAgICAgICAgIHRoaXMubG9hZGVkSW1hZ2UhLnRyYW5zZm9ybWVkLnNpemUuaGVpZ2h0KSAqXG4gICAgICAgICAgdGhpcy5tYXhTaXplIS5oZWlnaHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbkhlaWdodCA9IDIwO1xuICAgIH1cbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5zaXplKSB7XG4gICAgICBjb25zdCByYXRpbyA9XG4gICAgICAgIHRoaXMubG9hZGVkSW1hZ2UudHJhbnNmb3JtZWQuc2l6ZS53aWR0aCAvIHRoaXMubWF4U2l6ZSEud2lkdGg7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhXaWR0aCA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5jcm9wcGVyTWF4V2lkdGggPiAyMFxuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhXaWR0aCAvIHJhdGlvXG4gICAgICAgICAgOiB0aGlzLm1heFNpemUhLndpZHRoO1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhIZWlnaHQgPiAyMFxuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhIZWlnaHQgLyByYXRpb1xuICAgICAgICAgIDogdGhpcy5tYXhTaXplIS5oZWlnaHQ7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID5cbiAgICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW9cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4V2lkdGggPVxuICAgICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ICogdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoIDxcbiAgICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW9cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID1cbiAgICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoIC8gdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID0gdGhpcy5tYXhTaXplIS53aWR0aDtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heEhlaWdodCA9IHRoaXMubWF4U2l6ZSEuaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIGVxdWFsc0Nyb3BwZXJQb3NpdGlvbihjcm9wcGVyPzogQ3JvcHBlclBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmNyb3BwZXIgPT0gbnVsbCAmJiBjcm9wcGVyID09IG51bGwpIHx8XG4gICAgICAodGhpcy5jcm9wcGVyICE9IG51bGwgJiZcbiAgICAgICAgY3JvcHBlciAhPSBudWxsICYmXG4gICAgICAgIHRoaXMuY3JvcHBlci54MS50b0ZpeGVkKDMpID09PSBjcm9wcGVyLngxLnRvRml4ZWQoMykgJiZcbiAgICAgICAgdGhpcy5jcm9wcGVyLnkxLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueTEudG9GaXhlZCgzKSAmJlxuICAgICAgICB0aGlzLmNyb3BwZXIueDIudG9GaXhlZCgzKSA9PT0gY3JvcHBlci54Mi50b0ZpeGVkKDMpICYmXG4gICAgICAgIHRoaXMuY3JvcHBlci55Mi50b0ZpeGVkKDMpID09PSBjcm9wcGVyLnkyLnRvRml4ZWQoMykpXG4gICAgKTtcbiAgfVxuXG4gIGVxdWFsc1RyYW5zZm9ybVRyYW5zbGF0ZSh0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZUggPz8gMCkgJiZcbiAgICAgICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZVYgPz8gMClcbiAgICApO1xuICB9XG5cbiAgZXF1YWxzVHJhbnNmb3JtKHRyYW5zZm9ybTogSW1hZ2VUcmFuc2Zvcm0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lcXVhbHNUcmFuc2Zvcm1UcmFuc2xhdGUodHJhbnNmb3JtKSAmJlxuICAgICAgKHRoaXMudHJhbnNmb3JtLnNjYWxlID8/IDEpID09PSAodHJhbnNmb3JtLnNjYWxlID8/IDEpICYmXG4gICAgICAodGhpcy50cmFuc2Zvcm0ucm90YXRlID8/IDApID09PSAodHJhbnNmb3JtLnJvdGF0ZSA/PyAwKSAmJlxuICAgICAgKHRoaXMudHJhbnNmb3JtLmZsaXBIID8/IGZhbHNlKSA9PT0gKHRyYW5zZm9ybS5mbGlwSCA/PyBmYWxzZSkgJiZcbiAgICAgICh0aGlzLnRyYW5zZm9ybS5mbGlwViA/PyBmYWxzZSkgPT09ICh0cmFuc2Zvcm0uZmxpcFYgPz8gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIGFzcGVjdFJhdGlvSXNDb3JyZWN0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRDcm9wQXNwZWN0UmF0aW8gPVxuICAgICAgKHRoaXMuY3JvcHBlci54MiAtIHRoaXMuY3JvcHBlci54MSkgLyAodGhpcy5jcm9wcGVyLnkyIC0gdGhpcy5jcm9wcGVyLnkxKTtcbiAgICByZXR1cm4gY3VycmVudENyb3BBc3BlY3RSYXRpbyA9PT0gdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICB9XG5cbiAgcmVzaXplQ3JvcHBlclBvc2l0aW9uKG9sZE1heFNpemU6IERpbWVuc2lvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY3JvcHBlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBvbGRNYXhTaXplLndpZHRoICE9PSB0aGlzLm1heFNpemUhLndpZHRoIHx8XG4gICAgICBvbGRNYXhTaXplLmhlaWdodCAhPT0gdGhpcy5tYXhTaXplIS5oZWlnaHRcbiAgICApIHtcbiAgICAgIHRoaXMuY3JvcHBlciA9IHtcbiAgICAgICAgeDE6ICh0aGlzLmNyb3BwZXIueDEgKiB0aGlzLm1heFNpemUhLndpZHRoKSAvIG9sZE1heFNpemUud2lkdGgsXG4gICAgICAgIHgyOiAodGhpcy5jcm9wcGVyLngyICogdGhpcy5tYXhTaXplIS53aWR0aCkgLyBvbGRNYXhTaXplLndpZHRoLFxuICAgICAgICB5MTogKHRoaXMuY3JvcHBlci55MSAqIHRoaXMubWF4U2l6ZSEuaGVpZ2h0KSAvIG9sZE1heFNpemUuaGVpZ2h0LFxuICAgICAgICB5MjogKHRoaXMuY3JvcHBlci55MiAqIHRoaXMubWF4U2l6ZSEuaGVpZ2h0KSAvIG9sZE1heFNpemUuaGVpZ2h0LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBtYXhTaXplQ3JvcHBlclBvc2l0aW9uKCk6IENyb3BwZXJQb3NpdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHgxOiAwLFxuICAgICAgeTE6IDAsXG4gICAgICB4MjogdGhpcy5tYXhTaXplIS53aWR0aCxcbiAgICAgIHkyOiB0aGlzLm1heFNpemUhLmhlaWdodCxcbiAgICB9O1xuICB9XG59XG4iXX0=