PageSourceSearch

https://kyn-care.com/src/components/CustomerReviewsSection.tsx

js kyn-care.com collected 2026-10-08 11:37:11 UTC 50,602 bytes, 517 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/CustomerReviewsSection.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/@fs/home/runner/workspace/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=9ce4103e"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"];
2import RefreshRuntime from "/@react-refresh";
3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
4let prevRefreshReg;
5let prevRefreshSig;
6if (import.meta.hot && !inWebWorker) {
7  if (!window.__vite_plugin_react_preamble_installed__) {
8    throw new Error("@vitejs/plugin-react can't detect preamble. Something is wrong. See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201");
9  }
10  prevRefreshReg = window.$RefreshReg$;
11  prevRefreshSig = window.$RefreshSig$;
12  window.$RefreshReg$ = (type, id) => {
13    RefreshRuntime.register(type, "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx " + id);
14  };
15  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
16}
17var _s = $RefreshSig$();
18import __vite__cjsImport3_react from "/@fs/home/runner/workspace/node_modules/.vite/deps/react.js?v=9ce4103e"; const useState = __vite__cjsImport3_react["useState"]; const useRef = __vite__cjsImport3_react["useRef"]; const useEffect = __vite__cjsImport3_react["useEffect"]; const useCallback = __vite__cjsImport3_react["useCallback"];
19import { useLanguage } from "/src/lib/LanguageContext.tsx";
20import { ChevronLeft, ChevronRight } from "/@fs/home/runner/workspace/node_modules/.vite/deps/lucide-react.js?v=9ce4103e";
21const reviews = [
22  {
23    id: 1,
24    nameFr: "Yasmine K.",
25    nameEn: "Yasmine K.",
26    textFr: "Le Savon SAM a littéralement sauvé ma peau. Mes boutons ont disparu en 3 semaines et zéro sécheresse.",
27    textEn: "The SAM Soap literally saved my skin. My breakouts cleared in 3 weeks and zero dryness."
28  },
29  {
30    id: 2,
31    nameFr: "Nyla M.",
32    nameEn: "Nyla M.",
33    textFr: "Le Beurre ONANY, c'est fou. Je l'applique le soir et le matin ma peau est encore hydratée. Game changer.",
34    textEn: "The ONANY Butter is insane. I put it on at night and my skin is still hydrated in the morning. Game changer."
35  },
36  {
37    id: 3,
38    nameFr: "Sira A.",
39    nameEn: "Sira A.",
40    textFr: "Le Gommage LELA sent incroyablement bon et laisse ma peau tellement douce. J'en suis obsédée.",
41    textEn: "The LELA Scrub smells incredible and leaves my skin so soft. I'm obsessed."
42  },
43  {
44    id: 4,
45    nameFr: "Amara D.",
46    nameEn: "Amara D.",
47    textFr: "J'ai tout essayé pour mon acné. Le Savon SAM est le seul qui a marché sans agresser ma peau.",
48    textEn: "I've tried everything for my acne. The SAM Soap is the only thing that worked without irritating my skin."
49  },
50  {
51    id: 5,
52    nameFr: "Kofi B.",
53    nameEn: "Kofi B.",
54    textFr: "Ma copine m'a forcé à l'essayer. 2 mois plus tard, mon teint est uniforme pour la première fois.",
55    textEn: "My girlfriend made me try it. 2 months later, my skin tone is even for the first time."
56  },
57  {
58    id: 6,
59    nameFr: "Zola T.",
60    nameEn: "Zola T.",
61    textFr: "Pas de produits chimiques bizarres, juste du savon qui fait son travail. Ma peau respire enfin.",
62    textEn: "No weird chemicals, just soap that actually works. My skin can finally breathe."
63  },
64  {
65    id: 7,
66    nameFr: "Malik J.",
67    nameEn: "Malik J.",
68    textFr: "Le Savon SAM dure super longtemps et l'odeur est subtile. Toute ma famille l'utilise maintenant.",
69    textEn: "The SAM Soap lasts forever and the scent is subtle. My whole family uses it now."
70  },
71  {
72    id: 8,
73    nameFr: "Imani R.",
74    nameEn: "Imani R.",
75    textFr: "Mes taches brunes s'estompent vraiment. Je ne m'y attendais pas avec un simple savon.",
76    textEn: "My dark spots are actually fading. Didn't expect that from a soap."
77  },
78  {
79    id: 9,
80    nameFr: "Adaora C.",
81    nameEn: "Adaora C.",
82    textFr: "Le Beurre ONANY pénètre instantanément. Pas de film gras sur mes draps. Enfin !",
83    textEn: "The ONANY Butter absorbs instantly. No greasy film on my sheets. Finally!"
84  },
85  {
86    id: 10,
87    nameFr: "Thierno S.",
88    nameEn: "Thierno S.",
89    textFr: "Ma peau était sèche depuis des années. Un mois avec ONANY et c'est transformé.",
90    textEn: "My skin has been dry for years. One month with ONANY and it's completely transformed."
91  },
92  {
93    id: 11,
94    nameFr: "Leila F.",
95    nameEn: "Leila F.",
96    textFr: "L'odeur n'est pas entêtante du tout. Et l'hydratation dure vraiment toute la journée.",
97    textEn: "The scent isn't overpowering at all. And the moisture actually lasts all day."
98  },
99  {
100    id: 12,
101    nameFr: "Fatima N.",
102    nameEn: "Fatima N.",
103    textFr: "J'ai testé beaucoup de beurres corporels. Celui-ci est le premier qui ne laisse pas ma peau collante.",
104    textEn: "I've tried so many body butters. This is the first one that doesn't leave my skin sticky."
105  },
106  {
107    id: 13,
108    nameFr: "Djeneba L.",
109    nameEn: "Djeneba L.",
110    textFr: "Mes coudes et genoux ne sont plus secs pour la première fois en 10 ans. Je n'exagère pas.",
111    textEn: "My elbows and knees aren't dry for the first time in 10 years. Not exaggerating."
112  },
113  {
114    id: 14,
115    nameFr: "Aisha W.",
116    nameEn: "Aisha W.",
117    textFr: "Le Gommage KATE est doux mais efficace. Ma peau brille sans être irritée.",
118    textEn: "The KATE Scrub is gentle but actually works. My skin glows without any irritation."
119  },
120  {
121    id: 15,
122    nameFr: "Yves O.",
123    nameEn: "Yves O.",
124    textFr: "Je l'utilise avant le rasage. Plus de poils incarnés. C'est aussi simple que ça.",
125    textEn: "I use it before shaving. No more ingrown hairs. It's that simple."
126  },
127  {
128    id: 16,
129    nameFr: "Sade B.",
130    nameEn: "Sade B.",
131    textFr: "La mousse est super crémeuse et ma peau reste lisse pendant des jours après.",
132    textEn: "The foam is super creamy and my skin stays smooth for days after."
133  },
134  {
135    id: 17,
136    nameFr: "Bakary N.",
137    nameEn: "Bakary N.",
138    textFr: "Parfait juste avant de sortir. Peau lisse instantanément sans effort.",
139    textEn: "Perfect right before going out. Instantly smooth skin with zero effort."
140  },
141  {
142    id: 18,
143    nameFr: "Ines M.",
144    nameEn: "Ines M.",
145    textFr: "Mes jambes n'ont jamais été aussi douces. Honnêtement, je suis accro.",
146    textEn: "My legs have never been this smooth. Honestly, I'm addicted."
147  },
148  {
149    id: 19,
150    nameFr: "Kenza P.",
151    nameEn: "Kenza P.",
152    textFr: "Le Gommage LELA c'est une vraie expérience spa à la maison. L'odeur café-cacao est divine.",
153    textEn: "The LELA Scrub is a real spa experience at home. The coffee-cocoa scent is divine."
154  },
155  {
156    id: 20,
157    nameFr: "Chidi R.",
158    nameEn: "Chidi R.",
159    textFr: "Exfoliation douce mais efficace. Ma peau est incroyablement lisse après chaque utilisation.",
160    textEn: "Gentle but effective exfoliation. My skin is incredibly smooth after every use."
161  },
162  {
163    id: 21,
164    nameFr: "Rokia E.",
165    nameEn: "Rokia E.",
166    textFr: "C'est devenu mon rituel du dimanche. Ma peau me remercie chaque semaine.",
167    textEn: "It's become my Sunday ritual. My skin thanks me every week."
168  },
169  {
170    id: 22,
171    nameFr: "Olivier K.",
172    nameEn: "Olivier K.",
173    textFr: "Je ne savais pas qu'un gommage pouvait être aussi agréable. Converti.",
174    textEn: "Didn't know a scrub could feel this good. I'm converted."
175  },
176  {
177    id: 23,
178    nameFr: "Kadi S.",
179    nameEn: "Kadi S.",
180    textFr: "Cellules mortes disparues, peau qui brille. Simple et efficace.",
181    textEn: "Dead skin gone, glowing skin. Simple and effective."
182  },
183  {
184    id: 24,
185    nameFr: "Salim D.",
186    nameEn: "Salim D.",
187    textFr: "Mes taches de soleil ont diminué en 4 semaines. J'ai les photos pour le prouver.",
188    textEn: "My sun spots faded in 4 weeks. I have the photos to prove it."
189  },
190  {
191    id: 25,
192    nameFr: "Aicha B.",
193    nameEn: "Aicha B.",
194    textFr: "Le Sérum RAÏNA unifie mon teint sans blanchir. Exactement ce que je cherchais.",
195    textEn: "The RAÏNA Serum evens my tone without bleaching. Exactly what I was looking for."
196  },
197  {
198    id: 26,
199    nameFr: "Bintu L.",
200    nameEn: "Bintu L.",
201    textFr: "3 gouttes suffisent. Le flacon dure longtemps et les résultats sont visibles.",
202    textEn: "3 drops is all you need. The bottle lasts forever and results are visible."
203  },
204  {
205    id: 27,
206    nameFr: "Marcus E.",
207    nameEn: "Marcus E.",
208    textFr: "Ma cicatrice d'acné s'est vraiment atténuée. Je ne pensais pas que c'était possible.",
209    textEn: "My acne scar actually faded. Didn't think that was possible."
210  },
211  {
212    id: 28,
213    nameFr: "Nafi G.",
214    nameEn: "Nafi G.",
215    textFr: "C'est le seul sérum qui n'irrite pas ma peau sensible. Et ça marche vraiment.",
216    textEn: "It's the only serum that doesn't irritate my sensitive skin. And it actually works."
217  }
218];
219export function CustomerReviewsSection() {
220  _s();
221  const { language } = useLanguage();
222  const sectionRef = useRef(null);
223  const carouselRef = useRef(null);
224  const [currentIndex, setCurrentIndex] = useState(0);
225  const [isAutoScrollPaused, setIsAutoScrollPaused] = useState(false);
226  const [touchStartX, setTouchStartX] = useState(0);
227  const totalSlides = reviews.length;
228  const scrollToIndex = useCallback((index) => {
229    setCurrentIndex(Math.max(0, Math.min(index, totalSlides - 1)));
230  }, [totalSlides]);
231  const handleNext = useCallback(() => {
232    const nextIndex = (currentIndex + 1) % totalSlides;
233    scrollToIndex(nextIndex);
234  }, [currentIndex, totalSlides, scrollToIndex]);
235  const handlePrev = useCallback(() => {
236    const prevIndex = currentIndex === 0 ? totalSlides - 1 : currentIndex - 1;
237    scrollToIndex(prevIndex);
238  }, [currentIndex, totalSlides, scrollToIndex]);
239  useEffect(() => {
240    if (isAutoScrollPaused) return;
241    const autoScrollInterval = setInterval(() => {
242      handleNext();
243    }, 5e3);
244    return () => clearInterval(autoScrollInterval);
245  }, [handleNext, isAutoScrollPaused]);
246  const handleTouchStart = (e) => {
247    setIsAutoScrollPaused(true);
248    setTouchStartX(e.touches[0].clientX);
249  };
250  const handleTouchEnd = (e) => {
251    const touchEndX = e.changedTouches[0].clientX;
252    const diff = touchStartX - touchEndX;
253    const threshold = 50;
254    if (Math.abs(diff) > threshold) {
255      if (diff > 0) {
256        handleNext();
257      } else {
258        handlePrev();
259      }
260    }
261    setTimeout(() => setIsAutoScrollPaused(false), 3e3);
262  };
263  const sectionTitle = language === "fr" ? "ILS EN PARLENT" : "WHAT THEY SAID";
264  return /* @__PURE__ */ jsxDEV("div", { ref: sectionRef, id: "reviews-section", className: "relative py-10 md:py-12 mt-8 md:mt-12 overflow-hidden", "data-testid": "section-customer-reviews", children: [
265    /* @__PURE__ */ jsxDEV("div", { className: "absolute inset-0", style: { backgroundColor: "#F5F5F5" } }, void 0, false, {
266      fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
267      lineNumber: 270,
268      columnNumber: 7
269    }, this),
270    /* @__PURE__ */ jsxDEV("div", { className: "relative text-center mb-6 md:mb-8 px-4", children: /* @__PURE__ */ jsxDEV(
271      "h2",
272      {
273        className: "text-[16px] md:text-[18px] uppercase tracking-[2px]",
274        style: {
275          color: "#1A1A1A",
276          fontFamily: "Helvetica, Arial, sans-serif",
277          fontWeight: 400,
278          letterSpacing: "2px"
279        },
280        "data-testid": "text-reviews-title",
281        children: sectionTitle
282      },
283      void 0,
284      false,
285      {
286        fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
287        lineNumber: 273,
288        columnNumber: 9
289      },
290      this
291    ) }, void 0, false, {
292      fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
293      lineNumber: 272,
294      columnNumber: 7
295    }, this),
296    /* @__PURE__ */ jsxDEV("div", { className: "relative w-full max-w-[750px] mx-auto px-4 md:px-6", children: [
297      /* @__PURE__ */ jsxDEV("div", { className: "relative", children: [
298        /* @__PURE__ */ jsxDEV(
299          "button",
300          {
301            onClick: () => {
302              handlePrev();
303              setIsAutoScrollPaused(true);
304              setTimeout(() => setIsAutoScrollPaused(false), 5e3);
305            },
306            className: "absolute left-0 md:-left-10 top-1/2 -translate-y-1/2 z-10 w-8 h-8 flex items-center justify-center transition-opacity hover:opacity-70",
307            "aria-label": "Previous testimonials",
308            "data-testid": "button-carousel-prev",
309            children: /* @__PURE__ */ jsxDEV(ChevronLeft, { size: 20, strokeWidth: 1.5, color: "#1A1A1A" }, void 0, false, {
310              fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
311              lineNumber: 295,
312              columnNumber: 13
313            }, this)
314          },
315          void 0,
316          false,
317          {
318            fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
319            lineNumber: 289,
320            columnNumber: 11
321          },
322          this
323        ),
324        /* @__PURE__ */ jsxDEV(
325          "div",
326          {
327            ref: carouselRef,
328            className: "overflow-hidden mx-8 md:mx-0",
329            onTouchStart: handleTouchStart,
330            onTouchEnd: handleTouchEnd,
331            children: /* @__PURE__ */ jsxDEV(
332              "div",
333              {
334                className: "flex transition-transform duration-500 ease-out",
335                style: { transform: `translateX(-${currentIndex * 100}%)` },
336                children: reviews.map(
337                  (review) => /* @__PURE__ */ jsxDEV(
338                    "div",
339                    {
340                      className: "w-full flex-shrink-0 text-center px-2 md:px-8",
341                      "data-testid": `card-review-${review.id}`,
342                      children: [
343                        /* @__PURE__ */ jsxDEV(
344                          "p",
345                          {
346                            className: "text-[14px] md:text-[15px] leading-relaxed mb-3",
347                            style: {
348                              lineHeight: 1.7,
349                              fontFamily: "Helvetica, Arial, sans-serif",
350                              fontWeight: 300,
351                              color: "#1A1A1A"
352                            },
353                            children: [
354                              '"',
355                              language === "fr" ? review.textFr : review.textEn,
356                              '"'
357                            ]
358                          },
359                          void 0,
360                          true,
361                          {
362                            fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
363                            lineNumber: 314,
364                            columnNumber: 19
365                          },
366                          this
367                        ),
368                        /* @__PURE__ */ jsxDEV(
369                          "p",
370                          {
371                            className: "text-[10px] uppercase tracking-[1.5px]",
372                            style: {
373                              fontWeight: 500,
374                              letterSpacing: "1.5px",
375                              fontFamily: "Helvetica, Arial, sans-serif",
376                              color: "#666666"
377                            },
378                            children: [
379                              "- ",
380                              language === "fr" ? review.nameFr : review.nameEn
381                            ]
382                          },
383                          void 0,
384                          true,
385                          {
386                            fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
387                            lineNumber: 325,
388                            columnNumber: 19
389                          },
390                          this
391                        )
392                      ]
393                    },
394                    review.id,
395                    true,
396                    {
397                      fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
398                      lineNumber: 309,
399                      columnNumber: 15
400                    },
401                    this
402                  )
403                )
404              },
405              void 0,
406              false,
407              {
408                fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
409                lineNumber: 304,
410                columnNumber: 13
411              },
412              this
413            )
414          },
415          void 0,
416          false,
417          {
418            fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
419            lineNumber: 298,
420            columnNumber: 11
421          },
422          this
423        ),
424        /* @__PURE__ */ jsxDEV(
425          "button",
426          {
427            onClick: () => {
428              handleNext();
429              setIsAutoScrollPaused(true);
430              setTimeout(() => setIsAutoScrollPaused(false), 5e3);
431            },
432            className: "absolute right-0 md:-right-10 top-1/2 -translate-y-1/2 z-10 w-8 h-8 flex items-center justify-center transition-opacity hover:opacity-70",
433            "aria-label": "Next testimonials",
434            "data-testid": "button-carousel-next",
435            children: /* @__PURE__ */ jsxDEV(ChevronRight, { size: 20, strokeWidth: 1.5, color: "#1A1A1A" }, void 0, false, {
436              fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
437              lineNumber: 347,
438              columnNumber: 13
439            }, this)
440          },
441          void 0,
442          false,
443          {
444            fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
445            lineNumber: 341,
446            columnNumber: 11
447          },
448          this
449        )
450      ] }, void 0, true, {
451        fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
452        lineNumber: 288,
453        columnNumber: 9
454      }, this),
455      /* @__PURE__ */ jsxDEV("div", { className: "hidden md:flex justify-center items-center gap-1 mt-5", "data-testid": "carousel-indicators", children: reviews.map(
456        (_, index) => /* @__PURE__ */ jsxDEV(
457          "button",
458          {
459            onClick: () => {
460              scrollToIndex(index);
461              setIsAutoScrollPaused(true);
462              setTimeout(() => setIsAutoScrollPaused(false), 5e3);
463            },
464            className: "w-1 h-1 rounded-full transition-all duration-300",
465            style: {
466              backgroundColor: currentIndex === index ? "#1A1A1A" : "#CCCCCC"
467            },
468            "aria-label": `Go to review ${index + 1}`,
469            "data-testid": `button-indicator-${index}`
470          },
471          index,
472          false,
473          {
474            fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
475            lineNumber: 353,
476            columnNumber: 11
477          },
478          this
479        )
480      ) }, void 0, false, {
481        fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
482        lineNumber: 351,
483        columnNumber: 9
484      }, this)
485    ] }, void 0, true, {
486      fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
487      lineNumber: 287,
488      columnNumber: 7
489    }, this)
490  ] }, void 0, true, {
491    fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx",
492    lineNumber: 269,
493    columnNumber: 5
494  }, this);
495}
496_s(CustomerReviewsSection, "q5VYQ1Z3OY9lh7cWst4mGZoL1Hk=", false, function() {
497  return [useLanguage];
498});
499_c = CustomerReviewsSection;
500var _c;
501$RefreshReg$(_c, "CustomerReviewsSection");
502if (import.meta.hot && !inWebWorker) {
503  window.$RefreshReg$ = prevRefreshReg;
504  window.$RefreshSig$ = prevRefreshSig;
505}
506if (import.meta.hot && !inWebWorker) {
507  RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
508    RefreshRuntime.registerExportsForReactRefresh("/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", currentExports);
509    import.meta.hot.accept((nextExports) => {
510      if (!nextExports) return;
511      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", currentExports, nextExports);
512      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
513    });
514  });
515}
516
517//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBNlFNOzJCQTdRTjtBQUFtQkEsTUFBUUMsY0FBV0MsNkJBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ2hFLFNBQVNDLG1CQUFtQjtBQUM1QixTQUFTQyxhQUFhQyxvQkFBb0I7QUFVMUMsTUFBTUMsVUFBb0I7QUFBQSxFQUN4QjtBQUFBLElBQ0VDLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFF
517BQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFDO0FBR0ksZ0JBQVNDLHlCQUF5QjtBQUFBQyxLQUFBO0FBQ3ZDLFFBQU0sRUFBRUMs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UFZO0FBQUEsWUFDeEQ7QUFBQSxZQUNBLGNBQVksZ0JBQWdCQSxRQUFRLENBQUM7QUFBQSxZQUNyQyxlQUFhLG9CQUFvQkEsS0FBSztBQUFBO0FBQUEsVUFQakNBO0FBQUFBLFVBRFA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVEyQztBQUFBLE1BRTVDLEtBWkg7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQWFBO0FBQUEsU0E3RUY7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQThFQTtBQUFBLE9BaEdGO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FpR0E7QUFFSjtBQUFDZCxHQTVKZUQsd0JBQXNCO0FBQUEsVUFDZlQsV0FBVztBQUFBO0FBQUF5RCxLQURsQmhEO0FBQXNCLElBQUFnRDtBQUFBQyxhQUFBRCxJQUFBIiwibmFtZXMiOlsidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlQ2FsbGJhY2siLCJ1c2VMYW5ndWFnZSIsIkNoZXZyb25MZWZ0IiwiQ2hldnJvblJpZ2h0IiwicmV2aWV3cyIsImlkIiwibmFtZUZyIiwibmFtZUVuIiwidGV4dEZyIiwidGV4dEVuIiwiQ3VzdG9tZXJSZXZpZXdzU2VjdGlvbiIsIl9zIiwibGFuZ3VhZ2UiLCJzZWN0aW9uUmVmIiwiY2Fyb3VzZWxSZWYiLCJjdXJyZW50SW5kZXgiLCJzZXRDdXJyZW50SW5kZXgiLCJ1c2VTdGF0ZSIsImlzQXV0b1Njcm9sbFBhdXNlZCIsInNldElzQXV0b1Njcm9sbFBhdXNlZCIsInRvdWNoU3RhcnRYIiwic2V0VG91Y2hTdGFydFgiLCJ0b3RhbFNsaWRlcyIsImxlbmd0aCIsInNjcm9sbFRvSW5kZXgiLCJpbmRleCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJoYW5kbGVOZXh0IiwibmV4dEluZGV4IiwiaGFuZGxlUHJldiIsInByZXZJbmRleCIsImF1dG9TY3JvbGxJbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImhhbmRsZVRvdWNoU3RhcnQiLCJlIiwidG91Y2hlcyIsImNsaWVudFgiLCJoYW5kbGVUb3VjaEVuZCIsInRvdWNoRW5kWCIsImNoYW5nZWRUb3VjaGVzIiwiZGlmZiIsInRocmVzaG9sZCIsImFicyIsInNldFRpbWVvdXQiLCJzZWN0aW9uVGl0bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJjb2xvciIsImZvbnRGYW1pbHkiLCJmb250V2VpZ2h0IiwibGV0dGVyU3BhY2luZyIsInRyYW5zZm9ybSIsIm1hcCIsInJldmlldyIsImxpbmVIZWlnaHQiLCJfIiwiX2MiLCIkUmVmcmVzaFJlZyQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiQ3VzdG9tZXJSZXZpZXdzU2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUxhbmd1YWdlIH0gZnJvbSAnQC9saWIvTGFuZ3VhZ2VDb250ZXh0JztcbmltcG9ydCB7
517IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG5pbnRlcmZhY2UgUmV2aWV3IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZUZyOiBzdHJpbmc7XG4gIG5hbWVFbjogc3RyaW5nO1xuICB0ZXh0RnI6IHN0cmluZztcbiAgdGV4dEVuOiBzdHJpbmc7XG59XG5cbmNvbnN0IHJldmlld3M6IFJldmlld1tdID0gW1xuICB7XG4gICAgaWQ6IDEsXG4gICAgbmFtZUZyOiBcIllhc21pbmUgSy5cIixcbiAgICBuYW1lRW46IFwiWWFzbWluZSBLLlwiLFxuICAgIHRleHRGcjogXCJMZSBTYXZvbiBTQU0gYSBsaXR0w6lyYWxlbWVudCBzYXV2w6kgbWEgcGVhdS4gTWVzIGJvdXRvbnMgb250IGRpc3BhcnUgZW4gMyBzZW1haW5lcyBldCB6w6lybyBzw6ljaGVyZXNzZS5cIixcbiAgICB0ZXh0RW46IFwiVGhlIFNBTSBTb2FwIGxpdGVyYWxseSBzYXZlZCBteSBza2luLiBNeSBicmVha291dHMgY2xlYXJlZCBpbiAzIHdlZWtzIGFuZCB6ZXJvIGRyeW5lc3MuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAyLFxuICAgIG5hbWVGcjogXCJOeWxhIE0uXCIsXG4gICAgbmFtZUVuOiBcIk55bGEgTS5cIixcbiAgICB0ZXh0RnI6IFwiTGUgQmV1cnJlIE9OQU5ZLCBjJ2VzdCBmb3UuIEplIGwnYXBwbGlxdWUgbGUgc29pciBldCBsZSBtYXRpbiBtYSBwZWF1IGVzdCBlbmNvcmUgaHlkcmF0w6llLiBHYW1lIGNoYW5nZXIuXCIsXG4gICAgdGV4dEVuOiBcIlRoZSBPTkFOWSBCdXR0ZXIgaXMgaW5zYW5lLiBJIHB1dCBpdCBvbiBhdCBuaWdodCBhbmQgbXkgc2tpbiBpcyBzdGlsbCB
517oeWRyYXRlZCBpbiB0aGUgbW9ybmluZy4gR2FtZSBjaGFuZ2VyLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMyxcbiAgICBuYW1lRnI6IFwiU2lyYSBBLlwiLFxuICAgIG5hbWVFbjogXCJTaXJhIEEuXCIsXG4gICAgdGV4dEZyOiBcIkxlIEdvbW1hZ2UgTEVMQSBzZW50IGluY3JveWFibGVtZW50IGJvbiBldCBsYWlzc2UgbWEgcGVhdSB0ZWxsZW1lbnQgZG91Y2UuIEonZW4gc3VpcyBvYnPDqWTDqWUuXCIsXG4gICAgdGV4dEVuOiBcIlRoZSBMRUxBIFNjcnViIHNtZWxscyBpbmNyZWRpYmxlIGFuZCBsZWF2ZXMgbXkgc2tpbiBzbyBzb2Z0LiBJJ20gb2JzZXNzZWQuXCJcbiAgfSxcbiAge1xuICAgIGlkOiA0LFxuICAgIG5hbWVGcjogXCJBbWFyYSBELlwiLFxuICAgIG5hbWVFbjogXCJBbWFyYSBELlwiLFxuICAgIHRleHRGcjogXCJKJ2FpIHRvdXQgZXNzYXnDqSBwb3VyIG1vbiBhY27DqS4gTGUgU2F2b24gU0FNIGVzdCBsZSBzZXVsIHF1aSBhIG1hcmNow6kgc2FucyBhZ3Jlc3NlciBtYSBwZWF1LlwiLFxuICAgIHRleHRFbjogXCJJJ3ZlIHRyaWVkIGV2ZXJ5dGhpbmcgZm9yIG15IGFjbmUuIFRoZSBTQU0gU29hcCBpcyB0aGUgb25seSB0aGluZyB0aGF0IHdvcmtlZCB3aXRob3V0IGlycml0YXRpbmcgbXkgc2tpbi5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDUsXG4gICAgbmFtZUZyOiBcIktvZmkgQi5cIixcbiAgICBuYW1lRW46IFwiS29maSBCLlwiLFxuICAgIHRleHRGcjogXCJNYSBjb3BpbmUgbSdhIGZvcmPDqSDDoCBsJ2Vzc2F5ZXIuIDIgbW9pcyBwbHVzIHRhcmQsIG1vbiB0ZWludCBlc3QgdW5pZm9ybWUgcG91ciBsYSBwcmVtacOocmUgZm9pcy5cIixcbiAgICB0ZXh0RW46IFwiTXkgZ2lybGZyaWVuZCBtYWRlIG1lIHRyeSBpdC4gMiBtb250aHMgbGF0ZXIsIG15IHNraW4gdG9uZSBpcyBldmVuIGZvciB0aGUgZmlyc3QgdGltZS5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDYsXG4gICAgbmFtZUZyOiBcIlpvbGEgVC5cIixcbiAgICBuYW1lRW46IFwiWm9sYSBULlwiLFxuICAgIHRleHRGcjogXCJQYXMgZGUgcHJvZHVpdHMgY2hpbWlxdWVzIGJpemFycmVzLCBqdXN0ZSBkdSBzYXZvbiBxdWkgZmFpdCBzb24gdHJhdmFpbC4gTWEgcGVhdSByZXNwaXJlIGVuZmluLlwiLFxuICAgIHRleHRFbjogXCJObyB3ZWlyZCBjaGVtaWNhbHMsIGp1c3Qgc29hcCB0aGF0IGFjdHVhbGx5IHdvcmtzLiBNeSBza2luIGNhbiBmaW5hbGx5IGJyZWF0aGUuXCJcbiAgfSxcbiAge1xuICAgIGlkOiA3LFxuICAgIG5hbWVGcjogXCJNYWxpayBKLlwiLFxuICAgIG5hbWVFbjogXCJNYWxpayBKLlwiLFxuICAgIHRleHRGcjogXCJMZSBTYXZvbiBTQU0gZHVyZSBzdXBlciBsb25ndGVtcHMgZXQgbCdvZGV1ciBlc3Qgc3VidGlsZS4gVG91dGUgbWEgZmFtaWxsZSBsJ3V0aWxpc2UgbWFpbnRlbmFudC5cIixcbiAgICB0ZXh0RW46IFwiVGhlIFNBTSBTb2FwIGxhc3RzIGZvcmV2ZXIgYW5kIHRoZSBzY2VudCBpcyBzdWJ0bGUuIE15IHdob2xlIGZhbWlseSB1c2VzIGl0IG5vdy5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDgsXG4gICAgbmFtZUZyOiBcIkltYW5pIFIuXCIsXG4gICAgbmFtZUVuOiBcIkltYW5pIFIuXCIsXG4gICAgdGV4dEZyOiBcIk1lcyB0YWNoZXMgYnJ1bmVzIHMnZXN0b21wZW50IHZyYWltZW50LiBKZSBuZSBtJ3kgYXR0ZW5kYWlzIHBhcyBhdmVjIHVuIHNpbXBsZSBzYXZvbi5cIixcbiAgICB0ZXh0RW46IFwiTXkgZGFyayBzcG90cyBhcmUgYWN0dWFsbHkgZmFkaW5nLiBEaWRuJ3QgZXhwZWN0IHRoYXQgZnJvbSBhIHNvYXAuXCJcbiAgfSxcbiAge1xuICAgIGlkOiA5LFxuICAgIG5hbWVGcjogXCJBZGFvcmEgQy5cIixcbiAgICBuYW1lRW46IFwiQWRhb3JhIEMuXCIsXG4gICAgdGV4dEZyOiBcIkxlIEJldXJyZSBPTkFOWSBww6luw6h0cmUgaW5zdGFudGFuw6ltZW50LiBQYXMgZGUgZmlsbSBncmFzIHN1ciBtZXMgZHJhcHMuIEVuZmluICFcIixcbiAgICB0ZXh0RW46IFwiVGhlIE9OQU5ZIEJ1dHRlciBhYnNvcmJzIGluc3RhbnRseS4gTm8gZ3JlYXN5IGZpbG0gb24gbXkgc2hlZXRzLiBGaW5hbGx5IVwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTAsXG4gICAgbmFtZUZyOiBcIlRoaWVybm8gUy5cIixcbiAgICBuYW1lRW46IFwiVGhpZXJubyBTLlwiLFxuICAgIHRleHRGcjogXCJNYSBwZWF1IMOpdGFpdCBzw6hjaGUgZGVwdWlzIGRlcyBhbm7DqWVzLiBVbiBtb2lzIGF2ZWMgT05BTlkgZXQgYydlc3QgdHJhbnNmb3Jtw6kuXCIsXG4gICAgdGV4dEVuOiBcIk15IHNraW4gaGFzIGJlZW4gZHJ5IGZvciB5ZWFycy4gT25lIG1vbnRoIHdpdGggT05BTlkgYW5kIGl0J3MgY29tcGxldGVseSB0cmFuc2Zvcm1lZC5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDExLFxuICAgIG5hbWVGcjogXCJMZWlsYSBGLlwiLFxuICAgIG5hbWVFbjogXCJMZWlsYSBGLlwiLFxuICAgIHRleHRGcjogXCJMJ29kZXVyIG4nZXN0IHBhcyBlbnTDqnRhbnRlIGR1IHRvdXQuIEV0IGwnaHlkcmF0YXRpb24gZHVyZSB2cmFpbWVudCB0b3V0ZSBsYSBqb3VybsOpZS5cIixcbiAgICB0ZXh0RW46IFwiVGhlIHNjZW50IGlzbid0IG92ZXJwb3dlcmluZyBhdCBhbGwuIEFuZCB0aGUgbW9pc3R1cmUgYWN0dWFsbHkgbGFzdHMgYWxsIGRheS5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDEyLFxuICAgIG5hbWVGcjogXCJGYXRpbWEgTi5cIixcbiAgICBuYW1lRW46IFwiRmF0aW1hIE4uXCIsXG4gICAgdGV4dEZyOiBcIkonYWkgdGVzdMOpIGJlYXVjb3VwIGRlIGJldXJyZXMgY29ycG9yZWxzLiBDZWx1aS1jaSBlc3QgbGUgcHJlbWllciBxdWkgbmUgbGFpc3NlIHBhcyBtYSBwZWF1IGNvbGxhbnRlLlwiLFxuICAgIHRleHRFbjogXCJJJ3ZlIHRyaWVkIHNvIG1hbnkgYm9keSBidXR0ZXJzLiBUaGlzIGlzIHRoZSBmaXJzdCBvbmUgdGhhdCBkb2Vzbid0IGxlYXZlIG15IHNraW4gc3RpY2t5LlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTMsXG4gICAgbmFtZUZyOiBcIkRqZW5lYmEgTC5cIixcbiAgICBuYW1lRW46IFwiRGplbmViYSBMLlwiLFxuICAgIHRleHRGcjogXCJNZXMgY291ZGVzIGV0IGdlbm91eCBuZSBzb250IHBsdXMgc2VjcyBwb3VyIGxhIHByZW1pw6hyZSBmb2lzIGVuIDEwIGFucy4gSmUgbidleGFnw6hyZSBwYXMuXCIsXG4gICAgdGV4dEVuOiBcIk15IGVsYm93cyBhbmQga25lZXMgYXJlbid0IGRyeSBmb3IgdGhlIGZpcnN0IHRpbWUgaW4gMTAgeWVhcnMuIE5vdCBleGFnZ2VyYXRpbmcuXCJcbiAgfSxcbiAge1xuICAgIGl
517kOiAxNCxcbiAgICBuYW1lRnI6IFwiQWlzaGEgVy5cIixcbiAgICBuYW1lRW46IFwiQWlzaGEgVy5cIixcbiAgICB0ZXh0RnI6IFwiTGUgR29tbWFnZSBLQVRFIGVzdCBkb3V4IG1haXMgZWZmaWNhY2UuIE1hIHBlYXUgYnJpbGxlIHNhbnMgw6p0cmUgaXJyaXTDqWUuXCIsXG4gICAgdGV4dEVuOiBcIlRoZSBLQVRFIFNjcnViIGlzIGdlbnRsZSBidXQgYWN0dWFsbHkgd29ya3MuIE15IHNraW4gZ2xvd3Mgd2l0aG91dCBhbnkgaXJyaXRhdGlvbi5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDE1LFxuICAgIG5hbWVGcjogXCJZdmVzIE8uXCIsXG4gICAgbmFtZUVuOiBcIll2ZXMgTy5cIixcbiAgICB0ZXh0RnI6IFwiSmUgbCd1dGlsaXNlIGF2YW50IGxlIHJhc2FnZS4gUGx1cyBkZSBwb2lscyBpbmNhcm7DqXMuIEMnZXN0IGF1c3NpIHNpbXBsZSBxdWUgw6dhLlwiLFxuICAgIHRleHRFbjogXCJJIHVzZSBpdCBiZWZvcmUgc2hhdmluZy4gTm8gbW9yZSBpbmdyb3duIGhhaXJzLiBJdCdzIHRoYXQgc2ltcGxlLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTYsXG4gICAgbmFtZUZyOiBcIlNhZGUgQi5cIixcbiAgICBuYW1lRW46IFwiU2FkZSBCLlwiLFxuICAgIHRleHRGcjogXCJMYSBtb3Vzc2UgZXN0IHN1cGVyIGNyw6ltZXVzZSBldCBtYSBwZWF1IHJlc3RlIGxpc3NlIHBlbmRhbnQgZGVzIGpvdXJzIGFwcsOocy5cIixcbiAgICB0ZXh0RW46IFwiVGhlIGZvYW0gaXMgc3VwZXIgY3JlYW15IGFuZCBteSBza2luIHN0YXlzIHNtb290aCBmb3IgZGF5cyBhZnRlci5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDE3LFxuICAgIG5hbWVGcjogXCJCYWthcnkgTi5cIixcbiAgICBuYW1lRW46IFwiQmFrYXJ5IE4uXCIsXG4gICAgdGV4dEZyOiBcIlBhcmZhaXQganVzdGUgYXZhbnQgZGUgc29ydGlyLiBQZWF1IGxpc3NlIGluc3RhbnRhbsOpbWVudCBzYW5zIGVmZm9ydC5cIixcbiAgICB0ZXh0RW46IFwiUGVyZmVjdCByaWdodCBiZWZvcmUgZ29pbmcgb3V0LiBJbnN0YW50bHkgc21vb3RoIHNraW4gd2l0aCB6ZXJvIGVmZm9ydC5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDE4LFxuICAgIG5hbWVGcjogXCJJbmVzIE0uXCIsXG4gICAgbmFtZUVuOiBcIkluZXMgTS5cIixcbiAgICB0ZXh0RnI6IFwiTWVzIGphbWJlcyBuJ29udCBqYW1haXMgw6l0w6kgYXVzc2kgZG91Y2VzLiBIb25uw6p0ZW1lbnQsIGplIHN1aXMgYWNjcm8uXCIsXG4gICAgdGV4dEVuOiBcIk15IGxlZ3MgaGF2ZSBuZXZlciBiZWVuIHRoaXMgc21vb3RoLiBIb25lc3RseSwgSSdtIGFkZGljdGVkLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTksXG4gICAgbmFtZUZyOiBcIktlbnphIFAuXCIsXG4gICAgbmFtZUVuOiBcIktlbnphIFAuXCIsXG4gICAgdGV4dEZyOiBcIkxlIEdvbW1hZ2UgTEVMQSBjJ2VzdCB1bmUgdnJhaWUgZXhww6lyaWVuY2Ugc3BhIMOgIGxhIG1haXNvbi4gTCdvZGV1ciBjYWbDqS1jYWNhbyBlc3QgZGl2aW5lLlwiLFxuICAgIHRleHRFbjogXCJUaGUgTEVMQSBTY3J1YiBpcyBhIHJlYWwgc3BhIGV4cGVyaWVuY2UgYXQgaG9tZS4gVGhlIGNvZmZlZS1jb2NvYSBzY2VudCBpcyBkaXZpbmUuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAyMCxcbiAgICBuYW1lRnI6IFwiQ2hpZGkgUi5cIixcbiAgICBuYW1lRW46IFwiQ2hpZGkgUi5cIixcbiAgICB0ZXh0RnI6IFwiRXhmb2xpYXRpb24gZG91Y2UgbWFpcyBlZmZpY2FjZS4gTWEgcGVhdSBlc3QgaW5jcm95YWJsZW1lbnQgbGlzc2UgYXByw6hzIGNoYXF1ZSB1dGlsaXNhdGlvbi5cIixcbiAgICB0ZXh0RW46IFwiR2VudGxlIGJ1dCBlZmZlY3RpdmUgZXhmb2xpYXRpb24uIE15IHNraW4gaXMgaW5jcmVkaWJseSBzbW9vdGggYWZ0ZXIgZXZlcnkgdXNlLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMjEsXG4gICAgbmFtZUZyOiBcIlJva2lhIEUuXCIsXG4gICAgbmFtZUVuOiBcIlJva2lhIEUuXCIsXG4gICAgdGV4dEZyOiBcIkMnZXN0IGRldmVudSBtb24gcml0dWVsIGR1IGRpbWFuY2hlLiBNYSBwZWF1IG1lIHJlbWVyY2llIGNoYXF1ZSBzZW1haW5lLlwiLFxuICAgIHRleHRFbjogXCJJdCdzIGJlY29tZSBteSBTdW5kYXkgcml0dWFsLiBNeSBza2luIHRoYW5rcyBtZSBldmVyeSB3ZWVrLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMjIsXG4gICAgbmFtZUZyOiBcIk9saXZpZXIgSy5cIixcbiAgICBuYW1lRW46IFwiT2xpdmllciBLLlwiLFxuICAgIHRleHRGcjogXCJKZSBuZSBzYXZhaXMgcGFzIHF1J3VuIGdvbW1hZ2UgcG91dmFpdCDDqnRyZSBhdXNzaSBhZ3LDqWFibGUuIENvbnZlcnRpLlwiLFxuICAgIHRleHRFbjogXCJEaWRuJ3Qga25vdyBhIHNjcnViIGNvdWxkIGZlZWwgdGhpcyBnb29kLiBJJ20gY29udmVydGVkLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMjMsXG4gICAgbmFtZUZyOiBcIkthZGkgUy5cIixcbiAgICBuYW1lRW46IFwiS2FkaSBTLlwiLFxuICAgIHRleHRGcjogXCJDZWxsdWxlcyBtb3J0ZXMgZGlzcGFydWVzLCBwZWF1IHF1aSBicmlsbGUuIFNpbXBsZSBldCBlZmZpY2FjZS5cIixcbiAgICB0ZXh0RW46IFwiRGVhZCBza2luIGdvbmUsIGdsb3dpbmcgc2tpbi4gU2ltcGxlIGFuZCBlZmZlY3RpdmUuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAyNCxcbiAgICBuYW1lRnI6IFwiU2FsaW0gRC5cIixcbiAgICBuYW1lRW46IFwiU2FsaW0gRC5cIixcbiAgICB0ZXh0RnI6IFwiTWVzIHRhY2hlcyBkZSBzb2xlaWwgb250IGRpbWludcOpIGVuIDQgc2VtYWluZXMuIEonYWkgbGVzIHBob3RvcyBwb3VyIGxlIHByb3V2ZXIuXCIsXG4gICAgdGV4dEVuOiBcIk15IHN1biBzcG90cyBmYWRlZCBpbiA0IHdlZWtzLiBJIGhhdmUgdGhlIHBob3RvcyB0byBwcm92ZSBpdC5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDI1LFxuICAgIG5hbWVGcjogXCJBaWNoYSBCLlwiLFxuICAgIG5hbWVFbjogXCJBaWNoYSBCLlwiLFxuICAgIHRleHRGcjogXCJMZSBTw6lydW0gUkHDj05BIHVuaWZpZSBtb24gdGVpbnQgc2FucyBibGFuY2hpci4gRXhhY3RlbWVudCBjZSBxdWUgamUgY2hlcmNoYWlzLlwiLFxuICAgIHRleHRFbjogXCJUaGUgUkHDj05BIFNlcnVtIGV2ZW5zIG15IHRvbmUgd2l0aG91dCBibGVhY2hpbmcuIEV4YWN0bHkgd2hhdCBJIHdhcyBsb29raW5nIGZvci5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDI2LFxuICAgIG5hbWVGcjogXCJCaW50dSBMLlwiLFxuICAgIG5hbWVFbjogXCJCaW50dSBMLlwiLFxuICAgIHRleHRGcjogXCIzIGdvdXR0ZXMgc3VmZmlzZW50LiBMZSBmbGFjb24gZHVyZSBsb25ndGVtcHMgZXQgbGVzIHLDqXN1bHRhdHMgc29udCB2aXN
517pYmxlcy5cIixcbiAgICB0ZXh0RW46IFwiMyBkcm9wcyBpcyBhbGwgeW91IG5lZWQuIFRoZSBib3R0bGUgbGFzdHMgZm9yZXZlciBhbmQgcmVzdWx0cyBhcmUgdmlzaWJsZS5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDI3LFxuICAgIG5hbWVGcjogXCJNYXJjdXMgRS5cIixcbiAgICBuYW1lRW46IFwiTWFyY3VzIEUuXCIsXG4gICAgdGV4dEZyOiBcIk1hIGNpY2F0cmljZSBkJ2FjbsOpIHMnZXN0IHZyYWltZW50IGF0dMOpbnXDqWUuIEplIG5lIHBlbnNhaXMgcGFzIHF1ZSBjJ8OpdGFpdCBwb3NzaWJsZS5cIixcbiAgICB0ZXh0RW46IFwiTXkgYWNuZSBzY2FyIGFjdHVhbGx5IGZhZGVkLiBEaWRuJ3QgdGhpbmsgdGhhdCB3YXMgcG9zc2libGUuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAyOCxcbiAgICBuYW1lRnI6IFwiTmFmaSBHLlwiLFxuICAgIG5hbWVFbjogXCJOYWZpIEcuXCIsXG4gICAgdGV4dEZyOiBcIkMnZXN0IGxlIHNldWwgc8OpcnVtIHF1aSBuJ2lycml0ZSBwYXMgbWEgcGVhdSBzZW5zaWJsZS4gRXQgw6dhIG1hcmNoZSB2cmFpbWVudC5cIixcbiAgICB0ZXh0RW46IFwiSXQncyB0aGUgb25seSBzZXJ1bSB0aGF0IGRvZXNuJ3QgaXJyaXRhdGUgbXkgc2Vuc2l0aXZlIHNraW4uIEFuZCBpdCBhY3R1YWxseSB3b3Jrcy5cIlxuICB9XG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gQ3VzdG9tZXJSZXZpZXdzU2VjdGlvbigpIHtcbiAgY29uc3QgeyBsYW5ndWFnZSB9ID0gdXNlTGFuZ3VhZ2UoKTtcbiAgY29uc3Qgc2VjdGlvblJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGNhcm91c2VsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2N1cnJlbnRJbmRleCwgc2V0Q3VycmVudEluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbaXNBdXRvU2Nyb2xsUGF1c2VkLCBzZXRJc0F1dG9TY3JvbGxQYXVzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdG91Y2hTdGFydFgsIHNldFRvdWNoU3RhcnRYXSA9IHVzZVN0YXRlKDApO1xuICBcbiAgY29uc3QgdG90YWxTbGlkZXMgPSByZXZpZXdzLmxlbmd0aDtcblxuICBjb25zdCBzY3JvbGxUb0luZGV4ID0gdXNlQ2FsbGJhY2soKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBzZXRDdXJyZW50SW5kZXgoTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIHRvdGFsU2xpZGVzIC0gMSkpKTtcbiAgfSwgW3RvdGFsU2xpZGVzXSk7XG5cbiAgY29uc3QgaGFuZGxlTmV4dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSB0b3RhbFNsaWRlcztcbiAgICBzY3JvbGxUb0luZGV4KG5leHRJbmRleCk7XG4gIH0sIFtjdXJyZW50SW5kZXgsIHRvdGFsU2xpZGVzLCBzY3JvbGxUb0luZGV4XSk7XG5cbiAgY29uc3QgaGFuZGxlUHJldiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2SW5kZXggPSBjdXJyZW50SW5kZXggPT09IDAgPyB0b3RhbFNsaWRlcyAtIDEgOiBjdXJyZW50SW5kZXggLSAxO1xuICAgIHNjcm9sbFRvSW5kZXgocHJldkluZGV4KTtcbiAgfSwgW2N1cnJlbnRJbmRleCwgdG90YWxTbGlkZXMsIHNjcm9sbFRvSW5kZXhdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0F1dG9TY3JvbGxQYXVzZWQpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBhdXRvU2Nyb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBoYW5kbGVOZXh0KCk7XG4gICAgfSwgNTAwMCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChhdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICB9LCBbaGFuZGxlTmV4dCwgaXNBdXRvU2Nyb2xsUGF1c2VkXSk7XG5cbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IChlOiBSZWFjdC5Ub3VjaEV2ZW50KSA9PiB7XG4gICAgc2V0SXNBdXRvU2Nyb2xsUGF1c2VkKHRydWUpO1xuICAgIHNldFRvdWNoU3RhcnRYKGUudG91Y2hlc1swXS5jbGllbnRYKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9IChlOiBSZWFjdC5Ub3VjaEV2ZW50KSA9PiB7XG4gICAgY29uc3QgdG91Y2hFbmRYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICAgIGNvbnN0IGRpZmYgPSB0b3VjaFN0YXJ0WCAtIHRvdWNoRW5kWDtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSA1MDtcbiAgICBcbiAgICBpZiAoTWF0aC5hYnMoZGlmZikgPiB0aHJlc2hvbGQpIHtcbiAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICBoYW5kbGVOZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVQcmV2KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0SXNBdXRvU2Nyb2xsUGF1c2VkKGZhbHNlKSwgMzAwMCk7XG4gIH07XG5cbiAgY29uc3Qgc2VjdGlvblRpdGxlID0gbGFuZ3VhZ2UgPT09ICdmcicgPyAnSUxTIEVOIFBBUkxFTlQnIDogJ1dIQVQgVEhFWSBTQUlEJztcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtzZWN0aW9uUmVmfSBpZD1cInJldmlld3Mtc2VjdGlvblwiIGNsYXNzTmFtZT1cInJlbGF0aXZlIHB5LTEwIG1kOnB5LTEyIG10LTggbWQ6bXQtMTIgb3ZlcmZsb3ctaGlkZGVuXCIgZGF0YS10ZXN0aWQ9XCJzZWN0aW9uLWN1c3RvbWVyLXJldmlld3NcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMFwiIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogJyNGNUY1RjUnIH19IC8+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdGV4dC1jZW50ZXIgbWItNiBtZDptYi04IHB4LTRcIj5cbiAgICAgICAgPGgyIFxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzE2cHhdIG1kOnRleHQtWzE4cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMnB4XVwiXG4gICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICBjb2xvcjogJyMxQTFBMUEnLCBcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICAgICAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJzJweCdcbiAgICAgICAgICB9fVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwidGV4dC1yZXZpZXdzLXRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgI
517HtzZWN0aW9uVGl0bGV9XG4gICAgICAgIDwvaDI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgbWF4LXctWzc1MHB4XSBteC1hdXRvIHB4LTQgbWQ6cHgtNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyBoYW5kbGVQcmV2KCk7IHNldElzQXV0b1Njcm9sbFBhdXNlZCh0cnVlKTsgc2V0VGltZW91dCgoKSA9PiBzZXRJc0F1dG9TY3JvbGxQYXVzZWQoZmFsc2UpLCA1MDAwKTsgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCBtZDotbGVmdC0xMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgei0xMCB3LTggaC04IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTcwXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyB0ZXN0aW1vbmlhbHNcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tY2Fyb3VzZWwtcHJldlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoZXZyb25MZWZ0IHNpemU9ezIwfSBzdHJva2VXaWR0aD17MS41fSBjb2xvcj1cIiMxQTFBMUFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgIHJlZj17Y2Fyb3VzZWxSZWZ9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJvdmVyZmxvdy1oaWRkZW4gbXgtOCBtZDpteC0wXCJcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydD17aGFuZGxlVG91Y2hTdGFydH1cbiAgICAgICAgICAgIG9uVG91Y2hFbmQ9e2hhbmRsZVRvdWNoRW5kfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNTAwIGVhc2Utb3V0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgtJHtjdXJyZW50SW5kZXggKiAxMDB9JSlgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtyZXZpZXdzLm1hcCgocmV2aWV3KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtyZXZpZXcuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgZmxleC1zaHJpbmstMCB0ZXh0LWNlbnRlciBweC0yIG1kOnB4LThcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2BjYXJkLXJldmlldy0ke3Jldmlldy5pZH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxwIFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxNHB4XSBtZDp0ZXh0LVsxNXB4XSBsZWFkaW5nLXJlbGF4ZWQgbWItM1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IFxuICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNywgXG4gICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogMzAwLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzFBMUExQSdcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgXCJ7bGFuZ3VhZ2UgPT09ICdmcicgPyByZXZpZXcudGV4dEZyIDogcmV2aWV3LnRleHRFbn1cIlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgPHAgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzEwcHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMS41cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLCBcbiAgICAgICAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NjY2NidcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgLSB7bGFuZ3VhZ2UgPT09ICdmcicgPyByZXZpZXcubmFtZUZyIDogcmV2aWV3Lm5hbWVFbn1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHsgaGFuZGxlTmV4dCgpOyBzZXRJc0F1dG9TY3JvbGxQYXVzZWQodHJ1ZSk7IHNldFRpbWVvdXQoKCkgPT4gc2V0SXNBdXRvU2Nyb2xsUGF1c2VkKGZhbHNlKSwgNTAwMCk7IH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIG1kOi1yaWdodC0xMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgei0xMCB3LTggaC04IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTcwXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOZXh0IHRlc3RpbW9uaWFsc1wiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1jYXJvdXNlbC1uZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvblJpZ2h0IHNpemU9ezIwfSBzdHJva2VXaWR0aD17MS41fSBjb2xvcj1cIiMxQTFBMUFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBnYXAtMSBtdC01XCIgZGF0YS10ZXN0aWQ9XCJjYXJvdXNlbC1pbmRpY2F0b3JzXCI+XG4gICAgICAgICAge3Jldmlld3MubWFwKChfLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7IHNjcm9sbFRvSW5kZXgoaW5kZXgpOyBzZXRJc0F1dG9TY3JvbGxQYXVzZWQodHJ1ZSk7IHNldFRpbWVvdXQoKCkgPT4gc2V0SXNBdXRvU2Nyb2xsUGF1c2VkKGZhbHNlKSwgNTAwMCk7IH19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctMSBoLTEgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMFwiXG4gICAgICAgICAgICAgI
517HN0eWxlPXt7IFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY3VycmVudEluZGV4ID09PSBpbmRleCA/ICcjMUExQTFBJyA6ICcjQ0NDQ0NDJ1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgR28gdG8gcmV2aWV3ICR7aW5kZXggKyAxfWB9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgYnV0dG9uLWluZGljYXRvci0ke2luZGV4fWB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIl0sImZpbGUiOiIvaG9tZS9ydW5uZXIvd29ya3NwYWNlL2NsaWVudC9zcmMvY29tcG9uZW50cy9DdXN0b21lclJldmlld3NTZWN0aW9uLnRzeCJ9

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.