PageSourceSearch

https://technicaljournals.org/src/pages/Conferences

js technicaljournals.org collected 2026-10-06 04:56:36 UTC 132,027 bytes, 1,030 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/pages/Conferences.jsx");const useEffect = __vite__cjsImport0_react["useEffect"]; const useMemo = __vite__cjsImport0_react["useMemo"]; const useRef = __vite__cjsImport0_react["useRef"]; const useState = __vite__cjsImport0_react["useState"];const _jsxDEV = __vite__cjsImport9_react_jsxDevRuntime["jsxDEV"];import __vite__cjsImport0_react from "/node_modules/.vite/deps/react.js?v=57f70dd4";
2import { motion } from "/node_modules/.vite/deps/framer-motion.js?v=57f70dd4";
3import { Link } from "/node_modules/.vite/deps/react-router-dom.js?v=57f70dd4";
4import { CalendarDays, ChevronDown, ChevronLeft, ChevronRight, Loader2, MapPin, Search } from "/node_modules/.vite/deps/lucide-react.js?v=57f70dd4";
5import confBg from "/src/assets/images/technical-journals-academic-research-conferences.webp?import";
6import conferenceCta from "/src/assets/images/technical-journals-conference-calendar-partnership-cta.webp?import";
7import { fetchConferences } from "/src/services/conferenceService.js";
8import { resolveImageUrl } from "/src/services/api.js";
9import useDebounce from "/src/hooks/useDebounce.js";
10var _jsxFileName = "/var/opt/Technical-Journals/src/pages/Conferences.jsx";
11import __vite__cjsImport9_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=57f70dd4";
12var _s = $RefreshSig$(), _s2 = $RefreshSig$();
13/* =========================================================
14CONFIG
15========================================================= */
16const PAGE_SIZE = 5;
17const colorStyles = [
18	"from-[#064391] to-[#075fc9]",
19	"from-[#168646] to-[#28ae61]",
20	"from-[#6841b4] to-[#945ad9]",
21	"from-[#f06416] to-[#ff8a24]",
22	"from-[#0495a8] to-[#10bac1]"
23];
24/* =========================================================
25HELPERS
26========================================================= */
27function text(value) {
28	return String(value ?? "").trim();
29}
30function list(value) {
31	if (!value) {
32		return [];
33	}
34	if (Array.isArray(value)) {
35		return value.map(text).filter(Boolean);
36	}
37	const raw = text(value);
38	if (!raw) {
39		return [];
40	}
41	if (raw.startsWith("[") && raw.endsWith("]")) {
42		try {
43			const parsed = JSON.parse(raw);
44			if (Array.isArray(parsed)) {
45				return parsed.map(text).filter(Boolean);
46			}
47		} catch {}
48	}
49	return raw.split(/[,;\n]/).map((item) => item.trim()).filter(Boolean);
50}
51/* =========================================================
52NORMALIZE BACKEND DATA
53========================================================= */
54function normalizeConference(row) {
55	return {
56		...row,
57		type: row.conference_type || row.type || "",
58		subject: row.subject_area || row.subject || "",
59		date: row.display_date || row.start_date || "",
60		detailsUrl: `/conferences/${encodeURIComponent(row.slug || row.id)}`,
61		image: resolveImageUrl(row.image || row.cover_image)
62	};
63}
64/* =========================================================
65DISPLAY HELPERS
66========================================================= */
67function conferenceType(conference) {
68	return text(conference.type || conference.conference_type) || "Academic Conference";
69}
70function conferenceSubject(conference) {
71	return text(conference.subject || conference.subject_area) || "Multidisciplinary Research";
72}
73function conferenceDate(conference) {
74	return text(conference.display_date || conference.date || conference.start_date) || "Date to be announced";
75}
76function conferenceLocation(conference) {
77	return text(conference.location || conference.venue || conference.city) || "Location to be announced";
78}
79function conferenceOrganizer(conference) {
80	return text(conference.organizer || conference.organized_by || conference.university) || "Technical Journals";
81}
82/* =========================================================
83CONFERENCE COVER IMAGE
84
85Proper portrait conference poster ratio.
86========================================================= */
87function ConferenceImage({ conference, code, index }) {
88	_s();
89	const [imageError, setImageError] = useState(false);
90	const showImage = Boolean(conference.image) && !imageError;
91	return /* @__PURE__ */ _jsxDEV("div", {
92		className: "\n        relative\n        mx-auto\n        aspect-[0.72/1]\n        w-[130px]\n        shrink-0\n        overflow-hidden\n        rounded-[7px]\n        border\n        border-[#DDE4ED]\n        bg-white\n        shadow-[0_4px_14px_rgba(9,35,75,0.08)]\n\n        min-[420px]:w-[138px]\n\n        sm:mx-0\n        sm:w-[122px]\n\n        md:w-[128px]\n\n        lg:w-[132px]\n\n        xl:w-[132px]\n      ",
93		children: showImage ? /* @__PURE__ */ _jsxDEV("img", {
94			src: conference.image,
95			alt: conference.title ? `${conference.title} conference cover` : "Conference cover",
96			loading: "lazy",
97			draggable: "false",
98			onError: () => setImageError(true),
99			className: "\n            h-full\n            w-full\n            bg-white\n            object-contain\n          "
100		}, void 0, false, {
101			fileName: _jsxFileName,
102			lineNumber: 254,
103			columnNumber: 9
104		}, this) : /* @__PURE__ */ _jsxDEV("div", {
105			className: `
106            grid
107            h-full
108            w-full
109            place-items-center
110            bg-gradient-to-br
111            px-3
112            text-center
113            text-white
114
115            ${colorStyles[index % colorStyles.length]}
116          `,
117			children: /* @__PURE__ */ _jsxDEV("div", {
118				className: "min-w-0",
119				children: [
120					/* @__PURE__ */ _jsxDEV("p", {
121						className: "\n                break-words\n                text-[14px]\n                font-bold\n                leading-5\n              ",
122						children: code.split(" ").slice(0, 2).join(" ")
123					}, void 0, false, {
124						fileName: _jsxFileName,
125						lineNumber: 298,
126						columnNumber: 13
127					}, this),
128					/* @__PURE__ */ _jsxDEV("div", { className: "\n                mx-auto\n                mt-2\n                h-[2px]\n                w-7\n                rounded-full\n                bg-white/50\n              " }, void 0, false, {
129						fileName: _jsxFileName,
130						lineNumber: 315,
131						columnNumber: 13
132					}, this),
133					/* @__PURE__ */ _jsxDEV("p", {
134						className: "\n                mt-2\n                text-[9px]\n                font-medium\n                uppercase\n                tracking-[0.08em]\n                text-white/75\n              ",
135						children: "Conference"
136					}, void 0, false, {
137						fileName: _jsxFileName,
138						lineNumber: 326,
139						columnNumber: 13
140					}, this)
141				]
142			}, void 0, true, {
143				fileName: _jsxFileName,
144				lineNumber: 297,
145				columnNumber: 11
146			}, this)
147		}, void 0, false, {
148			fileName: _jsxFileName,
149			lineNumber: 278,
150			columnNumber: 9
151		}, this)
152	}, void 0, false, {
153		fileName: _jsxFileName,
154		lineNumber: 227,
155		columnNumber: 5
156	}, this);
157}
158_s(ConferenceImage, "RJT49Ib2xpWrccfGWrukXGlUBG0=");
159_c = ConferenceImage;
160/* =========================================================
161PAGE
162========================================================= */
163export default function Conferences() {
164	_s2();
165	const resultsRef = useRef(null);
166	const [keyword, setKeyword] = useState("");
167	const [sortBy, setSortBy] = useState("upcoming");
168	const [page, setPage] = useState(1);
169	const [pageItems, setPageItems] = useState([]);
170	const [totalItems, setTotalItems] = useState(0);
171	const [totalPages, setTotalPages] = useState(1);
172	const [loading, setLoading] = useState(true);
173	const [loadError, setLoadError] = useState("");
174	const [reloadKey, setReloadKey] = useState(0);
175	const debouncedKeyword = useDebounce(keyword, 350);
176	/* =======================================================
177	PAGE TITLE
178	======================================================= */
179	useEffect(() => {
180		document.title = "Conferences | Technical Journals";
181	}, []);
182	/* =======================================================
183	FETCH CONFERENCES
184	
185	NO FILTERS
186	======================================================= */
187	useEffect(() => {
188		const controller = new AbortController();
189		async function loadConferences() {
190			try {
191				setLoading(true);
192				setLoadError("");
193				const params = {
194					page,
195					limit: PAGE_SIZE,
196					search: debouncedKeyword || undefined,
197					sort: sortBy
198				};
199				const response = await fetchConferences(params, controller.signal);
200				if (controller.signal.aborted) {
201					return;
202				}
203				const rows = Array.isArray(response?.conferences) ? response.conferences : Array.isArray(response?.data) ? response.data : Array.isArray(response) ? response : [];
204				const normalized = rows.map(normalizeConference);
205				const pagination = response?.pagination || {};
206				const nextTotalItems = Number(pagination.totalItems ?? pagination.total ?? normalized.length) || 0;
207				const nextTotalPages = Math.max(1, Number(pagination.totalPages ?? pagination.pages ?? 1) || 1
207);
208				setPageItems(normalized);
209				setTotalItems(nextTotalItems);
210				setTotalPages(nextTotalPages);
211			} catch (error) {
212				if (error?.name === "AbortError" || controller.signal.aborted) {
213					return;
214				}
215				console.error("Conference loading error:", error);
216				setLoadError("Unable to load conferences. Please try again.");
217				setPageItems([]);
218				setTotalItems(0);
219				setTotalPages(1);
220			} finally {
221				if (!controller.signal.aborted) {
222					setLoading(false);
223				}
224			}
225		}
226		loadConferences();
227		return () => controller.abort();
228	}, [
229		page,
230		sortBy,
231		debouncedKeyword,
232		reloadKey
233	]);
234	/* =======================================================
235	PAGE VALIDATION
236	======================================================= */
237	useEffect(() => {
238		if (page > totalPages) {
239			setPage(totalPages);
240		}
241	}, [page, totalPages]);
242	/* =======================================================
243	RESULT RANGE
244	======================================================= */
245	const firstResult = totalItems > 0 ? (page - 1) * PAGE_SIZE + 1 : 0;
246	const lastResult = Math.min(page * PAGE_SIZE, totalItems);
247	/* =======================================================
248	PAGINATION
249	======================================================= */
250	const visiblePages = useMemo(() => {
251		if (totalPages <= 5) {
252			return Array.from({ length: totalPages }, (_, index) => index + 1);
253		}
254		if (page <= 3) {
255			return [
256				1,
257				2,
258				3,
259				4,
260				"end-ellipsis",
261				totalPages
262			];
263		}
264		if (page >= totalPages - 2) {
265			return [
266				1,
267				"start-ellipsis",
268				totalPages - 3,
269				totalPages - 2,
270				totalPages - 1,
271				totalPages
272			];
273		}
274		return [
275			1,
276			"start-ellipsis",
277			page - 1,
278			page,
279			page + 1,
280			"end-ellipsis",
281			totalPages
282		];
283	}, [page, totalPages]);
284	/* =======================================================
285	CHANGE PAGE
286	======================================================= */
287	function changePage(nextPage) {
288		const safePage = Math.min(Math.max(nextPage, 1), totalPages);
289		setPage(safePage);
290		requestAnimationFrame(() => {
291			resultsRef.current?.scrollIntoView({
292				behavior: "smooth",
293				block: "start"
294			});
295		});
296	}
297	/* =======================================================
298	CLEAR SEARCH
299	======================================================= */
300	function clearSearch() {
301		setKeyword("");
302		setPage(1);
303	}
304	/* =======================================================
305	UI
306	======================================================= */
307	return /* @__PURE__ */ _jsxDEV("main", {
308		className: "\n        overflow-x-hidden\n        bg-white\n      ",
309		children: [
310			/* @__PURE__ */ _jsxDEV("section", {
311				className: "\n          relative\n          isolate\n          min-h-[330px]\n          overflow-hidden\n          bg-[#03183F]\n          text-white\n\n          sm:min-h-[350px]\n\n          lg:min-h-[360px]\n        ",
312				style: {
313					backgroundImage: `
314            linear-gradient(
315              90deg,
316              rgba(3,18,49,.98) 0%,
317              rgba(3,18,49,.91) 36%,
318              rgba(3,18,49,.22) 72%,
319              rgba(3,18,49,.04) 100%
320            ),
321            url(${confBg})
322          `,
323					backgroundPosition: "center",
324					backgroundRepeat: "no-repeat",
325					backgroundSize: "cover"
326				},
327				children: [/* @__PURE__ */ _jsxDEV("div", { className: "\n            pointer-events-none\n            absolute\n            inset-0\n            -z-10\n            bg-[#03183F]/15\n\n            md:bg-transparent\n          " }, void 0, false, {
328					fileName: _jsxFileName,
329					lineNumber: 745,
330					columnNumber: 9
331				}, this), /* @__PURE__ */ _jsxDEV("div", {
332					className: "\n            mx-auto\n            flex\n            min-h-[330px]\n            w-full\n            max-w-[1440px]\n            items-center\n            px-4\n            py-9\n\n            sm:min-h-[350px]\n            sm:px-8\n\n            lg:min-h-[360px]\n            lg:px-16\n\n            xl:px-20\n          ",
333					children: /* @__PURE__ */ _jsxDEV("div", {
334						className: "\n              w-full\n              max-w-[650px]\n            ",
335						children: [/* @__PURE__ */ _jsxDEV(motion.h1, {
336							initial: {
337								opacity: 0,
338								y: 18
339							},
340							animate: {
341								opacity: 1,
342								y: 0
343							},
344							transition: { duration: .55 },
345							className: "\n                text-[30px]\n                font-[600]\n                tracking-[-0.02em]\n\n                sm:text-[38px]\n              ",
346							children: "Conferences"
347						}, void 0, false, {
348							fileName: _jsxFileName,
349							lineNumber: 783,
350							columnNumber: 13
351						}
351, this), /* @__PURE__ */ _jsxDEV(motion.p, {
352							initial: {
353								opacity: 0,
354								y: 14
355							},
356							animate: {
357								opacity: 1,
358								y: 0
359							},
360							transition: {
361								duration: .55,
362								delay: .08
363							},
364							className: "\n                mt-3\n                max-w-[520px]\n                text-[13px]\n                leading-6\n                text-white/90\n\n                sm:text-[15px]\n                sm:leading-7\n              ",
365							children: "Discover and participate in leading conferences associated with Technical Journals. Share your research, connect with experts, and contribute to advancing knowledge."
366						}, void 0, false, {
367							fileName: _jsxFileName,
368							lineNumber: 807,
369							columnNumber: 13
370						}, this)]
371					}, void 0, true, {
372						fileName: _jsxFileName,
373						lineNumber: 777,
374						columnNumber: 11
375					}, this)
376				}, void 0, false, {
377					fileName: _jsxFileName,
378					lineNumber: 757,
379					columnNumber: 9
380				}, this)]
381			}, void 0, true, {
382				fileName: _jsxFileName,
383				lineNumber: 710,
384				columnNumber: 7
385			}, this),
386			/* @__PURE__ */ _jsxDEV("section", {
387				ref: resultsRef,
388				className: "\n          scroll-mt-24\n          py-8\n\n          sm:py-10\n        ",
389				children: /* @__PURE__ */ _jsxDEV("div", {
390					className: "\n            mx-auto\n            w-full\n            max-w-[1280px]\n            px-4\n\n            sm:px-6\n\n            md:px-8\n\n            lg:px-10\n\n            xl:px-12\n          ",
391					children: [
392						/* @__PURE__ */ _jsxDEV("div", {
393							className: "\n              mb-5\n              grid\n              grid-cols-1\n              gap-3\n\n              md:grid-cols-[minmax(0,1fr)_auto]\n              md:items-center\n              md:gap-5\n            ",
394							children: [/* @__PURE__ */ _jsxDEV("div", {
395								className: "\n                relative\n                w-full\n                max-w-[620px]\n              ",
396								children: [/* @__PURE__ */ _jsxDEV(Search, { className: "\n                  absolute\n                  right-3.5\n                  top-1/2\n                  h-4\n                  w-4\n                  -translate-y-1/2\n                  text-[#173E7D]\n                " }, void 0, false, {
397									fileName: _jsxFileName,
398									lineNumber: 899,
399									columnNumber: 15
400								}, this), /* @__PURE__ */ _jsxDEV("input", {
401									value: keyword,
402									onChange: (event) => {
403										setKeyword(event.target.value);
404										setPage(1);
405									},
406									placeholder: "Search conferences by title, keyword, or location...",
407									className: "\n                  h-11\n                  w-full\n                  rounded-[7px]\n                  border\n                  border-[#DCE3ED]\n                  bg-white\n                  px-4\n                  pr-10\n                  text-[12px]\n                  text-[#263C60]\n                  outline-none\n                  transition\n                  placeholder:text-[#8A98AA]\n\n                  focus:border-[#0756CF]\n                  focus:ring-2\n                  focus:ring-[#0756CF]/10\n                "
408								}, void 0, false, {
409									fileName: _jsxFileName,
410									lineNumber: 911,
411									columnNumber: 15
412								}, this)]
413							}, void 0, true, {
414								fileName: _jsxFileName,
415								lineNumber: 892,
416								columnNumber: 13
417							}, this), /* @__PURE__ */ _jsxDEV("div", {
418								className: "\n                flex\n                flex-col\n                gap-2.5\n\n                min-[460px]:flex-row\n                min-[460px]:items-center\n                min-[460px]:justify-between\n\n                md:justify-end\n              ",
419								children: [/* @__PURE__ */ _jsxDEV("p", {
420									className: "\n                  whitespace-nowrap\n                  text-[11px]\n                  font-medium\n                  text-[#536680]\n\n                  sm:text-[12px]\n                ",
421									children: [
422										"Showing",
423										" ",
424										/* @__PURE__ */ _jsxDEV("span", {
425											className: "font-semibold text-[#17345F]",
426											children: [
427												firstResult,
428												"–",
429												lastResult
430											]
431										}, void 0, true, {
432											fileName: _jsxFileName,
433											lineNumber: 975,
434											columnNumber: 17
435										}, this),
436										" ",
437										"of",
438										" ",
439										/* @__PURE__ */ _jsxDEV("span", {
440											className: "font-semibold text-[#17345F]",
441											children: totalItems
442										}, void 0, false, {
443											fileName: _jsxFileName,
444											lineNumber: 985,
445											columnNumber: 17
446										}, this),
447										" ",
448										"conferences"
449									]
450								}, void 0, true, {
451									fileName: _jsxFileName,
452									lineNumber: 964,
453									columnNumber: 15
454								}, this), /* @__PURE__ */ _jsxDEV("div", {
455									className: "\n                  relative\n                  shrink-0\n                ",
456									children: [/* @__PURE__ */ _jsxDEV("select", {
457										value: sortBy,
458										onChange: (event) => {
459											setSortBy(event.target.value);
460											setPage(1);
461										},
462										className: "\n                    h-10\n                    w-full\n                    min-w-[155px]\n                    appearance-none\n                    rounded-[7px]\n                    border\n                    border-[#DCE3ED]\n                    bg-white\n                    pl-3\n                    pr-8\n                    text-[11px]\n                    font-medium\n                    text-[#263C60]\n                    outline-none\n\n                    focus:border-[#0756CF]\n\n                    min-[460px]:w-[160px]\n\n                    sm:text-[12px]\n                  ",
463										children: [
464											/* @__PURE__ */ _jsxDEV("option", {
465												value: "upcoming",
466												children: "Sort: Upcoming"
467											}, void 0, false, {
468												fileName: _jsxFileName,
469												lineNumber: 1037,
470												columnNumber: 19
471											}, this),
472											/* @__PURE__ */ _jsxDEV("option", {
473												value: "newest",
474												children: "Sort: Newest"
475											}, void 0, false, {
476												fileName: _jsxFileName,
477												lineNumber: 1041,
478												columnNumber: 19
479											}, this),
480											/* @__PURE__ */ _jsxDEV("option", {
481												value: "title",
482												children: "Sort: Title"
483											}, void 0, false, {
484												fileName: _jsxFileName,
485												lineNumber: 1045,
486												columnNumber: 19
487											}, this),
488											/* @__PURE__ */ _jsxDEV("option", {
489												value: "location",
490												children: "Sort: Location"
491											}, void 0, false, {
492												fileName: _jsxFileName,
493												lineNumber: 1049,
494												columnNumber: 19
495											}, this)
496										]
497									}, void 0, true, {
498										fileName: _jsxFileName,
499										lineNumber: 999,
500										columnNumber: 17
501									}, this), /* @__PURE__ */ _jsxDEV(ChevronDown, { className: "\n                    pointer-events-none\n                    absolute\n                    right-2.5\n                    top-1/2\n                    h-3.5\n                    w-3.5\n                    -translate-y-1/2\n                    text-[#435775]\n                  " }, void 0, false, {
502										fileName: _jsxFileName,
503										lineNumber: 1054,
504										columnNumber: 17
505									}, this)]
506								}, void 0, true, {
507									fileName: _jsxFileName,
508									lineNumber: 993,
509									columnNumber: 15
510								}, this)]
511							}, void 0, true, {
512								fileName: _jsxFileName,
513								lineNumber: 951,
514								columnNumber: 13
515							}, this)]
516						}, void 0, true, {
517							fileName: _jsxFileName,
518							lineNumber: 877,
519							columnNumber: 11
520						}, this),
521						loading ? /* @__PURE__ */ _jsxDEV("div", {
522							className: "\n                flex\n                min-h-[300px]\n                flex-col\n                items-center\n                justify-center\n                rounded-[10px]\n                border\n                border-dashed\n                border-[#CCD7E5]\n                bg-[#F8FAFD]\n                px-5\n                text-center\n              ",
523							children: [/* @__PURE__ */ _jsxDEV(Loader2, { className: "\n                  h-8\n                  w-8\n                  animate-spin\n                  text-[#0756CF]\n                " }, void 0, false, {
524								fileName: _jsxFileName,
525								lineNumber: 1091,
526								columnNumber: 15
527							}, this), /* @__PURE__ */ _jsxDEV("p", {
528								className: "\n                  mt-3\n                  text-[13px]\n                  font-medium\n                  text-[#687991]\n                ",
529								children: "Loading conferences..."
530							}, void 0, false, {
531								fileName: _jsxFileName,
532								lineNumber: 1100,
533								columnNumber: 15
534							}, this)]
535						}, void 0, true, {
536							fileName: _jsxFileName,
537							lineNumber: 1075,
538							columnNumber: 13
539						}, this) : loadError ? /* @__PURE__ */ _jsxDEV(
540							"div",
541							/* =============================================
542							ERROR
543							============================================= */
544							{
545								className: "\n                flex\n                min-h-[260px]\n                flex-col\n                items-center\n                justify-center\n                rounded-[10px]\n                border\n                border-dashed\n                border-red-200\n                bg-red-50\n                px-5\n                text-center\n              ",
546								children: [/* @__PURE__ */ _jsxDEV("p", {
547									className: "\n                  text-[14px]\n                  font-semibold\n                  text-red-700\n                ",
548									children: loadError
549								}, void 0, false, {
550									fileName: _jsxFileName,
551									lineNumber: 1133,
552									columnNumber: 15
553								}, this), /* @__PURE__ */ _jsxDEV("button", {
554									type: "button",
555									onClick: () => setReloadKey((current) => current + 1),
556									className: "\n                  mt-4\n                  min-h-[40px]\n                  rounded-[5px]\n                  bg-[#0756CF]\n                  px-5\n                  text-[12px]\n                  font-semibold\n                  text-white\n                  transition\n\n                  hover:bg-[#064AB4]\n                ",
557									children: "Try Again"
558								}, void 0, false, {
559									fileName: _jsxFileName,
560									lineNumber: 1143,
561									columnNumber: 15
562								}, this)]
563							},
564							void 0,
565							true,
566							{
567								fileName: _jsxFileName,
568								lineNumber: 1117,
569								columnNumber: 13
570							},
571							this
572						) : pageItems.length === 0 ? /* @__PURE__ */ _jsxDEV(
573							"div",
574							/* =============================================
575							EMPTY
576							============================================= */
577							{
578								className: "\n                flex\n                min-h-[280px]\n                flex-col\n                items-center\n                justify-center\n                rounded-[10px]\n                border\n                border-dashed\n                border-[#CCD7E5]\n                bg-[#F8FAFD]\n                px-5\n                text-center\n              ",
579								children: [
580									/* @__PURE__ */ _jsxDEV(Search, { className: "\n                  h-9\n                  w-9\n                  text-[#9AA8BA]\n                " }, void 0, false, {
581										fileName: _jsxFileName,
582										lineNumber: 1194,
583										columnNumber: 15
584									}, this),
585									/* @__PURE__ */ _jsxDEV("h2", {
586										className: "\n                  mt-4\n                  text-[17px]\n                  font-[600]\n                  text-[#17345F]\n\n                  sm:text-[18px]\n                ",
587										children: "No conferences found"
588									}, void 0, false, {
589										fileName: _jsxFileName,
590										lineNumber: 1202,
591										columnNumber: 15
592									}, this),
593									/* @__PURE__ */ _jsxDEV("p", {
594										className: "\n                  mt-2\n                  max-w-[420px]\n                  text-[12px]\n                  leading-5\n                  text-[#687991]\n                ",
595										children: "Try another title, keyword, or location."
596									}, void 0, false, {
597										fileName: _jsxFileName,
598										lineNumber: 1215,
599										columnNumber: 15
600									}, this),
601									keyword && /* @__PURE__ */ _jsxDEV("button", {
602										type: "button",
603										onClick: clearSearch,
604										className: "\n                    mt-5\n                    min-h-[40px]\n                    rounded-[5px]\n                    bg-[#0756CF]\n                    px-5\n                    text-[12px]\n                    font-semibold\n                    text-white\n                  ",
605										children: "View All Conferences"
606									}, void 0, false, {
607										fileName: _jsxFileName,
608										lineNumber: 1228,
609										columnNumber: 17
610									}, this)
611								]
612							},
613							void 0,
614							true,
615							{
616								fileName: _jsxFileName,
617								lineNumber: 1178,
618								columnNumber: 13
619							},
620							this
621						) : 
622						/* =============================================
623						CONFERENCE CARDS
624						============================================= */
625						/* @__PURE__ */ _jsxDEV("div", {
626							className: "\n                space-y-4\n              ",
627							children: pageItems.map((conference, index) => {
628								const topics = list(conference.topics || conference.tags || conference.keywords);
629								const code = text(conference.code || conference.shortName) || `CONF ${new Date().getFullYear()}`;
630								const organizer = conferenceOrganizer(conference);
631								const title = text(conference.title) || "Academic Conference";
632								const description = text(conference.description) || "Explore current research, exchange knowledge, and connect with researchers and professionals.";
633								return /* @__PURE__ */ _jsxDEV(motion.article, {
634									initial: {
635										opacity: 0,
636										y: 12
637									},
638									animate: {
639										opacity: 1,
640										y: 0
641									},
642									transition: {
643										duration: .3,
644										delay: index * .04
645									},
646									whileHover: { y: -2 },
647									className: "\n                        group\n                        grid\n                        min-w-0\n                        grid-cols-1\n                        gap-4\n                        overflow-hidden\n                        rounded-[10px]\n                        border\n                        border-[#E1E7EF]\n                        bg-white\n                        p-4\n                        transition-all\n                        duration-300\n\n                        hover:border-[#B5CBEA]\n                        hover:shadow-[0_10px_28px_rgba(10,39,82,0.07)]\n\n                        sm:grid-cols-[122px_minmax(0,1fr)]\n                        sm:items-start\n                        sm:gap-5\n\n                        md:grid-cols-[128px_minmax(0,1fr)]\n\n                        lg:grid-cols-[132px_minmax(0,1fr)]\n\n                        xl:grid-cols-[136px_minmax(0,1fr)_210px]\n                        xl:gap-6\n                      ",
648									children: [
649										/* @__PURE__ */ _jsxDEV(ConferenceImage, {
650											conference,
651											code,
652											index
653										}, void 0, false, {
654											fileName: _jsxFileName,
655											lineNumber: 1353,
656											columnNumber: 23
657										}, this),
658										/* @__PURE__ */ _jsxDEV("div", {
659											className: "\n                          min-w-0\n                          py-0.5\n                        ",
660											children: [
661												/* @__PURE__ */ _jsxDEV("span", {
662													className: "\n                            inline-flex\n                            max-w-full\n                            rounded-[4px]\n                            bg-[#EAF2FF]\n                            px-2.5\n                            py-1\n                            text-[9.5px]\n                            font-semibold\n                            text-[#0756C
662F]\n\n                            sm:text-[10px]\n                          ",
663													children: conferenceType(conference)
664												}, void 0, false, {
665													fileName: _jsxFileName,
666													lineNumber: 1378,
667													columnNumber: 25
668												}, this),
669												/* @__PURE__ */ _jsxDEV("h2", {
670													className: "\n                            mt-2\n                            break-words\n                            text-[15px]\n                            font-[600]\n                            leading-[1.4]\n                            text-[#071C46]\n\n                            sm:text-[15.5px]\n\n                            md:text-[16px]\n\n                            lg:text-[16.5px]\n                          ",
671													children: title
672												}, void 0, false, {
673													fileName: _jsxFileName,
674													lineNumber: 1400,
675													columnNumber: 25
676												}, this),
677												/* @__PURE__ */ _jsxDEV("p", {
678													className: "\n                            mt-1.5\n                            break-words\n                            text-[11px]\n                            leading-5\n                            text-[#415675]\n\n                            sm:text-[11.5px]\n                          ",
679													children: [
680														/* @__PURE__ */ _jsxDEV("span", {
681															className: "\n                              font-semibold\n                              text-[#2B4265]\n                            ",
682															children: "Organized by:"
683														}, void 0, false, {
684															fileName: _jsxFileName,
685															lineNumber: 1432,
686															columnNumber: 27
687														}, this),
688														" ",
689														organizer
690													]
691												}, void 0, true, {
692													fileName: _jsxFileName,
693													lineNumber: 1421,
694													columnNumber: 25
695												}, this),
696												/* @__PURE__ */ _jsxDEV("p", {
697													className: "\n                            mt-1.5\n                            line-clamp-3\n                            text-[11px]\n                            leading-[1.65]\n                            text-[#66758A]\n\n                            sm:line-clamp-2\n                            sm:text-[11.5px]\n                          ",
698													children: description
699												}, void 0, false, {
700													fileName: _jsxFileName,
701													lineNumber: 1445,
702													columnNumber: 25
703												}, this),
704												/* @__PURE__ */ _jsxDEV("div", {
705													className: "\n                            mt-2.5\n                            flex\n                            flex-wrap\n                            items-center\n                            gap-1.5\n                          ",
706													children: [/* @__PURE__ */ _jsxDEV("span", {
707														className: "\n                              text-[10.5px]\n                              font-semibold\n                              text-[#354B6B]\n                            ",
708														children: "Topics:"
709													}, void 0, false, {
710														fileName: _jsxFileName,
711														lineNumber: 1471,
712														columnNumber: 27
713													}, this), (topics.length ? topics : [conferenceSubject(conference)]).slice(0, 4).map((topic) => /* @__PURE__ */ _jsxDEV("span", {
714														className: "\n                                    max-w-full\n                                    break-words\n                                    rounded-full\n                                    bg-[#F0F4F9]\n                                    px-2\n                                    py-1\n                                    text-[9.5px]\n                                    font-medium\n                                    leading-4\n                                    text-[#405879]\n\n                                    sm:text-[10px]\n                                  ",
715														children: topic
716													}, topic, false, {
717														fileName: _jsxFileName,
718														lineNumber: 1497,
719														columnNumber: 33
720													}, this))]
721												}, void 0, true, {
722													fileName: _jsxFileName,
723													lineNumber: 1462,
724													columnNumber: 25
725												}, this)
726											]
727										}, void 0, true, {
728											fileName: _jsxFileName,
729											lineNumber: 1369,
730											columnNumber: 23
731										}, this),
732										/* @__PURE__ */ _jsxDEV("div", {
733											className: "\n                          flex\n                          min-w-0\n                          flex-col\n                          gap-4\n                          border-t\n                          border-[#E7EBF2]\n                          pt-4\n\n                          sm:col-span-2\n                          sm:flex-row\n                          sm:items-center\n                          sm:justify-between\n\n                          xl:col-span-1\n                          xl:border-l\n                          xl:border-t-0\n                          xl:pl-5\n                          xl:pt-1\n                          xl:flex-col\n                          xl:items-stretch\n                          xl:justify-between\n                        ",
734											children: [/* @__PURE__ */ _jsxDEV("div", {
735												className: "\n                            grid\n                            min-w-0\n                            grid-cols-1\n                            gap-3\n\n                            min-[460px]:grid-cols-2\n\n                            sm:flex\n                            sm:flex-wrap\n                            sm:gap-x-5\n\n                            xl:grid\n                            xl:grid-cols-1\n                          ",
736												children: [/* @__PURE__ */ _jsxDEV("p", {
737													className: "\n                              flex\n                              min-w-0\n                              items-start\n                              gap-2.5\n                              text-[11px]\n                              font-medium\n                              leading-5\n                              text-[#30496D]\n\n                              sm:text-[11.5px]\n                            ",
738													children: [/* @__PURE__ */ _jsxDEV(CalendarDays, { className: "\n                                mt-[2px]\n                                h-4\n                                w-4\n                                shrink-0\n                                text-[#2455A3]\n                              " }, void 0, false, {
739														fileName: _jsxFileName,
740														lineNumber: 1586,
741														columnNumber: 29
742													}, this), /* @__PURE__ */ _jsxDEV("span", {
743														className: "break-words",
744														children: conferenceDate(conference)
745													}, void 0, false, {
746														fileName: _jsxFileName,
747														lineNumber: 1596,
748														columnNumber: 29
749													}, this)]
750												}, void 0, true, {
751													fileName: _jsxFileName,
752													lineNumber: 1572,
753													columnNumber: 27
754												}, this), /* @__PURE__ */ _jsxDEV("p", {
755													className: "\n                              flex\n                              min-w-0\n                              items-start\n                              gap-2.5\n                              text-[11px]\n                              font-medium\n                              leading-5\n                              text-[#30496D]\n\n                              sm:text-[11.5px]\n                            ",
756													children: [/* @__PURE__ */ _jsxDEV(MapPin, { className: "\n                                mt-[2px]\n                                h-4\n                                w-4\n                                shrink-0\n                                text-[#2455A3]\n                              " }, void 0, false, {
757														fileName: _jsxFileName,
758														lineNumber: 1619,
759														columnNumber: 29
760													}, this), /* @__PURE__ */ _jsxDEV("span", {
761														className: "break-words",
762														children: conferenceLocation(conference)
763													}, void 0, false, {
764														fileName: _jsxFileName,
765														lineNumber: 1629,
766														columnNumber: 29
767													}, this)]
768												}, void 0, true, {
769													fileName: _jsxFileName,
770													lineNumber: 1605,
771													columnNumber: 27
772												}, this)]
773											}, void 0, true, {
774												fileName: _jsxFileName,
775												lineNumber: 1552,
776												columnNumber: 25
777											}
777, this), /* @__PURE__ */ _jsxDEV(Link, {
778												to: conference.detailsUrl,
779												className: "\n                            inline-flex\n                            min-h-[38px]\n                            w-full\n                            shrink-0\n                            items-center\n                            justify-center\n                            rounded-[5px]\n                            border\n                            border-[#0756CF]\n                            px-4\n                            text-[11.5px]\n                            font-semibold\n                            text-[#0756CF]\n                            transition\n\n                            hover:bg-[#0756CF]\n                            hover:text-white\n\n                            sm:w-[150px]\n\n                            xl:mt-4\n                            xl:w-full\n                          ",
780												children: "View Details"
781											}, void 0, false, {
782												fileName: _jsxFileName,
783												lineNumber: 1639,
784												columnNumber: 25
785											}, this)]
786										}, void 0, true, {
787											fileName: _jsxFileName,
788											lineNumber: 1527,
789											columnNumber: 23
790										}, this)
791									]
792								}, conference.id || conference.slug || `${code}-${index}`, true, {
793									fileName: _jsxFileName,
794									lineNumber: 1296,
795									columnNumber: 21
796								}, this);
797							})
798						}, void 0, false, {
799							fileName: _jsxFileName,
800							lineNumber: 1254,
801							columnNumber: 13
802						}, this),
803						!loading && !loadError && totalItems > PAGE_SIZE && totalPages > 1 && /* @__PURE__ */ _jsxDEV("nav", {
804							"aria-label": "Conference pagination",
805							className: "\n                  mt-7\n                  flex\n                  flex-wrap\n                  items-center\n                  justify-center\n                  gap-2\n                ",
806							children: [
807								/* @__PURE__ */ _jsxDEV("button", {
808									type: "button",
809									onClick: () => changePage(page - 1),
810									disabled: page === 1,
811									"aria-label": "Previous page",
812									className: "\n                    grid\n                    h-8\n                    w-8\n                    place-items-center\n                    rounded-[5px]\n                    border\n                    border-[#DCE3ED]\n                    text-[#234A87]\n                    transition\n\n                    hover:border-[#0756CF]\n                    hover:text-[#0756CF]\n\n                    disabled:cursor-not-allowed\n                    disabled:opacity-30\n                  ",
813									children: /* @__PURE__ */ _jsxDEV(ChevronLeft, { className: "h-4 w-4" }, void 0, false, {
814										fileName: _jsxFileName,
815										lineNumber: 1730,
816										columnNumber: 19
817									}, this)
818								}, void 0, false, {
819									fileName: _jsxFileName,
820									lineNumber: 1700,
821									columnNumber: 17
822								}, this),
823								visiblePages.map((item) => typeof item === "number" ? /* @__PURE__ */ _jsxDEV("button", {
824									type: "button",
825									onClick: () => changePage(item),
826									"aria-current": page === item ? "page" : undefined,
827									className: `
828                          h-8
829                          min-w-8
830                          rounded-[5px]
831                          px-2
832                          text-[11px]
833                          font-semibold
834                          transition
835
836                          ${page === item ? `
837                                bg-[#0756CF]
838                                text-white
839                                shadow-[0_4px_10px_rgba(7,86,207,.24)]
840                              ` : `
841                                border
842                                border-[#DCE3ED]
843                                text-[#405675]
844
845                                hover:border-[#0756CF]
846                                hover:text-[#0756CF]
847                              `}
848                        `,
849									children: item
850								}, item, false, {
851									fileName: _jsxFileName,
852									lineNumber: 1739,
853									columnNumber: 23
854								}, this) : /* @__PURE__ */ _jsxDEV("span", {
855									className: "\n                          grid\n                          h-8\n                          min-w-6\n                          place-items-center\n                          text-[12px]\n                          text-[#60718A]\n                        ",
856									children: "…"
857								}, item, false, {
858									fileName: _jsxFileName,
859									lineNumber: 1786,
860									columnNumber: 23
861								}, this)),
862								/* @__PURE__ */ _jsxDEV("button", {
863									type: "button",
864									onClick: () => changePage(page + 1),
865									disabled: page === totalPages,
866									"aria-label": "Next page",
867									className: "\n                    grid\n                    h-8\n                    w-8\n                    place-items-center\n                    rounded-[5px]\n                    border\n                    border-[#DCE3ED]\n                    text-[#234A87]\n                    transition\n\n                    hover:border-[#0756CF]\n                    hover:text-[#0756CF]\n\n                    disabled:cursor-not-allowed\n                    disabled:opacity-30\n                  ",
868									children: /* @__PURE__ */ _jsxDEV(ChevronRight, { className: "h-4 w-4" }, void 0, false, {
869										fileName: _jsxFileName,
870										lineNumber: 1835,
871										columnNumber: 19
872									}, this)
873								}, void 0, false, {
874									fileName: _jsxFileName,
875									lineNumber: 1804,
876									columnNumber: 17
877								}, this)
878							]
879						}, void 0, true, {
880							fileName: _jsxFileName,
881							lineNumber: 1688,
882							columnNumber: 15
883						}, this)
884					]
885				}, void 0, true, {
886					fileName: _jsxFileName,
887					lineNumber: 856,
888					columnNumber: 9
889				}, this)
890			}, void 0, false, {
891				fileName: _jsxFileName,
892				lineNumber: 845,
893				columnNumber: 7
894			}, this),
895			/* @__PURE__ */ _jsxDEV("section", {
896				className: "\n          mx-auto\n          w-full\n          max-w-[1440px]\n          px-4\n          pb-8\n\n          sm:px-8\n\n          lg:px-16\n\n          xl:px-20\n        ",
897				children: /* @__PURE__ */ _jsxDEV(motion.div, {
898					initial: {
899						opacity: 0,
900						y: 18
901					},
902					whileInView: {
903						opacity: 1,
904						y: 0
905					},
906					viewport: {
907						once: true,
908						amount: .3
909					},
910					className: "\n            relative\n            overflow-hidden\n            rounded-[11px]\n            bg-[linear-gradient(100deg,#031B47,#063B80)]\n            text-white\n            shadow-[0_10px_26px_rgba(3,24,63,.15)]\n          ",
911					children: /* @__PURE__ */ _jsxDEV("div", {
912						className: "\n              grid\n              min-h-[110px]\n              items-center\n\n              md:grid-cols-[180px_minmax(0,1fr)]\n\n              lg:grid-cols-[190px_minmax(0,1fr)]\n            ",
913						children: [/* @__PURE__ */ _jsxDEV("div", {
914							className: "\n                relative\n                hidden\n                h-full\n                overflow-hidden\n\n                md:block\n              ",
915							children: /* @__PURE__ */ _jsxDEV("img", {
916								src: conferenceCta,
917								alt: "Conference calendar",
918								loading: "lazy",
919								className: "\n                  absolute\n                  inset-0\n                  h-full\n                  w-full\n                  object-contain\n                  p-3\n                "
920							}, void 0, false, {
921								fileName: _jsxFileName,
922								lineNumber: 1907,
923								columnNumber: 15
924							}, this)
925						}, void 0, false, {
926							fileName: _jsxFileName,
927							lineNumber: 1897,
928							columnNumber: 13
929						}, this), /* @__PURE__ */ _jsxDEV("div", {
930							className: "\n                grid\n                items-center\n                gap-6\n                px-5\n                py-7\n\n                sm:px-6\n\n                lg:grid-cols-[minmax(0,1fr)_auto]\n                lg:px-9\n              ",
931							children: [/* @__PURE__ */ _jsxDEV("div", { children: [/* @__PURE__ */ _jsxDEV("h2", {
932								className: "\n                    text-[19px]\n                    font-[550]\n\n                    sm:text-[22px]\n\n                    lg:text-[23px]\n                  ",
933								children: "Organize Your Conference with Us"
934							}, void 0, false, {
935								fileName: _jsxFileName,
936								lineNumber: 1941,
937								columnNumber: 17
938							}, this), /* @__PURE__ */ _jsxDEV("p", {
939								className: "\n                    mt-2\n                    max-w-[430px]\n                    text-[12px]\n                    leading-5\n                    text-white/85\n\n                    sm:text-[13px]\n\n                    lg:text-[14px]\n                  ",
940								children: "Partner with Technical Journals to host your conference and reach a global audience of researchers and professionals."
941							}, void 0, false, {
942								fileName: _jsxFileName,
943								lineNumber: 1954,
944								columnNumber: 17
945							}, this)] }, void 0, true, {
946								fileName: _jsxFileName,
947								lineNumber: 1940,
948								columnNumber: 15
949							}
949, this), /* @__PURE__ */ _jsxDEV("div", {
950								className: "\n                  flex\n                  flex-col\n                  gap-2.5\n\n                  min-[430px]:flex-row\n                  min-[430px]:flex-wrap\n                ",
951								children: [/* @__PURE__ */ _jsxDEV(Link, {
952									to: "/contact",
953									className: "\n                    inline-flex\n                    h-11\n                    w-full\n                    min-w-[150px]\n                    items-center\n                    justify-center\n                    rounded-[6px]\n                    bg-white\n                    px-5\n                    text-[12px]\n                    font-semibold\n                    text-[#0756CF]\n                    transition\n\n                    hover:bg-[#EDF4FF]\n\n                    min-[430px]:w-auto\n\n                    sm:text-[13px]\n                  ",
954									children: "Partner With Us"
955								}, void 0, false, {
956									fileName: _jsxFileName,
957									lineNumber: 1982,
958									columnNumber: 17
959								}, this), /* @__PURE__ */ _jsxDEV(Link, {
960									to: "/services",
961									className: "\n                    inline-flex\n                    h-11\n                    w-full\n                    min-w-[140px]\n                    items-center\n                    justify-center\n                    rounded-[6px]\n                    border\n                    border-white/75\n                    px-5\n                    text-[12px]\n                    font-semibold\n                    text-white\n                    transition\n\n                    hover:bg-white/10\n\n                    min-[430px]:w-auto\n\n                    sm:text-[13px]\n                  ",
962									children: "Learn More"
963								}, void 0, false, {
964									fileName: _jsxFileName,
965									lineNumber: 2009,
966									columnNumber: 17
967								}, this)]
968							}, void 0, true, {
969								fileName: _jsxFileName,
970								lineNumber: 1972,
971								columnNumber: 15
972							}, this)]
973						}, void 0, true, {
974							fileName: _jsxFileName,
975							lineNumber: 1926,
976							columnNumber: 13
977						}, this)]
978					}, void 0, true, {
979						fileName: _jsxFileName,
980						lineNumber: 1883,
981						columnNumber: 11
982					}, this)
983				}, void 0, false, {
984					fileName: _jsxFileName,
985					lineNumber: 1861,
986					columnNumber: 9
987				}, this)
988			}, void 0, false, {
989				fileName: _jsxFileName,
990				lineNumber: 1846,
991				columnNumber: 7
992			}, this)
993		]
994	}, void 0, true, {
995		fileName: _jsxFileName,
996		lineNumber: 699,
997		columnNumber: 5
998	}, this);
999}
1000_s2(Conferences, "ypo9zuUcN00ZnwhAyvQJ3xGOePc=", false, function() {
1001	return [useDebounce];
1002});
1003_c2 = Conferences;
1004var _c, _c2;
1005$RefreshReg$(_c, "ConferenceImage");
1006$RefreshReg$(_c2, "Conferences");
1007import * as RefreshRuntime from "/@react-refresh";
1008const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;
1009import * as __vite_react_currentExports from "/src/pages/Conferences.jsx";
1010if (import.meta.hot && !inWebWorker) {
1011  if (!window.$RefreshReg$) {
1012    throw new Error(
1013      "@vitejs/plugin-react can't detect preamble. Something is wrong."
1014    );
1015  }
1016
1017  const currentExports = __vite_react_currentExports;
1018  queueMicrotask(() => {
1019    RefreshRuntime.registerExportsForReactRefresh("/var/opt/Technical-Journals/src/pages/Conferences.jsx", currentExports);
1020    import.meta.hot.accept((nextExports) => {
1021      if (!nextExports) return;
1022      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/var/opt/Technical-Journals/src/pages/Conferences.jsx", currentExports, nextExports);
1023      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
1024    });
1025  });
1026}
1027function $RefreshReg$(type, id) { return RefreshRuntime.register(type, "/var/opt/Technical-Journals/src/pages/Conferences.jsx" + ' ' + id); }
1028function $RefreshSig$() { return RefreshRuntime.createSignatureFunctionForTransform(); }
1029
1030//# sourceMappingURL=data:application/json;base64,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XQUFVO2VBU1Ysd0JBQUMsT0FBRDtNQUNFLFdBQVU7Z0JBRFosQ0FjRSx3QkFBQyxPQUFEO09BQ0UsV0FBVTtpQkFTVix3QkFBQyxPQUFEO1FBQ0UsS0FDRTtRQUVGLEtBQUk7UUFDSixTQUFRO1FBQ1IsV0FBVTtPQVFYOzs7OztNQUNFOzs7O2dCQUlMLHdCQUFDLE9BQUQ7T0FDRSxXQUFVO2lCQURaLENBY0Usd0JBQUMsT0FBRCxhQUNFLHdCQUFDLE1BQUQ7UUFDRSxXQUFVO2tCQVFYO09BRUc7Ozs7aUJBRUosd0JBQUMsS0FBRDtRQUNFLFdBQVU7a0JBV1g7T0FHRTs7OztlQUNBOzs7O2lCQUVMLHdCQUFDLE9BQUQ7UUFDRSxXQUFVO2tCQURaLENBVUUsd0JBQUMsTUFBRDtTQUNFLElBQUc7U0FDSCxXQUFVO21CQXFCWDtRQUVLOzs7O2tCQUVOLHdCQUFDLE1BQUQ7U0FDRSxJQUFHO1NBQ0gsV0FBVTttQkFzQlg7UUFFSzs7OztnQkFDSDs7Ozs7ZUFDRjs7Ozs7Y0F
1030DRjs7Ozs7O0lBQ0s7Ozs7O0dBQ0w7Ozs7O0VBQ0w7Ozs7OztBQUVWIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIkNvbmZlcmVuY2VzLmpzeCJdLCJ2ZXJzaW9uIjozLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IG1vdGlvbiB9IGZyb20gXCJmcmFtZXItbW90aW9uXCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcInJlYWN0LXJvdXRlci1kb21cIjtcblxuaW1wb3J0IHtcbiAgQ2FsZW5kYXJEYXlzLFxuICBDaGV2cm9uRG93bixcbiAgQ2hldnJvbkxlZnQsXG4gIENoZXZyb25SaWdodCxcbiAgTG9hZGVyMixcbiAgTWFwUGluLFxuICBTZWFyY2gsXG59IGZyb20gXCJsdWNpZGUtcmVhY3RcIjtcblxuaW1wb3J0IGNvbmZCZyBmcm9tIFwiLi4vYXNzZXRzL2ltYWdlcy90ZWNobmljYWwtam91cm5hbHMtYWNhZGVtaWMtcmVzZWFyY2gtY29uZmVyZW5jZXMud2VicFwiO1xuaW1wb3J0IGNvbmZlcmVuY2VDdGEgZnJvbSBcIi4uL2Fzc2V0cy9pbWFnZXMvdGVjaG5pY2FsLWpvdXJuYWxzLWNvbmZlcmVuY2UtY2FsZW5kYXItcGFydG5lcnNoaXAtY3RhLndlYnBcIjtcblxuaW1wb3J0IHtcbiAgZmV0Y2hDb25mZXJlbmNlcyxcbn0gZnJvbSBcIi4uL3NlcnZpY2VzL2NvbmZlcmVuY2VTZXJ2aWNlXCI7XG5cbmltcG9ydCB7XG4gIHJlc29sdmVJbWFnZVVybCxcbn0gZnJvbSBcIi4uL3NlcnZpY2VzL2FwaVwiO1xuXG5pbXBvcnQgdXNlRGVib3VuY2UgZnJvbSBcIi4uL2hvb2tzL3VzZURlYm91bmNlXCI7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09ORklHXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgUEFHRV9TSVpFID0gNTtcblxuY29uc3QgY29sb3JTdHlsZXMgPSBbXG4gIFwiZnJvbS1bIzA2NDM5MV0gdG8tWyMwNzVmYzldXCIsXG4gIFwiZnJvbS1bIzE2ODY0Nl0gdG8tWyMyOGFlNjFdXCIsXG4gIFwiZnJvbS1bIzY4NDFiNF0gdG8tWyM5NDVhZDldXCIsXG4gIFwiZnJvbS1bI2YwNjQxNl0gdG8tWyNmZjhhMjRdXCIsXG4gIFwiZnJvbS1bIzA0OTVhOF0gdG8tWyMxMGJhYzFdXCIsXG5dO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEhFTFBFUlNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5mdW5jdGlvbiB0ZXh0KHZhbHVlKSB7XG4gIHJldHVybiBTdHJpbmcoXG4gICAgdmFsdWUgPz8gXCJcIixcbiAgKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGxpc3QodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLm1hcCh0ZXh0KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIGNvbnN0IHJhdyA9XG4gICAgdGV4dCh2YWx1ZSk7XG5cbiAgaWYgKCFyYXcpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAoXG4gICAgcmF3LnN0YXJ0c1dpdGgoXCJbXCIpICYmXG4gICAgcmF3LmVuZHNXaXRoKFwiXVwiKVxuICApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgSlNPTi5wYXJzZShyYXcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIEFycmF5LmlzQXJyYXkocGFyc2VkKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRcbiAgICAgICAgICAubWFwKHRleHQpXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIENvbnRpbnVlIHdpdGggbm9ybWFsIHBhcnNpbmcuXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJhd1xuICAgIC5zcGxpdCgvWyw7XFxuXS8pXG4gICAgLm1hcCgoaXRlbSkgPT5cbiAgICAgIGl0ZW0udHJpbSgpLFxuICAgIClcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE5PUk1BTElaRSBCQUNLRU5EIERBVEFcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVDb25mZXJlbmNlKFxuICByb3csXG4pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yb3csXG5cbiAgICB0eXBlOlxuICAgICAgcm93LmNvbmZlcmVuY2VfdHlwZSB8fFxuICAgICAgcm93LnR5cGUgfHxcbiAgICAgIFwiXCIsXG5cbiAgICBzdWJqZWN0OlxuICAgICAgcm93LnN1YmplY3RfYXJlYSB8fFxuICAgICAgcm93LnN1YmplY3QgfHxcbiAgICAgIFwiXCIsXG5cbiAgICBkYXRlOlxuICAgICAgcm93LmRpc3BsYXlfZGF0ZSB8fFxuICAgICAgcm93LnN0YXJ0X2RhdGUgfHxcbiAgICAgIFwiXCIsXG5cbiAgICBkZXRhaWxzVXJsOlxuICAgICAgYC9jb25mZXJlbmNlcy8ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgcm93LnNsdWcgfHxcbiAgICAgICAgICByb3cuaWQsXG4gICAgICApfWAsXG5cbiAgICBpbWFnZTpcbiAgICAgIHJlc29sdmVJbWFnZVVybChcbiAgICAgICAgcm93LmltYWdlIHx8XG4gICAgICAgICAgcm93LmNvdmVyX2ltYWdlLFxuICAgICAgKSxcbiAgfTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBESVNQTEFZIEhFTFBFUlNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5mdW5jdGlvbiBjb25mZXJlbmNlVHlwZShcbiAgY29uZmVyZW5jZSxcbikge1xuICByZXR1cm4gKFxuICAgIHRleHQoXG4gICAgICBjb25mZXJlbmNlLnR5cGUgfHxcbiAgICAgICAgY29uZmVyZW5jZS5jb25mZXJlbmNlX3R5cGUsXG4gICAgKSB8fFxuICAgIFwiQWNhZGVtaWMgQ29uZmVyZW5jZVwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvbmZlcmVuY2VTdWJqZWN0KFxuICBjb25mZXJlbmNlLFxuKSB7XG4gIHJldHVybiAoXG4gICAgdGV4dChcbiAgICAgIGNvbmZlcmVuY2Uuc3ViamVjdCB8fFxuICAgICAgICBjb25mZXJlbmNlLnN1YmplY3RfYXJlYSxcbiAgICApIHx8XG4gICAgXCJNdWx0aWRpc2NpcGxpbmFyeSBSZXNlYXJjaFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvbmZlcmVuY2VEYXRlKFxuICBjb25mZXJlbmNlLFxuKSB7XG4gIHJldHVybiAoXG4gICAgdGV4dChcbiAgICAgIGNvbmZlcmVuY2UuZGlzcGxheV9kYXRlIHx8XG4gICAgICAgIGNvbmZlcmVuY2UuZGF0ZSB8fFxuICAgICAgICBjb25mZXJlbmNlLnN0YXJ0X2RhdGUsXG4gICAgKSB8fFxuICAgIFwiRGF0ZSB0byBiZSBhbm5vdW5jZWRcIlxuICApO
10301xufVxuXG5mdW5jdGlvbiBjb25mZXJlbmNlTG9jYXRpb24oXG4gIGNvbmZlcmVuY2UsXG4pIHtcbiAgcmV0dXJuIChcbiAgICB0ZXh0KFxuICAgICAgY29uZmVyZW5jZS5sb2NhdGlvbiB8fFxuICAgICAgICBjb25mZXJlbmNlLnZlbnVlIHx8XG4gICAgICAgIGNvbmZlcmVuY2UuY2l0eSxcbiAgICApIHx8XG4gICAgXCJMb2NhdGlvbiB0byBiZSBhbm5vdW5jZWRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBjb25mZXJlbmNlT3JnYW5pemVyKFxuICBjb25mZXJlbmNlLFxuKSB7XG4gIHJldHVybiAoXG4gICAgdGV4dChcbiAgICAgIGNvbmZlcmVuY2Uub3JnYW5pemVyIHx8XG4gICAgICAgIGNvbmZlcmVuY2Uub3JnYW5pemVkX2J5IHx8XG4gICAgICAgIGNvbmZlcmVuY2UudW5pdmVyc2l0eSxcbiAgICApIHx8XG4gICAgXCJUZWNobmljYWwgSm91cm5hbHNcIlxuICApO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPTkZFUkVOQ0UgQ09WRVIgSU1BR0VcblxuICAgUHJvcGVyIHBvcnRyYWl0IGNvbmZlcmVuY2UgcG9zdGVyIHJhdGlvLlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmZ1bmN0aW9uIENvbmZlcmVuY2VJbWFnZSh7XG4gIGNvbmZlcmVuY2UsXG4gIGNvZGUsXG4gIGluZGV4LFxufSkge1xuICBjb25zdCBbXG4gICAgaW1hZ2VFcnJvcixcbiAgICBzZXRJbWFnZUVycm9yLFxuICBdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHNob3dJbWFnZSA9XG4gICAgQm9vbGVhbihcbiAgICAgIGNvbmZlcmVuY2UuaW1hZ2UsXG4gICAgKSAmJlxuICAgICFpbWFnZUVycm9yO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgIHJlbGF0aXZlXG4gICAgICAgIG14LWF1dG9cbiAgICAgICAgYXNwZWN0LVswLjcyLzFdXG4gICAgICAgIHctWzEzMHB4XVxuICAgICAgICBzaHJpbmstMFxuICAgICAgICBvdmVyZmxvdy1oaWRkZW5cbiAgICAgICAgcm91bmRlZC1bN3B4XVxuICAgICAgICBib3JkZXJcbiAgICAgICAgYm9yZGVyLVsjRERFNEVEXVxuICAgICAgICBiZy13aGl0ZVxuICAgICAgICBzaGFkb3ctWzBfNHB4XzE0cHhfcmdiYSg5LDM1LDc1LDAuMDgpXVxuXG4gICAgICAgIG1pbi1bNDIwcHhdOnctWzEzOHB4XVxuXG4gICAgICAgIHNtOm14LTBcbiAgICAgICAgc206dy1bMTIycHhdXG5cbiAgICAgICAgbWQ6dy1bMTI4cHhdXG5cbiAgICAgICAgbGc6dy1bMTMycHhdXG5cbiAgICAgICAgeGw6dy1bMTMycHhdXG4gICAgICBcIlxuICAgID5cbiAgICAgIHtzaG93SW1hZ2UgPyAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBzcmM9e1xuICAgICAgICAgICAgY29uZmVyZW5jZS5pbWFnZVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbHQ9e1xuICAgICAgICAgICAgY29uZmVyZW5jZS50aXRsZVxuICAgICAgICAgICAgICA/IGAke2NvbmZlcmVuY2UudGl0bGV9IGNvbmZlcmVuY2UgY292ZXJgXG4gICAgICAgICAgICAgIDogXCJDb25mZXJlbmNlIGNvdmVyXCJcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgIGRyYWdnYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICBvbkVycm9yPXsoKSA9PlxuICAgICAgICAgICAgc2V0SW1hZ2VFcnJvcihcbiAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICBoLWZ1bGxcbiAgICAgICAgICAgIHctZnVsbFxuICAgICAgICAgICAgYmctd2hpdGVcbiAgICAgICAgICAgIG9iamVjdC1jb250YWluXG4gICAgICAgICAgXCJcbiAgICAgICAgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2BcbiAgICAgICAgICAgIGdyaWRcbiAgICAgICAgICAgIGgtZnVsbFxuICAgICAgICAgICAgdy1mdWxsXG4gICAgICAgICAgICBwbGFjZS1pdGVtcy1jZW50ZXJcbiAgICAgICAgICAgIGJnLWdyYWRpZW50LXRvLWJyXG4gICAgICAgICAgICBweC0zXG4gICAgICAgICAgICB0ZXh0LWNlbnRlclxuICAgICAgICAgICAgdGV4dC13aGl0ZVxuXG4gICAgICAgICAgICAke1xuICAgICAgICAgICAgICBjb2xvclN0eWxlc1tcbiAgICAgICAgICAgICAgICBpbmRleCAlXG4gICAgICAgICAgICAgICAgICBjb2xvclN0eWxlcy5sZW5ndGhcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgIGJyZWFrLXdvcmRzXG4gICAgICAgICAgICAgICAgdGV4dC1bMTRweF1cbiAgICAgICAgICAgICAgICBmb250LWJvbGRcbiAgICAgICAgICAgICAgICBsZWFkaW5nLTVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2NvZGVcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgICAgICAgLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKX1cbiAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICBteC1hdXRvXG4gICAgICAgICAgICAgICAgbXQtMlxuICAgICAgICAgICAgICAgIGgtWzJweF1cbiAgICAgICAgICAgICAgICB3LTdcbiAgICAgICAgICAgICAgICByb3VuZGVkLWZ1bGxcbiAgICAgICAgICAgICAgICBiZy13aGl0ZS81MFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgbXQtMlxuICAgICAgICAgICAgICAgIHRleHQtWzlweF1cbiAgICAgICAgICAgICAgICBmb250LW1lZGl1bVxuICAgICAgICAgICAgICAgI
1030HVwcGVyY2FzZVxuICAgICAgICAgICAgICAgIHRyYWNraW5nLVswLjA4ZW1dXG4gICAgICAgICAgICAgICAgdGV4dC13aGl0ZS83NVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDb25mZXJlbmNlXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQQUdFXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29uZmVyZW5jZXMoKSB7XG4gIGNvbnN0IHJlc3VsdHNSZWYgPVxuICAgIHVzZVJlZihudWxsKTtcblxuICBjb25zdCBbXG4gICAga2V5d29yZCxcbiAgICBzZXRLZXl3b3JkLFxuICBdID0gdXNlU3RhdGUoXCJcIik7XG5cbiAgY29uc3QgW1xuICAgIHNvcnRCeSxcbiAgICBzZXRTb3J0QnksXG4gIF0gPSB1c2VTdGF0ZShcbiAgICBcInVwY29taW5nXCIsXG4gICk7XG5cbiAgY29uc3QgW1xuICAgIHBhZ2UsXG4gICAgc2V0UGFnZSxcbiAgXSA9IHVzZVN0YXRlKDEpO1xuXG4gIGNvbnN0IFtcbiAgICBwYWdlSXRlbXMsXG4gICAgc2V0UGFnZUl0ZW1zLFxuICBdID0gdXNlU3RhdGUoW10pO1xuXG4gIGNvbnN0IFtcbiAgICB0b3RhbEl0ZW1zLFxuICAgIHNldFRvdGFsSXRlbXMsXG4gIF0gPSB1c2VTdGF0ZSgwKTtcblxuICBjb25zdCBbXG4gICAgdG90YWxQYWdlcyxcbiAgICBzZXRUb3RhbFBhZ2VzLFxuICBdID0gdXNlU3RhdGUoMSk7XG5cbiAgY29uc3QgW1xuICAgIGxvYWRpbmcsXG4gICAgc2V0TG9hZGluZyxcbiAgXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIGNvbnN0IFtcbiAgICBsb2FkRXJyb3IsXG4gICAgc2V0TG9hZEVycm9yLFxuICBdID0gdXNlU3RhdGUoXCJcIik7XG5cbiAgY29uc3QgW1xuICAgIHJlbG9hZEtleSxcbiAgICBzZXRSZWxvYWRLZXksXG4gIF0gPSB1c2VTdGF0ZSgwKTtcblxuICBjb25zdCBkZWJvdW5jZWRLZXl3b3JkID1cbiAgICB1c2VEZWJvdW5jZShcbiAgICAgIGtleXdvcmQsXG4gICAgICAzNTAsXG4gICAgKTtcblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgIFBBR0UgVElUTEVcbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZG9jdW1lbnQudGl0bGUgPVxuICAgICAgXCJDb25mZXJlbmNlcyB8IFRlY2huaWNhbCBKb3VybmFsc1wiO1xuICB9LCBbXSk7XG5cbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICBGRVRDSCBDT05GRVJFTkNFU1xuXG4gICAgIE5PIEZJTFRFUlNcbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9XG4gICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkQ29uZmVyZW5jZXMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRMb2FkRXJyb3IoXCJcIik7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgbGltaXQ6XG4gICAgICAgICAgICBQQUdFX1NJWkUsXG5cbiAgICAgICAgICBzZWFyY2g6XG4gICAgICAgICAgICBkZWJvdW5jZWRLZXl3b3JkIHx8XG4gICAgICAgICAgICB1bmRlZmluZWQsXG5cbiAgICAgICAgICBzb3J0OlxuICAgICAgICAgICAgc29ydEJ5LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgICAgICBhd2FpdCBmZXRjaENvbmZlcmVuY2VzKFxuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29udHJvbGxlclxuICAgICAgICAgICAgLnNpZ25hbFxuICAgICAgICAgICAgLmFib3J0ZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93cyA9XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShcbiAgICAgICAgICAgIHJlc3BvbnNlPy5jb25mZXJlbmNlcyxcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IHJlc3BvbnNlLmNvbmZlcmVuY2VzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkoXG4gICAgICAgICAgICAgICAgICByZXNwb25zZT8uZGF0YSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgID8gcmVzcG9uc2UuZGF0YVxuICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgID8gcmVzcG9uc2VcbiAgICAgICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPVxuICAgICAgICAgIHJvd3MubWFwKFxuICAgICAgICAgICAgbm9ybWFsaXplQ29uZmVyZW5jZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPVxuICAgICAgICAgIHJlc3BvbnNlPy5wYWdpbmF0aW9uIHx8XG4gICAgICAgICAge307XG5cbiAgICAgICAgY29uc3QgbmV4dFRvdGFsSXRlbXMgPVxuICAgICAgICAgIE51bWJlcihcbiAgICAgICAgICAgIHBhZ2luYXRpb24udG90YWxJdGVtcyA/P1xuICAgICAgICAgICAgICBwYWdpbmF0aW9uLnRvdGFsID8/XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWQubGVuZ3RoLFxuICAgICAgICAgICkgfHwgMDtcblxuICAgICAgICBjb25zdCBuZXh0VG90YWxQYWdlcyA9XG4gICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgTnVtYmVyKFxuICAgICAgICAgICAgICBwYWdpbmF0aW9uLnRvdGFsUGFnZXMgPz9cbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uLnBhZ2VzID8/XG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICkgfHwgMSxcbiAgICAgICAgICApO1xuXG4gICAgICAgI
1030HNldFBhZ2VJdGVtcyhcbiAgICAgICAgICBub3JtYWxpemVkLFxuICAgICAgICApO1xuXG4gICAgICAgIHNldFRvdGFsSXRlbXMoXG4gICAgICAgICAgbmV4dFRvdGFsSXRlbXMsXG4gICAgICAgICk7XG5cbiAgICAgICAgc2V0VG90YWxQYWdlcyhcbiAgICAgICAgICBuZXh0VG90YWxQYWdlcyxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlcnJvcj8ubmFtZSA9PT1cbiAgICAgICAgICAgIFwiQWJvcnRFcnJvclwiIHx8XG4gICAgICAgICAgY29udHJvbGxlclxuICAgICAgICAgICAgLnNpZ25hbFxuICAgICAgICAgICAgLmFib3J0ZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkNvbmZlcmVuY2UgbG9hZGluZyBlcnJvcjpcIixcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgKTtcblxuICAgICAgICBzZXRMb2FkRXJyb3IoXG4gICAgICAgICAgXCJVbmFibGUgdG8gbG9hZCBjb25mZXJlbmNlcy4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICAgKTtcblxuICAgICAgICBzZXRQYWdlSXRlbXMoW10pO1xuICAgICAgICBzZXRUb3RhbEl0ZW1zKDApO1xuICAgICAgICBzZXRUb3RhbFBhZ2VzKDEpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFjb250cm9sbGVyXG4gICAgICAgICAgICAuc2lnbmFsXG4gICAgICAgICAgICAuYWJvcnRlZFxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRDb25mZXJlbmNlcygpO1xuXG4gICAgcmV0dXJuICgpID0+XG4gICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtcbiAgICBwYWdlLFxuICAgIHNvcnRCeSxcbiAgICBkZWJvdW5jZWRLZXl3b3JkLFxuICAgIHJlbG9hZEtleSxcbiAgXSk7XG5cbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICBQQUdFIFZBTElEQVRJT05cbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgcGFnZSA+XG4gICAgICB0b3RhbFBhZ2VzXG4gICAgKSB7XG4gICAgICBzZXRQYWdlKFxuICAgICAgICB0b3RhbFBhZ2VzLFxuICAgICAgKTtcbiAgICB9XG4gIH0sIFtcbiAgICBwYWdlLFxuICAgIHRvdGFsUGFnZXMsXG4gIF0pO1xuXG4gIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgUkVTVUxUIFJBTkdFXG4gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICBjb25zdCBmaXJzdFJlc3VsdCA9XG4gICAgdG90YWxJdGVtcyA+IDBcbiAgICAgID8gKHBhZ2UgLSAxKSAqXG4gICAgICAgICAgUEFHRV9TSVpFICtcbiAgICAgICAgMVxuICAgICAgOiAwO1xuXG4gIGNvbnN0IGxhc3RSZXN1bHQgPVxuICAgIE1hdGgubWluKFxuICAgICAgcGFnZSAqXG4gICAgICAgIFBBR0VfU0laRSxcbiAgICAgIHRvdGFsSXRlbXMsXG4gICAgKTtcblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgIFBBR0lOQVRJT05cbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gIGNvbnN0IHZpc2libGVQYWdlcyA9XG4gICAgdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRvdGFsUGFnZXMgPD1cbiAgICAgICAgNVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxlbmd0aDpcbiAgICAgICAgICAgICAgdG90YWxQYWdlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIChfLCBpbmRleCkgPT5cbiAgICAgICAgICAgIGluZGV4ICsgMSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYWdlIDw9IDNcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIDEsXG4gICAgICAgICAgMixcbiAgICAgICAgICAzLFxuICAgICAgICAgIDQsXG4gICAgICAgICAgXCJlbmQtZWxsaXBzaXNcIixcbiAgICAgICAgICB0b3RhbFBhZ2VzLFxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhZ2UgPj1cbiAgICAgICAgdG90YWxQYWdlcyAtIDJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIDEsXG4gICAgICAgICAgXCJzdGFydC1lbGxpcHNpc1wiLFxuICAgICAgICAgIHRvdGFsUGFnZXMgLSAzLFxuICAgICAgICAgIHRvdGFsUGFnZXMgLSAyLFxuICAgICAgICAgIHRvdGFsUGFnZXMgLSAxLFxuICAgICAgICAgIHRvdGFsUGFnZXMsXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIDEsXG4gICAgICAgIFwic3RhcnQtZWxsaXBzaXNcIixcbiAgICAgICAgcGFnZSAtIDEsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIHBhZ2UgKyAxLFxuICAgICAgICBcImVuZC1lbGxpcHNpc1wiLFxuICAgICAgICB0b3RhbFBhZ2VzLFxuICAgICAgXTtcbiAgICB9LCBbXG4gICAgICBwYWdlLFxuICAgICAgdG90YWxQYWdlcyxcbiAgICBdKTtcblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgIENIQU5HRSBQQUdFXG4gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICBmdW5jdGlvbiBjaGFuZ2VQYWdlKFxuICAgIG5leHRQYWdlLFxuICApIHtcbiAgICBjb25zdCBzYWZlUGFnZSA9XG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgbmV4dFBhZ2UsXG4gICAgICAgICAgMSxcbiAgICAgICAgKSxcbiAgICAgICAgdG90YWxQYWdlcyxcbiAgICAgICk7XG5cbiAgICBzZXRQYWdlKFxuICAgICAgc2FmZVBhZ2UsXG4gICAgKTtcblxuICAgI
1030HJlcXVlc3RBbmltYXRpb25GcmFtZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgcmVzdWx0c1JlZi5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWhhdmlvcjpcbiAgICAgICAgICAgICAgXCJzbW9vdGhcIixcbiAgICAgICAgICAgIGJsb2NrOlxuICAgICAgICAgICAgICBcInN0YXJ0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgQ0xFQVIgU0VBUkNIXG4gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICBmdW5jdGlvbiBjbGVhclNlYXJjaCgpIHtcbiAgICBzZXRLZXl3b3JkKFwiXCIpO1xuICAgIHNldFBhZ2UoMSk7XG4gIH1cblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgIFVJXG4gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICByZXR1cm4gKFxuICAgIDxtYWluXG4gICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgb3ZlcmZsb3cteC1oaWRkZW5cbiAgICAgICAgYmctd2hpdGVcbiAgICAgIFwiXG4gICAgPlxuXG4gICAgICB7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgIEhFUk9cbiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi99XG5cbiAgICAgIDxzZWN0aW9uXG4gICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgIHJlbGF0aXZlXG4gICAgICAgICAgaXNvbGF0ZVxuICAgICAgICAgIG1pbi1oLVszMzBweF1cbiAgICAgICAgICBvdmVyZmxvdy1oaWRkZW5cbiAgICAgICAgICBiZy1bIzAzMTgzRl1cbiAgICAgICAgICB0ZXh0LXdoaXRlXG5cbiAgICAgICAgICBzbTptaW4taC1bMzUwcHhdXG5cbiAgICAgICAgICBsZzptaW4taC1bMzYwcHhdXG4gICAgICAgIFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgXG4gICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgICAgICAgIDkwZGVnLFxuICAgICAgICAgICAgICByZ2JhKDMsMTgsNDksLjk4KSAwJSxcbiAgICAgICAgICAgICAgcmdiYSgzLDE4LDQ5LC45MSkgMzYlLFxuICAgICAgICAgICAgICByZ2JhKDMsMTgsNDksLjIyKSA3MiUsXG4gICAgICAgICAgICAgIHJnYmEoMywxOCw0OSwuMDQpIDEwMCVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB1cmwoJHtjb25mQmd9KVxuICAgICAgICAgIGAsXG5cbiAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246XG4gICAgICAgICAgICBcImNlbnRlclwiLFxuXG4gICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDpcbiAgICAgICAgICAgIFwibm8tcmVwZWF0XCIsXG5cbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTpcbiAgICAgICAgICAgIFwiY292ZXJcIixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgcG9pbnRlci1ldmVudHMtbm9uZVxuICAgICAgICAgICAgYWJzb2x1dGVcbiAgICAgICAgICAgIGluc2V0LTBcbiAgICAgICAgICAgIC16LTEwXG4gICAgICAgICAgICBiZy1bIzAzMTgzRl0vMTVcblxuICAgICAgICAgICAgbWQ6YmctdHJhbnNwYXJlbnRcbiAgICAgICAgICBcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgIG14LWF1dG9cbiAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgIG1pbi1oLVszMzBweF1cbiAgICAgICAgICAgIHctZnVsbFxuICAgICAgICAgICAgbWF4LXctWzE0NDBweF1cbiAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgcHgtNFxuICAgICAgICAgICAgcHktOVxuXG4gICAgICAgICAgICBzbTptaW4taC1bMzUwcHhdXG4gICAgICAgICAgICBzbTpweC04XG5cbiAgICAgICAgICAgIGxnOm1pbi1oLVszNjBweF1cbiAgICAgICAgICAgIGxnOnB4LTE2XG5cbiAgICAgICAgICAgIHhsOnB4LTIwXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICB3LWZ1bGxcbiAgICAgICAgICAgICAgbWF4LXctWzY1MHB4XVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bW90aW9uLmgxXG4gICAgICAgICAgICAgIGluaXRpYWw9e3tcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgIHk6IDE4LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBhbmltYXRlPXt7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246XG4gICAgICAgICAgICAgICAgICAwLjU1LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICB0ZXh0LVszMHB4XVxuICAgICAgICAgICAgICAgIGZvbnQtWzYwMF1cbiAgICAgICAgICAgICAgICB0cmFja2luZy1bLTAuMDJlbV1cblxuICAgICAgICAgICAgICAgIHNtOnRleHQtWzM4cHhdXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENvbmZlcmVuY2VzXG4gICAgICAgICAgICA8L21vdGlvbi5oMT5cblxuICAgICAgICAgICAgPG1vdGlvbi5wXG4gICAgICAgICAgICAgIGluaXRpYWw9e3tcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgIHk6IDE0LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBhbmltYXRlPXt7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246XG4gICAgICAgICAgICAgICAgICAwLjU1LFxuICAgICAgICAgICAgICAgIGRlbGF5OlxuICAgICAgICAgICAgICAgICAgMC4wOCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgbXQtM1xuICAgICAgICAgICAgICAgIG1heC13LVs1MjBweF1cbiAgICAgICAgICAgICAgICB0ZXh0LVsxM3B4XVxuICAgICAgICAgICAgICAgIGxlYWRpbmctNlxuICAgICAgICAgICAgICAgI
1030HRleHQtd2hpdGUvOTBcblxuICAgICAgICAgICAgICAgIHNtOnRleHQtWzE1cHhdXG4gICAgICAgICAgICAgICAgc206bGVhZGluZy03XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIERpc2NvdmVyIGFuZCBwYXJ0aWNpcGF0ZSBpbiBsZWFkaW5nIGNvbmZlcmVuY2VzIGFzc29jaWF0ZWQgd2l0aFxuICAgICAgICAgICAgICBUZWNobmljYWwgSm91cm5hbHMuIFNoYXJlIHlvdXIgcmVzZWFyY2gsIGNvbm5lY3Qgd2l0aCBleHBlcnRzLCBhbmRcbiAgICAgICAgICAgICAgY29udHJpYnV0ZSB0byBhZHZhbmNpbmcga25vd2xlZGdlLlxuICAgICAgICAgICAgPC9tb3Rpb24ucD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIHsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgQ09ORkVSRU5DRSBTRUNUSU9OXG4gICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovfVxuXG4gICAgICA8c2VjdGlvblxuICAgICAgICByZWY9e1xuICAgICAgICAgIHJlc3VsdHNSZWZcbiAgICAgICAgfVxuICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICBzY3JvbGwtbXQtMjRcbiAgICAgICAgICBweS04XG5cbiAgICAgICAgICBzbTpweS0xMFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICBteC1hdXRvXG4gICAgICAgICAgICB3LWZ1bGxcbiAgICAgICAgICAgIG1heC13LVsxMjgwcHhdXG4gICAgICAgICAgICBweC00XG5cbiAgICAgICAgICAgIHNtOnB4LTZcblxuICAgICAgICAgICAgbWQ6cHgtOFxuXG4gICAgICAgICAgICBsZzpweC0xMFxuXG4gICAgICAgICAgICB4bDpweC0xMlxuICAgICAgICAgIFwiXG4gICAgICAgID5cblxuICAgICAgICAgIHsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgICAgVE9QIEJBUlxuICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL31cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICBtYi01XG4gICAgICAgICAgICAgIGdyaWRcbiAgICAgICAgICAgICAgZ3JpZC1jb2xzLTFcbiAgICAgICAgICAgICAgZ2FwLTNcblxuICAgICAgICAgICAgICBtZDpncmlkLWNvbHMtW21pbm1heCgwLDFmcilfYXV0b11cbiAgICAgICAgICAgICAgbWQ6aXRlbXMtY2VudGVyXG4gICAgICAgICAgICAgIG1kOmdhcC01XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cblxuICAgICAgICAgICAgey8qIFNFQVJDSCAqL31cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVxuICAgICAgICAgICAgICAgIHctZnVsbFxuICAgICAgICAgICAgICAgIG1heC13LVs2MjBweF1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFNlYXJjaFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgYWJzb2x1dGVcbiAgICAgICAgICAgICAgICAgIHJpZ2h0LTMuNVxuICAgICAgICAgICAgICAgICAgdG9wLTEvMlxuICAgICAgICAgICAgICAgICAgaC00XG4gICAgICAgICAgICAgICAgICB3LTRcbiAgICAgICAgICAgICAgICAgIC10cmFuc2xhdGUteS0xLzJcbiAgICAgICAgICAgICAgICAgIHRleHQtWyMxNzNFN0RdXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgICAgICBrZXl3b3JkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoXG4gICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEtleXdvcmQoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgLnRhcmdldFxuICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIHNldFBhZ2UoMSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb25mZXJlbmNlcyBieSB0aXRsZSwga2V5d29yZCwgb3IgbG9jYXRpb24uLi5cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgaC0xMVxuICAgICAgICAgICAgICAgICAgdy1mdWxsXG4gICAgICAgICAgICAgICAgICByb3VuZGVkLVs3cHhdXG4gICAgICAgICAgICAgICAgICBib3JkZXJcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1bI0RDRTNFRF1cbiAgICAgICAgICAgICAgICAgIGJnLXdoaXRlXG4gICAgICAgICAgICAgICAgICBweC00XG4gICAgICAgICAgICAgICAgICBwci0xMFxuICAgICAgICAgICAgICAgICAgdGV4dC1bMTJweF1cbiAgICAgICAgICAgICAgICAgIHRleHQtWyMyNjNDNjBdXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lLW5vbmVcbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOnRleHQtWyM4QTk4QUFdXG5cbiAgICAgICAgICAgICAgICAgIGZvY3VzOmJvcmRlci1bIzA3NTZDRl1cbiAgICAgICAgICAgICAgICAgIGZvY3VzOnJpbmctMlxuICAgICAgICAgICAgICAgICAgZm9jdXM6cmluZy1bIzA3NTZDRl0vMTBcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBSRVNVTFQgKyBTT1JUICovfVxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgICBmbGV4LWNvbFxuICAgICAgICAgICAgICAgIGdhcC0yLjVcblxuICAgICAgICAgICAgICAgIG1pbi1bNDYwcHhdOmZsZXgtcm93XG4gICAgICAgICAgICAgICAgbWluLVs0NjBweF06aXRlbXMtY2VudGVyXG4gICAgICAgICAgICAgICAgbWluLVs0NjBweF06anVzdGlmeS1iZXR3ZWVuXG5cbiAgICAgICAgICAgICAgICBtZDpqdXN0aWZ5LWVuZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZS1ub3dyYXBcbiAgICAgICAgICAgICAgICAgI
1030HRleHQtWzExcHhdXG4gICAgICAgICAgICAgICAgICBmb250LW1lZGl1bVxuICAgICAgICAgICAgICAgICAgdGV4dC1bIzUzNjY4MF1cblxuICAgICAgICAgICAgICAgICAgc206dGV4dC1bMTJweF1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtWyMxNzM0NUZdXCI+XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdWx0XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICDigJNcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFJlc3VsdFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgb2Z7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LVsjMTczNDVGXVwiPlxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBjb25mZXJlbmNlc1xuICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgcmVsYXRpdmVcbiAgICAgICAgICAgICAgICAgIHNocmluay0wXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtcbiAgICAgICAgICAgICAgICAgICAgc29ydEJ5XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRTb3J0QnkoXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC50YXJnZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRQYWdlKDEpO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgICBoLTEwXG4gICAgICAgICAgICAgICAgICAgIHctZnVsbFxuICAgICAgICAgICAgICAgICAgICBtaW4tdy1bMTU1cHhdXG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2Utbm9uZVxuICAgICAgICAgICAgICAgICAgICByb3VuZGVkLVs3cHhdXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclxuICAgICAgICAgICAgICAgICAgICBib3JkZXItWyNEQ0UzRURdXG4gICAgICAgICAgICAgICAgICAgIGJnLXdoaXRlXG4gICAgICAgICAgICAgICAgICAgIHBsLTNcbiAgICAgICAgICAgICAgICAgICAgcHItOFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LVsxMXB4XVxuICAgICAgICAgICAgICAgICAgICBmb250LW1lZGl1bVxuICAgICAgICAgICAgICAgICAgICB0ZXh0LVsjMjYzQzYwXVxuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLW5vbmVcblxuICAgICAgICAgICAgICAgICAgICBmb2N1czpib3JkZXItWyMwNzU2Q0ZdXG5cbiAgICAgICAgICAgICAgICAgICAgbWluLVs0NjBweF06dy1bMTYwcHhdXG5cbiAgICAgICAgICAgICAgICAgICAgc206dGV4dC1bMTJweF1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInVwY29taW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIFNvcnQ6IFVwY29taW5nXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5ld2VzdFwiPlxuICAgICAgICAgICAgICAgICAgICBTb3J0OiBOZXdlc3RcbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydDogVGl0bGVcbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibG9jYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydDogTG9jYXRpb25cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgPENoZXZyb25Eb3duXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlci1ldmVudHMtbm9uZVxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVxuICAgICAgICAgICAgICAgICAgICByaWdodC0yLjVcbiAgICAgICAgICAgICAgICAgICAgdG9wLTEvMlxuICAgICAgICAgICAgICAgICAgICBoLTMuNVxuICAgICAgICAgICAgICAgICAgICB3LTMuNVxuICAgICAgICAgICAgICAgICAgICAtdHJhbnNsYXRlLXktMS8yXG4gICAgICAgICAgICAgICAgICAgIHRleHQtWyM0MzU3NzVdXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAgIExPQURJTkdcbiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi99XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgIG1pbi1oLVszMDBweF1cbiAgICAgICAgICAgICAgICBmbGV4LWNvbFxuICAgICAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgICAgIGp1c3RpZnktY2VudGVyXG4gICAgICAgICAgICAgICAgcm91bmRlZC1bMTBweF1cbiAgICAgICAgICAgICAgICBib3JkZXJcbiAgICAgICAgICAgICAgICBib3JkZXItZGFzaGVkXG4gICAgICAgICAgICAgICAgYm9yZGVyLVsjQ0NEN0U1XVxuICAgICAgICAgICAgICAgIGJnLVsjRjhGQUZEXVxuICAgICAgICAgICAgICAgI
1030HB4LTVcbiAgICAgICAgICAgICAgICB0ZXh0LWNlbnRlclxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGVyMlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgaC04XG4gICAgICAgICAgICAgICAgICB3LThcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGUtc3BpblxuICAgICAgICAgICAgICAgICAgdGV4dC1bIzA3NTZDRl1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICBtdC0zXG4gICAgICAgICAgICAgICAgICB0ZXh0LVsxM3B4XVxuICAgICAgICAgICAgICAgICAgZm9udC1tZWRpdW1cbiAgICAgICAgICAgICAgICAgIHRleHQtWyM2ODc5OTFdXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIExvYWRpbmcgY29uZmVyZW5jZXMuLi5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IGxvYWRFcnJvciA/IChcblxuICAgICAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAgICBFUlJPUlxuICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgIG1pbi1oLVsyNjBweF1cbiAgICAgICAgICAgICAgICBmbGV4LWNvbFxuICAgICAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgICAgIGp1c3RpZnktY2VudGVyXG4gICAgICAgICAgICAgICAgcm91bmRlZC1bMTBweF1cbiAgICAgICAgICAgICAgICBib3JkZXJcbiAgICAgICAgICAgICAgICBib3JkZXItZGFzaGVkXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJlZC0yMDBcbiAgICAgICAgICAgICAgICBiZy1yZWQtNTBcbiAgICAgICAgICAgICAgICBweC01XG4gICAgICAgICAgICAgICAgdGV4dC1jZW50ZXJcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgIHRleHQtWzE0cHhdXG4gICAgICAgICAgICAgICAgICBmb250LXNlbWlib2xkXG4gICAgICAgICAgICAgICAgICB0ZXh0LXJlZC03MDBcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2xvYWRFcnJvcn1cbiAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgc2V0UmVsb2FkS2V5KFxuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgK1xuICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgbXQtNFxuICAgICAgICAgICAgICAgICAgbWluLWgtWzQwcHhdXG4gICAgICAgICAgICAgICAgICByb3VuZGVkLVs1cHhdXG4gICAgICAgICAgICAgICAgICBiZy1bIzA3NTZDRl1cbiAgICAgICAgICAgICAgICAgIHB4LTVcbiAgICAgICAgICAgICAgICAgIHRleHQtWzEycHhdXG4gICAgICAgICAgICAgICAgICBmb250LXNlbWlib2xkXG4gICAgICAgICAgICAgICAgICB0ZXh0LXdoaXRlXG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uXG5cbiAgICAgICAgICAgICAgICAgIGhvdmVyOmJnLVsjMDY0QUI0XVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBUcnkgQWdhaW5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogcGFnZUl0ZW1zLmxlbmd0aCA9PT1cbiAgICAgICAgICAgIDAgPyAoXG5cbiAgICAgICAgICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgICAgRU1QVFlcbiAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgICBtaW4taC1bMjgwcHhdXG4gICAgICAgICAgICAgICAgZmxleC1jb2xcbiAgICAgICAgICAgICAgICBpdGVtcy1jZW50ZXJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNlbnRlclxuICAgICAgICAgICAgICAgIHJvdW5kZWQtWzEwcHhdXG4gICAgICAgICAgICAgICAgYm9yZGVyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWRhc2hlZFxuICAgICAgICAgICAgICAgIGJvcmRlci1bI0NDRDdFNV1cbiAgICAgICAgICAgICAgICBiZy1bI0Y4RkFGRF1cbiAgICAgICAgICAgICAgICBweC01XG4gICAgICAgICAgICAgICAgdGV4dC1jZW50ZXJcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFNlYXJjaFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgaC05XG4gICAgICAgICAgICAgICAgICB3LTlcbiAgICAgICAgICAgICAgICAgIHRleHQtWyM5QUE4QkFdXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICA8aDJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgIG10LTRcbiAgICAgICAgICAgICAgICAgIHRleHQtWzE3cHhdXG4gICAgICAgICAgICAgICAgICBmb250LVs2MDBdXG4gICAgICAgICAgICAgICAgICB0ZXh0LVsjMTczNDVGXVxuXG4gICAgICAgICAgICAgICAgICBzbTp0ZXh0LVsxOHB4XVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBObyBjb25mZXJlbmNlcyBmb3VuZFxuICAgICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICBtdC0yXG4gICAgICAgICAgICAgICAgICBtYXgtdy1bNDIwcHhdXG4gICAgICAgICAgICAgICAgICB0ZXh0LVsxMnB4XVxuICAgICAgICAgICAgICAgICAgbGVhZGluZy01XG4gICAgICAgICAgICAgICAgICB0ZXh0LVsjNjg3OTkxXVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBUcnkgYW5vdGhlciB0aXRsZSwga2V5d29yZCwgb3IgbG9jYXRpb24uXG4gICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICB7a2V5d29yZCAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJTZWFyY2hcbiAgICAgICAgICAgICAgICAgI
1030H1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgICBtdC01XG4gICAgICAgICAgICAgICAgICAgIG1pbi1oLVs0MHB4XVxuICAgICAgICAgICAgICAgICAgICByb3VuZGVkLVs1cHhdXG4gICAgICAgICAgICAgICAgICAgIGJnLVsjMDc1NkNGXVxuICAgICAgICAgICAgICAgICAgICBweC01XG4gICAgICAgICAgICAgICAgICAgIHRleHQtWzEycHhdXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2VtaWJvbGRcbiAgICAgICAgICAgICAgICAgICAgdGV4dC13aGl0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBWaWV3IEFsbCBDb25mZXJlbmNlc1xuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcblxuICAgICAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAgICBDT05GRVJFTkNFIENBUkRTXG4gICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICBzcGFjZS15LTRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3BhZ2VJdGVtcy5tYXAoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdG9waWNzID1cbiAgICAgICAgICAgICAgICAgICAgbGlzdChcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlLnRvcGljcyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZS50YWdzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlLmtleXdvcmRzLFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBjb2RlID1cbiAgICAgICAgICAgICAgICAgICAgdGV4dChcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlLmNvZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2Uuc2hvcnROYW1lLFxuICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgIGBDT05GICR7bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpfWA7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9yZ2FuaXplciA9XG4gICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VPcmdhbml6ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPVxuICAgICAgICAgICAgICAgICAgICB0ZXh0KFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2UudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgXCJBY2FkZW1pYyBDb25mZXJlbmNlXCI7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgdGV4dChcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiRXhwbG9yZSBjdXJyZW50IHJlc2VhcmNoLCBleGNoYW5nZSBrbm93bGVkZ2UsIGFuZCBjb25uZWN0IHdpdGggcmVzZWFyY2hlcnMgYW5kIHByb2Zlc3Npb25hbHMuXCI7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxtb3Rpb24uYXJ0aWNsZVxuICAgICAgICAgICAgICAgICAgICAgIGtleT17XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlLmlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlLnNsdWcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvZGV9LSR7aW5kZXh9YFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAwLjMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAwLjA0LFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgd2hpbGVIb3Zlcj17e1xuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW4tdy0wXG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkLWNvbHMtMVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2FwLTRcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LWhpZGRlblxuICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZC1bMTBweF1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLVsjRTFFN0VGXVxuICAgICAgICAgICAgICAgICAgICAgICAgYmctd2hpdGVcbiAgICAgICAgICAgICAgICAgICAgICAgI
1030HAtNFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi1hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uLTMwMFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcjpib3JkZXItWyNCNUNCRUFdXG4gICAgICAgICAgICAgICAgICAgICAgICBob3ZlcjpzaGFkb3ctWzBfMTBweF8yOHB4X3JnYmEoMTAsMzksODIsMC4wNyldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNtOmdyaWQtY29scy1bMTIycHhfbWlubWF4KDAsMWZyKV1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNtOml0ZW1zLXN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICBzbTpnYXAtNVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBtZDpncmlkLWNvbHMtWzEyOHB4X21pbm1heCgwLDFmcildXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxnOmdyaWQtY29scy1bMTMycHhfbWlubWF4KDAsMWZyKV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgeGw6Z3JpZC1jb2xzLVsxMzZweF9taW5tYXgoMCwxZnIpXzIxMHB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgeGw6Z2FwLTZcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICAgICAgICB7LyogQ09WRVIgKi99XG5cbiAgICAgICAgICAgICAgICAgICAgICA8Q29uZmVyZW5jZUltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgey8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1BSU4gREVUQUlMU1xuICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovfVxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13LTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHktMC41XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgICAgICAgICAgey8qIFRZUEUgKi99XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZS1mbGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LXctZnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZWQtWzRweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZy1bI0VBRjJGRl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBweC0yLjVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBweS0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bOS41cHhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zZW1pYm9sZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtWyMwNzU2Q0ZdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbTp0ZXh0LVsxMHB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29uZmVyZW5jZVR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgey8qIFRJVExFICovfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXQtMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrLXdvcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bMTVweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LVs2MDBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGluZy1bMS40XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtWyMwNzFDNDZdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbTp0ZXh0LVsxNS41cHhdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDp0ZXh0LVsxNnB4XVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGc6dGV4dC1bMTYuNXB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogT1JHQU5JWkVSICovfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdC0xLjVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhay13b3Jkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtWzExcHhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGluZy01XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bIzQxNTY3NV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtOnRleHQtWzExLjVweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2VtaWJvbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1030HRleHQtWyMyQjQyNjVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZ2FuaXplZCBieTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAge29yZ2FuaXplcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgey8qIERFU0NSSVBUSU9OICovfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdC0xLjVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLWNsYW1wLTNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsxMXB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRpbmctWzEuNjVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bIzY2NzU4QV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtOmxpbmUtY2xhbXAtMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtOnRleHQtWzExLjVweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogVE9QSUNTICovfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10LTIuNVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LXdyYXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy1jZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXAtMS41XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsxMC41cHhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNlbWlib2xkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsjMzU0QjZCXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3BpY3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KHRvcGljcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRvcGljc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlU3ViamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGljLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LXctZnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWstd29yZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZWQtZnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmctWyNGMEY0RjldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweC0yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweS0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVs5LjVweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtbWVkaXVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkaW5nLTRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtWyM0MDU4NzldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtOnRleHQtWzEwcHhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0b3BpY31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICB7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQSBTSURFXG4gICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi99XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4tdy0wXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdhcC00XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci10XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1bI0U3RUJGMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHQtNFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgI
1030HNtOmNvbC1zcGFuLTJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc206ZmxleC1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc206aXRlbXMtY2VudGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNtOmp1c3RpZnktYmV0d2VlblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHhsOmNvbC1zcGFuLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeGw6Ym9yZGVyLWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeGw6Ym9yZGVyLXQtMFxuICAgICAgICAgICAgICAgICAgICAgICAgICB4bDpwbC01XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHhsOnB0LTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeGw6ZmxleC1jb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeGw6aXRlbXMtc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICB4bDpqdXN0aWZ5LWJldHdlZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXctMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29scy0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwLTNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi1bNDYwcHhdOmdyaWQtY29scy0yXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbTpmbGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc206ZmxleC13cmFwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc206Z2FwLXgtNVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGw6Z3JpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsOmdyaWQtY29scy0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIERBVEUgKi99XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13LTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLXN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXAtMi41XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsxMXB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1tZWRpdW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRpbmctNVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bIzMwNDk2RF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc206dGV4dC1bMTEuNXB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FsZW5kYXJEYXlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXQtWzJweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC00XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHctNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHJpbmstMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsjMjQ1NUEzXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYnJlYWstd29yZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb25mZXJlbmNlRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIExPQ0FUSU9OICovfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4tdy0wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy1zdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwLTIuNVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bMTFweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtbWVkaXVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkaW5nLTVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtWyMzMDQ5NkRdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtOnRleHQtWzExLjVweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1hcFBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10LVsycHhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgtNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LTRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hyaW5rLTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bIzI0NTVBM11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJyZWFrLXdvcmRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29uZmVyZW5jZUxvY2F0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogVklFVyBERVRBSUxTICovfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0bz17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZS5kZXRhaWxzVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgI
1030H1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lLWZsZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4taC1bMzhweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LWZ1bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHJpbmstMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY2VudGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZC1bNXB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1bIzA3NTZDRl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBweC00XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bMTEuNXB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2VtaWJvbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsjMDc1NkNGXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyOmJnLVsjMDc1NkNGXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyOnRleHQtd2hpdGVcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtOnctWzE1MHB4XVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGw6bXQtNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsOnctZnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb3Rpb24uYXJ0aWNsZT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAgIFBBR0lOQVRJT05cbiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi99XG5cbiAgICAgICAgICB7IWxvYWRpbmcgJiZcbiAgICAgICAgICAgICFsb2FkRXJyb3IgJiZcbiAgICAgICAgICAgIHRvdGFsSXRlbXMgPlxuICAgICAgICAgICAgICBQQUdFX1NJWkUgJiZcbiAgICAgICAgICAgIHRvdGFsUGFnZXMgPlxuICAgICAgICAgICAgICAxICYmIChcbiAgICAgICAgICAgICAgPG5hdlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb25mZXJlbmNlIHBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgbXQtN1xuICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgZmxleC13cmFwXG4gICAgICAgICAgICAgICAgICBpdGVtcy1jZW50ZXJcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnktY2VudGVyXG4gICAgICAgICAgICAgICAgICBnYXAtMlxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlUGFnZShcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgcGFnZSA9PT0gMVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIHBhZ2VcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICAgIGdyaWRcbiAgICAgICAgICAgICAgICAgICAgaC04XG4gICAgICAgICAgICAgICAgICAgIHctOFxuICAgICAgICAgICAgICAgICAgICBwbGFjZS1pdGVtcy1jZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgcm91bmRlZC1bNXB4XVxuICAgICAgICAgICAgICAgICAgICBib3JkZXJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLVsjRENFM0VEXVxuICAgICAgICAgICAgICAgICAgICB0ZXh0LVsjMjM0QTg3XVxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgaG92ZXI6Ym9yZGVyLVsjMDc1NkNGXVxuICAgICAgICAgICAgICAgICAgICBob3Zlcjp0ZXh0LVsjMDc1NkNGXVxuXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDpvcGFjaXR5LTMwXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIHt2aXNpYmxlUGFnZXMubWFwKFxuICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgKSA9PlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbSA9PT1cbiAgICAgICAgICAgICAgICAgICAgXCJudW1iZXJcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVBhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jdXJyZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJwYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGgtOFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4tdy04XG4gICAgICAgICAgICAgICAgICAgICAgICAgI
1030HJvdW5kZWQtWzVweF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHgtMlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsxMXB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNlbWlib2xkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnLVsjMDc1NkNGXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LXdoaXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvdy1bMF80cHhfMTBweF9yZ2JhKDcsODYsMjA3LC4yNCldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1bI0RDRTNFRF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1bIzQwNTY3NV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3Zlcjpib3JkZXItWyMwNzU2Q0ZdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyOnRleHQtWyMwNzU2Q0ZdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGgtOFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4tdy02XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlLWl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsxMnB4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LVsjNjA3MThBXVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICDigKZcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlUGFnZShcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlICtcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgcGFnZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgdG90YWxQYWdlc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgcGFnZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgZ3JpZFxuICAgICAgICAgICAgICAgICAgICBoLThcbiAgICAgICAgICAgICAgICAgICAgdy04XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlLWl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgICAgICAgICByb3VuZGVkLVs1cHhdXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclxuICAgICAgICAgICAgICAgICAgICBib3JkZXItWyNEQ0UzRURdXG4gICAgICAgICAgICAgICAgICAgIHRleHQtWyMyMzRBODddXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25cblxuICAgICAgICAgICAgICAgICAgICBob3Zlcjpib3JkZXItWyMwNzU2Q0ZdXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyOnRleHQtWyMwNzU2Q0ZdXG5cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOm9wYWNpdHktMzBcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPENoZXZyb25SaWdodCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgey8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICBDVEFcbiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi99XG5cbiAgICAgIDxzZWN0aW9uXG4gICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgIG14LWF1dG9cbiAgICAgICAgICB3LWZ1bGxcbiAgICAgICAgICBtYXgtdy1bMTQ0MHB4XVxuICAgICAgICAgIHB4LTRcbiAgICAgICAgICBwYi04XG5cbiAgICAgICAgICBzbTpweC04XG5cbiAgICAgICAgICBsZzpweC0xNlxuXG4gICAgICAgICAgeGw6cHgtMjBcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICBpbml0aWFsPXt7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgeTogMTgsXG4gICAgICAgICAgfX1cbiAgICAgICAgICB3aGlsZUluVmlldz17e1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgI
1030Hk6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICB2aWV3cG9ydD17e1xuICAgICAgICAgICAgb25jZTogdHJ1ZSxcbiAgICAgICAgICAgIGFtb3VudDogMC4zLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICByZWxhdGl2ZVxuICAgICAgICAgICAgb3ZlcmZsb3ctaGlkZGVuXG4gICAgICAgICAgICByb3VuZGVkLVsxMXB4XVxuICAgICAgICAgICAgYmctW2xpbmVhci1ncmFkaWVudCgxMDBkZWcsIzAzMUI0NywjMDYzQjgwKV1cbiAgICAgICAgICAgIHRleHQtd2hpdGVcbiAgICAgICAgICAgIHNoYWRvdy1bMF8xMHB4XzI2cHhfcmdiYSgzLDI0LDYzLC4xNSldXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICBncmlkXG4gICAgICAgICAgICAgIG1pbi1oLVsxMTBweF1cbiAgICAgICAgICAgICAgaXRlbXMtY2VudGVyXG5cbiAgICAgICAgICAgICAgbWQ6Z3JpZC1jb2xzLVsxODBweF9taW5tYXgoMCwxZnIpXVxuXG4gICAgICAgICAgICAgIGxnOmdyaWQtY29scy1bMTkwcHhfbWlubWF4KDAsMWZyKV1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuXG4gICAgICAgICAgICB7LyogQ1RBIElNQUdFICovfVxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgIHJlbGF0aXZlXG4gICAgICAgICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgICAgICAgaC1mdWxsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3ctaGlkZGVuXG5cbiAgICAgICAgICAgICAgICBtZDpibG9ja1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPXtcbiAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VDdGFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWx0PVwiQ29uZmVyZW5jZSBjYWxlbmRhclwiXG4gICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgYWJzb2x1dGVcbiAgICAgICAgICAgICAgICAgIGluc2V0LTBcbiAgICAgICAgICAgICAgICAgIGgtZnVsbFxuICAgICAgICAgICAgICAgICAgdy1mdWxsXG4gICAgICAgICAgICAgICAgICBvYmplY3QtY29udGFpblxuICAgICAgICAgICAgICAgICAgcC0zXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBIENPTlRFTlQgKi99XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgZ3JpZFxuICAgICAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgICAgIGdhcC02XG4gICAgICAgICAgICAgICAgcHgtNVxuICAgICAgICAgICAgICAgIHB5LTdcblxuICAgICAgICAgICAgICAgIHNtOnB4LTZcblxuICAgICAgICAgICAgICAgIGxnOmdyaWQtY29scy1bbWlubWF4KDAsMWZyKV9hdXRvXVxuICAgICAgICAgICAgICAgIGxnOnB4LTlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aDJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0LVsxOXB4XVxuICAgICAgICAgICAgICAgICAgICBmb250LVs1NTBdXG5cbiAgICAgICAgICAgICAgICAgICAgc206dGV4dC1bMjJweF1cblxuICAgICAgICAgICAgICAgICAgICBsZzp0ZXh0LVsyM3B4XVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBPcmdhbml6ZSBZb3VyIENvbmZlcmVuY2Ugd2l0aCBVc1xuICAgICAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiXG4gICAgICAgICAgICAgICAgICAgIG10LTJcbiAgICAgICAgICAgICAgICAgICAgbWF4LXctWzQzMHB4XVxuICAgICAgICAgICAgICAgICAgICB0ZXh0LVsxMnB4XVxuICAgICAgICAgICAgICAgICAgICBsZWFkaW5nLTVcbiAgICAgICAgICAgICAgICAgICAgdGV4dC13aGl0ZS84NVxuXG4gICAgICAgICAgICAgICAgICAgIHNtOnRleHQtWzEzcHhdXG5cbiAgICAgICAgICAgICAgICAgICAgbGc6dGV4dC1bMTRweF1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgUGFydG5lciB3aXRoIFRlY2huaWNhbCBKb3VybmFscyB0byBob3N0IHlvdXIgY29uZmVyZW5jZSBhbmRcbiAgICAgICAgICAgICAgICAgIHJlYWNoIGEgZ2xvYmFsIGF1ZGllbmNlIG9mIHJlc2VhcmNoZXJzIGFuZCBwcm9mZXNzaW9uYWxzLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIlxuICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgZmxleC1jb2xcbiAgICAgICAgICAgICAgICAgIGdhcC0yLjVcblxuICAgICAgICAgICAgICAgICAgbWluLVs0MzBweF06ZmxleC1yb3dcbiAgICAgICAgICAgICAgICAgIG1pbi1bNDMwcHhdOmZsZXgtd3JhcFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgdG89XCIvY29udGFjdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lLWZsZXhcbiAgICAgICAgICAgICAgICAgICAgaC0xMVxuICAgICAgICAgICAgICAgICAgICB3LWZ1bGxcbiAgICAgICAgICAgICAgICAgICAgbWluLXctWzE1MHB4XVxuICAgICAgICAgICAgICAgICAgICBpdGVtcy1jZW50ZXJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeS1jZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgcm91bmRlZC1bNnB4XVxuICAgICAgICAgICAgICAgICAgICBiZy13aGl0ZVxuICAgICAgICAgICAgICAgICAgICBweC01XG4gICAgICAgICAgICAgICAgICAgI
1030HRleHQtWzEycHhdXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2VtaWJvbGRcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1bIzA3NTZDRl1cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblxuXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyOmJnLVsjRURGNEZGXVxuXG4gICAgICAgICAgICAgICAgICAgIG1pbi1bNDMwcHhdOnctYXV0b1xuXG4gICAgICAgICAgICAgICAgICAgIHNtOnRleHQtWzEzcHhdXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFBhcnRuZXIgV2l0aCBVc1xuICAgICAgICAgICAgICAgIDwvTGluaz5cblxuICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICB0bz1cIi9zZXJ2aWNlc1wiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lLWZsZXhcbiAgICAgICAgICAgICAgICAgICAgaC0xMVxuICAgICAgICAgICAgICAgICAgICB3LWZ1bGxcbiAgICAgICAgICAgICAgICAgICAgbWluLXctWzE0MHB4XVxuICAgICAgICAgICAgICAgICAgICBpdGVtcy1jZW50ZXJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeS1jZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgcm91bmRlZC1bNnB4XVxuICAgICAgICAgICAgICAgICAgICBib3JkZXJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXdoaXRlLzc1XG4gICAgICAgICAgICAgICAgICAgIHB4LTVcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1bMTJweF1cbiAgICAgICAgICAgICAgICAgICAgZm9udC1zZW1pYm9sZFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LXdoaXRlXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25cblxuICAgICAgICAgICAgICAgICAgICBob3ZlcjpiZy13aGl0ZS8xMFxuXG4gICAgICAgICAgICAgICAgICAgIG1pbi1bNDMwcHhdOnctYXV0b1xuXG4gICAgICAgICAgICAgICAgICAgIHNtOnRleHQtWzEzcHhdXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExlYXJuIE1vcmVcbiAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L21haW4+XG4gICk7XG59Il19

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.