@datarailsshared/datarailsshared 1.6.73 → 1.6.75

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.
@@ -1,28 +1,45 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, Input, TemplateRef, } from '@angular/core';
3
- import { take as _take, takeRight as _takeRight } from 'lodash';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, Input, QueryList, TemplateRef, ViewChild, ViewChildren, } from '@angular/core';
4
3
  import { DrInputsModule } from '../dr-inputs/dr-inputs.module';
5
4
  import * as i0 from "@angular/core";
6
5
  import * as i1 from "@angular/common";
7
6
  import * as i2 from "../dr-inputs/button/button.component";
8
- function DrGalleryComponent_div_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
7
+ const _c0 = ["carouselContainer"];
8
+ const _c1 = ["carouselItem"];
9
+ function DrGalleryComponent_dr_button_0_Template(rf, ctx) { if (rf & 1) {
10
+ const _r5 = i0.ɵɵgetCurrentView();
11
+ i0.ɵɵelementStart(0, "dr-button", 5);
12
+ i0.ɵɵlistener("click", function DrGalleryComponent_dr_button_0_Template_dr_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.prev()); });
13
+ i0.ɵɵelementEnd();
14
+ } if (rf & 2) {
15
+ i0.ɵɵproperty("icon", "dr-icon-arrow-left");
16
+ } }
17
+ function DrGalleryComponent_div_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {
9
18
  i0.ɵɵelementContainer(0);
10
19
  } }
11
- const _c0 = function (a0) { return { "dr-gallery-item_active": a0 }; };
12
- const _c1 = function (a0) { return { $implicit: a0 }; };
13
- function DrGalleryComponent_div_3_Template(rf, ctx) { if (rf & 1) {
14
- i0.ɵɵelementStart(0, "div", 5);
15
- i0.ɵɵtemplate(1, DrGalleryComponent_div_3_ng_container_1_Template, 1, 0, "ng-container", 6);
20
+ const _c2 = function (a0) { return { "dr-gallery-item_active": a0 }; };
21
+ const _c3 = function () { return {}; };
22
+ const _c4 = function (a0) { return { $implicit: a0 }; };
23
+ function DrGalleryComponent_div_4_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelementStart(0, "div", 6, 7);
25
+ i0.ɵɵtemplate(2, DrGalleryComponent_div_4_ng_container_2_Template, 1, 0, "ng-container", 8);
16
26
  i0.ɵɵelementEnd();
17
27
  } if (rf & 2) {
18
- const item_r1 = ctx.$implicit;
19
- const i_r2 = ctx.index;
20
- const ctx_r0 = i0.ɵɵnextContext();
21
- i0.ɵɵstyleMap(ctx_r0.getStyle());
22
- i0.ɵɵstyleProp("transition", ctx_r0.transition);
23
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c0, ctx_r0.centerIndex === i_r2));
24
- i0.ɵɵadvance(1);
25
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(9, _c1, item_r1));
28
+ const item_r6 = ctx.$implicit;
29
+ const i_r7 = ctx.index;
30
+ const ctx_r2 = i0.ɵɵnextContext();
31
+ i0.ɵɵstyleProp("transition", ctx_r2.transition);
32
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c2, ctx_r2.centerIndex === i_r7))("ngStyle", ctx_r2.modeType === "loop" ? ctx_r2.getStyle() : i0.ɵɵpureFunction0(8, _c3));
33
+ i0.ɵɵadvance(2);
34
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r2.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(9, _c4, item_r6));
35
+ } }
36
+ function DrGalleryComponent_dr_button_5_Template(rf, ctx) { if (rf & 1) {
37
+ const _r11 = i0.ɵɵgetCurrentView();
38
+ i0.ɵɵelementStart(0, "dr-button", 9);
39
+ i0.ɵɵlistener("click", function DrGalleryComponent_dr_button_5_Template_dr_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r10.next()); });
40
+ i0.ɵɵelementEnd();
41
+ } if (rf & 2) {
42
+ i0.ɵɵproperty("iconSize", "24px")("icon", "dr-icon-arrow-right");
26
43
  } }
27
44
  export class DrGalleryComponent {
28
45
  set items(value) {
@@ -47,25 +64,57 @@ export class DrGalleryComponent {
47
64
  get centerIndex() {
48
65
  return this.itemsCount > 1 && this.itemsCount % 2 !== 0 ? this.activeIndex + Math.floor(this.itemsCount / 2) : null;
49
66
  }
50
- ngOnChanges() {
51
- this.activeIndex = this.itemsCount;
52
- this.initializeCarousel();
53
- this.updateTransform();
54
- }
55
67
  constructor(cdr) {
56
68
  this.cdr = cdr;
57
69
  this._items = [];
58
70
  this._itemsCount = 3;
59
71
  this.defaultTransition = '250ms ease-in-out';
60
72
  this.noTransition = '0ms';
73
+ this.modeType = 'loop';
74
+ this.isOutsideBtns = false;
61
75
  this.activeIndex = 0;
62
76
  this.carouselItems = [];
63
- this.transform = `translateX(0%)`;
77
+ this.transform = 'translateX(0%)';
64
78
  this.transition = this.defaultTransition;
79
+ this.itemOffsets = [];
80
+ this.itemWidths = [];
81
+ }
82
+ ngAfterViewInit() {
83
+ // Wait for initial render
84
+ setTimeout(() => {
85
+ this.calculateItemOffsets();
86
+ this.updateTransform();
87
+ });
65
88
  }
66
89
  initializeCarousel() {
67
- this.carouselItems = [..._takeRight(this.items, this.itemsCount), ...this.items, ..._take(this.items, this.itemsCount)];
68
- this.updateTransform();
90
+ if (this.modeType === 'loop') {
91
+ this.carouselItems = [
92
+ ...this._items.slice(-this.itemsCount),
93
+ ...this._items,
94
+ ...this._items.slice(0, this.itemsCount),
95
+ ];
96
+ this.activeIndex = this.itemsCount;
97
+ }
98
+ else {
99
+ this.carouselItems = [...this._items];
100
+ this.activeIndex = 0;
101
+ }
102
+ setTimeout(() => {
103
+ this.calculateItemOffsets();
104
+ this.updateTransform();
105
+ });
106
+ }
107
+ calculateItemOffsets() {
108
+ this.itemOffsets = [];
109
+ this.itemWidths = [];
110
+ let offset = 0;
111
+ const elements = this.itemElements.toArray();
112
+ for (const el of elements) {
113
+ const width = el.nativeElement.offsetWidth;
114
+ this.itemOffsets.push(offset);
115
+ this.itemWidths.push(width);
116
+ offset += width;
117
+ }
69
118
  }
70
119
  getStyle() {
71
120
  const percent = `calc(${100 / this.itemsCount}%)`;
@@ -76,20 +125,54 @@ export class DrGalleryComponent {
76
125
  };
77
126
  }
78
127
  prev() {
79
- this.activeIndex--;
80
- this.transition = this.defaultTransition;
81
- this.updateTransform();
82
- if (this.activeIndex <= 0) {
83
- this.resetIndexAfterDelay(this.carouselItems.length - this.items.length);
128
+ if (this.modeType === 'loop') {
129
+ this.activeIndex--;
130
+ this.transition = this.defaultTransition;
131
+ this.updateTransform();
132
+ if (this.activeIndex <= 0) {
133
+ this.resetIndexAfterDelay(this.carouselItems.length - this.items.length);
134
+ }
135
+ }
136
+ else {
137
+ if (this.activeIndex > 0) {
138
+ this.activeIndex--;
139
+ this.updateTransform();
140
+ }
84
141
  }
85
142
  }
86
143
  next() {
87
- this.activeIndex++;
88
- this.transition = this.defaultTransition;
89
- this.updateTransform();
90
- if (this.activeIndex + this.itemsCount > this.carouselItems.length - 1) {
91
- this.resetIndexAfterDelay(this.itemsCount);
144
+ if (this.modeType === 'loop') {
145
+ this.activeIndex++;
146
+ this.transition = this.defaultTransition;
147
+ this.updateTransform();
148
+ if (this.activeIndex + this.itemsCount > this.carouselItems.length - 1) {
149
+ this.resetIndexAfterDelay(this.itemsCount);
150
+ }
92
151
  }
152
+ else {
153
+ if (this.activeIndex + 1 < this.carouselItems.length) {
154
+ this.activeIndex++;
155
+ this.updateTransform();
156
+ }
157
+ }
158
+ }
159
+ navigate(index) {
160
+ this.activeIndex = index;
161
+ this.updateTransform();
162
+ }
163
+ get canGoPrev() {
164
+ if (this.modeType === 'loop')
165
+ return true;
166
+ return !!(this.activeIndex > 0);
167
+ }
168
+ get canGoNext() {
169
+ if (this.modeType === 'loop')
170
+ return true;
171
+ const containerWidth = this.containerRef?.nativeElement?.offsetWidth || 0;
172
+ const currentOffset = this.itemOffsets[this.activeIndex] || 0;
173
+ const lastIndex = this.itemOffsets.length - 1;
174
+ const totalContentWidth = this.itemOffsets[lastIndex] + this.itemWidths[lastIndex];
175
+ return currentOffset + containerWidth < totalContentWidth - 1;
93
176
  }
94
177
  resetIndexAfterDelay(newIndex) {
95
178
  setTimeout(() => {
@@ -99,9 +182,17 @@ export class DrGalleryComponent {
99
182
  }, 250);
100
183
  }
101
184
  updateTransform(skipTransition = false) {
102
- this.transform = `translateX(${-100 * (this.activeIndex / this.itemsCount)}%)`;
185
+ if (this.modeType === 'loop') {
186
+ this.transform = `translateX(${-100 * (this.activeIndex / this.itemsCount)}%)`;
187
+ }
188
+ else {
189
+ const offset = this.itemOffsets[this.activeIndex] || 0;
190
+ this.transform = `translateX(-${offset}px)`;
191
+ }
103
192
  if (skipTransition)
104
193
  this.transition = this.noTransition;
194
+ else
195
+ this.transition = this.defaultTransition;
105
196
  this.cdr.markForCheck();
106
197
  }
107
198
  /** @nocollapse */ static { this.ɵfac = function DrGalleryComponent_Factory(t) { return new (t || DrGalleryComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
@@ -110,35 +201,50 @@ export class DrGalleryComponent {
110
201
  } if (rf & 2) {
111
202
  let _t;
112
203
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.template = _t.first);
113
- } }, inputs: { items: "items", itemsCount: "itemsCount" }, standalone: true, features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], decls: 5, vars: 8, consts: [["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_left", 3, "icon", "click"], [1, "dr-gallery-caroousel"], [1, "dr-gallery-items"], ["class", "dr-gallery-item", 3, "transition", "ngClass", "style", 4, "ngFor", "ngForOf"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_right", 3, "iconSize", "icon", "click"], [1, "dr-gallery-item", 3, "ngClass"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function DrGalleryComponent_Template(rf, ctx) { if (rf & 1) {
114
- i0.ɵɵelementStart(0, "dr-button", 0);
115
- i0.ɵɵlistener("click", function DrGalleryComponent_Template_dr_button_click_0_listener() { return ctx.prev(); });
116
- i0.ɵɵelementEnd();
117
- i0.ɵɵelementStart(1, "div", 1)(2, "div", 2);
118
- i0.ɵɵtemplate(3, DrGalleryComponent_div_3_Template, 2, 11, "div", 3);
204
+ } }, viewQuery: function DrGalleryComponent_Query(rf, ctx) { if (rf & 1) {
205
+ i0.ɵɵviewQuery(_c0, 5);
206
+ i0.ɵɵviewQuery(_c1, 5);
207
+ } if (rf & 2) {
208
+ let _t;
209
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.containerRef = _t.first);
210
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemElements = _t);
211
+ } }, inputs: { modeType: "modeType", isOutsideBtns: "isOutsideBtns", items: "items", itemsCount: "itemsCount" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 6, vars: 10, consts: [["class", "dr-gallery-btn dr-gallery-btn_left", "theme", "icon", 3, "icon", "click", 4, "ngIf"], ["carouselContainer", ""], [1, "dr-gallery-items"], ["class", "dr-gallery-item", 3, "transition", "ngClass", "ngStyle", 4, "ngFor", "ngForOf"], ["class", "dr-gallery-btn dr-gallery-btn_right", "theme", "icon", 3, "iconSize", "icon", "click", 4, "ngIf"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_left", 3, "icon", "click"], [1, "dr-gallery-item", 3, "ngClass", "ngStyle"], ["carouselItem", ""], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_right", 3, "iconSize", "icon", "click"]], template: function DrGalleryComponent_Template(rf, ctx) { if (rf & 1) {
212
+ i0.ɵɵtemplate(0, DrGalleryComponent_dr_button_0_Template, 1, 1, "dr-button", 0);
213
+ i0.ɵɵelementStart(1, "div", null, 1)(3, "div", 2);
214
+ i0.ɵɵtemplate(4, DrGalleryComponent_div_4_Template, 3, 11, "div", 3);
119
215
  i0.ɵɵelementEnd()();
120
- i0.ɵɵelementStart(4, "dr-button", 4);
121
- i0.ɵɵlistener("click", function DrGalleryComponent_Template_dr_button_click_4_listener() { return ctx.next(); });
122
- i0.ɵɵelementEnd();
216
+ i0.ɵɵtemplate(5, DrGalleryComponent_dr_button_5_Template, 1, 2, "dr-button", 4);
123
217
  } if (rf & 2) {
124
- i0.ɵɵproperty("icon", "dr-icon-arrow-left");
218
+ i0.ɵɵproperty("ngIf", !ctx.isOutsideBtns);
219
+ i0.ɵɵadvance(1);
220
+ i0.ɵɵclassMapInterpolate1("dr-gallery-caroousel dr-gallery-caroousel_", ctx.modeType, "");
125
221
  i0.ɵɵadvance(2);
126
222
  i0.ɵɵstyleProp("transition", ctx.transition)("transform", ctx.transform);
127
223
  i0.ɵɵadvance(1);
128
224
  i0.ɵɵproperty("ngForOf", ctx.carouselItems);
129
225
  i0.ɵɵadvance(1);
130
- i0.ɵɵproperty("iconSize", "24px")("icon", "dr-icon-arrow-right");
131
- } }, dependencies: [CommonModule, i1.NgClass, i1.NgForOf, i1.NgTemplateOutlet, DrInputsModule, i2.DrButtonComponent], styles: [".dr-gallery-caroousel[_ngcontent-%COMP%]{display:block;position:relative;overflow:hidden}.dr-gallery-items[_ngcontent-%COMP%]{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item[_ngcontent-%COMP%]{box-sizing:border-box;position:relative;padding:42px 24px;margin-top:-8px;flex-grow:1;width:100%;min-height:240px}.dr-gallery-item_active[_ngcontent-%COMP%]{transform:scale(1.2)}.dr-gallery-btn[_ngcontent-%COMP%]{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:40px!important;height:40px!important}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-radius:50%}.dr-gallery-btn_left[_ngcontent-%COMP%]{left:0}.dr-gallery-btn_right[_ngcontent-%COMP%]{right:0}"], changeDetection: 0 }); }
226
+ i0.ɵɵproperty("ngIf", !ctx.isOutsideBtns);
227
+ } }, dependencies: [CommonModule, i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, DrInputsModule, i2.DrButtonComponent], styles: [".dr-gallery-caroousel[_ngcontent-%COMP%]{display:block;position:relative;overflow:hidden}.dr-gallery-items[_ngcontent-%COMP%]{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item[_ngcontent-%COMP%]{box-sizing:border-box;position:relative;padding:42px 24px;margin-top:-8px;flex-grow:1}.dr-gallery-btn[_ngcontent-%COMP%]{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:40px!important;height:40px!important}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-radius:50%}.dr-gallery-btn_left[_ngcontent-%COMP%]{left:0}.dr-gallery-btn_right[_ngcontent-%COMP%]{right:0}.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item[_ngcontent-%COMP%]{width:100%;min-height:240px}.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item_active[_ngcontent-%COMP%]{transform:scale(1.2)}"], changeDetection: 0 }); }
132
228
  }
133
229
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrGalleryComponent, [{
134
230
  type: Component,
135
- args: [{ selector: 'dr-gallery', imports: [CommonModule, DrInputsModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-button class=\"dr-gallery-btn dr-gallery-btn_left\" (click)=\"prev()\" theme=\"icon\" [icon]=\"'dr-icon-arrow-left'\"> </dr-button>\n<div class=\"dr-gallery-caroousel\">\n <div class=\"dr-gallery-items\" [style.transition]=\"transition\" [style.transform]=\"transform\">\n <div\n *ngFor=\"let item of carouselItems; let i = index\"\n class=\"dr-gallery-item\"\n [style.transition]=\"transition\"\n [ngClass]=\"{ 'dr-gallery-item_active': centerIndex === i }\"\n [style]=\"getStyle()\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: item }\"></ng-container>\n </div>\n </div>\n</div>\n\n<dr-button\n class=\"dr-gallery-btn dr-gallery-btn_right\"\n (click)=\"next()\"\n [iconSize]=\"'24px'\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-right'\"></dr-button>\n", styles: [".dr-gallery-caroousel{display:block;position:relative;overflow:hidden}.dr-gallery-items{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item{box-sizing:border-box;position:relative;padding:42px 24px;margin-top:-8px;flex-grow:1;width:100%;min-height:240px}.dr-gallery-item_active{transform:scale(1.2)}.dr-gallery-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn button{width:40px!important;height:40px!important}.dr-gallery-btn button:hover{border-radius:50%}.dr-gallery-btn_left{left:0}.dr-gallery-btn_right{right:0}\n"] }]
231
+ args: [{ selector: 'dr-gallery', imports: [CommonModule, DrInputsModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_left\"\n (click)=\"prev()\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-left'\">\n</dr-button>\n\n<div #carouselContainer class=\"dr-gallery-caroousel dr-gallery-caroousel_{{ modeType }}\">\n <div class=\"dr-gallery-items\" [style.transition]=\"transition\" [style.transform]=\"transform\">\n <div\n #carouselItem\n *ngFor=\"let item of carouselItems; let i = index\"\n class=\"dr-gallery-item\"\n [style.transition]=\"transition\"\n [ngClass]=\"{ 'dr-gallery-item_active': centerIndex === i }\"\n [ngStyle]=\"modeType === 'loop' ? getStyle() : {}\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: item }\"></ng-container>\n </div>\n </div>\n</div>\n\n<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_right\"\n (click)=\"next()\"\n [iconSize]=\"'24px'\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-right'\">\n</dr-button>\n", styles: [".dr-gallery-caroousel{display:block;position:relative;overflow:hidden}.dr-gallery-items{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item{box-sizing:border-box;position:relative;padding:42px 24px;margin-top:-8px;flex-grow:1}.dr-gallery-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn button{width:40px!important;height:40px!important}.dr-gallery-btn button:hover{border-radius:50%}.dr-gallery-btn_left{left:0}.dr-gallery-btn_right{right:0}.dr-gallery-caroousel_loop .dr-gallery-item{width:100%;min-height:240px}.dr-gallery-caroousel_loop .dr-gallery-item_active{transform:scale(1.2)}\n"] }]
136
232
  }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { template: [{
137
233
  type: ContentChild,
138
234
  args: [TemplateRef]
235
+ }], modeType: [{
236
+ type: Input
237
+ }], isOutsideBtns: [{
238
+ type: Input
139
239
  }], items: [{
140
240
  type: Input
141
241
  }], itemsCount: [{
142
242
  type: Input
243
+ }], containerRef: [{
244
+ type: ViewChild,
245
+ args: ['carouselContainer']
246
+ }], itemElements: [{
247
+ type: ViewChildren,
248
+ args: ['carouselItem']
143
249
  }] }); })();
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1nYWxsZXJ5L2RyLWdhbGxlcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItZ2FsbGVyeS9kci1nYWxsZXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUVaLEtBQUssRUFFTCxXQUFXLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsU0FBUyxJQUFJLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7O0lDSG5ELHdCQUF3Rjs7Ozs7SUFONUYsOEJBS3lCO0lBQ3JCLDJGQUF3RjtJQUM1RixpQkFBTTs7Ozs7SUFGRixnQ0FBb0I7SUFGcEIsK0NBQStCO0lBQy9CLGlGQUEyRDtJQUU1QyxlQUE0QjtJQUE1QixrREFBNEIsZ0VBQUE7O0FEWXZELE1BQU0sT0FBTyxrQkFBa0I7SUFPM0IsSUFDSSxLQUFLLENBQUMsS0FBWTtRQUNsQixJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM3QjtJQUNMLENBQUM7SUFFRCxJQUFhLFVBQVUsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakYsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4SCxDQUFDO0lBT0QsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBN0NsQyxXQUFNLEdBQVUsRUFBRSxDQUFDO1FBQ25CLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2Ysc0JBQWlCLEdBQUcsbUJBQW1CLENBQUM7UUFDeEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUErQjlCLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztRQUM3QixlQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBUVMsQ0FBQztJQUV0QyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUTtRQUNKLE1BQU0sT0FBTyxHQUFHLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQztRQUNsRCxPQUFPO1lBQ0gsUUFBUSxFQUFFLE9BQU87WUFDakIsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLE9BQU87U0FDckIsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJO1FBQ0EsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVELElBQUk7UUFDQSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFFBQWdCO1FBQ3pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7WUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU8sZUFBZSxDQUFDLGNBQWMsR0FBRyxLQUFLO1FBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDL0UsSUFBSSxjQUFjO1lBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztzR0EvRlEsa0JBQWtCO21HQUFsQixrQkFBa0I7d0NBQ2IsV0FBVzs7Ozs7WUN0QjdCLG9DQUFrSDtZQUE1RCxrR0FBUyxVQUFNLElBQUM7WUFBNkMsaUJBQVk7WUFDL0gsOEJBQWtDLGFBQUE7WUFFMUIsb0VBT007WUFDVixpQkFBTSxFQUFBO1lBR1Ysb0NBS21DO1lBSC9CLGtHQUFTLFVBQU0sSUFBQztZQUdlLGlCQUFZOztZQW5CcUMsMkNBQTZCO1lBRS9FLGVBQStCO1lBQS9CLDRDQUErQiw0QkFBQTtZQUVwQyxlQUFrQjtZQUFsQiwyQ0FBa0I7WUFhM0MsZUFBbUI7WUFBbkIsaUNBQW1CLCtCQUFBOzRCREFULFlBQVksK0NBQUUsY0FBYzs7dUZBSTdCLGtCQUFrQjtjQVI5QixTQUFTOzJCQUNJLFlBQVksV0FHYixDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsY0FDM0IsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNO29FQUdwQixRQUFRO2tCQUFsQyxZQUFZO21CQUFDLFdBQVc7WUFPckIsS0FBSztrQkFEUixLQUFLO1lBUU8sVUFBVTtrQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZSBhcyBfdGFrZSwgdGFrZVJpZ2h0IGFzIF90YWtlUmlnaHQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRHJJbnB1dHNNb2R1bGUgfSBmcm9tICcuLi9kci1pbnB1dHMvZHItaW5wdXRzLm1vZHVsZSc7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2RyLWdhbGxlcnknLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kci1nYWxsZXJ5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kci1nYWxsZXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHJJbnB1dHNNb2R1bGVdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERyR2FsbGVyeUNvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUIH0+O1xuICAgIHByaXZhdGUgX2l0ZW1zOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgX2l0ZW1zQ291bnQgPSAzO1xuICAgIHJlYWRvbmx5IGRlZmF1bHRUcmFuc2l0aW9uID0gJzI1MG1zIGVhc2UtaW4tb3V0JztcbiAgICByZWFkb25seSBub1RyYW5zaXRpb24gPSAnMG1zJztcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zKHZhbHVlOiBhbnlbXSkge1xuICAgICAgICBpZiAodmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaXRlbXNDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtc0NvdW50ID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pdGVtc0NvdW50ID0gdmFsdWUgPiB0aGlzLml0ZW1zLmxlbmd0aCAtIDEgPyB0aGlzLml0ZW1zLmxlbmd0aCA6IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBpdGVtcygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG5cbiAgICBnZXQgaXRlbXNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zQ291bnQ7XG4gICAgfVxuXG4gICAgZ2V0IGNlbnRlckluZGV4KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtc0NvdW50ID4gMSAmJiB0aGlzLml0ZW1zQ291bnQgJSAyICE9PSAwID8gdGhpcy5hY3RpdmVJbmRleCArIE1hdGguZmxvb3IodGhpcy5pdGVtc0NvdW50IC8gMikgOiBudWxsO1xuICAgIH1cblxuICAgIGFjdGl2ZUluZGV4ID0gMDtcbiAgICBjYXJvdXNlbEl0ZW1zOiBhbnlbXSA9IFtdO1xuICAgIHRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKDAlKWA7XG4gICAgdHJhbnNpdGlvbiA9IHRoaXMuZGVmYXVsdFRyYW5zaXRpb247XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuaXRlbXNDb3VudDtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDYXJvdXNlbCgpIHtcbiAgICAgICAgdGhpcy5jYXJvdXNlbEl0ZW1zID0gWy4uLl90YWtlUmlnaHQodGhpcy5pdGVtcywgdGhpcy5pdGVtc0NvdW50KSwgLi4udGhpcy5pdGVtcywgLi4uX3Rha2UodGhpcy5pdGVtcywgdGhpcy5pdGVtc0NvdW50KV07XG4gICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgZ2V0U3R5bGUoKTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiB7XG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSBgY2FsYygkezEwMCAvIHRoaXMuaXRlbXNDb3VudH0lKWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW5XaWR0aDogcGVyY2VudCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBwZXJjZW50LFxuICAgICAgICAgICAgZmxleEJhc2lzOiBwZXJjZW50LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByZXYoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXgtLTtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbjtcbiAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0SW5kZXhBZnRlckRlbGF5KHRoaXMuY2Fyb3VzZWxJdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0KCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4Kys7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZGVmYXVsdFRyYW5zaXRpb247XG4gICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggKyB0aGlzLml0ZW1zQ291bnQgPiB0aGlzLmNhcm91c2VsSXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEluZGV4QWZ0ZXJEZWxheSh0aGlzLml0ZW1zQ291bnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEluZGV4QWZ0ZXJEZWxheShuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5ub1RyYW5zaXRpb247XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gbmV3SW5kZXg7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSh0cnVlKTtcbiAgICAgICAgfSwgMjUwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRyYW5zZm9ybShza2lwVHJhbnNpdGlvbiA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHstMTAwICogKHRoaXMuYWN0aXZlSW5kZXggLyB0aGlzLml0ZW1zQ291bnQpfSUpYDtcbiAgICAgICAgaWYgKHNraXBUcmFuc2l0aW9uKSB0aGlzLnRyYW5zaXRpb24gPSB0aGlzLm5vVHJhbnNpdGlvbjtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuIiwiPGRyLWJ1dHRvbiBjbGFzcz1cImRyLWdhbGxlcnktYnRuIGRyLWdhbGxlcnktYnRuX2xlZnRcIiAoY2xpY2spPVwicHJldigpXCIgdGhlbWU9XCJpY29uXCIgW2ljb25dPVwiJ2RyLWljb24tYXJyb3ctbGVmdCdcIj4gPC9kci1idXR0b24+XG48ZGl2IGNsYXNzPVwiZHItZ2FsbGVyeS1jYXJvb3VzZWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHItZ2FsbGVyeS1pdGVtc1wiIFtzdHlsZS50cmFuc2l0aW9uXT1cInRyYW5zaXRpb25cIiBbc3R5bGUudHJhbnNmb3JtXT1cInRyYW5zZm9ybVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJvdXNlbEl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHItZ2FsbGVyeS1pdGVtXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2l0aW9uXT1cInRyYW5zaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZHItZ2FsbGVyeS1pdGVtX2FjdGl2ZSc6IGNlbnRlckluZGV4ID09PSBpIH1cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImdldFN0eWxlKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZHItYnV0dG9uXG4gICAgY2xhc3M9XCJkci1nYWxsZXJ5LWJ0biBkci1nYWxsZXJ5LWJ0bl9yaWdodFwiXG4gICAgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgW2ljb25TaXplXT1cIicyNHB4J1wiXG4gICAgdGhlbWU9XCJpY29uXCJcbiAgICBbaWNvbl09XCInZHItaWNvbi1hcnJvdy1yaWdodCdcIj48L2RyLWJ1dHRvbj5cbiJdfQ==
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1nYWxsZXJ5L2RyLWdhbGxlcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItZ2FsbGVyeS9kci1nYWxsZXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7SUNkL0Qsb0NBS2tDO0lBRjlCLHdLQUFTLGVBQUEsYUFBTSxDQUFBLElBQUM7SUFHcEIsaUJBQVk7O0lBRFIsMkNBQTZCOzs7SUFZckIsd0JBQXdGOzs7Ozs7SUFQNUYsaUNBTXNEO0lBQ2xELDJGQUF3RjtJQUM1RixpQkFBTTs7Ozs7SUFKRiwrQ0FBK0I7SUFDL0IsaUZBQTJELHdGQUFBO0lBRTVDLGVBQTRCO0lBQTVCLGtEQUE0QixnRUFBQTs7OztJQUt2RCxvQ0FNbUM7SUFIL0IsMEtBQVMsZUFBQSxjQUFNLENBQUEsSUFBQztJQUlwQixpQkFBWTs7SUFIUixpQ0FBbUIsK0JBQUE7O0FESHZCLE1BQU0sT0FBTyxrQkFBa0I7SUFXM0IsSUFDSSxLQUFLLENBQUMsS0FBVTtRQUNoQixJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENB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QUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7c0dBaExRLGtCQUFrQjttR0FBbEIsa0JBQWtCO3dDQUNiLFdBQVc7Ozs7Ozs7Ozs7OztZQ3hCN0IsK0VBTVk7WUFFWixvQ0FBeUYsYUFBQTtZQUVqRixvRUFRTTtZQUNWLGlCQUFNLEVBQUE7WUFHViwrRUFPWTs7WUE1QlAseUNBQW9CO1lBT0QsZUFBZ0U7WUFBaEUseUZBQWdFO1lBQ3RELGVBQStCO1lBQS9CLDRDQUErQiw0QkFBQTtZQUdwQyxlQUFrQjtZQUFsQiwyQ0FBa0I7WUFXMUMsZUFBb0I7WUFBcEIseUNBQW9COzRCREpYLFlBQVksb0VBQUUsY0FBYzs7dUZBSTdCLGtCQUFrQjtjQVI5QixTQUFTOzJCQUNJLFlBQVksV0FHYixDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsY0FDM0IsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNO29FQUdwQixRQUFRO2tCQUFsQyxZQUFZO21CQUFDLFdBQVc7WUFPaEIsUUFBUTtrQkFBaEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFHRixLQUFLO2tCQURSLEtBQUs7WUFTRixVQUFVO2tCQURiLEtBQUs7WUEyQjBCLFlBQVk7a0JBQTNDLFNBQVM7bUJBQUMsbUJBQW1CO1lBQ0EsWUFBWTtrQkFBekMsWUFBWTttQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2UgYXMgX3Rha2UsIHRha2VSaWdodCBhcyBfdGFrZVJpZ2h0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERySW5wdXRzTW9kdWxlIH0gZnJvbSAnLi4vZHItaW5wdXRzL2RyLWlucHV0cy5tb2R1bGUnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1nYWxsZXJ5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHItZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHItZ2FsbGVyeS5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERySW5wdXRzTW9kdWxlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEckdhbGxlcnlDb21wb25lbnQ8VCA9IGFueT4ge1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlITogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFQgfT47XG5cbiAgICBwcml2YXRlIF9pdGVtczogVFtdID0gW107XG4gICAgcHJpdmF0ZSBfaXRlbXNDb3VudCA9IDM7XG4gICAgcmVhZG9ubHkgZGVmYXVsdFRyYW5zaXRpb24gPSAnMjUwbXMgZWFzZS1pbi1vdXQnO1xuICAgIHJlYWRvbmx5IG5vVHJhbnNpdGlvbiA9ICcwbXMnO1xuXG4gICAgQElucHV0KCkgbW9kZVR5cGU6ICdsb29wJyB8ICdkeW5hbWljJyA9ICdsb29wJztcbiAgICBASW5wdXQoKSBpc091dHNpZGVCdG5zID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtcyh2YWx1ZTogVFtdKSB7XG4gICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5faXRlbXNDb3VudCA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXRlbXNDb3VudCA9IHZhbHVlID4gdGhpcy5pdGVtcy5sZW5ndGggLSAxID8gdGhpcy5pdGVtcy5sZW5ndGggOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaXRlbXMoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cblxuICAgIGdldCBpdGVtc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0NvdW50O1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJJbmRleCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNDb3VudCA+IDEgJiYgdGhpcy5pdGVtc0NvdW50ICUgMiAhPT0gMCA/IHRoaXMuYWN0aXZlSW5kZXggKyBNYXRoLmZsb29yKHRoaXMuaXRlbXNDb3VudCAvIDIpIDogbnVsbDtcbiAgICB9XG5cbiAgICBhY3RpdmVJbmRleCA9IDA7XG4gICAgY2Fyb3VzZWxJdGVtczogVFtdID0gW107XG4gICAgdHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCUpJztcbiAgICB0cmFuc2l0aW9uID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbjtcblxuICAgIEBWaWV3Q2hpbGQoJ2Nhcm91c2VsQ29udGFpbmVyJykgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZHJlbignY2Fyb3VzZWxJdGVtJykgaXRlbUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcbiAgICBwcml2YXRlIGl0ZW1PZmZzZXRzOiBudW1iZXJbXSA9IFtdO1xuICAgIHByaXZhdGUgaXRlbVdpZHRoczogbnVtYmVyW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gV2FpdCBmb3IgaW5pdGlhbCByZW5kZXJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUl0ZW1PZmZzZXRzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDYXJvdXNlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZVR5cGUgPT09ICdsb29wJykge1xuICAgICAgICAgICAgdGhpcy5jYXJvdXNlbEl0ZW1zID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2l0ZW1zLnNsaWNlKC10aGlzLml0ZW1zQ291bnQpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2l0ZW1zLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2l0ZW1zLnNsaWNlKDAsIHRoaXMuaXRlbXNDb3VudCksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuaXRlbXNDb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxJdGVtcyA9IFsuLi50aGlzLl9pdGVtc107XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtT2Zmc2V0cygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtT2Zmc2V0cygpIHtcbiAgICAgICAgdGhpcy5pdGVtT2Zmc2V0cyA9IFtdO1xuICAgICAgICB0aGlzLml0ZW1XaWR0aHMgPSBbXTtcblxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLml0ZW1FbGVtZW50cy50b0FycmF5KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBlbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5pdGVtT2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1XaWR0aHMucHVzaCh3aWR0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gd2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTdHlsZSgpOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+IHtcbiAgICAgICAgY29uc3QgcGVyY2VudCA9IGBjYWxjKCR7MTAwIC8gdGhpcy5pdGVtc0NvdW50fSUpYDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbldpZHRoOiBwZXJjZW50LFxuICAgICAgICAgICAgbWF4V2lkdGg6IHBlcmNlbnQsXG4gICAgICAgICAgICBmbGV4QmFzaXM6IHBlcmNlbnQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJldigpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZVR5cGUgPT09ICdsb29wJykge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleC0tO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbjtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0SW5kZXhBZnRlckRlbGF5KHRoaXMuY2Fyb3VzZWxJdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4LS07XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5leHQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVUeXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXgrKztcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZGVmYXVsdFRyYW5zaXRpb247XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCArIHRoaXMuaXRlbXNDb3VudCA+IHRoaXMuY2Fyb3VzZWxJdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEluZGV4QWZ0ZXJEZWxheSh0aGlzLml0ZW1zQ291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggKyAxIDwgdGhpcy5jYXJvdXNlbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXgrKztcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmF2aWdhdGUoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkdvUHJldigpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZVR5cGUgPT09ICdsb29wJykgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiAhISh0aGlzLmFjdGl2ZUluZGV4ID4gMCk7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkdvTmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZVR5cGUgPT09ICdsb29wJykgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoIHx8IDA7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSB0aGlzLml0ZW1PZmZzZXRzW3RoaXMuYWN0aXZlSW5kZXhdIHx8IDA7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuaXRlbU9mZnNldHMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgdG90YWxDb250ZW50V2lkdGggPSB0aGlzLml0ZW1PZmZzZXRzW2xhc3RJbmRleF0gKyB0aGlzLml0ZW1XaWR0aHNbbGFzdEluZGV4XTtcblxuICAgICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIGNvbnRhaW5lcldpZHRoIDwgdG90YWxDb250ZW50V2lkdGggLSAxO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRJbmRleEFmdGVyRGVsYXkobmV3SW5kZXg6IG51bWJlcikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHRoaXMubm9UcmFuc2l0aW9uO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IG5ld0luZGV4O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0odHJ1ZSk7XG4gICAgICAgIH0sIDI1MCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUcmFuc2Zvcm0oc2tpcFRyYW5zaXRpb24gPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5tb2RlVHlwZSA9PT0gJ2xvb3AnKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7LTEwMCAqICh0aGlzLmFjdGl2ZUluZGV4IC8gdGhpcy5pdGVtc0NvdW50KX0lKWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLml0ZW1PZmZzZXRzW3RoaXMuYWN0aXZlSW5kZXhdIHx8IDA7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKC0ke29mZnNldH1weClgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChza2lwVHJhbnNpdGlvbikgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5ub1RyYW5zaXRpb247XG4gICAgICAgIGVsc2UgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbjtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuIiwiPGRyLWJ1dHRvblxuICAgICpuZ0lmPVwiIWlzT3V0c2lkZUJ0bnNcIlxuICAgIGNsYXNzPVwiZHItZ2FsbGVyeS1idG4gZHItZ2FsbGVyeS1idG5fbGVmdFwiXG4gICAgKGNsaWNrKT1cInByZXYoKVwiXG4gICAgdGhlbWU9XCJpY29uXCJcbiAgICBbaWNvbl09XCInZHItaWNvbi1hcnJvdy1sZWZ0J1wiPlxuPC9kci1idXR0b24+XG5cbjxkaXYgI2Nhcm91c2VsQ29udGFpbmVyIGNsYXNzPVwiZHItZ2FsbGVyeS1jYXJvb3VzZWwgZHItZ2FsbGVyeS1jYXJvb3VzZWxfe3sgbW9kZVR5cGUgfX1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHItZ2FsbGVyeS1pdGVtc1wiIFtzdHlsZS50cmFuc2l0aW9uXT1cInRyYW5zaXRpb25cIiBbc3R5bGUudHJhbnNmb3JtXT1cInRyYW5zZm9ybVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjY2Fyb3VzZWxJdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJvdXNlbEl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHItZ2FsbGVyeS1pdGVtXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2l0aW9uXT1cInRyYW5zaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZHItZ2FsbGVyeS1pdGVtX2FjdGl2ZSc6IGNlbnRlckluZGV4ID09PSBpIH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwibW9kZVR5cGUgPT09ICdsb29wJyA/IGdldFN0eWxlKCkgOiB7fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkci1idXR0b25cbiAgICAqbmdJZj1cIiFpc091dHNpZGVCdG5zXCJcbiAgICBjbGFzcz1cImRyLWdhbGxlcnktYnRuIGRyLWdhbGxlcnktYnRuX3JpZ2h0XCJcbiAgICAoY2xpY2spPVwibmV4dCgpXCJcbiAgICBbaWNvblNpemVdPVwiJzI0cHgnXCJcbiAgICB0aGVtZT1cImljb25cIlxuICAgIFtpY29uXT1cIidkci1pY29uLWFycm93LXJpZ2h0J1wiPlxuPC9kci1idXR0b24+XG4iXX0=