PageSourceSearch

http://cdvhntthaibinh.edu.vn/src/pages/user/training/Training.tsx

js cdvhntthaibinh.edu.vn collected 2026-10-03 02:07:30 UTC 21,629 bytes, 235 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/pages/user/training/Training.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=dd74cbdf"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"];
2import RefreshRuntime from "/@react-refresh";
3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
4let prevRefreshReg;
5let prevRefreshSig;
6if (import.meta.hot && !inWebWorker) {
7  if (!window.__vite_plugin_react_preamble_installed__) {
8    throw new Error("@vitejs/plugin-react can't detect preamble. Something is wrong. See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201");
9  }
10  prevRefreshReg = window.$RefreshReg$;
11  prevRefreshSig = window.$RefreshSig$;
12  window.$RefreshReg$ = (type, id) => {
13    RefreshRuntime.register(type, "/app/src/pages/user/training/Training.tsx " + id);
14  };
15  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
16}
17var _s = $RefreshSig$();
18import __vite__cjsImport3_react from "/node_modules/.vite/deps/react.js?v=dd74cbdf"; const useEffect = __vite__cjsImport3_react["useEffect"]; const useState = __vite__cjsImport3_react["useState"];
19import { Breadcrumb, Spin, Button, Input } from "/node_modules/.vite/deps/antd.js?v=dd74cbdf";
20import { HomeOutlined, SearchOutlined } from "/node_modules/.vite/deps/@ant-design_icons.js?v=dd74cbdf";
21import { GetTrainningApi } from "/src/api/homeApi.ts";
22const pageSize = 9;
23const Training = () => {
24  _s();
25  const [activeTopic, setActiveTopic] = useState(null);
26  const [blogs, setBlogs] = useState([]);
27  const [pageIndex, setPageIndex] = useState(1);
28  const [totalPage, setTotalPage] = useState(1);
29  const [loading, setLoading] = useState(false);
30  const [loadingMore, setLoadingMore] = useState(false);
31  const [searchValue, setSearchValue] = useState("");
32  const [appliedSearch, setAppliedSearch] = useState("");
33  useEffect(() => {
34    document.title = "Đào tạo";
35    fetchBlogs("", 1, false);
36  }, []);
37  const fetchBlogs = async (title, page, isLoadMore = false) => {
38    if (isLoadMore) {
39      setLoadingMore(true);
40    } else {
41      setLoading(true);
42    }
43    try {
44      const res = await GetTrainningApi({
45        pagingParams: {
46          orderBy: "",
47          keyword: "",
48          pageIndex: page,
49          isPaging: true,
50          pageSize
51        },
52        filterParams: {
53          title
54        }
55      });
56      const responseData = res.data;
57      setTotalPage(responseData.meta.totalPage);
58      if (isLoadMore) {
59        setBlogs((prev) => [...prev, ...responseData.data]);
60      } else {
61        setBlogs(responseData.data);
62      }
63    } catch (err) {
64      console.error("Error fetching blogs", err);
65    } finally {
66      setLoading(false);
67      setLoadingMore(false);
68    }
69  };
70  const handleLoadMore = () => {
71    const nextPage = pageIndex + 1;
72    setPageIndex(nextPage);
73    fetchBlogs(appliedSearch, nextPage, true);
74  };
75  const handleSearch = () => {
76    setAppliedSearch(searchValue);
77    setPageIndex(1);
78    fetchBlogs(searchValue, 1, false);
79  };
80  return /* @__PURE__ */ jsxDEV("div", { className: "mx-auto", children: [
81    /* @__PURE__ */ jsxDEV(
82      Breadcrumb,
83      {
84        items: [
85          { href: "/", title: /* @__PURE__ */ jsxDEV(HomeOutlined, {}, void 0, false, {
86            fileName: "/app/src/pages/user/training/Training.tsx",
87            lineNumber: 77,
88            columnNumber: 29
89          }, this) },
90          { title: "Đào tạo" }
91        ]
92      },
93      void 0,
94      false,
95      {
96        fileName: "/app/src/pages/user/training/Training.tsx",
97        lineNumber: 75,
98        columnNumber: 13
99      },
100      this
101    ),
102    /* @__PURE__ */ jsxDEV("div", { className: "mt-4", children: [
103      /* @__PURE__ */ jsxDEV("div", { className: "flex justify-end ", children: [
104        /* @__PURE__ */ jsxDEV(
105          Input,
106          {
107            placeholder: "Tìm kiếm bài viết...",
108            prefix: /* @__PURE__ */ jsxDEV(SearchOutlined, {}, void 0, false, {
109              fileName: "/app/src/pages/user/training/Training.tsx",
110              lineNumber: 86,
111              columnNumber: 21
112            }, this),
113            value: searchValue,
114            onChange: (e) => setSearchValue(e.target.value),
115            onPressEnter: handleSearch,
116            style: { width: 300 },
117            allowClear: true
118          },
119          void 0,
120          false,
121          {
122            fileName: "/app/src/pages/user/training/Training.tsx",
123            lineNumber: 84,
124            columnNumber: 21
125          },
126          this
127        ),
128        /* @__PURE__ */ jsxDEV(Button, { type: "primary", onClick: handleSearch, className: "ml-2", children: "Tìm kiếm" }, void 0, false, {
129          fileName: "/app/src/pages/user/training/Training.tsx",
130          lineNumber: 93,
131          columnNumber: 21
132        }, this)
133      ] }, void 0, true, {
134        fileName: "/app/src/pages/user/training/Training.tsx",
135        lineNumber: 83,
136        columnNumber: 17
137      }, this),
138      loading ? /* @__PURE__ */ jsxDEV("div", { className: "flex justify-center items-center min-h-[200px]", children: /* @__PURE__ */ jsxDEV(Spin, {}, void 0, false, {
139        fileName: "/app/src/pages/user/training/Training.tsx",
140        lineNumber: 100,
141        columnNumber: 25
142      }, this) }, void 0, false, {
143        fileName: "/app/src/pages/user/training/Training.tsx",
144        lineNumber: 99,
145        columnNumber: 9
146      }, this) : /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-4 mt-4", children: blogs.map(
147        (item) => /* @__PURE__ */ jsxDEV("a", { href: `/${item.href}`, className: "bg-white rounded shadow hover:shadow-md transition overflow-hidden", children: [
148          /* @__PURE__ */ jsxDEV("img", { src: item.cover, alt: item.title, className: "w-full h-48 object-cover" }, void 0, false, {
149            fileName: "/app/src/pages/user/training/Training.tsx",
150            lineNumber: 106,
151            columnNumber: 25
152          }, this),
153          /* @__PURE__ */ jsxDEV("div", { className: "p-3", children: [
154            /* @__PURE__ */ jsxDEV(
155              "span",
156              {
157                className: "text-xs font-medium px-2 py-1 rounded",
158                style: { backgroundColor: item.color, color: "#fff" },
159                children: item.topic
160              },
161              void 0,
162              false,
163              {
164                fileName: "/app/src/pages/user/training/Training.tsx",
165                lineNumber: 108,
166                columnNumber: 29
167              },
168              this
169            ),
170            /* @__PURE__ */ jsxDEV("h3", { className: "text-base font-semibold text-gray-800 mt-2 line-clamp-2", children: item.title }, void 0, false, {
171              fileName: "/app/src/pages/user/training/Training.tsx",
172              lineNumber: 114,
173              columnNumber: 29
174            }, this),
175            /* @__PURE__ */ jsxDEV("p", { className: "text-sm text-gray-600 mt-1 line-clamp-3", children: item.description }, void 0, false, {
176              fileName: "/app/src/pages/user/training/Training.tsx",
177              lineNumber: 115,
178              columnNumber: 29
179            }, this)
180          ] }, void 0, true, {
181            fileName: "/app/src/pages/user/training/Training.tsx",
182            lineNumber: 107,
183            columnNumber: 25
184          }, this)
185        ] }, item.id, true, {
186          fileName: "/app/src/pages/user/training/Training.tsx",
187          lineNumber: 105,
188          columnNumber: 11
189        }, this)
190      ) }, void 0, false, {
191        fileName: "/app/src/pages/user/training/Training.tsx",
192        lineNumber: 103,
193        columnNumber: 9
194      }, this),
195      !loading && pageIndex < totalPage && /* @__PURE__ */ jsxDEV("div", { className: "text-center mt-6", children: /* @__PURE__ */ jsxDEV(Button, { loading: loadingMore, onClick: handleLoadMore, children: "Xem thêm" }, void 0, false, {
196        fileName: "/app/src/pages/user/training/Training.tsx",
197        lineNumber: 124,
198        columnNumber: 21
199      }, this) }, void 0, false, {
200        fileName: "/app/src/pages/user/training/Training.tsx",
201        lineNumber: 123,
202        columnNumber: 9
203      }, this)
204    ] }, void 0, true, {
205      fileName: "/app/src/pages/user/training/Training.tsx",
206      lineNumber: 82,
207      columnNumber: 13
208    }, this)
209  ] }, void 0, true, {
210    fileName: "/app/src/pages/user/training/Training.tsx",
211    lineNumber: 74,
212    columnNumber: 5
213  }, this);
214};
215_s(Training, "1XXuc6l08W52+yGQk6+1pfh2fWM=");
216_c = Training;
217export default Training;
218var _c;
219$RefreshReg$(_c, "Training");
220if (import.meta.hot && !inWebWorker) {
221  window.$RefreshReg$ = prevRefreshReg;
222  window.$RefreshSig$ = prevRefreshSig;
223}
224if (import.meta.hot && !inWebWorker) {
225  RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
226    RefreshRuntime.registerExportsForReactRefresh("/app/src/pages/user/training/Training.tsx", currentExports);
227    import.meta.hot.accept((nextExports) => {
228      if (!nextExports) return;
229      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/app/src/pages/user/training/Training.tsx", currentExports, nextExports);
230      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
231    });
232  });
233}
234
235//# sourceMappingURL=data:application/json;base64,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BQUFBQTtBQUFBQSxjQUpWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUtBO0FBQUEsWUFDQSx1QkFBQyxRQUFHLFdBQVUsMkRBQTJESixlQUFLMUIsU0FBOUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBb0Y7QUFBQSxZQUNwRix1QkFBQyxPQUFFLFdBQVUsMkNBQTJDMEIsZUFBS0ssZUFBN0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBeUU7QUFBQSxlQVI3RTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQVNBO0FBQUEsYUFYUUwsS0FBS00sSUFBYjtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBWUE7QUFBQSxNQUNILEtBZkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQWdCQTtBQUFBLE1BR0gsQ0FBQzFDLFdBQVdKLFlBQVlFLGFBQ3JCLHVCQUFDLFNBQUksV0FBVSxvQkFDZixpQ0FBQyxVQUFPLFNBQVNJLGFBQWEsU0FBU3lCLGdCQUFlLHdCQUF0RDtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBRUEsS0FIQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBSUE7QUFBQSxTQTdDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBK0NBO0FBQUEsT0F2REo7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQXdEQTtBQUVSO0FBQUVwQyxHQTVISUQsVUFBUTtBQUFBcUQsS0FBUnJEO0FBOEhOLGVBQWVBO0FBQVMsSUFBQXFEO0FBQUFDLGFBQUFELElBQUEiLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsIkJyZWFkY3J1bWIiLCJTcGluIiwiQnV0dG9uIiwiSW5wdXQiLCJIb21lT3V0bGluZWQiLCJTZWFyY2hPdXRsaW5lZCIsIkdldFRyYWlubmluZ0FwaSIsInBhZ2VTaXplIiwiVHJhaW5pbmciLCJfcyIsImFjdGl2ZVRvcGljIiwic2V0QWN0aXZlVG9waWMiLCJibG9ncyIsInNldEJsb2dzIiwicGFnZUluZGV4Iiwic2V0UGFnZUluZGV4IiwidG90YWxQYWdlIiwic2V0VG90YWxQYWdlIiwibG9hZGluZyIsInNldExvYWRpbmciLCJsb2FkaW5nTW9yZSIsInNldExvYWRpbmdNb3JlIiwic2VhcmNoVmFsdWUiLCJzZXRTZWFyY2hWYWx1ZSIsImFwcGxpZWRTZWFyY2giLCJzZXRBcHBsaWVkU2VhcmNoIiwidXNlRWZmZWN0IiwiZG9jdW1lbnQiLCJ0aXRsZSIsImZldGNoQmxvZ3MiLCJwYWdlIiwiaXNMb2FkTW9yZSIsInJlcyIsInBhZ2luZ1BhcmFtcyIsIm9yZGVyQnkiLCJrZXl3b3JkIiwiaXNQYWdpbmciLCJmaWx0ZXJQYXJhbXMiLCJyZXNwb25zZURhdGEiLCJkYXRhIiwibWV0YSIsInByZXYiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJoYW5kbGVMb2FkTW9yZSIsIm5leHRQYWdlIiwiaGFuZGxlU2VhcmNoIiwiaHJlZiIsImUiLCJ0YXJnZXQiLCJ2YWx1ZSIsIndpZHRoIiwibWFwIiwiaXRlbSIsImNvdmVyIiwiYmFja2dyb3VuZENvbG9yIiwiY29sb3IiLCJ0b3BpYyIsImRlc2NyaXB0aW9uIiwiaWQiLCJfYyIsIiRSZWZyZXNoUmVnJCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJUcmFpbmluZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYiwgVGFicywgU3BpbiwgQnV0dG9uLCBJbnB1dCB9IGZyb20gXCJhbnRkXCI7XG5pbXBvcnQgeyBIb21lT3V0bGluZWQsIFNlYXJjaE91dGxpbmVkICB9IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xuaW1wb3J0IHsgR2V0TmV3QmxvZ0J5VG9waWNBcGksIEdldFRyYWlubmluZ0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcG
235kvaG9tZUFwaVwiO1xuXG5jb25zdCBwYWdlU2l6ZSA9IDk7XG5cbmNvbnN0IFRyYWluaW5nID0gKCkgPT4ge1xuICAgIGNvbnN0IFthY3RpdmVUb3BpYywgc2V0QWN0aXZlVG9waWNdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgW2Jsb2dzLCBzZXRCbG9nc10gPSB1c2VTdGF0ZTxhbnlbXT4oW10pO1xuICAgIGNvbnN0IFtwYWdlSW5kZXgsIHNldFBhZ2VJbmRleF0gPSB1c2VTdGF0ZSgxKTtcbiAgICBjb25zdCBbdG90YWxQYWdlLCBzZXRUb3RhbFBhZ2VdID0gdXNlU3RhdGUoMSk7XG4gICAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtsb2FkaW5nTW9yZSwgc2V0TG9hZGluZ01vcmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoXCJcIik7XG4gICAgY29uc3QgW2FwcGxpZWRTZWFyY2gsIHNldEFwcGxpZWRTZWFyY2hdID0gdXNlU3RhdGUoXCJcIik7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC50aXRsZSA9IFwixJDDoG8gdOG6oW9cIjtcbiAgICAgICAgZmV0Y2hCbG9ncyhcIlwiLCAxLCBmYWxzZSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgZmV0Y2hCbG9ncyA9IGFzeW5jICh0aXRsZTogc3RyaW5nLCBwYWdlOiBudW1iZXIsIGlzTG9hZE1vcmUgPSBmYWxzZSkgPT4ge1xuICAgICAgICBpZiAoaXNMb2FkTW9yZSkge1xuICAgICAgICAgICAgc2V0TG9hZGluZ01vcmUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgR2V0VHJhaW5uaW5nQXBpKHtcbiAgICAgICAgICAgIHBhZ2luZ1BhcmFtczoge1xuICAgICAgICAgICAgICAgIG9yZGVyQnk6IFwiXCIsXG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJcIixcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IHBhZ2UsXG4gICAgICAgICAgICAgICAgaXNQYWdpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVyUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzLmRhdGE7XG4gICAgICAgIHNldFRvdGFsUGFnZShyZXNwb25zZURhdGEubWV0YS50b3RhbFBhZ2UpO1xuXG4gICAgICAgIGlmIChpc0xvYWRNb3JlKSB7XG4gICAgICAgICAgICBzZXRCbG9ncyhwcmV2ID0+IFsuLi5wcmV2LCAuLi5yZXNwb25zZURhdGEuZGF0YV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0QmxvZ3MocmVzcG9uc2VEYXRhLmRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgYmxvZ3NcIiwgZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgc2V0TG9hZGluZ01vcmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUxvYWRNb3JlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0UGFnZSA9IHBhZ2VJbmRleCArIDE7XG4gICAgICAgIHNldFBhZ2VJbmRleChuZXh0UGFnZSk7XG4gICAgICAgIGZldGNoQmxvZ3MoYXBwbGllZFNlYXJjaCwgbmV4dFBhZ2UsIHRydWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVTZWFyY2ggPSAoKSA9PiB7XG4gICAgICAgIHNldEFwcGxpZWRTZWFyY2goc2VhcmNoVmFsdWUpO1xuICAgICAgICBzZXRQYWdlSW5kZXgoMSk7XG4gICAgICAgIGZldGNoQmxvZ3Moc2VhcmNoVmFsdWUsIDEsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvXCI+XG4gICAgICAgICAgICA8QnJlYWRjcnVtYlxuICAgICAgICAgICAgICAgIGl0ZW1zPXtbXG4gICAgICAgICAgICAgICAgICAgIHsgaHJlZjogXCIvXCIsIHRpdGxlOiA8SG9tZU91dGxpbmVkIC8+IH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdGl0bGU6IFwixJDDoG8gdOG6oW9cIiB9LFxuICAgICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUw6xtIGtp4bq/bSBiw6BpIHZp4bq/dC4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9ezxTZWFyY2hPdXRsaW5lZCAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoVmFsdWUoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25QcmVzc0VudGVyPXtoYW5kbGVTZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogMzAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0NsZWFyXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVTZWFyY2h9IGNsYXNzTmFtZT1cIm1sLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFTDrG0ga2nhur9tXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgbWluLWgtWzIwMHB4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNwaW4gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0zIGdhcC00IG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAge2Jsb2dzLm1hcChpdGVtID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGtleT17aXRlbS5pZH0gaHJlZj17YC8ke2l0ZW0uaHJlZn1gfSBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkIHNoYWRvdyBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbiBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXtpdG
235VtLmNvdmVyfSBhbHQ9e2l0ZW0udGl0bGV9IGNsYXNzTmFtZT1cInctZnVsbCBoLTQ4IG9iamVjdC1jb3ZlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW0gcHgtMiBweS0xIHJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uY29sb3IsIGNvbG9yOiBcIiNmZmZcIiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0udG9waWN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktODAwIG10LTIgbGluZS1jbGFtcC0yXCI+e2l0ZW0udGl0bGV9PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbXQtMSBsaW5lLWNsYW1wLTNcIj57aXRlbS5kZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7IWxvYWRpbmcgJiYgcGFnZUluZGV4IDwgdG90YWxQYWdlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBtdC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gbG9hZGluZz17bG9hZGluZ01vcmV9IG9uQ2xpY2s9e2hhbmRsZUxvYWRNb3JlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFhlbSB0aMOqbVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PiAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRyYWluaW5nO1xuIl0sImZpbGUiOiIvYXBwL3NyYy9wYWdlcy91c2VyL3RyYWluaW5nL1RyYWluaW5nLnRzeCJ9

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.