import { template as _$template } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { delegateEvents as _$delegateEvents } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { memo as _$memo } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { addEventListener as _$addEventListener } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { setAttribute as _$setAttribute } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { effect as _$effect } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { createComponent as _$createComponent } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { insert as _$insert } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { className as _$className } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
const _tmpl$ = /*#__PURE__*/_$template(`<span>`),
|
_tmpl$2 = /*#__PURE__*/_$template(`<div class="flex h-full flex-col gap-2"><div class="join w-full"><input type=search class="input join-item input-primary input-sm flex-1 flex-shrink-0 sm:input-md"></div><div class="overflow-x-auto whitespace-nowrap rounded-md bg-base-300"><table><thead class="sticky top-0 z-10"></thead><tbody>`),
|
_tmpl$3 = /*#__PURE__*/_$template(`<tr>`),
|
_tmpl$4 = /*#__PURE__*/_$template(`<th class=bg-base-200><div class="flex items-center"><div>`),
|
_tmpl$5 = /*#__PURE__*/_$template(`<tr class="hover:!bg-primary hover:text-primary-content">`),
|
_tmpl$6 = /*#__PURE__*/_$template(`<td class=py-2>`);
|
import { makePersisted } from "/node_modules/.vite/deps/@solid-primitives_storage.js?v=6c3abd28";
|
import { IconSettings, IconSortAscending, IconSortDescending } from "/node_modules/.vite/deps/@tabler_icons-solidjs.js?v=000c47cd";
|
import { rankItem } from "/node_modules/.vite/deps/@tanstack_match-sorter-utils.js?v=406d8158";
|
import { createSolidTable, flexRender, getCoreRowModel, getFilteredRowModel, getSortedRowModel } from "/node_modules/@tanstack/solid-table/build/lib/index.mjs?v=d99f92c7";
|
import { For, Index, createEffect, createSignal } from "/node_modules/.vite/deps/solid-js.js?v=93754656";
|
import { twMerge } from "/node_modules/.vite/deps/tailwind-merge.js?v=d1b42b68";
|
import { Button, LogsSettingsModal } from "/src/components/index.ts";
|
import { LOG_LEVEL } from "/src/constants/index.ts";
|
import { useI18n } from "/src/i18n/index.tsx";
|
import { logsTableSize, tableSizeClassName, useWsRequest } from "/src/signals/index.ts";
|
import { logLevel, logMaxRows } from "/src/signals/config.ts";
|
const fuzzyFilter = (row, columnId, value, addMeta) => {
|
// Rank the item
|
const itemRank = rankItem(row.getValue(columnId), value);
|
|
// Store the itemRank info
|
addMeta({
|
itemRank
|
});
|
|
// Return if the item should be filtered in/out
|
return itemRank.passed;
|
};
|
export default (() => {
|
let logsSettingsModalRef;
|
const [t] = useI18n();
|
let seq = 1;
|
const [logs, setLogs] = createSignal([]);
|
const logsData = useWsRequest('logs', {
|
level: logLevel()
|
});
|
createEffect(() => {
|
const data = logsData();
|
if (!data) {
|
return;
|
}
|
setLogs(logs => [{
|
...data,
|
seq
|
}, ...logs].slice(0, logMaxRows()));
|
seq++;
|
});
|
const [globalFilter, setGlobalFilter] = createSignal('');
|
const [sorting, setSorting] = makePersisted(createSignal([]), {
|
name: 'logsTableSorting',
|
storage: localStorage
|
});
|
const columns = [{
|
header: t('sequence'),
|
accessorFn: row => row.seq
|
}, {
|
header: t('type'),
|
accessorFn: row => row.type,
|
cell: ({
|
row
|
}) => {
|
const type = row.original.type;
|
let className = '';
|
switch (type) {
|
case LOG_LEVEL.Error:
|
className = 'text-error';
|
break;
|
case LOG_LEVEL.Warning:
|
className = 'text-warning';
|
break;
|
case LOG_LEVEL.Info:
|
className = 'text-info';
|
break;
|
case LOG_LEVEL.Debug:
|
className = 'text-success';
|
break;
|
}
|
return (() => {
|
const _el$ = _tmpl$();
|
_$className(_el$, className);
|
_$insert(_el$, () => `[${row.original.type}]`);
|
return _el$;
|
})();
|
}
|
}, {
|
header: t('payload'),
|
accessorFn: row => row.payload
|
}];
|
const table = createSolidTable({
|
filterFns: {
|
fuzzy: fuzzyFilter
|
},
|
state: {
|
get globalFilter() {
|
return globalFilter();
|
},
|
get sorting() {
|
return sorting();
|
}
|
},
|
get data() {
|
return logs();
|
},
|
sortDescFirst: true,
|
columns,
|
onGlobalFilterChange: setGlobalFilter,
|
onSortingChange: setSorting,
|
globalFilterFn: fuzzyFilter,
|
getFilteredRowModel: getFilteredRowModel(),
|
getSortedRowModel: getSortedRowModel(),
|
getCoreRowModel: getCoreRowModel()
|
});
|
return (() => {
|
const _el$2 = _tmpl$2(),
|
_el$3 = _el$2.firstChild,
|
_el$4 = _el$3.firstChild,
|
_el$5 = _el$3.nextSibling,
|
_el$6 = _el$5.firstChild,
|
_el$7 = _el$6.firstChild,
|
_el$8 = _el$7.nextSibling;
|
_el$4.$$input = e => setGlobalFilter(e.target.value);
|
_$insert(_el$3, _$createComponent(Button, {
|
"class": "join-item btn-sm sm:btn-md",
|
onClick: () => logsSettingsModalRef?.showModal(),
|
get icon() {
|
return _$createComponent(IconSettings, {});
|
}
|
}), null);
|
_$insert(_el$7, _$createComponent(Index, {
|
get each() {
|
return table.getHeaderGroups();
|
},
|
children: keyedHeaderGroup => {
|
const headerGroup = keyedHeaderGroup();
|
return (() => {
|
const _el$9 = _tmpl$3();
|
_$insert(_el$9, _$createComponent(Index, {
|
get each() {
|
return headerGroup.headers;
|
},
|
children: keyedHeader => {
|
const header = keyedHeader();
|
return (() => {
|
const _el$10 = _tmpl$4(),
|
_el$11 = _el$10.firstChild,
|
_el$12 = _el$11.firstChild;
|
_$addEventListener(_el$12, "click", header.column.getToggleSortingHandler(), true);
|
_$insert(_el$12, () => flexRender(header.column.columnDef.header, header.getContext()));
|
_$insert(_el$11, () => ({
|
asc: _$createComponent(IconSortAscending, {}),
|
desc: _$createComponent(IconSortDescending, {})
|
})[header.column.getIsSorted()] ?? null, null);
|
_$effect(() => _$className(_el$12, twMerge(header.column.getCanSort() && 'cursor-pointer select-none', 'flex-1')));
|
return _el$10;
|
})();
|
}
|
}));
|
return _el$9;
|
})();
|
}
|
}));
|
_$insert(_el$8, _$createComponent(For, {
|
get each() {
|
return table.getRowModel().rows;
|
},
|
children: row => (() => {
|
const _el$13 = _tmpl$5();
|
_$insert(_el$13, _$createComponent(For, {
|
get each() {
|
return row.getVisibleCells();
|
},
|
children: cell => (() => {
|
const _el$14 = _tmpl$6();
|
_$insert(_el$14, () => flexRender(cell.column.columnDef.cell, cell.getContext()));
|
return _el$14;
|
})()
|
}));
|
return _el$13;
|
})()
|
}));
|
_$insert(_el$2, _$createComponent(LogsSettingsModal, {
|
ref: el => logsSettingsModalRef = el
|
}), null);
|
_$effect(_p$ => {
|
const _v$ = t('search'),
|
_v$2 = twMerge(tableSizeClassName(logsTableSize()), 'table relative rounded-none');
|
_v$ !== _p$._v$ && _$setAttribute(_el$4, "placeholder", _p$._v$ = _v$);
|
_v$2 !== _p$._v$2 && _$className(_el$6, _p$._v$2 = _v$2);
|
return _p$;
|
}, {
|
_v$: undefined,
|
_v$2: undefined
|
});
|
return _el$2;
|
})();
|
});
|
_$delegateEvents(["input", "click"]);
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWtlUGVyc2lzdGVkIiwiSWNvblNldHRpbmdzIiwiSWNvblNvcnRBc2NlbmRpbmciLCJJY29uU29ydERlc2NlbmRpbmciLCJyYW5rSXRlbSIsImNyZWF0ZVNvbGlkVGFibGUiLCJmbGV4UmVuZGVyIiwiZ2V0Q29yZVJvd01vZGVsIiwiZ2V0RmlsdGVyZWRSb3dNb2RlbCIsImdldFNvcnRlZFJvd01vZGVsIiwiRm9yIiwiSW5kZXgiLCJjcmVhdGVFZmZlY3QiLCJjcmVhdGVTaWduYWwiLCJ0d01lcmdlIiwiQnV0dG9uIiwiTG9nc1NldHRpbmdzTW9kYWwiLCJMT0dfTEVWRUwiLCJ1c2VJMThuIiwibG9nc1RhYmxlU2l6ZSIsInRhYmxlU2l6ZUNsYXNzTmFtZSIsInVzZVdzUmVxdWVzdCIsImxvZ0xldmVsIiwibG9nTWF4Um93cyIsImZ1enp5RmlsdGVyIiwicm93IiwiY29sdW1uSWQiLCJ2YWx1ZSIsImFkZE1ldGEiLCJpdGVtUmFuayIsImdldFZhbHVlIiwicGFzc2VkIiwibG9nc1NldHRpbmdzTW9kYWxSZWYiLCJ0Iiwic2VxIiwibG9ncyIsInNldExvZ3MiLCJsb2dzRGF0YSIsImxldmVsIiwiZGF0YSIsInNsaWNlIiwiZ2xvYmFsRmlsdGVyIiwic2V0R2xvYmFsRmlsdGVyIiwic29ydGluZyIsInNldFNvcnRpbmciLCJuYW1lIiwic3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsImNvbHVtbnMiLCJoZWFkZXIiLCJhY2Nlc3NvckZuIiwidHlwZSIsImNlbGwiLCJvcmlnaW5hbCIsImNsYXNzTmFtZSIsIkVycm9yIiwiV2FybmluZyIsIkluZm8iLCJEZWJ1ZyIsIl9lbCQiLCJfdG1wbCQiLCJfJGNsYXNzTmFtZSIsIl8kaW5zZXJ0IiwicGF5bG9hZCIsInRhYmxlIiwiZmlsdGVyRm5zIiwiZnV6enkiLCJzdGF0ZSIsInNvcnREZXNjRmlyc3QiLCJvbkdsb2JhbEZpbHRlckNoYW5nZSIsIm9uU29ydGluZ0NoYW5nZSIsImdsb2JhbEZpbHRlckZuIiwiX2VsJDIiLCJfdG1wbCQyIiwiX2VsJDMiLCJmaXJzdENoaWxkIiwiX2VsJDQiLCJfZWwkNSIsIm5leHRTaWJsaW5nIiwiX2VsJDYiLCJfZWwkNyIsIl9lbCQ4IiwiJCRpbnB1dCIsImUiLCJ0YXJnZXQiLCJfJGNyZWF0ZUNvbXBvbmVudCIsIm9uQ2xpY2siLCJzaG93TW9kYWwiLCJpY29uIiwiZWFjaCIsImdldEhlYWRlckdyb3VwcyIsImNoaWxkcmVuIiwia2V5ZWRIZWFkZXJHcm91cCIsImhlYWRlckdyb3VwIiwiX2VsJDkiLCJfdG1wbCQzIiwiaGVhZGVycyIsImtleWVkSGVhZGVyIiwiX2VsJDEwIiwiX3RtcGwkNCIsIl9lbCQxMSIsIl9lbCQxMiIsIl8kYWRkRXZlbnRMaXN0ZW5lciIsImNvbHVtbiIsImdldFRvZ2dsZVNvcnRpbmdIYW5kbGVyIiwiY29sdW1uRGVmIiwiZ2V0Q29udGV4dCIsImFzYyIsImRlc2MiLCJnZXRJc1NvcnRlZCIsIl8kZWZmZWN0IiwiZ2V0Q2FuU29ydCIsImdldFJvd01vZGVsIiwicm93cyIsIl9lbCQxMyIsIl90bXBsJDUiLCJnZXRWaXNpYmxlQ2VsbHMiLCJfZWwkMTQiLCJfdG1wbCQ2IiwicmVmIiwiZWwiLCJfcCQiLCJfdiQiLCJfdiQyIiwiXyRzZXRBdHRyaWJ1dGUiLCJ1bmRlZmluZWQiLCJfJGRlbGVnYXRlRXZlbnRzIl0sInNvdXJjZXMiOlsiTG9ncy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFrZVBlcnNpc3RlZCB9IGZyb20gJ0Bzb2xpZC1wcmltaXRpdmVzL3N0b3JhZ2UnXHJcbmltcG9ydCB7XHJcbiAgSWNvblNldHRpbmdzLFxyXG4gIEljb25Tb3J0QXNjZW5kaW5nLFxyXG4gIEljb25Tb3J0RGVzY2VuZGluZyxcclxufSBmcm9tICdAdGFibGVyL2ljb25zLXNvbGlkanMnXHJcbmltcG9ydCB7IHJhbmtJdGVtIH0gZnJvbSAnQHRhbnN0YWNrL21hdGNoLXNvcnRlci11dGlscydcclxuaW1wb3J0IHtcclxuICBDb2x1bW5EZWYsXHJcbiAgRmlsdGVyRm4sXHJcbiAgU29ydGluZ1N0YXRlLFxyXG4gIGNyZWF0ZVNvbGlkVGFibGUsXHJcbiAgZmxleFJlbmRlcixcclxuICBnZXRDb3JlUm93TW9kZWwsXHJcbiAgZ2V0RmlsdGVyZWRSb3dNb2RlbCxcclxuICBnZXRTb3J0ZWRSb3dNb2RlbCxcclxufSBmcm9tICdAdGFuc3RhY2svc29saWQtdGFibGUnXHJcbmltcG9ydCB7IEZvciwgSW5kZXgsIGNyZWF0ZUVmZmVjdCwgY3JlYXRlU2lnbmFsIH0gZnJvbSAnc29saWQtanMnXHJcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcclxuaW1wb3J0IHsgQnV0dG9uLCBMb2dzU2V0dGluZ3NNb2RhbCB9IGZyb20gJ34vY29tcG9uZW50cydcclxuaW1wb3J0IHsgTE9HX0xFVkVMIH0gZnJvbSAnfi9jb25zdGFudHMnXHJcbmltcG9ydCB7IHVzZUkxOG4gfSBmcm9tICd+L2kxOG4nXHJcbmltcG9ydCB7IGxvZ3NUYWJsZVNpemUsIHRhYmxlU2l6ZUNsYXNzTmFtZSwgdXNlV3NSZXF1ZXN0IH0gZnJvbSAnfi9zaWduYWxzJ1xyXG5pbXBvcnQgeyBsb2dMZXZlbCwgbG9nTWF4Um93cyB9IGZyb20gJ34vc2lnbmFscy9jb25maWcnXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJ34vdHlwZXMnXHJcblxyXG50eXBlIExvZ1dpdGhTZXEgPSBMb2cgJiB7IHNlcTogbnVtYmVyIH1cclxuXHJcbmNvbnN0IGZ1enp5RmlsdGVyOiBGaWx0ZXJGbjxMb2dXaXRoU2VxPiA9IChyb3csIGNvbHVtbklkLCB2YWx1ZSwgYWRkTWV0YSkgPT4ge1xyXG4gIC8vIFJhbmsgdGhlIGl0ZW1cclxuICBjb25zdCBpdGVtUmFuayA9IHJhbmtJdGVtKHJvdy5nZXRWYWx1ZShjb2x1bW5JZCksIHZhbHVlKVxyXG5cclxuICAvLyBTdG9yZSB0aGUgaXRlbVJhbmsgaW5mb1xyXG4gIGFkZE1ldGEoe1xyXG4gICAgaXRlbVJhbmssXHJcbiAgfSlcclxuXHJcbiAgLy8gUmV0dXJuIGlmIHRoZSBpdGVtIHNob3VsZCBiZSBmaWx0ZXJlZCBpbi9vdXRcclxuICByZXR1cm4gaXRlbVJhbmsucGFzc2VkXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICBsZXQgbG9nc1NldHRpbmdzTW9kYWxSZWY6IEhUTUxEaWFsb2dFbGVtZW50IHwgdW5kZWZpbmVkXHJcblxyXG4gIGNvbnN0IFt0XSA9IHVzZUkxOG4oKVxyXG5cclxuICBsZXQgc2VxID0gMVxyXG4gIGNvbnN0IFtsb2dzLCBzZXRMb2dzXSA9IGNyZWF0ZVNpZ25hbDxMb2dXaXRoU2VxW10+KFtdKVxyXG5cclxuICBjb25zdCBsb2dzRGF0YSA9IHVzZVdzUmVxdWVzdDxMb2c+KCdsb2dzJywgeyBsZXZlbDogbG9nTGV2ZWwoKSB9KVxyXG5cclxuICBjcmVhdGVFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IGxvZ3NEYXRhKClcclxuXHJcbiAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TG9ncygobG9ncykgPT4gW3sgLi4uZGF0YSwgc2VxIH0sIC4uLmxvZ3NdLnNsaWNlKDAsIGxvZ01heFJvd3MoKSkpXHJcblxyXG4gICAgc2VxKytcclxuICB9KVxyXG5cclxuICBjb25zdCBbZ2xvYmFsRmlsdGVyLCBzZXRHbG9iYWxGaWx0ZXJdID0gY3JlYXRlU2lnbmFsKCcnKVxyXG5cclxuICBjb25zdCBbc29ydGluZywgc2V0U29ydGluZ10gPSBtYWtlUGVyc2lzdGVkKGNyZWF0ZVNpZ25hbDxTb3J0aW5nU3RhdGU+KFtdKSwge1xyXG4gICAgbmFtZTogJ2xvZ3NUYWJsZVNvcnRpbmcnLFxyXG4gICAgc3RvcmFnZTogbG9jYWxTdG9yYWdlLFxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IGNvbHVtbnM6IENvbHVtbkRlZjxMb2dXaXRoU2VxPltdID0gW1xyXG4gICAge1xyXG4gICAgICBoZWFkZXI6IHQoJ3NlcXVlbmNlJyksXHJcbiAgICAgIGFjY2Vzc29yRm46IChyb3cpID0+IHJvdy5zZXEsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBoZWFkZXI6IHQoJ3R5cGUnKSxcclxuICAgICAgYWNjZXNzb3JGbjogKHJvdykgPT4gcm93LnR5cGUsXHJcbiAgICAgIGNlbGw6ICh7IHJvdyB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IHJvdy5vcmlnaW5hbC50eXBlIGFzIExPR19MRVZFTFxyXG5cclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gJydcclxuXHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIExPR19MRVZFTC5FcnJvcjpcclxuICAgICAgICAgICAgY2xhc3NOYW1lID0gJ3RleHQtZXJyb3InXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlIExPR19MRVZFTC5XYXJuaW5nOlxyXG4gICAgICAgICAgICBjbGFzc05hbWUgPSAndGV4dC13YXJuaW5nJ1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSBMT0dfTEVWRUwuSW5mbzpcclxuICAgICAgICAgICAgY2xhc3NOYW1lID0gJ3RleHQtaW5mbydcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgTE9HX0xFVkVMLkRlYnVnOlxyXG4gICAgICAgICAgICBjbGFzc05hbWUgPSAndGV4dC1zdWNjZXNzJ1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzPXtjbGFzc05hbWV9PntgWyR7cm93Lm9yaWdpbmFsLnR5cGV9XWB9PC9zcGFuPlxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaGVhZGVyOiB0KCdwYXlsb2FkJyksXHJcbiAgICAgIGFjY2Vzc29yRm46IChyb3cpID0+IHJvdy5wYXlsb2FkLFxyXG4gICAgfSxcclxuICBdXHJcblxyXG4gIGNvbnN0IHRhYmxlID0gY3JlYXRlU29saWRUYWJsZSh7XHJcbiAgICBmaWx0ZXJGbnM6IHtcclxuICAgICAgZnV6enk6IGZ1enp5RmlsdGVyLFxyXG4gICAgfSxcclxuICAgIHN0YXRlOiB7XHJcbiAgICAgIGdldCBnbG9iYWxGaWx0ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbEZpbHRlcigpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBzb3J0aW5nKCkge1xyXG4gICAgICAgIHJldHVybiBzb3J0aW5nKClcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBnZXQgZGF0YSgpIHtcclxuICAgICAgcmV0dXJuIGxvZ3MoKVxyXG4gICAgfSxcclxuICAgIHNvcnREZXNjRmlyc3Q6IHRydWUsXHJcbiAgICBjb2x1bW5zLFxyXG4gICAgb25HbG9iYWxGaWx0ZXJDaGFuZ2U6IHNldEdsb2JhbEZpbHRlcixcclxuICAgIG9uU29ydGluZ0NoYW5nZTogc2V0U29ydGluZyxcclxuICAgIGdsb2JhbEZpbHRlckZuOiBmdXp6eUZpbHRlcixcclxuICAgIGdldEZpbHRlcmVkUm93TW9kZWw6IGdldEZpbHRlcmVkUm93TW9kZWwoKSxcclxuICAgIGdldFNvcnRlZFJvd01vZGVsOiBnZXRTb3J0ZWRSb3dNb2RlbCgpLFxyXG4gICAgZ2V0Q29yZVJvd01vZGVsOiBnZXRDb3JlUm93TW9kZWwoKSxcclxuICB9KVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIGZsZXgtY29sIGdhcC0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJqb2luIHctZnVsbFwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXHJcbiAgICAgICAgICBjbGFzcz1cImlucHV0IGpvaW4taXRlbSBpbnB1dC1wcmltYXJ5IGlucHV0LXNtIGZsZXgtMSBmbGV4LXNocmluay0wIHNtOmlucHV0LW1kXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdzZWFyY2gnKX1cclxuICAgICAgICAgIG9uSW5wdXQ9eyhlKSA9PiBzZXRHbG9iYWxGaWx0ZXIoZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgIC8+XHJcblxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiam9pbi1pdGVtIGJ0bi1zbSBzbTpidG4tbWRcIlxyXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gbG9nc1NldHRpbmdzTW9kYWxSZWY/LnNob3dNb2RhbCgpfVxyXG4gICAgICAgICAgaWNvbj17PEljb25TZXR0aW5ncyAvPn1cclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy14LWF1dG8gd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCBiZy1iYXNlLTMwMFwiPlxyXG4gICAgICAgIDx0YWJsZVxyXG4gICAgICAgICAgY2xhc3M9e3R3TWVyZ2UoXHJcbiAgICAgICAgICAgIHRhYmxlU2l6ZUNsYXNzTmFtZShsb2dzVGFibGVTaXplKCkpLFxyXG4gICAgICAgICAgICAndGFibGUgcmVsYXRpdmUgcm91bmRlZC1ub25lJyxcclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRoZWFkIGNsYXNzPVwic3RpY2t5IHRvcC0wIHotMTBcIj5cclxuICAgICAgICAgICAgPEluZGV4IGVhY2g9e3RhYmxlLmdldEhlYWRlckdyb3VwcygpfT5cclxuICAgICAgICAgICAgICB7KGtleWVkSGVhZGVyR3JvdXApID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckdyb3VwID0ga2V5ZWRIZWFkZXJHcm91cCgpXHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJbmRleCBlYWNoPXtoZWFkZXJHcm91cC5oZWFkZXJzfT5cclxuICAgICAgICAgICAgICAgICAgICAgIHsoa2V5ZWRIZWFkZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyID0ga2V5ZWRIZWFkZXIoKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJiZy1iYXNlLTIwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz17dHdNZXJnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5jb2x1bW4uZ2V0Q2FuU29ydCgpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxleC0xJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hlYWRlci5jb2x1bW4uZ2V0VG9nZ2xlU29ydGluZ0hhbmRsZXIoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmbGV4UmVuZGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmdldENvbnRleHQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjOiA8SWNvblNvcnRBc2NlbmRpbmcgLz4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogPEljb25Tb3J0RGVzY2VuZGluZyAvPixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVtoZWFkZXIuY29sdW1uLmdldElzU29ydGVkKCkgYXMgc3RyaW5nXSA/PyBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L0luZGV4PlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvSW5kZXg+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPEZvciBlYWNoPXt0YWJsZS5nZXRSb3dNb2RlbCgpLnJvd3N9PlxyXG4gICAgICAgICAgICAgIHsocm93KSA9PiAoXHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJob3ZlcjohYmctcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICA8Rm9yIGVhY2g9e3Jvdy5nZXRWaXNpYmxlQ2VsbHMoKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgeyhjZWxsKSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtmbGV4UmVuZGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY29sdW1uLmNvbHVtbkRlZi5jZWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuZ2V0Q29udGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICA8L0Zvcj5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9Gb3I+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPExvZ3NTZXR0aW5nc01vZGFsIHJlZj17KGVsKSA9PiAobG9nc1NldHRpbmdzTW9kYWxSZWYgPSBlbCl9IC8+XHJcbiAgICA8L2Rpdj5cclxuICApXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTQSxhQUFhLFFBQVEsMkJBQTJCO0FBQ3pELFNBQ0VDLFlBQVksRUFDWkMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsUUFDYix1QkFBdUI7QUFDOUIsU0FBU0MsUUFBUSxRQUFRLDhCQUE4QjtBQUN2RCxTQUlFQyxnQkFBZ0IsRUFDaEJDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyxtQkFBbUIsRUFDbkJDLGlCQUFpQixRQUNaLHVCQUF1QjtBQUM5QixTQUFTQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsWUFBWSxFQUFFQyxZQUFZLFFBQVEsVUFBVTtBQUNqRSxTQUFTQyxPQUFPLFFBQVEsZ0JBQWdCO0FBQ3hDLFNBQVNDLE1BQU0sRUFBRUMsaUJBQWlCLFFBQVEsY0FBYztBQUN4RCxTQUFTQyxTQUFTLFFBQVEsYUFBYTtBQUN2QyxTQUFTQyxPQUFPLFFBQVEsUUFBUTtBQUNoQyxTQUFTQyxhQUFhLEVBQUVDLGtCQUFrQixFQUFFQyxZQUFZLFFBQVEsV0FBVztBQUMzRSxTQUFT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
|