@fundamental-ngx/core 0.35.3 → 0.35.4-rc.2
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.
- package/action-bar/package.json +1 -1
- package/action-sheet/package.json +1 -1
- package/alert/package.json +1 -1
- package/avatar/package.json +1 -1
- package/avatar-group/package.json +1 -1
- package/bar/package.json +1 -1
- package/breadcrumb/breadcrumb-item.component.d.ts +20 -13
- package/breadcrumb/breadcrumb.component.d.ts +46 -34
- package/breadcrumb/breadcrumb.module.d.ts +3 -1
- package/breadcrumb/esm2020/breadcrumb-item.component.mjs +44 -23
- package/breadcrumb/esm2020/breadcrumb.component.mjs +93 -88
- package/breadcrumb/esm2020/breadcrumb.module.mjs +12 -4
- package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs +147 -114
- package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs +144 -111
- package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/breadcrumb/package.json +1 -1
- package/busy-indicator/package.json +1 -1
- package/button/package.json +1 -1
- package/calendar/package.json +1 -1
- package/card/package.json +1 -1
- package/carousel/package.json +1 -1
- package/checkbox/package.json +1 -1
- package/combobox/package.json +1 -1
- package/content-density/package.json +3 -3
- package/date-picker/package.json +1 -1
- package/datetime/package.json +1 -1
- package/datetime-picker/package.json +1 -1
- package/dialog/package.json +1 -1
- package/dynamic-page/package.json +1 -1
- package/dynamic-side-content/package.json +1 -1
- package/esm2020/breadcrumb/breadcrumb-item.component.mjs +44 -23
- package/esm2020/breadcrumb/breadcrumb.component.mjs +93 -88
- package/esm2020/breadcrumb/breadcrumb.module.mjs +12 -4
- package/esm2020/overflow-layout/directives/overflow-expand.directive.mjs +6 -4
- package/esm2020/overflow-layout/directives/overflow-item-container-ref.directive.mjs +2 -2
- package/esm2020/overflow-layout/directives/overflow-item-ref.directive.mjs +20 -8
- package/esm2020/overflow-layout/directives/overflow-layout-item-container.directive.mjs +30 -3
- package/esm2020/overflow-layout/directives/overflow-layout-item.directive.mjs +12 -3
- package/esm2020/overflow-layout/index.mjs +3 -1
- package/esm2020/overflow-layout/interfaces/overflow-expand.interface.mjs +1 -1
- package/esm2020/overflow-layout/interfaces/overflow-item-ref.interface.mjs +1 -1
- package/esm2020/overflow-layout/interfaces/overflow-item.interface.mjs +1 -1
- package/esm2020/overflow-layout/overflow-layout.component.mjs +83 -157
- package/esm2020/overflow-layout/overflow-layout.service.mjs +241 -0
- package/esm2020/time/time-column/time-column.component.mjs +7 -8
- package/esm2020/utils/functions/resize-observable.mjs +9 -2
- package/facets/package.json +1 -1
- package/feed-input/package.json +1 -1
- package/feed-list-item/package.json +1 -1
- package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +147 -114
- package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +378 -166
- package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-time.mjs +6 -7
- package/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-utils.mjs +8 -1
- package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +144 -111
- package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +375 -165
- package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-time.mjs +6 -7
- package/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-utils.mjs +8 -1
- package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
- package/file-uploader/package.json +1 -1
- package/fixed-card-layout/package.json +1 -1
- package/flexible-column-layout/package.json +1 -1
- package/form/package.json +1 -1
- package/formatted-text/package.json +1 -1
- package/grid-list/package.json +1 -1
- package/icon/package.json +1 -1
- package/illustrated-message/package.json +1 -1
- package/infinite-scroll/package.json +1 -1
- package/info-label/package.json +1 -1
- package/inline-help/package.json +1 -1
- package/input-group/package.json +1 -1
- package/layout-grid/package.json +1 -1
- package/layout-panel/package.json +1 -1
- package/link/package.json +1 -1
- package/list/package.json +1 -1
- package/menu/package.json +1 -1
- package/message-box/package.json +1 -1
- package/message-strip/package.json +1 -1
- package/message-toast/package.json +1 -1
- package/micro-process-flow/package.json +1 -1
- package/mobile-mode/package.json +1 -1
- package/multi-input/package.json +1 -1
- package/nested-list/package.json +1 -1
- package/notification/package.json +1 -1
- package/object-identifier/package.json +1 -1
- package/object-marker/package.json +1 -1
- package/object-number/package.json +1 -1
- package/object-status/package.json +1 -1
- package/overflow-layout/directives/overflow-expand.directive.d.ts +6 -5
- package/overflow-layout/directives/overflow-item-ref.directive.d.ts +16 -6
- package/overflow-layout/directives/overflow-layout-item-container.directive.d.ts +13 -1
- package/overflow-layout/directives/overflow-layout-item.directive.d.ts +7 -2
- package/overflow-layout/esm2020/directives/overflow-expand.directive.mjs +6 -4
- package/overflow-layout/esm2020/directives/overflow-item-container-ref.directive.mjs +2 -2
- package/overflow-layout/esm2020/directives/overflow-item-ref.directive.mjs +20 -8
- package/overflow-layout/esm2020/directives/overflow-layout-item-container.directive.mjs +30 -3
- package/overflow-layout/esm2020/directives/overflow-layout-item.directive.mjs +12 -3
- package/overflow-layout/esm2020/index.mjs +3 -1
- package/overflow-layout/esm2020/interfaces/overflow-expand.interface.mjs +1 -1
- package/overflow-layout/esm2020/interfaces/overflow-item-ref.interface.mjs +1 -1
- package/overflow-layout/esm2020/interfaces/overflow-item.interface.mjs +1 -1
- package/overflow-layout/esm2020/overflow-layout.component.mjs +83 -157
- package/overflow-layout/esm2020/overflow-layout.service.mjs +241 -0
- package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs +378 -166
- package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs +375 -165
- package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/overflow-layout/index.d.ts +2 -0
- package/overflow-layout/interfaces/overflow-expand.interface.d.ts +4 -4
- package/overflow-layout/interfaces/overflow-item-ref.interface.d.ts +14 -3
- package/overflow-layout/interfaces/overflow-item.interface.d.ts +2 -1
- package/overflow-layout/overflow-layout.component.d.ts +19 -31
- package/overflow-layout/overflow-layout.service.d.ts +90 -0
- package/overflow-layout/package.json +14 -13
- package/overflow-layout/tokens/overflow-expand.token.d.ts +1 -1
- package/overflow-layout/tokens/overflow-item-ref.token.d.ts +1 -1
- package/package.json +1 -1
- package/pagination/package.json +1 -1
- package/panel/package.json +1 -1
- package/popover/package.json +1 -1
- package/product-switch/package.json +1 -1
- package/progress-indicator/package.json +1 -1
- package/quick-view/package.json +1 -1
- package/radio/package.json +1 -1
- package/rating-indicator/package.json +1 -1
- package/resizable-card-layout/package.json +1 -1
- package/scroll-spy/package.json +1 -1
- package/scrollbar/package.json +1 -1
- package/segmented-button/package.json +1 -1
- package/select/package.json +1 -1
- package/shared/package.json +1 -1
- package/shellbar/package.json +1 -1
- package/side-navigation/package.json +1 -1
- package/slider/package.json +1 -1
- package/split-button/package.json +1 -1
- package/splitter/package.json +1 -1
- package/status-indicator/package.json +1 -1
- package/step-input/package.json +1 -1
- package/switch/package.json +1 -1
- package/table/package.json +1 -1
- package/tabs/package.json +1 -1
- package/text/package.json +1 -1
- package/theming/package.json +1 -1
- package/tile/package.json +1 -1
- package/time/esm2020/time-column/time-column.component.mjs +7 -8
- package/time/fesm2015/fundamental-ngx-core-time.mjs +6 -7
- package/time/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
- package/time/fesm2020/fundamental-ngx-core-time.mjs +6 -7
- package/time/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
- package/time/package.json +1 -1
- package/time/time-column/time-column.component.d.ts +1 -0
- package/time-picker/package.json +1 -1
- package/timeline/package.json +1 -1
- package/title/package.json +1 -1
- package/token/package.json +1 -1
- package/toolbar/package.json +1 -1
- package/tree/package.json +1 -1
- package/upload-collection/package.json +1 -1
- package/utils/esm2020/functions/resize-observable.mjs +9 -2
- package/utils/fesm2015/fundamental-ngx-core-utils.mjs +8 -1
- package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
- package/utils/fesm2020/fundamental-ngx-core-utils.mjs +8 -1
- package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
- package/utils/package.json +1 -1
- package/vertical-navigation/package.json +1 -1
- package/wizard/package.json +1 -1
|
@@ -1,28 +1,36 @@
|
|
|
1
|
-
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
2
1
|
import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, TAB, UP_ARROW } from '@angular/cdk/keycodes';
|
|
3
2
|
import { Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, QueryList, ChangeDetectorRef, ContentChild, HostBinding, ViewChild, ElementRef, NgZone, Output, EventEmitter, HostListener, Optional, ViewChildren, Input } from '@angular/core';
|
|
4
|
-
import { KeyUtil,
|
|
5
|
-
import { debounceTime,
|
|
3
|
+
import { KeyUtil, RtlService } from '@fundamental-ngx/core/utils';
|
|
4
|
+
import { debounceTime, Subject, Subscription } from 'rxjs';
|
|
6
5
|
import { OverflowLayoutItemContainerDirective } from './directives/overflow-layout-item-container.directive';
|
|
6
|
+
import { OverflowLayoutService } from './overflow-layout.service';
|
|
7
7
|
import { FD_OVERFLOW_CONTAINER } from './tokens/overflow-container.token';
|
|
8
8
|
import { FD_OVERFLOW_EXPAND } from './tokens/overflow-expand.token';
|
|
9
9
|
import { FD_OVERFLOW_ITEM_REF } from './tokens/overflow-item-ref.token';
|
|
10
10
|
import { FD_OVERFLOW_ITEM } from './tokens/overflow-item.token';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "
|
|
13
|
-
import * as i2 from "@fundamental-ngx/core/
|
|
14
|
-
import * as i3 from "@fundamental-ngx/core/
|
|
15
|
-
import * as i4 from "@
|
|
16
|
-
import * as i5 from "
|
|
17
|
-
import * as i6 from "./directives/overflow-item-container
|
|
18
|
-
import * as i7 from "./directives/overflow-
|
|
12
|
+
import * as i1 from "./overflow-layout.service";
|
|
13
|
+
import * as i2 from "@fundamental-ngx/core/utils";
|
|
14
|
+
import * as i3 from "@fundamental-ngx/core/popover";
|
|
15
|
+
import * as i4 from "@fundamental-ngx/core/button";
|
|
16
|
+
import * as i5 from "@angular/common";
|
|
17
|
+
import * as i6 from "./directives/overflow-layout-item-container.directive";
|
|
18
|
+
import * as i7 from "./directives/overflow-item-container-ref.directive";
|
|
19
|
+
import * as i8 from "./directives/overflow-layout-popover-content.directive";
|
|
19
20
|
export class OverflowLayoutComponent {
|
|
20
21
|
/** @hidden */
|
|
21
|
-
constructor(_cdr, _zone, _elRef, _rtlService) {
|
|
22
|
+
constructor(_cdr, _zone, _elRef, _overflowLayoutService, _rtlService) {
|
|
22
23
|
this._cdr = _cdr;
|
|
23
24
|
this._zone = _zone;
|
|
24
25
|
this._elRef = _elRef;
|
|
26
|
+
this._overflowLayoutService = _overflowLayoutService;
|
|
25
27
|
this._rtlService = _rtlService;
|
|
28
|
+
/** Direction of the fitting items calculation. */
|
|
29
|
+
this.showMorePosition = 'right';
|
|
30
|
+
/** Whether to render hidden items in reverse order. */
|
|
31
|
+
this.reverseHiddenItems = false;
|
|
32
|
+
/** Whether to enable keyboard navigation. */
|
|
33
|
+
this.enableKeyboardNavigation = true;
|
|
26
34
|
/**
|
|
27
35
|
* Event, triggered when amount of visible items has been changed.
|
|
28
36
|
*/
|
|
@@ -40,16 +48,14 @@ export class OverflowLayoutComponent {
|
|
|
40
48
|
/** @hidden */
|
|
41
49
|
this._initialClass = 'fd-overflow-layout';
|
|
42
50
|
/** @hidden */
|
|
43
|
-
this._listenToItemResize = true;
|
|
44
|
-
/** @hidden */
|
|
45
51
|
this._subscription = new Subscription();
|
|
46
52
|
/** @hidden */
|
|
47
53
|
this._fillTrigger$ = new Subject();
|
|
48
54
|
/** @hidden */
|
|
49
|
-
this._dir = 'ltr';
|
|
50
|
-
/** @hidden */
|
|
51
55
|
this._maxVisibleItems = Infinity;
|
|
52
|
-
|
|
56
|
+
/** @hidden */
|
|
57
|
+
this._canListenToResize = false;
|
|
58
|
+
this._subscription.add(this._fillTrigger$.pipe(debounceTime(30)).subscribe(() => this._overflowLayoutService.fitVisibleItems()));
|
|
53
59
|
}
|
|
54
60
|
/**
|
|
55
61
|
* Maximum amount of visible items.
|
|
@@ -68,26 +74,16 @@ export class OverflowLayoutComponent {
|
|
|
68
74
|
* Triggers layout recalculation of the items.
|
|
69
75
|
*/
|
|
70
76
|
triggerRecalculation() {
|
|
77
|
+
if (!this._canListenToResize) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this._overflowLayoutService.setConfig(this._getConfig());
|
|
71
81
|
this._fillTrigger$.next();
|
|
72
82
|
}
|
|
73
83
|
/** @hidden */
|
|
74
84
|
ngOnDestroy() {
|
|
75
85
|
this._subscription.unsubscribe();
|
|
76
86
|
}
|
|
77
|
-
/** @hidden */
|
|
78
|
-
_keyUpHandler(event) {
|
|
79
|
-
if (KeyUtil.isKeyCode(event, TAB)) {
|
|
80
|
-
const index = this._allItems.findIndex((item) => item.overflowItem?.focusable && item.elementRef.nativeElement === event.target);
|
|
81
|
-
if (index !== -1) {
|
|
82
|
-
this._keyboardEventsManager.setActiveItem(index);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {
|
|
86
|
-
event.preventDefault();
|
|
87
|
-
// passing the event to key manager so, we get a change fired
|
|
88
|
-
this._keyboardEventsManager.onKeydown(event);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
87
|
/**
|
|
92
88
|
* Sets current focused element.
|
|
93
89
|
* @param element Element that needs to be focused.
|
|
@@ -95,7 +91,7 @@ export class OverflowLayoutComponent {
|
|
|
95
91
|
setFocusedElement(element) {
|
|
96
92
|
const index = this._overflowItems.toArray().findIndex((item) => item === element);
|
|
97
93
|
if (index !== -1) {
|
|
98
|
-
this._keyboardEventsManager.setActiveItem(index);
|
|
94
|
+
this._overflowLayoutService._keyboardEventsManager.setActiveItem(index);
|
|
99
95
|
}
|
|
100
96
|
}
|
|
101
97
|
/**
|
|
@@ -117,167 +113,97 @@ export class OverflowLayoutComponent {
|
|
|
117
113
|
}
|
|
118
114
|
/** @hidden */
|
|
119
115
|
ngAfterViewInit() {
|
|
120
|
-
this.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
this.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
116
|
+
this._subscription.add(this._overflowLayoutService.detectChanges.subscribe(() => {
|
|
117
|
+
this._cdr.detectChanges();
|
|
118
|
+
}));
|
|
119
|
+
this._subscription.add(this._overflowLayoutService.onResult.subscribe((result) => {
|
|
120
|
+
this._hiddenItems = result.hiddenItems;
|
|
121
|
+
this._showMore = result.showMore;
|
|
122
|
+
this.hiddenItemsCount.emit(result.hiddenItems.length);
|
|
123
|
+
this.visibleItemsCount.emit(this._allItems.filter((i) => !i.hidden).length);
|
|
124
|
+
this._cdr.detectChanges();
|
|
125
|
+
}));
|
|
127
126
|
this._subscription.add(this._items.changes.subscribe(() => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
});
|
|
127
|
+
this._allItems = this._items.toArray();
|
|
128
|
+
this._cdr.detectChanges();
|
|
131
129
|
}));
|
|
132
|
-
this.
|
|
130
|
+
this._allItems = this._items.toArray();
|
|
131
|
+
this._cdr.detectChanges();
|
|
132
|
+
this._overflowLayoutService.startListening(this._getConfig());
|
|
133
|
+
this._canListenToResize = true;
|
|
133
134
|
}
|
|
134
135
|
/** @hidden */
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
.
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
136
|
+
_getConfig() {
|
|
137
|
+
return {
|
|
138
|
+
visibleItems: this._visibleItems,
|
|
139
|
+
items: this._items,
|
|
140
|
+
itemsWrapper: this._itemsWrapper.nativeElement,
|
|
141
|
+
showMoreContainer: this._showMoreContainer.nativeElement,
|
|
142
|
+
layoutContainerElement: this._layoutContainer.nativeElement,
|
|
143
|
+
maxVisibleItems: this.maxVisibleItems,
|
|
144
|
+
direction: this.showMorePosition,
|
|
145
|
+
enableKeyboardNavigation: this.enableKeyboardNavigation,
|
|
146
|
+
reverseHiddenItems: this.reverseHiddenItems
|
|
147
|
+
};
|
|
143
148
|
}
|
|
144
149
|
/** @hidden */
|
|
145
|
-
|
|
146
|
-
this.
|
|
147
|
-
this._allItems = this._items.toArray();
|
|
148
|
-
this._visibleItems.forEach((i) => (i.containerRef.hidden = false));
|
|
149
|
-
this._allItems.forEach((item, index) => {
|
|
150
|
-
item.hidden = false;
|
|
151
|
-
item.index = index;
|
|
152
|
-
});
|
|
153
|
-
this._cdr.detectChanges();
|
|
154
|
-
const containerWidth = this._elRef.nativeElement.getBoundingClientRect().width;
|
|
155
|
-
const itemsContainerWidth = this._itemsWrapper.nativeElement.getBoundingClientRect().width;
|
|
156
|
-
if (containerWidth >= itemsContainerWidth &&
|
|
157
|
-
this._visibleItems.length <= this.maxVisibleItems &&
|
|
158
|
-
this._hiddenItems.length === 0) {
|
|
159
|
-
this._showMore = false;
|
|
160
|
-
this._cdr.detectChanges();
|
|
161
|
-
this._listenToItemResize = true;
|
|
150
|
+
_keyUpHandler(event) {
|
|
151
|
+
if (!this.enableKeyboardNavigation) {
|
|
162
152
|
return;
|
|
163
153
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
this._cdr.detectChanges();
|
|
169
|
-
const showMoreContainerWidth = this._showMoreContainer.nativeElement.getBoundingClientRect().width;
|
|
170
|
-
let layoutWidth = this._layoutContainer.nativeElement.getBoundingClientRect().width;
|
|
171
|
-
// Try to find all forced visible items
|
|
172
|
-
const forcedItemsIndexes = this._getForcedItemsIndexes();
|
|
173
|
-
forcedItemsIndexes.forEach((itemIndex) => {
|
|
174
|
-
const container = this._visibleItems.get(itemIndex);
|
|
175
|
-
if (!container) {
|
|
176
|
-
return;
|
|
154
|
+
if (KeyUtil.isKeyCode(event, TAB)) {
|
|
155
|
+
const index = this._allItems.findIndex((item) => item.overflowItem?.focusable && item.elementRef.nativeElement === event.target);
|
|
156
|
+
if (index !== -1) {
|
|
157
|
+
this._overflowLayoutService._keyboardEventsManager.setActiveItem(index);
|
|
177
158
|
}
|
|
178
|
-
const elementSize = this._getElementWidth(container.elementRef.nativeElement);
|
|
179
|
-
layoutWidth -= elementSize;
|
|
180
|
-
});
|
|
181
|
-
if (layoutWidth < 0 && forcedItemsIndexes.length > 0) {
|
|
182
|
-
console.warn('There is no enough space to fit all forced visible items into the container. Please adjust their visibility accordingly.');
|
|
183
159
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
itemRef.hidden = true;
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
const elementSize = this._getElementWidth(item.elementRef.nativeElement);
|
|
192
|
-
const combinedWidth = fittingElmsWidth + elementSize;
|
|
193
|
-
if ((combinedWidth <= layoutWidth ||
|
|
194
|
-
(item === this._visibleItems.last && combinedWidth <= layoutWidth + showMoreContainerWidth)) &&
|
|
195
|
-
fittingElmCount < this.maxVisibleItems) {
|
|
196
|
-
fittingElmsWidth += elementSize;
|
|
197
|
-
fittingElmCount++;
|
|
198
|
-
}
|
|
199
|
-
else if (!itemRef.overflowItem.forceVisibility) {
|
|
200
|
-
shouldHideItems = true;
|
|
201
|
-
item.containerRef.hidden = true;
|
|
202
|
-
itemRef.hidden = true;
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
this._hiddenItems = this._allItems.filter((i) => i.hidden);
|
|
206
|
-
this.visibleItemsCount.emit(this._allItems.filter((i) => !i.hidden).length);
|
|
207
|
-
this.hiddenItemsCount.emit(this._hiddenItems.length);
|
|
208
|
-
this._showMore = this._hiddenItems.length > 0;
|
|
209
|
-
this._cdr.detectChanges();
|
|
210
|
-
this._listenToItemResize = true;
|
|
211
|
-
}
|
|
212
|
-
/** @hidden */
|
|
213
|
-
_setFocusKeyManager() {
|
|
214
|
-
this._dir = this._rtlService?.rtl.value ? 'rtl' : 'ltr';
|
|
215
|
-
this._keyboardEventsManager = new FocusKeyManager(this._overflowItems)
|
|
216
|
-
.withWrap()
|
|
217
|
-
.withHorizontalOrientation(this._dir)
|
|
218
|
-
.skipPredicate((item) => !item.focusable || item.hidden);
|
|
219
|
-
}
|
|
220
|
-
/** @hidden Rtl change subscription */
|
|
221
|
-
_subscribeToRtl() {
|
|
222
|
-
if (!this._rtlService) {
|
|
223
|
-
return;
|
|
160
|
+
if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {
|
|
161
|
+
event.preventDefault();
|
|
162
|
+
// passing the event to key manager so, we get a change fired
|
|
163
|
+
this._overflowLayoutService._keyboardEventsManager.onKeydown(event);
|
|
224
164
|
}
|
|
225
|
-
const rtlSub = this._rtlService.rtl.subscribe((isRtl) => {
|
|
226
|
-
this._dir = isRtl ? 'rtl' : 'ltr';
|
|
227
|
-
this._keyboardEventsManager = this._keyboardEventsManager.withHorizontalOrientation(isRtl ? 'rtl' : 'ltr');
|
|
228
|
-
});
|
|
229
|
-
this._subscription.add(rtlSub);
|
|
230
|
-
}
|
|
231
|
-
/** @hidden */
|
|
232
|
-
_getForcedItemsIndexes() {
|
|
233
|
-
return this._allItems
|
|
234
|
-
.map((item, index) => (item.overflowItem.forceVisibility ? index : -1))
|
|
235
|
-
.filter((i) => i > -1);
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* @hidden
|
|
239
|
-
* Returns combined width of the element including margins.
|
|
240
|
-
* @param element Element to calculate width of.
|
|
241
|
-
*/
|
|
242
|
-
_getElementWidth(element) {
|
|
243
|
-
const elementStyle = getComputedStyle(element);
|
|
244
|
-
const elementWidth = element.getBoundingClientRect().width;
|
|
245
|
-
const elementSize = elementWidth + parseFloat(elementStyle.marginLeft) + parseFloat(elementStyle.marginRight);
|
|
246
|
-
return elementSize;
|
|
247
165
|
}
|
|
248
166
|
}
|
|
249
|
-
OverflowLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
250
|
-
OverflowLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: OverflowLayoutComponent, selector: "fd-overflow-layout", inputs: { maxVisibleItems: "maxVisibleItems" }, outputs: { visibleItemsCount: "visibleItemsCount", hiddenItemsCount: "hiddenItemsCount" }, host: { listeners: { "keyup": "_keyUpHandler($event)" }, properties: { "class": "this._initialClass" } }, providers: [
|
|
167
|
+
OverflowLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.OverflowLayoutService }, { token: i2.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
168
|
+
OverflowLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: OverflowLayoutComponent, selector: "fd-overflow-layout", inputs: { maxVisibleItems: "maxVisibleItems", showMorePosition: "showMorePosition", reverseHiddenItems: "reverseHiddenItems", enableKeyboardNavigation: "enableKeyboardNavigation" }, outputs: { visibleItemsCount: "visibleItemsCount", hiddenItemsCount: "hiddenItemsCount" }, host: { listeners: { "keyup": "_keyUpHandler($event)" }, properties: { "class": "this._initialClass" } }, providers: [
|
|
251
169
|
{
|
|
252
170
|
provide: FD_OVERFLOW_CONTAINER,
|
|
253
171
|
useExisting: OverflowLayoutComponent
|
|
254
|
-
}
|
|
255
|
-
|
|
172
|
+
},
|
|
173
|
+
OverflowLayoutService
|
|
174
|
+
], queries: [{ propertyName: "_moreButton", first: true, predicate: FD_OVERFLOW_EXPAND, descendants: true }, { propertyName: "_items", predicate: FD_OVERFLOW_ITEM_REF, descendants: true }, { propertyName: "_overflowItems", predicate: FD_OVERFLOW_ITEM, descendants: true }], viewQueries: [{ propertyName: "_itemsWrapper", first: true, predicate: ["itemsWrapper"], descendants: true }, { propertyName: "_layoutContainer", first: true, predicate: ["layoutContainer"], descendants: true }, { propertyName: "_showMoreContainer", first: true, predicate: ["showMoreContainer"], descendants: true }, { propertyName: "_visibleItems", predicate: OverflowLayoutItemContainerDirective, descendants: true }], ngImport: i0, template: "<ng-template [ngIf]=\"showMorePosition === 'left'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<div class=\"fd-overflow-layout__items-container\" #layoutContainer>\n <div class=\"fd-overflow-layout__items\" #itemsWrapper>\n <ng-container *ngFor=\"let item of _allItems; trackBy: _itemsTrackFn\">\n <div fdOverflowLayoutItemContainer [first]=\"item.first\" [last]=\"item.last\" [softHidden]=\"item.softHidden\">\n <ng-container *fdOverflowItemContainerRef>\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n\n<ng-template [ngIf]=\"showMorePosition === 'right'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<ng-template #showMore>\n <div class=\"fd-overflow-layout__more\" [style.display]=\"_showMore ? 'block' : 'none'\" #showMoreContainer>\n <ng-template #defaultShowMore>\n <fd-popover\n (isOpenChange)=\"_onPopoverStateChange($event)\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [maxWidth]=\"312\"\n >\n <fd-popover-control>\n <button\n fd-button\n [fdMenu]=\"true\"\n i18n=\"@overflowLayout.moreItemsButton|Overflow Layout more button text\"\n fdType=\"transparent\"\n >\n {{ _hiddenItems.length }} more\n </button>\n </fd-popover-control>\n <fd-popover-body>\n <div fdOverflowLayoutPopoverContent [items]=\"_hiddenItems\">\n <ng-container *ngFor=\"let item of _hiddenItems\">\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"_moreButton?.templateRef || defaultShowMore\"\n [ngTemplateOutletContext]=\"{ $implicit: _hiddenItems }\"\n ></ng-template>\n </div>\n</ng-template>\n", styles: [".fd-overflow-layout{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:100%}.fd-overflow-layout:before,.fd-overflow-layout:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__items:before,.fd-overflow-layout__items:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__more:before,.fd-overflow-layout__more:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:0;flex:1 auto}.fd-overflow-layout__items-container:before,.fd-overflow-layout__items-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__popover-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:block;white-space:normal}.fd-overflow-layout__popover-container:before,.fd-overflow-layout__popover-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__item--soft-hidden{opacity:0!important}\n"], components: [{ type: i3.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { type: i3.PopoverControlComponent, selector: "fd-popover-control" }, { type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i3.PopoverBodyComponent, selector: "fd-popover-body" }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.OverflowLayoutItemContainerDirective, selector: "[fdOverflowLayoutItemContainer]", inputs: ["last", "first", "softHidden"] }, { type: i7.OverflowItemContainerRefDirective, selector: "[fdOverflowItemContainerRef]" }, { type: i8.OverflowLayoutPopoverContentDirective, selector: "[fdOverflowLayoutPopoverContent]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
256
175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutComponent, decorators: [{
|
|
257
176
|
type: Component,
|
|
258
177
|
args: [{ selector: 'fd-overflow-layout', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
259
178
|
{
|
|
260
179
|
provide: FD_OVERFLOW_CONTAINER,
|
|
261
180
|
useExisting: OverflowLayoutComponent
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
|
|
181
|
+
},
|
|
182
|
+
OverflowLayoutService
|
|
183
|
+
], template: "<ng-template [ngIf]=\"showMorePosition === 'left'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<div class=\"fd-overflow-layout__items-container\" #layoutContainer>\n <div class=\"fd-overflow-layout__items\" #itemsWrapper>\n <ng-container *ngFor=\"let item of _allItems; trackBy: _itemsTrackFn\">\n <div fdOverflowLayoutItemContainer [first]=\"item.first\" [last]=\"item.last\" [softHidden]=\"item.softHidden\">\n <ng-container *fdOverflowItemContainerRef>\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n\n<ng-template [ngIf]=\"showMorePosition === 'right'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<ng-template #showMore>\n <div class=\"fd-overflow-layout__more\" [style.display]=\"_showMore ? 'block' : 'none'\" #showMoreContainer>\n <ng-template #defaultShowMore>\n <fd-popover\n (isOpenChange)=\"_onPopoverStateChange($event)\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [maxWidth]=\"312\"\n >\n <fd-popover-control>\n <button\n fd-button\n [fdMenu]=\"true\"\n i18n=\"@overflowLayout.moreItemsButton|Overflow Layout more button text\"\n fdType=\"transparent\"\n >\n {{ _hiddenItems.length }} more\n </button>\n </fd-popover-control>\n <fd-popover-body>\n <div fdOverflowLayoutPopoverContent [items]=\"_hiddenItems\">\n <ng-container *ngFor=\"let item of _hiddenItems\">\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"_moreButton?.templateRef || defaultShowMore\"\n [ngTemplateOutletContext]=\"{ $implicit: _hiddenItems }\"\n ></ng-template>\n </div>\n</ng-template>\n", styles: [".fd-overflow-layout{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:100%}.fd-overflow-layout:before,.fd-overflow-layout:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__items:before,.fd-overflow-layout__items:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__more:before,.fd-overflow-layout__more:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:0;flex:1 auto}.fd-overflow-layout__items-container:before,.fd-overflow-layout__items-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__popover-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:block;white-space:normal}.fd-overflow-layout__popover-container:before,.fd-overflow-layout__popover-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__item--soft-hidden{opacity:0!important}\n"] }]
|
|
184
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.OverflowLayoutService }, { type: i2.RtlService, decorators: [{
|
|
265
185
|
type: Optional
|
|
266
186
|
}] }]; }, propDecorators: { maxVisibleItems: [{
|
|
267
187
|
type: Input
|
|
188
|
+
}], showMorePosition: [{
|
|
189
|
+
type: Input
|
|
190
|
+
}], reverseHiddenItems: [{
|
|
191
|
+
type: Input
|
|
192
|
+
}], enableKeyboardNavigation: [{
|
|
193
|
+
type: Input
|
|
268
194
|
}], visibleItemsCount: [{
|
|
269
195
|
type: Output
|
|
270
196
|
}], hiddenItemsCount: [{
|
|
271
197
|
type: Output
|
|
272
198
|
}], _items: [{
|
|
273
199
|
type: ContentChildren,
|
|
274
|
-
args: [FD_OVERFLOW_ITEM_REF]
|
|
200
|
+
args: [FD_OVERFLOW_ITEM_REF, { descendants: true }]
|
|
275
201
|
}], _moreButton: [{
|
|
276
202
|
type: ContentChild,
|
|
277
203
|
args: [FD_OVERFLOW_EXPAND]
|
|
278
204
|
}], _overflowItems: [{
|
|
279
205
|
type: ContentChildren,
|
|
280
|
-
args: [FD_OVERFLOW_ITEM]
|
|
206
|
+
args: [FD_OVERFLOW_ITEM, { descendants: true }]
|
|
281
207
|
}], _visibleItems: [{
|
|
282
208
|
type: ViewChildren,
|
|
283
209
|
args: [OverflowLayoutItemContainerDirective]
|
|
@@ -297,4 +223,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
|
|
|
297
223
|
type: HostListener,
|
|
298
224
|
args: ['keyup', ['$event']]
|
|
299
225
|
}] } });
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL292ZXJmbG93LWxheW91dC9vdmVyZmxvdy1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvb3ZlcmZsb3ctbGF5b3V0L292ZXJmbG93LWxheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRixPQUFPLEVBQ0gsU0FBUyxFQUNULGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBRVIsWUFBWSxFQUdaLEtBQUssRUFDUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBTTdHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9B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QkFEZixTQUFTO3VCQUFDLGlCQUFpQjtnQkFRNUIsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG1CQUFtQjtnQkFjYixhQUFhO3NCQUQ3QixXQUFXO3VCQUFDLE9BQU87Z0JBZ0RaLGFBQWE7c0JBRHBCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVmlld0NoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgTmdab25lLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIE9wdGlvbmFsLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtleVV0aWwsIHJlc2l6ZU9ic2VydmFibGUsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBza2lwLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE92ZXJmbG93TGF5b3V0SXRlbUNvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9vdmVyZmxvdy1sYXlvdXQtaXRlbS1jb250YWluZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE92ZXJmbG93Q29udGFpbmVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL292ZXJmbG93LWNvbnRhaW5lci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3ZlcmZsb3dFeHBhbmQgfSBmcm9tICcuL2ludGVyZmFjZXMvb3ZlcmZsb3ctZXhwYW5kLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPdmVyZmxvd0l0ZW1SZWYgfSBmcm9tICcuL2ludGVyZmFjZXMvb3ZlcmZsb3ctaXRlbS1yZWYuaW50ZXJmYWNlJztcbmltcG9ydCB7IE92ZXJmbG93SXRlbSB9IGZyb20gJy4vaW50ZXJmYWNlcy9vdmVyZmxvdy1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPdmVyZmxvd1BvcG92ZXJDb250ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL292ZXJmbG93LXBvcG92ZXItY29udGVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRkRfT1ZFUkZMT1dfQ09OVEFJTkVSIH0gZnJvbSAnLi90b2tlbnMvb3ZlcmZsb3ctY29udGFpbmVyLnRva2VuJztcbmltcG9ydCB7IEZEX09WRVJGTE9XX0VYUEFORCB9IGZyb20gJy4vdG9rZW5zL292ZXJmbG93LWV4cGFuZC50b2tlbic7XG5pbXBvcnQgeyBGRF9PVkVSRkxPV19JVEVNX1JFRiB9IGZyb20gJy4vdG9rZW5zL292ZXJmbG93LWl0ZW0tcmVmLnRva2VuJztcbmltcG9ydCB7IEZEX09WRVJGTE9XX0lURU0gfSBmcm9tICcuL3Rva2Vucy9vdmVyZmxvdy1pdGVtLnRva2VuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1vdmVyZmxvdy1sYXlvdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9vdmVyZmxvdy1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL292ZXJmbG93LWxheW91dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX09WRVJGTE9XX0NPTlRBSU5FUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBPdmVyZmxvd0xheW91dENvbXBvbmVudFxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBPdmVyZmxvd0xheW91dENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT3ZlcmZsb3dDb250YWluZXIge1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gYW1vdW50IG9mIHZpc2libGUgaXRlbXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4VmlzaWJsZUl0ZW1zKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9tYXhWaXNpYmxlSXRlbXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXhWaXNpYmxlSXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVjYWxjdWxhdGlvbigpO1xuICAgIH1cblxuICAgIGdldCBtYXhWaXNpYmxlSXRlbXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFZpc2libGVJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCwgdHJpZ2dlcmVkIHdoZW4gYW1vdW50IG9mIHZpc2libGUgaXRlbXMgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICB2aXNpYmxlSXRlbXNDb3VudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQsIHRyaWdnZXJlZCB3aGVuIGFtb3VudCBvZiBoaWRkZW4gaXRlbXMgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBoaWRkZW5JdGVtc0NvdW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdCBvZiBpdGVtcyB0byBkaXNwbGF5LlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRkRfT1ZFUkZMT1dfSVRFTV9SRUYpXG4gICAgX2l0ZW1zOiBRdWVyeUxpc3Q8T3ZlcmZsb3dJdGVtUmVmPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUZW1wbGF0ZSBmb3IgdGhlIGN1c3RvbSBcIk1vcmVcIiBidXR0b24uXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChGRF9PVkVSRkxPV19FWFBBTkQpXG4gICAgX21vcmVCdXR0b246IE92ZXJmbG93RXhwYW5kO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgaXRlbXMgdGhhdCBjYW4gYmUgZm9jdXNlZC5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEZEX09WRVJGTE9XX0lURU0pXG4gICAgX292ZXJmbG93SXRlbXM6IFF1ZXJ5TGlzdDxPdmVyZmxvd0l0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgcmVuZGVyZWQgaXRlbXMuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihPdmVyZmxvd0xheW91dEl0ZW1Db250YWluZXJEaXJlY3RpdmUpXG4gICAgX3Zpc2libGVJdGVtczogUXVlcnlMaXN0PE92ZXJmbG93TGF5b3V0SXRlbUNvbnRhaW5lckRpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSXRlbXMgd3JhcHBlciBkaXJlY3RpdmUuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaXRlbXNXcmFwcGVyJylcbiAgICBfaXRlbXNXcmFwcGVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMYXlvdXQgY29udGFpbmVyIGVsZW1lbnQuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnbGF5b3V0Q29udGFpbmVyJylcbiAgICBfbGF5b3V0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBcIk1vcmVcIiBidXR0b24gY29udGFpbmVyIGVsZW1lbnQuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnc2hvd01vcmVDb250YWluZXInKVxuICAgIF9zaG93TW9yZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hbGxJdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hpZGRlbkl0ZW1zOiBPdmVyZmxvd0l0ZW1SZWZbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd01vcmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbENsYXNzID0gJ2ZkLW92ZXJmbG93LWxheW91dCc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2tleWJvYXJkRXZlbnRzTWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPE92ZXJmbG93SXRlbT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvSXRlbVJlc2l6ZSA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3ZlcmZsb3dQb3BvdmVyQ29udGVudDogT3ZlcmZsb3dQb3BvdmVyQ29udGVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmlsbFRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGlyOiAncnRsJyB8ICdsdHInID0gJ2x0cic7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21heFZpc2libGVJdGVtcyA9IEluZmluaXR5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfem9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuX2ZpbGxUcmlnZ2VyJC5waXBlKGRlYm91bmNlVGltZSgzMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9maXRWaXNpYmxlSXRlbXMoKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGxheW91dCByZWNhbGN1bGF0aW9uIG9mIHRoZSBpdGVtcy5cbiAgICAgKi9cbiAgICB0cmlnZ2VyUmVjYWxjdWxhdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlsbFRyaWdnZXIkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIF9rZXlVcEhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBUQUIpKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2FsbEl0ZW1zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5vdmVyZmxvd0l0ZW0/LmZvY3VzYWJsZSAmJiBpdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5zZXRBY3RpdmVJdGVtKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0RPV05fQVJST1csIFVQX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPV10pKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBwYXNzaW5nIHRoZSBldmVudCB0byBrZXkgbWFuYWdlciBzbywgd2UgZ2V0IGEgY2hhbmdlIGZpcmVkXG4gICAgICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY3VycmVudCBmb2N1c2VkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGVsZW1lbnQgRWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIGZvY3VzZWQuXG4gICAgICovXG4gICAgc2V0Rm9jdXNlZEVsZW1lbnQoZWxlbWVudDogT3ZlcmZsb3dJdGVtKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3ZlcmZsb3dJdGVtcy50b0FycmF5KCkuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSBlbGVtZW50KTtcblxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIuc2V0QWN0aXZlSXRlbShpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgcG9wb3ZlciBjb250ZW50IGRpcmVjdGl2ZSBmb3IgbWFpbiBjb21wb25lbnQuXG4gICAgICogQHBhcmFtIGNvbnRlbnQge092ZXJmbG93UG9wb3ZlckNvbnRlbnR9IGRpcmVjdGl2ZVxuICAgICAqL1xuICAgIHJlZ2lzdGVyUG9wb3ZlckNvbnRlbnQoY29udGVudDogT3ZlcmZsb3dQb3BvdmVyQ29udGVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vdmVyZmxvd1BvcG92ZXJDb250ZW50ID0gY29udGVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pdGVtc1RyYWNrRm4oXzogbnVtYmVyLCBpdGVtOiBPdmVyZmxvd0l0ZW1SZWYpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Qb3BvdmVyU3RhdGVDaGFuZ2Uob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJmbG93UG9wb3ZlckNvbnRlbnQ/LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXRWaXNpYmxlSXRlbXMoKTtcbiAgICAgICAgdGhpcy5fc2V0Rm9jdXNLZXlNYW5hZ2VyKCk7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1J0bCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5faXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXRWaXNpYmxlSXRlbXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9TaXplQ2hhbmdlcyh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLl9pdGVtc1dyYXBwZXIubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1NpemVDaGFuZ2VzKC4uLmVsZW1lbnRzOiBIVE1MRWxlbWVudFtdKTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUoZWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2xpc3RlblRvSXRlbVJlc2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDMwKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZml0VmlzaWJsZUl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpdFZpc2libGVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9JdGVtUmVzaXplID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbEl0ZW1zID0gdGhpcy5faXRlbXMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl92aXNpYmxlSXRlbXMuZm9yRWFjaCgoaSkgPT4gKGkuY29udGFpbmVyUmVmLmhpZGRlbiA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuX2FsbEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaXRlbS5pbmRleCA9IGluZGV4O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBjb25zdCBpdGVtc0NvbnRhaW5lcldpZHRoID0gdGhpcy5faXRlbXNXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29udGFpbmVyV2lkdGggPj0gaXRlbXNDb250YWluZXJXaWR0aCAmJlxuICAgICAgICAgICAgdGhpcy5fdmlzaWJsZUl0ZW1zLmxlbmd0aCA8PSB0aGlzLm1heFZpc2libGVJdGVtcyAmJlxuICAgICAgICAgICAgdGhpcy5faGlkZGVuSXRlbXMubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc2hvd01vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5Ub0l0ZW1SZXNpemUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dNb3JlID0gdHJ1ZTtcbiAgICAgICAgbGV0IGZpdHRpbmdFbG1Db3VudCA9IDA7XG4gICAgICAgIGxldCBmaXR0aW5nRWxtc1dpZHRoID0gMDtcbiAgICAgICAgbGV0IHNob3VsZEhpZGVJdGVtcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGNvbnN0IHNob3dNb3JlQ29udGFpbmVyV2lkdGggPSB0aGlzLl9zaG93TW9yZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBsZXQgbGF5b3V0V2lkdGggPSB0aGlzLl9sYXlvdXRDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgICAvLyBUcnkgdG8gZmluZCBhbGwgZm9yY2VkIHZpc2libGUgaXRlbXNcbiAgICAgICAgY29uc3QgZm9yY2VkSXRlbXNJbmRleGVzID0gdGhpcy5fZ2V0Rm9yY2VkSXRlbXNJbmRleGVzKCk7XG5cbiAgICAgICAgZm9yY2VkSXRlbXNJbmRleGVzLmZvckVhY2goKGl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fdmlzaWJsZUl0ZW1zLmdldChpdGVtSW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50U2l6ZSA9IHRoaXMuX2dldEVsZW1lbnRXaWR0aChjb250YWluZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgbGF5b3V0V2lkdGggLT0gZWxlbWVudFNpemU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChsYXlvdXRXaWR0aCA8IDAgJiYgZm9yY2VkSXRlbXNJbmRleGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAnVGhlcmUgaXMgbm8gZW5vdWdoIHNwYWNlIHRvIGZpdCBhbGwgZm9yY2VkIHZpc2libGUgaXRlbXMgaW50byB0aGUgY29udGFpbmVyLiBQbGVhc2UgYWRqdXN0IHRoZWlyIHZpc2liaWxpdHkgYWNjb3JkaW5nbHkuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Zpc2libGVJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbVJlZiA9IHRoaXMuX2FsbEl0ZW1zW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChzaG91bGRIaWRlSXRlbXMgJiYgIWl0ZW1SZWYub3ZlcmZsb3dJdGVtLmZvcmNlVmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uY29udGFpbmVyUmVmLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgaXRlbVJlZi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNpemUgPSB0aGlzLl9nZXRFbGVtZW50V2lkdGgoaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgY29tYmluZWRXaWR0aCA9IGZpdHRpbmdFbG1zV2lkdGggKyBlbGVtZW50U2l6ZTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChjb21iaW5lZFdpZHRoIDw9IGxheW91dFdpZHRoIHx8XG4gICAgICAgICAgICAgICAgICAgIChpdGVtID09PSB0aGlzLl92aXNpYmxlSXRlbXMubGFzdCAmJiBjb21iaW5lZFdpZHRoIDw9IGxheW91dFdpZHRoICsgc2hvd01vcmVDb250YWluZXJXaWR0aCkpICYmXG4gICAgICAgICAgICAgICAgZml0dGluZ0VsbUNvdW50IDwgdGhpcy5tYXhWaXNpYmxlSXRlbXNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZpdHRpbmdFbG1zV2lkdGggKz0gZWxlbWVudFNpemU7XG4gICAgICAgICAgICAgICAgZml0dGluZ0VsbUNvdW50Kys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpdGVtUmVmLm92ZXJmbG93SXRlbS5mb3JjZVZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICBzaG91bGRIaWRlSXRlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGl0ZW0uY29udGFpbmVyUmVmLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgaXRlbVJlZi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9oaWRkZW5JdGVtcyA9IHRoaXMuX2FsbEl0ZW1zLmZpbHRlcigoaSkgPT4gaS5oaWRkZW4pO1xuICAgICAgICB0aGlzLnZpc2libGVJdGVtc0NvdW50LmVtaXQodGhpcy5fYWxsSXRlbXMuZmlsdGVyKChpKSA9PiAhaS5oaWRkZW4pLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuaGlkZGVuSXRlbXNDb3VudC5lbWl0KHRoaXMuX2hpZGRlbkl0ZW1zLmxlbmd0aCk7XG5cbiAgICAgICAgdGhpcy5fc2hvd01vcmUgPSB0aGlzLl9oaWRkZW5JdGVtcy5sZW5ndGggPiAwO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9JdGVtUmVzaXplID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEZvY3VzS2V5TWFuYWdlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlyID0gdGhpcy5fcnRsU2VydmljZT8ucnRsLnZhbHVlID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLl9vdmVyZmxvd0l0ZW1zKVxuICAgICAgICAgICAgLndpdGhXcmFwKClcbiAgICAgICAgICAgIC53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2RpcilcbiAgICAgICAgICAgIC5za2lwUHJlZGljYXRlKChpdGVtKSA9PiAhaXRlbS5mb2N1c2FibGUgfHwgaXRlbS5oaWRkZW4pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJ0bCBjaGFuZ2Ugc3Vic2NyaXB0aW9uICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9SdGwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fcnRsU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnRsU3ViID0gdGhpcy5fcnRsU2VydmljZS5ydGwuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGlyID0gaXNSdGwgPyAncnRsJyA6ICdsdHInO1xuXG4gICAgICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIgPSB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbihpc1J0bCA/ICdydGwnIDogJ2x0cicpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHJ0bFN1Yik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGb3JjZWRJdGVtc0luZGV4ZXMoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxsSXRlbXNcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoaXRlbS5vdmVyZmxvd0l0ZW0uZm9yY2VWaXNpYmlsaXR5ID8gaW5kZXggOiAtMSkpXG4gICAgICAgICAgICAuZmlsdGVyKChpKSA9PiBpID4gLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIGNvbWJpbmVkIHdpZHRoIG9mIHRoZSBlbGVtZW50IGluY2x1ZGluZyBtYXJnaW5zLlxuICAgICAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgdG8gY2FsY3VsYXRlIHdpZHRoIG9mLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEVsZW1lbnRXaWR0aChlbGVtZW50OiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTaXplID0gZWxlbWVudFdpZHRoICsgcGFyc2VGbG9hdChlbGVtZW50U3R5bGUubWFyZ2luTGVmdCkgKyBwYXJzZUZsb2F0KGVsZW1lbnRTdHlsZS5tYXJnaW5SaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRTaXplO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZC1vdmVyZmxvdy1sYXlvdXRfX2l0ZW1zLWNvbnRhaW5lclwiICNsYXlvdXRDb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cImZkLW92ZXJmbG93LWxheW91dF9faXRlbXNcIiAjaXRlbXNXcmFwcGVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9hbGxJdGVtczsgdHJhY2tCeTogX2l0ZW1zVHJhY2tGblwiPlxuICAgICAgICAgICAgPGRpdiBmZE92ZXJmbG93TGF5b3V0SXRlbUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpmZE92ZXJmbG93SXRlbUNvbnRhaW5lclJlZj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS5oaWRkZW4sIGluZGV4OiBpdGVtLmluZGV4IH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZmQtb3ZlcmZsb3ctbGF5b3V0X19tb3JlXCIgKm5nSWY9XCJfc2hvd01vcmVcIiAjc2hvd01vcmVDb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U2hvd01vcmU+XG4gICAgICAgIDxmZC1wb3BvdmVyXG4gICAgICAgICAgICAoaXNPcGVuQ2hhbmdlKT1cIl9vblBvcG92ZXJTdGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICBbZm9jdXNUcmFwcGVkXT1cInRydWVcIlxuICAgICAgICAgICAgW2ZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbWF4V2lkdGhdPVwiMzEyXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbZmRNZW51XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBpMThuPVwiQG92ZXJmbG93TGF5b3V0Lm1vcmVJdGVtc0J1dHRvbnxPdmVyZmxvdyBMYXlvdXQgbW9yZSBidXR0b24gdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IF9oaWRkZW5JdGVtcy5sZW5ndGggfX0gbW9yZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgICAgIDxkaXYgZmRPdmVyZmxvd0xheW91dFBvcG92ZXJDb250ZW50IFtpdGVtc109XCJfaGlkZGVuSXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfaGlkZGVuSXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW0udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS5oaWRkZW4sIGluZGV4OiBpdGVtLmluZGV4IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbW9yZUJ1dHRvbj8udGVtcGxhdGVSZWYgfHwgZGVmYXVsdFNob3dNb3JlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBfaGlkZGVuSXRlbXMgfVwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL292ZXJmbG93LWxheW91dC9vdmVyZmxvdy1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvb3ZlcmZsb3ctbGF5b3V0L292ZXJmbG93LWxheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNGLE9BQU8sRUFDSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsU0FBUyxFQUNULGlCQUFpQixFQUNqQixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFFUixZQUFZLEVBR1osS0FBSyxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBTTdHLE9BQU8sRUFBd0IscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7OztBQWdCaEUsTUFBTSxPQUFPLHVCQUF1QjtJQXNIaEMsY0FBYztJQUNkLFlBQ2MsSUFBdUIsRUFDdkIsS0FBYSxFQUNiLE1BQWtCLEVBQ2xCLHNCQUE2QyxFQUNqQyxXQUF1QjtRQUpuQyxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNsQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQ2pDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBM0dqRCxrREFBa0Q7UUFFbEQscUJBQWdCLEdBQXFCLE9BQU8sQ0FBQztRQUU3Qyx1REFBdUQ7UUFFdkQsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLDZDQUE2QztRQUU3Qyw2QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFFSCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRS9DOztXQUVHO1FBRUgscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQW1EOUMsY0FBYztRQUNkLGNBQVMsR0FBc0IsRUFBRSxDQUFDO1FBRWxDLGNBQWM7UUFDZCxpQkFBWSxHQUFzQixFQUFFLENBQUM7UUFFckMsY0FBYztRQUNkLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsY0FBYztRQUVHLGtCQUFhLEdBQUcsb0JBQW9CLENBQUM7UUFFdEQsY0FBYztRQUNHLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtwRCxjQUFjO1FBQ04sa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRTVDLGNBQWM7UUFDTixxQkFBZ0IsR0FBRyxRQUFRLENBQUM7UUFFcEMsY0FBYztRQUNOLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQVUvQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUMzRyxDQUFDO0lBQ04sQ0FBQztJQWhJRDs7T0FFRztJQUNILElBQ0ksZUFBZSxDQUFDLEtBQWE7UUFDN0IsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2pDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFvSEQ7O09BRUc7SUFDSCxvQkFBb0I7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsT0FBcUI7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQztRQUVsRixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0U7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQUMsT0FBK0I7UUFDbEQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztJQUMzQyxDQUFDO0lBRUQsY0FBYztJQUNkLGFBQWEsQ0FBQyxDQUFTLEVBQUUsSUFBcUI7UUFDMUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO0lBQ2QscUJBQXFCLENBQUMsTUFBZTtRQUNqQyxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSxDQUFDO1NBQzdEO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjO0lBQ04sVUFBVTtRQUNkLE9BQU87WUFDSCxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDaEMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWE7WUFDOUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWE7WUFDeEQsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWE7WUFDM0QsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ2hDLHdCQUF3QixFQUFFLElBQUksQ0FBQyx3QkFBd0I7WUFDdkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUM5QyxDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7SUFFTixhQUFhLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUNsQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FDM0YsQ0FBQztZQUNGLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0U7U0FDSjtRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO1lBQzNFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV2Qiw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2RTtJQUNMLENBQUM7O29IQXhQUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qix3YUFSckI7UUFDUDtZQUNJLE9BQU8sRUFBRSxxQkFBcUI7WUFDOUIsV0FBVyxFQUFFLHVCQUF1QjtTQUN2QztRQUNELHFCQUFxQjtLQUN4QixtRUFzRGEsa0JBQWtCLDREQVBmLG9CQUFvQixvRUFjcEIsZ0JBQWdCLGtZQU9uQixvQ0FBb0MsZ0RDckh0RCxpa0dBdUVBOzJGRHBCYSx1QkFBdUI7a0JBZG5DLFNBQVM7K0JBQ0ksb0JBQW9CLGlCQUdmLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsV0FBVyx5QkFBeUI7eUJBQ3ZDO3dCQUNELHFCQUFxQjtxQkFDeEI7OzBCQThISSxRQUFROzRDQXZIVCxlQUFlO3NCQURsQixLQUFLO2dCQWVOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixNQUFNO2dCQU9QLGdCQUFnQjtzQkFEZixNQUFNO2dCQVFQLE1BQU07c0JBREwsZUFBZTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBUTVELFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxrQkFBa0I7Z0JBUWhDLGNBQWM7c0JBRGIsZUFBZTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBUXhELGFBQWE7c0JBRFosWUFBWTt1QkFBQyxvQ0FBb0M7Z0JBUWxELGFBQWE7c0JBRFosU0FBUzt1QkFBQyxjQUFjO2dCQVF6QixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBUTVCLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBY2IsYUFBYTtzQkFEN0IsV0FBVzt1QkFBQyxPQUFPO2dCQWlJWixhQUFhO3NCQURwQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPV05fQVJST1csIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBUQUIsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIE5nWm9uZSxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPcHRpb25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLZXlVdGlsLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPdmVyZmxvd0xheW91dEl0ZW1Db250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvb3ZlcmZsb3ctbGF5b3V0LWl0ZW0tY29udGFpbmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVyZmxvd0NvbnRhaW5lciB9IGZyb20gJy4vaW50ZXJmYWNlcy9vdmVyZmxvdy1jb250YWluZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IE92ZXJmbG93RXhwYW5kIH0gZnJvbSAnLi9pbnRlcmZhY2VzL292ZXJmbG93LWV4cGFuZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3ZlcmZsb3dJdGVtUmVmIH0gZnJvbSAnLi9pbnRlcmZhY2VzL292ZXJmbG93LWl0ZW0tcmVmLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPdmVyZmxvd0l0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMvb3ZlcmZsb3ctaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3ZlcmZsb3dQb3BvdmVyQ29udGVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9vdmVyZmxvdy1wb3BvdmVyLWNvbnRlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE92ZXJmbG93TGF5b3V0Q29uZmlnLCBPdmVyZmxvd0xheW91dFNlcnZpY2UgfSBmcm9tICcuL292ZXJmbG93LWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7IEZEX09WRVJGTE9XX0NPTlRBSU5FUiB9IGZyb20gJy4vdG9rZW5zL292ZXJmbG93LWNvbnRhaW5lci50b2tlbic7XG5pbXBvcnQgeyBGRF9PVkVSRkxPV19FWFBBTkQgfSBmcm9tICcuL3Rva2Vucy9vdmVyZmxvdy1leHBhbmQudG9rZW4nO1xuaW1wb3J0IHsgRkRfT1ZFUkZMT1dfSVRFTV9SRUYgfSBmcm9tICcuL3Rva2Vucy9vdmVyZmxvdy1pdGVtLXJlZi50b2tlbic7XG5pbXBvcnQgeyBGRF9PVkVSRkxPV19JVEVNIH0gZnJvbSAnLi90b2tlbnMvb3ZlcmZsb3ctaXRlbS50b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtb3ZlcmZsb3ctbGF5b3V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3ZlcmZsb3ctbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9vdmVyZmxvdy1sYXlvdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9PVkVSRkxPV19DT05UQUlORVIsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogT3ZlcmZsb3dMYXlvdXRDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgT3ZlcmZsb3dMYXlvdXRTZXJ2aWNlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBPdmVyZmxvd0xheW91dENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT3ZlcmZsb3dDb250YWluZXIge1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gYW1vdW50IG9mIHZpc2libGUgaXRlbXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4VmlzaWJsZUl0ZW1zKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9tYXhWaXNpYmxlSXRlbXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXhWaXNpYmxlSXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVjYWxjdWxhdGlvbigpO1xuICAgIH1cblxuICAgIGdldCBtYXhWaXNpYmxlSXRlbXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFZpc2libGVJdGVtcztcbiAgICB9XG5cbiAgICAvKiogRGlyZWN0aW9uIG9mIHRoZSBmaXR0aW5nIGl0ZW1zIGNhbGN1bGF0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd01vcmVQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCc7XG5cbiAgICAvKiogV2hldGhlciB0byByZW5kZXIgaGlkZGVuIGl0ZW1zIGluIHJldmVyc2Ugb3JkZXIuICovXG4gICAgQElucHV0KClcbiAgICByZXZlcnNlSGlkZGVuSXRlbXMgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGVuYWJsZSBrZXlib2FyZCBuYXZpZ2F0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50LCB0cmlnZ2VyZWQgd2hlbiBhbW91bnQgb2YgdmlzaWJsZSBpdGVtcyBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHZpc2libGVJdGVtc0NvdW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCwgdHJpZ2dlcmVkIHdoZW4gYW1vdW50IG9mIGhpZGRlbiBpdGVtcyBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGhpZGRlbkl0ZW1zQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IG9mIGl0ZW1zIHRvIGRpc3BsYXkuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGRF9PVkVSRkxPV19JVEVNX1JFRiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIF9pdGVtczogUXVlcnlMaXN0PE92ZXJmbG93SXRlbVJlZj47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGVtcGxhdGUgZm9yIHRoZSBjdXN0b20gXCJNb3JlXCIgYnV0dG9uLlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoRkRfT1ZFUkZMT1dfRVhQQU5EKVxuICAgIF9tb3JlQnV0dG9uOiBPdmVyZmxvd0V4cGFuZDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGZvY3VzZWQuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGRF9PVkVSRkxPV19JVEVNLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgX292ZXJmbG93SXRlbXM6IFF1ZXJ5TGlzdDxPdmVyZmxvd0l0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgcmVuZGVyZWQgaXRlbXMuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihPdmVyZmxvd0xheW91dEl0ZW1Db250YWluZXJEaXJlY3RpdmUpXG4gICAgX3Zpc2libGVJdGVtczogUXVlcnlMaXN0PE92ZXJmbG93TGF5b3V0SXRlbUNvbnRhaW5lckRpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSXRlbXMgd3JhcHBlciBkaXJlY3RpdmUuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaXRlbXNXcmFwcGVyJylcbiAgICBfaXRlbXNXcmFwcGVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMYXlvdXQgY29udGFpbmVyIGVsZW1lbnQuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnbGF5b3V0Q29udGFpbmVyJylcbiAgICBfbGF5b3V0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBcIk1vcmVcIiBidXR0b24gY29udGFpbmVyIGVsZW1lbnQuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnc2hvd01vcmVDb250YWluZXInKVxuICAgIF9zaG93TW9yZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hbGxJdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hpZGRlbkl0ZW1zOiBPdmVyZmxvd0l0ZW1SZWZbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd01vcmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbENsYXNzID0gJ2ZkLW92ZXJmbG93LWxheW91dCc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3ZlcmZsb3dQb3BvdmVyQ29udGVudDogT3ZlcmZsb3dQb3BvdmVyQ29udGVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmlsbFRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF4VmlzaWJsZUl0ZW1zID0gSW5maW5pdHk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Nhbkxpc3RlblRvUmVzaXplID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfem9uZTogTmdab25lLFxuICAgICAgICBwcm90ZWN0ZWQgX2VsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgX292ZXJmbG93TGF5b3V0U2VydmljZTogT3ZlcmZsb3dMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMuX2ZpbGxUcmlnZ2VyJC5waXBlKGRlYm91bmNlVGltZSgzMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9vdmVyZmxvd0xheW91dFNlcnZpY2UuZml0VmlzaWJsZUl0ZW1zKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgbGF5b3V0IHJlY2FsY3VsYXRpb24gb2YgdGhlIGl0ZW1zLlxuICAgICAqL1xuICAgIHRyaWdnZXJSZWNhbGN1bGF0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2Nhbkxpc3RlblRvUmVzaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb3ZlcmZsb3dMYXlvdXRTZXJ2aWNlLnNldENvbmZpZyh0aGlzLl9nZXRDb25maWcoKSk7XG4gICAgICAgIHRoaXMuX2ZpbGxUcmlnZ2VyJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjdXJyZW50IGZvY3VzZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZWxlbWVudCBFbGVtZW50IHRoYXQgbmVlZHMgdG8gYmUgZm9jdXNlZC5cbiAgICAgKi9cbiAgICBzZXRGb2N1c2VkRWxlbWVudChlbGVtZW50OiBPdmVyZmxvd0l0ZW0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vdmVyZmxvd0l0ZW1zLnRvQXJyYXkoKS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09IGVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJmbG93TGF5b3V0U2VydmljZS5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIHBvcG92ZXIgY29udGVudCBkaXJlY3RpdmUgZm9yIG1haW4gY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSBjb250ZW50IHtPdmVyZmxvd1BvcG92ZXJDb250ZW50fSBkaXJlY3RpdmVcbiAgICAgKi9cbiAgICByZWdpc3RlclBvcG92ZXJDb250ZW50KGNvbnRlbnQ6IE92ZXJmbG93UG9wb3ZlckNvbnRlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3ZlcmZsb3dQb3BvdmVyQ29udGVudCA9IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXRlbXNUcmFja0ZuKF86IG51bWJlciwgaXRlbTogT3ZlcmZsb3dJdGVtUmVmKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uUG9wb3ZlclN0YXRlQ2hhbmdlKG9wZW5lZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVyZmxvd1BvcG92ZXJDb250ZW50Py5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMuX292ZXJmbG93TGF5b3V0U2VydmljZS5kZXRlY3RDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMuX292ZXJmbG93TGF5b3V0U2VydmljZS5vblJlc3VsdC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGRlbkl0ZW1zID0gcmVzdWx0LmhpZGRlbkl0ZW1zO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dNb3JlID0gcmVzdWx0LnNob3dNb3JlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZGVuSXRlbXNDb3VudC5lbWl0KHJlc3VsdC5oaWRkZW5JdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUl0ZW1zQ291bnQuZW1pdCh0aGlzLl9hbGxJdGVtcy5maWx0ZXIoKGkpID0+ICFpLmhpZGRlbikubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5faXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbEl0ZW1zID0gdGhpcy5faXRlbXMudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2FsbEl0ZW1zID0gdGhpcy5faXRlbXMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuX292ZXJmbG93TGF5b3V0U2VydmljZS5zdGFydExpc3RlbmluZyh0aGlzLl9nZXRDb25maWcoKSk7XG5cbiAgICAgICAgdGhpcy5fY2FuTGlzdGVuVG9SZXNpemUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q29uZmlnKCk6IE92ZXJmbG93TGF5b3V0Q29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZpc2libGVJdGVtczogdGhpcy5fdmlzaWJsZUl0ZW1zLFxuICAgICAgICAgICAgaXRlbXM6IHRoaXMuX2l0ZW1zLFxuICAgICAgICAgICAgaXRlbXNXcmFwcGVyOiB0aGlzLl9pdGVtc1dyYXBwZXIubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIHNob3dNb3JlQ29udGFpbmVyOiB0aGlzLl9zaG93TW9yZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgbGF5b3V0Q29udGFpbmVyRWxlbWVudDogdGhpcy5fbGF5b3V0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBtYXhWaXNpYmxlSXRlbXM6IHRoaXMubWF4VmlzaWJsZUl0ZW1zLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLnNob3dNb3JlUG9zaXRpb24sXG4gICAgICAgICAgICBlbmFibGVLZXlib2FyZE5hdmlnYXRpb246IHRoaXMuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uLFxuICAgICAgICAgICAgcmV2ZXJzZUhpZGRlbkl0ZW1zOiB0aGlzLnJldmVyc2VIaWRkZW5JdGVtc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgX2tleVVwSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBUQUIpKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2FsbEl0ZW1zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5vdmVyZmxvd0l0ZW0/LmZvY3VzYWJsZSAmJiBpdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJmbG93TGF5b3V0U2VydmljZS5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRE9XTl9BUlJPVywgVVBfQVJST1csIExFRlRfQVJST1csIFJJR0hUX0FSUk9XXSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIC8vIHBhc3NpbmcgdGhlIGV2ZW50IHRvIGtleSBtYW5hZ2VyIHNvLCB3ZSBnZXQgYSBjaGFuZ2UgZmlyZWRcbiAgICAgICAgICAgIHRoaXMuX292ZXJmbG93TGF5b3V0U2VydmljZS5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgW25nSWZdPVwic2hvd01vcmVQb3NpdGlvbiA9PT0gJ2xlZnQnXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNob3dNb3JlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJmZC1vdmVyZmxvdy1sYXlvdXRfX2l0ZW1zLWNvbnRhaW5lclwiICNsYXlvdXRDb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cImZkLW92ZXJmbG93LWxheW91dF9faXRlbXNcIiAjaXRlbXNXcmFwcGVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9hbGxJdGVtczsgdHJhY2tCeTogX2l0ZW1zVHJhY2tGblwiPlxuICAgICAgICAgICAgPGRpdiBmZE92ZXJmbG93TGF5b3V0SXRlbUNvbnRhaW5lciBbZmlyc3RdPVwiaXRlbS5maXJzdFwiIFtsYXN0XT1cIml0ZW0ubGFzdFwiIFtzb2Z0SGlkZGVuXT1cIml0ZW0uc29mdEhpZGRlblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmZkT3ZlcmZsb3dJdGVtQ29udGFpbmVyUmVmPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW0udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0uaGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0OiBpdGVtLmZpcnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW0ubGFzdFxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzaG93TW9yZVBvc2l0aW9uID09PSAncmlnaHQnXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNob3dNb3JlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2hvd01vcmU+XG4gICAgPGRpdiBjbGFzcz1cImZkLW92ZXJmbG93LWxheW91dF9fbW9yZVwiIFtzdHlsZS5kaXNwbGF5XT1cIl9zaG93TW9yZSA/ICdibG9jaycgOiAnbm9uZSdcIiAjc2hvd01vcmVDb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNob3dNb3JlPlxuICAgICAgICAgICAgPGZkLXBvcG92ZXJcbiAgICAgICAgICAgICAgICAoaXNPcGVuQ2hhbmdlKT1cIl9vblBvcG92ZXJTdGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgICAgIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW21heFdpZHRoXT1cIjMxMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRNZW51XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bj1cIkBvdmVyZmxvd0xheW91dC5tb3JlSXRlbXNCdXR0b258T3ZlcmZsb3cgTGF5b3V0IG1vcmUgYnV0dG9uIHRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBfaGlkZGVuSXRlbXMubGVuZ3RoIH19IG1vcmVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgPGZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZE92ZXJmbG93TGF5b3V0UG9wb3ZlckNvbnRlbnQgW2l0ZW1zXT1cIl9oaWRkZW5JdGVtc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfaGlkZGVuSXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbS50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0uaGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGl0ZW0uaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdDogaXRlbS5maXJzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW0ubGFzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbW9yZUJ1dHRvbj8udGVtcGxhdGVSZWYgfHwgZGVmYXVsdFNob3dNb3JlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogX2hpZGRlbkl0ZW1zIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|