@workflow/web-shared 5.0.0-beta.28 → 5.0.0-beta.29

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.
Files changed (31) hide show
  1. package/dist/components/event-list-view.d.ts.map +1 -1
  2. package/dist/components/event-list-view.js +13 -1
  3. package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +1 -1
  4. package/dist/components/new-trace-viewer/components/detail-panel.js +2 -2
  5. package/dist/components/new-trace-viewer/components/event-list.js +2 -2
  6. package/dist/components/new-trace-viewer/components/split-pane.d.ts +0 -2
  7. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
  8. package/dist/components/new-trace-viewer/components/split-pane.js +9 -75
  9. package/dist/components/new-trace-viewer/trace-viewer.js +3 -3
  10. package/dist/components/sidebar/attribute-panel.d.ts +4 -1
  11. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  12. package/dist/components/sidebar/attribute-panel.js +32 -24
  13. package/dist/components/sidebar/attributes-block.d.ts +1 -0
  14. package/dist/components/sidebar/attributes-block.d.ts.map +1 -1
  15. package/dist/components/sidebar/attributes-block.js +6 -5
  16. package/dist/components/sidebar/entity-detail-panel.d.ts +5 -1
  17. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  18. package/dist/components/sidebar/entity-detail-panel.js +18 -3
  19. package/dist/components/sidebar/sidebar-data-context.d.ts +4 -0
  20. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  21. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  22. package/package.json +3 -3
  23. package/src/components/event-list-view.tsx +21 -0
  24. package/src/components/new-trace-viewer/components/detail-panel.tsx +1 -0
  25. package/src/components/new-trace-viewer/components/event-list.tsx +1 -1
  26. package/src/components/new-trace-viewer/components/split-pane.tsx +39 -95
  27. package/src/components/new-trace-viewer/trace-viewer.tsx +2 -2
  28. package/src/components/sidebar/attribute-panel.tsx +77 -22
  29. package/src/components/sidebar/attributes-block.tsx +43 -10
  30. package/src/components/sidebar/entity-detail-panel.tsx +22 -0
  31. package/src/components/sidebar/sidebar-data-context.tsx +4 -0
@@ -27,7 +27,7 @@ export interface SelectedSpanInfo {
27
27
  * This component is rendered OUTSIDE the trace viewer context — it
28
28
  * receives all data via props rather than reading from context.
29
29
  */
30
- export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting, selectedSpan, showSeparateEventOccurrenceTimestamps, }: {
30
+ export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting, selectedSpan, showSeparateEventOccurrenceTimestamps, getModuleSourceUrl, }: {
31
31
  run: WorkflowRun;
32
32
  /** Callback when a stream reference is clicked */
33
33
  onStreamClick?: (streamId: string) => void;
@@ -52,5 +52,9 @@ export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetc
52
52
  selectedSpan: SelectedSpanInfo | null;
53
53
  /** Show occurredAt separately instead of folding it into the Created timestamp. */
54
54
  showSeparateEventOccurrenceTimestamps?: boolean;
55
+ getModuleSourceUrl?: (info: {
56
+ moduleSpecifier: string;
57
+ deploymentId: string;
58
+ }) => string | undefined;
55
59
  }): React.JSX.Element | null;
56
60
  //# sourceMappingURL=entity-detail-panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-detail-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/entity-detail-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAUhE,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,4BAA4B,CAAC;AAOpC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAoB,EACpB,YAAY,EACZ,qCAA6C,GAC9C,EAAE;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,EAAE,eAAe,CAAC;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,sEAAsE;IACtE,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,iDAAiD;IACjD,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2S3B"}
1
+ {"version":3,"file":"entity-detail-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/entity-detail-panel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAUhE,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,4BAA4B,CAAC;AAOpC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAoB,EACpB,YAAY,EACZ,qCAA6C,EAC7C,kBAAkB,GACnB,EAAE;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,EAAE,eAAe,CAAC;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,sEAAsE;IACtE,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,iDAAiD;IACjD,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2T3B"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';
3
4
  import clsx from 'clsx';
4
5
  import { Send, Zap } from 'lucide-react';
5
6
  import { useCallback, useEffect, useMemo, useState } from 'react';
@@ -20,7 +21,7 @@ function isHook(data) {
20
21
  * This component is rendered OUTSIDE the trace viewer context — it
21
22
  * receives all data via props rather than reading from context.
22
23
  */
23
- export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, selectedSpan, showSeparateEventOccurrenceTimestamps = false, }) {
24
+ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, selectedSpan, showSeparateEventOccurrenceTimestamps = false, getModuleSourceUrl, }) {
24
25
  const toast = useToast();
25
26
  const [stoppingSleep, setStoppingSleep] = useState(false);
26
27
  const [showResolveHookModal, setShowResolveHookModal] = useState(false);
@@ -180,6 +181,20 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDet
180
181
  }
181
182
  return undefined;
182
183
  }, [displayData, run.workflowName]);
184
+ const moduleSourceUrl = useMemo(() => {
185
+ if (!getModuleSourceUrl || !moduleSpecifier)
186
+ return undefined;
187
+ const parsed = parseStepName(moduleSpecifier) ?? parseWorkflowName(moduleSpecifier);
188
+ if (!parsed)
189
+ return undefined;
190
+ const dataDeploymentId = displayData.deploymentId;
191
+ return getModuleSourceUrl({
192
+ moduleSpecifier: parsed.moduleSpecifier,
193
+ deploymentId: typeof dataDeploymentId === 'string'
194
+ ? dataDeploymentId
195
+ : run.deploymentId,
196
+ });
197
+ }, [getModuleSourceUrl, moduleSpecifier, displayData, run.deploymentId]);
183
198
  if (!selectedSpan || !resource || !resourceId) {
184
199
  return null;
185
200
  }
@@ -198,6 +213,6 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDet
198
213
  : 'cursor-pointer'), style: {
199
214
  background: 'var(--ds-gray-1000)',
200
215
  color: 'var(--ds-background-100)',
201
- }, children: [_jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] }))] })] })), _jsx(AttributePanel, { data: displayData, moduleSpecifier: moduleSpecifier, expiredAt: run.expiredAt, isLoading: loading, error: error ?? undefined, onStreamClick: onStreamClick, onRunClick: onRunClick, onDecrypt: onDecrypt, isDecrypting: isDecrypting, resource: resource }), rawEvents && (_jsx(EventsList, { events: rawEvents, onLoadEventData: onLoadEventData, onStreamClick: onStreamClick, onRunClick: onRunClick, encryptionKey: encryptionKey, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
216
+ }, children: [_jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] }))] })] })), _jsx(AttributePanel, { data: displayData, moduleSpecifier: moduleSpecifier, moduleSourceUrl: moduleSourceUrl, expiredAt: run.expiredAt, isLoading: loading, error: error ?? undefined, onStreamClick: onStreamClick, onRunClick: onRunClick, onDecrypt: onDecrypt, isDecrypting: isDecrypting, resource: resource }), rawEvents && (_jsx(EventsList, { events: rawEvents, onLoadEventData: onLoadEventData, onStreamClick: onStreamClick, onRunClick: onRunClick, encryptionKey: encryptionKey, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
202
217
  }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBRUwscUJBQXFCLEdBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsMkRBQTJEO0FBQzNELFNBQVMsTUFBTSxDQUFDLElBQWE7SUFDM0IsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3ZFLENBQUM7QUF5QkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFDaEMsR0FBRyxFQUNILGFBQWEsRUFDYixVQUFVLEVBQ1YsZUFBZSxFQUNmLGFBQWEsRUFDYixlQUFlLEVBQ2YsYUFBYSxFQUNiLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxH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QUMzQixZQUFZLEVBQUUsYUFBYSxHQUMzQixJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB0eXBlIHsgRXZlbnQsIEhvb2ssIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgU2VuZCwgWmFwIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICcuLi8uLi9saWIvdG9hc3QnO1xuaW1wb3J0IHsgRGVjcnlwdENsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IEF0dHJpYnV0ZVBhbmVsIH0gZnJvbSAnLi9hdHRyaWJ1dGUtcGFuZWwnO1xuaW1wb3J0IHsgRXZlbnRzTGlzdCB9IGZyb20gJy4vZXZlbnRzLWxpc3QnO1xuaW1wb3J0IHsgUmVzb2x2ZUhvb2tNb2RhbCB9IGZyb20gJy4vcmVzb2x2ZS1ob29rLW1vZGFsJztcbmltcG9ydCB7IHVzZVNpZGViYXJEYXRhT3B0aW9uYWwgfSBmcm9tICcuL3NpZGViYXItZGF0YS1jb250ZXh0JztcbmltcG9ydCB7XG4gIHR5cGUgRmV0Y2hTcGFuRGV0YWlsLFxuICB1c2VTZWxlY3RlZFNwYW5EZXRhaWwsXG59IGZyb20gJy4vdXNlLXNlbGVjdGVkLXNwYW4tZGV0YWlsJztcblxuLy8gVHlwZSBndWFyZCBmb3IgcnVudGltZSB2YWxpZGF0aW9uIG9mIHNwYW4gYXR0cmlidXRlIGRhdGFcbmZ1bmN0aW9uIGlzSG9vayhkYXRhOiB1bmtub3duKTogZGF0YSBpcyBIb29rIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdob29rSWQnIGluIGRhdGE7XG59XG5cbi8qKlxuICogSW5mbyBhYm91dCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNwYW5cbiAqL1xuZXhwb3J0IHR5cGUgU3BhblNlbGVjdGlvbkluZm8gPSB7XG4gIHJlc291cmNlOiAncnVuJyB8ICdzdGVwJyB8ICdob29rJyB8ICdzbGVlcCc7XG4gIHJlc291cmNlSWQ6IHN0cmluZztcbiAgcnVuSWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEluZm8gYWJvdXQgdGhlIHNlbGVjdGVkIHNwYW4gZnJvbSB0aGUgdHJhY2Ugdmlld2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkU3BhbkluZm8ge1xuICAvKiogVGhlIHJhdyBkYXRhIGZyb20gdGhlIHNwYW4gYXR0cmlidXRlcyAoc3RlcC9ydW4vaG9vayBvYmplY3QgZnJvbSB0aGUgdHJhY2UpICovXG4gIGRhdGE/OiB1bmtub3duO1xuICAvKiogVGhlIHNwYW4gcmVzb3VyY2UgdHlwZSAoZnJvbSBzcGFuIGF0dHJpYnV0ZXMpICovXG4gIHJlc291cmNlPzogc3RyaW5nO1xuICAvKiogVGhlIHNwYW4gSUQgKGNvcnJlbGF0aW9uSWQgZm9yIGZpbHRlcmluZyBldmVudHMpICovXG4gIHNwYW5JZD86IHN0cmluZztcbiAgLyoqIFJhdyBjb3JyZWxhdGVkIGV2ZW50cyBmcm9tIHRoZSBzdG9yZSAoTk9UIGZyb20gdGhlIHRyYWNlIHdvcmtlciBwaXBlbGluZSkgKi9cbiAgcmF3RXZlbnRzPzogRXZlbnRbXTtcbn1cblxuLyoqXG4gKiBQYW5lbCBjb21wb25lbnQgZm9yIHdvcmtmbG93IHRyYWNlcyB0aGF0IGRpc3BsYXlzIGVudGl0eSBkZXRhaWxzLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IGlzIHJlbmRlcmVkIE9VVFNJREUgdGhlIHRyYWNlIHZpZXdlciBjb250ZXh0IOKAlCBpdFxuICogcmVjZWl2ZXMgYWxsIGRhdGEgdmlhIHByb3BzIHJhdGhlciB0aGFuIHJlYWRpbmcgZnJvbSBjb250ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gRW50aXR5RGV0YWlsUGFuZWwoe1xuICBydW4sXG4gIG9uU3RyZWFtQ2xpY2ssXG4gIG9uUnVuQ2xpY2ssXG4gIGZldGNoU3BhbkRldGFpbCxcbiAgb25XYWtlVXBTbGVlcCxcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblJlc29sdmVIb29rLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxuICBzZWxlY3RlZFNwYW4sXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHMgPSBmYWxzZSxcbn06IHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBzdHJlYW0gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHJ1biByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGZldGNoU3BhbkRldGFpbDogRmV0Y2hTcGFuRGV0YWlsO1xuICAvKiogQ2FsbGJhY2sgdG8gd2FrZSB1cCBhIHBlbmRpbmcgc2xlZXAgY2FsbC4gKi9cbiAgb25XYWtlVXBTbGVlcD86IChcbiAgICBydW5JZDogc3RyaW5nLFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8eyBzdG9wcGVkQ291bnQ6IG51bWJlciB9PjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgZXZlbnQgZGF0YSBmb3IgYSBzcGVjaWZpYyBldmVudCAobGF6eSBsb2FkaW5nKSAqL1xuICBvbkxvYWRFdmVudERhdGE/OiAoXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nLFxuICAgIGV2ZW50SWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICAvKiogQ2FsbGJhY2sgdG8gcmVzb2x2ZSBhIGhvb2sgd2l0aCBhIHBheWxvYWQuICovXG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBFbmNyeXB0aW9uIGtleSAoYXZhaWxhYmxlIGFmdGVyIERlY3J5cHQgaXMgY2xpY2tlZCksIHVzZWQgdG8gcmUtbG9hZCBldmVudCBkYXRhICovXG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICAvKiogQ2FsbGJhY2sgdG8gaW5pdGlhdGUgZGVjcnlwdGlvbiBvZiBlbmNyeXB0ZWQgcnVuIGRhdGEgKi9cbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIGVuY3J5cHRpb24ga2V5IGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkICovXG4gIGlzRGVjcnlwdGluZz86IGJvb2xlYW47XG4gIC8qKiBJbmZvIGFib3V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3BhbiBmcm9tIHRoZSB0cmFjZSB2aWV3ZXIgKi9cbiAgc2VsZWN0ZWRTcGFuOiBTZWxlY3RlZFNwYW5JbmZvIHwgbnVsbDtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG59KTogUmVhY3QuSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCgpO1xuICBjb25zdCBbc3RvcHBpbmdTbGVlcCwgc2V0U3RvcHBpbmdTbGVlcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93UmVzb2x2ZUhvb2tNb2RhbCwgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVzb2x2aW5nSG9vaywgc2V0UmVzb2x2aW5nSG9va10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIC8vIFRyYWNrIGhvb2tzIHRoYXQgd2VyZSByZXNvbHZlZCBpbiB0aGlzIHNlc3Npb24gc28gdGhlIGJ1dHRvbiBoaWRlc1xuICAvLyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBuZXh0IGV2ZW50IHBvbGwuXG4gIGNvbnN0IFtyZXNvbHZlZEhvb2tJZHMsIHNldFJlc29sdmVkSG9va0lkc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4oXG4gICAgbmV3IFNldCgpXG4gICk7XG5cbiAgY29uc3Qgc2lkZWJhciA9IHVzZVNpZGViYXJEYXRhT3B0aW9uYWwoKTtcbiAgY29uc3QgaGFzRW5jcnlwdGVkRGF0YSA9IEJvb2xlYW4oc2lkZWJhcj8uaGFzRW5jcnlwdGVkRGF0YSAmJiAhZW5jcnlwdGlvbktleSk7XG5cbiAgY29uc3QgZGF0YSA9IHNlbGVjdGVkU3Bhbj8uZGF0YTtcbiAgY29uc3QgcmF3RXZlbnRzID0gc2VsZWN0ZWRTcGFuPy5yYXdFdmVudHM7XG4gIGNvbnN0IHJhd0V2ZW50c0xlbmd0aCA9IHJhd0V2ZW50cz8ubGVuZ3RoID8/IDA7XG5cbiAgY29uc3Qge1xuICAgIHN0YXR1cyxcbiAgICByZXNvdXJjZSxcbiAgICByZXNvdXJjZUlkLFxuICAgIGRpc3BsYXlEYXRhLFxuICAgIGRldGFpbDogbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLFxuICAgIGVycm9yLFxuICB9ID0gdXNlU2VsZWN0ZWRTcGFuRGV0YWlsKHNlbGVjdGVkU3BhbiwgZmV0Y2hTcGFuRGV0YWlsKTtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXR1cyA9PT0gJ2xvYWRpbmcnO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgc2xlZXAgaXMgc3RpbGwgcGVuZGluZyBhbmQgY2FuIGJlIHdva2VuIHVwXG4gIGNvbnN0IGNhbldha2VVcCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ3NsZWVwJyB8fCAhcmF3RXZlbnRzKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ107XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzV2FpdENyZWF0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCdcbiAgICApO1xuICAgIGlmICghaGFzV2FpdENyZWF0ZWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q29tcGxldGVkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCdcbiAgICApO1xuICAgIHJldHVybiAhaGFzV2FpdENvbXBsZXRlZDtcbiAgfSwgW3Jlc291cmNlLCByYXdFdmVudHMsIHJhd0V2ZW50c0xlbmd0aCwgcnVuLnN0YXR1c10pO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaG9vayBjYW4gYmUgcmVzb2x2ZWRcbiAgY29uc3QgY2FuUmVzb2x2ZUhvb2sgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB2b2lkIHJhd0V2ZW50c0xlbmd0aDtcbiAgICBpZiAocmVzb3VyY2UgIT09ICdob29rJyB8fCAhcmF3RXZlbnRzIHx8ICFyZXNvdXJjZUlkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgaG9vayBpbiB0aGlzIHNlc3Npb25cbiAgICBpZiAocmVzb2x2ZWRIb29rSWRzLmhhcyhyZXNvdXJjZUlkKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ107XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzSG9va0Rpc3Bvc2VkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICAgICk7XG4gICAgaWYgKGhhc0hvb2tEaXNwb3NlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LCBbXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByYXdFdmVudHMsXG4gICAgcmF3RXZlbnRzTGVuZ3RoLFxuICAgIHJ1bi5zdGF0dXMsXG4gICAgcmVzb2x2ZWRIb29rSWRzLFxuICBdKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlSZWNvcmQgPSBkaXNwbGF5RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBkaXNwbGF5U3RlcE5hbWUgPSBkaXNwbGF5UmVjb3JkLnN0ZXBOYW1lO1xuICAgIGNvbnN0IGRpc3BsYXlXb3JrZmxvd05hbWUgPSBkaXNwbGF5UmVjb3JkLndvcmtmbG93TmFtZTtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlTdGVwTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5U3RlcE5hbWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcGxheVdvcmtmbG93TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5V29ya2Zsb3dOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bi53b3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcnVuLndvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2Rpc3BsYXlEYXRhLCBydW4ud29ya2Zsb3dOYW1lXSk7XG5cbiAgaWYgKCFzZWxlY3RlZFNwYW4gfHwgIXJlc291cmNlIHx8ICFyZXNvdXJjZUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQWN0aW9ucyA9XG4gICAgKHJlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCkgfHxcbiAgICAocmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgb25EZWNyeXB0ID8geyBvbkRlY3J5cHQsIGlzRGVjcnlwdGluZywgaGFzRW5jcnlwdGVkRGF0YSB9IDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcGItOFwiPlxuICAgICAgICAgIHtoYXNQZW5kaW5nQWN0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1iLTQgcm91bmRlZC1sZyBib3JkZXIgcC0yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIHB4LTEgdGV4dC1bMTNweF0gZm9udC1tZWRpdW0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIHsvKiBXYWtlIHVwIGJ1dHRvbiBmb3IgcGVuZGluZyBzbGVlcCBjYWxscyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdzbGVlcCcgJiYgY2FuV2FrZVVwICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVdha2VVcH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3N0b3BwaW5nU2xlZXB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZ1NsZWVwXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1hbWJlci0yMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWFtYmVyLTkwMCknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8WmFwIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7c3RvcHBpbmdTbGVlcCA/ICdXYWtpbmcgdXAuLi4nIDogJ1dha2UgVXAgU2xlZXAnfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHsvKiBSZXNvbHZlIGhvb2sgYnV0dG9uIGZvciBwZW5kaW5nIGhvb2tzICovfVxuICAgICAgICAgICAgICAgIHtyZXNvdXJjZSA9PT0gJ2hvb2snICYmIGNhblJlc29sdmVIb29rICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cmVzb2x2aW5nSG9va31cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgdHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmluZ0hvb2tcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnY3Vyc29yLXBvaW50ZXInXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbmQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIFJlc29sdmUgSG9va1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPEF0dHJpYnV0ZVBhbmVsXG4gICAgICAgICAgICBkYXRhPXtkaXNwbGF5RGF0YX1cbiAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllcj17bW9kdWxlU3BlY2lmaWVyfVxuICAgICAgICAgICAgZXhwaXJlZEF0PXtydW4uZXhwaXJlZEF0fVxuICAgICAgICAgICAgaXNMb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgICAgZXJyb3I9e2Vycm9yID8/IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e29uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICBvblJ1bkNsaWNrPXtvblJ1bkNsaWNrfVxuICAgICAgICAgICAgb25EZWNyeXB0PXtvbkRlY3J5cHR9XG4gICAgICAgICAgICBpc0RlY3J5cHRpbmc9e2lzRGVjcnlwdGluZ31cbiAgICAgICAgICAgIHJlc291cmNlPXtyZXNvdXJjZX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAge3Jhd0V2ZW50cyAmJiAoXG4gICAgICAgICAgICA8RXZlbnRzTGlzdFxuICAgICAgICAgICAgICBldmVudHM9e3Jhd0V2ZW50c31cbiAgICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtvbkxvYWRFdmVudERhdGF9XG4gICAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e29uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICAgIG9uUnVuQ2xpY2s9e29uUnVuQ2xpY2t9XG4gICAgICAgICAgICAgIGVuY3J5cHRpb25LZXk9e2VuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM9e1xuICAgICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlcj5cblxuICAgICAgey8qIFJlc29sdmUgSG9vayBNb2RhbCAqL31cbiAgICAgIDxSZXNvbHZlSG9va01vZGFsXG4gICAgICAgIGlzT3Blbj17c2hvd1Jlc29sdmVIb29rTW9kYWx9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKGZhbHNlKX1cbiAgICAgICAgb25TdWJtaXQ9e2hhbmRsZVJlc29sdmVIb29rfVxuICAgICAgICBpc1N1Ym1pdHRpbmc9e3Jlc29sdmluZ0hvb2t9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUVMLHFCQUFxQixHQUN0QixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLDJEQUEyRDtBQUMzRCxTQUFTLE1BQU0sQ0FBQyxJQUFhO0lBQzNCLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQztBQUN2RSxDQUFDO0FBeUJEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEVBQ2hDLEdBQUcsRUFDSCxhQUFhLEVBQ2IsVUFBVSxFQUNWLGVBQWUsRUFDZixh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LENBQ1YsSUFDRyxJQUNGLENBQ1AsRUFFRCxLQUFDLGNBQWMsSUFDYixJQUFJLEVBQUUsV0FBVyxFQUNqQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFDeEIsU0FBUyxFQUFFLE9BQU8sRUFDbEIsS0FBSyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQ3pCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFFBQVEsRUFBRSxRQUFRLEdBQ2xCLEVBRUQsU0FBUyxJQUFJLENBQ1osS0FBQyxVQUFVLElBQ1QsTUFBTSxFQUFFLFNBQVMsRUFDakIsZUFBZSxFQUFFLGVBQWUsRUFDaEMsYUFBYSxFQUFFLGFBQWEsRUFDNUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIscUNBQXFDLEVBQ25DLHFDQUFxQyxHQUV2QyxDQUNILElBQ0csR0FDdUIsRUFHL0IsS0FBQyxnQkFBZ0IsSUFDZixNQUFNLEVBQUUsb0JBQW9CLEVBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFDN0MsUUFBUSxFQUFFLGlCQUFpQixFQUMzQixZQUFZLEVBQUUsYUFBYSxHQUMzQixJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCwgSG9vaywgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBTZW5kLCBaYXAgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUb2FzdCB9IGZyb20gJy4uLy4uL2xpYi90b2FzdCc7XG5pbXBvcnQgeyBEZWNyeXB0Q2xpY2tDb250ZXh0IH0gZnJvbSAnLi4vdWkvZGF0YS1pbnNwZWN0b3InO1xuaW1wb3J0IHsgQXR0cmlidXRlUGFuZWwgfSBmcm9tICcuL2F0dHJpYnV0ZS1wYW5lbCc7XG5pbXBvcnQgeyBFdmVudHNMaXN0IH0gZnJvbSAnLi9ldmVudHMtbGlzdCc7XG5pbXBvcnQgeyBSZXNvbHZlSG9va01vZGFsIH0gZnJvbSAnLi9yZXNvbHZlLWhvb2stbW9kYWwnO1xuaW1wb3J0IHsgdXNlU2lkZWJhckRhdGFPcHRpb25hbCB9IGZyb20gJy4vc2lkZWJhci1kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtcbiAgdHlwZSBGZXRjaFNwYW5EZXRhaWwsXG4gIHVzZVNlbGVjdGVkU3BhbkRldGFpbCxcbn0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG4vLyBUeXBlIGd1YXJkIGZvciBydW50aW1lIHZhbGlkYXRpb24gb2Ygc3BhbiBhdHRyaWJ1dGUgZGF0YVxuZnVuY3Rpb24gaXNIb29rKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEhvb2sge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2hvb2tJZCcgaW4gZGF0YTtcbn1cblxuLyoqXG4gKiBJbmZvIGFib3V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3BhblxuICovXG5leHBvcnQgdHlwZSBTcGFuU2VsZWN0aW9uSW5mbyA9IHtcbiAgcmVzb3VyY2U6ICdydW4nIHwgJ3N0ZXAnIHwgJ2hvb2snIHwgJ3NsZWVwJztcbiAgcmVzb3VyY2VJZDogc3RyaW5nO1xuICBydW5JZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogSW5mbyBhYm91dCB0aGUgc2VsZWN0ZWQgc3BhbiBmcm9tIHRoZSB0cmFjZSB2aWV3ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWRTcGFuSW5mbyB7XG4gIC8qKiBUaGUgcmF3IGRhdGEgZnJvbSB0aGUgc3BhbiBhdHRyaWJ1dGVzIChzdGVwL3J1bi9ob29rIG9iamVjdCBmcm9tIHRoZSB0cmFjZSkgKi9cbiAgZGF0YT86IHVua25vd247XG4gIC8qKiBUaGUgc3BhbiByZXNvdXJjZSB0eXBlIChmcm9tIHNwYW4gYXR0cmlidXRlcykgKi9cbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIC8qKiBUaGUgc3BhbiBJRCAoY29ycmVsYXRpb25JZCBmb3IgZmlsdGVyaW5nIGV2ZW50cykgKi9cbiAgc3BhbklkPzogc3RyaW5nO1xuICAvKiogUmF3IGNvcnJlbGF0ZWQgZXZlbnRzIGZyb20gdGhlIHN0b3JlIChOT1QgZnJvbSB0aGUgdHJhY2Ugd29ya2VyIHBpcGVsaW5lKSAqL1xuICByYXdFdmVudHM/OiBFdmVudFtdO1xufVxuXG4vKipcbiAqIFBhbmVsIGNvbXBvbmVudCBmb3Igd29ya2Zsb3cgdHJhY2VzIHRoYXQgZGlzcGxheXMgZW50aXR5IGRldGFpbHMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgT1VUU0lERSB0aGUgdHJhY2Ugdmlld2VyIGNvbnRleHQg4oCUIGl0XG4gKiByZWNlaXZlcyBhbGwgZGF0YSB2aWEgcHJvcHMgcmF0aGVyIHRoYW4gcmVhZGluZyBmcm9tIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlEZXRhaWxQYW5lbCh7XG4gIHJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgZmV0Y2hTcGFuRGV0YWlsLFxuICBvbldha2VVcFNsZWVwLFxuICBvbkxvYWRFdmVudERhdGEsXG4gIG9uUmVzb2x2ZUhvb2ssXG4gIGVuY3J5cHRpb25LZXksXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIHNlbGVjdGVkU3BhbixcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxuICBnZXRNb2R1bGVTb3VyY2VVcmwsXG59OiB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgLyoqIENhbGxiYWNrIHRvIHdha2UgdXAgYSBwZW5kaW5nIHNsZWVwIGNhbGwuICovXG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIC8qKiBDYWxsYmFjayB0byBsb2FkIGV2ZW50IGRhdGEgZm9yIGEgc3BlY2lmaWMgZXZlbnQgKGxhenkgbG9hZGluZykgKi9cbiAgb25Mb2FkRXZlbnREYXRhPzogKFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgICBldmVudElkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgLyoqIENhbGxiYWNrIHRvIHJlc29sdmUgYSBob29rIHdpdGggYSBwYXlsb2FkLiAqL1xuICBvblJlc29sdmVIb29rPzogKFxuICAgIGhvb2tUb2tlbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgaG9vaz86IEhvb2tcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogRW5jcnlwdGlvbiBrZXkgKGF2YWlsYWJsZSBhZnRlciBEZWNyeXB0IGlzIGNsaWNrZWQpLCB1c2VkIHRvIHJlLWxvYWQgZXZlbnQgZGF0YSAqL1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgLyoqIENhbGxiYWNrIHRvIGluaXRpYXRlIGRlY3J5cHRpb24gb2YgZW5jcnlwdGVkIHJ1biBkYXRhICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBlbmNyeXB0aW9uIGtleSBpcyBjdXJyZW50bHkgYmVpbmcgZmV0Y2hlZCAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogSW5mbyBhYm91dCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNwYW4gZnJvbSB0aGUgdHJhY2Ugdmlld2VyICovXG4gIHNlbGVjdGVkU3BhbjogU2VsZWN0ZWRTcGFuSW5mbyB8IG51bGw7XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xuICBnZXRNb2R1bGVTb3VyY2VVcmw/OiAoaW5mbzoge1xuICAgIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xuICAgIGRlcGxveW1lbnRJZDogc3RyaW5nO1xuICB9KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59KTogUmVhY3QuSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCgpO1xuICBjb25zdCBbc3RvcHBpbmdTbGVlcCwgc2V0U3RvcHBpbmdTbGVlcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93UmVzb2x2ZUhvb2tNb2RhbCwgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVzb2x2aW5nSG9vaywgc2V0UmVzb2x2aW5nSG9va10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIC8vIFRyYWNrIGhvb2tzIHRoYXQgd2VyZSByZXNvbHZlZCBpbiB0aGlzIHNlc3Npb24gc28gdGhlIGJ1dHRvbiBoaWRlc1xuICAvLyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBuZXh0IGV2ZW50IHBvbGwuXG4gIGNvbnN0IFtyZXNvbHZlZEhvb2tJZHMsIHNldFJlc29sdmVkSG9va0lkc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4oXG4gICAgbmV3IFNldCgpXG4gICk7XG5cbiAgY29uc3Qgc2lkZWJhciA9IHVzZVNpZGViYXJEYXRhT3B0aW9uYWwoKTtcbiAgY29uc3QgaGFzRW5jcnlwdGVkRGF0YSA9IEJvb2xlYW4oc2lkZWJhcj8uaGFzRW5jcnlwdGVkRGF0YSAmJiAhZW5jcnlwdGlvbktleSk7XG5cbiAgY29uc3QgZGF0YSA9IHNlbGVjdGVkU3Bhbj8uZGF0YTtcbiAgY29uc3QgcmF3RXZlbnRzID0gc2VsZWN0ZWRTcGFuPy5yYXdFdmVudHM7XG4gIGNvbnN0IHJhd0V2ZW50c0xlbmd0aCA9IHJhd0V2ZW50cz8ubGVuZ3RoID8/IDA7XG5cbiAgY29uc3Qge1xuICAgIHN0YXR1cyxcbiAgICByZXNvdXJjZSxcbiAgICByZXNvdXJjZUlkLFxuICAgIGRpc3BsYXlEYXRhLFxuICAgIGRldGFpbDogbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLFxuICAgIGVycm9yLFxuICB9ID0gdXNlU2VsZWN0ZWRTcGFuRGV0YWlsKHNlbGVjdGVkU3BhbiwgZmV0Y2hTcGFuRGV0YWlsKTtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXR1cyA9PT0gJ2xvYWRpbmcnO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgc2xlZXAgaXMgc3RpbGwgcGVuZGluZyBhbmQgY2FuIGJlIHdva2VuIHVwXG4gIGNvbnN0IGNhbldha2VVcCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ3NsZWVwJyB8fCAhcmF3RXZlbnRzKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ107XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzV2FpdENyZWF0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCdcbiAgICApO1xuICAgIGlmICghaGFzV2FpdENyZWF0ZWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q29tcGxldGVkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCdcbiAgICApO1xuICAgIHJldHVybiAhaGFzV2FpdENvbXBsZXRlZDtcbiAgfSwgW3Jlc291cmNlLCByYXdFdmVudHMsIHJhd0V2ZW50c0xlbmd0aCwgcnVuLnN0YXR1c10pO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaG9vayBjYW4gYmUgcmVzb2x2ZWRcbiAgY29uc3QgY2FuUmVzb2x2ZUhvb2sgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB2b2lkIHJhd0V2ZW50c0xlbmd0aDtcbiAgICBpZiAocmVzb3VyY2UgIT09ICdob29rJyB8fCAhcmF3RXZlbnRzIHx8ICFyZXNvdXJjZUlkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgaG9vayBpbiB0aGlzIHNlc3Npb25cbiAgICBpZiAocmVzb2x2ZWRIb29rSWRzLmhhcyhyZXNvdXJjZUlkKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ107XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzSG9va0Rpc3Bvc2VkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICAgICk7XG4gICAgaWYgKGhhc0hvb2tEaXNwb3NlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LCBbXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByYXdFdmVudHMsXG4gICAgcmF3RXZlbnRzTGVuZ3RoLFxuICAgIHJ1bi5zdGF0dXMsXG4gICAgcmVzb2x2ZWRIb29rSWRzLFxuICBdKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlSZWNvcmQgPSBkaXNwbGF5RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBkaXNwbGF5U3RlcE5hbWUgPSBkaXNwbGF5UmVjb3JkLnN0ZXBOYW1lO1xuICAgIGNvbnN0IGRpc3BsYXlXb3JrZmxvd05hbWUgPSBkaXNwbGF5UmVjb3JkLndvcmtmbG93TmFtZTtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlTdGVwTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5U3RlcE5hbWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcGxheVdvcmtmbG93TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5V29ya2Zsb3dOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bi53b3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcnVuLndvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2Rpc3BsYXlEYXRhLCBydW4ud29ya2Zsb3dOYW1lXSk7XG5cbiAgY29uc3QgbW9kdWxlU291cmNlVXJsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFnZXRNb2R1bGVTb3VyY2VVcmwgfHwgIW1vZHVsZVNwZWNpZmllcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJzZWQgPVxuICAgICAgcGFyc2VTdGVwTmFtZShtb2R1bGVTcGVjaWZpZXIpID8/IHBhcnNlV29ya2Zsb3dOYW1lKG1vZHVsZVNwZWNpZmllcik7XG4gICAgaWYgKCFwYXJzZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0YURlcGxveW1lbnRJZCA9IGRpc3BsYXlEYXRhLmRlcGxveW1lbnRJZDtcbiAgICByZXR1cm4gZ2V0TW9kdWxlU291cmNlVXJsKHtcbiAgICAgIG1vZHVsZVNwZWNpZmllcjogcGFyc2VkLm1vZHVsZVNwZWNpZmllcixcbiAgICAgIGRlcGxveW1lbnRJZDpcbiAgICAgICAgdHlwZW9mIGRhdGFEZXBsb3ltZW50SWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBkYXRhRGVwbG95bWVudElkXG4gICAgICAgICAgOiBydW4uZGVwbG95bWVudElkLFxuICAgIH0pO1xuICB9LCBbZ2V0TW9kdWxlU291cmNlVXJsLCBtb2R1bGVTcGVjaWZpZXIsIGRpc3BsYXlEYXRhLCBydW4uZGVwbG95bWVudElkXSk7XG5cbiAgaWYgKCFzZWxlY3RlZFNwYW4gfHwgIXJlc291cmNlIHx8ICFyZXNvdXJjZUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQWN0aW9ucyA9XG4gICAgKHJlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCkgfHxcbiAgICAocmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgb25EZWNyeXB0ID8geyBvbkRlY3J5cHQsIGlzRGVjcnlwdGluZywgaGFzRW5jcnlwdGVkRGF0YSB9IDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcGItOFwiPlxuICAgICAgICAgIHtoYXNQZW5kaW5nQWN0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1iLTQgcm91bmRlZC1sZyBib3JkZXIgcC0yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIHB4LTEgdGV4dC1bMTNweF0gZm9udC1tZWRpdW0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIHsvKiBXYWtlIHVwIGJ1dHRvbiBmb3IgcGVuZGluZyBzbGVlcCBjYWxscyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdzbGVlcCcgJiYgY2FuV2FrZVVwICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVdha2VVcH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3N0b3BwaW5nU2xlZXB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZ1NsZWVwXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1hbWJlci0yMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWFtYmVyLTkwMCknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8WmFwIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7c3RvcHBpbmdTbGVlcCA/ICdXYWtpbmcgdXAuLi4nIDogJ1dha2UgVXAgU2xlZXAnfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHsvKiBSZXNvbHZlIGhvb2sgYnV0dG9uIGZvciBwZW5kaW5nIGhvb2tzICovfVxuICAgICAgICAgICAgICAgIHtyZXNvdXJjZSA9PT0gJ2hvb2snICYmIGNhblJlc29sdmVIb29rICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cmVzb2x2aW5nSG9va31cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgdHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmluZ0hvb2tcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnY3Vyc29yLXBvaW50ZXInXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbmQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIFJlc29sdmUgSG9va1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPEF0dHJpYnV0ZVBhbmVsXG4gICAgICAgICAgICBkYXRhPXtkaXNwbGF5RGF0YX1cbiAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllcj17bW9kdWxlU3BlY2lmaWVyfVxuICAgICAgICAgICAgbW9kdWxlU291cmNlVXJsPXttb2R1bGVTb3VyY2VVcmx9XG4gICAgICAgICAgICBleHBpcmVkQXQ9e3J1bi5leHBpcmVkQXR9XG4gICAgICAgICAgICBpc0xvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgICBlcnJvcj17ZXJyb3IgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgb25TdHJlYW1DbGljaz17b25TdHJlYW1DbGlja31cbiAgICAgICAgICAgIG9uUnVuQ2xpY2s9e29uUnVuQ2xpY2t9XG4gICAgICAgICAgICBvbkRlY3J5cHQ9e29uRGVjcnlwdH1cbiAgICAgICAgICAgIGlzRGVjcnlwdGluZz17aXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgcmVzb3VyY2U9e3Jlc291cmNlfVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICB7cmF3RXZlbnRzICYmIChcbiAgICAgICAgICAgIDxFdmVudHNMaXN0XG4gICAgICAgICAgICAgIGV2ZW50cz17cmF3RXZlbnRzfVxuICAgICAgICAgICAgICBvbkxvYWRFdmVudERhdGE9e29uTG9hZEV2ZW50RGF0YX1cbiAgICAgICAgICAgICAgb25TdHJlYW1DbGljaz17b25TdHJlYW1DbGlja31cbiAgICAgICAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgICAgICAgZW5jcnlwdGlvbktleT17ZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz17XG4gICAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuXG4gICAgICB7LyogUmVzb2x2ZSBIb29rIE1vZGFsICovfVxuICAgICAgPFJlc29sdmVIb29rTW9kYWxcbiAgICAgICAgaXNPcGVuPXtzaG93UmVzb2x2ZUhvb2tNb2RhbH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpfVxuICAgICAgICBvblN1Ym1pdD17aGFuZGxlUmVzb2x2ZUhvb2t9XG4gICAgICAgIGlzU3VibWl0dGluZz17cmVzb2x2aW5nSG9va31cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
@@ -18,6 +18,10 @@ export interface SidebarDataContextValue {
18
18
  hasEncryptedData?: boolean;
19
19
  /** Show occurredAt separately instead of folding it into the Created timestamp. */
20
20
  showSeparateEventOccurrenceTimestamps?: boolean;
21
+ getModuleSourceUrl?: (info: {
22
+ moduleSpecifier: string;
23
+ deploymentId: string;
24
+ }) => string | undefined;
21
25
  }
22
26
  export declare function SidebarDataProvider({ value, children, }: {
23
27
  value: SidebarDataContextValue;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-data-context.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/sidebar-data-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD;AAED,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CAEvE"}
1
+ {"version":3,"file":"sidebar-data-context.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/sidebar-data-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD;AAED,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CAEvE"}
@@ -16,4 +16,4 @@ export function useSidebarData() {
16
16
  export function useSidebarDataOptional() {
17
17
  return useContext(SidebarDataContext);
18
18
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1kYXRhLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBa0IsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBOEJsRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBaUMsSUFBSSxDQUFDLENBQUM7QUFDL0Usa0JBQWtCLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUNsQyxLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLFlBQ3RDLFFBQVEsR0FDbUIsQ0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB0eXBlIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmV0Y2hTcGFuRGV0YWlsIH0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG59XG5cbmNvbnN0IFNpZGViYXJEYXRhQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2lkZWJhckRhdGFDb250ZXh0VmFsdWUgfCBudWxsPihudWxsKTtcblNpZGViYXJEYXRhQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdTaWRlYmFyRGF0YUNvbnRleHQnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhckRhdGFQcm92aWRlcih7XG4gIHZhbHVlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgdmFsdWU6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTaWRlYmFyRGF0YUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NpZGViYXJEYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNpZGViYXJEYXRhKCk6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2lkZWJhckRhdGEgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFNpZGViYXJEYXRhUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2lkZWJhckRhdGFPcHRpb25hbCgpOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSB8IG51bGwge1xuICByZXR1cm4gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xufVxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1kYXRhLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBa0IsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBa0NsRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBaUMsSUFBSSxDQUFDLENBQUM7QUFDL0Usa0JBQWtCLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUNsQyxLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLFlBQ3RDLFFBQVEsR0FDbUIsQ0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB0eXBlIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmV0Y2hTcGFuRGV0YWlsIH0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG4gIGdldE1vZHVsZVNvdXJjZVVybD86IChpbmZvOiB7XG4gICAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmc7XG4gICAgZGVwbG95bWVudElkOiBzdHJpbmc7XG4gIH0pID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgU2lkZWJhckRhdGFDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuU2lkZWJhckRhdGFDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1NpZGViYXJEYXRhQ29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTaWRlYmFyRGF0YVByb3ZpZGVyKHtcbiAgdmFsdWUsXG4gIGNoaWxkcmVuLFxufToge1xuICB2YWx1ZTogU2lkZWJhckRhdGFDb250ZXh0VmFsdWU7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJEYXRhQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU2lkZWJhckRhdGFDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2lkZWJhckRhdGEoKTogU2lkZWJhckRhdGFDb250ZXh0VmFsdWUge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KFNpZGViYXJEYXRhQ29udGV4dCk7XG4gIGlmICghY3R4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VTaWRlYmFyRGF0YSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgU2lkZWJhckRhdGFQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsKCk6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHwgbnVsbCB7XG4gIHJldHVybiB1c2VDb250ZXh0KFNpZGViYXJEYXRhQ29udGV4dCk7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@workflow/web-shared",
3
3
  "description": "Shared components for Workflow Observability UI",
4
- "version": "5.0.0-beta.28",
4
+ "version": "5.0.0-beta.29",
5
5
  "private": false,
6
6
  "files": [
7
7
  "dist",
@@ -55,9 +55,9 @@
55
55
  "streamdown": "2.3.0",
56
56
  "tailwind-merge": "3.5.0",
57
57
  "tailwindcss": "4",
58
- "@workflow/core": "5.0.0-beta.28",
58
+ "@workflow/core": "5.0.0-beta.29",
59
59
  "@workflow/utils": "5.0.0-beta.6",
60
- "@workflow/world": "5.0.0-beta.16"
60
+ "@workflow/world": "5.0.0-beta.17"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@biomejs/biome": "^2.4.4",
@@ -628,6 +628,27 @@ function PayloadBlock({
628
628
  return <AttrSetEventBlock data={cleaned} />;
629
629
  }
630
630
 
631
+ // Cancellation reason — render the free-text reason as a readable line
632
+ // instead of a raw JSON payload (the only field run_cancelled carries).
633
+ if (eventType === 'run_cancelled') {
634
+ const cancelReason =
635
+ cleaned != null &&
636
+ typeof cleaned === 'object' &&
637
+ typeof (cleaned as Record<string, unknown>).cancelReason === 'string'
638
+ ? ((cleaned as Record<string, unknown>).cancelReason as string)
639
+ : null;
640
+ if (cancelReason) {
641
+ return (
642
+ <div className="p-2 text-xs" style={{ color: 'var(--ds-gray-1000)' }}>
643
+ <span style={{ color: 'var(--ds-gray-900)' }}>Reason: </span>
644
+ <span className="whitespace-pre-wrap break-words">
645
+ {cancelReason}
646
+ </span>
647
+ </div>
648
+ );
649
+ }
650
+ }
651
+
631
652
  return (
632
653
  <div className="relative group/payload">
633
654
  <div
@@ -264,6 +264,7 @@ export function TraceDetailPanel({
264
264
  showSeparateEventOccurrenceTimestamps={
265
265
  sidebar.showSeparateEventOccurrenceTimestamps
266
266
  }
267
+ getModuleSourceUrl={sidebar.getModuleSourceUrl}
267
268
  />
268
269
  </ErrorBoundary>
269
270
  </div>
@@ -112,7 +112,7 @@ const EventList = ({
112
112
  ref={listRef}
113
113
  id="event-list"
114
114
  role="tree"
115
- className="block min-h-0 overflow-visible divide-y divide-gray-alpha-400 border-b border-gray-alpha-400"
115
+ className="block min-h-0 overflow-visible divide-y divide-gray-400 border-b border-gray-400"
116
116
  style={{
117
117
  paddingTop: start * ROW_HEIGHT_PX,
118
118
  paddingBottom: (spans.length - end) * ROW_HEIGHT_PX,
@@ -3,14 +3,13 @@
3
3
  import {
4
4
  Children,
5
5
  type ReactNode,
6
- type PointerEvent as ReactPointerEvent,
7
6
  type RefObject,
8
7
  useCallback,
9
- useEffect,
10
8
  useRef,
11
9
  useState,
12
10
  } from 'react';
13
11
  import { cn } from '../../../lib/cn';
12
+ import { DraggableBorder } from './draggable-border';
14
13
  import {
15
14
  DEFAULT_START_PX,
16
15
  GUTTER_PX,
@@ -19,12 +18,12 @@ import {
19
18
  } from './pane-constants';
20
19
  import { useElementWidth } from './use-element-width';
21
20
 
21
+ const SPLIT_PANE_START_ID = 'trace-split-start';
22
+
22
23
  export interface SplitPaneProps {
23
24
  children: ReactNode;
24
25
  className?: string;
25
- /** Fixed (non-scrolling) header rendered above the start pane. */
26
26
  startHeader?: ReactNode;
27
- /** Fixed (non-scrolling) header rendered above the end pane. */
28
27
  endHeader?: ReactNode;
29
28
  scrollContainerRef?: RefObject<HTMLDivElement | null>;
30
29
  }
@@ -42,25 +41,11 @@ export function SplitPane({
42
41
  }
43
42
  const [start, end] = parts;
44
43
 
45
- // `startPx` is the user's preferred width; the rendered width is derived by
46
- // clamping against the live container width (same model as the detail
47
- // panel), so shrinking the container compresses the pane without destroying
48
- // the preference, and re-growing restores it.
49
44
  const [startPx, setStartPx] = useState(DEFAULT_START_PX);
50
- const [isDragging, setIsDragging] = useState(false);
51
45
  const containerRef = useRef<HTMLDivElement>(null);
52
- const gutterRef = useRef<HTMLDivElement>(null);
53
- const rafRef = useRef<number | null>(null);
54
- const pendingPx = useRef(DEFAULT_START_PX);
55
- const pointerIdRef = useRef<number | null>(null);
46
+ const startRef = useRef<HTMLDivElement>(null);
56
47
  const containerWidth = useElementWidth(containerRef);
57
48
 
58
- useEffect(() => {
59
- return () => {
60
- if (rafRef.current) cancelAnimationFrame(rafRef.current);
61
- };
62
- }, []);
63
-
64
49
  const setContainerRef = useCallback(
65
50
  (node: HTMLDivElement | null) => {
66
51
  containerRef.current = node;
@@ -78,65 +63,15 @@ export function SplitPane({
78
63
  return Math.min(maxPx, Math.max(MIN_PX, px));
79
64
  }, []);
80
65
 
81
- useEffect(() => {
82
- if (!isDragging) return;
83
-
84
- const onPointerMove = (e: globalThis.PointerEvent) => {
85
- if (e.pointerId !== pointerIdRef.current) return;
86
- const container = containerRef.current;
87
- if (!container) return;
88
- const rect = container.getBoundingClientRect();
89
- pendingPx.current = clampPx(e.clientX - rect.left);
90
- if (!rafRef.current) {
91
- rafRef.current = requestAnimationFrame(() => {
92
- rafRef.current = null;
93
- setStartPx(pendingPx.current);
94
- });
95
- }
96
- };
97
-
98
- const onPointerUp = (e: globalThis.PointerEvent) => {
99
- if (e.pointerId !== pointerIdRef.current) return;
100
- const gutter = gutterRef.current;
101
- if (gutter?.hasPointerCapture(e.pointerId)) {
102
- gutter.releasePointerCapture(e.pointerId);
103
- }
104
- if (rafRef.current) {
105
- cancelAnimationFrame(rafRef.current);
106
- rafRef.current = null;
107
- }
108
- pointerIdRef.current = null;
109
- setIsDragging(false);
110
- };
111
-
112
- document.addEventListener('pointermove', onPointerMove);
113
- document.addEventListener('pointerup', onPointerUp);
114
- document.addEventListener('pointercancel', onPointerUp);
115
-
116
- return () => {
117
- document.removeEventListener('pointermove', onPointerMove);
118
- document.removeEventListener('pointerup', onPointerUp);
119
- document.removeEventListener('pointercancel', onPointerUp);
120
- };
121
- }, [isDragging, clampPx]);
122
-
123
- const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {
124
- e.currentTarget.setPointerCapture(e.pointerId);
125
- pointerIdRef.current = e.pointerId;
126
- setIsDragging(true);
127
- };
128
-
129
- const handleLostPointerCapture = () => {
130
- pointerIdRef.current = null;
131
- setIsDragging(false);
132
- if (rafRef.current) {
133
- cancelAnimationFrame(rafRef.current);
134
- rafRef.current = null;
135
- }
136
- };
66
+ const handleWidthChange = useCallback(
67
+ (next: number) => setStartPx(clampPx(next)),
68
+ [clampPx]
69
+ );
70
+ const handleReset = useCallback(
71
+ () => setStartPx(clampPx(DEFAULT_START_PX)),
72
+ [clampPx]
73
+ );
137
74
 
138
- // Floor applied last so the start column can never collapse below MIN_PX
139
- // (which would produce an invalid negative grid track on tiny containers).
140
75
  const effectiveStartPx =
141
76
  containerWidth > 0
142
77
  ? Math.max(MIN_PX, Math.min(containerWidth - MIN_PX - GUTTER_PX, startPx))
@@ -144,18 +79,9 @@ export function SplitPane({
144
79
 
145
80
  const colTemplate = paneColTemplate(effectiveStartPx);
146
81
 
147
- const gutter = (
148
- <div
149
- ref={gutterRef}
150
- className="relative z-20 isolate flex shrink-0 cursor-col-resize justify-center"
151
- onPointerDown={handlePointerDown}
152
- onLostPointerCapture={handleLostPointerCapture}
153
- >
154
- <span
155
- className="pointer-events-none relative z-10 h-full w-px shrink-0 bg-gray-alpha-400"
156
- aria-hidden
157
- />
158
- </div>
82
+ const maxStartPx = Math.max(
83
+ MIN_PX,
84
+ containerWidth > 0 ? containerWidth - MIN_PX - GUTTER_PX : startPx
159
85
  );
160
86
 
161
87
  return (
@@ -172,14 +98,32 @@ export function SplitPane({
172
98
  </div>
173
99
  <div
174
100
  ref={setContainerRef}
175
- className={cn(
176
- 'grid flex-1 min-h-0 overflow-x-hidden overflow-y-auto',
177
- isDragging && 'select-none'
178
- )}
101
+ className="grid flex-1 min-h-0 overflow-x-hidden overflow-y-auto"
179
102
  style={{ gridTemplateColumns: colTemplate }}
180
103
  >
181
- {start}
182
- {gutter}
104
+ <div ref={startRef} id={SPLIT_PANE_START_ID} className="min-w-0">
105
+ {start}
106
+ </div>
107
+ <div className="relative z-20 isolate flex shrink-0 justify-center">
108
+ <span
109
+ className="pointer-events-none relative z-10 h-full w-px shrink-0 bg-gray-alpha-400"
110
+ aria-hidden
111
+ />
112
+ <DraggableBorder
113
+ element={startRef}
114
+ position="right"
115
+ onWidthChange={handleWidthChange}
116
+ onReset={handleReset}
117
+ aria-label="Resize event list"
118
+ aria-controls={SPLIT_PANE_START_ID}
119
+ aria-valuemin={MIN_PX}
120
+ aria-valuemax={maxStartPx}
121
+ aria-valuenow={Math.min(
122
+ Math.max(Math.round(effectiveStartPx), MIN_PX),
123
+ maxStartPx
124
+ )}
125
+ />
126
+ </div>
183
127
  {end}
184
128
  </div>
185
129
  </div>
@@ -87,8 +87,8 @@ function useAnimatedViewport(initial: ViewportRange) {
87
87
  const anim = { raf: 0, from, to: target, start: performance.now() };
88
88
 
89
89
  const tick = () => {
90
- const t = Math.min((performance.now() - anim.start) / 150, 1);
91
- const e = 1 - (1 - t) * (1 - t);
90
+ const t = Math.min((performance.now() - anim.start) / 240, 1);
91
+ const e = t < 0.5 ? 8 * t * t * t * t : 1 - (-2 * t + 2) ** 4 / 2;
92
92
  setViewportState({
93
93
  start: anim.from.start + (anim.to.start - anim.from.start) * e,
94
94
  end: anim.from.end + (anim.to.end - anim.from.end) * e,