PageSourceSearch

https://sixsigmafunnels.com/src/app/pages/checklist/ChecklistPage.tsx

js sixsigmafunnels.com collected 2026-10-02 01:45:04 UTC 317,227 bytes, 2,386 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/app/pages/checklist/ChecklistPage.tsx");if (!window.$RefreshReg$) throw new Error("React refresh preamble was not loaded. Something is wrong.");
2const prevRefreshReg = window.$RefreshReg$;
3const prevRefreshSig = window.$RefreshSig$;
4window.$RefreshReg$ = RefreshRuntime.getRefreshReg("/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx");
5window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
6
7import * as RefreshRuntime from "/@react-refresh";
8
9import __vite__cjsImport1_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=e8ce80ae"; const _jsxDEV = __vite__cjsImport1_react_jsxDevRuntime["jsxDEV"];
10var _s = $RefreshSig$();
11import axios from "/node_modules/.vite/deps/axios.js?v=e8ce80ae";
12import Swal from "/node_modules/.vite/deps/sweetalert2.js?v=e8ce80ae";
13import __vite__cjsImport4_react from "/node_modules/.vite/deps/react.js?v=e8ce80ae"; const useEffect = __vite__cjsImport4_react["useEffect"]; const useRef = __vite__cjsImport4_react["useRef"]; const useState = __vite__cjsImport4_react["useState"];
14import { useNavigate } from "/node_modules/.vite/deps/react-router-dom.js?v=e8ce80ae";
15import { CUREENT_COMPANY_NAME, DAY_STRING, CHECK_USER_VIDEO_EXIST, GET_CHECKLIST, GET_ALL_SUBSCRIPTIONPLANS, GET_CAMPAIGNS_BY_COMPANY_USER_AND_FB_ACC, LIFETIME_STRING, LIVE_PLAN, MONTHLY_PLAN_PRICE, MONTH_STRING, POST_SAVE_TASK_VALUE, systemAuthorities, TRIAL_PERIOD_DAYS, WEEK_STRING, YEARLY_PLAN_PRICE, YEAR_STRING } from "/src/app/Constants.tsx";
16import DateRangeSelector from "/src/app/pages/dashboard/components/DateRangeSelector.tsx";
17import { useAuth } from "/src/app/modules/auth/index.ts";
18import { DATE_FORMAT_MMMM_DD_YYYY, getUserTimeZoneBasedCurrentDate } from "/src/app/DateConstants.tsx";
19import DailyActivityLog from "/src/app/pages/checklist/components/DailyActivityLog.tsx";
20import FindProspectsOverview from "/src/app/pages/checklist/components/FindProspectsOverview.tsx";
21import StartConversationsSection from "/src/app/pages/checklist/components/StartConversationsSection.tsx";
22import ChecklistSection from "/src/app/pages/checklist/components/ChecklistSection.tsx";
23import { Content } from "/src/config/layout/components/Content.tsx";
24import { disableSplashScreen, enableSplashScreen } from "/src/app/pages/common/CommonUtilities.tsx";
25import { getUserByToken } from "/src/app/modules/auth/core/_requests.ts";
26import UploadVideo from "/src/app/pages/public/components/UploadVideo.tsx";
27import MonthlyInfo from "/src/app/pages/public/components/MonthlyInfo.tsx";
28import "/src/app/pages/checklist/css/checklist.css";
29import DatePicker from "/node_modules/.vite/deps/react-datepicker.js?v=e8ce80ae";
30import { registerLocale } from "/node_modules/.vite/deps/react-datepicker.js?v=e8ce80ae";
31import { enGB } from "/node_modules/.vite/deps/date-fns_locale.js?v=e8ce80ae";
32registerLocale("en-GB", enGB);
33const isOverallValidationErrorMessage = (message)=>message?.type === "error" && message.text === "Overall Accepted should be less than or equal to Overall Sent.";
34// Validates the date-range key used by the date filter UI.
35const isValidRange = (value)=>value === LIFETIME_STRING || value === DAY_STRING || value === WEEK_STRING || value === MONTH_STRING || value === YEAR_STRING;
36const defaultSectionMeta = {
37    "Find Prospects": {
38        number: 1,
39        title: "Find Prospects"
40    },
41    "Start Conversations": {
42        number: 2,
43        title: "Start Conversations"
44    },
45    "Build Relationships": {
46        number: 3,
47        title: "Build Relationships"
48    },
49    "Stay Connected": {
50        number: 4,
51        title: "Stay Connected"
52    },
53    Community: {
54        number: 5,
55        title: "Community"
56    },
57    Success: {
58        number: 6,
59        title: "Success"
60    }
61};
62// Resolves the display order/title for a section, falling back to defaults.
63const getSectionMeta = (section, fallbackName)=>{
64    const fallback = fallbackName ? defaultSectionMeta[fallbackName] : undefined;
65    return {
66        number: section?.displayOrder ?? fallback?.number ?? 0,
67        title: section?.name ?? fallback?.title ?? ""
68    };
69};
70// Safely picks a provider id (platformId preferred).
71const getProviderPlatformId = (provider)=>provider?.platformId ?? provider?.id;
72// Detects whether the provider represents Facebook.
73const isFacebookProvider = (provider)=>provider?.name?.toLowerCase().includes("facebook") ?? false;
74// Picks the primary (Facebook) and secondary providers for the UI.
75const resolveSocialProviders = (providers = [])=>{
76    const facebookProvider = providers.find((provider)=>isFacebookProvider(provider)) ?? providers[0];
77    const otherProvider = providers.find((provider)=>provider !== facebookProvider && !isFacebookProvider(provider)) ?? providers.find((provider)=>provider !== facebookProvider);
78    return {
79        facebookProvider,
80        otherProvider
81    };
82};
83// Builds the Lifetime Conversion Rate summary card row.
84const getLifetimeConversionRateCard = (sections = [])=>{
85    const totalSections = sections.length || 6;
86    const completedSections = sections.filter((section)=>section.allTaskCompleted).length;
87    const percentage = totalSections > 0 ? Math.round(completedSections / totalSections * 100) : 0;
88    console.log("Lifetime Conversion Rate section completion states:", sections.map((section)=>({
89            id: section.id,
90            name: section.name,
91            allTaskCompleted: !!section.allTaskCompleted
92        })));
93    console.log("Lifetime Conversion Rate calculation:", {
94        formula: `(${completedSections} / ${totalSections}) * 100`,
95        completedSections,
96        totalSections,
97        rawPercentage: totalSections > 0 ? completedSections / totalSections * 100 : 0,
98        roundedPercentage: percentage
99    });
100    let className = "lifetime-conversion-rate lifetime-rate-red";
101    if (percentage > 20) {
102        className = "lifetime-conversion-rate lifetime-rate-blue";
103    } else if (percentage >= 10 && percentage <= 20) {
104        className = "lifetime-conversion-rate lifetime-rate-orange";
105    }
106    return {
107        label: "Lifetime Conversion Rate",
108        value: `${completedSections} in ${totalSections} (${percentage}%)`,
109        className
110    };
111};
112// Computes conversion-rate stats and UI tone for the Success section.
113const getLifetimeConversionRateData = (sections = [])=>{
114    const totalSections = sections.length || 6;
115    const completedSections = sections.filter((section)=>section.allTaskCompleted).length;
116    const percentage = totalSections > 0 ? Math.round(completedSections / totalSections * 100) : 0;
117    let toneClassName = "lifetime-rate-red";
118    let badgeText = "Stay consistent. Keep going.";
119    if (percentage > 20) {
120        toneClassName = "lifetime-rate-blue";
121        badgeText = "You did it. 1 in 5.";
122    } else if (percentage >= 10 && percentage <= 20) {
123        toneClassName = "lifetime-rate-orange";
124        badgeText = "Almost there. Keep going.";
125    }
126    console.log("success-conversion-percent:", {
127        completedSections,
128        totalSections,
129        percentage,
130        toneClassName
131    });
132    return {
133        completedSections,
134        totalSections,
135        percentage,
136        toneClassName,
137        badgeText
138    };
139};
140// Builds initial toggle state from API payload.
141const getInitialToggleValues = (sections = [])=>sections.reduce((acc, section)=>{
142        (section.tasks ?? []).forEach((task)=>{
143            if (task.inputType === "TOGGLE") {
144                acc[task.id] = !!task.value?.booleanValue;
145            }
146        });
147        return acc;
148    }, {});
149// Normalizes input values so we store booleans/numbers consistently.
150const normalizeChecklistValue = (value)=>{
151    if (typeof value !== "string") {
152        return value;
153    }
154    const trimmedValue = value.trim();
155    if (trimmedValue === "") {
156        return "";
157    }
158    const numericValue = Number(trimmedValue);
159    return Number.isNaN(numericValue) ? trimmedValue : numericValue;
160};
161// Formats a date/time for saving checklist entries.
162const formatChecklistEntryDate = (date)=>{
163    const year = date.getFullYear();
164    const month = String(date.getMonth() + 1).padStart(2, "0");
165    const day = String(date.getDate()).padStart(2, "0");
166    const hours = String(date.getHours()).padStart(2, "0");
167    const minutes = String(date.getMinutes()).padStart(2, "0");
168    return `${year}-${month}-${day} ${hours}:${minutes}`;
169};
170// Formats a date for filtering (00:00 time).
171const formatChecklistFilterDate = (date)=>{
172    const year = date.getFullYear();
173    const month = String(date.getMonth() + 1).padStart(2, "0");
174    const day = String(date.getDate()).padStart(2, "0");
175    return `${year}-${month}-${day} 00:00`;
176};
177const parseFilterDate = (value)=>{
178    if (!value) return null;
179    const normalized = value.replace(" ", "T");
180    const parsed = new Date(normalized);
181    return Number.isNaN(parsed.getTime()) ? null : parsed;
182};
183const formatShortDate = (date)=>new Intl.DateTimeFormat("en-US", {
184        month: "short",
185        day: "2-digit",
186        year: "numeric"
187    }).format(date);
188const formatMonthYear = (date)=>new Intl.DateTimeFormat("en-US", {
189        month: "long",
190        year: "numeric"
191    }).format(date);
192const getWeekRangeLabel = (date)=>{
193    const day = date.getDay();
194    // ✅ Convert Sunday(0) → 6, Monday(1) → 0, ...
195    const diff = day === 0 ? -6 : 1 - day;
196    const weekStart = new Date(date);
197    weekStart.setDate(date.getDate() + diff);
198    const weekEnd = new Date(weekStart);
199    weekEnd.setDate(weekStart.getDate() + 6);
200    const sameMonth = weekStart.getMonth() === weekEnd.getMonth();
201    const sameYear = weekStart.getFullYear() === weekEnd.getFullYear();
202    if (sameMonth && sameYear) {
203        const month = new Intl.DateTimeFormat("en-US", {
204            month: "short"
205        }).format(weekStart);
206        const startDay = String(weekStart.getDate()).padStart(2, "0");
207        const endDay = String(weekEnd.getDate()).padStart(2, "0");
208        return `${month} ${startDay} – ${endDay}, ${weekStart.getFullYear()}`;
209    }
210    return `${formatShortDate(weekStart)} – ${formatShortDate(weekEnd)}`;
211};
212const buildActivityHeaderLabel = (selectedRange, selectedDate, filter)=>{
213    const hasAdvancedDateFilter = !!filter?.startDate && !!filter?.endDate;
214    const fromDate = parseFilterDate(filter?.startDate);
215    const toDate = parseFilterDate(filter?.endDate);
216    if (hasAdvancedDateFilter && fromDate && toDate) {
217        if (fromDate.toDateString() === toDate.toDateString()) {
218            return `Weekly Activity Log - ${formatShortDate(fromDate)}`;
219        }
220        return `Weekly Activity Log - ${formatShortDate(fromDate)} – ${formatShortDate(toDate)}`;
221    }
222    if (selectedRange === WEEK_STRING) {
223        return `Weekly Activity Log - ${getWeekRangeLabel(selectedDate)}`;
224    }
225    if (selectedRange === MONTH_STRING) {
226        return `Monthly Activity Log - ${formatMonthYear(selectedDate)}`;
227    }
228    if (selectedRange === YEAR_STRING) {
229        return `Yearly Activity Log - ${selectedDate.getFullYear()}`;
230    }
231    if (selectedRange === LIFETIME_STRING) {
232        return `Lifetime Activity Summary  `;
233    }
234    return `Daily Activity Log - ${formatShortDate(selectedDate)}`;
235};
236// Converts a UI value into the API save payload shape.
237const buildTaskValueUpdate = (taskId, value)=>{
238    const normalizedValue = normalizeChecklistValue(value);
239    if (typeof normalizedValue === "boolean") {
240        return {
241            taskId,
242            booleanValue: normalizedValue
243        };
244    }
245    if (typeof normalizedValue === "number") {
246        return {
247            taskId,
248            numberValue: normalizedValue
249        };
250    }
251    if (normalizedValue === "") {
252        return {
253            taskId,
254            numberValue: null
255        };
256    }
257    const parsedNumberValue = Number(normalizedValue);
258    return {
259        taskId,
260        numberValue: Number.isNaN(parsedNumberValue) ? null : parsedNumberValue
261    };
262};
263// Ensures blank fields render as empty string instead of null/undefined.
264const getDisplayNumberValue = (value)=>value == null ? "" : value;
265// Safely extracts the checklist entry id from any API shape.
266const resolveChecklistEntryId = (payload)=>{
267    if (!payload) {
268        return null;
269    }
270    const candidateIds = [
271        payload.id,
272        payload.entryId,
273        payload.entry_id
274    ];
275    for (const candidate of candidateIds){
276        if (typeof candidate === "number" && Number.isFinite(candidate) && candidate > 0) {
277            return candidate;
278        }
279    }
280    return null;
281};
282// Gets the "sent/accepted" task id for a provider.
283const getProviderTaskId = (provider, kind)=>{
284    if (!provider) return undefined;
285    if (kind === "sent") {
286        return provider.sentTaskId ?? provider.friendRequestSentTaskId;
287    }
288    return provider.acceptedTaskId ?? provider.friendRequestAcceptedTaskId;
289};
290// Calculates acceptance rate with 0-guard.
291const calculateLifetimeAcceptanceRate = (provider)=>{
292    const overallSent = provider?.overallSent ?? 0;
293    const overallAccepted = provider?.overallAccepted ?? 0;
294    console.log("SmProvider is ", provider?.name);
295    console.log("overallSent @@@ :", overallSent);
296    console.log("overallAccepted: @@", overallAccepted);
297    if (provider?.name?.toLowerCase().includes("facebook")) {
298        return provider.acceptanceRate ?? 0;
299    }
300    // ✅ Only fix: handle 0/0 for Other Platforms
301    if (provider?.name?.toLowerCase().includes("other") && overallSent === 0 && overallAccepted === 0) {
302        return 0;
303    }
304    return Math.round(overallAccepted / overallSent * 100);
305};
306// ✅ Main function (single source of truth)
307const getLifetimeAcceptanceRate = (provider)=>{
308    const isFacebook = provider?.name?.toLowerCase().includes("facebook");
309    // ✅ For Facebook → STRICTLY use API (no calculation fallback)
310    if (isFacebook) {
311        return provider?.acceptanceRate ?? 0;
312    }
313    // ✅ Others → calculated
314    return calculateLifetimeAcceptanceRate(provider);
315};
316// ✅ Logging wrapper (only for debug, no logic inside)
317const logLifetimeAcceptanceRate = (sectionName, providerLabel, provider)=>{
318    const sent = provider?.sent ?? 0;
319    const accepted = provider?.accepted ?? 0;
320    const isFacebook = provider?.name?.toLowerCase().includes("facebook");
321    const acceptanceRate = getLifetimeAcceptanceRate(provider);
322    console.log(`${sectionName} Lifetime Acceptance Rate`, {
323        provider: providerLabel,
324        source: isFacebook ? "API" : "CALCULATED",
325        sent,
326        accepted,
327        apiValue: provider?.acceptanceRate,
328        acceptanceRate
329    });
330    return acceptanceRate;
331};
332// Flattens nested task tree into rows for ChecklistSection rendering.
333const mapTasksToRows = (tasks = [], onAutosave, toggleValues = {}, allowEdit = false)=>{
334    const childrenByParent = new Map();
335    const rootTasks = [];
336    tasks.forEach((task)=>{
337        if (task.parentId == null) {
338            rootTasks.push(task);
339            return;
340        }
341        const siblings = childrenByParent.get(task.parentId) ?? [];
342        siblings.push(task);
343        childrenByParent.set(task.parentId, siblings);
344    });
345    // Sorts tasks by displayOrder for stable UI ordering.
346    const sortTasks = (items)=>[
347            ...items
348        ].sort((a, b)=>(a.displayOrder ?? 0) - (b.displayOrder ?? 0));
349    // Flattens nested tasks into rows with indent levels.
350    const flattenTasks = (items, depth = 0)=>sortTasks(items).flatMap((task)=>{
351            const childRows = flattenTasks(childrenByParent.get(task.id) ?? [], depth + 1);
352            const hasExplicitInput = typeof task.inputType === "string" && task.inputType.length > 0;
353            if (!hasExplicitInput) {
354                return [
355                    {
356                        label: task.name,
357                        value: "",
358                        isGroupLabel: true,
359                        indentLevel: depth
360                    },
361                    ...childRows
362                ];
363            }
364            return [
365                {
366                    label: task.name,
367                    allowEdit,
368                    value: task.inputType === "TOGGLE" ? /*#__PURE__*/ _jsxDEV(ToggleSwitch, {
369                        checked: toggleValues[task.id] ?? !!task.value?.booleanValue,
370                        onChange: allowEdit ? (checked)=>onAutosave?.(task.id, task.platformId, checked) : undefined,
371                        allowEdit: allowEdit
372                    }, void 0, false, {
373                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
374                        lineNumber: 569,
375                        columnNumber: 15
376                    }, this) : getDisplayNumberValue(task.value?.numberValue) ?? task.value?.booleanValue ?? "",
377                    indentLevel: depth,
378                    onValueCommit: task.inputType === "TOGGLE" ? undefined : allowEdit ? (value)=>onAutosave?.(task.id, task.platformId, value) : undefined
379                },
380                ...childRows
381            ];
382        });
383    return flattenTasks(rootTasks);
384};
385// Maps provider metrics to rows, including validation and autosave callbacks.
386const mapProviderToRows = (provider, onAutosave, options)=>{
387    if (!provider) return [];
388    const calculatedAcceptanceRate = calculateLifetimeAcceptanceRate(provider);
389    const lifetimeAcceptanceToneClass = calculatedAcceptanceRate > 29 ? "lifetime-rate-blue" : calculatedAcceptanceRate >= 20 && calculatedAcceptanceRate <= 29 ? "lifetime-rate-orange" : "lifetime-rate-yellow";
390    const platformId = getProviderPlatformId(provider);
391    const sentTaskId = getProviderTaskId(provider, "sent") ?? options?.sentTaskId;
392    const acceptedTaskId = getProviderTaskId(provider, "accepted") ?? options?.acceptedTaskId;
393    console.log("===== mapProviderToRows DEBUG =====");
394    console.log("emptyMissingValues:", options?.emptyMissingValues);
395    console.log("isEditable:", options?.isEditable);
396    console.log("provider:", provider);
397    const resolvedSentValue = options?.sentValueOverride !== undefined ? options.sentValueOverride : provider.sent;
398    const resolvedAcceptedValue = options?.acceptedValueOverride !== undefined ? options.acceptedValueOverride : provider.accepted;
399    // ✅ FINAL DISPLAY VALUES
400    const sentValue = resolvedSentValue === null || resolvedSentValue === undefined ? "" : resolvedSentValue;
401    const acceptedValue = resolvedAcceptedValue === null || resolvedAcceptedValue === undefined ? "" : resolvedAcceptedValue;
402    const isOtherPlatformsProvider = provider.name?.trim().toLowerCase() === "other platforms";
403    // Normalizes provider numeric values for save/update operations.
404    const normalizeProviderFieldValue = (fieldValue)=>{
405        if (typeof fieldValue !== "string") {
406            return null;
407        }
408        const trimmedValue = fieldValue.trim();
409        if (trimmedValue === "") {
410            return null;
411        }
412        const parsedValue = Number(trimmedValue);
413        return Number.isNaN(parsedValue) ? null : parsedValue;
414    };
415    const validateOverallConstraint = (nextValue, field)=>{
416        if (!isOtherPlatformsProvider) {
417            return {
418                isValid: true,
419                parsedValue: normalizeProviderFieldValue(nextValue)
420            };
421        }
422        const parsedNextValue = normalizeProviderFieldValue(nextValue);
423        if (nextValue.trim() !== "" && parsedNextValue == null) {
424            return {
425                isValid: false,
426                parsedValue: null
427            };
428        }
429        const currentSentValue = typeof resolvedSentValue === "number" ? resolvedSentValue : null;
430        const currentAcceptedValue = typeof resolvedAcceptedValue === "number" ? resolvedAcceptedValue : null;
431        const nextSentValue = field === "sent" ? parsedNextValue : currentSentValue;
432        const nextAcceptedValue = field === "accepted" ? parsedNextValue : currentAcceptedValue;
433        const baseOverallSent = typeof provider.overallSent === "number" ? provider.overallSent : 0;
434        const baseOverallAccepted = typeof provider.overallAccepted === "number" ? provider.overallAccepted : 0;
435        // overallSent/overallAccepted already include today's saved values,
436        // so subtract today's original to avoid double-counting the new input.
437        const originalDaySent = typeof provider.sent === "number" ? provider.sent : 0;
438        const originalDayAccepted = typeof provider.accepted === "number" ? provider.accepted : 0;
439        const totalSent = baseOverallSent - originalDaySent + (nextSentValue ?? 0);
440        const totalAccepted = baseOverallAccepted - originalDayAccepted + (nextAcceptedValue ?? 0);
441        if (totalAccepted > totalSent) {
442            options?.onMessage?.({
443                type: "error",
444                text: `Overall Accepted (${baseOverallAccepted}) should be less than or equal to Overall Sent (${baseOverallSent}).`
445            });
446            return {
447                isValid: false,
448                parsedValue: parsedNextValue
449            };
450        }
451        return {
452            isValid: true,
453            parsedValue: parsedNextValue
454        };
455    };
456    return [
457        {
458            label: "Friend Request & Message Sent",
459            value: sentValue,
460            allowEdit: !!options?.isEditable,
461            validateNextValue: (nextValue)=>validateOverallConstraint(nextValue, "sent").isValid,
462            onValueCommit: options?.isEditable !== false && sentTaskId ? async (value)=>{
463                if (typeof value !== "string") {
464                    return;
465                }
466                const validation = validateOverallConstraint(value, "sent");
467                if (!validation.isValid) {
468                    return;
469                }
470                const normalizedValue = normalizeProviderFieldValue(value);
471                options?.onMessage?.({
472                    type: "success",
473                    text: `Friend Request & Message Sent has been changed to ${normalizedValue == null ? "empty" : normalizedValue}.`
474                });
475                await onAutosave?.(sentTaskId, platformId, value, provider?.name);
476            } : undefined
477        },
478        {
479            label: "Accepted",
480            value: acceptedValue,
481            allowEdit: !!options?.isEditable,
482            onValueChange: (nextValue)=>{
483                const validation = validateOverallConstraint(nextValue, "accepted");
484                if (!validation.isValid) {
485                    return;
486                }
487            },
488            validateNextValue: (nextValue)=>validateOverallConstraint(nextValue, "accepted").isValid,
489            onValueCommit: options?.isEditable !== false && acceptedTaskId ? async (value)=>{
490                if (typeof value !== "string") {
491                    return;
492                }
493                const validation = validateOverallConstraint(value, "accepted");
494                if (!validation.isValid) {
495                    return;
496                }
497                const normalizedValue = normalizeProviderFieldValue(value);
498                options?.onMessage?.({
499                    type: "success",
500                    text: `Accepted has been changed to ${normalizedValue == null ? "empty" : n
500ormalizedValue}.`
501                });
502                console.log("Accepted has been changed", {
503                    value: normalizedValue
504                });
505                await onAutosave?.(acceptedTaskId, platformId, value, provider?.name);
506            } : undefined
507        },
508        {
509            label: "Lifetime Acceptance Rate",
510            value: /*#__PURE__*/ _jsxDEV("div", {
511                className: "rate-cell",
512                children: [
513                    /*#__PURE__*/ _jsxDEV("div", {
514                        className: "rate-percent",
515                        children: [
516                            getLifetimeAcceptanceRate(provider),
517                            "%"
518                        ]
519                    }, void 0, true, {
520                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
521                        lineNumber: 790,
522                        columnNumber: 11
523                    }, this),
524                    (()=>{
525                        const percent = getLifetimeAcceptanceRate(provider);
526                        const isblue = percent > 29;
527                        const isOrange = percent >= 20 && percent <= 29;
528                        const bgColor = isblue ? "#FFFFFF33" : isOrange ? "#FFFFFF33" : "#FFFFFF33";
529                        const badgeText = isblue ? "You're performing in the top 1%." : isOrange ? "You're right where you need to be." : "Your list or messages need a refresh.";
530                        return /*#__PURE__*/ _jsxDEV("div", {
531                            className: "rate-msg",
532                            style: {
533                                background: bgColor
534                            },
535                            children: badgeText
536                        }, void 0, false, {
537                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
538                            lineNumber: 805,
539                            columnNumber: 15
540                        }, this);
541                    })()
542                ]
543            }, void 0, true, {
544                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
545                lineNumber: 789,
546                columnNumber: 9
547            }, this),
548            valueClassName: "rate-cell",
549            itemClassName: lifetimeAcceptanceToneClass
550        }
551    ];
552};
553// Generates the conversion-rate row for the Success section.
554const createSuccessConversionRow = (label = "Conversion Rate", conversionRate = 0, convertedCount = 0, totalCount = 6, toneClassName = "lifetime-rate-red", badgeText = "you're Converting")=>({
555        label,
556        value: /*#__PURE__*/ _jsxDEV("div", {
557            className: "success-conversion-content",
558            children: [
559                /*#__PURE__*/ _jsxDEV("div", {
560                    className: "success-conversion-percent",
561                    children: [
562                        conversionRate,
563                        "%"
564                    ]
565                }, void 0, true, {
566                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
567                    lineNumber: 830,
568                    columnNumber: 7
569                }, this),
570                /*#__PURE__*/ _jsxDEV("div", {
571                    className: "success-conversion-subtext",
572                    children: [
573                        convertedCount,
574                        " out of ",
575                        totalCount,
576                        " converted"
577                    ]
578                }, void 0, true, {
579                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
580                    lineNumber: 831,
581                    columnNumber: 7
582                }, this),
583                /*#__PURE__*/ _jsxDEV("div", {
584                    className: `success-conversion-badge ${toneClassName}`,
585                    children: badgeText
586                }, void 0, false, {
587                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
588                    lineNumber: 832,
589                    columnNumber: 7
590                }, this)
591            ]
592        }, void 0, true, {
593            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
594            lineNumber: 829,
595            columnNumber: 5
596        }, this),
597        itemClassName: `success-conversion-item ${toneClassName}`,
598        valueClassName: "success-conversion-control"
599    });
600// Builds Success section rows, inserting conversion-rate card where needed.
601const mapSuccessToRows = (sections = [], tasks = [], onAutosave, toggleV
601alues = {}, allowEdit = false)=>{
602    const sortedTasks = [
603        ...tasks
604    ].sort((a, b)=>(a.displayOrder ?? 0) - (b.displayOrder ?? 0));
605    const hasConversionTask = sortedTasks.some((task)=>task.name.toLowerCase().includes("conversion"));
606    const lifetimeConversionRate = getLifetimeConversionRateData(sections);
607    const rows = sortedTasks.map((task)=>{
608        const isConversionTask = task.name.toLowerCase().includes("conversion");
609        if (isConversionTask) {
610            return createSuccessConversionRow(task.name, lifetimeConversionRate.percentage, lifetimeConversionRate.completedSections, lifetimeConversionRate.totalSections, lifetimeConversionRate.toneClassName, lifetimeConversionRate.badgeText);
611        }
612        return {
613            label: task.name,
614            allowEdit,
615            value: task.inputType === "TOGGLE" ? /*#__PURE__*/ _jsxDEV(ToggleSwitch, {
616                checked: toggleValues[task.id] ?? !!task.value?.booleanValue,
617                onChange: allowEdit ? (checked)=>onAutosave?.(task.id, task.platformId, checked) : undefined,
618                allowEdit: allowEdit
619            }, void 0, false, {
620                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
621                lineNumber: 875,
622                columnNumber: 11
623            }, this) : getDisplayNumberValue(task.value?.numberValue),
624            itemClassName: "success-metric-item",
625            valueClassName: "success-metric-control",
626            inputClassName: task.inputType === "TOGGLE" ? undefined : "success-stat-box",
627            onValueCommit: task.inputType === "TOGGLE" ? undefined : allowEdit ? (value)=>onAutosave?.(task.id, task.platformId, value) : undefined
628        };
629    });
630    if (!hasConversionTask) {
631        rows.push(createSuccessConversionRow("Lifetime Conversion Rate", lifetimeConversionRate.percentage, lifetimeConversionRate.completedSections, lifetimeConversionRate.totalSections, lifetimeConversionRate.toneClassName, lifetimeConversionRate.badgeText));
632    }
633    return rows;
634};
635// Maps chart response into the last-30-days integrity list.
636const mapChartToIntegrityDays = (chartResponse = [])=>{
637    console.log("mapChartToIntegrityDays input chartResponse:", chartResponse);
638    const mappedIntegrityDays = [
639        ...chartResponse
640    ].sort((a, b)=>new Date(a.entryDate).getTime() - new Date(b.entryDate).getTime()).slice(-30).map((item)=>({
641            date: item.entryDate,
642            completed: !!item.completed,
643            completedCount: item.completedCount ?? 0
644        }));
645    console.log("mapChartToIntegrityDays output IntegrityDay[]:", mappedIntegrityDays);
646    return mappedIntegrityDays;
647};
648// Simple toggle component used in checklist rows.
649const ToggleSwitch = ({ checked = false, onChange, allowEdit = false })=>{
650    return /*#__PURE__*/ _jsxDEV("label", {
651        className: `toggle-switch ${allowEdit}`.trim(),
652        children: [
653            /*#__PURE__*/ _jsxDEV("input", {
654                type: "checkbox",
655                checked: checked,
656                disabled: !allowEdit,
657                onChange: (e)=>onChange?.(e.target.checked),
658                readOnly: !onChange
659            }, void 0, false, {
660                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
661                lineNumber: 941,
662                columnNumber: 7
663            }, this),
664            /*#__PURE__*/ _jsxDEV("span", {
665                className: "toggle-slider"
666            }, void 0, false, {
667                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
668                lineNumber: 948,
669                columnNumber: 7
670            }, this)
671        ]
672    }, void 0, true, {
673        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
674        lineNumber: 940,
675        columnNumber: 5
676    }, this);
677};
678_c = ToggleSwitch;
679// Main Checklist page component: coordinates data fetch, state, and rendering.
680const ChecklistPage = ()=>{
681    _s();
682    const navigate = useNavigate();
683    const { currentUser, setCurrentUser, auth } = useAuth();
684    const authorities = currentUser?.companies?.[0]?.authorities ?? [];
685    const [selectedRange, setSelectedRange] = useState(DAY_STRING);
686    const [filter, setFilter] = useState(null);
687    const [selectedDate, setSelectedDate] = useState(new Date());
688    const [isCustomDateFilterActive, setIsCustomDateFilterActive] = useState(false);
689    const [isDatePickerOpen, setIsDatePickerOpen] = useState(false);
690    const datePickerRef = useRef(null);
691    const [activity, setActivity] = useState({
692        percentage: 0,
693        done: 0,
694        remaining: 0,
695        total: 0,
696        message: ""
697    });
698    const [selectedCampaign, setSelectedCampaign] = useState(null);
699    const [isInitializingCampaign, setIsInitializingCampaign] = useState(true);
700    const findProspectsOverviewRef = useRef(null);
701    const [findData, setFindData] = useState([]);
702    const [otherSocialData, setOtherSocialData] = useState([]);
703    const [relationshipData, setRelationshipData] = useState([]);
704    const [stayConnectedData, setStayConnectedData] = useState([]);
705    const [startConversationData, setStartConversationData] = useState([]);
706    const [communityData, setCommunityData] = useState([]);
707    const [growthData, setGrowthData] = useState([]);
708    const [sectionMeta, setSectionMeta] = useState(defaultSectionMeta);
709    const [integrityDays, setIntegrityDays] = useState([]);
710    const [integrityCompletedDays, setIntegrityCompletedDays] = useState(0);
711    const [toggleValues, setToggleValues] = useState({});
712    const [sectionsState, setSectionsState] = useState([]);
713    const [providersState, setProvidersState] = useState([]);
714    const [allowOtherPlatformsEdit, setAllowOtherPlatformsEdit] = useState(false);
715    const [findProspectsMessage, setFindProspectsMessage] = useState(null);
716    const [loading, setLoading] = useState(false);
717    const [saveLoading, setSaveLoading] = useState(false);
718    const [error, setError] = useState(null);
719    const [pendingChecklistChanges, setPendingChecklistChanges] = useState({});
720    const yearlyPrice = YEARLY_PLAN_PRICE;
721    const monthlyPrice = MONTHLY_PLAN_PRICE;
722    const liveplan = LIVE_PLAN;
723    const [subscriptionPlanDetails, setSubscriptionPlanDetails] = useState([]);
724    const [selectedSubscriptionPlan, setSelectedSubscriptionPlan] = useState(null);
725    const [showPlanModal, setShowPlanModal] = useState(false);
726    const [selectedPlan, setSelectedPlan] = useState(null);
727    const [isOpen, setIsOpen] = useState(false);
728    const [showUploadVideo, setShowUploadVideo] = useState(false);
729    const [plan, setPlan] = useState();
730    const [videoExists, setVideoExists] = useState(false);
731    const [trialPeriodExpired, setTrailPeriodExpired] = useState(false);
732    const [subscriptionPeriodExpired, setSubscriptionPeriodExpired] = useState(false);
733    const [summaryPerf, setSummaryPerf] = useState({
734        daysCompleted: 0,
735        daysTotal: 0,
736        avgCompletion: 0,
737        consecutiveDays: 0
738    });
739    const [summaryGroups, setSummaryGroups] = useState([]);
740    // 👉 Fetch running campaign on component mount to initialize with correct campaign upfront
741    async function initializeRunningCampaign() {
742        try {
743            const result = await axios.get(GET_CAMPAIGNS_BY_COMPANY_USER_AND_FB_ACC(CUREENT_COMPANY_NAME));
744            const responseData = result.data;
745            if (Array.isArray(responseData) && responseData.length > 0) {
746                // Find running campaign
747                const runningCampaign = responseData.find((campaign)=>Array.isArray(campaign.campaignStatus) && campaign.campaignStatus.some((status)=>status.name === "Running"));
748                // Set running campaign if exists, otherwise default to "All"
749                if (runningCampaign) {
750                    console.log("✅ Running Campaign initialized on mount:", runningCampaign.name);
751                    const selected = {
752                        value: runningCampaign.uuid,
753                        label: runningCampaign.name,
754                        acceptanceRate: runningCampaign.acceptanceRate
755                    };
756                    setSelectedCampaign(selected);
757                } else {
758                    console.log("ℹ️ No running campaign found - will use All");
759                    setSelectedCampaign({
760                        value: "-1",
761                        label: "All"
762                    });
763                }
764            }
765        } catch (error) {
766            console.error("Error fetching running campaign on mount:", error);
767            // Default to "All" if fetch fails
768            setSelectedCampaign({
769                value: "-1",
770                label: "All"
771            });
772        } finally{
773            setIsInitializingCampaign(false);
774        }
775    }
776    // Handles range dropdown changes and resets custom date selection.
777    const handleRangeChange = (range)=>{
778        setIsCustomDateFilterActive(false);
779        setSelectedRange(range ?? DAY_STRING);
780        setSelectedDate(getUserTimeZoneBasedCurrentDate());
781    };
782    // Handles advanced filter changes from DateRangeSelector.
783    const handleFilterChange = (nextFilter)=>{
784        if (nextFilter?.frequencyType) {
785            setIsCustomDateFilterActive(false);
786            setSelectedDate(getUserTimeZoneBasedCurrentDate());
787        }
788        setFilter(nextFilter);
789    };
790    useEffect(()=>{
791        if (!auth?.api_token) {
792            return;
793        }
794        const init = async ()=>{
795            const response = await getUserByToken(auth.api_token ?? "");
796            const user = response.data;
797            setCurrentUser(user);
798            const isTrialExpired = user?.trialPeriodCompleted;
799            const isSubscrptionCompleted = user?.subscriptionPeriodCompleted;
800            const isSubscriptionPeriod = user?.subscriptionPeriod;
801            if ((isTrialExpired || isSubscrptionCompleted) && !isSubscriptionPeriod) {
802                setShowPlanModal(true);
803            }
804            setTrailPeriodExpired(!!isTrialExpired);
805            setSubscriptionPeriodExpired(!!isSubscrptionCompleted);
806        };
807        init();
808    }, [
809        auth?.api_token,
810        setCurrentUser
811    ]);
812    // 👉 Initialize running campaign on first mount (before any data fetch)
813    useEffect(()=>{
814        initializeRunningCampaign();
815    }, []);
816    useEffect(()=>{
817        getSubscriptionPlanDetails();
818    }, []);
819    const handlePlanSelect = async (plan)=>{
820        if (plan === monthlyPrice) {
821            setIsOpen(true);
822            setShowPlanModal(false);
823            const targetedPrice = "197";
824            setPlan(197);
825            getPlanDetailsBySellPrice(subscriptionPlanDetails, targetedPrice);
826        } else if (plan === yearlyPrice) {
827            const hasVideo = await checkUserVideoExist();
828            if (hasVideo) {
829                setVideoExists(hasVideo);
830                setShowPlanModal(false);
831                setPlan(97);
832                const targetedPrice = "97";
833                getPlanDetailsBySellPrice(subscriptionPlanDetails, targetedPrice);
834                setIsOpen(true);
835                return;
836            }
837            setSelectedPlan(plan);
838            setShowUploadVideo(true);
839            setShowPlanModal(false);
840        } else if (plan === liveplan) {
841            setIsOpen(true);
842            setShowPlanModal(false);
843            const targetedPrice = "1";
844            setPlan(1);
845            getPlanDetailsBySellPrice(subscriptionPlanDetails, targetedPrice);
846        }
847    };
848    const handleShowStepsPopUp = (value)=>{
849        setShowPlanModal(value);
850    };
851    async function getSubscriptionPlanDetails() {
852        try {
853            const response = await axios.get(GET_ALL_SUBSCRIPTIONPLANS(CUREENT_COMPANY_NAME));
854            if (response.status === 200) {
855                setSubscriptionPlanDetails(response.data);
856            }
857        } catch (e) {
858            console.error("Error ...", e);
859        }
860    }
861    async function checkUserVideoExist() {
862        if (!currentUser?.id) {
863            return false;
864        }
865        try {
866            const response = await axios.get(`${CHECK_USER_VIDEO_EXIST(CUREENT_COMPANY_NAME)}?userId=${currentUser.id}`);
867            if (response.status === 200) {
868                return response.data.data;
869            }
870        } catch (e) {
871            console.error("Error ...", e);
872        }
873        return false;
874    }
875    const getPlanDetailsBySellPrice = (plans, targetPrice)=>{
876        const priceAsNumber = parseFloat(targetPrice);
877        const matchedPlan = plans.find((plan)=>plan.sellPrice === priceAsNumber);
878        if (matchedPlan) {
879            setSelectedSubscriptionPlan(matchedPlan);
880        }
881    };
882    // Handles date picker selection and switches to custom date mode.
883    const handleChecklistDateChange = (date)=>{
884        if (!date) {
885            return;
886        }
887        setSelectedDate(date);
888        setIsCustomDateFilterActive(true);
889        setSelectedRange(null);
890        setFilter((current)=>({
891                ...current ?? {
892                    statusName: [],
893                    names: []
894                },
895                startDate: null,
896                endDate: null,
897                frequencyType: undefined
898            }));
899        setIsDatePickerOpen(false);
900    };
901    // Normalizes autosave numeric input into a nullable number.
902    const normalizeNumericAutosaveValue = (value)=>{
903        if (typeof value !== "string") {
904            return null;
905        }
906        const trimmedValue = value.trim();
907        if (trimmedValue === "") {
908            return null;
909        }
910        const parsedValue = Number(trimmedValue);
911        return Number.isNaN(parsedValue) ? null : parsedValue;
912    };
913    // Validates Find Prospects autosave with Other Platforms overall totals.
914    const validateFindProspectsAutosave = async (taskId, platformId, value, providerName)=>{
915        const findProspectsTasks = sectionsState.find((section)=>section.name === "Find Prospects")?.tasks ?? [];
916        const sentTaskId = findProspectsTasks.find((task)=>task.name === "Friend Request & Message Sent")?.id;
917        const acceptedTaskId = findProspectsTasks.find((task)=>task.name === "Accepted")?.id;
918        if (taskId !== sentTaskId && taskId !== acceptedTaskId) {
919            return true;
920        }
921        const normalizedProviderName = providerName?.trim().toLowerCase();
922        const matchedProvider = providersState.find((provider)=>{
923            const samePlatformId = platformId !== undefined && getProviderPlatformId(provider) === platformId;
924            const sameProviderName = normalizedProviderName != null && normalizedProviderName.length > 0 && provider?.name?.trim().toLowerCase() === normalizedProviderName;
925            return samePlatformId || sameProviderName;
926        }) ?? (normalizedProviderName?.includes("other") ? resolveSocialProviders(providersState).otherProvider : resolveSocialProviders(providersState).facebookProvider) ?? resolveSocialProviders(providersState).otherProvider ?? resolveSocialProviders(providersState).facebookProvider;
927        const isOtherPlatformsProvider = matchedProvider?.name?.trim().toLowerCase() === "other platforms";
928        if (!isOtherPlatformsProvider) {
929            return true;
930        }
931        const normalizedValue = normalizeNumericAutosaveValue(value);
932        const pendingSentValue = sentTaskId != null ? pendingChecklistChanges[sentTaskId]?.numberValue : undefined;
933        const pendingAcceptedValue = acceptedTaskId != null ? pendingChecklistChanges[acceptedTaskId]?.numberValue : undefined;
934        const currentSentValue = pendingSentValue !== undefined ? pendingSentValue : matchedProvider?.sent ?? null;
935        const currentAcceptedValue = pendingAcceptedValue !== undefined ? pendingAcceptedValue : matchedProvider?.accepted ?? null;
936        const nextSent = taskId === sentTaskId ? normalizedValue : currentSentValue;
937        const nextAccepted = taskId === acceptedTaskId ? normalizedValue : currentAcceptedValue;
938        const baseOverallSent = typeof matchedProvider?.overallSent === "number" ? matchedProvider.overallSent : 0;
939        const baseOverallAccepted = typeof matchedProvider?.overallAccepted === "number" ? matchedProvider.overallAccepted : 0;
940        // overallSent/overallAccepted already include today's saved values,
941        // so subtract today's original to avoid double-counting the new input.
942        const originalDaySent = typeof matchedProvider?.sent === "number" ? matchedProvider.sent : 0;
943        const originalDayAccepted = typeof matchedProvider?.accepted === "number" ? matchedProvider.accepted : 0;
944        const totalSent = baseOverallSent - originalDaySent + (nextSent ?? 0);
945        const totalAccepted = baseOverallAccepted - originalDayAccepted + (nextAccepted ?? 0);
946        if (totalAccepted > totalSent) {
947            setFindProspectsMessage({
948                type: "error",
949                text: `Overall Accepted (${baseOverallAccepted}) should be less than or equal to Overall Sent (${baseOverallSent}).`
950            });
951            console.log("Blocked Find Prospects autosave because overall totals are invalid", {
952                taskId,
953                platformId,
954                nextSent,
955                nextAccepted,
956                baseOverallSent,
957                baseOverallAccepted,
958                totalSent,
959                totalAccepted
960            });
961            return false;
962        }
963        return true;
964    };
965    // Builds all UI state from the checklist API payload.
966    const buildChecklistStateFromPayload = (payload)=>{
967        const total = payload.totalTask ?? 0;
968        const done = payload.taskCompleted ?? 0;
969        const remaining = payload.leftTask ?? Math.max(0, total - done);
970        const percentage = total > 0 ? Math.round(done / total * 100) : 0;
971        setActivity({
972            percentage,
973            done,
974            remaining,
975            total,
976            message: percentage >= 80 ? "Crushing it!" : "Keep going"
977        });
978        const sections = payload.sections ?? [];
979        console.log("sections:", sections);
980        setToggleValues(getInitialToggleValues(sections));
981        setSectionsState(sections);
982        const sectionsByName = sections.reduce((acc, section)=>{
983            acc[section.name] = section;
984            return acc;
985        }, {});
986        setSectionMeta({
987            "Find Prospects": getSectionMeta(sectionsByName["Find Prospects"], "Find Prospects"),
988            "Start Conversations": getSectionMeta(sectionsByName["Start Conversations"], "Start Conversations"),
989            "Build Relationships": getSectionMeta(sectionsByName["Build Relationships"], "Build Relationships"),
990            "Stay Connected": getSectionMeta(sectionsByName["Stay Connected"], "Stay Connected"),
991            Community: getSectionMeta(sectionsByName["Community"], "Community"),
992            Success: getSectionMeta(sectionsByName["Success"], "Success")
993        });
994        const smProviders = payload.smProviders ?? [];
995        const allowEdit = !!payload.allowEdit;
996        console.log("checklist allowEdit:", allowEdit);
997        console.log("smProviders:", smProviders);
998        setAllowOtherPlatformsEdit(allowEdit);
999        setProvidersState(smProviders);
1000        const { facebookProvider, otherProvider } = resolveSocialProviders(smProviders);
1001        const findProspectsTasks = sectionsByName["Find Prospects"]?.tasks ?? [];
1002        const sentTask = findProspectsTasks.find((task)=>task.name === "Friend Request & Message Sent");
1003        const acceptedTask = findProspectsTasks.find((task)=>task.name === "Accepted");
1004        const sentTaskId = sentTask?.id;
1005        const acceptedTaskId = acceptedTask?.id;
1006        console.log("facebookProvider:", facebookProvider);
1007        console.log("otherProvider:", otherProvider);
1008        logLifetimeAcceptanceRate("Find Prospects", facebookProvider?.name || "Facebook", facebookProvider);
1009        logLifetimeAcceptanceRate("Find Prospects", otherProvider?.name || "Other Platforms", otherProvider);
1010        setFindData(mapProviderToRows(facebookProvider, handleChecklistAutosave, {
1011            sentTaskId,
1012            acceptedTaskId,
1013            onMessage: setFindProspectsMessage
1014        }));
1015        setOtherSocialData(mapProviderToRows(otherProvider, handleChecklistAutosave, {
1016            emptyMissingValues: true,
1017            isEditable: allowEdit,
1018            sentTaskId,
1019            acceptedTaskId,
1020            sentValueOverride: sentTask?.value?.numberValue ?? null,
1021            acceptedValueOverride: acceptedTask?.value?.numberValue ?? null,
1022            treatZeroAsEmpty: true,
1023            onMessage: setFindProspectsMessage
1024        }));
1025        setStartConversationData(mapTasksToRows(sectionsByName["Start Conversations"]?.tasks ?? [], handleChecklistAutosave, getInitialToggleValues(sections), allowEdit));
1026        setRelationshipData(mapTasksToRows(sectionsByName["Build Relationships"]?.tasks ?? [], handleChecklistAutosave, getInitialToggleValues(sections), allowEdit));
1027        setStayConnectedData(mapTasksToRows(sectionsByName["Stay Connected"]?.tasks ?? [], handleChecklistAutosave, getInitialToggleValues(sections), allowEdit));
1028        setCommunityData(mapTasksToRows(sectionsByName["Community"]?.tasks ?? [], handleChecklistAutosave, getInitialToggleValues(sections), allowEdit));
1029        setGrowthData(mapSuccessToRows(sections, sectionsByName["Success"]?.tasks ?? [], handleChecklistAutosave, getInitialToggleValues(sections), allowEdit));
1030        const integrityChartDays = mapChartToIntegrityDays(payload.chartResponse ?? []);
1031        console.log("IntegrityDay state candidate:", integrityChartDays);
1032        console.log("payload.chartTaskCompletedCountDay:", payload.chartTaskCompletedCountDay);
1033        console.log("completed days from chartResponse:", integrityChartDays.filter((day)=>day.completed).length);
1034        const completedDays = payload.chartTaskCompletedCountDay ?? integrityChartDays.filter((day)=>day.completed).length;
1035        console.log("integrityCompletedDays forced value:", completedDays);
1036        setIntegrityDays(integrityChartDays);
1037        setIntegrityCompletedDays(completedDays);
1038        setSummaryPerf({
1039            daysCompleted: done,
1040            daysTotal: total,
1041            avgCompletion: percentage,
1042            consecutiveDays: completedDays
1043        });
1044        const buildRelationshipTasks = sectionsByName["Build Relationships"]?.tasks ?? [];
1045        const successTasks = [
1046            ...sectionsByName["Success"]?.tasks ?? []
1047        ].sort((a, b)=>(a.displayOrder ?? 0) - (b.displayOrder ?? 0));
1048        const prospectsRespondedTask = buildRelationshipTasks.find((task)=>task.name?.toLowerCase().includes("prospects responded"));
1049        const lifetimeConversionRateCard = getLifetimeConversionRateCard(sections);
1050        logLifetimeAcceptanceRate("Success Snapshot", facebookProvider?.name || "Facebook", facebookProvider);
1051        logLifetimeAcceptanceRate("Success Snapshot", otherProvider?.name || "Other Platforms", otherProvider);
1052        setSummaryGroups([
1053            {
1054                title: facebookProvider?.name || "Facebook",
1055                tagClass: "facebook",
1056                items: mapProviderToRows(facebookProvider)
1057            },
1058            {
1059                title: otherProvider?.name || "Other Platforms",
1060                tagClass: "social",
1061                items: mapProviderToRows(otherProvider, undefined, {
1062                    emptyMissingValues: true
1063                })
1064            },
1065            {
1066                title: "Success",
1067                tagClass: "success",
1068                items: [
1069                    ...prospectsRespondedTask ? [
1070                        {
1071                            label: prospectsRespondedTask.name,
1072                            value: getDisplayNumberValue(prospectsRespondedTask.value?.numberValue)
1073                        }
1074                    ] : [],
1075                    ...successTasks.map((task)=>({
1076                            label: task.name,
1077                            value: task.inputType === "TOGGLE" ? task.value?.booleanValue ? "Yes" : "No" : task.name.toLowerCase().includes("conversion") ? `${task.value?.numberValue ?? 0}%` : getDisplayNumberValue(task.value?.numberValue)
1078                        })),
1079                    lifetimeConversionRateCard
1080                ]
1081            }
1082        ]);
1083    };
1084    // Fetches checklist data based on current date filter settings.
1085    const fetchChecklistData = async (options)=>{
1086        if (!options?.silent) {
1087            setLoading(true);
1088            setError(null);
1089        // enableSplashScreen()
1090        }
1091        try {
1092            const companyName = CUREENT_COMPANY_NAME || "sixsigmafunnels";
1093            const browserTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone || "Asia/Kolkata";
1094            const hasAdvancedDateFilter = !!filter?.startDate && !!filter?.endDate;
1095            const frequencyType = isValidRange(selectedRange) ? selectedRange : isValidRange(filter?.frequencyType ?? null) ? filter?.frequencyType ?? DAY_STRING : DAY_STRING;
1096            const campaignUuid = selectedCampaign?.value || undefined;
1097            const requestPayload = hasAdvancedDateFilter ? {
1098                browserTimezone,
1099                fromDate: filter?.startDate,
1100                toDate: filter?.endDate,
1101                ...campaignUuid && {
1102                    campaignUuid
1103                }
1104            } : isCustomDateFilterActive ? {
1105                browserTimezone,
1106                fromDate: formatChecklistFilterDate(selectedDate),
1107                toDate: formatChecklistFilterDate(selectedDate),
1108                ...campaignUuid && {
1109                    campaignUuid
1110                }
1111            } : {
1112                browserTimezone,
1113                frequencyType,
1114                ...campaignUuid && {
1115                    campaignUuid
1116                }
1117            };
1118            console.log("GET_CHECKLIST request:", {
1119                url: GET_CHECKLIST(companyName),
1120                payload: requestPayload
1121            });
1122            const response = await axios.post(GET_CHECKLIST(companyName), requestPayload);
1123            console.log("GET_CHECKLIST raw response:", response?.data);
1124            const payload = response?.data?.data;
1125            console.log("GET_CHECKLIST payload:", payload);
1126            if (options?.afterSave) {
1127                console.log("Fresh checklist output after save:", payload);
1128            }
1129            if (!response?.data?.success || !payload) {
1130                setError(response?.data?.message || "Failed to load checklist data.");
1131                return;
1132            }
1133            buildChecklistStateFromPayload(payload);
1134        } catch (err) {
1135            setError(err?.message || "Failed to load checklist data.");
1136        } finally{
1137            if (!options?.silent) {
1138                // setLoading(false)
1139                disableSplashScreen();
1140            }
1141        }
1142    };
1143    // ✅ Handles campaign selection and calls GET_CHECKLIST with dynamic values
1144    const handleCampaignChange = async (option)=>{
1145        enableSplashScreen();
1146        if (!option) return;
1147        // Reset date filters to "Today" when campaign changes
1148        const todayDate = getUserTimeZoneBasedCurrentDate();
1149        setSelectedCampaign(option);
1150        setSelectedRange(DAY_STRING); // Select "Today" in calendar
1151        setSelectedDate(todayDate); // Set date to today
1152        setIsCustomDateFilterActive(false); // Clear custom date filter
1153        setFilter(null); // Clear advanced date filters
1154        try {
1155            const companyName = CUREENT_COMPANY_NAME || "sixsigmafunnels";
1156            const browserTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone || "Asia/Kolkata";
1157            const requestPayload = {
1158                browserTimezone,
1159                frequencyType: DAY_STRING,
1160                campaignUuid: option.value
1161            };
1162            console.log("GET_CHECKLIST request with campaign:", {
1163                url: GET_CHECKLIST(companyName),
1164                payload: requestPayload
1165            });
1166            const response = await axios.post(GET_CHECKLIST(companyName), requestPayload);
1167            console.log("GET_CHECKLIST response after campaign change:", response?.data);
1168            if (response?.data?.success) {
1169                console.log("Checklist data loaded successfully with selected campaign for today");
1170                buildChecklistStateFromPayload(response?.data?.data);
1171                disableSplashScreen();
1172            } else {
1173                console.error("Failed to load checklist:", response?.data?.message);
1174            }
1175        } catch (error) {
1176            console.error("Error calling GET_CHECKLIST API on campaign change:", error);
1177            disableSplashScreen();
1178        }
1179    };
1180    // Determines which date should be used for save/autosave payloads.
1181    const resolveChecklistEntryDate = ()=>{
1182        const hasAdvancedDateFilter = !!filter?.startDate && !!filter?.endDate;
1183        // if (hasAdvancedDateFilter || isCustomDateFilterActive) {
1184        //   return formatChecklistEntryDate(selectedDate)
1185        // }
1186        if (hasAdvancedDateFilter) {
1187            const advancedFilterDate = new Date(filter.startDate);
1188            if (!Number.isNaN(advancedFilterDate.getTime())) {
1189                return formatChecklistFilterDate(advancedFilterDate);
1190            }
1191        }
1192        if (isCustomDateFilterActive) {
1193            return formatChecklistEntryDate(selectedDate);
1194        }
1195        return formatChecklistEntryDate(getUserTimeZoneBasedCurrentDate());
1196    };
1197    // Autosaves a single task value and refreshes data to keep UI in sync.
1198    async function handleChecklistAutosave(taskId, platformId, value, providerName) {
1199        const isValidAutosave = await validateFindProspectsAutosave(taskId, platformId, value, providerName);
1200        if (!isValidAutosave) {
1201            return;
1202        }
1203        if (typeof value === "boolean") {
1204            setToggleValues((current)=>({
1205                    ...current,
1206                    [taskId]: value
1207                }));
1208        }
1209        const taskValueUpdate = buildTaskValueUpdate(taskId, value);
1210        const findProspectsTasks = sectionsState.find((section)=>section.name === "Find Prospects")?.tasks ?? [];
1211        const sentTaskId = findProspectsTasks.find((task)=>task.name === "Friend Request & Message Sent")?.id;
1212        const acceptedTaskId = findProspectsTasks.find((task)=>task.name === "Accepted")?.id;
1213        const normalizedProviderName = providerName?.trim().toLowerCase();
1214        if (normalizedProviderName && (taskId === sentTaskId || taskId === acceptedTaskId) && typeof taskValueUpdate.numberValue !== "undefined") {
1215            setProvidersState((current)=>current.map((provider)=>{
1216                    if (provider?.name?.trim().toLowerCase() !== normalizedProviderName) {
1217                        return provider;
1218                    }
1219                    return {
1220                        ...provider,
1221                        sent: taskId === sentTaskId ? taskValueUpdate.numberValue ?? null : provider.sent,
1222                        accepted: taskId === acceptedTaskId ? taskValueUpdate.numberValue ?? null : provider.accepted
1223                    };
1224                }));
1225        }
1226        const companyName = CUREENT_COMPANY_NAME || "sixsigmafunnels";
1227        const payload = {
1228            entryDate: resolveChecklistEntryDate(),
1229            timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || "Asia/Kolkata",
1230            values: [
1231                taskValueUpdate
1232            ]
1233        };
1234        setPendingChecklistChanges((current)=>({
1235                ...current,
1236                [taskId]: taskValueUpdate
1237            }));
1238        console.log("CHECKLIST_AUTOSAVE trigger:", {
1239            taskId,
1240            platformId,
1241            value: taskValueUpdate
1242        });
1243        console.log("CHECKLIST_AUTOSAVE request:", {
1244            url: POST_SAVE_TASK_VALUE(companyName),
1245            payload
1246        });
1247        const isOtherPlatformsAutosave = normalizedProviderName?.includes("other") && (taskId === sentTaskId || taskId === acceptedTaskId);
1248        if (isOtherPlatformsAutosave) {
1249            enableSplashScreen();
1250        }
1251        try {
1252            const response = await axios.post(POST_SAVE_TASK_VALUE(companyName), payload);
1253            console.log("CHECKLIST_AUTOSAVE response:", response?.data);
1254            await fetchChecklistData({
1255                afterSave: true,
1256                silent: true
1257            });
1258        } catch (err) {
1259            console.log("CHECKLIST_AUTOSAVE error:", err?.response?.data || err?.message || err);
1260        } finally{
1261            if (isOtherPlatformsAutosave) {
1262                disableSplashScreen();
1263            }
1264        }
1265    }
1266    // Reset filters on user change (new login/context).
1267    useEffect(()=>{
1268        setSelectedRange(DAY_STRING);
1269        setFilter(null);
1270        setIsCustomDateFilterActive(false);
1271        window.scrollTo(0, 0);
1272    }, [
1273        currentUser
1274    ]);
1275    // Auto-clear transient Find Prospects validation messages.
1276    useEffect(()=>{
1277        if (!findProspectsMessage) {
1278            return;
1279        }
1280        const timeoutId = window.setTimeout(()=>{
1281            setFindProspectsMessage(null);
1282        }, 5000);
1283        return ()=>window.clearTimeout(timeoutId);
1284    }, [
1285        findProspectsMessage
1286    ]);
1287    // Load checklist data when dependencies change.
1288    useEffect(()=>{
1289        // 👉 Wait until running campaign is initialized before fetching checklist
1290        if (isInitializingCampaign) {
1291            console.log("⏳ Waiting for running campaign initialization...");
1292            return;
1293        }
1294        console.log("✅ Campaign initialized, now fetching checklist with campaign:", selectedCampaign);
1295        fetchChecklistData();
1296    }, [
1297        currentUser,
1298        selectedRange,
1299        filter,
1300        selectedDate,
1301        isCustomDateFilterActive,
1302        selectedCampaign,
1303        isInitializingCampaign
1304    ]);
1305    // Derive all section row data whenever raw state changes.
1306    useEffect(()=>{
1307        if (!sectionsState.length && !providersState.length) {
1308            return;
1309        }
1310        const sectionsByName = sectionsState.reduce((acc, section)=>{
1311            acc[section.name] = section;
1312            return acc;
1313        }, {});
1314        const { facebookProvider, otherProvider } = resolveSocialProviders(providersState);
1315        const findProspectsTasks = sectionsByName["Find Prospects"]?.tasks ?? [];
1316        const sentTask = findProspectsTasks.find((task)=>task.name === "Friend Request & Message Sent");
1317        const acceptedTask = findProspectsTasks.find((task)=>task.name === "Accepted");
1318        const sentTaskId = sentTask?.id;
1319        const acceptedTaskId = acceptedTask?.id;
1320        const buildRelationshipTasks = sectionsByName["Build Relationships"]?.tasks ?? [];
1321        const successTasks = [
1322            ...sectionsByName["Success"]?.tasks ?? []
1323        ].sort((a, b)=>(a.displayOrder ?? 0) - (b.displayOrder ?? 0));
1324        const prospectsRespondedTask = buildRelationshipTasks.find((task)=>task.name?.toLowerCase().includes("prospects responded"));
1325        setFindData(mapProviderToRows(facebookProvider, handleChecklistAutosave, {
1326            sentTaskId,
1327            acceptedTaskId,
1328            onMessage: setFindProspectsMessage
1329        }));
1330        setOtherSocialData(mapProviderToRows(otherProvider, handleChecklistAutosave, {
1331            emptyMissingValues: true,
1332            isEditable: allowOtherPlatformsEdit,
1333            sentTaskId,
1334            acceptedTaskId,
1335            sentValueOverride: sentTask?.value?.numberValue ?? null,
1336            acceptedValueOverride: acceptedTask?.value?.numberValue ?? null,
1337            treatZeroAsEmpty: true,
1338            onMessage: setFindProspectsMessage
1339        }));
1340        setStartConversationData(mapTasksToRows(sectionsByName["Start Conversations"]?.tasks ?? [], handleChecklistAutosave, toggleV
1340alues, allowOtherPlatformsEdit));
1341        setRelationshipData(mapTasksToRows(sectionsByName["Build Relationships"]?.tasks ?? [], handleChecklistAutosave, toggleValues, allowOtherPlatformsEdit));
1342        setStayConnectedData(mapTasksToRows(sectionsByName["Stay Connected"]?.tasks ?? [], handleChecklistAutosave, toggleValues, allowOtherPlatformsEdit));
1343        setCommunityData(mapTasksToRows(sectionsByName["Community"]?.tasks ?? [], handleChecklistAutosave, toggleValues, allowOtherPlatformsEdit));
1344        setGrowthData(mapSuccessToRows(sectionsState, sectionsByName["Success"]?.tasks ?? [], handleChecklistAutosave, toggleValues, allowOtherPlatformsEdit));
1345        setSummaryGroups([
1346            {
1347                title: facebookProvider?.name || "Facebook",
1348                tagClass: "facebook",
1349                items: mapProviderToRows(facebookProvider)
1350            },
1351            {
1352                title: otherProvider?.name || "Other Platforms",
1353                tagClass: "social",
1354                items: mapProviderToRows(otherProvider, undefined, {
1355                    emptyMissingValues: true
1356                })
1357            },
1358            {
1359                title: "Success",
1360                tagClass: "success",
1361                items: [
1362                    ...prospectsRespondedTask ? [
1363                        {
1364                            label: prospectsRespondedTask.name,
1365                            value: getDisplayNumberValue(prospectsRespondedTask.value?.numberValue)
1366                        }
1367                    ] : [],
1368                    ...successTasks.map((task)=>({
1369                            label: task.name,
1370                            value: task.inputType === "TOGGLE" ? toggleValues[task.id] ?? task.value?.booleanValue ? "Yes" : "No" : task.name.toLowerCase().includes("conversion") ? `${task.value?.numberValue ?? 0}%` : getDisplayNumberValue(task.value?.numberValue)
1371                        })),
1372                    getLifetimeConversionRateCard(sectionsState)
1373                ]
1374            }
1375        ]);
1376    }, [
1377        allowOtherPlatformsEdit,
1378        providersState,
1379        sectionsState,
1380        toggleValues
1381    ]);
1382    useEffect(()=>{
1383        const isInitialDataLoaded = findData !== null && otherSocialData !== null && summaryGroups !== null;
1384        if (isInitialDataLoaded && !saveLoading) {
1385            setLoading(false);
1386        }
1387        console.log("Loading Check 👉", {
1388            findData,
1389            otherSocialData,
1390            summaryGroups,
1391            saveLoading
1392        });
1393    }, [
1394        findData,
1395        otherSocialData,
1396        summaryGroups,
1397        saveLoading
1398    ]);
1399    useEffect(()=>{
1400        enableSplashScreen(); // ✅ start immediately when page mounts
1401        loadChecklistPage(); // 👈 call wrapper function
1402    }, []);
1403    const loadChecklistPage = async ()=>{
1404        try {
1405            await fetchChecklistData(); // your existing API
1406        } catch (error) {
1407            console.error(error);
1408        } finally{
1409            disableSplashScreen(); // ✅ already working in your case
1410        }
1411    };
1412    // Saves all pending checklist changes in a single request.
1413    const handleSaveDailySystem = async ()=>{
1414        setSaveLoading(true);
1415        try {
1416            const findProspectsTasks = sectionsState.find((section)=>section.name === "Find Prospects")?.tasks ?? [];
1417            const sentTaskId = findProspectsTasks.find((task)=>task.name === "Friend Request & Message Sent")?.id;
1418            const acceptedTaskId = findProspectsTasks.find((task)=>task.name === "Accepted")?.id;
1419            const { otherProvider } = resolveSocialProviders(providersState);
1420            const pendingSentValue = sentTaskId != null ? pendingChecklistChanges[sentTaskId]?.numberValue : undefined;
1421            const pendingAcceptedValue = acceptedTaskId != null ? pendingChecklistChanges[acceptedTaskId]?.numberValue : undefined;
1422            const currentSentValue = pendingSentValue !== undefined ? pendingSentValue : otherProvider?.sent ?? null;
1423            const currentAcceptedValue = pendingAcceptedValue !== undefined ? pendingAcceptedValue : otherProvider?.accepted ?? null;
1424            const baseOverallSent = typeof otherProvider?.overallSent === "number" ? otherProvider.overallSent : 0;
1425            const baseOverallAccepted = typeof otherProvider?.overallAccepted === "number" ? otherProvider.overallAccepted : 0;
1426            // overallSent/overallAccepted already include today's saved values,
1427            // so subtract today's original API value to avoid double-counting.
1428            const originalDaySent = typeof otherProvider?.sent === "number" ? otherProvider.sent : 0;
1429            const originalDayAccepted = typeof otherProvider?.accepted === "number" ? otherProvider.accepted : 0;
1430            const totalSent = baseOverallSent - originalDaySent + (currentSentValue ?? 0);
1431            const totalAccepted = baseOverallAccepted - originalDayAccepted + (currentAcceptedValue ?? 0);
1432            if (totalAccepted > totalSent) {
1433                const errorMessage = `Overall Accepted (${baseOverallAccepted}) should be less than or equal to Overall Sent (${baseOverallSent}).`;
1434                setFindProspectsMessage({
1435                    type: "error",
1436                    text: errorMessage
1437                });
1438                await Swal.fire({
1439                    title: "Validation Error",
1440                    text: errorMessage,
1441                    icon: "error",
1442                    confirmButtonText: "OK",
1443                    confirmButtonColor: "#0373b9"
1444                });
1445                return;
1446            }
1447            const pendingValues = Object.values(pendingChecklistChanges);
1448            const companyName = CUREENT_COMPANY_NAME || "sixsigmafunnels";
1449            if (!pendingValues.length) {
1450                if (isOverallValidationErrorMessage(findProspectsMessage)) {
1451                    const errorMessage = findProspectsMessage?.text || `Overall Accepted (${baseOverallAccepted}) should be less than or equal to Overall Sent (${baseOverallSent}).`;
1452                    await Swal.fire({
1453                        title: "Validation Error",
1454                        text: errorMessage,
1455                        icon: "error",
1456                        confirmButtonText: "OK",
1457                        confirmButtonColor: "#0373b9"
1458                    });
1459                    return;
1460                }
1461                await Swal.fire({
1462                    title: "No Changes",
1463                    text: "No checklist changes to save.",
1464                    icon: "info",
1465                    confirmButtonText: "OK",
1466                    confirmButtonColor: "#0373b9"
1467                });
1468                return;
1469            }
1470            const payload = {
1471                entryDate: resolveChecklistEntryDate(),
1472                timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || "Asia/Kolkata",
1473                values: pendingValues
1474            };
1475            console.log("CHECKLIST_SAVE request:", {
1476                url: POST_SAVE_TASK_VALUE(companyName),
1477                payload
1478            });
1479            const response = await axios.post(POST_SAVE_TASK_VALUE(companyName), payload);
1480            console.log("CHECKLIST_SAVE response:", response?.data);
1481            if (response?.data?.success === false) {
1482                await Swal.fire({
1483                    title: "Save Failed",
1484                    text: response?.data?.message || "Failed to save daily system.",
1485                    icon: "error",
1486                    confirmButtonText: "OK",
1487                    confirmButtonColor: "#0373b9"
1488                });
1489                return;
1490            }
1491            setPendingChecklistChanges({});
1492            await fetchChecklistData({
1493                afterSave: true
1494            });
1495            await Swal.fire({
1496                title: "Saved!",
1497                text: response?.data?.message || "Daily system saved successfully.",
1498                icon: "success",
1499                confirmButtonText: "OK",
1500                confirmButtonColor: "#f79c3a"
1501            });
1502        } catch (err) {
1503            console.log("CHECKLIST_SAVE error:", err?.response?.data || err?.message || err);
1504            await Swal.fire({
1505                title: "Save Failed",
1506                text: err?.response?.data?.message || err?.message || "Failed to save daily system.",
1507                icon: "error",
1508                confirmButtonText: "OK",
1509                confirmButtonColor: "#0373b9"
1510            });
1511        } finally{
1512            setSaveLoading(false);
1513        }
1514    };
1515    const maxSelectableDate = getUserTimeZoneBasedCurrentDate();
1516    const hasAdvancedDateFilter = !!filter?.startDate && !!filter?.endDate;
1517    const isInlineDateFilterActive = isCustomDateFilterActive && !hasAdvancedDateFilter;
1518    const activityHeaderLabel = buildActivityHeaderLabel(selectedRange, selectedDate, filter);
1519    const findProspectsMeta = sectionMeta["Find Prospects"];
1520    const startConversationsMeta = sectionMeta["Start Conversations"];
1521    const buildRelationshipsMeta = sectionMeta["Build Relationships"];
1522    const stayConnectedMeta = sectionMeta["Stay Connected"];
1523    const communityMeta = sectionMeta["Community"];
1524    const successMeta = sectionMeta["Success"];
1525    const { facebookProvider, otherProvider } = resolveSocialProviders(providersState);
1526    const facebookAcceptanceRate = getLifetimeAcceptanceRate(facebookProvider);
1527    const otherAcceptanceRate = getLifetimeAcceptanceRate(otherProvider);
1528    // Convenience helper for section completion pill state.
1529    const isSectionComplete = (sectionName)=>sectionsState.find((section)=>section.name === sectionName)?.allTaskCompleted ?? false;
1530    return /*#__PURE__*/ _jsxDEV(Content, {
1531        children: [
1532            /*#__PURE__*/ _jsxDEV("div", {
1533                className: "checklist-page",
1534                children: [
1535                    /*#__PURE__*/ _jsxDEV("div", {
1536                        className: "checklist-header",
1537                        children: /*#__PURE__*/ _jsxDEV("div", {
1538                            className: "header-top",
1539                            children: [
1540                                /*#__PURE__*/ _jsxDEV("div", {
1541                                    className: "checklist-header-title",
1542                                    children: [
1543                                        /*#__PURE__*/ _jsxDEV("h1", {
1544                                            children: " Daily System"
1545                                        }, void 0, false, {
1546                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1547                                            lineNumber: 2120,
1548                                            columnNumber: 15
1549                                        }, this),
1550                                        /*#__PURE__*/ _jsxDEV("p", {
1551                                            children: "Log today's activity. Build predictable growth."
1552                                        }, void 0, false, {
1553                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1554                                            lineNumber: 2121,
1555                                            columnNumber: 15
1556                                        }, this)
1557                                    ]
1558                                }, void 0, true, {
1559                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1560                                    lineNumber: 2119,
1561                                    columnNumber: 13
1562                                }, this),
1563                                /*#__PURE__*/ _jsxDEV("div", {
1564                                    className: "date-filter-wrapper",
1565                                    children: [
1566                                        /*#__PURE__*/ _jsxDEV("label", {
1567                                            className: "date_range_lbl",
1568                                            children: "Filter:"
1569                                        }, void 0, false, {
1570                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1571                                            lineNumber: 2125,
1572                                            columnNumber: 15
1573                                        }, this),
1574                                        /*#__PURE__*/ _jsxDEV(DateRangeSelector, {
1575                                            selectedRange: selectedRange,
1576                                            onRangeChange: handleRangeChange,
1577                                            filter: filter,
1578                                            setFilter: handleFilterChange,
1579                                            isUserTable: false,
1580                                            planType: null,
1581                                            setSelectedRange: handleRangeChange,
1582                                            isDropdown: false,
1583                                            isOverallRequired: false,
1584                                            isDayRequired: true
1585                                        }, void 0, false, {
1586                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1587                                            lineNumber: 2126,
1588                                            columnNumber: 15
1589                                        }, this),
1590                                        /*#__PURE__*/ _jsxDEV("div", {
1591                                            className: `col-md-4 checklist-header-date-display ${isInlineDateFilterActive ? "is-active" : ""}`,
1592                                            style: {
1593                                                position: "relative"
1594                                            },
1595                                            children: [
1596                                                /*#__PURE__*/ _jsxDEV("img", {
1597                                                    src: "/media/misc/Daily-system-Header-calender.png",
1598                                                    alt: "calendar",
1599                                                    className: "date-picker-image",
1600                                                    onClick: ()=>setIsDatePickerOpen(true)
1601                                                }, void 0, false, {
1602                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1603                                                    lineNumber: 2145,
1604                                                    columnNumber: 18
1605                                                }, this),
1606                                                /*#__PURE__*/ _jsxDEV(DatePicker, {
1607                                                    ref: datePickerRef,
1608                                                    className: "form-control",
1609                                                    selected: selectedDate,
1610                                                    onChange: handleChecklistDateChange,
1611                                                    open: isDatePickerOpen,
1612                                                    onInputClick: ()=>setIsDatePickerOpen(true),
1613                                                    onClickOutside: ()=>setIsDatePickerOpen(false),
1614                                                    onCalendarClose: ()=>setIsDatePickerOpen(false),
1615                                                    dateFormat: DATE_FORMAT_MMMM_DD_YYYY,
1616                                                    maxDate: maxSelectableDate,
1617                                                    readOnly: true,
1618                                                    locale: "en-GB"
1619                                                }, void 0, false, {
1620                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1621                                                    lineNumber: 2153,
1622                                                    columnNumber: 17
1623                                                }, this)
1624                                            ]
1625                                        }, void 0, true, {
1626                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1627                                            lineNumber: 2139,
1628                                            columnNumber: 15
1629                                        }, this)
1630                                    ]
1631                                }, void 0, true, {
1632                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1633                                    lineNumber: 2124,
1634                                    columnNumber: 13
1635                                }, this)
1636                            ]
1637                        }, void 0, true, {
1638                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1639                            lineNumber: 2118,
1640                            columnNumber: 11
1641                        }, this)
1642                    }, void 0, false, {
1643                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1644                        lineNumber: 2117,
1645                        columnNumber: 9
1646                    }, this),
1647                    /*#__PURE__*/ _jsxDEV("div", {
1648                        className: "checklist-content",
1649                        children: [
1650                            /*#__PURE__*/ _jsxDEV(DailyActivityLog, {
1651                                dateLabel: activityHeaderLabel,
1652                                data: activity,
1653                                integrityDays: integrityDays,
1654                                integrityCompletedDays: integrityCompletedDays
1655                            }, void 0, false, {
1656                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1657                                lineNumber: 2175,
1658                                columnNumber: 11
1659                            }, this),
1660                            loading && /*#__PURE__*/ _jsxDEV("div", {
1661                                className: "checklist-loading",
1662                                children: "Loading checklist..."
1663                            }, void 0, false, {
1664                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1665                                lineNumber: 2182,
1666                                columnNumber: 23
1667                            }, this),
1668                            error && /*#__PURE__*/ _jsxDEV("div", {
1669                                className: "checklist-error",
1670                                children: [
1671                                    "Error loading checklist: ",
1672                                    error
1673                                ]
1674                            }, void 0, true, {
1675                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1676                                lineNumber: 2183,
1677                                columnNumber: 21
1678                            }, this),
1679                            /*#__PURE__*/ _jsxDEV("div", {
1680                                className: "journey-flow",
1681                                children: [
1682                                    /*#__PURE__*/ _jsxDEV("div", {
1683                                        className: "flow-step",
1684                                        children: [
1685                                            /*#__PURE__*/ _jsxDEV("img", {
1686                                                src: "/media/misc/find-prospects.png",
1687                                                alt: "find-prospects",
1688                                                className: "journey-flow-img"
1689                                            }, void 0, false, {
1690                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1691                                                lineNumber: 2187,
1692                                                columnNumber: 15
1693                                            }, this),
1694                                            /*#__PURE__*/ _jsxDEV("span", {
1695                                                children: findProspectsMeta.title
1696                                            }, void 0, false, {
1697                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1698                                                lineNumber: 2192,
1699                                                columnNumber: 15
1700                                            }, this)
1701                                        ]
1702                                    }, void 0, true, {
1703                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1704                                        lineNumber: 2186,
1705                                        columnNumber: 13
1706                                    }, this),
1707                                    /*#__PURE__*/ _jsxDEV("div", {
1708                                        className: "flow-arrow",
1709                                        children: /*#__PURE__*/ _jsxDEV("img", {
1710                                            src: "/media/misc/Arrow-right.png",
1711                                            alt: "arrow",
1712                                            className: "right-arrow"
1713                                        }, void 0, false, {
1714                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1715                                            lineNumber: 2195,
1716                                            columnNumber: 15
1717                                        }, this)
1718                                    }, void 0, false, {
1719                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1720                                        lineNumber: 2194,
1721                                        columnNumber: 13
1722                                    }, this),
1723                                    /*#__PURE__*/ _jsxDEV("div", {
1724                                        className: "flow-step",
1725                                        children: [
1726                                            /*#__PURE__*/ _jsxDEV("img", {
1727                                                src: "/media/misc/start-conversation.png",
1728                                                alt: "start-conversation",
1729                                                className: "journey-flow-img"
1730                                            }, void 0, false, {
1731                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1732                                                lineNumber: 2198,
1733                                                columnNumber: 15
1734                                            }, this),
1735                                            /*#__PURE__*/ _jsxDEV("span", {
1736                                                children: startConversationsMeta.title
1737                                            }, void 0, false, {
1738                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1739                                                lineNumber: 2203,
1740                                                columnNumber: 15
1741                                            }, this)
1742                                        ]
1743                                    }, void 0, true, {
1744                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1745                                        lineNumber: 2197,
1746                                        columnNumber: 13
1747                                    }, this),
1748                                    /*#__PURE__*/ _jsxDEV("div", {
1749                                        className: "flow-arrow",
1750                                        children: /*#__PURE__*/ _jsxDEV("img", {
1751                                            src: "/media/misc/Arrow-right.png",
1752                                            alt: "arrow",
1753                                            className: "right-arrow"
1754                                        }, void 0, false, {
1755                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1756                                            lineNumber: 2206,
1757                                            columnNumber: 15
1758                                        }, this)
1759                                    }, void 0, false, {
1760                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1761                                        lineNumber: 2205,
1762                                        columnNumber: 13
1763                                    }, this),
1764                                    /*#__PURE__*/ _jsxDEV("div", {
1765                                        className: "flow-step",
1766                                        children: [
1767                                            /*#__PURE__*/ _jsxDEV("img", {
1768                                                src: "/media/misc/build-relationships.png",
1769                                                alt: "build-relationships",
1770                                                className: "journey-flow-img"
1771                                            }, void 0, false, {
1772                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1773                                                lineNumber: 2209,
1774                                                columnNumber: 15
1775                                            }, this),
1776                                            /*#__PURE__*/ _jsxDEV("span", {
1777                                                children: buildRelationshipsMeta.title
1778                                            }, void 0, false, {
1779                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1780                                                lineNumber: 2214,
1781                                                columnNumber: 15
1782                                            }, this)
1783                                        ]
1784                                    }, void 0, true, {
1785                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1786                                        lineNumber: 2208,
1787                                        columnNumber: 13
1788                                    }, this),
1789                                    /*#__PURE__*/ _jsxDEV("div", {
1790                                        className: "flow-arrow",
1791                                        children: /*#__PURE__*/ _jsxDEV("img", {
1792                                            src: "/media/misc/Arrow-right.png",
1793                                            alt: "arrow",
1794                                            className: "right-arrow"
1795                                        }, void 0, false, {
1796                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1797                                            lineNumber: 2217,
1798                                            columnNumber: 15
1799                                        }, this)
1800                                    }, void 0, false, {
1801                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1802                                        lineNumber: 2216,
1803                                        columnNumber: 13
1804                                    }, this),
1805                                    /*#__PURE__*/ _jsxDEV("div", {
1806                                        className: "flow-step",
1807                                        children: [
1808                                            /*#__PURE__*/ _jsxDEV("img", {
1809                                                src: "/media/misc/stay-connected.png",
1810                                                alt: "stay-connected",
1811                                                className: "journey-flow-img"
1812                                            }, void 0, false, {
1813                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1814                                                lineNumber: 2220,
1815                                                columnNumber: 15
1816                                            }, this),
1817                                            /*#__PURE__*/ _jsxDEV("span", {
1818                                                children: stayConnectedMeta.title
1819                                            }, void 0, false, {
1820                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1821                                                lineNumber: 2225,
1822                                                columnNumber: 15
1823                                            }, this)
1824                                        ]
1825                                    }, void 0, true, {
1826                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1827                                        lineNumber: 2219,
1828                                        columnNumber: 13
1829                                    }, this),
1830                                    /*#__PURE__*/ _jsxDEV("div", {
1831                                        className: "flow-arrow",
1832                                        children: /*#__PURE__*/ _jsxDEV("img", {
1833                                            src: "/media/misc/Arrow-right.png",
1834                                            alt: "arrow",
1835                                            className: "right-arrow"
1836                                        }, void 0, false, {
1837                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1838                                            lineNumber: 2229,
1839                                            columnNumber: 15
1840                                        }, this)
1841                                    }, void 0, false, {
1842                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1843                                        lineNumber: 2228,
1844                                        columnNumber: 13
1845                                    }, this),
1846                                    /*#__PURE__*/ _jsxDEV("div", {
1847                                        className: "flow-step",
1848                                        children: [
1849                                            /*#__PURE__*/ _jsxDEV("img", {
1850                                                src: "/media/misc/Community.png",
1851                                                alt: "community",
1852                                
1852                className: "journey-flow-img"
1853                                            }, void 0, false, {
1854                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1855                                                lineNumber: 2232,
1856                                                columnNumber: 15
1857                                            }, this),
1858                                            /*#__PURE__*/ _jsxDEV("span", {
1859                                                children: "Community"
1860                                            }, void 0, false, {
1861                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1862                                                lineNumber: 2237,
1863                                                columnNumber: 15
1864                                            }, this)
1865                                        ]
1866                                    }, void 0, true, {
1867                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1868                                        lineNumber: 2231,
1869                                        columnNumber: 13
1870                                    }, this),
1871                                    /*#__PURE__*/ _jsxDEV("div", {
1872                                        className: "flow-arrow",
1873                                        children: /*#__PURE__*/ _jsxDEV("img", {
1874                                            src: "/media/misc/Arrow-right.png",
1875                                            alt: "arrow",
1876                                            className: "right-arrow"
1877                                        }, void 0, false, {
1878                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1879                                            lineNumber: 2241,
1880                                            columnNumber: 15
1881                                        }, this)
1882                                    }, void 0, false, {
1883                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1884                                        lineNumber: 2240,
1885                                        columnNumber: 13
1886                                    }, this),
1887                                    /*#__PURE__*/ _jsxDEV("div", {
1888                                        className: "flow-step success",
1889                                        children: [
1890                                            /*#__PURE__*/ _jsxDEV("img", {
1891                                                src: "/media/misc/success.png",
1892                                                alt: "success",
1893                                                className: "journey-flow-img"
1894                                            }, void 0, false, {
1895                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1896                                                lineNumber: 2244,
1897                                                columnNumber: 15
1898                                            }, this),
1899                                            /*#__PURE__*/ _jsxDEV("span", {
1900                                                children: successMeta.title
1901                                            }, void 0, false, {
1902                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1903                                                lineNumber: 2245,
1904                                                columnNumber: 15
1905                                            }, this)
1906                                        ]
1907                                    }, void 0, true, {
1908                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1909                                        lineNumber: 2243,
1910                                        columnNumber: 13
1911                                    }, this)
1912                                ]
1913                            }, void 0, true, {
1914                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1915                                lineNumber: 2185,
1916                                columnNumber: 11
1917                            }, this),
1918                            /*#__PURE__*/ _jsxDEV(FindProspectsOverview, {
1919                                number: findProspectsMeta.number,
1920                                title: findProspectsMeta.title,
1921                                facebookData: findData,
1922                                otherSocialData: otherSocialData,
1923                                isComplete: isSectionComplete("Find Prospects"),
1924                                message: findProspectsMessage,
1925                                facebookAcceptanceRate: facebookAcceptanceRate,
1926                                otherAcceptanceRate: otherAcceptanceRate,
1927                                onCampaignChange: handleCampaignChange,
1928                                isInitialized: !isInitializingCampaign,
1929                                selectedCampaign: selectedCampaign
1930                            }, void 0, false, {
1931                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1932                                lineNumber: 2249,
1933                                columnNumber: 11
1934                            }, this),
1935                            /*#__PURE__*/ _jsxDEV("div", {
1936                                className: "sections-row",
1937                                children: [
1938                                    /*#__PURE__*/ _jsxDEV("div", {
1939                                        className: "col-md-6",
1940                                        children: [
1941                                            /*#__PURE__*/ _jsxDEV(StartConversationsSection, {
1942                                                number: startConversationsMeta.number,
1943                                                title: startConversationsMeta.title,
1944                                                items: startConversationData,
1945                                                isComplete: isSectionComplete("Start Conversations")
1946                                            }, void 0, false, {
1947                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1948                                                lineNumber: 2265,
1949                                                columnNumber: 15
1950                                            }, this),
1951                                            /*#__PURE__*/ _jsxDEV(ChecklistSection, {
1952                                                number: buildRelationshipsMeta.number,
1953                                                title: buildRelationshipsMeta.title,
1954                                                rows: relationshipD
1954ata,
1955                                                isComplete: isSectionComplete("Build Relationships"),
1956                                                info: "Track your follow-up and reconnections. This is where prospects become customers and referrals."
1957                                            }, void 0, false, {
1958                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1959                                                lineNumber: 2271,
1960                                                columnNumber: 15
1961                                            }, this)
1962                                        ]
1963                                    }, void 0, true, {
1964                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1965                                        lineNumber: 2264,
1966                                        columnNumber: 13
1967                                    }, this),
1968                                    /*#__PURE__*/ _jsxDEV("div", {
1969                                        className: "col-md-6",
1970                                        children: [
1971                                            /*#__PURE__*/ _jsxDEV(ChecklistSection, {
1972                                                number: stayConnectedMeta.number,
1973                                                title: stayConnectedMeta.title,
1974                                                rows: stayConnectedData,
1975                                                isComplete: isSectionComplete("Stay Connected"),
1976                                                info: "Log your daily posts, stories, and engagement. Staying visible keeps you top of mind."
1977                                            }, void 0, false, {
1978                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1979                                                lineNumber: 2281,
1980                                                columnNumber: 15
1981                                            }, this),
1982                                            /*#__PURE__*/ _jsxDEV(ChecklistSection, {
1983                                                number: communityMeta.number,
1984                                                title: communityMeta.title,
1985                                                rows: communityData,
1986                                                className: "accent-red",
1987                                                isComplete: isSectionComplete("Community"),
1988                                                info: "Track your group activity. An active community attracts new customers and keeps existing ones loyal."
1989                                            }, void 0, false, {
1990                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1991                                                lineNumber: 2288,
1992                                                columnNumber: 15
1993                                            }, this)
1994                                        ]
1995                                    }, void 0, true, {
1996                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
1997                                        lineNumber: 2280,
1998                                        columnNumber: 13
1999                                    }, this)
2000                                ]
2001                            }, void 0, true, {
2002                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2003                                lineNumber: 2263,
2004                                columnNumber: 11
2005                            }, this),
2006                            /*#__PURE__*/ _jsxDEV("div", {
2007                                className: "sections-row",
2008                                children: /*#__PURE__*/ _jsxDEV(ChecklistSection, {
2009                                    number: successMeta.number,
2010                                    title: successMeta.title,
2011                                    rows: growthData,
2012                                    className: "accent-blue",
2013                                    isComplete: isSectionComplete("Success"),
2014                                    info: "Log every new customer and referral you earn. This is proof that the system is working."
2015                                }, void 0, false, {
2016                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2017                                    lineNumber: 2300,
2018                                    columnNumber: 13
2019                                }, this)
2020                            }, void 0, false, {
2021                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2022                                lineNumber: 2299,
2023                                columnNumber: 11
2024                            }, this),
2025                            /*#__PURE__*/ _jsxDEV("div", {
2026                                className: "save-section",
2027                                children: [
2028                                    /*#__PURE__*/ _jsxDEV("div", {
2029                                        className: "info-bar",
2030                                        children: [
2031                                            "Enter ",
2032                                            /*#__PURE__*/ _jsxDEV("b", {
2033                                                children: "0"
2034                                            }, void 0, false, {
2035                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2036                                                lineNumber: 2312,
2037                                                columnNumber: 21
2038                                            }, this),
2039                                            " if completed with no outcome. Blank fields do not count as complete."
2040                                        ]
2041                                    }, void 0, true, {
2042                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2043                                        lineNumber: 2311,
2044                                        columnNumber: 13
2045                                    }, this),
2046                                    /*#__PURE__*/ _jsxDEV("div", {
2047                                        className: "save-button-wrapper",
2048                                        children: /*#__PURE__*/ _jsxDEV("button", {
2049                                            className: "save-btn",
2050                                            onClick: handleSaveDailySystem,
2051                                            disabled: saveLoading || !allowOtherPlatformsEdit,
2052                                            children: saveLoading ? "Saving..." : "Save Daily System"
2053                                        }, void 0, false, {
2054                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2055                                            lineNumber: 2315,
2056                                            columnNumber: 15
2057                                        }, this)
2058                                    }, void 0, false, {
2059                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2060                                        lineNumber: 2314,
2061                                        columnNumber: 13
2062                                    }, this)
2063                                ]
2064                            }, void 0, true, {
2065                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2066                                lineNumber: 2310,
2067                                columnNumber: 11
2068                            }, this)
2069                        ]
2070                    }, void 0, true, {
2071                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2072                        lineNumber: 2174,
2073                        columnNumber: 9
2074                    }, this)
2075                ]
2076            }, void 0, true, {
2077                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2078                lineNumber: 2114,
2079                columnNumber: 7
2080            }, this),
2081            showPlanModal && /*#__PURE__*/ _jsxDEV("div", {
2082                className: "upload_overlay",
2083                children: /*#__PURE__*/ _jsxDEV("div", {
2084                    className: "plan-selection-modal d-flex flex-column align-items-center",
2085                    children: [
2086                        trialPeriodExpired ? /*#__PURE__*/ _jsxDEV("h2", {
2087                            children: [
2088                                "Your ",
2089                                TRIAL_PERIOD_DAYS,
2090                                "-Day Onboarding Ended"
2091                            ]
2092                        }, void 0, true, {
2093                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2094                            lineNumber: 2338,
2095                            columnNumber: 15
2096                        }, this) : subscriptionPeriodExpired ? /*#__PURE__*/ _jsxDEV("h2", {
2097                            children: "Your Subscription was Expired"
2098                        }, void 0, false, {
2099                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2100                            lineNumber: 2340,
2101                            columnNumber: 15
2102                        }, this) : /*#__PURE__*/ _jsxDEV("h2", {
2103                            children: "Please Subscribe"
2104                        }, void 0, false, {
2105                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2106                            lineNumber: 2342,
2107                            columnNumber: 15
2108                        }, this),
2109                        /*#__PURE__*/ _jsxDEV("p", {
2110                            className: "cus_p_text",
2111                            children: "Let’s keep meeting new people."
2112                        }, void 0, false, {
2113                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2114                            lineNumber: 2345,
2115                            columnNumber: 13
2116                        }, this),
2117                        /*#__PURE__*/ _jsxDEV("div", {
2118                            className: "row cus_modal_img_btn flex-wrap flex-sm-nowrap",
2119                            children: [
2120                                /*#__PURE__*/ _jsxDEV("div", {
2121                                    className: "col-lg-4 col-md-4 col-sm-12 col-xs-12 modal-image",
2122                                    children: /*#__PURE__*/ _jsxDEV("img", {
2123                                        src: "/media/misc/30daysExpired.png",
2124                                        alt: "Plan Illustration"
2125                                    }, void 0, false, {
2126                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2127                                        lineNumber: 2348,
2128                                        columnNumber: 17
2129                                    }, this)
2130                                }, void 0, false, {
2131                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2132                                    lineNumber: 2347,
2133                                    columnNumber: 15
2134                                }, this),
2135                                /*#__PURE__*/ _jsxDEV("div", {
2136                                    className: "col-lg-8 col-md-8 col-sm-12 col-xs-12 modal-options ms-2 text-center",
2137                                    children: [
2138                                        /*#__PURE__*/ _jsxDEV("button", {
2139                                            onClick: ()=>handlePlanSelect(yearlyPrice),
2140                                            className: "plans_btn  yearly_plan ",
2141                                            children: "Continue at $97/month"
2142                                        }, void 0, false, {
2143                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2144                                            lineNumber: 2352,
2145                                            columnNumber: 17
2146                                        }, this),
2147                                        /*#__PURE__*/ _jsxDEV("div", {
2148                                            children: /*#__PURE__*/ _jsxDEV("p", {
2149                                                children: [
2150                                                    "Just share your results to unlock over 50% off.",
2151                                                    /*#__PURE__*/ _jsxDEV("br", {}, void 0, false, {
2152                                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2153                                                        lineNumber: 2361,
2154                                                        columnNumber: 21
2155                                                    }, this),
2156                                                    "Today only. Not available later."
2157                                                ]
2158                                            }, void 0, true, {
2159                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2160                                                lineNumber: 2359,
2161                                                columnNumber: 19
2162                                            }, this)
2163                                        }, void 0, false, {
2164                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2165                                            lineNumber: 2358,
2166                                            columnNumber: 17
2167                                        }, this),
2168                                        /*#__PURE__*/ _jsxDEV("p", {
2169                                            className: "h1 text-dark fw-bold cus_or_txt_set",
2170                                            children: "OR"
2171                                        }, void 0, false, {
2172                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2173                                            lineNumber: 2366,
2174                                            columnNumber: 17
2175                                        }, this),
2176                                        /*#__PURE__*/ _jsxDEV("button", {
2177                                            onClick: ()=>handlePlanSelect(monthlyPrice),
2178                                            className: "plans_btn  monthly_plan ",
2179                                            children: "$197/month"
2180                                        }, void 0, false, {
2181                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2182                                            lineNumber: 2368,
2183                                            columnNumber: 17
2184                                        }, this),
2185                                        /*#__PURE__*/ _jsxDEV("p", {
2186                                            children: [
2187                                                "No results video",
2188                                                /*#__PURE__*/ _jsxDEV("span", {
2189                                                    className: "question-mark-tag",
2190                                                    children: "?"
2191                                                }, void 0, false, {
2192                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2193                                                    lineNumber: 2375,
2194                                                    columnNumber: 35
2195                                                }, this),
2196                                                /*#__PURE__*/ _jsxDEV("br", {}, void 0, false, {
2197                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2198                                                    lineNumber: 2376,
2199                                                    columnNumber: 19
2200                                                }, this),
2201                                                "No worries, only $197/month."
2202                                            ]
2203                                        }, void 0, true, {
2204                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2205                                            lineNumber: 2374,
2206                                            columnNumber: 17
2207                                        }, this),
2208                                        authorities.includes(systemAuthorities.ALLOW_ONE_TIME_PAYMENT_FEATURE) && /*#__PURE__*/ _jsxDEV("button", {
2209                                            onClick: ()=>handlePlanSelect(liveplan),
2210                                            className: "plans_btn  yearly_plan ",
2211                                            children: "Continue $1/Month"
2212                                        }, void 0, false, {
2213                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2214                                            lineNumber: 2381,
2215                                            columnNumber: 19
2216                                        }, this)
2217                                    ]
2218                                }, void 0, true, {
2219                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2220                                    lineNumber: 2351,
2221                                    columnNumber: 15
2222                                }, this)
2223                            ]
2224                        }, void 0, true, {
2225                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2226                            lineNumber: 2346,
2227                            columnNumber: 13
2228                        }, this)
2229                    ]
2230                }, void 0, true, {
2231                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2232                    lineNumber: 2336,
2233                    columnNumber: 11
2234                }, this)
2235            }, void 0, false, {
2236                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2237                lineNumber: 2335,
2238                columnNumber: 9
2239            }, this),
2240            isOpen && /*#__PURE__*/ _jsxDEV("div", {
2241                className: "upload_overlay",
2242                children: /*#__PURE__*/ _jsxDEV("div", {
2243                    className: "modal_pricing",
2244                    onClick: (e)=>e.stopPropagation(),
2245                    children: /*#__PURE__*/ _jsxDEV("div", {
2246                        className: "cus_modal_content_price_ssf",
2247                        children: [
2248                            /*#__PURE__*/ _jsxDEV("div", {
2249                                className: "ssf-back-icon",
2250                                onClick: ()=>{
2251                                    setIsOpen(false);
2252                                    setShowPlanModal(true);
2253                                    navigate(`/${CUREENT_COMPANY_NAME}/checklist`);
2254                                },
2255                                style: {
2256                                    position: "absolute",
2257                                    top: "18px",
2258                                    left: "18px",
2259                                    fontSize: "18px",
2260                                    fontWeight: "bold",
2261                                    cursor: "pointer",
2262                                    color: "#333",
2263                                    padding: "6px 18px",
2264                                    borderRadius: "6px",
2265                                    background: "#f1f1f1"
2266                                },
2267                                onMouseEnter: (e)=>{
2268                                    e.currentTarget.style.background = "#e2e2e2";
2269                                },
2270                                onMouseLeave: (e)=>{
2271                                    e.currentTarget.style.background = "#f1f1f1";
2272                                },
2273                                children: /*#__PURE__*/ _jsxDEV("i", {
2274                                    className: "fa fa-arrow-left"
2275                                }, void 0, false, {
2276                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2277                                    lineNumber: 2425,
2278                                    columnNumber: 17
2279                                }, this)
2280                            }, void 0, false, {
2281                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2282                                lineNumber: 2399,
2283                                columnNumber: 15
2284                            }, this),
2285                            /*#__PURE__*/ _jsxDEV("div", {
2286                                className: "cus_confirm_txt_head",
2287                                children: "What You Keep + Gain"
2288                            }, void 0, false, {
2289                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2290                                lineNumber: 2428,
2291                                columnNumber: 15
2292                            }, this),
2293                            /*#__PURE__*/ _jsxDEV("div", {
2294                                className: "container",
2295                                children: /*#__PURE__*/ _jsxDEV("div", {
2296                                    className: "row justify-content-center ssf-plans-monthly-card",
2297                                    children: /*#__PURE__*/ _jsxDEV("div", {
2298                                        className: " d-flex justify-content-center",
2299                                        children: /*#__PURE__*/ _jsxDEV(MonthlyInfo, {
2300                                            pricePlan: plan,
2301                                            selectedSubscriptionPlan: selectedSubscriptionPlan,
2302                                            addOrder: true,
2303                                            addClickEvent: true,
2304                                            videoExists: videoExists
2305                                        }, void 0, false, {
2306                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2307                                            lineNumber: 2432,
2308                                            columnNumber: 21
2309                                        }, this)
2310                                    }, void 0, false, {
2311                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2312                                        lineNumber: 2431,
2313                                        columnNumber: 19
2314                                    }, this)
2315                                }, void 0, false, {
2316                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2317                                    lineNumber: 2430,
2318                                    columnNumber: 17
2319                                }, this)
2320                            }, void 0, false, {
2321                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2322                                lineNumber: 2429,
2323                                columnNumber: 15
2324                            }, this)
2325                        ]
2326                    }, void 0, true, {
2327                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2328                        lineNumber: 2397,
2329                        columnNumber: 13
2330                    }, this)
2331                }, void 0, false, {
2332                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2333                    lineNumber: 2396,
2334                    columnNumber: 11
2335                }, this)
2336            }, void 0, false, {
2337                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2338                lineNumber: 2395,
2339                columnNumber: 9
2340            }, this),
2341            showUploadVideo && /*#__PURE__*/ _jsxDEV(UploadVideo, {
2342                selectedPlan: selectedPlan,
2343                selectedSubscriptionPlanDetails: subscriptionPlanDetails,
2344                onOkClick: handleShowStepsPopUp,
2345                onBack: ()=>{
2346                    setShowUploadVideo(false);
2347                    setShowPlanModal(true);
2348                }
2349            }, void 0, false, {
2350                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2351                lineNumber: 2448,
2352                columnNumber: 9
2353            }, this)
2354        ]
2355    }, void 0, true, {
2356        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx",
2357        lineNumber: 2113,
2358        columnNumber: 5
2359    }, this);
2360};
2361_s(ChecklistPage, "srO7gUpCANmrpjNDz1Y5Y7eQXvA=", false, function() {
2362    return [
2363        useNavigate,
2364        useAuth
2365    ];
2366});
2367_c1 = ChecklistPage;
2368export default ChecklistPage;
2369var _c, _c1;
2370$RefreshReg$(_c, "ToggleSwitch");
2371$RefreshReg$(_c1, "ChecklistPage");
2372
2373
2374window.$RefreshReg$ = prevRefreshReg;
2375window.$RefreshSig$ = prevRefreshSig;
2376
2377RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
2378  RefreshRuntime.registerExportsForReactRefresh("/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx", currentExports);
2379  import.meta.hot.accept((nextExports) => {
2380    if (!nextExports) return;
2381    const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/data/sixsigma/six-sigma-ui/src/app/pages/checklist/ChecklistPage.tsx", currentExports, nextExports);
2382    if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
2383  });
2384});
2385
2386//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoZWNrbGlzdFBhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIlxuaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCJcblxuXG5pbXBvcnQge0ZDLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgeyB1c2VOYXZpZ2F0ZSB9IGZyb20gXCJyZWFjdC1yb3V0ZXItZG9tXCJcbmltcG9ydCB7XG4gIENVUkVFTlRfQ09NUEFOWV9OQU1FLFxuICBEQVlfU1RSSU5HLFxuICBDSEVDS19VU0VSX1ZJREVPX0VYSVNULFxuICBHRVRfQ0hFQ0tMSVNULFxuICBHRVRfQUxMX1NVQlNDUklQVElPTlBMQU5TLFxuICBHRVRfQ0FNUEFJR05TX0JZX0NPTVBBTllfVVNFUl9BTkRfRkJfQUNDLFxuICBMSUZFVElNRV9TVFJJTkcsXG4gIExJVkVfUExBTixcbiAgTU9OVEhMWV9QTEFOX1BSSUNFLFxuICBNT05USF9TVFJJTkcsXG4gIFBPU1RfU0FWRV9UQVNLX1ZBTFVFLFxuICBSZWd1bGFyT3B0aW9uLFxuICBzeXN0ZW1BdXRob3JpdGllcyxcbiAgVFJJQUxfUEVSSU9EX0RBWVMsXG4gIFdFRUtfU1RSSU5HLFxuICBZRUFSTFlfUExBTl9QUklDRSxcbiAgWUVBUl9TVFJJTkcsXG59IGZyb20gXCIuLi8uLi9Db25zdGFudHNcIlxuaW1wb3J0IERhdGVSYW5nZVNlbGVjdG9yIGZyb20gXCIuLi9kYXNoYm9hcmQvY29tcG9uZW50cy9EYXRlUmFuZ2VTZWxlY3RvclwiXG5pbXBvcnQge3VzZUF1dGh9IGZyb20gXCIuLi8uLi9tb2R1bGVzL2F1dGhcIlxuaW1wb3J0IHtcbiAgREFURV9GT1JNQVRfTU1NTV9ERF9ZWVlZLFxuICBnZXRVc2VyVGltZVpvbmVCYXNlZEN1cnJlbnREYXRlLFxufSBmcm9tIFwiLi4vLi4vRGF0ZUNvbnN0YW50c1wiXG5pbXBvcnQgRGFpbHlBY3Rpdml0eUxvZywge0FjdGl2aXR5RGF0YSwgSW50ZWdyaXR5RGF5fSBmcm9tIFwiLi9jb21wb25lbnRzL0RhaWx5QWN0aXZpdHlMb2dcIlxuaW1wb3J0IEZpbmRQcm9zcGVjdHNPdmVydmlldyBmcm9tIFwiLi9jb21wb25lbnRzL0ZpbmRQcm9zcGVjdHNPdmVydmlld1wiXG5pbXBvcnQgU3RhcnRDb252ZXJzYXRpb25zU2VjdGlvbiBmcm9tIFwiLi9jb21wb25lbnRzL1N0YXJ0Q29udmVyc2F0aW9uc1NlY3Rpb25cIlxuaW1wb3J0IENoZWNrbGlzdFNlY3Rpb24sIHtTZWN0aW9uUm93fSBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrbGlzdFNlY3Rpb25cIlxuaW1wb3J0IFN1bW1hcnlTZWN0aW9uLCB7UGVyZm9ybWFuY2VEYXRhLCBTbmFwc2hvdEdyb3VwfSBmcm9tIFwiLi9jb21wb25lbnRzL1N1bW1hcnlTZWN0aW9uXCJcbmltcG9ydCB7Q29udGVudH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9sYXlvdXQvY29tcG9uZW50cy9Db250ZW50XCJcbmltcG9ydCB7ZGlzYWJsZVNwbGFzaFNjcmVlbiwgZW5hYmxlU3BsYXNoU2NyZWVufSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vblV0aWxpdGllc1wiXG5pbXBvcnQgeyBnZXRVc2VyQnlUb2tlbiB9IGZyb20gXCIuLi8uLi9tb2R1bGVzL2F1dGgvY29yZS9fcmVxdWVzdHNcIlxuaW1wb3J0IFVwbG9hZFZpZGVvIGZyb20gXCIuLi9wdWJsaWMvY29tcG9uZW50cy9VcGxvYWRWaWRlb1wiXG5pbXBvcnQgTW9udGhseUluZm8gZnJvbSBcIi4uL3B1YmxpYy9jb21wb25lbnRzL01vbnRobHlJbmZvXCJcbmltcG9ydCBcIi4vY3NzL2NoZWNrbGlzdC5jc3NcIlxuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSBcInJlYW
2386N0LWRhdGVwaWNrZXJcIlxuaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbGUgfSBmcm9tIFwicmVhY3QtZGF0ZXBpY2tlclwiO1xuaW1wb3J0IHsgZW5HQiB9IGZyb20gXCJkYXRlLWZucy9sb2NhbGVcIjtcbnJlZ2lzdGVyTG9jYWxlKFwiZW4tR0JcIiwgZW5HQik7XG5cbmV4cG9ydCB0eXBlIENhbXBhaWduRmlsdGVyVHlwZSA9IHtcbiAgc3RhdHVzTmFtZTogUmVndWxhck9wdGlvbltdXG4gIG5hbWVzOiBzdHJpbmdbXVxuICBmcmVxdWVuY3lUeXBlPzogc3RyaW5nXG4gIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbFxuICBlbmREYXRlOiBzdHJpbmcgfCBudWxsXG59IHwgbnVsbFxuXG50eXBlIENoZWNrbGlzdFRhc2tWYWx1ZSA9IHtcbiAgbnVtYmVyVmFsdWU/OiBudW1iZXIgfCBudWxsXG4gIGJvb2xlYW5WYWx1ZT86IGJvb2xlYW5cbn1cblxudHlwZSBDaGVja2xpc3RUYXNrID0ge1xuICBpZDogbnVtYmVyXG4gIHBhcmVudElkPzogbnVtYmVyXG4gIG5hbWU6IHN0cmluZ1xuICBpbnB1dFR5cGU/OiBzdHJpbmdcbiAgZGlzcGxheU9yZGVyPzogbnVtYmVyXG4gIHBsYXRmb3JtSWQ/OiBudW1iZXJcbiAgdmFsdWU/OiBDaGVja2xpc3RUYXNrVmFsdWVcbn1cblxudHlwZSBDaGVja2xpc3RTZWN0aW9uRGF0YSA9IHtcbiAgaWQ6IG51bWJlclxuICBuYW1lOiBzdHJpbmdcbiAgZGlzcGxheU9yZGVyPzogbnVtYmVyXG4gIHRhc2tzPzogQ2hlY2tsaXN0VGFza1tdXG4gIGFsbFRhc2tDb21wbGV0ZWQ/OiBib29sZWFuXG59XG5cbnR5cGUgU21Qcm92aWRlciA9IHtcbiAgaWQ/OiBudW1iZXJcbiAgbmFtZT86IHN0cmluZ1xuICBwbGF0Zm9ybUlkPzogbnVtYmVyXG4gIHNlbnRUYXNrSWQ/OiBudW1iZXJcbiAgYWNjZXB0ZWRUYXNrSWQ/OiBudW1iZXJcbiAgZnJpZW5kUmVxdWVzdFNlbnRUYXNrSWQ/OiBudW1iZXJcbiAgZnJpZW5kUmVxdWVzdEFjY2VwdGVkVGFza0lkPzogbnVtYmVyXG4gIHNlbnQ/OiBudW1iZXIgfCBudWxsXG4gIGFjY2VwdGVkPzogbnVtYmVyIHwgbnVsbFxuICBhY2NlcHRhbmNlUmF0ZT86IG51bWJlclxuICAgIG92ZXJhbGxTZW50PzogbnVtYmVyIHwgbnVsbFxuICBvdmVyYWxsQWNjZXB0ZWQ/OiBudW1iZXIgfCBudWxsXG59XG5cbnR5cGUgU3Vic2NyaXB0aW9uUGxhbkRldGFpbHMgPSB7XG4gIGlkOiBudW1iZXJcbiAgdXVJZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBiaWxsaW5nSW50ZXJ2YWw6IG51bWJlclxuICBiYXNlUHJpY2U6IHN0cmluZ1xuICBzZWxsUHJpY2U6IG51bWJlclxuICBmZWF0dXJlczogc3RyaW5nXG4gIHByb2R1Y3RJZDogc3RyaW5nXG4gIHByaWNlSWQ6IHN0cmluZ1xufVxuXG50eXBlIENoZWNrbGlzdFBheWxvYWQgPSB7XG4gIGlkPzogbnVtYmVyXG4gIGVudHJ5SWQ/OiBudW1iZXJcbiAgZW50cnlfaWQ/OiBudW1iZXJcbiAgYWxsb3dFZGl0PzogYm9vbGVhblxuICB0YXNrQ29tcGxldGVkPzogbnVtYmVyXG4gIHRvdGFsVGFzaz86IG51bWJlclxuICBsZWZ0VGFzaz86IG51bWJlclxuICBjaGFydFRhc2tDb21wbGV0ZWRDb3VudERheT86IG51bWJlclxuICBjaGFydFJlc3BvbnNlPzogQXJyYXk8e1xuICAgIGVudHJ5RGF0ZTogc3RyaW5nXG4gICAgY29tcGxldGVkOiBib29sZWFuXG4gICAgY29tcGxldGVkQ291bnQ/OiBudW1iZXJcbiAgfT5cbiAgc2VjdGlvbnM/OiBDaGVja2xpc3RTZWN0aW9uRGF0YVtdXG4gIHNtUHJvdmlkZXJzPzogU21Qcm92aWRlcltdXG59XG5cbnR5cGUgU2VjdGlvbk1ldGEgPSB7XG4gIG51bWJlcjogbnVtYmVyXG4gIHRpdGxlOiBzdHJpbmdcbn1cblxudHlwZSBDaGVja2xpc3RUYXNrVmFsdWVVcGRhdGUgPSB7XG4gIHRhc2tJZDogbnVtYmVyXG4gIG51bWJlclZhbHVlPzogbnVtYmVyIHwgbnVsbFxuICBib29sZWFuVmFsdWU/OiBib29sZWFuXG59XG5cbnR5cGUgQ2hlY2tsaXN0U2F2ZVBheWxvYWQgPSB7XG4gIGVudHJ5RGF0ZTogc3RyaW5nXG4gIHRpbWV6b25lOiBzdHJpbmdcbiAgdmFsdWVzOiBDaGVja2xpc3RUYXNrVmFsdWVVcGRhdGVbXVxufVxuXG50eXBlIEZpbmRQcm9zcGVjdHNNZXNzYWdlID0ge1xuICB0eXBlOiBcInN1Y2Nlc3NcIiB8IFwiZXJyb3JcIlxuICB0ZXh0OiBzdHJpbmdcbn0gfCBudWxsXG5cbmNvbnN0IGlzT3ZlcmFsbFZhbGlkYXRpb25FcnJvck1lc3NhZ2UgPSAobWVzc2FnZT86IEZpbmRQcm9zcGVjdHNNZXNzYWdlKSA9PlxuICBtZXNzYWdlPy50eXBlID09PSBcImVycm9yXCIgJiZcbiAgbWVzc2FnZS50ZXh0ID09PSBcIk92ZXJhbGwgQWNjZXB0ZWQgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBPdmVyYWxsIFNlbnQuXCJcblxuLy8gVmFsaWRhdGVzIHRoZSBkYXRlLXJhbmdlIGtleSB1c2VkIGJ5IHRoZSBkYXRlIGZpbHRlciBVSS5cbmNvbnN0IGlzVmFsaWRSYW5nZSA9ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT5cbiAgdmFsdWUgPT09IExJRkVUSU1FX1NUUklORyB8fFxuICB2YWx1ZSA9PT0gREFZX1NUUklORyB8fFxuICB2YWx1ZSA9PT0gV0VFS19TVFJJTkcgfHxcbiAgdmFsdWUgPT09IE1PTlRIX1NUUklORyB8fFxuICB2YWx1ZSA9PT0gWUVBUl9TVFJJTkdcblxuY29uc3QgZGVmYXVsdFNlY3Rpb25NZXRhOiBSZWNvcmQ8c3RyaW5nLCBTZWN0aW9uTWV0YT4gPSB7XG4gIFwiRmluZCBQcm9zcGVjdHNcIjoge251bWJlcjogMSwgdGl0bGU6IFwiRmluZCBQcm9zcGVjdHNcIn0sXG4gIFwiU3RhcnQgQ29udmVyc2F0aW9uc1wiOiB7bnVtYmVyOiAyLCB0aXRsZTogXCJTdGFydCBDb252ZXJzYXRpb25zXCJ9LFxuICBcIkJ1aWxkIFJlbGF0aW9uc2hpcHNcIjoge251bWJlcjogMywgdGl0bGU6IFwiQnVpbGQgUmVsYXRpb25zaGlwc1wifSxcbiAgXCJTdGF5IENvbm5lY3RlZFwiOiB7bnVtYmVyOiA0LCB0aXRsZTogXCJTdGF5IENvbm5lY3RlZFwifSxcbiAgQ29tbXVuaXR5OiB7bnVtYmVyOiA1LCB0aXRsZTogXCJDb21tdW5pdHlcIn0sXG4gIFN1Y2Nlc3M6IHtudW1iZXI6IDYsIHRpdGxlOiBcIlN1Y2Nlc3NcIn0sXG59XG5cbi8vIFJlc29sdmVzIHRoZSBkaXNwbGF5IG9yZGVyL3RpdGxlIGZvciBhIHNlY3Rpb24sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0cy5cbmNvbnN0IGdldFNlY3Rpb25NZXRhID0gKHNlY3Rpb24/OiBDaGVja2xpc3RTZWN0aW9uRGF0YSwgZmFsbGJhY2tOYW1lPzogc3RyaW5nKTogU2VjdGlvbk1ldGEgPT4ge1xuICBjb25zdCBmYWxsYmFjayA9IGZhbGxiYWNrTmFtZSA/IGRlZmF1bHRTZWN0aW9uTWV0YVtmYWxsYmFja05hbWVdIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IHNlY3Rpb24/LmRpc3BsYXlPcmRlciA/PyBmYWxsYmFjaz8ubnVtYmVyID8/IDAsXG4gICAgdGl0bGU6IHNlY3Rpb24/Lm5hbWUgPz8gZmFsbGJhY2s
2386/LnRpdGxlID8/IFwiXCIsXG4gIH1cbn1cblxuLy8gU2FmZWx5IHBpY2tzIGEgcHJvdmlkZXIgaWQgKHBsYXRmb3JtSWQgcHJlZmVycmVkKS5cbmNvbnN0IGdldFByb3ZpZGVyUGxhdGZvcm1JZCA9IChwcm92aWRlcj86IFNtUHJvdmlkZXIgfCBudWxsKSA9PiBwcm92aWRlcj8ucGxhdGZvcm1JZCA/PyBwcm92aWRlcj8uaWRcblxuLy8gRGV0ZWN0cyB3aGV0aGVyIHRoZSBwcm92aWRlciByZXByZXNlbnRzIEZhY2Vib29rLlxuY29uc3QgaXNGYWNlYm9va1Byb3ZpZGVyID0gKHByb3ZpZGVyPzogU21Qcm92aWRlciB8IG51bGwpID0+XG4gIHByb3ZpZGVyPy5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiZmFjZWJvb2tcIikgPz8gZmFsc2VcblxuLy8gUGlja3MgdGhlIHByaW1hcnkgKEZhY2Vib29rKSBhbmQgc2Vjb25kYXJ5IHByb3ZpZGVycyBmb3IgdGhlIFVJLlxuY29uc3QgcmVzb2x2ZVNvY2lhbFByb3ZpZGVycyA9IChwcm92aWRlcnM6IFNtUHJvdmlkZXJbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IGZhY2Vib29rUHJvdmlkZXIgPVxuICAgIHByb3ZpZGVycy5maW5kKChwcm92aWRlcikgPT4gaXNGYWNlYm9va1Byb3ZpZGVyKHByb3ZpZGVyKSkgPz8gcHJvdmlkZXJzWzBdXG4gIGNvbnN0IG90aGVyUHJvdmlkZXIgPVxuICAgIHByb3ZpZGVycy5maW5kKChwcm92aWRlcikgPT4gcHJvdmlkZXIgIT09IGZhY2Vib29rUHJvdmlkZXIgJiYgIWlzRmFjZWJvb2tQcm92aWRlcihwcm92aWRlcikpID8/XG4gICAgcHJvdmlkZXJzLmZpbmQoKHByb3ZpZGVyKSA9PiBwcm92aWRlciAhPT0gZmFjZWJvb2tQcm92aWRlcilcblxuICByZXR1cm4ge2ZhY2Vib29rUHJvdmlkZXIsIG90aGVyUHJvdmlkZXJ9XG59XG5cblxuLy8gQnVpbGRzIHRoZSBMaWZldGltZSBDb252ZXJzaW9uIFJhdGUgc3VtbWFyeSBjYXJkIHJvdy5cbmNvbnN0IGdldExpZmV0aW1lQ29udmVyc2lvblJhdGVDYXJkID0gKHNlY3Rpb25zOiBDaGVja2xpc3RTZWN0aW9uRGF0YVtdID0gW10pID0+IHtcbiAgY29uc3QgdG90YWxTZWN0aW9ucyA9IHNlY3Rpb25zLmxlbmd0aCB8fCA2XG4gIGNvbnN0IGNvbXBsZXRlZFNlY3Rpb25zID0gc2VjdGlvbnMuZmlsdGVyKChzZWN0aW9uKSA9PiBzZWN0aW9uLmFsbFRhc2tDb21wbGV0ZWQpLmxlbmd0aFxuICBjb25zdCBwZXJjZW50YWdlID0gdG90YWxTZWN0aW9ucyA+IDAgPyBNYXRoLnJvdW5kKChjb21wbGV0ZWRTZWN0aW9ucyAvIHRvdGFsU2VjdGlvbnMpICogMTAwKSA6IDBcblxuICBjb25zb2xlLmxvZyhcbiAgICBcIkxpZmV0aW1lIENvbnZlcnNpb24gUmF0ZSBzZWN0aW9uIGNvbXBsZXRpb24gc3RhdGVzOlwiLFxuICAgIHNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4gKHtcbiAgICAgIGlkOiBzZWN0aW9uLmlkLFxuICAgICAgbmFtZTogc2VjdGlvbi5uYW1lLFxuICAgICAgYWxsVGFza0NvbXBsZXRlZDogISFzZWN0aW9uLmFsbFRhc2tDb21wbGV0ZWQsXG4gICAgfSkpXG4gIClcbiAgY29uc29sZS5sb2coXCJMaWZldGltZSBDb252ZXJzaW9uIFJhdGUgY2FsY3VsYXRpb246XCIsIHtcbiAgICBmb3JtdWxhOiBgKCR7Y29tcGxldGVkU2VjdGlvbnN9IC8gJHt0b3RhbFNlY3Rpb25zfSkgKiAxMDBgLFxuICAgIGNvbXBsZXRlZFNlY3Rpb25zLFxuICAgIHRvdGFsU2VjdGlvbnMsXG4gICAgcmF3UGVyY2VudGFnZTogdG90YWxTZWN0aW9ucyA+IDAgPyAoY29tcGxldGVkU2VjdGlvbnMgLyB0b3RhbFNlY3Rpb25zKSAqIDEwMCA6IDAsXG4gICAgcm91bmRlZFBlcmNlbnRhZ2U6IHBlcmNlbnRhZ2UsXG4gIH0pXG5cbiAgbGV0IGNsYXNzTmFtZSA9IFwibGlmZXRpbWUtY29udmVyc2lvbi1yYXRlIGxpZmV0aW1lLXJhdGUtcmVkXCJcblxuIGlmIChwZXJjZW50YWdlID4gMjApIHtcbiAgY2xhc3NOYW1lID0gXCJsaWZldGltZS1jb252ZXJzaW9uLXJhdGUgbGlmZXRpbWUtcmF0ZS1ibHVlXCI7XG59IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPj0gMTAgJiYgcGVyY2VudGFnZSA8PSAyMCkge1xuICBjbGFzc05hbWUgPSBcImxpZmV0aW1lLWNvbnZlcnNpb24tcmF0ZSBsaWZldGltZS1yYXRlLW9yYW5nZVwiO1xufVxuXG4gIHJldHVybiB7XG4gICAgbGFiZWw6IFwiTGlmZXRpbWUgQ29udmVyc2lvbiBSYXRlXCIsXG4gICAgdmFsdWU6IGAke2NvbXBsZXRlZFNlY3Rpb25zfSBpbiAke3RvdGFsU2VjdGlvbnN9ICgke3BlcmNlbnRhZ2V9JSlgLFxuICAgIGNsYXNzTmFtZSxcbiAgfVxufVxuXG4vLyBDb21wdXRlcyBjb252ZXJzaW9uLXJhdGUgc3RhdHMgYW5kIFVJIHRvbmUgZm9yIHRoZSBTdWNjZXNzIHNlY3Rpb24uXG5jb25zdCBnZXRMaWZldGltZUNvbnZlcnNpb25SYXRlRGF0YSA9IChzZWN0aW9uczogQ2hlY2tsaXN0U2VjdGlvbkRhdGFbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IHRvdGFsU2VjdGlvbnMgPSBzZWN0aW9ucy5sZW5ndGggfHwgNlxuICBjb25zdCBjb21wbGV0ZWRTZWN0aW9ucyA9IHNlY3Rpb25zLmZpbHRlcigoc2VjdGlvbikgPT4gc2VjdGlvbi5hbGxUYXNrQ29tcGxldGVkKS5sZW5ndGhcbiAgY29uc3QgcGVyY2VudGFnZSA9IHRvdGFsU2VjdGlvbnMgPiAwID8gTWF0aC5yb3VuZCgoY29tcGxldGVkU2VjdGlvbnMgLyB0b3RhbFNlY3Rpb25zKSAqIDEwMCkgOiAwXG5cbiAgbGV0IHRvbmVDbGFzc05hbWUgPSBcImxpZmV0aW1lLXJhdGUtcmVkXCJcbiAgbGV0IGJhZGdlVGV4dCA9IFwiU3RheSBjb25zaXN0ZW50LiBLZWVwIGdvaW5nLlwiXG5cbiAgaWYgKHBlcmNlbnRhZ2UgPiAyMCkge1xuICAgIHRvbmVDbGFzc05hbWUgPSBcImxpZmV0aW1lLXJhdGUtYmx1ZVwiXG4gICAgYmFkZ2VUZXh0ID0gXCJZb3UgZGlkIGl0LiAxIGluIDUuXCJcbiAgfSBlbHNlIGlmIChwZXJjZW50YWdlID49IDEwICYmIHBlcmNlbnRhZ2UgPD0gMjApIHtcbiAgICB0b25lQ2xhc3NOYW1lID0gXCJsaWZldGltZS1yYXRlLW9yYW5nZVwiXG4gICAgYmFkZ2VUZXh0ID0gXCJBbG1vc3QgdGhlcmUuIEtlZXAgZ29pbmcuXCJcbiAgfVxuXG4gIGNvbnNvbGUubG9nKFwic3VjY2Vzcy1jb252ZXJzaW9uLXBlcmNlbnQ6XCIsIHtcbiAgICBjb21wbGV0ZWRTZWN0aW9ucyxcbiAgICB0b3RhbFNlY3Rpb25zLFxuICAgIHBlcmNlbnRhZ2UsXG4gICAgdG9uZUNsYXNzTmFtZSxcbiAgfSlcblxuICByZXR1cm4ge1xuICAgIGNvbXBsZXRlZFNlY3Rpb25zLFxuICAgIHRvdGFsU2VjdGlvbnMsXG4gICAgcGVyY2VudGFnZSxcbiAgICB0b25lQ2xhc3NOYW1lLFxuICAgIGJhZGdlVGV4dCxcbiAgfVxufVxuXG4vLyBCdWlsZHMgaW5pdGlhbCB0b2dnbGUgc3RhdGUgZnJvbSBBUEkgcGF5bG9hZC5cbmNvbnN0IGdldEluaXRpYWxUb2dnbGVWYWx1ZXMgPSAoc2VjdGlvbnM6IENoZWNrbGlzdFNlY3Rpb25EYXRhW10gPSBbXSkgPT5cbiAgc2VjdGlvbnMucmVkdWNlPFJlY29yZDxudW1iZXIsIGJvb2xlYW4+PigoYWNjLCBzZWN0aW9uKSA9PiB7XG4gICAgOyhzZWN0aW9uLnRhc2tzID8/IFtdKS5mb3JFYWNoKCh0YXNrKSA9PiB7XG4gICAgICBpZiAodGFzay5pbnB1dFR5cGUgPT09IFwiVE9HR0xFXCIpIHtcbiAgICAgICAgYWNjW3Rhc2suaWRdID0gISF0YXNrLnZhbHVlPy5ib29sZWFuVmFsdWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSlcblxuLy8gTm9ybWFsaXplcyBpbnB1dCB2YWx1ZXMgc28gd2Ugc3RvcmUgYm9vbGVhbnMvbnVtYmVycyBjb25zaXN0ZW50bHkuXG5jb25zdCBub3JtYWxpem
2386VDaGVja2xpc3RWYWx1ZSA9ICh2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBjb25zdCB0cmltbWVkVmFsdWUgPSB2YWx1ZS50cmltKClcblxuICBpZiAodHJpbW1lZFZhbHVlID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih0cmltbWVkVmFsdWUpXG5cbiAgcmV0dXJuIE51bWJlci5pc05hTihudW1lcmljVmFsdWUpID8gdHJpbW1lZFZhbHVlIDogbnVtZXJpY1ZhbHVlXG59XG5cbi8vIEZvcm1hdHMgYSBkYXRlL3RpbWUgZm9yIHNhdmluZyBjaGVja2xpc3QgZW50cmllcy5cbmNvbnN0IGZvcm1hdENoZWNrbGlzdEVudHJ5RGF0ZSA9IChkYXRlOiBEYXRlKSA9PiB7XG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKClcbiAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgXCIwXCIpXG4gIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgXCIwXCIpXG4gIGNvbnN0IGhvdXJzID0gU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgXCIwXCIpXG4gIGNvbnN0IG1pbnV0ZXMgPSBTdHJpbmcoZGF0ZS5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsIFwiMFwiKVxuXG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gJHtob3Vyc306JHttaW51dGVzfWBcbn1cblxuLy8gRm9ybWF0cyBhIGRhdGUgZm9yIGZpbHRlcmluZyAoMDA6MDAgdGltZSkuXG5jb25zdCBmb3JtYXRDaGVja2xpc3RGaWx0ZXJEYXRlID0gKGRhdGU6IERhdGUpID0+IHtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCBcIjBcIilcbiAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCBcIjBcIilcblxuICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9IDAwOjAwYFxufVxuXG5jb25zdCBwYXJzZUZpbHRlckRhdGUgPSAodmFsdWU/OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiBudWxsXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS5yZXBsYWNlKFwiIFwiLCBcIlRcIilcbiAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUobm9ybWFsaXplZClcbiAgcmV0dXJuIE51bWJlci5pc05hTihwYXJzZWQuZ2V0VGltZSgpKSA/IG51bGwgOiBwYXJzZWRcbn1cblxuY29uc3QgZm9ybWF0U2hvcnREYXRlID0gKGRhdGU6IERhdGUpID0+XG4gIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tVVNcIiwge21vbnRoOiBcInNob3J0XCIsIGRheTogXCIyLWRpZ2l0XCIsIHllYXI6IFwibnVtZXJpY1wifSkuZm9ybWF0KGRhdGUpXG5cbmNvbnN0IGZvcm1hdE1vbnRoWWVhciA9IChkYXRlOiBEYXRlKSA9PlxuICBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuLVVTXCIsIHttb250aDogXCJsb25nXCIsIHllYXI6IFwibnVtZXJpY1wifSkuZm9ybWF0KGRhdGUpXG5cbmNvbnN0IGdldFdlZWtSYW5nZUxhYmVsID0gKGRhdGU6IERhdGUpID0+IHtcbiAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXkoKVxuXG4gIC8vIOKchSBDb252ZXJ0IFN1bmRheSgwKSDihpIgNiwgTW9uZGF5KDEpIOKGkiAwLCAuLi5cbiAgY29uc3QgZGlmZiA9IGRheSA9PT0gMCA/IC02IDogMSAtIGRheVxuXG4gIGNvbnN0IHdlZWtTdGFydCA9IG5ldyBEYXRlKGRhdGUpXG4gIHdlZWtTdGFydC5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZilcblxuICBjb25zdCB3ZWVrRW5kID0gbmV3IERhdGUod2Vla1N0YXJ0KVxuICB3ZWVrRW5kLnNldERhdGUod2Vla1N0YXJ0LmdldERhdGUoKSArIDYpXG5cbiAgY29uc3Qgc2FtZU1vbnRoID0gd2Vla1N0YXJ0LmdldE1vbnRoKCkgPT09IHdlZWtFbmQuZ2V0TW9udGgoKVxuICBjb25zdCBzYW1lWWVhciA9IHdlZWtTdGFydC5nZXRGdWxsWWVhcigpID09PSB3ZWVrRW5kLmdldEZ1bGxZZWFyKClcblxuICBpZiAoc2FtZU1vbnRoICYmIHNhbWVZZWFyKSB7XG4gICAgY29uc3QgbW9udGggPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuLVVTXCIsIHsgbW9udGg6IFwic2hvcnRcIiB9KS5mb3JtYXQod2Vla1N0YXJ0KVxuICAgIGNvbnN0IHN0YXJ0RGF5ID0gU3RyaW5nKHdlZWtTdGFydC5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsIFwiMFwiKVxuICAgIGNvbnN0IGVuZERheSA9IFN0cmluZyh3ZWVrRW5kLmdldERhdGUoKSkucGFkU3RhcnQoMiwgXCIwXCIpXG4gICAgcmV0dXJuIGAke21vbnRofSAke3N0YXJ0RGF5fSDigJMgJHtlbmREYXl9LCAke3dlZWtTdGFydC5nZXRGdWxsWWVhcigpfWBcbiAgfVxuXG4gIHJldHVybiBgJHtmb3JtYXRTaG9ydERhdGUod2Vla1N0YXJ0KX0g4oCTICR7Zm9ybWF0U2hvcnREYXRlKHdlZWtFbmQpfWBcbn1cbmNvbnN0IGJ1aWxkQWN0aXZpdHlIZWFkZXJMYWJlbCA9IChcbiAgc2VsZWN0ZWRSYW5nZTogc3RyaW5nIHwgbnVsbCxcbiAgc2VsZWN0ZWREYXRlOiBEYXRlLFxuICBmaWx0ZXI6IENhbXBhaWduRmlsdGVyVHlwZSB8IG51bGxcbikgPT4ge1xuICBjb25zdCBoYXNBZHZhbmNlZERhdGVGaWx0ZXIgPSAhIWZpbHRlcj8uc3RhcnREYXRlICYmICEhZmlsdGVyPy5lbmREYXRlXG4gIGNvbnN0IGZyb21EYXRlID0gcGFyc2VGaWx0ZXJEYXRlKGZpbHRlcj8uc3RhcnREYXRlKVxuICBjb25zdCB0b0RhdGUgPSBwYXJzZUZpbHRlckRhdGUoZmlsdGVyPy5lbmREYXRlKVxuXG4gIGlmIChoYXNBZHZhbmNlZERhdGVGaWx0ZXIgJiYgZnJvbURhdGUgJiYgdG9EYXRlKSB7XG4gICAgaWYgKGZyb21EYXRlLnRvRGF0ZVN0cmluZygpID09PSB0b0RhdGUudG9EYXRlU3RyaW5nKCkpIHtcbiAgICAgIHJldHVybiBgV2Vla2x5IEFjdGl2aXR5IExvZyAtICR7Zm9ybWF0U2hvcnREYXRlKGZyb21EYXRlKX1gXG4gICAgfVxuICAgIHJldHVybiBgV2Vla2x5IEFjdGl2aXR5IExvZyAtICR7Zm9ybWF0U2hvcnREYXRlKGZyb21EYXRlKX0g4oCTICR7Zm9ybWF0U2hvcnREYXRlKHRvRGF0ZSl9YFxuICB9XG5cbiAgaWYgKHNlbGVjdGVkUmFuZ2UgPT09IFdFRUtfU1RSSU5HKSB7XG4gICAgcmV0dXJuIGBXZWVrbHkgQWN0aXZpdHkgTG9nIC0gJHtnZXRXZWVrUmFuZ2VMYWJlbChzZWxlY3RlZERhdGUpfWBcbiAgfVxuXG4gIGlmIChzZWxlY3RlZFJhbmdlID09PSBNT05USF9TVFJJTkcpIHtcbiAgICByZXR1cm4gYE1vbnRobHkgQWN0aXZpdHkgTG9nIC0gJHtmb3JtYXRNb250aFllYXIoc2VsZWN0ZWREYXRlKX1gXG4gIH1cblxuICBpZiAoc2VsZWN0ZWRSYW5nZSA9PT0gWUVBUl9TVFJJTkcpIHtcbiAgICByZXR1cm4gYFllYXJseSBBY3Rpdml0eSBMb2cgLSAke3NlbGVjdGVkRGF0ZS
23865nZXRGdWxsWWVhcigpfWBcbiAgfVxuXG4gIGlmIChzZWxlY3RlZFJhbmdlID09PSBMSUZFVElNRV9TVFJJTkcpIHtcbiAgICByZXR1cm4gYExpZmV0aW1lIEFjdGl2aXR5IFN1bW1hcnkgIGBcbiAgfVxuXG4gIHJldHVybiBgRGFpbHkgQWN0aXZpdHkgTG9nIC0gJHtmb3JtYXRTaG9ydERhdGUoc2VsZWN0ZWREYXRlKX1gXG59XG5cbi8vIENvbnZlcnRzIGEgVUkgdmFsdWUgaW50byB0aGUgQVBJIHNhdmUgcGF5bG9hZCBzaGFwZS5cbmNvbnN0IGJ1aWxkVGFza1ZhbHVlVXBkYXRlID0gKFxuICB0YXNrSWQ6IG51bWJlcixcbiAgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW5cbik6IENoZWNrbGlzdFRhc2tWYWx1ZVVwZGF0ZSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZUNoZWNrbGlzdFZhbHVlKHZhbHVlKVxuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZFZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrSWQsXG4gICAgICBib29sZWFuVmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZSxcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRWYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrSWQsXG4gICAgICBudW1iZXJWYWx1ZTogbm9ybWFsaXplZFZhbHVlLFxuICAgIH1cbiAgfVxuXG4gIGlmIChub3JtYWxpemVkVmFsdWUgPT09IFwiXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkLFxuICAgICAgbnVtYmVyVmFsdWU6IG51bGwsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGFyc2VkTnVtYmVyVmFsdWUgPSBOdW1iZXIobm9ybWFsaXplZFZhbHVlKVxuXG4gIHJldHVybiB7XG4gICAgdGFza0lkLFxuICAgIG51bWJlclZhbHVlOiBOdW1iZXIuaXNOYU4ocGFyc2VkTnVtYmVyVmFsdWUpID8gbnVsbCA6IHBhcnNlZE51bWJlclZhbHVlLFxuICB9XG59XG5cbi8vIEVuc3VyZXMgYmxhbmsgZmllbGRzIHJlbmRlciBhcyBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiBudWxsL3VuZGVmaW5lZC5cbmNvbnN0IGdldERpc3BsYXlOdW1iZXJWYWx1ZSA9ICh2YWx1ZT86IG51bWJlciB8IG51bGwpID0+ICh2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlKVxuXG4vLyBTYWZlbHkgZXh0cmFjdHMgdGhlIGNoZWNrbGlzdCBlbnRyeSBpZCBmcm9tIGFueSBBUEkgc2hhcGUuXG5jb25zdCByZXNvbHZlQ2hlY2tsaXN0RW50cnlJZCA9IChwYXlsb2FkPzogQ2hlY2tsaXN0UGF5bG9hZCB8IG51bGwpID0+IHtcbiAgaWYgKCFwYXlsb2FkKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZUlkcyA9IFtwYXlsb2FkLmlkLCBwYXlsb2FkLmVudHJ5SWQsIHBheWxvYWQuZW50cnlfaWRdXG5cbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlSWRzKSB7XG4gICAgaWYgKHR5cGVvZiBjYW5kaWRhdGUgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKGNhbmRpZGF0ZSkgJiYgY2FuZGlkYXRlID4gMCkge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8vIEdldHMgdGhlIFwic2VudC9hY2NlcHRlZFwiIHRhc2sgaWQgZm9yIGEgcHJvdmlkZXIuXG5jb25zdCBnZXRQcm92aWRlclRhc2tJZCA9IChcbiAgcHJvdmlkZXI6IFNtUHJvdmlkZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBraW5kOiBcInNlbnRcIiB8IFwiYWNjZXB0ZWRcIlxuKSA9PiB7XG4gIGlmICghcHJvdmlkZXIpIHJldHVybiB1bmRlZmluZWRcblxuICBpZiAoa2luZCA9PT0gXCJzZW50XCIpIHtcbiAgICByZXR1cm4gcHJvdmlkZXIuc2VudFRhc2tJZCA/PyBwcm92aWRlci5mcmllbmRSZXF1ZXN0U2VudFRhc2tJZFxuICB9XG5cbiAgcmV0dXJuIHByb3ZpZGVyLmFjY2VwdGVkVGFza0lkID8/IHByb3ZpZGVyLmZyaWVuZFJlcXVlc3RBY2NlcHRlZFRhc2tJZFxufVxuXG4vLyBDYWxjdWxhdGVzIGFjY2VwdGFuY2UgcmF0ZSB3aXRoIDAtZ3VhcmQuXG5jb25zdCBjYWxjdWxhdGVMaWZldGltZUFjY2VwdGFuY2VSYXRlID0gKHByb3ZpZGVyPzogU21Qcm92aWRlciB8IG51bGwpOiBudW1iZXIgPT4ge1xuICBjb25zdCBvdmVyYWxsU2VudCA9IHByb3ZpZGVyPy5vdmVyYWxsU2VudCA/PyAwO1xuICBjb25zdCBvdmVyYWxsQWNjZXB0ZWQgPSBwcm92aWRlcj8ub3ZlcmFsbEFjY2VwdGVkID8/IDA7XG5cbiAgY29uc29sZS5sb2coXCJTbVByb3ZpZGVyIGlzIFwiLCBwcm92aWRlcj8ubmFtZSk7XG4gIGNvbnNvbGUubG9nKFwib3ZlcmFsbFNlbnQgQEBAIDpcIiwgb3ZlcmFsbFNlbnQpO1xuICBjb25zb2xlLmxvZyhcIm92ZXJhbGxBY2NlcHRlZDogQEBcIiwgb3ZlcmFsbEFjY2VwdGVkKTtcblxuICBpZiAocHJvdmlkZXI/Lm5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJmYWNlYm9va1wiKSkge1xuICAgIHJldHVybiBwcm92aWRlci5hY2NlcHRhbmNlUmF0ZSA/PyAwO1xuICB9XG5cbiAgLy8g4pyFIE9ubHkgZml4OiBoYW5kbGUgMC8wIGZvciBPdGhlciBQbGF0Zm9ybXNcbiAgaWYgKFxuICAgIHByb3ZpZGVyPy5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwib3RoZXJcIikgJiZcbiAgICBvdmVyYWxsU2VudCA9PT0gMCAmJlxuICAgIG92ZXJhbGxBY2NlcHRlZCA9PT0gMFxuICApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnJvdW5kKChvdmVyYWxsQWNjZXB0ZWQgLyBvdmVyYWxsU2VudCkgKiAxMDApO1xufTtcblxuLy8g4pyFIE1haW4gZnVuY3Rpb24gKHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGgpXG5jb25zdCBnZXRMaWZldGltZUFjY2VwdGFuY2VSYXRlID0gKFxuICBwcm92aWRlcj86IFNtUHJvdmlkZXIgfCBudWxsXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBpc0ZhY2Vib29rID1cbiAgICBwcm92aWRlcj8ubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImZhY2Vib29rXCIpO1xuXG4gIC8vIOKchSBGb3IgRmFjZWJvb2sg4oaSIFNUUklDVExZIHVzZSBBUEkgKG5vIGNhbGN1bGF0aW9uIGZhbGxiYWNrKVxuICBpZiAoaXNGYWNlYm9vaykge1xuICAgIHJldHVybiBwcm92aWRlcj8uYWNjZXB0YW5jZVJhdGUgPz8gMDtcbiAgfVxuXG4gIC8vIOKchSBPdGhlcnMg4oaSIGNhbGN1bGF0ZWRcbiAgcmV0dXJuIGNhbGN1bGF0ZUxpZmV0aW1lQWNjZXB0YW5jZVJhdGUocHJvdmlkZXIpO1xufTtcblxuLy8g4pyFIExvZ2dpbmcgd3JhcHBlciAob25seSBmb3IgZGVidWcsIG5vIGxvZ2ljIGluc2lkZSlcbmNvbnN0IGxvZ0xpZmV0aW1lQWNjZXB0YW5jZVJhdGUgPSAoXG4gIHNlY3Rpb25OYW1lOiBzdHJpbmcsXG4gIHByb3ZpZGVyTGFiZWw6IHN0cmluZyxcbiAgcHJvdmlkZXI/OiBTbVByb3ZpZGVyIHwgbnVsbFxuKSA9PiB7XG4gIGNvbnN0IHNlbnQgPSBwcm92aWRlcj8uc2VudCA/PyAwO1xuICBjb25zdCBhY2NlcHRlZCA9IHByb3ZpZGVyPy5hY2NlcHRlZCA/PyAwO1xuXG4gIGNvbnN0IGlzRmFjZWJvb2sgPVxuICAgIHByb3ZpZGVyPy5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiZmFjZWJvb2tcIik7XG5cbiAgY29uc3QgYWNjZXB0YW5jZVJhdGUgPSBnZXRMaWZldGltZUFjY2VwdGFuY2VSYXRl
2386KHByb3ZpZGVyKTtcblxuICBjb25zb2xlLmxvZyhgJHtzZWN0aW9uTmFtZX0gTGlmZXRpbWUgQWNjZXB0YW5jZSBSYXRlYCwge1xuICAgIHByb3ZpZGVyOiBwcm92aWRlckxhYmVsLFxuICAgIHNvdXJjZTogaXNGYWNlYm9vayA/IFwiQVBJXCIgOiBcIkNBTENVTEFURURcIixcbiAgICBzZW50LFxuICAgIGFjY2VwdGVkLFxuICAgIGFwaVZhbHVlOiBwcm92aWRlcj8uYWNjZXB0YW5jZVJhdGUsXG4gICAgYWNjZXB0YW5jZVJhdGUsXG4gIH0pO1xuXG4gIHJldHVybiBhY2NlcHRhbmNlUmF0ZTtcbn07XG4vLyBGbGF0dGVucyBuZXN0ZWQgdGFzayB0cmVlIGludG8gcm93cyBmb3IgQ2hlY2tsaXN0U2VjdGlvbiByZW5kZXJpbmcuXG5jb25zdCBtYXBUYXNrc1RvUm93cyA9IChcbiAgdGFza3M6IENoZWNrbGlzdFRhc2tbXSA9IFtdLFxuICBvbkF1dG9zYXZlPzogKFxuICAgIHRhc2tJZDogbnVtYmVyLFxuICAgIHBsYXRmb3JtSWQ6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbixcbiAgICBwcm92aWRlck5hbWU/OiBzdHJpbmdcbiAgKSA9PiB2b2lkLFxuICB0b2dnbGVWYWx1ZXM6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge30sXG4gIGFsbG93RWRpdCA9IGZhbHNlXG4pOiBTZWN0aW9uUm93W10gPT4ge1xuICBjb25zdCBjaGlsZHJlbkJ5UGFyZW50ID0gbmV3IE1hcDxudW1iZXIsIENoZWNrbGlzdFRhc2tbXT4oKVxuICBjb25zdCByb290VGFza3M6IENoZWNrbGlzdFRhc2tbXSA9IFtdXG5cbiAgdGFza3MuZm9yRWFjaCgodGFzaykgPT4ge1xuICAgIGlmICh0YXNrLnBhcmVudElkID09IG51bGwpIHtcbiAgICAgIHJvb3RUYXNrcy5wdXNoKHRhc2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaWJsaW5ncyA9IGNoaWxkcmVuQnlQYXJlbnQuZ2V0KHRhc2sucGFyZW50SWQpID8/IFtdXG4gICAgc2libGluZ3MucHVzaCh0YXNrKVxuICAgIGNoaWxkcmVuQnlQYXJlbnQuc2V0KHRhc2sucGFyZW50SWQsIHNpYmxpbmdzKVxuICB9KVxuXG4gIC8vIFNvcnRzIHRhc2tzIGJ5IGRpc3BsYXlPcmRlciBmb3Igc3RhYmxlIFVJIG9yZGVyaW5nLlxuICBjb25zdCBzb3J0VGFza3MgPSAoaXRlbXM6IENoZWNrbGlzdFRhc2tbXSkgPT5cbiAgICBbLi4uaXRlbXNdLnNvcnQoKGEsIGIpID0+IChhLmRpc3BsYXlPcmRlciA/PyAwKSAtIChiLmRpc3BsYXlPcmRlciA/PyAwKSlcblxuICAvLyBGbGF0dGVucyBuZXN0ZWQgdGFza3MgaW50byByb3dzIHdpdGggaW5kZW50IGxldmVscy5cbiAgY29uc3QgZmxhdHRlblRhc2tzID0gKGl0ZW1zOiBDaGVja2xpc3RUYXNrW10sIGRlcHRoID0gMCk6IFNlY3Rpb25Sb3dbXSA9PlxuICAgIHNvcnRUYXNrcyhpdGVtcykuZmxhdE1hcCgodGFzaykgPT4ge1xuICAgICAgY29uc3QgY2hpbGRSb3dzID0gZmxhdHRlblRhc2tzKGNoaWxkcmVuQnlQYXJlbnQuZ2V0KHRhc2suaWQpID8/IFtdLCBkZXB0aCArIDEpXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdElucHV0ID0gdHlwZW9mIHRhc2suaW5wdXRUeXBlID09PSBcInN0cmluZ1wiICYmIHRhc2suaW5wdXRUeXBlLmxlbmd0aCA+IDBcblxuICAgICAgaWYgKCFoYXNFeHBsaWNpdElucHV0KSB7XG4gICAgICAgIHJldHVybiBbe2xhYmVsOiB0YXNrLm5hbWUsIHZhbHVlOiBcIlwiLCBpc0dyb3VwTGFiZWw6IHRydWUsIGluZGVudExldmVsOiBkZXB0aH0sIC4uLmNoaWxkUm93c11cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0YXNrLm5hbWUsXG4gICAgICAgICAgYWxsb3dFZGl0LFxuICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgdGFzay5pbnB1dFR5cGUgPT09IFwiVE9HR0xFXCIgPyAoXG4gICAgICAgICAgICAgIDxUb2dnbGVTd2l0Y2hcbiAgICAgICAgICAgICAgICBjaGVja2VkPXt0b2dnbGVWYWx1ZXNbdGFzay5pZF0gPz8gISF0YXNrLnZhbHVlPy5ib29sZWFuVmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e1xuICAgICAgICAgICAgICAgICAgYWxsb3dFZGl0ID8gKGNoZWNrZWQpID0+IG9uQXV0b3NhdmU/Lih0YXNrLmlkLCB0YXNrLnBsYXRmb3JtSWQsIGNoZWNrZWQpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFsbG93RWRpdD17YWxsb3dFZGl0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgZ2V0RGlzcGxheU51bWJlclZhbHVlKHRhc2sudmFsdWU/Lm51bWJlclZhbHVlKSA/PyB0YXNrLnZhbHVlPy5ib29sZWFuVmFsdWUgPz8gXCJcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBpbmRlbnRMZXZlbDogZGVwdGgsXG4gICAgICAgICAgb25WYWx1ZUNvbW1pdDpcbiAgICAgICAgICAgIHRhc2suaW5wdXRUeXBlID09PSBcIlRPR0dMRVwiXG4gICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIDogYWxsb3dFZGl0XG4gICAgICAgICAgICAgICAgPyAodmFsdWUpID0+IG9uQXV0b3NhdmU/Lih0YXNrLmlkLCB0YXNrLnBsYXRmb3JtSWQsIHZhbHVlKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICAuLi5jaGlsZFJvd3MsXG4gICAgICBdXG4gICAgfSlcblxuICByZXR1cm4gZmxhdHRlblRhc2tzKHJvb3RUYXNrcylcbn1cblxuLy8gTWFwcyBwcm92aWRlciBtZXRyaWNzIHRvIHJvd3MsIGluY2x1ZGluZyB2YWxpZGF0aW9uIGFuZCBhdXRvc2F2ZSBjYWxsYmFja3MuXG5jb25zdCBtYXBQcm92aWRlclRvUm93cyA9IChcbiAgcHJvdmlkZXI/OiBTbVByb3ZpZGVyIHwgbnVsbCxcbiAgb25BdXRvc2F2ZT86IChcbiAgICB0YXNrSWQ6IG51bWJlcixcbiAgICBwbGF0Zm9ybUlkOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4sXG4gICAgcHJvdmlkZXJOYW1lPzogc3RyaW5nXG4gICkgPT4gdm9pZCxcbiAgb3B0aW9ucz86IHtcbiAgICBlbXB0eU1pc3NpbmdWYWx1ZXM/OiBib29sZWFuXG4gICAgaXNFZGl0YWJsZT86IGJvb2xlYW5cbiAgICBzZW50VGFza0lkPzogbnVtYmVyXG4gICAgYWNjZXB0ZWRUYXNrSWQ/OiBudW1iZXJcbiAgICBzZW50VmFsdWVPdmVycmlkZT86IG51bWJlciB8IG51bGxcbiAgICBhY2NlcHRlZFZhbHVlT3ZlcnJpZGU/OiBudW1iZXIgfCBudWxsXG4gICAgdHJlYXRaZXJvQXNFbXB0eT86IGJvb2xlYW5cbiAgICBvbk1lc3NhZ2U/OiAobWVzc2FnZToge3R5cGU6IFwic3VjY2Vzc1wiIHwgXCJlcnJvclwiOyB0ZXh0OiBzdHJpbmd9IHwgbnVsbCkgPT4gdm9pZFxuICB9XG4pID0+IHtcbiAgaWYgKCFwcm92aWRlcikgcmV0dXJuIFtdXG5cbiAgY29uc3QgY2FsY3VsYXRlZEFjY2VwdGFuY2VSYXRlID0gY2FsY3VsYXRlTGlmZXRpbWVBY2NlcHRhbmNlUmF0ZShwcm92aWRlcilcbiAgY29uc3QgbGlmZXRpbWVBY2NlcHRhbmNlVG9uZUNsYXNzID1cbiAgICBjYWxjdWxhdGVkQWNjZXB0YW5jZVJhdGUgPiAyOVxuICAgICAgPyBcImxpZmV0aW1lLXJhdGUtYmx1ZVwiXG4gICAgICA6IGNhbGN1bGF0ZWRBY2NlcHRhbmNlUmF0ZSA+PSAyMCAmJiBjYWxjdWxhdGVkQWNjZXB0YW5jZVJhdGUgPD0gMjlcbiAgICAgICAgPyBcImxpZmV0aW1lLXJhdGUtb3JhbmdlXCJcbiAgICAgICAgOiBcImxpZmV0aW1lLXJhdGUteWVsbG93XCJcbiAgICAgICAgXG5cbiAgY29uc3QgcGxhdGZvcm1JZCA9IGdldFByb3ZpZGVyUGxhdGZvcm1JZChwcm92aWRlcilcbiAgY29uc3Qgc2VudFRhc2tJZCA9IGdldFByb3ZpZGVyVGFza0lkKHByb3ZpZGVyLCBcInNlbnRcIikgPz8gb3B0aW9ucz8uc2VudFRhc2tJZFxuICBjb25zdCBhY2NlcHRlZFRhc2tJZCA9IGdldFByb3ZpZGVyVGFza0lkKHByb3ZpZGVyLCBcImFjY2VwdGVkXCIpID8/IG9wdGlvbnM/LmFjY2VwdGVkVGFza0lkXG4gIGNvbnNvbGUubG9nKFwiPT09PT0gbWFwUHJvdmlkZXJUb1Jvd3MgREVCVUcgPT09PT1cIik7XG5cbiAgY29uc29sZS5sb2coXCJlbXB0eU1pc3NpbmdWYWx1ZXM6XCIsIG9wdGlvbnM/LmVtcHR5TWlzc2luZ1ZhbHVlcyk7XG4gIGNvbnNvbGUubG9nKFwiaXNFZGl0YWJsZTpcIiwgb3B0aW9ucz8uaXNFZGl0YWJsZSk7XG4gIGNvbnNvbGUubG9nKFwicHJvdmlkZXI6XCIsIHByb3ZpZGVyKTtcblxuICBcbmNvbnN0IHJlc29sdmVkU2VudFZhbHVlID1cbiAgb3B0aW9ucz8uc2VudFZhbHVlT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxuICAgID8gb3B0aW9ucy5zZW50VmFsdWVPdmVycmlkZVxuICAgIDogcHJvdmlkZXIuc2VudFxuXG5jb25zdCByZXNvbHZlZEFjY2VwdGVkVmFsdWUgPVxuICBvcHRpb25zPy5hY2NlcHRlZFZhbHVlT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxuICAgID8gb3B0aW9ucy5hY2NlcHRlZFZhbHVlT3ZlcnJpZGVcbiAgICA6IHByb3ZpZGVyLmFjY2VwdGVkXG5cbi8vIOKchSBGSU5BTCBESVNQTEFZIFZBTFVFU1xuY29uc3Qgc2VudFZhbHVlID1cbiAgcmVzb2x2ZWRTZW50VmFsdWUgPT09IG51bGwgfHwgcmVzb2x2ZWRTZW50VmFsdWUgPT09IHVuZGVmaW5lZFxuICAgID8gXCJcIlxuICAgIDogcmVzb2x2ZWRTZW50VmFsdWVcblxuY29uc3QgYWNjZXB0ZWRWYWx1ZSA9XG4gIHJlc29sdmVkQWNjZXB0ZWRWYWx1ZSA9PT0gbnVsbCB8fCByZXNvbHZlZEFjY2VwdGVkVmFsdWUgPT09IHVuZGVmaW5lZFxuICAgID8gXCJcIlxuICAgIDogcmVzb2x2ZWRBY2NlcHRlZFZhbHVlXG5cbiAgY29uc3QgaXNPdGhlclBsYXRmb3Jtc1Byb3ZpZGVyID1cbiAgICBwcm92aWRlci5uYW1lPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gXCJvdGhlciBwbGF0Zm9ybXNcIlxuXG4gIC8vIE5vcm1hbGl6ZXMgcHJvdmlkZXIgbnVtZXJpYyB2YWx1ZXMgZm9yIHNhdmUvdXBkYXRlIG9wZXJhdGlvbnMuXG4gIGNvbnN0IG5vcm1hbGl6ZVByb3ZpZGVyRmllbGRWYWx1ZSA9IChmaWVsZFZhbHVlOiBzdHJpbmcgfCBib29sZWFuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRWYWx1ZSA9IGZpZWxkVmFsdWUud
2386HJpbSgpXG4gICAgaWYgKHRyaW1tZWRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IE51bWJlcih0cmltbWVkVmFsdWUpXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihwYXJzZWRWYWx1ZSkgPyBudWxsIDogcGFyc2VkVmFsdWVcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlT3ZlcmFsbENvbnN0cmFpbnQgPSAoXG4gICAgbmV4dFZhbHVlOiBzdHJpbmcsXG4gICAgZmllbGQ6IFwic2VudFwiIHwgXCJhY2NlcHRlZFwiXG4gICk6IHtpc1ZhbGlkOiBib29sZWFuOyBwYXJzZWRWYWx1ZTogbnVtYmVyIHwgbnVsbH0gPT4ge1xuICAgIGlmICghaXNPdGhlclBsYXRmb3Jtc1Byb3ZpZGVyKSB7XG4gICAgICByZXR1cm4ge2lzVmFsaWQ6IHRydWUsIHBhcnNlZFZhbHVlOiBub3JtYWxpemVQcm92aWRlckZpZWxkVmFsdWUobmV4dFZhbHVlKX1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWROZXh0VmFsdWUgPSBub3JtYWxpemVQcm92aWRlckZpZWxkVmFsdWUobmV4dFZhbHVlKVxuICAgIGlmIChuZXh0VmFsdWUudHJpbSgpICE9PSBcIlwiICYmIHBhcnNlZE5leHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge2lzVmFsaWQ6IGZhbHNlLCBwYXJzZWRWYWx1ZTogbnVsbH1cbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2VudFZhbHVlID0gdHlwZW9mIHJlc29sdmVkU2VudFZhbHVlID09PSBcIm51bWJlclwiID8gcmVzb2x2ZWRTZW50VmFsdWUgOiBudWxsXG4gICAgY29uc3QgY3VycmVudEFjY2VwdGVkVmFsdWUgPVxuICAgICAgdHlwZW9mIHJlc29sdmVkQWNjZXB0ZWRWYWx1ZSA9PT0gXCJudW1iZXJcIiA/IHJlc29sdmVkQWNjZXB0ZWRWYWx1ZSA6IG51bGxcblxuICAgIGNvbnN0IG5leHRTZW50VmFsdWUgPSBmaWVsZCA9PT0gXCJzZW50XCIgPyBwYXJzZWROZXh0VmFsdWUgOiBjdXJyZW50U2VudFZhbHVlXG4gICAgY29uc3QgbmV4dEFjY2VwdGVkVmFsdWUgPSBmaWVsZCA9PT0gXCJhY2NlcHRlZFwiID8gcGFyc2VkTmV4dFZhbHVlIDogY3VycmVudEFjY2VwdGVkVmFsdWVcblxuICAgIGNvbnN0IGJhc2VPdmVyYWxsU2VudCA9IHR5cGVvZiBwcm92aWRlci5vdmVyYWxsU2VudCA9PT0gXCJudW1iZXJcIiA/IHByb3ZpZGVyLm92ZXJhbGxTZW50IDogMFxuICAgIGNvbnN0IGJhc2VPdmVyYWxsQWNjZXB0ZWQgPVxuICAgICAgdHlwZW9mIHByb3ZpZGVyLm92ZXJhbGxBY2NlcHRlZCA9PT0gXCJudW1iZXJcIiA/IHByb3ZpZGVyLm92ZXJhbGxBY2NlcHRlZCA6IDBcblxuICAgIC8vIG92ZXJhbGxTZW50L292ZXJhbGxBY2NlcHRlZCBhbHJlYWR5IGluY2x1ZGUgdG9kYXkncyBzYXZlZCB2YWx1ZXMsXG4gICAgLy8gc28gc3VidHJhY3QgdG9kYXkncyBvcmlnaW5hbCB0byBhdm9pZCBkb3VibGUtY291bnRpbmcgdGhlIG5ldyBpbnB1dC5cbiAgICBjb25zdCBvcmlnaW5hbERheVNlbnQgPSB0eXBlb2YgcHJvdmlkZXIuc2VudCA9PT0gXCJudW1iZXJcIiA/IHByb3ZpZGVyLnNlbnQgOiAwXG4gICAgY29uc3Qgb3JpZ2luYWxEYXlBY2NlcHRlZCA9IHR5cGVvZiBwcm92aWRlci5hY2NlcHRlZCA9PT0gXCJudW1iZXJcIiA/IHByb3ZpZGVyLmFjY2VwdGVkIDogMFxuXG4gICAgY29uc3QgdG90YWxTZW50ID0gKGJhc2VPdmVyYWxsU2VudCAtIG9yaWdpbmFsRGF5U2VudCkgKyAobmV4dFNlbnRWYWx1ZSA/PyAwKVxuICAgIGNvbnN0IHRvdGFsQWNjZXB0ZWQgPSAoYmFzZU92ZXJhbGxBY2NlcHRlZCAtIG9yaWdpbmFsRGF5QWNjZXB0ZWQpICsgKG5leHRBY2NlcHRlZFZhbHVlID8/IDApXG5cbiAgICBpZiAodG90YWxBY2NlcHRlZCA+IHRvdGFsU2VudCkge1xuICBvcHRpb25zPy5vbk1lc3NhZ2U/Lih7XG4gICAgdHlwZTogXCJlcnJvclwiLFxuICAgIHRleHQ6IGBPdmVyYWxsIEFjY2VwdGVkICgke2Jhc2VPdmVyYWxsQWNjZXB0ZWR9KSBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE92ZXJhbGwgU2VudCAoJHtiYXNlT3ZlcmFsbFNlbnR9KS5gLFxuICB9KVxuXG4gIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBwYXJzZWRWYWx1ZTogcGFyc2VkTmV4dFZhbHVlIH1cbn1cblxuICAgIHJldHVybiB7aXNWYWxpZDogdHJ1ZSwgcGFyc2VkVmFsdWU6IHBhcnNlZE5leHRWYWx1ZX1cbiAgfVxuXG4gIHJldHVybiBbXG57XG4gIGxhYmVsOiBcIkZyaWVuZCBSZXF1ZXN0ICYgTWVzc2FnZSBTZW50XCIsXG4gIHZhbHVlOiBzZW50VmFsdWUsXG4gIGFsbG93RWRpdDogISFvcHRpb25zPy5pc0VkaXRhYmxlLFxuICB2YWxpZGF0ZU5leHRWYWx1ZTogKG5leHRWYWx1ZSkgPT4gdmFsaWRhdGVPdmVyYWxsQ29uc3RyYWludChuZXh0VmFsdWUsIFwic2VudFwiKS5pc1ZhbGlkLFxuICBvblZhbHVlQ29tbWl0OlxuICAgIG9wdGlvbnM/LmlzRWRpdGFibGUgIT09IGZhbHNlICYmIHNlbnRUYXNrSWRcbiAgICAgID8gYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlT3ZlcmFsbENvbnN0cmFpbnQodmFsdWUsIFwic2VudFwiKVxuICAgICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVQcm92aWRlckZpZWxkVmFsdWUodmFsdWUpXG5cbiAgICAgICAgICBvcHRpb25zPy5vbk1lc3NhZ2U/Lih7XG4gICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIHRleHQ6IGBGcmllbmQgUmVxdWVzdCAmIE1lc3NhZ2UgU2VudCBoYXMgYmVlbiBjaGFuZ2VkIHRvICR7XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9PSBudWxsID8gXCJlbXB0eVwiIDogbm9ybWFsaXplZFZhbHVlXG4gICAgICAgICAgICB9LmAsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGF3YWl0IG9uQXV0b3NhdmU/LihzZW50VGFza0lkLCBwbGF0Zm9ybUlkLCB2YWx1ZSwgcHJvdmlkZXI/Lm5hbWUpXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkLFxufSxcbiAgICB7XG4gICAgICBsYWJlbDogXCJBY2NlcHRlZFwiLFxuICAgICAgdmFsdWU6IGFjY2VwdGVkVmFsdWUsXG4gICAgICBhbGxvd0VkaXQ6ICEhb3B0aW9ucz8uaXNFZGl0YWJsZSxcbiAgICAgIG9uVmFsdWVDaGFuZ2U6IChuZXh0VmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlT3ZlcmFsbENvbnN0cmFpbnQobmV4dFZhbHVlLCBcImFjY2VwdGVkXCIpXG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgI
2386H1cbiAgICAgIH0sXG4gICAgICB2YWxpZGF0ZU5leHRWYWx1ZTogKG5leHRWYWx1ZSkgPT4gdmFsaWRhdGVPdmVyYWxsQ29uc3RyYWludChuZXh0VmFsdWUsIFwiYWNjZXB0ZWRcIikuaXNWYWxpZCxcbiAgICAgIG9uVmFsdWVDb21taXQ6XG4gICAgICAgICAgb3B0aW9ucz8uaXNFZGl0YWJsZSAhPT0gZmFsc2UgJiYgYWNjZXB0ZWRUYXNrSWRcbiAgICAgICAgICAgID8gYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlT3ZlcmFsbENvbnN0cmFpbnQodmFsdWUsIFwiYWNjZXB0ZWRcIilcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplUHJvdmlkZXJGaWVsZFZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgICAgIG9wdGlvbnM/Lm9uTWVzc2FnZT8uKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgdGV4dDogYEFjY2VwdGVkIGhhcyBiZWVuIGNoYW5nZWQgdG8gJHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlID09IG51bGwgPyBcImVtcHR5XCIgOiBub3JtYWxpemVkVmFsdWVcbiAgICAgICAgICAgICAgICAgIH0uYCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWNjZXB0ZWQgaGFzIGJlZW4gY2hhbmdlZFwiLCB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogbm9ybWFsaXplZFZhbHVlLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgb25BdXRvc2F2ZT8uKGFjY2VwdGVkVGFza0lkLCBwbGF0Zm9ybUlkLCB2YWx1ZSwgcHJvdmlkZXI/Lm5hbWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiTGlmZXRpbWUgQWNjZXB0YW5jZSBSYXRlXCIsXG4gICAgICB2YWx1ZTogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhdGUtY2VsbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmF0ZS1wZXJjZW50XCI+e2dldExpZmV0aW1lQWNjZXB0YW5jZVJhdGUocHJvdmlkZXIpfSU8L2Rpdj5cbiAgICAgICAgICB7LyogPGRpdiBjbGFzc05hbWU9XCJyYXRlLXN1YnRleHRcIj57YWNjZXB0ZWRWYWx1ZX0gb3V0IG9mIHtzZW50VmFsdWV9IGFjY2VwdGVkPC9kaXY+ICovfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudCA9IGdldExpZmV0aW1lQWNjZXB0YW5jZVJhdGUocHJvdmlkZXIpXG4gICAgICAgICAgICBjb25zdCBpc2JsdWUgPSBwZXJjZW50ID4gMjlcbiAgICAgICAgICAgIGNvbnN0IGlzT3JhbmdlID0gcGVyY2VudCA+PSAyMCAmJiBwZXJjZW50IDw9IDI5XG5cbiAgICAgICAgICAgIGNvbnN0IGJnQ29sb3IgPSBpc2JsdWUgPyBcIiNGRkZGRkYzM1wiIDogaXNPcmFuZ2UgPyBcIiNGRkZGRkYzM1wiIDogXCIjRkZGRkZGMzNcIlxuICAgICAgICAgICAgY29uc3QgYmFkZ2VUZXh0ID0gaXNibHVlXG4gICAgICAgICAgICAgID8gXCJZb3UncmUgcGVyZm9ybWluZyBpbiB0aGUgdG9wIDElLlwiXG4gICAgICAgICAgICAgIDogaXNPcmFuZ2VcbiAgICAgICAgICAgICAgICA/IFwiWW91J3JlIHJpZ2h0IHdoZXJlIHlvdSBuZWVkIHRvIGJlLlwiXG4gICAgICAgICAgICAgICAgOiBcIllvdXIgbGlzdCBvciBtZXNzYWdlcyBuZWVkIGEgcmVmcmVzaC5cIlxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhdGUtbXNnXCIgc3R5bGU9e3sgYmFja2dyb3VuZDogYmdDb2xvciB9fT5cbiAgICAgICAgICAgICAgICB7YmFkZ2VUZXh0fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSgpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICksXG4gICAgICB2YWx1ZUNsYXNzTmFtZTogXCJyYXRlLWNlbGxcIixcbiAgICAgIGl0ZW1DbGFzc05hbWU6IGxpZmV0aW1lQWNjZXB0YW5jZVRvbmVDbGFzcyxcbiAgICB9LFxuICBdIGFzIFNlY3Rpb25Sb3dbXVxufVxuXG4vLyBHZW5lcmF0ZXMgdGhlIGNvbnZlcnNpb24tcmF0ZSByb3cgZm9yIHRoZSBTdWNjZXNzIHNlY3Rpb24uXG5jb25zdCBjcmVhdGVTdWNjZXNzQ29udmVyc2lvblJvdyA9IChcbiAgbGFiZWwgPSBcIkNvbnZlcnNpb24gUmF0ZVwiLFxuICBjb252ZXJzaW9uUmF0ZSA9IDAsXG4gIGNvbnZlcnRlZENvdW50ID0gMCxcbiAgdG90YWxDb3VudCA9IDYsXG4gIHRvbmVDbGFzc05hbWUgPSBcImxpZmV0aW1lLXJhdGUtcmVkXCIsXG4gIGJhZGdlVGV4dCA9IFwieW91J3JlIENvbnZlcnRpbmdcIlxuKTogU2VjdGlvblJvdyA9PiAoe1xuICBsYWJlbCxcbiAgdmFsdWU6IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInN1Y2Nlc3MtY29udmVyc2lvbi1jb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN1Y2Nlc3MtY29udmVyc2lvbi1wZXJjZW50XCI+e2NvbnZlcnNpb25SYXRlfSU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VjY2Vzcy1jb252ZXJzaW9uLXN1YnRleHRcIj57Y29udmVydGVkQ291bnR9IG91dCBvZiB7dG90YWxDb3VudH0gY29udmVydGVkPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YHN1Y2Nlc3MtY29udmVyc2lvbi1iYWRnZSAke3RvbmVDbGFzc05hbWV9YH0+e2JhZGdlVGV4dH08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKSxcbiAgaXRlbUNsYXNzTmFtZTogYHN1Y2Nlc3MtY29udmVyc2lvbi1pdGVtICR7dG9uZUNsYXNzTmFtZX1gLFxuICB2YWx1ZUNsYXNzTmFtZTogXCJzdWNjZXNzLWNvbnZlcnNpb24tY29udHJvbFwiLFxufSlcblxuLy8gQnVpbGRzIFN1Y2Nlc3Mgc2VjdGlvbiByb3dzLCBpbnNlcnRpbmcgY29udmVyc2lvbi1yYXRlIGNhcmQgd2hlcmUgbmVlZGVkLlxuY29uc3QgbWFwU3VjY2Vzc1RvUm93cyA9IChcbiAgc2VjdGlvbnM6IENoZWNrbGlzdFNlY3Rpb25EYXRhW10gPSBbXSxcbiAgdGFza3M6IENoZWNrbGlzdFRhc2tbXSA9IFtdLFxuICBvbkF1dG9zYXZlPzogKFxuICAgIHRhc2tJZDogbnVtYmVyLFxuICAgIHBsYXRmb3JtSWQ6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbixcbiAgICBwcm92aWRlck5hbWU/OiBzdHJpbmdcbiAgKSA9PiB2b2lkLFxuICB0b2dnbGVWYWx1ZXM6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge30sXG4gIGFsbG93RWRpdCA9IGZhbHNlXG4pID0+IHtcbiAgY29uc3Qgc29ydGVkVGFza3MgPSBbLi4udGFza3NdLnNvcnQoKGEsIGIpID0+IChhLmRpc3BsYXlPcmRlciA/PyAwKSAtIChiLmRpc3BsYXlPcmRlciA/PyAwKSlcbiAgY29uc3QgaGFzQ29udmVyc2lvblRhc2sgPSBzb3J0ZWRUYXNrcy5zb21lKCh0YXNrKSA9PiB0YXNrLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImNvbnZlcnNpb25cIikpXG4gIGNvbnN0IGxpZmV0aW1lQ29udmVyc2lvblJhdGUgPSBnZXRMaWZldGltZUNvbnZlcnNpb25SYXRlRGF0YShzZWN0aW9ucylcblxuICBjb25zdCByb3dzID0gc29ydGVkVGFza3MubWFwKCh0YXNrKSA9PiB7XG4gICAgY29uc3QgaXNDb252ZXJzaW9uVGFzayA9IHRhc2submFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29udmVyc2lvblwiKVxuXG4gICAgaWYgKGlzQ29udmVyc2lvblRhc2spIHtcbiAgICAgIHJldHVybi
2386BjcmVhdGVTdWNjZXNzQ29udmVyc2lvblJvdyhcbiAgICAgICAgdGFzay5uYW1lLFxuICAgICAgICBsaWZldGltZUNvbnZlcnNpb25SYXRlLnBlcmNlbnRhZ2UsXG4gICAgICAgIGxpZmV0aW1lQ29udmVyc2lvblJhdGUuY29tcGxldGVkU2VjdGlvbnMsXG4gICAgICAgIGxpZmV0aW1lQ29udmVyc2lvblJhdGUudG90YWxTZWN0aW9ucyxcbiAgICAgICAgbGlmZXRpbWVDb252ZXJzaW9uUmF0ZS50b25lQ2xhc3NOYW1lLFxuICAgICAgICBsaWZldGltZUNvbnZlcnNpb25SYXRlLmJhZGdlVGV4dFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogdGFzay5uYW1lLFxuICAgICAgYWxsb3dFZGl0LFxuICAgICAgdmFsdWU6XG4gICAgICAgIHRhc2suaW5wdXRUeXBlID09PSBcIlRPR0dMRVwiID8gKFxuICAgICAgICAgIDxUb2dnbGVTd2l0Y2hcbiAgICAgICAgICAgIGNoZWNrZWQ9e3RvZ2dsZVZhbHVlc1t0YXNrLmlkXSA/PyAhIXRhc2sudmFsdWU/LmJvb2xlYW5WYWx1ZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtcbiAgICAgICAgICAgICAgYWxsb3dFZGl0ID8gKGNoZWNrZWQpID0+IG9uQXV0b3NhdmU/Lih0YXNrLmlkLCB0YXNrLnBsYXRmb3JtSWQsIGNoZWNrZWQpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGxvd0VkaXQ9e2FsbG93RWRpdH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGdldERpc3BsYXlOdW1iZXJWYWx1ZSh0YXNrLnZhbHVlPy5udW1iZXJWYWx1ZSlcbiAgICAgICAgKSxcbiAgICAgIGl0ZW1DbGFzc05hbWU6IFwic3VjY2Vzcy1tZXRyaWMtaXRlbVwiLFxuICAgICAgdmFsdWVDbGFzc05hbWU6IFwic3VjY2Vzcy1tZXRyaWMtY29udHJvbFwiLFxuICAgICAgaW5wdXRDbGFzc05hbWU6IHRhc2suaW5wdXRUeXBlID09PSBcIlRPR0dMRVwiID8gdW5kZWZpbmVkIDogXCJzdWNjZXNzLXN0YXQtYm94XCIsXG4gICAgICBvblZhbHVlQ29tbWl0OlxuICAgICAgICB0YXNrLmlucHV0VHlwZSA9PT0gXCJUT0dHTEVcIlxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBhbGxvd0VkaXRcbiAgICAgICAgICAgID8gKHZhbHVlKSA9PiBvbkF1dG9zYXZlPy4odGFzay5pZCwgdGFzay5wbGF0Zm9ybUlkLCB2YWx1ZSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0gYXMgU2VjdGlvblJvd1xuICB9KVxuXG4gIGlmICghaGFzQ29udmVyc2lvblRhc2spIHtcbiAgICByb3dzLnB1c2goXG4gICAgICBjcmVhdGVTdWNjZXNzQ29udmVyc2lvblJvdyhcbiAgICAgICAgXCJMaWZldGltZSBDb252ZXJzaW9uIFJhdGVcIixcbiAgICAgICAgbGlmZXRpbWVDb252ZXJzaW9uUmF0ZS5wZXJjZW50YWdlLFxuICAgICAgICBsaWZldGltZUNvbnZlcnNpb25SYXRlLmNvbXBsZXRlZFNlY3Rpb25zLFxuICAgICAgICBsaWZldGltZUNvbnZlcnNpb25SYXRlLnRvdGFsU2VjdGlvbnMsXG4gICAgICAgIGxpZmV0aW1lQ29udmVyc2lvblJhdGUudG9uZUNsYXNzTmFtZSxcbiAgICAgICAgbGlmZXRpbWVDb252ZXJzaW9uUmF0ZS5iYWRnZVRleHRcbiAgICAgIClcbiAgICApXG4gIH1cblxuICByZXR1cm4gcm93c1xufVxuXG4vLyBNYXBzIGNoYXJ0IHJlc3BvbnNlIGludG8gdGhlIGxhc3QtMzAtZGF5cyBpbnRlZ3JpdHkgbGlzdC5cbmNvbnN0IG1hcENoYXJ0VG9JbnRlZ3JpdHlEYXlzID0gKFxuICBjaGFydFJlc3BvbnNlOiBDaGVja2xpc3RQYXlsb2FkW1wiY2hhcnRSZXNwb25zZVwiXSA9IFtdXG4pOiBJbnRlZ3JpdHlEYXlbXSA9PiB7XG4gIGNvbnNvbGUubG9nKFwibWFwQ2hhcnRUb0ludGVncml0eURheXMgaW5wdXQgY2hhcnRSZXNwb25zZTpcIiwgY2hhcnRSZXNwb25zZSlcblxuICBjb25zdCBtYXBwZWRJbnRlZ3JpdHlEYXlzID0gWy4uLmNoYXJ0UmVzcG9uc2VdXG4gICAgLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGEuZW50cnlEYXRlKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiLmVudHJ5RGF0ZSkuZ2V0VGltZSgpKVxuICAgIC5zbGljZSgtMzApXG4gICAgLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGRhdGU6IGl0ZW0uZW50cnlEYXRlLFxuICAgICAgY29tcGxldGVkOiAhIWl0ZW0uY29tcGxldGVkLFxuICAgICAgY29tcGxldGVkQ291bnQ6IGl0ZW0uY29tcGxldGVkQ291bnQgPz8gMCxcbiAgICB9KSlcblxuICBjb25zb2xlLmxvZyhcIm1hcENoYXJ0VG9JbnRlZ3JpdHlEYXlzIG91dHB1dCBJbnRlZ3JpdHlEYXlbXTpcIiwgbWFwcGVkSW50ZWdyaXR5RGF5cylcblxuICByZXR1cm4gbWFwcGVkSW50ZWdyaXR5RGF5c1xufVxuXG4vLyBTaW1wbGUgdG9nZ2xlIGNvbXBvbmVudCB1c2VkIGluIGNoZWNrbGlzdCByb3dzLlxuY29uc3QgVG9nZ2xlU3dpdGNoOiBSZWFjdC5GQzx7XG4gIGNoZWNrZWQ/OiBib29sZWFuXG4gIG9uQ2hhbmdlPzogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWRcbiAgYWxsb3dFZGl0PzogYm9vbGVhblxufT4gPSAoe2NoZWNrZWQgPSBmYWxzZSwgb25DaGFuZ2UsIGFsbG93RWRpdCA9IGZhbHNlfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbCAgY2xhc3NOYW1lPXtgdG9nZ2xlLXN3aXRjaCAke2FsbG93RWRpdH1gLnRyaW0oKX0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9eyFhbGxvd0VkaXR9XG4gICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25DaGFuZ2U/LihlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgcmVhZE9ubHk9eyFvbkNoYW5nZX1cbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0b2dnbGUtc2xpZGVyXCI+PC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIClcbn1cblxuLy8gTWFpbiBDaGVja2xpc3QgcGFnZSBjb21wb25lbnQ6IGNvb3JkaW5hdGVzIGRhdGEgZmV0Y2gsIHN0YXRlLCBhbmQgcmVuZGVyaW5nLlxuY29uc3QgQ2hlY2tsaXN0UGFnZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKVxuICBjb25zdCB7Y3VycmVudFVzZXIsIHNldEN1cnJlbnRVc2VyLCBhdXRofSA9IHVzZUF1dGgoKVxuICBjb25zdCBhdXRob3JpdGllcyA9IGN1cnJlbnRVc2VyPy5jb21wYW5pZXM/LlswXT8uYXV0aG9yaXRpZXMgPz8gW11cbiBcbiAgY29uc3QgW3NlbGVjdGVkUmFuZ2UsIHNldFNlbGVjdGVkUmFuZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4oREFZX1NUUklORylcbiAgY29uc3QgW2ZpbHRlciwgc2V0RmlsdGVyXSA9IHVzZVN0YXRlPENhbXBhaWduRmlsdGVyVHlwZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZShuZXcgRGF0ZSgpKVxuICBjb25zdCBbaXNDdXN0b21EYXRlRmlsdGVyQWN0aXZlLCBzZXRJc0N1c3RvbURhdGVGaWx0ZXJBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc0RhdGVQaWNrZXJPcGVuLCBzZXRJc0RhdGVQaWNrZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBkYXRlUGlja2VyUmVmID0gdXNlUmVmPGFueT4obnVsbClcblxuICBjb25zdCBbYWN0aXZpdHksIHNldEFjdGl2aXR5XSA9IHVzZVN0YXRlPEFjdGl2aXR5RGF0YT4oe1xuICAgIHBlcmNlbnRhZ2U6IDAsXG4gICAgZG9uZTogMCxcbiAgICByZW1haW5pbmc6IDAsXG4gICAgdG90YWw6IDAsXG4gICAgbWVzc2FnZTogXCJcIixcbiAgfSlcbiAgY29uc3QgW3NlbGVjdGVkQ2FtcGFpZ24sIHNldFNlbGVjdGVkQ2FtcGFpZ25dID0gdXNlU3RhdGU8UmVndWxhck9wdGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc0luaXRpYWxpemluZ0NhbXBhaWduLCBzZXRJc0luaXRpYWxpemluZ0NhbXBhaWduXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IGZpbmRQcm9zcGVjdHNPdmVydmlld1JlZiA9IHVzZVJlZjxhbnk+KG51bGwpXG4gIGNvbnN0IFtmaW5kRGF0YSwgc2V0RmluZERhdGFdID0gdXNlU3RhdGU8U2VjdGlvblJvd1tdPihbXSlcbiAgY29uc3QgW290aGVyU29jaWFsRGF0YSwgc2V0T3RoZXJTb2NpYWxEYXRhXSA9IHVzZVN0YXRlPFNlY3Rpb25Sb3dbXT4oW10pXG4gIGNvbnN0IFtyZWxhdGlvbnNoaXBEYXRhLCBzZXRSZWxhdGlvbnNoaXBEYXRhXSA9IHVzZVN0YXRlPFNlY3Rpb25Sb3dbXT4oW10pXG4gIGNvbnN0IFtzdGF5Q29ubmVjdGVkRGF0YSwgc2V0U3RheUNvbm5lY3RlZERhdGFdID0gdXNlU3RhdGU8U2VjdGlvblJvd1tdPihbXSlcbiAgY29uc3QgW3N0YXJ0Q29udmVyc2F0aW9uRGF0YSwgc2V0U3RhcnRDb252ZXJzYXRpb25EYXRhXSA9IHVzZVN0YXRlPFNlY3Rpb25Sb3dbXT4oW10pXG4gIGNvbnN0IFtjb21tdW5pdHlEYXRhLCBzZXRDb21tdW5pdHlEYXRhXSA9IHVzZVN0YXRlPFNlY3Rpb25Sb3dbXT4oW10pXG4gIGNvbnN0IFtncm93dGhEYXRhLCBzZXRHcm93dGhEYXRhXSA9IHVzZVN0YXRlPFNlY3Rpb25Sb3dbXT4oW10pXG4gIGNvbnN0IFtzZWN0aW9uTWV0YSwgc2V0U2VjdGlvbk1ldGFdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgU2VjdGlvbk1ldGE+PihkZWZhdWx0U2VjdGlvbk1ldGEpXG4gIGNvbnN0IFtpbnRlZ3JpdHlEYXlzLCBzZXRJbnRlZ3JpdHlEYXlzXSA9IHVzZVN0YXRlPEludGVncml0eURheVtdPihbXSlcbiAgY29uc3QgW2ludGVncml0eUNvbXBsZXRlZERheXMsIHNldEludGVncml0eUNvbXBsZXRlZERheXNdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3RvZ2dsZVZhbHVlcywgc2V0VG9nZ2xlVmFsdWVzXSA9IHVzZVN0YXRlPFJlY29yZDxudW1iZXIsIGJvb2xlYW4+Pih7fSlcbiAgY29uc3QgW3NlY3Rpb25zU3RhdGUsIHNldFNlY3Rpb25zU3RhdGV
2386dID0gdXNlU3RhdGU8Q2hlY2tsaXN0U2VjdGlvbkRhdGFbXT4oW10pXG4gIGNvbnN0IFtwcm92aWRlcnNTdGF0ZSwgc2V0UHJvdmlkZXJzU3RhdGVdID0gdXNlU3RhdGU8U21Qcm92aWRlcltdPihbXSlcbiAgY29uc3QgW2FsbG93T3RoZXJQbGF0Zm9ybXNFZGl0LCBzZXRBbGxvd090aGVyUGxhdGZvcm1zRWRpdF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2ZpbmRQcm9zcGVjdHNNZXNzYWdlLCBzZXRGaW5kUHJvc3BlY3RzTWVzc2FnZV0gPVxuICAgIHVzZVN0YXRlPEZpbmRQcm9zcGVjdHNNZXNzYWdlPihudWxsKVxuXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2F2ZUxvYWRpbmcsIHNldFNhdmVMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nQ2hlY2tsaXN0Q2hhbmdlcywgc2V0UGVuZGluZ0NoZWNrbGlzdENoYW5nZXNdID0gdXNlU3RhdGU8XG4gICAgUmVjb3JkPG51bWJlciwgQ2hlY2tsaXN0VGFza1ZhbHVlVXBkYXRlPlxuICA+KHt9KVxuXG4gIGNvbnN0IHllYXJseVByaWNlID0gWUVBUkxZX1BMQU5fUFJJQ0VcbiAgY29uc3QgbW9udGhseVByaWNlID0gTU9OVEhMWV9QTEFOX1BSSUNFXG4gIGNvbnN0IGxpdmVwbGFuID0gTElWRV9QTEFOXG5cbiAgY29uc3QgW3N1YnNjcmlwdGlvblBsYW5EZXRhaWxzLCBzZXRTdWJzY3JpcHRpb25QbGFuRGV0YWlsc10gPSB1c2VTdGF0ZTxcbiAgICBTdWJzY3JpcHRpb25QbGFuRGV0YWlsc1tdXG4gID4oW10pXG4gIGNvbnN0IFtzZWxlY3RlZFN1YnNjcmlwdGlvblBsYW4sIHNldFNlbGVjdGVkU3Vic2NyaXB0aW9uUGxhbl0gPVxuICAgIHVzZVN0YXRlPFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dQbGFuTW9kYWwsIHNldFNob3dQbGFuTW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZFBsYW4sIHNldFNlbGVjdGVkUGxhbl0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93VXBsb2FkVmlkZW8sIHNldFNob3dVcGxvYWRWaWRlb10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3BsYW4sIHNldFBsYW5dID0gdXNlU3RhdGU8bnVtYmVyIHwgdW5kZWZpbmVkPigpXG4gIGNvbnN0IFt2aWRlb0V4aXN0cywgc2V0VmlkZW9FeGlzdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt0cmlhbFBlcmlvZEV4cGlyZWQsIHNldFRyYWlsUGVyaW9kRXhwaXJlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcbiAgY29uc3QgW3N1YnNjcmlwdGlvblBlcmlvZEV4cGlyZWQsIHNldFN1YnNjcmlwdGlvblBlcmlvZEV4cGlyZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpXG5cbiAgY29uc3QgW3N1bW1hcnlQZXJmLCBzZXRTdW1tYXJ5UGVyZl0gPSB1c2VTdGF0ZTxQZXJmb3JtYW5jZURhdGE+KHtcbiAgICBkYXlzQ29tcGxldGVkOiAwLFxuICAgIGRheXNUb3RhbDogMCxcbiAgICBhdmdDb21wbGV0aW9uOiAwLFxuICAgIGNvbnNlY3V0aXZlRGF5czogMCxcbiAgfSlcbiAgY29uc3QgW3N1bW1hcnlHcm91cHMsIHNldFN1bW1hcnlHcm91cHNdID0gdXNlU3RhdGU8U25hcHNob3RHcm91cFtdPihbXSlcblxuICAvLyDwn5GJIEZldGNoIHJ1bm5pbmcgY2FtcGFpZ24gb24gY29tcG9uZW50IG1vdW50IHRvIGluaXRpYWxpemUgd2l0aCBjb3JyZWN0IGNhbXBhaWduIHVwZnJvbnRcbiAgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZVJ1bm5pbmdDYW1wYWlnbigpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICBHRVRfQ0FNUEFJR05TX0JZX0NPTVBBTllfVVNFUl9BTkRfRkJfQUNDKENVUkVFTlRfQ09NUEFOWV9OQU1FKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhOiBhbnlbXSA9IHJlc3VsdC5kYXRhO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNwb25zZURhdGEpICYmIHJlc3BvbnNlRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEZpbmQgcnVubmluZyBjYW1wYWlnblxuICAgICAgICBjb25zdCBydW5uaW5nQ2FtcGFpZ24gPSByZXNwb25zZURhdGEuZmluZChcbiAgICAgICAgICAoY2FtcGFpZ24pID0+XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNhbXBhaWduLmNhbXBhaWduU3RhdHVzKSAmJlxuICAgICAgICAgICAgY2FtcGFpZ24uY2FtcGFpZ25TdGF0dXMuc29tZShcbiAgICAgICAgICAgICAgKHN0YXR1czogYW55KSA9PiBzdGF0dXMubmFtZSA9PT0gXCJSdW5uaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTZXQgcnVubmluZyBjYW1wYWlnbiBpZiBleGlzdHMsIG90aGVyd2lzZSBkZWZhdWx0IHRvIFwiQWxsXCJcbiAgICAgICAgaWYgKHJ1bm5pbmdDYW1wYWlnbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwi4pyFIFJ1bm5pbmcgQ2FtcGFpZ24gaW5pdGlhbGl6ZWQgb24gbW91bnQ6XCIsIHJ1bm5pbmdDYW1wYWlnbi5uYW1lKTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBydW5uaW5nQ2FtcGFpZ24udXVpZCxcbiAgICAgICAgICAgIGxhYmVsOiBydW5uaW5nQ2FtcGFpZ24ubmFtZSxcbiAgICAgICAgICAgIGFjY2VwdGFuY2VSYXRlOiBydW5uaW5nQ2FtcGFpZ24uYWNjZXB0YW5jZVJhdGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZXRTZWxlY3RlZENhbXBhaWduKHNlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIuKEue+4jyBObyBydW5uaW5nIGNhbXBhaWduIGZvdW5kIC0gd2lsbCB1c2UgQWxsXCIpO1xuICAgICAgICAgIHNldFNlbGVjdGVkQ2FtcGFpZ24oeyB2YWx1ZTogXCItMVwiLCBsYWJlbDogXCJBbGxcIiB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgcnVubmluZyBjYW1wYWlnbiBvbiBtb3VudDpcIiwgZXJyb3IpO1xuICAgICAgLy8gRGVmYXVsdCB0byBcIkFsbFwiIGlmIGZldGNoIGZhaWxzXG4gICAgICBzZXRTZWxlY3RlZENhbXBhaWduKHsgdmFsdWU6IFwiLTFcIiwgbGFiZWw6IFwiQWxsXCIgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzSW5pdGlhbGl6aW5nQ2FtcGFpZ24oZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZXMgcmFuZ2UgZHJvcGRvd24gY2hhbmdlcyBhbmQgcmVzZXRzIGN1c3RvbSBkYXRlIHNlbGVjdGlvbi5cbiAgY29uc3QgaGFuZGxlUmFuZ2VDaGFuZ2UgPSAocmFuZ2U6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBzZXRJc0N1c3RvbURhdGVGaWx0ZXJBY3RpdmUoZmFsc2UpXG4gICAgc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSA/PyBEQVlfU1RSSU5HKVxuICAgIHNldFNlbGVjdGVkRGF0ZShnZXRVc2VyVGltZVpvbmVCYXNlZEN1cnJlbnREYXRl
2386KCkpXG4gIH1cblxuICAvLyBIYW5kbGVzIGFkdmFuY2VkIGZpbHRlciBjaGFuZ2VzIGZyb20gRGF0ZVJhbmdlU2VsZWN0b3IuXG4gIGNvbnN0IGhhbmRsZUZpbHRlckNoYW5nZSA9IChuZXh0RmlsdGVyOiBDYW1wYWlnbkZpbHRlclR5cGUgfCBudWxsKSA9PiB7XG4gICAgaWYgKG5leHRGaWx0ZXI/LmZyZXF1ZW5jeVR5cGUpIHtcbiAgICAgIHNldElzQ3VzdG9tRGF0ZUZpbHRlckFjdGl2ZShmYWxzZSlcbiAgICAgIHNldFNlbGVjdGVkRGF0ZShnZXRVc2VyVGltZVpvbmVCYXNlZEN1cnJlbnREYXRlKCkpXG4gICAgfVxuXG4gICAgc2V0RmlsdGVyKG5leHRGaWx0ZXIpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYXV0aD8uYXBpX3Rva2VuKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZXRVc2VyQnlUb2tlbihhdXRoLmFwaV90b2tlbiA/PyBcIlwiKVxuICAgICAgY29uc3QgdXNlciA9IHJlc3BvbnNlLmRhdGFcblxuICAgICAgc2V0Q3VycmVudFVzZXIodXNlcilcblxuICAgICAgY29uc3QgaXNUcmlhbEV4cGlyZWQgPSB1c2VyPy50cmlhbFBlcmlvZENvbXBsZXRlZFxuICAgICAgY29uc3QgaXNTdWJzY3JwdGlvbkNvbXBsZXRlZCA9IHVzZXI/LnN1YnNjcmlwdGlvblBlcmlvZENvbXBsZXRlZFxuICAgICAgY29uc3QgaXNTdWJzY3JpcHRpb25QZXJpb2QgPSB1c2VyPy5zdWJzY3JpcHRpb25QZXJpb2RcblxuICAgICAgaWYgKChpc1RyaWFsRXhwaXJlZCB8fCBpc1N1YnNjcnB0aW9uQ29tcGxldGVkKSAmJiAhaXNTdWJzY3JpcHRpb25QZXJpb2QpIHtcbiAgICAgICAgc2V0U2hvd1BsYW5Nb2RhbCh0cnVlKVxuICAgICAgfVxuXG4gICAgICBzZXRUcmFpbFBlcmlvZEV4cGlyZWQoISFpc1RyaWFsRXhwaXJlZClcbiAgICAgIHNldFN1YnNjcmlwdGlvblBlcmlvZEV4cGlyZWQoISFpc1N1YnNjcnB0aW9uQ29tcGxldGVkKVxuICAgIH1cblxuICAgIGluaXQoKVxuICB9LCBbYXV0aD8uYXBpX3Rva2VuLCBzZXRDdXJyZW50VXNlcl0pXG5cbiAgLy8g8J+RiSBJbml0aWFsaXplIHJ1bm5pbmcgY2FtcGFpZ24gb24gZmlyc3QgbW91bnQgKGJlZm9yZSBhbnkgZGF0YSBmZXRjaClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpbml0aWFsaXplUnVubmluZ0NhbXBhaWduKCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGdldFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzKClcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlUGxhblNlbGVjdCA9IGFzeW5jIChwbGFuOiBudW1iZXIpID0+IHtcbiAgICBpZiAocGxhbiA9PT0gbW9udGhseVByaWNlKSB7XG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICAgIHNldFNob3dQbGFuTW9kYWwoZmFsc2UpXG5cbiAgICAgIGNvbnN0IHRhcmdldGVkUHJpY2UgPSBcIjE5N1wiXG4gICAgICBzZXRQbGFuKDE5NylcbiAgICAgIGdldFBsYW5EZXRhaWxzQnlTZWxsUHJpY2Uoc3Vic2NyaXB0aW9uUGxhbkRldGFpbHMsIHRhcmdldGVkUHJpY2UpXG4gICAgfSBlbHNlIGlmIChwbGFuID09PSB5ZWFybHlQcmljZSkge1xuICAgICAgY29uc3QgaGFzVmlkZW8gPSBhd2FpdCBjaGVja1VzZXJWaWRlb0V4aXN0KClcbiAgICAgIGlmIChoYXNWaWRlbykge1xuICAgICAgICBzZXRWaWRlb0V4aXN0cyhoYXNWaWRlbylcbiAgICAgICAgc2V0U2hvd1BsYW5Nb2RhbChmYWxzZSlcbiAgICAgICAgc2V0UGxhbig5NylcbiAgICAgICAgY29uc3QgdGFyZ2V0ZWRQcmljZSA9IFwiOTdcIlxuICAgICAgICBnZXRQbGFuRGV0YWlsc0J5U2VsbFByaWNlKHN1YnNjcmlwdGlvblBsYW5EZXRhaWxzLCB0YXJnZXRlZFByaWNlKVxuICAgICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZFBsYW4ocGxhbilcbiAgICAgIHNldFNob3dVcGxvYWRWaWRlbyh0cnVlKVxuICAgICAgc2V0U2hvd1BsYW5Nb2RhbChmYWxzZSlcbiAgICB9IGVsc2UgaWYgKHBsYW4gPT09IGxpdmVwbGFuKSB7XG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICAgIHNldFNob3dQbGFuTW9kYWwoZmFsc2UpXG5cbiAgICAgIGNvbnN0IHRhcmdldGVkUHJpY2UgPSBcIjFcIlxuICAgICAgc2V0UGxhbigxKVxuICAgICAgZ2V0UGxhbkRldGFpbHNCeVNlbGxQcmljZShzdWJzY3JpcHRpb25QbGFuRGV0YWlscywgdGFyZ2V0ZWRQcmljZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVTaG93U3RlcHNQb3BVcCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHNldFNob3dQbGFuTW9kYWwodmFsdWUpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRTdWJzY3JpcHRpb25QbGFuRGV0YWlscygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoXG4gICAgICAgIEdFVF9BTExfU1VCU0NSSVBUSU9OUExBTlMoQ1VSRUVOVF9DT01QQU5ZX05BTUUpXG4gICAgICApXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgc2V0U3Vic2NyaXB0aW9uUGxhbkRldGFpbHMocmVzcG9uc2UuZGF0YSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgLi4uXCIsIGUpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2hlY2tVc2VyVmlkZW9FeGlzdCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIWN1cnJlbnRVc2VyPy5pZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICBgJHtDSEVDS19VU0VSX1ZJREVPX0VYSVNUKENVUkVFTlRfQ09NUEFOWV9OQU1FKX0/dXNlcklkPSR7Y3VycmVudFVzZXIuaWR9YFxuICAgICAgKVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciAuLi5cIiwgZSlcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGdldFBsYW5EZXRhaWxzQnlTZWxsUHJpY2UgPSAoXG4gICAgcGxhbnM6IFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzW10sXG4gICAgdGFyZ2V0UHJpY2U6IHN0cmluZ1xuICApID0+IHtcbiAgICBjb25zdCBwcmljZUFzTnVtYmVyID0gcGFyc2VGbG9hdCh0YXJnZXRQcmljZSlcbiAgICBjb25zdCBtYXRjaGVkUGxhbiA9IHBsYW5zLmZpbmQoKHBsYW4pID0+IHBsYW4uc2VsbFByaWNlID09PSBwcmljZUFzTnVtYmVyKVxuICAgIGlmIChtYXRjaGVkUGxhbikge1xuICAgICAgc2V0U2VsZWN0ZWRTdWJzY3JpcHRpb25QbGFuKG1hdGNoZWRQbGFuKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZXMgZGF0ZSBwaWNrZXIgc2VsZWN0aW9uIGFuZCBzd2l0Y2hlcyB0byBjdXN0b20gZGF0ZSBtb2RlLlxuICBjb25zdCBoYW5kbGVDaGVja2xpc3REYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCBudWxsKSA9PiB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRTZWxlY3RlZERhdGUoZGF0ZSlcbiAgICBzZXRJc0N1c3RvbURhdGVGaWx0ZXJBY3RpdmUodHJ1ZSlcbiAgICBzZXRTZWxlY3RlZFJhbmdlKG51bGwpXG4gICAgc2V0RmlsdGVyKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uKGN1cnJlbnQgPz8ge1xuICAgICAgICBzdGF0dXNOYW1lOiBbXSxcbiAgICAgICAgbmFtZXM6IFtdLFxuICAgICAgfSksXG4gICAgICBzdGFydERhdGU6IG51bGwsXG4gICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgZnJlcXVlbmN5VHlwZTogdW5kZWZpbmVkLFxuICAgIH0pKVxuICAgIHNldElzRGF0ZVBpY2tlck9wZW4oZmFsc2UpXG4gIH1cblxuICAvLyBOb3JtYWxpem
2386VzIGF1dG9zYXZlIG51bWVyaWMgaW5wdXQgaW50byBhIG51bGxhYmxlIG51bWJlci5cbiAgY29uc3Qgbm9ybWFsaXplTnVtZXJpY0F1dG9zYXZlVmFsdWUgPSAodmFsdWU6IHN0cmluZyB8IGJvb2xlYW4pID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRWYWx1ZSA9IHZhbHVlLnRyaW0oKVxuICAgIGlmICh0cmltbWVkVmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBOdW1iZXIodHJpbW1lZFZhbHVlKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4ocGFyc2VkVmFsdWUpID8gbnVsbCA6IHBhcnNlZFZhbHVlXG4gIH1cblxuICAvLyBWYWxpZGF0ZXMgRmluZCBQcm9zcGVjdHMgYXV0b3NhdmUgd2l0aCBPdGhlciBQbGF0Zm9ybXMgb3ZlcmFsbCB0b3RhbHMuXG4gIGNvbnN0IHZhbGlkYXRlRmluZFByb3NwZWN0c0F1dG9zYXZlID0gYXN5bmMgKFxuICAgIHRhc2tJZDogbnVtYmVyLFxuICAgIHBsYXRmb3JtSWQ6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbixcbiAgICBwcm92aWRlck5hbWU/OiBzdHJpbmdcbiAgKSA9PiB7XG4gICAgY29uc3QgZmluZFByb3NwZWN0c1Rhc2tzID1cbiAgICAgIHNlY3Rpb25zU3RhdGUuZmluZCgoc2VjdGlvbikgPT4gc2VjdGlvbi5uYW1lID09PSBcIkZpbmQgUHJvc3BlY3RzXCIpPy50YXNrcyA/PyBbXVxuICAgIGNvbnN0IHNlbnRUYXNrSWQgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZChcbiAgICAgICh0YXNrKSA9PiB0YXNrLm5hbWUgPT09IFwiRnJpZW5kIFJlcXVlc3QgJiBNZXNzYWdlIFNlbnRcIlxuICAgICk/LmlkXG4gICAgY29uc3QgYWNjZXB0ZWRUYXNrSWQgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZCgodGFzaykgPT4gdGFzay5uYW1lID09PSBcIkFjY2VwdGVkXCIpPy5pZFxuXG4gICAgaWYgKHRhc2tJZCAhPT0gc2VudFRhc2tJZCAmJiB0YXNrSWQgIT09IGFjY2VwdGVkVGFza0lkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWU/LnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgbWF0Y2hlZFByb3ZpZGVyID1cbiAgICAgIHByb3ZpZGVyc1N0YXRlLmZpbmQoKHByb3ZpZGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbWVQbGF0Zm9ybUlkID1cbiAgICAgICAgICBwbGF0Zm9ybUlkICE9PSB1bmRlZmluZWQgJiYgZ2V0UHJvdmlkZXJQbGF0Zm9ybUlkKHByb3ZpZGVyKSA9PT0gcGxhdGZvcm1JZFxuICAgICAgICBjb25zdCBzYW1lUHJvdmlkZXJOYW1lID1cbiAgICAgICAgICBub3JtYWxpemVkUHJvdmlkZXJOYW1lICE9IG51bGwgJiZcbiAgICAgICAgICBub3JtYWxpemVkUHJvdmlkZXJOYW1lLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBwcm92aWRlcj8ubmFtZT8udHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWRQcm92aWRlck5hbWVcblxuICAgICAgICByZXR1cm4gc2FtZVBsYXRmb3JtSWQgfHwgc2FtZVByb3ZpZGVyTmFtZVxuICAgICAgfSkgPz9cbiAgICAgIChub3JtYWxpemVkUHJvdmlkZXJOYW1lPy5pbmNsdWRlcyhcIm90aGVyXCIpXG4gICAgICAgID8gcmVzb2x2ZVNvY2lhbFByb3ZpZGVycyhwcm92aWRlcnNTdGF0ZSkub3RoZXJQcm92aWRlclxuICAgICAgICA6IHJlc29sdmVTb2NpYWxQcm92aWRlcnMocHJvdmlkZXJzU3RhdGUpLmZhY2Vib29rUHJvdmlkZXIpID8/XG4gICAgICByZXNvbHZlU29jaWFsUHJvdmlkZXJzKHByb3ZpZGVyc1N0YXRlKS5vdGhlclByb3ZpZGVyID8/XG4gICAgICByZXNvbHZlU29jaWFsUHJvdmlkZXJzKHByb3ZpZGVyc1N0YXRlKS5mYWNlYm9va1Byb3ZpZGVyXG5cbiAgICBjb25zdCBpc090aGVyUGxhdGZvcm1zUHJvdmlkZXIgPVxuICAgICAgbWF0Y2hlZFByb3ZpZGVyPy5uYW1lPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gXCJvdGhlciBwbGF0Zm9ybXNcIlxuXG4gICAgaWYgKCFpc090aGVyUGxhdGZvcm1zUHJvdmlkZXIpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplTnVtZXJpY0F1dG9zYXZlVmFsdWUodmFsdWUpXG4gICAgY29uc3QgcGVuZGluZ1NlbnRWYWx1ZSA9XG4gICAgICBzZW50VGFza0lkICE9IG51bGwgPyBwZW5kaW5nQ2hlY2tsaXN0Q2hhbmdlc1tzZW50VGFza0lkXT8ubnVtYmVyVmFsdWUgOiB1bmRlZmluZWRcbiAgICBjb25zdCBwZW5kaW5nQWNjZXB0ZWRWYWx1ZSA9XG4gICAgICBhY2NlcHRlZFRhc2tJZCAhPSBudWxsID8gcGVuZGluZ0NoZWNrbGlzdENoYW5nZXNbYWNjZXB0ZWRUYXNrSWRdPy5udW1iZXJWYWx1ZSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGN1cnJlbnRTZW50VmFsdWUgPVxuICAgICAgcGVuZGluZ1NlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcGVuZGluZ1NlbnRWYWx1ZSA6IG1hdGNoZWRQcm92aWRlcj8uc2VudCA/PyBudWxsXG4gICAgY29uc3QgY3VycmVudEFjY2VwdGVkVmFsdWUgPVxuICAgICAgcGVuZGluZ0FjY2VwdGVkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHBlbmRpbmdBY2NlcHRlZFZhbHVlIDogbWF0Y2hlZFByb3ZpZGVyPy5hY2NlcHRlZCA/PyBudWxsXG5cbiAgICBjb25zdCBuZXh0U2VudCA9IHRhc2tJZCA9PT0gc2VudFRhc2tJZCA/IG5vcm1hbGl6ZWRWYWx1ZSA6IGN1cnJlbnRTZW50VmFsdWVcbiAgICBjb25zdCBuZXh0QWNjZXB0ZWQgPSB0YXNrSWQgPT09IGFjY2VwdGVkVGFza0lkID8gbm9ybWFsaXplZFZhbHVlIDogY3VycmVudEFjY2VwdGVkVmFsdWVcbiAgICBjb25zdCBiYXNlT3ZlcmFsbFNlbnQgPVxuICAgICAgdHlwZW9mIG1hdGNoZWRQcm92aWRlcj8ub3ZlcmFsbFNlbnQgPT09IFwibnVtYmVyXCIgPyBtYXRjaGVkUHJvdmlkZXIub3ZlcmFsbFNlbnQgOiAwXG4gICAgY29uc3QgYmFzZU92ZXJhbGxBY2NlcHRlZCA9XG4gICAgICB0eXBlb2YgbWF0Y2hlZFByb3ZpZGVyPy5vdmVyYWxsQWNjZXB0ZWQgPT09IFwibnVtYmVyXCIgPyBtYXRjaGVkUHJvdmlkZXIub3ZlcmFsbEFjY2VwdGVkIDogMFxuXG4gICAgLy8gb3ZlcmFsbFNlbnQvb3ZlcmFsbEFjY2VwdGVkIGFscmVhZHkgaW5jbHVkZSB0b2RheSdzIHNhdmVkIHZhbHVlcyxcbiAgICAvLyBzbyBzdWJ0cmFjdCB0b2RheSdzIG9yaWdpbmFsIHRvIGF2b2lkIGRvdWJsZS1jb3VudGluZyB0aGUgbmV3IGlucHV0LlxuICAgIGNvbnN0IG9yaWdpbmFsRGF5U2VudCA9IHR5cGVvZiBtYXRjaGVkUHJvdmlkZXI/LnNlbnQgPT09IFwibnVtYmVyXCIgPyBtYXRjaGVkUHJvdmlkZXIuc2VudCA6IDBcbiAgICBjb25zdCBvcmlnaW5hbERheUFjY2VwdGVkID1cbiAgICAgIHR5cGVvZiBtYXRjaGVkUHJvdmlkZXI/LmFjY2VwdGVkID09PSBcIm51bWJlclwiID8gbWF0Y2hlZFByb3ZpZGVyLmFjY2VwdGVkIDogMFxuXG4gICAgY29uc3QgdG90YWxTZW50ID0gKGJhc2VPdmVyYWxsU2VudCAtIG9yaWdpbmFsRGF5U2VudCkgKyAobmV4dFNlbnQgPz8gMClcbiAgICBjb25zdCB0b3RhbEFjY2VwdGVkID0gKGJhc2VPdmVyYWxsQWNjZXB0ZWQgLSBvcmlnaW5hbERheUFjY2VwdGVkKSArIChuZXh0QWNjZXB0ZWQgPz8gMClcblxuICAgIGlmICh0b3RhbEFjY2VwdGVkID4gdG90YWxTZW50KSB7XG4gICAgICBzZXRGaW5kUHJvc3BlY3RzTWVzc2FnZSh7XG4gICAgICAgI
2386HR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgdGV4dDogYE92ZXJhbGwgQWNjZXB0ZWQgKCR7YmFzZU92ZXJhbGxBY2NlcHRlZH0pIHNob3VsZCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gT3ZlcmFsbCBTZW50ICgke2Jhc2VPdmVyYWxsU2VudH0pLmAsXG4gICAgICB9KVxuXG4gICAgICBjb25zb2xlLmxvZyhcIkJsb2NrZWQgRmluZCBQcm9zcGVjdHMgYXV0b3NhdmUgYmVjYXVzZSBvdmVyYWxsIHRvdGFscyBhcmUgaW52YWxpZFwiLCB7XG4gICAgICAgIHRhc2tJZCxcbiAgICAgICAgcGxhdGZvcm1JZCxcbiAgICAgICAgbmV4dFNlbnQsXG4gICAgICAgIG5leHRBY2NlcHRlZCxcbiAgICAgICAgYmFzZU92ZXJhbGxTZW50LFxuICAgICAgICBiYXNlT3ZlcmFsbEFjY2VwdGVkLFxuICAgICAgICB0b3RhbFNlbnQsXG4gICAgICAgIHRvdGFsQWNjZXB0ZWQsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEJ1aWxkcyBhbGwgVUkgc3RhdGUgZnJvbSB0aGUgY2hlY2tsaXN0IEFQSSBwYXlsb2FkLlxuICBjb25zdCBidWlsZENoZWNrbGlzdFN0YXRlRnJvbVBheWxvYWQgPSAocGF5bG9hZDogQ2hlY2tsaXN0UGF5bG9hZCkgPT4ge1xuICAgICAgY29uc3QgdG90YWwgPSBwYXlsb2FkLnRvdGFsVGFzayA/PyAwXG4gICAgICBjb25zdCBkb25lID0gcGF5bG9hZC50YXNrQ29tcGxldGVkID8/IDBcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHBheWxvYWQubGVmdFRhc2sgPz8gTWF0aC5tYXgoMCwgdG90YWwgLSBkb25lKVxuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRvdGFsID4gMCA/IE1hdGgucm91bmQoKGRvbmUgLyB0b3RhbCkgKiAxMDApIDogMFxuXG4gICAgICBzZXRBY3Rpdml0eSh7XG4gICAgICAgIHBlcmNlbnRhZ2UsXG4gICAgICAgIGRvbmUsXG4gICAgICAgIHJlbWFpbmluZyxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIG1lc3NhZ2U6IHBlcmNlbnRhZ2UgPj0gODAgPyBcIkNydXNoaW5nIGl0IVwiIDogXCJLZWVwIGdvaW5nXCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzZWN0aW9ucyA9IHBheWxvYWQuc2VjdGlvbnMgPz8gW11cbiAgICAgIGNvbnNvbGUubG9nKFwic2VjdGlvbnM6XCIsIHNlY3Rpb25zKVxuICAgICAgc2V0VG9nZ2xlVmFsdWVzKGdldEluaXRpYWxUb2dnbGVWYWx1ZXMoc2VjdGlvbnMpKVxuICAgICAgc2V0U2VjdGlvbnNTdGF0ZShzZWN0aW9ucylcbiAgICAgIGNvbnN0IHNlY3Rpb25zQnlOYW1lID0gc2VjdGlvbnMucmVkdWNlPFJlY29yZDxzdHJpbmcsIENoZWNrbGlzdFNlY3Rpb25EYXRhPj4oKGFjYywgc2VjdGlvbikgPT4ge1xuICAgICAgICBhY2Nbc2VjdGlvbi5uYW1lXSA9IHNlY3Rpb25cbiAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgfSwge30pXG5cbiAgICAgIHNldFNlY3Rpb25NZXRhKHtcbiAgICAgICAgXCJGaW5kIFByb3NwZWN0c1wiOiBnZXRTZWN0aW9uTWV0YShzZWN0aW9uc0J5TmFtZVtcIkZpbmQgUHJvc3BlY3RzXCJdLCBcIkZpbmQgUHJvc3BlY3RzXCIpLFxuICAgICAgICBcIlN0YXJ0IENvbnZlcnNhdGlvbnNcIjogZ2V0U2VjdGlvbk1ldGEoXG4gICAgICAgICAgc2VjdGlvbnNCeU5hbWVbXCJTdGFydCBDb252ZXJzYXRpb25zXCJdLFxuICAgICAgICAgIFwiU3RhcnQgQ29udmVyc2F0aW9uc1wiXG4gICAgICAgICksXG4gICAgICAgIFwiQnVpbGQgUmVsYXRpb25zaGlwc1wiOiBnZXRTZWN0aW9uTWV0YShcbiAgICAgICAgICBzZWN0aW9uc0J5TmFtZVtcIkJ1aWxkIFJlbGF0aW9uc2hpcHNcIl0sXG4gICAgICAgICAgXCJCdWlsZCBSZWxhdGlvbnNoaXBzXCJcbiAgICAgICAgKSxcbiAgICAgICAgXCJTdGF5IENvbm5lY3RlZFwiOiBnZXRTZWN0aW9uTWV0YShzZWN0aW9uc0J5TmFtZVtcIlN0YXkgQ29ubmVjdGVkXCJdLCBcIlN0YXkgQ29ubmVjdGVkXCIpLFxuICAgICAgICBDb21tdW5pdHk6IGdldFNlY3Rpb25NZXRhKHNlY3Rpb25zQnlOYW1lW1wiQ29tbXVuaXR5XCJdLCBcIkNvbW11bml0eVwiKSxcbiAgICAgICAgU3VjY2VzczogZ2V0U2VjdGlvbk1ldGEoc2VjdGlvbnNCeU5hbWVbXCJTdWNjZXNzXCJdLCBcIlN1Y2Nlc3NcIiksXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzbVByb3ZpZGVycyA9IHBheWxvYWQuc21Qcm92aWRlcnMgPz8gW11cbiAgICAgIGNvbnN0IGFsbG93RWRpdCA9ICEhcGF5bG9hZC5hbGxvd0VkaXRcbiAgICAgIGNvbnNvbGUubG9nKFwiY2hlY2tsaXN0IGFsbG93RWRpdDpcIiwgYWxsb3dFZGl0KVxuICAgICAgY29uc29sZS5sb2coXCJzbVByb3ZpZGVyczpcIiwgc21Qcm92aWRlcnMpXG4gICAgICBzZXRBbGxvd090aGVyUGxhdGZvcm1zRWRpdChhbGxvd0VkaXQpXG4gICAgICBzZXRQcm92aWRlcnNTdGF0ZShzbVByb3ZpZGVycylcbiAgICAgIGNvbnN0IHtmYWNlYm9va1Byb3ZpZGVyLCBvdGhlclByb3ZpZGVyfSA9IHJlc29sdmVTb2NpYWxQcm92aWRlcnMoc21Qcm92aWRlcnMpXG4gICAgICBjb25zdCBmaW5kUHJvc3BlY3RzVGFza3MgPSBzZWN0aW9uc0J5TmFtZVtcIkZpbmQgUHJvc3BlY3RzXCJdPy50YXNrcyA/PyBbXVxuICAgICAgY29uc3Qgc2VudFRhc2sgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZCgodGFzaykgPT4gdGFzay5uYW1lID09PSBcIkZyaWVuZCBSZXF1ZXN0ICYgTWVzc2FnZSBTZW50XCIpXG4gICAgICBjb25zdCBhY2NlcHRlZFRhc2sgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZCgodGFzaykgPT4gdGFzay5uYW1lID09PSBcIkFjY2VwdGVkXCIpXG4gICAgICBjb25zdCBzZW50VGFza0lkID0gc2VudFRhc2s/LmlkXG4gICAgICBjb25zdCBhY2NlcHRlZFRhc2tJZCA9IGFjY2VwdGVkVGFzaz8uaWRcbiAgICAgIGNvbnNvbGUubG9nKFwiZmFjZWJvb2tQcm92aWRlcjpcIiwgZmFjZWJvb2tQcm92aWRlcilcbiAgICAgIGNvbnNvbGUubG9nKFwib3RoZXJQcm92aWRlcjpcIiwgb3RoZXJQcm92aWRlcilcblxuICAgICAgbG9nTGlmZXRpbWVBY2NlcHRhbmNlUmF0ZShcIkZpbmQgUHJvc3BlY3RzXCIsIGZhY2Vib29rUHJvdmlkZXI/Lm5hbWUgfHwgXCJGYWNlYm9va1wiLCBmYWNlYm9va1Byb3ZpZGVyKVxuICAgICAgbG9nTGlmZXRpbWVBY2NlcHRhbmNlUmF0ZShcbiAgICAgICAgXCJGaW5kIFByb3NwZWN0c1wiLFxuICAgICAgICBvdGhlclByb3ZpZGVyPy5uYW1lIHx8IFwiT3RoZXIgUGxhdGZvcm1zXCIsXG4gICAgICAgIG90aGVyUHJvdmlkZXJcbiAgICAgIClcblxuICAgICAgc2V0RmluZERhdGEoXG4gICAgICAgIG1hcFByb3ZpZGVyVG9Sb3dzKGZhY2Vib29rUHJvdmlkZXIsIGhhbmRsZUNoZWNrbGlzdEF1dG9zYXZlLCB7XG4gICAgICAgICAgXG4gICAgICAgICAgc2VudFRhc2tJZCxcbiAgICAgICAgICBhY2NlcHRlZFRhc2tJZCxcbiAgICAgICAgICBvbk1lc3NhZ2U6IHNldEZpbmRQcm9zcGVjdHNNZXNzYWdlLF
2386xuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgIClcbiAgICAgIHNldE90aGVyU29jaWFsRGF0YShcbiAgICAgICAgbWFwUHJvdmlkZXJUb1Jvd3Mob3RoZXJQcm92aWRlciwgaGFuZGxlQ2hlY2tsaXN0QXV0b3NhdmUsIHtcbiAgICAgICAgICBlbXB0eU1pc3NpbmdWYWx1ZXM6IHRydWUsXG4gICAgICAgICAgaXNFZGl0YWJsZTogYWxsb3dFZGl0LFxuICAgICAgICAgIHNlbnRUYXNrSWQsXG4gICAgICAgICAgYWNjZXB0ZWRUYXNrSWQsXG4gICAgICAgICAgc2VudFZhbHVlT3ZlcnJpZGU6IHNlbnRUYXNrPy52YWx1ZT8ubnVtYmVyVmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICBhY2NlcHRlZFZhbHVlT3ZlcnJpZGU6IGFjY2VwdGVkVGFzaz8udmFsdWU/Lm51bWJlclZhbHVlID8/IG51bGwsXG4gICAgICAgICAgdHJlYXRaZXJvQXNFbXB0eTogdHJ1ZSxcbiAgICAgICAgICBvbk1lc3NhZ2U6IHNldEZpbmRQcm9zcGVjdHNNZXNzYWdlLFxuICAgICAgICB9KVxuICAgICAgIClcblxuICAgICAgc2V0U3RhcnRDb252ZXJzYXRpb25EYXRhKFxuICAgICAgICBtYXBUYXNrc1RvUm93cyhcbiAgICAgICAgICBzZWN0aW9uc0J5TmFtZVtcIlN0YXJ0IENvbnZlcnNhdGlvbnNcIl0/LnRhc2tzID8/IFtdLFxuICAgICAgICAgIGhhbmRsZUNoZWNrbGlzdEF1dG9zYXZlLFxuICAgICAgICAgIGdldEluaXRpYWxUb2dnbGVWYWx1ZXMoc2VjdGlvbnMpLFxuICAgICAgICAgIGFsbG93RWRpdFxuICAgICAgICApXG4gICAgICApXG4gICAgICBzZXRSZWxhdGlvbnNoaXBEYXRhKFxuICAgICAgICBtYXBUYXNrc1RvUm93cyhcbiAgICAgICAgICBzZWN0aW9uc0J5TmFtZVtcIkJ1aWxkIFJlbGF0aW9uc2hpcHNcIl0/LnRhc2tzID8/IFtdLFxuICAgICAgICAgIGhhbmRsZUNoZWNrbGlzdEF1dG9zYXZlLFxuICAgICAgICAgIGdldEluaXRpYWxUb2dnbGVWYWx1ZXMoc2VjdGlvbnMpLFxuICAgICAgICAgIGFsbG93RWRpdFxuICAgICAgICApXG4gICAgICApXG4gICAgICBzZXRTdGF5Q29ubmVjdGVkRGF0YShcbiAgICAgICAgbWFwVGFza3NUb1Jvd3MoXG4gICAgICAgICAgc2VjdGlvbnNCeU5hbWVbXCJTdGF5IENvbm5lY3RlZFwiXT8udGFza3MgPz8gW10sXG4gICAgICAgICAgaGFuZGxlQ2hlY2tsaXN0QXV0b3NhdmUsXG4gICAgICAgICAgZ2V0SW5pdGlhbFRvZ2dsZVZhbHVlcyhzZWN0aW9ucyksXG4gICAgICAgICAgYWxsb3dFZGl0XG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIHNldENvbW11bml0eURhdGEoXG4gICAgICAgIG1hcFRhc2tzVG9Sb3dzKFxuICAgICAgICAgIHNlY3Rpb25zQnlOYW1lW1wiQ29tbXVuaXR5XCJdPy50YXNrcyA/PyBbXSxcbiAgICAgICAgICBoYW5kbGVDaGVja2xpc3RBdXRvc2F2ZSxcbiAgICAgICAgICBnZXRJbml0aWFsVG9nZ2xlVmFsdWVzKHNlY3Rpb25zKSxcbiAgICAgICAgICBhbGxvd0VkaXRcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgc2V0R3Jvd3RoRGF0YShcbiAgICAgICAgbWFwU3VjY2Vzc1RvUm93cyhcbiAgICAgICAgICBzZWN0aW9ucyxcbiAgICAgICAgICBzZWN0aW9uc0J5TmFtZVtcIlN1Y2Nlc3NcIl0/LnRhc2tzID8/IFtdLFxuICAgICAgICAgIGhhbmRsZUNoZWNrbGlzdEF1dG9zYXZlLFxuICAgICAgICAgIGdldEluaXRpYWxUb2dnbGVWYWx1ZXMoc2VjdGlvbnMpLFxuICAgICAgICAgIGFsbG93RWRpdFxuICAgICAgICApXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGludGVncml0eUNoYXJ0RGF5cyA9IG1hcENoYXJ0VG9JbnRlZ3JpdHlEYXlzKHBheWxvYWQuY2hhcnRSZXNwb25zZSA/PyBbXSlcbiAgICAgIGNvbnNvbGUubG9nKFwiSW50ZWdyaXR5RGF5IHN0YXRlIGNhbmRpZGF0ZTpcIiwgaW50ZWdyaXR5Q2hhcnREYXlzKVxuICAgICAgY29uc29sZS5sb2coXCJwYXlsb2FkLmNoYXJ0VGFza0NvbXBsZXRlZENvdW50RGF5OlwiLCBwYXlsb2FkLmNoYXJ0VGFza0NvbXBsZXRlZENvdW50RGF5KVxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiY29tcGxldGVkIGRheXMgZnJvbSBjaGFydFJlc3BvbnNlOlwiLFxuICAgICAgICBpbnRlZ3JpdHlDaGFydERheXMuZmlsdGVyKChkYXkpID0+IGRheS5jb21wbGV0ZWQpLmxlbmd0aFxuICAgICAgKVxuICAgICAgY29uc3QgY29tcGxldGVkRGF5cyA9XG4gICAgICAgIHBheWxvYWQuY2hhcnRUYXNrQ29tcGxldGVkQ291bnREYXkgPz8gaW50ZWdyaXR5Q2hhcnREYXlzLmZpbHRlcigoZGF5KSA9PiBkYXkuY29tcGxldGVkKS5sZW5ndGhcbiAgICAgIGNvbnNvbGUubG9nKFwiaW50ZWdyaXR5Q29tcGxldGVkRGF5cyBmb3JjZWQgdmFsdWU6XCIsIGNvbXBsZXRlZERheXMpXG5cbiAgICAgIHNldEludGVncml0eURheXMoaW50ZWdyaXR5Q2hhcnREYXlzKVxuICAgICAgc2V0SW50ZWdyaXR5Q29tcGxldGVkRGF5cyhjb21wbGV0ZWREYXlzKVxuXG4gICAgICBzZXRTdW1tYXJ5UGVyZih7XG4gICAgICAgIGRheXNDb21wbGV0ZWQ6IGRvbmUsXG4gICAgICAgIGRheXNUb3RhbDogdG90YWwsXG4gICAgICAgIGF2Z0NvbXBsZXRpb246IHBlcmNlbnRhZ2UsXG4gICAgICAgIGNvbnNlY3V0aXZlRGF5czogY29tcGxldGVkRGF5cyxcbiAgICAgIH0pXG4gICAgICBjb25zdCBidWlsZFJlbGF0aW9uc2hpcFRhc2tzID0gc2VjdGlvbnNCeU5hbWVbXCJCdWlsZCBSZWxhdGlvbnNoaXBzXCJdPy50YXNrcyA/PyBbXVxuICAgICAgY29uc3Qgc3VjY2Vzc1Rhc2tzID0gWy4uLihzZWN0aW9uc0J5TmFtZVtcIlN1Y2Nlc3NcIl0/LnRhc2tzID8/IFtdKV0uc29ydChcbiAgICAgICAgKGEsIGIpID0+IChhLmRpc3BsYXlPcmRlciA/PyAwKSAtIChiLmRpc3BsYXlPcmRlciA/PyAwKVxuICAgICAgKVxuICAgICAgY29uc3QgcHJvc3BlY3RzUmVzcG9uZGVkVGFzayA9IGJ1aWxkUmVsYXRpb25zaGlwVGFza3MuZmluZCgodGFzaykgPT5cbiAgICAgICAgdGFzay5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwicHJvc3BlY3RzIHJlc3BvbmRlZFwiKVxuICAgICAgKVxuICAgICAgY29uc3QgbGlmZXRpbWVDb252ZXJzaW9uUmF0ZUNhcmQgPSBnZXRMaWZldGltZUNvbnZlcnNpb25SYXRlQ2FyZChzZWN0aW9ucylcblxuICAgICAgbG9nTGlmZXRpbWVBY2NlcHRhbmNlUmF0ZShcbiAgICAgICAgXCJTdWNjZXNzIFNuYXBzaG90XCIsXG4gICAgICAgIGZhY2Vib29rUHJvdmlkZXI/Lm5hbWUgfHwgXCJGYWNlYm9va1wiLFxuICAgICAgICBmYWNlYm9va1Byb3ZpZGVyXG4gICAgICApXG4gICAgICBsb2dMaWZldGltZUFjY2VwdGFuY2VSYXRl
2386KFxuICAgICAgICBcIlN1Y2Nlc3MgU25hcHNob3RcIixcbiAgICAgICAgb3RoZXJQcm92aWRlcj8ubmFtZSB8fCBcIk90aGVyIFBsYXRmb3Jtc1wiLFxuICAgICAgICBvdGhlclByb3ZpZGVyXG4gICAgICApXG5cbiAgICAgIHNldFN1bW1hcnlHcm91cHMoW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IGZhY2Vib29rUHJvdmlkZXI/Lm5hbWUgfHwgXCJGYWNlYm9va1wiLFxuICAgICAgICAgIHRhZ0NsYXNzOiBcImZhY2Vib29rXCIsXG4gICAgICAgICAgaXRlbXM6IG1hcFByb3ZpZGVyVG9Sb3dzKGZhY2Vib29rUHJvdmlkZXIpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IG90aGVyUHJvdmlkZXI/Lm5hbWUgfHwgXCJPdGhlciBQbGF0Zm9ybXNcIixcbiAgICAgICAgICB0YWdDbGFzczogXCJzb2NpYWxcIixcbiAgICAgICAgICBpdGVtczogbWFwUHJvdmlkZXJUb1Jvd3Mob3RoZXJQcm92aWRlciwgdW5kZWZpbmVkLCB7ZW1wdHlNaXNzaW5nVmFsdWVzOiB0cnVlfSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogXCJTdWNjZXNzXCIsXG4gICAgICAgICAgdGFnQ2xhc3M6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAuLi4ocHJvc3BlY3RzUmVzcG9uZGVkVGFza1xuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9zcGVjdHNSZXNwb25kZWRUYXNrLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdldERpc3BsYXlOdW1iZXJWYWx1ZShwcm9zcGVjdHNSZXNwb25kZWRUYXNrLnZhbHVlPy5udW1iZXJWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAuLi5zdWNjZXNzVGFza3MubWFwKCh0YXNrKSA9PiAoe1xuICAgICAgICAgICAgICBsYWJlbDogdGFzay5uYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICB0YXNrLmlucHV0VHlwZSA9PT0gXCJUT0dHTEVcIlxuICAgICAgICAgICAgICAgICAgPyB0YXNrLnZhbHVlPy5ib29sZWFuVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgPyBcIlllc1wiXG4gICAgICAgICAgICAgICAgICAgIDogXCJOb1wiXG4gICAgICAgICAgICAgICAgICA6IHRhc2submFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29udmVyc2lvblwiKVxuICAgICAgICAgICAgICAgICAgICA/IGAke3Rhc2sudmFsdWU/Lm51bWJlclZhbHVlID8/IDB9JWBcbiAgICAgICAgICAgICAgICAgICAgOiBnZXREaXNwbGF5TnVtYmVyVmFsdWUodGFzay52YWx1ZT8ubnVtYmVyVmFsdWUpLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgbGlmZXRpbWVDb252ZXJzaW9uUmF0ZUNhcmQsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gIH1cblxuICAvLyBGZXRjaGVzIGNoZWNrbGlzdCBkYXRhIGJhc2VkIG9uIGN1cnJlbnQgZGF0ZSBmaWx0ZXIgc2V0dGluZ3MuXG4gIGNvbnN0IGZldGNoQ2hlY2tsaXN0RGF0YSA9IGFzeW5jIChvcHRpb25zPzoge2FmdGVyU2F2ZT86IGJvb2xlYW47IHNpbGVudD86IGJvb2xlYW59KSA9PiB7XG4gICAgaWYgKCFvcHRpb25zPy5zaWxlbnQpIHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldEVycm9yKG51bGwpXG4gICAgICAvLyBlbmFibGVTcGxhc2hTY3JlZW4oKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb21wYW55TmFtZSA9IENVUkVFTlRfQ09NUEFOWV9OQU1FIHx8IFwic2l4c2lnbWFmdW5uZWxzXCJcbiAgICAgIGNvbnN0IGJyb3dzZXJUaW1lem9uZSA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSB8fCBcIkFzaWEvS29sa2F0YVwiXG4gICAgICBjb25zdCBoYXNBZHZhbmNlZERhdGVGaWx0ZXIgPSAhIWZpbHRlcj8uc3RhcnREYXRlICYmICEhZmlsdGVyPy5lbmREYXRlXG4gICAgICBjb25zdCBmcmVxdWVuY3lUeXBlID0gaXNWYWxpZFJhbmdlKHNlbGVjdGVkUmFuZ2UpXG4gICAgICAgID8gc2VsZWN0ZWRSYW5nZVxuICAgICAgICA6IGlzVmFsaWRSYW5nZShmaWx0ZXI/LmZyZXF1ZW5jeVR5cGUgPz8gbnVsbClcbiAgICAgICAgICA/IChmaWx0ZXI/LmZyZXF1ZW5jeVR5cGUgPz8gREFZX1NUUklORylcbiAgICAgICAgICA6IERBWV9TVFJJTkdcbiAgICAgIGNvbnN0IGNhbXBhaWduVXVpZCA9IHNlbGVjdGVkQ2FtcGFpZ24/LnZhbHVlIHx8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkID0gaGFzQWR2YW5jZWREYXRlRmlsdGVyXG4gICAgICAgID8ge1xuICAgICAgICAgICAgYnJvd3NlclRpbWV6b25lLFxuICAgICAgICAgICAgZnJvbURhdGU6IGZpbHRlcj8uc3RhcnREYXRlLFxuICAgICAgICAgICAgdG9EYXRlOiBmaWx0ZXI/LmVuZERhdGUsXG4gICAgICAgICAgICAuLi4oY2FtcGFpZ25VdWlkICYmIHsgY2FtcGFpZ25VdWlkIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBpc0N1c3RvbURhdGVGaWx0ZXJBY3RpdmVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgYnJvd3NlclRpbWV6b25lLFxuICAgICAgICAgICAgICBmcm9tRGF0ZTogZm9ybWF0Q2hlY2tsaXN0RmlsdGVyRGF0ZShzZWxlY3RlZERhdGUpLFxuICAgICAgICAgICAgICB0b0RhdGU6IGZvcm1hdENoZWNrbGlzdEZpbHRlckRhdGUoc2VsZWN0ZWREYXRlKSxcbiAgICAgICAgICAgICAgLi4uKGNhbXBhaWduVXVpZCAmJiB7IGNhbXBhaWduVXVpZCB9KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgYnJvd3NlclRpbWV6b25lLFxuICAgICAgICAgICAgICBmcmVxdWVuY3lUeXBlLFxuICAgICAgICAgICAgICAuLi4oY2FtcGFpZ25VdWlkICYmIHsgY2FtcGFpZ25VdWlkIH0pLFxuICAgICAgICAgICAgfVxuICAgICAgY29uc29sZS5sb2coXCJHRVRfQ0hFQ0tMSVNUIHJlcXVlc3Q6XCIsIHtcbiAgICAgICAgdXJsOiBHRVRfQ0hFQ0tMSVNUKGNvbXBhbnlOYW1lKSxcbiAgICAgICAgcGF5bG9hZDogcmVxdWVzdFBheWxvYWQsXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PHtzdWNjZXNzOiBib29sZWFuOyBkYXRhPzogQ2hlY2tsaXN0UGF5bG9hZDsgbWVzc2FnZT86IHN0cmluZ30+KFxuICAgICAgICBHRVRfQ0hFQ0tMSVNUKGNvbXBhbnlOYW1lKSxcbiAgICAgICAgcmVxdW
2386VzdFBheWxvYWRcbiAgICAgIClcbiAgICAgIGNvbnNvbGUubG9nKFwiR0VUX0NIRUNLTElTVCByYXcgcmVzcG9uc2U6XCIsIHJlc3BvbnNlPy5kYXRhKVxuXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzcG9uc2U/LmRhdGE/LmRhdGFcbiAgICAgIGNvbnNvbGUubG9nKFwiR0VUX0NIRUNLTElTVCBwYXlsb2FkOlwiLCBwYXlsb2FkKVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWZ0ZXJTYXZlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRnJlc2ggY2hlY2tsaXN0IG91dHB1dCBhZnRlciBzYXZlOlwiLCBwYXlsb2FkKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlPy5kYXRhPy5zdWNjZXNzIHx8ICFwYXlsb2FkKSB7XG4gICAgICAgIHNldEVycm9yKHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIGxvYWQgY2hlY2tsaXN0IGRhdGEuXCIpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBidWlsZENoZWNrbGlzdFN0YXRlRnJvbVBheWxvYWQocGF5bG9hZClcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgc2V0RXJyb3IoZXJyPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIGxvYWQgY2hlY2tsaXN0IGRhdGEuXCIpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghb3B0aW9ucz8uc2lsZW50KSB7XG4gICAgICAgIC8vIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIGRpc2FibGVTcGxhc2hTY3JlZW4oKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOKchSBIYW5kbGVzIGNhbXBhaWduIHNlbGVjdGlvbiBhbmQgY2FsbHMgR0VUX0NIRUNLTElTVCB3aXRoIGR5bmFtaWMgdmFsdWVzXG4gIGNvbnN0IGhhbmRsZUNhbXBhaWduQ2hhbmdlID0gYXN5bmMgKG9wdGlvbjogUmVndWxhck9wdGlvbiB8IG51bGwpID0+IHtcbiAgICAgZW5hYmxlU3BsYXNoU2NyZWVuKCk7XG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcbiAgICBcbiAgICAvLyBSZXNldCBkYXRlIGZpbHRlcnMgdG8gXCJUb2RheVwiIHdoZW4gY2FtcGFpZ24gY2hhbmdlc1xuICAgIGNvbnN0IHRvZGF5RGF0ZSA9IGdldFVzZXJUaW1lWm9uZUJhc2VkQ3VycmVudERhdGUoKTtcbiAgICBzZXRTZWxlY3RlZENhbXBhaWduKG9wdGlvbik7XG4gICAgc2V0U2VsZWN0ZWRSYW5nZShEQVlfU1RSSU5HKTsgLy8gU2VsZWN0IFwiVG9kYXlcIiBpbiBjYWxlbmRhclxuICAgIHNldFNlbGVjdGVkRGF0ZSh0b2RheURhdGUpOyAvLyBTZXQgZGF0ZSB0byB0b2RheVxuICAgIHNldElzQ3VzdG9tRGF0ZUZpbHRlckFjdGl2ZShmYWxzZSk7IC8vIENsZWFyIGN1c3RvbSBkYXRlIGZpbHRlclxuICAgIHNldEZpbHRlcihudWxsKTsgLy8gQ2xlYXIgYWR2YW5jZWQgZGF0ZSBmaWx0ZXJzXG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBhbnlOYW1lID0gQ1VSRUVOVF9DT01QQU5ZX05BTUUgfHwgXCJzaXhzaWdtYWZ1bm5lbHNcIlxuICAgICAgY29uc3QgYnJvd3NlclRpbWV6b25lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lIHx8IFwiQXNpYS9Lb2xrYXRhXCJcblxuICAgICAgY29uc3QgcmVxdWVzdFBheWxvYWQgPSB7XG4gICAgICAgIGJyb3dzZXJUaW1lem9uZSxcbiAgICAgICAgZnJlcXVlbmN5VHlwZTogREFZX1NUUklORywgLy8gVXNlIERBWV9TVFJJTkcgZm9yIHRvZGF5J3MgZGF0YVxuICAgICAgICBjYW1wYWlnblV1aWQ6IG9wdGlvbi52YWx1ZSwgLy8gVGhpcyB3aWxsIGJlIFwiLTFcIiBmb3IgXCJBbGxcIiBvcHRpb25cbiAgICAgIH07XG5cbiAgICAgIGNvbnNvbGUubG9nKFwiR0VUX0NIRUNLTElTVCByZXF1ZXN0IHdpdGggY2FtcGFpZ246XCIsIHtcbiAgICAgICAgdXJsOiBHRVRfQ0hFQ0tMSVNUKGNvbXBhbnlOYW1lKSxcbiAgICAgICAgcGF5bG9hZDogcmVxdWVzdFBheWxvYWQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICBHRVRfQ0hFQ0tMSVNUKGNvbXBhbnlOYW1lKSxcbiAgICAgICAgcmVxdWVzdFBheWxvYWRcbiAgICAgICk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFwiR0VUX0NIRUNLTElTVCByZXNwb25zZSBhZnRlciBjYW1wYWlnbiBjaGFuZ2U6XCIsIHJlc3BvbnNlPy5kYXRhKTtcblxuICAgICAgaWYgKHJlc3BvbnNlPy5kYXRhPy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ2hlY2tsaXN0IGRhdGEgbG9hZGVkIHN1Y2Nlc3NmdWxseSB3aXRoIHNlbGVjdGVkIGNhbXBhaWduIGZvciB0b2RheVwiKTtcbiAgICAgICAgYnVpbGRDaGVja2xpc3RTdGF0ZUZyb21QYXlsb2FkKHJlc3BvbnNlPy5kYXRhPy5kYXRhKTtcbiAgICAgICAgIGRpc2FibGVTcGxhc2hTY3JlZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBjaGVja2xpc3Q6XCIsIHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlKTtcbiAgICAgICAgXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjYWxsaW5nIEdFVF9DSEVDS0xJU1QgQVBJIG9uIGNhbXBhaWduIGNoYW5nZTpcIiwgZXJyb3IpO1xuICAgICAgZGlzYWJsZVNwbGFzaFNjcmVlbigpO1xuICAgIH1cbiAgfTtcblxuICAvLyBEZXRlcm1pbmVzIHdoaWNoIGRhdGUgc2hvdWxkIGJlIHVzZWQgZm9yIHNhdmUvYXV0b3NhdmUgcGF5bG9hZHMuXG4gIGNvbnN0IHJlc29sdmVDaGVja2xpc3RFbnRyeURhdGUgPSAoKSA9PiB7XG4gICAgY29uc3QgaGFzQWR2YW5jZWREYXRlRmlsdGVyID0gISFmaWx0ZXI/LnN0YXJ0RGF0ZSAmJiAhIWZpbHRlcj8uZW5kRGF0ZVxuICAgIC8vIGlmIChoYXNBZHZhbmNlZERhdGVGaWx0ZXIgfHwgaXNDdXN0b21EYXRlRmlsdGVyQWN0aXZlKSB7XG4gICAgLy8gICByZXR1cm4gZm9ybWF0Q2hlY2tsaXN0RW50cnlEYXRlKHNlbGVjdGVkRGF0ZSlcbiAgICAvLyB9XG5cbiBpZiAoaGFzQWR2YW5jZWREYXRlRmlsdGVyKSB7XG4gICAgICBjb25zdCBhZHZhbmNlZEZpbHRlckRhdGUgPSBuZXcgRGF0ZShmaWx0ZXIuc3RhcnREYXRlIGFzIHN0cmluZylcbiAgICAgIGlmICghTnVtYmVyLmlzTmFOKGFkdmFuY2VkRmlsdGVyRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgI
2386HJldHVybiBmb3JtYXRDaGVja2xpc3RGaWx0ZXJEYXRlKGFkdmFuY2VkRmlsdGVyRGF0ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNDdXN0b21EYXRlRmlsdGVyQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0Q2hlY2tsaXN0RW50cnlEYXRlKHNlbGVjdGVkRGF0ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0Q2hlY2tsaXN0RW50cnlEYXRlKGdldFVzZXJUaW1lWm9uZUJhc2VkQ3VycmVudERhdGUoKSlcbiAgfVxuXG4gIC8vIEF1dG9zYXZlcyBhIHNpbmdsZSB0YXNrIHZhbHVlIGFuZCByZWZyZXNoZXMgZGF0YSB0byBrZWVwIFVJIGluIHN5bmMuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNoZWNrbGlzdEF1dG9zYXZlKFxuICAgIHRhc2tJZDogbnVtYmVyLFxuICAgIHBsYXRmb3JtSWQ6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbixcbiAgICBwcm92aWRlck5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgaXNWYWxpZEF1dG9zYXZlID0gYXdhaXQgdmFsaWRhdGVGaW5kUHJvc3BlY3RzQXV0b3NhdmUoXG4gICAgICB0YXNrSWQsXG4gICAgICBwbGF0Zm9ybUlkLFxuICAgICAgdmFsdWUsXG4gICAgICBwcm92aWRlck5hbWVcbiAgICApXG4gICAgaWYgKCFpc1ZhbGlkQXV0b3NhdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBzZXRUb2dnbGVWYWx1ZXMoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIFt0YXNrSWRdOiB2YWx1ZSxcbiAgICAgIH0pKVxuICAgIH1cblxuICAgIGNvbnN0IHRhc2tWYWx1ZVVwZGF0ZSA9IGJ1aWxkVGFza1ZhbHVlVXBkYXRlKHRhc2tJZCwgdmFsdWUpXG4gICAgY29uc3QgZmluZFByb3NwZWN0c1Rhc2tzID1cbiAgICAgIHNlY3Rpb25zU3RhdGUuZmluZCgoc2VjdGlvbikgPT4gc2VjdGlvbi5uYW1lID09PSBcIkZpbmQgUHJvc3BlY3RzXCIpPy50YXNrcyA/PyBbXVxuICAgIGNvbnN0IHNlbnRUYXNrSWQgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZChcbiAgICAgICh0YXNrKSA9PiB0YXNrLm5hbWUgPT09IFwiRnJpZW5kIFJlcXVlc3QgJiBNZXNzYWdlIFNlbnRcIlxuICAgICk/LmlkXG4gICAgY29uc3QgYWNjZXB0ZWRUYXNrSWQgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZCgodGFzaykgPT4gdGFzay5uYW1lID09PSBcIkFjY2VwdGVkXCIpPy5pZFxuICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWU/LnRyaW0oKS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkUHJvdmlkZXJOYW1lICYmXG4gICAgICAodGFza0lkID09PSBzZW50VGFza0lkIHx8IHRhc2tJZCA9PT0gYWNjZXB0ZWRUYXNrSWQpICYmXG4gICAgICB0eXBlb2YgdGFza1ZhbHVlVXBkYXRlLm51bWJlclZhbHVlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgKSB7XG4gICAgICBzZXRQcm92aWRlcnNTdGF0ZSgoY3VycmVudCkgPT5cbiAgICAgICAgY3VycmVudC5tYXAoKHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgaWYgKHByb3ZpZGVyPy5uYW1lPy50cmltKCkudG9Mb3dlckNhc2UoKSAhPT0gbm9ybWFsaXplZFByb3ZpZGVyTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnByb3ZpZGVyLFxuICAgICAgICAgICAgc2VudDogdGFza0lkID09PSBzZW50VGFza0lkID8gdGFza1ZhbHVlVXBkYXRlLm51bWJlclZhbHVlID8/IG51bGwgOiBwcm92aWRlci5zZW50LFxuICAgICAgICAgICAgYWNjZXB0ZWQ6XG4gICAgICAgICAgICAgIHRhc2tJZCA9PT0gYWNjZXB0ZWRUYXNrSWQgPyB0YXNrVmFsdWVVcGRhdGUubnVtYmVyVmFsdWUgPz8gbnVsbCA6IHByb3ZpZGVyLmFjY2VwdGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBjb21wYW55TmFtZSA9IENVUkVFTlRfQ09NUEFOWV9OQU1FIHx8IFwic2l4c2lnbWFmdW5uZWxzXCJcbiAgICBjb25zdCBwYXlsb2FkOiBDaGVja2xpc3RTYXZlUGF5bG9hZCA9IHtcbiAgICAgIGVudHJ5RGF0ZTogcmVzb2x2ZUNoZWNrbGlzdEVudHJ5RGF0ZSgpLFxuICAgICAgdGltZXpvbmU6IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSB8fCBcIkFzaWEvS29sa2F0YVwiLFxuICAgICAgdmFsdWVzOiBbdGFza1ZhbHVlVXBkYXRlXSxcbiAgICB9XG5cbiAgICBzZXRQZW5kaW5nQ2hlY2tsaXN0Q2hhbmdlcygoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICBbdGFza0lkXTogdGFza1ZhbHVlVXBkYXRlLFxuICAgIH0pKVxuXG4gICAgY29uc29sZS5sb2coXCJDSEVDS0xJU1RfQVVUT1NBVkUgdHJpZ2dlcjpcIiwge1xuICAgICAgdGFza0lkLFxuICAgICAgcGxhdGZvcm1JZCxcbiAgICAgIHZhbHVlOiB0YXNrVmFsdWVVcGRhdGUsXG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKFwiQ0hFQ0tMSVNUX0FVVE9TQVZFIHJlcXVlc3Q6XCIsIHtcbiAgICAgIHVybDogUE9TVF9TQVZFX1RBU0tfVkFMVUUoY29tcGFueU5hbWUpLFxuICAgICAgcGF5bG9hZCxcbiAgICB9KVxuXG4gICAgY29uc3QgaXNPdGhlclBsYXRmb3Jtc0F1dG9zYXZlID1cbiAgICAgIG5vcm1hbGl6ZWRQcm92aWRlck5hbWU/LmluY2x1ZGVzKFwib3RoZXJcIikgJiZcbiAgICAgICh0YXNrSWQgPT09IHNlbnRUYXNrSWQgfHwgdGFza0lkID09PSBhY2NlcHRlZFRhc2tJZClcblxuICAgIGlmIChpc090aGVyUGxhdGZvcm1zQXV0b3NhdmUpIHtcbiAgICAgIGVuYWJsZVNwbGFzaFNjcmVlbigpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8e3N1Y2Nlc3M/OiBib29sZWFuOyBtZXNzYWdlPzogc3RyaW5nfT4oXG4gICAgICAgIFBPU1RfU0FWRV9UQVNLX1ZBTFVFKGNvbXBhbnlOYW1lKSxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgY29uc29sZS5sb2coXCJDSEVDS0xJU1RfQVVUT1NBVkUgcmVzcG9uc2U6XCIsIHJlc3BvbnNlPy5kYXRhKVxuICAgICAgYXdhaXQgZmV0Y2hDaGVja2xpc3REYXRhKHthZnRlclNhdmU6IHRydWUsIHNpbGVudDogdHJ1ZX0pXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0
2386hFQ0tMSVNUX0FVVE9TQVZFIGVycm9yOlwiLCBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVycj8ubWVzc2FnZSB8fCBlcnIpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChpc090aGVyUGxhdGZvcm1zQXV0b3NhdmUpIHtcbiAgICAgICAgZGlzYWJsZVNwbGFzaFNjcmVlbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzZXQgZmlsdGVycyBvbiB1c2VyIGNoYW5nZSAobmV3IGxvZ2luL2NvbnRleHQpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlbGVjdGVkUmFuZ2UoREFZX1NUUklORylcbiAgICBzZXRGaWx0ZXIobnVsbClcbiAgICBzZXRJc0N1c3RvbURhdGVGaWx0ZXJBY3RpdmUoZmFsc2UpXG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApXG4gIH0sIFtjdXJyZW50VXNlcl0pXG5cbiAgLy8gQXV0by1jbGVhciB0cmFuc2llbnQgRmluZCBQcm9zcGVjdHMgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWZpbmRQcm9zcGVjdHNNZXNzYWdlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRGaW5kUHJvc3BlY3RzTWVzc2FnZShudWxsKVxuICAgIH0sIDUwMDApXG5cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gIH0sIFtmaW5kUHJvc3BlY3RzTWVzc2FnZV0pXG5cbiAgLy8gTG9hZCBjaGVja2xpc3QgZGF0YSB3aGVuIGRlcGVuZGVuY2llcyBjaGFuZ2UuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8g8J+RiSBXYWl0IHVudGlsIHJ1bm5pbmcgY2FtcGFpZ24gaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGZldGNoaW5nIGNoZWNrbGlzdFxuICAgIGlmIChpc0luaXRpYWxpemluZ0NhbXBhaWduKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIuKPsyBXYWl0aW5nIGZvciBydW5uaW5nIGNhbXBhaWduIGluaXRpYWxpemF0aW9uLi4uXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zb2xlLmxvZyhcIuKchSBDYW1wYWlnbiBpbml0aWFsaXplZCwgbm93IGZldGNoaW5nIGNoZWNrbGlzdCB3aXRoIGNhbXBhaWduOlwiLCBzZWxlY3RlZENhbXBhaWduKTtcbiAgICBmZXRjaENoZWNrbGlzdERhdGEoKVxuICB9LCBbY3VycmVudFVzZXIsIHNlbGVjdGVkUmFuZ2UsIGZpbHRlciwgc2VsZWN0ZWREYXRlLCBpc0N1c3RvbURhdGVGaWx0ZXJBY3RpdmUsIHNlbGVjdGVkQ2FtcGFpZ24sIGlzSW5pdGlhbGl6aW5nQ2FtcGFpZ25dKVxuXG4gIC8vIERlcml2ZSBhbGwgc2VjdGlvbiByb3cgZGF0YSB3aGVuZXZlciByYXcgc3RhdGUgY2hhbmdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNlY3Rpb25zU3RhdGUubGVuZ3RoICYmICFwcm92aWRlcnNTdGF0ZS5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgI
2386H1cblxuICAgIGNvbnN0IHNlY3Rpb25zQnlOYW1lID0gc2VjdGlvbnNTdGF0ZS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tsaXN0U2VjdGlvbkRhdGE+PigoYWNjLCBzZWN0aW9uKSA9PiB7XG4gICAgICBhY2Nbc2VjdGlvbi5uYW1lXSA9IHNlY3Rpb25cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCB7fSlcbiAgICBjb25zdCB7ZmFjZWJvb2tQcm92aWRlciwgb3RoZXJQcm92aWRlcn0gPSByZXNvbHZlU29jaWFsUHJvdmlkZXJzKHByb3ZpZGVyc1N0YXRlKVxuICAgIGNvbnN0IGZpbmRQcm9zcGVjdHNUYXNrcyA9IHNlY3Rpb25zQnlOYW1lW1wiRmluZCBQcm9zcGVjdHNcIl0/LnRhc2tzID8/IFtdXG4gICAgY29uc3Qgc2VudFRhc2sgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZCgodGFzaykgPT4gdGFzay5uYW1lID09PSBcIkZyaWVuZCBSZXF1ZXN0ICYgTWVzc2FnZSBTZW50XCIpXG4gICAgY29uc3QgYWNjZXB0ZWRUYXNrID0gZmluZFByb3NwZWN0c1Rhc2tzLmZpbmQoKHRhc2spID0+IHRhc2submFtZSA9PT0gXCJBY2NlcHRlZFwiKVxuICAgIGNvbnN0IHNlbnRUYXNrSWQgPSBzZW50VGFzaz8uaWRcbiAgICBjb25zdCBhY2NlcHRlZFRhc2tJZCA9IGFjY2VwdGVkVGFzaz8uaWRcbiAgICBjb25zdCBidWlsZFJlbGF0aW9uc2hpcFRhc2tzID0gc2VjdGlvbnNCeU5hbWVbXCJCdWlsZCBSZWxhdGlvbnNoaXBzXCJdPy50YXNrcyA/PyBbXVxuICAgIGNvbnN0IHN1Y2Nlc3NUYXNrcyA9IFsuLi4oc2VjdGlvbnNCeU5hbWVbXCJTdWNjZXNzXCJdPy50YXNrcyA/PyBbXSldLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEuZGlzcGxheU9yZGVyID8/IDApIC0gKGIuZGlzcGxheU9yZGVyID8/IDApXG4gICAgKVxuICAgIGNvbnN0IHByb3NwZWN0c1Jlc3BvbmRlZFRhc2sgPSBidWlsZFJlbGF0aW9uc2hpcFRhc2tzLmZpbmQoKHRhc2spID0+XG4gICAgICB0YXNrLm5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJwcm9zcGVjdHMgcmVzcG9uZGVkXCIpXG4gICAgKVxuXG4gICAgc2V0RmluZERhdGEoXG4gICAgICBtYXBQcm92aWRlclRvUm93cyhmYWNlYm9va1Byb3ZpZGVyLCBoYW5kbGVDaGVja2xpc3RBdXRvc2F2ZSwge1xuICAgICAgICBcbiAgICAgICAgc2VudFRhc2tJZCxcbiAgICAgICAgYWNjZXB0ZWRUYXNrSWQsXG4gICAgICAgIG9uTWVzc2FnZTogc2V0RmluZFByb3NwZWN0c01lc3NhZ2UsXG4gICAgICB9KVxuICAgIClcbiAgICBzZXRPdGhlclNvY2lhbERhdGEoXG4gICAgICBtYXBQcm92aWRlclRvUm93cyhvdGhlclByb3ZpZGVyLCBoYW5kbGVDaGVja2xpc3RBdXRvc2F2ZSwge1xuICAgICAgICBlbXB0eU1pc3NpbmdWYWx1ZXM6IHRydWUsXG4gICAgICAgIGlzRWRpdGFibGU6IGFsbG93T3RoZXJQbGF0Zm9ybXNFZGl0LFxuICAgICAgICBzZW50VGFza0lkLFxuICAgICAgICBhY2NlcHRlZFRhc2tJZCxcbiAgICAgICAgc2VudFZhbHVlT3ZlcnJpZGU6IHNlbnRUYXNrPy52YWx1ZT8ubnVtYmVyVmFsdWUgPz8gbnVsbCxcbiAgICAgICAgYWNjZXB0ZWRWYWx1ZU92ZXJyaWRlOiBhY2NlcHRlZFRhc2s/LnZhbHVlPy5udW1iZXJWYWx1ZSA/PyBudWxsLFxuICAgICAgICB0cmVhdFplcm9Bc0VtcHR5OiB0cnVlLFxuICAgICAgICBvbk1lc3NhZ2U6IHNldEZpbmRQcm9zcGVjdHNNZXNzYWdlLFxuICAgICAgfSlcbiAgICApXG4gICAgc2V0U3RhcnRDb252ZXJzYXRpb25EYXRhKFxuICAgICAgbWFwVGFza3NUb1Jvd3MoXG4gICAgICAgIHNlY3Rpb25zQnlOYW1lW1wiU3RhcnQgQ29udmVyc2F0aW9uc1wiXT8udGFza3MgPz8gW10sXG4gICAgICAgIGhhbmRsZUNoZWNrbGlzdEF1dG9zYXZlLFxuICAgICAgICB0b2dnbGVWYWx1ZXMsXG4gICAgICAgIGFsbG93T3RoZXJQbGF0Zm9ybXNFZGl0XG4gICAgICApXG4gICAgKVxuICAgIHNldFJlbGF0aW9uc2hpcERhdGEoXG4gICAgICBtYXBUYXNrc1RvUm93cyhcbiAgICAgICAgc2VjdGlvbnNCeU5hbWVbXCJCdWlsZCBSZWxhdGlvbnNoaXBzXCJdPy50YXNrcyA/PyBbXSxcbiAgICAgICAgaGFuZGxlQ2hlY2tsaXN0QXV0b3NhdmUsXG4gICAgICAgIHRvZ2dsZVZhbHVlcyxcbiAgICAgICAgYWxsb3dPdGhlclBsYXRmb3Jtc0VkaXRcbiAgICAgIClcbiAgICApXG4gICAgc2V0U3RheUNvbm5lY3RlZERhdGEoXG4gICAgICBtYXBUYXNrc1RvUm93cyhcbiAgICAgICAgc2VjdGlvbnNCeU5hbWVbXCJTdGF5IENvbm5lY3RlZFwiXT8udGFza3MgPz8gW10sXG4gICAgICAgIGhhbmRsZUNoZWNrbGlzdEF1dG9zYXZlLFxuICAgICAgICB0b2dnbGVWYWx1ZXMsXG4gICAgICAgIGFsbG93T3RoZXJQbGF0Zm9ybXNFZGl0XG4gICAgICApXG4gICAgKVxuICAgIHNldENvbW11bml0eURhdGEoXG4gICAgICBtYXBUYXNrc1RvUm93cyhcbiAgICAgICAgc2VjdGlvbnNCeU5hbWVbXCJDb21tdW5pdHlcIl0/LnRhc2tzID8/IFtdLFxuICAgICAgICBoYW5kbGVDaGVja2xpc3RBdXRvc2F2ZSxcbiAgICAgICAgdG9nZ2xlVmFsdWVzLFxuICAgICAgICBhbGxvd090aGVyUGxhdGZvcm1zRWRpdFxuICAgICAgKVxuICAgIClcbiAgICBzZXRHcm93dGhEYXRhKFxuICAgICAgbWFwU3VjY2Vzc1RvUm93cyhcbiAgICAgICAgc2VjdGlvbnNTdGF0ZSxcbiAgICAgICAgc2VjdGlvbnNCeU5hbWVbXCJTdWNjZXNzXCJdPy50YXNrcyA/PyBbXSxcbiAgICAgICAgaGFuZGxlQ2hlY2tsaXN0QXV0b3NhdmUsXG4gICAgICAgIHRvZ2dsZVZhbHVlcyxcbiAgICAgICAgYWxsb3dPdGhlclBsYXRmb3Jtc0VkaXRcbiAgICAgIClcbiAgICApXG4gICAgc2V0U3VtbWFyeUdyb3VwcyhbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBmYWNlYm9va1Byb3ZpZGVyPy5uYW1lIHx8IFwiRmFjZWJvb2tcIixcbiAgICAgICAgdGFnQ2xhc3M6IFwiZmFjZWJvb2tcIixcbiAgICAgICAgaXRlbXM6IG1hcFByb3ZpZGVyVG9Sb3dzKGZhY2Vib29rUHJvdmlkZXIpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6IG90aGVyUHJvdmlkZXI/Lm5hbWUgfHwgXCJPdGhlciBQbGF0Zm9ybXNcIixcbiAgICAgICAgdGFnQ2xhc3M6IFwic29jaWFsXCIsXG4gICAgICAgIGl0ZW1zOiBtYXBQcm92aWRlclRvUm93cyhvdGhlclByb3ZpZGVyLCB1bmRlZmluZWQsIHtlbXB0eU1pc3NpbmdWYWx1ZXM6IHRydWV9KSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgI
2386HRpdGxlOiBcIlN1Y2Nlc3NcIixcbiAgICAgICAgdGFnQ2xhc3M6IFwic3VjY2Vzc1wiLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgIC4uLihwcm9zcGVjdHNSZXNwb25kZWRUYXNrXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogcHJvc3BlY3RzUmVzcG9uZGVkVGFzay5uYW1lLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IGdldERpc3BsYXlOdW1iZXJWYWx1ZShwcm9zcGVjdHNSZXNwb25kZWRUYXNrLnZhbHVlPy5udW1iZXJWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgLi4uc3VjY2Vzc1Rhc2tzLm1hcCgodGFzaykgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsOiB0YXNrLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgdGFzay5pbnB1dFR5cGUgPT09IFwiVE9HR0xFXCJcbiAgICAgICAgICAgICAgPyAodG9nZ2xlVmFsdWVzW3Rhc2suaWRdID8/IHRhc2sudmFsdWU/LmJvb2xlYW5WYWx1ZSlcbiAgICAgICAgICAgICAgICA/IFwiWWVzXCJcbiAgICAgICAgICAgICAgICA6IFwiTm9cIlxuICAgICAgICAgICAgICA6IHRhc2submFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29udmVyc2lvblwiKVxuICAgICAgICAgICAgICAgICAgPyBgJHt0YXNrLnZhbHVlPy5udW1iZXJWYWx1ZSA/PyAwfSVgXG4gICAgICAgICAgICAgICAgICA6IGdldERpc3BsYXlOdW1iZXJWYWx1ZSh0YXNrLnZhbHVlPy5udW1iZXJWYWx1ZSksXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGdldExpZmV0aW1lQ29udmVyc2lvblJhdGVDYXJkKHNlY3Rpb25zU3RhdGUpLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdKVxuICB9LCBbYWxsb3dPdGhlclBsYXRmb3Jtc0VkaXQsIHByb3ZpZGVyc1N0YXRlLCBzZWN0aW9uc1N0YXRlLCB0b2dnbGVWYWx1ZXNdKVxuXG4gIFxudXNlRWZmZWN0KCgpID0+IHtcbiAgY29uc3QgaXNJbml0aWFsRGF0YUxvYWRlZCA9XG4gICAgZmluZERhdGEgIT09IG51bGwgJiZcbiAgICBvdGhlclNvY2lhbERhdGEgIT09IG51bGwgJiZcbiAgICBzdW1tYXJ5R3JvdXBzICE9PSBudWxsXG5cbiAgaWYgKGlzSW5pdGlhbERhdGFMb2FkZWQgJiYgIXNhdmVMb2FkaW5nKSB7XG4gICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgfVxuY29uc29sZS5sb2coXCJMb2FkaW5nIENoZWNrIPCfkYlcIiwge1xuICBmaW5kRGF0YSxcbiAgb3RoZXJTb2NpYWxEYXRhLFxuICBzdW1tYXJ5R3JvdXBzLFxuICBzYXZlTG9hZGluZ1xufSlcbiAgXG59LCBbZmluZERhdGEsIG90aGVyU29jaWFsRGF0YSwgc3VtbWFyeUdyb3Vwcywgc2F2ZUxvYWRpbmddKVxuXG5cbnVzZUVmZmVjdCgoKSA9PiB7XG4gIGVuYWJsZVNwbGFzaFNjcmVlbigpOyAvLyDinIUgc3RhcnQgaW1tZWRpYXRlbHkgd2hlbiBwYWdlIG1vdW50c1xuXG4gIGxvYWRDaGVja2xpc3RQYWdlKCk7ICAvLyDwn5GIIGNhbGwgd3JhcHBlciBmdW5jdGlvblxufSwgW10pO1xuXG5jb25zdCBsb2FkQ2hlY2tsaXN0UGFnZSA9IGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmZXRjaENoZWNrbGlzdERhdGEoKTsgLy8geW91ciBleGlzdGluZyBBUElcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBkaXNhYmxlU3BsYXNoU2NyZWVuKCk7IC8vIOKchSBhbHJlYWR5IHdvcmtpbmcgaW4geW91ciBjYXNlXG4gIH1cbn07XG5cblxuICAvLyBTYXZlcyBhbGwgcGVuZGluZyBjaGVja2xpc3QgY2hhbmdlcyBpbiBhIHNpbmdsZSByZXF1ZXN0LlxuICBjb25zdCBoYW5kbGVTYXZlRGFpbHlTeXN0ZW0gPSBhc3luYyAoKSA9PiB7XG4gICAgc2V0U2F2ZUxvYWRpbmcodHJ1ZSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaW5kUHJvc3BlY3RzVGFza3MgPVxuICAgICAgICBzZWN0aW9uc1N0YXRlLmZpbmQoKHNlY3Rpb24pID0+IHNlY3Rpb24ubmFtZSA9PT0gXCJGaW5kIFByb3NwZWN0c1wiKT8udGFza3MgPz8gW11cbiAgICAgIGNvbnN0IHNlbnRUYXNrSWQgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZChcbiAgICAgICAgKHRhc2spID0+IHRhc2submFtZSA9PT0gXCJGcmllbmQgUmVxdWVzdCAmIE1lc3NhZ2UgU2VudFwiXG4gICAgICApPy5pZFxuICAgICAgY29uc3QgYWNjZXB0ZWRUYXNrSWQgPSBmaW5kUHJvc3BlY3RzVGFza3MuZmluZCgodGFzaykgPT4gdGFzay5uYW1lID09PSBcIkFjY2VwdGVkXCIpPy5pZFxuICAgICAgY29uc3Qge290aGVyUHJvdmlkZXJ9ID0gcmVzb2x2ZVNvY2lhbFByb3ZpZGVycyhwcm92aWRlcnNTdGF0ZSlcblxuICAgICAgY29uc3QgcGVuZGluZ1NlbnRWYWx1ZSA9XG4gICAgICAgIHNlbnRUYXNrSWQgIT0gbnVsbCA/IHBlbmRpbmdDaGVja2xpc3RDaGFuZ2VzW3NlbnRUYXNrSWRdPy5udW1iZXJWYWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGVuZGluZ0FjY2VwdGVkVmFsdWUgPVxuICAgICAgICBhY2NlcHRlZFRhc2tJZCAhPSBudWxsID8gcGVuZGluZ0NoZWNrbGlzdENoYW5nZXNbYWNjZXB0ZWRUYXNrSWRdPy5udW1iZXJWYWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgY3VycmVudFNlbnRWYWx1ZSA9XG4gICAgICAgIHBlbmRpbmdTZW50VmFsdWUgIT09IHVuZGVmaW5lZCA/IHBlbmRpbmdTZW50VmFsdWUgOiBvdGhlclByb3ZpZGVyPy5zZW50ID8/IG51bGxcbiAgICAgIGNvbnN0IGN1cnJlbnRBY2NlcHRlZFZhbHVlID1cbiAgICAgICAgcGVuZGluZ0FjY2VwdGVkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHBlbmRpbmdBY2NlcHRlZFZhbHVlIDogb3RoZXJQcm92aWRlcj8uYWNjZXB0ZWQgPz8gbnVsbFxuICAgICAgY29uc3QgYmFzZU92ZXJhbGxTZW50ID1cbiAgICAgICAgdHlwZW9mIG90aGVyUHJvdmlkZXI/Lm92ZXJhbGxTZW50ID09PSBcIm51bWJlclwiID8gb3RoZXJQcm92aWRlci5vdmVyYWxsU2VudCA6IDBcbiAgICAgIGNvbnN0IGJhc2VPdmVyYWxsQWNjZXB0ZWQgPVxuICAgICAgICB0eXBlb2Ygb3RoZXJQcm92aWRlcj8ub3ZlcmFsbEFjY2VwdGVkID09PSBcIm51bWJlclwiID8gb3RoZXJQcm92aWRlci5vdmVyYWxsQWNjZXB0ZWQgOiAwXG5cbiAgICAgIC8vIG92ZXJhbGxTZW50L292ZXJhbGxBY2NlcHRlZCBhbHJlYWR5IGluY2x1ZGUgdG9kYXkncyBzYXZlZCB2YWx1ZXMsXG4gICAgICAvLyBzbyBzdWJ0cmFjdCB0b2RheSdzIG9yaWdpbmFsIEFQSSB2YWx1ZSB0byBhdm9pZCBkb3VibGUtY291bnRpbmcuXG4gICAgICBjb25zdCBvcmlnaW5hbERheVNlbnQgPSB0eXBlb2Ygb3RoZXJQcm92aWRlcj8uc2VudCA9PT0gXCJudW1iZXJcIiA/IG90aGVyUHJvdmlkZXIuc2VudCA6IDBcbiAgICAgIGNvbnN0IG9yaWdpbmFsRGF5QWNjZXB0ZWQgPVxuICAgICAgICB0eX
2386Blb2Ygb3RoZXJQcm92aWRlcj8uYWNjZXB0ZWQgPT09IFwibnVtYmVyXCIgPyBvdGhlclByb3ZpZGVyLmFjY2VwdGVkIDogMFxuXG4gICAgICBjb25zdCB0b3RhbFNlbnQgPSAoYmFzZU92ZXJhbGxTZW50IC0gb3JpZ2luYWxEYXlTZW50KSArIChjdXJyZW50U2VudFZhbHVlID8/IDApXG4gICAgICBjb25zdCB0b3RhbEFjY2VwdGVkID0gKGJhc2VPdmVyYWxsQWNjZXB0ZWQgLSBvcmlnaW5hbERheUFjY2VwdGVkKSArIChjdXJyZW50QWNjZXB0ZWRWYWx1ZSA/PyAwKVxuXG4gICAgICBpZiAodG90YWxBY2NlcHRlZCA+IHRvdGFsU2VudCkge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgT3ZlcmFsbCBBY2NlcHRlZCAoJHtiYXNlT3ZlcmFsbEFjY2VwdGVkfSkgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBPdmVyYWxsIFNlbnQgKCR7YmFzZU92ZXJhbGxTZW50fSkuYFxuICAgICAgICBzZXRGaW5kUHJvc3BlY3RzTWVzc2FnZSh7XG4gICAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICAgIHRleHQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCBTd2FsLmZpcmUoe1xuICAgICAgICAgIHRpdGxlOiBcIlZhbGlkYXRpb24gRXJyb3JcIixcbiAgICAgICAgICB0ZXh0OiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIk9LXCIsXG4gICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiMwMzczYjlcIixcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlbmRpbmdWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHBlbmRpbmdDaGVja2xpc3RDaGFuZ2VzKVxuICAgICAgY29uc3QgY29tcGFueU5hbWUgPSBDVVJFRU5UX0NPTVBBTllfTkFNRSB8fCBcInNpeHNpZ21hZnVubmVsc1wiXG5cbiAgICAgIGlmICghcGVuZGluZ1ZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzT3ZlcmFsbFZhbGlkYXRpb25FcnJvck1lc3NhZ2UoZmluZFByb3NwZWN0c01lc3NhZ2UpKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZmluZFByb3NwZWN0c01lc3NhZ2U/LnRleHQgfHwgYE92ZXJhbGwgQWNjZXB0ZWQgKCR7YmFzZU92ZXJhbGxBY2NlcHRlZH0pIHNob3VsZCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gT3ZlcmFsbCBTZW50ICgke2Jhc2VPdmVyYWxsU2VudH0pLmBcbiAgICAgICAgICBhd2FpdCBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6IFwiVmFsaWRhdGlvbiBFcnJvclwiLFxuICAgICAgICAgICAgdGV4dDogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiT0tcIixcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjMDM3M2I5XCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFN3YWwuZmlyZSh7XG4gICAgICAgICAgdGl0bGU6IFwiTm8gQ2hhbmdlc1wiLFxuICAgICAgICAgIHRleHQ6IFwiTm8gY2hlY2tsaXN0IGNoYW5nZXMgdG8gc2F2ZS5cIixcbiAgICAgICAgICBpY29uOiBcImluZm9cIixcbiAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJPS1wiLFxuICAgICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjMDM3M2I5XCIsXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXlsb2FkOiBDaGVja2xpc3RTYXZlUGF5bG9hZCA9IHtcbiAgICAgICAgZW50cnlEYXRlOiByZXNvbHZlQ2hlY2tsaXN0RW50cnlEYXRlKCksXG4gICAgICAgIHRpbWV6b25lOiBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUgfHwgXCJBc2lhL0tvbGthdGFcIixcbiAgICAgICAgdmFsdWVzOiBwZW5kaW5nVmFsdWVzLFxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcIkNIRUNLTElTVF9TQVZFIHJlcXVlc3Q6XCIsIHtcbiAgICAgICAgdXJsOiBQT1NUX1NBVkVfVEFTS19WQUxVRShjb21wYW55TmFtZSksXG4gICAgICAgIHBheWxvYWQsXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PHtzdWNjZXNzPzogYm9vbGVhbjsgbWVzc2FnZT86IHN0cmluZ30+KFxuICAgICAgICBQT1NUX1NBVkVfVEFTS19WQUxVRShjb21wYW55TmFtZSksXG4gICAgICAgIHBheWxvYWRcbiAgICAgIClcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0hFQ0tMSVNUX1NBVkUgcmVzcG9uc2U6XCIsIHJlc3BvbnNlPy5kYXRhKVxuXG4gICAgICBpZiAocmVzcG9uc2U/LmRhdGE/LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IFN3YWwuZmlyZSh7XG4gICAgICAgICAgdGl0bGU6IFwiU2F2ZSBGYWlsZWRcIixcbiAgICAgICAgICB0ZXh0OiByZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBzYXZlIGRhaWx5IHN5c3RlbS5cIixcbiAgICAgICAgICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiT0tcIixcbiAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiIzAzNzNiOVwiLFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0UGVuZGluZ0NoZWNrbGlzdENoYW5nZXMoe30pXG4gICAgICBhd2FpdCBmZXRjaENoZWNrbGlzdERhdGEoe2FmdGVyU2F2ZTogdHJ1ZX0pXG4gICAgICBhd2FpdCBTd2FsLmZpcmUoe1xuICAgICAgICB0aXRsZTogXCJTYXZlZCFcIixcbiAgICAgICAgdGV4dDogcmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgXCJEYWlseSBzeXN0ZW0gc2F2ZWQgc3VjY2Vzc2Z1bGx5LlwiLFxuICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiT0tcIixcbiAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiNmNzljM2FcIixcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0hFQ0tMSVNUX1NBVkUgZXJyb3I6XCIsIGVycj8ucmVzcG9uc2U/LmR
2386hdGEgfHwgZXJyPy5tZXNzYWdlIHx8IGVycilcbiAgICAgIGF3YWl0IFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIlNhdmUgRmFpbGVkXCIsXG4gICAgICAgIHRleHQ6IGVycj8ucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIHNhdmUgZGFpbHkgc3lzdGVtLlwiLFxuICAgICAgICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIk9LXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjMDM3M2I5XCIsXG4gICAgICB9KVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTYXZlTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBtYXhTZWxlY3RhYmxlRGF0ZSA9IGdldFVzZXJUaW1lWm9uZUJhc2VkQ3VycmVudERhdGUoKVxuICBjb25zdCBoYXNBZHZhbmNlZERhdGVGaWx0ZXIgPSAhIWZpbHRlcj8uc3RhcnREYXRlICYmICEhZmlsdGVyPy5lbmREYXRlXG4gIGNvbnN0IGlzSW5saW5lRGF0ZUZpbHRlckFjdGl2ZSA9IGlzQ3VzdG9tRGF0ZUZpbHRlckFjdGl2ZSAmJiAhaGFzQWR2YW5jZWREYXRlRmlsdGVyXG4gIGNvbnN0IGFjdGl2aXR5SGVhZGVyTGFiZWwgPSBidWlsZEFjdGl2aXR5SGVhZGVyTGFiZWwoc2VsZWN0ZWRSYW5nZSwgc2VsZWN0ZWREYXRlLCBmaWx0ZXIpXG4gIGNvbnN0IGZpbmRQcm9zcGVjdHNNZXRhID0gc2VjdGlvbk1ldGFbXCJGaW5kIFByb3NwZWN0c1wiXVxuICBjb25zdCBzdGFydENvbnZlcnNhdGlvbnNNZXRhID0gc2VjdGlvbk1ldGFbXCJTdGFydCBDb252ZXJzYXRpb25zXCJdXG4gIGNvbnN0IGJ1aWxkUmVsYXRpb25zaGlwc01ldGEgPSBzZWN0aW9uTWV0YVtcIkJ1aWxkIFJlbGF0aW9uc2hpcHNcIl1cbiAgY29uc3Qgc3RheUNvbm5lY3RlZE1ldGEgPSBzZWN0aW9uTWV0YVtcIlN0YXkgQ29ubmVjdGVkXCJdXG4gIGNvbnN0IGNvbW11bml0eU1ldGEgPSBzZWN0aW9uTWV0YVtcIkNvbW11bml0eVwiXVxuICBjb25zdCBzdWNjZXNzTWV0YSA9IHNlY3Rpb25NZXRhW1wiU3VjY2Vzc1wiXVxuICBjb25zdCB7ZmFjZWJvb2tQcm92aWRlciwgb3RoZXJQcm92aWRlcn0gPSByZXNvbHZlU29jaWFsUHJvdmlkZXJzKHByb3ZpZGVyc1N0YXRlKVxuICBjb25zdCBmYWNlYm9va0FjY2VwdGFuY2VSYXRlID0gZ2V0TGlmZXRpbWVBY2NlcHRhbmNlUmF0ZShmYWNlYm9va1Byb3ZpZGVyKVxuICBjb25zdCBvdGhlckFjY2VwdGFuY2VSYXRlID0gZ2V0TGlmZXRpbWVBY2NlcHRhbmNlUmF0ZShvdGhlclByb3ZpZGVyKVxuICAvLyBDb252ZW5pZW5jZSBoZWxwZXIgZm9yIHNlY3Rpb24gY29tcGxldGlvbiBwaWxsIHN0YXRlLlxuICBjb25zdCBpc1NlY3Rpb25Db21wbGV0ZSA9IChzZWN0aW9uTmFtZTogc3RyaW5nKSA9PlxuICAgIHNlY3Rpb25zU3RhdGUuZmluZCgoc2VjdGlvbikgPT4gc2VjdGlvbi5uYW1lID09PSBzZWN0aW9uTmFtZSk/LmFsbFRhc2tDb21wbGV0ZWQgPz8gZmFsc2VcblxuICByZXR1cm4gKFxuICAgIDxDb250ZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjaGVja2xpc3QtcGFnZVwiPlxuICAgICBcblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNoZWNrbGlzdC1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhlYWRlci10b3BcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2hlY2tsaXN0LWhlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgICA8aDE+IERhaWx5IFN5c3RlbTwvaDE+XG4gICAgICAgICAgICAgIDxwPkxvZyB0b2RheSdzIGFjdGl2aXR5LiBCdWlsZCBwcmVkaWN0YWJsZSBncm93dGguPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZS1maWx0ZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZGF0ZV9yYW5nZV9sYmxcIj5GaWx0ZXI6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPERhdGVSYW5nZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZT17c2VsZWN0ZWRSYW5nZX1cbiAgICAgICAgICAgICAgICBvblJhbmdlQ2hhbmdlPXtoYW5kbGVSYW5nZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBmaWx0ZXI9e2ZpbHRlcn1cbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXI9e2hhbmRsZUZpbHRlckNoYW5nZX1cbiAgICAgICAgICAgICAgICBpc1VzZXJUYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgcGxhblR5cGU9e251bGx9XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRSYW5nZT17aGFuZGxlUmFuZ2VDaGFuZ2V9XG4gICAgICAgICAgICAgICAgaXNEcm9wZG93bj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaXNPdmVyYWxsUmVxdWlyZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGlzRGF5UmVxdWlyZWQ9e3RydWV9XG4gICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGNvbC1tZC00IGNoZWNrbGlzdC1oZWFkZXItZGF0ZS1kaXNwbGF5ICR7XG4gICAgICAgICAgICAgICAgICBpc0lubGluZURhdGVGaWx0ZXJBY3RpdmUgPyBcImlzLWFjdGl2ZVwiIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIn19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgc3JjPVwiL21lZGlhL21pc2MvRGFpbHktc3lzdGVtLUhlYWRlci1jYWxlbmRlci5wbmdcIlxuICAgICAgICAgICAgICAgICAgYWx0PVwiY2FsZW5kYXJcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0ZS1waWNrZXItaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNEYXRlUGlja2VyT3Blbih0cnVlKX1cbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgcmVmPXtkYXRlUGlja2VyUmVmfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgI
2386HNlbGVjdGVkPXtzZWxlY3RlZERhdGV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hlY2tsaXN0RGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIG9wZW49e2lzRGF0ZVBpY2tlck9wZW59XG4gICAgICAgICAgICAgICAgICBvbklucHV0Q2xpY2s9eygpID0+IHNldElzRGF0ZVBpY2tlck9wZW4odHJ1ZSl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrT3V0c2lkZT17KCkgPT4gc2V0SXNEYXRlUGlja2VyT3BlbihmYWxzZSl9XG4gICAgICAgICAgICAgICAgICBvbkNhbGVuZGFyQ2xvc2U9eygpID0+IHNldElzRGF0ZVBpY2tlck9wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17REFURV9GT1JNQVRfTU1NTV9ERF9ZWVlZfVxuICAgICAgICAgICAgICAgICAgbWF4RGF0ZT17bWF4U2VsZWN0YWJsZURhdGV9XG4gICAgICAgICAgICAgICAgICByZWFkT25seVxuICAgICAgICAgICAgICAgICAgbG9jYWxlPVwiZW4tR0JcIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNoZWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgPERhaWx5QWN0aXZpdHlMb2dcbiAgICAgICAgICAgIGRhdGVMYWJlbD17YWN0aXZpdHlIZWFkZXJMYWJlbH1cbiAgICAgICAgICAgIGRhdGE9e2FjdGl2aXR5fVxuICAgICAgICAgICAgaW50ZWdyaXR5RGF5cz17aW50ZWdyaXR5RGF5c31cbiAgICAgICAgICAgIGludGVncml0eUNvbXBsZXRlZERheXM9e2ludGVncml0eUNvbXBsZXRlZERheXN9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIHtsb2FkaW5nICYmIDxkaXYgY2xhc3NOYW1lPVwiY2hlY2tsaXN0LWxvYWRpbmdcIj5Mb2FkaW5nIGNoZWNrbGlzdC4uLjwvZGl2Pn1cbiAgICAgICAgICB7ZXJyb3IgJiYgPGRpdiBjbGFzc05hbWU9XCJjaGVja2xpc3QtZXJyb3JcIj5FcnJvciBsb2FkaW5nIGNoZWNrbGlzdDoge2Vycm9yfTwvZGl2Pn1cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiam91cm5leS1mbG93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb3ctc3RlcFwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiL21lZGlhL21pc2MvZmluZC1wcm9zcGVjdHMucG5nXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJmaW5kLXByb3NwZWN0c1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiam91cm5leS1mbG93LWltZ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPntmaW5kUHJvc3BlY3RzTWV0YS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxvdy1hcnJvd1wiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9tZWRpYS9taXNjL0Fycm93LXJpZ2h0LnBuZ1wiIGFsdD1cImFycm93XCIgY2xhc3NOYW1lPVwicmlnaHQtYXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb3ctc3RlcFwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiL21lZGlhL21pc2Mvc3RhcnQtY29udmVyc2F0aW9uLnBuZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwic3RhcnQtY29udmVyc2F0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqb3VybmV5LWZsb3ctaW1nXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e3N0YXJ0Q29udmVyc2F0aW9uc01ldGEudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb3ctYXJyb3dcIj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9XCIvbWVkaWEvbWlzYy9BcnJvdy1yaWdodC5wbmdcIiBhbHQ9XCJhcnJvd1wiIGNsYXNzTmFtZT1cInJpZ2h0LWFycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbG93LXN0ZXBcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cIi9tZWRpYS9taXNjL2J1aWxkLXJlbGF0aW9uc2hpcHMucG5nXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJ
2386idWlsZC1yZWxhdGlvbnNoaXBzXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqb3VybmV5LWZsb3ctaW1nXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e2J1aWxkUmVsYXRpb25zaGlwc01ldGEudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb3ctYXJyb3dcIj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9XCIvbWVkaWEvbWlzYy9BcnJvdy1yaWdodC5wbmdcIiBhbHQ9XCJhcnJvd1wiIGNsYXNzTmFtZT1cInJpZ2h0LWFycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbG93LXN0ZXBcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cIi9tZWRpYS9taXNjL3N0YXktY29ubmVjdGVkLnBuZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwic3RheS1jb25uZWN0ZWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImpvdXJuZXktZmxvdy1pbWdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj57c3RheUNvbm5lY3RlZE1ldGEudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxvdy1hcnJvd1wiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9tZWRpYS9taXNjL0Fycm93LXJpZ2h0LnBuZ1wiIGFsdD1cImFycm93XCIgY2xhc3NOYW1lPVwicmlnaHQtYXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb3ctc3RlcFwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiL21lZGlhL21pc2MvQ29tbXVuaXR5LnBuZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiY29tbXVuaXR5XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqb3VybmV5LWZsb3ctaW1nXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+Q29tbXVuaXR5PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxvdy1hcnJvd1wiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9tZWRpYS9taXNjL0Fycm93LXJpZ2h0LnBuZ1wiIGFsdD1cImFycm93XCIgY2xhc3NOYW1lPVwicmlnaHQtYXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb3ctc3RlcCBzdWNjZXNzXCI+XG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiL21lZGlhL21pc2Mvc3VjY2Vzcy5wbmdcIiBhbHQ9XCJzdWNjZXNzXCIgY2xhc3NOYW1lPVwiam91cm5leS1mbG93LWltZ1wiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPntzdWNjZXNzTWV0YS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxGaW5kUHJvc3BlY3RzT3ZlcnZpZXdcbiAgICAgICAgICAgIG51bWJlcj17ZmluZFByb3NwZWN0c01ldGEubnVtYmVyfVxuICAgICAgICAgICAgdGl0bGU9e2ZpbmRQcm9zcGVjdHNNZXRhLnRpdGxlfVxuICAgICAgICAgICAgZmFjZWJvb2tEYXRhPXtmaW5kRGF0YX1cbiAgICAgICAgICAgIG90aGVyU29jaWFsRGF0YT17b3RoZXJTb2NpYWxEYXRhfVxuICAgICAgICAgICAgaXNDb21wbGV0ZT17aXNTZWN0aW9uQ29tcGxldGUoXCJGaW5kIFByb3NwZWN0c1wiKX1cbiAgICAgICAgICAgIG1lc3NhZ2U9e2ZpbmRQcm9zcGVjdHNNZXNzYWdlfVxuICAgICAgICAgICAgZmFjZWJvb2tBY2NlcHRhbmNlUmF0ZT17ZmFjZWJvb2tBY2NlcHRhbmNlUmF0ZX1cbiAgICAgICAgICAgIG90aGVyQWNjZXB0YW5jZVJhdGU9e290aGVyQWNjZXB0YW5jZVJhdGV9XG4gICAgICAgICAgICBvbkNhbXBhaWduQ2hhbmdlPXtoYW5kbGVDYW1wYWlnbkNoYW5nZX1cbiAgICAgICAgICAgIGlzSW5pdGlhbGl6ZWQ9eyFpc0luaXRpYWxpemluZ0NhbXBhaWdufVxuICAgICAgICAgICAgc2VsZWN0ZWRDYW1wYWlnbj17c2VsZWN0ZWRDYW1wYWlnbn1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9ucy1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPFN0YXJ0Q29udmVyc2F0aW9uc1NlY3Rpb25cbiAgICAgICAgICAgICAgICBudW1iZXI9e3N0YXJ0Q29udmVyc2F0aW9uc01ldGEubnVtYmVyfVxuICAgICAgICAgICAgICAgIHRpdGxlPXtzdGFydENvbnZlcnNhdGlvbnNNZXRhLnRpdGxlfVxuICAgICAgICAgICAgICAgIGl0ZW1zPXtzdGFydENvbnZlcnNhdGlvbkRhdGF9XG4gICAgICAgICAgICAgICAgaXNDb21wbGV0ZT17aXNTZWN0aW9uQ29tcGxldGUoXCJTdGFydCBDb252ZXJzYXRpb25zXCIpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q2hlY2tsaXN0U2VjdGlvblxuICAgICAgICAgICAgICAgIG51bWJlcj17YnVpbGRSZWxhdGlvbnNoaXBzTWV0YS5udW1iZXJ9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2J1aWxkUmVsYXRpb25zaGlwc01ldGEudGl0bGV9XG4gICAgICAgICAgICAgICAgcm93cz17cmVsYXRpb25zaGlwRGF0YX1cbiAgICAgICAgICAgICAgICBpc0NvbXBsZXRlPXtpc1NlY3Rpb25Db21wbGV0ZShcIkJ1aWxkIFJlbGF0aW9uc2hpcHNcIil9XG4gICAgICAgICAgICAgICAgaW5mbz1cIlRyYWNrIHlvdXIgZm9sbG93LXVwIGFuZCByZWNvbm5lY3Rpb25zLiBUaGlzIGlzIHdoZXJlIHByb3NwZWN0cyBiZWNvbWUgY3VzdG9tZXJzIGFuZCByZWZlcnJhbHMuXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxDaGVja2xpc3RTZWN0aW9uXG4gICAgICAgICAgICAgICAgbnVtYmVyPXtzdGF5Q29ubmVjdGVkTWV0YS5udW1iZXJ9XG4gICAgICAgICAgICAgICAgdGl0bGU9e3N0YXlDb25uZWN0ZWRNZXRhLnRpdGxlfVxuICAgICAgICAgICAgICAgIHJvd3M9e3N0YXlDb25uZWN0ZWREYXRhfVxuICAgICAgICAgICAgICAgIGlzQ29tcGxldGU9e2lzU2VjdGlvbkNvbXBsZXRlKFwiU3RheSBDb25uZWN0ZWRcIil9XG4gICAgICAgICAgICAgICAgaW5mbz1cIkxvZyB5b3VyIGRhaWx5IHBvc3RzLCBzdG9yaWVzLCBhbmQgZW5nYWdlbWVudC4gU3RheWluZyB2aXNpYmxlIGtlZXBzIHlvdSB0b3Agb2YgbWluZC5cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q2hlY2tsaXN0U2VjdGlvblxuICAgICAgICAgICAgICAgIG51bWJlcj17Y29tbXVuaXR5TWV0YS5udW1iZXJ9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2NvbW11bml0eU1ldGEudGl0bGV9XG4gICAgICAgICAgICAgICAgcm93cz17Y29tbXVuaXR5RGF0YX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhY2NlbnQtcmVkXCJcbiAgICAgICAgICAgICAgICBpc0NvbXBsZXRlPXtpc1NlY3Rpb25Db21wbGV0ZShcIkNvbW11bml0eVwiKX1cbiAgICAgICAgICAgICAgICBpbmZvPVwiVHJhY2sgeW91ciBncm91cCBhY3Rpdml0eS4gQW4gYWN0aXZlIGNvbW11bml0eSBhdHRyYWN0cyBuZXcgY3VzdG9tZXJzIGFuZCBrZWVwcyBleGlzdGluZyBvbmVzIGxveWFsLlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbnMtcm93XCI+XG4gICAgICAgICAgICA8Q2hlY2tsaXN0U2VjdGlvblxuICAgICAgICAgICAgICBudW1iZXI9e3N1Y2Nlc3NNZXRhLm51bWJlcn1cbiAgICAgICAgICAgICAgdGl0bGU9e3N1Y2Nlc3NNZXRhLnRpdGxlfVxuICAgICAgICAgICAgICByb3dzPXtncm93dGhEYXRhfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhY2NlbnQtYmx1ZVwiXG4gICAgICAgICAgICAgIGlzQ29tcGxldGU9e2lzU2VjdGlvbkNvbXBsZXRlKFwiU3VjY2Vzc1wiKX1cbiAgICAgICAgICAgICAgaW5mbz1cIkxvZyBldmVyeSBuZXcgY3VzdG9tZXIgYW5kIHJlZmVycmFsIHlvdSBlYXJuLiBUaGlzIGlzIHByb29mIHRoYXQgdGhlIHN5c3RlbSBpcyB3b3JraW5nLlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzYXZlLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mby1iYXJcIj5cbiAgICAgICAgICAgICAgRW50ZXIgPGI+MDwvYj4gaWYgY29tcGxldGVkIHdpdGggbm8gb3V0Y29tZS4gQmxhbmsgZmllbGRzIGRvIG5vdCBjb3VudCBhcyBjb21wbGV0ZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzYXZlLWJ1dHRvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzYXZlLWJ0blwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2F2ZURhaWx5U3lzdGVtfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzYXZlTG9hZGluZyB8fCAhYWxsb3dPdGhlclBsYXRmb3Jtc0VkaXR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7c2F2ZUxvYWRpbmcgP
2386yBcIlNhdmluZy4uLlwiIDogXCJTYXZlIERhaWx5IFN5c3RlbVwifVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIDxTdW1tYXJ5U2VjdGlvblxuICAgICAgICAgICAgcGVyZm9ybWFuY2U9e3N1bW1hcnlQZXJmfVxuICAgICAgICAgICAgZ3JvdXBzPXtzdW1tYXJ5R3JvdXBzfVxuICAgICAgICAgICAgaW50ZWdyaXR5RGF5cz17aW50ZWdyaXR5RGF5c31cbiAgICAgICAgICAgIGludGVncml0eUNvbXBsZXRlZERheXM9e2ludGVncml0eUNvbXBsZXRlZERheXN9XG4gICAgICAgICAgLz4gKi99XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHtzaG93UGxhbk1vZGFsICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1cGxvYWRfb3ZlcmxheVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGxhbi1zZWxlY3Rpb24tbW9kYWwgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAge3RyaWFsUGVyaW9kRXhwaXJlZCA/IChcbiAgICAgICAgICAgICAgPGgyPllvdXIge1RSSUFMX1BFUklPRF9EQVlTfS1EYXkgT25ib2FyZGluZyBFbmRlZDwvaDI+XG4gICAgICAgICAgICApIDogc3Vic2NyaXB0aW9uUGVyaW9kRXhwaXJlZCA/IChcbiAgICAgICAgICAgICAgPGgyPllvdXIgU3Vic2NyaXB0aW9uIHdhcyBFeHBpcmVkPC9oMj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxoMj5QbGVhc2UgU3Vic2NyaWJlPC9oMj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImN1c19wX3RleHRcIj5MZXTigJlzIGtlZXAgbWVldGluZyBuZXcgcGVvcGxlLjwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IGN1c19tb2RhbF9pbWdfYnRuIGZsZXgtd3JhcCBmbGV4LXNtLW5vd3JhcFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1sZy00IGNvbC1tZC00IGNvbC1zbS0xMiBjb2wteHMtMTIgbW9kYWwtaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9tZWRpYS9taXNjLzMwZGF5c0V4cGlyZWQucG5nXCIgYWx0PVwiUGxhbiBJbGx1c3RyYXRpb25cIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1sZy04IGNvbC1tZC04IGNvbC1zbS0xMiBjb2wteHMtMTIgbW9kYWwtb3B0aW9ucyBtcy0yIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGxhblNlbGVjdCh5ZWFybHlQcmljZSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwbGFuc19idG4gIHllYXJseV9wbGFuIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ29udGludWUgYXQgJDk3L21vbnRoXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICBKdXN0IHNoYXJlIHlvdXIgcmVzdWx0cyB0byB1bmxvY2sgb3ZlciA1MCUgb2ZmLlxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgVG9kYXkgb25seS4gTm90IGF2YWlsYWJsZSBsYXRlci5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImgxIHRleHQtZGFyayBmdy1ib2xkIGN1c19vcl90eHRfc2V0XCI+T1I8L3A+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQbGFuU2VsZWN0KG1vbnRobHlQcmljZSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwbGFuc19idG4gIG1vbnRobHlfcGxhbiBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICQxOTcvbW9udGhcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIE5vIHJlc3VsdHMgdmlkZW88c3BhbiBjbGFzc05hbWU9XCJxdWVzdGlvbi1tYXJrLXRhZ1wiPj88L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgIE5vIHdvcnJpZXMsIG9ubHkgJDE5Ny9tb250aC5cbiAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICB7YXV0aG9yaXRpZXMuaW5jbHVkZXMoc3lzdGVtQXV0aG9yaXRpZXMuQUxMT1dfT05FX1RJTUVfUEFZTUVOVF9GRUFUVVJFKSAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVBsYW5TZWxlY3QobGl2ZXBsYW4pfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwbGFuc19idG4gIHllYXJseV9wbGFuIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIENvbnRpbnVlICQxL01vbnRoXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHtpc09wZW4gJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVwbG9hZF9vdmVybGF5XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbF9wcmljaW5nXCIgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjdXNfbW9kYWxfY29udGVudF9wcmljZV9zc2ZcIj5cbiAgICAgICAgICAgICAgey8qIEJhY2sgYnV0dG9uICovfVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3NmLWJhY2staWNvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1BsYW5Nb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgICAgbmF2aWdhdGUoYC8ke0NVUkVFTlRfQ09NUEFOWV9OQU1FfS9jaGVja2xpc3RgKVxuICAgICAgICAgICAgICAgI
2386H19XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgICAgICB0b3A6IFwiMThweFwiLFxuICAgICAgICAgICAgICAgICAgbGVmdDogXCIxOHB4XCIsXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogXCIxOHB4XCIsXG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogXCIjMzMzXCIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjZweCAxOHB4XCIsXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiNnB4XCIsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcIiNmMWYxZjFcIixcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kID0gXCIjZTJlMmUyXCJcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kID0gXCIjZjFmMWYxXCJcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtYXJyb3ctbGVmdFwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY3VzX2NvbmZpcm1fdHh0X2hlYWRcIj5XaGF0IFlvdSBLZWVwICsgR2FpbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3NmLXBsYW5zLW1vbnRobHktY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPE1vbnRobHlJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgcHJpY2VQbGFuPXtwbGFufVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU3Vic2NyaXB0aW9uUGxhbj17c2VsZWN0ZWRTdWJzY3JpcHRpb25QbGFufVxuICAgICAgICAgICAgICAgICAgICAgIGFkZE9yZGVyPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgIGFkZENsaWNrRXZlbnQ9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgdmlkZW9FeGlzdHM9e3ZpZGVvRXhpc3RzfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge3Nob3dVcGxvYWRWaWRlbyAmJiAoXG4gICAgICAgIDxVcGxvYWRWaWRlb1xuICAgICAgICAgIHNlbGVjdGVkUGxhbj17c2VsZWN0ZWRQbGFufVxuICAgICAgICAgIHNlbGVjdGVkU3Vic2NyaXB0aW9uUGxhbkRldGFpbHM9e3N1YnNjcmlwdGlvblBsYW5EZXRhaWxzfVxuICAgICAgICAgIG9uT2tDbGljaz17aGFuZGxlU2hvd1N0ZXBzUG9wVXB9XG4gICAgICAgICAgb25CYWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VXBsb2FkVmlkZW8oZmFsc2UpXG4gICAgICAgICAgICBzZXRTaG93UGxhbk1vZGFsKHRydWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9Db250ZW50PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrbGlzdFBhZ2VcbiJdLCJuYW1lcyI6WyJheGlvcyIsIlN3YWwiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZU5hdmlnYXRlIiwiQ1VSRUVOVF9DT01QQU5ZX05BTUUiLCJEQVlfU1RSSU5HIiwiQ0hFQ0tfVVNFUl9WSURFT19FWElTVCIsIkdFVF9DSEVDS0xJU1QiLCJHRVRfQUxMX1NVQlNDUklQVElPTlBMQU5TIiwiR0VUX0NBTVBBSUdOU19CWV9DT01QQU5ZX1VTRVJfQU5EX0ZCX0FDQyIsIkxJRkVUSU1FX1NUUklORyIsIkxJVkVfUExBTiIsIk1PTlRITFlfUExBTl9QUklDRSIsIk1PTlRIX1NUUklORyIsIlBPU1RfU0FWRV9UQVNLX1ZBTFVFIiwic3lzdGVtQXV0aG9yaXRpZXMiLCJUUklBTF9QRVJJT0RfREFZUyIsIldFRUtfU1RSSU5HIiwiWUVBUkxZX1BMQU5fUFJJQ0UiLCJZRUFSX1NUUklORyIsIkRhdGVSYW5nZVNlbGVjdG9yIiwidXNlQXV0aCIsIkRBVEVfRk9STUFUX01NTU1fRERfWVlZWSIsImdldFVzZXJUaW1lWm9uZUJhc2VkQ3VycmVudERhdGUiLCJEYWlseUFjdGl2aXR5TG9nIiwiRmluZFByb3NwZWN0c092ZXJ2aWV3IiwiU3RhcnRDb252ZXJzYXRpb25zU2VjdGlvbiIsIkNoZWNrbGlzdFNlY3Rpb24iLCJDb250ZW50IiwiZGlzYWJsZVNwbGFzaFNjcmVlbiIsImVuYWJsZVNwbGFzaFNjcmVlbiIsImdldFVzZXJCeVRva2VuIiwiVXBsb2FkVmlkZW8iLCJNb250aGx5SW5mbyIsIkRhdGVQaWNrZXIiLCJyZWdpc3RlckxvY2FsZSIsImVuR0IiLCJpc092ZXJhbGxWYWxpZGF0aW9uRXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsInR5cGUiLCJ0ZXh0IiwiaXNWYWxpZFJhbmdlIiwidmFsdWUiLCJkZWZhdWx0U2VjdGlvbk1ldGEiLCJudW1iZXIiLCJ0aXRsZSIsIkNvbW11bml0eSIsIlN1Y2Nlc3MiLCJnZXRTZWN0aW9uTWV0YSIsInNlY3Rpb24iLCJmYWxsYmFja05hbWUiLCJmYWxsYmFjayIsInVuZGVmaW5lZCIsImRpc3BsYXlPcmRlciIsIm5hbWUiLCJnZXRQcm92aWRlclBsYXRmb3JtSWQiLCJwcm92aWRlciIsInBsYXRmb3JtSWQiLCJpZCIsImlzRmFjZWJvb2tQcm92aWRlciIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJyZXNvbHZlU29jaWFsUHJvdmlkZXJzIiwicHJvdmlkZXJzIiwiZmFjZWJvb2tQcm92aWRlciIsImZpbmQiLCJvdGhlclByb3ZpZGVyIiwiZ2V0TGlmZXRpbWVDb252ZXJzaW9uUmF0ZUNhcmQiLCJzZWN0aW9ucyIsInRvdGFsU2VjdGlvbnMiLCJsZW5ndGgiLCJjb21wbGV0ZWRTZWN0aW9ucyIsImZpbHRlciIsImFsbFRhc2tDb21wbGV0ZWQiLCJwZXJjZW50YWdlIiwiTWF0aCIsInJvdW5kIiwiY29uc29sZSIsImxvZyIsIm1hcCIsImZvcm11bGEiLCJyYXdQZXJjZW50YWdlIiwicm91bmRlZFBlcmNlbnRhZ2UiLCJjbGFzc05hbWUiLCJsYWJlbCIsImdldExpZmV0aW1lQ29udmVyc2lvblJhdGVEYXRhIiwidG9uZUNsYXNzTmFtZSIsImJhZGdlVGV4dCIsImdldEluaXRpYWxUb2dnbGVWYWx1ZXMiLCJyZWR1Y2UiLCJhY2MiLCJ0YXNrcyIsImZvckVhY2giLCJ0YXNrIiwiaW5wdXRUeXBlIiwiYm9vbGVhblZhbHVlIiwibm9ybWFsaXplQ2hlY2tsaXN0VmFsdWUiLCJ0cmltbWVkVmFsdWUiLCJ0cmltIiwibnVtZXJpY1ZhbHVlIiwiTnVtYmVyIiwiaXNOYU4iLCJmb3JtYXRDaGVja2xpc3RFbnRyeURhdGUiLCJkYXRlIiwieWVhciIsImdldEZ1bGxZZWFyIiwibW9udGgiLCJTdHJpbmciLCJnZXRNb250aCIsInBhZFN0YXJ0IiwiZGF5IiwiZ2V0RGF0ZSIsImhvdXJzIiwiZ2V0SG91cnMiLCJtaW51dGVzIiwiZ2V0TWludXRlcyIsImZvcm1hdENoZWNrbGlzdEZpbHRlckRhdGUiLCJwYXJzZUZpbHRlckRhdGUiLCJub3JtYWxpem
2386VkIiwicmVwbGFjZSIsInBhcnNlZCIsIkRhdGUiLCJnZXRUaW1lIiwiZm9ybWF0U2hvcnREYXRlIiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwiZm9ybWF0IiwiZm9ybWF0TW9udGhZZWFyIiwiZ2V0V2Vla1JhbmdlTGFiZWwiLCJnZXREYXkiLCJkaWZmIiwid2Vla1N0YXJ0Iiwic2V0RGF0ZSIsIndlZWtFbmQiLCJzYW1lTW9udGgiLCJzYW1lWWVhciIsInN0YXJ0RGF5IiwiZW5kRGF5IiwiYnVpbGRBY3Rpdml0eUhlYWRlckxhYmVsIiwic2VsZWN0ZWRSYW5nZSIsInNlbGVjdGVkRGF0ZSIsImhhc0FkdmFuY2VkRGF0ZUZpbHRlciIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJmcm9tRGF0ZSIsInRvRGF0ZSIsInRvRGF0ZVN0cmluZyIsImJ1aWxkVGFza1ZhbHVlVXBkYXRlIiwidGFza0lkIiwibm9ybWFsaXplZFZhbHVlIiwibnVtYmVyVmFsdWUiLCJwYXJzZWROdW1iZXJWYWx1ZSIsImdldERpc3BsYXlOdW1iZXJWYWx1ZSIsInJlc29sdmVDaGVja2xpc3RFbnRyeUlkIiwicGF5bG9hZCIsImNhbmRpZGF0ZUlkcyIsImVudHJ5SWQiLCJlbnRyeV9pZCIsImNhbmRpZGF0ZSIsImlzRmluaXRlIiwiZ2V0UHJvdmlkZXJUYXNrSWQiLCJraW5kIiwic2VudFRhc2tJZCIsImZyaWVuZFJlcXVlc3RTZW50VGFza0lkIiwiYWNjZXB0ZWRUYXNrSWQiLCJmcmllbmRSZXF1ZXN0QWNjZXB0ZWRUYXNrSWQiLCJjYWxjdWxhdGVMaWZldGltZUFjY2VwdGFuY2VSYXRlIiwib3ZlcmFsbFNlbnQiLCJvdmVyYWxsQWNjZXB0ZWQiLCJhY2NlcHRhbmNlUmF0ZSIsImdldExpZmV0aW1lQWNjZXB0YW5jZVJhdGUiLCJpc0ZhY2Vib29rIiwibG9nTGlmZXRpbWVBY2NlcHRhbmNlUmF0ZSIsInNlY3Rpb25OYW1lIiwicHJvdmlkZXJMYWJlbCIsInNlbnQiLCJhY2NlcHRlZCIsInNvdXJjZSIsImFwaVZhbHVlIiwibWFwVGFza3NUb1Jvd3MiLCJvbkF1dG9zYXZlIiwidG9nZ2xlVmFsdWVzIiwiYWxsb3dFZGl0IiwiY2hpbGRyZW5CeVBhcmVudCIsIk1hcCIsInJvb3RUYXNrcyIsInBhcmVudElkIiwicHVzaCIsInNpYmxpbmdzIiwiZ2V0Iiwic2V0Iiwic29ydFRhc2tzIiwiaXRlbXMiLCJzb3J0IiwiYSIsImIiLCJmbGF0dGVuVGFza3MiLCJkZXB0aCIsImZsYXRNYXAiLCJjaGlsZFJvd3MiLCJoYXNFeHBsaWNpdElucHV0IiwiaXNHcm91cExhYmVsIiwiaW5kZW50TGV2ZWwiLCJUb2dnbGVTd2l0Y2giLCJjaGVja2VkIiwib25DaGFuZ2UiLCJvblZhbHVlQ29tbWl0IiwibWFwUHJvdmlkZXJUb1Jvd3MiLCJvcHRpb25zIiwiY2FsY3VsYXRlZEFjY2VwdGFuY2VSYXRlIiwibGlmZXRpbWVBY2NlcHRhbmNlVG9uZUNsYXNzIiwiZW1wdHlNaXNzaW5nVmFsdWVzIiwiaXNFZGl0YWJsZSIsInJlc29sdmVkU2VudFZhbHVlIiwic2VudFZhbHVlT3ZlcnJpZGUiLCJyZXNvbHZlZEFjY2VwdGVkVmFsdWUiLCJhY2NlcHRlZFZhbHVlT3ZlcnJpZGUiLCJzZW50VmFsdWUiLCJhY2NlcHRlZFZhbHVlIiwiaXNPdGhlclBsYXRmb3Jtc1Byb3ZpZGVyIiwibm9ybWFsaXplUHJvdmlkZXJGaWVsZFZhbHVlIiwiZmllbGRWYWx1ZSIsInBhcnNlZFZhbHVlIiwidmFsaWRhdGVPdmVyYWxsQ29uc3RyYWludCIsIm5leHRWYWx1ZSIsImZpZWxkIiwiaXNWYWxpZCIsInBhcnNlZE5leHRWYWx1ZSIsImN1cnJlbnRTZW50VmFsdWUiLCJjdXJyZW50QWNjZXB0ZWRWYWx1ZSIsIm5leHRTZW50VmFsdWUiLCJuZXh0QWNjZXB0ZWRWYWx1ZSIsImJhc2VPdmVyYWxsU2VudCIsImJhc2VPdmVyYWxsQWNjZXB0ZWQiLCJvcmlnaW5hbERheVNlbnQiLCJvcmlnaW5hbERheUFjY2VwdGVkIiwidG90YWxTZW50IiwidG90YWxBY2NlcHRlZCIsIm9uTWVzc2FnZSIsInZhbGlkYXRlTmV4dFZhbHVlIiwidmFsaWRhdGlvbiIsIm9uVmFsdWVDaGFuZ2UiLCJkaXYiLCJwZXJjZW50IiwiaXNibHVlIiwiaXNPcmFuZ2UiLCJiZ0NvbG9yIiwic3R5bGUiLCJiYWNrZ3JvdW5kIiwidmFsdWVDbGFzc05hbWUiLCJpdGVtQ2xhc3NOYW1lIiwiY3JlYXRlU3VjY2Vzc0NvbnZlcnNpb25Sb3ciLCJjb252ZXJzaW9uUmF0ZSIsImNvbnZlcnRlZENvdW50IiwidG90YWxDb3VudCIsIm1hcFN1Y2Nlc3NUb1Jvd3MiLCJzb3J0ZWRUYXNrcyIsImhhc0NvbnZlcnNpb25UYXNrIiwic29tZSIsImxpZmV0aW1lQ29udmVyc2lvblJhdGUiLCJyb3dzIiwiaXNDb252ZXJzaW9uVGFzayIsImlucHV0Q2xhc3NOYW1lIiwibWFwQ2hhcnRUb0ludGVncml0eURheXMiLCJjaGFydFJl
2386c3BvbnNlIiwibWFwcGVkSW50ZWdyaXR5RGF5cyIsImVudHJ5RGF0ZSIsInNsaWNlIiwiaXRlbSIsImNvbXBsZXRlZCIsImNvbXBsZXRlZENvdW50IiwiaW5wdXQiLCJkaXNhYmxlZCIsImUiLCJ0YXJnZXQiLCJyZWFkT25seSIsInNwYW4iLCJDaGVja2xpc3RQYWdlIiwibmF2aWdhdGUiLCJjdXJyZW50VXNlciIsInNldEN1cnJlbnRVc2VyIiwiYXV0aCIsImF1dGhvcml0aWVzIiwiY29tcGFuaWVzIiwic2V0U2VsZWN0ZWRSYW5nZSIsInNldEZpbHRlciIsInNldFNlbGVjdGVkRGF0ZSIsImlzQ3VzdG9tRGF0ZUZpbHRlckFjdGl2ZSIsInNldElzQ3VzdG9tRGF0ZUZpbHRlckFjdGl2ZSIsImlzRGF0ZVBpY2tlck9wZW4iLCJzZXRJc0RhdGVQaWNrZXJPcGVuIiwiZGF0ZVBpY2tlclJlZiIsImFjdGl2aXR5Iiwic2V0QWN0aXZpdHkiLCJkb25lIiwicmVtYWluaW5nIiwidG90YWwiLCJzZWxlY3RlZENhbXBhaWduIiwic2V0U2VsZWN0ZWRDYW1wYWlnbiIsImlzSW5pdGlhbGl6aW5nQ2FtcGFpZ24iLCJzZXRJc0luaXRpYWxpemluZ0NhbXBhaWduIiwiZmluZFByb3NwZWN0c092ZXJ2aWV3UmVmIiwiZmluZERhdGEiLCJzZXRGaW5kRGF0YSIsIm90aGVyU29jaWFsRGF0YSIsInNldE90aGVyU29jaWFsRGF0YSIsInJlbGF0aW9uc2hpcERhdGEiLCJzZXRSZWxhdGlvbnNoaXBEYXRhIiwic3RheUNvbm5lY3RlZERhdGEiLCJzZXRTdGF5Q29ubmVjdGVkRGF0YSIsInN0YXJ0Q29udmVyc2F0aW9uRGF0YSIsInNldFN0YXJ0Q29udmVyc2F0aW9uRGF0YSIsImNvbW11bml0eURhdGEiLCJzZXRDb21tdW5pdHlEYXRhIiwiZ3Jvd3RoRGF0YSIsInNldEdyb3d0aERhdGEiLCJzZWN0aW9uTWV0YSIsInNldFNlY3Rpb25NZXRhIiwiaW50ZWdyaXR5RGF5cyIsInNldEludGVncml0eURheXMiLCJpbnRlZ3JpdHlDb21wbGV0ZWREYXlzIiwic2V0SW50ZWdyaXR5Q29tcGxldGVkRGF5cyIsInNldFRvZ2dsZVZhbHVlcyIsInNlY3Rpb25zU3RhdGUiLCJzZXRTZWN0aW9uc1N0YXRlIiwicHJvdmlkZXJzU3RhdGUiLCJzZXRQcm92aWRlcnNTdGF0ZSIsImFsbG93T3RoZXJQbGF0Zm9ybXNFZGl0Iiwic2V0QWxsb3dPdGhlclBsYXRmb3Jtc0VkaXQiLCJmaW5kUHJvc3BlY3RzTWVzc2FnZSIsInNldEZpbmRQcm9zcGVjdHNNZXNzYWdlIiwibG9hZGluZyIsInNldExvYWRpbmciLCJzYXZlTG9hZGluZyIsInNldFNhdmVMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsInBlbmRpbmdDaGVja2xpc3RDaGFuZ2VzIiwic2V0UGVuZGluZ0NoZWNrbGlzdENoYW5nZXMiLCJ5ZWFybHlQcmljZSIsIm1vbnRobHlQcmljZSIsImxpdmVwbGFuIiwic3Vic2NyaXB0aW9uUGxhbkRldGFpbHMiLCJzZXRTdWJzY3JpcHRpb25QbGFuRGV0YWlscyIsInNlbGVjdGVkU3Vic2NyaXB0aW9uUGxhbiIsInNldFNlbGVjdGVkU3Vic2NyaXB0aW9uUGxhbiIsInNob3dQbGFuTW9kYWwiLCJzZXRTaG93UGxhbk1vZGFsIiwic2VsZWN0ZWRQbGFuIiwic2V0U2VsZWN0ZWRQbGFuIiwiaXNPcGVuIiwic2V0SXNPcGVuIiwic2hvd1VwbG9hZFZpZGVvIiwic2V0U2hvd1VwbG9hZFZpZGVvIiwicGxhbiIsInNldFBsYW4iLCJ2aWRlb0V4aXN0cyIsInNldFZpZGVvRXhpc3RzIiwidHJpYWxQZXJpb2RFeHBpcmVkIiwic2V0VHJhaWxQZXJpb2RFeHBpcmVkIiwic3Vic2NyaXB0aW9uUGVyaW9kRXhwaXJlZCIsInNldFN1YnNjcmlwdGlvblBlcmlvZEV4cGlyZWQiLCJzdW1tYXJ5UGVyZiIsInNldFN1bW1hcnlQZXJmIiwiZGF5c0NvbXBsZXRlZCIsImRheXNUb3RhbCIsImF2Z0NvbXBsZXRpb24iLCJjb25zZWN1dGl2ZURheXMiLCJzdW1tYXJ5R3JvdXBzIiwic2V0U3VtbWFyeUdyb3VwcyIsImluaXRpYWxpemVSdW5uaW5nQ2FtcGFpZ24iLCJyZXN1bHQiLCJyZXNwb25zZURhdGEiLCJkYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwicnVubmluZ0NhbXBhaWduIiwiY2FtcGFpZ24iLCJjYW1wYWlnblN0YXR1cyIsInN0YXR1cyIsInNlbGVjdGVkIiwidXVpZCIsImhhbmRsZVJhbmdlQ2hhbmdlIiwicmFuZ2UiLCJoYW5kbGVGaWx0ZXJDaGFuZ2UiLCJuZXh0RmlsdGVyIiwiZnJlcXVlbmN5VHlwZSIsImFwaV90b2tlbiIsImluaXQiLCJyZXNwb25zZSIsInVzZXIiLCJpc1RyaWFsRXhwaXJlZCIsInRyaWFsUGVyaW9kQ29tcGxldGVkIiwiaXNTdWJzY3JwdGlvbkNvbXBsZXRlZCIsInN1YnNjcmlwdGlvblBlcmlvZENvbXBsZXRlZCIsImlzU3Vic2NyaXB0aW9uUGVyaW9kIiwic3Vic2NyaXB0aW9uUGVyaW9kIiwiZ2V0U3Vic2NyaXB0aW9uUGxhbkRldGFpbHMiLCJoYW5kbGVQbGFuU2VsZWN0IiwidGFyZ2V0ZWRQcmljZSIsImdldFBsYW5EZXRhaWxzQnlTZWxsUHJpY2UiLCJoYXNWaWRlbyIsImNoZWNrVXNlclZpZGVvRXhpc3QiLCJoYW5kbGVTaG93U3RlcHNQb3BVcCIsInBsYW5zIiwidGFyZ2V0UHJpY2UiLCJwcmljZUFzTnVtYmVyIiwicGFyc2VGbG9hdCIsIm1hdGNoZWRQbGFuIiwic2VsbFByaWNlIiwiaGFuZGxlQ2hlY2tsaXN0RGF0ZUNoYW5nZSIsImN1cnJlbnQiLCJzdGF0dXNOYW1lIiwibmFtZXMiLCJub3JtYWxpemVOdW1lcmljQXV0b3NhdmVWYWx1ZSIsInZhbGlkYXRlRmluZFByb3NwZWN0c0F1dG9zYXZlIiwicHJvdmlkZXJOYW1lIiwiZmluZFByb3NwZWN0c1Rhc2tzIiwibm9ybWFsaXplZFByb3ZpZGVyTmFtZSIsIm1hdGNoZWRQcm92aWRlciIsInNhbWVQbGF0Zm9ybUlkIiwic2FtZVByb3ZpZGVyTmFtZSIsInBlbmRpbmdTZW50VmFsdWUiLCJwZW5kaW5nQWNjZXB0ZWRWYWx1ZSIsIm5leHRTZW50IiwibmV4dEFjY2VwdGVkIiwiYnVpbGRDaGVja2xpc3RTdGF0ZUZyb21QYXlsb2FkIiwidG90YWxUYXNrIiwidGFza0NvbXBsZXRlZCIsImxlZnRUYXNrIiwibWF4Iiwic2VjdGlvbnNCeU5hbWUiLCJzbVByb3ZpZGVycyIsInNlbnRUYXNrIiwiYWNjZXB0ZWRUYXNrIiwiaGFuZGxlQ2hlY2tsaXN0QXV0b3NhdmUiLCJ0cmVhdFplcm9Bc0VtcHR5IiwiaW50ZWdyaXR5Q2hhcnREYXlzIiwiY2hhcnRUYXNrQ29tcGxldGVkQ291bnREYXkiLCJjb21wbGV0ZWREYXlzIiwiYnVpbGRSZWxhdGlvbnNoaXBUYXNrcyIsInN1Y2Nlc3NUYXNrcyIsInByb3NwZWN0c1Jlc3BvbmRlZFRhc2siLCJsaWZldGltZUNvbnZlcnNpb25SYXRlQ2FyZCIsInRhZ0NsYXNzIiwiZmV0Y2hDaGVja2xpc3REYXRhIiwic2lsZW50IiwiY29tcGFueU5hbWUiLCJicm93c2VyVGltZXpvbmUiLCJyZXNvbHZlZE9wdGlvbnMiLCJ0aW1lWm9uZSIsImNhbXBhaWduVXVpZCIsInJlcXVlc3RQYXlsb2FkIiwidXJsIiwicG9zdCIsImFmdGVyU2F2ZSIsInN1Y2Nlc3MiLCJlcnIiLCJoYW5kbGVDYW1wYWlnbkNoYW5nZSIsIm9wdGlvbiIsInRvZGF5RGF0ZSIsInJlc29sdmVDaGVja2xpc3RFbnRyeURhdGUiLCJhZHZhbmNlZEZpbHRlckRhdGUiLCJpc1ZhbGlkQXV0b3NhdmUiLCJ0YXNrVmFsdWVVcGRhdGUiLCJ0aW1lem9uZSIsInZhbHVlcyIsImlzT3RoZXJQbGF0Zm9ybXNBdXRvc2F2ZSIsIndpbmRvdyIsInNjcm9sbFRvIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsImlzSW5pdGlhbERhdGFMb2FkZWQiLCJsb2FkQ2hlY2tsaXN0UGFnZSIsImhhbmRsZVNhdmVEYWlseVN5c3RlbSIsImVycm9yTWVzc2FnZSIsImZpcmUiLCJpY29uIiwiY29uZmlybUJ1dHRvblRleHQiLCJ
2386jb25maXJtQnV0dG9uQ29sb3IiLCJwZW5kaW5nVmFsdWVzIiwiT2JqZWN0IiwibWF4U2VsZWN0YWJsZURhdGUiLCJpc0lubGluZURhdGVGaWx0ZXJBY3RpdmUiLCJhY3Rpdml0eUhlYWRlckxhYmVsIiwiZmluZFByb3NwZWN0c01ldGEiLCJzdGFydENvbnZlcnNhdGlvbnNNZXRhIiwiYnVpbGRSZWxhdGlvbnNoaXBzTWV0YSIsInN0YXlDb25uZWN0ZWRNZXRhIiwiY29tbXVuaXR5TWV0YSIsInN1Y2Nlc3NNZXRhIiwiZmFjZWJvb2tBY2NlcHRhbmNlUmF0ZSIsIm90aGVyQWNjZXB0YW5jZVJhdGUiLCJpc1NlY3Rpb25Db21wbGV0ZSIsImgxIiwicCIsIm9uUmFuZ2VDaGFuZ2UiLCJpc1VzZXJUYWJsZSIsInBsYW5UeXBlIiwiaXNEcm9wZG93biIsImlzT3ZlcmFsbFJlcXVpcmVkIiwiaXNEYXlSZXF1aXJlZCIsInBvc2l0aW9uIiwiaW1nIiwic3JjIiwiYWx0Iiwib25DbGljayIsInJlZiIsIm9wZW4iLCJvbklucHV0Q2xpY2siLCJvbkNsaWNrT3V0c2lkZSIsIm9uQ2FsZW5kYXJDbG9zZSIsImRhdGVGb3JtYXQiLCJtYXhEYXRlIiwibG9jYWxlIiwiZGF0ZUxhYmVsIiwiZmFjZWJvb2tEYXRhIiwiaXNDb21wbGV0ZSIsIm9uQ2FtcGFpZ25DaGFuZ2UiLCJpc0luaXRpYWxpemVkIiwiaW5mbyIsImJ1dHRvbiIsImgyIiwiYnIiLCJBTExPV19PTkVfVElNRV9QQVlNRU5UX0ZFQVRVUkUiLCJzdG9wUHJvcGFnYXRpb24iLCJ0b3AiLCJsZWZ0IiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwiY3Vyc29yIiwiY29sb3IiLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwib25Nb3VzZUVudGVyIiwiY3VycmVudFRhcmdldCIsIm9uTW91c2VMZWF2ZSIsImkiLCJwcmljZVBsYW4iLCJhZGRPcmRlciIsImFkZENsaWNrRXZlbnQiLCJzZWxlY3RlZFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzIiwib25Pa0NsaWNrIiwib25CYWNrIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs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

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.