@workflow/web-shared 5.0.0-beta.43 → 5.0.0-beta.46

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 (106) hide show
  1. package/README.md +4 -4
  2. package/dist/components/event-list-view.d.ts +12 -0
  3. package/dist/components/event-list-view.d.ts.map +1 -1
  4. package/dist/components/event-list-view.js +41 -20
  5. package/dist/components/sidebar/attribute-panel.d.ts +6 -2
  6. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  7. package/dist/components/sidebar/attribute-panel.js +10 -8
  8. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  9. package/dist/components/sidebar/copyable-data-block.js +2 -2
  10. package/dist/components/sidebar/entity-detail-panel.d.ts +6 -2
  11. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  12. package/dist/components/sidebar/entity-detail-panel.js +13 -5
  13. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  14. package/dist/components/sidebar/events-list.js +12 -5
  15. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  16. package/dist/components/sidebar/sidebar-data-context.d.ts +2 -0
  17. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  18. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  19. package/dist/components/stream-viewer.js +2 -2
  20. package/dist/components/trace-viewer/components/detail-panel-width.d.ts +4 -4
  21. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -1
  22. package/dist/components/trace-viewer/components/detail-panel-width.js +5 -5
  23. package/dist/components/trace-viewer/components/detail-panel.d.ts +1 -1
  24. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -1
  25. package/dist/components/trace-viewer/components/detail-panel.js +3 -3
  26. package/dist/components/trace-viewer/components/draggable-border.d.ts +1 -1
  27. package/dist/components/trace-viewer/components/draggable-border.js +2 -2
  28. package/dist/components/trace-viewer/components/minimap.js +4 -4
  29. package/dist/components/trace-viewer/components/span-markers.d.ts +8 -9
  30. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -1
  31. package/dist/components/trace-viewer/components/span-markers.js +13 -10
  32. package/dist/components/trace-viewer/components/timeline.d.ts +1 -1
  33. package/dist/components/trace-viewer/components/timeline.js +4 -4
  34. package/dist/components/trace-viewer/components/use-row-window.d.ts +1 -1
  35. package/dist/components/trace-viewer/components/use-row-window.js +2 -2
  36. package/dist/components/trace-viewer/trace-viewer.js +3 -3
  37. package/dist/components/trace-viewer/utils.d.ts +3 -1
  38. package/dist/components/trace-viewer/utils.d.ts.map +1 -1
  39. package/dist/components/trace-viewer/utils.js +6 -5
  40. package/dist/components/ui/data-inspector.d.ts +7 -1
  41. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  42. package/dist/components/ui/data-inspector.js +10 -5
  43. package/dist/components/ui/decrypt-button.d.ts +5 -1
  44. package/dist/components/ui/decrypt-button.d.ts.map +1 -1
  45. package/dist/components/ui/decrypt-button.js +4 -4
  46. package/dist/components/ui/duplicate-event-tooltip.d.ts +15 -5
  47. package/dist/components/ui/duplicate-event-tooltip.d.ts.map +1 -1
  48. package/dist/components/ui/duplicate-event-tooltip.js +18 -9
  49. package/dist/components/ui/error-stack-block.js +4 -4
  50. package/dist/components/ui/timestamp-tooltip.d.ts +5 -3
  51. package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
  52. package/dist/components/ui/timestamp-tooltip.js +9 -9
  53. package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
  54. package/dist/components/workflow-traces/event-colors.js +11 -1
  55. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  56. package/dist/components/workflow-traces/trace-span-construction.js +5 -4
  57. package/dist/index.d.ts +1 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +2 -1
  60. package/dist/lib/duplicate-events.d.ts +1 -1
  61. package/dist/lib/duplicate-events.js +2 -2
  62. package/dist/lib/hydration.d.ts.map +1 -1
  63. package/dist/lib/hydration.js +8 -13
  64. package/dist/lib/sealed-events.d.ts +28 -0
  65. package/dist/lib/sealed-events.d.ts.map +1 -0
  66. package/dist/lib/sealed-events.js +30 -0
  67. package/dist/lib/trace-builder.d.ts.map +1 -1
  68. package/dist/lib/trace-builder.js +8 -5
  69. package/dist/lib/utils.d.ts +1 -1
  70. package/dist/lib/utils.js +2 -2
  71. package/dist/lib/zstd-browser-decoder.js +2 -2
  72. package/package.json +5 -5
  73. package/src/components/event-list-view.tsx +57 -22
  74. package/src/components/sidebar/attribute-panel.tsx +15 -7
  75. package/src/components/sidebar/copyable-data-block.tsx +8 -1
  76. package/src/components/sidebar/entity-detail-panel.tsx +18 -2
  77. package/src/components/sidebar/events-list.tsx +16 -6
  78. package/src/components/sidebar/resolve-hook-modal.tsx +2 -2
  79. package/src/components/sidebar/sidebar-data-context.tsx +2 -0
  80. package/src/components/stream-viewer.tsx +1 -1
  81. package/src/components/trace-viewer/components/detail-panel-width.ts +4 -4
  82. package/src/components/trace-viewer/components/detail-panel.tsx +3 -1
  83. package/src/components/trace-viewer/components/draggable-border.tsx +1 -1
  84. package/src/components/trace-viewer/components/minimap.tsx +3 -3
  85. package/src/components/trace-viewer/components/span-markers.tsx +18 -13
  86. package/src/components/trace-viewer/components/timeline.tsx +4 -4
  87. package/src/components/trace-viewer/components/use-row-window.ts +1 -1
  88. package/src/components/trace-viewer/trace-viewer.tsx +2 -2
  89. package/src/components/trace-viewer/utils.test.ts +5 -3
  90. package/src/components/trace-viewer/utils.ts +12 -8
  91. package/src/components/ui/data-inspector.tsx +19 -3
  92. package/src/components/ui/decrypt-button.tsx +9 -2
  93. package/src/components/ui/duplicate-event-tooltip.tsx +32 -10
  94. package/src/components/ui/error-stack-block.tsx +3 -3
  95. package/src/components/ui/timestamp-tooltip.tsx +16 -6
  96. package/src/components/workflow-traces/event-colors.ts +11 -0
  97. package/src/components/workflow-traces/trace-span-construction.test.ts +27 -1
  98. package/src/components/workflow-traces/trace-span-construction.ts +5 -3
  99. package/src/index.ts +4 -0
  100. package/src/lib/duplicate-events.ts +1 -1
  101. package/src/lib/hydration.ts +7 -12
  102. package/src/lib/sealed-events.ts +32 -0
  103. package/src/lib/trace-builder.test.ts +29 -1
  104. package/src/lib/trace-builder.ts +10 -5
  105. package/src/lib/utils.ts +1 -1
  106. package/src/lib/zstd-browser-decoder.ts +1 -1
@@ -94,7 +94,7 @@ export const RunClickContext = createContext(undefined);
94
94
  function EncryptedInlineLabel() {
95
95
  const ctx = useContext(DecryptClickContext);
96
96
  if (ctx) {
97
- return (_jsxs(Button, { size: "xs", className: "align-baseline gap-x-1", disabled: ctx.isDecrypting, onClick: (e) => {
97
+ return (_jsxs(Button, { size: "xs", className: "align-baseline gap-x-1", disabled: ctx.isDecrypting || ctx.isDecryptDisabled, title: ctx.isDecryptDisabled ? ctx.decryptDisabledReason : undefined, onClick: (e) => {
98
98
  e.stopPropagation();
99
99
  ctx.onDecrypt();
100
100
  }, children: [ctx.isDecrypting ? (_jsx(Spinner, { size: 10 })) : (_jsx(Lock, { className: "h-3 w-3" })), _jsx("span", { children: "Decrypt" })] }));
@@ -389,7 +389,7 @@ export function collapseRefs(data) {
389
389
  if (data instanceof Set) {
390
390
  return new Set(Array.from(data.values(), collapseRefs));
391
391
  }
392
- // Only recurse into plain objects leave class instances untouched
392
+ // Only recurse into plain objects; leave class instances untouched
393
393
  const proto = Object.getPrototypeOf(data);
394
394
  if (proto !== Object.prototype && proto !== null)
395
395
  return data;
@@ -399,7 +399,7 @@ export function collapseRefs(data) {
399
399
  }
400
400
  return result;
401
401
  }
402
- export function DataInspector({ data, expandLevel = 2, name, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, }) {
402
+ export function DataInspector({ data, expandLevel = 2, name, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, }) {
403
403
  const collapsedData = useMemo(() => collapseRefs(data), [data]);
404
404
  const stableData = useStableInspectorData(collapsedData);
405
405
  let content = (_jsxs(_Fragment, { children: [_jsx("style", { href: "wf-json-view", precedence: "default", children: JSON_VIEW_STYLES }), _jsx(JsonTree, { data: stableData, name: name, expandLevel: expandLevel })] }));
@@ -410,7 +410,12 @@ export function DataInspector({ data, expandLevel = 2, name, onStreamClick, onRu
410
410
  content = (_jsx(RunClickContext.Provider, { value: onRunClick, children: content }));
411
411
  }
412
412
  if (onDecrypt) {
413
- content = (_jsx(DecryptClickContext.Provider, { value: { onDecrypt, isDecrypting }, children: content }));
413
+ content = (_jsx(DecryptClickContext.Provider, { value: {
414
+ onDecrypt,
415
+ isDecrypting,
416
+ isDecryptDisabled,
417
+ decryptDisabledReason,
418
+ }, children: content }));
414
419
  }
415
420
  return content;
416
421
  }
@@ -494,4 +499,4 @@ function isDeepEqual(a, b, seen = new WeakMap()) {
494
499
  }
495
500
  return true;
496
501
  }
497
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbnNwZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kYXRhLWluc3BlY3Rvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBS2IsVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUdMLCtCQUErQixHQUNoQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsOEVBQThFO0FBQzlFLDhDQUE4QztBQUM5Qyx3REFBd0Q7QUFDeEQsOEVBQThFO0FBRTlFLE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDO0FBQ2xELE1BQU0sdUJBQXVCLEdBQUcsaUNBQWlDLENBQUM7QUFDbEUsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7QUFDNUMsTUFBTSxrQkFBa0IsR0FBRyw0QkFBNEIsQ0FBQztBQXlCeEQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBQ3hDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FB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QUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNELElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQTJD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QztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuLyoqXG4gKiBSZXVzYWJsZSBkYXRhIGluc3BlY3RvciBmb3IgdGhlIG8xMXkgVUkuXG4gKlxuICogUmVuZGVycyBKU09OIGFzIGEgY29sbGFwc2libGUgdHJlZTogYnJhY2tldCBub3RhdGlvbiAoYHsg4oCmIH1gIC8gYFsg4oCmIF1gKSxcbiAqIGNvbG9yZWQga2V5cywgdHlwZWQgdmFsdWUgY29sb3JzLCBg4pa4YC9g4pa+YCBkaXNjbG9zdXJlIGljb25zLCBhbmQgYSBgLi4uYFxuICogY29sbGFwc2VkIGluZGljYXRvci5cbiAqXG4gKiBPbiB0b3Agb2YgcGxhaW4gSlNPTiBpdCBoYW5kbGVzIHRoZSB3b3JrZmxvdy1zcGVjaWZpYyB2YWx1ZSB0eXBlczogU3RyZWFtUmVmIC9cbiAqIFJ1blJlZiBiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBkZWNvZGVkIGJ5dGUgc3RyZWFtcywgRGF0ZXMsIGFuZCBuYW1lZFxuICogY2xhc3MgaW5zdGFuY2VzLlxuICovXG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdHlwZSBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgdHlwZSBNb3VzZUV2ZW50IGFzIFJlYWN0TW91c2VFdmVudCxcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHR5cGUgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VJZCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi9saWIvY24nO1xuaW1wb3J0IHsgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHtcbiAgdHlwZSBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2UsXG4gIHR5cGUgRm9ybWF0dGVkU3RyZWFtQ2h1bmtEaXNwbGF5LFxuICBmb3JtYXRBcnJheUJ1ZmZlclZpZXdGb3JEaXNwbGF5LFxufSBmcm9tICcuLi8uLi9saWIvc3RyZWFtLWRpc3BsYXknO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9idXR0b24nO1xuaW1wb3J0IHsgQ0xTLCBKU09OX1ZJRVdfU1RZTEVTIH0gZnJvbSAnLi9kYXRhLWluc3BlY3Rvci5zdHlsZXMnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lcic7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtUmVmIC8gQ2xhc3NJbnN0YW5jZVJlZiB0eXBlIGRldGVjdGlvblxuLy8gKGlubGluZSB0byBhdm9pZCBjaXJjdWxhciBkZXBzIHdpdGggaHlkcmF0aW9uIG1vZHVsZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBTVFJFQU1fUkVGX1RZUEUgPSAnX193b3JrZmxvd19zdHJlYW1fcmVmX18nO1xuY29uc3QgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUgPSAnX193b3JrZmxvd19jbGFzc19pbnN0YW5jZV9yZWZfXyc7XG5jb25zdCBSVU5fUkVGX1RZUEUgPSAnX193b3JrZmxvd19ydW5fcmVmX18nO1xuY29uc3QgQllURVNfRElTUExBWV9UWVBFID0gJ19fd29ya2Zsb3dfYnl0ZXNfZGlzcGxheV9fJztcblxuaW50ZXJmYWNlIFN0cmVhbVJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFNUUkVBTV9SRUZfVFlQRTtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJ1blJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFJVTl9SRUZfVFlQRTtcbiAgcnVuSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJ5dGVzRGlzcGxheSB7XG4gIF9fdHlwZTogdHlwZW9mIEJZVEVTX0RJU1BMQVlfVFlQRTtcbiAgdGV4dDogc3RyaW5nO1xuICBkZWNvZGVkRnJvbT86IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5zdGFuY2VSZWYge1xuICBfX3R5cGU6IHR5cGVvZiBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRTtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGNsYXNzSWQ6IHN0cmluZztcbiAgZGF0YTogdW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVDaHVua1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2h1bmtEYXRhKHRleHQ6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbVJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFN0cmVhbVJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGJvdGggZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgX190eXBlIChvcGFxdWUgcmVmcyB1c2Ugbm9uLWVudW1lcmFibGUpXG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gU1RSRUFNX1JFRl9UWVBFO1xufVxuXG5mdW5jdGlvbiBpc1J1blJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1blJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gUlVOX1JFRl9UWVBFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCeXRlc0Rpc3BsYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBCeXRlc0Rpc3BsYXkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgJ19fdHlwZScpO1xuICByZXR1cm4gZGVzYz8udmFsdWUgPT09IEJZVEVTX0RJU1BMQVlfVFlQRTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc0luc3RhbmNlUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgJ19fdHlwZScgaW4gdmFsdWUgJiZcbiAgICAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLl9fdHlwZSA9PT0gQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEVcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAodmFsdWUgYXMgeyBjb25zdHJ1Y3Rvcj86IHsgbmFtZT86IHN0cmluZyB9IH0pLmNvbnN0cnVjdG9yPy5uYW1lID09PVxuICAgICAgRU5DUllQVEVEX0RJU1BMQVlfTkFNRVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbSBjbGljayBjb250ZXh0IChwYXNzZWQgdGhyb3VnaCBmcm9tIHRoZSBwYW5lbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRleHQgZm9yIHBhc3Npbmcgc3RyZWFtIGNsaWNrIGhhbmRsZXJzIGRvd24gdG8gRGF0YUluc3BlY3RvciBpbnN0YW5jZXMuXG4gKiBFeHBvcnRlZCBzbyB0aGF0IHBhcmVudCBjb21wb25lbnRzIChlLmcuLCBBdHRyaWJ1dGVQYW5lbCkgY2FuIHByb3ZpZGUgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBTdHJlYW1DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8qKlxuICogQ29udGV4dCBmb3IgcGFzc2luZyBhIGRlY3J5cHQgaGFuZGxlciBkb3duIHRvIERhdGFJbnNwZWN0b3IgaW5zdGFuY2VzLlxuICogV2hlbiBwcm92aWRlZCwgZW5jcnlwdGVkIG1hcmtlcnMgYmVjb21lIGNsaWNrYWJsZSBidXR0b25zIHRoYXQgdHJpZ2dlciBkZWNyeXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBEZWNyeXB0Q2xpY2tDb250ZXh0VmFsdWUgPSB7XG4gIG9uRGVjcnlwdDogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nOiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWNyeXB0Q2xpY2tDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgRGVjcnlwdENsaWNrQ29udGV4dFZhbHVlIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBSdW5DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV29ya2Zsb3ctc3BlY2lmaWMgdmFsdWUgcmVuZGVyZXJzIChiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBieXRlIHN0cmVhbXMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gRW5jcnlwdGVkSW5saW5lTGFiZWwoKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGlmIChjdHgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICBjbGFzc05hbWU9XCJhbGlnbi1iYXNlbGluZSBnYXAteC0xXCJcbiAgICAgICAgZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmd9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjdHgub25EZWNyeXB0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjdHguaXNEZWNyeXB0aW5nID8gKFxuICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxMb2NrIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICApfVxuICAgICAgICA8c3Bhbj5EZWNyeXB0PC9zcGFuPlxuICAgICAgPC9CdXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaXRhbGljXCI+XG4gICAgICA8TG9jayBjbGFzc05hbWU9XCItbXQtcHggbXItWzNweF0gaW5saW5lIGgtMyB3LTMgYWxpZ24tbWlkZGxlXCIgLz5cbiAgICAgIEVuY3J5cHRlZFxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU3RyZWFtUmVmSW5saW5lKHsgc3RyZWFtUmVmIH06IHsgc3RyZWFtUmVmOiBTdHJlYW1SZWYgfSkge1xuICBjb25zdCBvblN0cmVhbUNsaWNrID0gdXNlQ29udGV4dChTdHJlYW1DbGlja0NvbnRleHQpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1ibHVlLTMwMCBiZy1ibHVlLTEwMCBweC0xLjUgcHktMC41IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LWJsdWUtOTAwIHVuZGVybGluZSBkZWNvcmF0aW9uLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWJsdWUtMjAwXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIG9uU3RyZWFtQ2xpY2s/LihzdHJlYW1SZWYuc3RyZWFtSWQpO1xuICAgICAgfX1cbiAgICAgIHRpdGxlPXtgVmlldyBzdHJlYW06ICR7c3RyZWFtUmVmLnN0cmVhbUlkfWB9XG4gICAgPlxuICAgICAgPHNwYW4+8J+ToTwvc3Bhbj5cbiAgICAgIDxzcGFuPntzdHJlYW1SZWYuc3RyZWFtSWR9PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5mdW5jdGlvbiBSdW5SZWZJbmxpbmUoeyBydW5SZWYgfTogeyBydW5SZWY6IFJ1blJlZiB9KSB7XG4gIGNvbnN0IG9uUnVuQ2xpY2sgPSB1c2VDb250ZXh0KFJ1bkNsaWNrQ29udGV4dCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBib3JkZXIgYm9yZGVyLXB1cnBsZS0zMDAgYmctcHVycGxlLTEwMCBweC0xLjUgcHktMC41IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXB1cnBsZS05MDAgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctcHVycGxlLTIwMFwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBvblJ1bkNsaWNrPy4ocnVuUmVmLnJ1bklkKTtcbiAgICAgIH19XG4gICAgICB0aXRsZT17YFZpZXcgcnVuOiAke3J1blJlZi5ydW5JZH1gfVxuICAgID5cbiAgICAgIDxzcGFuPntydW5SZWYucnVuSWR9PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5mdW5jdGlvbiBEZWNvZGVkQnl0ZXNDaHVuayh7XG4gIGRlY29kZWRUZXh0LFxuICBzb3VyY2UsXG59OiB7XG4gIGRlY29kZWRUZXh0OiBzdHJpbmc7XG4gIHNvdXJjZTogRGVjb2RlZFN0cmVhbUNodW5rU291cmNlO1xufSkge1xuICBjb25zdCBbc2VsZWN0ZWRWaWV3LCBzZXRTZWxlY3RlZFZpZXddID0gdXNlU3RhdGU8J2RlY29kZWQnIHwgJ2J5dGVzJz4oXG4gICAgJ2RlY29kZWQnXG4gICk7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ2h1bmtEYXRhKGRlY29kZWRUZXh0KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPlxuICAgICAge3NlbGVjdGVkVmlldyA9PT0gJ2RlY29kZWQnID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgICAgICB7dHlwZW9mIHBhcnNlZCA9PT0gJ3N0cmluZycgPyAoXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIHRleHQtZ3JheS0xMDAwXCI+XG4gICAgICAgICAgICAgIHtkZXNlcmlhbGl6ZUNodW5rVGV4dChwYXJzZWQpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8RGF0YUluc3BlY3RvciBkYXRhPXtwYXJzZWR9IGV4cGFuZExldmVsPXsxfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPERlY29kZWRCeXRlc0luc3BlY3RvciBkZWNvZGVkVGV4dD17ZGVjb2RlZFRleHR9IHNvdXJjZT17c291cmNlfSAvPlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktNDAwXCJcbiAgICAgICAgICB0aXRsZT17YCR7c291cmNlLnR5cGV9IGRlY29kZWQgYXMgJHtzb3VyY2UuZW5jb2RpbmcudG9VcHBlckNhc2UoKX0gdGV4dC4gU3dpdGNoIHRvIEJ5dGVzIHRvIGluc3BlY3QgdGhlIHN1bW1hcml6ZWQgcmF3IHZhbHVlLmB9XG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdoLTUgcHgtMS41IGZvbnQtbWVkaXVtIHRleHQtWzEwcHhdIHRleHQtZ3JheS05MDAnLFxuICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJyA/ICdiZy1ncmF5LTIwMCcgOiAnYmctZ3JheS0xMDAnXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRWaWV3KCdkZWNvZGVkJyl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9e3NlbGVjdGVkVmlldyA9PT0gJ2RlY29kZWQnfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNob3cgZGVjb2RlZCB0ZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBEZWNvZGVkXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaC01IGJvcmRlci1ncmF5LTQwMCBib3JkZXItbCBweC0xLjUgZm9udC1tZWRpdW0gdGV4dC1bMTBweF0gdGV4dC1ncmF5LTkwMCcsXG4gICAgICAgICAgICAgIHNlbGVjdGVkVmlldyA9PT0gJ2J5dGVzJyA/ICdiZy1ncmF5LTIwMCcgOiAnYmctZ3JheS0xMDAnXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRWaWV3KCdieXRlcycpfVxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPXtzZWxlY3RlZFZpZXcgPT09ICdieXRlcyd9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2hvdyByYXcgYnl0ZXMgc3VtbWFyeVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQnl0ZXNcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRGVjb2RlZEJ5dGVzSW5zcGVjdG9yKHtcbiAgZGVjb2RlZFRleHQsXG4gIHNvdXJjZSxcbn06IHtcbiAgZGVjb2RlZFRleHQ6IHN0cmluZztcbiAgc291cmNlOiBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2U7XG59KSB7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1vbm9cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggbWF4LXctZnVsbCBpdGVtcy1zdGFydCBnYXAtMSB0ZXh0LWxlZnQgdGV4dC1ncmF5LTEwMDBcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRFeHBhbmRlZCgodmFsdWUpID0+ICF2YWx1ZSl9XG4gICAgICAgIHRpdGxlPXtgJHtzb3VyY2UudHlwZX0gZGVjb2RlZCBhcyAke3NvdXJjZS5lbmNvZGluZy50b1VwcGVyQ2FzZSgpfSB0ZXh0YH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic2VsZWN0LW5vbmUgdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgIHtleHBhbmRlZCA/ICfilrwnIDogJ+KWtid9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWluLXctMCBicmVhay13b3Jkc1wiPntzb3VyY2UucmF3U3VtbWFyeX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtleHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBwbC01XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMFwiPmRlY29kZWQ6IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIHRleHQtZ3JlZW4tOTAwXCI+XG4gICAgICAgICAgICB7SlNPTi5zdHJpbmdpZnkoZGVjb2RlZFRleHQpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBCeXRlc0Rpc3BsYXlWYWx1ZSh7IGRpc3BsYXkgfTogeyBkaXNwbGF5OiBCeXRlc0Rpc3BsYXkgfSkge1xuICBpZiAoZGlzcGxheS5kZWNvZGVkRnJvbSkge1xuICAgIHJldHVybiAoXG4gICAgICA8RGVjb2RlZEJ5dGVzQ2h1bmtcbiAgICAgICAgZGVjb2RlZFRleHQ9e2Rpc3BsYXkudGV4dH1cbiAgICAgICAgc291cmNlPXtkaXNwbGF5LmRlY29kZWRGcm9tfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3JkcyB0ZXh0LWdyYXktMTAwMFwiPlxuICAgICAge2Rpc3BsYXkudGV4dH1cbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHJlZSByZW5kZXJlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgRW50cnkgPSBbZmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgdmFsdWU6IHVua25vd25dO1xuXG5pbnRlcmZhY2UgTm9kZUNvbnRleHQge1xuICBsZXZlbDogbnVtYmVyO1xuICBzaG91bGRFeHBhbmQ6IChsZXZlbDogbnVtYmVyKSA9PiBib29sZWFuO1xuICBvdXRlclJlZjogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD47XG59XG5cbi8qKiBGaWVsZCBuYW1lcyBhcmUgcmVuZGVyZWQgdW5xdW90ZWQgKGVtcHR5IHN0cmluZyBzaG93cyBhcyBgXCJcImApLiAqL1xuZnVuY3Rpb24gZm9ybWF0RmllbGQoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBmaWVsZCA9PT0gJycgPyAnXCJcIicgOiBmaWVsZDtcbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhbiBvYmplY3QvYXJyYXkvbWFwL3NldCBhcyBhbiBleHBhbmRhYmxlIGNvbnRhaW5lci4gUmV0dXJucyBudWxsIGZvclxuICogdmFsdWVzIHRoYXQgc2hvdWxkIHJlbmRlciBhcyBhIHByaW1pdGl2ZS4gYHByZWZpeGAgY2FycmllcyBhIGNsYXNzIG5hbWUgc2hvd25cbiAqIGJlZm9yZSB0aGUgb3BlbmluZyBicmFja2V0IChNYXAvU2V0IGFuZCBuYW1lZCBjbGFzcyBpbnN0YW5jZXMpLlxuICovXG5mdW5jdGlvbiBkZXNjcmliZUNvbnRhaW5lcihcbiAgdmFsdWU6IHVua25vd25cbik6IHsgZW50cmllczogRW50cnlbXTsgb3Blbjogc3RyaW5nOyBjbG9zZTogc3RyaW5nOyBwcmVmaXg/OiBzdHJpbmcgfSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogdmFsdWUubWFwKChpdGVtKSA9PiBbdW5kZWZpbmVkLCBpdGVtXSBhcyBFbnRyeSksXG4gICAgICBvcGVuOiAnWycsXG4gICAgICBjbG9zZTogJ10nLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJpZXM6IEFycmF5LmZyb20odmFsdWUuZW50cmllcygpLCAoW2tleSwgdmFsXSkgPT4gW1xuICAgICAgICBTdHJpbmcoa2V5KSxcbiAgICAgICAgdmFsLFxuICAgICAgXSkgYXMgRW50cnlbXSxcbiAgICAgIG9wZW46ICd7JyxcbiAgICAgIGNsb3NlOiAnfScsXG4gICAgICBwcmVmaXg6ICdNYXAnLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJpZXM6IEFycmF5LmZyb20odmFsdWUudmFsdWVzKCksIChpdGVtKSA9PiBbdW5kZWZpbmVkLCBpdGVtXSBhcyBFbnRyeSksXG4gICAgICBvcGVuOiAnWycsXG4gICAgICBjbG9zZTogJ10nLFxuICAgICAgcHJlZml4OiAnU2V0JyxcbiAgICB9O1xuICB9XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgbmFtZSA9ICh2YWx1ZSBhcyB7IGNvbnN0cnVjdG9yPzogeyBuYW1lPzogc3RyaW5nIH0gfSkuY29uc3RydWN0b3JcbiAgICAgID8ubmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogT2JqZWN0LmVudHJpZXModmFsdWUpIGFzIEVudHJ5W10sXG4gICAgICBvcGVuOiAneycsXG4gICAgICBjbG9zZTogJ30nLFxuICAgICAgcHJlZml4OiBuYW1lICYmIG5hbWUgIT09ICdPYmplY3QnID8gbmFtZSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVByaW1pdGl2ZSh2YWx1ZTogdW5rbm93bik6IHsgdGV4dDogc3RyaW5nOyBjbHM6IHN0cmluZyB9IHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4geyB0ZXh0OiAnbnVsbCcsIGNsczogQ0xTLm51bGwgfTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB7IHRleHQ6ICd1bmRlZmluZWQnLCBjbHM6IENMUy51bmRlZmluZWQgfTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBgXCIke1N0cmluZyh2YWx1ZSl9XCJgLCBjbHM6IENMUy5zdHJpbmcgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgcmV0dXJuIHsgdGV4dDogU3RyaW5nKHZhbHVlKSwgY2xzOiBDTFMuYm9vbGVhbiB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyKSB7XG4gICAgcmV0dXJuIHsgdGV4dDogU3RyaW5nKHZhbHVlKSwgY2xzOiBDTFMubnVtYmVyIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBgJHt2YWx1ZS50b1N0cmluZygpfW5gLCBjbHM6IENMUy5udW1iZXIgfTtcbiAgfVxuICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5wdW5jdHVhdGlvbiB9O1xufVxuXG5mdW5jdGlvbiBMYWJlbCh7IGZpZWxkLCBjbGlja2FibGUgfTogeyBmaWVsZD86IHN0cmluZzsgY2xpY2thYmxlPzogYm9vbGVhbiB9KSB7XG4gIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9e2NsaWNrYWJsZSA/IENMUy5jbGlja2FibGVMYWJlbCA6IENMUy5sYWJlbH0+XG4gICAgICB7YCR7Zm9ybWF0RmllbGQoZmllbGQpfTpgfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQ29tbWEoeyBpc0xhc3QgfTogeyBpc0xhc3Q6IGJvb2xlYW4gfSkge1xuICBpZiAoaXNMYXN0KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Q0xTLnB1bmN0dWF0aW9ufT4sPC9zcGFuPjtcbn1cblxuLyoqIEEgbm9uLWV4cGFuZGFibGUgcm93OiBgZmllbGQ6IDx2YWx1ZT5gLiAqL1xuZnVuY3Rpb24gTGVhZlJvdyh7XG4gIGZpZWxkLFxuICBpc0xhc3QsXG4gIGNoaWxkcmVuLFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgaXNMYXN0OiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtDTFMuY2hpbGR9IHJvbGU9XCJ0cmVlaXRlbVwiIHRhYkluZGV4PXstMX0+XG4gICAgICA8TGFiZWwgZmllbGQ9e2ZpZWxkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgICAgPENvbW1hIGlzTGFzdD17aXNMYXN0fSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBQcmltaXRpdmVWYWx1ZSh7IGZpZWxkLCB2YWx1ZSwgaXNMYXN0IH06IE5vZGVQcm9wcykge1xuICBjb25zdCB7IHRleHQsIGNscyB9ID0gZGVzY3JpYmVQcmltaXRpdmUodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbHN9Pnt0ZXh0fTwvc3Bhbj5cbiAgICA8L0xlYWZSb3c+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEVtcHR5Q29udGFpbmVyKHtcbiAgZmllbGQsXG4gIHByZWZpeCxcbiAgb3BlbixcbiAgY2xvc2UsXG4gIGlzTGFzdCxcbn06IHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIHByZWZpeD86IHN0cmluZztcbiAgb3Blbjogc3RyaW5nO1xuICBjbG9zZTogc3RyaW5nO1xuICBpc0xhc3Q6IGJvb2xlYW47XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e0NMUy5jaGlsZH0gcm9sZT1cInRyZWVpdGVtXCIgdGFiSW5kZXg9ey0xfT5cbiAgICAgIDxMYWJlbCBmaWVsZD17ZmllbGR9IC8+XG4gICAgICB7cHJlZml4ID8gPHNwYW4gY2xhc3NOYW1lPXtDTFMuY2xhc3NOYW1lfT57cHJlZml4fTwvc3Bhbj4gOiBudWxsfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntvcGVufTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLnB1bmN0dWF0aW9ufT57Y2xvc2V9PC9zcGFuPlxuICAgICAgPENvbW1hIGlzTGFzdD17aXNMYXN0fSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBmb2N1c0V4cGFuZGVyKFxuICBidXR0b246IEhUTUxFbGVtZW50LFxuICBvdXRlclJlZjogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD5cbikge1xuICBjb25zdCBwcmV2aW91cyA9IG91dGVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuICAgICdbZGF0YS1qc29uLWV4cGFuZGVyXVt0YWJpbmRleD1cIjBcIl0nXG4gICk7XG4gIGlmIChwcmV2aW91cykgcHJldmlvdXMudGFiSW5kZXggPSAtMTtcbiAgYnV0dG9uLnRhYkluZGV4ID0gMDtcbiAgYnV0dG9uLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIG1vdmVFeHBhbmRlckZvY3VzKFxuICBvdXRlclJlZjogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD4sXG4gIGRpcmVjdGlvbjogMSB8IC0xXG4pIHtcbiAgY29uc3Qgcm9vdCA9IG91dGVyUmVmLmN1cnJlbnQ7XG4gIGlmICghcm9vdCkgcmV0dXJuO1xuICBjb25zdCBidXR0b25zID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignW2RhdGEtanNvbi1leHBhbmRlcl0nKTtcbiAgbGV0IGN1cnJlbnQgPSAtMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGJ1dHRvbnNbaV0udGFiSW5kZXggPT09IDApIHtcbiAgICAgIGN1cnJlbnQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjdXJyZW50IDwgMCkgcmV0dXJuO1xuICBjb25zdCBuZXh0ID0gKGN1cnJlbnQgKyBkaXJlY3Rpb24gKyBidXR0b25zLmxlbmd0aCkgJSBidXR0b25zLmxlbmd0aDtcbiAgYnV0dG9uc1tjdXJyZW50XS50YWJJbmRleCA9IC0xO1xuICBidXR0b25zW25leHRdLnRhYkluZGV4ID0gMDtcbiAgYnV0dG9uc1tuZXh0XS5mb2N1cygpO1xufVxuXG5mdW5jdGlvbiBFeHBhbmRhYmxlQ29udGFpbmVyKHtcbiAgZmllbGQsXG4gIGVudHJpZXMsXG4gIG9wZW4sXG4gIGNsb3NlLFxuICBwcmVmaXgsXG4gIGN0eCxcbiAgaXNMYXN0LFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgZW50cmllczogRW50cnlbXTtcbiAgb3Blbjogc3RyaW5nO1xuICBjbG9zZTogc3RyaW5nO1xuICBwcmVmaXg/OiBzdHJpbmc7XG4gIGN0eDogTm9kZUNvbnRleHQ7XG4gIGlzTGFzdDogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgeyBsZXZlbCwgc2hvdWxkRXhwYW5kLCBvdXRlclJlZiB9ID0gY3R4O1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IHVzZVN0YXRlKCgpID0+IHNob3VsZEV4cGFuZChsZXZlbCkpO1xuICBjb25zdCByb3dSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBjb250ZW50c0lkID0gdXNlSWQoKTtcblxuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEVtcHR5Q29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgcHJlZml4PXtwcmVmaXh9XG4gICAgICAgIG9wZW49e29wZW59XG4gICAgICAgIGNsb3NlPXtjbG9zZX1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICBjb25zdCB0b2dnbGUgPSAoKSA9PiB7XG4gICAgc2V0RXhwYW5kZWQoKHZhbHVlKSA9PiAhdmFsdWUpO1xuICAgIGlmIChyb3dSZWYuY3VycmVudCkgZm9jdXNFeHBhbmRlcihyb3dSZWYuY3VycmVudCwgb3V0ZXJSZWYpO1xuICB9O1xuXG4gIC8vIFRvZ2dsZSBvbmx5IGZvciBjbGlja3MgdGhhdCBsYW5kIG9uIHRoaXMgcm93IGl0c2VsZjsgY2xpY2tzIGJ1YmJsaW5nIHVwIG91dFxuICAvLyBvZiBhIG5lc3RlZCB0cmVlaXRlbSBhcmUgaGFuZGxlZCBieSB0aGF0IGRlc2NlbmRhbnQncyBvd24gcm93LlxuICBjb25zdCBvbkNsaWNrID0gKGV2ZW50OiBSZWFjdE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdbcm9sZT1cInRyZWVpdGVtXCJdJykgIT09XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRvZ2dsZSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uS2V5RG93biA9IChldmVudDogUmVhY3RLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgc2V0RXhwYW5kZWQoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRXhwYW5kZXJGb2N1cyhvdXRlclJlZiwgLTEpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVFeHBhbmRlckZvY3VzKG91dGVyUmVmLCAxKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFzdEluZGV4ID0gZW50cmllcy5sZW5ndGggLSAxO1xuXG4gIHJldHVybiAoXG4gICAgLy8gVGhlIHRyZWVpdGVtIHJvdyBpcyB0aGUgZm9jdXNhYmxlLCBrZXlib2FyZC1vcGVyYWJsZSBjb250cm9sIChyb3ZpbmdcbiAgICAvLyB0YWJpbmRleCArIGFycm93IGtleXMpOyB0aGUgZGlzY2xvc3VyZSBtYXJrZXIgYmVsb3cgaXMgcHVyZWx5IGRlY29yYXRpdmUuXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtDTFMuY2hpbGR9XG4gICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgYXJpYS1leHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICBhcmlhLWNvbnRyb2xzPXtleHBhbmRlZCA/IGNvbnRlbnRzSWQgOiB1bmRlZmluZWR9XG4gICAgICBkYXRhLWpzb24tZXhwYW5kZXJcbiAgICAgIHJlZj17cm93UmVmfVxuICAgICAgdGFiSW5kZXg9e2xldmVsID09PSAwID8gMCA6IC0xfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17ZXhwYW5kZWQgPyBDTFMuY29sbGFwc2VJY29uIDogQ0xTLmV4cGFuZEljb259XG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAge2ZpZWxkICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGlja2FibGVMYWJlbH0+e2Ake2Zvcm1hdEZpZWxkKGZpZWxkKX06YH08L3NwYW4+XG4gICAgICApfVxuICAgICAge3ByZWZpeCA/IDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsYXNzTmFtZX0+e3ByZWZpeH08L3NwYW4+IDogbnVsbH1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLnB1bmN0dWF0aW9ufT57b3Blbn08L3NwYW4+XG4gICAgICB7ZXhwYW5kZWQgPyAoXG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogQVJJQSB0cmVlIGdyb3VwIGlzIHRoZSBjb3JyZWN0IHJvbGUgaGVyZVxuICAgICAgICA8dWwgaWQ9e2NvbnRlbnRzSWR9IGNsYXNzTmFtZT17Q0xTLmNoaWxkRmllbGRzfSByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgICB7ZW50cmllcy5tYXAoKFtjaGlsZEZpZWxkLCBjaGlsZFZhbHVlXSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxEYXRhUmVuZGVyXG4gICAgICAgICAgICAgIGtleT17Y2hpbGRGaWVsZCA/PyBpbmRleH1cbiAgICAgICAgICAgICAgZmllbGQ9e2NoaWxkRmllbGR9XG4gICAgICAgICAgICAgIHZhbHVlPXtjaGlsZFZhbHVlfVxuICAgICAgICAgICAgICBpc0xhc3Q9e2luZGV4ID09PSBsYXN0SW5kZXh9XG4gICAgICAgICAgICAgIGN0eD17eyAuLi5jdHgsIGxldmVsOiBsZXZlbCArIDEgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvdWw+XG4gICAgICApIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5jb2xsYXBzZWRDb250ZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLnB1bmN0dWF0aW9ufT57Y2xvc2V9PC9zcGFuPlxuICAgICAgPENvbW1hIGlzTGFzdD17aXNMYXN0fSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5pbnRlcmZhY2UgTm9kZVByb3BzIHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIHZhbHVlOiB1bmtub3duO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGN0eDogTm9kZUNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIERhdGFSZW5kZXIoeyBmaWVsZCwgdmFsdWUsIGlzTGFzdCwgY3R4IH06IE5vZGVQcm9wcykge1xuICBpZiAoaXNCeXRlc0Rpc3BsYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8Qnl0ZXNEaXNwbGF5VmFsdWUgZGlzcGxheT17dmFsdWV9IC8+XG4gICAgICA8L0xlYWZSb3c+XG4gICAgKTtcbiAgfVxuICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8RW5jcnlwdGVkSW5saW5lTGFiZWwgLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc1N0cmVhbVJlZih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxTdHJlYW1SZWZJbmxpbmUgc3RyZWFtUmVmPXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc1J1blJlZih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxSdW5SZWZJbmxpbmUgcnVuUmVmPXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmRhdGV9Pnt2YWx1ZS50b0lTT1N0cmluZygpfTwvc3Bhbj5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucmVnZXhwfT57dmFsdWUudG9TdHJpbmcoKX08L3NwYW4+XG4gICAgICA8L0xlYWZSb3c+XG4gICAgKTtcbiAgfVxuICBpZiAoaXNDbGFzc0luc3RhbmNlUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NJbnN0YW5jZU5vZGVcbiAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICBpbnN0YW5jZT17dmFsdWV9XG4gICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgICBjdHg9e2N0eH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRlc2NyaWJlQ29udGFpbmVyKHZhbHVlKTtcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHJldHVybiAoXG4gICAgICA8RXhwYW5kYWJsZUNvbnRhaW5lclxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGVudHJpZXM9e2NvbnRhaW5lci5lbnRyaWVzfVxuICAgICAgICBvcGVuPXtjb250YWluZXIub3Blbn1cbiAgICAgICAgY2xvc2U9e2NvbnRhaW5lci5jbG9zZX1cbiAgICAgICAgcHJlZml4PXtjb250YWluZXIucHJlZml4fVxuICAgICAgICBjdHg9e2N0eH1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQcmltaXRpdmVWYWx1ZSBmaWVsZD17ZmllbGR9IHZhbHVlPXt2YWx1ZX0gaXNMYXN0PXtpc0xhc3R9IGN0eD17Y3R4fSAvPlxuICApO1xufVxuXG5mdW5jdGlvbiBDbGFzc0luc3RhbmNlTm9kZSh7XG4gIGZpZWxkLFxuICBpbnN0YW5jZSxcbiAgaXNMYXN0LFxuICBjdHgsXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBpbnN0YW5jZTogQ2xhc3NJbnN0YW5jZVJlZjtcbiAgaXNMYXN0OiBib29sZWFuO1xuICBjdHg6IE5vZGVDb250ZXh0O1xufSkge1xuICBjb25zdCBjb250YWluZXIgPSBkZXNjcmliZUNvbnRhaW5lcihpbnN0YW5jZS5kYXRhKTtcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHJldHVybiAoXG4gICAgICA8RXhwYW5kYWJsZUNvbnRhaW5lclxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGVudHJpZXM9e2NvbnRhaW5lci5lbnRyaWVzfVxuICAgICAgICBvcGVuPXtjb250YWluZXIub3Blbn1cbiAgICAgICAgY2xvc2U9e2NvbnRhaW5lci5jbG9zZX1cbiAgICAgICAgcHJlZml4PXtpbnN0YW5jZS5jbGFzc05hbWV9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBjb25zdCB7IHRleHQsIGNscyB9ID0gZGVzY3JpYmVQcmltaXRpdmUoaW5zdGFuY2UuZGF0YSk7XG4gIHJldHVybiAoXG4gICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGFzc05hbWV9PntpbnN0YW5jZS5jbGFzc05hbWV9PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbHN9Pnt0ZXh0fTwvc3Bhbj5cbiAgICA8L0xlYWZSb3c+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEpzb25UcmVlKHtcbiAgZGF0YSxcbiAgbmFtZSxcbiAgZXhwYW5kTGV2ZWwsXG59OiB7XG4gIGRhdGE6IHVua25vd247XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGV4cGFuZExldmVsOiBudW1iZXI7XG59KSB7XG4gIGNvbnN0IG91dGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2hvdWxkRXhwYW5kID0gdXNlTWVtbyhcbiAgICAoKSA9PiAobGV2ZWw6IG51bWJlcikgPT4gbGV2ZWwgPCBleHBhbmRMZXZlbCxcbiAgICBbZXhwYW5kTGV2ZWxdXG4gICk7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtvdXRlclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Q0xTLmNvbnRhaW5lcn1cbiAgICAgIHJvbGU9XCJ0cmVlXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJKU09OIHZpZXdcIlxuICAgID5cbiAgICAgIDxEYXRhUmVuZGVyXG4gICAgICAgIGZpZWxkPXtuYW1lfVxuICAgICAgICB2YWx1ZT17ZGF0YX1cbiAgICAgICAgaXNMYXN0XG4gICAgICAgIGN0eD17eyBsZXZlbDogMCwgc2hvdWxkRXhwYW5kLCBvdXRlclJlZiB9fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWYgLyB0eXBlZC1hcnJheSBjb2xsYXBzaW5nIChwcmVwcm9jZXNzaW5nIGJlZm9yZSByZW5kZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDcmVhdGUgYSBub24tZXhwYW5kYWJsZSB3cmFwcGVyIHRoYXQgY2FycmllcyByZWYgZGF0YSBhcyBub24tZW51bWVyYWJsZVxuICogcHJvcGVydGllcyBzbyB0aGUgcmVuZGVyZXIgY2FuIGRldGVjdCBTdHJlYW1SZWYvUnVuUmVmIHdpdGhvdXQgZXhwb3NpbmdcbiAqIHRoZWlyIGludGVybmFscyBhcyBvYmplY3QgZmllbGRzLlxuICovXG5mdW5jdGlvbiBtYWtlT3BhcXVlUmVmKHJlZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB1bmtub3duIHtcbiAgY29uc3Qgb3BhcXVlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVmKSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcGFxdWUsIGtleSwgeyB2YWx1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIG9wYXF1ZTtcbn1cblxuZnVuY3Rpb24gbWFrZUJ5dGVzRGlzcGxheShkaXNwbGF5OiBGb3JtYXR0ZWRTdHJlYW1DaHVua0Rpc3BsYXkpOiB1bmtub3duIHtcbiAgY29uc3Qgb3BhcXVlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ19fdHlwZScsIHtcbiAgICB2YWx1ZTogQllURVNfRElTUExBWV9UWVBFLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ3RleHQnLCB7XG4gICAgdmFsdWU6IGRpc3BsYXkudGV4dCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcGFxdWUsICdkZWNvZGVkRnJvbScsIHtcbiAgICB2YWx1ZTogZGlzcGxheS5kZWNvZGVkRnJvbSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgfSk7XG4gIHJldHVybiBvcGFxdWU7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgd2FsayBkYXRhIGFuZCByZXBsYWNlIFJ1blJlZi9TdHJlYW1SZWYvdHlwZWQgYXJyYXkgb2JqZWN0cyB3aXRoXG4gKiBub24tZXhwYW5kYWJsZSB2ZXJzaW9ucyBzbyB0aGUgcmVuZGVyZXIgZG9lc24ndCBzaG93IHRoZWlyIGludGVybmFscy5cbiAqIE9ubHkgcmVjdXJzZXMgaW50byBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgdG8gYXZvaWQgc3RyaXBwaW5nIGNsYXNzXG4gKiBpbnN0YW5jZXMgKERhdGUsIEVycm9yLCBVUkwsIEhlYWRlcnMsIGV0Yy4pIHRoYXQgaGF2ZSB0aGVpciBvd24gcmVuZGVyaW5nLlxuICogTWFwIGFuZCBTZXQgY29udGFpbmVycyBhcmUgcHJlc2VydmVkIHdoaWxlIHRoZWlyIGNvbnRlbnRzIGFyZSBwcmVwYXJlZCBmb3JcbiAqIGRpc3BsYXkuXG4gKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RpbmcgdGhlIHR5cGVkLWFycmF5IGRldGVjdGlvbiBwYXRoIHVzZWQgYnkgaHlkcmF0ZWRcbiAqIEFJIGFnZW50IHN0cmVhbSBjaHVua3MgKGUuZy4gYHsgZGVsdGE6IG5ldyBVaW50OEFycmF5KC4uLikgfWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGFwc2VSZWZzKGRhdGE6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gZGF0YTtcbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSAmJiAhKGRhdGEgaW5zdGFuY2VvZiBEYXRhVmlldykpIHtcbiAgICByZXR1cm4gbWFrZUJ5dGVzRGlzcGxheShmb3JtYXRBcnJheUJ1ZmZlclZpZXdGb3JEaXNwbGF5KGRhdGEpKTtcbiAgfVxuICBpZiAoaXNSdW5SZWYoZGF0YSkgfHwgaXNTdHJlYW1SZWYoZGF0YSkpXG4gICAgcmV0dXJuIG1ha2VPcGFxdWVSZWYoZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBkYXRhLm1hcChjb2xsYXBzZVJlZnMpO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgQXJyYXkuZnJvbShkYXRhLmVudHJpZXMoKSwgKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAgICBjb2xsYXBzZVJlZnMoa2V5KSxcbiAgICAgICAgY29sbGFwc2VSZWZzKHZhbHVlKSxcbiAgICAgIF0pXG4gICAgKTtcbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIFNldCkge1xuICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20oZGF0YS52YWx1ZXMoKSwgY29sbGFwc2VSZWZzKSk7XG4gIH1cbiAgLy8gT25seSByZWN1cnNlIGludG8gcGxhaW4gb2JqZWN0cyDigJQgbGVhdmUgY2xhc3MgaW5zdGFuY2VzIHVudG91Y2hlZFxuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihkYXRhKTtcbiAgaWYgKHByb3RvICE9PSBPYmplY3QucHJvdG90eXBlICYmIHByb3RvICE9PSBudWxsKSByZXR1cm4gZGF0YTtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gY29sbGFwc2VSZWZzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBjb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnNwZWN0b3JQcm9wcyB7XG4gIC8qKiBUaGUgZGF0YSB0byBpbnNwZWN0ICovXG4gIGRhdGE6IHVua25vd247XG4gIC8qKiBMZXZlbHMgc3RyaWN0bHkgYmVsb3cgdGhpcyBudW1iZXIgYXV0by1leHBhbmQgKGRlZmF1bHQ6IDIpICovXG4gIGV4cGFuZExldmVsPzogbnVtYmVyO1xuICAvKiogT3B0aW9uYWwgbmFtZSBmb3IgdGhlIHJvb3Qgbm9kZSAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHN0cmVhbSByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgcnVuIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYW4gZW5jcnlwdGVkIG1hcmtlciBpcyBjbGlja2VkICh0cmlnZ2VycyBkZWNyeXB0aW9uKSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0YUluc3BlY3Rvcih7XG4gIGRhdGEsXG4gIGV4cGFuZExldmVsID0gMixcbiAgbmFtZSxcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgb25EZWNyeXB0LFxuICBpc0RlY3J5cHRpbmcgPSBmYWxzZSxcbn06IERhdGFJbnNwZWN0b3JQcm9wcykge1xuICBjb25zdCBjb2xsYXBzZWREYXRhID0gdXNlTWVtbygoKSA9PiBjb2xsYXBzZVJlZnMoZGF0YSksIFtkYXRhXSk7XG4gIGNvbnN0IHN0YWJsZURhdGEgPSB1c2VTdGFibGVJbnNwZWN0b3JEYXRhKGNvbGxhcHNlZERhdGEpO1xuXG4gIGxldCBjb250ZW50OiBSZWFjdE5vZGUgPSAoXG4gICAgPD5cbiAgICAgIHsvKiBSZWFjdCAxOSBob2lzdHMgJiBkZWR1cGVzIHRoaXMgPHN0eWxlPiBieSBocmVmLCBzbyBpdCBpcyBlbWl0dGVkIG9uY2VcbiAgICAgICAgICByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGluc3BlY3RvcnMgYXJlIG1vdW50ZWQuICovfVxuICAgICAgPHN0eWxlIGhyZWY9XCJ3Zi1qc29uLXZpZXdcIiBwcmVjZWRlbmNlPVwiZGVmYXVsdFwiPlxuICAgICAgICB7SlNPTl9WSUVXX1NUWUxFU31cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8SnNvblRyZWUgZGF0YT17c3RhYmxlRGF0YX0gbmFtZT17bmFtZX0gZXhwYW5kTGV2ZWw9e2V4cGFuZExldmVsfSAvPlxuICAgIDwvPlxuICApO1xuXG4gIGlmIChvblN0cmVhbUNsaWNrKSB7XG4gICAgY29udGVudCA9IChcbiAgICAgIDxTdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e29uU3RyZWFtQ2xpY2t9PlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvU3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbiAgaWYgKG9uUnVuQ2xpY2spIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPFJ1bkNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25SdW5DbGlja30+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9SdW5DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxuICBpZiAob25EZWNyeXB0KSB7XG4gICAgY29udGVudCA9IChcbiAgICAgIDxEZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IG9uRGVjcnlwdCwgaXNEZWNyeXB0aW5nIH19PlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvRGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVuZGVyIHN0YWJpbGl6YXRpb24gKGF2b2lkIHJlLXJlbmRlcnMgd2hlbiBkYXRhIGlzIGRlZXBseSBlcXVhbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiB1c2VTdGFibGVJbnNwZWN0b3JEYXRhPFQ+KG5leHQ6IFQpOiBUIHtcbiAgY29uc3QgcHJldmlvdXNSZWYgPSB1c2VSZWY8VD4obmV4dCk7XG4gIGlmICghaXNEZWVwRXF1YWwocHJldmlvdXNSZWYuY3VycmVudCwgbmV4dCkpIHtcbiAgICBwcmV2aW91c1JlZi5jdXJyZW50ID0gbmV4dDtcbiAgfVxuICByZXR1cm4gcHJldmlvdXNSZWYuY3VycmVudDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNTYW1lQnl0ZXNEaXNwbGF5KGE6IEJ5dGVzRGlzcGxheSwgYjogQnl0ZXNEaXNwbGF5KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgYS50ZXh0ID09PSBiLnRleHQgJiZcbiAgICBhLmRlY29kZWRGcm9tPy50eXBlID09PSBiLmRlY29kZWRGcm9tPy50eXBlICYmXG4gICAgYS5kZWNvZGVkRnJvbT8uZW5jb2RpbmcgPT09IGIuZGVjb2RlZEZyb20/LmVuY29kaW5nICYmXG4gICAgYS5kZWNvZGVkRnJvbT8ucmF3U3VtbWFyeSA9PT0gYi5kZWNvZGVkRnJvbT8ucmF3U3VtbWFyeVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0RlZXBFcXVhbChhOiB1bmtub3duLCBiOiB1bmtub3duLCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IGJvb2xlYW4ge1xuICBpZiAoT2JqZWN0LmlzKGEsIGIpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoaXNCeXRlc0Rpc3BsYXkoYSkgfHwgaXNCeXRlc0Rpc3BsYXkoYikpIHtcbiAgICByZXR1cm4gaXNCeXRlc0Rpc3BsYXkoYSkgJiYgaXNCeXRlc0Rpc3BsYXkoYikgJiYgaXNTYW1lQnl0ZXNEaXNwbGF5KGEsIGIpO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgfVxuXG4gIGlmIChhIGluc3RhbmNlb2YgUmVnRXhwICYmIGIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIE1hcCAmJiBiIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgYS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmICghYi5oYXMoa2V5KSB8fCAhaXNEZWVwRXF1YWwodmFsdWUsIGIuZ2V0KGtleSksIHNlZW4pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBTZXQgJiYgYiBpbnN0YW5jZW9mIFNldCkge1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYS52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFiLmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0TGlrZShhKSB8fCAhaXNPYmplY3RMaWtlKGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlZW4uZ2V0KGEpID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgc2Vlbi5zZXQoYSwgYik7XG5cbiAgY29uc3QgYUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGEpO1xuICBjb25zdCBiSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYik7XG4gIGlmIChhSXNBcnJheSAhPT0gYklzQXJyYXkpIHJldHVybiBmYWxzZTtcblxuICBpZiAoYUlzQXJyYXkgJiYgYklzQXJyYXkpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoIWlzRGVlcEVxdWFsKGFbaV0sIGJbaV0sIHNlZW4pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgY29uc3QgYktleXMgPSBPYmplY3Qua2V5cyhiKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgYUtleXMpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghaXNEZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIHNlZW4pKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbnNwZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kYXRhLWluc3BlY3Rvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBS2IsVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUdMLCtCQUErQixHQUNoQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsOEVBQThFO0FBQzlFLDhDQUE4QztBQUM5Qyx3REFBd0Q7QUFDeEQsOEVBQThFO0FBRTlFLE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDO0FBQ2xELE1BQU0sdUJBQXVCLEdBQUcsaUNBQWlDLENBQUM7QUFDbEUsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7QUFDNUMsTUFBTSxrQkFBa0IsR0FBRyw0QkFBNEIsQ0FBQztBQXlCeEQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBQ3hDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FB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QztnQkFBRSxPQUFPLEtBQUssQ0FBQztRQUNuRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWhELEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG4vKipcbiAqIFJldXNhYmxlIGRhdGEgaW5zcGVjdG9yIGZvciB0aGUgbzExeSBVSS5cbiAqXG4gKiBSZW5kZXJzIEpTT04gYXMgYSBjb2xsYXBzaWJsZSB0cmVlOiBicmFja2V0IG5vdGF0aW9uIChgeyDigKYgfWAgLyBgWyDigKYgXWApLFxuICogY29sb3JlZCBrZXlzLCB0eXBlZCB2YWx1ZSBjb2xvcnMsIGDilrhgL2Dilr5gIGRpc2Nsb3N1cmUgaWNvbnMsIGFuZCBhIGAuLi5gXG4gKiBjb2xsYXBzZWQgaW5kaWNhdG9yLlxuICpcbiAqIE9uIHRvcCBvZiBwbGFpbiBKU09OIGl0IGhhbmRsZXMgdGhlIHdvcmtmbG93LXNwZWNpZmljIHZhbHVlIHR5cGVzOiBTdHJlYW1SZWYgL1xuICogUnVuUmVmIGJhZGdlcywgZW5jcnlwdGVkIG1hcmtlcnMsIGRlY29kZWQgYnl0ZSBzdHJlYW1zLCBEYXRlcywgYW5kIG5hbWVkXG4gKiBjbGFzcyBpbnN0YW5jZXMuXG4gKi9cblxuaW1wb3J0IHsgTG9jayB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQge1xuICBjcmVhdGVDb250ZXh0LFxuICB0eXBlIEtleWJvYXJkRXZlbnQgYXMgUmVhY3RLZXlib2FyZEV2ZW50LFxuICB0eXBlIE1vdXNlRXZlbnQgYXMgUmVhY3RNb3VzZUV2ZW50LFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBSZWZPYmplY3QsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUlkLFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi9jbic7XG5pbXBvcnQgeyBFTkNSWVBURURfRElTUExBWV9OQU1FIH0gZnJvbSAnLi4vLi4vbGliL2h5ZHJhdGlvbic7XG5pbXBvcnQge1xuICB0eXBlIERlY29kZWRTdHJlYW1DaHVua1NvdXJjZSxcbiAgdHlwZSBGb3JtYXR0ZWRTdHJlYW1DaHVua0Rpc3BsYXksXG4gIGZvcm1hdEFycmF5QnVmZmVyVmlld0ZvckRpc3BsYXksXG59IGZyb20gJy4uLy4uL2xpYi9zdHJlYW0tZGlzcGxheSc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL2J1dHRvbic7XG5pbXBvcnQgeyBDTFMsIEpTT05fVklFV19TVFlMRVMgfSBmcm9tICcuL2RhdGEtaW5zcGVjdG9yLnN0eWxlcyc7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi9zcGlubmVyJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1SZWYgLyBDbGFzc0luc3RhbmNlUmVmIHR5cGUgZGV0ZWN0aW9uXG4vLyAoaW5saW5lIHRvIGF2b2lkIGNpcmN1bGFyIGRlcHMgd2l0aCBoeWRyYXRpb24gbW9kdWxlKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFNUUkVBTV9SRUZfVFlQRSA9ICdfX3dvcmtmbG93X3N0cmVhbV9yZWZfXyc7XG5jb25zdCBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRSA9ICdfX3dvcmtmbG93X2NsYXNzX2luc3RhbmNlX3JlZl9fJztcbmNvbnN0IFJVTl9SRUZfVFlQRSA9ICdfX3dvcmtmbG93X3J1bl9yZWZfXyc7XG5jb25zdCBCWVRFU19ESVNQTEFZX1RZUEUgPSAnX193b3JrZmxvd19ieXRlc19kaXNwbGF5X18nO1xuXG5pbnRlcmZhY2UgU3RyZWFtUmVmIHtcbiAgX190eXBlOiB0eXBlb2YgU1RSRUFNX1JFRl9UWVBFO1xuICBzdHJlYW1JZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUnVuUmVmIHtcbiAgX190eXBlOiB0eXBlb2YgUlVOX1JFRl9UWVBFO1xuICBydW5JZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQnl0ZXNEaXNwbGF5IHtcbiAgX190eXBlOiB0eXBlb2YgQllURVNfRElTUExBWV9UWVBFO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGRlY29kZWRGcm9tPzogRGVjb2RlZFN0cmVhbUNodW5rU291cmNlO1xufVxuXG5pbnRlcmZhY2UgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIENMQVNTX0lOU1RBTkNFX1JFRl9UWVBFO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgY2xhc3NJZDogc3RyaW5nO1xuICBkYXRhOiB1bmtub3duO1xufVxuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZUNodW5rVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCAyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VDaHVua0RhdGEodGV4dDogc3RyaW5nKTogdW5rbm93biB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3RyZWFtUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU3RyZWFtUmVmIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgLy8gQ2hlY2sgYm90aCBlbnVtZXJhYmxlIGFuZCBub24tZW51bWVyYWJsZSBfX3R5cGUgKG9wYXF1ZSByZWZzIHVzZSBub24tZW51bWVyYWJsZSlcbiAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsICdfX3R5cGUnKTtcbiAgcmV0dXJuIGRlc2M/LnZhbHVlID09PSBTVFJFQU1fUkVGX1RZUEU7XG59XG5cbmZ1bmN0aW9uIGlzUnVuUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUnVuUmVmIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsICdfX3R5cGUnKTtcbiAgcmV0dXJuIGRlc2M/LnZhbHVlID09PSBSVU5fUkVGX1RZUEU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0J5dGVzRGlzcGxheSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEJ5dGVzRGlzcGxheSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gQllURVNfRElTUExBWV9UWVBFO1xufVxuXG5mdW5jdGlvbiBpc0NsYXNzSW5zdGFuY2VSZWYodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBDbGFzc0luc3RhbmNlUmVmIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAnX190eXBlJyBpbiB2YWx1ZSAmJlxuICAgICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuX190eXBlID09PSBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICh2YWx1ZSBhcyB7IGNvbnN0cnVjdG9yPzogeyBuYW1lPzogc3RyaW5nIH0gfSkuY29uc3RydWN0b3I/Lm5hbWUgPT09XG4gICAgICBFTkNSWVBURURfRElTUExBWV9OQU1FXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtIGNsaWNrIGNvbnRleHQgKHBhc3NlZCB0aHJvdWdoIGZyb20gdGhlIHBhbmVsKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29udGV4dCBmb3IgcGFzc2luZyBzdHJlYW0gY2xpY2sgaGFuZGxlcnMgZG93biB0byBEYXRhSW5zcGVjdG9yIGluc3RhbmNlcy5cbiAqIEV4cG9ydGVkIHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudHMgKGUuZy4sIEF0dHJpYnV0ZVBhbmVsKSBjYW4gcHJvdmlkZSB0aGUgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0cmVhbUNsaWNrQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8XG4gICgoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZCkgfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcblxuLyoqXG4gKiBDb250ZXh0IGZvciBwYXNzaW5nIGEgZGVjcnlwdCBoYW5kbGVyIGRvd24gdG8gRGF0YUluc3BlY3RvciBpbnN0YW5jZXMuXG4gKiBXaGVuIHByb3ZpZGVkLCBlbmNyeXB0ZWQgbWFya2VycyBiZWNvbWUgY2xpY2thYmxlIGJ1dHRvbnMgdGhhdCB0cmlnZ2VyIGRlY3J5cHRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIERlY3J5cHRDbGlja0NvbnRleHRWYWx1ZSA9IHtcbiAgb25EZWNyeXB0OiAoKSA9PiB2b2lkO1xuICBpc0RlY3J5cHRpbmc6IGJvb2xlYW47XG4gIGlzRGVjcnlwdERpc2FibGVkPzogYm9vbGVhbjtcbiAgZGVjcnlwdERpc2FibGVkUmVhc29uPzogc3RyaW5nO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWNyeXB0Q2xpY2tDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgRGVjcnlwdENsaWNrQ29udGV4dFZhbHVlIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBSdW5DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV29ya2Zsb3ctc3BlY2lmaWMgdmFsdWUgcmVuZGVyZXJzIChiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBieXRlIHN0cmVhbXMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gRW5jcnlwdGVkSW5saW5lTGFiZWwoKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGlmIChjdHgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICBjbGFzc05hbWU9XCJhbGlnbi1iYXNlbGluZSBnYXAteC0xXCJcbiAgICAgICAgZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmcgfHwgY3R4LmlzRGVjcnlwdERpc2FibGVkfVxuICAgICAgICB0aXRsZT17Y3R4LmlzRGVjcnlwdERpc2FibGVkID8gY3R4LmRlY3J5cHREaXNhYmxlZFJlYXNvbiA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGN0eC5vbkRlY3J5cHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2N0eC5pc0RlY3J5cHRpbmcgPyAoXG4gICAgICAgICAgPFNwaW5uZXIgc2l6ZT17MTB9IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPExvY2sgY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxzcGFuPkRlY3J5cHQ8L3NwYW4+XG4gICAgICA8L0J1dHRvbj5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBpdGFsaWNcIj5cbiAgICAgIDxMb2NrIGNsYXNzTmFtZT1cIi1tdC1weCBtci1bM3B4XSBpbmxpbmUgaC0zIHctMyBhbGlnbi1taWRkbGVcIiAvPlxuICAgICAgRW5jcnlwdGVkXG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBTdHJlYW1SZWZJbmxpbmUoeyBzdHJlYW1SZWYgfTogeyBzdHJlYW1SZWY6IFN0cmVhbVJlZiB9KSB7XG4gIGNvbnN0IG9uU3RyZWFtQ2xpY2sgPSB1c2VDb250ZXh0KFN0cmVhbUNsaWNrQ29udGV4dCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBib3JkZXIgYm9yZGVyLWJsdWUtMzAwIGJnLWJsdWUtMTAwIHB4LTEuNSBweS0wLjUgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtYmx1ZS05MDAgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYmx1ZS0yMDBcIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25TdHJlYW1DbGljaz8uKHN0cmVhbVJlZi5zdHJlYW1JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHN0cmVhbTogJHtzdHJlYW1SZWYuc3RyZWFtSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj7wn5OhPC9zcGFuPlxuICAgICAgPHNwYW4+e3N0cmVhbVJlZi5zdHJlYW1JZH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFJ1blJlZklubGluZSh7IHJ1blJlZiB9OiB7IHJ1blJlZjogUnVuUmVmIH0pIHtcbiAgY29uc3Qgb25SdW5DbGljayA9IHVzZUNvbnRleHQoUnVuQ2xpY2tDb250ZXh0KTtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAtMSByb3VuZGVkIGJvcmRlciBib3JkZXItcHVycGxlLTMwMCBiZy1wdXJwbGUtMTAwIHB4LTEuNSBweS0wLjUgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtcHVycGxlLTkwMCB1bmRlcmxpbmUgZGVjb3JhdGlvbi10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1wdXJwbGUtMjAwXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIG9uUnVuQ2xpY2s/LihydW5SZWYucnVuSWQpO1xuICAgICAgfX1cbiAgICAgIHRpdGxlPXtgVmlldyBydW46ICR7cnVuUmVmLnJ1bklkfWB9XG4gICAgPlxuICAgICAgPHNwYW4+e3J1blJlZi5ydW5JZH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERlY29kZWRCeXRlc0NodW5rKHtcbiAgZGVjb2RlZFRleHQsXG4gIHNvdXJjZSxcbn06IHtcbiAgZGVjb2RlZFRleHQ6IHN0cmluZztcbiAgc291cmNlOiBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2U7XG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZFZpZXcsIHNldFNlbGVjdGVkVmlld10gPSB1c2VTdGF0ZTwnZGVjb2RlZCcgfCAnYnl0ZXMnPihcbiAgICAnZGVjb2RlZCdcbiAgKTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VDaHVua0RhdGEoZGVjb2RlZFRleHQpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICB7c2VsZWN0ZWRWaWV3ID09PSAnZGVjb2RlZCcgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPlxuICAgICAgICAgIHt0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJyA/IChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIndoaXRlc3BhY2UtcHJlLXdyYXAgYnJlYWstd29yZHMgdGV4dC1ncmF5LTEwMDBcIj5cbiAgICAgICAgICAgICAge2Rlc2VyaWFsaXplQ2h1bmtUZXh0KHBhcnNlZCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e3BhcnNlZH0gZXhwYW5kTGV2ZWw9ezF9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8RGVjb2RlZEJ5dGVzSW5zcGVjdG9yIGRlY29kZWRUZXh0PXtkZWNvZGVkVGV4dH0gc291cmNlPXtzb3VyY2V9IC8+XG4gICAgICApfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkIGJvcmRlciBib3JkZXItZ3JheS00MDBcIlxuICAgICAgICAgIHRpdGxlPXtgJHtzb3VyY2UudHlwZX0gZGVjb2RlZCBhcyAke3NvdXJjZS5lbmNvZGluZy50b1VwcGVyQ2FzZSgpfSB0ZXh0LiBTd2l0Y2ggdG8gQnl0ZXMgdG8gaW5zcGVjdCB0aGUgc3VtbWFyaXplZCByYXcgdmFsdWUuYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2gtNSBweC0xLjUgZm9udC1tZWRpdW0gdGV4dC1bMTBweF0gdGV4dC1ncmF5LTkwMCcsXG4gICAgICAgICAgICAgIHNlbGVjdGVkVmlldyA9PT0gJ2RlY29kZWQnID8gJ2JnLWdyYXktMjAwJyA6ICdiZy1ncmF5LTEwMCdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZFZpZXcoJ2RlY29kZWQnKX1cbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD17c2VsZWN0ZWRWaWV3ID09PSAnZGVjb2RlZCd9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2hvdyBkZWNvZGVkIHRleHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIERlY29kZWRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdoLTUgYm9yZGVyLWdyYXktNDAwIGJvcmRlci1sIHB4LTEuNSBmb250LW1lZGl1bSB0ZXh0LVsxMHB4XSB0ZXh0LWdyYXktOTAwJyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRWaWV3ID09PSAnYnl0ZXMnID8gJ2JnLWdyYXktMjAwJyA6ICdiZy1ncmF5LTEwMCdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZFZpZXcoJ2J5dGVzJyl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9e3NlbGVjdGVkVmlldyA9PT0gJ2J5dGVzJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IHJhdyBieXRlcyBzdW1tYXJ5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBCeXRlc1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBEZWNvZGVkQnl0ZXNJbnNwZWN0b3Ioe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbW9ub1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBtYXgtdy1mdWxsIGl0ZW1zLXN0YXJ0IGdhcC0xIHRleHQtbGVmdCB0ZXh0LWdyYXktMTAwMFwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEV4cGFuZGVkKCh2YWx1ZSkgPT4gIXZhbHVlKX1cbiAgICAgICAgdGl0bGU9e2Ake3NvdXJjZS50eXBlfSBkZWNvZGVkIGFzICR7c291cmNlLmVuY29kaW5nLnRvVXBwZXJDYXNlKCl9IHRleHRgfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzZWxlY3Qtbm9uZSB0ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAge2V4cGFuZGVkID8gJ+KWvCcgOiAn4pa2J31cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtaW4tdy0wIGJyZWFrLXdvcmRzXCI+e3NvdXJjZS5yYXdTdW1tYXJ5fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAge2V4cGFuZGVkICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHBsLTVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNzAwXCI+ZGVjb2RlZDogPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIndoaXRlc3BhY2UtcHJlLXdyYXAgYnJlYWstd29yZHMgdGV4dC1ncmVlbi05MDBcIj5cbiAgICAgICAgICAgIHtKU09OLnN0cmluZ2lmeShkZWNvZGVkVGV4dCl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEJ5dGVzRGlzcGxheVZhbHVlKHsgZGlzcGxheSB9OiB7IGRpc3BsYXk6IEJ5dGVzRGlzcGxheSB9KSB7XG4gIGlmIChkaXNwbGF5LmRlY29kZWRGcm9tKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEZWNvZGVkQnl0ZXNDaHVua1xuICAgICAgICBkZWNvZGVkVGV4dD17ZGlzcGxheS50ZXh0fVxuICAgICAgICBzb3VyY2U9e2Rpc3BsYXkuZGVjb2RlZEZyb219XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIHRleHQtZ3JheS0xMDAwXCI+XG4gICAgICB7ZGlzcGxheS50ZXh0fVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUcmVlIHJlbmRlcmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBFbnRyeSA9IFtmaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogdW5rbm93bl07XG5cbmludGVyZmFjZSBOb2RlQ29udGV4dCB7XG4gIGxldmVsOiBudW1iZXI7XG4gIHNob3VsZEV4cGFuZDogKGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW47XG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPjtcbn1cblxuLyoqIEZpZWxkIG5hbWVzIGFyZSByZW5kZXJlZCB1bnF1b3RlZCAoZW1wdHkgc3RyaW5nIHNob3dzIGFzIGBcIlwiYCkuICovXG5mdW5jdGlvbiBmb3JtYXRGaWVsZChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpZWxkID09PSAnJyA/ICdcIlwiJyA6IGZpZWxkO1xufVxuXG4vKipcbiAqIERlc2NyaWJlIGFuIG9iamVjdC9hcnJheS9tYXAvc2V0IGFzIGFuIGV4cGFuZGFibGUgY29udGFpbmVyLiBSZXR1cm5zIG51bGwgZm9yXG4gKiB2YWx1ZXMgdGhhdCBzaG91bGQgcmVuZGVyIGFzIGEgcHJpbWl0aXZlLiBgcHJlZml4YCBjYXJyaWVzIGEgY2xhc3MgbmFtZSBzaG93blxuICogYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNrZXQgKE1hcC9TZXQgYW5kIG5hbWVkIGNsYXNzIGluc3RhbmNlcykuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlQ29udGFpbmVyKFxuICB2YWx1ZTogdW5rbm93blxuKTogeyBlbnRyaWVzOiBFbnRyeVtdOyBvcGVuOiBzdHJpbmc7IGNsb3NlOiBzdHJpbmc7IHByZWZpeD86IHN0cmluZyB9IHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiB2YWx1ZS5tYXAoKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS5lbnRyaWVzKCksIChba2V5LCB2YWxdKSA9PiBbXG4gICAgICAgIFN0cmluZyhrZXkpLFxuICAgICAgICB2YWwsXG4gICAgICBdKSBhcyBFbnRyeVtdLFxuICAgICAgb3BlbjogJ3snLFxuICAgICAgY2xvc2U6ICd9JyxcbiAgICAgIHByZWZpeDogJ01hcCcsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS52YWx1ZXMoKSwgKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgICBwcmVmaXg6ICdTZXQnLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBuYW1lID0gKHZhbHVlIGFzIHsgY29uc3RydWN0b3I/OiB7IG5hbWU/OiBzdHJpbmcgfSB9KS5jb25zdHJ1Y3RvclxuICAgICAgPy5uYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiBPYmplY3QuZW50cmllcyh2YWx1ZSkgYXMgRW50cnlbXSxcbiAgICAgIG9wZW46ICd7JyxcbiAgICAgIGNsb3NlOiAnfScsXG4gICAgICBwcmVmaXg6IG5hbWUgJiYgbmFtZSAhPT0gJ09iamVjdCcgPyBuYW1lIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUHJpbWl0aXZlKHZhbHVlOiB1bmtub3duKTogeyB0ZXh0OiBzdHJpbmc7IGNsczogc3RyaW5nIH0ge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB7IHRleHQ6ICdudWxsJywgY2xzOiBDTFMubnVsbCB9O1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgdGV4dDogJ3VuZGVmaW5lZCcsIGNsczogQ0xTLnVuZGVmaW5lZCB9O1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIHJldHVybiB7IHRleHQ6IGBcIiR7U3RyaW5nKHZhbHVlKX1cImAsIGNsczogQ0xTLnN0cmluZyB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5ib29sZWFuIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5udW1iZXIgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB7IHRleHQ6IGAke3ZhbHVlLnRvU3RyaW5nKCl9bmAsIGNsczogQ0xTLm51bWJlciB9O1xuICB9XG4gIHJldHVybiB7IHRleHQ6IFN0cmluZyh2YWx1ZSksIGNsczogQ0xTLnB1bmN0dWF0aW9uIH07XG59XG5cbmZ1bmN0aW9uIExhYmVsKHsgZmllbGQsIGNsaWNrYWJsZSB9OiB7IGZpZWxkPzogc3RyaW5nOyBjbGlja2FibGU/OiBib29sZWFuIH0pIHtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xpY2thYmxlID8gQ0xTLmNsaWNrYWJsZUxhYmVsIDogQ0xTLmxhYmVsfT5cbiAgICAgIHtgJHtmb3JtYXRGaWVsZChmaWVsZCl9OmB9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBDb21tYSh7IGlzTGFzdCB9OiB7IGlzTGFzdDogYm9vbGVhbiB9KSB7XG4gIGlmIChpc0xhc3QpIHJldHVybiBudWxsO1xuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259Piw8L3NwYW4+O1xufVxuXG4vKiogQSBub24tZXhwYW5kYWJsZSByb3c6IGBmaWVsZDogPHZhbHVlPmAuICovXG5mdW5jdGlvbiBMZWFmUm93KHtcbiAgZmllbGQsXG4gIGlzTGFzdCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e0NMUy5jaGlsZH0gcm9sZT1cInRyZWVpdGVtXCIgdGFiSW5kZXg9ey0xfT5cbiAgICAgIDxMYWJlbCBmaWVsZD17ZmllbGR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFByaW1pdGl2ZVZhbHVlKHsgZmllbGQsIHZhbHVlLCBpc0xhc3QgfTogTm9kZVByb3BzKSB7XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRW1wdHlDb250YWluZXIoe1xuICBmaWVsZCxcbiAgcHJlZml4LFxuICBvcGVuLFxuICBjbG9zZSxcbiAgaXNMYXN0LFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGlzTGFzdDogYm9vbGVhbjtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Q0xTLmNoaWxkfSByb2xlPVwidHJlZWl0ZW1cIiB0YWJJbmRleD17LTF9PlxuICAgICAgPExhYmVsIGZpZWxkPXtmaWVsZH0gLz5cbiAgICAgIHtwcmVmaXggPyA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGFzc05hbWV9PntwcmVmaXh9PC9zcGFuPiA6IG51bGx9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5wdW5jdHVhdGlvbn0+e29wZW59PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZvY3VzRXhwYW5kZXIoXG4gIGJ1dHRvbjogSFRNTEVsZW1lbnQsXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPlxuKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gb3V0ZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG4gICAgJ1tkYXRhLWpzb24tZXhwYW5kZXJdW3RhYmluZGV4PVwiMFwiXSdcbiAgKTtcbiAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy50YWJJbmRleCA9IC0xO1xuICBidXR0b24udGFiSW5kZXggPSAwO1xuICBidXR0b24uZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gbW92ZUV4cGFuZGVyRm9jdXMoXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPixcbiAgZGlyZWN0aW9uOiAxIHwgLTFcbikge1xuICBjb25zdCByb290ID0gb3V0ZXJSZWYuY3VycmVudDtcbiAgaWYgKCFyb290KSByZXR1cm47XG4gIGNvbnN0IGJ1dHRvbnMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdbZGF0YS1qc29uLWV4cGFuZGVyXScpO1xuICBsZXQgY3VycmVudCA9IC0xO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYnV0dG9uc1tpXS50YWJJbmRleCA9PT0gMCkge1xuICAgICAgY3VycmVudCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQgPCAwKSByZXR1cm47XG4gIGNvbnN0IG5leHQgPSAoY3VycmVudCArIGRpcmVjdGlvbiArIGJ1dHRvbnMubGVuZ3RoKSAlIGJ1dHRvbnMubGVuZ3RoO1xuICBidXR0b25zW2N1cnJlbnRdLnRhYkluZGV4ID0gLTE7XG4gIGJ1dHRvbnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICBidXR0b25zW25leHRdLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIEV4cGFuZGFibGVDb250YWluZXIoe1xuICBmaWVsZCxcbiAgZW50cmllcyxcbiAgb3BlbixcbiAgY2xvc2UsXG4gIHByZWZpeCxcbiAgY3R4LFxuICBpc0xhc3QsXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBlbnRyaWVzOiBFbnRyeVtdO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIHByZWZpeD86IHN0cmluZztcbiAgY3R4OiBOb2RlQ29udGV4dDtcbiAgaXNMYXN0OiBib29sZWFuO1xufSkge1xuICBjb25zdCB7IGxldmVsLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH0gPSBjdHg7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoKCkgPT4gc2hvdWxkRXhwYW5kKGxldmVsKSk7XG4gIGNvbnN0IHJvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGNvbnRlbnRzSWQgPSB1c2VJZCgpO1xuXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RW1wdHlDb250YWluZXJcbiAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICBwcmVmaXg9e3ByZWZpeH1cbiAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgY2xvc2U9e2Nsb3NlfVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRvZ2dsZSA9ICgpID0+IHtcbiAgICBzZXRFeHBhbmRlZCgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgaWYgKHJvd1JlZi5jdXJyZW50KSBmb2N1c0V4cGFuZGVyKHJvd1JlZi5jdXJyZW50LCBvdXRlclJlZik7XG4gIH07XG5cbiAgLy8gVG9nZ2xlIG9ubHkgZm9yIGNsaWNrcyB0aGF0IGxhbmQgb24gdGhpcyByb3cgaXRzZWxmOyBjbGlja3MgYnViYmxpbmcgdXAgb3V0XG4gIC8vIG9mIGEgbmVzdGVkIHRyZWVpdGVtIGFyZSBoYW5kbGVkIGJ5IHRoYXQgZGVzY2VuZGFudCdzIG93biByb3cuXG4gIGNvbnN0IG9uQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSAhPT1cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9nZ2xlKCk7XG4gIH07XG5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVFeHBhbmRlckZvY3VzKG91dGVyUmVmLCAtMSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUV4cGFuZGVyRm9jdXMob3V0ZXJSZWYsIDEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYXN0SW5kZXggPSBlbnRyaWVzLmxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBUaGUgdHJlZWl0ZW0gcm93IGlzIHRoZSBmb2N1c2FibGUsIGtleWJvYXJkLW9wZXJhYmxlIGNvbnRyb2wgKHJvdmluZ1xuICAgIC8vIHRhYmluZGV4ICsgYXJyb3cga2V5cyk7IHRoZSBkaXNjbG9zdXJlIG1hcmtlciBiZWxvdyBpcyBwdXJlbHkgZGVjb3JhdGl2ZS5cbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e0NMUy5jaGlsZH1cbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGVkID8gY29udGVudHNJZCA6IHVuZGVmaW5lZH1cbiAgICAgIGRhdGEtanNvbi1leHBhbmRlclxuICAgICAgcmVmPXtyb3dSZWZ9XG4gICAgICB0YWJJbmRleD17bGV2ZWwgPT09IDAgPyAwIDogLTF9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtleHBhbmRlZCA/IENMUy5jb2xsYXBzZUljb24gOiBDTFMuZXhwYW5kSWNvbn1cbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICB7ZmllbGQgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsaWNrYWJsZUxhYmVsfT57YCR7Zm9ybWF0RmllbGQoZmllbGQpfTpgfTwvc3Bhbj5cbiAgICAgICl9XG4gICAgICB7cHJlZml4ID8gPHNwYW4gY2xhc3NOYW1lPXtDTFMuY2xhc3NOYW1lfT57cHJlZml4fTwvc3Bhbj4gOiBudWxsfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntvcGVufTwvc3Bhbj5cbiAgICAgIHtleHBhbmRlZCA/IChcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiBBUklBIHRyZWUgZ3JvdXAgaXMgdGhlIGNvcnJlY3Qgcm9sZSBoZXJlXG4gICAgICAgIDx1bCBpZD17Y29udGVudHNJZH0gY2xhc3NOYW1lPXtDTFMuY2hpbGRGaWVsZHN9IHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW2NoaWxkRmllbGQsIGNoaWxkVmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgICAgICAga2V5PXtjaGlsZEZpZWxkID8/IGluZGV4fVxuICAgICAgICAgICAgICBmaWVsZD17Y2hpbGRGaWVsZH1cbiAgICAgICAgICAgICAgdmFsdWU9e2NoaWxkVmFsdWV9XG4gICAgICAgICAgICAgIGlzTGFzdD17aW5kZXggPT09IGxhc3RJbmRleH1cbiAgICAgICAgICAgICAgY3R4PXt7IC4uLmN0eCwgbGV2ZWw6IGxldmVsICsgMSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNvbGxhcHNlZENvbnRlbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICApfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmludGVyZmFjZSBOb2RlUHJvcHMge1xuICBmaWVsZD86IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgY3R4OiBOb2RlQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gRGF0YVJlbmRlcih7IGZpZWxkLCB2YWx1ZSwgaXNMYXN0LCBjdHggfTogTm9kZVByb3BzKSB7XG4gIGlmIChpc0J5dGVzRGlzcGxheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxCeXRlc0Rpc3BsYXlWYWx1ZSBkaXNwbGF5PXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxFbmNyeXB0ZWRJbmxpbmVMYWJlbCAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzU3RyZWFtUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFN0cmVhbVJlZklubGluZSBzdHJlYW1SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzUnVuUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFJ1blJlZklubGluZSBydW5SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMuZGF0ZX0+e3ZhbHVlLnRvSVNPU3RyaW5nKCl9PC9zcGFuPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5yZWdleHB9Pnt2YWx1ZS50b1N0cmluZygpfTwvc3Bhbj5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0NsYXNzSW5zdGFuY2VSZWYodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc0luc3RhbmNlTm9kZVxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGluc3RhbmNlPXt2YWx1ZX1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gZGVzY3JpYmVDb250YWluZXIodmFsdWUpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2NvbnRhaW5lci5wcmVmaXh9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFByaW1pdGl2ZVZhbHVlIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlfSBpc0xhc3Q9e2lzTGFzdH0gY3R4PXtjdHh9IC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENsYXNzSW5zdGFuY2VOb2RlKHtcbiAgZmllbGQsXG4gIGluc3RhbmNlLFxuICBpc0xhc3QsXG4gIGN0eCxcbn06IHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIGluc3RhbmNlOiBDbGFzc0luc3RhbmNlUmVmO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGN0eDogTm9kZUNvbnRleHQ7XG59KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRlc2NyaWJlQ29udGFpbmVyKGluc3RhbmNlLmRhdGEpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2luc3RhbmNlLmNsYXNzTmFtZX1cbiAgICAgICAgY3R4PXtjdHh9XG4gICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZShpbnN0YW5jZS5kYXRhKTtcbiAgcmV0dXJuIChcbiAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsYXNzTmFtZX0+e2luc3RhbmNlLmNsYXNzTmFtZX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSnNvblRyZWUoe1xuICBkYXRhLFxuICBuYW1lLFxuICBleHBhbmRMZXZlbCxcbn06IHtcbiAgZGF0YTogdW5rbm93bjtcbiAgbmFtZT86IHN0cmluZztcbiAgZXhwYW5kTGV2ZWw6IG51bWJlcjtcbn0pIHtcbiAgY29uc3Qgb3V0ZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzaG91bGRFeHBhbmQgPSB1c2VNZW1vKFxuICAgICgpID0+IChsZXZlbDogbnVtYmVyKSA9PiBsZXZlbCA8IGV4cGFuZExldmVsLFxuICAgIFtleHBhbmRMZXZlbF1cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e291dGVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtDTFMuY29udGFpbmVyfVxuICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgYXJpYS1sYWJlbD1cIkpTT04gdmlld1wiXG4gICAgPlxuICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgZmllbGQ9e25hbWV9XG4gICAgICAgIHZhbHVlPXtkYXRhfVxuICAgICAgICBpc0xhc3RcbiAgICAgICAgY3R4PXt7IGxldmVsOiAwLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlZiAvIHR5cGVkLWFycmF5IGNvbGxhcHNpbmcgKHByZXByb2Nlc3NpbmcgYmVmb3JlIHJlbmRlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZSBhIG5vbi1leHBhbmRhYmxlIHdyYXBwZXIgdGhhdCBjYXJyaWVzIHJlZiBkYXRhIGFzIG5vbi1lbnVtZXJhYmxlXG4gKiBwcm9wZXJ0aWVzIHNvIHRoZSByZW5kZXJlciBjYW4gZGV0ZWN0IFN0cmVhbVJlZi9SdW5SZWYgd2l0aG91dCBleHBvc2luZ1xuICogdGhlaXIgaW50ZXJuYWxzIGFzIG9iamVjdCBmaWVsZHMuXG4gKi9cbmZ1bmN0aW9uIG1ha2VPcGFxdWVSZWYocmVmOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWYpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwga2V5LCB7IHZhbHVlLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gb3BhcXVlO1xufVxuXG5mdW5jdGlvbiBtYWtlQnl0ZXNEaXNwbGF5KGRpc3BsYXk6IEZvcm1hdHRlZFN0cmVhbUNodW5rRGlzcGxheSk6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAnX190eXBlJywge1xuICAgIHZhbHVlOiBCWVRFU19ESVNQTEFZX1RZUEUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAndGV4dCcsIHtcbiAgICB2YWx1ZTogZGlzcGxheS50ZXh0LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ2RlY29kZWRGcm9tJywge1xuICAgIHZhbHVlOiBkaXNwbGF5LmRlY29kZWRGcm9tLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgcmV0dXJuIG9wYXF1ZTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSB3YWxrIGRhdGEgYW5kIHJlcGxhY2UgUnVuUmVmL1N0cmVhbVJlZi90eXBlZCBhcnJheSBvYmplY3RzIHdpdGhcbiAqIG5vbi1leHBhbmRhYmxlIHZlcnNpb25zIHNvIHRoZSByZW5kZXJlciBkb2Vzbid0IHNob3cgdGhlaXIgaW50ZXJuYWxzLlxuICogT25seSByZWN1cnNlcyBpbnRvIHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyB0byBhdm9pZCBzdHJpcHBpbmcgY2xhc3NcbiAqIGluc3RhbmNlcyAoRGF0ZSwgRXJyb3IsIFVSTCwgSGVhZGVycywgZXRjLikgdGhhdCBoYXZlIHRoZWlyIG93biByZW5kZXJpbmcuXG4gKiBNYXAgYW5kIFNldCBjb250YWluZXJzIGFyZSBwcmVzZXJ2ZWQgd2hpbGUgdGhlaXIgY29udGVudHMgYXJlIHByZXBhcmVkIGZvclxuICogZGlzcGxheS5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGVzdGluZyB0aGUgdHlwZWQtYXJyYXkgZGV0ZWN0aW9uIHBhdGggdXNlZCBieSBoeWRyYXRlZFxuICogQUkgYWdlbnQgc3RyZWFtIGNodW5rcyAoZS5nLiBgeyBkZWx0YTogbmV3IFVpbnQ4QXJyYXkoLi4uKSB9YCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsYXBzZVJlZnMoZGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBkYXRhO1xuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGFWaWV3KSkge1xuICAgIHJldHVybiBtYWtlQnl0ZXNEaXNwbGF5KGZvcm1hdEFycmF5QnVmZmVyVmlld0ZvckRpc3BsYXkoZGF0YSkpO1xuICB9XG4gIGlmIChpc1J1blJlZihkYXRhKSB8fCBpc1N0cmVhbVJlZihkYXRhKSlcbiAgICByZXR1cm4gbWFrZU9wYXF1ZVJlZihkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgcmV0dXJuIGRhdGEubWFwKGNvbGxhcHNlUmVmcyk7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICBBcnJheS5mcm9tKGRhdGEuZW50cmllcygpLCAoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGNvbGxhcHNlUmVmcyhrZXkpLFxuICAgICAgICBjb2xsYXBzZVJlZnModmFsdWUpLFxuICAgICAgXSlcbiAgICApO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShkYXRhLnZhbHVlcygpLCBjb2xsYXBzZVJlZnMpKTtcbiAgfVxuICAvLyBPbmx5IHJlY3Vyc2UgaW50byBwbGFpbiBvYmplY3RzOyBsZWF2ZSBjbGFzcyBpbnN0YW5jZXMgdW50b3VjaGVkXG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGRhdGEpO1xuICBpZiAocHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUgJiYgcHJvdG8gIT09IG51bGwpIHJldHVybiBkYXRhO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgcmVzdWx0W2tleV0gPSBjb2xsYXBzZVJlZnModmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIGNvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUluc3BlY3RvclByb3BzIHtcbiAgLyoqIFRoZSBkYXRhIHRvIGluc3BlY3QgKi9cbiAgZGF0YTogdW5rbm93bjtcbiAgLyoqIExldmVscyBzdHJpY3RseSBiZWxvdyB0aGlzIG51bWJlciBhdXRvLWV4cGFuZCAoZGVmYXVsdDogMikgKi9cbiAgZXhwYW5kTGV2ZWw/OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBuYW1lIGZvciB0aGUgcm9vdCBub2RlICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhbiBlbmNyeXB0ZWQgbWFya2VyIGlzIGNsaWNrZWQgKHRyaWdnZXJzIGRlY3J5cHRpb24pICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIGRlY3J5cHRpb24gaXMgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4gIGlzRGVjcnlwdGluZz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIGRlY3J5cHRpb24gaXMgdW5hdmFpbGFibGUgKi9cbiAgaXNEZWNyeXB0RGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRXhwbGFpbnMgd2h5IGRlY3J5cHRpb24gaXMgdW5hdmFpbGFibGUgKi9cbiAgZGVjcnlwdERpc2FibGVkUmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0YUluc3BlY3Rvcih7XG4gIGRhdGEsXG4gIGV4cGFuZExldmVsID0gMixcbiAgbmFtZSxcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgb25EZWNyeXB0LFxuICBpc0RlY3J5cHRpbmcgPSBmYWxzZSxcbiAgaXNEZWNyeXB0RGlzYWJsZWQgPSBmYWxzZSxcbiAgZGVjcnlwdERpc2FibGVkUmVhc29uLFxufTogRGF0YUluc3BlY3RvclByb3BzKSB7XG4gIGNvbnN0IGNvbGxhcHNlZERhdGEgPSB1c2VNZW1vKCgpID0+IGNvbGxhcHNlUmVmcyhkYXRhKSwgW2RhdGFdKTtcbiAgY29uc3Qgc3RhYmxlRGF0YSA9IHVzZVN0YWJsZUluc3BlY3RvckRhdGEoY29sbGFwc2VkRGF0YSk7XG5cbiAgbGV0IGNvbnRlbnQ6IFJlYWN0Tm9kZSA9IChcbiAgICA8PlxuICAgICAgey8qIFJlYWN0IDE5IGhvaXN0cyAmIGRlZHVwZXMgdGhpcyA8c3R5bGU+IGJ5IGhyZWYsIHNvIGl0IGlzIGVtaXR0ZWQgb25jZVxuICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW5zcGVjdG9ycyBhcmUgbW91bnRlZC4gKi99XG4gICAgICA8c3R5bGUgaHJlZj1cIndmLWpzb24tdmlld1wiIHByZWNlZGVuY2U9XCJkZWZhdWx0XCI+XG4gICAgICAgIHtKU09OX1ZJRVdfU1RZTEVTfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxKc29uVHJlZSBkYXRhPXtzdGFibGVEYXRhfSBuYW1lPXtuYW1lfSBleHBhbmRMZXZlbD17ZXhwYW5kTGV2ZWx9IC8+XG4gICAgPC8+XG4gICk7XG5cbiAgaWYgKG9uU3RyZWFtQ2xpY2spIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9TdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxuICBpZiAob25SdW5DbGljaykge1xuICAgIGNvbnRlbnQgPSAoXG4gICAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L1J1bkNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG4gIGlmIChvbkRlY3J5cHQpIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICBvbkRlY3J5cHQsXG4gICAgICAgICAgaXNEZWNyeXB0aW5nLFxuICAgICAgICAgIGlzRGVjcnlwdERpc2FibGVkLFxuICAgICAgICAgIGRlY3J5cHREaXNhYmxlZFJlYXNvbixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlbmRlciBzdGFiaWxpemF0aW9uIChhdm9pZCByZS1yZW5kZXJzIHdoZW4gZGF0YSBpcyBkZWVwbHkgZXF1YWwpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gdXNlU3RhYmxlSW5zcGVjdG9yRGF0YTxUPihuZXh0OiBUKTogVCB7XG4gIGNvbnN0IHByZXZpb3VzUmVmID0gdXNlUmVmPFQ+KG5leHQpO1xuICBpZiAoIWlzRGVlcEVxdWFsKHByZXZpb3VzUmVmLmN1cnJlbnQsIG5leHQpKSB7XG4gICAgcHJldmlvdXNSZWYuY3VycmVudCA9IG5leHQ7XG4gIH1cbiAgcmV0dXJuIHByZXZpb3VzUmVmLmN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZUJ5dGVzRGlzcGxheShhOiBCeXRlc0Rpc3BsYXksIGI6IEJ5dGVzRGlzcGxheSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGEudGV4dCA9PT0gYi50ZXh0ICYmXG4gICAgYS5kZWNvZGVkRnJvbT8udHlwZSA9PT0gYi5kZWNvZGVkRnJvbT8udHlwZSAmJlxuICAgIGEuZGVjb2RlZEZyb20/LmVuY29kaW5nID09PSBiLmRlY29kZWRGcm9tPy5lbmNvZGluZyAmJlxuICAgIGEuZGVjb2RlZEZyb20/LnJhd1N1bW1hcnkgPT09IGIuZGVjb2RlZEZyb20/LnJhd1N1bW1hcnlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNEZWVwRXF1YWwoYTogdW5rbm93biwgYjogdW5rbm93biwgc2VlbiA9IG5ldyBXZWFrTWFwKCkpOiBib29sZWFuIHtcbiAgaWYgKE9iamVjdC5pcyhhLCBiKSkgcmV0dXJuIHRydWU7XG5cbiAgaWYgKGlzQnl0ZXNEaXNwbGF5KGEpIHx8IGlzQnl0ZXNEaXNwbGF5KGIpKSB7XG4gICAgcmV0dXJuIGlzQnl0ZXNEaXNwbGF5KGEpICYmIGlzQnl0ZXNEaXNwbGF5KGIpICYmIGlzU2FtZUJ5dGVzRGlzcGxheShhLCBiKTtcbiAgfVxuXG4gIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBiIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBNYXAgJiYgYiBpbnN0YW5jZW9mIE1hcCkge1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGEuZW50cmllcygpKSB7XG4gICAgICBpZiAoIWIuaGFzKGtleSkgfHwgIWlzRGVlcEVxdWFsKHZhbHVlLCBiLmdldChrZXkpLCBzZWVuKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChhIGluc3RhbmNlb2YgU2V0ICYmIGIgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGEudmFsdWVzKCkpIHtcbiAgICAgIGlmICghYi5oYXModmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFpc09iamVjdExpa2UoYSkgfHwgIWlzT2JqZWN0TGlrZShiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzZWVuLmdldChhKSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIHNlZW4uc2V0KGEsIGIpO1xuXG4gIGNvbnN0IGFJc0FycmF5ID0gQXJyYXkuaXNBcnJheShhKTtcbiAgY29uc3QgYklzQXJyYXkgPSBBcnJheS5pc0FycmF5KGIpO1xuICBpZiAoYUlzQXJyYXkgIT09IGJJc0FycmF5KSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGFJc0FycmF5ICYmIGJJc0FycmF5KSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKCFpc0RlZXBFcXVhbChhW2ldLCBiW2ldLCBzZWVuKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMoYik7XG4gIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGFLZXlzKSB7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKGIsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWlzRGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzZWVuKSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
@@ -3,6 +3,10 @@ interface DecryptButtonProps {
3
3
  decrypted?: boolean;
4
4
  /** Whether the key is currently being fetched. */
5
5
  loading?: boolean;
6
+ /** Whether decryption is unavailable. */
7
+ disabled?: boolean;
8
+ /** Explains why decryption is unavailable. */
9
+ disabledReason?: string;
6
10
  /** Called when the user clicks to initiate decryption. */
7
11
  onClick?: () => void;
8
12
  }
@@ -10,6 +14,6 @@ interface DecryptButtonProps {
10
14
  * Decrypt/Decrypted button using Geist secondary style.
11
15
  * Three states: idle (secondary gray), decrypting (spinner), decrypted (green success).
12
16
  */
13
- export declare function DecryptButton({ decrypted, loading, onClick, }: DecryptButtonProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function DecryptButton({ decrypted, loading, disabled, disabledReason, onClick, }: DecryptButtonProps): import("react/jsx-runtime").JSX.Element;
14
18
  export {};
15
19
  //# sourceMappingURL=decrypt-button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decrypt-button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/decrypt-button.tsx"],"names":[],"mappings":"AAMA,UAAU,kBAAkB;IAC1B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAiB,EACjB,OAAe,EACf,OAAO,GACR,EAAE,kBAAkB,2CA6CpB"}
1
+ {"version":3,"file":"decrypt-button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/decrypt-button.tsx"],"names":[],"mappings":"AAMA,UAAU,kBAAkB;IAC1B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAiB,EACjB,OAAe,EACf,QAAgB,EAChB,cAAc,EACd,OAAO,GACR,EAAE,kBAAkB,2CA8CpB"}
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { Spinner } from './spinner';
4
- const STYLES = `.wf-decrypt-btn{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;line-height:20px;cursor:pointer;white-space:nowrap;gap:6px;transition:background 150ms}.wf-decrypt-idle{color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400)}.wf-decrypt-idle:hover{background:var(--ds-gray-alpha-200)}.wf-decrypt-done{color:var(--ds-green-900);background:var(--ds-green-100);box-shadow:0 0 0 1px var(--ds-green-400);cursor:default}`;
4
+ const STYLES = `.wf-decrypt-btn{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;line-height:20px;cursor:pointer;white-space:nowrap;gap:6px;transition:background 150ms}.wf-decrypt-idle{color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400)}.wf-decrypt-idle:hover{background:var(--ds-gray-alpha-200)}.wf-decrypt-btn:disabled{cursor:not-allowed;opacity:.5}.wf-decrypt-done{color:var(--ds-green-900);background:var(--ds-green-100);box-shadow:0 0 0 1px var(--ds-green-400);cursor:default}`;
5
5
  /**
6
6
  * Decrypt/Decrypted button using Geist secondary style.
7
7
  * Three states: idle (secondary gray), decrypting (spinner), decrypted (green success).
8
8
  */
9
- export function DecryptButton({ decrypted = false, loading = false, onClick, }) {
10
- return (_jsxs(_Fragment, { children: [_jsx("style", { dangerouslySetInnerHTML: { __html: STYLES } }), _jsxs("button", { type: "button", onClick: decrypted ? undefined : onClick, disabled: decrypted || loading, className: `wf-decrypt-btn ${decrypted ? 'wf-decrypt-done' : 'wf-decrypt-idle'}`, children: [loading ? (_jsx(Spinner, { size: 14 })) : decrypted ? (_jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), _jsx("path", { d: "M7 11V7a5 5 0 0 1 9.9-1" })] })) : (_jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), _jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })] })), loading ? 'Decrypting…' : decrypted ? 'Decrypted' : 'Decrypt'] })] }));
9
+ export function DecryptButton({ decrypted = false, loading = false, disabled = false, disabledReason, onClick, }) {
10
+ return (_jsxs(_Fragment, { children: [_jsx("style", { dangerouslySetInnerHTML: { __html: STYLES } }), _jsxs("button", { type: "button", onClick: decrypted ? undefined : onClick, disabled: decrypted || loading || disabled, title: disabled ? disabledReason : undefined, className: `wf-decrypt-btn ${decrypted ? 'wf-decrypt-done' : 'wf-decrypt-idle'}`, children: [loading ? (_jsx(Spinner, { size: 14 })) : decrypted ? (_jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), _jsx("path", { d: "M7 11V7a5 5 0 0 1 9.9-1" })] })) : (_jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), _jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })] })), loading ? 'Decrypting…' : decrypted ? 'Decrypted' : 'Decrypt'] })] }));
11
11
  }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdC1idXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kZWNyeXB0LWJ1dHRvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsTUFBTSxNQUFNLEdBQUcsMmxCQUEybEIsQ0FBQztBQVczbUI7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUM1QixTQUFTLEdBQUcsS0FBSyxFQUNqQixPQUFPLEdBQUcsS0FBSyxFQUNmLE9BQU8sR0FDWTtJQUNuQixPQUFPLENBQ0wsOEJBQ0UsZ0JBQU8sdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUksRUFDdEQsa0JBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFDeEMsUUFBUSxFQUFFLFNBQVMsSUFBSSxPQUFPLEVBQzlCLFNBQVMsRUFBRSxrQkFBa0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsYUFFL0UsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNULEtBQUMsT0FBTyxJQUFDLElBQUksRUFBRSxFQUFFLEdBQUksQ0FDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNkLGVBQ0UsS0FBSyxFQUFFLEVBQUUsRUFDVCxNQUFNLEVBQUUsRUFBRSxFQUNWLE9BQU8sRUFBQyxXQUFXLEVBQ25CLElBQUksRUFBQyxNQUFNLEVBQ1gsTUFBTSxFQUFDLGNBQWMsRUFDckIsV0FBVyxFQUFFLENBQUMsRUFDZCxhQUFhLEVBQUMsT0FBTyxFQUNyQixjQUFjLEVBQUMsT0FBTyxhQUV0QixlQUFNLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxHQUFHLEVBQzFELGVBQU0sQ0FBQyxFQUFDLHlCQUF5QixHQUFHLElBQ2hDLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRixlQUNFLEtBQUssRUFBRSxFQUFFLEVBQ1QsTUFBTSxFQUFFLEVBQUUsRUFDVixPQUFPLEVBQUMsV0FBVyxFQUNuQixJQUFJLEVBQUMsTUFBTSxFQUNYLE1BQU0sRUFBQyxjQUFjLEVBQ3JCLFdBQVcsRUFBRSxDQUFDLEVBQ2QsYUFBYSxFQUFDLE9BQU8sRUFDckIsY0FBYyxFQUFDLE9BQU8sYUFFdEIsZUFBTSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsR0FBRyxFQUMxRCxlQUFNLENBQUMsRUFBQywwQkFBMEIsR0FBRyxJQUNqQyxDQUNQLEVBQ0EsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQ3ZELElBQ1IsQ0FDSixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lcic7XG5cbmNvbnN0IFNUWUxFUyA9IGAud2YtZGVjcnlwdC1idG57YXBwZWFyYW5jZTpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JvcmRlcjpub25lO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7aGVpZ2h0OjQwcHg7cGFkZGluZzowIDEycHg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjIwcHg7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2dhcDo2cHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDE1MG1zfS53Zi1kZWNyeXB0LWlkbGV7Y29sb3I6dmFyKC0tZHMtZ3JheS0xMDAwKTtiYWNrZ3JvdW5kOnZhcigtLWRzLWJhY2tncm91bmQtMTAwKTtib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1kcy1ncmF5LTQwMCl9LndmLWRlY3J5cHQtaWRsZTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWRzLWdyYXktYWxwaGEtMjAwKX0ud2YtZGVjcnlwdC1kb25le2NvbG9yOnZhcigtLWRzLWdyZWVuLTkwMCk7YmFja2dyb3VuZDp2YXIoLS1kcy1ncmVlbi0xMDApO2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWRzLWdyZWVuLTQwMCk7Y3Vyc29yOmRlZmF1bHR9YDtcblxuaW50ZXJmYWNlIERlY3J5cHRCdXR0b25Qcm9wcyB7XG4gIC8qKiBXaGV0aGVyIGFuIGVuY3J5cHRpb24ga2V5IGhhcyBiZWVuIG9idGFpbmVkIChkZWNyeXB0aW9uIGlzIGFjdGl2ZSkuICovXG4gIGRlY3J5cHRlZD86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBrZXkgaXMgY3VycmVudGx5IGJlaW5nIGZldGNoZWQuICovXG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRvIGluaXRpYXRlIGRlY3J5cHRpb24uICovXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIERlY3J5cHQvRGVjcnlwdGVkIGJ1dHRvbiB1c2luZyBHZWlzdCBzZWNvbmRhcnkgc3R5bGUuXG4gKiBUaHJlZSBzdGF0ZXM6IGlkbGUgKHNlY29uZGFyeSBncmF5KSwgZGVjcnlwdGluZyAoc3Bpbm5lciksIGRlY3J5cHRlZCAoZ3JlZW4gc3VjY2VzcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWNyeXB0QnV0dG9uKHtcbiAgZGVjcnlwdGVkID0gZmFsc2UsXG4gIGxvYWRpbmcgPSBmYWxzZSxcbiAgb25DbGljayxcbn06IERlY3J5cHRCdXR0b25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8c3R5bGUgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBTVFlMRVMgfX0gLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9e2RlY3J5cHRlZCA/IHVuZGVmaW5lZCA6IG9uQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXtkZWNyeXB0ZWQgfHwgbG9hZGluZ31cbiAgICAgICAgY2xhc3NOYW1lPXtgd2YtZGVjcnlwdC1idG4gJHtkZWNyeXB0ZWQgPyAnd2YtZGVjcnlwdC1kb25lJyA6ICd3Zi1kZWNyeXB0LWlkbGUnfWB9XG4gICAgICA+XG4gICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgIDxTcGlubmVyIHNpemU9ezE0fSAvPlxuICAgICAgICApIDogZGVjcnlwdGVkID8gKFxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHdpZHRoPXsxNH1cbiAgICAgICAgICAgIGhlaWdodD17MTR9XG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICBzdHJva2VXaWR0aD17Mn1cbiAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIxMVwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxMVwiIHJ4PVwiMlwiIHJ5PVwiMlwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTcgMTFWN2E1IDUgMCAwIDEgOS45LTFcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHdpZHRoPXsxNH1cbiAgICAgICAgICAgIGhlaWdodD17MTR9XG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICBzdHJva2VXaWR0aD17Mn1cbiAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIxMVwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxMVwiIHJ4PVwiMlwiIHJ5PVwiMlwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0XCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgKX1cbiAgICAgICAge2xvYWRpbmcgPyAnRGVjcnlwdGluZ+KApicgOiBkZWNyeXB0ZWQgPyAnRGVjcnlwdGVkJyA6ICdEZWNyeXB0J31cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvPlxuICApO1xufVxuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdC1idXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kZWNyeXB0LWJ1dHRvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsTUFBTSxNQUFNLEdBQUcsa3BCQUFrcEIsQ0FBQztBQWVscUI7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUM1QixTQUFTLEdBQUcsS0FBSyxFQUNqQixPQUFPLEdBQUcsS0FBSyxFQUNmLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLGNBQWMsRUFDZCxPQUFPLEdBQ1k7SUFDbkIsT0FBTyxDQUNMLDhCQUNFLGdCQUFPLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFJLEVBQ3RELGtCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQ3hDLFFBQVEsRUFBRSxTQUFTLElBQUksT0FBTyxJQUFJLFFBQVEsRUFDMUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQzVDLFNBQVMsRUFBRSxrQkFBa0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsYUFFL0UsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNULEtBQUMsT0FBTyxJQUFDLElBQUksRUFBRSxFQUFFLEdBQUksQ0FDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNkLGVBQ0UsS0FBSyxFQUFFLEVBQUUsRUFDVCxNQUFNLEVBQUUsRUFBRSxFQUNWLE9BQU8sRUFBQyxXQUFXLEVBQ25CLElBQUksRUFBQyxNQUFNLEVBQ1gsTUFBTSxFQUFDLGNBQWMsRUFDckIsV0FBVyxFQUFFLENBQUMsRUFDZCxhQUFhLEVBQUMsT0FBTyxFQUNyQixjQUFjLEVBQUMsT0FBTyxhQUV0QixlQUFNLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxHQUFHLEVBQzFELGVBQU0sQ0FBQyxFQUFDLHlCQUF5QixHQUFHLElBQ2hDLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRixlQUNFLEtBQUssRUFBRSxFQUFFLEVBQ1QsTUFBTSxFQUFFLEVBQUUsRUFDVixPQUFPLEVBQUMsV0FBVyxFQUNuQixJQUFJLEVBQUMsTUFBTSxFQUNYLE1BQU0sRUFBQyxjQUFjLEVBQ3JCLFdBQVcsRUFBRSxDQUFDLEVBQ2QsYUFBYSxFQUFDLE9BQU8sRUFDckIsY0FBYyxFQUFDLE9BQU8sYUFFdEIsZUFBTSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsR0FBRyxFQUMxRCxlQUFNLENBQUMsRUFBQywwQkFBMEIsR0FBRyxJQUNqQyxDQUNQLEVBQ0EsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQ3ZELElBQ1IsQ0FDSixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lcic7XG5cbmNvbnN0IFNUWUxFUyA9IGAud2YtZGVjcnlwdC1idG57YXBwZWFyYW5jZTpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JvcmRlcjpub25lO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7aGVpZ2h0OjQwcHg7cGFkZGluZzowIDEycHg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjIwcHg7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2dhcDo2cHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDE1MG1zfS53Zi1kZWNyeXB0LWlkbGV7Y29sb3I6dmFyKC0tZHMtZ3JheS0xMDAwKTtiYWNrZ3JvdW5kOnZhcigtLWRzLWJhY2tncm91bmQtMTAwKTtib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1kcy1ncmF5LTQwMCl9LndmLWRlY3J5cHQtaWRsZTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWRzLWdyYXktYWxwaGEtMjAwKX0ud2YtZGVjcnlwdC1idG46ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjV9LndmLWRlY3J5cHQtZG9uZXtjb2xvcjp2YXIoLS1kcy1ncmVlbi05MDApO2JhY2tncm91bmQ6dmFyKC0tZHMtZ3JlZW4tMTAwKTtib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1kcy1ncmVlbi00MDApO2N1cnNvcjpkZWZhdWx0fWA7XG5cbmludGVyZmFjZSBEZWNyeXB0QnV0dG9uUHJvcHMge1xuICAvKiogV2hldGhlciBhbiBlbmNyeXB0aW9uIGtleSBoYXMgYmVlbiBvYnRhaW5lZCAoZGVjcnlwdGlvbiBpcyBhY3RpdmUpLiAqL1xuICBkZWNyeXB0ZWQ/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUga2V5IGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLiAqL1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgZGVjcnlwdGlvbiBpcyB1bmF2YWlsYWJsZS4gKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRXhwbGFpbnMgd2h5IGRlY3J5cHRpb24gaXMgdW5hdmFpbGFibGUuICovXG4gIGRpc2FibGVkUmVhc29uPzogc3RyaW5nO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRvIGluaXRpYXRlIGRlY3J5cHRpb24uICovXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIERlY3J5cHQvRGVjcnlwdGVkIGJ1dHRvbiB1c2luZyBHZWlzdCBzZWNvbmRhcnkgc3R5bGUuXG4gKiBUaHJlZSBzdGF0ZXM6IGlkbGUgKHNlY29uZGFyeSBncmF5KSwgZGVjcnlwdGluZyAoc3Bpbm5lciksIGRlY3J5cHRlZCAoZ3JlZW4gc3VjY2VzcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWNyeXB0QnV0dG9uKHtcbiAgZGVjcnlwdGVkID0gZmFsc2UsXG4gIGxvYWRpbmcgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgZGlzYWJsZWRSZWFzb24sXG4gIG9uQ2xpY2ssXG59OiBEZWNyeXB0QnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHN0eWxlIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogU1RZTEVTIH19IC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtkZWNyeXB0ZWQgPyB1bmRlZmluZWQgOiBvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGVjcnlwdGVkIHx8IGxvYWRpbmcgfHwgZGlzYWJsZWR9XG4gICAgICAgIHRpdGxlPXtkaXNhYmxlZCA/IGRpc2FibGVkUmVhc29uIDogdW5kZWZpbmVkfVxuICAgICAgICBjbGFzc05hbWU9e2B3Zi1kZWNyeXB0LWJ0biAke2RlY3J5cHRlZCA/ICd3Zi1kZWNyeXB0LWRvbmUnIDogJ3dmLWRlY3J5cHQtaWRsZSd9YH1cbiAgICAgID5cbiAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgPFNwaW5uZXIgc2l6ZT17MTR9IC8+XG4gICAgICAgICkgOiBkZWNyeXB0ZWQgPyAoXG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgd2lkdGg9ezE0fVxuICAgICAgICAgICAgaGVpZ2h0PXsxNH1cbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoPXsyfVxuICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjExXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjExXCIgcng9XCIyXCIgcnk9XCIyXCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyAxMVY3YTUgNSAwIDAgMSA5LjktMVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgd2lkdGg9ezE0fVxuICAgICAgICAgICAgaGVpZ2h0PXsxNH1cbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoPXsyfVxuICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjExXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjExXCIgcng9XCIyXCIgcnk9XCIyXCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjRcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICApfVxuICAgICAgICB7bG9hZGluZyA/ICdEZWNyeXB0aW5n4oCmJyA6IGRlY3J5cHRlZCA/ICdEZWNyeXB0ZWQnIDogJ0RlY3J5cHQnfVxuICAgICAgPC9idXR0b24+XG4gICAgPC8+XG4gICk7XG59XG4iXX0=
@@ -1,12 +1,22 @@
1
1
  import type { ReactNode } from 'react';
2
2
  /**
3
- * Explains why an event is shown greyed out: it repeats a class the log
4
- * already records for the same entity, after that entity finished.
3
+ * Explains why an event row is shown greyed out, whether it is a repeat the
4
+ * runtime read past ({@link DUPLICATE_EVENT_MESSAGE}), a backend seal for an
5
+ * abandoned position (`SEALED_EVENT_MESSAGE`), or any other notice a list
6
+ * attaches.
5
7
  *
6
- * Renders `children` untouched when `isDuplicate` is false, so a call site can
8
+ * Renders `children` untouched when `notice` is absent, so a call site can
7
9
  * wrap an event label unconditionally. Mounts its own {@link TooltipProvider}
8
- * so it works in the sidebar and the events table alike; nesting one inside an
9
- * existing provider is harmless.
10
+ * so it works in the sidebar and the events table alike; nesting one inside
11
+ * an existing provider is harmless.
12
+ */
13
+ export declare function EventNoticeTooltip({ notice, children, }: {
14
+ notice?: string;
15
+ children: ReactNode;
16
+ }): ReactNode;
17
+ /**
18
+ * The duplicate-specific wrapper kept for existing call sites: greys the
19
+ * event out as a repeat the runtime read past.
10
20
  */
11
21
  export declare function DuplicateEventTooltip({ isDuplicate, children, }: {
12
22
  isDuplicate?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"duplicate-event-tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ui/duplicate-event-tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,WAAmB,EACnB,QAAQ,GACT,EAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAiBZ"}
1
+ {"version":3,"file":"duplicate-event-tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ui/duplicate-event-tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAiBZ;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,WAAmB,EACnB,QAAQ,GACT,EAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAQZ"}
@@ -3,17 +3,26 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { DUPLICATE_EVENT_MESSAGE } from '../../lib/duplicate-events';
4
4
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from './tooltip';
5
5
  /**
6
- * Explains why an event is shown greyed out: it repeats a class the log
7
- * already records for the same entity, after that entity finished.
6
+ * Explains why an event row is shown greyed out, whether it is a repeat the
7
+ * runtime read past ({@link DUPLICATE_EVENT_MESSAGE}), a backend seal for an
8
+ * abandoned position (`SEALED_EVENT_MESSAGE`), or any other notice a list
9
+ * attaches.
8
10
  *
9
- * Renders `children` untouched when `isDuplicate` is false, so a call site can
11
+ * Renders `children` untouched when `notice` is absent, so a call site can
10
12
  * wrap an event label unconditionally. Mounts its own {@link TooltipProvider}
11
- * so it works in the sidebar and the events table alike; nesting one inside an
12
- * existing provider is harmless.
13
+ * so it works in the sidebar and the events table alike; nesting one inside
14
+ * an existing provider is harmless.
13
15
  */
14
- export function DuplicateEventTooltip({ isDuplicate = false, children, }) {
15
- if (!isDuplicate)
16
+ export function EventNoticeTooltip({ notice, children, }) {
17
+ if (!notice)
16
18
  return children;
17
- return (_jsx(TooltipProvider, { delayDuration: 300, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: children }), _jsx(TooltipContent, { className: "max-w-[264px] leading-snug", collisionPadding: 8, side: "top", children: DUPLICATE_EVENT_MESSAGE })] }) }));
19
+ return (_jsx(TooltipProvider, { delayDuration: 300, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: children }), _jsx(TooltipContent, { className: "max-w-[264px] leading-snug", collisionPadding: 8, side: "top", children: notice })] }) }));
20
+ }
21
+ /**
22
+ * The duplicate-specific wrapper kept for existing call sites: greys the
23
+ * event out as a repeat the runtime read past.
24
+ */
25
+ export function DuplicateEventTooltip({ isDuplicate = false, children, }) {
26
+ return (_jsx(EventNoticeTooltip, { notice: isDuplicate ? DUPLICATE_EVENT_MESSAGE : undefined, children: children }));
18
27
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGljYXRlLWV2ZW50LXRvb2x0aXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kdXBsaWNhdGUtZXZlbnQtdG9vbHRpcC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxXQUFXLENBQUM7QUFFbkI7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsRUFDcEMsV0FBVyxHQUFHLEtBQUssRUFDbkIsUUFBUSxHQUlUO0lBQ0MsSUFBSSxDQUFDLFdBQVc7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUVsQyxPQUFPLENBQ0wsS0FBQyxlQUFlLElBQUMsYUFBYSxFQUFFLEdBQUcsWUFDakMsTUFBQyxPQUFPLGVBQ04sS0FBQyxjQUFjLElBQUMsT0FBTyxrQkFBRSxRQUFRLEdBQWtCLEVBQ25ELEtBQUMsY0FBYyxJQUNiLFNBQVMsRUFBQyw0QkFBNEIsRUFDdEMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUNuQixJQUFJLEVBQUMsS0FBSyxZQUVULHVCQUF1QixHQUNULElBQ1QsR0FDTSxDQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEVVBMSUNBVEVfRVZFTlRfTUVTU0FHRSB9IGZyb20gJy4uLy4uL2xpYi9kdXBsaWNhdGUtZXZlbnRzJztcbmltcG9ydCB7XG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBDb250ZW50LFxuICBUb29sdGlwUHJvdmlkZXIsXG4gIFRvb2x0aXBUcmlnZ2VyLFxufSBmcm9tICcuL3Rvb2x0aXAnO1xuXG4vKipcbiAqIEV4cGxhaW5zIHdoeSBhbiBldmVudCBpcyBzaG93biBncmV5ZWQgb3V0OiBpdCByZXBlYXRzIGEgY2xhc3MgdGhlIGxvZ1xuICogYWxyZWFkeSByZWNvcmRzIGZvciB0aGUgc2FtZSBlbnRpdHksIGFmdGVyIHRoYXQgZW50aXR5IGZpbmlzaGVkLlxuICpcbiAqIFJlbmRlcnMgYGNoaWxkcmVuYCB1bnRvdWNoZWQgd2hlbiBgaXNEdXBsaWNhdGVgIGlzIGZhbHNlLCBzbyBhIGNhbGwgc2l0ZSBjYW5cbiAqIHdyYXAgYW4gZXZlbnQgbGFiZWwgdW5jb25kaXRpb25hbGx5LiBNb3VudHMgaXRzIG93biB7QGxpbmsgVG9vbHRpcFByb3ZpZGVyfVxuICogc28gaXQgd29ya3MgaW4gdGhlIHNpZGViYXIgYW5kIHRoZSBldmVudHMgdGFibGUgYWxpa2U7IG5lc3Rpbmcgb25lIGluc2lkZSBhblxuICogZXhpc3RpbmcgcHJvdmlkZXIgaXMgaGFybWxlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEdXBsaWNhdGVFdmVudFRvb2x0aXAoe1xuICBpc0R1cGxpY2F0ZSA9IGZhbHNlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgaXNEdXBsaWNhdGU/OiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGlmICghaXNEdXBsaWNhdGUpIHJldHVybiBjaGlsZHJlbjtcblxuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJvdmlkZXIgZGVsYXlEdXJhdGlvbj17MzAwfT5cbiAgICAgIDxUb29sdGlwPlxuICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD57Y2hpbGRyZW59PC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgPFRvb2x0aXBDb250ZW50XG4gICAgICAgICAgY2xhc3NOYW1lPVwibWF4LXctWzI2NHB4XSBsZWFkaW5nLXNudWdcIlxuICAgICAgICAgIGNvbGxpc2lvblBhZGRpbmc9ezh9XG4gICAgICAgICAgc2lkZT1cInRvcFwiXG4gICAgICAgID5cbiAgICAgICAgICB7RFVQTElDQVRFX0VWRU5UX01FU1NBR0V9XG4gICAgICAgIDwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICA8L1Rvb2x0aXA+XG4gICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICk7XG59XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGljYXRlLWV2ZW50LXRvb2x0aXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kdXBsaWNhdGUtZXZlbnQtdG9vbHRpcC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxXQUFXLENBQUM7QUFFbkI7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUNqQyxNQUFNLEVBQ04sUUFBUSxHQUlUO0lBQ0MsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUU3QixPQUFPLENBQ0wsS0FBQyxlQUFlLElBQUMsYUFBYSxFQUFFLEdBQUcsWUFDakMsTUFBQyxPQUFPLGVBQ04sS0FBQyxjQUFjLElBQUMsT0FBTyxrQkFBRSxRQUFRLEdBQWtCLEVBQ25ELEtBQUMsY0FBYyxJQUNiLFNBQVMsRUFBQyw0QkFBNEIsRUFDdEMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUNuQixJQUFJLEVBQUMsS0FBSyxZQUVULE1BQU0sR0FDUSxJQUNULEdBQ00sQ0FDbkIsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsRUFDcEMsV0FBVyxHQUFHLEtBQUssRUFDbkIsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLElBQ2pCLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxTQUFTLFlBRXhELFFBQVEsR0FDVSxDQUN0QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEVVBMSUNBVEVfRVZFTlRfTUVTU0FHRSB9IGZyb20gJy4uLy4uL2xpYi9kdXBsaWNhdGUtZXZlbnRzJztcbmltcG9ydCB7XG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBDb250ZW50LFxuICBUb29sdGlwUHJvdmlkZXIsXG4gIFRvb2x0aXBUcmlnZ2VyLFxufSBmcm9tICcuL3Rvb2x0aXAnO1xuXG4vKipcbiAqIEV4cGxhaW5zIHdoeSBhbiBldmVudCByb3cgaXMgc2hvd24gZ3JleWVkIG91dCwgd2hldGhlciBpdCBpcyBhIHJlcGVhdCB0aGVcbiAqIHJ1bnRpbWUgcmVhZCBwYXN0ICh7QGxpbmsgRFVQTElDQVRFX0VWRU5UX01FU1NBR0V9KSwgYSBiYWNrZW5kIHNlYWwgZm9yIGFuXG4gKiBhYmFuZG9uZWQgcG9zaXRpb24gKGBTRUFMRURfRVZFTlRfTUVTU0FHRWApLCBvciBhbnkgb3RoZXIgbm90aWNlIGEgbGlzdFxuICogYXR0YWNoZXMuXG4gKlxuICogUmVuZGVycyBgY2hpbGRyZW5gIHVudG91Y2hlZCB3aGVuIGBub3RpY2VgIGlzIGFic2VudCwgc28gYSBjYWxsIHNpdGUgY2FuXG4gKiB3cmFwIGFuIGV2ZW50IGxhYmVsIHVuY29uZGl0aW9uYWxseS4gTW91bnRzIGl0cyBvd24ge0BsaW5rIFRvb2x0aXBQcm92aWRlcn1cbiAqIHNvIGl0IHdvcmtzIGluIHRoZSBzaWRlYmFyIGFuZCB0aGUgZXZlbnRzIHRhYmxlIGFsaWtlOyBuZXN0aW5nIG9uZSBpbnNpZGVcbiAqIGFuIGV4aXN0aW5nIHByb3ZpZGVyIGlzIGhhcm1sZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnROb3RpY2VUb29sdGlwKHtcbiAgbm90aWNlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgbm90aWNlPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGlmICghbm90aWNlKSByZXR1cm4gY2hpbGRyZW47XG5cbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByb3ZpZGVyIGRlbGF5RHVyYXRpb249ezMwMH0+XG4gICAgICA8VG9vbHRpcD5cbiAgICAgICAgPFRvb2x0aXBUcmlnZ2VyIGFzQ2hpbGQ+e2NoaWxkcmVufTwvVG9vbHRpcFRyaWdnZXI+XG4gICAgICAgIDxUb29sdGlwQ29udGVudFxuICAgICAgICAgIGNsYXNzTmFtZT1cIm1heC13LVsyNjRweF0gbGVhZGluZy1zbnVnXCJcbiAgICAgICAgICBjb2xsaXNpb25QYWRkaW5nPXs4fVxuICAgICAgICAgIHNpZGU9XCJ0b3BcIlxuICAgICAgICA+XG4gICAgICAgICAge25vdGljZX1cbiAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgIDwvVG9vbHRpcD5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgZHVwbGljYXRlLXNwZWNpZmljIHdyYXBwZXIga2VwdCBmb3IgZXhpc3RpbmcgY2FsbCBzaXRlczogZ3JleXMgdGhlXG4gKiBldmVudCBvdXQgYXMgYSByZXBlYXQgdGhlIHJ1bnRpbWUgcmVhZCBwYXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gRHVwbGljYXRlRXZlbnRUb29sdGlwKHtcbiAgaXNEdXBsaWNhdGUgPSBmYWxzZSxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGlzRHVwbGljYXRlPzogYm9vbGVhbjtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxFdmVudE5vdGljZVRvb2x0aXBcbiAgICAgIG5vdGljZT17aXNEdXBsaWNhdGUgPyBEVVBMSUNBVEVfRVZFTlRfTUVTU0FHRSA6IHVuZGVmaW5lZH1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9FdmVudE5vdGljZVRvb2x0aXA+XG4gICk7XG59XG4iXX0=
@@ -23,10 +23,10 @@ export function isStructuredErrorWithStack(value) {
23
23
  /**
24
24
  * Pull a short, single-line title out of an error message.
25
25
  *
26
- * Workflow's structured error messages are multi-line the first line is
26
+ * Workflow's structured error messages are multi-line: the first line is
27
27
  * the headline (`Failed to serialize step return value`) and the rest are
28
28
  * `╰▶ hint:` / `╰▶ docs:` framed details. The full message belongs in the
29
- * body of the error block; the title should just be the headline so the
29
+ * body of the error block; the title should be the headline so the
30
30
  * card stays scannable.
31
31
  */
32
32
  function deriveTitle(message) {
@@ -56,7 +56,7 @@ export function ErrorStackBlock({ value }) {
56
56
  color: 'var(--ds-red-900)',
57
57
  borderBottom: '1px solid var(--ds-red-400)',
58
58
  }, children: [_jsx(AlertCircle, { className: "h-4 w-4 shrink-0" }), _jsx("p", { className: "text-label-12 font-semibold m-0 truncate",
59
- // The full message or stack is in the body below; the header just
59
+ // The full message or stack is in the body below; the header
60
60
  // shows the first line, single-line, with overflow
61
61
  // ellipsised so a long title doesn't push the copy button or
62
62
  // wrap into the framed hint/docs lines.
@@ -65,4 +65,4 @@ export function ErrorStackBlock({ value }) {
65
65
  background: 'var(--ds-red-200)',
66
66
  }, children: body }))] }));
67
67
  }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Itc3RhY2stYmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9lcnJvci1zdGFjay1ibG9jay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBT3BFOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLEtBQWM7SUFFZCxPQUFPLENBQ0wsS0FBSyxJQUFJLElBQUk7UUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsT0FBUSxLQUFpQyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQzdELE9BQVEsS0FBaUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQ2hFLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLEtBQWM7SUFFZCxPQUFPLENBQ0wsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ3hCLE9BQVEsS0FBK0IsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUMzRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxXQUFXLENBQUMsT0FBZTtJQUNsQyxNQUFNLFNBQVMsR0FDYixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7SUFDeEUsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFvQztJQUN6RSxNQUFNLEtBQUssR0FBRyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDeEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlFLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ3BDLHVFQUF1RTtJQUN2RSx5RUFBeUU7SUFDekUsMkNBQTJDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQ1osT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxLQUFLLEVBQUU7UUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUVYLE9BQU8sQ0FDTCxlQUNFLFNBQVMsRUFBQyw0Q0FBNEMsRUFDdEQsS0FBSyxFQUFFO1lBQ0wsV0FBVyxFQUFFLG1CQUFtQjtZQUNoQyxVQUFVLEVBQUUsbUJBQW1CO1NBQ2hDLGFBRUQsS0FBQyxVQUFVLElBQ1QsUUFBUSxFQUFFLFFBQVEsRUFDbEIsU0FBUyxFQUFDLFlBQVksRUFDdEIsU0FBUyxFQUFDLG1OQUFtTixHQUM3TixFQUVELEtBQUssSUFBSSxDQUNSLGVBQ0UsU0FBUyxFQUFDLDJDQUEyQyxFQUNyRCxLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsWUFBWSxFQUFFLDZCQUE2QjtpQkFDNUMsYUFFRCxLQUFDLFdBQVcsSUFBQyxTQUFTLEVBQUMsa0JBQWtCLEdBQUcsRUFDNUMsWUFDRSxTQUFTLEVBQUMsMENBQTBDO3dCQUNwRCxrRUFBa0U7d0JBQ2xFLG1EQUFtRDt3QkFDbkQsNkRBQTZEO3dCQUM3RCx3Q0FBd0M7d0JBQ3hDLEtBQUssRUFBRSxPQUFPLFlBRWIsS0FBSyxHQUNKLElBQ0EsQ0FDUCxFQUNBLElBQUksSUFBSSxDQUNQLGNBQ0UsU0FBUyxFQUFDLGtGQUFrRixFQUM1RixLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsVUFBVSxFQUFFLG1CQUFtQjtpQkFDaEMsWUFFQSxJQUFJLEdBQ0QsQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IEFsZXJ0Q2lyY2xlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IENvcHlCdXR0b24gfSBmcm9tICcuLi90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbic7XG5cbmV4cG9ydCB0eXBlIFN0cnVjdHVyZWRFcnJvclJlY29yZCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBzdGFjaz86IHN0cmluZztcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBgdmFsdWVgIGxvb2tzIGxpa2UgYSBzdHJ1Y3R1cmVkIGVycm9yIG9iamVjdCB3ZSBjYW4gcmVuZGVyXG4gKiB3aXRoIHRoZSBlcnJvciBibG9jay4gU29tZSBwZXJzaXN0ZWQgd29ya2Zsb3cgZXJyb3JzIG9ubHkgaW5jbHVkZSBhXG4gKiBgbWVzc2FnZWAsIHdoaWxlIHJ1bnRpbWUgZXJyb3JzIHVzdWFsbHkgYWxzbyBpbmNsdWRlIGBzdGFja2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cnVjdHVyZWRFcnJvcihcbiAgdmFsdWU6IHVua25vd25cbik6IHZhbHVlIGlzIFN0cnVjdHVyZWRFcnJvclJlY29yZCB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAodHlwZW9mICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikubWVzc2FnZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgIHR5cGVvZiAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnN0YWNrID09PSAnc3RyaW5nJylcbiAgKTtcbn1cblxuLyoqXG4gKiBOYXJyb3dlciBndWFyZCBrZXB0IGZvciBjYWxsZXJzIHRoYXQgc3BlY2lmaWNhbGx5IG5lZWQgYSBzdGFjayB0cmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RydWN0dXJlZEVycm9yV2l0aFN0YWNrKFxuICB2YWx1ZTogdW5rbm93blxuKTogdmFsdWUgaXMgU3RydWN0dXJlZEVycm9yUmVjb3JkICYgeyBzdGFjazogc3RyaW5nIH0ge1xuICByZXR1cm4gKFxuICAgIGlzU3RydWN0dXJlZEVycm9yKHZhbHVlKSAmJlxuICAgIHR5cGVvZiAodmFsdWUgYXMgU3RydWN0dXJlZEVycm9yUmVjb3JkKS5zdGFjayA9PT0gJ3N0cmluZydcbiAgKTtcbn1cblxuLyoqXG4gKiBQdWxsIGEgc2hvcnQsIHNpbmdsZS1saW5lIHRpdGxlIG91dCBvZiBhbiBlcnJvciBtZXNzYWdlLlxuICpcbiAqIFdvcmtmbG93J3Mgc3RydWN0dXJlZCBlcnJvciBtZXNzYWdlcyBhcmUgbXVsdGktbGluZSDigJQgdGhlIGZpcnN0IGxpbmUgaXNcbiAqIHRoZSBoZWFkbGluZSAoYEZhaWxlZCB0byBzZXJpYWxpemUgc3RlcCByZXR1cm4gdmFsdWVgKSBhbmQgdGhlIHJlc3QgYXJlXG4gKiBg4pWw4pa2IGhpbnQ6YCAvIGDilbDilrYgZG9jczpgIGZyYW1lZCBkZXRhaWxzLiBUaGUgZnVsbCBtZXNzYWdlIGJlbG9uZ3MgaW4gdGhlXG4gKiBib2R5IG9mIHRoZSBlcnJvciBibG9jazsgdGhlIHRpdGxlIHNob3VsZCBqdXN0IGJlIHRoZSBoZWFkbGluZSBzbyB0aGVcbiAqIGNhcmQgc3RheXMgc2Nhbm5hYmxlLlxuICovXG5mdW5jdGlvbiBkZXJpdmVUaXRsZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmaXJzdExpbmUgPVxuICAgIG1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmZpbmQoKGxpbmUpID0+IGxpbmUudHJpbSgpLmxlbmd0aCA+IDApID8/IG1lc3NhZ2U7XG4gIHJldHVybiBmaXJzdExpbmUudHJpbSgpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBzdHJ1Y3R1cmVkIGVycm9yIGFzIGEgdmlzdWFsbHkgZGlzdGluY3QgZXJyb3IgYmxvY2suIFNob3dzIHRoZVxuICogZXJyb3IgbWVzc2FnZSB3aXRoIGFuIGFsZXJ0IGljb24gYXQgdGhlIHRvcCwgc2VwYXJhdGVkIGZyb20gdGhlIHN0YWNrIHRyYWNlXG4gKiBvciBmdWxsIG1lc3NhZ2UgYmVsb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFcnJvclN0YWNrQmxvY2soeyB2YWx1ZSB9OiB7IHZhbHVlOiBTdHJ1Y3R1cmVkRXJyb3JSZWNvcmQgfSkge1xuICBjb25zdCBzdGFjayA9IHR5cGVvZiB2YWx1ZS5zdGFjayA9PT0gJ3N0cmluZycgPyB2YWx1ZS5zdGFjayA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09PSAnc3RyaW5nJyA/IHZhbHVlLm1lc3NhZ2UgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvZHkgPSBzdGFjayA/PyBtZXNzYWdlID8/ICcnO1xuICAvLyBWOCdzIGBFcnJvci5zdGFja2AgYWxyZWFkeSBzdGFydHMgd2l0aCBgTmFtZTogbWVzc2FnZWA7IG1lc3NhZ2Utb25seVxuICAvLyBlcnJvcnMgdXNlIHRoZSBtZXNzYWdlIGFzIHRoZSBib2R5IHNvIGxvbmcgc2luZ2xlLWxpbmUgZmFpbHVyZXMgcmVtYWluXG4gIC8vIHJlYWRhYmxlIGV2ZW4gd2hlbiB0aGUgaGVhZGVyIHRydW5jYXRlcy5cbiAgY29uc3QgdGl0bGUgPSBtZXNzYWdlID8gZGVyaXZlVGl0bGUobWVzc2FnZSkgOiBkZXJpdmVUaXRsZShib2R5KTtcbiAgY29uc3QgY29weVRleHQgPVxuICAgIG1lc3NhZ2UgJiYgc3RhY2sgJiYgIXN0YWNrLmluY2x1ZGVzKG1lc3NhZ2UpXG4gICAgICA/IGAke21lc3NhZ2V9XFxuXFxuJHtzdGFja31gXG4gICAgICA6IGJvZHk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXJcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1yZWQtNDAwKScsXG4gICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1yZWQtMTAwKScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxDb3B5QnV0dG9uXG4gICAgICAgIGNvcHlUZXh0PXtjb3B5VGV4dH1cbiAgICAgICAgYXJpYUxhYmVsPVwiQ29weSBlcnJvclwiXG4gICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgdG9wLTIgZmxleCBoLTYgdy02IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItcmVkLTQwMCBiZy1yZWQtMTAwIHAtMCB0ZXh0LXJlZC05MDAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTAwIGhvdmVyOmJnLXJlZC0yMDAgYWN0aXZlOnNjYWxlLTk1XCJcbiAgICAgIC8+XG5cbiAgICAgIHt0aXRsZSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0zIHB5LTIuNSBwci0xMFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtcmVkLTkwMCknLFxuICAgICAgICAgICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkIHZhcigtLWRzLXJlZC00MDApJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPEFsZXJ0Q2lyY2xlIGNsYXNzTmFtZT1cImgtNCB3LTQgc2hyaW5rLTBcIiAvPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIGZvbnQtc2VtaWJvbGQgbS0wIHRydW5jYXRlXCJcbiAgICAgICAgICAgIC8vIFRoZSBmdWxsIG1lc3NhZ2Ugb3Igc3RhY2sgaXMgaW4gdGhlIGJvZHkgYmVsb3c7IHRoZSBoZWFkZXIganVzdFxuICAgICAgICAgICAgLy8gc2hvd3MgdGhlIGZpcnN0IGxpbmUsIHNpbmdsZS1saW5lLCB3aXRoIG92ZXJmbG93XG4gICAgICAgICAgICAvLyBlbGxpcHNpc2VkIHNvIGEgbG9uZyB0aXRsZSBkb2Vzbid0IHB1c2ggdGhlIGNvcHkgYnV0dG9uIG9yXG4gICAgICAgICAgICAvLyB3cmFwIGludG8gdGhlIGZyYW1lZCBoaW50L2RvY3MgbGluZXMuXG4gICAgICAgICAgICB0aXRsZT17bWVzc2FnZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7Ym9keSAmJiAoXG4gICAgICAgIDxwcmVcbiAgICAgICAgICBjbGFzc05hbWU9XCJweC0zIHB5LTIuNSB0ZXh0LWxhYmVsLTEyLW1vbm8gd2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3JkcyBvdmVyZmxvdy1hdXRvIG0tMFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtcmVkLTkwMCknLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLXJlZC0yMDApJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge2JvZHl9XG4gICAgICAgIDwvcHJlPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Itc3RhY2stYmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9lcnJvci1zdGFjay1ibG9jay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBT3BFOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLEtBQWM7SUFFZCxPQUFPLENBQ0wsS0FBSyxJQUFJLElBQUk7UUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsT0FBUSxLQUFpQyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQzdELE9BQVEsS0FBaUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQ2hFLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLEtBQWM7SUFFZCxPQUFPLENBQ0wsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ3hCLE9BQVEsS0FBK0IsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUMzRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxXQUFXLENBQUMsT0FBZTtJQUNsQyxNQUFNLFNBQVMsR0FDYixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7SUFDeEUsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFvQztJQUN6RSxNQUFNLEtBQUssR0FBRyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDeEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlFLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ3BDLHVFQUF1RTtJQUN2RSx5RUFBeUU7SUFDekUsMkNBQTJDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQ1osT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxLQUFLLEVBQUU7UUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUVYLE9BQU8sQ0FDTCxlQUNFLFNBQVMsRUFBQyw0Q0FBNEMsRUFDdEQsS0FBSyxFQUFFO1lBQ0wsV0FBVyxFQUFFLG1CQUFtQjtZQUNoQyxVQUFVLEVBQUUsbUJBQW1CO1NBQ2hDLGFBRUQsS0FBQyxVQUFVLElBQ1QsUUFBUSxFQUFFLFFBQVEsRUFDbEIsU0FBUyxFQUFDLFlBQVksRUFDdEIsU0FBUyxFQUFDLG1OQUFtTixHQUM3TixFQUVELEtBQUssSUFBSSxDQUNSLGVBQ0UsU0FBUyxFQUFDLDJDQUEyQyxFQUNyRCxLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsWUFBWSxFQUFFLDZCQUE2QjtpQkFDNUMsYUFFRCxLQUFDLFdBQVcsSUFBQyxTQUFTLEVBQUMsa0JBQWtCLEdBQUcsRUFDNUMsWUFDRSxTQUFTLEVBQUMsMENBQTBDO3dCQUNwRCw2REFBNkQ7d0JBQzdELG1EQUFtRDt3QkFDbkQsNkRBQTZEO3dCQUM3RCx3Q0FBd0M7d0JBQ3hDLEtBQUssRUFBRSxPQUFPLFlBRWIsS0FBSyxHQUNKLElBQ0EsQ0FDUCxFQUNBLElBQUksSUFBSSxDQUNQLGNBQ0UsU0FBUyxFQUFDLGtGQUFrRixFQUM1RixLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsVUFBVSxFQUFFLG1CQUFtQjtpQkFDaEMsWUFFQSxJQUFJLEdBQ0QsQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IEFsZXJ0Q2lyY2xlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IENvcHlCdXR0b24gfSBmcm9tICcuLi90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbic7XG5cbmV4cG9ydCB0eXBlIFN0cnVjdHVyZWRFcnJvclJlY29yZCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBzdGFjaz86IHN0cmluZztcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBgdmFsdWVgIGxvb2tzIGxpa2UgYSBzdHJ1Y3R1cmVkIGVycm9yIG9iamVjdCB3ZSBjYW4gcmVuZGVyXG4gKiB3aXRoIHRoZSBlcnJvciBibG9jay4gU29tZSBwZXJzaXN0ZWQgd29ya2Zsb3cgZXJyb3JzIG9ubHkgaW5jbHVkZSBhXG4gKiBgbWVzc2FnZWAsIHdoaWxlIHJ1bnRpbWUgZXJyb3JzIHVzdWFsbHkgYWxzbyBpbmNsdWRlIGBzdGFja2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cnVjdHVyZWRFcnJvcihcbiAgdmFsdWU6IHVua25vd25cbik6IHZhbHVlIGlzIFN0cnVjdHVyZWRFcnJvclJlY29yZCB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAodHlwZW9mICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikubWVzc2FnZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgIHR5cGVvZiAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnN0YWNrID09PSAnc3RyaW5nJylcbiAgKTtcbn1cblxuLyoqXG4gKiBOYXJyb3dlciBndWFyZCBrZXB0IGZvciBjYWxsZXJzIHRoYXQgc3BlY2lmaWNhbGx5IG5lZWQgYSBzdGFjayB0cmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RydWN0dXJlZEVycm9yV2l0aFN0YWNrKFxuICB2YWx1ZTogdW5rbm93blxuKTogdmFsdWUgaXMgU3RydWN0dXJlZEVycm9yUmVjb3JkICYgeyBzdGFjazogc3RyaW5nIH0ge1xuICByZXR1cm4gKFxuICAgIGlzU3RydWN0dXJlZEVycm9yKHZhbHVlKSAmJlxuICAgIHR5cGVvZiAodmFsdWUgYXMgU3RydWN0dXJlZEVycm9yUmVjb3JkKS5zdGFjayA9PT0gJ3N0cmluZydcbiAgKTtcbn1cblxuLyoqXG4gKiBQdWxsIGEgc2hvcnQsIHNpbmdsZS1saW5lIHRpdGxlIG91dCBvZiBhbiBlcnJvciBtZXNzYWdlLlxuICpcbiAqIFdvcmtmbG93J3Mgc3RydWN0dXJlZCBlcnJvciBtZXNzYWdlcyBhcmUgbXVsdGktbGluZTogdGhlIGZpcnN0IGxpbmUgaXNcbiAqIHRoZSBoZWFkbGluZSAoYEZhaWxlZCB0byBzZXJpYWxpemUgc3RlcCByZXR1cm4gdmFsdWVgKSBhbmQgdGhlIHJlc3QgYXJlXG4gKiBg4pWw4pa2IGhpbnQ6YCAvIGDilbDilrYgZG9jczpgIGZyYW1lZCBkZXRhaWxzLiBUaGUgZnVsbCBtZXNzYWdlIGJlbG9uZ3MgaW4gdGhlXG4gKiBib2R5IG9mIHRoZSBlcnJvciBibG9jazsgdGhlIHRpdGxlIHNob3VsZCBiZSB0aGUgaGVhZGxpbmUgc28gdGhlXG4gKiBjYXJkIHN0YXlzIHNjYW5uYWJsZS5cbiAqL1xuZnVuY3Rpb24gZGVyaXZlVGl0bGUobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZmlyc3RMaW5lID1cbiAgICBtZXNzYWdlLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnRyaW0oKS5sZW5ndGggPiAwKSA/PyBtZXNzYWdlO1xuICByZXR1cm4gZmlyc3RMaW5lLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgc3RydWN0dXJlZCBlcnJvciBhcyBhIHZpc3VhbGx5IGRpc3RpbmN0IGVycm9yIGJsb2NrLiBTaG93cyB0aGVcbiAqIGVycm9yIG1lc3NhZ2Ugd2l0aCBhbiBhbGVydCBpY29uIGF0IHRoZSB0b3AsIHNlcGFyYXRlZCBmcm9tIHRoZSBzdGFjayB0cmFjZVxuICogb3IgZnVsbCBtZXNzYWdlIGJlbG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gRXJyb3JTdGFja0Jsb2NrKHsgdmFsdWUgfTogeyB2YWx1ZTogU3RydWN0dXJlZEVycm9yUmVjb3JkIH0pIHtcbiAgY29uc3Qgc3RhY2sgPSB0eXBlb2YgdmFsdWUuc3RhY2sgPT09ICdzdHJpbmcnID8gdmFsdWUuc3RhY2sgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgdmFsdWUubWVzc2FnZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS5tZXNzYWdlIDogdW5kZWZpbmVkO1xuICBjb25zdCBib2R5ID0gc3RhY2sgPz8gbWVzc2FnZSA/PyAnJztcbiAgLy8gVjgncyBgRXJyb3Iuc3RhY2tgIGFscmVhZHkgc3RhcnRzIHdpdGggYE5hbWU6IG1lc3NhZ2VgOyBtZXNzYWdlLW9ubHlcbiAgLy8gZXJyb3JzIHVzZSB0aGUgbWVzc2FnZSBhcyB0aGUgYm9keSBzbyBsb25nIHNpbmdsZS1saW5lIGZhaWx1cmVzIHJlbWFpblxuICAvLyByZWFkYWJsZSBldmVuIHdoZW4gdGhlIGhlYWRlciB0cnVuY2F0ZXMuXG4gIGNvbnN0IHRpdGxlID0gbWVzc2FnZSA/IGRlcml2ZVRpdGxlKG1lc3NhZ2UpIDogZGVyaXZlVGl0bGUoYm9keSk7XG4gIGNvbnN0IGNvcHlUZXh0ID1cbiAgICBtZXNzYWdlICYmIHN0YWNrICYmICFzdGFjay5pbmNsdWRlcyhtZXNzYWdlKVxuICAgICAgPyBgJHttZXNzYWdlfVxcblxcbiR7c3RhY2t9YFxuICAgICAgOiBib2R5O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtcmVkLTQwMCknLFxuICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtcmVkLTEwMCknLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Q29weUJ1dHRvblxuICAgICAgICBjb3B5VGV4dD17Y29weVRleHR9XG4gICAgICAgIGFyaWFMYWJlbD1cIkNvcHkgZXJyb3JcIlxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIHRvcC0yIGZsZXggaC02IHctNiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXJlZC00MDAgYmctcmVkLTEwMCBwLTAgdGV4dC1yZWQtOTAwIHRyYW5zaXRpb24tdHJhbnNmb3JtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTEwMCBob3ZlcjpiZy1yZWQtMjAwIGFjdGl2ZTpzY2FsZS05NVwiXG4gICAgICAvPlxuXG4gICAgICB7dGl0bGUgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yLjUgcHItMTBcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLXJlZC05MDApJyxcbiAgICAgICAgICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCB2YXIoLS1kcy1yZWQtNDAwKScsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxBbGVydENpcmNsZSBjbGFzc05hbWU9XCJoLTQgdy00IHNocmluay0wXCIgLz5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xMiBmb250LXNlbWlib2xkIG0tMCB0cnVuY2F0ZVwiXG4gICAgICAgICAgICAvLyBUaGUgZnVsbCBtZXNzYWdlIG9yIHN0YWNrIGlzIGluIHRoZSBib2R5IGJlbG93OyB0aGUgaGVhZGVyXG4gICAgICAgICAgICAvLyBzaG93cyB0aGUgZmlyc3QgbGluZSwgc2luZ2xlLWxpbmUsIHdpdGggb3ZlcmZsb3dcbiAgICAgICAgICAgIC8vIGVsbGlwc2lzZWQgc28gYSBsb25nIHRpdGxlIGRvZXNuJ3QgcHVzaCB0aGUgY29weSBidXR0b24gb3JcbiAgICAgICAgICAgIC8vIHdyYXAgaW50byB0aGUgZnJhbWVkIGhpbnQvZG9jcyBsaW5lcy5cbiAgICAgICAgICAgIHRpdGxlPXttZXNzYWdlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtib2R5ICYmIChcbiAgICAgICAgPHByZVxuICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTMgcHktMi41IHRleHQtbGFiZWwtMTItbW9ubyB3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIG92ZXJmbG93LWF1dG8gbS0wXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1yZWQtOTAwKScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtcmVkLTIwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7Ym9keX1cbiAgICAgICAgPC9wcmU+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIl19