@workflow/web-shared 5.0.0-beta.43 → 5.0.0-beta.44
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/README.md +4 -4
- package/dist/components/event-list-view.d.ts +12 -0
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +41 -20
- package/dist/components/sidebar/attribute-panel.d.ts +6 -2
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +10 -8
- package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
- package/dist/components/sidebar/copyable-data-block.js +2 -2
- package/dist/components/sidebar/entity-detail-panel.d.ts +6 -2
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +13 -5
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +12 -5
- package/dist/components/sidebar/resolve-hook-modal.js +1 -1
- package/dist/components/sidebar/sidebar-data-context.d.ts +2 -0
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-data-context.js +1 -1
- package/dist/components/stream-viewer.js +2 -2
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts +4 -4
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/detail-panel-width.js +5 -5
- package/dist/components/trace-viewer/components/detail-panel.d.ts +1 -1
- package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/detail-panel.js +3 -3
- package/dist/components/trace-viewer/components/draggable-border.d.ts +1 -1
- package/dist/components/trace-viewer/components/draggable-border.js +2 -2
- package/dist/components/trace-viewer/components/minimap.js +4 -4
- package/dist/components/trace-viewer/components/span-markers.d.ts +8 -9
- package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/span-markers.js +13 -10
- package/dist/components/trace-viewer/components/timeline.d.ts +1 -1
- package/dist/components/trace-viewer/components/timeline.js +4 -4
- package/dist/components/trace-viewer/components/use-row-window.d.ts +1 -1
- package/dist/components/trace-viewer/components/use-row-window.js +2 -2
- package/dist/components/trace-viewer/trace-viewer.js +3 -3
- package/dist/components/trace-viewer/utils.d.ts +3 -1
- package/dist/components/trace-viewer/utils.d.ts.map +1 -1
- package/dist/components/trace-viewer/utils.js +6 -5
- package/dist/components/ui/data-inspector.d.ts +7 -1
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +10 -5
- package/dist/components/ui/decrypt-button.d.ts +5 -1
- package/dist/components/ui/decrypt-button.d.ts.map +1 -1
- package/dist/components/ui/decrypt-button.js +4 -4
- package/dist/components/ui/duplicate-event-tooltip.d.ts +15 -5
- package/dist/components/ui/duplicate-event-tooltip.d.ts.map +1 -1
- package/dist/components/ui/duplicate-event-tooltip.js +18 -9
- package/dist/components/ui/error-stack-block.js +4 -4
- package/dist/components/ui/timestamp-tooltip.d.ts +5 -3
- package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
- package/dist/components/ui/timestamp-tooltip.js +9 -9
- package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/event-colors.js +11 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +5 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/lib/duplicate-events.d.ts +1 -1
- package/dist/lib/duplicate-events.js +2 -2
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +8 -13
- package/dist/lib/sealed-events.d.ts +28 -0
- package/dist/lib/sealed-events.d.ts.map +1 -0
- package/dist/lib/sealed-events.js +30 -0
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +8 -5
- package/dist/lib/utils.d.ts +1 -1
- package/dist/lib/utils.js +2 -2
- package/dist/lib/zstd-browser-decoder.js +2 -2
- package/package.json +5 -5
- package/src/components/event-list-view.tsx +57 -22
- package/src/components/sidebar/attribute-panel.tsx +15 -7
- package/src/components/sidebar/copyable-data-block.tsx +8 -1
- package/src/components/sidebar/entity-detail-panel.tsx +18 -2
- package/src/components/sidebar/events-list.tsx +16 -6
- package/src/components/sidebar/resolve-hook-modal.tsx +2 -2
- package/src/components/sidebar/sidebar-data-context.tsx +2 -0
- package/src/components/stream-viewer.tsx +1 -1
- package/src/components/trace-viewer/components/detail-panel-width.ts +4 -4
- package/src/components/trace-viewer/components/detail-panel.tsx +3 -1
- package/src/components/trace-viewer/components/draggable-border.tsx +1 -1
- package/src/components/trace-viewer/components/minimap.tsx +3 -3
- package/src/components/trace-viewer/components/span-markers.tsx +18 -13
- package/src/components/trace-viewer/components/timeline.tsx +4 -4
- package/src/components/trace-viewer/components/use-row-window.ts +1 -1
- package/src/components/trace-viewer/trace-viewer.tsx +2 -2
- package/src/components/trace-viewer/utils.test.ts +5 -3
- package/src/components/trace-viewer/utils.ts +12 -8
- package/src/components/ui/data-inspector.tsx +19 -3
- package/src/components/ui/decrypt-button.tsx +9 -2
- package/src/components/ui/duplicate-event-tooltip.tsx +32 -10
- package/src/components/ui/error-stack-block.tsx +3 -3
- package/src/components/ui/timestamp-tooltip.tsx +16 -6
- package/src/components/workflow-traces/event-colors.ts +11 -0
- package/src/components/workflow-traces/trace-span-construction.test.ts +27 -1
- package/src/components/workflow-traces/trace-span-construction.ts +5 -3
- package/src/index.ts +4 -0
- package/src/lib/duplicate-events.ts +1 -1
- package/src/lib/hydration.ts +7 -12
- package/src/lib/sealed-events.ts +32 -0
- package/src/lib/trace-builder.test.ts +29 -1
- package/src/lib/trace-builder.ts +10 -5
- package/src/lib/utils.ts +1 -1
- package/src/lib/zstd-browser-decoder.ts +1 -1
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
* Width model for the span detail panel: the stored value is the user's
|
|
3
3
|
* preferred width (absolute px, persisted to localStorage on explicit
|
|
4
4
|
* interaction only), while the container-relative maximum is applied at
|
|
5
|
-
* render time
|
|
5
|
+
* render time, so a width preferred on a wide screen survives a narrower
|
|
6
6
|
* session and restores when the viewer grows again.
|
|
7
7
|
*/
|
|
8
|
-
/** Floor for the detail panel
|
|
8
|
+
/** Floor for the detail panel; matches the previous `clamp(280px, …)` floor. */
|
|
9
9
|
export declare const PANEL_MIN_WIDTH = 280;
|
|
10
10
|
/**
|
|
11
11
|
* Absolute ceiling enforced at the storage layer so a corrupt or stale stored
|
|
12
12
|
* value can never wedge the layout open.
|
|
13
13
|
*/
|
|
14
14
|
export declare const PANEL_HARD_MAX_WIDTH = 1300;
|
|
15
|
-
/** Default width
|
|
15
|
+
/** Default width; matches the previous fixed 360px column. */
|
|
16
16
|
export declare const PANEL_DEFAULT_WIDTH = 360;
|
|
17
17
|
/**
|
|
18
18
|
* Width the main (event list + timeline) area keeps while the panel is
|
|
19
19
|
* resized or the container shrinks. Below `PANEL_MIN_WIDTH + MAIN_MIN_WIDTH`
|
|
20
|
-
* of container the panel gives way first, compressing below its own floor
|
|
20
|
+
* of container the panel gives way first, compressing below its own floor:
|
|
21
21
|
* the list and timeline stay usable at the panel's expense.
|
|
22
22
|
*/
|
|
23
23
|
export declare const MAIN_MIN_WIDTH = 400;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detail-panel-width.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/detail-panel-width.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,
|
|
1
|
+
{"version":3,"file":"detail-panel-width.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/detail-panel-width.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gFAAgF;AAChF,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAM3E,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAUzD"}
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
* Width model for the span detail panel: the stored value is the user's
|
|
3
3
|
* preferred width (absolute px, persisted to localStorage on explicit
|
|
4
4
|
* interaction only), while the container-relative maximum is applied at
|
|
5
|
-
* render time
|
|
5
|
+
* render time, so a width preferred on a wide screen survives a narrower
|
|
6
6
|
* session and restores when the viewer grows again.
|
|
7
7
|
*/
|
|
8
|
-
/** Floor for the detail panel
|
|
8
|
+
/** Floor for the detail panel; matches the previous `clamp(280px, …)` floor. */
|
|
9
9
|
export const PANEL_MIN_WIDTH = 280;
|
|
10
10
|
/**
|
|
11
11
|
* Absolute ceiling enforced at the storage layer so a corrupt or stale stored
|
|
12
12
|
* value can never wedge the layout open.
|
|
13
13
|
*/
|
|
14
14
|
export const PANEL_HARD_MAX_WIDTH = 1300;
|
|
15
|
-
/** Default width
|
|
15
|
+
/** Default width; matches the previous fixed 360px column. */
|
|
16
16
|
export const PANEL_DEFAULT_WIDTH = 360;
|
|
17
17
|
/**
|
|
18
18
|
* Width the main (event list + timeline) area keeps while the panel is
|
|
19
19
|
* resized or the container shrinks. Below `PANEL_MIN_WIDTH + MAIN_MIN_WIDTH`
|
|
20
|
-
* of container the panel gives way first, compressing below its own floor
|
|
20
|
+
* of container the panel gives way first, compressing below its own floor:
|
|
21
21
|
* the list and timeline stay usable at the panel's expense.
|
|
22
22
|
*/
|
|
23
23
|
export const MAIN_MIN_WIDTH = 400;
|
|
@@ -64,4 +64,4 @@ export function writeStoredPanelWidth(width) {
|
|
|
64
64
|
// Best-effort (private mode, quota).
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhbmVsLXdpZHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvZGV0YWlsLXBhbmVsLXdpZHRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDO0FBRW5DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUV6Qyw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBRXZDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxtQ0FBbUMsQ0FBQztBQUUzRSxTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDcEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsY0FBc0I7SUFDekQsSUFBSSxjQUFjLElBQUksQ0FBQztRQUFFLE9BQU8sb0JBQW9CLENBQUM7SUFDckQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFDNUMsb0JBQW9CLENBQ3JCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYSxFQUFFLGNBQXNCO0lBQ25FLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQzlELElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxtQkFBbUIsQ0FBQztRQUN4RCw0RUFBNEU7UUFDNUUsbURBQW1EO1FBQ25ELE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFhO0lBQ2pELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztRQUFFLE9BQU87SUFDMUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3pCLHVCQUF1QixFQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHFDQUFxQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lkdGggbW9kZWwgZm9yIHRoZSBzcGFuIGRldGFpbCBwYW5lbDogdGhlIHN0b3JlZCB2YWx1ZSBpcyB0aGUgdXNlcidzXG4gKiBwcmVmZXJyZWQgd2lkdGggKGFic29sdXRlIHB4LCBwZXJzaXN0ZWQgdG8gbG9jYWxTdG9yYWdlIG9uIGV4cGxpY2l0XG4gKiBpbnRlcmFjdGlvbiBvbmx5KSwgd2hpbGUgdGhlIGNvbnRhaW5lci1yZWxhdGl2ZSBtYXhpbXVtIGlzIGFwcGxpZWQgYXRcbiAqIHJlbmRlciB0aW1lLCBzbyBhIHdpZHRoIHByZWZlcnJlZCBvbiBhIHdpZGUgc2NyZWVuIHN1cnZpdmVzIGEgbmFycm93ZXJcbiAqIHNlc3Npb24gYW5kIHJlc3RvcmVzIHdoZW4gdGhlIHZpZXdlciBncm93cyBhZ2Fpbi5cbiAqL1xuXG4vKiogRmxvb3IgZm9yIHRoZSBkZXRhaWwgcGFuZWw7IG1hdGNoZXMgdGhlIHByZXZpb3VzIGBjbGFtcCgyODBweCwg4oCmKWAgZmxvb3IuICovXG5leHBvcnQgY29uc3QgUEFORUxfTUlOX1dJRFRIID0gMjgwO1xuXG4vKipcbiAqIEFic29sdXRlIGNlaWxpbmcgZW5mb3JjZWQgYXQgdGhlIHN0b3JhZ2UgbGF5ZXIgc28gYSBjb3JydXB0IG9yIHN0YWxlIHN0b3JlZFxuICogdmFsdWUgY2FuIG5ldmVyIHdlZGdlIHRoZSBsYXlvdXQgb3Blbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFBBTkVMX0hBUkRfTUFYX1dJRFRIID0gMTMwMDtcblxuLyoqIERlZmF1bHQgd2lkdGg7IG1hdGNoZXMgdGhlIHByZXZpb3VzIGZpeGVkIDM2MHB4IGNvbHVtbi4gKi9cbmV4cG9ydCBjb25zdCBQQU5FTF9ERUZBVUxUX1dJRFRIID0gMzYwO1xuXG4vKipcbiAqIFdpZHRoIHRoZSBtYWluIChldmVudCBsaXN0ICsgdGltZWxpbmUpIGFyZWEga2VlcHMgd2hpbGUgdGhlIHBhbmVsIGlzXG4gKiByZXNpemVkIG9yIHRoZSBjb250YWluZXIgc2hyaW5rcy4gQmVsb3cgYFBBTkVMX01JTl9XSURUSCArIE1BSU5fTUlOX1dJRFRIYFxuICogb2YgY29udGFpbmVyIHRoZSBwYW5lbCBnaXZlcyB3YXkgZmlyc3QsIGNvbXByZXNzaW5nIGJlbG93IGl0cyBvd24gZmxvb3I6XG4gKiB0aGUgbGlzdCBhbmQgdGltZWxpbmUgc3RheSB1c2FibGUgYXQgdGhlIHBhbmVsJ3MgZXhwZW5zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BSU5fTUlOX1dJRFRIID0gNDAwO1xuXG5leHBvcnQgY29uc3QgUEFORUxfV0lEVEhfU1RPUkFHRV9LRVkgPSAnd29ya2Zsb3ctdHJhY2UtZGV0YWlsLXBhbmVsLXdpZHRoJztcblxuZnVuY3Rpb24gY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBtaW4pLCBtYXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU1heFBhbmVsV2lkdGgoYXZhaWxhYmxlV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChhdmFpbGFibGVXaWR0aCA8PSAwKSByZXR1cm4gUEFORUxfSEFSRF9NQVhfV0lEVEg7XG4gIHJldHVybiBNYXRoLm1pbihcbiAgICBNYXRoLm1heChhdmFpbGFibGVXaWR0aCAtIE1BSU5fTUlOX1dJRFRILCAwKSxcbiAgICBQQU5FTF9IQVJEX01BWF9XSURUSFxuICApO1xufVxuXG4vKipcbiAqIE5vdGU6IHdoZW4gdGhlIGNvbnRhaW5lciBpcyB0b28gc21hbGwgdG8gaG9ub3IgYm90aCBmbG9vcnNcbiAqIChgYXZhaWxhYmxlV2lkdGggPCBQQU5FTF9NSU5fV0lEVEggKyBNQUlOX01JTl9XSURUSGApLCB0aGUgbWF4IHdpbnMgYW5kIHRoZVxuICogcGFuZWwgY29tcHJlc3NlcyBiZWxvdyBgUEFORUxfTUlOX1dJRFRIYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wUGFuZWxXaWR0aCh3aWR0aDogbnVtYmVyLCBhdmFpbGFibGVXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGNsYW1wKHdpZHRoLCBQQU5FTF9NSU5fV0lEVEgsIGNvbXB1dGVNYXhQYW5lbFdpZHRoKGF2YWlsYWJsZVdpZHRoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3RvcmVkUGFuZWxXaWR0aCgpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBQQU5FTF9ERUZBVUxUX1dJRFRIO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShQQU5FTF9XSURUSF9TVE9SQUdFX0tFWSk7XG4gICAgY29uc3QgdmFsdWUgPSByYXcgPyBOdW1iZXIocmF3KSA6IE51bWJlci5OYU47XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gUEFORUxfREVGQVVMVF9XSURUSDtcbiAgICAvLyBPbmx5IGVuZm9yY2UgYWJzb2x1dGUgYm91bmRzIGF0IHRoZSBzdG9yYWdlIGxheWVyOyB0aGUgY29udGFpbmVyLXJlbGF0aXZlXG4gICAgLy8gbWF4IGlzIGFwcGxpZWQgYXQgcmVuZGVyIHRpbWUgKHNlZSBtb2R1bGUgZG9jcykuXG4gICAgcmV0dXJuIGNsYW1wKHZhbHVlLCBQQU5FTF9NSU5fV0lEVEgsIFBBTkVMX0hBUkRfTUFYX1dJRFRIKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFBBTkVMX0RFRkFVTFRfV0lEVEg7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3RvcmVkUGFuZWxXaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICB0cnkge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIFBBTkVMX1dJRFRIX1NUT1JBR0VfS0VZLFxuICAgICAgU3RyaW5nKE1hdGgucm91bmQod2lkdGgpKVxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEJlc3QtZWZmb3J0IChwcml2YXRlIG1vZGUsIHF1b3RhKS5cbiAgfVxufVxuIl19
|
|
@@ -3,7 +3,7 @@ import { type ReactNode, type RefObject } from 'react';
|
|
|
3
3
|
* The span detail aside: content, prev/next/close header, J/K navigation, and
|
|
4
4
|
* the resizable left border with its width model (see detail-panel-width.ts).
|
|
5
5
|
*
|
|
6
|
-
* Always mounted
|
|
6
|
+
* Always mounted (it renders null without a selection) so the panel width
|
|
7
7
|
* survives closing and reopening within a session.
|
|
8
8
|
*/
|
|
9
9
|
export declare function TraceDetailPanel({ containerRef, onNavigateToSpan, onClose, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detail-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/detail-panel.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAkDf;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,gBAAgB,EAChB,OAAO,GACR,EAAE;IACD,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/C,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"detail-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/detail-panel.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAkDf;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,gBAAgB,EAChB,OAAO,GACR,EAAE;IACD,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/C,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,GAAG,SAAS,CAsMZ"}
|
|
@@ -37,7 +37,7 @@ function useSelectedSpanInfo() {
|
|
|
37
37
|
* The span detail aside: content, prev/next/close header, J/K navigation, and
|
|
38
38
|
* the resizable left border with its width model (see detail-panel-width.ts).
|
|
39
39
|
*
|
|
40
|
-
* Always mounted
|
|
40
|
+
* Always mounted (it renders null without a selection) so the panel width
|
|
41
41
|
* survives closing and reopening within a session.
|
|
42
42
|
*/
|
|
43
43
|
export function TraceDetailPanel({ containerRef, onNavigateToSpan, onClose, }) {
|
|
@@ -118,6 +118,6 @@ export function TraceDetailPanel({ containerRef, onNavigateToSpan, onClose, }) {
|
|
|
118
118
|
}, [selectedSpan?.data, selectedSpan?.resource]);
|
|
119
119
|
if (!activeSpan)
|
|
120
120
|
return null;
|
|
121
|
-
return (_jsxs("aside", { ref: asideRef, id: DETAIL_PANEL_ID, className: "relative flex flex-col h-full max-h-full shrink-0 bg-background-100 border-l border-gray-alpha-400", style: { width: panelWidth }, children: [_jsx(DraggableBorder, { element: asideRef, position: "left", onWidthChange: handleResize, onReset: () => handleResize(PANEL_DEFAULT_WIDTH), "aria-label": "Resize span details panel", "aria-controls": DETAIL_PANEL_ID, "aria-valuemin": PANEL_MIN_WIDTH, "aria-valuemax": panelMaxWidth, "aria-valuenow": Math.min(Math.max(Math.round(panelWidth), PANEL_MIN_WIDTH), panelMaxWidth) }), _jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 py-[7.5px]", children: [_jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), _jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrev, disabled: !prevSpanId, children: _jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? (_jsxs(TooltipContent, { children: ["Navigate up", _jsx(Kbd, { children: "K" })] })) : null] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNext, disabled: !nextSpanId, children: _jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? (_jsxs(TooltipContent, { children: ["Navigate down", _jsx(Kbd, { children: "J" })] })) : null] }), _jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), _jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: onClose, children: _jsx(X, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { children: _jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, fetchSpanDetail: sidebar.fetchSpanDetail, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, selectedSpan: selectedSpan, showSeparateEventOccurrenceTimestamps: sidebar.showSeparateEventOccurrenceTimestamps, getModuleSourceUrl: sidebar.getModuleSourceUrl }) }) })] }));
|
|
121
|
+
return (_jsxs("aside", { ref: asideRef, id: DETAIL_PANEL_ID, className: "relative flex flex-col h-full max-h-full shrink-0 bg-background-100 border-l border-gray-alpha-400", style: { width: panelWidth }, children: [_jsx(DraggableBorder, { element: asideRef, position: "left", onWidthChange: handleResize, onReset: () => handleResize(PANEL_DEFAULT_WIDTH), "aria-label": "Resize span details panel", "aria-controls": DETAIL_PANEL_ID, "aria-valuemin": PANEL_MIN_WIDTH, "aria-valuemax": panelMaxWidth, "aria-valuenow": Math.min(Math.max(Math.round(panelWidth), PANEL_MIN_WIDTH), panelMaxWidth) }), _jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 py-[7.5px]", children: [_jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), _jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrev, disabled: !prevSpanId, children: _jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? (_jsxs(TooltipContent, { children: ["Navigate up", _jsx(Kbd, { children: "K" })] })) : null] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNext, disabled: !nextSpanId, children: _jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? (_jsxs(TooltipContent, { children: ["Navigate down", _jsx(Kbd, { children: "J" })] })) : null] }), _jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), _jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: onClose, children: _jsx(X, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { children: _jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, fetchSpanDetail: sidebar.fetchSpanDetail, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, isDecryptDisabled: sidebar.isDecryptDisabled, decryptDisabledReason: sidebar.decryptDisabledReason, selectedSpan: selectedSpan, showSeparateEventOccurrenceTimestamps: sidebar.showSeparateEventOccurrenceTimestamps, getModuleSourceUrl: sidebar.getModuleSourceUrl }) }) })] }));
|
|
122
122
|
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvZGV0YWlsLXBhbmVsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsaUJBQWlCLEdBRWxCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIscUJBQXFCLEdBQ3RCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxl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QUNuQyxPQUFPLENBQUMscUNBQXFDLEVBRS9DLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsR0FDOUMsR0FDWSxHQUNaLElBQ0EsQ0FDVCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgcGFyc2VTdGVwTmFtZSwgcGFyc2VXb3JrZmxvd05hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5pbXBvcnQgeyBDaGV2cm9uRG93biwgQ2hldnJvblVwLCBYIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB0eXBlIFJlZk9iamVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmlsdGVyU3BhblJhd0V2ZW50cyB9IGZyb20gJy4uLy4uLy4uL2xpYi90cmFjZS1idWlsZGVyJztcbmltcG9ydCB7IEVycm9yQm91bmRhcnkgfSBmcm9tICcuLi8uLi9lcnJvci1ib3VuZGFyeSc7XG5pbXBvcnQge1xuICBFbnRpdHlEZXRhaWxQYW5lbCxcbiAgdHlwZSBTZWxlY3RlZFNwYW5JbmZvLFxufSBmcm9tICcuLi8uLi9zaWRlYmFyL2VudGl0eS1kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IHsgdXNlU2lkZWJhckRhdGEgfSBmcm9tICcuLi8uLi9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0JztcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICcuLi8uLi91aS9pY29uLWJ1dHRvbic7XG5pbXBvcnQgeyBLYmQgfSBmcm9tICcuLi8uLi91aS9rYmQnO1xuaW1wb3J0IHsgVG9vbHRpcCwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vdWkvdG9vbHRpcCc7XG5pbXBvcnQgeyB1c2VBY3RpdmVTcGFuIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQge1xuICBjbGFtcFBhbmVsV2lkdGgsXG4gIGNvbXB1dGVNYXhQYW5lbFdpZHRoLFxuICBQQU5FTF9ERUZBVUxUX1dJRFRILFxuICBQQU5FTF9NSU5fV0lEVEgsXG4gIHJlYWRTdG9yZWRQYW5lbFdpZHRoLFxuICB3cml0ZVN0b3JlZFBhbmVsV2lkdGgsXG59IGZyb20gJy4vZGV0YWlsLXBhbmVsLXdpZHRoJztcbmltcG9ydCB7IERyYWdnYWJsZUJvcmRlciB9IGZyb20gJy4vZHJhZ2dhYmxlLWJvcmRlcic7XG5pbXBvcnQgeyB1c2VFbGVtZW50V2lkdGggfSBmcm9tICcuL3VzZS1lbGVtZW50LXdpZHRoJztcblxuY29uc3QgREVUQUlMX1BBTkVMX0lEID0gJ3RyYWNlLWRldGFpbC1wYW5lbCc7XG5cbi8qKiBCcmlkZ2UgQWN0aXZlU3BhbkNvbnRleHQgKyBTaWRlYmFyRGF0YUNvbnRleHQg4oaSIFNlbGVjdGVkU3BhbkluZm8uICovXG5mdW5jdGlvbiB1c2VTZWxlY3RlZFNwYW5JbmZvKCk6IFNlbGVjdGVkU3BhbkluZm8gfCBudWxsIHtcbiAgY29uc3QgeyBhY3RpdmVTcGFuIH0gPSB1c2VBY3RpdmVTcGFuKCk7XG4gIGNvbnN0IHNpZGViYXIgPSB1c2VTaWRlYmFyRGF0YSgpO1xuXG4gIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFjdGl2ZVNwYW4pIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBhY3RpdmVTcGFuLmF0dHJpYnV0ZXM/LnJlc291cmNlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCByYXdFdmVudHMgPSBmaWx0ZXJTcGFuUmF3RXZlbnRzKFxuICAgICAgc2lkZWJhci5ldmVudHMsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGFjdGl2ZVNwYW4uc3BhbklkXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBhY3RpdmVTcGFuLmF0dHJpYnV0ZXM/LmRhdGEsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIHNwYW5JZDogYWN0aXZlU3Bhbi5zcGFuSWQsXG4gICAgICByYXdFdmVudHMsXG4gICAgICBkdXBsaWNhdGVFdmVudElkczogc2lkZWJhci5kdXBsaWNhdGVFdmVudElkcyxcbiAgICB9O1xuICB9LCBbYWN0aXZlU3Bhbiwgc2lkZWJhcl0pO1xufVxuXG4vKipcbiAqIFRoZSBzcGFuIGRldGFpbCBhc2lkZTogY29udGVudCwgcHJldi9uZXh0L2Nsb3NlIGhlYWRlciwgSi9LIG5hdmlnYXRpb24sIGFuZFxuICogdGhlIHJlc2l6YWJsZSBsZWZ0IGJvcmRlciB3aXRoIGl0cyB3aWR0aCBtb2RlbCAoc2VlIGRldGFpbC1wYW5lbC13aWR0aC50cykuXG4gKlxuICogQWx3YXlzIG1vdW50ZWQg4oCUIGl0IHJlbmRlcnMgbnVsbCB3aXRob3V0IGEgc2VsZWN0aW9uIOKAlCBzbyB0aGUgcGFuZWwgd2lkdGhcbiAqIHN1cnZpdmVzIGNsb3NpbmcgYW5kIHJlb3BlbmluZyB3aXRoaW4gYSBzZXNzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gVHJhY2VEZXRhaWxQYW5lbCh7XG4gIGNvbnRhaW5lclJlZixcbiAgb25OYXZpZ2F0ZVRvU3BhbixcbiAgb25DbG9zZSxcbn06IHtcbiAgY29udGFpbmVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPjtcbiAgb25OYXZpZ2F0ZVRvU3BhbjogKHNwYW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgYWN0aXZlU3BhbiwgYWN0aXZlU3BhbklkLCBzcGFucyB9ID0gdXNlQWN0aXZlU3BhbigpO1xuICBjb25zdCBzaWRlYmFyID0gdXNlU2lkZWJhckRhdGEoKTtcbiAgY29uc3Qgc2VsZWN0ZWRTcGFuID0gdXNlU2VsZWN0ZWRTcGFuSW5mbygpO1xuICBjb25zdCBpc09wZW4gPSBCb29sZWFuKGFjdGl2ZVNwYW4pO1xuXG4gIGNvbnN0IFtzdG9yZWRXaWR0aCwgc2V0U3RvcmVkV2lkdGhdID0gdXNlU3RhdGU8bnVtYmVyPigoKSA9PlxuICAgIHJlYWRTdG9yZWRQYW5lbFdpZHRoKClcbiAgKTtcbiAgY29uc3QgY29udGFpbmVyV2lkdGggPSB1c2VFbGVtZW50V2lkdGgoY29udGFpbmVyUmVmLCBpc09wZW4pO1xuICBjb25zdCBhc2lkZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGNsYW1wZWQgPSBjbGFtcFBhbmVsV2lkdGgobmV4dCwgY29udGFpbmVyV2lkdGgpO1xuICAgICAgc2V0U3RvcmVkV2lkdGgoY2xhbXBlZCk7XG4gICAgICB3cml0ZVN0b3JlZFBhbmVsV2lkdGgoY2xhbXBlZCk7XG4gICAgfSxcbiAgICBbY29udGFpbmVyV2lkdGhdXG4gICk7XG5cbiAgY29uc3QgcGFuZWxXaWR0aCA9IGNsYW1wUGFuZWxXaWR0aChzdG9yZWRXaWR0aCwgY29udGFpbmVyV2lkdGgpO1xuICBjb25zdCBwYW5lbE1heFdpZHRoID0gTWF0aC5tYXgoXG4gICAgUEFORUxfTUlOX1dJRFRILFxuICAgIGNvbXB1dGVNYXhQYW5lbFdpZHRoKGNvbnRhaW5lcldpZHRoKVxuICApO1xuXG4gIGNvbnN0IHsgcHJldlNwYW5JZCwgbmV4dFNwYW5JZCB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmVTcGFuSWQpIHJldHVybiB7IHByZXZTcGFuSWQ6IG51bGwsIG5leHRTcGFuSWQ6IG51bGwgfTtcbiAgICBjb25zdCBpID0gc3BhbnMuZmluZEluZGV4KChzKSA9PiBzLnNwYW5JZCA9PT0gYWN0aXZlU3BhbklkKTtcbiAgICBpZiAoaSA9PT0gLTEpIHJldHVybiB7IHByZXZTcGFuSWQ6IG51bGwsIG5leHRTcGFuSWQ6IG51bGwgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJldlNwYW5JZDogc3BhbnNbaSAtIDFdPy5zcGFuSWQgPz8gbnVsbCxcbiAgICAgIG5leHRTcGFuSWQ6IHNwYW5zW2kgKyAxXT8uc3BhbklkID8/IG51bGwsXG4gICAgfTtcbiAgfSwgW2FjdGl2ZVNwYW5JZCwgc3BhbnNdKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQcmV2ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwcmV2U3BhbklkKSBvbk5hdmlnYXRlVG9TcGFuKHByZXZTcGFuSWQpO1xuICB9LCBbcHJldlNwYW5JZCwgb25OYXZpZ2F0ZVRvU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE5leHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG5leHRTcGFuSWQpIG9uTmF2aWdhdGVUb1NwYW4obmV4dFNwYW5JZCk7XG4gIH0sIFtuZXh0U3BhbklkLCBvbk5hdmlnYXRlVG9TcGFuXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3BlbikgcmV0dXJuO1xuXG4gICAgY29uc3Qgb25LZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZS5rZXkgIT09ICdqJyAmJlxuICAgICAgICBlLmtleSAhPT0gJ2snICYmXG4gICAgICAgIGUua2V5ICE9PSAnQXJyb3dEb3duJyAmJlxuICAgICAgICBlLmtleSAhPT0gJ0Fycm93VXAnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKFxuICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gICAgICAgIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQgfHxcbiAgICAgICAgdGFyZ2V0Py5pc0NvbnRlbnRFZGl0YWJsZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldElkID1cbiAgICAgICAgZS5rZXkgPT09ICdrJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnID8gcHJldlNwYW5JZCA6IG5leHRTcGFuSWQ7XG4gICAgICBpZiAodGFyZ2V0SWQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbk5hdmlnYXRlVG9TcGFuKHRhcmdldElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gIH0sIFtpc09wZW4sIHByZXZTcGFuSWQsIG5leHRTcGFuSWQsIG9uTmF2aWdhdGVUb1NwYW5dKTtcblxuICAvLyBEZXJpdmUgdGhlIHNlbGVjdGVkIHNwYW4gbmFtZSBmb3IgdGhlIHBhbmVsIGhlYWRlclxuICBjb25zdCBzZWxlY3RlZFNwYW5OYW1lID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZFNwYW4/LmRhdGEpIHJldHVybiAnRGV0YWlscyc7XG4gICAgY29uc3QgZGF0YSA9IHNlbGVjdGVkU3Bhbi5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChzZWxlY3RlZFNwYW4ucmVzb3VyY2UgPT09ICdob29rJykge1xuICAgICAgcmV0dXJuIChkYXRhLnRva2VuIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gKGRhdGEuaG9va0lkIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcE5hbWUgPSBkYXRhLnN0ZXBOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBkYXRhLndvcmtmbG93TmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChcbiAgICAgIChzdGVwTmFtZSA/IHBhcnNlU3RlcE5hbWUoc3RlcE5hbWUpPy5zaG9ydE5hbWUgOiB1bmRlZmluZWQpID8/XG4gICAgICAod29ya2Zsb3dOYW1lID8gcGFyc2VXb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lKT8uc2hvcnROYW1lIDogdW5kZWZpbmVkKSA/P1xuICAgICAgc3RlcE5hbWUgPz9cbiAgICAgIHdvcmtmbG93TmFtZSA/P1xuICAgICAgKGRhdGEuaG9va0lkIGFzIHN0cmluZykgPz9cbiAgICAgICdEZXRhaWxzJ1xuICAgICk7XG4gIH0sIFtzZWxlY3RlZFNwYW4/LmRhdGEsIHNlbGVjdGVkU3Bhbj8ucmVzb3VyY2VdKTtcblxuICBpZiAoIWFjdGl2ZVNwYW4pIHJldHVybiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPGFzaWRlXG4gICAgICByZWY9e2FzaWRlUmVmfVxuICAgICAgaWQ9e0RFVEFJTF9QQU5FTF9JRH1cbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggZmxleC1jb2wgaC1mdWxsIG1heC1oLWZ1bGwgc2hyaW5rLTAgYmctYmFja2dyb3VuZC0xMDAgYm9yZGVyLWwgYm9yZGVyLWdyYXktYWxwaGEtNDAwXCJcbiAgICAgIHN0eWxlPXt7IHdpZHRoOiBwYW5lbFdpZHRoIH19XG4gICAgPlxuICAgICAgPERyYWdnYWJsZUJvcmRlclxuICAgICAgICBlbGVtZW50PXthc2lkZVJlZn1cbiAgICAgICAgcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgb25XaWR0aENoYW5nZT17aGFuZGxlUmVzaXplfVxuICAgICAgICBvblJlc2V0PXsoKSA9PiBoYW5kbGVSZXNpemUoUEFORUxfREVGQVVMVF9XSURUSCl9XG4gICAgICAgIGFyaWEtbGFiZWw9XCJSZXNpemUgc3BhbiBkZXRhaWxzIHBhbmVsXCJcbiAgICAgICAgYXJpYS1jb250cm9scz17REVUQUlMX1BBTkVMX0lEfVxuICAgICAgICBhcmlhLXZhbHVlbWluPXtQQU5FTF9NSU5fV0lEVEh9XG4gICAgICAgIGFyaWEtdmFsdWVtYXg9e3BhbmVsTWF4V2lkdGh9XG4gICAgICAgIGFyaWEtdmFsdWVub3c9e01hdGgubWluKFxuICAgICAgICAgIE1hdGgubWF4KE1hdGgucm91bmQocGFuZWxXaWR0aCksIFBBTkVMX01JTl9XSURUSCksXG4gICAgICAgICAgcGFuZWxNYXhXaWR0aFxuICAgICAgICApfVxuICAgICAgLz5cbiAgICAgIHsvKiBQYW5lbCBoZWFkZXIgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBzaHJpbmstMCBweC00IHB5LVs3LjVweF1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xNCBmb250LW1lZGl1bSB0ZXh0LWdyYXktMTAwMCB0cnVuY2F0ZSBibG9ja1wiPlxuICAgICAgICAgIHtzZWxlY3RlZFNwYW5OYW1lfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTAuNSBzaHJpbmstMFwiPlxuICAgICAgICAgIDxUb29sdGlwPlxuICAgICAgICAgICAgPFRvb2x0aXBUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5hdmlnYXRlIHVwXCJcbiAgICAgICAgICAgICAgICBhcmlhLWtleXNob3J0Y3V0cz1cIktcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdFByZXZ9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFwcmV2U3BhbklkfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPENoZXZyb25VcCBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgICAgIHtwcmV2U3BhbklkID8gKFxuICAgICAgICAgICAgICA8VG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgTmF2aWdhdGUgdXBcbiAgICAgICAgICAgICAgICA8S2JkPks8L0tiZD5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICA8VG9vbHRpcD5cbiAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSBkb3duXCJcbiAgICAgICAgICAgICAgICBhcmlhLWtleXNob3J0Y3V0cz1cIkpcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdE5leHR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFuZXh0U3BhbklkfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAge25leHRTcGFuSWQgPyAoXG4gICAgICAgICAgICAgIDxUb29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICBOYXZpZ2F0ZSBkb3duXG4gICAgICAgICAgICAgICAgPEtiZD5KPC9LYmQ+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgPGRpdiBhcmlhLWhpZGRlbiBjbGFzc05hbWU9XCJ3LXB4IGgtNCBiZy1ncmF5LWFscGhhLTQwMCBteC0xXCIgLz5cbiAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIHNwYW4gZGV0YWlsc1wiXG4gICAgICAgICAgICBhcmlhLWtleXNob3J0Y3V0cz1cIkVzY2FwZVwiXG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxYIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHsvKiBQYW5lbCBib2R5ICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIDxFbnRpdHlEZXRhaWxQYW5lbFxuICAgICAgICAgICAgcnVuPXtzaWRlYmFyLnJ1bn1cbiAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e3NpZGViYXIub25TdHJlYW1DbGlja31cbiAgICAgICAgICAgIG9uUnVuQ2xpY2s9e3NpZGViYXIub25SdW5DbGlja31cbiAgICAgICAgICAgIGZldGNoU3BhbkRldGFpbD17c2lkZWJhci5mZXRjaFNwYW5EZXRhaWx9XG4gICAgICAgICAgICBvbldha2VVcFNsZWVwPXtzaWRlYmFyLm9uV2FrZVVwU2xlZXB9XG4gICAgICAgICAgICBvbkxvYWRFdmVudERhdGE9e3NpZGViYXIub25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgb25SZXNvbHZlSG9vaz17c2lkZWJhci5vblJlc29sdmVIb29rfVxuICAgICAgICAgICAgZW5jcnlwdGlvbktleT17c2lkZWJhci5lbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgb25EZWNyeXB0PXtzaWRlYmFyLm9uRGVjcnlwdH1cbiAgICAgICAgICAgIGlzRGVjcnlwdGluZz17c2lkZWJhci5pc0RlY3J5cHRpbmd9XG4gICAgICAgICAgICBzZWxlY3RlZFNwYW49e3NlbGVjdGVkU3Bhbn1cbiAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM9e1xuICAgICAgICAgICAgICBzaWRlYmFyLnNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdldE1vZHVsZVNvdXJjZVVybD17c2lkZWJhci5nZXRNb2R1bGVTb3VyY2VVcmx9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgPC9kaXY+XG4gICAgPC9hc2lkZT5cbiAgKTtcbn1cbiJdfQ==
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvZGV0YWlsLXBhbmVsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsaUJBQWlCLEdBRWxCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIscUJBQXFCLEdBQ3RCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxl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RUFDNUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixFQUNwRCxZQUFZLEVBQUUsWUFBWSxFQUMxQixxQ0FBcUMsRUFDbkMsT0FBTyxDQUFDLHFDQUFxQyxFQUUvQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCLEdBQzlDLEdBQ1ksR0FDWixJQUNBLENBQ1QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHsgQ2hldnJvbkRvd24sIENoZXZyb25VcCwgWCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQge1xuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBSZWZPYmplY3QsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZpbHRlclNwYW5SYXdFdmVudHMgfSBmcm9tICcuLi8uLi8uLi9saWIvdHJhY2UtYnVpbGRlcic7XG5pbXBvcnQgeyBFcnJvckJvdW5kYXJ5IH0gZnJvbSAnLi4vLi4vZXJyb3ItYm91bmRhcnknO1xuaW1wb3J0IHtcbiAgRW50aXR5RGV0YWlsUGFuZWwsXG4gIHR5cGUgU2VsZWN0ZWRTcGFuSW5mbyxcbn0gZnJvbSAnLi4vLi4vc2lkZWJhci9lbnRpdHktZGV0YWlsLXBhbmVsJztcbmltcG9ydCB7IHVzZVNpZGViYXJEYXRhIH0gZnJvbSAnLi4vLi4vc2lkZWJhci9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vLi4vdWkvaWNvbi1idXR0b24nO1xuaW1wb3J0IHsgS2JkIH0gZnJvbSAnLi4vLi4vdWkva2JkJztcbmltcG9ydCB7IFRvb2x0aXAsIFRvb2x0aXBDb250ZW50LCBUb29sdGlwVHJpZ2dlciB9IGZyb20gJy4uLy4uL3VpL3Rvb2x0aXAnO1xuaW1wb3J0IHsgdXNlQWN0aXZlU3BhbiB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgY2xhbXBQYW5lbFdpZHRoLFxuICBjb21wdXRlTWF4UGFuZWxXaWR0aCxcbiAgUEFORUxfREVGQVVMVF9XSURUSCxcbiAgUEFORUxfTUlOX1dJRFRILFxuICByZWFkU3RvcmVkUGFuZWxXaWR0aCxcbiAgd3JpdGVTdG9yZWRQYW5lbFdpZHRoLFxufSBmcm9tICcuL2RldGFpbC1wYW5lbC13aWR0aCc7XG5pbXBvcnQgeyBEcmFnZ2FibGVCb3JkZXIgfSBmcm9tICcuL2RyYWdnYWJsZS1ib3JkZXInO1xuaW1wb3J0IHsgdXNlRWxlbWVudFdpZHRoIH0gZnJvbSAnLi91c2UtZWxlbWVudC13aWR0aCc7XG5cbmNvbnN0IERFVEFJTF9QQU5FTF9JRCA9ICd0cmFjZS1kZXRhaWwtcGFuZWwnO1xuXG4vKiogQnJpZGdlIEFjdGl2ZVNwYW5Db250ZXh0ICsgU2lkZWJhckRhdGFDb250ZXh0IOKGkiBTZWxlY3RlZFNwYW5JbmZvLiAqL1xuZnVuY3Rpb24gdXNlU2VsZWN0ZWRTcGFuSW5mbygpOiBTZWxlY3RlZFNwYW5JbmZvIHwgbnVsbCB7XG4gIGNvbnN0IHsgYWN0aXZlU3BhbiB9ID0gdXNlQWN0aXZlU3BhbigpO1xuICBjb25zdCBzaWRlYmFyID0gdXNlU2lkZWJhckRhdGEoKTtcblxuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmVTcGFuKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHJlc291cmNlID0gYWN0aXZlU3Bhbi5hdHRyaWJ1dGVzPy5yZXNvdXJjZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmF3RXZlbnRzID0gZmlsdGVyU3BhblJhd0V2ZW50cyhcbiAgICAgIHNpZGViYXIuZXZlbnRzLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBhY3RpdmVTcGFuLnNwYW5JZFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogYWN0aXZlU3Bhbi5hdHRyaWJ1dGVzPy5kYXRhLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBzcGFuSWQ6IGFjdGl2ZVNwYW4uc3BhbklkLFxuICAgICAgcmF3RXZlbnRzLFxuICAgICAgZHVwbGljYXRlRXZlbnRJZHM6IHNpZGViYXIuZHVwbGljYXRlRXZlbnRJZHMsXG4gICAgfTtcbiAgfSwgW2FjdGl2ZVNwYW4sIHNpZGViYXJdKTtcbn1cblxuLyoqXG4gKiBUaGUgc3BhbiBkZXRhaWwgYXNpZGU6IGNvbnRlbnQsIHByZXYvbmV4dC9jbG9zZSBoZWFkZXIsIEovSyBuYXZpZ2F0aW9uLCBhbmRcbiAqIHRoZSByZXNpemFibGUgbGVmdCBib3JkZXIgd2l0aCBpdHMgd2lkdGggbW9kZWwgKHNlZSBkZXRhaWwtcGFuZWwtd2lkdGgudHMpLlxuICpcbiAqIEFsd2F5cyBtb3VudGVkIChpdCByZW5kZXJzIG51bGwgd2l0aG91dCBhIHNlbGVjdGlvbikgc28gdGhlIHBhbmVsIHdpZHRoXG4gKiBzdXJ2aXZlcyBjbG9zaW5nIGFuZCByZW9wZW5pbmcgd2l0aGluIGEgc2Vzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRyYWNlRGV0YWlsUGFuZWwoe1xuICBjb250YWluZXJSZWYsXG4gIG9uTmF2aWdhdGVUb1NwYW4sXG4gIG9uQ2xvc2UsXG59OiB7XG4gIGNvbnRhaW5lclJlZjogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD47XG4gIG9uTmF2aWdhdGVUb1NwYW46IChzcGFuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCB7IGFjdGl2ZVNwYW4sIGFjdGl2ZVNwYW5JZCwgc3BhbnMgfSA9IHVzZUFjdGl2ZVNwYW4oKTtcbiAgY29uc3Qgc2lkZWJhciA9IHVzZVNpZGViYXJEYXRhKCk7XG4gIGNvbnN0IHNlbGVjdGVkU3BhbiA9IHVzZVNlbGVjdGVkU3BhbkluZm8oKTtcbiAgY29uc3QgaXNPcGVuID0gQm9vbGVhbihhY3RpdmVTcGFuKTtcblxuICBjb25zdCBbc3RvcmVkV2lkdGgsIHNldFN0b3JlZFdpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oKCkgPT5cbiAgICByZWFkU3RvcmVkUGFuZWxXaWR0aCgpXG4gICk7XG4gIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdXNlRWxlbWVudFdpZHRoKGNvbnRhaW5lclJlZiwgaXNPcGVuKTtcbiAgY29uc3QgYXNpZGVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBoYW5kbGVSZXNpemUgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBjbGFtcGVkID0gY2xhbXBQYW5lbFdpZHRoKG5leHQsIGNvbnRhaW5lcldpZHRoKTtcbiAgICAgIHNldFN0b3JlZFdpZHRoKGNsYW1wZWQpO1xuICAgICAgd3JpdGVTdG9yZWRQYW5lbFdpZHRoKGNsYW1wZWQpO1xuICAgIH0sXG4gICAgW2NvbnRhaW5lcldpZHRoXVxuICApO1xuXG4gIGNvbnN0IHBhbmVsV2lkdGggPSBjbGFtcFBhbmVsV2lkdGgoc3RvcmVkV2lkdGgsIGNvbnRhaW5lcldpZHRoKTtcbiAgY29uc3QgcGFuZWxNYXhXaWR0aCA9IE1hdGgubWF4KFxuICAgIFBBTkVMX01JTl9XSURUSCxcbiAgICBjb21wdXRlTWF4UGFuZWxXaWR0aChjb250YWluZXJXaWR0aClcbiAgKTtcblxuICBjb25zdCB7IHByZXZTcGFuSWQsIG5leHRTcGFuSWQgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghYWN0aXZlU3BhbklkKSByZXR1cm4geyBwcmV2U3BhbklkOiBudWxsLCBuZXh0U3BhbklkOiBudWxsIH07XG4gICAgY29uc3QgaSA9IHNwYW5zLmZpbmRJbmRleCgocykgPT4gcy5zcGFuSWQgPT09IGFjdGl2ZVNwYW5JZCk7XG4gICAgaWYgKGkgPT09IC0xKSByZXR1cm4geyBwcmV2U3BhbklkOiBudWxsLCBuZXh0U3BhbklkOiBudWxsIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByZXZTcGFuSWQ6IHNwYW5zW2kgLSAxXT8uc3BhbklkID8/IG51bGwsXG4gICAgICBuZXh0U3BhbklkOiBzcGFuc1tpICsgMV0/LnNwYW5JZCA/PyBudWxsLFxuICAgIH07XG4gIH0sIFthY3RpdmVTcGFuSWQsIHNwYW5zXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UHJldiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocHJldlNwYW5JZCkgb25OYXZpZ2F0ZVRvU3BhbihwcmV2U3BhbklkKTtcbiAgfSwgW3ByZXZTcGFuSWQsIG9uTmF2aWdhdGVUb1NwYW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3ROZXh0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChuZXh0U3BhbklkKSBvbk5hdmlnYXRlVG9TcGFuKG5leHRTcGFuSWQpO1xuICB9LCBbbmV4dFNwYW5JZCwgb25OYXZpZ2F0ZVRvU3Bhbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHJldHVybjtcblxuICAgIGNvbnN0IG9uS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGUua2V5ICE9PSAnaicgJiZcbiAgICAgICAgZS5rZXkgIT09ICdrJyAmJlxuICAgICAgICBlLmtleSAhPT0gJ0Fycm93RG93bicgJiZcbiAgICAgICAgZS5rZXkgIT09ICdBcnJvd1VwJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgIGlmIChcbiAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxuICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gICAgICAgIHRhcmdldD8uaXNDb250ZW50RWRpdGFibGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXRJZCA9XG4gICAgICAgIGUua2V5ID09PSAnaycgfHwgZS5rZXkgPT09ICdBcnJvd1VwJyA/IHByZXZTcGFuSWQgOiBuZXh0U3BhbklkO1xuICAgICAgaWYgKHRhcmdldElkKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25OYXZpZ2F0ZVRvU3Bhbih0YXJnZXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICB9LCBbaXNPcGVuLCBwcmV2U3BhbklkLCBuZXh0U3BhbklkLCBvbk5hdmlnYXRlVG9TcGFuXSk7XG5cbiAgLy8gRGVyaXZlIHRoZSBzZWxlY3RlZCBzcGFuIG5hbWUgZm9yIHRoZSBwYW5lbCBoZWFkZXJcbiAgY29uc3Qgc2VsZWN0ZWRTcGFuTmFtZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRTcGFuPy5kYXRhKSByZXR1cm4gJ0RldGFpbHMnO1xuICAgIGNvbnN0IGRhdGEgPSBzZWxlY3RlZFNwYW4uZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoc2VsZWN0ZWRTcGFuLnJlc291cmNlID09PSAnaG9vaycpIHtcbiAgICAgIHJldHVybiAoZGF0YS50b2tlbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IChkYXRhLmhvb2tJZCBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXBOYW1lID0gZGF0YS5zdGVwTmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gZGF0YS53b3JrZmxvd05hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICAoc3RlcE5hbWUgPyBwYXJzZVN0ZXBOYW1lKHN0ZXBOYW1lKT8uc2hvcnROYW1lIDogdW5kZWZpbmVkKSA/P1xuICAgICAgKHdvcmtmbG93TmFtZSA/IHBhcnNlV29ya2Zsb3dOYW1lKHdvcmtmbG93TmFtZSk/LnNob3J0TmFtZSA6IHVuZGVmaW5lZCkgPz9cbiAgICAgIHN0ZXBOYW1lID8/XG4gICAgICB3b3JrZmxvd05hbWUgPz9cbiAgICAgIChkYXRhLmhvb2tJZCBhcyBzdHJpbmcpID8/XG4gICAgICAnRGV0YWlscydcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRTcGFuPy5kYXRhLCBzZWxlY3RlZFNwYW4/LnJlc291cmNlXSk7XG5cbiAgaWYgKCFhY3RpdmVTcGFuKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxhc2lkZVxuICAgICAgcmVmPXthc2lkZVJlZn1cbiAgICAgIGlkPXtERVRBSUxfUEFORUxfSUR9XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGgtZnVsbCBtYXgtaC1mdWxsIHNocmluay0wIGJnLWJhY2tncm91bmQtMTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LWFscGhhLTQwMFwiXG4gICAgICBzdHlsZT17eyB3aWR0aDogcGFuZWxXaWR0aCB9fVxuICAgID5cbiAgICAgIDxEcmFnZ2FibGVCb3JkZXJcbiAgICAgICAgZWxlbWVudD17YXNpZGVSZWZ9XG4gICAgICAgIHBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgIG9uV2lkdGhDaGFuZ2U9e2hhbmRsZVJlc2l6ZX1cbiAgICAgICAgb25SZXNldD17KCkgPT4gaGFuZGxlUmVzaXplKFBBTkVMX0RFRkFVTFRfV0lEVEgpfVxuICAgICAgICBhcmlhLWxhYmVsPVwiUmVzaXplIHNwYW4gZGV0YWlscyBwYW5lbFwiXG4gICAgICAgIGFyaWEtY29udHJvbHM9e0RFVEFJTF9QQU5FTF9JRH1cbiAgICAgICAgYXJpYS12YWx1ZW1pbj17UEFORUxfTUlOX1dJRFRIfVxuICAgICAgICBhcmlhLXZhbHVlbWF4PXtwYW5lbE1heFdpZHRofVxuICAgICAgICBhcmlhLXZhbHVlbm93PXtNYXRoLm1pbihcbiAgICAgICAgICBNYXRoLm1heChNYXRoLnJvdW5kKHBhbmVsV2lkdGgpLCBQQU5FTF9NSU5fV0lEVEgpLFxuICAgICAgICAgIHBhbmVsTWF4V2lkdGhcbiAgICAgICAgKX1cbiAgICAgIC8+XG4gICAgICB7LyogUGFuZWwgaGVhZGVyICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgc2hyaW5rLTAgcHgtNCBweS1bNy41cHhdXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTQgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTEwMDAgdHJ1bmNhdGUgYmxvY2tcIj5cbiAgICAgICAgICB7c2VsZWN0ZWRTcGFuTmFtZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0wLjUgc2hyaW5rLTBcIj5cbiAgICAgICAgICA8VG9vbHRpcD5cbiAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB1cFwiXG4gICAgICAgICAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJLXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3RQcmV2fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshcHJldlNwYW5JZH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxDaGV2cm9uVXAgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgIDwvVG9vbHRpcFRyaWdnZXI+XG4gICAgICAgICAgICB7cHJldlNwYW5JZCA/IChcbiAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgIE5hdmlnYXRlIHVwXG4gICAgICAgICAgICAgICAgPEtiZD5LPC9LYmQ+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgPFRvb2x0aXA+XG4gICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgZG93blwiXG4gICAgICAgICAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJKXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3ROZXh0fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbmV4dFNwYW5JZH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgICAgIHtuZXh0U3BhbklkID8gKFxuICAgICAgICAgICAgICA8VG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgTmF2aWdhdGUgZG93blxuICAgICAgICAgICAgICAgIDxLYmQ+SjwvS2JkPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW4gY2xhc3NOYW1lPVwidy1weCBoLTQgYmctZ3JheS1hbHBoYS00MDAgbXgtMVwiIC8+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBzcGFuIGRldGFpbHNcIlxuICAgICAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJFc2NhcGVcIlxuICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8WCBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7LyogUGFuZWwgYm9keSAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICA8RXJyb3JCb3VuZGFyeT5cbiAgICAgICAgICA8RW50aXR5RGV0YWlsUGFuZWxcbiAgICAgICAgICAgIHJ1bj17c2lkZWJhci5ydW59XG4gICAgICAgICAgICBvblN0cmVhbUNsaWNrPXtzaWRlYmFyLm9uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICBvblJ1bkNsaWNrPXtzaWRlYmFyLm9uUnVuQ2xpY2t9XG4gICAgICAgICAgICBmZXRjaFNwYW5EZXRhaWw9e3NpZGViYXIuZmV0Y2hTcGFuRGV0YWlsfVxuICAgICAgICAgICAgb25XYWtlVXBTbGVlcD17c2lkZWJhci5vbldha2VVcFNsZWVwfVxuICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtzaWRlYmFyLm9uTG9hZEV2ZW50RGF0YX1cbiAgICAgICAgICAgIG9uUmVzb2x2ZUhvb2s9e3NpZGViYXIub25SZXNvbHZlSG9va31cbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXk9e3NpZGViYXIuZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgIG9uRGVjcnlwdD17c2lkZWJhci5vbkRlY3J5cHR9XG4gICAgICAgICAgICBpc0RlY3J5cHRpbmc9e3NpZGViYXIuaXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgaXNEZWNyeXB0RGlzYWJsZWQ9e3NpZGViYXIuaXNEZWNyeXB0RGlzYWJsZWR9XG4gICAgICAgICAgICBkZWNyeXB0RGlzYWJsZWRSZWFzb249e3NpZGViYXIuZGVjcnlwdERpc2FibGVkUmVhc29ufVxuICAgICAgICAgICAgc2VsZWN0ZWRTcGFuPXtzZWxlY3RlZFNwYW59XG4gICAgICAgICAgICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPXtcbiAgICAgICAgICAgICAgc2lkZWJhci5zaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZXRNb2R1bGVTb3VyY2VVcmw9e3NpZGViYXIuZ2V0TW9kdWxlU291cmNlVXJsfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgICAgIDwvZGl2PlxuICAgIDwvYXNpZGU+XG4gICk7XG59XG4iXX0=
|
|
@@ -23,7 +23,7 @@ interface DraggableBorderProps {
|
|
|
23
23
|
* double-click reset, pointer-capture dragging (works with touch/pen, no
|
|
24
24
|
* ghost image), and keyboard/ARIA window-splitter support.
|
|
25
25
|
*
|
|
26
|
-
* The panel's positioning ancestor must not clip overflow
|
|
26
|
+
* The panel's positioning ancestor must not clip overflow: the strip hangs
|
|
27
27
|
* ~8px past the panel edge.
|
|
28
28
|
*/
|
|
29
29
|
export declare function DraggableBorder({ element, position, onWidthChange, onReset, 'aria-label': ariaLabel, 'aria-controls': ariaControls, 'aria-valuemin': ariaValueMin, 'aria-valuemax': ariaValueMax, 'aria-valuenow': ariaValueNow, }: DraggableBorderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -8,7 +8,7 @@ import { cn } from '../../../lib/cn';
|
|
|
8
8
|
* double-click reset, pointer-capture dragging (works with touch/pen, no
|
|
9
9
|
* ghost image), and keyboard/ARIA window-splitter support.
|
|
10
10
|
*
|
|
11
|
-
* The panel's positioning ancestor must not clip overflow
|
|
11
|
+
* The panel's positioning ancestor must not clip overflow: the strip hangs
|
|
12
12
|
* ~8px past the panel edge.
|
|
13
13
|
*/
|
|
14
14
|
export function DraggableBorder({ element, position, onWidthChange, onReset, 'aria-label': ariaLabel, 'aria-controls': ariaControls, 'aria-valuemin': ariaValueMin, 'aria-valuemax': ariaValueMax, 'aria-valuenow': ariaValueNow, }) {
|
|
@@ -137,4 +137,4 @@ export function DraggableBorder({ element, position, onWidthChange, onReset, 'ar
|
|
|
137
137
|
};
|
|
138
138
|
return (_jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": ariaLabel, "aria-controls": ariaControls, "aria-valuemin": ariaValueMin, "aria-valuemax": ariaValueMax, "aria-valuenow": ariaValueNow, tabIndex: 0, className: cn('group absolute inset-y-0 z-10 w-[17px] cursor-col-resize touch-none outline-none', position === 'left' ? '-left-2' : '-right-2'), onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerEnd, onPointerCancel: handlePointerEnd, onLostPointerCapture: handleLostPointerCapture, onDoubleClick: handleDoubleClick, onKeyDown: handleKeyDown, children: _jsx("span", { "aria-hidden": true, className: cn('pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-colors delay-75 duration-100', 'group-hover:bg-gray-500 group-focus-visible:bg-[var(--ds-focus-color)]', isDragging && 'bg-gray-500') }) }));
|
|
139
139
|
}
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLWJvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL2RyYWdnYWJsZS1ib3JkZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBSUwsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFxQnJDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUM5QixPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUFFLFNBQVMsRUFDdkIsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksR0FDUjtJQUNyQixNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5DLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFD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QUNDLFVBQVUsZ0JBQ2YsU0FBUyxtQkFDTixZQUFZLG1CQUNaLFlBQVksbUJBQ1osWUFBWSxtQkFDWixZQUFZLEVBQzNCLFFBQVEsRUFBRSxDQUFDLEVBQ1gsU0FBUyxFQUFFLEVBQUUsQ0FDWCxrRkFBa0YsRUFDbEYsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQzdDLEVBQ0QsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxhQUFhLEVBQUUsaUJBQWlCLEVBQ2hDLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0IsZUFBZSxFQUFFLGdCQUFnQixFQUNqQyxvQkFBb0IsRUFBRSx3QkFBd0IsRUFDOUMsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxTQUFTLEVBQUUsYUFBYSxZQVV4QixvQ0FFRSxTQUFTLEVBQUUsRUFBRSxDQUNYLDhIQUE4SCxFQUM5SCx3RUFBd0UsRUFDeEUsVUFBVSxJQUFJLGFBQWEsQ0FDNUIsR0FDRCxHQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7XG4gIHR5cGUgS2V5Ym9hcmRFdmVudCBhcyBSZWFjdEtleWJvYXJkRXZlbnQsXG4gIHR5cGUgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50LFxuICB0eXBlIFJlZk9iamVjdCxcbiAgdXNlRWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uLy4uL2xpYi9jbic7XG5cbmludGVyZmFjZSBEcmFnZ2FibGVCb3JkZXJQcm9wcyB7XG4gIC8qKiBUaGUgcGFuZWwgd2hvc2Ugd2lkdGggdGhpcyBib3JkZXIgYWRqdXN0cyAobWVhc3VyZWQgb24gaW50ZXJhY3Rpb24pLiAqL1xuICBlbGVtZW50OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPjtcbiAgLyoqIFdoaWNoIGVkZ2Ugb2YgdGhlIHBhbmVsIHRoZSBib3JkZXIgc2l0cyBvbi4gKi9cbiAgcG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgbmV4dCB3aWR0aCAocHgpIHdoaWxlIGRyYWdnaW5nIG9yIGtleWJvYXJkLXJlc2l6aW5nLlxuICAgKiBUaGUgb3duZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsYW1waW5nLlxuICAgKi9cbiAgb25XaWR0aENoYW5nZTogKHdpZHRoOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBEb3VibGUtY2xpY2sgcmVzZXQuICovXG4gIG9uUmVzZXQ/OiAoKSA9PiB2b2lkO1xuICAnYXJpYS1sYWJlbCc6IHN0cmluZztcbiAgJ2FyaWEtY29udHJvbHMnPzogc3RyaW5nO1xuICAnYXJpYS12YWx1ZW1pbic/OiBudW1iZXI7XG4gICdhcmlhLXZhbHVlbWF4Jz86IG51bWJlcjtcbiAgJ2FyaWEtdmFsdWVub3cnPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE92ZXJsYXkgZHJhZyBoYW5kbGUgc3RyYWRkbGluZyBhIHBhbmVsIGVkZ2U6IGFuIGludmlzaWJsZSBzdHJpcCBvdmVyIHRoZVxuICogcGFuZWwncyBib3JkZXIgd2hvc2UgY2VudGVyIGxpbmUgaGlnaGxpZ2h0cyBvbiBob3Zlci9kcmFnLCB3aXRoXG4gKiBkb3VibGUtY2xpY2sgcmVzZXQsIHBvaW50ZXItY2FwdHVyZSBkcmFnZ2luZyAod29ya3Mgd2l0aCB0b3VjaC9wZW4sIG5vXG4gKiBnaG9zdCBpbWFnZSksIGFuZCBrZXlib2FyZC9BUklBIHdpbmRvdy1zcGxpdHRlciBzdXBwb3J0LlxuICpcbiAqIFRoZSBwYW5lbCdzIHBvc2l0aW9uaW5nIGFuY2VzdG9yIG11c3Qgbm90IGNsaXAgb3ZlcmZsb3cg4oCUIHRoZSBzdHJpcCBoYW5nc1xuICogfjhweCBwYXN0IHRoZSBwYW5lbCBlZGdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRHJhZ2dhYmxlQm9yZGVyKHtcbiAgZWxlbWVudCxcbiAgcG9zaXRpb24sXG4gIG9uV2lkdGhDaGFuZ2UsXG4gIG9uUmVzZXQsXG4gICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAnYXJpYS1jb250cm9scyc6IGFyaWFDb250cm9scyxcbiAgJ2FyaWEtdmFsdWVtaW4nOiBhcmlhVmFsdWVNaW4sXG4gICdhcmlhLXZhbHVlbWF4JzogYXJpYVZhbHVlTWF4LFxuICAnYXJpYS12YWx1ZW5vdyc6IGFyaWFWYWx1ZU5vdyxcbn06IERyYWdnYWJsZUJvcmRlclByb3BzKSB7XG4gIGNvbnN0IFtpc0RyYWdnaW5nLCBzZXRJc0RyYWdnaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcG9pbnRlcklkUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBzdGFydFhSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHN0YXJ0V2lkdGhSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHBlbmRpbmdXaWR0aFJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3QgcmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtb3ZlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGxhc3REcmFnRW5kQXRSZWYgPSB1c2VSZWYoMCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZlJlZi5jdXJyZW50KSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFN1cHByZXNzIHRleHQgc2VsZWN0aW9uIGZvciB0aGUgZHVyYXRpb24gb2YgYSBkcmFnLiBFZmZlY3QgY2xlYW51cCBhbHNvXG4gIC8vIGNvdmVycyB0aGUgaGFuZGxlIHVubW91bnRpbmcgbWlkLWRyYWcgKGUuZy4gRXNjYXBlIGNsb3NpbmcgdGhlIHBhbmVsKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRHJhZ2dpbmcpIHJldHVybjtcbiAgICBjb25zdCBwcmV2aW91cyA9IGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdDtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9IHByZXZpb3VzO1xuICAgIH07XG4gIH0sIFtpc0RyYWdnaW5nXSk7XG5cbiAgY29uc3Qgc3RvcERyYWcgPSAoKSA9PiB7XG4gICAgcG9pbnRlcklkUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpO1xuICAgIGlmIChyYWZSZWYuY3VycmVudCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpO1xuICAgICAgcmFmUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgLy8gRmx1c2ggdGhlIGZpbmFsIHBvc2l0aW9uIHRoYXQgd2FzIHN0aWxsIHdhaXRpbmcgb24gdGhlIG5leHQgZnJhbWUuXG4gICAgICBpZiAobW92ZWRSZWYuY3VycmVudCkgb25XaWR0aENoYW5nZShwZW5kaW5nV2lkdGhSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIGlmIChtb3ZlZFJlZi5jdXJyZW50KSB7XG4gICAgICBtb3ZlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBsYXN0RHJhZ0VuZEF0UmVmLmN1cnJlbnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckRvd24gPSAoZTogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gSWdub3JlIHNlY29uZGFyeSBwb2ludGVycyAoZS5nLiBhIHNlY29uZCBmaW5nZXIpIHdoaWxlIGEgZHJhZyBpcyBhY3RpdmVcbiAgICAvLyBzbyB0aGV5IGNhbid0IHJlLWJhc2VsaW5lIHRoZSBnZXN0dXJlLlxuICAgIGlmIChwb2ludGVySWRSZWYuY3VycmVudCAhPT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gZWxlbWVudC5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBpZiAoZS5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJyAmJiBlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuICAgIGUuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgcG9pbnRlcklkUmVmLmN1cnJlbnQgPSBlLnBvaW50ZXJJZDtcbiAgICBzdGFydFhSZWYuY3VycmVudCA9IGUuY2xpZW50WDtcbiAgICBzdGFydFdpZHRoUmVmLmN1cnJlbnQgPSBlbC5vZmZzZXRXaWR0aDtcbiAgICBtb3ZlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgc2V0SXNEcmFnZ2luZyh0cnVlKTtcbiAgfTtcblxuICAvLyBQb2ludGVyIGNhcHR1cmUgcm91dGVzIG1vdmUvdXAgZXZlbnRzIHRvIHRoZSBzdHJpcCBpdHNlbGYsIHNvIG5vXG4gIC8vIGRvY3VtZW50LWxldmVsIGxpc3RlbmVycyBhcmUgbmVlZGVkLlxuICBjb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IChlOiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IGUucG9pbnRlcklkKSByZXR1cm47XG4gICAgaWYgKE1hdGguYWJzKGUuY2xpZW50WCAtIHN0YXJ0WFJlZi5jdXJyZW50KSA+IDQpIHtcbiAgICAgIG1vdmVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9XG4gICAgICBwb3NpdGlvbiA9PT0gJ2xlZnQnXG4gICAgICAgID8gc3RhcnRYUmVmLmN1cnJlbnQgLSBlLmNsaWVudFhcbiAgICAgICAgOiBlLmNsaWVudFggLSBzdGFydFhSZWYuY3VycmVudDtcbiAgICBwZW5kaW5nV2lkdGhSZWYuY3VycmVudCA9IHN0YXJ0V2lkdGhSZWYuY3VycmVudCArIGRlbHRhO1xuICAgIGlmICghcmFmUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBvbldpZHRoQ2hhbmdlKHBlbmRpbmdXaWR0aFJlZi5jdXJyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyRW5kID0gKGU6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChwb2ludGVySWRSZWYuY3VycmVudCAhPT0gZS5wb2ludGVySWQpIHJldHVybjtcbiAgICBzdG9wRHJhZygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZSA9IChlOiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZS5wb2ludGVySWQgIT09IHBvaW50ZXJJZFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0b3BEcmFnKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRG91YmxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgLy8gUG9pbnRlci1jYXB0dXJlIGRyYWdzIHN0aWxsIGVtaXQgY2xpY2svZGJsY2xpY2sgKHVubGlrZSBIVE1MNSBkcmFnKSwgc29cbiAgICAvLyBhIGRibGNsaWNrIGR1cmluZyBvciByaWdodCBhZnRlciBhIHJlYWwgZHJhZyBpcyB0d28gcmVzaXplIG51ZGdlcywgbm90XG4gICAgLy8gYSByZXNldCByZXF1ZXN0LlxuICAgIGlmIChcbiAgICAgIG1vdmVkUmVmLmN1cnJlbnQgfHxcbiAgICAgIHBlcmZvcm1hbmNlLm5vdygpIC0gbGFzdERyYWdFbmRBdFJlZi5jdXJyZW50IDwgNTAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9uUmVzZXQ/LigpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3RLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGVsID0gZWxlbWVudC5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBjb25zdCBzdGVwID0gZS5zaGlmdEtleSA/IDY0IDogMTY7XG4gICAgLy8gQXJyb3dzIG1vdmUgdGhlIGJvcmRlciBpbiBzY3JlZW4gZGlyZWN0aW9uOiBmb3IgYSBsZWZ0LWVkZ2UgYm9yZGVyLFxuICAgIC8vIEFycm93TGVmdCBncm93cyB0aGUgcGFuZWwuXG4gICAgY29uc3QgZ3JvdyA9IHBvc2l0aW9uID09PSAnbGVmdCcgPyAxIDogLTE7XG4gICAgbGV0IG5leHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGlmIChlLmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIG5leHQgPSBlbC5vZmZzZXRXaWR0aCArIGdyb3cgKiBzdGVwO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgbmV4dCA9IGVsLm9mZnNldFdpZHRoIC0gZ3JvdyAqIHN0ZXA7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0hvbWUnICYmIGFyaWFWYWx1ZU1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXh0ID0gYXJpYVZhbHVlTWluO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdFbmQnICYmIGFyaWFWYWx1ZU1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXh0ID0gYXJpYVZhbHVlTWF4O1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBvbldpZHRoQ2hhbmdlKG5leHQpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiB0aGUgV0FJLUFSSUEgd2luZG93LXNwbGl0dGVyIHBhdHRlcm4gcmVxdWlyZXMgYSBmb2N1c2FibGUgZGl2IHdpdGggcm9sZT1zZXBhcmF0b3I7IDxocj4gY2Fubm90IHJlY2VpdmUgZm9jdXMgb3IgZHJhZyBpbnRlcmFjdGlvbnNcbiAgICA8ZGl2XG4gICAgICByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgIGFyaWEtb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXG4gICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICBhcmlhLWNvbnRyb2xzPXthcmlhQ29udHJvbHN9XG4gICAgICBhcmlhLXZhbHVlbWluPXthcmlhVmFsdWVNaW59XG4gICAgICBhcmlhLXZhbHVlbWF4PXthcmlhVmFsdWVNYXh9XG4gICAgICBhcmlhLXZhbHVlbm93PXthcmlhVmFsdWVOb3d9XG4gICAgICB0YWJJbmRleD17MH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncm91cCBhYnNvbHV0ZSBpbnNldC15LTAgei0xMCB3LVsxN3B4XSBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIG91dGxpbmUtbm9uZScsXG4gICAgICAgIHBvc2l0aW9uID09PSAnbGVmdCcgPyAnLWxlZnQtMicgOiAnLXJpZ2h0LTInXG4gICAgICApfVxuICAgICAgb25Qb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICBvblBvaW50ZXJNb3ZlPXtoYW5kbGVQb2ludGVyTW92ZX1cbiAgICAgIG9uUG9pbnRlclVwPXtoYW5kbGVQb2ludGVyRW5kfVxuICAgICAgb25Qb2ludGVyQ2FuY2VsPXtoYW5kbGVQb2ludGVyRW5kfVxuICAgICAgb25Mb3N0UG9pbnRlckNhcHR1cmU9e2hhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZX1cbiAgICAgIG9uRG91YmxlQ2xpY2s9e2hhbmRsZURvdWJsZUNsaWNrfVxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgID5cbiAgICAgIHsvKiBDZW50ZXIgbGluZTogc2l0cyBleGFjdGx5IG92ZXIgdGhlIHBhbmVsJ3MgMXB4IGJvcmRlciBhbmQgaGlnaGxpZ2h0c1xuICAgICAgICAgIG9uIGhvdmVyL2RyYWcvZm9jdXMgKGRlbGF5ZWQgc28gaW5jaWRlbnRhbCBtb3VzZS1vdmVycyBkb24ndCBmbGFzaCkuXG4gICAgICAgICAgcG9pbnRlci1ldmVudHMtbm9uZSBpcyBsb2FkLWJlYXJpbmc6IHdpdGhvdXQgaXQgdGhpcyAxcHggbGluZSBpcyBhXG4gICAgICAgICAgaGl0IHRhcmdldCwgc28gYSBkb3VibGUtY2xpY2sgYWltZWQgYXQgdGhlIGxpbmUgbGFuZHMgb25lIGNsaWNrIG9uXG4gICAgICAgICAgdGhlIGxpbmUgYW5kIChhZnRlciBzdWItcGl4ZWwgaml0dGVyKSB0aGUgb3RoZXIgb24gdGhlIHN0cmlwLiBBXG4gICAgICAgICAgbmF0aXZlIGRibGNsaWNrIG9ubHkgZmlyZXMgd2hlbiBib3RoIGNsaWNrcyBzaGFyZSBhIHRhcmdldCwgc28gdGhlXG4gICAgICAgICAgcmVzZXQgc2lsZW50bHkgZmFpbHMgb24gdGhlIGxpbmUgYnV0IHdvcmtzIGp1c3QgYmVzaWRlIGl0LiBLZWVwaW5nXG4gICAgICAgICAgdGhlIGxpbmUgaW5lcnQgbWFrZXMgdGhlIHNlcGFyYXRvciBkaXYgdGhlIHNvbGUgdGFyZ2V0IGV2ZXJ5d2hlcmUuICovfVxuICAgICAgPHNwYW5cbiAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC15LTAgbGVmdC0xLzIgdy1weCAtdHJhbnNsYXRlLXgtMS8yIGJnLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tY29sb3JzIGRlbGF5LTc1IGR1cmF0aW9uLTEwMCcsXG4gICAgICAgICAgJ2dyb3VwLWhvdmVyOmJnLWdyYXktNTAwIGdyb3VwLWZvY3VzLXZpc2libGU6YmctW3ZhcigtLWRzLWZvY3VzLWNvbG9yKV0nLFxuICAgICAgICAgIGlzRHJhZ2dpbmcgJiYgJ2JnLWdyYXktNTAwJ1xuICAgICAgICApfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLWJvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL2RyYWdnYWJsZS1ib3JkZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBSUwsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFxQnJDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUM5QixPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUFFLFNBQVMsRUFDdkIsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksR0FDUjtJQUNyQixNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5DLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFD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QUNDLFVBQVUsZ0JBQ2YsU0FBUyxtQkFDTixZQUFZLG1CQUNaLFlBQVksbUJBQ1osWUFBWSxtQkFDWixZQUFZLEVBQzNCLFFBQVEsRUFBRSxDQUFDLEVBQ1gsU0FBUyxFQUFFLEVBQUUsQ0FDWCxrRkFBa0YsRUFDbEYsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQzdDLEVBQ0QsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxhQUFhLEVBQUUsaUJBQWlCLEVBQ2hDLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0IsZUFBZSxFQUFFLGdCQUFnQixFQUNqQyxvQkFBb0IsRUFBRSx3QkFBd0IsRUFDOUMsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxTQUFTLEVBQUUsYUFBYSxZQVV4QixvQ0FFRSxTQUFTLEVBQUUsRUFBRSxDQUNYLDhIQUE4SCxFQUM5SCx3RUFBd0UsRUFDeEUsVUFBVSxJQUFJLGFBQWEsQ0FDNUIsR0FDRCxHQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7XG4gIHR5cGUgS2V5Ym9hcmRFdmVudCBhcyBSZWFjdEtleWJvYXJkRXZlbnQsXG4gIHR5cGUgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50LFxuICB0eXBlIFJlZk9iamVjdCxcbiAgdXNlRWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uLy4uL2xpYi9jbic7XG5cbmludGVyZmFjZSBEcmFnZ2FibGVCb3JkZXJQcm9wcyB7XG4gIC8qKiBUaGUgcGFuZWwgd2hvc2Ugd2lkdGggdGhpcyBib3JkZXIgYWRqdXN0cyAobWVhc3VyZWQgb24gaW50ZXJhY3Rpb24pLiAqL1xuICBlbGVtZW50OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPjtcbiAgLyoqIFdoaWNoIGVkZ2Ugb2YgdGhlIHBhbmVsIHRoZSBib3JkZXIgc2l0cyBvbi4gKi9cbiAgcG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgbmV4dCB3aWR0aCAocHgpIHdoaWxlIGRyYWdnaW5nIG9yIGtleWJvYXJkLXJlc2l6aW5nLlxuICAgKiBUaGUgb3duZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsYW1waW5nLlxuICAgKi9cbiAgb25XaWR0aENoYW5nZTogKHdpZHRoOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBEb3VibGUtY2xpY2sgcmVzZXQuICovXG4gIG9uUmVzZXQ/OiAoKSA9PiB2b2lkO1xuICAnYXJpYS1sYWJlbCc6IHN0cmluZztcbiAgJ2FyaWEtY29udHJvbHMnPzogc3RyaW5nO1xuICAnYXJpYS12YWx1ZW1pbic/OiBudW1iZXI7XG4gICdhcmlhLXZhbHVlbWF4Jz86IG51bWJlcjtcbiAgJ2FyaWEtdmFsdWVub3cnPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE92ZXJsYXkgZHJhZyBoYW5kbGUgc3RyYWRkbGluZyBhIHBhbmVsIGVkZ2U6IGFuIGludmlzaWJsZSBzdHJpcCBvdmVyIHRoZVxuICogcGFuZWwncyBib3JkZXIgd2hvc2UgY2VudGVyIGxpbmUgaGlnaGxpZ2h0cyBvbiBob3Zlci9kcmFnLCB3aXRoXG4gKiBkb3VibGUtY2xpY2sgcmVzZXQsIHBvaW50ZXItY2FwdHVyZSBkcmFnZ2luZyAod29ya3Mgd2l0aCB0b3VjaC9wZW4sIG5vXG4gKiBnaG9zdCBpbWFnZSksIGFuZCBrZXlib2FyZC9BUklBIHdpbmRvdy1zcGxpdHRlciBzdXBwb3J0LlxuICpcbiAqIFRoZSBwYW5lbCdzIHBvc2l0aW9uaW5nIGFuY2VzdG9yIG11c3Qgbm90IGNsaXAgb3ZlcmZsb3c6IHRoZSBzdHJpcCBoYW5nc1xuICogfjhweCBwYXN0IHRoZSBwYW5lbCBlZGdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRHJhZ2dhYmxlQm9yZGVyKHtcbiAgZWxlbWVudCxcbiAgcG9zaXRpb24sXG4gIG9uV2lkdGhDaGFuZ2UsXG4gIG9uUmVzZXQsXG4gICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAnYXJpYS1jb250cm9scyc6IGFyaWFDb250cm9scyxcbiAgJ2FyaWEtdmFsdWVtaW4nOiBhcmlhVmFsdWVNaW4sXG4gICdhcmlhLXZhbHVlbWF4JzogYXJpYVZhbHVlTWF4LFxuICAnYXJpYS12YWx1ZW5vdyc6IGFyaWFWYWx1ZU5vdyxcbn06IERyYWdnYWJsZUJvcmRlclByb3BzKSB7XG4gIGNvbnN0IFtpc0RyYWdnaW5nLCBzZXRJc0RyYWdnaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcG9pbnRlcklkUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBzdGFydFhSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHN0YXJ0V2lkdGhSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHBlbmRpbmdXaWR0aFJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3QgcmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtb3ZlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGxhc3REcmFnRW5kQXRSZWYgPSB1c2VSZWYoMCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZlJlZi5jdXJyZW50KSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFN1cHByZXNzIHRleHQgc2VsZWN0aW9uIGZvciB0aGUgZHVyYXRpb24gb2YgYSBkcmFnLiBFZmZlY3QgY2xlYW51cCBhbHNvXG4gIC8vIGNvdmVycyB0aGUgaGFuZGxlIHVubW91bnRpbmcgbWlkLWRyYWcgKGUuZy4gRXNjYXBlIGNsb3NpbmcgdGhlIHBhbmVsKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRHJhZ2dpbmcpIHJldHVybjtcbiAgICBjb25zdCBwcmV2aW91cyA9IGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdDtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9IHByZXZpb3VzO1xuICAgIH07XG4gIH0sIFtpc0RyYWdnaW5nXSk7XG5cbiAgY29uc3Qgc3RvcERyYWcgPSAoKSA9PiB7XG4gICAgcG9pbnRlcklkUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpO1xuICAgIGlmIChyYWZSZWYuY3VycmVudCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpO1xuICAgICAgcmFmUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgLy8gRmx1c2ggdGhlIGZpbmFsIHBvc2l0aW9uIHRoYXQgd2FzIHN0aWxsIHdhaXRpbmcgb24gdGhlIG5leHQgZnJhbWUuXG4gICAgICBpZiAobW92ZWRSZWYuY3VycmVudCkgb25XaWR0aENoYW5nZShwZW5kaW5nV2lkdGhSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIGlmIChtb3ZlZFJlZi5jdXJyZW50KSB7XG4gICAgICBtb3ZlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBsYXN0RHJhZ0VuZEF0UmVmLmN1cnJlbnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckRvd24gPSAoZTogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gSWdub3JlIHNlY29uZGFyeSBwb2ludGVycyAoZS5nLiBhIHNlY29uZCBmaW5nZXIpIHdoaWxlIGEgZHJhZyBpcyBhY3RpdmVcbiAgICAvLyBzbyB0aGV5IGNhbid0IHJlLWJhc2VsaW5lIHRoZSBnZXN0dXJlLlxuICAgIGlmIChwb2ludGVySWRSZWYuY3VycmVudCAhPT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gZWxlbWVudC5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBpZiAoZS5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJyAmJiBlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuICAgIGUuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgcG9pbnRlcklkUmVmLmN1cnJlbnQgPSBlLnBvaW50ZXJJZDtcbiAgICBzdGFydFhSZWYuY3VycmVudCA9IGUuY2xpZW50WDtcbiAgICBzdGFydFdpZHRoUmVmLmN1cnJlbnQgPSBlbC5vZmZzZXRXaWR0aDtcbiAgICBtb3ZlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgc2V0SXNEcmFnZ2luZyh0cnVlKTtcbiAgfTtcblxuICAvLyBQb2ludGVyIGNhcHR1cmUgcm91dGVzIG1vdmUvdXAgZXZlbnRzIHRvIHRoZSBzdHJpcCBpdHNlbGYsIHNvIG5vXG4gIC8vIGRvY3VtZW50LWxldmVsIGxpc3RlbmVycyBhcmUgbmVlZGVkLlxuICBjb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IChlOiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IGUucG9pbnRlcklkKSByZXR1cm47XG4gICAgaWYgKE1hdGguYWJzKGUuY2xpZW50WCAtIHN0YXJ0WFJlZi5jdXJyZW50KSA+IDQpIHtcbiAgICAgIG1vdmVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9XG4gICAgICBwb3NpdGlvbiA9PT0gJ2xlZnQnXG4gICAgICAgID8gc3RhcnRYUmVmLmN1cnJlbnQgLSBlLmNsaWVudFhcbiAgICAgICAgOiBlLmNsaWVudFggLSBzdGFydFhSZWYuY3VycmVudDtcbiAgICBwZW5kaW5nV2lkdGhSZWYuY3VycmVudCA9IHN0YXJ0V2lkdGhSZWYuY3VycmVudCArIGRlbHRhO1xuICAgIGlmICghcmFmUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBvbldpZHRoQ2hhbmdlKHBlbmRpbmdXaWR0aFJlZi5jdXJyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyRW5kID0gKGU6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChwb2ludGVySWRSZWYuY3VycmVudCAhPT0gZS5wb2ludGVySWQpIHJldHVybjtcbiAgICBzdG9wRHJhZygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZSA9IChlOiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZS5wb2ludGVySWQgIT09IHBvaW50ZXJJZFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0b3BEcmFnKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRG91YmxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgLy8gUG9pbnRlci1jYXB0dXJlIGRyYWdzIHN0aWxsIGVtaXQgY2xpY2svZGJsY2xpY2sgKHVubGlrZSBIVE1MNSBkcmFnKSwgc29cbiAgICAvLyBhIGRibGNsaWNrIGR1cmluZyBvciByaWdodCBhZnRlciBhIHJlYWwgZHJhZyBpcyB0d28gcmVzaXplIG51ZGdlcywgbm90XG4gICAgLy8gYSByZXNldCByZXF1ZXN0LlxuICAgIGlmIChcbiAgICAgIG1vdmVkUmVmLmN1cnJlbnQgfHxcbiAgICAgIHBlcmZvcm1hbmNlLm5vdygpIC0gbGFzdERyYWdFbmRBdFJlZi5jdXJyZW50IDwgNTAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9uUmVzZXQ/LigpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3RLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGVsID0gZWxlbWVudC5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBjb25zdCBzdGVwID0gZS5zaGlmdEtleSA/IDY0IDogMTY7XG4gICAgLy8gQXJyb3dzIG1vdmUgdGhlIGJvcmRlciBpbiBzY3JlZW4gZGlyZWN0aW9uOiBmb3IgYSBsZWZ0LWVkZ2UgYm9yZGVyLFxuICAgIC8vIEFycm93TGVmdCBncm93cyB0aGUgcGFuZWwuXG4gICAgY29uc3QgZ3JvdyA9IHBvc2l0aW9uID09PSAnbGVmdCcgPyAxIDogLTE7XG4gICAgbGV0IG5leHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGlmIChlLmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIG5leHQgPSBlbC5vZmZzZXRXaWR0aCArIGdyb3cgKiBzdGVwO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgbmV4dCA9IGVsLm9mZnNldFdpZHRoIC0gZ3JvdyAqIHN0ZXA7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0hvbWUnICYmIGFyaWFWYWx1ZU1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXh0ID0gYXJpYVZhbHVlTWluO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdFbmQnICYmIGFyaWFWYWx1ZU1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXh0ID0gYXJpYVZhbHVlTWF4O1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBvbldpZHRoQ2hhbmdlKG5leHQpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiB0aGUgV0FJLUFSSUEgd2luZG93LXNwbGl0dGVyIHBhdHRlcm4gcmVxdWlyZXMgYSBmb2N1c2FibGUgZGl2IHdpdGggcm9sZT1zZXBhcmF0b3I7IDxocj4gY2Fubm90IHJlY2VpdmUgZm9jdXMgb3IgZHJhZyBpbnRlcmFjdGlvbnNcbiAgICA8ZGl2XG4gICAgICByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgIGFyaWEtb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXG4gICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICBhcmlhLWNvbnRyb2xzPXthcmlhQ29udHJvbHN9XG4gICAgICBhcmlhLXZhbHVlbWluPXthcmlhVmFsdWVNaW59XG4gICAgICBhcmlhLXZhbHVlbWF4PXthcmlhVmFsdWVNYXh9XG4gICAgICBhcmlhLXZhbHVlbm93PXthcmlhVmFsdWVOb3d9XG4gICAgICB0YWJJbmRleD17MH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncm91cCBhYnNvbHV0ZSBpbnNldC15LTAgei0xMCB3LVsxN3B4XSBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIG91dGxpbmUtbm9uZScsXG4gICAgICAgIHBvc2l0aW9uID09PSAnbGVmdCcgPyAnLWxlZnQtMicgOiAnLXJpZ2h0LTInXG4gICAgICApfVxuICAgICAgb25Qb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICBvblBvaW50ZXJNb3ZlPXtoYW5kbGVQb2ludGVyTW92ZX1cbiAgICAgIG9uUG9pbnRlclVwPXtoYW5kbGVQb2ludGVyRW5kfVxuICAgICAgb25Qb2ludGVyQ2FuY2VsPXtoYW5kbGVQb2ludGVyRW5kfVxuICAgICAgb25Mb3N0UG9pbnRlckNhcHR1cmU9e2hhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZX1cbiAgICAgIG9uRG91YmxlQ2xpY2s9e2hhbmRsZURvdWJsZUNsaWNrfVxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgID5cbiAgICAgIHsvKiBDZW50ZXIgbGluZTogc2l0cyBleGFjdGx5IG92ZXIgdGhlIHBhbmVsJ3MgMXB4IGJvcmRlciBhbmQgaGlnaGxpZ2h0c1xuICAgICAgICAgIG9uIGhvdmVyL2RyYWcvZm9jdXMgKGRlbGF5ZWQgc28gaW5jaWRlbnRhbCBtb3VzZS1vdmVycyBkb24ndCBmbGFzaCkuXG4gICAgICAgICAgcG9pbnRlci1ldmVudHMtbm9uZSBpcyBsb2FkLWJlYXJpbmc6IHdpdGhvdXQgaXQgdGhpcyAxcHggbGluZSBpcyBhXG4gICAgICAgICAgaGl0IHRhcmdldCwgc28gYSBkb3VibGUtY2xpY2sgYWltZWQgYXQgdGhlIGxpbmUgbGFuZHMgb25lIGNsaWNrIG9uXG4gICAgICAgICAgdGhlIGxpbmUgYW5kIChhZnRlciBzdWItcGl4ZWwgaml0dGVyKSB0aGUgb3RoZXIgb24gdGhlIHN0cmlwLiBBXG4gICAgICAgICAgbmF0aXZlIGRibGNsaWNrIG9ubHkgZmlyZXMgd2hlbiBib3RoIGNsaWNrcyBzaGFyZSBhIHRhcmdldCwgc28gdGhlXG4gICAgICAgICAgcmVzZXQgc2lsZW50bHkgZmFpbHMgb24gdGhlIGxpbmUgYnV0IHdvcmtzIGp1c3QgYmVzaWRlIGl0LiBLZWVwaW5nXG4gICAgICAgICAgdGhlIGxpbmUgaW5lcnQgbWFrZXMgdGhlIHNlcGFyYXRvciBkaXYgdGhlIHNvbGUgdGFyZ2V0IGV2ZXJ5d2hlcmUuICovfVxuICAgICAgPHNwYW5cbiAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC15LTAgbGVmdC0xLzIgdy1weCAtdHJhbnNsYXRlLXgtMS8yIGJnLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tY29sb3JzIGRlbGF5LTc1IGR1cmF0aW9uLTEwMCcsXG4gICAgICAgICAgJ2dyb3VwLWhvdmVyOmJnLWdyYXktNTAwIGdyb3VwLWZvY3VzLXZpc2libGU6YmctW3ZhcigtLWRzLWZvY3VzLWNvbG9yKV0nLFxuICAgICAgICAgIGlzRHJhZ2dpbmcgJiYgJ2JnLWdyYXktNTAwJ1xuICAgICAgICApfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
|
|
@@ -103,9 +103,9 @@ export const Minimap = memo(function Minimap({ spans, root, viewport, minViewpor
|
|
|
103
103
|
const clamp = useCallback((next) => clampViewportToRoot(next, rootStartMs, rootEndMs, minViewportMs), [rootStartMs, rootEndMs, minViewportMs]);
|
|
104
104
|
// Density canvas: one thin line per span across the full run. Sizing is
|
|
105
105
|
// read live and redraws run straight from the ResizeObserver (which fires
|
|
106
|
-
// before paint), so layout changes
|
|
106
|
+
// before paint), so layout changes (e.g. the detail panel opening) never
|
|
107
107
|
// paint a frame with a stale, stretched bitmap.
|
|
108
|
-
// biome-ignore lint/correctness/useExhaustiveDependencies: themeVersion is a redraw trigger
|
|
108
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: themeVersion is a redraw trigger; the canvas re-resolves its token colors when the theme flips
|
|
109
109
|
useLayoutEffect(() => {
|
|
110
110
|
const canvas = canvasRef.current;
|
|
111
111
|
const container = containerRef.current;
|
|
@@ -167,7 +167,7 @@ export const Minimap = memo(function Minimap({ spans, root, viewport, minViewpor
|
|
|
167
167
|
return { mode: 'resize-right' };
|
|
168
168
|
}
|
|
169
169
|
// Panning a full-extent window is a no-op, so let a drag on the brush
|
|
170
|
-
// start a selection instead
|
|
170
|
+
// start a selection instead, the natural first gesture on the map.
|
|
171
171
|
const { start, end } = viewportRef.current;
|
|
172
172
|
const isFullExtent = start - rootStartMs < rootDurationMs * 0.001 &&
|
|
173
173
|
rootEndMs - end < rootDurationMs * 0.001;
|
|
@@ -334,4 +334,4 @@ export const Minimap = memo(function Minimap({ spans, root, viewport, minViewpor
|
|
|
334
334
|
// Glass thumb, matching the legacy trace viewer's map window.
|
|
335
335
|
'group/minimap-brush absolute top-0.5 bottom-0.5 rounded-[3px] border border-gray-alpha-400 bg-gray-alpha-200 shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-[var(--ds-focus-color)]', drag?.mode === 'pan' ? 'cursor-grabbing' : 'cursor-grab'), style: brushStyle, children: [_jsx("div", { "data-minimap-handle": "left", className: "absolute inset-y-0 -left-1 flex w-2.5 cursor-ew-resize items-center justify-center", children: _jsx("span", { className: cn('h-3.5 w-[3px] rounded-full bg-gray-600 opacity-0 transition-opacity group-hover/minimap-brush:opacity-100 group-focus-visible/minimap-brush:opacity-100', drag && 'opacity-100') }) }), _jsx("div", { "data-minimap-handle": "right", className: "absolute inset-y-0 -right-1 flex w-2.5 cursor-ew-resize items-center justify-center", children: _jsx("span", { className: cn('h-3.5 w-[3px] rounded-full bg-gray-600 opacity-0 transition-opacity group-hover/minimap-brush:opacity-100 group-focus-visible/minimap-brush:opacity-100', drag && 'opacity-100') }) })] })] }));
|
|
336
336
|
});
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL21pbmltYXAudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFHYixPQUFPLEVBQ0wsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsYUFBYSxFQUdiLGtCQUFrQixFQUNsQixvQkFBb0IsR0FDckIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELDhFQUE4RTtBQUM5RSxZQUFZO0FBQ1osOEVBQThFO0FBRTlFLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUMvQixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QiwwRUFBMEU7QUFDMUUsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFDbEMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsNkRBQTZEO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDOzs7O0dBSUc7QUFDSCxNQUFNLG9CQUFvQixHQUEyQjtJQUNuRCxHQUFHLEVBQUUsZUFBZTtJQUNwQixJQUFJLEVBQUUsZ0JBQWdCO0lBQ3RCLElBQUksRUFBRSxlQUFlO0lBQ3JCLEtBQUssRUFBRSxlQUFlO0NBQ3ZCLENBQUM7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eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgbWVtbyxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uLy4uL2xpYi9jbic7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvblByZWNpc2UsIGdldEhpZ2hSZXNJbk1zIH0gZnJvbSAnLi4vdXRpbC90aW1pbmcnO1xuaW1wb3J0IHtcbiAgY2xhbXBWaWV3cG9ydFRvUm9vdCxcbiAgaXNTcGFuRXJyb3JlZCxcbiAgdHlwZSBSb290Qm91bmRzLFxuICB0eXBlIFZpZXdwb3J0UmFuZ2UsXG4gIHdoZWVsRGVsdGFUb1BpeGVscyxcbiAgd2hlZWxab29tU2NhbGVGYWN0b3IsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFRJTUVMSU5FX1BBRERJTkdfUFggfSBmcm9tICcuL3RpbWVsaW5lJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb25zdGFudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBDQU5WQVNfUEFEX1lfUFggPSA2O1xuY29uc3QgTUlOX0xJTkVfSEVJR0hUX1BYID0gMS41O1xuY29uc3QgTUFYX0xJTkVfSEVJR0hUX1BYID0gMztcbmNvbnN0IE1JTl9MSU5FX1dJRFRIX1BYID0gMjtcbi8qKiBQb2ludGVyIHRyYXZlbCBiZWxvdyB0aGlzIGlzIHRyZWF0ZWQgYXMgYSBjbGljayByYXRoZXIgdGhhbiBhIGRyYWcuICovXG5jb25zdCBDTElDS19EUkFHX1RIUkVTSE9MRF9QWCA9IDM7XG5jb25zdCBNSU5fQlJVU0hfV0lEVEhfUFggPSA2O1xuLyoqIEZyYWN0aW9uIG9mIHRoZSBjdXJyZW50IHdpbmRvdyB0aGF0IGFycm93IGtleXMgcGFuIGJ5LiAqL1xuY29uc3QgS0VZQk9BUkRfUEFOX0ZSQUNUSU9OID0gMC4xO1xuXG4vKipcbiAqIExpbmUgY29sb3JzIHJlc29sdmVkIGZyb20gdGhlIGRlc2lnbi1zeXN0ZW0gdG9rZW5zIG9uIHRoZSBjb250YWluZXIsIHNvIHRoZVxuICogY2FudmFzIGZvbGxvd3MgdGhlIGFjdGl2ZSB0aGVtZS4gUnVucyBhbmQgc3RlcHMgY2FycnkgdGhlIGFjY2VudCBodWVzO1xuICogcGFzc2l2ZSBzcGFucyAoaG9va3MsIHNsZWVwcykgc3RheSBncmF5IGxpa2UgdGhlaXIgZXZlbnQtbGlzdCBpY29ucy5cbiAqL1xuY29uc3QgUkVTT1VSQ0VfTElORV9UT0tFTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHJ1bjogJy0tZHMtYmx1ZS00MDAnLFxuICBzdGVwOiAnLS1kcy1ncmVlbi00MDAnLFxuICBob29rOiAnLS1kcy1ncmF5LTQwMCcsXG4gIHNsZWVwOiAnLS1kcy1ncmF5LTQwMCcsXG59O1xuY29uc3QgREVGQVVMVF9MSU5FX1RPS0VOID0gJy0tZHMtZ3JheS00MDAnO1xuY29uc3QgRVJST1JfTElORV9UT0tFTiA9ICctLWRzLXJlZC00MDAnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlbnNpdHkgbGF5ZXIgZ2VvbWV0cnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgRGVuc2l0eUxheW91dCB7XG4gIGxpbmVIZWlnaHQ6IG51bWJlcjtcbiAgLyoqIFt4LCB5LCB3aWR0aF0gcmVjdHMgZ3JvdXBlZCBieSBjb2xvciB0b2tlbiwgb25lIGZpbGwgcGFzcyBwZXIgY29sb3IuICovXG4gIHJlY3RzQnlUb2tlbjogTWFwPHN0cmluZywgW251bWJlciwgbnVtYmVyLCBudW1iZXJdW10+O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVuc2l0eUxheW91dChcbiAgc3BhbnM6IFNwYW5bXSxcbiAgcm9vdFN0YXJ0TXM6IG51bWJlcixcbiAgcm9vdER1cmF0aW9uTXM6IG51bWJlcixcbiAgY29udGVudFdpZHRoOiBudW1iZXIsXG4gIGNvbnRlbnRIZWlnaHQ6IG51bWJlclxuKTogRGVuc2l0eUxheW91dCB7XG4gIGNvbnN0IGNvdW50ID0gc3BhbnMubGVuZ3RoO1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgTUlOX0xJTkVfSEVJR0hUX1BYLFxuICAgIE1hdGgubWluKE1BWF9MSU5FX0hFSUdIVF9QWCwgY29udGVudEhlaWdodCAvIGNvdW50KVxuICApO1xuICAvLyBEaXN0cmlidXRlIHJvd3MgYWNyb3NzIHRoZSBzdHJpcDsgbmV2ZXIgc3ByZWFkIGEgaGFuZGZ1bCBvZiBzcGFucyBmdXJ0aGVyXG4gIC8vIGFwYXJ0IHRoYW4gb25lIGxpbmUgKyAxcHggZ2FwLlxuICBjb25zdCByb3dTdGVwID1cbiAgICBjb3VudCA+IDFcbiAgICAgID8gTWF0aC5taW4oKGNvbnRlbnRIZWlnaHQgLSBsaW5lSGVpZ2h0KSAvIChjb3VudCAtIDEpLCBsaW5lSGVpZ2h0ICsgMSlcbiAgICAgIDogMDtcblxuICBjb25zdCByZWN0c0J5VG9rZW4gPSBuZXcgTWFwPHN0cmluZywgW251bWJlciwgbnVtYmVyLCBudW1iZXJdW10+KCk7XG4gIHNwYW5zLmZvckVhY2goKHNwYW4sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBpc1NwYW5FcnJvcmVkKHNwYW4pXG4gICAgICA/IEVSUk9SX0xJTkVfVE9LRU5cbiAgICAgIDogKFJFU09VUkNFX0xJTkVfVE9LRU5TW3NwYW4ucmVzb3VyY2VdID8/IERFRkFVTFRfTElORV9UT0tFTik7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgICBjb25zdCBlbmRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZW5kVGltZSk7XG4gICAgY29uc3QgeCA9XG4gICAgICBUSU1FTElORV9QQURESU5HX1BYICtcbiAgICAgICgoc3RhcnRNcyAtIHJvb3RTdGFydE1zKSAvIHJvb3REdXJhdGlvbk1zKSAqIGNvbnRlbnRXaWR0aDtcbiAgICBjb25zdCB3ID0gTWF0aC5tYXgoXG4gICAgICBNSU5fTElORV9XSURUSF9QWCxcbiAgICAgICgoZW5kTXMgLSBzdGFydE1zKSAvIHJvb3REdXJhdGlvbk1zKSAqIGNvbnRlbnRXaWR0aFxuICAgICk7XG4gICAgY29uc3QgeSA9IENBTlZBU19QQURfWV9QWCArIGluZGV4ICogcm93U3RlcDtcbiAgICBjb25zdCByZWN0cyA9IHJlY3RzQnlUb2tlbi5nZXQodG9rZW4pID8/IFtdO1xuICAgIHJlY3RzLnB1c2goW3gsIHksIHddKTtcbiAgICByZWN0c0J5VG9rZW4uc2V0KHRva2VuLCByZWN0cyk7XG4gIH0pO1xuXG4gIHJldHVybiB7IGxpbmVIZWlnaHQsIHJlY3RzQnlUb2tlbiB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhvb2tzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFRyYWNrIHRoZSBkaXNwbGF5J3MgZGV2aWNlIHBpeGVsIHJhdGlvIChjaGFuZ2VzIHdoZW4gbW92aW5nIG1vbml0b3JzKS4gKi9cbmZ1bmN0aW9uIHVzZURwcigpOiBudW1iZXIge1xuICBjb25zdCBbZHByLCBzZXREcHJdID0gdXNlU3RhdGUoMSk7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKTogdm9pZCA9PiBzZXREcHIod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSk7XG4gICAgY29uc3QgbWVkaWEgPSBtYXRjaE1lZGlhKGAocmVzb2x1dGlvbjogJHtkcHJ9ZHBweClgKTtcbiAgICBtZWRpYS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgb25DaGFuZ2UoKTtcbiAgICByZXR1cm4gKCkgPT4gbWVkaWEucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25DaGFuZ2UpO1xuICB9LCBbZHByXSk7XG4gIHJldHVybiBkcHI7XG59XG5cbi8qKiBCdW1wIGEgY291bnRlciB3aGVuIHRoZSB0aGVtZSAoaHRtbCBjbGFzcy9kYXRhLXRoZW1lKSBjaGFuZ2VzLiAqL1xuZnVuY3Rpb24gdXNlVGhlbWVWZXJzaW9uKCk6IG51bWJlciB7XG4gIGNvbnN0IFt2ZXJzaW9uLCBzZXRWZXJzaW9uXSA9IHVzZVN0YXRlKDApO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gc2V0VmVyc2lvbigodikgPT4gdiArIDEpKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcycsICdkYXRhLXRoZW1lJywgJ3N0eWxlJ10sXG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSwgW10pO1xuICByZXR1cm4gdmVyc2lvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNaW5pbWFwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBEcmFnU3RhdGUgPVxuICB8IHsgbW9kZTogJ3Bhbic7IGdyYWJPZmZzZXRNczogbnVtYmVyIH1cbiAgfCB7IG1vZGU6ICdyZXNpemUtbGVmdCcgfVxuICB8IHsgbW9kZTogJ3Jlc2l6ZS1yaWdodCcgfVxuICB8IHsgbW9kZTogJ3NlbGVjdCc7IG9yaWdpblg6IG51bWJlcjsgb3JpZ2luTXM6IG51bWJlciB9O1xuXG5leHBvcnQgY29uc3QgTWluaW1hcCA9IG1lbW8oZnVuY3Rpb24gTWluaW1hcCh7XG4gIHNwYW5zLFxuICByb290LFxuICB2aWV3cG9ydCxcbiAgbWluVmlld3BvcnRNcyxcbiAgb25WaWV3cG9ydENoYW5nZSxcbiAgb25BbmltYXRlVG8sXG59OiB7XG4gIHNwYW5zOiBTcGFuW107XG4gIHJvb3Q6IFJvb3RCb3VuZHM7XG4gIHZpZXdwb3J0OiBWaWV3cG9ydFJhbmdlO1xuICBtaW5WaWV3cG9ydE1zOiBudW1iZXI7XG4gIC8qKiBJbW1lZGlhdGUgdmlld3BvcnQgdXBkYXRlICh1c2VkIHdoaWxlIGRyYWdnaW5nKS4gKi9cbiAgb25WaWV3cG9ydENoYW5nZTogKHZpZXdwb3J0OiBWaWV3cG9ydFJhbmdlKSA9PiB2b2lkO1xuICAvKiogRWFzZWQgdmlld3BvcnQgdHJhbnNpdGlvbiAodXNlZCBmb3IgY2xpY2stdG8tanVtcCBhbmQgc2VsZWN0aW9ucykuICovXG4gIG9uQW5pbWF0ZVRvOiAodmlld3BvcnQ6IFZpZXdwb3J0UmFuZ2UpID0+IHZvaWQ7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3Qge1xuICAgIHN0YXJ0VGltZTogcm9vdFN0YXJ0TXMsXG4gICAgZW5kVGltZTogcm9vdEVuZE1zLFxuICAgIGR1cmF0aW9uOiByb290RHVyYXRpb25NcyxcbiAgfSA9IHJvb3Q7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgY2FudmFzUmVmID0gdXNlUmVmPEhUTUxDYW52YXNFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZHByID0gdXNlRHByKCk7XG4gIGNvbnN0IHRoZW1lVmVyc2lvbiA9IHVzZVRoZW1lVmVyc2lvbigpO1xuXG4gIC8vIExhdGVzdCB2aWV3cG9ydCBmb3IgcG9pbnRlciBoYW5kbGVycywgd2l0aG91dCByZS1iaW5kaW5nIHRoZW0gcGVyIGZyYW1lLlxuICBjb25zdCB2aWV3cG9ydFJlZiA9IHVzZVJlZjxWaWV3cG9ydFJhbmdlPih2aWV3cG9ydCk7XG4gIHZpZXdwb3J0UmVmLmN1cnJlbnQgPSB2aWV3cG9ydDtcblxuICBjb25zdCBbZHJhZywgc2V0RHJhZ10gPSB1c2VTdGF0ZTxEcmFnU3RhdGUgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NlbGVjdGlvbiwgc2V0U2VsZWN0aW9uXSA9IHVzZVN0YXRlPHsgeDA6IG51bWJlcjsgeDE6IG51bWJlciB9IHwgbnVsbD4oXG4gICAgbnVsbFxuICApO1xuXG4gIGNvbnN0IHhUb1RpbWUgPSB1c2VDYWxsYmFjayhcbiAgICAoeDogbnVtYmVyLCBjb250ZW50V2lkdGg6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybiByb290U3RhcnRNcztcbiAgICAgIGNvbnN0IGZyYWN0aW9uID0gKHggLSBUSU1FTElORV9QQURESU5HX1BYKSAvIGNvbnRlbnRXaWR0aDtcbiAgICAgIHJldHVybiBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5tYXgocm9vdFN0YXJ0TXMgKyBmcmFjdGlvbiAqIHJvb3REdXJhdGlvbk1zLCByb290U3RhcnRNcyksXG4gICAgICAgIHJvb3RFbmRNc1xuICAgICAgKTtcbiAgICB9LFxuICAgIFtyb290U3RhcnRNcywgcm9vdER1cmF0aW9uTXMsIHJvb3RFbmRNc11cbiAgKTtcblxuICBjb25zdCBjbGFtcCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBWaWV3cG9ydFJhbmdlKTogVmlld3BvcnRSYW5nZSA9PlxuICAgICAgY2xhbXBWaWV3cG9ydFRvUm9vdChuZXh0LCByb290U3RhcnRNcywgcm9vdEVuZE1zLCBtaW5WaWV3cG9ydE1zKSxcbiAgICBbcm9vdFN0YXJ0TXMsIHJvb3RFbmRNcywgbWluVmlld3BvcnRNc11cbiAgKTtcblxuICAvLyBEZW5zaXR5IGNhbnZhczogb25lIHRoaW4gbGluZSBwZXIgc3BhbiBhY3Jvc3MgdGhlIGZ1bGwgcnVuLiBTaXppbmcgaXNcbiAgLy8gcmVhZCBsaXZlIGFuZCByZWRyYXdzIHJ1biBzdHJhaWdodCBmcm9tIHRoZSBSZXNpemVPYnNlcnZlciAod2hpY2ggZmlyZXNcbiAgLy8gYmVmb3JlIHBhaW50KSwgc28gbGF5b3V0IGNoYW5nZXMg4oCUIGUuZy4gdGhlIGRldGFpbCBwYW5lbCBvcGVuaW5nIOKAlCBuZXZlclxuICAvLyBwYWludCBhIGZyYW1lIHdpdGggYSBzdGFsZSwgc3RyZXRjaGVkIGJpdG1hcC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29ycmVjdG5lc3MvdXNlRXhoYXVzdGl2ZURlcGVuZGVuY2llczogdGhlbWVWZXJzaW9uIGlzIGEgcmVkcmF3IHRyaWdnZXIg4oCUIHRoZSBjYW52YXMgcmUtcmVzb2x2ZXMgaXRzIHRva2VuIGNvbG9ycyB3aGVuIHRoZSB0aGVtZSBmbGlwc1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNhbnZhcyA9IGNhbnZhc1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcz8uZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBpZiAoIWNhbnZhcyB8fCAhY29udGFpbmVyIHx8ICFjdHgpIHJldHVybjtcblxuICAgIGNvbnN0IGRyYXcgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSB3aWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyO1xuICAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcblxuICAgICAgY2FudmFzLndpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIGRwcik7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBkcHIpO1xuICAgICAgY3R4LnNjYWxlKGRwciwgZHByKTtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBpZiAoc3BhbnMubGVuZ3RoID09PSAwIHx8IHJvb3REdXJhdGlvbk1zIDw9IDApIHJldHVybjtcblxuICAgICAgY29uc3QgeyBsaW5lSGVpZ2h0LCByZWN0c0J5VG9rZW4gfSA9IGNvbXB1dGVEZW5zaXR5TGF5b3V0KFxuICAgICAgICBzcGFucyxcbiAgICAgICAgcm9vdFN0YXJ0TXMsXG4gICAgICAgIHJvb3REdXJhdGlvbk1zLFxuICAgICAgICBjb250ZW50V2lkdGgsXG4gICAgICAgIGhlaWdodCAtIENBTlZBU19QQURfWV9QWCAqIDJcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICAgICAgY29uc3QgZHJhd1Rva2VuID0gKHRva2VuOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgcmVjdHMgPSByZWN0c0J5VG9rZW4uZ2V0KHRva2VuKTtcbiAgICAgICAgaWYgKCFyZWN0cykgcmV0dXJuO1xuICAgICAgICBjdHguZmlsbFN0eWxlID1cbiAgICAgICAgICBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRva2VuKS50cmltKCkgfHwgJ3JnYigxNjAsMTYwLDE2MCknO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGZvciAoY29uc3QgW3gsIHksIHddIG9mIHJlY3RzKSB7XG4gICAgICAgICAgY3R4LnJvdW5kUmVjdCh4LCB5LCB3LCBsaW5lSGVpZ2h0LCBsaW5lSGVpZ2h0IC8gMik7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgIH07XG4gICAgICAvLyBFcnJvcmVkIHNwYW5zIGFyZSBkcmF3biBsYXN0IHNvIHJlZCBuZXZlciBkaXNhcHBlYXJzIHVuZGVyIG5laWdoYm9ycy5cbiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmVjdHNCeVRva2VuLmtleXMoKSkge1xuICAgICAgICBpZiAodG9rZW4gIT09IEVSUk9SX0xJTkVfVE9LRU4pIGRyYXdUb2tlbih0b2tlbik7XG4gICAgICB9XG4gICAgICBkcmF3VG9rZW4oRVJST1JfTElORV9UT0tFTik7XG4gICAgfTtcblxuICAgIGRyYXcoKTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihkcmF3KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7XG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSwgW3NwYW5zLCByb290U3RhcnRNcywgcm9vdER1cmF0aW9uTXMsIGRwciwgdGhlbWVWZXJzaW9uXSk7XG5cbiAgLy8gQ29udGVudCB3aWR0aCBpcyByZWFkIGZyb20gdGhlIGxpdmUgcmVjdCBhdCBldmVudCB0aW1lLCBzbyBwb2ludGVyIG1hdGhcbiAgLy8gc3RheXMgZXhhY3Qgd2hpbGUgdGhlIHN0cmlwIGlzIGJlaW5nIHJlc2l6ZWQgbWlkLWdlc3R1cmUuXG4gIGNvbnN0IHBvaW50ZXJGcmFtZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KTogeyB4OiBudW1iZXI7IGN3OiBudW1iZXIgfSA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gZS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogZS5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgICBjdzogcmVjdC53aWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyLFxuICAgICAgfTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgcmVzb2x2ZURyYWdTdGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0YXJnZXQ6IEhUTUxFbGVtZW50LCB4OiBudW1iZXIsIGN3OiBudW1iZXIpOiBEcmFnU3RhdGUgPT4ge1xuICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCdbZGF0YS1taW5pbWFwLWhhbmRsZT1cImxlZnRcIl0nKSkge1xuICAgICAgICByZXR1cm4geyBtb2RlOiAncmVzaXplLWxlZnQnIH07XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLW1pbmltYXAtaGFuZGxlPVwicmlnaHRcIl0nKSkge1xuICAgICAgICByZXR1cm4geyBtb2RlOiAncmVzaXplLXJpZ2h0JyB9O1xuICAgICAgfVxuICAgICAgLy8gUGFubmluZyBhIGZ1bGwtZXh0ZW50IHdpbmRvdyBpcyBhIG5vLW9wLCBzbyBsZXQgYSBkcmFnIG9uIHRoZSBicnVzaFxuICAgICAgLy8gc3RhcnQgYSBzZWxlY3Rpb24gaW5zdGVhZCDigJQgdGhlIG5hdHVyYWwgZmlyc3QgZ2VzdHVyZSBvbiB0aGUgbWFwLlxuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgaXNGdWxsRXh0ZW50ID1cbiAgICAgICAgc3RhcnQgLSByb290U3RhcnRNcyA8IHJvb3REdXJhdGlvbk1zICogMC4wMDEgJiZcbiAgICAgICAgcm9vdEVuZE1zIC0gZW5kIDwgcm9vdER1cmF0aW9uTXMgKiAwLjAwMTtcbiAgICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnW2RhdGEtbWluaW1hcC1icnVzaF0nKSAmJiAhaXNGdWxsRXh0ZW50KSB7XG4gICAgICAgIHJldHVybiB7IG1vZGU6ICdwYW4nLCBncmFiT2Zmc2V0TXM6IHhUb1RpbWUoeCwgY3cpIC0gc3RhcnQgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG1vZGU6ICdzZWxlY3QnLCBvcmlnaW5YOiB4LCBvcmlnaW5NczogeFRvVGltZSh4LCBjdykgfTtcbiAgICB9LFxuICAgIFt4VG9UaW1lLCByb290U3RhcnRNcywgcm9vdER1cmF0aW9uTXMsIHJvb3RFbmRNc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyRG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjtcbiAgICAgIGNvbnN0IHsgeCwgY3cgfSA9IHBvaW50ZXJGcmFtZShlKTtcbiAgICAgIGlmIChjdyA8PSAwKSByZXR1cm47XG4gICAgICBlLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgc2V0RHJhZyhyZXNvbHZlRHJhZ1N0YXRlKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50LCB4LCBjdykpO1xuICAgIH0sXG4gICAgW3BvaW50ZXJGcmFtZSwgcmVzb2x2ZURyYWdTdGF0ZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWRyYWcpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgeCwgY3cgfSA9IHBvaW50ZXJGcmFtZShlKTtcbiAgICAgIGNvbnN0IHQgPSB4VG9UaW1lKHgsIGN3KTtcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdmlld3BvcnRSZWYuY3VycmVudDtcblxuICAgICAgaWYgKGRyYWcubW9kZSA9PT0gJ3BhbicpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZShcbiAgICAgICAgICBjbGFtcCh7XG4gICAgICAgICAgICBzdGFydDogdCAtIGRyYWcuZ3JhYk9mZnNldE1zLFxuICAgICAgICAgICAgZW5kOiB0IC0gZHJhZy5ncmFiT2Zmc2V0TXMgKyBkdXJhdGlvbixcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChkcmFnLm1vZGUgPT09ICdyZXNpemUtbGVmdCcpIHtcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZSh7IHN0YXJ0OiBNYXRoLm1pbih0LCBlbmQgLSBtaW5WaWV3cG9ydE1zKSwgZW5kIH0pO1xuICAgICAgfSBlbHNlIGlmIChkcmFnLm1vZGUgPT09ICdyZXNpemUtcmlnaHQnKSB7XG4gICAgICAgIG9uVmlld3BvcnRDaGFuZ2UoeyBzdGFydCwgZW5kOiBNYXRoLm1heCh0LCBzdGFydCArIG1pblZpZXdwb3J0TXMpIH0pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc2VsZWN0aW9uIHx8XG4gICAgICAgIE1hdGguYWJzKHggLSBkcmFnLm9yaWdpblgpID4gQ0xJQ0tfRFJBR19USFJFU0hPTERfUFhcbiAgICAgICkge1xuICAgICAgICBzZXRTZWxlY3Rpb24oe1xuICAgICAgICAgIHgwOiBNYXRoLm1pbihkcmFnLm9yaWdpblgsIHgpLFxuICAgICAgICAgIHgxOiBNYXRoLm1heChkcmFnLm9yaWdpblgsIHgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGRyYWcsXG4gICAgICBzZWxlY3Rpb24sXG4gICAgICBwb2ludGVyRnJhbWUsXG4gICAgICB4VG9UaW1lLFxuICAgICAgb25WaWV3cG9ydENoYW5nZSxcbiAgICAgIGNsYW1wLFxuICAgICAgbWluVmlld3BvcnRNcyxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgZW5kRHJhZyA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWRyYWcpIHJldHVybjtcbiAgICAgIGlmIChkcmFnLm1vZGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgY3cgfSA9IHBvaW50ZXJGcmFtZShlKTtcbiAgICAgICAgY29uc3QgdCA9IHhUb1RpbWUoeCwgY3cpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgb25BbmltYXRlVG8oXG4gICAgICAgICAgICBjbGFtcCh7XG4gICAgICAgICAgICAgIHN0YXJ0OiBNYXRoLm1pbihkcmFnLm9yaWdpbk1zLCB0KSxcbiAgICAgICAgICAgICAgZW5kOiBNYXRoLm1heChkcmFnLm9yaWdpbk1zLCB0KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQbGFpbiBjbGljazoga2VlcCB0aGUgY3VycmVudCB6b29tLCBjZW50ZXIgdGhlIHdpbmRvdyB0aGVyZS5cbiAgICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgICAgICBvbkFuaW1hdGVUbyhcbiAgICAgICAgICAgIGNsYW1wKHsgc3RhcnQ6IHQgLSBkdXJhdGlvbiAvIDIsIGVuZDogdCArIGR1cmF0aW9uIC8gMiB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGlvbihudWxsKTtcbiAgICAgIHNldERyYWcobnVsbCk7XG4gICAgfSxcbiAgICBbZHJhZywgc2VsZWN0aW9uLCBwb2ludGVyRnJhbWUsIHhUb1RpbWUsIG9uQW5pbWF0ZVRvLCBjbGFtcF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVMb3N0UG9pbnRlckNhcHR1cmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VsZWN0aW9uKG51bGwpO1xuICAgIHNldERyYWcobnVsbCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVEb3VibGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkFuaW1hdGVUbyh7IHN0YXJ0OiByb290U3RhcnRNcywgZW5kOiByb290RW5kTXMgfSk7XG4gIH0sIFtvbkFuaW1hdGVUbywgcm9vdFN0YXJ0TXMsIHJvb3RFbmRNc10pO1xuXG4gIC8vIFdoZWVsOiBzYW1lIGdlc3R1cmVzIGFzIHRoZSB0aW1lbGluZSwgbWFwcGVkIHRocm91Z2ggdGhlIGZ1bGwgZXh0ZW50LlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCB8fCByb290RHVyYXRpb25NcyA8PSAwKSByZXR1cm47XG5cbiAgICAvLyBUaGUgbWluaW1hcCdzIHggYXhpcyBpcyB0aGUgZnVsbCBydW4sIHNvIHpvb20gYXJvdW5kIHRoZSBhYnNvbHV0ZSB0aW1lXG4gICAgLy8gdW5kZXIgdGhlIGN1cnNvciByYXRoZXIgdGhhbiBhIHZpZXdwb3J0IGZyYWN0aW9uLlxuICAgIGNvbnN0IHpvb21BdEN1cnNvciA9IChlOiBXaGVlbEV2ZW50LCBjdzogbnVtYmVyLCBsZWZ0OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHNjYWxlRmFjdG9yID0gd2hlZWxab29tU2NhbGVGYWN0b3IoZSk7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGVuZCAtIHN0YXJ0O1xuICAgICAgY29uc3QgY3Vyc29yRnJhY3Rpb24gPSBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5tYXgoKGUuY2xpZW50WCAtIGxlZnQgLSBUSU1FTElORV9QQURESU5HX1BYKSAvIGN3LCAwKSxcbiAgICAgICAgMVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGN1cnNvck1zID0gcm9vdFN0YXJ0TXMgKyBjdXJzb3JGcmFjdGlvbiAqIHJvb3REdXJhdGlvbk1zO1xuICAgICAgY29uc3QgYW5jaG9yID0gTWF0aC5taW4oXG4gICAgICAgIE1hdGgubWF4KGR1cmF0aW9uID4gMCA/IChjdXJzb3JNcyAtIHN0YXJ0KSAvIGR1cmF0aW9uIDogMC41LCAwKSxcbiAgICAgICAgMVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gZHVyYXRpb24gKiBzY2FsZUZhY3RvcjtcbiAgICAgIG9uVmlld3BvcnRDaGFuZ2UoXG4gICAgICAgIGNsYW1wKHtcbiAgICAgICAgICBzdGFydDogY3Vyc29yTXMgLSBhbmNob3IgKiBuZXdEdXJhdGlvbixcbiAgICAgICAgICBlbmQ6IGN1cnNvck1zICsgKDEgLSBhbmNob3IpICogbmV3RHVyYXRpb24sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvLyBQYW4gaW4gbWFwIGNvb3JkaW5hdGVzOiBvbmUgbWFwIHBpeGVsIGlzIG9uZSBmdWxsLWV4dGVudCBmcmFjdGlvbi5cbiAgICBjb25zdCBwYW5CeU1hcFBpeGVscyA9IChlOiBXaGVlbEV2ZW50LCBjdzogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBkeCA9IHdoZWVsRGVsdGFUb1BpeGVscyhlLmRlbHRhWCwgZS5kZWx0YU1vZGUpO1xuICAgICAgY29uc3QgcGFuTXMgPSAoZHggLyBjdykgKiByb290RHVyYXRpb25NcztcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdmlld3BvcnRSZWYuY3VycmVudDtcbiAgICAgIG9uVmlld3BvcnRDaGFuZ2UoY2xhbXAoeyBzdGFydDogc3RhcnQgKyBwYW5NcywgZW5kOiBlbmQgKyBwYW5NcyB9KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uV2hlZWwgPSAoZTogV2hlZWxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNab29tR2VzdHVyZSA9IGUuY3RybEtleSB8fCBlLm1ldGFLZXk7XG4gICAgICBjb25zdCBoYXNEZWx0YVggPSBNYXRoLmFicyhlLmRlbHRhWCkgPiBNYXRoLmFicyhlLmRlbHRhWSk7XG4gICAgICBpZiAoIWlzWm9vbUdlc3R1cmUgJiYgIWhhc0RlbHRhWCkgcmV0dXJuO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjdyA9IHJlY3Qud2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMjtcbiAgICAgIGlmIChjdyA8PSAwKSByZXR1cm47XG4gICAgICBpZiAoaXNab29tR2VzdHVyZSkgem9vbUF0Q3Vyc29yKGUsIGN3LCByZWN0LmxlZnQpO1xuICAgICAgZWxzZSBwYW5CeU1hcFBpeGVscyhlLCBjdyk7XG4gICAgfTtcblxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICByZXR1cm4gKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsKTtcbiAgfSwgW3Jvb3RTdGFydE1zLCByb290RHVyYXRpb25Ncywgb25WaWV3cG9ydENoYW5nZSwgY2xhbXBdKTtcblxuICAvLyBBcnJvdyBrZXlzIHBhbiB0aGUgZm9jdXNlZCBicnVzaDsgSG9tZS9FbmQganVtcCB0byB0aGUgZW5kcy5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgIGNvbnN0IHBhbiA9IGR1cmF0aW9uICogS0VZQk9BUkRfUEFOX0ZSQUNUSU9OO1xuICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICBvblZpZXdwb3J0Q2hhbmdlKGNsYW1wKHsgc3RhcnQ6IHN0YXJ0IC0gcGFuLCBlbmQ6IGVuZCAtIHBhbiB9KSk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZShjbGFtcCh7IHN0YXJ0OiBzdGFydCArIHBhbiwgZW5kOiBlbmQgKyBwYW4gfSkpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICAgIG9uVmlld3BvcnRDaGFuZ2UoXG4gICAgICAgICAgY2xhbXAoeyBzdGFydDogcm9vdFN0YXJ0TXMsIGVuZDogcm9vdFN0YXJ0TXMgKyBkdXJhdGlvbiB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZShcbiAgICAgICAgICBjbGFtcCh7IHN0YXJ0OiByb290RW5kTXMgLSBkdXJhdGlvbiwgZW5kOiByb290RW5kTXMgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9LFxuICAgIFtvblZpZXdwb3J0Q2hhbmdlLCBjbGFtcCwgcm9vdFN0YXJ0TXMsIHJvb3RFbmRNc11cbiAgKTtcblxuICAvLyBCcnVzaCBnZW9tZXRyeSBpbiBDU1MgY2FsYygpIGZyb20gdGltZSBmcmFjdGlvbnMsIHNvIHRoZSB0aHVtYiByZWZsb3dzIGluXG4gIC8vIHRoZSBzYW1lIGZyYW1lIGFzIGFueSBjb250YWluZXIgcmVzaXplIGluc3RlYWQgb2YgbGFnZ2luZyBhIHN0YXRlIHVwZGF0ZS5cbiAgY29uc3Qgc3RhcnRGcmFjdGlvbiA9ICh2aWV3cG9ydC5zdGFydCAtIHJvb3RTdGFydE1zKSAvIHJvb3REdXJhdGlvbk1zO1xuICBjb25zdCBlbmRGcmFjdGlvbiA9ICh2aWV3cG9ydC5lbmQgLSByb290U3RhcnRNcykgLyByb290RHVyYXRpb25NcztcbiAgY29uc3QgdHJhY2tXaWR0aCA9IGAoMTAwJSAtICR7VElNRUxJTkVfUEFERElOR19QWCAqIDJ9cHgpYDtcbiAgY29uc3QgYnJ1c2hTdHlsZSA9IHtcbiAgICBsZWZ0OiBgY2FsYygke1RJTUVMSU5FX1BBRERJTkdfUFh9cHggKyAke3N0YXJ0RnJhY3Rpb259ICogJHt0cmFja1dpZHRofSlgLFxuICAgIHdpZHRoOiBgbWF4KCR7TUlOX0JSVVNIX1dJRFRIX1BYfXB4LCBjYWxjKCR7XG4gICAgICBlbmRGcmFjdGlvbiAtIHN0YXJ0RnJhY3Rpb25cbiAgICB9ICogJHt0cmFja1dpZHRofSkpYCxcbiAgfTtcblxuICBjb25zdCB2aWV3RHVyYXRpb24gPSB2aWV3cG9ydC5lbmQgLSB2aWV3cG9ydC5zdGFydDtcbiAgY29uc3Qgc2Nyb2xsYWJsZU1zID0gTWF0aC5tYXgocm9vdER1cmF0aW9uTXMgLSB2aWV3RHVyYXRpb24sIDApO1xuICBjb25zdCBzY3JvbGxQZXJjZW50ID1cbiAgICBzY3JvbGxhYmxlTXMgPiAwXG4gICAgICA/IE1hdGgucm91bmQoKCh2aWV3cG9ydC5zdGFydCAtIHJvb3RTdGFydE1zKSAvIHNjcm9sbGFibGVNcykgKiAxMDApXG4gICAgICA6IDA7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogcG9pbnRlciBnZXN0dXJlcyBhcmUgYSBtb3VzZS1vbmx5IGVuaGFuY2VtZW50OyB0aGUgYnJ1c2ggaW5zaWRlIGlzIGtleWJvYXJkLW9wZXJhYmxlXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncmVsYXRpdmUgaC0xMCBtaW4taC0xMCB3LWZ1bGwgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWJhY2tncm91bmQtMTAwIHNlbGVjdC1ub25lIG92ZXJmbG93LWhpZGRlbiB0b3VjaC1ub25lJyxcbiAgICAgICAgZHJhZz8ubW9kZSA9PT0gJ3NlbGVjdCcgJiYgJ2N1cnNvci1jcm9zc2hhaXInXG4gICAgICApfVxuICAgICAgb25Qb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICBvblBvaW50ZXJNb3ZlPXtoYW5kbGVQb2ludGVyTW92ZX1cbiAgICAgIG9uUG9pbnRlclVwPXtlbmREcmFnfVxuICAgICAgb25Qb2ludGVyQ2FuY2VsPXtlbmREcmFnfVxuICAgICAgb25Mb3N0UG9pbnRlckNhcHR1cmU9e2hhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZX1cbiAgICAgIG9uRG91YmxlQ2xpY2s9e2hhbmRsZURvdWJsZUNsaWNrfVxuICAgID5cbiAgICAgIHsvKiBNdWx0aXBseSBvbiBsaWdodCB0aGVtZXMgLyBzY3JlZW4gb24gZGFyaywgc28gb3ZlcmxhcHBpbmcgc3BhbiBsaW5lc1xuICAgICAgICAgIGRlZXBlbiBpbnN0ZWFkIG9mIG9jY2x1ZGluZyBhbmQgdGhlIGdsYXNzIHRodW1iIHJlYWRzIHRocm91Z2ggdGhlbS4gKi99XG4gICAgICA8Y2FudmFzXG4gICAgICAgIHJlZj17Y2FudmFzUmVmfVxuICAgICAgICBhcmlhLWhpZGRlblxuICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgaC1mdWxsIHctZnVsbCBtaXgtYmxlbmQtbXVsdGlwbHkgWy5kYXJrLXRoZW1lXyZdOm1peC1ibGVuZC1zY3JlZW4gWy5kYXJrXyZdOm1peC1ibGVuZC1zY3JlZW4gW1tkYXRhLXRoZW1lPWRhcmtdXyZdOm1peC1ibGVuZC1zY3JlZW5cIlxuICAgICAgLz5cbiAgICAgIHtzZWxlY3Rpb24gPyAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBhcmlhLWhpZGRlblxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQteS0wIGJvcmRlciBib3JkZXItYmx1ZS01MDAgYmctYmx1ZS0zMDAgb3BhY2l0eS00MFwiXG4gICAgICAgICAgc3R5bGU9e3sgbGVmdDogc2VsZWN0aW9uLngwLCB3aWR0aDogc2VsZWN0aW9uLngxIC0gc2VsZWN0aW9uLngwIH19XG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS1taW5pbWFwLWJydXNoXG4gICAgICAgIHJvbGU9XCJzY3JvbGxiYXJcIlxuICAgICAgICBhcmlhLWNvbnRyb2xzPVwidHJhY2UtdGltZWxpbmVcIlxuICAgICAgICBhcmlhLW9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGFyaWEtdmFsdWVtaW49ezB9XG4gICAgICAgIGFyaWEtdmFsdWVtYXg9ezEwMH1cbiAgICAgICAgYXJpYS12YWx1ZW5vdz17c2Nyb2xsUGVyY2VudH1cbiAgICAgICAgYXJpYS12YWx1ZXRleHQ9e2BWaWV3aW5nICR7Zm9ybWF0RHVyYXRpb25QcmVjaXNlKFxuICAgICAgICAgIHZpZXdwb3J0LnN0YXJ0IC0gcm9vdFN0YXJ0TXNcbiAgICAgICAgKX0gdG8gJHtmb3JtYXREdXJhdGlvblByZWNpc2UoXG4gICAgICAgICAgdmlld3BvcnQuZW5kIC0gcm9vdFN0YXJ0TXNcbiAgICAgICAgKX0gb2YgJHtmb3JtYXREdXJhdGlvblByZWNpc2Uocm9vdER1cmF0aW9uTXMpfWB9XG4gICAgICAgIGFyaWEtbGFiZWw9XCJUaW1lbGluZSBvdmVydmlld1wiXG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgLy8gR2xhc3MgdGh1bWIsIG1hdGNoaW5nIHRoZSBsZWdhY3kgdHJhY2Ugdmlld2VyJ3MgbWFwIHdpbmRvdy5cbiAgICAgICAgICAnZ3JvdXAvbWluaW1hcC1icnVzaCBhYnNvbHV0ZSB0b3AtMC41IGJvdHRvbS0wLjUgcm91bmRlZC1bM3B4XSBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWdyYXktYWxwaGEtMjAwIHNoYWRvdy1zbSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTotb3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtW3ZhcigtLWRzLWZvY3VzLWNvbG9yKV0nLFxuICAgICAgICAgIGRyYWc/Lm1vZGUgPT09ICdwYW4nID8gJ2N1cnNvci1ncmFiYmluZycgOiAnY3Vyc29yLWdyYWInXG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXticnVzaFN0eWxlfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1taW5pbWFwLWhhbmRsZT1cImxlZnRcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXktMCAtbGVmdC0xIGZsZXggdy0yLjUgY3Vyc29yLWV3LXJlc2l6ZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdoLTMuNSB3LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1ncmF5LTYwMCBvcGFjaXR5LTAgdHJhbnNpdGlvbi1vcGFjaXR5IGdyb3VwLWhvdmVyL21pbmltYXAtYnJ1c2g6b3BhY2l0eS0xMDAgZ3JvdXAtZm9jdXMtdmlzaWJsZS9taW5pbWFwLWJydXNoOm9wYWNpdHktMTAwJyxcbiAgICAgICAgICAgICAgZHJhZyAmJiAnb3BhY2l0eS0xMDAnXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1taW5pbWFwLWhhbmRsZT1cInJpZ2h0XCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTAgLXJpZ2h0LTEgZmxleCB3LTIuNSBjdXJzb3ItZXctcmVzaXplIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2gtMy41IHctWzNweF0gcm91bmRlZC1mdWxsIGJnLWdyYXktNjAwIG9wYWNpdHktMCB0cmFuc2l0aW9uLW9wYWNpdHkgZ3JvdXAtaG92ZXIvbWluaW1hcC1icnVzaDpvcGFjaXR5LTEwMCBncm91cC1mb2N1cy12aXNpYmxlL21pbmltYXAtYnJ1c2g6b3BhY2l0eS0xMDAnLFxuICAgICAgICAgICAgICBkcmFnICYmICdvcGFjaXR5LTEwMCdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuIl19
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL21pbmltYXAudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFHYixPQUFPLEVBQ0wsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsYUFBYSxFQUdiLGtCQUFrQixFQUNsQixvQkFBb0IsR0FDckIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELDhFQUE4RTtBQUM5RSxZQUFZO0FBQ1osOEVBQThFO0FBRTlFLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUMvQixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QiwwRUFBMEU7QUFDMUUsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFDbEMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsNkRBQTZEO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDOzs7O0dBSUc7QUFDSCxNQUFNLG9CQUFvQixHQUEyQjtJQUNuRCxHQUFHLEVBQUUsZUFBZTtJQUNwQixJQUFJLEVBQUUsZ0JBQWdCO0lBQ3RCLElBQUksRUFBRSxlQUFlO0lBQ3JCLEtBQUssRUFBRSxlQUFlO0NBQ3ZCLENBQUM7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eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgbWVtbyxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uLy4uL2xpYi9jbic7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvblByZWNpc2UsIGdldEhpZ2hSZXNJbk1zIH0gZnJvbSAnLi4vdXRpbC90aW1pbmcnO1xuaW1wb3J0IHtcbiAgY2xhbXBWaWV3cG9ydFRvUm9vdCxcbiAgaXNTcGFuRXJyb3JlZCxcbiAgdHlwZSBSb290Qm91bmRzLFxuICB0eXBlIFZpZXdwb3J0UmFuZ2UsXG4gIHdoZWVsRGVsdGFUb1BpeGVscyxcbiAgd2hlZWxab29tU2NhbGVGYWN0b3IsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFRJTUVMSU5FX1BBRERJTkdfUFggfSBmcm9tICcuL3RpbWVsaW5lJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb25zdGFudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBDQU5WQVNfUEFEX1lfUFggPSA2O1xuY29uc3QgTUlOX0xJTkVfSEVJR0hUX1BYID0gMS41O1xuY29uc3QgTUFYX0xJTkVfSEVJR0hUX1BYID0gMztcbmNvbnN0IE1JTl9MSU5FX1dJRFRIX1BYID0gMjtcbi8qKiBQb2ludGVyIHRyYXZlbCBiZWxvdyB0aGlzIGlzIHRyZWF0ZWQgYXMgYSBjbGljayByYXRoZXIgdGhhbiBhIGRyYWcuICovXG5jb25zdCBDTElDS19EUkFHX1RIUkVTSE9MRF9QWCA9IDM7XG5jb25zdCBNSU5fQlJVU0hfV0lEVEhfUFggPSA2O1xuLyoqIEZyYWN0aW9uIG9mIHRoZSBjdXJyZW50IHdpbmRvdyB0aGF0IGFycm93IGtleXMgcGFuIGJ5LiAqL1xuY29uc3QgS0VZQk9BUkRfUEFOX0ZSQUNUSU9OID0gMC4xO1xuXG4vKipcbiAqIExpbmUgY29sb3JzIHJlc29sdmVkIGZyb20gdGhlIGRlc2lnbi1zeXN0ZW0gdG9rZW5zIG9uIHRoZSBjb250YWluZXIsIHNvIHRoZVxuICogY2FudmFzIGZvbGxvd3MgdGhlIGFjdGl2ZSB0aGVtZS4gUnVucyBhbmQgc3RlcHMgY2FycnkgdGhlIGFjY2VudCBodWVzO1xuICogcGFzc2l2ZSBzcGFucyAoaG9va3MsIHNsZWVwcykgc3RheSBncmF5IGxpa2UgdGhlaXIgZXZlbnQtbGlzdCBpY29ucy5cbiAqL1xuY29uc3QgUkVTT1VSQ0VfTElORV9UT0tFTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHJ1bjogJy0tZHMtYmx1ZS00MDAnLFxuICBzdGVwOiAnLS1kcy1ncmVlbi00MDAnLFxuICBob29rOiAnLS1kcy1ncmF5LTQwMCcsXG4gIHNsZWVwOiAnLS1kcy1ncmF5LTQwMCcsXG59O1xuY29uc3QgREVGQVVMVF9MSU5FX1RPS0VOID0gJy0tZHMtZ3JheS00MDAnO1xuY29uc3QgRVJST1JfTElORV9UT0tFTiA9ICctLWRzLXJlZC00MDAnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlbnNpdHkgbGF5ZXIgZ2VvbWV0cnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgRGVuc2l0eUxheW91dCB7XG4gIGxpbmVIZWlnaHQ6IG51bWJlcjtcbiAgLyoqIFt4LCB5LCB3aWR0aF0gcmVjdHMgZ3JvdXBlZCBieSBjb2xvciB0b2tlbiwgb25lIGZpbGwgcGFzcyBwZXIgY29sb3IuICovXG4gIHJlY3RzQnlUb2tlbjogTWFwPHN0cmluZywgW251bWJlciwgbnVtYmVyLCBudW1iZXJdW10+O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVuc2l0eUxheW91dChcbiAgc3BhbnM6IFNwYW5bXSxcbiAgcm9vdFN0YXJ0TXM6IG51bWJlcixcbiAgcm9vdER1cmF0aW9uTXM6IG51bWJlcixcbiAgY29udGVudFdpZHRoOiBudW1iZXIsXG4gIGNvbnRlbnRIZWlnaHQ6IG51bWJlclxuKTogRGVuc2l0eUxheW91dCB7XG4gIGNvbnN0IGNvdW50ID0gc3BhbnMubGVuZ3RoO1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgTUlOX0xJTkVfSEVJR0hUX1BYLFxuICAgIE1hdGgubWluKE1BWF9MSU5FX0hFSUdIVF9QWCwgY29udGVudEhlaWdodCAvIGNvdW50KVxuICApO1xuICAvLyBEaXN0cmlidXRlIHJvd3MgYWNyb3NzIHRoZSBzdHJpcDsgbmV2ZXIgc3ByZWFkIGEgaGFuZGZ1bCBvZiBzcGFucyBmdXJ0aGVyXG4gIC8vIGFwYXJ0IHRoYW4gb25lIGxpbmUgKyAxcHggZ2FwLlxuICBjb25zdCByb3dTdGVwID1cbiAgICBjb3VudCA+IDFcbiAgICAgID8gTWF0aC5taW4oKGNvbnRlbnRIZWlnaHQgLSBsaW5lSGVpZ2h0KSAvIChjb3VudCAtIDEpLCBsaW5lSGVpZ2h0ICsgMSlcbiAgICAgIDogMDtcblxuICBjb25zdCByZWN0c0J5VG9rZW4gPSBuZXcgTWFwPHN0cmluZywgW251bWJlciwgbnVtYmVyLCBudW1iZXJdW10+KCk7XG4gIHNwYW5zLmZvckVhY2goKHNwYW4sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBpc1NwYW5FcnJvcmVkKHNwYW4pXG4gICAgICA/IEVSUk9SX0xJTkVfVE9LRU5cbiAgICAgIDogKFJFU09VUkNFX0xJTkVfVE9LRU5TW3NwYW4ucmVzb3VyY2VdID8/IERFRkFVTFRfTElORV9UT0tFTik7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgICBjb25zdCBlbmRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZW5kVGltZSk7XG4gICAgY29uc3QgeCA9XG4gICAgICBUSU1FTElORV9QQURESU5HX1BYICtcbiAgICAgICgoc3RhcnRNcyAtIHJvb3RTdGFydE1zKSAvIHJvb3REdXJhdGlvbk1zKSAqIGNvbnRlbnRXaWR0aDtcbiAgICBjb25zdCB3ID0gTWF0aC5tYXgoXG4gICAgICBNSU5fTElORV9XSURUSF9QWCxcbiAgICAgICgoZW5kTXMgLSBzdGFydE1zKSAvIHJvb3REdXJhdGlvbk1zKSAqIGNvbnRlbnRXaWR0aFxuICAgICk7XG4gICAgY29uc3QgeSA9IENBTlZBU19QQURfWV9QWCArIGluZGV4ICogcm93U3RlcDtcbiAgICBjb25zdCByZWN0cyA9IHJlY3RzQnlUb2tlbi5nZXQodG9rZW4pID8/IFtdO1xuICAgIHJlY3RzLnB1c2goW3gsIHksIHddKTtcbiAgICByZWN0c0J5VG9rZW4uc2V0KHRva2VuLCByZWN0cyk7XG4gIH0pO1xuXG4gIHJldHVybiB7IGxpbmVIZWlnaHQsIHJlY3RzQnlUb2tlbiB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhvb2tzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFRyYWNrIHRoZSBkaXNwbGF5J3MgZGV2aWNlIHBpeGVsIHJhdGlvIChjaGFuZ2VzIHdoZW4gbW92aW5nIG1vbml0b3JzKS4gKi9cbmZ1bmN0aW9uIHVzZURwcigpOiBudW1iZXIge1xuICBjb25zdCBbZHByLCBzZXREcHJdID0gdXNlU3RhdGUoMSk7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKTogdm9pZCA9PiBzZXREcHIod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSk7XG4gICAgY29uc3QgbWVkaWEgPSBtYXRjaE1lZGlhKGAocmVzb2x1dGlvbjogJHtkcHJ9ZHBweClgKTtcbiAgICBtZWRpYS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgb25DaGFuZ2UoKTtcbiAgICByZXR1cm4gKCkgPT4gbWVkaWEucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25DaGFuZ2UpO1xuICB9LCBbZHByXSk7XG4gIHJldHVybiBkcHI7XG59XG5cbi8qKiBCdW1wIGEgY291bnRlciB3aGVuIHRoZSB0aGVtZSAoaHRtbCBjbGFzcy9kYXRhLXRoZW1lKSBjaGFuZ2VzLiAqL1xuZnVuY3Rpb24gdXNlVGhlbWVWZXJzaW9uKCk6IG51bWJlciB7XG4gIGNvbnN0IFt2ZXJzaW9uLCBzZXRWZXJzaW9uXSA9IHVzZVN0YXRlKDApO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gc2V0VmVyc2lvbigodikgPT4gdiArIDEpKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcycsICdkYXRhLXRoZW1lJywgJ3N0eWxlJ10sXG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSwgW10pO1xuICByZXR1cm4gdmVyc2lvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNaW5pbWFwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBEcmFnU3RhdGUgPVxuICB8IHsgbW9kZTogJ3Bhbic7IGdyYWJPZmZzZXRNczogbnVtYmVyIH1cbiAgfCB7IG1vZGU6ICdyZXNpemUtbGVmdCcgfVxuICB8IHsgbW9kZTogJ3Jlc2l6ZS1yaWdodCcgfVxuICB8IHsgbW9kZTogJ3NlbGVjdCc7IG9yaWdpblg6IG51bWJlcjsgb3JpZ2luTXM6IG51bWJlciB9O1xuXG5leHBvcnQgY29uc3QgTWluaW1hcCA9IG1lbW8oZnVuY3Rpb24gTWluaW1hcCh7XG4gIHNwYW5zLFxuICByb290LFxuICB2aWV3cG9ydCxcbiAgbWluVmlld3BvcnRNcyxcbiAgb25WaWV3cG9ydENoYW5nZSxcbiAgb25BbmltYXRlVG8sXG59OiB7XG4gIHNwYW5zOiBTcGFuW107XG4gIHJvb3Q6IFJvb3RCb3VuZHM7XG4gIHZpZXdwb3J0OiBWaWV3cG9ydFJhbmdlO1xuICBtaW5WaWV3cG9ydE1zOiBudW1iZXI7XG4gIC8qKiBJbW1lZGlhdGUgdmlld3BvcnQgdXBkYXRlICh1c2VkIHdoaWxlIGRyYWdnaW5nKS4gKi9cbiAgb25WaWV3cG9ydENoYW5nZTogKHZpZXdwb3J0OiBWaWV3cG9ydFJhbmdlKSA9PiB2b2lkO1xuICAvKiogRWFzZWQgdmlld3BvcnQgdHJhbnNpdGlvbiAodXNlZCBmb3IgY2xpY2stdG8tanVtcCBhbmQgc2VsZWN0aW9ucykuICovXG4gIG9uQW5pbWF0ZVRvOiAodmlld3BvcnQ6IFZpZXdwb3J0UmFuZ2UpID0+IHZvaWQ7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3Qge1xuICAgIHN0YXJ0VGltZTogcm9vdFN0YXJ0TXMsXG4gICAgZW5kVGltZTogcm9vdEVuZE1zLFxuICAgIGR1cmF0aW9uOiByb290RHVyYXRpb25NcyxcbiAgfSA9IHJvb3Q7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgY2FudmFzUmVmID0gdXNlUmVmPEhUTUxDYW52YXNFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZHByID0gdXNlRHByKCk7XG4gIGNvbnN0IHRoZW1lVmVyc2lvbiA9IHVzZVRoZW1lVmVyc2lvbigpO1xuXG4gIC8vIExhdGVzdCB2aWV3cG9ydCBmb3IgcG9pbnRlciBoYW5kbGVycywgd2l0aG91dCByZS1iaW5kaW5nIHRoZW0gcGVyIGZyYW1lLlxuICBjb25zdCB2aWV3cG9ydFJlZiA9IHVzZVJlZjxWaWV3cG9ydFJhbmdlPih2aWV3cG9ydCk7XG4gIHZpZXdwb3J0UmVmLmN1cnJlbnQgPSB2aWV3cG9ydDtcblxuICBjb25zdCBbZHJhZywgc2V0RHJhZ10gPSB1c2VTdGF0ZTxEcmFnU3RhdGUgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NlbGVjdGlvbiwgc2V0U2VsZWN0aW9uXSA9IHVzZVN0YXRlPHsgeDA6IG51bWJlcjsgeDE6IG51bWJlciB9IHwgbnVsbD4oXG4gICAgbnVsbFxuICApO1xuXG4gIGNvbnN0IHhUb1RpbWUgPSB1c2VDYWxsYmFjayhcbiAgICAoeDogbnVtYmVyLCBjb250ZW50V2lkdGg6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybiByb290U3RhcnRNcztcbiAgICAgIGNvbnN0IGZyYWN0aW9uID0gKHggLSBUSU1FTElORV9QQURESU5HX1BYKSAvIGNvbnRlbnRXaWR0aDtcbiAgICAgIHJldHVybiBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5tYXgocm9vdFN0YXJ0TXMgKyBmcmFjdGlvbiAqIHJvb3REdXJhdGlvbk1zLCByb290U3RhcnRNcyksXG4gICAgICAgIHJvb3RFbmRNc1xuICAgICAgKTtcbiAgICB9LFxuICAgIFtyb290U3RhcnRNcywgcm9vdER1cmF0aW9uTXMsIHJvb3RFbmRNc11cbiAgKTtcblxuICBjb25zdCBjbGFtcCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBWaWV3cG9ydFJhbmdlKTogVmlld3BvcnRSYW5nZSA9PlxuICAgICAgY2xhbXBWaWV3cG9ydFRvUm9vdChuZXh0LCByb290U3RhcnRNcywgcm9vdEVuZE1zLCBtaW5WaWV3cG9ydE1zKSxcbiAgICBbcm9vdFN0YXJ0TXMsIHJvb3RFbmRNcywgbWluVmlld3BvcnRNc11cbiAgKTtcblxuICAvLyBEZW5zaXR5IGNhbnZhczogb25lIHRoaW4gbGluZSBwZXIgc3BhbiBhY3Jvc3MgdGhlIGZ1bGwgcnVuLiBTaXppbmcgaXNcbiAgLy8gcmVhZCBsaXZlIGFuZCByZWRyYXdzIHJ1biBzdHJhaWdodCBmcm9tIHRoZSBSZXNpemVPYnNlcnZlciAod2hpY2ggZmlyZXNcbiAgLy8gYmVmb3JlIHBhaW50KSwgc28gbGF5b3V0IGNoYW5nZXMgKGUuZy4gdGhlIGRldGFpbCBwYW5lbCBvcGVuaW5nKSBuZXZlclxuICAvLyBwYWludCBhIGZyYW1lIHdpdGggYSBzdGFsZSwgc3RyZXRjaGVkIGJpdG1hcC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29ycmVjdG5lc3MvdXNlRXhoYXVzdGl2ZURlcGVuZGVuY2llczogdGhlbWVWZXJzaW9uIGlzIGEgcmVkcmF3IHRyaWdnZXI7IHRoZSBjYW52YXMgcmUtcmVzb2x2ZXMgaXRzIHRva2VuIGNvbG9ycyB3aGVuIHRoZSB0aGVtZSBmbGlwc1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNhbnZhcyA9IGNhbnZhc1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcz8uZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBpZiAoIWNhbnZhcyB8fCAhY29udGFpbmVyIHx8ICFjdHgpIHJldHVybjtcblxuICAgIGNvbnN0IGRyYXcgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSB3aWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyO1xuICAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcblxuICAgICAgY2FudmFzLndpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIGRwcik7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBkcHIpO1xuICAgICAgY3R4LnNjYWxlKGRwciwgZHByKTtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBpZiAoc3BhbnMubGVuZ3RoID09PSAwIHx8IHJvb3REdXJhdGlvbk1zIDw9IDApIHJldHVybjtcblxuICAgICAgY29uc3QgeyBsaW5lSGVpZ2h0LCByZWN0c0J5VG9rZW4gfSA9IGNvbXB1dGVEZW5zaXR5TGF5b3V0KFxuICAgICAgICBzcGFucyxcbiAgICAgICAgcm9vdFN0YXJ0TXMsXG4gICAgICAgIHJvb3REdXJhdGlvbk1zLFxuICAgICAgICBjb250ZW50V2lkdGgsXG4gICAgICAgIGhlaWdodCAtIENBTlZBU19QQURfWV9QWCAqIDJcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICAgICAgY29uc3QgZHJhd1Rva2VuID0gKHRva2VuOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgcmVjdHMgPSByZWN0c0J5VG9rZW4uZ2V0KHRva2VuKTtcbiAgICAgICAgaWYgKCFyZWN0cykgcmV0dXJuO1xuICAgICAgICBjdHguZmlsbFN0eWxlID1cbiAgICAgICAgICBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRva2VuKS50cmltKCkgfHwgJ3JnYigxNjAsMTYwLDE2MCknO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGZvciAoY29uc3QgW3gsIHksIHddIG9mIHJlY3RzKSB7XG4gICAgICAgICAgY3R4LnJvdW5kUmVjdCh4LCB5LCB3LCBsaW5lSGVpZ2h0LCBsaW5lSGVpZ2h0IC8gMik7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgIH07XG4gICAgICAvLyBFcnJvcmVkIHNwYW5zIGFyZSBkcmF3biBsYXN0IHNvIHJlZCBuZXZlciBkaXNhcHBlYXJzIHVuZGVyIG5laWdoYm9ycy5cbiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmVjdHNCeVRva2VuLmtleXMoKSkge1xuICAgICAgICBpZiAodG9rZW4gIT09IEVSUk9SX0xJTkVfVE9LRU4pIGRyYXdUb2tlbih0b2tlbik7XG4gICAgICB9XG4gICAgICBkcmF3VG9rZW4oRVJST1JfTElORV9UT0tFTik7XG4gICAgfTtcblxuICAgIGRyYXcoKTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihkcmF3KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7XG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSwgW3NwYW5zLCByb290U3RhcnRNcywgcm9vdER1cmF0aW9uTXMsIGRwciwgdGhlbWVWZXJzaW9uXSk7XG5cbiAgLy8gQ29udGVudCB3aWR0aCBpcyByZWFkIGZyb20gdGhlIGxpdmUgcmVjdCBhdCBldmVudCB0aW1lLCBzbyBwb2ludGVyIG1hdGhcbiAgLy8gc3RheXMgZXhhY3Qgd2hpbGUgdGhlIHN0cmlwIGlzIGJlaW5nIHJlc2l6ZWQgbWlkLWdlc3R1cmUuXG4gIGNvbnN0IHBvaW50ZXJGcmFtZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KTogeyB4OiBudW1iZXI7IGN3OiBudW1iZXIgfSA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gZS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogZS5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgICBjdzogcmVjdC53aWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyLFxuICAgICAgfTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgcmVzb2x2ZURyYWdTdGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0YXJnZXQ6IEhUTUxFbGVtZW50LCB4OiBudW1iZXIsIGN3OiBudW1iZXIpOiBEcmFnU3RhdGUgPT4ge1xuICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCdbZGF0YS1taW5pbWFwLWhhbmRsZT1cImxlZnRcIl0nKSkge1xuICAgICAgICByZXR1cm4geyBtb2RlOiAncmVzaXplLWxlZnQnIH07XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLW1pbmltYXAtaGFuZGxlPVwicmlnaHRcIl0nKSkge1xuICAgICAgICByZXR1cm4geyBtb2RlOiAncmVzaXplLXJpZ2h0JyB9O1xuICAgICAgfVxuICAgICAgLy8gUGFubmluZyBhIGZ1bGwtZXh0ZW50IHdpbmRvdyBpcyBhIG5vLW9wLCBzbyBsZXQgYSBkcmFnIG9uIHRoZSBicnVzaFxuICAgICAgLy8gc3RhcnQgYSBzZWxlY3Rpb24gaW5zdGVhZCwgdGhlIG5hdHVyYWwgZmlyc3QgZ2VzdHVyZSBvbiB0aGUgbWFwLlxuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgaXNGdWxsRXh0ZW50ID1cbiAgICAgICAgc3RhcnQgLSByb290U3RhcnRNcyA8IHJvb3REdXJhdGlvbk1zICogMC4wMDEgJiZcbiAgICAgICAgcm9vdEVuZE1zIC0gZW5kIDwgcm9vdER1cmF0aW9uTXMgKiAwLjAwMTtcbiAgICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnW2RhdGEtbWluaW1hcC1icnVzaF0nKSAmJiAhaXNGdWxsRXh0ZW50KSB7XG4gICAgICAgIHJldHVybiB7IG1vZGU6ICdwYW4nLCBncmFiT2Zmc2V0TXM6IHhUb1RpbWUoeCwgY3cpIC0gc3RhcnQgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG1vZGU6ICdzZWxlY3QnLCBvcmlnaW5YOiB4LCBvcmlnaW5NczogeFRvVGltZSh4LCBjdykgfTtcbiAgICB9LFxuICAgIFt4VG9UaW1lLCByb290U3RhcnRNcywgcm9vdER1cmF0aW9uTXMsIHJvb3RFbmRNc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyRG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjtcbiAgICAgIGNvbnN0IHsgeCwgY3cgfSA9IHBvaW50ZXJGcmFtZShlKTtcbiAgICAgIGlmIChjdyA8PSAwKSByZXR1cm47XG4gICAgICBlLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgc2V0RHJhZyhyZXNvbHZlRHJhZ1N0YXRlKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50LCB4LCBjdykpO1xuICAgIH0sXG4gICAgW3BvaW50ZXJGcmFtZSwgcmVzb2x2ZURyYWdTdGF0ZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWRyYWcpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgeCwgY3cgfSA9IHBvaW50ZXJGcmFtZShlKTtcbiAgICAgIGNvbnN0IHQgPSB4VG9UaW1lKHgsIGN3KTtcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdmlld3BvcnRSZWYuY3VycmVudDtcblxuICAgICAgaWYgKGRyYWcubW9kZSA9PT0gJ3BhbicpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZShcbiAgICAgICAgICBjbGFtcCh7XG4gICAgICAgICAgICBzdGFydDogdCAtIGRyYWcuZ3JhYk9mZnNldE1zLFxuICAgICAgICAgICAgZW5kOiB0IC0gZHJhZy5ncmFiT2Zmc2V0TXMgKyBkdXJhdGlvbixcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChkcmFnLm1vZGUgPT09ICdyZXNpemUtbGVmdCcpIHtcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZSh7IHN0YXJ0OiBNYXRoLm1pbih0LCBlbmQgLSBtaW5WaWV3cG9ydE1zKSwgZW5kIH0pO1xuICAgICAgfSBlbHNlIGlmIChkcmFnLm1vZGUgPT09ICdyZXNpemUtcmlnaHQnKSB7XG4gICAgICAgIG9uVmlld3BvcnRDaGFuZ2UoeyBzdGFydCwgZW5kOiBNYXRoLm1heCh0LCBzdGFydCArIG1pblZpZXdwb3J0TXMpIH0pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc2VsZWN0aW9uIHx8XG4gICAgICAgIE1hdGguYWJzKHggLSBkcmFnLm9yaWdpblgpID4gQ0xJQ0tfRFJBR19USFJFU0hPTERfUFhcbiAgICAgICkge1xuICAgICAgICBzZXRTZWxlY3Rpb24oe1xuICAgICAgICAgIHgwOiBNYXRoLm1pbihkcmFnLm9yaWdpblgsIHgpLFxuICAgICAgICAgIHgxOiBNYXRoLm1heChkcmFnLm9yaWdpblgsIHgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGRyYWcsXG4gICAgICBzZWxlY3Rpb24sXG4gICAgICBwb2ludGVyRnJhbWUsXG4gICAgICB4VG9UaW1lLFxuICAgICAgb25WaWV3cG9ydENoYW5nZSxcbiAgICAgIGNsYW1wLFxuICAgICAgbWluVmlld3BvcnRNcyxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgZW5kRHJhZyA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWRyYWcpIHJldHVybjtcbiAgICAgIGlmIChkcmFnLm1vZGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgY3cgfSA9IHBvaW50ZXJGcmFtZShlKTtcbiAgICAgICAgY29uc3QgdCA9IHhUb1RpbWUoeCwgY3cpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgb25BbmltYXRlVG8oXG4gICAgICAgICAgICBjbGFtcCh7XG4gICAgICAgICAgICAgIHN0YXJ0OiBNYXRoLm1pbihkcmFnLm9yaWdpbk1zLCB0KSxcbiAgICAgICAgICAgICAgZW5kOiBNYXRoLm1heChkcmFnLm9yaWdpbk1zLCB0KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQbGFpbiBjbGljazoga2VlcCB0aGUgY3VycmVudCB6b29tLCBjZW50ZXIgdGhlIHdpbmRvdyB0aGVyZS5cbiAgICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgICAgICBvbkFuaW1hdGVUbyhcbiAgICAgICAgICAgIGNsYW1wKHsgc3RhcnQ6IHQgLSBkdXJhdGlvbiAvIDIsIGVuZDogdCArIGR1cmF0aW9uIC8gMiB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGlvbihudWxsKTtcbiAgICAgIHNldERyYWcobnVsbCk7XG4gICAgfSxcbiAgICBbZHJhZywgc2VsZWN0aW9uLCBwb2ludGVyRnJhbWUsIHhUb1RpbWUsIG9uQW5pbWF0ZVRvLCBjbGFtcF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVMb3N0UG9pbnRlckNhcHR1cmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VsZWN0aW9uKG51bGwpO1xuICAgIHNldERyYWcobnVsbCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVEb3VibGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkFuaW1hdGVUbyh7IHN0YXJ0OiByb290U3RhcnRNcywgZW5kOiByb290RW5kTXMgfSk7XG4gIH0sIFtvbkFuaW1hdGVUbywgcm9vdFN0YXJ0TXMsIHJvb3RFbmRNc10pO1xuXG4gIC8vIFdoZWVsOiBzYW1lIGdlc3R1cmVzIGFzIHRoZSB0aW1lbGluZSwgbWFwcGVkIHRocm91Z2ggdGhlIGZ1bGwgZXh0ZW50LlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCB8fCByb290RHVyYXRpb25NcyA8PSAwKSByZXR1cm47XG5cbiAgICAvLyBUaGUgbWluaW1hcCdzIHggYXhpcyBpcyB0aGUgZnVsbCBydW4sIHNvIHpvb20gYXJvdW5kIHRoZSBhYnNvbHV0ZSB0aW1lXG4gICAgLy8gdW5kZXIgdGhlIGN1cnNvciByYXRoZXIgdGhhbiBhIHZpZXdwb3J0IGZyYWN0aW9uLlxuICAgIGNvbnN0IHpvb21BdEN1cnNvciA9IChlOiBXaGVlbEV2ZW50LCBjdzogbnVtYmVyLCBsZWZ0OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHNjYWxlRmFjdG9yID0gd2hlZWxab29tU2NhbGVGYWN0b3IoZSk7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGVuZCAtIHN0YXJ0O1xuICAgICAgY29uc3QgY3Vyc29yRnJhY3Rpb24gPSBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5tYXgoKGUuY2xpZW50WCAtIGxlZnQgLSBUSU1FTElORV9QQURESU5HX1BYKSAvIGN3LCAwKSxcbiAgICAgICAgMVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGN1cnNvck1zID0gcm9vdFN0YXJ0TXMgKyBjdXJzb3JGcmFjdGlvbiAqIHJvb3REdXJhdGlvbk1zO1xuICAgICAgY29uc3QgYW5jaG9yID0gTWF0aC5taW4oXG4gICAgICAgIE1hdGgubWF4KGR1cmF0aW9uID4gMCA/IChjdXJzb3JNcyAtIHN0YXJ0KSAvIGR1cmF0aW9uIDogMC41LCAwKSxcbiAgICAgICAgMVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gZHVyYXRpb24gKiBzY2FsZUZhY3RvcjtcbiAgICAgIG9uVmlld3BvcnRDaGFuZ2UoXG4gICAgICAgIGNsYW1wKHtcbiAgICAgICAgICBzdGFydDogY3Vyc29yTXMgLSBhbmNob3IgKiBuZXdEdXJhdGlvbixcbiAgICAgICAgICBlbmQ6IGN1cnNvck1zICsgKDEgLSBhbmNob3IpICogbmV3RHVyYXRpb24sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvLyBQYW4gaW4gbWFwIGNvb3JkaW5hdGVzOiBvbmUgbWFwIHBpeGVsIGlzIG9uZSBmdWxsLWV4dGVudCBmcmFjdGlvbi5cbiAgICBjb25zdCBwYW5CeU1hcFBpeGVscyA9IChlOiBXaGVlbEV2ZW50LCBjdzogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBkeCA9IHdoZWVsRGVsdGFUb1BpeGVscyhlLmRlbHRhWCwgZS5kZWx0YU1vZGUpO1xuICAgICAgY29uc3QgcGFuTXMgPSAoZHggLyBjdykgKiByb290RHVyYXRpb25NcztcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdmlld3BvcnRSZWYuY3VycmVudDtcbiAgICAgIG9uVmlld3BvcnRDaGFuZ2UoY2xhbXAoeyBzdGFydDogc3RhcnQgKyBwYW5NcywgZW5kOiBlbmQgKyBwYW5NcyB9KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uV2hlZWwgPSAoZTogV2hlZWxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNab29tR2VzdHVyZSA9IGUuY3RybEtleSB8fCBlLm1ldGFLZXk7XG4gICAgICBjb25zdCBoYXNEZWx0YVggPSBNYXRoLmFicyhlLmRlbHRhWCkgPiBNYXRoLmFicyhlLmRlbHRhWSk7XG4gICAgICBpZiAoIWlzWm9vbUdlc3R1cmUgJiYgIWhhc0RlbHRhWCkgcmV0dXJuO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjdyA9IHJlY3Qud2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMjtcbiAgICAgIGlmIChjdyA8PSAwKSByZXR1cm47XG4gICAgICBpZiAoaXNab29tR2VzdHVyZSkgem9vbUF0Q3Vyc29yKGUsIGN3LCByZWN0LmxlZnQpO1xuICAgICAgZWxzZSBwYW5CeU1hcFBpeGVscyhlLCBjdyk7XG4gICAgfTtcblxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICByZXR1cm4gKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsKTtcbiAgfSwgW3Jvb3RTdGFydE1zLCByb290RHVyYXRpb25Ncywgb25WaWV3cG9ydENoYW5nZSwgY2xhbXBdKTtcblxuICAvLyBBcnJvdyBrZXlzIHBhbiB0aGUgZm9jdXNlZCBicnVzaDsgSG9tZS9FbmQganVtcCB0byB0aGUgZW5kcy5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgIGNvbnN0IHBhbiA9IGR1cmF0aW9uICogS0VZQk9BUkRfUEFOX0ZSQUNUSU9OO1xuICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICBvblZpZXdwb3J0Q2hhbmdlKGNsYW1wKHsgc3RhcnQ6IHN0YXJ0IC0gcGFuLCBlbmQ6IGVuZCAtIHBhbiB9KSk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZShjbGFtcCh7IHN0YXJ0OiBzdGFydCArIHBhbiwgZW5kOiBlbmQgKyBwYW4gfSkpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICAgIG9uVmlld3BvcnRDaGFuZ2UoXG4gICAgICAgICAgY2xhbXAoeyBzdGFydDogcm9vdFN0YXJ0TXMsIGVuZDogcm9vdFN0YXJ0TXMgKyBkdXJhdGlvbiB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZShcbiAgICAgICAgICBjbGFtcCh7IHN0YXJ0OiByb290RW5kTXMgLSBkdXJhdGlvbiwgZW5kOiByb290RW5kTXMgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9LFxuICAgIFtvblZpZXdwb3J0Q2hhbmdlLCBjbGFtcCwgcm9vdFN0YXJ0TXMsIHJvb3RFbmRNc11cbiAgKTtcblxuICAvLyBCcnVzaCBnZW9tZXRyeSBpbiBDU1MgY2FsYygpIGZyb20gdGltZSBmcmFjdGlvbnMsIHNvIHRoZSB0aHVtYiByZWZsb3dzIGluXG4gIC8vIHRoZSBzYW1lIGZyYW1lIGFzIGFueSBjb250YWluZXIgcmVzaXplIGluc3RlYWQgb2YgbGFnZ2luZyBhIHN0YXRlIHVwZGF0ZS5cbiAgY29uc3Qgc3RhcnRGcmFjdGlvbiA9ICh2aWV3cG9ydC5zdGFydCAtIHJvb3RTdGFydE1zKSAvIHJvb3REdXJhdGlvbk1zO1xuICBjb25zdCBlbmRGcmFjdGlvbiA9ICh2aWV3cG9ydC5lbmQgLSByb290U3RhcnRNcykgLyByb290RHVyYXRpb25NcztcbiAgY29uc3QgdHJhY2tXaWR0aCA9IGAoMTAwJSAtICR7VElNRUxJTkVfUEFERElOR19QWCAqIDJ9cHgpYDtcbiAgY29uc3QgYnJ1c2hTdHlsZSA9IHtcbiAgICBsZWZ0OiBgY2FsYygke1RJTUVMSU5FX1BBRERJTkdfUFh9cHggKyAke3N0YXJ0RnJhY3Rpb259ICogJHt0cmFja1dpZHRofSlgLFxuICAgIHdpZHRoOiBgbWF4KCR7TUlOX0JSVVNIX1dJRFRIX1BYfXB4LCBjYWxjKCR7XG4gICAgICBlbmRGcmFjdGlvbiAtIHN0YXJ0RnJhY3Rpb25cbiAgICB9ICogJHt0cmFja1dpZHRofSkpYCxcbiAgfTtcblxuICBjb25zdCB2aWV3RHVyYXRpb24gPSB2aWV3cG9ydC5lbmQgLSB2aWV3cG9ydC5zdGFydDtcbiAgY29uc3Qgc2Nyb2xsYWJsZU1zID0gTWF0aC5tYXgocm9vdER1cmF0aW9uTXMgLSB2aWV3RHVyYXRpb24sIDApO1xuICBjb25zdCBzY3JvbGxQZXJjZW50ID1cbiAgICBzY3JvbGxhYmxlTXMgPiAwXG4gICAgICA/IE1hdGgucm91bmQoKCh2aWV3cG9ydC5zdGFydCAtIHJvb3RTdGFydE1zKSAvIHNjcm9sbGFibGVNcykgKiAxMDApXG4gICAgICA6IDA7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogcG9pbnRlciBnZXN0dXJlcyBhcmUgYSBtb3VzZS1vbmx5IGVuaGFuY2VtZW50OyB0aGUgYnJ1c2ggaW5zaWRlIGlzIGtleWJvYXJkLW9wZXJhYmxlXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncmVsYXRpdmUgaC0xMCBtaW4taC0xMCB3LWZ1bGwgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWJhY2tncm91bmQtMTAwIHNlbGVjdC1ub25lIG92ZXJmbG93LWhpZGRlbiB0b3VjaC1ub25lJyxcbiAgICAgICAgZHJhZz8ubW9kZSA9PT0gJ3NlbGVjdCcgJiYgJ2N1cnNvci1jcm9zc2hhaXInXG4gICAgICApfVxuICAgICAgb25Qb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICBvblBvaW50ZXJNb3ZlPXtoYW5kbGVQb2ludGVyTW92ZX1cbiAgICAgIG9uUG9pbnRlclVwPXtlbmREcmFnfVxuICAgICAgb25Qb2ludGVyQ2FuY2VsPXtlbmREcmFnfVxuICAgICAgb25Mb3N0UG9pbnRlckNhcHR1cmU9e2hhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZX1cbiAgICAgIG9uRG91YmxlQ2xpY2s9e2hhbmRsZURvdWJsZUNsaWNrfVxuICAgID5cbiAgICAgIHsvKiBNdWx0aXBseSBvbiBsaWdodCB0aGVtZXMgLyBzY3JlZW4gb24gZGFyaywgc28gb3ZlcmxhcHBpbmcgc3BhbiBsaW5lc1xuICAgICAgICAgIGRlZXBlbiBpbnN0ZWFkIG9mIG9jY2x1ZGluZyBhbmQgdGhlIGdsYXNzIHRodW1iIHJlYWRzIHRocm91Z2ggdGhlbS4gKi99XG4gICAgICA8Y2FudmFzXG4gICAgICAgIHJlZj17Y2FudmFzUmVmfVxuICAgICAgICBhcmlhLWhpZGRlblxuICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgaC1mdWxsIHctZnVsbCBtaXgtYmxlbmQtbXVsdGlwbHkgWy5kYXJrLXRoZW1lXyZdOm1peC1ibGVuZC1zY3JlZW4gWy5kYXJrXyZdOm1peC1ibGVuZC1zY3JlZW4gW1tkYXRhLXRoZW1lPWRhcmtdXyZdOm1peC1ibGVuZC1zY3JlZW5cIlxuICAgICAgLz5cbiAgICAgIHtzZWxlY3Rpb24gPyAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBhcmlhLWhpZGRlblxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQteS0wIGJvcmRlciBib3JkZXItYmx1ZS01MDAgYmctYmx1ZS0zMDAgb3BhY2l0eS00MFwiXG4gICAgICAgICAgc3R5bGU9e3sgbGVmdDogc2VsZWN0aW9uLngwLCB3aWR0aDogc2VsZWN0aW9uLngxIC0gc2VsZWN0aW9uLngwIH19XG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS1taW5pbWFwLWJydXNoXG4gICAgICAgIHJvbGU9XCJzY3JvbGxiYXJcIlxuICAgICAgICBhcmlhLWNvbnRyb2xzPVwidHJhY2UtdGltZWxpbmVcIlxuICAgICAgICBhcmlhLW9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGFyaWEtdmFsdWVtaW49ezB9XG4gICAgICAgIGFyaWEtdmFsdWVtYXg9ezEwMH1cbiAgICAgICAgYXJpYS12YWx1ZW5vdz17c2Nyb2xsUGVyY2VudH1cbiAgICAgICAgYXJpYS12YWx1ZXRleHQ9e2BWaWV3aW5nICR7Zm9ybWF0RHVyYXRpb25QcmVjaXNlKFxuICAgICAgICAgIHZpZXdwb3J0LnN0YXJ0IC0gcm9vdFN0YXJ0TXNcbiAgICAgICAgKX0gdG8gJHtmb3JtYXREdXJhdGlvblByZWNpc2UoXG4gICAgICAgICAgdmlld3BvcnQuZW5kIC0gcm9vdFN0YXJ0TXNcbiAgICAgICAgKX0gb2YgJHtmb3JtYXREdXJhdGlvblByZWNpc2Uocm9vdER1cmF0aW9uTXMpfWB9XG4gICAgICAgIGFyaWEtbGFiZWw9XCJUaW1lbGluZSBvdmVydmlld1wiXG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgLy8gR2xhc3MgdGh1bWIsIG1hdGNoaW5nIHRoZSBsZWdhY3kgdHJhY2Ugdmlld2VyJ3MgbWFwIHdpbmRvdy5cbiAgICAgICAgICAnZ3JvdXAvbWluaW1hcC1icnVzaCBhYnNvbHV0ZSB0b3AtMC41IGJvdHRvbS0wLjUgcm91bmRlZC1bM3B4XSBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWdyYXktYWxwaGEtMjAwIHNoYWRvdy1zbSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTotb3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtW3ZhcigtLWRzLWZvY3VzLWNvbG9yKV0nLFxuICAgICAgICAgIGRyYWc/Lm1vZGUgPT09ICdwYW4nID8gJ2N1cnNvci1ncmFiYmluZycgOiAnY3Vyc29yLWdyYWInXG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXticnVzaFN0eWxlfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1taW5pbWFwLWhhbmRsZT1cImxlZnRcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXktMCAtbGVmdC0xIGZsZXggdy0yLjUgY3Vyc29yLWV3LXJlc2l6ZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdoLTMuNSB3LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1ncmF5LTYwMCBvcGFjaXR5LTAgdHJhbnNpdGlvbi1vcGFjaXR5IGdyb3VwLWhvdmVyL21pbmltYXAtYnJ1c2g6b3BhY2l0eS0xMDAgZ3JvdXAtZm9jdXMtdmlzaWJsZS9taW5pbWFwLWJydXNoOm9wYWNpdHktMTAwJyxcbiAgICAgICAgICAgICAgZHJhZyAmJiAnb3BhY2l0eS0xMDAnXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1taW5pbWFwLWhhbmRsZT1cInJpZ2h0XCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTAgLXJpZ2h0LTEgZmxleCB3LTIuNSBjdXJzb3ItZXctcmVzaXplIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2gtMy41IHctWzNweF0gcm91bmRlZC1mdWxsIGJnLWdyYXktNjAwIG9wYWNpdHktMCB0cmFuc2l0aW9uLW9wYWNpdHkgZ3JvdXAtaG92ZXIvbWluaW1hcC1icnVzaDpvcGFjaXR5LTEwMCBncm91cC1mb2N1cy12aXNpYmxlL21pbmltYXAtYnJ1c2g6b3BhY2l0eS0xMDAnLFxuICAgICAgICAgICAgICBkcmFnICYmICdvcGFjaXR5LTEwMCdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuIl19
|