@workflow/web-shared 5.0.0-beta.41 → 5.0.0-beta.43
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/dist/components/event-list-view.d.ts +10 -2
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +52 -26
- package/dist/components/sidebar/attributes-block.d.ts.map +1 -1
- package/dist/components/sidebar/attributes-block.js +3 -6
- package/dist/components/sidebar/conversation-view.d.ts.map +1 -1
- package/dist/components/sidebar/conversation-view.js +19 -36
- package/dist/components/sidebar/entity-detail-panel.d.ts +5 -0
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +2 -2
- package/dist/components/sidebar/events-list.d.ts +7 -1
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +6 -5
- package/dist/components/sidebar/resolve-hook-modal.d.ts.map +1 -1
- package/dist/components/sidebar/resolve-hook-modal.js +4 -145
- package/dist/components/sidebar/sidebar-data-context.d.ts +6 -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-skeleton.js +6 -6
- package/dist/components/stream-viewer.js +2 -2
- package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/detail-panel.js +2 -1
- package/dist/components/trace-viewer/components/middle-truncate/measurement-batch.d.ts +9 -0
- package/dist/components/trace-viewer/components/middle-truncate/measurement-batch.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/measurement-batch.js +29 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +16 -8
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +83 -19
- package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/timeline.js +13 -22
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +58 -18
- package/dist/components/trace-viewer/icons.js +5 -5
- package/dist/components/trace-viewer/utils.d.ts +6 -10
- package/dist/components/trace-viewer/utils.d.ts.map +1 -1
- package/dist/components/trace-viewer/utils.js +14 -24
- package/dist/components/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer.js +12 -4
- package/dist/components/ui/context-card.d.ts.map +1 -1
- package/dist/components/ui/context-card.js +9 -21
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +8 -35
- package/dist/components/ui/duplicate-event-tooltip.d.ts +15 -0
- package/dist/components/ui/duplicate-event-tooltip.d.ts.map +1 -0
- package/dist/components/ui/duplicate-event-tooltip.js +19 -0
- package/dist/components/ui/menu-dropdown.d.ts.map +1 -1
- package/dist/components/ui/menu-dropdown.js +3 -19
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/spinner.d.ts.map +1 -1
- package/dist/components/ui/spinner.js +5 -11
- 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 +27 -0
- package/dist/lib/duplicate-events.d.ts.map +1 -0
- package/dist/lib/duplicate-events.js +166 -0
- package/dist/lib/event-materialization.d.ts +15 -2
- package/dist/lib/event-materialization.d.ts.map +1 -1
- package/dist/lib/event-materialization.js +19 -4
- package/dist/lib/trace-builder.d.ts +16 -1
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +23 -4
- package/package.json +4 -4
- package/src/components/event-list-view.tsx +70 -32
- package/src/components/sidebar/attributes-block.tsx +4 -11
- package/src/components/sidebar/conversation-view.tsx +25 -79
- package/src/components/sidebar/entity-detail-panel.tsx +6 -0
- package/src/components/sidebar/events-list.tsx +21 -3
- package/src/components/sidebar/resolve-hook-modal.tsx +23 -186
- package/src/components/sidebar/sidebar-data-context.tsx +6 -0
- package/src/components/stream-viewer-skeleton.tsx +5 -5
- package/src/components/stream-viewer.tsx +1 -1
- package/src/components/trace-viewer/components/detail-panel.tsx +1 -0
- package/src/components/trace-viewer/components/middle-truncate/measurement-batch.ts +47 -0
- package/src/components/trace-viewer/components/middle-truncate/middle-truncate.tsx +15 -7
- package/src/components/trace-viewer/components/middle-truncate/use-middle-truncate.ts +132 -38
- package/src/components/trace-viewer/components/timeline.tsx +21 -39
- package/src/components/trace-viewer/components/trace-viewer-skeleton.tsx +63 -35
- package/src/components/trace-viewer/icons.tsx +4 -4
- package/src/components/trace-viewer/utils.test.ts +5 -7
- package/src/components/trace-viewer/utils.ts +17 -31
- package/src/components/trace-viewer.tsx +15 -3
- package/src/components/ui/context-card.tsx +16 -26
- package/src/components/ui/data-inspector.tsx +20 -65
- package/src/components/ui/duplicate-event-tooltip.tsx +44 -0
- package/src/components/ui/menu-dropdown.tsx +8 -22
- package/src/components/ui/skeleton.tsx +2 -2
- package/src/components/ui/spinner.tsx +4 -8
- package/src/index.ts +4 -0
- package/src/lib/duplicate-events.test.ts +339 -0
- package/src/lib/duplicate-events.ts +188 -0
- package/src/lib/event-materialization.test.ts +117 -0
- package/src/lib/event-materialization.ts +23 -3
- package/src/lib/trace-builder.test.ts +74 -0
- package/src/lib/trace-builder.ts +30 -3
|
@@ -69,17 +69,13 @@ export interface SpanDelta {
|
|
|
69
69
|
* the measurement lies entirely outside the viewport.
|
|
70
70
|
*/
|
|
71
71
|
export declare function computeSpanDelta(anchor: Span, hovered: Span, viewStart: number, viewEnd: number): SpanDelta | null;
|
|
72
|
-
export declare const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
errorBg?: string;
|
|
76
|
-
errorBorder?: string;
|
|
72
|
+
export declare const RESOURCE_CLASS_NAMES: Record<string, {
|
|
73
|
+
className: string;
|
|
74
|
+
errorClassName?: string;
|
|
77
75
|
}>;
|
|
78
|
-
export declare function
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
errorBg?: string;
|
|
82
|
-
errorBorder?: string;
|
|
76
|
+
export declare function getResourceClassNames(resource: string): {
|
|
77
|
+
className: string;
|
|
78
|
+
errorClassName?: string;
|
|
83
79
|
};
|
|
84
80
|
export type SegmentStatus = 'queued' | 'pending' | 'running' | 'completed' | 'failed' | 'retrying' | 'succeeded' | 'waiting' | 'sleeping' | 'received';
|
|
85
81
|
export interface Segment {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAa,MAAM,SAAS,CAAC;AAW/C,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAiB3D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAKpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAIjD;AAMD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,aAAa,CASf;AAMD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAIT;AAMD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAoBD,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,UAAU,EAAE,CA+Bd;AAMD,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,IAAI,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,EAAE,CAkBX;AAED,MAAM,WAAW,SAAS;IACxB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,OAAO,GAAG,KAAK,CAAC;IAC5B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAoClB;AAMD,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -160,41 +160,31 @@ export function computeSpanDelta(anchor, hovered, viewStart, viewEnd) {
|
|
|
160
160
|
// ---------------------------------------------------------------------------
|
|
161
161
|
// Resource colors
|
|
162
162
|
// ---------------------------------------------------------------------------
|
|
163
|
-
export const
|
|
163
|
+
export const RESOURCE_CLASS_NAMES = {
|
|
164
164
|
run: {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
errorBg: 'var(--ds-red-200)',
|
|
168
|
-
errorBorder: 'var(--ds-red-500)',
|
|
165
|
+
className: 'border-blue-500 bg-blue-200',
|
|
166
|
+
errorClassName: 'border-red-500 bg-red-200',
|
|
169
167
|
},
|
|
170
168
|
step: {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
errorBg: 'var(--ds-red-200)',
|
|
174
|
-
errorBorder: 'var(--ds-red-500)',
|
|
169
|
+
className: 'border-green-500 bg-green-200',
|
|
170
|
+
errorClassName: 'border-red-500 bg-red-200',
|
|
175
171
|
},
|
|
176
172
|
// Passive spans (hooks) stay gray — matches event-list icons and the minimap.
|
|
177
173
|
hook: {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
errorBg: 'var(--ds-red-200)',
|
|
181
|
-
errorBorder: 'var(--ds-red-500)',
|
|
174
|
+
className: 'border-gray-500 bg-gray-200',
|
|
175
|
+
errorClassName: 'border-red-500 bg-red-200',
|
|
182
176
|
},
|
|
183
177
|
sleep: {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
errorBg: 'var(--ds-red-200)',
|
|
187
|
-
errorBorder: 'var(--ds-red-500)',
|
|
178
|
+
className: 'border-purple-500 bg-purple-200',
|
|
179
|
+
errorClassName: 'border-red-500 bg-red-200',
|
|
188
180
|
},
|
|
189
181
|
default: {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
errorBg: 'var(--ds-red-200)',
|
|
193
|
-
errorBorder: 'var(--ds-red-500)',
|
|
182
|
+
className: 'border-gray-500 bg-gray-200',
|
|
183
|
+
errorClassName: 'border-red-500 bg-red-200',
|
|
194
184
|
},
|
|
195
185
|
};
|
|
196
|
-
export function
|
|
197
|
-
return
|
|
186
|
+
export function getResourceClassNames(resource) {
|
|
187
|
+
return RESOURCE_CLASS_NAMES[resource] ?? RESOURCE_CLASS_NAMES.default;
|
|
198
188
|
}
|
|
199
189
|
function clampFraction(value) {
|
|
200
190
|
return Math.max(0, Math.min(1, value));
|
|
@@ -427,4 +417,4 @@ export function computeOffscreenMarkers(markers, visibleStartMs, visibleEndMs) {
|
|
|
427
417
|
right: rightCount > 0 ? { count: rightCount, nearestMs: nearestRight } : null,
|
|
428
418
|
};
|
|
429
419
|
}
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBWXZCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFhO0lBQzdDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFFdEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsUUFBUTtZQUFFLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsTUFBTTtZQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFR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QUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUN6RSxLQUFLLEVBQ0gsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUN6RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3BhbiwgU3BhbkV2ZW50IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBmb3JtYXREdXJhdGlvbixcbiAgZm9ybWF0RHVyYXRpb25QcmVjaXNlLFxuICBnZXRIaWdoUmVzSW5Ncyxcbn0gZnJvbSAnLi91dGlsL3RpbWluZyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm9vdCBib3VuZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RCb3VuZHMge1xuICBzdGFydFRpbWU6IG51bWJlcjtcbiAgZW5kVGltZTogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVJvb3RCb3VuZHMoc3BhbnM6IFNwYW5bXSk6IFJvb3RCb3VuZHMge1xuICBsZXQgbWluU3RhcnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIGxldCBtYXhFbmQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgZm9yIChjb25zdCBzcGFuIG9mIHNwYW5zKSB7XG4gICAgY29uc3QgcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgICBjb25zdCBlID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgICBpZiAocyA8IG1pblN0YXJ0KSBtaW5TdGFydCA9IHM7XG4gICAgaWYgKGUgPiBtYXhFbmQpIG1heEVuZCA9IGU7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5TdGFydCkgfHwgIU51bWJlci5pc0Zpbml0ZShtYXhFbmQpKSB7XG4gICAgcmV0dXJuIHsgc3RhcnRUaW1lOiAwLCBlbmRUaW1lOiAxLCBkdXJhdGlvbjogMSB9O1xuICB9XG5cbiAgY29uc3QgZHVyYXRpb24gPSBNYXRoLm1heChtYXhFbmQgLSBtaW5TdGFydCwgMSk7XG4gIHJldHVybiB7IHN0YXJ0VGltZTogbWluU3RhcnQsIGVuZFRpbWU6IG1heEVuZCwgZHVyYXRpb24gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYW5EdXJhdGlvbk1zKHNwYW46IFNwYW4pOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoXG4gICAgMCxcbiAgICBnZXRIaWdoUmVzSW5NcyhzcGFuLmVuZFRpbWUpIC0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NwYW5FcnJvcmVkKHNwYW46IFNwYW4pOiBib29sZWFuIHtcbiAgY29uc3Qgd29ya2Zsb3dTdGF0dXMgPSAoc3Bhbi5hdHRyaWJ1dGVzLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgPy5zdGF0dXMgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gc3Bhbi5zdGF0dXMuY29kZSA9PT0gMiB8fCB3b3JrZmxvd1N0YXR1cyA9PT0gJ2ZhaWxlZCc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmlld3BvcnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0UmFuZ2Uge1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDbGFtcCBhIGNhbmRpZGF0ZSB2aWV3cG9ydCB0byB0aGUgcm9vdCBleHRlbnQuIFRoZSByZXF1ZXN0ZWQgZHVyYXRpb24gaXNcbiAqIHByZXNlcnZlZCB3aGVyZSBwb3NzaWJsZSAoY2xhbXBlZCB0byBbbWluRHVyYXRpb25Ncywgcm9vdCBkdXJhdGlvbl0pLCB0aGVuXG4gKiB0aGUgd2luZG93IGlzIHNoaWZ0ZWQgYmFjayBpbnNpZGUgdGhlIHJvb3QgYm91bmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBWaWV3cG9ydFRvUm9vdChcbiAgbmV4dDogVmlld3BvcnRSYW5nZSxcbiAgcm9vdFN0YXJ0OiBudW1iZXIsXG4gIHJvb3RFbmQ6IG51bWJlcixcbiAgbWluRHVyYXRpb25NczogbnVtYmVyXG4pOiBWaWV3cG9ydFJhbmdlIHtcbiAgY29uc3Qgcm9vdER1cmF0aW9uID0gTWF0aC5tYXgocm9vdEVuZCAtIHJvb3RTdGFydCwgbWluRHVyYXRpb25Ncyk7XG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5taW4oXG4gICAgcm9vdER1cmF0aW9uLFxuICAgIE1hdGgubWF4KG1pbkR1cmF0aW9uTXMsIG5leHQuZW5kIC0gbmV4dC5zdGFydClcbiAgKTtcbiAgY29uc3QgbWF4U3RhcnQgPSByb290RW5kIC0gZHVyYXRpb247XG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oTWF0aC5tYXgobmV4dC5zdGFydCwgcm9vdFN0YXJ0KSwgbWF4U3RhcnQpO1xuICByZXR1cm4geyBzdGFydCwgZW5kOiBzdGFydCArIGR1cmF0aW9uIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV2hlZWwgZ2VzdHVyZXMg4oCUIHNoYXJlZCBiZXR3ZWVuIHRoZSB0aW1lbGluZSBhbmQgdGhlIG1pbmltYXBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ29udmVydCBhIHdoZWVsIGRlbHRhIHRvIHBpeGVsIHVuaXRzIChsaW5lLW1vZGUgZGVsdGFzIGFycml2ZSBpbiBsaW5lcykuICovXG5leHBvcnQgZnVuY3Rpb24gd2hlZWxEZWx0YVRvUGl4ZWxzKGRlbHRhOiBudW1iZXIsIGRlbHRhTW9kZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGRlbHRhTW9kZSA9PT0gMSA/IGRlbHRhICogMTYgOiBkZWx0YTtcbn1cblxuLyoqXG4gKiBFeHBvbmVudGlhbCB6b29tIGZhY3RvciBmb3IgYSB3aGVlbCBnZXN0dXJlLiBDb2Fyc2UgbW91c2Utd2hlZWwgc3RlcHMgYXJlXG4gKiBkYW1wZWQgaGFyZGVyIHRoYW4gdHJhY2twYWQgcGluY2hlcyBzbyBib3RoIGZlZWwgc2ltaWxhci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoZWVsWm9vbVNjYWxlRmFjdG9yKGV2ZW50OiB7XG4gIGRlbHRhWTogbnVtYmVyO1xuICBkZWx0YU1vZGU6IG51bWJlcjtcbn0pOiBudW1iZXIge1xuICBjb25zdCBkeSA9IHdoZWVsRGVsdGFUb1BpeGVscyhldmVudC5kZWx0YVksIGV2ZW50LmRlbHRhTW9kZSk7XG4gIGNvbnN0IGlzTW91c2VXaGVlbCA9IGV2ZW50LmRlbHRhTW9kZSA9PT0gMSB8fCBNYXRoLmFicyhldmVudC5kZWx0YVkpID49IDUwO1xuICByZXR1cm4gMiAqKiAoZHkgLyAoaXNNb3VzZVdoZWVsID8gMjAwIDogNjApKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaW1lIG1hcmtlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVNYXJrZXIge1xuICBwb3NpdGlvbjogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5jb25zdCBOSUNFX0lOVEVSVkFMUyA9IFtcbiAgMSwgMiwgNSwgMTAsIDIwLCA1MCwgMTAwLCAyMDAsIDUwMCwgMV8wMDAsIDJfMDAwLCA1XzAwMCwgMTBfMDAwLCAyMF8wMDAsXG4gIDUwXzAwMCwgMTAwXzAwMCwgMjAwXzAwMCwgNTAwXzAwMCwgMV8wMDBfMDAwLCAyXzAwMF8wMDAsIDVfMDAwXzAwMCxcbiAgMTBfMDAwXzAwMCwgMjBfMDAwXzAwMCwgNTBfMDAwXzAwMCwgMTAwXzAwMF8wMDAsIDIwMF8wMDBfMDAwLCA1MDBfMDAwXzAwMCxcbiAgMV8wMDBfMDAwXzAwMCwgMl8wMDBfMDAwXzAwMCwgNV8wMDBfMDAwXzAwMCxcbl07XG5cbmNvbnN0IE1BWF9NQVJLRVJTID0gODtcblxuY29uc3QgTVNfSU5fU0VDT05EID0gMTAwMDtcblxuZnVuY3Rpb24gcGlja0ludGVydmFsKHZpZXdEdXJhdGlvbjogbnVtYmVyLCBtYXhUaWNrczogbnVtYmVyKTogbnVtYmVyIHtcbiAgZm9yIChjb25zdCBpbnRlcnZhbCBvZiBOSUNFX0lOVEVSVkFMUykge1xuICAgIGlmICh2aWV3RHVyYXRpb24gLyBpbnRlcnZhbCA8PSBtYXhUaWNrcykgcmV0dXJuIGludGVydmFsO1xuICB9XG4gIHJldHVybiBOSUNFX0lOVEVSVkFMU1tOSUNFX0lOVEVSVkFMUy5sZW5ndGggLSAxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVUaW1lTWFya2VycyhcbiAgdmlld0R1cmF0aW9uOiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBUaW1lTWFya2VyW10ge1xuICBpZiAodmlld0R1cmF0aW9uIDw9IDApIHJldHVybiBbXTtcblxuICBjb25zdCBtYXhUaWNrcyA9IDY7XG4gIGNvbnN0IGludGVydmFsID0gcGlja0ludGVydmFsKHZpZXdEdXJhdGlvbiwgbWF4VGlja3MpO1xuXG4gIC8vIFN1Yi1zZWNvbmQgc3RlcHMgbmVlZCBmcmFjdGlvbmFsIGxhYmVscywgb3IgdGlja3MgcGFzdCAxcyBjb2xsaWRlIGFzXG4gIC8vIGR1cGxpY2F0ZSB3aG9sZSBzZWNvbmRzIChcIuKApjFzLCAycywgMnMsIDNzXCIpLiBTY2FsZSBkZWNpbWFscyB0byB0aGUgc3RlcC5cbiAgY29uc3QgZnJhY3Rpb25EaWdpdHMgPVxuICAgIGludGVydmFsID49IE1TX0lOX1NFQ09ORFxuICAgICAgPyAwXG4gICAgICA6IE1hdGguY2VpbCgtTWF0aC5sb2cxMChpbnRlcnZhbCAvIE1TX0lOX1NFQ09ORCkpO1xuXG4gIGNvbnN0IGZpcnN0VGljayA9IE1hdGguY2VpbChvZmZzZXQgLyBpbnRlcnZhbCkgKiBpbnRlcnZhbDtcbiAgY29uc3QgbWFya2VyczogVGltZU1hcmtlcltdID0gW107XG5cbiAgZm9yIChsZXQgdCA9IGZpcnN0VGljazsgdCA8PSBvZmZzZXQgKyB2aWV3RHVyYXRpb247IHQgKz0gaW50ZXJ2YWwpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9ICh0IC0gb2Zmc2V0KSAvIHZpZXdEdXJhdGlvbjtcbiAgICBpZiAocG9zaXRpb24gPCAtMC4wMSB8fCBwb3NpdGlvbiA+IDEuMDEpIGNvbnRpbnVlO1xuICAgIG1hcmtlcnMucHVzaCh7XG4gICAgICBwb3NpdGlvbjogTWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb24sIDApLCAxKSxcbiAgICAgIGxhYmVsOlxuICAgICAgICBmcmFjdGlvbkRpZ2l0cyA9PT0gMFxuICAgICAgICAgID8gZm9ybWF0RHVyYXRpb24oTWF0aC5hYnModCksIHRydWUpXG4gICAgICAgICAgOiBmb3JtYXREdXJhdGlvblByZWNpc2UoTWF0aC5hYnModCksIGZyYWN0aW9uRGlnaXRzKSxcbiAgICAgIHZhbHVlOiB0LFxuICAgIH0pO1xuICAgIGlmIChtYXJrZXJzLmxlbmd0aCA+PSBNQVhfTUFSS0VSUykgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gbWFya2Vycztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTcGFuIGdhcHMg4oCUIHRpbWUgZGVsdGFzIGJldHdlZW4gY29uc2VjdXRpdmUgc3BhbnMgKEFsdC1rZXkgb3ZlcmxheSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5HYXAge1xuICBnYXBNczogbnVtYmVyO1xuICBsZWZ0RnJhYzogbnVtYmVyO1xuICByaWdodEZyYWM6IG51bWJlcjtcbiAgcm93SW5kZXg6IG51bWJlcjtcbn1cblxuLyoqIFByb2plY3QgYW4gYWJzb2x1dGUgdGltZSBvbnRvIHRoZSB2aWV3cG9ydCBhcyBhIGNsYW1wZWQgWzAsIDFdIGZyYWN0aW9uLiAqL1xuZnVuY3Rpb24gdG9WaWV3cG9ydEZyYWMobXM6IG51bWJlciwgdmlld1N0YXJ0OiBudW1iZXIsIHJhbmdlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoKG1zIC0gdmlld1N0YXJ0KSAvIHJhbmdlLCAwKSwgMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3BhbkdhcHMoXG4gIHNwYW5zOiBTcGFuW10sXG4gIHZpZXdTdGFydDogbnVtYmVyLFxuICB2aWV3RW5kOiBudW1iZXJcbik6IFNwYW5HYXBbXSB7XG4gIGNvbnN0IHJhbmdlID0gdmlld0VuZCAtIHZpZXdTdGFydDtcbiAgaWYgKHJhbmdlIDw9IDApIHJldHVybiBbXTtcblxuICBjb25zdCBnYXBzOiBTcGFuR2FwW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBlbmRUaW1lID0gZ2V0SGlnaFJlc0luTXMoc3BhbnNbaV0uZW5kVGltZSk7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gZ2V0SGlnaFJlc0luTXMoc3BhbnNbaSArIDFdLnN0YXJ0VGltZSk7XG4gICAgY29uc3QgZ2FwTXMgPSBzdGFydFRpbWUgLSBlbmRUaW1lO1xuICAgIGlmIChnYXBNcyA8PSAwKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGxlZnRGcmFjID0gdG9WaWV3cG9ydEZyYWMoZW5kVGltZSwgdmlld1N0YXJ0LCByYW5nZSk7XG4gICAgY29uc3QgcmlnaHRGcmFjID0gdG9WaWV3cG9ydEZyYWMoc3RhcnRUaW1lLCB2aWV3U3RhcnQsIHJhbmdlKTtcbiAgICBpZiAocmlnaHRGcmFjIC0gbGVmdEZyYWMgPCAwLjAwMSkgY29udGludWU7XG5cbiAgICBnYXBzLnB1c2goeyBnYXBNcywgbGVmdEZyYWMsIHJpZ2h0RnJhYywgcm93SW5kZXg6IGkgfSk7XG4gIH1cbiAgcmV0dXJuIGdhcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BhbkRlbHRhIHtcbiAgLyoqIFRydWUgbWVhc3VyZWQgdGltZSBiZXR3ZWVuIHRoZSB0d28gc3BhbnMsIHVuYWZmZWN0ZWQgYnkgY2xhbXBpbmcuICovXG4gIGRlbHRhTXM6IG51bWJlcjtcbiAgLyoqIFZpZXdwb3J0LWNsYW1wZWQgZnJhY3Rpb24gb2YgdGhlIGFuY2hvciBzcGFuJ3MgbWVhc3VyZWQgZWRnZS4gKi9cbiAgYW5jaG9yRnJhYzogbnVtYmVyO1xuICAvKiogVmlld3BvcnQtY2xhbXBlZCBmcmFjdGlvbiBvZiB0aGUgaG92ZXJlZCBzcGFuJ3MgbWVhc3VyZWQgZWRnZS4gKi9cbiAgaG92ZXJlZEZyYWM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoaWNoIGVkZ2Ugb2YgdGhlIGFuY2hvciBzcGFuIHRoZSBtZWFzdXJlbWVudCBydW5zIGZyb206IGl0cyBlbmQgd2hlbiB0aGVcbiAgICogc3BhbnMgYXJlIGRpc2pvaW50IGFuZCB0aGUgYW5jaG9yIGNvbWVzIGZpcnN0LCBvdGhlcndpc2UgaXRzIHN0YXJ0LlxuICAgKi9cbiAgYW5jaG9yRWRnZTogJ3N0YXJ0JyB8ICdlbmQnO1xuICAvKipcbiAgICogU2V0IHdoZW4gdGhlIGhvdmVyZWQgc3BhbiBsaWVzIGVudGlyZWx5IG91dHNpZGUgdGhlIHZpZXdwb3J0IG9uIG9uZSBzaWRlLFxuICAgKiBpLmUuIGl0cyByb3cgcmVuZGVycyBhbiBvZmYtc2NyZWVuIGFycm93IHRoZSBsaW5lIHNob3VsZCBzdG9wIHNob3J0IG9mLlxuICAgKi9cbiAgaG92ZXJlZE9mZnNjcmVlbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGw7XG59XG5cbi8qKlxuICogTWVhc3VyZSB0aGUgdGVtcG9yYWwgZGVsdGEgYmV0d2VlbiBhbiBhbmNob3IgKHNlbGVjdGVkKSBzcGFuIGFuZCBhIGhvdmVyZWRcbiAqIHNwYW4gZm9yIHRoZSBBbHQraG92ZXIgbWVhc3VyZW1lbnQgb3ZlcmxheS4gT3JkZXJpbmcgdGhlIHR3byBzcGFucyBieSBzdGFydFxuICogdGltZSAoRSA9IGVhcmxpZXItc3RhcnRpbmcsIEwgPSBsYXRlci1zdGFydGluZyksIHRoZSBtZWFzdXJlbWVudCBydW5zIHRvXG4gKiBMJ3Mgc3RhcnQgZnJvbSBFJ3MgZW5kIHdoZW4gdGhlIHNwYW5zIGFyZSBkaXNqb2ludCAoXCJob3cgbG9uZyBhZnRlciBFIGVuZGVkXG4gKiBkaWQgTCBzdGFydFwiKSwgb3IgZnJvbSBFJ3Mgc3RhcnQgd2hlbiB0aGV5IG92ZXJsYXAgKFwiaG93IGxvbmcgYWZ0ZXIgRVxuICogc3RhcnRlZCBkaWQgTCBzdGFydFwiKS4gRnJhY3Rpb25zIGFyZSBjbGFtcGVkIHRvIHRoZSB2aWV3cG9ydCBsaWtlXG4gKiBgY29tcHV0ZVNwYW5HYXBzYDsgYGRlbHRhTXNgIGlzIGFsd2F5cyB0aGUgdHJ1ZSBkdXJhdGlvbi4gUmV0dXJucyBudWxsIHdoZW5cbiAqIHRoZSBtZWFzdXJlbWVudCBsaWVzIGVudGlyZWx5IG91dHNpZGUgdGhlIHZpZXdwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5EZWx0YShcbiAgYW5jaG9yOiBTcGFuLFxuICBob3ZlcmVkOiBTcGFuLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyXG4pOiBTcGFuRGVsdGEgfCBudWxsIHtcbiAgY29uc3QgcmFuZ2UgPSB2aWV3RW5kIC0gdmlld1N0YXJ0O1xuICBpZiAocmFuZ2UgPD0gMCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgYW5jaG9yU3RhcnQgPSBnZXRIaWdoUmVzSW5NcyhhbmNob3Iuc3RhcnRUaW1lKTtcbiAgY29uc3QgaG92ZXJlZFN0YXJ0ID0gZ2V0SGlnaFJlc0luTXMoaG92ZXJlZC5zdGFydFRpbWUpO1xuICBjb25zdCBhbmNob3JJc0VhcmxpZXIgPSBhbmNob3JTdGFydCA8PSBob3ZlcmVkU3RhcnQ7XG4gIGNvbnN0IGVhcmxpZXJTdGFydCA9IGFuY2hvcklzRWFybGllciA/IGFuY2hvclN0YXJ0IDogaG92ZXJlZFN0YXJ0O1xuICBjb25zdCBlYXJsaWVyRW5kID0gZ2V0SGlnaFJlc0luTXMoXG4gICAgYW5jaG9ySXNFYXJsaWVyID8gYW5jaG9yLmVuZFRpbWUgOiBob3ZlcmVkLmVuZFRpbWVcbiAgKTtcbiAgY29uc3QgbGF0ZXJTdGFydCA9IGFuY2hvcklzRWFybGllciA/IGhvdmVyZWRTdGFydCA6IGFuY2hvclN0YXJ0O1xuXG4gIGNvbnN0IG9yaWdpbk1zID0gZWFybGllckVuZCA8PSBsYXRlclN0YXJ0ID8gZWFybGllckVuZCA6IGVhcmxpZXJTdGFydDtcbiAgY29uc3QgZGVsdGFNcyA9IGxhdGVyU3RhcnQgLSBvcmlnaW5NcztcblxuICAvLyBFbnRpcmVseSBvdXRzaWRlIHRoZSB2aWV3cG9ydC4gQ29tcGFyZWQgaW4gdGltZS1zcGFjZSAobm90IGNsYW1wZWRcbiAgLy8gZnJhY3Rpb25zKSBzbyBhIHplcm8tZGVsdGEgcG9pbnQgc2l0dGluZyBleGFjdGx5IG9uIGEgdmlld3BvcnQgZWRnZSDigJRcbiAgLy8gZS5nLiB0aGUgcm9vdCBzcGFuIHNlbGVjdGVkIGF0IGRlZmF1bHQgem9vbSDigJQgc3RpbGwgcmVuZGVycy5cbiAgaWYgKGxhdGVyU3RhcnQgPCB2aWV3U3RhcnQgfHwgb3JpZ2luTXMgPiB2aWV3RW5kKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcmlnaW5GcmFjID0gdG9WaWV3cG9ydEZyYWMob3JpZ2luTXMsIHZpZXdTdGFydCwgcmFuZ2UpO1xuICBjb25zdCBsYXRlckZyYWMgPSB0b1ZpZXdwb3J0RnJhYyhsYXRlclN0YXJ0LCB2aWV3U3RhcnQsIHJhbmdlKTtcblxuICBjb25zdCBob3ZlcmVkRW5kID0gZ2V0SGlnaFJlc0luTXMoaG92ZXJlZC5lbmRUaW1lKTtcblxuICByZXR1cm4ge1xuICAgIGRlbHRhTXMsXG4gICAgYW5jaG9yRnJhYzogYW5jaG9ySXNFYXJsaWVyID8gb3JpZ2luRnJhYyA6IGxhdGVyRnJhYyxcbiAgICBob3ZlcmVkRnJhYzogYW5jaG9ySXNFYXJsaWVyID8gbGF0ZXJGcmFjIDogb3JpZ2luRnJhYyxcbiAgICBhbmNob3JFZGdlOiBhbmNob3JJc0VhcmxpZXIgJiYgZWFybGllckVuZCA8PSBsYXRlclN0YXJ0ID8gJ2VuZCcgOiAnc3RhcnQnLFxuICAgIGhvdmVyZWRPZmZzY3JlZW46XG4gICAgICBob3ZlcmVkU3RhcnQgPiB2aWV3RW5kID8gJ3JpZ2h0JyA6IGhvdmVyZWRFbmQgPCB2aWV3U3RhcnQgPyAnbGVmdCcgOiBudWxsLFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlc291cmNlIGNvbG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBSRVNPVVJDRV9DT0xPUlM6IFJlY29yZDxcbiAgc3RyaW5nLFxuICB7XG4gICAgYmc6IHN0cmluZztcbiAgICBib3JkZXI6IHN0cmluZztcbiAgICBlcnJvckJnPzogc3RyaW5nO1xuICAgIGVycm9yQm9yZGVyPzogc3RyaW5nO1xuICB9XG4+ID0ge1xuICBydW46IHtcbiAgICBiZzogJ3ZhcigtLWRzLWJsdWUtMjAwKScsXG4gICAgYm9yZGVyOiAndmFyKC0tZHMtYmx1ZS01MDApJyxcbiAgICBlcnJvckJnOiAndmFyKC0tZHMtcmVkLTIwMCknLFxuICAgIGVycm9yQm9yZGVyOiAndmFyKC0tZHMtcmVkLTUwMCknLFxuICB9LFxuICBzdGVwOiB7XG4gICAgYmc6ICd2YXIoLS1kcy1ncmVlbi0yMDApJyxcbiAgICBib3JkZXI6ICd2YXIoLS1kcy1ncmVlbi01MDApJyxcbiAgICBlcnJvckJnOiAndmFyKC0tZHMtcmVkLTIwMCknLFxuICAgIGVycm9yQm9yZGVyOiAndmFyKC0tZHMtcmVkLTUwMCknLFxuICB9LFxuICAvLyBQYXNzaXZlIHNwYW5zIChob29rcykgc3RheSBncmF5IOKAlCBtYXRjaGVzIGV2ZW50LWxpc3QgaWNvbnMgYW5kIHRoZSBtaW5pbWFwLlxuICBob29rOiB7XG4gICAgYmc6ICd2YXIoLS1kcy1ncmF5LTIwMCknLFxuICAgIGJvcmRlcjogJ3ZhcigtLWRzLWdyYXktNTAwKScsXG4gICAgZXJyb3JCZzogJ3ZhcigtLWRzLXJlZC0yMDApJyxcbiAgICBlcnJvckJvcmRlcjogJ3ZhcigtLWRzLXJlZC01MDApJyxcbiAgfSxcbiAgc2xlZXA6IHtcbiAgICBiZzogJ3ZhcigtLWRzLXB1cnBsZS0yMDApJyxcbiAgICBib3JkZXI6ICd2YXIoLS1kcy1wdXJwbGUtNTAwKScsXG4gICAgZXJyb3JCZzogJ3ZhcigtLWRzLXJlZC0yMDApJyxcbiAgICBlcnJvckJvcmRlcjogJ3ZhcigtLWRzLXJlZC01MDApJyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIGJnOiAndmFyKC0tZHMtZ3JheS0yMDApJyxcbiAgICBib3JkZXI6ICd2YXIoLS1kcy1ncmF5LTUwMCknLFxuICAgIGVycm9yQmc6ICd2YXIoLS1kcy1yZWQtMjAwKScsXG4gICAgZXJyb3JCb3JkZXI6ICd2YXIoLS1kcy1yZWQtNTAwKScsXG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2VDb2xvcihyZXNvdXJjZTogc3RyaW5nKToge1xuICBiZzogc3RyaW5nO1xuICBib3JkZXI6IHN0cmluZztcbiAgZXJyb3JCZz86IHN0cmluZztcbiAgZXJyb3JCb3JkZXI/OiBzdHJpbmc7XG59IHtcbiAgcmV0dXJuIFJFU09VUkNFX0NPTE9SU1tyZXNvdXJjZV0gPz8gUkVTT1VSQ0VfQ09MT1JTLmRlZmF1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3BhbiBzZWdtZW50cyDigJQgc3BsaXQgYSB0aW1lbGluZSBiYXIgaW50byBjb2xvcmVkIHNlY3Rpb25zIGJ5IGV2ZW50IHN0YXRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU2VnbWVudFN0YXR1cyA9XG4gIHwgJ3F1ZXVlZCdcbiAgfCAncGVuZGluZydcbiAgfCAncnVubmluZydcbiAgfCAnY29tcGxldGVkJ1xuICB8ICdmYWlsZWQnXG4gIHwgJ3JldHJ5aW5nJ1xuICB8ICdzdWNjZWVkZWQnXG4gIHwgJ3dhaXRpbmcnXG4gIHwgJ3NsZWVwaW5nJ1xuICB8ICdyZWNlaXZlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VnbWVudCB7XG4gIHN0YXJ0RnJhY3Rpb246IG51bWJlcjtcbiAgZW5kRnJhY3Rpb246IG51bWJlcjtcbiAgc3RhdHVzOiBTZWdtZW50U3RhdHVzO1xufVxuXG5mdW5jdGlvbiBjbGFtcEZyYWN0aW9uKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gdGltZVRvRnJhY3Rpb24oXG4gIHRpbWU6IG51bWJlcixcbiAgc3BhblN0YXJ0OiBudW1iZXIsXG4gIHNwYW5EdXJhdGlvbjogbnVtYmVyXG4pOiBudW1iZXIge1xuICBpZiAoc3BhbkR1cmF0aW9uIDw9IDApIHJldHVybiAwO1xuICByZXR1cm4gY2xhbXBGcmFjdGlvbigodGltZSAtIHNwYW5TdGFydCkgLyBzcGFuRHVyYXRpb24pO1xufVxuXG5pbnRlcmZhY2UgRXZlbnRNYXJrIHtcbiAgdGltZTogbnVtYmVyO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHNvcnRlZEV2ZW50TWFya3MoXG4gIGV2ZW50czogU3BhbkV2ZW50W10sXG4gIHJlbGV2YW50TmFtZXM6IHN0cmluZ1tdXG4pOiBFdmVudE1hcmtbXSB7XG4gIHJldHVybiBldmVudHNcbiAgICAuZmlsdGVyKChlKSA9PiByZWxldmFudE5hbWVzLmluY2x1ZGVzKGUubmFtZSkpXG4gICAgLm1hcCgoZSkgPT4gKHsgdGltZTogZ2V0SGlnaFJlc0luTXMoZS50aW1lc3RhbXApLCB0eXBlOiBlLm5hbWUgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEudGltZSAtIGIudGltZSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdGVwU2VnbWVudHNGcm9tU3BhbihcbiAgc3RhcnRNczogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBldmVudHM6IFNwYW5FdmVudFtdXG4pOiBTZWdtZW50W10ge1xuICBjb25zdCBzZWdtZW50czogU2VnbWVudFtdID0gW107XG4gIGlmIChkdXJhdGlvbiA8PSAwKSByZXR1cm4gc2VnbWVudHM7XG5cbiAgY29uc3QgbWFya3MgPSBzb3J0ZWRFdmVudE1hcmtzKGV2ZW50cywgW1xuICAgICdzdGVwX3N0YXJ0ZWQnLFxuICAgICdzdGVwX3JldHJ5aW5nJyxcbiAgICAnc3RlcF9mYWlsZWQnLFxuICAgICdzdGVwX2NvbXBsZXRlZCcsXG4gIF0pO1xuXG4gIGlmIChtYXJrcy5sZW5ndGggPT09IDApIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgc3RhcnRGcmFjdGlvbjogMCwgZW5kRnJhY3Rpb246IDEsIHN0YXR1czogJ3F1ZXVlZCcgfSk7XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgY29uc3QgZmlyc3RGcmFjdGlvbiA9IHRpbWVUb0ZyYWN0aW9uKG1hcmtzWzBdLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKTtcbiAgaWYgKGZpcnN0RnJhY3Rpb24gPiAwLjAwMSkge1xuICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgc3RhcnRGcmFjdGlvbjogMCxcbiAgICAgIGVuZEZyYWN0aW9uOiBmaXJzdEZyYWN0aW9uLFxuICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtYXJrID0gbWFya3NbaV07XG4gICAgY29uc3QgbWFya0ZyYWMgPSB0aW1lVG9GcmFjdGlvbihtYXJrLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKTtcbiAgICBjb25zdCBuZXh0TWFyayA9IG1hcmtzW2kgKyAxXTtcbiAgICBjb25zdCBuZXh0RnJhYyA9IG5leHRNYXJrXG4gICAgICA/IHRpbWVUb0ZyYWN0aW9uKG5leHRNYXJrLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKVxuICAgICAgOiAxO1xuXG4gICAgaWYgKG1hcmsudHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcpIHtcbiAgICAgIGlmIChpID09PSBtYXJrcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgIHN0YXJ0RnJhY3Rpb246IG1hcmtGcmFjLFxuICAgICAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2NlZWRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dFR5cGUgPSBuZXh0TWFyay50eXBlO1xuICAgICAgICBjb25zdCBhdHRlbXB0U3RhdHVzOiBTZWdtZW50U3RhdHVzID1cbiAgICAgICAgICBuZXh0VHlwZSA9PT0gJ3N0ZXBfcmV0cnlpbmcnIHx8IG5leHRUeXBlID09PSAnc3RlcF9mYWlsZWQnXG4gICAgICAgICAgICA/ICdmYWlsZWQnXG4gICAgICAgICAgICA6IG5leHRUeXBlID09PSAnc3RlcF9jb21wbGV0ZWQnXG4gICAgICAgICAgICAgID8gJ3N1Y2NlZWRlZCdcbiAgICAgICAgICAgICAgOiAncmV0cnlpbmcnO1xuICAgICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgICBzdGFydEZyYWN0aW9uOiBtYXJrRnJhYyxcbiAgICAgICAgICBlbmRGcmFjdGlvbjogbmV4dEZyYWMsXG4gICAgICAgICAgc3RhdHVzOiBhdHRlbXB0U3RhdHVzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hcmsudHlwZSA9PT0gJ3N0ZXBfcmV0cnlpbmcnKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgc3RhcnRGcmFjdGlvbjogbWFya0ZyYWMsXG4gICAgICAgIGVuZEZyYWN0aW9uOiBuZXh0RnJhYyxcbiAgICAgICAgc3RhdHVzOiAncmV0cnlpbmcnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXJrLnR5cGUgPT09ICdzdGVwX2ZhaWxlZCcpIHtcbiAgICAgIGlmIChtYXJrRnJhYyA8IDAuOTk5KSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgIHN0YXJ0RnJhY3Rpb246IG1hcmtGcmFjLFxuICAgICAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUhvb2tTZWdtZW50c0Zyb21TcGFuKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGV2ZW50czogU3BhbkV2ZW50W11cbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcbiAgaWYgKGR1cmF0aW9uIDw9IDApIHJldHVybiBzZWdtZW50cztcblxuICBjb25zdCBkaXNwb3NlZCA9IHNvcnRlZEV2ZW50TWFya3MoZXZlbnRzLCBbJ2hvb2tfZGlzcG9zZWQnXSlbMF07XG4gIGNvbnN0IGRpc3Bvc2VkRnJhYyA9IGRpc3Bvc2VkXG4gICAgPyB0aW1lVG9GcmFjdGlvbihkaXNwb3NlZC50aW1lLCBzdGFydE1zLCBkdXJhdGlvbilcbiAgICA6IG51bGw7XG5cbiAgY29uc3Qgd2FpdGluZ0VuZCA9IGRpc3Bvc2VkRnJhYyA/PyAxO1xuICBpZiAod2FpdGluZ0VuZCA+IDAuMDAxKSB7XG4gICAgc2VnbWVudHMucHVzaCh7XG4gICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgZW5kRnJhY3Rpb246IHdhaXRpbmdFbmQsXG4gICAgICBzdGF0dXM6ICd3YWl0aW5nJyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkaXNwb3NlZEZyYWMgIT09IG51bGwgJiYgZGlzcG9zZWRGcmFjIDwgMC45OTkpIHtcbiAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgIHN0YXJ0RnJhY3Rpb246IGRpc3Bvc2VkRnJhYyxcbiAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgc3RhdHVzOiAnc3VjY2VlZGVkJyxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVNsZWVwU2VnbWVudHNGcm9tU3BhbihcbiAgX3N0YXJ0TXM6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgX2V2ZW50czogU3BhbkV2ZW50W11cbik6IFNlZ21lbnRbXSB7XG4gIGlmIChkdXJhdGlvbiA8PSAwKSByZXR1cm4gW107XG4gIHJldHVybiBbeyBzdGFydEZyYWN0aW9uOiAwLCBlbmRGcmFjdGlvbjogMSwgc3RhdHVzOiAnc2xlZXBpbmcnIH1dO1xufVxuXG5mdW5jdGlvbiBydW5TZWdtZW50U3RhdHVzKHJ1blN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkKTogU2VnbWVudFN0YXR1cyB7XG4gIGlmIChydW5TdGF0dXMgPT09ICdmYWlsZWQnKSByZXR1cm4gJ2ZhaWxlZCc7XG4gIGlmIChydW5TdGF0dXMgPT09ICdwZW5kaW5nJykgcmV0dXJuICdwZW5kaW5nJztcbiAgaWYgKHJ1blN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gJ3J1bm5pbmcnO1xuICByZXR1cm4gJ2NvbXBsZXRlZCc7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSdW5TZWdtZW50c0Zyb21TcGFuKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGFjdGl2ZVN0YXJ0TXM6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZXZlbnRzOiBTcGFuRXZlbnRbXSxcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcbiAgaWYgKGR1cmF0aW9uIDw9IDApIHJldHVybiBzZWdtZW50cztcblxuICBjb25zdCBzb3J0ZWQgPSBbLi4uZXZlbnRzXVxuICAgIC5tYXAoKGUpID0+ICh7IG5hbWU6IGUubmFtZSwgdGltZTogZ2V0SGlnaFJlc0luTXMoZS50aW1lc3RhbXApIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpbWUgLSBiLnRpbWUpO1xuXG4gIGNvbnN0IHJ1bkRhdGEgPSBhdHRyaWJ1dGVzPy5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCBydW5TdGF0dXMgPSBydW5EYXRhPy5zdGF0dXMgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGhhc1J1bkNyZWF0ZWQgPSBzb3J0ZWQuc29tZSgoZSkgPT4gZS5uYW1lID09PSAncnVuX2NyZWF0ZWQnKTtcblxuICBpZiAoIWhhc1J1bkNyZWF0ZWQpIHtcbiAgICByZXR1cm4gY29tcHV0ZVYxUnVuU2VnbWVudHMoc3RhcnRNcywgZHVyYXRpb24sIGFjdGl2ZVN0YXJ0TXMsIHJ1blN0YXR1cyk7XG4gIH1cblxuICBjb25zdCBmYWlsZWRFdmVudCA9IHNvcnRlZC5maW5kKChlKSA9PiBlLm5hbWUgPT09ICdydW5fZmFpbGVkJyk7XG5cbiAgbGV0IGN1cnNvciA9IDA7XG4gIGlmIChhY3RpdmVTdGFydE1zICE9PSB1bmRlZmluZWQgJiYgYWN0aXZlU3RhcnRNcyA+IHN0YXJ0TXMpIHtcbiAgICBjb25zdCBxdWV1ZWRGcmFjID0gdGltZVRvRnJhY3Rpb24oYWN0aXZlU3RhcnRNcywgc3RhcnRNcywgZHVyYXRpb24pO1xuICAgIGlmIChxdWV1ZWRGcmFjID4gMC4wMDEpIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgICBlbmRGcmFjdGlvbjogcXVldWVkRnJhYyxcbiAgICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICAgIH0pO1xuICAgICAgY3Vyc29yID0gcXVldWVkRnJhYztcbiAgICB9XG4gIH1cblxuICBzZWdtZW50cy5wdXNoKHtcbiAgICBzdGFydEZyYWN0aW9uOiBjdXJzb3IsXG4gICAgZW5kRnJhY3Rpb246IDEsXG4gICAgc3RhdHVzOiBmYWlsZWRFdmVudCA/ICdmYWlsZWQnIDogcnVuU2VnbWVudFN0YXR1cyhydW5TdGF0dXMpLFxuICB9KTtcblxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVWMVJ1blNlZ21lbnRzKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGFjdGl2ZVN0YXJ0TXM6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgcnVuU3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcblxuICBsZXQgY3Vyc29yID0gMDtcbiAgaWYgKGFjdGl2ZVN0YXJ0TXMgIT09IHVuZGVmaW5lZCAmJiBhY3RpdmVTdGFydE1zID4gc3RhcnRNcykge1xuICAgIGNvbnN0IHF1ZXVlZEZyYWMgPSB0aW1lVG9GcmFjdGlvbihhY3RpdmVTdGFydE1zLCBzdGFydE1zLCBkdXJhdGlvbik7XG4gICAgaWYgKHF1ZXVlZEZyYWMgPiAwLjAwMSkge1xuICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgIHN0YXJ0RnJhY3Rpb246IDAsXG4gICAgICAgIGVuZEZyYWN0aW9uOiBxdWV1ZWRGcmFjLFxuICAgICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgfSk7XG4gICAgICBjdXJzb3IgPSBxdWV1ZWRGcmFjO1xuICAgIH1cbiAgfVxuXG4gIHNlZ21lbnRzLnB1c2goe1xuICAgIHN0YXJ0RnJhY3Rpb246IGN1cnNvcixcbiAgICBlbmRGcmFjdGlvbjogMSxcbiAgICBzdGF0dXM6IHJ1blNlZ21lbnRTdGF0dXMocnVuU3RhdHVzKSxcbiAgfSk7XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG4vKipcbiAqIENvbXB1dGUgZXZlbnQtYmFzZWQgc2VnbWVudHMgZm9yIGEgc3Bhbi4gRGlzcGF0Y2hlcyBvbiBgc3Bhbi5yZXNvdXJjZWBcbiAqIHRvIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZS10eXBlLXNwZWNpZmljIHNlZ21lbnQgYnVpbGRlci5cbiAqIFJldHVybnMgYW4gZW1wdHkgYXJyYXkgZm9yIGdlbmVyaWMgKG5vbi13b3JrZmxvdykgc3BhbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3BhblNlZ21lbnRzKHNwYW46IFNwYW4pOiBTZWdtZW50W10ge1xuICBjb25zdCBzdGFydE1zID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpO1xuICBjb25zdCBkdXJhdGlvbiA9IGdldFNwYW5EdXJhdGlvbk1zKHNwYW4pO1xuICBjb25zdCBhY3RpdmVTdGFydE1zID0gc3Bhbi5hY3RpdmVTdGFydFRpbWVcbiAgICA/IGdldEhpZ2hSZXNJbk1zKHNwYW4uYWN0aXZlU3RhcnRUaW1lKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIHN3aXRjaCAoc3Bhbi5yZXNvdXJjZSkge1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgcmV0dXJuIGNvbXB1dGVTdGVwU2VnbWVudHNGcm9tU3BhbihzdGFydE1zLCBkdXJhdGlvbiwgc3Bhbi5ldmVudHMpO1xuICAgIGNhc2UgJ2hvb2snOlxuICAgICAgcmV0dXJuIGNvbXB1dGVIb29rU2VnbWVudHNGcm9tU3BhbihzdGFydE1zLCBkdXJhdGlvbiwgc3Bhbi5ldmVudHMpO1xuICAgIGNhc2UgJ3NsZWVwJzpcbiAgICAgIHJldHVybiBjb21wdXRlU2xlZXBTZWdtZW50c0Zyb21TcGFuKHN0YXJ0TXMsIGR1cmF0aW9uLCBzcGFuLmV2ZW50cyk7XG4gICAgY2FzZSAncnVuJzpcbiAgICAgIHJldHVybiBjb21wdXRlUnVuU2VnbWVudHNGcm9tU3BhbihcbiAgICAgICAgc3RhcnRNcyxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIGFjdGl2ZVN0YXJ0TXMsXG4gICAgICAgIHNwYW4uZXZlbnRzLFxuICAgICAgICBzcGFuLmF0dHJpYnV0ZXNcbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNwYW4gbWFya2VycyDigJQgcG9pbnQtaW4tdGltZSBldmVudHMgcmVuZGVyZWQgYXMgdGlja3Mgb24gdG9wIG9mIGEgYmFyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTcGFuTWFya2VyIHtcbiAgdGltZU1zOiBudW1iZXI7XG59XG5cbi8vIGBob29rX3JlY2VpdmVkYCA9IGEgcmVzdW1wdGlvbjsgYGF0dHJfc2V0YCA9IGF0dHJpYnV0ZXMgd3JpdHRlbiBtaWQtc3Bhbi5cbmNvbnN0IE1BUktFUl9FVkVOVF9OQU1FUyA9IFsnaG9va19yZWNlaXZlZCcsICdhdHRyX3NldCddO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5NYXJrZXJzKHNwYW46IFNwYW4pOiBTcGFuTWFya2VyW10ge1xuICByZXR1cm4gc29ydGVkRXZlbnRNYXJrcyhzcGFuLmV2ZW50cywgTUFSS0VSX0VWRU5UX05BTUVTKS5tYXAoKG1hcmspID0+ICh7XG4gICAgdGltZU1zOiBtYXJrLnRpbWUsXG4gIH0pKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPZmZzY3JlZW5TaWRlIHtcbiAgY291bnQ6IG51bWJlcjtcbiAgLyoqIE5lYXJlc3Qgb2ZmLXNjcmVlbiBtYXJrZXIg4oCUIHRoZSBvbmUgYSByZXZlYWwganVtcHMgdG8uICovXG4gIG5lYXJlc3RNczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9mZnNjcmVlbk1hcmtlcnMge1xuICBsZWZ0OiBPZmZzY3JlZW5TaWRlIHwgbnVsbDtcbiAgcmlnaHQ6IE9mZnNjcmVlblNpZGUgfCBudWxsO1xufVxuXG4vKiogUGFydGl0aW9uIG1hcmtlcnMgb3V0c2lkZSBgW3Zpc2libGVTdGFydE1zLCB2aXNpYmxlRW5kTXNdYCBieSBzaWRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzY3JlZW5NYXJrZXJzKFxuICBtYXJrZXJzOiBTcGFuTWFya2VyW10sXG4gIHZpc2libGVTdGFydE1zOiBudW1iZXIsXG4gIHZpc2libGVFbmRNczogbnVtYmVyXG4pOiBPZmZzY3JlZW5NYXJrZXJzIHtcbiAgbGV0IGxlZnRDb3VudCA9IDA7XG4gIGxldCByaWdodENvdW50ID0gMDtcbiAgbGV0IG5lYXJlc3RMZWZ0ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICBsZXQgbmVhcmVzdFJpZ2h0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBmb3IgKGNvbnN0IHsgdGltZU1zIH0gb2YgbWFya2Vycykge1xuICAgIGlmICh0aW1lTXMgPCB2aXNpYmxlU3RhcnRNcykge1xuICAgICAgbGVmdENvdW50Kys7XG4gICAgICBpZiAodGltZU1zID4gbmVhcmVzdExlZnQpIG5lYXJlc3RMZWZ0ID0gdGltZU1zO1xuICAgIH0gZWxzZSBpZiAodGltZU1zID4gdmlzaWJsZUVuZE1zKSB7XG4gICAgICByaWdodENvdW50Kys7XG4gICAgICBpZiAodGltZU1zIDwgbmVhcmVzdFJpZ2h0KSBuZWFyZXN0UmlnaHQgPSB0aW1lTXM7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgbGVmdDogbGVmdENvdW50ID4gMCA/IHsgY291bnQ6IGxlZnRDb3VudCwgbmVhcmVzdE1zOiBuZWFyZXN0TGVmdCB9IDogbnVsbCxcbiAgICByaWdodDpcbiAgICAgIHJpZ2h0Q291bnQgPiAwID8geyBjb3VudDogcmlnaHRDb3VudCwgbmVhcmVzdE1zOiBuZWFyZXN0UmlnaHQgfSA6IG51bGwsXG4gIH07XG59XG4iXX0=
|
|
420
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBWXZCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFhO0lBQzdDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFFdEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsUUFBUTtZQUFFLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsTUFBTTtZQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFR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IFNwYW4sIFNwYW5FdmVudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZm9ybWF0RHVyYXRpb24sXG4gIGZvcm1hdER1cmF0aW9uUHJlY2lzZSxcbiAgZ2V0SGlnaFJlc0luTXMsXG59IGZyb20gJy4vdXRpbC90aW1pbmcnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJvb3QgYm91bmRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSb290Qm91bmRzIHtcbiAgc3RhcnRUaW1lOiBudW1iZXI7XG4gIGVuZFRpbWU6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVSb290Qm91bmRzKHNwYW5zOiBTcGFuW10pOiBSb290Qm91bmRzIHtcbiAgbGV0IG1pblN0YXJ0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBsZXQgbWF4RW5kID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXG4gIGZvciAoY29uc3Qgc3BhbiBvZiBzcGFucykge1xuICAgIGNvbnN0IHMgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gICAgY29uc3QgZSA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZW5kVGltZSk7XG4gICAgaWYgKHMgPCBtaW5TdGFydCkgbWluU3RhcnQgPSBzO1xuICAgIGlmIChlID4gbWF4RW5kKSBtYXhFbmQgPSBlO1xuICB9XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluU3RhcnQpIHx8ICFOdW1iZXIuaXNGaW5pdGUobWF4RW5kKSkge1xuICAgIHJldHVybiB7IHN0YXJ0VGltZTogMCwgZW5kVGltZTogMSwgZHVyYXRpb246IDEgfTtcbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5tYXgobWF4RW5kIC0gbWluU3RhcnQsIDEpO1xuICByZXR1cm4geyBzdGFydFRpbWU6IG1pblN0YXJ0LCBlbmRUaW1lOiBtYXhFbmQsIGR1cmF0aW9uIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFuRHVyYXRpb25NcyhzcGFuOiBTcGFuKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KFxuICAgIDAsXG4gICAgZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKSAtIGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTcGFuRXJyb3JlZChzcGFuOiBTcGFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHdvcmtmbG93U3RhdHVzID0gKHNwYW4uYXR0cmlidXRlcy5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgID8uc3RhdHVzIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNwYW4uc3RhdHVzLmNvZGUgPT09IDIgfHwgd29ya2Zsb3dTdGF0dXMgPT09ICdmYWlsZWQnO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZpZXdwb3J0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydFJhbmdlIHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2xhbXAgYSBjYW5kaWRhdGUgdmlld3BvcnQgdG8gdGhlIHJvb3QgZXh0ZW50LiBUaGUgcmVxdWVzdGVkIGR1cmF0aW9uIGlzXG4gKiBwcmVzZXJ2ZWQgd2hlcmUgcG9zc2libGUgKGNsYW1wZWQgdG8gW21pbkR1cmF0aW9uTXMsIHJvb3QgZHVyYXRpb25dKSwgdGhlblxuICogdGhlIHdpbmRvdyBpcyBzaGlmdGVkIGJhY2sgaW5zaWRlIHRoZSByb290IGJvdW5kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wVmlld3BvcnRUb1Jvb3QoXG4gIG5leHQ6IFZpZXdwb3J0UmFuZ2UsXG4gIHJvb3RTdGFydDogbnVtYmVyLFxuICByb290RW5kOiBudW1iZXIsXG4gIG1pbkR1cmF0aW9uTXM6IG51bWJlclxuKTogVmlld3BvcnRSYW5nZSB7XG4gIGNvbnN0IHJvb3REdXJhdGlvbiA9IE1hdGgubWF4KHJvb3RFbmQgLSByb290U3RhcnQsIG1pbkR1cmF0aW9uTXMpO1xuICBjb25zdCBkdXJhdGlvbiA9IE1hdGgubWluKFxuICAgIHJvb3REdXJhdGlvbixcbiAgICBNYXRoLm1heChtaW5EdXJhdGlvbk1zLCBuZXh0LmVuZCAtIG5leHQuc3RhcnQpXG4gICk7XG4gIGNvbnN0IG1heFN0YXJ0ID0gcm9vdEVuZCAtIGR1cmF0aW9uO1xuICBjb25zdCBzdGFydCA9IE1hdGgubWluKE1hdGgubWF4KG5leHQuc3RhcnQsIHJvb3RTdGFydCksIG1heFN0YXJ0KTtcbiAgcmV0dXJuIHsgc3RhcnQsIGVuZDogc3RhcnQgKyBkdXJhdGlvbiB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdoZWVsIGdlc3R1cmVzIOKAlCBzaGFyZWQgYmV0d2VlbiB0aGUgdGltZWxpbmUgYW5kIHRoZSBtaW5pbWFwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIENvbnZlcnQgYSB3aGVlbCBkZWx0YSB0byBwaXhlbCB1bml0cyAobGluZS1tb2RlIGRlbHRhcyBhcnJpdmUgaW4gbGluZXMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoZWVsRGVsdGFUb1BpeGVscyhkZWx0YTogbnVtYmVyLCBkZWx0YU1vZGU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBkZWx0YU1vZGUgPT09IDEgPyBkZWx0YSAqIDE2IDogZGVsdGE7XG59XG5cbi8qKlxuICogRXhwb25lbnRpYWwgem9vbSBmYWN0b3IgZm9yIGEgd2hlZWwgZ2VzdHVyZS4gQ29hcnNlIG1vdXNlLXdoZWVsIHN0ZXBzIGFyZVxuICogZGFtcGVkIGhhcmRlciB0aGFuIHRyYWNrcGFkIHBpbmNoZXMgc28gYm90aCBmZWVsIHNpbWlsYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGVlbFpvb21TY2FsZUZhY3RvcihldmVudDoge1xuICBkZWx0YVk6IG51bWJlcjtcbiAgZGVsdGFNb2RlOiBudW1iZXI7XG59KTogbnVtYmVyIHtcbiAgY29uc3QgZHkgPSB3aGVlbERlbHRhVG9QaXhlbHMoZXZlbnQuZGVsdGFZLCBldmVudC5kZWx0YU1vZGUpO1xuICBjb25zdCBpc01vdXNlV2hlZWwgPSBldmVudC5kZWx0YU1vZGUgPT09IDEgfHwgTWF0aC5hYnMoZXZlbnQuZGVsdGFZKSA+PSA1MDtcbiAgcmV0dXJuIDIgKiogKGR5IC8gKGlzTW91c2VXaGVlbCA/IDIwMCA6IDYwKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGltZSBtYXJrZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lTWFya2VyIHtcbiAgcG9zaXRpb246IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuY29uc3QgTklDRV9JTlRFUlZBTFMgPSBbXG4gIDEsIDIsIDUsIDEwLCAyMCwgNTAsIDEwMCwgMjAwLCA1MDAsIDFfMDAwLCAyXzAwMCwgNV8wMDAsIDEwXzAwMCwgMjBfMDAwLFxuICA1MF8wMDAsIDEwMF8wMDAsIDIwMF8wMDAsIDUwMF8wMDAsIDFfMDAwXzAwMCwgMl8wMDBfMDAwLCA1XzAwMF8wMDAsXG4gIDEwXzAwMF8wMDAsIDIwXzAwMF8wMDAsIDUwXzAwMF8wMDAsIDEwMF8wMDBfMDAwLCAyMDBfMDAwXzAwMCwgNTAwXzAwMF8wMDAsXG4gIDFfMDAwXzAwMF8wMDAsIDJfMDAwXzAwMF8wMDAsIDVfMDAwXzAwMF8wMDAsXG5dO1xuXG5jb25zdCBNQVhfTUFSS0VSUyA9IDg7XG5cbmNvbnN0IE1TX0lOX1NFQ09ORCA9IDEwMDA7XG5cbmZ1bmN0aW9uIHBpY2tJbnRlcnZhbCh2aWV3RHVyYXRpb246IG51bWJlciwgbWF4VGlja3M6IG51bWJlcik6IG51bWJlciB7XG4gIGZvciAoY29uc3QgaW50ZXJ2YWwgb2YgTklDRV9JTlRFUlZBTFMpIHtcbiAgICBpZiAodmlld0R1cmF0aW9uIC8gaW50ZXJ2YWwgPD0gbWF4VGlja3MpIHJldHVybiBpbnRlcnZhbDtcbiAgfVxuICByZXR1cm4gTklDRV9JTlRFUlZBTFNbTklDRV9JTlRFUlZBTFMubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVGltZU1hcmtlcnMoXG4gIHZpZXdEdXJhdGlvbjogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogVGltZU1hcmtlcltdIHtcbiAgaWYgKHZpZXdEdXJhdGlvbiA8PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgbWF4VGlja3MgPSA2O1xuICBjb25zdCBpbnRlcnZhbCA9IHBpY2tJbnRlcnZhbCh2aWV3RHVyYXRpb24sIG1heFRpY2tzKTtcblxuICAvLyBTdWItc2Vjb25kIHN0ZXBzIG5lZWQgZnJhY3Rpb25hbCBsYWJlbHMsIG9yIHRpY2tzIHBhc3QgMXMgY29sbGlkZSBhc1xuICAvLyBkdXBsaWNhdGUgd2hvbGUgc2Vjb25kcyAoXCLigKYxcywgMnMsIDJzLCAzc1wiKS4gU2NhbGUgZGVjaW1hbHMgdG8gdGhlIHN0ZXAuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzID1cbiAgICBpbnRlcnZhbCA+PSBNU19JTl9TRUNPTkRcbiAgICAgID8gMFxuICAgICAgOiBNYXRoLmNlaWwoLU1hdGgubG9nMTAoaW50ZXJ2YWwgLyBNU19JTl9TRUNPTkQpKTtcblxuICBjb25zdCBmaXJzdFRpY2sgPSBNYXRoLmNlaWwob2Zmc2V0IC8gaW50ZXJ2YWwpICogaW50ZXJ2YWw7XG4gIGNvbnN0IG1hcmtlcnM6IFRpbWVNYXJrZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IHQgPSBmaXJzdFRpY2s7IHQgPD0gb2Zmc2V0ICsgdmlld0R1cmF0aW9uOyB0ICs9IGludGVydmFsKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSAodCAtIG9mZnNldCkgLyB2aWV3RHVyYXRpb247XG4gICAgaWYgKHBvc2l0aW9uIDwgLTAuMDEgfHwgcG9zaXRpb24gPiAxLjAxKSBjb250aW51ZTtcbiAgICBtYXJrZXJzLnB1c2goe1xuICAgICAgcG9zaXRpb246IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLCAwKSwgMSksXG4gICAgICBsYWJlbDpcbiAgICAgICAgZnJhY3Rpb25EaWdpdHMgPT09IDBcbiAgICAgICAgICA/IGZvcm1hdER1cmF0aW9uKE1hdGguYWJzKHQpLCB0cnVlKVxuICAgICAgICAgIDogZm9ybWF0RHVyYXRpb25QcmVjaXNlKE1hdGguYWJzKHQpLCBmcmFjdGlvbkRpZ2l0cyksXG4gICAgICB2YWx1ZTogdCxcbiAgICB9KTtcbiAgICBpZiAobWFya2Vycy5sZW5ndGggPj0gTUFYX01BUktFUlMpIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIG1hcmtlcnM7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3BhbiBnYXBzIOKAlCB0aW1lIGRlbHRhcyBiZXR3ZWVuIGNvbnNlY3V0aXZlIHNwYW5zIChBbHQta2V5IG92ZXJsYXkpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTcGFuR2FwIHtcbiAgZ2FwTXM6IG51bWJlcjtcbiAgbGVmdEZyYWM6IG51bWJlcjtcbiAgcmlnaHRGcmFjOiBudW1iZXI7XG4gIHJvd0luZGV4OiBudW1iZXI7XG59XG5cbi8qKiBQcm9qZWN0IGFuIGFic29sdXRlIHRpbWUgb250byB0aGUgdmlld3BvcnQgYXMgYSBjbGFtcGVkIFswLCAxXSBmcmFjdGlvbi4gKi9cbmZ1bmN0aW9uIHRvVmlld3BvcnRGcmFjKG1zOiBudW1iZXIsIHZpZXdTdGFydDogbnVtYmVyLCByYW5nZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KChtcyAtIHZpZXdTdGFydCkgLyByYW5nZSwgMCksIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5HYXBzKFxuICBzcGFuczogU3BhbltdLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyXG4pOiBTcGFuR2FwW10ge1xuICBjb25zdCByYW5nZSA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGlmIChyYW5nZSA8PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgZ2FwczogU3BhbkdhcFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgZW5kVGltZSA9IGdldEhpZ2hSZXNJbk1zKHNwYW5zW2ldLmVuZFRpbWUpO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IGdldEhpZ2hSZXNJbk1zKHNwYW5zW2kgKyAxXS5zdGFydFRpbWUpO1xuICAgIGNvbnN0IGdhcE1zID0gc3RhcnRUaW1lIC0gZW5kVGltZTtcbiAgICBpZiAoZ2FwTXMgPD0gMCkgY29udGludWU7XG5cbiAgICBjb25zdCBsZWZ0RnJhYyA9IHRvVmlld3BvcnRGcmFjKGVuZFRpbWUsIHZpZXdTdGFydCwgcmFuZ2UpO1xuICAgIGNvbnN0IHJpZ2h0RnJhYyA9IHRvVmlld3BvcnRGcmFjKHN0YXJ0VGltZSwgdmlld1N0YXJ0LCByYW5nZSk7XG4gICAgaWYgKHJpZ2h0RnJhYyAtIGxlZnRGcmFjIDwgMC4wMDEpIGNvbnRpbnVlO1xuXG4gICAgZ2Fwcy5wdXNoKHsgZ2FwTXMsIGxlZnRGcmFjLCByaWdodEZyYWMsIHJvd0luZGV4OiBpIH0pO1xuICB9XG4gIHJldHVybiBnYXBzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5EZWx0YSB7XG4gIC8qKiBUcnVlIG1lYXN1cmVkIHRpbWUgYmV0d2VlbiB0aGUgdHdvIHNwYW5zLCB1bmFmZmVjdGVkIGJ5IGNsYW1waW5nLiAqL1xuICBkZWx0YU1zOiBudW1iZXI7XG4gIC8qKiBWaWV3cG9ydC1jbGFtcGVkIGZyYWN0aW9uIG9mIHRoZSBhbmNob3Igc3BhbidzIG1lYXN1cmVkIGVkZ2UuICovXG4gIGFuY2hvckZyYWM6IG51bWJlcjtcbiAgLyoqIFZpZXdwb3J0LWNsYW1wZWQgZnJhY3Rpb24gb2YgdGhlIGhvdmVyZWQgc3BhbidzIG1lYXN1cmVkIGVkZ2UuICovXG4gIGhvdmVyZWRGcmFjOiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGljaCBlZGdlIG9mIHRoZSBhbmNob3Igc3BhbiB0aGUgbWVhc3VyZW1lbnQgcnVucyBmcm9tOiBpdHMgZW5kIHdoZW4gdGhlXG4gICAqIHNwYW5zIGFyZSBkaXNqb2ludCBhbmQgdGhlIGFuY2hvciBjb21lcyBmaXJzdCwgb3RoZXJ3aXNlIGl0cyBzdGFydC5cbiAgICovXG4gIGFuY2hvckVkZ2U6ICdzdGFydCcgfCAnZW5kJztcbiAgLyoqXG4gICAqIFNldCB3aGVuIHRoZSBob3ZlcmVkIHNwYW4gbGllcyBlbnRpcmVseSBvdXRzaWRlIHRoZSB2aWV3cG9ydCBvbiBvbmUgc2lkZSxcbiAgICogaS5lLiBpdHMgcm93IHJlbmRlcnMgYW4gb2ZmLXNjcmVlbiBhcnJvdyB0aGUgbGluZSBzaG91bGQgc3RvcCBzaG9ydCBvZi5cbiAgICovXG4gIGhvdmVyZWRPZmZzY3JlZW46ICdsZWZ0JyB8ICdyaWdodCcgfCBudWxsO1xufVxuXG4vKipcbiAqIE1lYXN1cmUgdGhlIHRlbXBvcmFsIGRlbHRhIGJldHdlZW4gYW4gYW5jaG9yIChzZWxlY3RlZCkgc3BhbiBhbmQgYSBob3ZlcmVkXG4gKiBzcGFuIGZvciB0aGUgQWx0K2hvdmVyIG1lYXN1cmVtZW50IG92ZXJsYXkuIE9yZGVyaW5nIHRoZSB0d28gc3BhbnMgYnkgc3RhcnRcbiAqIHRpbWUgKEUgPSBlYXJsaWVyLXN0YXJ0aW5nLCBMID0gbGF0ZXItc3RhcnRpbmcpLCB0aGUgbWVhc3VyZW1lbnQgcnVucyB0b1xuICogTCdzIHN0YXJ0IGZyb20gRSdzIGVuZCB3aGVuIHRoZSBzcGFucyBhcmUgZGlzam9pbnQgKFwiaG93IGxvbmcgYWZ0ZXIgRSBlbmRlZFxuICogZGlkIEwgc3RhcnRcIiksIG9yIGZyb20gRSdzIHN0YXJ0IHdoZW4gdGhleSBvdmVybGFwIChcImhvdyBsb25nIGFmdGVyIEVcbiAqIHN0YXJ0ZWQgZGlkIEwgc3RhcnRcIikuIEZyYWN0aW9ucyBhcmUgY2xhbXBlZCB0byB0aGUgdmlld3BvcnQgbGlrZVxuICogYGNvbXB1dGVTcGFuR2Fwc2A7IGBkZWx0YU1zYCBpcyBhbHdheXMgdGhlIHRydWUgZHVyYXRpb24uIFJldHVybnMgbnVsbCB3aGVuXG4gKiB0aGUgbWVhc3VyZW1lbnQgbGllcyBlbnRpcmVseSBvdXRzaWRlIHRoZSB2aWV3cG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTcGFuRGVsdGEoXG4gIGFuY2hvcjogU3BhbixcbiAgaG92ZXJlZDogU3BhbixcbiAgdmlld1N0YXJ0OiBudW1iZXIsXG4gIHZpZXdFbmQ6IG51bWJlclxuKTogU3BhbkRlbHRhIHwgbnVsbCB7XG4gIGNvbnN0IHJhbmdlID0gdmlld0VuZCAtIHZpZXdTdGFydDtcbiAgaWYgKHJhbmdlIDw9IDApIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGFuY2hvclN0YXJ0ID0gZ2V0SGlnaFJlc0luTXMoYW5jaG9yLnN0YXJ0VGltZSk7XG4gIGNvbnN0IGhvdmVyZWRTdGFydCA9IGdldEhpZ2hSZXNJbk1zKGhvdmVyZWQuc3RhcnRUaW1lKTtcbiAgY29uc3QgYW5jaG9ySXNFYXJsaWVyID0gYW5jaG9yU3RhcnQgPD0gaG92ZXJlZFN0YXJ0O1xuICBjb25zdCBlYXJsaWVyU3RhcnQgPSBhbmNob3JJc0VhcmxpZXIgPyBhbmNob3JTdGFydCA6IGhvdmVyZWRTdGFydDtcbiAgY29uc3QgZWFybGllckVuZCA9IGdldEhpZ2hSZXNJbk1zKFxuICAgIGFuY2hvcklzRWFybGllciA/IGFuY2hvci5lbmRUaW1lIDogaG92ZXJlZC5lbmRUaW1lXG4gICk7XG4gIGNvbnN0IGxhdGVyU3RhcnQgPSBhbmNob3JJc0VhcmxpZXIgPyBob3ZlcmVkU3RhcnQgOiBhbmNob3JTdGFydDtcblxuICBjb25zdCBvcmlnaW5NcyA9IGVhcmxpZXJFbmQgPD0gbGF0ZXJTdGFydCA/IGVhcmxpZXJFbmQgOiBlYXJsaWVyU3RhcnQ7XG4gIGNvbnN0IGRlbHRhTXMgPSBsYXRlclN0YXJ0IC0gb3JpZ2luTXM7XG5cbiAgLy8gRW50aXJlbHkgb3V0c2lkZSB0aGUgdmlld3BvcnQuIENvbXBhcmVkIGluIHRpbWUtc3BhY2UgKG5vdCBjbGFtcGVkXG4gIC8vIGZyYWN0aW9ucykgc28gYSB6ZXJvLWRlbHRhIHBvaW50IHNpdHRpbmcgZXhhY3RseSBvbiBhIHZpZXdwb3J0IGVkZ2Ug4oCUXG4gIC8vIGUuZy4gdGhlIHJvb3Qgc3BhbiBzZWxlY3RlZCBhdCBkZWZhdWx0IHpvb20g4oCUIHN0aWxsIHJlbmRlcnMuXG4gIGlmIChsYXRlclN0YXJ0IDwgdmlld1N0YXJ0IHx8IG9yaWdpbk1zID4gdmlld0VuZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3JpZ2luRnJhYyA9IHRvVmlld3BvcnRGcmFjKG9yaWdpbk1zLCB2aWV3U3RhcnQsIHJhbmdlKTtcbiAgY29uc3QgbGF0ZXJGcmFjID0gdG9WaWV3cG9ydEZyYWMobGF0ZXJTdGFydCwgdmlld1N0YXJ0LCByYW5nZSk7XG5cbiAgY29uc3QgaG92ZXJlZEVuZCA9IGdldEhpZ2hSZXNJbk1zKGhvdmVyZWQuZW5kVGltZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWx0YU1zLFxuICAgIGFuY2hvckZyYWM6IGFuY2hvcklzRWFybGllciA/IG9yaWdpbkZyYWMgOiBsYXRlckZyYWMsXG4gICAgaG92ZXJlZEZyYWM6IGFuY2hvcklzRWFybGllciA/IGxhdGVyRnJhYyA6IG9yaWdpbkZyYWMsXG4gICAgYW5jaG9yRWRnZTogYW5jaG9ySXNFYXJsaWVyICYmIGVhcmxpZXJFbmQgPD0gbGF0ZXJTdGFydCA/ICdlbmQnIDogJ3N0YXJ0JyxcbiAgICBob3ZlcmVkT2Zmc2NyZWVuOlxuICAgICAgaG92ZXJlZFN0YXJ0ID4gdmlld0VuZCA/ICdyaWdodCcgOiBob3ZlcmVkRW5kIDwgdmlld1N0YXJ0ID8gJ2xlZnQnIDogbnVsbCxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXNvdXJjZSBjb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUkVTT1VSQ0VfQ0xBU1NfTkFNRVM6IFJlY29yZDxcbiAgc3RyaW5nLFxuICB7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgZXJyb3JDbGFzc05hbWU/OiBzdHJpbmc7XG4gIH1cbj4gPSB7XG4gIHJ1bjoge1xuICAgIGNsYXNzTmFtZTogJ2JvcmRlci1ibHVlLTUwMCBiZy1ibHVlLTIwMCcsXG4gICAgZXJyb3JDbGFzc05hbWU6ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtMjAwJyxcbiAgfSxcbiAgc3RlcDoge1xuICAgIGNsYXNzTmFtZTogJ2JvcmRlci1ncmVlbi01MDAgYmctZ3JlZW4tMjAwJyxcbiAgICBlcnJvckNsYXNzTmFtZTogJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC0yMDAnLFxuICB9LFxuICAvLyBQYXNzaXZlIHNwYW5zIChob29rcykgc3RheSBncmF5IOKAlCBtYXRjaGVzIGV2ZW50LWxpc3QgaWNvbnMgYW5kIHRoZSBtaW5pbWFwLlxuICBob29rOiB7XG4gICAgY2xhc3NOYW1lOiAnYm9yZGVyLWdyYXktNTAwIGJnLWdyYXktMjAwJyxcbiAgICBlcnJvckNsYXNzTmFtZTogJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC0yMDAnLFxuICB9LFxuICBzbGVlcDoge1xuICAgIGNsYXNzTmFtZTogJ2JvcmRlci1wdXJwbGUtNTAwIGJnLXB1cnBsZS0yMDAnLFxuICAgIGVycm9yQ2xhc3NOYW1lOiAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTIwMCcsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBjbGFzc05hbWU6ICdib3JkZXItZ3JheS01MDAgYmctZ3JheS0yMDAnLFxuICAgIGVycm9yQ2xhc3NOYW1lOiAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTIwMCcsXG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2VDbGFzc05hbWVzKHJlc291cmNlOiBzdHJpbmcpOiB7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBlcnJvckNsYXNzTmFtZT86IHN0cmluZztcbn0ge1xuICByZXR1cm4gUkVTT1VSQ0VfQ0xBU1NfTkFNRVNbcmVzb3VyY2VdID8/IFJFU09VUkNFX0NMQVNTX05BTUVTLmRlZmF1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3BhbiBzZWdtZW50cyDigJQgc3BsaXQgYSB0aW1lbGluZSBiYXIgaW50byBjb2xvcmVkIHNlY3Rpb25zIGJ5IGV2ZW50IHN0YXRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU2VnbWVudFN0YXR1cyA9XG4gIHwgJ3F1ZXVlZCdcbiAgfCAncGVuZGluZydcbiAgfCAncnVubmluZydcbiAgfCAnY29tcGxldGVkJ1xuICB8ICdmYWlsZWQnXG4gIHwgJ3JldHJ5aW5nJ1xuICB8ICdzdWNjZWVkZWQnXG4gIHwgJ3dhaXRpbmcnXG4gIHwgJ3NsZWVwaW5nJ1xuICB8ICdyZWNlaXZlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VnbWVudCB7XG4gIHN0YXJ0RnJhY3Rpb246IG51bWJlcjtcbiAgZW5kRnJhY3Rpb246IG51bWJlcjtcbiAgc3RhdHVzOiBTZWdtZW50U3RhdHVzO1xufVxuXG5mdW5jdGlvbiBjbGFtcEZyYWN0aW9uKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gdGltZVRvRnJhY3Rpb24oXG4gIHRpbWU6IG51bWJlcixcbiAgc3BhblN0YXJ0OiBudW1iZXIsXG4gIHNwYW5EdXJhdGlvbjogbnVtYmVyXG4pOiBudW1iZXIge1xuICBpZiAoc3BhbkR1cmF0aW9uIDw9IDApIHJldHVybiAwO1xuICByZXR1cm4gY2xhbXBGcmFjdGlvbigodGltZSAtIHNwYW5TdGFydCkgLyBzcGFuRHVyYXRpb24pO1xufVxuXG5pbnRlcmZhY2UgRXZlbnRNYXJrIHtcbiAgdGltZTogbnVtYmVyO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHNvcnRlZEV2ZW50TWFya3MoXG4gIGV2ZW50czogU3BhbkV2ZW50W10sXG4gIHJlbGV2YW50TmFtZXM6IHN0cmluZ1tdXG4pOiBFdmVudE1hcmtbXSB7XG4gIHJldHVybiBldmVudHNcbiAgICAuZmlsdGVyKChlKSA9PiByZWxldmFudE5hbWVzLmluY2x1ZGVzKGUubmFtZSkpXG4gICAgLm1hcCgoZSkgPT4gKHsgdGltZTogZ2V0SGlnaFJlc0luTXMoZS50aW1lc3RhbXApLCB0eXBlOiBlLm5hbWUgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEudGltZSAtIGIudGltZSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdGVwU2VnbWVudHNGcm9tU3BhbihcbiAgc3RhcnRNczogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBldmVudHM6IFNwYW5FdmVudFtdXG4pOiBTZWdtZW50W10ge1xuICBjb25zdCBzZWdtZW50czogU2VnbWVudFtdID0gW107XG4gIGlmIChkdXJhdGlvbiA8PSAwKSByZXR1cm4gc2VnbWVudHM7XG5cbiAgY29uc3QgbWFya3MgPSBzb3J0ZWRFdmVudE1hcmtzKGV2ZW50cywgW1xuICAgICdzdGVwX3N0YXJ0ZWQnLFxuICAgICdzdGVwX3JldHJ5aW5nJyxcbiAgICAnc3RlcF9mYWlsZWQnLFxuICAgICdzdGVwX2NvbXBsZXRlZCcsXG4gIF0pO1xuXG4gIGlmIChtYXJrcy5sZW5ndGggPT09IDApIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgc3RhcnRGcmFjdGlvbjogMCwgZW5kRnJhY3Rpb246IDEsIHN0YXR1czogJ3F1ZXVlZCcgfSk7XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgY29uc3QgZmlyc3RGcmFjdGlvbiA9IHRpbWVUb0ZyYWN0aW9uKG1hcmtzWzBdLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKTtcbiAgaWYgKGZpcnN0RnJhY3Rpb24gPiAwLjAwMSkge1xuICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgc3RhcnRGcmFjdGlvbjogMCxcbiAgICAgIGVuZEZyYWN0aW9uOiBmaXJzdEZyYWN0aW9uLFxuICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtYXJrID0gbWFya3NbaV07XG4gICAgY29uc3QgbWFya0ZyYWMgPSB0aW1lVG9GcmFjdGlvbihtYXJrLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKTtcbiAgICBjb25zdCBuZXh0TWFyayA9IG1hcmtzW2kgKyAxXTtcbiAgICBjb25zdCBuZXh0RnJhYyA9IG5leHRNYXJrXG4gICAgICA/IHRpbWVUb0ZyYWN0aW9uKG5leHRNYXJrLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKVxuICAgICAgOiAxO1xuXG4gICAgaWYgKG1hcmsudHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcpIHtcbiAgICAgIGlmIChpID09PSBtYXJrcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgIHN0YXJ0RnJhY3Rpb246IG1hcmtGcmFjLFxuICAgICAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2NlZWRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dFR5cGUgPSBuZXh0TWFyay50eXBlO1xuICAgICAgICBjb25zdCBhdHRlbXB0U3RhdHVzOiBTZWdtZW50U3RhdHVzID1cbiAgICAgICAgICBuZXh0VHlwZSA9PT0gJ3N0ZXBfcmV0cnlpbmcnIHx8IG5leHRUeXBlID09PSAnc3RlcF9mYWlsZWQnXG4gICAgICAgICAgICA/ICdmYWlsZWQnXG4gICAgICAgICAgICA6IG5leHRUeXBlID09PSAnc3RlcF9jb21wbGV0ZWQnXG4gICAgICAgICAgICAgID8gJ3N1Y2NlZWRlZCdcbiAgICAgICAgICAgICAgOiAncmV0cnlpbmcnO1xuICAgICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgICBzdGFydEZyYWN0aW9uOiBtYXJrRnJhYyxcbiAgICAgICAgICBlbmRGcmFjdGlvbjogbmV4dEZyYWMsXG4gICAgICAgICAgc3RhdHVzOiBhdHRlbXB0U3RhdHVzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hcmsudHlwZSA9PT0gJ3N0ZXBfcmV0cnlpbmcnKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgc3RhcnRGcmFjdGlvbjogbWFya0ZyYWMsXG4gICAgICAgIGVuZEZyYWN0aW9uOiBuZXh0RnJhYyxcbiAgICAgICAgc3RhdHVzOiAncmV0cnlpbmcnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXJrLnR5cGUgPT09ICdzdGVwX2ZhaWxlZCcpIHtcbiAgICAgIGlmIChtYXJrRnJhYyA8IDAuOTk5KSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgIHN0YXJ0RnJhY3Rpb246IG1hcmtGcmFjLFxuICAgICAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUhvb2tTZWdtZW50c0Zyb21TcGFuKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGV2ZW50czogU3BhbkV2ZW50W11cbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcbiAgaWYgKGR1cmF0aW9uIDw9IDApIHJldHVybiBzZWdtZW50cztcblxuICBjb25zdCBkaXNwb3NlZCA9IHNvcnRlZEV2ZW50TWFya3MoZXZlbnRzLCBbJ2hvb2tfZGlzcG9zZWQnXSlbMF07XG4gIGNvbnN0IGRpc3Bvc2VkRnJhYyA9IGRpc3Bvc2VkXG4gICAgPyB0aW1lVG9GcmFjdGlvbihkaXNwb3NlZC50aW1lLCBzdGFydE1zLCBkdXJhdGlvbilcbiAgICA6IG51bGw7XG5cbiAgY29uc3Qgd2FpdGluZ0VuZCA9IGRpc3Bvc2VkRnJhYyA/PyAxO1xuICBpZiAod2FpdGluZ0VuZCA+IDAuMDAxKSB7XG4gICAgc2VnbWVudHMucHVzaCh7XG4gICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgZW5kRnJhY3Rpb246IHdhaXRpbmdFbmQsXG4gICAgICBzdGF0dXM6ICd3YWl0aW5nJyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkaXNwb3NlZEZyYWMgIT09IG51bGwgJiYgZGlzcG9zZWRGcmFjIDwgMC45OTkpIHtcbiAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgIHN0YXJ0RnJhY3Rpb246IGRpc3Bvc2VkRnJhYyxcbiAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgc3RhdHVzOiAnc3VjY2VlZGVkJyxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVNsZWVwU2VnbWVudHNGcm9tU3BhbihcbiAgX3N0YXJ0TXM6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgX2V2ZW50czogU3BhbkV2ZW50W11cbik6IFNlZ21lbnRbXSB7XG4gIGlmIChkdXJhdGlvbiA8PSAwKSByZXR1cm4gW107XG4gIHJldHVybiBbeyBzdGFydEZyYWN0aW9uOiAwLCBlbmRGcmFjdGlvbjogMSwgc3RhdHVzOiAnc2xlZXBpbmcnIH1dO1xufVxuXG5mdW5jdGlvbiBydW5TZWdtZW50U3RhdHVzKHJ1blN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkKTogU2VnbWVudFN0YXR1cyB7XG4gIGlmIChydW5TdGF0dXMgPT09ICdmYWlsZWQnKSByZXR1cm4gJ2ZhaWxlZCc7XG4gIGlmIChydW5TdGF0dXMgPT09ICdwZW5kaW5nJykgcmV0dXJuICdwZW5kaW5nJztcbiAgaWYgKHJ1blN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gJ3J1bm5pbmcnO1xuICByZXR1cm4gJ2NvbXBsZXRlZCc7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSdW5TZWdtZW50c0Zyb21TcGFuKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGFjdGl2ZVN0YXJ0TXM6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZXZlbnRzOiBTcGFuRXZlbnRbXSxcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcbiAgaWYgKGR1cmF0aW9uIDw9IDApIHJldHVybiBzZWdtZW50cztcblxuICBjb25zdCBzb3J0ZWQgPSBbLi4uZXZlbnRzXVxuICAgIC5tYXAoKGUpID0+ICh7IG5hbWU6IGUubmFtZSwgdGltZTogZ2V0SGlnaFJlc0luTXMoZS50aW1lc3RhbXApIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpbWUgLSBiLnRpbWUpO1xuXG4gIGNvbnN0IHJ1bkRhdGEgPSBhdHRyaWJ1dGVzPy5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCBydW5TdGF0dXMgPSBydW5EYXRhPy5zdGF0dXMgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGhhc1J1bkNyZWF0ZWQgPSBzb3J0ZWQuc29tZSgoZSkgPT4gZS5uYW1lID09PSAncnVuX2NyZWF0ZWQnKTtcblxuICBpZiAoIWhhc1J1bkNyZWF0ZWQpIHtcbiAgICByZXR1cm4gY29tcHV0ZVYxUnVuU2VnbWVudHMoc3RhcnRNcywgZHVyYXRpb24sIGFjdGl2ZVN0YXJ0TXMsIHJ1blN0YXR1cyk7XG4gIH1cblxuICBjb25zdCBmYWlsZWRFdmVudCA9IHNvcnRlZC5maW5kKChlKSA9PiBlLm5hbWUgPT09ICdydW5fZmFpbGVkJyk7XG5cbiAgbGV0IGN1cnNvciA9IDA7XG4gIGlmIChhY3RpdmVTdGFydE1zICE9PSB1bmRlZmluZWQgJiYgYWN0aXZlU3RhcnRNcyA+IHN0YXJ0TXMpIHtcbiAgICBjb25zdCBxdWV1ZWRGcmFjID0gdGltZVRvRnJhY3Rpb24oYWN0aXZlU3RhcnRNcywgc3RhcnRNcywgZHVyYXRpb24pO1xuICAgIGlmIChxdWV1ZWRGcmFjID4gMC4wMDEpIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgICBlbmRGcmFjdGlvbjogcXVldWVkRnJhYyxcbiAgICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICAgIH0pO1xuICAgICAgY3Vyc29yID0gcXVldWVkRnJhYztcbiAgICB9XG4gIH1cblxuICBzZWdtZW50cy5wdXNoKHtcbiAgICBzdGFydEZyYWN0aW9uOiBjdXJzb3IsXG4gICAgZW5kRnJhY3Rpb246IDEsXG4gICAgc3RhdHVzOiBmYWlsZWRFdmVudCA/ICdmYWlsZWQnIDogcnVuU2VnbWVudFN0YXR1cyhydW5TdGF0dXMpLFxuICB9KTtcblxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVWMVJ1blNlZ21lbnRzKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGFjdGl2ZVN0YXJ0TXM6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgcnVuU3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcblxuICBsZXQgY3Vyc29yID0gMDtcbiAgaWYgKGFjdGl2ZVN0YXJ0TXMgIT09IHVuZGVmaW5lZCAmJiBhY3RpdmVTdGFydE1zID4gc3RhcnRNcykge1xuICAgIGNvbnN0IHF1ZXVlZEZyYWMgPSB0aW1lVG9GcmFjdGlvbihhY3RpdmVTdGFydE1zLCBzdGFydE1zLCBkdXJhdGlvbik7XG4gICAgaWYgKHF1ZXVlZEZyYWMgPiAwLjAwMSkge1xuICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgIHN0YXJ0RnJhY3Rpb246IDAsXG4gICAgICAgIGVuZEZyYWN0aW9uOiBxdWV1ZWRGcmFjLFxuICAgICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgfSk7XG4gICAgICBjdXJzb3IgPSBxdWV1ZWRGcmFjO1xuICAgIH1cbiAgfVxuXG4gIHNlZ21lbnRzLnB1c2goe1xuICAgIHN0YXJ0RnJhY3Rpb246IGN1cnNvcixcbiAgICBlbmRGcmFjdGlvbjogMSxcbiAgICBzdGF0dXM6IHJ1blNlZ21lbnRTdGF0dXMocnVuU3RhdHVzKSxcbiAgfSk7XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG4vKipcbiAqIENvbXB1dGUgZXZlbnQtYmFzZWQgc2VnbWVudHMgZm9yIGEgc3Bhbi4gRGlzcGF0Y2hlcyBvbiBgc3Bhbi5yZXNvdXJjZWBcbiAqIHRvIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZS10eXBlLXNwZWNpZmljIHNlZ21lbnQgYnVpbGRlci5cbiAqIFJldHVybnMgYW4gZW1wdHkgYXJyYXkgZm9yIGdlbmVyaWMgKG5vbi13b3JrZmxvdykgc3BhbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3BhblNlZ21lbnRzKHNwYW46IFNwYW4pOiBTZWdtZW50W10ge1xuICBjb25zdCBzdGFydE1zID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpO1xuICBjb25zdCBkdXJhdGlvbiA9IGdldFNwYW5EdXJhdGlvbk1zKHNwYW4pO1xuICBjb25zdCBhY3RpdmVTdGFydE1zID0gc3Bhbi5hY3RpdmVTdGFydFRpbWVcbiAgICA/IGdldEhpZ2hSZXNJbk1zKHNwYW4uYWN0aXZlU3RhcnRUaW1lKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIHN3aXRjaCAoc3Bhbi5yZXNvdXJjZSkge1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgcmV0dXJuIGNvbXB1dGVTdGVwU2VnbWVudHNGcm9tU3BhbihzdGFydE1zLCBkdXJhdGlvbiwgc3Bhbi5ldmVudHMpO1xuICAgIGNhc2UgJ2hvb2snOlxuICAgICAgcmV0dXJuIGNvbXB1dGVIb29rU2VnbWVudHNGcm9tU3BhbihzdGFydE1zLCBkdXJhdGlvbiwgc3Bhbi5ldmVudHMpO1xuICAgIGNhc2UgJ3NsZWVwJzpcbiAgICAgIHJldHVybiBjb21wdXRlU2xlZXBTZWdtZW50c0Zyb21TcGFuKHN0YXJ0TXMsIGR1cmF0aW9uLCBzcGFuLmV2ZW50cyk7XG4gICAgY2FzZSAncnVuJzpcbiAgICAgIHJldHVybiBjb21wdXRlUnVuU2VnbWVudHNGcm9tU3BhbihcbiAgICAgICAgc3RhcnRNcyxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIGFjdGl2ZVN0YXJ0TXMsXG4gICAgICAgIHNwYW4uZXZlbnRzLFxuICAgICAgICBzcGFuLmF0dHJpYnV0ZXNcbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNwYW4gbWFya2VycyDigJQgcG9pbnQtaW4tdGltZSBldmVudHMgcmVuZGVyZWQgYXMgdGlja3Mgb24gdG9wIG9mIGEgYmFyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTcGFuTWFya2VyIHtcbiAgdGltZU1zOiBudW1iZXI7XG59XG5cbi8vIGBob29rX3JlY2VpdmVkYCA9IGEgcmVzdW1wdGlvbjsgYGF0dHJfc2V0YCA9IGF0dHJpYnV0ZXMgd3JpdHRlbiBtaWQtc3Bhbi5cbmNvbnN0IE1BUktFUl9FVkVOVF9OQU1FUyA9IFsnaG9va19yZWNlaXZlZCcsICdhdHRyX3NldCddO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5NYXJrZXJzKHNwYW46IFNwYW4pOiBTcGFuTWFya2VyW10ge1xuICByZXR1cm4gc29ydGVkRXZlbnRNYXJrcyhzcGFuLmV2ZW50cywgTUFSS0VSX0VWRU5UX05BTUVTKS5tYXAoKG1hcmspID0+ICh7XG4gICAgdGltZU1zOiBtYXJrLnRpbWUsXG4gIH0pKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPZmZzY3JlZW5TaWRlIHtcbiAgY291bnQ6IG51bWJlcjtcbiAgLyoqIE5lYXJlc3Qgb2ZmLXNjcmVlbiBtYXJrZXIg4oCUIHRoZSBvbmUgYSByZXZlYWwganVtcHMgdG8uICovXG4gIG5lYXJlc3RNczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9mZnNjcmVlbk1hcmtlcnMge1xuICBsZWZ0OiBPZmZzY3JlZW5TaWRlIHwgbnVsbDtcbiAgcmlnaHQ6IE9mZnNjcmVlblNpZGUgfCBudWxsO1xufVxuXG4vKiogUGFydGl0aW9uIG1hcmtlcnMgb3V0c2lkZSBgW3Zpc2libGVTdGFydE1zLCB2aXNpYmxlRW5kTXNdYCBieSBzaWRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzY3JlZW5NYXJrZXJzKFxuICBtYXJrZXJzOiBTcGFuTWFya2VyW10sXG4gIHZpc2libGVTdGFydE1zOiBudW1iZXIsXG4gIHZpc2libGVFbmRNczogbnVtYmVyXG4pOiBPZmZzY3JlZW5NYXJrZXJzIHtcbiAgbGV0IGxlZnRDb3VudCA9IDA7XG4gIGxldCByaWdodENvdW50ID0gMDtcbiAgbGV0IG5lYXJlc3RMZWZ0ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICBsZXQgbmVhcmVzdFJpZ2h0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBmb3IgKGNvbnN0IHsgdGltZU1zIH0gb2YgbWFya2Vycykge1xuICAgIGlmICh0aW1lTXMgPCB2aXNpYmxlU3RhcnRNcykge1xuICAgICAgbGVmdENvdW50Kys7XG4gICAgICBpZiAodGltZU1zID4gbmVhcmVzdExlZnQpIG5lYXJlc3RMZWZ0ID0gdGltZU1zO1xuICAgIH0gZWxzZSBpZiAodGltZU1zID4gdmlzaWJsZUVuZE1zKSB7XG4gICAgICByaWdodENvdW50Kys7XG4gICAgICBpZiAodGltZU1zIDwgbmVhcmVzdFJpZ2h0KSBuZWFyZXN0UmlnaHQgPSB0aW1lTXM7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgbGVmdDogbGVmdENvdW50ID4gMCA/IHsgY291bnQ6IGxlZnRDb3VudCwgbmVhcmVzdE1zOiBuZWFyZXN0TGVmdCB9IDogbnVsbCxcbiAgICByaWdodDpcbiAgICAgIHJpZ2h0Q291bnQgPiAwID8geyBjb3VudDogcmlnaHRDb3VudCwgbmVhcmVzdE1zOiBuZWFyZXN0UmlnaHQgfSA6IG51bGwsXG4gIH07XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-viewer.d.ts","sourceRoot":"","sources":["../../src/components/trace-viewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;AAIxC,QAAA,MAAM,WAAW,GAAI,4EAQlB;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,
|
|
1
|
+
{"version":3,"file":"trace-viewer.d.ts","sourceRoot":"","sources":["../../src/components/trace-viewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;AAIxC,QAAA,MAAM,WAAW,GAAI,4EAQlB;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,4CAqCA,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -9,13 +9,21 @@ const TraceViewer = ({ run, events, sidebarData, onLoadMore, hasMore, isLoadingM
|
|
|
9
9
|
if (!run?.runId) {
|
|
10
10
|
return undefined;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
// `hasMore` is the only place that knows whether more of the log is still
|
|
13
|
+
// to be fetched, and a repeat can only be told apart from the event it
|
|
14
|
+
// repeats with the whole log in hand.
|
|
15
|
+
return buildTrace(run, events, new Date(), {
|
|
16
|
+
isCompleteHistory: !hasMore,
|
|
17
|
+
});
|
|
13
18
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- `new Date()` is intentionally not a dep
|
|
14
|
-
}, [run, events]);
|
|
19
|
+
}, [run, events, hasMore]);
|
|
20
|
+
// The sidebar shows one entity's slice of the log, so it takes the trace's
|
|
21
|
+
// answer rather than recomputing one from the slice.
|
|
22
|
+
const sidebarValue = useMemo(() => ({ ...sidebarData, duplicateEventIds: trace?.duplicateEventIds }), [sidebarData, trace]);
|
|
15
23
|
if (!trace || (loading && events.length === 0)) {
|
|
16
24
|
return _jsx(TraceViewerSkeleton, {});
|
|
17
25
|
}
|
|
18
|
-
return (_jsx(SidebarDataProvider, { value:
|
|
26
|
+
return (_jsx(SidebarDataProvider, { value: sidebarValue, children: _jsx("div", { className: "relative w-full h-full flex", children: _jsx(TraceViewerComponent, { trace: trace, onLoadMore: onLoadMore, hasMore: hasMore, isLoadingMore: isLoadingMore }) }) }));
|
|
19
27
|
};
|
|
20
28
|
export { TraceViewer };
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFzQixNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxtQkFBbUIsR0FDcEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsV0FBVyxJQUFJLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUNuQixHQUFHLEVBQ0gsTUFBTSxFQUNOLFdBQVcsRUFDWCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGFBQWEsRUFDYixPQUFPLEdBQUcsS0FBSyxHQVNoQixFQUFFLEVBQUU7SUFDSCxNQUFNLEtBQUssR0FBOEIsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNwRCxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCwwRUFBMEU7UUFDMUUsdUVBQXVFO1FBQ3ZFLHNDQUFzQztRQUN0QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDekMsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPO1NBQzVCLENBQUMsQ0FBQztRQUNILGtHQUFrRztJQUNwRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFM0IsMkVBQTJFO0lBQzNFLHFEQUFxRDtJQUNyRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQzFCLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUN2RSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FDckIsQ0FBQztJQUVGLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sS0FBQyxtQkFBbUIsS0FBRyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxPQUFPLENBQ0wsS0FBQyxtQkFBbUIsSUFBQyxLQUFLLEVBQUUsWUFBWSxZQUN0QyxjQUFLLFNBQVMsRUFBQyw2QkFBNkIsWUFDMUMsS0FBQyxvQkFBb0IsSUFDbkIsS0FBSyxFQUFFLEtBQUssRUFDWixVQUFVLEVBQUUsVUFBVSxFQUN0QixPQUFPLEVBQUUsT0FBTyxFQUNoQixhQUFhLEVBQUUsYUFBYSxHQUM1QixHQUNFLEdBQ2MsQ0FDdkIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvY29yZS9ydW50aW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGJ1aWxkVHJhY2UsIHR5cGUgVHJhY2VXaXRoTWV0YSB9IGZyb20gJy4uL2xpYi90cmFjZS1idWlsZGVyJztcbmltcG9ydCB7XG4gIHR5cGUgU2lkZWJhckRhdGFDb250ZXh0VmFsdWUsXG4gIFNpZGViYXJEYXRhUHJvdmlkZXIsXG59IGZyb20gJy4vc2lkZWJhci9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQgeyBUcmFjZVZpZXdlclNrZWxldG9uIH0gZnJvbSAnLi90cmFjZS12aWV3ZXIvY29tcG9uZW50cy90cmFjZS12aWV3ZXItc2tlbGV0b24nO1xuaW1wb3J0IHsgVHJhY2VWaWV3ZXIgYXMgVHJhY2VWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuL3RyYWNlLXZpZXdlci90cmFjZS12aWV3ZXInO1xuXG5jb25zdCBUcmFjZVZpZXdlciA9ICh7XG4gIHJ1bixcbiAgZXZlbnRzLFxuICBzaWRlYmFyRGF0YSxcbiAgb25Mb2FkTW9yZSxcbiAgaGFzTW9yZSxcbiAgaXNMb2FkaW5nTW9yZSxcbiAgbG9hZGluZyA9IGZhbHNlLFxufToge1xuICBydW46IFdvcmtmbG93UnVuO1xuICBldmVudHM6IEV2ZW50W107XG4gIHNpZGViYXJEYXRhOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZTtcbiAgb25Mb2FkTW9yZT86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgaXNMb2FkaW5nTW9yZT86IGJvb2xlYW47XG4gIGxvYWRpbmc/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCB0cmFjZTogVHJhY2VXaXRoTWV0YSB8IHVuZGVmaW5lZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcnVuPy5ydW5JZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gYGhhc01vcmVgIGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQga25vd3Mgd2hldGhlciBtb3JlIG9mIHRoZSBsb2cgaXMgc3RpbGxcbiAgICAvLyB0byBiZSBmZXRjaGVkLCBhbmQgYSByZXBlYXQgY2FuIG9ubHkgYmUgdG9sZCBhcGFydCBmcm9tIHRoZSBldmVudCBpdFxuICAgIC8vIHJlcGVhdHMgd2l0aCB0aGUgd2hvbGUgbG9nIGluIGhhbmQuXG4gICAgcmV0dXJuIGJ1aWxkVHJhY2UocnVuLCBldmVudHMsIG5ldyBEYXRlKCksIHtcbiAgICAgIGlzQ29tcGxldGVIaXN0b3J5OiAhaGFzTW9yZSxcbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzIC0tIGBuZXcgRGF0ZSgpYCBpcyBpbnRlbnRpb25hbGx5IG5vdCBhIGRlcFxuICB9LCBbcnVuLCBldmVudHMsIGhhc01vcmVdKTtcblxuICAvLyBUaGUgc2lkZWJhciBzaG93cyBvbmUgZW50aXR5J3Mgc2xpY2Ugb2YgdGhlIGxvZywgc28gaXQgdGFrZXMgdGhlIHRyYWNlJ3NcbiAgLy8gYW5zd2VyIHJhdGhlciB0aGFuIHJlY29tcHV0aW5nIG9uZSBmcm9tIHRoZSBzbGljZS5cbiAgY29uc3Qgc2lkZWJhclZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoeyAuLi5zaWRlYmFyRGF0YSwgZHVwbGljYXRlRXZlbnRJZHM6IHRyYWNlPy5kdXBsaWNhdGVFdmVudElkcyB9KSxcbiAgICBbc2lkZWJhckRhdGEsIHRyYWNlXVxuICApO1xuXG4gIGlmICghdHJhY2UgfHwgKGxvYWRpbmcgJiYgZXZlbnRzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICByZXR1cm4gPFRyYWNlVmlld2VyU2tlbGV0b24gLz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTaWRlYmFyRGF0YVByb3ZpZGVyIHZhbHVlPXtzaWRlYmFyVmFsdWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIGZsZXhcIj5cbiAgICAgICAgPFRyYWNlVmlld2VyQ29tcG9uZW50XG4gICAgICAgICAgdHJhY2U9e3RyYWNlfVxuICAgICAgICAgIG9uTG9hZE1vcmU9e29uTG9hZE1vcmV9XG4gICAgICAgICAgaGFzTW9yZT17aGFzTW9yZX1cbiAgICAgICAgICBpc0xvYWRpbmdNb3JlPXtpc0xvYWRpbmdNb3JlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9TaWRlYmFyRGF0YVByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IHsgVHJhY2VWaWV3ZXIgfTtcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/context-card.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAoB,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAuEzE;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;CACnE,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"context-card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/context-card.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAoB,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAuEzE;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;CACnE,GAAG,SAAS,CAuPZ;AAED,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AACvD,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE/C,0DAA0D;AAC1D,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC7D,0DAA0D;IAC1D,OAAO,EAAE,SAAS,CAAC;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,6EAA6E;IAC7E,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,QAAQ,EACR,IAAc,EACd,KAAgB,EAChB,UAAe,EACf,WAAe,EACf,uBAA+B,EAC/B,SAAS,EACT,OAAO,EACP,SAAS,EACT,IAAI,EACJ,iBAAuC,GACxC,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAmXvC"}
|