@ngutil/aria 0.0.78 → 0.0.80
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,8 +1,9 @@
|
|
|
1
1
|
import { FocusTrapFactory } from "@angular/cdk/a11y";
|
|
2
2
|
import { DOCUMENT } from "@angular/common";
|
|
3
|
-
import { inject,
|
|
3
|
+
import { inject, Injectable, NgZone } from "@angular/core";
|
|
4
4
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
5
|
-
import { combineLatest, distinctUntilChanged, filter,
|
|
5
|
+
import { BehaviorSubject, combineLatest, connect, distinctUntilChanged, filter, finalize, map, merge, Observable, shareReplay, startWith, Subject, tap } from "rxjs";
|
|
6
|
+
import { isEqual } from "lodash-es";
|
|
6
7
|
import { focusable, isFocusable } from "tabbable";
|
|
7
8
|
import { coerceElement } from "@ngutil/common";
|
|
8
9
|
import { ActivityService } from "../activity";
|
|
@@ -12,50 +13,75 @@ const EVENT_OPTIONS = {
|
|
|
12
13
|
passive: true
|
|
13
14
|
};
|
|
14
15
|
export class FocusService {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
this
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
constructor() {
|
|
17
|
+
this.#activity = inject(ActivityService);
|
|
18
|
+
this.#focusTrap = inject(FocusTrapFactory);
|
|
19
|
+
this.#zone = inject(NgZone);
|
|
20
|
+
this.#document = inject(DOCUMENT);
|
|
21
|
+
this.#originOverrides = new BehaviorSubject(new Map());
|
|
22
|
+
this.#focus = listener(this.#document, this.#zone, "focus", EVENT_OPTIONS).pipe(connect(focus => this.#zone.runOutsideAngular(() => {
|
|
23
|
+
let lastFocused = null;
|
|
24
|
+
const sideEffect = new Subject();
|
|
25
|
+
// if element removed form document, emit blur & focus
|
|
26
|
+
const mutation = new MutationObserver(mutations => {
|
|
27
|
+
for (const mutation of mutations) {
|
|
28
|
+
if (mutation.type === "childList" && mutation.removedNodes.length > 0) {
|
|
29
|
+
for (const removed of Array.from(mutation.removedNodes)) {
|
|
30
|
+
if (removed === lastFocused || removed.contains(lastFocused)) {
|
|
31
|
+
this.#blurSide.next(lastFocused);
|
|
32
|
+
sideEffect.next(this.#document.activeElement);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
25
36
|
}
|
|
26
|
-
else {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
})),
|
|
30
|
-
focus: focus,
|
|
31
|
-
blur: blur
|
|
32
|
-
}).pipe(takeUntilDestroyed(), map(({ activity, focus, blur }) => {
|
|
33
|
-
// console.log({ activity, focus, blur })
|
|
34
|
-
// If focus in with alt+tab
|
|
35
|
-
if (blur === document && activity.origin === "keyboard") {
|
|
36
|
-
return { origin: "program", element: focus };
|
|
37
|
-
}
|
|
38
|
-
if (focus === document) {
|
|
39
|
-
return { origin: "program", element: focus };
|
|
40
|
-
}
|
|
41
|
-
// If press tab button, first fire the event in the currently focused element
|
|
42
|
-
if (focus === blur) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
// When press tab, the activity is on the current fucesd element,
|
|
46
|
-
// so when blur is changed to it, the focus change is completed
|
|
47
|
-
if (activity.origin === "keyboard" && isActivityElement(activity.node, blur)) {
|
|
48
|
-
return { origin: "keyboard", element: focus };
|
|
49
37
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
38
|
+
});
|
|
39
|
+
mutation.observe(this.#document, { subtree: true, childList: true });
|
|
40
|
+
return merge(focus.pipe(tap(node => (lastFocused = node)), finalize(() => mutation.disconnect())), sideEffect);
|
|
41
|
+
})), distinctUntilChanged(strictEq));
|
|
42
|
+
this.#blurEvent = listener(this.#document, this.#zone, "blur", EVENT_OPTIONS).pipe(startWith(null));
|
|
43
|
+
this.#blurSide = new Subject();
|
|
44
|
+
this.#blur = merge(this.#blurEvent, this.#blurSide).pipe(distinctUntilChanged(strictEq));
|
|
45
|
+
this.events = this.#zone.runOutsideAngular(() => combineLatest({
|
|
46
|
+
activity: this.#activity.events$.pipe(filter(event => event.type !== "mousemove")),
|
|
47
|
+
focus: this.#focus,
|
|
48
|
+
blur: this.#blur.pipe(tap(el => this.#delOrigin(el))),
|
|
49
|
+
overrides: this.#originOverrides
|
|
50
|
+
}).pipe(takeUntilDestroyed(), map(({ activity, focus, blur, overrides }) => {
|
|
51
|
+
const override = overrides.get(focus);
|
|
52
|
+
// If focus in with alt+tab
|
|
53
|
+
if (blur === document && activity.origin === "keyboard") {
|
|
54
|
+
return { origin: override || "program", element: focus };
|
|
55
|
+
}
|
|
56
|
+
if (focus === document) {
|
|
57
|
+
return { origin: override || "program", element: focus };
|
|
58
|
+
}
|
|
59
|
+
// If press tab button, first fire the event in the currently focused element
|
|
60
|
+
if (focus === blur) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
// When press tab, the activity is on the current fucesd element,
|
|
64
|
+
// so when blur is changed to it, the focus change is completed
|
|
65
|
+
if (activity.origin === "keyboard" && isActivityElement(activity.node, blur)) {
|
|
66
|
+
return { origin: override || "keyboard", element: focus };
|
|
67
|
+
}
|
|
68
|
+
if (isActivityElement(activity.node, focus)) {
|
|
69
|
+
return { origin: override || activity.origin, element: focus };
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return { origin: override || "program", element: focus };
|
|
73
|
+
}
|
|
74
|
+
}), filter(v => !!v), distinctUntilChanged(isEqual), shareReplay({ bufferSize: 1, refCount: true })));
|
|
58
75
|
}
|
|
76
|
+
#activity;
|
|
77
|
+
#focusTrap;
|
|
78
|
+
#zone;
|
|
79
|
+
#document;
|
|
80
|
+
#originOverrides;
|
|
81
|
+
#focus;
|
|
82
|
+
#blurEvent;
|
|
83
|
+
#blurSide;
|
|
84
|
+
#blur;
|
|
59
85
|
watch(element) {
|
|
60
86
|
const el = coerceElement(element);
|
|
61
87
|
return this.events.pipe(map(event => {
|
|
@@ -66,36 +92,54 @@ export class FocusService {
|
|
|
66
92
|
return { element: el, origin: null };
|
|
67
93
|
}));
|
|
68
94
|
}
|
|
69
|
-
focus(node,
|
|
70
|
-
|
|
71
|
-
node.focus();
|
|
95
|
+
focus(node, origin) {
|
|
96
|
+
this.#setOrigin(node, origin);
|
|
97
|
+
coerceElement(node).focus();
|
|
72
98
|
}
|
|
73
99
|
queryFocusable(inside) {
|
|
74
|
-
return focusable(inside, { includeContainer: false });
|
|
100
|
+
return focusable(coerceElement(inside), { includeContainer: false });
|
|
75
101
|
}
|
|
76
102
|
getFirstFocusable(inside) {
|
|
77
103
|
return this.queryFocusable(inside)[0];
|
|
78
104
|
}
|
|
79
105
|
isFocusable(node) {
|
|
80
|
-
return isFocusable(node);
|
|
106
|
+
return isFocusable(coerceElement(node));
|
|
81
107
|
}
|
|
82
108
|
focusTrap(inside, deferCaptureElements = false) {
|
|
83
|
-
return this.#focusTrap.create(inside, deferCaptureElements);
|
|
109
|
+
return this.#focusTrap.create(coerceElement(inside), deferCaptureElements);
|
|
84
110
|
}
|
|
85
|
-
|
|
111
|
+
#setOrigin(el, origin) {
|
|
112
|
+
const target = coerceElement(el);
|
|
113
|
+
const map = this.#originOverrides.value;
|
|
114
|
+
map.set(target, origin);
|
|
115
|
+
this.#originOverrides.next(map);
|
|
116
|
+
}
|
|
117
|
+
#delOrigin(el) {
|
|
118
|
+
const target = coerceElement(el);
|
|
119
|
+
const map = this.#originOverrides.value;
|
|
120
|
+
map.delete(target);
|
|
121
|
+
this.#originOverrides.next(map);
|
|
122
|
+
}
|
|
123
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FocusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
86
124
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FocusService, providedIn: "root" }); }
|
|
87
125
|
}
|
|
88
126
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FocusService, decorators: [{
|
|
89
127
|
type: Injectable,
|
|
90
128
|
args: [{ providedIn: "root" }]
|
|
91
|
-
}]
|
|
92
|
-
type: Inject,
|
|
93
|
-
args: [DOCUMENT]
|
|
94
|
-
}] }, { type: i0.NgZone, decorators: [{
|
|
95
|
-
type: Inject,
|
|
96
|
-
args: [NgZone]
|
|
97
|
-
}] }] });
|
|
129
|
+
}] });
|
|
98
130
|
function isActivityElement(activityEl, focused) {
|
|
99
131
|
return activityEl != null && focused != null && (activityEl === focused || focused.contains(activityEl));
|
|
100
132
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2ZvY3VzL2ZvY3VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRXRILE9BQU8sRUFBRSxTQUFTLEVBQXlCLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLGdCQUFnQixDQUFBO0FBRTVELE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBOztBQUU3RCxNQUFNLGFBQWEsR0FBNEI7SUFDM0MsT0FBTyxFQUFFLElBQUk7SUFDYixPQUFPLEVBQUUsSUFBSTtDQUNoQixDQUFBO0FBZ0JELE1BQU0sT0FBTyxZQUFZO0lBQ1osU0FBUyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFHOUMsWUFBOEIsUUFBa0IsRUFBa0IsSUFBWTtRQUMxRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxP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QUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTWpCLE1BQU07MkJBQUMsUUFBUTs7MEJBQXVCLE1BQU07MkJBQUMsTUFBTTs7QUErRnBFLFNBQVMsaUJBQWlCLENBQUMsVUFBd0IsRUFBRSxPQUFxQjtJQUN0RSxPQUFPLFVBQVUsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0FBQzVHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCJcblxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGggfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGZvY3VzYWJsZSwgdHlwZSBGb2N1c2FibGVFbGVtZW50LCBpc0ZvY3VzYWJsZSB9IGZyb20gXCJ0YWJiYWJsZVwiXG5cbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IEFjdGl2aXR5T3JpZ2luLCBBY3Rpdml0eVNlcnZpY2UgfSBmcm9tIFwiLi4vYWN0aXZpdHlcIlxuXG5jb25zdCBFVkVOVF9PUFRJT05TOiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyA9IHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIHBhc3NpdmU6IHRydWVcbn1cblxuZXhwb3J0IHR5cGUgRm9jdXNPcmlnaW4gPSBBY3Rpdml0eU9yaWdpbiB8IG51bGxcblxuZXhwb3J0IGludGVyZmFjZSBGb2N1c0NoYW5nZXMge1xuICAgIG9yaWdpbjogRm9jdXNPcmlnaW5cbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvY3VzYWJsZUV2ZW50IHtcbiAgICBvcmlnaW46IEZvY3VzT3JpZ2luXG4gICAgZXhhY3Q6IGJvb2xlYW5cbiAgICBub2RlOiBOb2RlXG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBGb2N1c1NlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICNhY3Rpdml0eSA9IGluamVjdChBY3Rpdml0eVNlcnZpY2UpXG4gICAgcmVhZG9ubHkgI2ZvY3VzVHJhcCA9IGluamVjdChGb2N1c1RyYXBGYWN0b3J5KVxuICAgIHJlYWRvbmx5IGV2ZW50czogT2JzZXJ2YWJsZTxGb2N1c0NoYW5nZXM+XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudDogRG9jdW1lbnQsIEBJbmplY3QoTmdab25lKSB6b25lOiBOZ1pvbmUpIHtcbiAgICAgICAgdGhpcy5ldmVudHMgPSB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzID0gZnJvbUV2ZW50KGRvY3VtZW50LCBcImZvY3VzXCIsIEVWRU5UX09QVElPTlMpLnBpcGUobWFwKGUgPT4gZS50YXJnZXQgYXMgTm9kZSkpXG4gICAgICAgICAgICBjb25zdCBibHVyID0gZnJvbUV2ZW50KGRvY3VtZW50LCBcImJsdXJcIiwgRVZFTlRfT1BUSU9OUykucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICAgICAgbWFwKGUgPT4gKGU/LnRhcmdldCBhcyBOb2RlKSB8fCBudWxsKVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuI2FjdGl2aXR5LmV2ZW50cyQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50LnR5cGUgIT09IFwibW91c2Vtb3ZlXCIpLFxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3Vycik6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgJiYgY3Vycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2Lm9yaWdpbiA9PT0gY3Vyci5vcmlnaW4gJiYgcHJldi5ub2RlID09PSBjdXJyLm5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmb2N1czogZm9jdXMsXG4gICAgICAgICAgICAgICAgYmx1cjogYmx1clxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgICAgICAgICBtYXAoKHsgYWN0aXZpdHksIGZvY3VzLCBibHVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeyBhY3Rpdml0eSwgZm9jdXMsIGJsdXIgfSlcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBmb2N1cyBpbiB3aXRoIGFsdCt0YWJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsdXIgPT09IGRvY3VtZW50ICYmIGFjdGl2aXR5Lm9yaWdpbiA9PT0gXCJrZXlib2FyZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IFwicHJvZ3JhbVwiLCBlbGVtZW50OiBmb2N1cyB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXMgPT09IGRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IFwicHJvZ3JhbVwiLCBlbGVtZW50OiBmb2N1cyB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBwcmVzcyB0YWIgYnV0dG9uLCBmaXJzdCBmaXJlIHRoZSBldmVudCBpbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXMgPT09IGJsdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzIHRhYiwgdGhlIGFjdGl2aXR5IGlzIG9uIHRoZSBjdXJyZW50IGZ1Y2VzZCBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB3aGVuIGJsdXIgaXMgY2hhbmdlZCB0byBpdCwgdGhlIGZvY3VzIGNoYW5nZSBpcyBjb21wbGV0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2aXR5Lm9yaWdpbiA9PT0gXCJrZXlib2FyZFwiICYmIGlzQWN0aXZpdHlFbGVtZW50KGFjdGl2aXR5Lm5vZGUsIGJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IFwia2V5Ym9hcmRcIiwgZWxlbWVudDogZm9jdXMgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZpdHlFbGVtZW50KGFjdGl2aXR5Lm5vZGUsIGZvY3VzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBhY3Rpdml0eS5vcmlnaW4sIGVsZW1lbnQ6IGZvY3VzIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9yaWdpbjogXCJwcm9ncmFtXCIsIGVsZW1lbnQ6IGZvY3VzIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgICAgICkgYXMgYW55XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgd2F0Y2goZWxlbWVudDogRWxlbWVudElucHV0KSB7XG4gICAgICAgIGNvbnN0IGVsID0gY29lcmNlRWxlbWVudChlbGVtZW50KVxuICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMucGlwZShcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBldmVudC5lbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIChldmVudC5lbGVtZW50ID09PSBlbCB8fCAodHlwZW9mIGVsLmNvbnRhaW5zID09PSBcImZ1bmN0aW9uXCIgJiYgZWwuY29udGFpbnMoZXZlbnQuZWxlbWVudCkpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZWxlbWVudDogZWwsIG9yaWdpbjogbnVsbCB9IGFzIEZvY3VzQ2hhbmdlc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGZvY3VzKG5vZGU6IEhUTUxFbGVtZW50LCBfb3JpZ2luOiBGb2N1c09yaWdpbiB8IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogZm9jdXMgb3JpZ2luXG4gICAgICAgIG5vZGUuZm9jdXMoKVxuICAgIH1cblxuICAgIHF1ZXJ5Rm9jdXNhYmxlKGluc2lkZTogSFRNTEVsZW1lbnQpOiBGb2N1c2FibGVFbGVtZW50W10ge1xuICAgICAgICByZXR1cm4gZm9jdXNhYmxlKGluc2lkZSwgeyBpbmNsdWRlQ29udGFpbmVyOiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGdldEZpcnN0Rm9jdXNhYmxlKGluc2lkZTogSFRNTEVsZW1lbnQpOiBGb2N1c2FibGVFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlGb2N1c2FibGUoaW5zaWRlKVswXVxuICAgIH1cblxuICAgIGlzRm9jdXNhYmxlKG5vZGU6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzRm9jdXNhYmxlKG5vZGUpXG4gICAgfVxuXG4gICAgZm9jdXNUcmFwKGluc2lkZTogSFRNTEVsZW1lbnQsIGRlZmVyQ2FwdHVyZUVsZW1lbnRzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2ZvY3VzVHJhcC5jcmVhdGUoaW5zaWRlLCBkZWZlckNhcHR1cmVFbGVtZW50cylcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzQWN0aXZpdHlFbGVtZW50KGFjdGl2aXR5RWw/OiBOb2RlIHwgbnVsbCwgZm9jdXNlZD86IE5vZGUgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFjdGl2aXR5RWwgIT0gbnVsbCAmJiBmb2N1c2VkICE9IG51bGwgJiYgKGFjdGl2aXR5RWwgPT09IGZvY3VzZWQgfHwgZm9jdXNlZC5jb250YWlucyhhY3Rpdml0eUVsKSlcbn1cbiJdfQ==
|
|
133
|
+
function listener(doc, zone, type, options) {
|
|
134
|
+
return new Observable((dst) => zone.runOutsideAngular(() => {
|
|
135
|
+
const handler = (e) => {
|
|
136
|
+
dst.next(e.target);
|
|
137
|
+
};
|
|
138
|
+
document.addEventListener(type, handler, options);
|
|
139
|
+
return () => document.removeEventListener(type, handler, options);
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
function strictEq(a, b) {
|
|
143
|
+
return a === b;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2ZvY3VzL2ZvY3VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUUvRCxPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFDYixPQUFPLEVBQ1Asb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEVBRVAsR0FBRyxFQUNOLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUF5QixXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU1RCxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQTs7QUFFN0QsTUFBTSxhQUFhLEdBQTRCO0lBQzNDLE9BQU8sRUFBRSxJQUFJO0lBQ2IsT0FBTyxFQUFFLElBQUk7Q0FDaEIsQ0FBQTtBQWdCRCxNQUFNLE9BQU8sWUFBWTtJQUR6QjtRQUVhLGNBQVMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDbkMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3JDLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxD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SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXG5cbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgY29ubmVjdCxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBmaWx0ZXIsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIG1lcmdlLFxuICAgIE9ic2VydmFibGUsXG4gICAgc2hhcmVSZXBsYXksXG4gICAgc3RhcnRXaXRoLFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaWJlcixcbiAgICB0YXBcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaC1lc1wiXG5pbXBvcnQgeyBmb2N1c2FibGUsIHR5cGUgRm9jdXNhYmxlRWxlbWVudCwgaXNGb2N1c2FibGUgfSBmcm9tIFwidGFiYmFibGVcIlxuXG5pbXBvcnQgeyBjb2VyY2VFbGVtZW50LCBFbGVtZW50SW5wdXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBBY3Rpdml0eU9yaWdpbiwgQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSBcIi4uL2FjdGl2aXR5XCJcblxuY29uc3QgRVZFTlRfT1BUSU9OUzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiB0cnVlXG59XG5cbmV4cG9ydCB0eXBlIEZvY3VzT3JpZ2luID0gQWN0aXZpdHlPcmlnaW4gfCBudWxsXG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNDaGFuZ2VzIHtcbiAgICBvcmlnaW46IEZvY3VzT3JpZ2luXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb2N1c2FibGVFdmVudCB7XG4gICAgb3JpZ2luOiBGb2N1c09yaWdpblxuICAgIGV4YWN0OiBib29sZWFuXG4gICAgbm9kZTogTm9kZVxufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgRm9jdXNTZXJ2aWNlIHtcbiAgICByZWFkb25seSAjYWN0aXZpdHkgPSBpbmplY3QoQWN0aXZpdHlTZXJ2aWNlKVxuICAgIHJlYWRvbmx5ICNmb2N1c1RyYXAgPSBpbmplY3QoRm9jdXNUcmFwRmFjdG9yeSlcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpXG4gICAgcmVhZG9ubHkgI2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKVxuXG4gICAgcmVhZG9ubHkgI29yaWdpbk92ZXJyaWRlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwPEhUTUxFbGVtZW50LCBGb2N1c09yaWdpbj4+KG5ldyBNYXAoKSlcblxuICAgIHJlYWRvbmx5ICNmb2N1cyA9IGxpc3RlbmVyKHRoaXMuI2RvY3VtZW50LCB0aGlzLiN6b25lLCBcImZvY3VzXCIsIEVWRU5UX09QVElPTlMpLnBpcGUoXG4gICAgICAgIGNvbm5lY3QoZm9jdXMgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBsYXN0Rm9jdXNlZDogTm9kZSB8IG51bGwgPSBudWxsXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkZUVmZmVjdCA9IG5ldyBTdWJqZWN0PE5vZGU+KClcblxuICAgICAgICAgICAgICAgIC8vIGlmIGVsZW1lbnQgcmVtb3ZlZCBmb3JtIGRvY3VtZW50LCBlbWl0IGJsdXIgJiBmb2N1c1xuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiICYmIG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZW1vdmVkIG9mIEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCA9PT0gbGFzdEZvY3VzZWQgfHwgcmVtb3ZlZC5jb250YWlucyhsYXN0Rm9jdXNlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2JsdXJTaWRlLm5leHQobGFzdEZvY3VzZWQhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZUVmZmVjdC5uZXh0KHRoaXMuI2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgbXV0YXRpb24ub2JzZXJ2ZSh0aGlzLiNkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUgfSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAobm9kZSA9PiAobGFzdEZvY3VzZWQgPSBub2RlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiBtdXRhdGlvbi5kaXNjb25uZWN0KCkpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHNpZGVFZmZlY3RcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHN0cmljdEVxKVxuICAgIClcblxuICAgIHJlYWRvbmx5ICNibHVyRXZlbnQgPSBsaXN0ZW5lcih0aGlzLiNkb2N1bWVudCwgdGhpcy4jem9uZSwgXCJibHVyXCIsIEVWRU5UX09QVElPTlMpLnBpcGUoc3RhcnRXaXRoKG51bGwpKVxuICAgIHJlYWRvbmx5ICNibHVyU2lkZSA9IG5ldyBTdWJqZWN0PE5vZGU+KClcbiAgICByZWFkb25seSAjYmx1ciA9IG1lcmdlKHRoaXMuI2JsdXJFdmVudCwgdGhpcy4jYmx1clNpZGUpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoc3RyaWN0RXEpKVxuXG4gICAgcmVhZG9ubHkgZXZlbnRzOiBPYnNlcnZhYmxlPEZvY3VzQ2hhbmdlcz4gPSB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuI2FjdGl2aXR5LmV2ZW50cyQucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQudHlwZSAhPT0gXCJtb3VzZW1vdmVcIikpLFxuICAgICAgICAgICAgZm9jdXM6IHRoaXMuI2ZvY3VzLFxuICAgICAgICAgICAgYmx1cjogdGhpcy4jYmx1ci5waXBlKHRhcChlbCA9PiB0aGlzLiNkZWxPcmlnaW4oZWwgYXMgYW55KSkpLFxuICAgICAgICAgICAgb3ZlcnJpZGVzOiB0aGlzLiNvcmlnaW5PdmVycmlkZXNcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICAgICAgbWFwKCh7IGFjdGl2aXR5LCBmb2N1cywgYmx1ciwgb3ZlcnJpZGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcy5nZXQoZm9jdXMgYXMgYW55KVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgZm9jdXMgaW4gd2l0aCBhbHQrdGFiXG4gICAgICAgICAgICAgICAgaWYgKGJsdXIgPT09IGRvY3VtZW50ICYmIGFjdGl2aXR5Lm9yaWdpbiA9PT0gXCJrZXlib2FyZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9yaWdpbjogb3ZlcnJpZGUgfHwgXCJwcm9ncmFtXCIsIGVsZW1lbnQ6IGZvY3VzIH0gc2F0aXNmaWVzIEZvY3VzQ2hhbmdlc1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmb2N1cyA9PT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3JpZ2luOiBvdmVycmlkZSB8fCBcInByb2dyYW1cIiwgZWxlbWVudDogZm9jdXMgfSBzYXRpc2ZpZXMgRm9jdXNDaGFuZ2VzXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJlc3MgdGFiIGJ1dHRvbiwgZmlyc3QgZmlyZSB0aGUgZXZlbnQgaW4gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXMgPT09IGJsdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzIHRhYiwgdGhlIGFjdGl2aXR5IGlzIG9uIHRoZSBjdXJyZW50IGZ1Y2VzZCBlbGVtZW50LFxuICAgICAgICAgICAgICAgIC8vIHNvIHdoZW4gYmx1ciBpcyBjaGFuZ2VkIHRvIGl0LCB0aGUgZm9jdXMgY2hhbmdlIGlzIGNvbXBsZXRlZFxuICAgICAgICAgICAgICAgIGlmIChhY3Rpdml0eS5vcmlnaW4gPT09IFwia2V5Ym9hcmRcIiAmJiBpc0FjdGl2aXR5RWxlbWVudChhY3Rpdml0eS5ub2RlLCBibHVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IG92ZXJyaWRlIHx8IFwia2V5Ym9hcmRcIiwgZWxlbWVudDogZm9jdXMgfSBzYXRpc2ZpZXMgRm9jdXNDaGFuZ2VzXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZpdHlFbGVtZW50KGFjdGl2aXR5Lm5vZGUsIGZvY3VzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW46IG92ZXJyaWRlIHx8IGFjdGl2aXR5Lm9yaWdpbiwgZWxlbWVudDogZm9jdXMgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9yaWdpbjogb3ZlcnJpZGUgfHwgXCJwcm9ncmFtXCIsIGVsZW1lbnQ6IGZvY3VzIH0gc2F0aXNmaWVzIEZvY3VzQ2hhbmdlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzRXF1YWwpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgICApXG4gICAgKVxuXG4gICAgd2F0Y2goZWxlbWVudDogRWxlbWVudElucHV0KSB7XG4gICAgICAgIGNvbnN0IGVsID0gY29lcmNlRWxlbWVudChlbGVtZW50KVxuICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMucGlwZShcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBldmVudC5lbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIChldmVudC5lbGVtZW50ID09PSBlbCB8fCAodHlwZW9mIGVsLmNvbnRhaW5zID09PSBcImZ1bmN0aW9uXCIgJiYgZWwuY29udGFpbnMoZXZlbnQuZWxlbWVudCkpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZWxlbWVudDogZWwsIG9yaWdpbjogbnVsbCB9IGFzIEZvY3VzQ2hhbmdlc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGZvY3VzKG5vZGU6IEVsZW1lbnRJbnB1dCwgb3JpZ2luOiBGb2N1c09yaWdpbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy4jc2V0T3JpZ2luKG5vZGUsIG9yaWdpbilcbiAgICAgICAgY29lcmNlRWxlbWVudChub2RlKS5mb2N1cygpXG4gICAgfVxuXG4gICAgcXVlcnlGb2N1c2FibGUoaW5zaWRlOiBFbGVtZW50SW5wdXQpOiBGb2N1c2FibGVFbGVtZW50W10ge1xuICAgICAgICByZXR1cm4gZm9jdXNhYmxlKGNvZXJjZUVsZW1lbnQoaW5zaWRlKSwgeyBpbmNsdWRlQ29udGFpbmVyOiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGdldEZpcnN0Rm9jdXNhYmxlKGluc2lkZTogRWxlbWVudElucHV0KTogRm9jdXNhYmxlRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Rm9jdXNhYmxlKGluc2lkZSlbMF1cbiAgICB9XG5cbiAgICBpc0ZvY3VzYWJsZShub2RlOiBFbGVtZW50SW5wdXQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzRm9jdXNhYmxlKGNvZXJjZUVsZW1lbnQobm9kZSkpXG4gICAgfVxuXG4gICAgZm9jdXNUcmFwKGluc2lkZTogRWxlbWVudElucHV0LCBkZWZlckNhcHR1cmVFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNmb2N1c1RyYXAuY3JlYXRlKGNvZXJjZUVsZW1lbnQoaW5zaWRlKSwgZGVmZXJDYXB0dXJlRWxlbWVudHMpXG4gICAgfVxuXG4gICAgI3NldE9yaWdpbihlbDogRWxlbWVudElucHV0LCBvcmlnaW46IEZvY3VzT3JpZ2luKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvZXJjZUVsZW1lbnQoZWwpXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuI29yaWdpbk92ZXJyaWRlcy52YWx1ZVxuICAgICAgICBtYXAuc2V0KHRhcmdldCwgb3JpZ2luKVxuICAgICAgICB0aGlzLiNvcmlnaW5PdmVycmlkZXMubmV4dChtYXApXG4gICAgfVxuXG4gICAgI2RlbE9yaWdpbihlbDogRWxlbWVudElucHV0KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvZXJjZUVsZW1lbnQoZWwpXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuI29yaWdpbk92ZXJyaWRlcy52YWx1ZVxuICAgICAgICBtYXAuZGVsZXRlKHRhcmdldClcbiAgICAgICAgdGhpcy4jb3JpZ2luT3ZlcnJpZGVzLm5leHQobWFwKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBY3Rpdml0eUVsZW1lbnQoYWN0aXZpdHlFbD86IE5vZGUgfCBudWxsLCBmb2N1c2VkPzogTm9kZSB8IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWN0aXZpdHlFbCAhPSBudWxsICYmIGZvY3VzZWQgIT0gbnVsbCAmJiAoYWN0aXZpdHlFbCA9PT0gZm9jdXNlZCB8fCBmb2N1c2VkLmNvbnRhaW5zKGFjdGl2aXR5RWwpKVxufVxuXG5mdW5jdGlvbiBsaXN0ZW5lcihkb2M6IERvY3VtZW50LCB6b25lOiBOZ1pvbmUsIHR5cGU6IEV2ZW50W1widHlwZVwiXSwgb3B0aW9uczogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxOb2RlPikgPT5cbiAgICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZHN0Lm5leHQoZS50YXJnZXQgYXMgTm9kZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgb3B0aW9ucylcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpXG4gICAgICAgIH0pXG4gICAgKVxufVxuXG5mdW5jdGlvbiBzdHJpY3RFcShhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhID09PSBiXG59XG4iXX0=
|
|
@@ -36,13 +36,14 @@ export class GestureService {
|
|
|
36
36
|
this.#enableTouchAction();
|
|
37
37
|
}), filter(() => false)))),
|
|
38
38
|
// Select active watchers
|
|
39
|
-
map(
|
|
40
|
-
updatePointers(
|
|
41
|
-
const eventTarget =
|
|
39
|
+
map((detail) => {
|
|
40
|
+
updatePointers(detail);
|
|
41
|
+
const eventTarget = detail.origin.target;
|
|
42
|
+
detail.target = eventTarget;
|
|
42
43
|
let includeScrollDistance = false;
|
|
43
44
|
const gestures = this.#watchers
|
|
44
45
|
.filter(({ gesture, el }) => (el === eventTarget || ("contains" in el && el.contains(eventTarget))) &&
|
|
45
|
-
gesture.shouldCapture(
|
|
46
|
+
gesture.shouldCapture(detail))
|
|
46
47
|
.reduce((gestures, { gesture }) => {
|
|
47
48
|
if (!gestures.has(gesture)) {
|
|
48
49
|
includeScrollDistance = includeScrollDistance || gesture.includeScrollDistance;
|
|
@@ -50,7 +51,7 @@ export class GestureService {
|
|
|
50
51
|
}
|
|
51
52
|
return gestures;
|
|
52
53
|
}, new Map());
|
|
53
|
-
return { detail:
|
|
54
|
+
return { detail: detail, gestures, includeScrollDistance };
|
|
54
55
|
}), filter(({ gestures }) => gestures.size > 0), tap(this.#disableTouchAction)
|
|
55
56
|
// finalize(() => console.log("FINALIZE BEGIN"))
|
|
56
57
|
)
|
|
@@ -275,4 +276,4 @@ function preventDefault(event) {
|
|
|
275
276
|
event.preventDefault();
|
|
276
277
|
}
|
|
277
278
|
}
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXJpYS9zcmMvZ2VzdHVyZXMvZ2VzdHVyZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFL0QsT0FBTyxFQUNILGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEVBQ1YsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUVQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNOLE1BQU0sTUFBTSxDQUFBO0FBSWIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUloRyxPQUFPLEVBTUgsU0FBUyxFQUNaLE1BQU0saUJBQWlCLENBQUE7O0FBRXhCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFDOUQsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUNwRSxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUE7QUFvQ3ZELE1BQU0sdUJBQXVCLEdBQTRCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFHekYsTUFBTSxPQUFPLGNBQWM7SUFDZCxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RCLFNBQVMsR0FBRyxN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VUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsdUNBQXVDO1FBQ3ZDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXG5cbmltcG9ydCB7XG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBjb25uZWN0LFxuICAgIGRlYm91bmNlVGltZSxcbiAgICBmaWx0ZXIsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIG1lcmdlLFxuICAgIE9ic2VydmFibGUsXG4gICAgc2NhbixcbiAgICBzaGFyZSxcbiAgICBzdGFydFdpdGgsXG4gICAgU3ViamVjdCxcbiAgICBTdWJzY3JpYmVyLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlV2hpbGUsXG4gICAgdGFwXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgTXV0YWJsZSB9IGZyb20gXCJ1dGlsaXR5LXR5cGVzXCJcblxuaW1wb3J0IHsgX196b25lX3N5bWJvbF9fLCBjb2VyY2VFbGVtZW50LCBFbGVtZW50SW5wdXQsIGlzRmFsc3ksIGlzVHJ1dGh5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5pbXBvcnQgeyBHZXN0dXJlLCBHZXN0dXJlQ2FwdHVyZVN0YXRlLCBHZXN0dXJlRXZlbnQgfSBmcm9tIFwiLi9nZXN0dXJlXCJcbmltcG9ydCB7XG4gICAgR2VzdHVyZURldGFpbCxcbiAgICBHZXN0dXJlTGlzdGVuZXJDb25maWcsXG4gICAgR2VzdHVyZU9yaWdpbixcbiAgICBHZXN0dXJlUGhhc2UsXG4gICAgR2VzdHVyZVBvaW50ZXJUeXBlLFxuICAgIExpc3RlbmVyc1xufSBmcm9tIFwiLi9nZXN0dXJlLWV2ZW50XCJcblxuY29uc3QgQUREX0VWRU5UX0xJU1RFTkVSID0gX196b25lX3N5bWJvbF9fKFwiYWRkRXZlbnRMaXN0ZW5lclwiKVxuY29uc3QgUkVNT1ZFX0VWRU5UX0xJU1RFTkVSID0gX196b25lX3N5bWJvbF9fKFwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiKVxuY29uc3QgRElTUEFUQ0hfRVZFTlQgPSBfX3pvbmVfc3ltYm9sX18oXCJkaXNwYXRjaEV2ZW50XCIpXG5cbnR5cGUgR2VzdHVyZXNUb0V2ZW50c1R5cGU8VCBleHRlbmRzIEFycmF5PEdlc3R1cmU+PiA9XG4gICAgVCBleHRlbmRzIEFycmF5PGluZmVyIEc+ID8gKEcgZXh0ZW5kcyBHZXN0dXJlID8gR2VzdHVyZUV2ZW50PEc+IDogbmV2ZXIpIDogbmV2ZXJcblxudHlwZSBHZXN0dXJlRXZlbnREaXNjcmltaW5hdG9yPFQ+ID0gVCBleHRlbmRzIHsgdHlwZTogaW5mZXIgTiB9ID8geyB0eXBlOiBOIH0gJiBUIDogbmV2ZXJcblxuZXhwb3J0IHR5cGUgR2VzdHVyZVdhdGNoUmV0dXJuczxUIGV4dGVuZHMgQXJyYXk8R2VzdHVyZT4+ID0gT2JzZXJ2YWJsZTxcbiAgICBHZXN0dXJlRXZlbnREaXNjcmltaW5hdG9yPEdlc3R1cmVzVG9FdmVudHNUeXBlPFQ+PlxuPlxuXG5leHBvcnQgdHlwZSBHZXN0dXJlTGlzdGVuUmV0dXJuczxUIGV4dGVuZHMgQXJyYXk8R2VzdHVyZT4+ID0gT2JzZXJ2YWJsZTxHZXN0dXJlc1RvRXZlbnRzVHlwZTxUPj5cblxuaW50ZXJmYWNlIEJlZ2luU3RhdGUge1xuICAgIGRldGFpbDogR2VzdHVyZURldGFpbFxuICAgIGdlc3R1cmVzOiBNYXA8R2VzdHVyZSwgR2VzdHVyZUNhcHR1cmVTdGF0ZT5cbiAgICBpbmNsdWRlU2Nyb2xsRGlzdGFuY2U6IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIENhcHR1cmVTdGF0ZSB7XG4gICAgZXZlbnRzOiBHZXN0dXJlRGV0YWlsW11cbiAgICBnZXN0dXJlczogQmVnaW5TdGF0ZVtcImdlc3R1cmVzXCJdXG4gICAgaW5jbHVkZVNjcm9sbERpc3RhbmNlOiBCZWdpblN0YXRlW1wiaW5jbHVkZVNjcm9sbERpc3RhbmNlXCJdXG59XG5cbmludGVyZmFjZSBDYXB0dXJlU2VsZWN0U3RhdGUge1xuICAgIGV2ZW50czogR2VzdHVyZURldGFpbFtdXG4gICAgZ2VzdHVyZT86IEdlc3R1cmVcbiAgICB3YXRjaGVycz86IEFycmF5PFdhdGNoZXI+XG59XG5cbmludGVyZmFjZSBXYXRjaGVyIHtcbiAgICByZWFkb25seSBlbDogSFRNTEVsZW1lbnRcbiAgICByZWFkb25seSBnZXN0dXJlOiBHZXN0dXJlXG59XG5cbmNvbnN0IFNDUk9MTF9MSVNURU5FUl9PUFRJT05TOiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyA9IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogdHJ1ZSB9XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBHZXN0dXJlU2VydmljZSB7XG4gICAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKVxuICAgIHJlYWRvbmx5ICNkb2N1bWVudCA9IGluamVjdChET0NVTUVOVClcblxuICAgICN3YXRjaGVyczogV2F0Y2hlcltdID0gW11cbiAgICByZWFkb25seSAjdHJpZ2dlciA9IG5ldyBTdWJqZWN0PEdlc3R1cmVEZXRhaWw+KClcblxuICAgIHJlYWRvbmx5ICNtb3Zpbmc6IE9ic2VydmFibGU8R2VzdHVyZURldGFpbD4gPSBtZXJnZShcbiAgICAgICAgLi4uT2JqZWN0LmtleXMoTGlzdGVuZXJzKVxuICAgICAgICAgICAgLmZpbHRlcihuYW1lID0+IExpc3RlbmVyc1tuYW1lXS5waGFzZSA9PT0gR2VzdHVyZVBoYXNlLk1vdmluZylcbiAgICAgICAgICAgIC5tYXAobmFtZSA9PiB0aGlzLiNsaXN0ZW4obmFtZSwgTGlzdGVuZXJzW25hbWVdKSlcbiAgICApLnBpcGUoc2hhcmUoKSlcblxuICAgIHJlYWRvbmx5ICNlbmQ6IE9ic2VydmFibGU8R2VzdHVyZURldGFpbD4gPSBtZXJnZShcbiAgICAgICAgLi4uT2JqZWN0LmtleXMoTGlzdGVuZXJzKVxuICAgICAgICAgICAgLmZpbHRlcihuYW1lID0+IExpc3RlbmVyc1tuYW1lXS5waGFzZSA9PT0gR2VzdHVyZVBoYXNlLkVuZClcbiAgICAgICAgICAgIC5tYXAobmFtZSA9PiB0aGlzLiNsaXN0ZW4obmFtZSwgTGlzdGVuZXJzW25hbWVdKSlcbiAgICApLnBpcGUoc2hhcmUoKSlcblxuICAgIHJlYWRvbmx5ICNldmVudFN0cmVhbSA9IG1lcmdlKHRoaXMuI21vdmluZywgdGhpcy4jZW5kKS5waXBlKHNoYXJlKCkpXG5cbiAgICByZWFkb25seSAjYmVnaW4gPSBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPEJlZ2luU3RhdGU+KSA9PiB7XG4gICAgICAgIGxldCBwb2ludGVyVHlwZTogR2VzdHVyZVBvaW50ZXJUeXBlIHwgdW5kZWZpbmVkXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI3RyaWdnZXJcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb2ludGVyVHlwZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSA9IGV2ZW50LnBvaW50ZXJUeXBlXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucG9pbnRlclR5cGUgPT09IHBvaW50ZXJUeXBlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY29ubmVjdChldmVudHMgPT5cbiAgICAgICAgICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBwb2ludGVyVHlwZSBvbiBlbmQsIGFmdGVyIDIwMG1zLCBiZWNhdXNlIHRvdWNoZW5kIGlzIG1heWJlIGZvbGxvd2VkIGJ5IGEgbW91c2UgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2VuZC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlID0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2VuYWJsZVRvdWNoQWN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIC8vIFNlbGVjdCBhY3RpdmUgd2F0Y2hlcnNcbiAgICAgICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQb2ludGVycyhldmVudClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC5vcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmNsdWRlU2Nyb2xsRGlzdGFuY2UgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXN0dXJlcyA9IHRoaXMuI3dhdGNoZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IGdlc3R1cmUsIGVsIH0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbCA9PT0gZXZlbnRUYXJnZXQgfHwgKFwiY29udGFpbnNcIiBpbiBlbCAmJiBlbC5jb250YWlucyhldmVudFRhcmdldCkpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlLnNob3VsZENhcHR1cmUoZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXN0dXJlcywgeyBnZXN0dXJlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnZXN0dXJlcy5oYXMoZ2VzdHVyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVTY3JvbGxEaXN0YW5jZSA9IGluY2x1ZGVTY3JvbGxEaXN0YW5jZSB8fCBnZXN0dXJlLmluY2x1ZGVTY3JvbGxEaXN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZXMuc2V0KGdlc3R1cmUsIEdlc3R1cmVDYXB0dXJlU3RhdGUuVW5jaGVja2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXN0dXJlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcCgpIGFzIEJlZ2luU3RhdGVbXCJnZXN0dXJlc1wiXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRldGFpbDogZXZlbnQsIGdlc3R1cmVzLCBpbmNsdWRlU2Nyb2xsRGlzdGFuY2UgfSBzYXRpc2ZpZXMgQmVnaW5TdGF0ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoeyBnZXN0dXJlcyB9KSA9PiBnZXN0dXJlcy5zaXplID4gMCksXG4gICAgICAgICAgICAgICAgdGFwKHRoaXMuI2Rpc2FibGVUb3VjaEFjdGlvbilcbiAgICAgICAgICAgICAgICAvLyBmaW5hbGl6ZSgoKSA9PiBjb25zb2xlLmxvZyhcIkZJTkFMSVpFIEJFR0lOXCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShkc3QpXG4gICAgfSlcblxuICAgIHJlYWRvbmx5ICNnZXN0dXJlID0gdGhpcy4jYmVnaW4ucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh7IGRldGFpbDogc3RhcnRFdmVudCwgZ2VzdHVyZXMsIGluY2x1ZGVTY3JvbGxEaXN0YW5jZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb2ludGVyVHlwZSA9IHN0YXJ0RXZlbnQucG9pbnRlclR5cGVcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXQgPSBzdGFydEV2ZW50Lm9yaWdpbi50aW1lU3RhbXBcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsID0gc3RhcnRFdmVudC5vcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICBjb25zdCBkaXNwYXRjaEV2ZW50ID0gdGFyZ2V0RWxbRElTUEFUQ0hfRVZFTlRdLmJpbmQodGFyZ2V0RWwpXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50U3RyZWFtSW5pdCA9IHRoaXMuI2V2ZW50U3RyZWFtLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHN0YXJ0RXZlbnQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudC5wb2ludGVyVHlwZSA9PT0gcG9pbnRlclR5cGUpXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50U3RyZWFtU291cmNlID0gIWluY2x1ZGVTY3JvbGxEaXN0YW5jZVxuICAgICAgICAgICAgICAgID8gZXZlbnRTdHJlYW1Jbml0XG4gICAgICAgICAgICAgICAgOiBjb21iaW5lTGF0ZXN0KFtldmVudFN0cmVhbUluaXQsIHRoaXMuI3Njcm9sbERpc3RhbmNlKHRhcmdldEVsKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFwKChbc3JjLCBkaXN0YW5jZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOyhzcmMgYXMgTXV0YWJsZTxHZXN0dXJlRGV0YWlsPikuc2Nyb2xsRGlzdGFuY2UgPSBkaXN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3JjXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3QgZXZlbnRTdHJlYW0gPSBldmVudFN0cmVhbVNvdXJjZS5waXBlKFxuICAgICAgICAgICAgICAgIHNjYW4oXG4gICAgICAgICAgICAgICAgICAgIChzdGF0ZSwgY3VycikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBvaW50ZXJzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZDogY3Vyci5vcmlnaW4udGltZVN0YW1wIC0gc3RhcnRBdCFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBzdGFydEV2ZW50XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlV2hpbGUoZXZlbnQgPT4gZXZlbnQucGhhc2UgIT09IEdlc3R1cmVQaGFzZS5FbmQsIHRydWUpLFxuICAgICAgICAgICAgICAgIC8vIGZpbmFsaXplKCgpID0+IGNvbnNvbGUubG9nKFwiRklOQUxJWkUgU1RSRUFNXCIpKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVTdGF0ZSA9IGV2ZW50U3RyZWFtLnBpcGUoXG4gICAgICAgICAgICAgICAgY29ubmVjdChzcmMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZTogQ2FwdHVyZVN0YXRlID0geyBldmVudHM6IFtdLCBnZXN0dXJlcywgaW5jbHVkZVNjcm9sbERpc3RhbmNlIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjLnBpcGUodGFwKGV2ZW50ID0+IHN0YXRlLmV2ZW50cy5wdXNoKGV2ZW50KSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShnZXN0dXJlcy5rZXlzKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZ2VzdHVyZSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlLmNhcHR1cmUoc3JjLnBpcGUoZmlsdGVyKGdlc3R1cmUuc2hvdWxkQ2FwdHVyZS5iaW5kKGdlc3R1cmUpKSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlV2hpbGUocmVzdWx0ID0+IHJlc3VsdCAhPT0gR2VzdHVyZUNhcHR1cmVTdGF0ZS5Ta2lwLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcChyZXN1bHQgPT4gZ2VzdHVyZXMuc2V0KGdlc3R1cmUsIHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkucGlwZShtYXAoKCkgPT4gc3RhdGUpKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBDQVBUVVJFXCIpKVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RHZXN0dXJlID0gY2FwdHVyZVN0YXRlLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydGl0aW9uczogeyBbayBpbiBHZXN0dXJlQ2FwdHVyZVN0YXRlXT86IEdlc3R1cmVbXSB9ID0ge31cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtnZXN0dXJlLCBjYXB0dXJlU3RhdGVdIG9mIHN0YXRlLmdlc3R1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aXRpb24gPSAocGFydGl0aW9uc1tjYXB0dXJlU3RhdGVdID8/PSBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbi5wdXNoKGdlc3R1cmUpXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLkluc3RhbnRdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZTogcGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLkluc3RhbnRdLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHN0YXRlLmV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBDYXB0dXJlU2VsZWN0U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIG5vdCBhbGwgZ2VzdHVyZXMgcmV0dXJuIGZyb20gR2VzdHVyZS5jYXB0dXJlXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0aXRpb25zW0dlc3R1cmVDYXB0dXJlU3RhdGUuVW5jaGVja2VkXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgaGFzIHBlbmRpbmcsIHRoZSBjYXB0dXJlIGlzIGNvbnRpbnVlZFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLlBlbmRpbmddICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBubyBwZW5kaWcgJiBoYXMgbWF5YmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRpdGlvbnNbR2VzdHVyZUNhcHR1cmVTdGF0ZS5NYXliZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlOiBwYXJ0aXRpb25zW0dlc3R1cmVDYXB0dXJlU3RhdGUuTWF5YmVdLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHN0YXRlLmV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBDYXB0dXJlU2VsZWN0U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIHBlbmRpbmcgJiBubyBtYXliZSAmIG5vIHRlcm1pbmF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyBzbywgbm90aGlnbiBtYXRjaGVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGV2ZW50czogc3RhdGUuZXZlbnRzIH0gYXMgQ2FwdHVyZVNlbGVjdFN0YXRlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKGlzRmFsc3ksIHRydWUpLFxuICAgICAgICAgICAgICAgIGZpbHRlcihpc1RydXRoeSksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKHYgPT4gdiEuZ2VzdHVyZSAhPSBudWxsLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAvLyB0YXAoKHY6IENhcHR1cmVTZWxlY3RTdGF0ZSkgPT4gdi5ldmVudHMuZm9yRWFjaCgoeyBvcmlnaW4gfSkgPT4gcHJldmVudERlZmF1bHQob3JpZ2luKSkpXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBTRUxFQ1RcIikpXG4gICAgICAgICAgICApIGFzIE9ic2VydmFibGU8UmVxdWlyZWQ8Q2FwdHVyZVNlbGVjdFN0YXRlPj5cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdEdlc3R1cmUucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgZXZlbnRzLCBnZXN0dXJlIH0pID0+XG4gICAgICAgICAgICAgICAgICAgIGdlc3R1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5oYW5kbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTdHJlYW0ucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKC4uLmV2ZW50cyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoeyBvcmlnaW4gfSkgPT4gcHJldmVudERlZmF1bHQob3JpZ2luKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihnZXN0dXJlLmlzUmVsZXZhbnRFdmVudC5iaW5kKGdlc3R1cmUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VXaGlsZSh2ID0+IHYucGhhc2UgIT09IEdlc3R1cmVQaGFzZS5FbmQsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcChkZXRhaWwgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudChnZXN0dXJlLnR5cGUsIHsgZGV0YWlsLCBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJHRVNUVVJFIEZJTkFMSVpFXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBSRVNVTFRcIikpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKHRoaXMuI2VuYWJsZVRvdWNoQWN0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmUoKVxuICAgIClcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCB0cmlnZ2VycyA9IG1lcmdlKFxuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoTGlzdGVuZXJzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIobmFtZSA9PiBMaXN0ZW5lcnNbbmFtZV0ucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5TdGFydClcbiAgICAgICAgICAgICAgICAubWFwKG5hbWUgPT4gdGhpcy4jbGlzdGVuKG5hbWUsIExpc3RlbmVyc1tuYW1lXSkpXG4gICAgICAgIClcbiAgICAgICAgdHJpZ2dlcnMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKHRoaXMuI3RyaWdnZXIpXG4gICAgfVxuXG4gICAgbGlzdGVuPFQgZXh0ZW5kcyBBcnJheTxHZXN0dXJlPj4oZWw6IEVsZW1lbnRJbnB1dCwgLi4uZ2VzdHVyZXM6IFQpOiBHZXN0dXJlTGlzdGVuUmV0dXJuczxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPEdlc3R1cmVEZXRhaWw+KSA9PlxuICAgICAgICAgICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvZXJjZUVsZW1lbnQoZWwpXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IGRzdC5uZXh0LmJpbmQoZHN0KVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ2VzdHVyZSBvZiBnZXN0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50W0FERF9FVkVOVF9MSVNURU5FUl0oZ2VzdHVyZS50eXBlIGFzIGFueSwgbmV4dClcbiAgICAgICAgICAgICAgICAgICAgZHN0LmFkZChlbGVtZW50W1JFTU9WRV9FVkVOVF9MSVNURU5FUl0uYmluZChlbGVtZW50LCBnZXN0dXJlLnR5cGUgYXMgYW55LCBuZXh0IGFzIGFueSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRzdC5hZGQodGhpcy4jd2F0Y2goZWxlbWVudCwgLi4uZ2VzdHVyZXMpLnN1YnNjcmliZSgpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSBhcyBhbnlcbiAgICB9XG5cbiAgICAjd2F0Y2g8VCBleHRlbmRzIEFycmF5PEdlc3R1cmU+PihlbDogRWxlbWVudElucHV0LCAuLi5nZXN0dXJlczogVCk6IEdlc3R1cmVXYXRjaFJldHVybnM8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxHZXN0dXJlRGV0YWlsPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KGVsKVxuICAgICAgICAgICAgICAgIGNvbnN0IHdhdGNoZXJzID0gZ2VzdHVyZXMubWFwKGdlc3R1cmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBnZXN0dXJlLCBlbDogZWxlbWVudCB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB0aGlzLiNhZGQod2F0Y2hlcnMpXG4gICAgICAgICAgICAgICAgZHN0LmFkZCh0aGlzLiNnZXN0dXJlLnN1YnNjcmliZShkc3QpKVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlbW92ZSh3YXRjaGVycylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApIGFzIGFueVxuICAgIH1cblxuICAgICNhZGQod2F0Y2hlcnM6IFdhdGNoZXJbXSkge1xuICAgICAgICB0aGlzLiN3YXRjaGVycyA9IHRoaXMuI3dhdGNoZXJzLmNvbmNhdCh3YXRjaGVycylcbiAgICB9XG5cbiAgICAjcmVtb3ZlKHdhdGNoZXJzOiBXYXRjaGVyW10pIHtcbiAgICAgICAgdGhpcy4jd2F0Y2hlcnMgPSB0aGlzLiN3YXRjaGVycy5maWx0ZXIodiA9PiAhd2F0Y2hlcnMuaW5jbHVkZXModikpXG4gICAgfVxuXG4gICAgI2xpc3RlbihuYW1lOiBzdHJpbmcsIGNvbmZpZzogR2VzdHVyZUxpc3RlbmVyQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHsgcGhhc2UsIHBvaW50ZXJUeXBlLCBvcHRpb25zIH0gPSBjb25maWdcblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxHZXN0dXJlRGV0YWlsPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG9yaWdpbjogR2VzdHVyZU9yaWdpbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRzdC5uZXh0KHsgb3JpZ2luLCBwaGFzZSwgcG9pbnRlclR5cGUgfSBhcyBHZXN0dXJlRGV0YWlsKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkRXZlbnRMaXN0ZW5lclwiLCBuYW1lKVxuICAgICAgICAgICAgICAgIHRoaXMuI2RvY3VtZW50W0FERF9FVkVOVF9MSVNURU5FUl0obmFtZSBhcyBrZXlvZiBEb2N1bWVudEV2ZW50TWFwLCBsaXN0ZW5lciBhcyBhbnksIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZW1vdmVFdmVudExpc3RlbmVyXCIsIG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2RvY3VtZW50W1JFTU9WRV9FVkVOVF9MSVNURU5FUl0obmFtZSBhcyBrZXlvZiBEb2N1bWVudEV2ZW50TWFwLCBsaXN0ZW5lciBhcyBhbnksIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNzY3JvbGxEaXN0YW5jZShlbGVtZW50OiBFbGVtZW50KTogT2JzZXJ2YWJsZTxQb3NpdGlvbj4ge1xuICAgICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCB4ID0gMFxuICAgICAgICAgICAgbGV0IHkgPSAwXG4gICAgICAgICAgICBsZXQgcCA9IGVsZW1lbnRcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICB4ICs9IHAuc2Nyb2xsTGVmdCA/PyAwXG4gICAgICAgICAgICAgICAgeSArPSBwLnNjcm9sbFRvcCA/PyAwXG4gICAgICAgICAgICAgICAgcCA9IHAucGFyZW50Tm9kZSBhcyBFbGVtZW50XG4gICAgICAgICAgICB9IHdoaWxlIChwICE9IG51bGwpXG4gICAgICAgICAgICByZXR1cm4geyB4LCB5IH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPFBvc2l0aW9uPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluaXRpYWwgPSBzY3JvbGxQb3NpdGlvbigpXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzY3JvbGxQb3NpdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIGRzdC5uZXh0KHsgeDogY3VycmVudC54IC0gaW5pdGlhbC54LCB5OiBjdXJyZW50LnkgLSBpbml0aWFsLnkgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZHN0Lm5leHQoeyB4OiAwLCB5OiAwIH0pXG4gICAgICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRbQUREX0VWRU5UX0xJU1RFTkVSXShcInNjcm9sbFwiLCBsaXN0ZW5lciwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRbUkVNT1ZFX0VWRU5UX0xJU1RFTkVSXShcInNjcm9sbFwiLCBsaXN0ZW5lciwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNsYXN0VG91Y2hBY3Rpb24/OiBzdHJpbmdcbiAgICAjZGlzYWJsZVRvdWNoQWN0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy4jbGFzdFRvdWNoQWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuI2xhc3RUb3VjaEFjdGlvbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuI2RvY3VtZW50LmJvZHkpLnRvdWNoQWN0aW9uXG4gICAgICAgICAgICB0aGlzLiNkb2N1bWVudC5ib2R5LnN0eWxlLnRvdWNoQWN0aW9uID0gXCJub25lXCJcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNlbmFibGVUb3VjaEFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuI2xhc3RUb3VjaEFjdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNkb2N1bWVudC5ib2R5LnN0eWxlLnRvdWNoQWN0aW9uID0gdGhpcy4jbGFzdFRvdWNoQWN0aW9uXG4gICAgICAgICAgICB0aGlzLiNsYXN0VG91Y2hBY3Rpb24gPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ydEJ5UHJpcG9yaXR5KGE6IEdlc3R1cmUsIGI6IEdlc3R1cmUpIHtcbiAgICByZXR1cm4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHlcbn1cblxuZnVuY3Rpb24gcG9pbnRlcnNGcm9tRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogUG9zaXRpb25bXSB7XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZXZlbnQudG91Y2hlcykubWFwKHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogdC5jbGllbnRYLCB5OiB0LmNsaWVudFkgfVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9pbnRlcnMoc3RhdGU6IE11dGFibGU8R2VzdHVyZURldGFpbD4pOiBHZXN0dXJlRGV0YWlsIHtcbiAgICBpZiAoc3RhdGUucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5TdGFydCkge1xuICAgICAgICBzdGF0ZS5wb2ludGVycyA9IHBvaW50ZXJzRnJvbUV2ZW50KHN0YXRlLm9yaWdpbikubWFwKHYgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHYsIGN1cnJlbnQ6IHYsIGRpc3RhbmNlOiB7IHg6IDAsIHk6IDAgfSwgZGlyZWN0aW9uOiB7IHg6IDAsIHk6IDAgfSB9XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb2ludGVycykge1xuICAgICAgICBjb25zdCBwb2ludGVycyA9IHBvaW50ZXJzRnJvbUV2ZW50KHN0YXRlLm9yaWdpbilcbiAgICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5wb2ludGVycyA9IHN0YXRlLnBvaW50ZXJzLm1hcCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBvaW50ZXJzW2ldXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB2LnN0YXJ0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHAsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IHsgeDogcC54IC0gdi5zdGFydC54LCB5OiBwLnkgLSB2LnN0YXJ0LnkgfSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IHsgeDogZGlyZWN0aW9uKHYuc3RhcnQueCwgcC54KSwgeTogZGlyZWN0aW9uKHYuc3RhcnQueSwgcC55KSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlXG59XG5cbmZ1bmN0aW9uIGRpcmVjdGlvbihwcmV2OiBudW1iZXIsIGN1cnI6IG51bWJlcik6IC0xIHwgMCB8IDEge1xuICAgIHJldHVybiBjdXJyID4gcHJldiA/IDEgOiBjdXJyIDwgcHJldiA/IC0xIDogMFxufVxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudDogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgUFJFVkVOVCAke2V2ZW50LnR5cGV9YClcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cbn1cbiJdfQ==
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXJpYS9zcmMvZ2VzdHVyZXMvZ2VzdHVyZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFL0QsT0FBTyxFQUNILGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEVBQ1YsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUVQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNOLE1BQU0sTUFBTSxDQUFBO0FBSWIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUloRyxPQUFPLEVBTUgsU0FBUyxFQUNaLE1BQU0saUJBQWlCLENBQUE7O0FBRXhCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFDOUQsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUNwRSxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUE7QUFvQ3ZELE1BQU0sdUJBQXVCLEdBQTRCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFHekYsTUFBTSxPQUFPLGNBQWM7SUFDZCxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RCLFNBQVMsR0FBRyxN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RCxTQUFTLGNBQWMsQ0FBQyxLQUFZO0lBQ2hDLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLHVDQUF1QztRQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUE7SUFDMUIsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIlxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIlxuXG5pbXBvcnQge1xuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgY29ubmVjdCxcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZmlsdGVyLFxuICAgIGZpbmFsaXplLFxuICAgIG1hcCxcbiAgICBtZXJnZSxcbiAgICBPYnNlcnZhYmxlLFxuICAgIHNjYW4sXG4gICAgc2hhcmUsXG4gICAgc3RhcnRXaXRoLFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaWJlcixcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZVdoaWxlLFxuICAgIHRhcFxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IE11dGFibGUgfSBmcm9tIFwidXRpbGl0eS10eXBlc1wiXG5cbmltcG9ydCB7IF9fem9uZV9zeW1ib2xfXywgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0LCBpc0ZhbHN5LCBpc1RydXRoeSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuaW1wb3J0IHsgR2VzdHVyZSwgR2VzdHVyZUNhcHR1cmVTdGF0ZSwgR2VzdHVyZUV2ZW50IH0gZnJvbSBcIi4vZ2VzdHVyZVwiXG5pbXBvcnQge1xuICAgIEdlc3R1cmVEZXRhaWwsXG4gICAgR2VzdHVyZUxpc3RlbmVyQ29uZmlnLFxuICAgIEdlc3R1cmVPcmlnaW4sXG4gICAgR2VzdHVyZVBoYXNlLFxuICAgIEdlc3R1cmVQb2ludGVyVHlwZSxcbiAgICBMaXN0ZW5lcnNcbn0gZnJvbSBcIi4vZ2VzdHVyZS1ldmVudFwiXG5cbmNvbnN0IEFERF9FVkVOVF9MSVNURU5FUiA9IF9fem9uZV9zeW1ib2xfXyhcImFkZEV2ZW50TGlzdGVuZXJcIilcbmNvbnN0IFJFTU9WRV9FVkVOVF9MSVNURU5FUiA9IF9fem9uZV9zeW1ib2xfXyhcInJlbW92ZUV2ZW50TGlzdGVuZXJcIilcbmNvbnN0IERJU1BBVENIX0VWRU5UID0gX196b25lX3N5bWJvbF9fKFwiZGlzcGF0Y2hFdmVudFwiKVxuXG50eXBlIEdlc3R1cmVzVG9FdmVudHNUeXBlPFQgZXh0ZW5kcyBBcnJheTxHZXN0dXJlPj4gPVxuICAgIFQgZXh0ZW5kcyBBcnJheTxpbmZlciBHPiA/IChHIGV4dGVuZHMgR2VzdHVyZSA/IEdlc3R1cmVFdmVudDxHPiA6IG5ldmVyKSA6IG5ldmVyXG5cbnR5cGUgR2VzdHVyZUV2ZW50RGlzY3JpbWluYXRvcjxUPiA9IFQgZXh0ZW5kcyB7IHR5cGU6IGluZmVyIE4gfSA/IHsgdHlwZTogTiB9ICYgVCA6IG5ldmVyXG5cbmV4cG9ydCB0eXBlIEdlc3R1cmVXYXRjaFJldHVybnM8VCBleHRlbmRzIEFycmF5PEdlc3R1cmU+PiA9IE9ic2VydmFibGU8XG4gICAgR2VzdHVyZUV2ZW50RGlzY3JpbWluYXRvcjxHZXN0dXJlc1RvRXZlbnRzVHlwZTxUPj5cbj5cblxuZXhwb3J0IHR5cGUgR2VzdHVyZUxpc3RlblJldHVybnM8VCBleHRlbmRzIEFycmF5PEdlc3R1cmU+PiA9IE9ic2VydmFibGU8R2VzdHVyZXNUb0V2ZW50c1R5cGU8VD4+XG5cbmludGVyZmFjZSBCZWdpblN0YXRlIHtcbiAgICBkZXRhaWw6IEdlc3R1cmVEZXRhaWxcbiAgICBnZXN0dXJlczogTWFwPEdlc3R1cmUsIEdlc3R1cmVDYXB0dXJlU3RhdGU+XG4gICAgaW5jbHVkZVNjcm9sbERpc3RhbmNlOiBib29sZWFuXG59XG5cbmludGVyZmFjZSBDYXB0dXJlU3RhdGUge1xuICAgIGV2ZW50czogR2VzdHVyZURldGFpbFtdXG4gICAgZ2VzdHVyZXM6IEJlZ2luU3RhdGVbXCJnZXN0dXJlc1wiXVxuICAgIGluY2x1ZGVTY3JvbGxEaXN0YW5jZTogQmVnaW5TdGF0ZVtcImluY2x1ZGVTY3JvbGxEaXN0YW5jZVwiXVxufVxuXG5pbnRlcmZhY2UgQ2FwdHVyZVNlbGVjdFN0YXRlIHtcbiAgICBldmVudHM6IEdlc3R1cmVEZXRhaWxbXVxuICAgIGdlc3R1cmU/OiBHZXN0dXJlXG4gICAgd2F0Y2hlcnM/OiBBcnJheTxXYXRjaGVyPlxufVxuXG5pbnRlcmZhY2UgV2F0Y2hlciB7XG4gICAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50XG4gICAgcmVhZG9ubHkgZ2VzdHVyZTogR2VzdHVyZVxufVxuXG5jb25zdCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IHRydWUgfVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgR2VzdHVyZVNlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSlcbiAgICByZWFkb25seSAjZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpXG5cbiAgICAjd2F0Y2hlcnM6IFdhdGNoZXJbXSA9IFtdXG4gICAgcmVhZG9ubHkgI3RyaWdnZXIgPSBuZXcgU3ViamVjdDxHZXN0dXJlRGV0YWlsPigpXG5cbiAgICByZWFkb25seSAjbW92aW5nOiBPYnNlcnZhYmxlPEdlc3R1cmVEZXRhaWw+ID0gbWVyZ2UoXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKExpc3RlbmVycylcbiAgICAgICAgICAgIC5maWx0ZXIobmFtZSA9PiBMaXN0ZW5lcnNbbmFtZV0ucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5Nb3ZpbmcpXG4gICAgICAgICAgICAubWFwKG5hbWUgPT4gdGhpcy4jbGlzdGVuKG5hbWUsIExpc3RlbmVyc1tuYW1lXSkpXG4gICAgKS5waXBlKHNoYXJlKCkpXG5cbiAgICByZWFkb25seSAjZW5kOiBPYnNlcnZhYmxlPEdlc3R1cmVEZXRhaWw+ID0gbWVyZ2UoXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKExpc3RlbmVycylcbiAgICAgICAgICAgIC5maWx0ZXIobmFtZSA9PiBMaXN0ZW5lcnNbbmFtZV0ucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5FbmQpXG4gICAgICAgICAgICAubWFwKG5hbWUgPT4gdGhpcy4jbGlzdGVuKG5hbWUsIExpc3RlbmVyc1tuYW1lXSkpXG4gICAgKS5waXBlKHNoYXJlKCkpXG5cbiAgICByZWFkb25seSAjZXZlbnRTdHJlYW0gPSBtZXJnZSh0aGlzLiNtb3ZpbmcsIHRoaXMuI2VuZCkucGlwZShzaGFyZSgpKVxuXG4gICAgcmVhZG9ubHkgI2JlZ2luID0gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxCZWdpblN0YXRlPikgPT4ge1xuICAgICAgICBsZXQgcG9pbnRlclR5cGU6IEdlc3R1cmVQb2ludGVyVHlwZSB8IHVuZGVmaW5lZFxuXG4gICAgICAgIHJldHVybiB0aGlzLiN0cmlnZ2VyXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRlclR5cGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUgPSBldmVudC5wb2ludGVyVHlwZVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnBvaW50ZXJUeXBlID09PSBwb2ludGVyVHlwZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNvbm5lY3QoZXZlbnRzID0+XG4gICAgICAgICAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgcG9pbnRlclR5cGUgb24gZW5kLCBhZnRlciAyMDBtcywgYmVjYXVzZSB0b3VjaGVuZCBpcyBtYXliZSBmb2xsb3dlZCBieSBhIG1vdXNlIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNlbmQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNlbmFibGVUb3VjaEFjdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAvLyBTZWxlY3QgYWN0aXZlIHdhdGNoZXJzXG4gICAgICAgICAgICAgICAgbWFwKChkZXRhaWw6IE11dGFibGU8R2VzdHVyZURldGFpbD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUG9pbnRlcnMoZGV0YWlsKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGRldGFpbC5vcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbC50YXJnZXQgPSBldmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5jbHVkZVNjcm9sbERpc3RhbmNlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VzdHVyZXMgPSB0aGlzLiN3YXRjaGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBnZXN0dXJlLCBlbCB9KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWwgPT09IGV2ZW50VGFyZ2V0IHx8IChcImNvbnRhaW5zXCIgaW4gZWwgJiYgZWwuY29udGFpbnMoZXZlbnRUYXJnZXQpKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZS5zaG91bGRDYXB0dXJlKGRldGFpbClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdlc3R1cmVzLCB7IGdlc3R1cmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdlc3R1cmVzLmhhcyhnZXN0dXJlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZVNjcm9sbERpc3RhbmNlID0gaW5jbHVkZVNjcm9sbERpc3RhbmNlIHx8IGdlc3R1cmUuaW5jbHVkZVNjcm9sbERpc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlcy5zZXQoZ2VzdHVyZSwgR2VzdHVyZUNhcHR1cmVTdGF0ZS5VbmNoZWNrZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlc3R1cmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTWFwKCkgYXMgQmVnaW5TdGF0ZVtcImdlc3R1cmVzXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGV0YWlsOiBkZXRhaWwsIGdlc3R1cmVzLCBpbmNsdWRlU2Nyb2xsRGlzdGFuY2UgfSBzYXRpc2ZpZXMgQmVnaW5TdGF0ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoeyBnZXN0dXJlcyB9KSA9PiBnZXN0dXJlcy5zaXplID4gMCksXG4gICAgICAgICAgICAgICAgdGFwKHRoaXMuI2Rpc2FibGVUb3VjaEFjdGlvbilcbiAgICAgICAgICAgICAgICAvLyBmaW5hbGl6ZSgoKSA9PiBjb25zb2xlLmxvZyhcIkZJTkFMSVpFIEJFR0lOXCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShkc3QpXG4gICAgfSlcblxuICAgIHJlYWRvbmx5ICNnZXN0dXJlID0gdGhpcy4jYmVnaW4ucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh7IGRldGFpbDogc3RhcnRFdmVudCwgZ2VzdHVyZXMsIGluY2x1ZGVTY3JvbGxEaXN0YW5jZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb2ludGVyVHlwZSA9IHN0YXJ0RXZlbnQucG9pbnRlclR5cGVcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXQgPSBzdGFydEV2ZW50Lm9yaWdpbi50aW1lU3RhbXBcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsID0gc3RhcnRFdmVudC5vcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICBjb25zdCBkaXNwYXRjaEV2ZW50ID0gdGFyZ2V0RWxbRElTUEFUQ0hfRVZFTlRdLmJpbmQodGFyZ2V0RWwpXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50U3RyZWFtSW5pdCA9IHRoaXMuI2V2ZW50U3RyZWFtLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHN0YXJ0RXZlbnQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudC5wb2ludGVyVHlwZSA9PT0gcG9pbnRlclR5cGUpXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50U3RyZWFtU291cmNlID0gIWluY2x1ZGVTY3JvbGxEaXN0YW5jZVxuICAgICAgICAgICAgICAgID8gZXZlbnRTdHJlYW1Jbml0XG4gICAgICAgICAgICAgICAgOiBjb21iaW5lTGF0ZXN0KFtldmVudFN0cmVhbUluaXQsIHRoaXMuI3Njcm9sbERpc3RhbmNlKHRhcmdldEVsKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFwKChbc3JjLCBkaXN0YW5jZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOyhzcmMgYXMgTXV0YWJsZTxHZXN0dXJlRGV0YWlsPikuc2Nyb2xsRGlzdGFuY2UgPSBkaXN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3JjXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3QgZXZlbnRTdHJlYW0gPSBldmVudFN0cmVhbVNvdXJjZS5waXBlKFxuICAgICAgICAgICAgICAgIHNjYW4oXG4gICAgICAgICAgICAgICAgICAgIChzdGF0ZSwgY3VycikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBvaW50ZXJzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZDogY3Vyci5vcmlnaW4udGltZVN0YW1wIC0gc3RhcnRBdCFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBzdGFydEV2ZW50XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlV2hpbGUoZXZlbnQgPT4gZXZlbnQucGhhc2UgIT09IEdlc3R1cmVQaGFzZS5FbmQsIHRydWUpLFxuICAgICAgICAgICAgICAgIC8vIGZpbmFsaXplKCgpID0+IGNvbnNvbGUubG9nKFwiRklOQUxJWkUgU1RSRUFNXCIpKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVTdGF0ZSA9IGV2ZW50U3RyZWFtLnBpcGUoXG4gICAgICAgICAgICAgICAgY29ubmVjdChzcmMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZTogQ2FwdHVyZVN0YXRlID0geyBldmVudHM6IFtdLCBnZXN0dXJlcywgaW5jbHVkZVNjcm9sbERpc3RhbmNlIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjLnBpcGUodGFwKGV2ZW50ID0+IHN0YXRlLmV2ZW50cy5wdXNoKGV2ZW50KSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShnZXN0dXJlcy5rZXlzKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZ2VzdHVyZSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlLmNhcHR1cmUoc3JjLnBpcGUoZmlsdGVyKGdlc3R1cmUuc2hvdWxkQ2FwdHVyZS5iaW5kKGdlc3R1cmUpKSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlV2hpbGUocmVzdWx0ID0+IHJlc3VsdCAhPT0gR2VzdHVyZUNhcHR1cmVTdGF0ZS5Ta2lwLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcChyZXN1bHQgPT4gZ2VzdHVyZXMuc2V0KGdlc3R1cmUsIHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkucGlwZShtYXAoKCkgPT4gc3RhdGUpKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBDQVBUVVJFXCIpKVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RHZXN0dXJlID0gY2FwdHVyZVN0YXRlLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydGl0aW9uczogeyBbayBpbiBHZXN0dXJlQ2FwdHVyZVN0YXRlXT86IEdlc3R1cmVbXSB9ID0ge31cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtnZXN0dXJlLCBjYXB0dXJlU3RhdGVdIG9mIHN0YXRlLmdlc3R1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aXRpb24gPSAocGFydGl0aW9uc1tjYXB0dXJlU3RhdGVdID8/PSBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbi5wdXNoKGdlc3R1cmUpXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLkluc3RhbnRdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZTogcGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLkluc3RhbnRdLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHN0YXRlLmV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBDYXB0dXJlU2VsZWN0U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIG5vdCBhbGwgZ2VzdHVyZXMgcmV0dXJuIGZyb20gR2VzdHVyZS5jYXB0dXJlXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0aXRpb25zW0dlc3R1cmVDYXB0dXJlU3RhdGUuVW5jaGVja2VkXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgaGFzIHBlbmRpbmcsIHRoZSBjYXB0dXJlIGlzIGNvbnRpbnVlZFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLlBlbmRpbmddICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBubyBwZW5kaWcgJiBoYXMgbWF5YmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRpdGlvbnNbR2VzdHVyZUNhcHR1cmVTdGF0ZS5NYXliZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlOiBwYXJ0aXRpb25zW0dlc3R1cmVDYXB0dXJlU3RhdGUuTWF5YmVdLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHN0YXRlLmV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBDYXB0dXJlU2VsZWN0U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIHBlbmRpbmcgJiBubyBtYXliZSAmIG5vIHRlcm1pbmF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyBzbywgbm90aGlnbiBtYXRjaGVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGV2ZW50czogc3RhdGUuZXZlbnRzIH0gYXMgQ2FwdHVyZVNlbGVjdFN0YXRlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKGlzRmFsc3ksIHRydWUpLFxuICAgICAgICAgICAgICAgIGZpbHRlcihpc1RydXRoeSksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKHYgPT4gdiEuZ2VzdHVyZSAhPSBudWxsLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAvLyB0YXAoKHY6IENhcHR1cmVTZWxlY3RTdGF0ZSkgPT4gdi5ldmVudHMuZm9yRWFjaCgoeyBvcmlnaW4gfSkgPT4gcHJldmVudERlZmF1bHQob3JpZ2luKSkpXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBTRUxFQ1RcIikpXG4gICAgICAgICAgICApIGFzIE9ic2VydmFibGU8UmVxdWlyZWQ8Q2FwdHVyZVNlbGVjdFN0YXRlPj5cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdEdlc3R1cmUucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgZXZlbnRzLCBnZXN0dXJlIH0pID0+XG4gICAgICAgICAgICAgICAgICAgIGdlc3R1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5oYW5kbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTdHJlYW0ucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKC4uLmV2ZW50cyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoeyBvcmlnaW4gfSkgPT4gcHJldmVudERlZmF1bHQob3JpZ2luKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihnZXN0dXJlLmlzUmVsZXZhbnRFdmVudC5iaW5kKGdlc3R1cmUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VXaGlsZSh2ID0+IHYucGhhc2UgIT09IEdlc3R1cmVQaGFzZS5FbmQsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcChkZXRhaWwgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudChnZXN0dXJlLnR5cGUsIHsgZGV0YWlsLCBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJHRVNUVVJFIEZJTkFMSVpFXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBSRVNVTFRcIikpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKHRoaXMuI2VuYWJsZVRvdWNoQWN0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmUoKVxuICAgIClcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCB0cmlnZ2VycyA9IG1lcmdlKFxuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoTGlzdGVuZXJzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIobmFtZSA9PiBMaXN0ZW5lcnNbbmFtZV0ucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5TdGFydClcbiAgICAgICAgICAgICAgICAubWFwKG5hbWUgPT4gdGhpcy4jbGlzdGVuKG5hbWUsIExpc3RlbmVyc1tuYW1lXSkpXG4gICAgICAgIClcbiAgICAgICAgdHJpZ2dlcnMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKHRoaXMuI3RyaWdnZXIpXG4gICAgfVxuXG4gICAgbGlzdGVuPFQgZXh0ZW5kcyBBcnJheTxHZXN0dXJlPj4oZWw6IEVsZW1lbnRJbnB1dCwgLi4uZ2VzdHVyZXM6IFQpOiBHZXN0dXJlTGlzdGVuUmV0dXJuczxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPEdlc3R1cmVEZXRhaWw+KSA9PlxuICAgICAgICAgICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvZXJjZUVsZW1lbnQoZWwpXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IGRzdC5uZXh0LmJpbmQoZHN0KVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ2VzdHVyZSBvZiBnZXN0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50W0FERF9FVkVOVF9MSVNURU5FUl0oZ2VzdHVyZS50eXBlIGFzIGFueSwgbmV4dClcbiAgICAgICAgICAgICAgICAgICAgZHN0LmFkZChlbGVtZW50W1JFTU9WRV9FVkVOVF9MSVNURU5FUl0uYmluZChlbGVtZW50LCBnZXN0dXJlLnR5cGUgYXMgYW55LCBuZXh0IGFzIGFueSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRzdC5hZGQodGhpcy4jd2F0Y2goZWxlbWVudCwgLi4uZ2VzdHVyZXMpLnN1YnNjcmliZSgpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSBhcyBhbnlcbiAgICB9XG5cbiAgICAjd2F0Y2g8VCBleHRlbmRzIEFycmF5PEdlc3R1cmU+PihlbDogRWxlbWVudElucHV0LCAuLi5nZXN0dXJlczogVCk6IEdlc3R1cmVXYXRjaFJldHVybnM8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxHZXN0dXJlRGV0YWlsPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KGVsKVxuICAgICAgICAgICAgICAgIGNvbnN0IHdhdGNoZXJzID0gZ2VzdHVyZXMubWFwKGdlc3R1cmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBnZXN0dXJlLCBlbDogZWxlbWVudCB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB0aGlzLiNhZGQod2F0Y2hlcnMpXG4gICAgICAgICAgICAgICAgZHN0LmFkZCh0aGlzLiNnZXN0dXJlLnN1YnNjcmliZShkc3QpKVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlbW92ZSh3YXRjaGVycylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApIGFzIGFueVxuICAgIH1cblxuICAgICNhZGQod2F0Y2hlcnM6IFdhdGNoZXJbXSkge1xuICAgICAgICB0aGlzLiN3YXRjaGVycyA9IHRoaXMuI3dhdGNoZXJzLmNvbmNhdCh3YXRjaGVycylcbiAgICB9XG5cbiAgICAjcmVtb3ZlKHdhdGNoZXJzOiBXYXRjaGVyW10pIHtcbiAgICAgICAgdGhpcy4jd2F0Y2hlcnMgPSB0aGlzLiN3YXRjaGVycy5maWx0ZXIodiA9PiAhd2F0Y2hlcnMuaW5jbHVkZXModikpXG4gICAgfVxuXG4gICAgI2xpc3RlbihuYW1lOiBzdHJpbmcsIGNvbmZpZzogR2VzdHVyZUxpc3RlbmVyQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHsgcGhhc2UsIHBvaW50ZXJUeXBlLCBvcHRpb25zIH0gPSBjb25maWdcblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxHZXN0dXJlRGV0YWlsPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG9yaWdpbjogR2VzdHVyZU9yaWdpbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRzdC5uZXh0KHsgb3JpZ2luLCBwaGFzZSwgcG9pbnRlclR5cGUgfSBhcyBHZXN0dXJlRGV0YWlsKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkRXZlbnRMaXN0ZW5lclwiLCBuYW1lKVxuICAgICAgICAgICAgICAgIHRoaXMuI2RvY3VtZW50W0FERF9FVkVOVF9MSVNURU5FUl0obmFtZSBhcyBrZXlvZiBEb2N1bWVudEV2ZW50TWFwLCBsaXN0ZW5lciBhcyBhbnksIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZW1vdmVFdmVudExpc3RlbmVyXCIsIG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2RvY3VtZW50W1JFTU9WRV9FVkVOVF9MSVNURU5FUl0obmFtZSBhcyBrZXlvZiBEb2N1bWVudEV2ZW50TWFwLCBsaXN0ZW5lciBhcyBhbnksIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNzY3JvbGxEaXN0YW5jZShlbGVtZW50OiBFbGVtZW50KTogT2JzZXJ2YWJsZTxQb3NpdGlvbj4ge1xuICAgICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCB4ID0gMFxuICAgICAgICAgICAgbGV0IHkgPSAwXG4gICAgICAgICAgICBsZXQgcCA9IGVsZW1lbnRcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICB4ICs9IHAuc2Nyb2xsTGVmdCA/PyAwXG4gICAgICAgICAgICAgICAgeSArPSBwLnNjcm9sbFRvcCA/PyAwXG4gICAgICAgICAgICAgICAgcCA9IHAucGFyZW50Tm9kZSBhcyBFbGVtZW50XG4gICAgICAgICAgICB9IHdoaWxlIChwICE9IG51bGwpXG4gICAgICAgICAgICByZXR1cm4geyB4LCB5IH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPFBvc2l0aW9uPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluaXRpYWwgPSBzY3JvbGxQb3NpdGlvbigpXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzY3JvbGxQb3NpdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIGRzdC5uZXh0KHsgeDogY3VycmVudC54IC0gaW5pdGlhbC54LCB5OiBjdXJyZW50LnkgLSBpbml0aWFsLnkgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZHN0Lm5leHQoeyB4OiAwLCB5OiAwIH0pXG4gICAgICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRbQUREX0VWRU5UX0xJU1RFTkVSXShcInNjcm9sbFwiLCBsaXN0ZW5lciwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRbUkVNT1ZFX0VWRU5UX0xJU1RFTkVSXShcInNjcm9sbFwiLCBsaXN0ZW5lciwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNsYXN0VG91Y2hBY3Rpb24/OiBzdHJpbmdcbiAgICAjZGlzYWJsZVRvdWNoQWN0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy4jbGFzdFRvdWNoQWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuI2xhc3RUb3VjaEFjdGlvbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuI2RvY3VtZW50LmJvZHkpLnRvdWNoQWN0aW9uXG4gICAgICAgICAgICB0aGlzLiNkb2N1bWVudC5ib2R5LnN0eWxlLnRvdWNoQWN0aW9uID0gXCJub25lXCJcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNlbmFibGVUb3VjaEFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuI2xhc3RUb3VjaEFjdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNkb2N1bWVudC5ib2R5LnN0eWxlLnRvdWNoQWN0aW9uID0gdGhpcy4jbGFzdFRvdWNoQWN0aW9uXG4gICAgICAgICAgICB0aGlzLiNsYXN0VG91Y2hBY3Rpb24gPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ydEJ5UHJpcG9yaXR5KGE6IEdlc3R1cmUsIGI6IEdlc3R1cmUpIHtcbiAgICByZXR1cm4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHlcbn1cblxuZnVuY3Rpb24gcG9pbnRlcnNGcm9tRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogUG9zaXRpb25bXSB7XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZXZlbnQudG91Y2hlcykubWFwKHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogdC5jbGllbnRYLCB5OiB0LmNsaWVudFkgfVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9pbnRlcnMoc3RhdGU6IE11dGFibGU8R2VzdHVyZURldGFpbD4pOiBHZXN0dXJlRGV0YWlsIHtcbiAgICBpZiAoc3RhdGUucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5TdGFydCkge1xuICAgICAgICBzdGF0ZS5wb2ludGVycyA9IHBvaW50ZXJzRnJvbUV2ZW50KHN0YXRlLm9yaWdpbikubWFwKHYgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHYsIGN1cnJlbnQ6IHYsIGRpc3RhbmNlOiB7IHg6IDAsIHk6IDAgfSwgZGlyZWN0aW9uOiB7IHg6IDAsIHk6IDAgfSB9XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb2ludGVycykge1xuICAgICAgICBjb25zdCBwb2ludGVycyA9IHBvaW50ZXJzRnJvbUV2ZW50KHN0YXRlLm9yaWdpbilcbiAgICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5wb2ludGVycyA9IHN0YXRlLnBvaW50ZXJzLm1hcCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBvaW50ZXJzW2ldXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB2LnN0YXJ0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHAsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IHsgeDogcC54IC0gdi5zdGFydC54LCB5OiBwLnkgLSB2LnN0YXJ0LnkgfSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IHsgeDogZGlyZWN0aW9uKHYuc3RhcnQueCwgcC54KSwgeTogZGlyZWN0aW9uKHYuc3RhcnQueSwgcC55KSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlXG59XG5cbmZ1bmN0aW9uIGRpcmVjdGlvbihwcmV2OiBudW1iZXIsIGN1cnI6IG51bWJlcik6IC0xIHwgMCB8IDEge1xuICAgIHJldHVybiBjdXJyID4gcHJldiA/IDEgOiBjdXJyIDwgcHJldiA/IC0xIDogMFxufVxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudDogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgUFJFVkVOVCAke2V2ZW50LnR5cGV9YClcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cbn1cbiJdfQ==
|