PageSourceSearch

https://iqprompt.ai/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx

js iqprompt.ai collected 2026-10-02 01:14:54 UTC 37,550 bytes, 374 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=06a3ba8c"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"];
2import * as RefreshRuntime from "/@react-refresh";
3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
4let prevRefreshReg;
5let prevRefreshSig;
6if (import.meta.hot && !inWebWorker) {
7  if (!window.$RefreshReg$) {
8    throw new Error(
9      "@vitejs/plugin-react can't detect preamble. Something is wrong."
10    );
11  }
12  prevRefreshReg = window.$RefreshReg$;
13  prevRefreshSig = window.$RefreshSig$;
14  window.$RefreshReg$ = RefreshRuntime.getRefreshReg("/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx");
15  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
16}
17import {
18  Alert,
19  Box,
20  Button,
21  CircularProgress,
22  Dialog,
23  DialogActions,
24  DialogContent,
25  DialogTitle,
26  FormControl,
27  InputLabel,
28  MenuItem,
29  Select,
30  TextField,
31  Typography
32} from "/node_modules/.vite/deps/@mui_material.js?v=06a3ba8c";
33export default function CreateAPIKeyDialog(props) {
34  const {
35    open,
36    activeTenantId,
37    workspaceList,
38    instanceList,
39    selectedWorkspaceId,
40    selectedInstanceId,
41    keyName,
42    workspacesLoading,
43    instancesLoading,
44    workspaceLoadError,
45    instanceLoadError,
46    creating,
47    onClose,
48    onWorkspaceChange,
49    onInstanceChange,
50    onKeyNameChange,
51    onSubmit
52  } = props;
53  return /* @__PURE__ */ jsxDEV(
54    Dialog,
55    {
56      open,
57      onClose,
58      maxWidth: "sm",
59      fullWidth: true,
60      PaperProps: {
61        sx: {
62          borderRadius: 3,
63          bgcolor: "background.paper",
64          backgroundImage: "none"
65        }
66      },
67      children: [
68        /* @__PURE__ */ jsxDEV(DialogTitle, { sx: { fontWeight: 600, color: "text.primary", borderBottom: "1px solid", borderColor: "divider", pb: 2 }, children: "Create New API Key" }, void 0, false, {
69          fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
70          lineNumber: 94,
71          columnNumber: 13
72        }, this),
73        /* @__PURE__ */ jsxDEV(DialogContent, { children: [
74          !activeTenantId && /* @__PURE__ */ jsxDEV(Alert, { severity: "warning", sx: { mt: 2, mb: 2 }, children: "Select an active tenant (workspace switcher) before creating a key." }, void 0, false, {
75            fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
76            lineNumber: 99,
77            columnNumber: 9
78          }, this),
79          /* @__PURE__ */ jsxDEV(
80            FormControl,
81            {
82              fullWidth: true,
83              sx: {
84                mt: 2,
85                mb: 2,
86                "& .MuiInputLabel-root": { color: "text.secondary" },
87                "& .MuiInputLabel-root.Mui-focused": { color: "text.secondary" }
88              },
89              disabled: !activeTenantId || workspacesLoading,
90              children: [
91                /* @__PURE__ */ jsxDEV(InputLabel, { id: "api-key-workspace-label", children: "Workspace" }, void 0, false, {
92                  fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
93                  lineNumber: 112,
94                  columnNumber: 21
95                }, this),
96                /* @__PURE__ */ jsxDEV(
97                  Select,
98                  {
99                    labelId: "api-key-workspace-label",
100                    label: "Workspace",
101                    value: selectedWorkspaceId,
102                    onChange: (e) => onWorkspaceChange(e.target.value),
103                    MenuProps: {
104                      PaperProps: {
105                        sx: {
106                          bgcolor: "background.paper",
107                          backgroundImage: "none",
108                          border: "1px solid",
109                          borderColor: "divider"
110                        }
111                      }
112                    },
113                    children: workspaceList.map(
114                      (ws) => /* @__PURE__ */ jsxDEV(MenuItem, { value: ws.id, children: ws.name }, ws.id, false, {
115                        fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
116                        lineNumber: 130,
117                        columnNumber: 13
118                      }, this)
119                    )
120                  },
121                  void 0,
122                  false,
123                  {
124                    fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
125                    lineNumber: 113,
126                    columnNumber: 21
127                  },
128                  this
129                )
130              ]
131            },
132            void 0,
133            true,
134            {
135              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
136              lineNumber: 103,
137              columnNumber: 17
138            },
139            this
140          ),
141          workspacesLoading && /* @__PURE__ */ jsxDEV(Box, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 2 }, children: [
142            /* @__PURE__ */ jsxDEV(CircularProgress, { size: 14 }, void 0, false, {
143              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
144              lineNumber: 138,
145              columnNumber: 25
146            }, this),
147            /* @__PURE__ */ jsxDEV(Typography, { variant: "caption", color: "text.secondary", children: "Loading workspaces..." }, void 0, false, {
148              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
149              lineNumber: 139,
150              columnNumber: 25
151            }, this)
152          ] }, void 0, true, {
153            fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
154            lineNumber: 137,
155            columnNumber: 9
156          }, this),
157          workspaceLoadError && /* @__PURE__ */ jsxDEV(Alert, { severity: "error", sx: { mb: 2, borderRadius: 1.5 }, children: workspaceLoadError }, void 0, false, {
158            fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
159            lineNumber: 145,
160            columnNumber: 9
161          }, this),
162          /* @__PURE__ */ jsxDEV(
163            FormControl,
164            {
165              fullWidth: true,
166              sx: {
167                mb: 2,
168                "& .MuiInputLabel-root": { color: "text.secondary" },
169                "& .MuiInputLabel-root.Mui-focused": { color: "text.secondary" }
170              },
171              disabled: !selectedWorkspaceId || instancesLoading,
172              children: [
173                /* @__PURE__ */ jsxDEV(InputLabel, { id: "api-key-instance-label", children: "Instance" }, void 0, false, {
174                  fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
175                  lineNumber: 158,
176                  columnNumber: 21
177                }, this),
178                /* @__PURE__ */ jsxDEV(
179                  Select,
180                  {
181                    labelId: "api-key-instance-label",
182                    label: "Instance",
183                    value: selectedInstanceId,
184                    onChange: (e) => onInstanceChange(e.target.value),
185                    MenuProps: {
186                      PaperProps: {
187                        sx: {
188                          bgcolor: "background.paper",
189                          backgroundImage: "none",
190                          border: "1px solid",
191                          borderColor: "divider"
192                        }
193                      }
194                    },
195                    children: instanceList.length === 0 && selectedWorkspaceId && !instancesLoading ? /* @__P
195URE__ */ jsxDEV(MenuItem, { value: "", children: "No Instance" }, void 0, false, {
196                      fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
197                      lineNumber: 176,
198                      columnNumber: 13
199                    }, this) : instanceList.map(
200                      (inst) => /* @__PURE__ */ jsxDEV(MenuItem, { value: inst.id, children: inst.name }, inst.id, false, {
201                        fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
202                        lineNumber: 181,
203                        columnNumber: 13
204                      }, this)
205                    )
206                  },
207                  void 0,
208                  false,
209                  {
210                    fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
211                    lineNumber: 159,
212                    columnNumber: 21
213                  },
214                  this
215                )
216              ]
217            },
218            void 0,
219            true,
220            {
221              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
222              lineNumber: 149,
223              columnNumber: 17
224            },
225            this
226          ),
227          instancesLoading && /* @__PURE__ */ jsxDEV(Box, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 2 }, children: [
228            /* @__PURE__ */ jsxDEV(CircularProgress, { size: 14 }, void 0, false, {
229              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
230              lineNumber: 190,
231              columnNumber: 25
232            }, this),
233            /* @__PURE__ */ jsxDEV(Typography, { variant: "caption", color: "text.secondary", children: "Loading instances..." }, void 0, false, {
234              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
235              lineNumber: 191,
236              columnNumber: 25
237            }, this)
238          ] }, void 0, true, {
239            fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
240            lineNumber: 189,
241            columnNumber: 9
242          }, this),
243          instanceLoadError && /* @__PURE__ */ jsxDEV(Alert, { severity: "error", sx: { mb: 2, borderRadius: 1.5 }, children: instanceLoadError }, void 0, false, {
244            fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
245            lineNumber: 197,
246            columnNumber: 9
247          }, this),
248          selectedWorkspaceId && !instancesLoading && instanceList.length === 0 && /* @__PURE__ */ jsxDEV(Typography, { variant: "body2", color: "text.secondary", sx: { mb: 2 }, children: "No active instances in this workspace. Create an instance first." }, void 0, false, {
249            fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
250            lineNumber: 202,
251            columnNumber: 9
252          }, this),
253          /* @__PURE__ */ jsxDEV(
254            TextField,
255            {
256              fullWidth: true,
257              label: "Key name",
258              placeholder: "e.g., Production API",
259              value: keyName,
260              onChange: (e) => onKeyNameChange(e.target.value),
261              disabled: !selectedInstanceId,
262              inputProps: { maxLength: 100 },
263              helperText: "Shown in your API keys list (max 100 characters).",
264              sx: {
265                "& .MuiInputLabel-root": { color: "text.secondary" },
266                "& .MuiInputLabel-root.Mui-focused": { color: "text.secondary" }
267              }
268            },
269            void 0,
270            false,
271            {
272              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
273              lineNumber: 206,
274              columnNumber: 17
275            },
276            this
277          )
278        ] }, void 0, true, {
279          fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
280          lineNumber: 97,
281          columnNumber: 13
282        }, this),
283        /* @__PURE__ */ jsxDEV(DialogActions, { sx: { px: 3, pb: 2, borderTop: "1px solid", borderColor: "divider", pt: 2 }, children: [
284          /* @__PURE__ */ jsxDEV(
285            Button,
286            {
287              onClick: onClose,
288              sx: {
289                textTransform: "none",
290                color: "text.secondary",
291                fontWeight: 500,
292                border: "1px solid",
293                borderColor: "divider",
294                borderRadius: "8px",
295                px: 2,
296                "&:hover": { bgcolor: (theme) => theme.palette.mode === "dark" ? "#1f1f1f" : "#f9fafb" }
297              },
298              children: "Cancel"
299            },
300            void 0,
301            false,
302            {
303              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
304              lineNumber: 222,
305              columnNumber: 17
306            },
307            this
308          ),
309          /* @__PURE__ */ jsxDEV(
310            Button,
311            {
312              variant: "contained",
313              onClick: onSubmit,
314              disabled: !activeTenantId || !selectedInstanceId || !keyName.trim() || creating || workspacesLoading || instancesLoading,
315              sx: {
316                textTransform: "none",
317                fontWeight: 600,
318                borderRadius: "8px",
319                px: 3,
320                bgcolor: (theme) => theme.palette.mode === "dark" ? "#3f3f46" : "#1a1a2e",
321                "&:hover": { bgcolor: (theme) => theme.palette.mode === "dark" ? "#52525b" : "#2d2d44" },
322                "&.Mui-disabled": { bgcolor: (theme) => theme.palette.mode === "dark" ? "#27272A" : void 0, color: (theme) => theme.palette.mode === "dark" ? "#71717a" : void 0 }
323              },
324              children: creating ? /* @__PURE__ */ jsxDEV(CircularProgress, { size: 20, color: "inherit" }, void 0, false, {
325                fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
326                lineNumber: 258,
327                columnNumber: 33
328              }, this) : "Create Key"
329            },
330            void 0,
331            false,
332            {
333              fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
334              lineNumber: 237,
335              columnNumber: 17
336            },
337            this
338          )
339        ] }, void 0, true, {
340          fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
341          lineNumber: 221,
342          columnNumber: 13
343        }, this)
344      ]
345    },
346    void 0,
347    true,
348    {
349      fileName: "/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx",
350      lineNumber: 81,
351      columnNumber: 5
352    },
353    this
354  );
355}
356_c = CreateAPIKeyDialog;
357var _c;
358$RefreshReg$(_c, "CreateAPIKeyDialog");
359if (import.meta.hot && !inWebWorker) {
360  window.$RefreshReg$ = prevRefreshReg;
361  window.$RefreshSig$ = prevRefreshSig;
362}
363if (import.meta.hot && !inWebWorker) {
364  RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
365    RefreshRuntime.registerExportsForReactRefresh("/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx", currentExports);
366    import.meta.hot.accept((nextExports) => {
367      if (!nextExports) return;
368      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/app/src/features/developer-studio/components/api-keys/CreateAPIKeyDialog.tsx", currentExports, nextExports);
369      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
370    });
371  });
372}
373
374//# sourceMappingURL=data:application/json;base64,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5QixJQUFJO0FBQUEsZ0JBQ0p4QixTQUFTQSxDQUFDNEIsVUFBVUEsTUFBTUMsUUFBUUMsU0FBUyxTQUFTLFlBQVk7QUFBQSxnQkFDaEUsV0FBVyxFQUFFOUIsU0FBU0EsQ0FBQzRCLFVBQVVBLE1BQU1DLFFBQVFDLFNBQVMsU0FBUyxZQUFZLFVBQVU7QUFBQSxnQkFDdkYsa0JBQWtCLEVBQUU5QixTQUFTQSxDQUFDNEIsVUFBVUEsTUFBTUMsUUFBUUMsU0FBUyxTQUFTLFlBQVlFLFFBQVc3QixPQUFPQSxDQUFDeUIsVUFBVUEsTUFBTUMsUUFBUUMsU0FBUyxTQUFTLFlBQVlFLE9BQVU7QUFBQSxjQUMzSztBQUFBLGNBRUN4QyxxQkFBVyx1QkFBQyxvQkFBaUIsTUFBTSxJQUFJLE9BQU0sYUFBbEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBMkMsSUFBTTtBQUFBO0FBQUEsWUFyQmpFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQXNCQTtBQUFBLGFBdENKO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUF1Q0E7QUFBQTtBQUFBO0FBQUEsSUFuTEo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBb0xBO0FBRVI7QUFBQ3lDLEtBNU11QnREO0FBQWtCLElBQUFzRDtBQUFBLGFBQUFBLElBQUEiLCJuYW1lcyI6WyJBbGVydCIsIkJveCIsIkJ1dHRvbiIsIkNpcmN1bGFyUHJvZ3Jlc3MiLCJEaWFsb2ciLCJEaWFsb2dBY3Rpb25zIiwiRGlhbG9nQ29udGVudCIsIkRpYWxvZ1RpdGxlIiwiRm9ybUNvbnRyb2wiLCJJbnB1dExhYmVsIiwiTWVudUl0ZW0iLCJTZWxlY3QiLCJUZXh0RmllbGQiLCJUeXBvZ3JhcGh5IiwiQ3JlYXRlQVBJS2V5RGlhbG9nIiwicHJvcHMiLCJvcGVuIiwiYWN0aXZlVGVuYW50SWQiLCJ3b3Jrc3BhY2V
374MaXN0IiwiaW5zdGFuY2VMaXN0Iiwic2VsZWN0ZWRXb3Jrc3BhY2VJZCIsInNlbGVjdGVkSW5zdGFuY2VJZCIsImtleU5hbWUiLCJ3b3Jrc3BhY2VzTG9hZGluZyIsImluc3RhbmNlc0xvYWRpbmciLCJ3b3Jrc3BhY2VMb2FkRXJyb3IiLCJpbnN0YW5jZUxvYWRFcnJvciIsImNyZWF0aW5nIiwib25DbG9zZSIsIm9uV29ya3NwYWNlQ2hhbmdlIiwib25JbnN0YW5jZUNoYW5nZSIsIm9uS2V5TmFtZUNoYW5nZSIsIm9uU3VibWl0Iiwic3giLCJib3JkZXJSYWRpdXMiLCJiZ2NvbG9yIiwiYmFja2dyb3VuZEltYWdlIiwiZm9udFdlaWdodCIsImNvbG9yIiwiYm9yZGVyQm90dG9tIiwiYm9yZGVyQ29sb3IiLCJwYiIsIm10IiwibWIiLCJlIiwidGFyZ2V0IiwidmFsdWUiLCJQYXBlclByb3BzIiwiYm9yZGVyIiwibWFwIiwid3MiLCJpZCIsIm5hbWUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImdhcCIsImxlbmd0aCIsImluc3QiLCJtYXhMZW5ndGgiLCJweCIsImJvcmRlclRvcCIsInB0IiwidGV4dFRyYW5zZm9ybSIsInRoZW1lIiwicGFsZXR0ZSIsIm1vZGUiLCJ0cmltIiwidW5kZWZpbmVkIiwiX2MiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiQ3JlYXRlQVBJS2V5RGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFsZXJ0LFxuICAgIEJveCxcbiAgICBCdXR0b24sXG4gICAgQ2lyY3VsYXJQcm9ncmVzcyxcbiAgICBEaWFsb2csXG4gICAgRGlhbG9nQWN0aW9ucyxcbiAgICBEaWFsb2dDb250ZW50LFxuICAgIERpYWxvZ1RpdGxlLFxuICAgIEZvcm1Db250cm9sLFxuICAgIElucHV0TGFiZWwsXG4gICAgTWVudUl0ZW0sXG4gICAgU2VsZWN0LFxuICAgIFRleHRGaWVsZCxcbiAgICBUeXBvZ3JhcGh5LFxufSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgdHlwZSBXb3Jrc3BhY2VSZXNwb25zZSB9IGZyb20gJ0AvYXBpL3dvcmtzcGFjZXMnXG5pbXBvcnQgeyB0eXBlIEluc3RhbmNlUmVzcG9uc2UgfSBmcm9tICdAL2FwaS9pbnN0YW5jZXMnXG5cbmludGVyZmFjZSBDcmVhdGVBUElLZXlEaWFsb2dQcm9wcyB7XG4gICAgb3BlbjogYm9vbGVhblxuICAgIGFjdGl2ZVRlbmFudElkPzogc3RyaW5nIHwgbnVsbFxuICAgIHdvcmtzcGFjZUxpc3Q6IFdvcmtzcGFjZVJlc3BvbnNlW11cbiAgICBpbnN0YW5jZUxpc3Q6IEluc3RhbmNlUmVzcG9uc2VbXVxuICAgIHNlbGVjdGVkV29ya3NwYWNlSWQ6IHN0cmluZ1xuICAgIHNlbGVjdGVkSW5zdGFuY2VJZDogc3RyaW5nXG4gICAga2V5TmFtZTogc3RyaW5nXG4gICAgd29ya3NwYWNlc0xvYWRpbmc6IGJvb2xlYW5cbiAgICBpbnN0YW5jZXNMb2FkaW5nOiBib29sZWFuXG4gICAgd29ya3NwYWNlTG9hZEVycm9yOiBzdHJpbmcgfCBudWxsXG4gICAgaW5zdGFuY2VMb2FkRXJyb3I6IHN0cmluZyB8IG51bGxcbiAgICBjcmVhdGluZzogYm9vbGVhblxuICAgIG9uQ2xvc2U6ICgpID0+IHZvaWRcbiAgICBvbldvcmtzcGFjZUNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkluc3RhbmNlQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uS2V5TmFtZUNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvblN1Ym1pdDogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVBUElLZXlEaWFsb2cocHJvcHM6IENyZWF0ZUFQSUtleURpYWxvZ1Byb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBvcGVuLFxuICAgICAgICBhY3RpdmVUZW5hbnRJZCxcbiAgICAgICAgd29ya3NwYWNlTGlzdCxcbiAgICAgICAgaW5zdGFuY2VMaXN0LFxuICAgICAgICBzZWxlY3RlZFdvcmtzcGFjZUlkLFxuICAgICAgICBzZWxlY3RlZEluc3RhbmNlSWQsXG4gICAgICAgIGtleU5hbWUsXG4gICAgICAgIHdvcmtzcGFjZXNMb2FkaW5nLFxuICAgICAgICBpbnN0YW5jZXNMb2FkaW5nLFxuICAgICAgICB3b3Jrc3BhY2VMb2FkRXJyb3IsXG4gICAgICAgIGluc3RhbmNlTG9hZEVycm9yLFxuICAgICAgICBjcmVhdGluZyxcbiAgICAgICAgb25DbG9zZSxcbiAgICAgICAgb25Xb3Jrc3BhY2VDaGFuZ2UsXG4gICAgICAgIG9uSW5zdGFuY2VDaGFuZ2UsXG4gICAgICAgIG9uS2V5TmFtZUNoYW5nZSxcbiAgICAgICAgb25TdWJtaXQsXG4gICAgfSA9IHByb3BzXG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RGlhbG9nXG4gICAgICAgICAgICBvcGVuPXtvcGVufVxuICAgICAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgICAgIG1heFdpZHRoPVwic21cIlxuICAgICAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgICAgICBQYXBlclByb3BzPXt7XG4gICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAzLFxuICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yOiAnYmFja2dyb3VuZC5wYXBlcicsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogJ25vbmUnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBzeD17eyBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiAndGV4dC5wcmltYXJ5JywgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkJywgYm9yZGVyQ29sb3I6ICdkaXZpZGVyJywgcGI6IDIgfX0+XG4gICAgICAgICAgICAgICAgQ3JlYXRlIE5ldyBBUEkgS2V5XG4gICAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XG4gICAgICAgICAgICAgICAgeyFhY3RpdmVUZW5hbnRJZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxBbGVydCBzZXZlcml0eT1cIndhcm5pbmdcIiBzeD17eyBtdDogMiwgbWI6IDIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYW4gYWN0aXZlIHRlbmFudCAod29ya3NwYWNlIHN3aXRjaGVyKSBiZWZvcmUgY3JlYXRpbmcgYSBrZXkuXG4gICAgICAgICAgICAgICAgICAgIDwvQWxlcnQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Rm9ybUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgICAgICAgICAgICAgI
374HN4PXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdDogMiwgbWI6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpSW5wdXRMYWJlbC1yb290JzogeyBjb2xvcjogJ3RleHQuc2Vjb25kYXJ5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUlucHV0TGFiZWwtcm9vdC5NdWktZm9jdXNlZCc6IHsgY29sb3I6ICd0ZXh0LnNlY29uZGFyeScgfSxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFhY3RpdmVUZW5hbnRJZCB8fCB3b3Jrc3BhY2VzTG9hZGluZ31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGlkPVwiYXBpLWtleS13b3Jrc3BhY2UtbGFiZWxcIj5Xb3Jrc3BhY2U8L0lucHV0TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsSWQ9XCJhcGkta2V5LXdvcmtzcGFjZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIldvcmtzcGFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWRXb3Jrc3BhY2VJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25Xb3Jrc3BhY2VDaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgTWVudVByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFwZXJQcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmdjb2xvcjogJ2JhY2tncm91bmQucGFwZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICdkaXZpZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt3b3Jrc3BhY2VMaXN0Lm1hcCgod3MpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0ga2V5PXt3cy5pZH0gdmFsdWU9e3dzLmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3dzLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L0Zvcm1Db250cm9sPlxuICAgICAgICAgICAgICAgIHt3b3Jrc3BhY2VzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3ggc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAxLCBtYjogMiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzIHNpemU9ezE0fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImNhcHRpb25cIiBjb2xvcj1cInRleHQuc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGluZyB3b3Jrc3BhY2VzLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge3dvcmtzcGFjZUxvYWRFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxBbGVydCBzZXZlcml0eT1cImVycm9yXCIgc3g9e3sgbWI6IDIsIGJvcmRlclJhZGl1czogMS41IH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge3dvcmtzcGFjZUxvYWRFcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIG1iOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUlucHV0TGFiZWwtcm9vdCc6IHsgY29sb3I6ICd0ZXh0LnNlY29uZGFyeScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlJbnB1dExhYmVsLXJvb3QuTXVpLWZvY3VzZWQnOiB7IGNvbG9yOiAndGV4dC5zZWNvbmRhcnknIH0sXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0ZWRXb3Jrc3BhY2VJZCB8fCBpbnN0YW5jZXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgaWQ9XCJhcGkta2V5LWluc3RhbmNlLWxhYmVsXCI+SW5zdGFuY2U8L0lucHV0TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsSWQ9XCJhcGkta2V5LWluc3RhbmNlLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiSW5zdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlbGVjdGVkSW5zdGFuY2VJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25JbnN0YW5jZUNoYW5nZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBNZW51UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXBlclByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yOiAnYmFja2dyb3VuZC5wYXBlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ2RpdmlkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2luc3RhbmNlTGlzdC5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRXb3Jrc3B
374hY2VJZCAmJiAhaW5zdGFuY2VzTG9hZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0gdmFsdWU9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gSW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUxpc3QubWFwKChpbnN0KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9e2luc3QuaWR9IHZhbHVlPXtpbnN0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbnN0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvRm9ybUNvbnRyb2w+XG4gICAgICAgICAgICAgICAge2luc3RhbmNlc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8Qm94IHN4PXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogMSwgbWI6IDIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzcyBzaXplPXsxNH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJjYXB0aW9uXCIgY29sb3I9XCJ0ZXh0LnNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgaW5zdGFuY2VzLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2luc3RhbmNlTG9hZEVycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEFsZXJ0IHNldmVyaXR5PVwiZXJyb3JcIiBzeD17eyBtYjogMiwgYm9yZGVyUmFkaXVzOiAxLjUgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aW5zdGFuY2VMb2FkRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIDwvQWxlcnQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRXb3Jrc3BhY2VJZCAmJiAhaW5zdGFuY2VzTG9hZGluZyAmJiBpbnN0YW5jZUxpc3QubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkyXCIgY29sb3I9XCJ0ZXh0LnNlY29uZGFyeVwiIHN4PXt7IG1iOiAyIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gYWN0aXZlIGluc3RhbmNlcyBpbiB0aGlzIHdvcmtzcGFjZS4gQ3JlYXRlIGFuIGluc3RhbmNlIGZpcnN0LlxuICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIktleSBuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuLCBQcm9kdWN0aW9uIEFQSVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtrZXlOYW1lfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IG9uS2V5TmFtZUNoYW5nZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0ZWRJbnN0YW5jZUlkfVxuICAgICAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7IG1heExlbmd0aDogMTAwIH19XG4gICAgICAgICAgICAgICAgICAgIGhlbHBlclRleHQ9XCJTaG93biBpbiB5b3VyIEFQSSBrZXlzIGxpc3QgKG1heCAxMDAgY2hhcmFjdGVycykuXCJcbiAgICAgICAgICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlJbnB1dExhYmVsLXJvb3QnOiB7IGNvbG9yOiAndGV4dC5zZWNvbmRhcnknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpSW5wdXRMYWJlbC1yb290Lk11aS1mb2N1c2VkJzogeyBjb2xvcjogJ3RleHQuc2Vjb25kYXJ5JyB9LFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgICAgICAgICA8RGlhbG9nQWN0aW9ucyBzeD17eyBweDogMywgcGI6IDIsIGJvcmRlclRvcDogJzFweCBzb2xpZCcsIGJvcmRlckNvbG9yOiAnZGl2aWRlcicsIHB0OiAyIH19PlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAndGV4dC5zZWNvbmRhcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnZGl2aWRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJjpob3Zlcic6IHsgYmdjb2xvcjogKHRoZW1lKSA9PiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyA/ICcjMWYxZjFmJyA6ICcjZjlmYWZiJyB9LFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB2Y
374XJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25TdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICFhY3RpdmVUZW5hbnRJZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGVjdGVkSW5zdGFuY2VJZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIWtleU5hbWUudHJpbSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGluZyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlc0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlc0xvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB4OiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmdjb2xvcjogKHRoZW1lKSA9PiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyA/ICcjM2YzZjQ2JyA6ICcjMWExYTJlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmOmhvdmVyJzogeyBiZ2NvbG9yOiAodGhlbWUpID0+IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnID8gJyM1MjUyNWInIDogJyMyZDJkNDQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7IGJnY29sb3I6ICh0aGVtZSkgPT4gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnZGFyaycgPyAnIzI3MjcyQScgOiB1bmRlZmluZWQsIGNvbG9yOiAodGhlbWUpID0+IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnID8gJyM3MTcxN2EnIDogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Y3JlYXRpbmcgPyA8Q2lyY3VsYXJQcm9ncmVzcyBzaXplPXsyMH0gY29sb3I9XCJpbmhlcml0XCIgLz4gOiAnQ3JlYXRlIEtleSd9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XG4gICAgICAgIDwvRGlhbG9nPlxuICAgIClcbn1cbiJdLCJmaWxlIjoiL2FwcC9zcmMvZmVhdHVyZXMvZGV2ZWxvcGVyLXN0dWRpby9jb21wb25lbnRzL2FwaS1rZXlzL0NyZWF0ZUFQSUtleURpYWxvZy50c3gifQ==

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.